2015-09-25 72 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)