0

有没有办法让本地化或 Localizable.strings 从 NSBundle 之外的目录中读取?

我试图让我的应用程序从通过服务器下载的文件中读取本地化,有没有办法做到这一点?

提前致谢。

4

2 回答 2

2

您必须编写自己的 MyLocalizedString 函数来手动读取文件。.strings 文件实际上是一种旧类型的属性列表,因此可以使用如下NSPropertyListSerialization类读取它:

id plist = [NSPropertyListSerialization
               propertyListWithData:[NSData dataWithContentsOfFile:stringsFilePath]
                            options:0
                             format:NULL
                              error:&error];

plist只是一个 NSDictionary,所以你可以从结果中读取一个字符串值,如下所示:

[plist objectForKey:@"my_string"];

您可能应该实现某种缓存,这样您就不会为每个字符串查找解析整个文件。

请注意,如果您正在使用genstrings和其他相关的命令行工具,您可以使用以下选项来指定自定义查找函数的名称:

Usage: genstrings [OPTION] file1.[mc] ... filen.[mc]

...[snip]...

-s substring             substitute 'substring' for NSLocalizedString.

如果这些字符串文件被上传到服务器,您可以通过首先将它们转换为二进制 plist 格式来稍微提高应用程序的性能(这是 Xcode 在构建期间通常会做的事情):

plutil -convert binary1 myStrings.strings
于 2012-04-17T13:17:02.163 回答
0

你必须自己把这些碎片拼凑起来。没有任何内置工具可以做到这一点。您的本地化可以只是序列化字典,其中开发语言字符串作为键,本地化字符串作为值。您可以序列化为 plist,这可能最方便编辑,也可以使用键控存档,这可能更紧凑。

于 2012-04-17T13:10:29.670 回答