首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >本地化和CocoaPods

本地化和CocoaPods
EN

Stack Overflow用户
提问于 2012-10-13 23:45:54
回答 2查看 8.6K关注 0票数 20

我有一个使用CocoaPods的项目。因此,我有一个包含两个项目的工作区: As和Pods。

Pod包含我想要本地化的代码,并且我已经在Pod中创建了.strings文件。但是,NSLocalizedString无法加载这些字符串。我怀疑这是因为.strings文件不在主包中,而没有Pod包,因为它被编译到一个静态库中。

有没有比我的主项目更好的在CocoaPods项目中本地化代码的方法?

EN

回答 2

Stack Overflow用户

发布于 2013-04-25 16:34:55

NSLocalizedString只是调用了NSBundle的localizedStringForKey:value:table:,所以我写了一个NSBundle类别,以便能够查看几个包(在iOS中,这些包只是文件夹):

代码语言:javascript
复制
NSString * const kLocalizedStringNotFound = @"kLocalizedStringNotFound";

+ (NSString *)localizedStringForKey:(NSString *)key
                              value:(NSString *)value
                              table:(NSString *)tableName
                       backupBundle:(NSBundle *)bundle
{
    // First try main bundle
    NSString * string = [[NSBundle mainBundle] localizedStringForKey:key
                                                               value:kLocalizedStringNotFound
                                                               table:tableName];

    // Then try the backup bundle
    if ([string isEqualToString:kLocalizedStringNotFound])
    {
        string = [bundle localizedStringForKey:key
                                         value:kLocalizedStringNotFound
                                         table:tableName];
    }

    // Still not found?
    if ([string isEqualToString:kLocalizedStringNotFound])
    {
        NSLog(@"No localized string for '%@' in '%@'", key, tableName);
        string = value.length > 0 ? value : key;
    }

    return string;
}

然后在我的前缀文件中重新定义NSLocalizedString宏:

代码语言:javascript
复制
#undef  NSLocalizedString
#define NSLocalizedString(key, comment) \
[NSBundle localizedStringForKey:key value:nil table:@"MyStringsFile" backupBundle:AlternativeBundleInsideMain]

如果需要,对其他宏也是如此(即NSLocalizedStringWithDefaultValue)

票数 12
EN

Stack Overflow用户

发布于 2020-09-09 21:14:38

对于swift,您可以使用Loc枚举:

代码语言:javascript
复制
enum Loc : String{
case ok = "OK"
case cancel = "Cancel"

var localized: String {
    let s = self.rawValue
    let bundle = Bundle(for: <classname inside the bundle>.self)
    let result = NSLocalizedString(s, tableName: nil, bundle: bundle, value: "", comment: "")
    return result;
}

}

并这样使用它:

代码语言:javascript
复制
let s = Loc.ok.localized
print(s)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12874678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档