我的實現使用一個類來改變語言並訪問當前的語言包。這是一個例子,所以如果你要使用不同的語言,那麼就改變使用你的確切語言代碼的方法。
該類將從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)。另外,我在那裏發佈了一個簡單的答案。 您可以爲每種語言創建一個包含所有必需字符串的文檔,並從中加載它們。 –