【问题标题】:How to change app language programmatically WITHOUT restarting my app? [duplicate]如何在不重新启动我的应用程序的情况下以编程方式更改应用程序语言? [复制]
【发布时间】:2013-04-03 11:47:18
【问题描述】:

如果我只需要更改文本字符串,它会很简单,但是 如何更改图像或 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

【问题讨论】:

标签: iphone ios objective-c xcode


【解决方案1】:

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

但是请注意,通常您不应该这样做。本地化在 iOS 上以一种非常优雅的方式解决。您只需本地化 .strings(以及可选的 .nib 和图像文件),系统会为您处理其余部分。当用户在设置应用中更改语言时,您的应用将被系统终止。下次用户启动应用时,它会加载正确的语言。

【讨论】:

    【解决方案2】:

    这是不可能的,

    虽然有一招

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

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

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

    【讨论】:

      【解决方案3】:

      为什么要重新启动应用程序?我认为不可能。但是您可以在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.
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        相关资源
        最近更新 更多