如何在运行时更改iPhone应用程序语言?

shi*_*jin 14 iphone performance internationalization

有没有办法在运行时更改应用程序语言?

因此,更改后NSLocalizedString立即返回新语言的字符串.

我现在正在做的是使用以下代码更改语言:

- (void)onChangeLanguage: (id)sender 
{
    NSArray *lang = [NSArray arrayWithObjects:((InfoWhatever *)sender).language, nil];
    [[NSUserDefaults standardUserDefaults] setObject:lang forKey:@"AppleLanguages"];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
    NSString *currentLanguage = [languages objectAtIndex:0];

    NSLog(@"Current language: %@", currentLanguage);
}
Run Code Online (Sandbox Code Playgroud)

只有在重新启动应用程序,语言才会更改.

小智 11

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
[languages insertObject:@"de" atIndex:0]; // ISO639-1
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)


obj*_*2.0 7

从应用程序中选择特定语言的技巧是强制NSLocalizedString根据所选语言使用特定的语言,

这是我为此撰写的帖子http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

这是一个示例应用程序的代码https://github.com/object2dot0/Advance-Localization-in-ios-apps


Mad*_*Nik 7

你能行的 .这是http://aggressive-mediocrity.blogspot.com/2010/03/custom-localization-system-for-your.html的方式

  1. 简介下载并向项目添加2个文件

    http://dl.dropbox.com/u/2917666/LocalizationSystem/LocalizationSystem.h

    http://dl.dropbox.com/u/2917666/LocalizationSystem/LocalizationSystem.m

2
#import "LocalizationSystem.h"

3

- (IBAction)btnEnglishClicked:(id)sender {
     LocalizationSetLanguage(@"en");
}
Run Code Online (Sandbox Code Playgroud)

4设置上述语言后

AMLocalizedString(@"Key", nil)
Run Code Online (Sandbox Code Playgroud)

多数民众赞成.


oef*_*efe 5

我怀疑你能做到这一点,即使设置应用程序也无法做到这一点.

(当您在"设置"应用程序中更改语言时,屏幕变黑,并显示"设置语言..."和进度轮.经过漫长的等待,您回到了Springboard.它几乎看起来像手机重新启动.)

  • 我花了很长时间才设计出一个解决方案.我实际上最终使用'NSLocalizedStringFromTable'宏和'AppleLanguages'设置来设置和检查语言设置.如果有机会,我会写一个实际的答案.也许你应该删除这个答案?看到一个愚蠢而又被接受的答案并不能完全激励任何人花费大量精力. (2认同)