我正在构建我已经发布的应用程序的一个版本,但有一些更改。这不是精简版/完整版的关系,但它们非常相似,以至于我将同一个项目用于不同的目标。
我想为新版本改写我在第一个版本中使用的几乎所有字符串,并且想知道解决这个问题的最佳方法。我没有在声明每个字符串之前使用#ifdef/#else 语句,而是考虑使用 NSLocalizedStrings。然而,实际的语言仍然是一样的。
我读入了this post您可以自己设置语言,所以大概我可以发明自己的语言并将其设置为该语言。但我想知道这是否是解决问题的最佳方式?任何建议将是最受欢迎的。
最佳答案
对于任何给定的语言,您可以有多个字符串表(即多个 .strings
文件)。当你想要一个本地化的字符串时,你可以通过以下方式获得它:
NSString *str;
// Look up string in Full.strings
str = [[NSBundle mainBundle] localizedStringForKey:@"SomeKey"
value:@"DefaultValue"
table:@"Full"];
// Look up strings in Lite.strings
str = [[NSBundle mainBundle] localizedStringForKey:@"SomeKey"
value:@"DefaultValue"
table:@"Lite"];
由于此方法的表可以是可变的,您甚至可以在运行时切换它。以上假定您有一个 Full.strings
表和一个 Lite.strings
表。
Full.strings
"SomeKey" = "This string appears in the full version";
Lite.strings
"SomeKey" = "This string appears in the lite version";
您可能不想将它们一起发送,如果是这种情况,您可以配置您的 Info.plist 以包含用于特定目标的表的名称(如果您添加一个名为 "TableToUse 的条目"
,可以通过[[[NSBundle mainBundle] infoDictionary] objectForKey:@"TableToUse"]
)
关于iphone - 同一应用程序不同目标的替代字符串 - 使用 NSLocalizedString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065770/