Format string pesan ICU dengan nomor, tanggal, jamak, dan pilih placeholder untuk membuat pesan yang terlokalisasi.
Paket ini bertujuan untuk menyediakan cara bagi Anda untuk mengelola dan memformat pesan string aplikasi JavaScript Anda menjadi string yang terlokalisasi untuk orang yang menggunakan aplikasi Anda. Anda dapat menggunakan paket ini di browser dan di server melalui node.js.
Implementasi ini didasarkan pada proposal Strawman, tetapi ada beberapa tempat implementasi ini menyimpang.
CATATAN: API IntlMessageFormat ini dapat berubah agar tetap sinkron dengan ECMA-402, tetapi paket ini akan mengikuti SEMVER.
Pesan disediakan ke dalam konstruktor sebagai pesan String , atau objek AST pra-pangkar.
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ; message string diuraikan, kemudian disimpan secara internal dalam bentuk yang dikompilasi yang dioptimalkan untuk metode format() untuk menghasilkan string yang diformat untuk ditampilkan kepada pengguna.
var output = msg . format ( values ) ;Contoh yang sangat umum adalah memformat pesan yang memiliki angka dengan label jamak. Dengan paket ini Anda dapat memastikan bahwa string diformat dengan benar untuk lokal seseorang, misalnya:
var MESSAGES = {
'en-US' : {
NUM_PHOTOS : 'You have {numPhotos, plural, ' +
'=0 {no photos.}' +
'=1 {one photo.}' +
'other {# photos.}}'
} ,
'es-MX' : {
NUM_PHOTOS : 'Usted {numPhotos, plural, ' +
'=0 {no tiene fotos.}' +
'=1 {tiene una foto.}' +
'other {tiene # fotos.}}'
}
} ;
var output ;
var enNumPhotos = new IntlMessageFormat ( MESSAGES [ 'en-US' ] . NUM_PHOTOS , 'en-US' ) ;
output = enNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "You have 1,000 photos."
var esNumPhotos = new IntlMessageFormat ( MESSAGES [ 'es-MX' ] . NUM_PHOTOS , 'es-MX' ) ;
output = esNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "Usted tiene 1,000 fotos."Sintaks pesan yang digunakan paket ini bukan milik, pada kenyataannya itu adalah sintaks pesan standar umum yang bekerja di seluruh bahasa pemrograman dan salah satu yang akrab dengan penerjemah profesional. Paket ini menggunakan sintaks pesan ICU dan berfungsi untuk semua bahasa CLDR yang memiliki aturan pluralisasi yang ditentukan.
Menggunakan Standar Industri: Sintaks Pesan ICU dan Data Lokal CLDR.
Mendukung argumen pesan jamak , pilih , dan selectordinal .
Memformat nomor dan tanggal/waktu dalam pesan menggunakan Intl.NumberFormat dan Intl.DateTimeFormat , masing -masing.
Dioptimalkan untuk panggilan berulang ke metode IntlMessageFormat format() .
Mendukung mendefinisikan gaya/opsi format khusus.
Mendukung urutan pelarian untuk chars sintaks pesan, misalnya: "\{foo\}" akan output: "{foo}" dalam output yang diformat alih -alih menafsirkannya sebagai argumen foo .
Intl modern Paket ini mengasumsikan bahwa objek global Intl ada di runtime. Intl hadir di semua browser modern (IE11+) dan Node (dengan ICU penuh). Metode Intl yang kami andalkan adalah:
Intl.NumberFormat untuk pemformatan angka (dapat dipolik menggunakan intl.js)Intl.DateTimeFormat untuk pemformatan waktu tanggal (dapat dipolik menggunakan intl.js)Intl.PluralRules untuk format jamak/ordinal (dapat dipoles menggunakan intl-pluralrules) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > Hanya require() paket ini:
var IntlMessageFormat = require ( 'intl-messageformat' ) ;Catatan: Node Anda harus menyertakan ICU lengkap
IntlMessageFormat Untuk membuat pesan untuk memformat, gunakan konstruktor IntlMessageFormat . Konstruktor mengambil tiga parameter:
Pesan - {String | AST} - Pesan String (atau AST pra -pars) yang berfungsi sebagai pola pemformatan.
Lokal - {String | String []} - String dengan tag bahasa BCP 47, atau array dari string tersebut. Jika Anda tidak menyediakan lokal, lokal default akan digunakan. Ketika berbagai daerah disediakan, setiap item dan lokal leluhurnya diperiksa dan yang pertama dengan data lokal terdaftar dikembalikan. Lihat: Resolusi lokal untuk lebih jelasnya.
[Format] - {Object} - Objek opsional dengan opsi yang ditentukan pengguna untuk gaya format.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat menggunakan Intl.NumberFormat.supportedLocalesOf() untuk menentukan data lokal mana yang akan digunakan berdasarkan nilai locales yang diteruskan ke konstruktor. Hasil dari proses resolusi ini dapat ditentukan dengan memanggil metode prototipe resolvedOptions() .
resolvedOptions() Metode ini mengembalikan objek dengan nilai opsi yang diselesaikan selama pembuatan instance. Saat ini hanya berisi properti locale ; Inilah contohnya:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US" Perhatikan bagaimana lokal yang ditentukan adalah nilai semua kasus rendah: "en-us" , tetapi diselesaikan dan dinormalisasi menjadi: "en-US" .
format(values) Setelah pesan dibuat, memformat pesan dilakukan dengan memanggil metode format() pada instance dan memberikan kumpulan values :
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."Catatan: Nilai harus disediakan untuk setiap argumen dalam pola pesan contohnya dibangun.
Tentukan gaya format khusus berguna Anda perlu menyediakan serangkaian opsi ke formatter yang mendasarinya; misalnya, mengeluarkan angka di USD:
var msg = new IntlMessageFormat ( 'The price is: {price, number, USD}' , 'en-US' , {
number : {
USD : {
style : 'currency' ,
currency : 'USD'
}
}
} ) ;
var output = msg . format ( { price : 100 } ) ;
console . log ( output ) ; // => "The price is: $100.00" Dalam contoh ini, kami mendefinisikan gaya format nomor USD yang diteruskan ke instance Intl.NumberFormat yang mendasarinya sebagai opsi.
Contoh ini menunjukkan cara menggunakan sintaks pesan ICU untuk menentukan pesan yang memiliki label jamak; misalnya, "You have 10 photos" :
You have {numPhotos, plural,
=0 {no photos.}
=1 {one photo.}
other {# photos.}
}
var MESSAGES = {
photos : '...' , // String from code block above.
...
} ;
var msg = new IntlMessageFormat ( MESSAGES . photos , 'en-US' ) ;
console . log ( msg . format ( { numPhotos : 0 } ) ) ; // => "You have no photos."
console . log ( msg . format ( { numPhotos : 1 } ) ) ; // => "You have one photo."
console . log ( msg . format ( { numPhotos : 1000 } ) ) ; // => "You have 1,000 photos." Catatan: Bagaimana ketika numPhotos adalah 1000 , angka diformat dengan pemisah ribuan yang benar.
Perangkat lunak ini bebas digunakan di bawah Yahoo! Lisensi BSD Inc. Lihat file lisensi untuk teks lisensi dan informasi hak cipta.