[解決済み] JavaScriptの国際化はどのように行われるのですか?
質問
JavaScriptで国際化を行うにはどうしたらいいのでしょうか。ググってみたのですが、納得のいく回答が得られません。
- JavaScript は国際化のネイティブ サポートを持っていますか?
- JavaScript の国際化とは何ですか?
- カレンダー、通貨、日付などをどのように扱うか?
私はすでに JavaScript内部の国際化 .
どのように解決するのですか?
レガシーブラウザのローカライズサポートは貧弱です。 元々、これは
ECMAScript
言語仕様にある次のようなフレーズが原因でした。
Number.prototype.toLocaleString()を使用します。
ホスト環境の現在のロケールの規則に従ってフォーマットされたNumberの値を表す文字列値を生成します。 の値を表す文字列を生成する。この関数は実装に依存しています。 と同じものを返すことは許されますが、推奨されません。 toString .
仕様で定義されているすべてのローカライゼーション メソッドは "実装依存" として定義されており、多くの不整合が発生しています。 この例では、Chrome、Opera、Safari は同じものを返します。
.toString()
. Firefox と IE はロケール形式の文字列を返し、IE には 1000 のセパレータ (通貨文字列に最適) も含まれています。 Chrome は最近更新され、固定小数点はありませんが、千単位で区切られた文字列が返されるようになりました。
モダンな環境のために というように ECMAScript 国際化 API 仕様 は、ECMAScript 言語仕様を補完する新しい規格で、文字列比較、数値フォーマット、日付と時刻のフォーマットをより良くサポートするもので、言語仕様の対応する関数も修正されています。その紹介は はこちら . で実装が可能です。
- クローム 24
- Firefox 29
- インターネットエクスプローラ 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のコンストラクタに渡すことができ、自動的に最適な(または最初にサポートされた)ロケールを選びます。
要するに、多くの作業を自分で行うか、あるいは フレームワーク/ライブラリ を使用する必要があります。なぜなら、ブラウザに頼ることはできないからです。
ローカライズのための様々なライブラリやプラグインです。
- によって管理される オープン・コミュニティ (秩序がない)。
- ポリグロット.js - AirBnbの国際化ライブラリ
- Intl.js - Internationalisation API の互換性のある実装です。
- i18next ( ホーム ) 国際化対応 (jqueryプラグイン、翻訳UIを含む...)
- moment.js ( ホーム ) で日付を指定します。
- numbro.js ( ホーム ) (以前は numeral.js ( ホーム )) で数字や通貨を表示します。
- l10n.js ( ホーム )
- L10ns ( ホーム ) 国際化ワークフローと複雑な文字列フォーマットのためのツール
- jQuery ローカライゼーション (プラグイン) ( ホーム )
- YUI国際化サポート
- jquery.i18Now 日付用
- ブラウザ-i18n 複数形のサポートあり
- カウンターパート は、Ruby の有名な I18n gem
- jQueryのグローバル化 jQuery独自の国際化ライブラリです。
- js-lingui - JS(ES2016)とReactのためのMessageFormatの実装
- その他
- jQuery グローバル化 (プラグイン)
- requirejs-i18n RequireJSでI18N Bundleを定義します。
自由に追加/編集してください。
関連
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
親子コンポーネント通信を解決する3つのVueスロット
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
[解決済み] テスト
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
jq は html ページとデータを動的に分割する。