您好我想为iPhone / iPad创建一个应用程序,在初始页面上,我希望用户可以选择更改应用程序的语言(默认语言为英语)。根据用户选择的语言,例如西班牙语,初始页面文本和按钮都将使用西班牙语。然后,按下按钮后,下一个视图也是西班牙语。 (后面的按钮也是西班牙语)
我怎么能这样做?请记住,我不想使用本地化。相反,我希望用户不得不在相同的应用程序中更改应用程序的语言,而不是设置应用程序。
非常感谢帮助我们举几个例子。
非常感谢你!
答案 0 :(得分:2)
我已经这样做了几次。 iOS是不为此而设计的,您应该做的第一件事就是重新考虑您的方法或回到客户端并确保它是必要的。只有少数情况下这种方法是正确的,这主要是一个错误。
您的第一个问题是本地化字符串资源。 NSBundle
提供了加载本地化字符串的方法。有一个单例类来管理您当前选择的语言。更改语言时,它可以将en.lproj
目录(或选择的任何语言)作为一个包加载。从那时起,不要使用通常的宏来获取本地化的字符串资源,而是使用单例上的方法从当前包中获取它们。
这同样适用于图像和其他资源 - 您的单身人士知道正在使用哪个本地化捆绑包,因此请询问您所需的资源。
当您更改语言时,请告诉您的单身人士,您的单身人士可以加载相关的捆绑并发布通知,以便您的视图控制器知道自己更新。
如果幸运的话,您的笔尖布局可以独立于语言而无需修改。这意味着您可以设置其他人继承的基本视图控制器,该控制器具有本地化界面元素的插座集合。它应该监听通知并走集合以更新必要的项目。
如果你运气不好并且不同的本地化需要不同的布局,你可能需要保存状态,从你的单身人士获取相关的笔尖,然后重新加载所有内容并恢复状态。
你也有一个无法完全解决的问题 - iOS仍然会认为它是主系统语言。如果iOS提供的内容不受您的控制,它将被本地化为主系统语言。您可以通过在应用程序完全初始化之前将用户首选项AppleLanguages
设置为包含区域设置的字符串(即在main.c
中)来缓解这一点。但是,这只能在启动应用程序时更改语言。
答案 1 :(得分:0)
可能的实施:
使用CoreData创建本地化字符串表
存储名称/密钥,语言和值。
然后,您需要构建一个管理器类来帮助您阅读值。在这里使用单身可能是一个很好的方法。然后你可以做这样的事情:
[[LanguageManager] instance] getLocalizedString:@"mainView_title" forLang:@"en"];
答案 2 :(得分:0)
您是否尝试过结帐this article?
我看到你要求不使用本地化,但我想出的唯一原因是因为你想在运行时更改语言。
该帖子随后提供(并解释如何使用)自定义实用程序类,以满足您的需求,利用SDK现有的部分本地化功能。
希望这会有用。