iOS:如何获取当前的应用程序语言

时间:2012-04-06 16:09:45

标签: iphone ios localization locale

我正在使用的应用程序支持3种语言:英语,法语和德语。

如何获取当前的应用程序语言(不是设备语言)?

问题是我必须获取应用程序的当前语言,以便向服务器发送请求,并且响应应该使用正确的语言。设备语言没用,因为如果用户将os语言切换为意大利语,则应用程序以英语运行,我需要将英语发送到服务器。

由于

5 个答案:

答案 0 :(得分:37)

我一直在做什么:

在Localizable.strings文件中添加一个字符串条目。 我总是使用密钥"lang"="de";(或"lang"="en"等)。

然后,您可以在NSLocalizedString(@"lang", @"")

上添加语言,在NSURLRequest中使用它

使用该方法,您可以绝对控制将要发送给您的后端。

答案 1 :(得分:36)

接受的答案是解决方法。

关于设备本身的语言偏好,您有

[NSLocale preferredLanguages]

将为您提供系统常规设置中定义的首选语言的有序数组。

Cocoa Touch框架会在加载应用程序的本地化资源时将此首选语言列表考虑在内,并根据您在捆绑包中提供的翻译对其进行过滤。

可以使用

获取此过滤和有序的本地化语言列表
[[NSBundle mainBundle] preferredLocalizations]

您的服务器请求应与此数组中的第一个值匹配,否则应用和服务器数据之间的语言将不匹配。

答案 2 :(得分:14)

您可以使用NSBundle类的preferredLocalizations方法:

NSString *currentLocalization = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

答案 3 :(得分:1)

从iOS 13开始,可以分别为每个应用设置语言。

在WWDC19的“使用Xcode 11创建出色的本地化体验”会话中,他们展示了两个选项来确定应用程序的用户设置。

获取当前正在运行的应用程序语言:

Bundle.main.preferredLocalizations.first

根据外部语言代码列表,获取最佳语言:

let availableLanguages = Server.requestLanguages()
Bundle.preferredLocalizations(from: availableLanguages).first

答案 4 :(得分:-1)

当用户更改设备语言时,应用程序语言会发生变化,您可以从NSUserDefaults获取该应用程序语言(我会告诉您如何使用),除非有更改应用程序内部语言的选项然后,您可以轻松保存当前使用的语言,并在需要时将其发送到服务器。