3

嗨,我想为 iPhone/iPad 创建一个应用程序,在初始页面上,我希望用户可以选择更改应用程序的语言(默认语言是英语)。根据用户选择的语言,例如西班牙语,初始页面文本和按钮都将使用西班牙语。然后,按下按钮后,下一个视图也是西班牙语。(并且后退按钮也是西班牙语)

我怎么能这样做?请记住,我不想使用本地化。相反,我希望用户能够在同一个应用程序内而不是设置应用程序内更改应用程序的语言。

非常感谢您提供一些示例的帮助。

非常感谢您!

4

3 回答 3

2

我已经做过几次了。iOS不是为此而设计的,您应该做的第一件事是重新考虑您的方法或返回客户端并确保它是必要的。只有少数情况下这种方法是正确的,这主要是一个错误。

您的第一个问题是本地化字符串资源。 NSBundle提供加载本地化字符串的方法。有一个单例类来管理您当前选择的语言。当您更改语言时,它可以将en.lproj目录(或选择的任何语言)作为包加载。从那时起,不再使用通常的宏来获取本地化的字符串资源,而是使用单例上的方法从当前包中获取它们。

这同样适用于图像和其他资源——你的单身人士知道哪个本地化包在起作用,所以向它询问你需要的资源。

当您更改语言时,告诉您的单例,您的单例可以加载相关的包并发布通知,以便您的视图控制器知道更新自己。

如果幸运的话,您的 nib 布局无需修改即可独立于语言工作。这意味着您可以设置其他人继承的基本视图控制器,该控制器具有本地化界面元素的出口集合。它应该监听通知并遍历集合以更新必要的项目。

如果你不走运并且不同的本地化需要不同的布局,你可能必须保存状态,从你的单例中获取相关的 nib,然后重新加载所有内容并恢复状态。

您还有一个无法完全解决的问题 - iOS 仍会认为它是主要系统语言。如果您无法控制由 iOS 提供的内容,则会将其本地化为主要系统语言。您可以通过在应用程序完全初始化(即 in )之前将用户首选项设置AppleLanguages为包含语言环境的字符串的数组来稍微缓解这种情况。但是,这只能在应用程序启动时更改语言。main.c

于 2012-08-01T13:29:52.607 回答
0

一个可能的实现:

使用 CoreData 创建本地化字符串表

存储名称/键、语言和值。

然后,您需要构建一个管理器类来帮助您阅读这些值。在这里使用单例可能是一个好方法。然后你可以做这样的事情:

[[LanguageManager] instance] getLocalizedString:@"mainView_title" forLang:@"en"];
于 2012-08-01T13:14:17.010 回答
0

您是否尝试过查看这篇文章

我看到您要求不要使用本地化,但我想出的唯一原因是因为您想在运行时更改语言。

然后,该帖子提供(并解释如何使用)一个自定义实用程序类,以满足您利用 SDK 现有本地化功能的一部分的要求。

希望这会很有用。

于 2012-08-01T13:28:38.187 回答