Управление локализацией со статическим анализом.
npm install --save-dev i18n-extract Этот модуль анализирует код статически для ключевых использования, таких как i18n.t('some.key') , чтобы:
Например, этот модуль хорошо работает в сочетании с:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Проанализируйте code для извлечения аргумента вызовов i18n ( key ).
code должен быть строкой. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Распокачивайте files , чтобы извлечь аргумент вызовов i18n ( key ).
files могут быть либо массивом строк, либо строкой. Вы также можете использовать глобус. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : название интернационализированной функции строкового маркера. По умолчанию на i18n .keyLoc : целое число, указывающее положение ключа в аргументах. По умолчанию к 0 . Отрицательные числа, например, -1 , указывают позицию относительно конца списка аргументов.parser : Enum укажите анализатор для использования, может быть typescript или flow . По умолчанию flow .babelOptions : объект конфигурации Babel, позволяющий применять пользовательские преобразования или плагины перед сканированием для ключей i18N. По умолчанию в конфигурации со всеми плагинами Babylon включены.Сообщите о недостающих ключах. Эти ключи, вероятно, должны быть переведены.
locale должен быть объектом, содержащим переводы.keysUsed должны быть массивом. Содержит ключи, используемые в исходном коде. Его можно получить с помощью extractFromFiles нашим extractFromCode . import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Сообщите об неиспользованном ключе. Эти ключи, вероятно, должны быть удалены.
locale должен быть объектом, содержащим переводы.keysUsed должны быть массивом. Содержит ключи, используемые в исходном коде. Его можно получить с помощью extractFromFiles нашим extractFromCode . import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Сообщите дублированный ключ. Эти ключи, вероятно, должны быть взаимными. threshold по умолчанию составляет 1, он сообщит о любых дублированных переводах.
locale должен быть объектом, содержащим переводы.keysUsed должны быть массивом. Содержит ключи, используемые в исходном коде. Его можно получить с помощью extractFromFiles нашим extractFromCode .options должны быть объектом. Вы можете предоставить threshold свойство, чтобы изменить количество дублированного значения, прежде чем оно будет добавлено в отчет. 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',
* }];
*/Сообщите о любом динамическом ключе. Возможно, более опасно использовать динамический ключ. Они могут сломаться.
locale должен быть объектом, содержащим переводы.keysUsed должны быть массивом. Содержит ключи, используемые в исходном коде. Его можно получить с помощью extractFromFiles нашим extractFromCode . import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Сгладить объект.
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',
* };
*/ Выведите новый PO -файл только с сообщениями, представленными в messages . Если сообщение уже присутствует в poInput , мы сохраняем перевод. Если сообщение не присутствует, мы добавляем новый пустой перевод.
messages должны быть массивом.poInput должен быть строкой.poOutput должен быть струной. 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.
*/ Грань