如何以编程方式更改应用程序语言而不重新启动我的应用程序?

时间:2013-04-03 11:47:18

标签: iphone ios objective-c xcode

如果我只需要更改文本字符串,那么它很简单,但是 如何更改图片或xib文件(用于每个本地化)?

设置本地化的代码:

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

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

(如果我已完成此代码,应用程序已关闭,以便下次应用启动时使用为所选语言设置的所有资源)

如何在不重新启动应用的情况下执行相同操作?

我找到了很多例子,但这些例子显示了如何处理文本,但是如何使用其他资源,以及如何更新(对于当前选择的语言)?

例子: Change iOS app's language on the fly

language change only after restart on iphone

3 个答案:

答案 0 :(得分:1)

你不能这样做(没有越狱)。您应该以某种方式编写应用程序代码,以便在某些重要信息发生更改时重新开始,而无需重新启动应用程序。例如,您可以弹出所有视图控制器并取消分配它们,然后让用户使用正确的语言重新加载它们。

但请注意,通常你不应该这样做。在iOS上以非常优雅的方式解决了本地化问题。您只需本地化.strings(以及可选的.nib和图像文件),系统会为您完成剩下的工作。当用户更改“设置”应用中的语言时,系统将终止您的应用。下次用户启动应用程序时,它将加载正确的语言。

答案 1 :(得分:0)

为什么要重新启动应用程序?我认为这是不可能的。但是你可以在applicationDidBecomeActiveapplicationWillEnterForeground方法

中做任何改变。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}

答案 2 :(得分:0)

这是不可能的,

虽然有一招

1>从您的应用程序使用自定义URL打开safari浏览器(例如com.yourcompany.yourApp)

2 - ;在您的应用程序中注册自定义URL(来自plist文件,您可以这样做),当Safari中的自定义URL打开时,将从safari打开您的应用程序。

3>从.plist文件中关闭“应用程序应在后台运行”。 (您可以通过将UIApplicationExitsOnSuspend键添加到应用程序的Info.plist文件并将其值设置为YES来实现此目的。)