有没有办法让本地化或 Localizable.strings 从 NSBundle 之外的目录中读取?
我试图让我的应用程序从通过服务器下载的文件中读取本地化,有没有办法做到这一点?
提前致谢。
有没有办法让本地化或 Localizable.strings 从 NSBundle 之外的目录中读取?
我试图让我的应用程序从通过服务器下载的文件中读取本地化,有没有办法做到这一点?
提前致谢。
您必须编写自己的 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
你必须自己把这些碎片拼凑起来。没有任何内置工具可以做到这一点。您的本地化可以只是序列化字典,其中开发语言字符串作为键,本地化字符串作为值。您可以序列化为 plist,这可能最方便编辑,也可以使用键控存档,这可能更紧凑。