【问题标题】:Override a base localizable.strings file覆盖基本 localizable.strings 文件
【发布时间】:2014-04-14 14:42:33
【问题描述】:

有没有办法为项目中的多个目标创建一个基本 localizable.strings 文件,并为每个目标创建第二个 localizable.string 文件,该文件将覆盖并将单个值附加到基本文件?

编辑

我希望我的应用程序有两个 .strings 文件 - Localizable.string 和 Override.strings。如果在 OverrideLocalizable.strings 中找不到字符串 Title.Welcome,那么我希望应用程序在 Localizable.strings 中搜索 Title.Welcome。本质上,将 Localizable 指定为后备,但默认使用 OverrideLocalizable.strings。

【问题讨论】:

    标签: ios file localizable.strings


    【解决方案1】:

    这是我找到的解决方案:

    NSString *PSILocalizedString(NSString *key, NSString *comment)
    {
        return NSLocalizedStringWithDefaultValue(key,
                                                 @"OverrideLocalizable",
                                                 [NSBundle mainBundle],
                                                 NSLocalizedString(key, nil),
                                                 comment);
    }
    

    这将在名为OverrideLocalizable.strings 的文件中搜索key。如果在OverrideLocalizable.strings 中找不到key 的值,它将在localizable.strings 中搜索keyNSLocalizedString(key, nil) 默认会搜索localizable.strings

    相当简单优雅的解决方案

    【讨论】:

    • iOS 无法在 OverrideLocalizable 中找到键,并且总是从主 Localizable 文件返回值。我们是否必须将覆盖文件放在某个特定的位置?
    • 确保 Override 文件属于您指定的目标。对于应用程序中的每个目标,我都有一个 Override.strings,对于所有可以访问的目标,我都有一个 Localizable.strings。如果在 Override.strings 中找不到该字符串,则它会从 Localizable.strings 中获取它。
    【解决方案2】:

    对于遇到此问题的 Swift 4 用户...

    func localizedString(
        for key: String, tableName: String = "OverrideLocalizable", 
        bundle: Bundle = .main, comment: String = ""
    ) -> String {
        let defaultValue = NSLocalizedString(key, comment: comment)
        return NSLocalizedString(
            key, tableName: tableName, bundle: bundle, 
            value: defaultValue, comment: comment
        )
    }
    

    【讨论】:

    • 基于@tentmaking 的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2016-09-04
    • 2023-03-11
    • 2014-10-22
    • 2016-05-25
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多