是否可以在Xcode中为字符串文件创建类似于继承的结构?

时间:2013-04-03 19:36:24

标签: ios localizable.strings

我有一个应用程序,它具有基于目标的不同字符串集。是否可以有一个基本字符串文件,然后只覆盖另一个的几个键?

例如,如果我的基本文件是:

"some-string" = "base-value"
"other-string" = "1234"

然后,对于我的一个目标,关联另一个具有以下内容的字符串文件:

"some-string" = "overridden-value"

因此,如果我运行包含附加字符串文件的目标,则输出为:

NSLocalizedString(@"some-string", nil) => "overridden value"
NSLocalizedString(@"other-string", nil) => "1234"

我非常希望不在重写字符串文件中抛出未修改的字符串。任何帮助将不胜感激。

1 个答案:

答案 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定义为编译器选项。