2015-09-25 37 views
5

自从我创建iOS应用我用下面的代码翻译/本地化我的应用程序:本地化并不iOS的下工作了9/iOS版9.0.1

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

但由于更新到iOS 9这段代码不工作了。 我所有的应用程序现在都是英文的。

我已经在应用程序商店中拥有的应用程序,以及我在模拟器中运行的应用程序都不再被本地化。

这将是巨大的,如果你能告诉我,我怎么也得在iOS的9

+0

你对'language'有什么看法? – zaph

+0

我总是得到“en”。 其实我用德语运行应用程序,所以我应该得到:“德”。 – EANicolas1

+0

也许它与以下错误有关http://stackoverflow.com/questions/33017981/ios-localization-doesnt-work-with-more-than-63-files?newreg=5def7e334c554377be788b1ce2eace3e –

回答

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)