在React-Native Expo App上原生添加可用语言

disho6za  于 2023-10-22  发布在  React
关注(0)|答案(2)|浏览(159)

我正在开发一个应用程序与世博会。
我正在使用i18next npm库进行多语言支持,我知道如何通过以下方式获取首选语言环境:
import * as Localization from 'expo-localization';
Localization.localesLocalization.locale
我用AsyncStorage实现了应用内语言更改。
但在iOS上,除了应用程序内的语言更改,我观察到大多数应用程序的语言可以通过这样的系统设置进行更改。

在这种情况下,我的Expo应用如何让iOS知道我的应用支持哪些语言?另外,Localization.locale是否通过iOS设置与所选语言同步?
(我不是Android用户)Android怎么样?情况是否相似?谢谢.

u59ebvdq

u59ebvdq1#

这是平台特定的功能,你不能从React Native更改,你只能读取这些数据并根据这些设置更改你的应用程序语言。例如https://gitlab.com/os-team/libs/utils/-/tree/master/packages/i18next-react-native-language-detector

import { LanguageDetectorModule } from 'i18next';
import { Platform, NativeModules } from 'react-native';

const RNLanguageDetector: LanguageDetectorModule = {
  type: 'languageDetector',
  init: () => {},
  detect: () => {
    const locale =
      Platform.OS === 'ios'
        ? NativeModules.SettingsManager.settings.AppleLocale ||
          NativeModules.SettingsManager.settings.AppleLanguages[0] // iOS 13
        : NativeModules.I18nManager.localeIdentifier;
    return locale.split('_')[0];
  },
  cacheUserLanguage: () => {},
};

export default RNLanguageDetector;

要在应用中设置语言环境列表,您需要将其添加到Xcode中

hpcdzsge

hpcdzsge2#

在Expo中,您可以通过执行此操作来显示应用的此设置。
app.jsonapp.config.js中,将这些属性添加到infoPlist属性中
示例:-

{
"expo":{
  "ios": {
      "infoPlist": {
        "CFBundleAllowMixedLocalizations": true,
        "CFBundleLocalizations": ["en", "ar"],//add in this array the languages that your app supports
        "CFBundleDevelopmentRegion": "en"
      }
    },
  }
}

并在expo属性下添加区域设置路径。
完整示例:-

{
"expo":{
"locales": {
      "en": "./locale/en.json",
      "ar": "./locale/ar.json"
    },
  "ios": {
      "infoPlist": {
        "CFBundleAllowMixedLocalizations": true,
        "CFBundleLocalizations": ["en", "ar"],//add in this array the languages that your app supports
        "CFBundleDevelopmentRegion": "en"
      }
    },
  }
}
  • 注意:此解决方案将在构建后在您的应用程序上工作,并且语言选项不会在Expo go上显示,因为它仅支持英语 *

相关问题