本地化在iOS 9 / iOS 9.0.1下不再起作用。

5

由于我创建iOS应用程序,因此使用以下代码来翻译/本地化我的应用程序:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"de"]) {
    // localized language
}
else { //base language
}

但是自从更新到iOS 9之后,这段代码就不再起作用了。我的所有应用现在都是英文的。

无论是我已经发布到应用商店的应用,还是在模拟器中运行的应用,都不再本地化。

如果您能告诉我如何在iOS 9中以编程方式翻译我的代码,那将非常棒。


你得到了什么关于 language 的内容? - zaph
我总是得到“en”。 实际上,我在德语环境下运行应用程序,所以我应该得到:“de”。 - EANicolas1
也许这与以下错误有关:http://stackoverflow.com/questions/33017981/ios-localization-doesnt-work-with-more-than-63-files?newreg=5def7e334c554377be788b1ce2eace3e - Rafael Munhoz
2个回答

1

我可以解决这个问题。

如果我使用以下代码,在iOS 9下本地化工作正常。

[[NSBundle mainBundle] preferredLocalizations];
NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
        if ([language isEqualToString:@"de"]){
            // localization
        }
        else {
            //base language
        }

我希望这也能对你们中的一些人有所帮助。


0
我建议使用一个类别类来本地化指定语言的字符串,该类别类可以自动检测当前语言并进行本地化。
创建一个名为RunTimeLanguage的类别类。
.h文件。
#import <Foundation/Foundation.h>

@interface NSBundle (RunTimeLanguage)
#define NSLocalizeString(key, comment) [[NSBundle mainBundle] runTimeLocalizedStringForKey:(key) value:@"" table:nil]
- (NSString *)runTimeLocalizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName;

@end

.m 文件

#import "NSBundle+RunTimeLanguage.h"

@implementation NSBundle (RunTimeLanguage)
- (NSString *)runTimeLocalizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName
{
    NSString *StrCurrentLang = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
    NSString *path= [[NSBundle mainBundle] pathForResource:StrCurrentLang ofType:@"lproj"];
    NSBundle *languageBundle = [NSBundle bundleWithPath:path];
    NSString *localizedString=[languageBundle localizedStringForKey:key value:key table:nil];
    return localizedString;
}
@end

您可以使用以下语句直接访问本地化的值。

NSLocalizeString(@"yourText", nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接