在应用程序中更改语言 - 如何重新启动?

时间:2011-01-20 15:45:09

标签: iphone xamarin.ios

我想让用户可以在我的应用中更改语言。

这样做的方法是here,在单字母代码中将首选语言设置为荷兰语,将替代语言设置为英语:

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

您必须重新启动应用程序才能生效。但是在iPhone 4上,关闭它时应用程序不会重新启动,它只是隐藏了。有没有办法强制应用程序在关闭后重新启动?

4 个答案:

答案 0 :(得分:6)

感谢迪米特里斯。因此,在运行时更改语言并不是那么简单。

我找到了一个适用于我的解决方案:

当用户更改语言时,我使用Mauro 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()
        };
    }
}

所以我要做的就是调用Reset,如:

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

以正确的语言处理和重新创建所有当前视图。似乎是一个技巧,但它完全合法且有文档记录,请参阅Apple documentation for MainTabBarController viewControllers property。它甚至激活与活动的选项卡索引相同的选项卡索引,因此对于用户来说似乎只有语言被更改。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

通过从应用程序中选择使用特定语言的技巧是强制NSLocalizedString根据所选语言使用特定的包,

这是我为此http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

撰写的帖子

以下是一个示例应用https://github.com/object2dot0/Advance-Localization-in-ios-apps

的代码

答案 3 :(得分:0)

另外需要注意的是,要强制UIBarButtonSystemItem更改其区域设置,您必须添加

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

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