2011-01-20 6 views
0

私は自分のアプリで言語を変更する可能性をユーザーに与えたいと思っています。これを行うにはアプリの言語を変更する - 再起動する方法は?

方法は、英語にオランダと代替言語への優先言語を設定するMonoTouchでのコードでは、hereに記載されている:

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

あなたはこれを有効にする前に、アプリケーションを再起動する必要があります。しかし、iPhone 4では、アプリケーションを閉じると再起動しません。ただ隠されています。終了後にアプリを強制的に再起動する方法はありますか?

答えて

5

ありがとうDimitris。したがって、実行時に言語を変更するのは簡単ではありません。ユーザーは、私が"How to force NSLocalizedString to use a specific language"にマウロDelrioで説明するソリューションを使用する言語を変更

は、私は私の場合に機能するソリューションを見つけました。 MonoTouchでで:

string newLanguage = "nl"; 
    myBundle = NSBundle.FromPath(NSBundle.MainBundle.PathForResource(newLanguage, "lproj")); 

すべての文字列は、今myBundle.LocalizedString(...)で選択した言語でロードされます。もちろん、ビューにすでに印刷されているものはすべて翻訳されていません。しかし、私はすべてのビューをリセットする簡単な方法を見つけました。現在のすべてのビューが配置され、正しい言語で再作成

((AppDelegate)UIApplication.SharedApplication.Delegate).MainTabBarController.Reset(); 

:だから私がしなければならないすべては次のようにリセット呼んで

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

:私のアプリでは、私はこのようになりますどのMainTabControllerを使用します。トリックのように見えますが、それは完全に合法であり、文書化されています。Apple documentation for MainTabBarController viewControllers propertyを参照してください。これは、アクティブなものと同じタブインデックスをアクティブにするため、ユーザーにとっては言語だけが変更されているようです。

もちろん、すべてのビューの保存されていないデータは失われるため、問題がある場合は、リセットする前に保存する方法を見つける必要があります。

+0

ニース!共有してくれてありがとう。素敵な答えと役に立つ情報のためには –

+0

+1。 – bharath

1

いいえいいえアプリを再起動する方法はありません。ユーザーがInfo.plistファイルの "UIApplicationExitsOnSuspend"プロパティをtrueに設定して、ホームボタンを押したときにのみ強制終了できます。

0

アプリからそれを選択することで、特定の言語を使用するためのトリックは、選択した言語に応じて、特定のバンドルを使用するNSLocalizedStringを強制することです、ここ

は、私はこのhttp://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

のために書かれているポストでありますここでの一つのサンプルアプリhttps://github.com/object2dot0/Advance-Localization-in-ios-apps

0

のコードが自分のロケールを変更するUIBarButtonSystemItemを強制するために、追加の注意点として、あなたが

<key>CFBundleDevelopmentRegion</key> 
<string>nl</string> 
を追加する必要がありますinfo.plistに

TextEditを起動し、どこかに配置してください。お役に立てれば!

関連する問題