2011-01-20 95 views
0

我想给用户更改我的应用程序中的语言的可能性。在应用程序中更改语言 - 如何重新启动?

做到这一点的方式描述here,在MonoTouch的代码的首选语言荷兰语和替代语言设置为英文:

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

您必须重新启动之前,这将生效的应用程序。但在iPhone 4上,关闭它时,应用程序不会重新启动,它只是隐藏起来。有没有办法强制关闭后重新启动应用程序?

回答

5

感谢季米特里斯。所以在运行时改变语言并不那么简单。

我发现这在我的情况下,有效的解决方案:

当用户更改我用莫罗Delrio在"How to force NSLocalizedString to use a specific language"描述的解决方案的语言。在MonoTouch的:

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(); 

目前所有的观点被布置和正确的语言重新创建。看起来像一个伎俩,但它是完全合法的和记录,见Apple documentation for MainTabBarController viewControllers property。它甚至可以激活与激活的标签索引相同的标签索引,因此对于用户来说,除了语言外,其他任何东西都会改变。

当然,在所有视图中未保存的数据丢失,因此,如果这是一个问题,你必须找到一种方法重置之前保存这一点。

+0

不错!感谢分享。 – 2011-01-20 18:40:54

1

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

0

的代码作为附加的注释,迫使UIBarButtonSystemItem改变自己的语言环境,必须添加

<key>CFBundleDevelopmentRegion</key> 
<string>nl</string> 

到您的info.plist。只需启动TextEdit并将其放置在某处。希望这可以帮助!

相关问题