gpt4 book ai didi

objective-c - 我可以通过无线方式将 localizable.strings 文件加载到 iOS 应用程序中吗

转载 作者:IT王子 更新时间:2023-10-29 08:05:25 26 4
gpt4 key购买 nike

假设我的应用程序仅以英语运行。但我不想每次添加新语言时都发布新版本。我的建议是将此 localizable.strings 文件远程加载到我的应用程序中。

我的应用程序可以从 ftp 站点加载文件。

你们认为可以用这种方式加载语言吗?还是App必须在编译时编译语言文件?

最佳答案

所有本地化的字符串资源(加上许多其他类型的资源)都从包中提取。通常,应用程序使用“主包”,即由 XCode 与您的应用程序一起创建的包。但是您可以单独创建任何其他包,前提是您使用正确的结构创建它,然后您可以将其下载到您的应用程序中,最后使用 NSLocalizedStringFromTableInBundle() 函数提取本地化字符串。

假设您为键“KEY”提取语言翻译,则正常语法为:

NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);

但是这个选项有一个变体,允许您指定包:

NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);

在标准情况下,您将 myBundle 替换为 [NSBundle mainBundle],但如果您想使用另一个 bundle,您可以这样指定它:

NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);

bundle 的完整结构可以在 Apple 文档的“Bundle Programming Guide”中看到,但在您的情况下,您可以简单地以这种方式创建:

  • 在您的 Mac 中创建一个目录,并将其命名为“MyBundle”
  • 在此目录中移动本地化字符串(如果 bundle 中有多种语言,则 localizable.strings 文件将位于 lproj 目录中:en.lproj、it.lproj、fr.lproj、... )
  • 然后将目录重命名为“MyBundle.bundle”

你会注意到最后一个操作,现在这个对象被视为一个独立的对象,但实际上它是一个目录。

现在您可以决定采用多包方法还是采用单包技术:在后一种情况下,您可以打包所有语言,然后使用自动系统本地化规则使用唯一更新的包进行语言翻译;在另一种情况下,您可以为每种语言制作一个包,然后 - 基于当前选择的语言 - 加载适当的包并为您的翻译选择它。

关于objective-c - 我可以通过无线方式将 localizable.strings 文件加载到 iOS 应用程序中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com