在 iOS 9 / iOS 9.0.1 下本地化不再有效
Localization does not work anymore under iOS 9 / iOS 9.0.1
自从我创建 iOS 个应用后,我使用以下代码翻译/本地化我的应用:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"de"]) {
// localized language
}
else { //base language
}
但是自从更新到 iOS 9 之后,此代码不再有效。
我所有的应用程序现在都是英文的。
我在应用商店中已有的应用以及我在模拟器中 运行 的应用都不再本地化。
如果你能告诉我如何在 iOS 9 中以编程方式翻译我的代码,那就太好了。
我可以解决问题。
如果我使用以下代码,本地化在 iOS 9.
下工作
[[NSBundle mainBundle] preferredLocalizations];
NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
if ([language isEqualToString:@"de"]){
// localization
}
else {
//base language
}
我希望这对你们中的一些人也有帮助。
我建议使用类别 class 来本地化指定语言的字符串,它会自动检测当前语言并对其进行本地化。
创建类别 class 名称
运行时语言
.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)
自从我创建 iOS 个应用后,我使用以下代码翻译/本地化我的应用:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"de"]) {
// localized language
}
else { //base language
}
但是自从更新到 iOS 9 之后,此代码不再有效。 我所有的应用程序现在都是英文的。
我在应用商店中已有的应用以及我在模拟器中 运行 的应用都不再本地化。
如果你能告诉我如何在 iOS 9 中以编程方式翻译我的代码,那就太好了。
我可以解决问题。
如果我使用以下代码,本地化在 iOS 9.
下工作[[NSBundle mainBundle] preferredLocalizations];
NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
if ([language isEqualToString:@"de"]){
// localization
}
else {
//base language
}
我希望这对你们中的一些人也有帮助。
我建议使用类别 class 来本地化指定语言的字符串,它会自动检测当前语言并对其进行本地化。
创建类别 class 名称 运行时语言
.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)