Gérez la localisation avec une analyse statique.
npm install --save-dev i18n-extract Ce module analyse le code statiquement pour les usages clés, tels que i18n.t('some.key') , afin de:
Par exemple, ce module fonctionne bien en conjonction avec:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Analyser le code pour extraire l'argument des appels de i18n ( key ).
code doit être une chaîne. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Analyser les files pour extraire l'argument des appels de I18n ( key ).
files peuvent être un tableau de chaînes ou une chaîne. Vous pouvez également utiliser un globe. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : le nom de la fonction de marqueur de chaîne internationalisée. Par défaut est i18n .keyLoc : un entier indiquant la position de la clé dans les arguments. Par défaut est 0 . Les nombres négatifs, par exemple, -1 , indiquent une position relative à la fin de la liste des arguments.parser : ENUM indique que l'analyseur à utiliser peut être typescript ou flow . Par défaut se flow .babelOptions : un objet de configuration Babel pour permettre l'application de transformations ou de plugins personnalisés avant de scanner des touches i18n. Par défaut, une configuration avec tous les plugins Babylon activés.Signaler les clés manquantes. Ces clés devraient probablement être traduites.
locale doivent être un objet contenant les traductions.keysUsed doit être un tableau. Contrôle les clés utilisées dans le code source. Il peut être récupéré avec extractFromFiles nos extractFromCode . import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Signaler la clé inutilisée. Ces clés devraient probablement être supprimées.
locale doivent être un objet contenant les traductions.keysUsed doit être un tableau. Contrôle les clés utilisées dans le code source. Il peut être récupéré avec extractFromFiles nos extractFromCode . import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Signaler la clé dupliquée. Ces clés devraient probablement être mutualisées. Le threshold par défaut est 1, il rapportera toutes les traductions dupliquées.
locale doivent être un objet contenant les traductions.keysUsed doit être un tableau. Contrôle les clés utilisées dans le code source. Il peut être récupéré avec extractFromFiles nos extractFromCode .options doivent être un objet. Vous pouvez fournir une propriété threshold pour modifier le nombre de valeur dupliquée avant qu'elle ne soit ajoutée au rapport. 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',
* }];
*/Signaler toute clé dynamique. Il est sans doute plus dangereux d'utiliser une clé dynamique. Ils peuvent se casser.
locale doivent être un objet contenant les traductions.keysUsed doit être un tableau. Contrôle les clés utilisées dans le code source. Il peut être récupéré avec extractFromFiles nos extractFromCode . import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Aplatir l'objet.
object doit être un objet. 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',
* };
*/ Sortez un nouveau fichier PO avec uniquement les messages présents dans messages . Si un message est déjà présent dans le poInput , nous gardons la traduction. Si un message n'est pas présent, nous ajoutons une nouvelle traduction vide.
messages doivent être un tableau.poInput doit être une chaîne.poOutput devrait être une chaîne. 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