Kelola lokalisasi dengan analisis statis.
npm install --save-dev i18n-extract Modul ini menganalisis kode secara statis untuk penggunaan utama, seperti i18n.t('some.key') , untuk:
Misalnya modul ini bekerja dengan baik dalam hubungannya dengan:
marker: 'polyglot.t', )marker: 'i18n', ) i18n ( 'key.static' ) i18n ( 'key.' + 'concat' ) i18n ( `key.template` ) i18n ( `key. ${ dynamic } ` ) /* i18n-extract key.comment */ Parse code untuk mengekstrak argumen panggilan i18n ( key ).
code harus berupa string. import { extractFromCode } from 'i18n-extract' ;
const keys = extractFromCode ( "const followMe = i18n('b2b.follow');" , {
marker : 'i18n' ,
} ) ;
// keys = ['b2b.follow'] Parsen files untuk mengekstrak argumen panggilan i18n ( key ).
files dapat berupa array string atau string. Anda juga dapat menggunakan glob. import { extractFromFiles } from 'i18n-extract' ;
const keys = extractFromFiles ( [
'*.jsx' ,
'*.js' ,
] , {
marker : 'i18n' ,
} ) ;marker : Nama fungsi penanda string internasionalisasi. Default ke i18n .keyLoc : Integer yang menunjukkan posisi kunci dalam argumen. Default ke 0 . Angka negatif, misalnya, -1 , menunjukkan posisi relatif terhadap akhir daftar argumen.parser : Enum menunjukkan parser untuk digunakan, dapat typescript atau flow . Default untuk flow .babelOptions : Objek konfigurasi babel untuk memungkinkan penerapan transformasi atau plugin khusus sebelum pemindaian untuk kunci i18n. Default ke konfigurasi dengan semua plugin Babylon diaktifkan.Laporkan kunci yang hilang. Kunci -kunci itu mungkin harus diterjemahkan.
locale harus menjadi objek yang berisi terjemahan.keysUsed harus menjadi array. Berisi kunci yang digunakan dalam kode sumber. Ini dapat diambil dengan extractFromFiles extractFromCode kami. import { findMissing } from 'i18n-extract' ;
const missing = findMissing ( {
key1 : 'key 1' ,
} , [ 'key1' , 'key2' ] ) ;
/**
* missing = [{
* type: 'MISSING',
* key: 'key2',
* }];
*/ Laporkan kunci yang tidak digunakan. Kunci -kunci itu mungkin harus dihapus.
locale harus menjadi objek yang berisi terjemahan.keysUsed harus menjadi array. Berisi kunci yang digunakan dalam kode sumber. Ini dapat diambil dengan extractFromFiles extractFromCode kami. import { findUnused } from 'i18n-extract' ;
const unused = findUnused ( {
key1 : 'key 1' ,
key2 : 'key 2' ,
} , [ 'key1' ] ) ;
/**
* unused = [{
* type: 'UNUSED',
* key: 'key2',
* }];
*/ Laporkan kunci yang digandakan. Kunci -kunci itu mungkin harus di -mutualisasi. threshold default adalah 1, itu akan melaporkan setiap terjemahan yang digandakan.
locale harus menjadi objek yang berisi terjemahan.keysUsed harus menjadi array. Berisi kunci yang digunakan dalam kode sumber. Ini dapat diambil dengan extractFromFiles extractFromCode kami.options harus menjadi objek. Anda dapat memberikan properti threshold untuk mengubah jumlah nilai duplikat sebelum ditambahkan ke laporan. 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',
* }];
*/Laporkan setiap kunci dinamis. Bisa dibilang lebih berbahaya untuk menggunakan kunci dinamis. Mereka mungkin pecah.
locale harus menjadi objek yang berisi terjemahan.keysUsed harus menjadi array. Berisi kunci yang digunakan dalam kode sumber. Ini dapat diambil dengan extractFromFiles extractFromCode kami. import { forbidDynamic } from 'i18n-extract' ;
const forbidDynamic = forbidDynamic ( { } , [ 'key.*' ] ) ;
/**
* forbidDynamic = [{
* type: 'FORBID_DYNAMIC',
* key: 'key.*',
* }];
*/Ratakan objek.
object harus menjadi objek. 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',
* };
*/ Keluarkan file PO baru dengan hanya pesan yang ada dalam messages . Jika pesan sudah ada di poInput , kami menyimpan terjemahannya. Jika pesan tidak ada, kami menambahkan terjemahan kosong baru.
messages harus berupa array.poInput harus berupa string.poOutput harus berupa 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