Swift での NSLocalizedString
Objective-C では
NSString *NSLocalizedString(NSString *key, NSString *comment) NSString *NSLocalizedStringFromTable(NSString *key, NSString *tableName, NSString *comment) NSString *NSLocalizedStringFromTableInBundle(NSString *key, NSString *tableName, NSBundle *bundle, NSString *comment) NSString *NSLocalizedStringWithDefaultValue(NSString *key, NSString *tableName, NSBundle *bundle, NSString *value, NSString *comment)
の4つのマクロが定義されている。
いずれも NSBundle
の
/* Method for retrieving localized strings. */ - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName NS_FORMAT_ARGUMENT(1);
メソッドを呼び出していて、それぞれ内部で引数にデフォルト値や nil を入れたりしていて外部の引数を省略している。
Swift では
/// Returns a localized string, using the main bundle if one is not specified. func NSLocalizedString(key: String, tableName: String? = default, bundle: NSBundle = default, value: String = default, #comment: String) -> String
という関数1種類のみが定義されている。
Swift の場合は適宜自分で引数を省略する事ができるようになっていて、例えば
NSLocalizedString("key", comment: "comment");
と書く事もできるし、テーブル名を指定して
NSLocalizedString("key", tableName: "Localizable", comment: "comment");
と書く事もできる。
これらはObjective-C版の上2つのマクロ定義と同じ働きになる。
bundle を省略した場合は NSBundle.mainBundle
がデフォルト値として使用され、tableName と value が省略された場合は nil がデフォルト値として使用される。
また NSBundle
自体の挙動として tableName が nil か空文字の場合にはテーブルとして Localizable.strings
が使用される。