【问题标题】:NSLocalizedString using external sources in Objective C?NSLocalizedString 在 Objective C 中使用外部源?
【发布时间】:2012-04-17 07:08:00
【问题描述】:

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

我正在尝试让我的应用从通过服务器下载的文件中读取本地化信息,有什么好的方法可以做到这一点吗?

提前致谢。

【问题讨论】:

    标签: objective-c localization localizable.strings


    【解决方案1】:

    您必须编写自己的 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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-29
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-31
        • 2010-10-02
        相关资源
        最近更新 更多