Xcode故事板:从不同的文件加载可本地化的字符串

时间:2014-09-15 19:37:36

标签: ios objective-c iphone xcode nslocalizedstring

我正在尝试构建一个允许动态加载Localizable.strings文件的库。如果以编程方式开发视图,那么这不是问题,因为我可以构建一个单独的NSBundle,将.strings文件存储在其中,并使用NSLocalizedStringFromTableInBundle。

我遇到的问题在于故事板。我还没有设法找到一种方法来指定加载哪个.strings文件(而不是使用Apple使用的默认.strings)。

有没有人知道这方面的解决方案?它甚至不必遵循相同的方法,只要我可以动态更新Storyboard上的字符串。 (在应用启动时,字符串将通过API调用从外部源下拉)

1 个答案:

答案 0 :(得分:0)

从单独的包/字符串源

加载字符串

为了克服我遇到的问题,我在Storyboard的视图集上为每个对象创建了IBOutlets。在每个视图的实现文件中,我通过使用NSLocalizedStringFromTableInBundle以编程方式设置每个对象的文本/值,这允许我指定一个自定义包,可以用字符串文件填充。

如果项目同时具有编程和故事板开发的视图,则此方法还允许仅使用一个Localizable.strings文件,而不是混合使用Storyboard生成的文件,以及仅用于编程视图的文件(如果适用) )。

通过API调用

将字符串加载到应用程序中

不幸的是,上述方法不允许通过API调用从外部源下载字符串。这样做的原因是,Apple不允许在构建之后编辑应用程序包中的任何文件。

因此,解决方案是在应用程序的DocumentsDirectory中构建数据结构,并在必要时对其进行编辑,然后强制应用程序使用此文件/库以获取本地化字符串。不是一个漂亮的解决方案,但它是我能想到的最佳方法。