Product
Introducing SSO
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
i18n-extract
Advanced tools
Readme
Manage localization with static analysis.
npm install --save-dev i18n-extract
This module analyses code statically for key usages, such as i18n.t('some.key')
, in order to:
E.g. This module works well in conjunction with:
marker: 'polyglot.t',
)marker: 'i18n',
)i18n('key.static')
i18n('key.' + 'concat')
i18n(`key.template`)
i18n(`key.${dynamic}`)
/* i18n-extract key.comment */
Parse the code
to extract the argument of calls of i18n(key
).
code
should be a string.import {extractFromCode} from 'i18n-extract';
const keys = extractFromCode("const followMe = i18n('b2b.follow');", {
marker: 'i18n',
});
// keys = ['b2b.follow']
Parse the files
to extract the argument of calls of i18n(key
).
files
can be either an array of strings or a string. You can also use a glob.import {extractFromFiles} from 'i18n-extract';
const keys = extractFromFiles([
'*.jsx',
'*.js',
], {
marker: 'i18n',
});
marker
: The name of the internationalized string marker function. Defaults to i18n
.keyLoc
: An integer indicating the position of the key in the arguments. Defaults to 0
. Negative numbers, e.g., -1
, indicate a position relative to the end of the argument list.parser
: Enum indicate the parser to use, can be typescript
or flow
. Defaults to flow
.babelOptions
: A Babel configuration object to allow applying custom transformations or plugins before scanning for i18n keys. Defaults to a config with all babylon plugins enabled.Report the missing keys. Those keys should probably be translated.
locale
should be a object containing the translations.keysUsed
should be an array. Containes the keys used in the source code.
It can be retrieve with extractFromFiles
our extractFromCode
.import {findMissing} from 'i18n-extract';
const missing = findMissing({
key1: 'key 1',
}, ['key1', 'key2']);
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/
Report the unused key. Those keys should probably be removed.
locale
should be a object containing the translations.keysUsed
should be an array. Containes the keys used in the source code.
It can be retrieve with extractFromFiles
our extractFromCode
.import {findUnused} from 'i18n-extract';
const unused = findUnused({
key1: 'key 1',
key2: 'key 2',
}, ['key1']);
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/
Report the duplicated key. Those keys should probably be mutualized.
The default threshold
is 1, it will report any duplicated translations.
locale
should be a object containing the translations.keysUsed
should be an array. Containes the keys used in the source code.
It can be retrieve with extractFromFiles
our extractFromCode
.options
should be an object. You can provide a threshold
property to change the number of duplicated value before it's added to the report.import {findDuplicated} from 'i18n-extract';
const duplicated = findDuplicated({
key1: 'Key 1',
key2: 'Key 2',
key3: 'Key 2',
});
/**
* unused = [{
* type: 'DUPLICATED',
* keys: [
* 'key2',
* 'key3',
* ],
* value: 'Key 2',
* }];
*/
Report any dynamic key. It's arguably more dangerous to use dynamic key. They may break.
locale
should be a object containing the translations.keysUsed
should be an array. Containes the keys used in the source code.
It can be retrieve with extractFromFiles
our extractFromCode
.import {forbidDynamic} from 'i18n-extract';
const forbidDynamic = forbidDynamic({}, ['key.*']);
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/
Flatten the object.
object
should be a object.import {flatten} from 'i18n-extract';
const flattened = flatten({
key2: 'Key 2',
key4: {
key41: 'Key 4.1',
key42: {
key421: 'Key 4.2.1',
},
},
});
/**
* flattened = {
* key2: 'Key 2',
* 'key4.key41': 'Key 4.1',
* 'key4.key42.key421': 'Key 4.2.1',
* };
*/
Output a new po file with only the messages present in messages
.
If a message is already present in the poInput
, we keep the translation.
If a message is not present, we add a new empty translation.
messages
should be an array.poInput
should be a string.poOutput
should be a string.import {mergeMessagesWithPO} from 'i18n-extract';
const messages = ['Message 1', 'Message 2'];
mergeMessagesWithPO(messages, 'messages.po', 'messages.output.po');
/**
* Will output :
* > messages.output.po has 812 messages.
* > We have added 7 messages.
* > We have removed 3 messages.
*/
MIT
FAQs
Manage localization of ES6 code with static analysis
The npm package i18n-extract receives a total of 6,517 weekly downloads. As such, i18n-extract popularity was classified as popular.
We found that i18n-extract demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.
Product
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.