【问题标题】:Detect preferred language order in Cordova App在 Cordova 应用程序中检测首选语言顺序
【发布时间】:2019-12-10 12:00:22
【问题描述】:

假设开发人员创建了一个支持de_DEen_US 的应用程序。

开发者在 App Store 中以德语和英语推广应用程序。

然后有一个会说西班牙语和德语的用户(按此顺序)下载该应用程序,因为有德语翻译。

此用户已使用以下首选语言列表设置他的手机:

es_ES
de_DE

现在,为了检测用户的语言,Cordova 建议使用 navigator.language(因为 ECMA 国际化 API 在所有主要平台上都可用)。

navigator.language 将是es_ES。此时,应用程序没有任何方法可以发现用户也说德语。在这种情况下,应用程序可能会退回到en_US,而不是de_DE。更糟糕的是,用户将在系统对话框中获得德语,但在应用程序的其余部分中获得英语。

Cordova 是否提供了一种可靠的方法来获取操作系统从应用支持的列表中选择的语言?

例如,iOS 将检查 CFBundleLocalizations 并在非 Cordova 应用程序中选择 de_DE。 Android 通过检查资源文件来做类似的事情。但我不知道如何在 Cordova 中获得操作系统做出的最终解决方案。

这里有一些关于不同操作系统如何选择应用语言的信息: https://developer.apple.com/library/archive/qa/qa1828/_index.html https://developer.android.com/guide/topics/resources/multilingual-support

【问题讨论】:

    标签: android ios cordova localization internationalization


    【解决方案1】:

    您可以尝试使用NavigatorLanguage.languages 按顺序列出所有首选语言

     navigator.languages  //["en-US", "zh-CN", "ja-JP"]
    

    如果您无法获取语言列表或仅获取 1 种首选语言,我建议您获取用户 geolocation,然后根据地理位置(国家/地区)分配默认语言。您可能需要使用 API 将坐标转换为国家/地区。

    【讨论】:

    • iOS navigator.languages 在列表中只有一种语言,即使用户为她的设备配置了多种语言。此外,navigator.language 始终是用户声明的第一种语言,而不是 App 支持的语言和用户声明的语言之间的匹配。
    • 当然?你期待什么?您仍然需要比较,这是最终用户的“问题”。老实说,在您第一次运行应用程序以选择语言时,只需使用一个选择器即可。你看到这个“太大了”
    • 我希望在应用程序提供的内容与用户喜欢的内容之间获得最佳匹配。 Safari(webkit)只提供一种语言,顺便说一句(不是列表)。无论如何,我想我找到了方法。将更新最终解决方案。
    • @Eric 我也只能用navigator.languages 获得一种语言,即使 iOS 显示多种语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多