Iphone 更改应用程序中的语言-如何重新启动?

Iphone 更改应用程序中的语言-如何重新启动?,iphone,xamarin.ios,Iphone,Xamarin.ios,我想让用户有可能更改我应用程序中的语言 使用monotouch代码说明了如何将首选语言设置为荷兰语,将备用语言设置为英语: NSUserDefaults.StandardUserDefaults.SetValueForKey (NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages")); 您必须重新启动应用程序才能生效。但在iPhone4上,当你关闭应用程序时,它不会重新启动,只是被隐藏了

我想让用户有可能更改我应用程序中的语言

使用monotouch代码说明了如何将首选语言设置为荷兰语,将备用语言设置为英语:

  NSUserDefaults.StandardUserDefaults.SetValueForKey
                (NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages"));

您必须重新启动应用程序才能生效。但在iPhone4上,当你关闭应用程序时,它不会重新启动,只是被隐藏了起来。有没有办法在关闭后强制重新启动应用程序?

没有办法重新启动应用程序。您只能通过将Info.plist文件中的属性“UIApplicationExitsOnSuspend”设置为true,在用户按下“主页”按钮时强制其终止。

谢谢Dimitris。因此,在运行时更改语言并不是那么简单

我找到了一个适合我的解决方案:

当用户更改语言时,我使用Mauro Delrio在中描述的解决方案。单触式:

    string newLanguage = "nl";
    myBundle = NSBundle.FromPath(NSBundle.MainBundle.PathForResource(newLanguage, "lproj"));
所有字符串现在都将使用myBundle.LocalizedString(…)以所选语言加载。当然,视图上已经打印的所有内容都尚未翻译。但是我找到了一个简单的方法来重置所有视图。在我的应用程序中,我使用的MainTabController如下所示:

public class MainTabBarController : UITabBarController
{
    public override void ViewDidLoad()
    {
        Reset();
        SelectedIndex = 2;
    }

    public void Reset()
    {
        ViewControllers = new UIViewController[]
        {
            new ViewControllerTab1(),
            new ViewControllerTab2(),
            new ViewControllerTab3(),
            new ViewControllerTab4(),
            new ViewControllerTab5()
        };
    }
}
所以我要做的就是调用重置,比如:

((AppDelegate)UIApplication.SharedApplication.Delegate).MainTabBarController.Reset();
将以正确的语言处理和重新创建所有当前视图。这似乎是一个骗局,但它是完全合法和有文件证明的,见。它甚至激活了与激活的选项卡索引相同的选项卡索引,因此对于用户来说,似乎除了语言之外什么都没有改变


当然,所有视图中任何未保存的数据都会丢失,因此如果这是一个问题,您必须在重置之前找到保存该数据的方法

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

这是我为此写的帖子


下面是一个示例应用程序的代码,作为附加说明,要强制UIBarButtonSystemItem更改其区域设置,您必须添加

<key>CFBundleDevelopmentRegion</key> 
 <string>nl</string> 
CbundledDevelopmentRegion
nl
到你的info.plist。只需启动TextEdit并将其放置在某个位置。希望这有帮助