JavaScriptで国際化はどのように機能しますか?


143

JavaScriptで国際化を処理する方法を知りたいです。私はググったが、私は説得力のある答えを得ていません:

  • JavaScriptは国際化をネイティブでサポートしていますか?
  • JavaScriptのi18nとは何ですか?
  • カレンダー、通貨、日付などの扱い方は?

JavaScript内の国際化についてはすでに読みました。


マイクロソフトは最近、jqueryグローバリゼーションプラグインをリリースしました。詳細はこちら
Adeel 2010年

回答:


161

レガシーブラウザでのローカリゼーションサポートは不十分です。もともとは、次のECMAScriptような言語仕様のフレーズが原因でした。

Number.prototype.toLocaleString()
ホスト環境の現在のロケールの規則に従ってフォーマットされたNumberの値を表す文字列値を生成します。この関数は実装依存であり、toStringと同じものを返すことは許可されていますが、お勧めできません。

仕様で定義されているローカリゼーション手法はすべて「実装依存」として定義されているため、多くの不整合が生じます。この場合、Chrome OperaとSafariはと同じものを返し.toString()ます。FirefoxとIEはロケールでフォーマットされた文字列を返し、IEは1000の区切り文字も含みます(通貨文字列に最適です)。Chromeは最近更新され、固定小数点はありませんが、数千で区切られた文字列を返すようになりました。

現代の環境では、ECMAScript言語仕様を補完する新しい標準であるECMAScriptインターナショナライゼーションAPI仕様が、文字列の比較、数値の書式設定、および日付と時刻の書式設定をはるかにサポートします。また、言語仕様の対応する関数も修正します。概要はここにあります。実装は以下で利用可能です:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • オペラ15

また、互換性の実装であるIntl.jsもあります。これは、APIがまだ存在しない環境でAPIを提供します。

現在の言語を取得するための仕様がないため、ユーザーの優先言語の決定は依然として問題です。各ブラウザは言語文字列を取得するメソッドを実装しますが、これはユーザーのオペレーティングシステムの言語またはブラウザの言語のみに基づく場合があります。

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

これに対する適切な回避策は、Accept-Languageヘッダーをサーバーからクライアントにダンプすることです。JavaScriptとしてフォーマットされている場合は、国際化APIコンストラクターに渡すことができます。これにより、最適な(または最初にサポートされた)ロケールが自動的に選択されます。

つまり、ブラウザに頼ることができないため、多くの作業を自分で行うか、フレームワーク/ライブラリを使用する必要があります。

ローカライズ用のさまざまなライブラリとプラグイン:

  • その他:

自由に追加/編集してください。


13
貢献してくれたすべての人々に感謝します。昔の答えを読んで何かを学べるとは思いもしませんでした。そこに国際化API仕様の更新が表示されてうれしいです。これは本当にすばらしいので、Chromeでテストしてみました。
アンディE

1
素晴らしい編集をありがとう。ポジティブなメモとして、Mozillaはすぐに最新のtoLocaleString()を出荷する可能性があるようです。おそらくFF28です:bugzilla.mozilla.org/show_bug.cgi
Chris Adams

1
i18next.comには、上位のlocize.comに構築された翻訳管理が付属しています。完全な翻訳プロセスを解決する必要がある場合は、これが大きなメリットになる可能性があります。さらに、素晴らしいIncontext Editor機能があります...
jamuhl

12

Mozillaは最近、素晴らしいL20nまたはローカリゼーション2.0をリリースしました。彼ら自身の言葉でL20nは

性別、複数形、活用、その他自然言語の風変わりな要素のほとんどを処理するために使用される、オープンソースのローカリゼーション固有のスクリプト言語。

彼らのjs実装はgithub L20nリポジトリにあります。


ローカリゼーションを必要とするプロジェクトを開始し、L20nも使用することにしました;)。そのため、RequireJS を使用する場合に備えて、RequireJS用のL20nプラグインの最初のバージョン(github.com/fernandogmar/L20n-RequireJS)を書き留めておきました。どんな提案も歓迎します。
Fernando Gm 2013

0

一部はネイティブで、残りはライブラリから利用できます。

たとえば、Datejsは優れた国際日付ライブラリです。

それ以外の場合は、それは言語翻訳に関するものであり、JavaScriptはネイティブでUnicode互換です(すべての主要なブラウザーと同様)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.