その他のリソースを国際化する


セルや文字列入力欄といった、ユーザインタフェースオブジェクトは、これらがデータを構文解析【parse】したり整形【format】する際に、自動的に自らの内容を各国語化します。

よって、もしあなたがセルにその数値を尋ね、ユーザのロケールがフランスであれば、","が十進数の区切り文字として使用されるでしょう。同様に、もしあなたが浮動小数点数をセルや、テーブルビュー、その他の中に表示すれば、これらは自動的に各国語化されます。

リソースと Core Foundation

もしあなたが Core Foundation を使用していて、日付や数字の情報を整形したり走査する必要があれば、CFDateFormatter および CFNumberFormatter 不透明型を使用して下さい。

これらの型は、日付や数字が正しく整形されることを保障するために、現在のロケール情報を使用します。詳細は、CFDateFormatter Reference および CFNumberFormatter Referenceを参照してください。

リソースと Cocoa

もし、あなたが NSString のような低レベルオブジェクトを用いて、あなた自身で日付や数字を整形したり走査しているのであれば、あなたは最終的なテキストがユーザの眼に触れるのならば現在のロケール情報を使用する必要があります。

Mac OS X v10.4 において、ロケール情報を取得することを容易にするために、NSLocale クラスが Cocoa に加わりました。このクラスに加えて、いくつかの Cocoa クラスは明示的なロケール引数を提供するメソッドを与えます…

NSString:
	- (id)initWithFormat:(NSString *)format locale:(NSDictionary *)dict, ...;
	+ (id)stringWithFormat:(NSString *)format, ...;
	+ (id)localizedStringWithFormat:(NSString *)format, ...;

NSScanner:
	- (void)setLocale:(NSDictionary *)dict;
	+ (id)scannerWithString:(NSString *)string;
	+ (id)localizedScannerWithString:(NSString *)string;

NSObject:
	- (NSString *)description;
	- (NSString *)descriptionWithLocale:(NSDictionary *)locale;

NSDate:
	- (id)initWithString:(NSString *)description calendarFormat:(NSString *)format locale:(NSDictionary *)dict;

ロケールは、各国語化がどのように行われるべきかについての情報を記録するためのキーと値の組を用いる、辞書として表現されます。この辞書の中においてありえるキーのいくつかは Foundation/NSUserDefaults.h の中で列挙されています。

一般的には、あなたは nil を渡すか、標準ユーザデフォルトから作られた辞書を渡すことになります。ユーザ環境設定から辞書を作成するには、あなたは以下のコードを使用することになるでしょう…

[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]

このコードは、ユーザのデフォルトの平滑化された【flattened】表示と、ユーザ環境設定の順に並べられた言語を持つ、辞書を返します。

ユーザのデフォルトは、デフォルト内のエントリ(一般的にはユーザの環境設定から設定される)によって上書きされるように、あらゆる言語固有の情報よりも先行します。

【システム環境設定の「言語環境」において、「地域」の選択により設定されるプリセットされた日付や通貨の書式よりも、「書式」ペインの各コントロールで個々に設定した内容の方が優先される…ということを言いたいのだろうか】

Application Kit は、以下のように、オブジェクトの「各国語化された」バージョンを尋ねるカバーメソッドを提供することによって各国語化を容易にしています…

- (id)initWithFormat:(NSString *)format locale:(NSDictionary *)dict, ...;
+ (id)localizedStringWithFormat:(NSString *)format, ...;

二番目のメソッドは、最初のメソッドを以下のロケール引数と共に呼びます。

[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]

これらのメソッドのロケール引数のないバージョンにおいては、処理は各国語化されていない場合のやりかたで行われます。