Uluslararasılaştırma JavaScript'te nasıl çalışır?


143

JavaScript'te uluslararasılaştırmanın nasıl ele alınacağını merak ediyorum. Google'ı aradım, ancak aşağıdakiler için ikna edici cevaplar almıyorum:

  • JavaScript'in uluslararasılaştırma için yerel desteği var mı?
  • JavaScript'te i18n nedir?
  • Takvimler, para birimleri, tarihler vs. ile nasıl başa çıkılır?

JavaScript'te Uluslararasılaştırma'yı zaten okudum .


Microsoft son zamanlarda bir jquery küreselleşme eklentisi yayımladı. Ayrıntılar burada
Adeel

Yanıtlar:


161

Eski tarayıcılarda yerelleştirme desteği zayıf. Başlangıçta, bunun nedeni ECMAScriptdil spesifikasyonundaki şuna benziyordu:

Number.prototype.toLocaleString ()
Ana bilgisayar ortamının geçerli yerel ayarının kurallarına göre biçimlendirilmiş Sayının değerini temsil eden bir dize değeri üretir. Bu işlev uygulamaya bağlıdır ve toString ile aynı şeyi döndürmesi için izin verilir, ancak teşvik edilmez .

Spesifikasyonda tanımlanan her yerelleştirme yöntemi "uygulamaya bağlı" olarak tanımlanır ve bu da birçok tutarsızlıkla sonuçlanır. Bu durumda, Chrome Opera ve Safari ile aynı şeyi döndürür .toString(). Firefox ve IE yerel olarak biçimlendirilmiş dizeler döndürür ve IE bile bin ayırıcı (para birimi dizeleri için mükemmel) içerir. Chrome, sabit ondalık olmadan binlercesi ayrılmış bir dize döndürmek için yakın zamanda güncellendi.

Modern ortamlar için , ECMAScript Language spesifikasyonunu tamamlayan yeni bir standart olan ECMAScript Internationalization API spesifikasyonu , dize karşılaştırması, sayı biçimlendirmesi ve tarih ve saat biçimlendirmesi için çok daha iyi destek sağlar; ayrıca Language Spec. Bir giriş burada bulunabilir . Uygulamalar şu dillerde mevcuttur:

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

API'yı zaten mevcut olmadığı ortamlarda sağlayacak bir uyumluluk uygulaması olan Intl.js de vardır.

Kullanıcının tercih ettiği dili belirlemek bir sorun olmaya devam etmektedir, çünkü mevcut dili elde etmek için bir spesifikasyon yoktur. Her tarayıcı bir dil dizesi elde etmek için bir yöntem uygular, ancak bu kullanıcının işletim sistemi dilini veya yalnızca tarayıcının dilini temel alabilir:

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

Bunun için iyi bir çözüm, Accept-Language üstbilgisini sunucudan istemciye dökmektir. JavaScript olarak biçimlendirilirse, otomatik olarak en iyi (veya ilk desteklenen) yerel ayarı seçecek olan Uluslararasılaştırma API kurucularına geçirilebilir.

Kısacası, işin çoğunu kendiniz koymanız veya bir çerçeve / kütüphane kullanmanız gerekir , çünkü bunu sizin için yapmak için tarayıcıya güvenemezsiniz.

Yerelleştirme için çeşitli kütüphaneler ve eklentiler:

  • Diğerleri:

Eklemek / düzenlemek için çekinmeyin.


13
Katkıda bulunan herkese teşekkürler; Eski cevaplarımı okuyarak bir şeyler öğrenebileceğimi hiç düşünmemiştim. Internationalization API spesifikasyonunun güncellemesini gördüğüme sevindim, bu gerçekten harika ve Chrome'da test etmeyi denedim.
Andy E

1
Mükemmel derleme için teşekkürler. Olumlu bir kayda göre, Mozilla yakında modern bir toLocaleString () gönderebilir - muhtemelen FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams

1
i18next.com artık en iyi locize.com üzerine kurulu bir çeviri yönetimi ile geliyor - sadece i18n için kodunuzu değil, tüm çeviri sürecini de çözmeniz gerekiyorsa bu büyük bir kazanç olabilir. Artı güzel bir Incontext Editor özelliği var ...
jamuhl

12

Mozilla yakın zamanda müthiş L20n veya yerelleştirme 2.0'ı piyasaya sürdü. L20n kendi ifadeleriyle

Cinsiyet, çoğullar, çekimler ve doğal dilin diğer ilginç öğelerinin çoğunu işlemek için kullanılan açık kaynaklı, yerelleştirmeye özgü bir komut dosyası dili.

Onların js uygulaması github L20n deposunda.


Yerelleştirilmesi gereken bir projeye başladım ve L20n'yi de kullanmaya karar verdik;). Bu yüzden RequireJS kullanmanız durumunda RequireJS için bir L20n Eklentisinin ( github.com/fernandogmar/L20n-RequireJS ) ilk sürümünü wrotten aldım. Herhangi bir öneri memnuniyetle karşılanacaktır.
Fernando Gm

0

Bazıları yerli, geri kalanlar kütüphaneler aracılığıyla erişilebilir.

Örneğin Datejs iyi bir uluslararası tarih kütüphanesidir.

Geri kalanı için, sadece dil çevirisi ile ilgilidir ve JavaScript yerel olarak Unicode uyumludur (tüm önemli tarayıcıların yanı sıra).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.