2017-01-12 43 views
0

我建立這樣的NSLocalizedString宏在我Prefix.pch:宏NSLocalizedString不工作

#undef NSLocalizedString 
#define NSLocalizedString(key,_comment) [[LocalizedText sharedInstance] localizedStringFor:key] 

LocalizedText類看起來是這樣的:

+ (LocalizedText *)sharedInstance { 
    @synchronized(self) 
    { 
     if (_singletonInstance == nil) 
      _singletonInstance = [[LocalizedText alloc] init]; 
    } 

    return _singletonInstance; 
} 

- (NSString *) localizedStringFor:(NSString*) key 
{ 

    NSUserDefaults *deviceLanguage = [NSUserDefaults standardUserDefaults]; 

    NSString *currentLanguage = [deviceLanguage objectForKey:@"deviceLanguage"]; 

    NSString *path; 
    if([currentLanguage isEqual: @"en"]) 
     path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
    else if([currentLanguage isEqual: @"de"]) 
     path = [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 
    else if([currentLanguage isEqual: @"it"]) 
     path = [[NSBundle mainBundle] pathForResource:@"it" ofType:@"lproj"]; 


    NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil]; 

    return str; 

} 

因此,例如,當我改變我的NSUserDefaults@"en",我預計每NSLocalizedString給我正確的英文翻譯,但它永遠不會改變,並且始終是默認語言。我的代碼有什麼問題?

回答

1

之前調試您的宏,我會建立一個測試如下:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *currentLanguage = [defaults objectForKey:@"deviceLanguage"]; 

NSString *key = @"SomeKeyFromYourLocalizedFile"; 
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key]; 
NSLog(@"%@: %@", currentLanguage, localized); 

[defaults setObject:@"de" forKey:@"deviceLanguage"]; 
[defaults synchronize]; 
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key]; 
NSLog(@"%@: %@", currentLanguage, localized); 

[defaults setObject:@"it" forKey:@"deviceLanguage"]; 
[defaults synchronize]; 
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key]; 
NSLog(@"%@: %@", currentLanguage, localized); 

和看的輸出。你的bug可能在那裏。

我想到:

en: English localized 
de: German localized 
it: Italian localized 

之後,你會簡單地使用您的宏(它看起來像它的工作就是這樣)。我想:

#ifdef NSLocalizedString 
#undef NSLocalizedString 
#endif 
#define NSLocalizedString(key, comment) NSLog(@"Output %@, %@", key, comment) 

NSLocalizedString(@"First", @"Second"); 

導致: 2017-01-12 14:31:31.501 App[49000:50650596] Output First, Second

+0

感謝您的幫助,它似乎是「[[LocalizedText sharedInstance] localizedStringFor:關鍵]」完美的作品,但是當我嘗試使用宏函數沒有被調用,所以它似乎是marco它自身的一個問題。 – Davis

+0

這很奇怪!我嘗試了同樣的方式,並且_does_工作。請參閱最新的答案。 – Ramon