可以说我的应用程序只能用英文运行。但我不想每次添加新语言时都要发布新版本。我的建议是将这个localizable.strings
文件远程加载到我的应用程序中。我可以将一个localizable.strings文件加载到iOS应用程序中吗
我的应用程序具有从ftp站点加载文件的功能。
你们认为可以用这种方式加载语言吗?或者,应用程序是否必须在编译时编译语言文件?
可以说我的应用程序只能用英文运行。但我不想每次添加新语言时都要发布新版本。我的建议是将这个localizable.strings
文件远程加载到我的应用程序中。我可以将一个localizable.strings文件加载到iOS应用程序中吗
我的应用程序具有从ftp站点加载文件的功能。
你们认为可以用这种方式加载语言吗?或者,应用程序是否必须在编译时编译语言文件?
所有本地化的字符串资源(加上许多其他类型的资源)都从该包中提取。通常,应用程序使用“主包”,这是由XCode与您的应用程序一起创建的“主包”。 但是,如果您使用正确的结构创建它,您可以单独创建任何其他包,然后可以将它下载到您的应用中,最后使用NSLocalizedStringFromTableInBundle()函数提取本地化的字符串。
所以我们说你提取的关键“钥匙”的语言翻译,那么正常的语法为:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
,但有这个选项,允许您指定包的变体:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
在标准情况下你[NSBundle mainBundle]
更换myBundle
但如果你想使用另一种捆绑,你可以用这种方式指定它:
NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
捆绑的完整结构可以看出,在苹果文档的“捆绑编程指南”中,但在你的情况下,你可以简单地创建了这种方式:在您的Mac创建一个目录
您会注意到上一个操作,现在这个对象被看作是一个独立的对象,但实际上它是一个目录。
现在您可以决定采用多捆绑方式还是采用单捆绑技术:在后一种情况下,您可以打包所有语言,然后使用唯一更新的捆绑包进行语言翻译,方法是使用自动系统本地化规则;在另一种情况下,您可以为每种语言制作一个包,然后 - 根据当前选择的语言 - 加载适当的包,并为您的翻译选择它。
同样的问题作为http://stackoverflow.com/questions/12358379/is-it-possible-to-access-the-app-bundles-en-lproj? –
这个问题似乎已被解决[这里](http://stackoverflow.com/a/6075533/1651167) – Shelm
是类似的,但人们根据问他们是如何回答不同的问题。下面这个显然有更好的答案。 – mskw