我有一个应用程序,它具有基于目标的不同字符串集。是否可以有一个基本字符串文件,然后只覆盖另一个的几个键?
例如,如果我的基本文件是:
"some-string" = "base-value"
"other-string" = "1234"
然后,对于我的一个目标,关联另一个具有以下内容的字符串文件:
"some-string" = "overridden-value"
因此,如果我运行包含附加字符串文件的目标,则输出为:
NSLocalizedString(@"some-string", nil) => "overridden value"
NSLocalizedString(@"other-string", nil) => "1234"
我非常希望不在重写字符串文件中抛出未修改的字符串。任何帮助将不胜感激。
答案 0 :(得分:4)
怎么样
NSLocalizedStringWithDefaultValue(@"some-string",
@"additionalStringsTableName",
[NSBundle mainBundle],
NSLocalizedString(@"some-string", nil),
nil);
在覆盖的字符串文件中执行查找。如果失败,则返回默认的NSLocalizedString()
结果。
拥有整个代码是一件相当难看的事情。因此,您可能希望通过一些宏魔术来获得更短的通话时间。像这样:
#define MyLocalizedString(key, comment) NSLocalizedStringWithDefaultValue(key,
OVERRIDE_TABLE_NAME,
[NSBundle mainBundle],
NSLocalizedString(key, comment),
comment);
(为清晰起见,写在多行上)。然后,您可以将OVERRIDE_TABLE_NAME
定义为编译器选项。