
Security News
TypeScript is Porting Its Compiler to Go for 10x Faster Builds
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
typed-locale-keys
Advanced tools
Generate typescript code from locale keys JSON.
tlk codegen [INPUT_JSON_FILE] --output [DESTINATION_DIRECTORY]
package.json
Add to scripts
// package.json
{
"scripts": {
"pretest": "tlk codegen [ENTRY-DIRECTORY]/messages_en.json -o [OUTPUT-DIRECTORY]"
}
}
const localeKeys = LocaleKeys(i18nConf.t.bind(i18nConf));
default is double curly braces. To use single mode pass:
$ tlk codegen --singleCurlyBraces
or setting in configuration
package.json
:
// package.json
{
"typedLocaleKeys": {
"singleCurlyBraces" : true //optional field. default is false
}
}
input: messages_en.json
:
{
"common": {
"loggedIn": {
"message": "Hey, {{username}}, you have successfully logged in!"
}
},
"readingWarning": "{{reader}} reads message from {{writer}}"
}
output:
/* eslint-disable */
/* tslint:disable */
export type ILocaleKeys = {
common: {
loggedIn: {
/* common.loggedIn.message */
/* Hey, {username}, you have successfully logged in! */
message: (data: Record<'username', unknown>) => string;
};
};
/* readingWarning */
/* {reader} reads message from {writer} */
readingWarning: (data: Record<'reader' | 'writer', unknown>) => string;
};
import { pathgen } from 'object-path-generator';
const createProxyImpl = <R extends string>(
t = (...[k]: unknown[]) => k as R
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
) =>
pathgen<R>(undefined, (path, ...options) => {
const finalPath = path.split('.$value')[0];
return t(finalPath, ...options);
}) as unknown;
export function LocaleKeys<R extends string>(t: (...args: unknown[]) => R) {
return createProxyImpl(t) as ILocaleKeys;
}
Enable React integration by turning on the --reactHook
flag or setting it in the configuration file.
import { LocaleKeysProvider, useLocaleKeys } from './generated/localeKeys';
const App = () => {
const { t } = useI18n(); // Your translation function
return (
<LocaleKeysProvider translateFn={t}>
<ChildComponent />
</LocaleKeysProvider>
);
};
const ChildComponent = () => {
const localeKeys = useLocaleKeys();
return (
<div>
{localeKeys.common.loggedIn.message({ username: 'John' })}
</div>
);
};
To read the configuration file cosmiconfig is used so it supports files like
.typedlocalekeysrc.json
, typedlocalekeys.config.js
, package.json
etc.:
{
"typedLocaleKeys": {
"entries": {
"GalleryKeys": {
"source": "./locale/messages_en.json",
"output": "./dist/gallery"
},
"CommonKeys": "./locale/sub/messages_en.json" // for source only
},
"primaryOutput": "./dist", // fallback output (after cli's `--output` fallback)
"singleCurlyBraces" : false //optional field. default is false
"reactHook": false //optional field. default is false
}
}
$ tlk codegen --help
Generates a factory from the keys of a locale.json file
Positionals:
source Locale JSON file path [string]
Options:
--help Show help [boolean]
--version Show version number [boolean]
-o, --output Distribution directory for generated factory [string]
-n, --nested Should create nested object [boolean] [default: true]
-t, --translate Should add translate function. NOTE: will wrap value
with function [boolean] [default: true]
--showTranslations Add translations as function's comment
[boolean] [default: true]
-f, --functionName Generated function name
[string] [default: "LocaleKeys"]
--singleCurlyBraces Read interpolation arguments using single curly
instead of double [boolean]
--reactHook Generate React bindings (Provider and hook) [boolean]
FAQs
Generates typed object to provide translations
The npm package typed-locale-keys receives a total of 35 weekly downloads. As such, typed-locale-keys popularity was classified as not popular.
We found that typed-locale-keys demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.