web-dev-qa-db-ja.com

en-USとen_USのロケール作成の違いは何ですか?

すべてのresourcebundle値を表に示し、要件に従ってフォーマットしています。ページ上部のドロップダウンでのユーザー選択に基づいて、Webサイトの言語を変更する必要があります。言語コードをen_USとして使用している場合、問題なく機能します。言語コードとしてen-Usを使用すると、機能しません。何が問題なのでしょう。どちらが正しいですか?

37
Jothi

「en」はISO 639で指定された言語コードです。一方、USは3166で指定された国コードです。
Javaでは、Localeオブジェクトは言語をlanguageCode_countryCode(例:en_US)として認識し、languageCode-countryCodeとして認識しません。

30
Naved

"en-US"は IETF言語タグ です。 Java'a Locale クラスは明らかにIETF言語タグに基づいていますが、国コード(およびバリアント)から言語コードを分離するときにハイフンの代わりにアンダースコアを使用しているため、toString()を呼び出します同等のLocaleでは、_en_US_が得られます。

Java 7以降、 Locale.forLanguageTag(String) および toLanguageTag() を使用して言語タグ間で変換できますおよびLocaleオブジェクト。

文字列をLocaleオブジェクトに変換するときは、ハイフンとアンダースコアでコンポーネントを分割し、最初のコンポーネント(言語コード)を小文字にし、2番目のコンポーネント(国コード)を大文字にすることで正規化することをお勧めします。

33

Java8以降では、言語タグ「en-US」を使用してロケールの初期化を行う必要がありますLocale.forLanguageTag( "en-US")。toString();出力を返します:en_US

Locale.forLanguageTag( "en_US")が必要なロケールを作成しない場合。デフォルトではシステムロケールになります。 Locale.forLanguageTag( "en_US")。toString()はnullを返します

3
Sai Chaitanya