Gerenciar localização com análise estática.
npm install --save-dev i18n-extract Este módulo analisa o código estaticamente para os principais usos, como i18n.t('some.key') , a fim de:
Por exemplo, este módulo funciona bem em conjunto com:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Analise o code para extrair o argumento das chamadas de i18n ( key ).
code deve ser uma string. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Analise os files para extrair o argumento das chamadas de i18n ( key ).
files podem ser uma matriz de strings ou uma string. Você também pode usar um glob. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : o nome da função de marcador de cordas internacionalizadas. Padrões para i18n .keyLoc : um número inteiro indicando a posição da chave nos argumentos. Padrões para 0 . Números negativos, por exemplo, -1 , indicam uma posição em relação ao final da lista de argumentos.parser : enum indicam que o analisador usa, pode ser typescript ou flow . Padrões para flow .babelOptions : Um objeto de configuração de Babel para permitir a aplicação de transformações ou plug -ins personalizados antes de digitalizar as teclas I18N. O padrão é uma configuração com todos os plug -ins Babylon ativados.Relate as chaves que faltavam. Essas chaves provavelmente devem ser traduzidas.
locale deve ser um objeto que contém as traduções.keysUsed deve ser uma matriz. Contém as chaves usadas no código -fonte. Ele pode ser recuperado com extractFromFiles nosso extractFromCode . import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Relate a chave não utilizada. Essas chaves provavelmente devem ser removidas.
locale deve ser um objeto que contém as traduções.keysUsed deve ser uma matriz. Contém as chaves usadas no código -fonte. Ele pode ser recuperado com extractFromFiles nosso extractFromCode . import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Relate a chave duplicada. Essas chaves provavelmente devem ser mutualizadas. O threshold padrão é 1, ele relatará qualquer tradução duplicada.
locale deve ser um objeto que contém as traduções.keysUsed deve ser uma matriz. Contém as chaves usadas no código -fonte. Ele pode ser recuperado com extractFromFiles nosso extractFromCode .options devem ser um objeto. Você pode fornecer uma propriedade threshold para alterar o número de valor duplicado antes de ser adicionado ao relatório. 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',
* }];
*/Relate qualquer chave dinâmica. É indiscutivelmente mais perigoso usar a chave dinâmica. Eles podem quebrar.
locale deve ser um objeto que contém as traduções.keysUsed deve ser uma matriz. Contém as chaves usadas no código -fonte. Ele pode ser recuperado com extractFromFiles nosso extractFromCode . import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Achate o objeto.
object deve ser um 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',
* };
*/ Exigam um novo arquivo PO com apenas as mensagens presentes nas messages . Se uma mensagem já estiver presente no poInput , mantemos a tradução. Se uma mensagem não estiver presente, adicionamos uma nova tradução vazia.
messages devem ser uma matriz.poInput deve ser uma string.poOutput deve ser uma 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