Administre la localización con análisis estático.
npm install --save-dev i18n-extract Este módulo analiza el código estáticamente para uso clave, como i18n.t('some.key') , para:
Por ejemplo, este módulo funciona bien junto con:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Analice el code para extraer el argumento de las llamadas de i18n ( key ).
code debe ser una cadena. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Analice los files para extraer el argumento de las llamadas de i18n ( key ).
files pueden ser una matriz de cadenas o una cadena. También puedes usar un global. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : el nombre de la función de marcador de cadena internacionalizada. El valor predeterminado a i18n .keyLoc : un entero que indica la posición de la clave en los argumentos. El valor predeterminado es 0 . Los números negativos, por ejemplo, -1 , indican una posición relativa al final de la lista de argumentos.parser : enum indica que el analizador puede usar, puede ser typescript o flow . Predeterminado se flow .babelOptions : un objeto de configuración de Babel para permitir la aplicación de transformaciones o complementos personalizados antes de escanear para las teclas I18N. El valor predeterminado es una configuración con todos los complementos de Babilonia habilitados.Informe las claves que faltan. Esas claves probablemente deberían traducirse.
locale debe ser un objeto que contenga las traducciones.keysUsed debe ser una matriz. Contiene las claves utilizadas en el código fuente. Se puede recuperar con extractFromFiles nuestro extractFromCode . import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Informe la clave no utilizada. Esas llaves probablemente deberían eliminarse.
locale debe ser un objeto que contenga las traducciones.keysUsed debe ser una matriz. Contiene las claves utilizadas en el código fuente. Se puede recuperar con extractFromFiles nuestro extractFromCode . import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Informe la clave duplicada. Esas claves probablemente deberían ser mutualizadas. El threshold predeterminado es 1, informará cualquier traducción duplicada.
locale debe ser un objeto que contenga las traducciones.keysUsed debe ser una matriz. Contiene las claves utilizadas en el código fuente. Se puede recuperar con extractFromFiles nuestro extractFromCode .options deben ser un objeto. Puede proporcionar una propiedad threshold para cambiar el número de valor duplicado antes de que se agregue al informe. 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',
* }];
*/Informe cualquier clave dinámica. Podría decirse que es más peligroso usar la clave dinámica. Pueden romperse.
locale debe ser un objeto que contenga las traducciones.keysUsed debe ser una matriz. Contiene las claves utilizadas en el código fuente. Se puede recuperar con extractFromFiles nuestro extractFromCode . import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Aplanar el objeto.
object debe ser un objeto. 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',
* };
*/ Excelente un nuevo archivo PO con solo los mensajes presentes en messages . Si un mensaje ya está presente en el poInput , mantenemos la traducción. Si un mensaje no está presente, agregamos una nueva traducción vacía.
messages deben ser una matriz.poInput debe ser una cadena.poOutput debe ser una cadena. 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