gpt4 book ai didi

ios - NSLocalizedString 的宏不起作用

转载 作者:行者123 更新时间:2023-11-29 00:31:38 25 4
gpt4 key购买 nike

我在 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 都能为我提供正确的英文翻译,但它永远不会改变,并且始终是默认语言。我的代码有什么问题?

最佳答案

在调试你的宏之前,我会设置一个测试如下:

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);

然后查看它的输出。您的错误可能在某处。

我希望:

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] 输出第一,第二

关于ios - NSLocalizedString 的宏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com