uni-app 内置国际化方案说明

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 内置国际化方案说明
uni-app 从 3.1.5 版本开始框架内置组件开始完善国际化支持

  • App平台、H5平台 优化 uni.showModal、uni.showActionSheet 等 API 内置国际化支持
  • App平台 优化 应用退出提示内置国际化支持
  • App平台 优化 uni.scanCode、uni.previewImage 等 API 内置国际化支持
  • H5平台 优化 picker、video 组件内置国际化支持

这些组件内置如下语言

  • 中文简体 zh-Hans
  • 中文繁体 zh-Hant
  • 英语 en
  • 法语 fr
  • 西班牙语 es

组件和接口显示会根据系统语言环境自动切换,未支持的系统语言环境会显示为英文。

uni-app 3.2.5 版本以下当使用 vue-i18n 时,会使用 vue-i18n 设置的语言。

uni-app 3.2.5 版本开始请在 manifest.json 内配置,或者调用 uni.setLocale 进行设置,具体参考 locale.md

项目 信息
开发环境
版本号 3.1.5, 3.2.5
项目创建方式

1 回复

在uni-app中,内置国际化方案主要通过uni.getI18nInfoSyncuni.setLocale以及配置文件的方式来实现。以下是一个简单的代码案例,用于展示如何在uni-app中实现和应用国际化。

1. 配置国际化资源文件

首先,在项目的staticassets目录下创建国际化资源文件,例如en.jsonzh.json

en.json

{
  "hello": "Hello",
  "welcome": "Welcome to our app"
}

zh.json

{
  "hello": "你好",
  "welcome": "欢迎来到我们的应用"
}

2. 读取并存储国际化资源

在项目的main.js或某个初始化文件中,读取国际化资源文件,并将其存储在一个全局对象中。

import en from '@/static/en.json';
import zh from '@/static/zh.json';

const i18nResources = {
  en,
  zh
};

const getCurrentLocale = () => {
  // 根据实际情况获取当前语言,这里简单返回'en'作为示例
  return uni.getStorageSync('locale') || 'en';
};

const $t = (key) => {
  const locale = getCurrentLocale();
  return i18nResources[locale][key] || key;
};

Vue.prototype.$t = $t;

3. 设置和应用国际化

在应用启动时或用户更改语言设置时,调用uni.setLocale来设置当前语言,并通过$t函数来获取翻译后的文本。

// 在应用启动时设置语言
uni.setLocale({
  locale: getCurrentLocale(),
  success: () => {
    console.log('Locale set to', getCurrentLocale());
  }
});

// 示例组件
<template>
  <view>
    <text>{{ $t('hello') }}</text>
    <text>{{ $t('welcome') }}</text>
  </view>
</template>

<script>
export default {
  mounted() {
    // 可以在这里根据用户选择动态更改语言
    // uni.setLocale({ locale: 'zh' }); // 切换到中文
  }
};
</script>

4. 用户界面更改语言选项

可以在用户界面添加一个语言选择器,让用户能够切换语言。当用户选择语言时,调用uni.setLocale并更新存储中的语言设置。

// 切换语言的函数示例
const changeLanguage = (locale) => {
  uni.setLocale({ locale });
  uni.setStorageSync('locale', locale);
};

以上代码案例展示了如何在uni-app中实现和应用国际化方案,包括配置资源文件、读取资源、设置语言以及应用翻译文本。通过这种方式,可以方便地实现应用的国际化支持。

回到顶部