言語と地域は別の情報
new Locale("de")は言語だけを指定したLocaleです。デフォルトのLocaleに国・地域があっても、その国コードをこのオブジェクトへ自動補完するわけではありません。getLanguage()とgetCountry()がそれぞれ何を返すかを区別してください。
Java 17ではLocale.JAPANESEが日本語、Locale.JAPANが日本語・日本を表します。言語タグではja-JPのようにハイフンを使いますが、後で扱うResourceBundleのファイル名とは区切り方が異なります。Localeそのものが日時のタイムゾーンを決定する、とも考えないようにします。
同じ出力になるかを問う問題では、明示したLocaleとデフォルトのLocaleを使う呼び出しを分けます。APIの対応バージョンを含め、Java SE 17のLocaleを基準に確認してください。
ResourceBundleは候補名と実在するファイルを照合する
ベース名がNoticeなら、ルートのpropertiesファイルはNotice.properties、カナダの英語向けはNotice_en_CA.propertiesです。候補名と、問題文で実際に用意されているファイルを一覧にして追います。
「最も近そうな名前」を感覚で選ぶのではなく、指定Localeから作る候補、デフォルトLocaleへのフォールバック、ルートの候補を区別します。さらに、バンドルが見つかることと、要求したキーが見つかることも別です。選ばれたバンドルにキーがない場合には親をたどるため、1ファイルの内容だけで判断しないようにします。
クラス形式とproperties形式、親バンドルの検索などの詳細はResourceBundleの公式APIで確認できます。通常のgetBundleと異なるControlを指定する問題では、その条件も先に確認してください。
数値・日時の書式化で確認する前提
| API | 確認すること |
|---|---|
NumberFormat | 数値・通貨・パーセントのどの形式か、明示したLocaleは何か |
DateTimeFormatter | パターンの大文字・小文字、表示対象が必要なフィールドを持つか |
MessageFormat | 引数番号は0からで、引用符に特別な意味があること |
たとえば日時パターンのMMは月、mmは分です。文字の見た目だけを暗記せず、DateTimeFormatterのパターン表と、書式化する日時型を一緒に確認してください。
例題2問:Localeの情報とバンドル名
デフォルトの設定が影響する場所と、ファイル名の区切りを確認してから答えてください。
例題1:言語だけを指定したLocale
次の処理が最後に表示する内容を選んでください。必要なimportは記述済みです。
Locale.setDefault(Locale.JAPAN);
var lang = new Locale("de");
System.out.print(lang.getLanguage() + ":" + lang.getCountry().isEmpty());
1つ選択してください
- A.
de:true - B.
de:false - C.
ja:false - D.
de:DE
例題1の正解・解説を見る
正解:A
正解は「de:true」です。
言語だけで生成したLocaleの国コードは空です。デフォルトロケールの国を自動補完しません。
- A:言語だけで生成したLocaleの国コードは空です。デフォルトロケールの国を自動補完しません。
- B:この結果にはなりません。言語だけで生成したLocaleの国コードは空です。デフォルトロケールの国を自動補完しません。
- C:この結果にはなりません。言語だけで生成したLocaleの国コードは空です。デフォルトロケールの国を自動補完しません。
- D:この結果にはなりません。言語だけで生成したLocaleの国コードは空です。デフォルトロケールの国を自動補完しません。
確認するポイント:言語コードと地域コードは独立した情報です。
仕様を確認するための公式資料:
問題ID:jg17-0e7e3350bd55ba · この問題の訂正を連絡する
例題2:ResourceBundleの候補名
ベース名Noticeで、ルートとカナダの英語向けのpropertiesバンドルを用意します。標準の候補名として適切なものを2つ選んでください。
2つ選択してください
- A.
Notice_en_CA.txt - B.
Notice.properties - C.
Notice-en-CA.properties - D.
Notice_en_CA.properties
例題2の正解・解説を見る
正解:B・D
バンドルはベース名に言語、地域などをアンダースコア区切りで追加します。
バンドルはベース名に言語、地域などをアンダースコア区切りで追加します。
- A:properties形式の標準拡張子ではありません。
- B:ロケールを付けないルートです。
- C:標準の候補名はハイフン区切りではありません。
- D:言語と地域をアンダースコアでつなぎます。
確認するポイント:BCP 47の言語タグの区切りとファイル名の区切りを混同しません。
仕様を確認するための公式資料:
問題ID:jg17-1467d4d37ba3a0 · この問題の訂正を連絡する
ローカライズの33問で復習する
問題演習の「出題分野」で「ローカライズ」を選びます。33問は本サイトの収録数で、公式試験の出題比率ではありません。
出力の予想が外れたら、言語・地域・タイムゾーン・書式パターンを一つずつ固定して確認します。ResourceBundleの問題では、存在するファイルとキーを書き出してから検索順序を追うと、誤答の理由を再現できます。
関連する学習
- ファイルI/Oで文字コードと読み込みを確認する。
- コレクションでキーと値の扱いを復習する。
- 勉強法・復習計画で誤答の振り返り方を確認する。
- Java Gold 17の全8分野から次の学習を選ぶ。
本サイトの問題は、Java SE 17を学ぶためのオリジナル練習教材です。本試験の過去問やOracle公式の教材ではありません。編集・訂正の方針をご確認ください。