我的实现使用一个类来改变语言并访问当前的语言包。这是一个例子,所以如果你要使用不同的语言,那么就改变使用你的确切语言代码的方法。
该类将从NSLocale中访问首选语言,并获取第一个使用该语言的对象。
@implementation OSLocalization
+ (NSBundle *)currentLanguageBundle
{
// Default language incase an unsupported language is found
NSString *language = @"en";
if ([NSLocale preferredLanguages].count) {
// Check first object to be of type "en","es" etc
// Codes seen by my eyes: "en-US","en","es-US","es" etc
NSString *letterCode = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([letterCode rangeOfString:@"en"].location != NSNotFound) {
// English
language = @"en";
} else if ([letterCode rangeOfString:@"es"].location != NSNotFound) {
// Spanish
language = @"es";
} else if ([letterCode rangeOfString:@"fr"].location != NSNotFound) {
// French
language = @"fr";
} // Add more if needed
}
return [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]];
}
/// Check if preferred language is English
+ (BOOL)isCurrentLanguageEnglish
{
if (![NSLocale preferredLanguages].count) {
// Just incase check for no items in array
return YES;
}
if ([[[NSLocale preferredLanguages] objectAtIndex:0] rangeOfString:@"en"].location == NSNotFound) {
// No letter code for english found
return NO;
} else {
// Tis English
return YES;
}
}
/* Swap language between English & Spanish
* Could send a string argument to directly pass the new language
*/
+ (void)changeCurrentLanguage
{
if ([self isCurrentLanguageEnglish]) {
[[NSUserDefaults standardUserDefaults] setObject:@[@"es"] forKey:@"AppleLanguages"];
} else {
[[NSUserDefaults standardUserDefaults] setObject:@[@"en"] forKey:@"AppleLanguages"];
}
}
@end
使用上面的类引用的字符串的文件/图像/视频/等:
// Access a localized image
[[OSLocalization currentLanguageBundle] pathForResource:@"my_image_name.png" ofType:nil]
// Access a localized string from Localizable.strings file
NSLocalizedStringFromTableInBundle(@"StringKey", nil, [OSLocalization currentLanguageBundle], @"comment")
更改语言的在线像下面或更新的类“changeCurrentLanguage”方法以上取一个引用新语言代码的字符串参数。
// Change the preferred language to Spanish
[[NSUserDefaults standardUserDefaults] setObject:@[@"es"] forKey:@"AppleLanguages"];
如何删除窗口并像'application:didFinishLaunchingWithOptions:'中一样重建接口。没有尝试过自己,但也许这个作品 – 2012-09-01 10:46:10
评论[这个链接] [1]可能会帮助你。 [1]:http://stackoverflow.com/questions/1576904/how-to-change-iphone-app-language-during-runtime –
[此酮](HTTP的可能重复:// stackoverflow.com/questions/11578298/change-application-language-setting-in-ios-not-the-whole-device/11578590#11578590)。另外,我在那里发布了一个简单的答案。 您可以为每种语言创建一个包含所有必需字符串的文档,并从中加载它们。 –