我正在使用的应用程序支持3种语言:英语,法语和德语。
如何获取当前的应用程序语言(不是设备语言)?
问题是我必须获取应用程序的当前语言,以便向服务器发送请求,并且响应应该使用正确的语言。设备语言没用,因为如果用户将os语言切换为意大利语,则应用程序以英语运行,我需要将英语发送到服务器。
由于
答案 0 :(得分:37)
我一直在做什么:
在Localizable.strings文件中添加一个字符串条目。
我总是使用密钥"lang"="de";
(或"lang"="en"
等)。
然后,您可以在NSLocalizedString(@"lang", @"")
使用该方法,您可以绝对控制将要发送给您的后端。
答案 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
获取该应用程序语言(我会告诉您如何使用),除非有更改应用程序内部语言的选项然后,您可以轻松保存当前使用的语言,并在需要时将其发送到服务器。