我想让用户可以在我的应用中更改语言。
这样做的方法是here,在单字母代码中将首选语言设置为荷兰语,将替代语言设置为英语:
NSUserDefaults.StandardUserDefaults.SetValueForKey
(NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages"));
您必须重新启动应用程序才能生效。但是在iPhone 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并将其放在某处。希望这有帮助!