假设开发人员创建了一个支持de_DE
和en_US
的应用。
开发者在App Store中以德语和英语推广该应用。
然后有一个说西班牙语和德语(按此顺序)的用户下载该应用程序,因为有德语翻译。
该用户使用以下首选语言列表设置了手机:
es_ES
de_DE
现在,为了检测用户的语言,Cordova建议使用navigator.language(因为所有主要平台上都提供ECMA国际化API)。
navigator.language将为es_ES
。在这一点上,该应用程序无法确定用户是否还会说德语。在这种情况下,该应用可能会退回到en_US
而不是de_DE
。更糟糕的是,用户将在系统对话框中获得德语,而在应用程序的其余部分中获得英语。
Cordova是否提供一种可靠的方法来从应用程序支持的列表中获取操作系统选择的语言?
例如,iOS将检查CFBundleLocalizations
并在非科尔多瓦应用程序中选择de_DE
。 Android通过检查资源文件来做类似的事情。但是我不知道Cordova如何获得操作系统做出的最终解决方案。
这里有一些信息,说明不同的操作系统如何选择App语言: https://developer.apple.com/library/archive/qa/qa1828/_index.html https://developer.android.com/guide/topics/resources/multilingual-support
答案 0 :(得分:0)
您可以尝试使用NavigatorLanguage.languages依次列出所有首选语言
@Effect() addPeriod$ = this.actions.pipe(
ofType(PeriodActionTypes.ADD_PERIOD_SUCCESS, PeriodActionTypes.REMOVE_PERIOD_SUCCESS, UPDATE_PERIOD_SUCCESS),
switchMap((action) => {
// logic here to load stats
// or to dispatch the LoadStatsAction action
}),
);
如果您无法获得语言列表或仅获得一种首选语言,建议您让用户geolocation,然后根据地理位置(国家/地区)分配默认语言。您可能需要使用API将坐标转换为国家/地区。