ロケール
日本語 | 舞台 |
英語 | locale |
ふりがな | ろけーる |
フリガナ | ロケール |
「言語」及び「国」の指定。
Javaでは、日時等「使用者に分かりやすい文字列」を作る際に、その使用者の「言語」「国」を指定することで、その「言語」「国」に適切な文字列を作る機能がある。この「言語」「国」の指定を「ロケール」という。
ロケールはLocaleクラスで管理する。デフォルトのロケールは、実行環境のOSの言語等によって自動的に設定され、これはLocaleクラスのgetDefault()メソッドで取得できる。
ロケールの変更はLocaleクラスのsetDefault()メソッドで変更できる。ロケールの指定は通常、Localeクラスに定義されているstatic finalフィールドを使用する。たとえば日本であればLocale.JAPAN、等。また、コンストラクタに「言語コード」「国コード」を指定してLocaleクラスのインスタンスを作ることもできる。この「言語コード」「国コード」はISOで指定されたコードから選択する。
ロケールは先ほどの日付表示他、プロパティ等のリソースも言語に合わせて適切に選択することができる。
ロケールをうまく使うことで、ユーザーの環境がどのような言語の環境であっても適切な表現ができるようになる。逆に言うと、たとえば、曜日のコードから曜日を決めて「月曜日」「火曜日」といった文字列を出力することは勧められない。
ただし、実際には多言語対応する必要があるプログラムは少なく、逆にバグの原因となる可能性もあるため、場合によってはロケールを使用しないプログラムの方がいい場合もある。
Javaでは、日時等「使用者に分かりやすい文字列」を作る際に、その使用者の「言語」「国」を指定することで、その「言語」「国」に適切な文字列を作る機能がある。この「言語」「国」の指定を「ロケール」という。
ロケールはLocaleクラスで管理する。デフォルトのロケールは、実行環境のOSの言語等によって自動的に設定され、これはLocaleクラスのgetDefault()メソッドで取得できる。
ロケールの変更はLocaleクラスのsetDefault()メソッドで変更できる。ロケールの指定は通常、Localeクラスに定義されているstatic finalフィールドを使用する。たとえば日本であればLocale.JAPAN、等。また、コンストラクタに「言語コード」「国コード」を指定してLocaleクラスのインスタンスを作ることもできる。この「言語コード」「国コード」はISOで指定されたコードから選択する。
ロケールは先ほどの日付表示他、プロパティ等のリソースも言語に合わせて適切に選択することができる。
ロケールをうまく使うことで、ユーザーの環境がどのような言語の環境であっても適切な表現ができるようになる。逆に言うと、たとえば、曜日のコードから曜日を決めて「月曜日」「火曜日」といった文字列を出力することは勧められない。
ただし、実際には多言語対応する必要があるプログラムは少なく、逆にバグの原因となる可能性もあるため、場合によってはロケールを使用しないプログラムの方がいい場合もある。
// Sample.java
import java.util.Locale;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class Sample
{
public static void main( String[] args )
{
// デフォルトのロケールを取得します。
// LocaleクラスのgetDefault()メソッドで取得します。
Locale locale = Locale.getDefault();
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : 日本語 (日本)
// 国 : 日本
// 言語 : 日本語
// 日時もロケールに左右されます。
String format = "yyyy/MMMMM/dd'('EEEEE')' a hh:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( format );
String formated = simpleDateFormat.format( Calendar.getInstance().getTime() );
System.out.println( formated );
// 2005/6月/03(金曜日) 午後 12:32:44
// この「6月」「金曜日」「午後」が日本語なのはロケールが日本だからです。
// それぞれの国のロケールはLocaleクラスの各定数フィールド
// として定義されています。
locale = Locale.US;
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// en_US
// 言語コード : en
// 国コード : US
// 名前 : 英語 (アメリカ合衆国)
// 国 : アメリカ合衆国
// 言語 : 英語
// 言語コードと国コードから作ることもできます。
locale = new Locale( "ja", "JP" );
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : 日本語 (日本)
// 国 : 日本
// 言語 : 日本語
// この「日本語」とかも、現在のデフォルトロケールが
// 「日本」(Locale.JAPAN)だから、日本語で出力されています。
// ロケールを変更します。
Locale.setDefault( Locale.US );
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : Japanese (Japan)
// 国 : Japan
// 言語 : Japanese
// このように、デフォルトロケールを変更すれば、出力が
// 日本語以外になります。
// 日時もロケールに左右されます。
simpleDateFormat = new SimpleDateFormat( format );
formated = simpleDateFormat.format( Calendar.getInstance().getTime() );
System.out.println( formated );
// 2005/June/03(Friday) PM 12:32:44
}
}
import java.util.Locale;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class Sample
{
public static void main( String[] args )
{
// デフォルトのロケールを取得します。
// LocaleクラスのgetDefault()メソッドで取得します。
Locale locale = Locale.getDefault();
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : 日本語 (日本)
// 国 : 日本
// 言語 : 日本語
// 日時もロケールに左右されます。
String format = "yyyy/MMMMM/dd'('EEEEE')' a hh:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( format );
String formated = simpleDateFormat.format( Calendar.getInstance().getTime() );
System.out.println( formated );
// 2005/6月/03(金曜日) 午後 12:32:44
// この「6月」「金曜日」「午後」が日本語なのはロケールが日本だからです。
// それぞれの国のロケールはLocaleクラスの各定数フィールド
// として定義されています。
locale = Locale.US;
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// en_US
// 言語コード : en
// 国コード : US
// 名前 : 英語 (アメリカ合衆国)
// 国 : アメリカ合衆国
// 言語 : 英語
// 言語コードと国コードから作ることもできます。
locale = new Locale( "ja", "JP" );
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : 日本語 (日本)
// 国 : 日本
// 言語 : 日本語
// この「日本語」とかも、現在のデフォルトロケールが
// 「日本」(Locale.JAPAN)だから、日本語で出力されています。
// ロケールを変更します。
Locale.setDefault( Locale.US );
System.out.println( locale.toString() );
System.out.println( "言語コード : " + locale.getLanguage() );
System.out.println( "国コード : " + locale.getCountry() );
System.out.println( "名前 : " + locale.getDisplayName() );
System.out.println( "国 : " + locale.getDisplayCountry() );
System.out.println( "言語 : " + locale.getDisplayLanguage() );
// ja_JP
// 言語コード : ja
// 国コード : JP
// 名前 : Japanese (Japan)
// 国 : Japan
// 言語 : Japanese
// このように、デフォルトロケールを変更すれば、出力が
// 日本語以外になります。
// 日時もロケールに左右されます。
simpleDateFormat = new SimpleDateFormat( format );
formated = simpleDateFormat.format( Calendar.getInstance().getTime() );
System.out.println( formated );
// 2005/June/03(Friday) PM 12:32:44
}
}
// Sample.java import java.util.Locale; import java.util.Calendar; import java.text.SimpleDateFormat; public class Sample { public static void main( String[] args ) { // デフォルトのロケールを取得します。 // LocaleクラスのgetDefault()メソッドで取得します。 Locale locale = Locale.getDefault(); System.out.println( locale.toString() ); System.out.println( "言語コード : " + locale.getLanguage() ); System.out.println( "国コード : " + locale.getCountry() ); System.out.println( "名前 : " + locale.getDisplayName() ); System.out.println( "国 : " + locale.getDisplayCountry() ); System.out.println( "言語 : " + locale.getDisplayLanguage() ); // ja_JP // 言語コード : ja // 国コード : JP // 名前 : 日本語 (日本) // 国 : 日本 // 言語 : 日本語 // 日時もロケールに左右されます。 String format = "yyyy/MMMMM/dd'('EEEEE')' a hh:mm:ss"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat( format ); String formated = simpleDateFormat.format( Calendar.getInstance().getTime() ); System.out.println( formated ); // 2005/6月/03(金曜日) 午後 12:32:44 // この「6月」「金曜日」「午後」が日本語なのはロケールが日本だからです。 // それぞれの国のロケールはLocaleクラスの各定数フィールド // として定義されています。 locale = Locale.US; System.out.println( locale.toString() ); System.out.println( "言語コード : " + locale.getLanguage() ); System.out.println( "国コード : " + locale.getCountry() ); System.out.println( "名前 : " + locale.getDisplayName() ); System.out.println( "国 : " + locale.getDisplayCountry() ); System.out.println( "言語 : " + locale.getDisplayLanguage() ); // en_US // 言語コード : en // 国コード : US // 名前 : 英語 (アメリカ合衆国) // 国 : アメリカ合衆国 // 言語 : 英語 // 言語コードと国コードから作ることもできます。 locale = new Locale( "ja", "JP" ); System.out.println( locale.toString() ); System.out.println( "言語コード : " + locale.getLanguage() ); System.out.println( "国コード : " + locale.getCountry() ); System.out.println( "名前 : " + locale.getDisplayName() ); System.out.println( "国 : " + locale.getDisplayCountry() ); System.out.println( "言語 : " + locale.getDisplayLanguage() ); // ja_JP // 言語コード : ja // 国コード : JP // 名前 : 日本語 (日本) // 国 : 日本 // 言語 : 日本語 // この「日本語」とかも、現在のデフォルトロケールが // 「日本」(Locale.JAPAN)だから、日本語で出力されています。 // ロケールを変更します。 Locale.setDefault( Locale.US ); System.out.println( locale.toString() ); System.out.println( "言語コード : " + locale.getLanguage() ); System.out.println( "国コード : " + locale.getCountry() ); System.out.println( "名前 : " + locale.getDisplayName() ); System.out.println( "国 : " + locale.getDisplayCountry() ); System.out.println( "言語 : " + locale.getDisplayLanguage() ); // ja_JP // 言語コード : ja // 国コード : JP // 名前 : Japanese (Japan) // 国 : Japan // 言語 : Japanese // このように、デフォルトロケールを変更すれば、出力が // 日本語以外になります。 // 日時もロケールに左右されます。 simpleDateFormat = new SimpleDateFormat( format ); formated = simpleDateFormat.format( Calendar.getInstance().getTime() ); System.out.println( formated ); // 2005/June/03(Friday) PM 12:32:44 } }