2017-01-12 47 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