Lokalisierung mit statischer Analyse verwalten.
npm install --save-dev i18n-extract Dieses Modul analysiert den Code statisch auf wichtige Verwendungen wie i18n.t('some.key') , um:
Z. B. dieses Modul funktioniert gut in Verbindung mit:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Analysieren Sie den code , um das Argument der Anrufe von i18n ( key ) zu extrahieren.
code sollte eine Zeichenfolge sein. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Analysieren Sie die files , um das Argument der Anrufe von i18n ( key ) zu extrahieren.
files können entweder eine Reihe von Zeichenfolgen oder eine Zeichenfolge sein. Sie können auch eine Globum verwenden. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : Der Name der internationalisierten String -Markerfunktion. Standardeinstellungen zu i18n .keyLoc : Eine Ganzzahl, die die Position des Schlüssels in den Argumenten angibt. Standardmäßig 0 . Negative Zahlen, z. B. -1 , geben eine Position in Bezug auf das Ende der Argumentliste an.parser : Enum geben den zu verwendenden Parser an, kann typescript oder flow sein. Standardmäßig flow .babelOptions : Ein Babel -Konfigurationsobjekt, mit dem benutzerdefinierte Transformationen oder Plugins vor dem Scannen nach i18n -Schlüssel angewendet werden können. Standardmäßig zu einer Konfiguration mit allen aktivierten Babylon -Plugins.Melden Sie die fehlenden Schlüssel. Diese Schlüssel sollten wahrscheinlich übersetzt werden.
locale sollte ein Objekt sein, das die Übersetzungen enthält.keysUsed sollten ein Array sein. Enthält die im Quellcode verwendeten Schlüssel. Es kann mit extractFromFiles unser extractFromCode abgerufen werden. import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Melden Sie den nicht verwendeten Schlüssel. Diese Schlüssel sollten wahrscheinlich entfernt werden.
locale sollte ein Objekt sein, das die Übersetzungen enthält.keysUsed sollten ein Array sein. Enthält die im Quellcode verwendeten Schlüssel. Es kann mit extractFromFiles unser extractFromCode abgerufen werden. import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Melden Sie den doppelten Schlüssel. Diese Schlüssel sollten wahrscheinlich gegenseitig gemeinsam sind. Die threshold beträgt 1, sie wird alle doppelten Übersetzungen melden.
locale sollte ein Objekt sein, das die Übersetzungen enthält.keysUsed sollten ein Array sein. Enthält die im Quellcode verwendeten Schlüssel. Es kann mit extractFromFiles unser extractFromCode abgerufen werden.options sollten ein Objekt sein. Sie können eine threshold bereitstellen, um die Anzahl des doppelten Werts zu ändern, bevor er dem Bericht hinzugefügt wird. 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',
* }];
*/Melden Sie einen dynamischen Schlüssel. Es ist wohl gefährlicher, den dynamischen Schlüssel zu verwenden. Sie können brechen.
locale sollte ein Objekt sein, das die Übersetzungen enthält.keysUsed sollten ein Array sein. Enthält die im Quellcode verwendeten Schlüssel. Es kann mit extractFromFiles unser extractFromCode abgerufen werden. import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Das Objekt flachen.
object sollte ein Objekt sein. 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',
* };
*/ Ausgabe einer neuen PO -Datei nur mit den in messages vorhandenen Nachrichten. Wenn eine Nachricht im poInput bereits vorhanden ist, behalten wir die Übersetzung. Wenn eine Nachricht nicht vorhanden ist, fügen wir eine neue leere Übersetzung hinzu.
messages sollten ein Array sein.poInput sollte eine Zeichenfolge sein.poOutput sollte eine Zeichenfolge sein. 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