如果不打算使用genstrings控制台工具来创建.strings文件,那么使用NSLocalizedString宏而不是直接调用 NSBundle本地化StringForKey:value:table:方法有什么好处吗?
这些宏调用相同的 NSBundle 方法。那么支持genstrings是这些宏的唯一目的吗?
如果不打算使用genstrings控制台工具来创建.strings文件,那么使用NSLocalizedString宏而不是直接调用 NSBundle本地化StringForKey:value:table:方法有什么好处吗?
这些宏调用相同的 NSBundle 方法。那么支持genstrings是这些宏的唯一目的吗?
如果你看NSLocalizedString
定义:
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
很明显,NSLocalizedString
仅localizedStringForKey:
使用默认参数进行调用,同时还允许指定注释(被localizedStringForKey:
. 忽略)
因此,localizedStringForKey:
适用于:
处理多个字符串表;
未找到翻译时指定自定义返回值 ( value
arg)。
NSLocalizedString
相反:
更适合最简单(最常见?)的情况(只有一个字符串表);
更紧凑;
允许指定上下文注释。
何时使用其中一种?
IMO,最大的标准是您是否有多个字符串表。如果是这样,你必须使用localizedStringForKey:
,否则NSLocalizedString
会很好。
希望这可以帮助。
它们的打字时间也更短,更容易阅读。有时您需要使用底层方法调用(例如我经常使用的非标准字符串文件),但通常NSLocalizedString()
更方便。它也更容易审计(参见find_nonlocalized的例子)。