Bagaimana cara kerja internasionalisasi dalam JavaScript?

143

Saya ingin tahu bagaimana menangani internasionalisasi dalam JavaScript. Saya mencari di Google tetapi saya tidak mendapatkan jawaban yang meyakinkan untuk:

  • Apakah JavaScript memiliki dukungan asli untuk internasionalisasi?
  • Apa i18n dalam JavaScript?
  • Bagaimana cara menangani kalender, mata uang, tanggal, dll.?

Saya sudah membaca Internasionalisasi di dalam JavaScript .

rajakvk
sumber
Microsoft baru-baru ini merilis plugin globalisasi jquery.
Detailnya

Jawaban:

161

Dukungan pelokalan di browser lama sangat buruk. Awalnya, ini karena frasa dalam ECMAScriptspesifikasi bahasa yang terlihat seperti ini:

Number.prototype.toLocaleString ()
Menghasilkan nilai string yang mewakili nilai Number yang diformat sesuai dengan konvensi lokal saat ini dari lingkungan host. Fungsi ini tergantung pada implementasi, dan diizinkan, tetapi tidak dianjurkan, untuk mengembalikan hal yang sama seperti ke String .

Setiap metode lokalisasi yang didefinisikan dalam spesifikasi didefinisikan sebagai "tergantung implementasi", yang menghasilkan banyak inkonsistensi. Dalam hal ini, Chrome Opera dan Safari akan mengembalikan hal yang sama dengan .toString(). Firefox dan IE akan mengembalikan string berformat lokal, dan IE bahkan menyertakan seribu pemisah (sempurna untuk string mata uang). Chrome baru-baru ini diperbarui untuk mengembalikan string yang dipisahkan ribuan, meskipun tanpa desimal tetap.

Untuk lingkungan modern , spesifikasi API Internasionalisasi ECMAScript , standar baru yang melengkapi spesifikasi Bahasa ECMAScript, memberikan dukungan yang jauh lebih baik untuk perbandingan string, pemformatan angka, dan format tanggal dan waktu; itu juga memperbaiki fungsi yang sesuai dalam Bahasa Spec. Pengantar dapat ditemukan di sini . Implementasi tersedia di:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Opera 15

Ada juga implementasi kompatibilitas, Intl.js , yang akan menyediakan API di lingkungan yang belum ada.

Menentukan bahasa yang disukai pengguna tetap menjadi masalah karena tidak ada spesifikasi untuk mendapatkan bahasa saat ini. Setiap browser menerapkan metode untuk mendapatkan string bahasa, tetapi ini bisa didasarkan pada bahasa sistem operasi pengguna atau hanya bahasa browser:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

Solusi yang baik untuk ini adalah membuang header Accept-Language dari server ke klien. Jika diformat sebagai JavaScript, ini dapat diteruskan ke konstruktor API Internasionalisasi, yang secara otomatis akan memilih lokal terbaik (atau yang didukung pertama).

Singkatnya, Anda harus memasukkan banyak pekerjaan sendiri, atau menggunakan kerangka / pustaka , karena Anda tidak dapat mengandalkan browser untuk melakukannya untuk Anda.

Berbagai perpustakaan dan plugin untuk pelokalan:

  • Lainnya:

Jangan ragu untuk menambah / mengedit.

Andy E
sumber
13
Terima kasih kepada semua orang yang berkontribusi; Saya tidak pernah berpikir saya bisa belajar sesuatu dengan membaca jawaban lama saya. Saya senang melihat pembaruan untuk spesifikasi API Internasionalisasi di sana, itu benar-benar luar biasa dan saya baru saja mengujinya di Chrome.
Andy E
1
Terima kasih untuk kompilasi yang luar biasa. Pada catatan positif, sepertinya Mozilla akan segera mengirimkan toLocaleString () modern - mungkin FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams
1
i18next.com sekarang hadir dengan manajemen terjemahan yang dibangun di atas locize.com - ini mungkin merupakan kemenangan besar jika Anda perlu menyelesaikan proses terjemahan lengkap - bukan hanya instrumen kode Anda untuk i18n. Plus memiliki fitur Editor Incontext yang bagus ...
jamuhl
12

Mozilla baru-baru ini merilis L20n atau lokalisasi 2.0 yang mengagumkan. Dengan kata-kata mereka sendiri L20n adalah

sumber terbuka, bahasa scripting khusus lokalisasi yang digunakan untuk memproses gender, bentuk jamak, konjugasi, dan sebagian besar elemen unik lainnya dari bahasa alami.

Implementasi js mereka ada di repositori github L20n.

ashwoods
sumber
Saya telah memulai proyek yang membutuhkan pelokalan dan kami telah memutuskan untuk menggunakan L20n juga;). Jadi saya telah membuat versi pertama dari Plugin L20n untuk RequireJS ( github.com/fernandogmar/L20n-RequireJS ) jika Anda menggunakan RequireJS, saya harap ini akan bermanfaat bagi Anda juga. Setiap saran akan disambut.
Fernando Gm
0

Beberapa di antaranya asli, sisanya tersedia melalui perpustakaan.

Misalnya Datejs adalah perpustakaan tanggal internasional yang bagus.

Untuk sisanya, ini hanya tentang terjemahan bahasa, dan JavaScript kompatibel dengan Unicode (dan juga semua peramban utama).

Luca Matteis
sumber
0

Anda juga dapat mencoba perpustakaan lain - https://github.com/wikimedia/jquery.i18n .

Selain penggantian parameter dan beberapa bentuk jamak, ini memiliki dukungan untuk gender fitur yang agak unik dari aturan tata bahasa khusus yang diperlukan beberapa bahasa.

Amir E. Aharoni
sumber