感謝季米特里斯。所以在運行時改變語言並不那麼簡單。
我發現這在我的情況下,有效的解決方案:
當用戶更改我用莫羅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