3

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

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

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

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

"some-string" = "overridden-value"

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

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

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

4

1 回答 1

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为一个编译器选项。

于 2013-04-03T19:45:33.930 回答