Iphone 更改应用程序中的语言-如何重新启动?
我想让用户有可能更改我应用程序中的语言 使用monotouch代码说明了如何将首选语言设置为荷兰语,将备用语言设置为英语:Iphone 更改应用程序中的语言-如何重新启动?,iphone,xamarin.ios,Iphone,Xamarin.ios,我想让用户有可能更改我应用程序中的语言 使用monotouch代码说明了如何将首选语言设置为荷兰语,将备用语言设置为英语: NSUserDefaults.StandardUserDefaults.SetValueForKey (NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages")); 您必须重新启动应用程序才能生效。但在iPhone4上,当你关闭应用程序时,它不会重新启动,只是被隐藏了
NSUserDefaults.StandardUserDefaults.SetValueForKey
(NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages"));
您必须重新启动应用程序才能生效。但在iPhone4上,当你关闭应用程序时,它不会重新启动,只是被隐藏了起来。有没有办法在关闭后强制重新启动应用程序?没有办法重新启动应用程序。您只能通过将Info.plist文件中的属性“UIApplicationExitsOnSuspend”设置为true,在用户按下“主页”按钮时强制其终止。谢谢Dimitris。因此,在运行时更改语言并不是那么简单 我找到了一个适合我的解决方案: 当用户更改语言时,我使用Mauro Delrio在中描述的解决方案。单触式:
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();
将以正确的语言处理和重新创建所有当前视图。这似乎是一个骗局,但它是完全合法和有文件证明的,见。它甚至激活了与激活的选项卡索引相同的选项卡索引,因此对于用户来说,似乎除了语言之外什么都没有改变
当然,所有视图中任何未保存的数据都会丢失,因此如果这是一个问题,您必须在重置之前找到保存该数据的方法 从应用程序中选择特定语言的诀窍是根据所选语言强制NSLocalizedString使用特定捆绑包 这是我为此写的帖子
下面是一个示例应用程序的代码,作为附加说明,要强制UIBarButtonSystemItem更改其区域设置,您必须添加
<key>CFBundleDevelopmentRegion</key>
<string>nl</string>
CbundledDevelopmentRegion
nl
到你的info.plist。只需启动TextEdit并将其放置在某个位置。希望这有帮助