Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在运行时更改NSLocalizedString()的语言_Iphone_Cocoa_Localization - Fatal编程技术网

Iphone 在运行时更改NSLocalizedString()的语言

Iphone 在运行时更改NSLocalizedString()的语言,iphone,cocoa,localization,Iphone,Cocoa,Localization,我有一个iPhone应用程序,它有一个按钮,可以在运行时更改显示语言。我已经研究了NSLocalizedString(),它将根据系统首选项返回适当的字符串。我的选项是什么,而不是硬编码所有显示字符串并根据运行时的用户语言选择返回?任何提示都将不胜感激。正确的“用户体验”是让用户通过系统首选项面板选择自己的语言;不是您的应用程序(或应用程序的设置面板等)。没有办法覆盖每个应用程序,您也不希望任何应用程序更改系统范围的设置。用于强制设置语言顺序 [[NSUserDefaults standardU

我有一个iPhone应用程序,它有一个按钮,可以在运行时更改显示语言。我已经研究了NSLocalizedString(),它将根据系统首选项返回适当的字符串。我的选项是什么,而不是硬编码所有显示字符串并根据运行时的用户语言选择返回?任何提示都将不胜感激。

正确的“用户体验”是让用户通过系统首选项面板选择自己的语言;不是您的应用程序(或应用程序的设置面板等)。没有办法覆盖每个应用程序,您也不希望任何应用程序更改系统范围的设置。

用于强制设置语言顺序

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
然后使用

NSLocalizedString();

要显示本地化字符串…

从应用程序中选择特定语言的诀窍是强制NSLocalizedString根据所选语言使用特定捆绑包

这是我为此写的帖子


下面是一个示例应用程序的代码,它基于用户“object2.0”的帖子,我已经整理了一些示例代码,您可以在应用程序中使用它们动态更改UI语言

完成艰苦工作的主要本地化类:

-(NSString *) localized:(NSString *) key
{
  GameInfo *gameInfo = [GameInfo sharedInstance];

  // langCode should be set as a global variable somewhere
  NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"];

  NSBundle* languageBundle = [NSBundle bundleWithPath:path];
  return [languageBundle localizedStringForKey:key value:@"" table:nil];
}
假设在名为utils的全局类中有此函数,请使用以下代码调用此函数(例如输出单词“Settings”)

要更改语言,请执行以下操作:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"];

我不同意。对于电视游戏,我更喜欢日语,因为我从小就玩日语游戏。但我喜欢在其他应用程序中使用我的母语。我们的应用程序可能不支持引入系统首选项的几个国家的系统首选项,因此,对于许多使用其他第二语言而不是default=EN.T的客户来说,用DE覆盖say EN将是一场胜利他假定应用程序不会同时显示多种语言。我听到两个增强请求:1)用户应该能够指定每个应用程序的首选语言,2)能够指定语言优先级列表。请参阅。尼斯摘要:)顺便说一句,如果在用户动态更改语言后将所选语言保存到NSUserDefaults,我们也可以从NSUserDefaults中获取langCode。(不知道这个操作是否昂贵。)@CheckSmith why“of type:@lproj”?我经常创建Localizable.stringsSee
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"];