すべてのresourcebundle値を表に示し、要件に従ってフォーマットしています。ページ上部のドロップダウンでのユーザー選択に基づいて、Webサイトの言語を変更する必要があります。言語コードをen_USとして使用している場合、問題なく機能します。言語コードとしてen-Usを使用すると、機能しません。何が問題なのでしょう。どちらが正しいですか?
「en」はISO 639で指定された言語コードです。一方、USは3166で指定された国コードです。
Javaでは、Localeオブジェクトは言語をlanguageCode_countryCode(例:en_US)として認識し、languageCode-countryCodeとして認識しません。
"en-US"は IETF言語タグ です。 Java'a Locale クラスは明らかにIETF言語タグに基づいていますが、国コード(およびバリアント)から言語コードを分離するときにハイフンの代わりにアンダースコアを使用しているため、toString()
を呼び出します同等のLocale
では、_en_US
_が得られます。
Java 7以降、 Locale.forLanguageTag(String)
および toLanguageTag()
を使用して言語タグ間で変換できますおよびLocale
オブジェクト。
文字列をLocale
オブジェクトに変換するときは、ハイフンとアンダースコアでコンポーネントを分割し、最初のコンポーネント(言語コード)を小文字にし、2番目のコンポーネント(国コード)を大文字にすることで正規化することをお勧めします。
Java8以降では、言語タグ「en-US」を使用してロケールの初期化を行う必要がありますLocale.forLanguageTag( "en-US")。toString();出力を返します:en_US
Locale.forLanguageTag( "en_US")が必要なロケールを作成しない場合。デフォルトではシステムロケールになります。 Locale.forLanguageTag( "en_US")。toString()はnullを返します