在 Xcode 中为目标添加通用和特定的可本地化文件

Posted

技术标签:

【中文标题】在 Xcode 中为目标添加通用和特定的可本地化文件【英文标题】:Adding general and specific localizable files for targets in Xcode 【发布时间】:2016-03-17 10:38:59 【问题描述】:

我的项目中有两个目标:target1 和 target2。他们每个人都使用他们的 localizable.strings 资源进行本地化。但是它们的 localizable.strings 文件 90% 是相同的。

我想实现这样的行为:

    使用通用字符串创建通用可本地化文件

    使用不同的特殊字符串(例如 app_name)为每个目标创建可本地化的文件

    应用程序应首先在目标的localizable.strings文件中搜索该字符串,如果该字符串不存在,则在公共文件中搜索它

我尝试为每个目标添加 localizable.string 文件,然后创建公共 localizable.string 文件(具有 target1 和 target2 的成员资格),但应用程序只使用公共文件:(

有人知道怎么解决吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

也许您可以创建一个预构建脚本来连接全局字符串中的特定字符串。

或其他解决方案,您可以创建一个函数,先在全局中搜索,然后在特定文件中搜索(这是一个示例,未测试):

- (NSString*) localizedString:(NSString*) key 
    //search in global file
    NSString *transcription = NSLocalizedString(key, "");
    if ([transcription isEqualToString:key]) 
        //search in specific file
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"specific_file" ofType:@"strings"];
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
        return [dict objectForKey:key];
    

    return transcription;

【讨论】:

【参考方案2】:

感谢 lafalex,这里是 swift 2 的代码:

if let path = NSBundle.mainBundle().pathForResource("specific_file", ofType: "strings"), 
   let dict : NSDictionary = NSDictionary(contentsOfFile: path) 
   if let localizedString = dict.objectForKey(key) as? String 
       return localizedString
   

【讨论】:

以上是关于在 Xcode 中为目标添加通用和特定的可本地化文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 podfile 中为我的 Xcode 项目指定多个目标?

如何在 iOS 中为通用应用程序添加新的两个 XIB 文件?

Xcode 帮助 - 升级 iPad 的当前目标

Xcode 为通用应用程序构建名称后缀不正确的 nib 文件

在 asp .net 核心中为 MediatR 库的发送和发布方法添加通用处理程序

将特定目录及其内容添加到通用目标