JavaScriptで国際化を処理する方法を知りたいです。私はググったが、私は説得力のある答えを得ていません:
- JavaScriptは国際化をネイティブでサポートしていますか?
- JavaScriptのi18nとは何ですか?
- カレンダー、通貨、日付などの扱い方は?
JavaScript内の国際化についてはすでに読みました。
JavaScriptで国際化を処理する方法を知りたいです。私はググったが、私は説得力のある答えを得ていません:
JavaScript内の国際化についてはすでに読みました。
回答:
レガシーブラウザでのローカリゼーションサポートは不十分です。もともとは、次のECMAScript
ような言語仕様のフレーズが原因でした。
Number.prototype.toLocaleString()
ホスト環境の現在のロケールの規則に従ってフォーマットされたNumberの値を表す文字列値を生成します。この関数は実装依存であり、toStringと同じものを返すことは許可されていますが、お勧めできません。
仕様で定義されているローカリゼーション手法はすべて「実装依存」として定義されているため、多くの不整合が生じます。この場合、Chrome OperaとSafariはと同じものを返し.toString()
ます。FirefoxとIEはロケールでフォーマットされた文字列を返し、IEは1000の区切り文字も含みます(通貨文字列に最適です)。Chromeは最近更新され、固定小数点はありませんが、数千で区切られた文字列を返すようになりました。
現代の環境では、ECMAScript言語仕様を補完する新しい標準であるECMAScriptインターナショナライゼーションAPI仕様が、文字列の比較、数値の書式設定、および日付と時刻の書式設定をはるかにサポートします。また、言語仕様の対応する関数も修正します。概要はここにあります。実装は以下で利用可能です:
また、互換性の実装であるIntl.jsもあります。これは、APIがまだ存在しない環境でAPIを提供します。
現在の言語を取得するための仕様がないため、ユーザーの優先言語の決定は依然として問題です。各ブラウザは言語文字列を取得するメソッドを実装しますが、これはユーザーのオペレーティングシステムの言語またはブラウザの言語のみに基づく場合があります。
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
これに対する適切な回避策は、Accept-Languageヘッダーをサーバーからクライアントにダンプすることです。JavaScriptとしてフォーマットされている場合は、国際化APIコンストラクターに渡すことができます。これにより、最適な(または最初にサポートされた)ロケールが自動的に選択されます。
つまり、ブラウザに頼ることができないため、多くの作業を自分で行うか、フレームワーク/ライブラリを使用する必要があります。
ローカライズ用のさまざまなライブラリとプラグイン:
自由に追加/編集してください。
Mozillaは最近、素晴らしいL20nまたはローカリゼーション2.0をリリースしました。彼ら自身の言葉でL20nは
性別、複数形、活用、その他自然言語の風変わりな要素のほとんどを処理するために使用される、オープンソースのローカリゼーション固有のスクリプト言語。
彼らのjs実装はgithub L20nリポジトリにあります。
別のライブラリ-https://github.com/wikimedia/jquery.i18nを試すこともできます。
パラメータ置換と複数の複数形に加えて、いくつかの言語に必要なカスタム文法規則のかなりユニークな機能である性別をサポートしています。