Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Ios 如何在不重新启动的情况下从应用程序内部更改应用程序的本地化?_Ios_Objective C_Iphone_Xcode_Localization - Fatal编程技术网

Ios 如何在不重新启动的情况下从应用程序内部更改应用程序的本地化?

Ios 如何在不重新启动的情况下从应用程序内部更改应用程序的本地化?,ios,objective-c,iphone,xcode,localization,Ios,Objective C,Iphone,Xcode,Localization,我遇到了一个问题,应用程序中有语言设置,用户可以随时更改,但是 当我使用此代码更改它时,例如 [[NSUserDefaults standardUserDefaults] setObject:@[@"de", @"en", @"it"] forKey:@"AppleLanguages"]; 它在重新启动应用程序之前不会生效,因为包已加载到appDelegate中,对吗 所以我尝试了这个解决方案 但已加载的ViewController不起作用,因此 我怎样才能在不重新启动应用程序语言的情况下更

我遇到了一个问题,应用程序中有语言设置,用户可以随时更改,但是

当我使用此代码更改它时,例如

[[NSUserDefaults standardUserDefaults] setObject:@[@"de", @"en", @"it"] forKey:@"AppleLanguages"];
它在重新启动应用程序之前不会生效,因为包已加载到appDelegate中,对吗

所以我尝试了这个解决方案

但已加载的ViewController不起作用,因此

我怎样才能在不重新启动应用程序语言的情况下更新应用程序语言,以及在不更改
NSLog
其他用法的情况下更新应用程序语言?有什么办法吗


如果您有任何意见,我将不胜感激。

您必须实现一个类,该类将加载与项目中可用语言对应的每个本地化.string

然后创建viewController以允许选择新语言
当用户选择语言时,您必须重新加载语言标签,并通知每个控制器它必须刷新自身

我在我的一些应用程序中做了这个


我创建了一个宏,将我的viewController作为代理添加到languageManager。

重新启动应用程序有什么问题?你真的需要用户在你的应用程序中更改设置吗(系统设置有什么问题)?你完全可以自由地实现自己的本地化机制。实际上,仅仅因为可以在应用程序中更改首选语言而无需重新启动,这就更奇妙了。因此,在这一点上,我的问题是,我是否应该使用NSLocalizedString以外的其他工具来更改本地化机制,或者是否有任何方法可以立即更改语言,而不必替换以前已经使用过的NSLocalizedString。我实际上有一个允许选择新语言的viewController。刷新控制器和重新加载语言标签是什么意思。对于语言标签,我使用NSLocalizedString。您必须从翻译管理器执行宏或调用方法,而不是NSLocalizedString。像这样,是translationManager返回翻译。那么让我明确一点,您的建议是否意味着在您提到的实现结束时用manager方法替换每个NSLocalizedString?是的,这正是。在我的应用程序中,我把它命名为“LL(key)”,就像“locallanguage”,实际上我在寻找一种不取代NSLocalizedString用法的方法