7

ユーザーのロケール設定に基づいてDateオブジェクトとNumberオブジェクトを自動的にフォーマットする方法が必要です。

toLocaleString()これまで、日付に関数を使用してきました。数字についてtoLocaleString()は、もご利用いただけますが、私が用意したjsFiddleでわかるように、結果はブラウザーによって大きく異なります。私のWindowsマシンに英語(米国)ロケールを使用すると、次のようになります。

  • IE9:15,000.00
  • Firefox:15,000
  • Chrome:15000

toLocaleString()Chromeでは、数字に対してはまったく機能しないようです。このアプローチを除いて、私も試しました:

  • MicrosoftAjax.jsライブラリlocaleFormat()関数を使用するために、ただし([地域と言語]ダイアログを使用して)PCに設定したロケールに関係なく、日付と数値は両方とも米国形式でフォーマットされていました。
  • Globalizeのようなライブラリを使用するには。フォーマット機能はありますが、ユーザーのロケールを自動的に検出することはできません。

要約すると、すべての主要なブラウザ(IE、Firefox、Chrome)で機能する方法でウェブページを閲覧するユーザーの地域設定を尊重するために、数値と日付を自動的にフォーマットする方法は?

4

2 に答える 2

10

.toLocaleString()ネイティブJavascriptオブジェクトの関数は、ロケールを指定したり、その動作を制御したりできないため、実際には役に立ちません。

ECMAScript i18n APIが現実になるまで(これはおそらく今は検討する価値がないほど遠いです)、唯一の実用的なオプションはGlobalizeなどのライブラリを使用することですが、あなたが言うように、ユーザーの優先ロケールを検出する必要があります。

ロケールの検出は、純粋なJavascriptでは簡単に解決できないもう1つの問題です。具体的には、Accept-Languageヘッダーは、大多数のWebユーザーには表示されないため、ロケール検出の手段としては実質的に役に立たないIMHOです。そのため、Webアプリケーションは通常、ユーザーがサーバーに通信するロケールを選択するためのカスタムメカニズムを提供し、サーバーはこの情報を使用してその後の各応答を構成します。

于 2012-06-26T11:07:52.383 に答える
2

今日、@Jonが言及した国際化APIは広くサポートされています。使用できるプリミティブ番号から、Number(123456).toLocaleString()Chromeは"123,456"期待どおりに返されるようになりました(米国ロケールの場合)。私はIE11/Edgeでテストしていませんが、caniuseによるとサポートはあります。

于 2017-06-22T08:17:23.047 に答える