我正在开发一个必须支持不同语言的Iphone应用程序。
我看到该语言必须在我的应用程序中设置,而不是在iphone设置中。那么,我是否必须强制使用语言来获取当前的语言?我没有在互联网上找到例子。所有示例都需要应用程序的当前语言。我希望用户在应用程序启动时选择他的语言,然后我将设置一个cookie(以一种我不知道的方式)应用程序自动引用我的.lproj文件夹使用不同的语言。
答案 0 :(得分:1)
你的问题不是很清楚。没有什么可说的“语言必须在我的应用程序中设置而不是在iphone设置中” - 实际上恰恰相反!
Cocoa有一个非常简洁的本地化系统,非常容易使用(抱怨腐烂的本地化工作流程)。 Here's the full skinny on it - 基本上,在lproj文件夹中有文件,然后使用NSBundle
资源API来定位它们(NIB加载和其他子系统自动使用它,所以你甚至不必在那里工作!)
答案 1 :(得分:1)
使用iOS中的默认本地化机制无法做到这一点。默认情况下,系统根据用户的系统语言选择.lproj文件夹,如果您有本地化的NIB并使用NSLocalizedString()等,则会自动进行本地化。
如果您确实想要更改该行为并“覆盖”系统语言,则必须实现自己的NSLocalizedString版本,该版本手动访问所需的.lproj文件夹中的字符串文件。请注意,NIB不使用您的自定义NSLocalizedString函数。所以要么根本不使用NIB,要么在代码中对NIB进行本地化,而不是使用不同的NIB。
答案 2 :(得分:1)
您为每种语言创建.strings文件:例如“EN.strings”,“JP.strings”等...
这些文件可以从默认包中加载,表参数可以加载到NSLocalizedStringFromTable。
当用户选择一种语言时,您可以切换哪个表(.strings文件)来加载字符串。
一个问题是,iOS字符串仍将本地化为用户的设置,或者是您在Info.plist中将应用程序本地化的任何内容。所以你最终可能会混合各种语言。
答案 3 :(得分:0)
[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"it",@"en", nil] forKey:@"AppleLanguages"];
然后,如果iPhone语言设置为英语,我的iPhone应用程序将始终使用“它”。阵列的第一个。