从静态库中的应用程序加载本地化字符串?

时间:2014-09-11 14:25:13

标签: ios objective-c xcode localization translation

我有一个分层的项目,底层的项目作为静态库包含在顶层项目中。

问题是我需要使用我的应用程序(上层)中的翻译来本地化静态库中的字符串。

这有可能吗?

2 个答案:

答案 0 :(得分:0)

我设法做到这一点的方法是从包中加载字符串而不是使用NSLocalizedString

+ (NSString *)getTranslationFromAppBundleForString:(NSString *)originalText {

    NSString * lang = [[NSLocale preferredLanguages] objectAtIndex:0];
    NSString * bundlePath = [[NSBundle mainBundle] pathForResource:lang ofType:@"lproj"];
    NSBundle * bundle = [NSBundle bundleWithPath:bundlePath];

    return [bundle localizedStringForKey:originalText value:originalText table:nil];
}

答案 1 :(得分:0)

您可以在静态库中创建LanguageAgent,在该库中添加bundle ressource。然后使用这样的函数来获取localizedString。在我的应用程序中,我通过不同的表格分隔语言(请参阅下面的图片,以获取名为“Dictionaire”的表格。您的语言包中可以包含多个表格。

-(NSString*) myLocalizedStringForKey:(NSString*) key ofTable:(NSString*)tableName {
    //I save selected language in my NSUserDefaults.
    NSString *selectedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"];

    if (selectedLanguage == nil) {
        [[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"DefaultLanguage"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        selectedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"];
     }

    NSString *langBundleNew = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/langs/Languages.bundle/%@.lproj/",selectedLanguage]; //use your path to the Languages.bundle here. 

    if ([[NSFileManager defaultManager] fileExistsAtPath:langBundleNew]) {
        NSBundle *aBundle = (NSBundle*)[self.dictLangueBundle objectForKey:selectedLanguage];
         NSString* str=[aBundle localizedStringForKey:key value:@"[string not defined]" table:tableName];
         return str;
    } else {
        return @"[]";
    }
}

我的语言包类似于:('Dictionaire'=表名)

enter image description here

以下是我在Dictionnaire.strings中为'en.lproj'提供的内容示例:

enter image description here