web-dev-qa-db-ja.com

JavaScriptでの国際化の仕組み

JavaScriptで国際化に対処する方法を知りたいです。私はグーグルで検索しましたが、私は納得のいく答えを得ていません:

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

私はすでに JavaScript内の国際化 を読んでいます。

139
rajakvk

レガシーブラウザでのローカライズサポートは不十分です。もともと、これは次のようなECMAScript言語仕様のフレーズによるものでした。

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

仕様で定義されているすべてのローカライズ方法は「実装依存」として定義されているため、多くの矛盾が生じます。この場合、Chrome OperaとSafariは.toString()と同じものを返します。 FirefoxおよびIEはロケール形式の文字列を返し、IEは千単位の区切り記号(通貨文字列に最適)も含みます。 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としてフォーマットされている場合、Internationalization APIコンストラクターに渡すことができ、自動的に最適な(または最初にサポートされる)ロケールが選択されます。

手短に言えば、ブラウザに頼ってあなたに代わって頼ることはできないので、多くの作業を自分で行うか、 framework/library を使用する必要があります。

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

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

157
Andy E

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

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

それらのjs実装は github L20nリポジトリー にあります

11
ashwoods

別のライブラリを試すこともできます- https://github.com/wikimedia/jquery.i18n .

パラメーターの置換と複数の複数形に加えて、一部の言語に必要なカスタムグラマールールのかなりユニークな機能を性別にサポートしています。

0
Amir E. Aharoni

一部はネイティブで、残りはライブラリを介して利用可能です。

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

残りの部分については、言語の翻訳についてであり、JavaScriptはネイティブにUnicode互換です(すべての主要なブラウザーと同様)。

0
Luca Matteis