サーチ…


備考

Javaには、アプリケーションをローカライズするための強力で柔軟なメカニズムが用意されていますが、ユーザーのロケールを無視したり変更したりするプログラムを悪用してしまうこともあります。

あなたのユーザーは、以前使用していたフォーマットにローカライズされたデータを見ることが予想され、これを手動でサポートしようとするのは愚かな作業です。ここでは、「常に」特定の方法で表示されていると想定されるコンテンツをユーザーが表示することを期待するさまざまな方法の小さな例を示します。

日付数字現地通貨外国通貨距離
ブラジル
中国
エジプト
メキシコ 20/3/16 1.234,56 $ 1,000.50 1,000円50米ドル
英国 20/3/16 1,234.56 £1,000.50 100 km
米国 3/20/16 1,234.56 $ 1,000.50 1,000.50 MXN 60 mi

一般リソース

Javaリソース

「ロケール」を使用して自動的にフォーマットされた日付

ピンチでSimpleDateFormatterは素晴らしいですが、名前のように、スケールがうまくいかないことが示唆されています。

アプリケーション全体に"MM/dd/yyyy"をハードコードすると、国際ユーザーは幸せにならないでしょう。

Javaがあなたのために仕事をするようにしましょう

DateFormatstaticメソッドを使用して、ユーザーの正しい書式を取得します。デスクトップアプリケーション( デフォルトのロケールに依存する)の場合は、次のように呼び出します。

String localizedDate = DateFormat.getDateInstance(style).format(date);

styleは、 DateFormat指定された書式化定数( FULLLONGMEDIUMSHORTなど)の1 DateFormatです。

ユーザーがロケールをリクエストの一部として指定するサーバー側アプリケーションの場合、代わりにgetDateInstance()に明示的に渡す必要があります。

String localizedDate =
    DateFormat.getDateInstance(style, request.getLocale()).format(date);

文字列の比較

大文字小文字を区別しない2つの文字列の比較

"School".equalsIgnoreCase("school"); // true

使用しないでください

text1.toLowerCase().equals(text2.toLowerCase());

言語は大文字と小文字を変換するための異なる規則を持っています。 「私」は英語で「私」に変換されます。しかし、トルコでは「私」は「ı」になります。 toLowerCase()を使用する必要がある場合は、 LocaleString.toLowerCase(Locale)を予期するオーバーロードを使用します。

軽い違いを無視して2つの文字列を比較する:

Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.PRIMARY);
collator.equals("Gärten", "gaerten"); // returns true

大文字小文字を無視して、自然言語の順序に則った文字列をソートします(照合キーを使用して:

String[] texts = new String[] {"Birne", "äther", "Apfel"};
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY); // ignore case
Arrays.sort(texts, collator::compare); // will return {"Apfel", "äther", "Birne"}

ロケール

java.util.Localeクラスは、指定されたテキスト、数値、日付または操作をローカライズするための「地理的、政治的または文化的」領域を表すために使用されます。したがって、Localeオブジェクトは、国、地域、言語、さらには言語の変形を含むことができます。例えば、ある国の特定の地域で話されているか、その言語が由来する国とは異なる国で話されます。

Localeインスタンスは、入力の変換、出力の変換、内部操作の必要がある場合など、アクションをローカライズする必要があるコンポーネントに渡されます。 Localeクラスは、それ自体で国際化やローカライズを行うことはできません

言語

言語は、ISO 639の2文字または3文字の言語コード、または最大8文字の登録済み言語サブタグでなければなりません。言語に2文字と3文字の言語コードがある場合は、2文字のコードを使用します。言語コードの完全なリストはIANA Language Subtag Registryにあります。

言語コードは大文字と小文字を区別しませんが、Localeクラスは常に小文字の言語コードを使用します

ロケールの作成

java.util.Localeインスタンスを作成するには、次の4つの方法があります。

Locale constants
Locale constructors
Locale.Builder class
Locale.forLanguageTag factory method 

Java ResourceBundle

次のようなResourceBundleインスタンスを作成します。

Locale locale = new Locale("en", "US");
ResourceBundle labels = ResourceBundle.getBundle("i18n.properties");
System.out.println(labels.getString("message"));

私がプロパティファイルi18n.propertiesを持っているとします:

message=This is locale

出力:

This is locale

ロケールの設定

他の言語を使用して状態を再現したい場合は、 setDefault()メソッドを使用できます。その使用法:

 setDefault(Locale.JAPANESE); //Set Japanese


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow