感谢季米特里斯。所以在运行时改变语言并不那么简单。
我发现这在我的情况下,有效的解决方案:
当用户更改我用莫罗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。它甚至可以激活与激活的标签索引相同的标签索引,因此对于用户来说,除了语言外,其他任何东西都会改变。
当然,在所有视图中未保存的数据丢失,因此,如果这是一个问题,你必须找到一种方法重置之前保存这一点。
不错!感谢分享。 – 2011-01-20 18:40:54