2011-01-20 76 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並將其放置在某處。希望這可以幫助!

相關問題