我可以将一个localizable.strings文件加载到iOS应用程序中吗?
比方说,我的应用程序只能用英文运行。 但我不想每次添加新语言时都要发布一个新版本。 我的build议是将这个localizable.strings
文件远程加载到我的应用程序。
我的应用程序有加载文件从FTP站点的设施。
你们认为可以用这种方式加载语言吗? 或者,应用程序是否需要在编译时编译语言文件?
所有本地化的string资源(加上许多其他types的资源)都从该包中提取。 通常,一个应用程序使用“主包”,这是由XCode与您的应用程序一起创build的“主包”。 但是,您可以单独创build任何其他包,只要您使用正确的结构,然后可以将其下载到应用程序中,最后使用NSLocalizedStringFromTableInBundle()函数提取本地化的string。
所以我们假设你为一个关键的“KEY”提取语言翻译,那么正常的语法是:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
但是这个选项有一个变种,允许你指定这个包:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
在标准情况下,你用[NSBundle mainBundle]
replacemyBundle
,但是如果你想使用另一个bundle,你可以这样指定它:
NSString *myBundlePath = "the path to the downloaded bundle"; NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath]; NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
一个包的完整结构可以在Apple文档的“Bundle编程指南”中看到,但对于您的情况,您可以简单地创build:
- 在你的Mac上创build一个目录,并称之为“MyBundle”
- 在这个目录里移动你的本地化的string(如果你在bundle中有多种语言,那么localizable.strings文件将在lproj目录中:en.lproj,it.lproj,fr.lproj …)
- 然后将该目录重命名为“MyBundle.bundle”
你会注意到最后一个操作,现在这个对象被看作是一个独立的对象,但实际上它是一个目录。
现在您可以决定使用多捆绑方式还是使用单捆绑捆绑方式:在后一种情况下,您可以打包所有语言,然后使用自动系统本地化规则将唯一更新的捆绑包用于语言翻译; 在另一种情况下,您可以为每种语言打包,然后 – 根据当前select的语言 – 加载相应的包并为您的翻译select它。
- 智能sortingLocalized.strings文件
- 本地通知何时didEnterRegion?
- iOS Storyboard可本地化的string在UILabel子类中不起作用
- 使用secureTextEntry为UITextFieldselect键盘的语言
- XCode 5 / iOS 7 – 本地化不能在模拟器中工作
- 构build设置:我应该在构build设置中做什么更改,以便在发布应用程序时,它将在App Store上显示为仅英语的语言?
- 增量本地化如何工作?
- 在Xcode中改变开发语言
- IBM Worklight – WL.App.getDeviceLanguage()API方法在iOS中不返回正确的语言代码