iphone - 同一应用程序不同目标的替代字符串 - 使用 NSLocalizedString?

标签 iphone objective-c xcode target nslocalizedstring

我正在构建我已经发布的应用程序的一个版本,但有一些更改。这不是精简版/完整版的关系,但它们非常相似,以至于我将同一个项目用于不同的目标。

我想为新版本改写我在第一个版本中使用的几乎所有字符串,并且想知道解决这个问题的最佳方法。我没有在声明每个字符串之前使用#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/

相关文章:

objective-c - 发现对早期 iOS 版本中不可用的方法的调用

ios - Xcode Storyboard约束和自动布局

iphone - UIScrollView - 启用分页后,我可以将页面宽度设置为 "change"吗?

iphone - 在哪里可以找到 NSPredicate for Core Data 的 SUBQUERY 功能的文档?

iphone - 使用选项卡 View 启动应用程序但未选择选项卡?

iphone - 可以从设置应用程序中删除我的应用程序吗?

c# - 切换飞行模式 monotouch xamarin

ios - 在 iOS、 Objective-C 中将 NSMutable 数组设置为对象时,出现 NSUserDefaults 错误

xcode - Swift uipickerview 字体

ios - XCode - 工作区