我正在开发的应用程序支持 3 种语言:英语、法语和德语。
如何获取当前的应用程序语言(不是设备语言)?
问题是我必须获取应用程序的当前语言才能将其与请求一起发送到服务器,并且响应应该是正确的语言。设备语言没用,因为如果用户将操作系统语言切换为意大利语,则应用程序以英语运行,我需要将英语发送到服务器。
谢谢
我正在开发的应用程序支持 3 种语言:英语、法语和德语。
如何获取当前的应用程序语言(不是设备语言)?
问题是我必须获取应用程序的当前语言才能将其与请求一起发送到服务器,并且响应应该是正确的语言。设备语言没用,因为如果用户将操作系统语言切换为意大利语,则应用程序以英语运行,我需要将英语发送到服务器。
谢谢
接受的答案是一种解决方法。
关于设备本身的语言偏好,您有
[NSLocale preferredLanguages]
这将为您提供系统常规设置中定义的首选语言的有序数组。
Cocoa Touch 框架将在加载应用程序的本地化资源时考虑此首选语言列表,并根据您在捆绑包中提供的翻译对其进行过滤。
可以通过以下方式获得经过过滤和排序的本地化语言列表
[[NSBundle mainBundle] preferredLocalizations]
您的服务器请求应与此数组中的第一个值匹配,否则应用程序和服务器数据之间的语言将不匹配。
我一直在做的事情:
将字符串条目添加到 Localizable.strings 文件中。我总是使用密钥"lang"="de";
(或"lang"="en"
等)。
然后你可以通过添加语言在你的 NSURLRequest 中使用它NSLocalizedString(@"lang", @"")
使用这种方法,您可以绝对控制要发送到后端的内容。
你可以使用 NSBundle 类的 preferredLocalizations 方法:
NSString *currentLocalization = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
从 iOS 13 开始,可以为每个应用单独设置语言。
在 WWDC19 的“使用 Xcode 11 创建出色的本地化体验”会话中,他们展示了两个用于确定应用程序用户设置的选项。
获取当前运行的应用程序语言:
Bundle.main.preferredLocalizations.first
给定外部语言代码列表,获取最佳语言:
let availableLanguages = Server.requestLanguages()
Bundle.preferredLocalizations(from: availableLanguages).first
当用户更改设备语言时,应用程序语言将更改,您可以从NSUserDefaults
(如果您愿意,我将向您展示如何)获取它,除非有更改应用程序内部语言的选项,那么您可以轻松保存当前使用的语言并在需要时将其发送到服务器。