uni-app 国际化配置

本文详细介绍了如何在基于Vue2的uni-app项目中配置国际化,包括创建locale文件、在Vue2和Vue3中使用i18n、页面内语言切换以及在pages.json中应用多语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我创建的模板是基于vue2的模板,uni-app模板内部已经包含了vue-i18n,所以不需要通过npm方式安装vue-i18n。

1. 创建locale文件目录

ps:语言包文件一定要跟index.js同级,不然在pages.json设置语言将不生效。

├── locale/
│   ├──zh-Hans.json // 中文简体
│   ├──pt-BR.json // 巴西葡萄牙语
│   ├──index.js

zh-Hans.json文件


{
"locale.zh-hans": "Chinês",
	"locale.pt-BR": "Português",
}

pt-BR.json文件


{
	"locale.zh-hans": "简体中文",
	"locale.pt-BR": "葡萄牙语",
}

index.js

// vue2配置
import Vue from 'vue'
import VueI18n from 'vue-i18n'
// 国际化 json 文件
import zhHans from './zh-Hans.json' // 中文简体
import ptBR from './pt-BR.json' // 巴西葡萄牙语
const messages = {
	'zh-Hans': zhHans,
	'pt-BR': ptBR,
}
const i18nConfig = {
	locale: uni.getLocale(), // 获取已设置的语言
	messages
}
Vue.use(VueI18n)
const i18n = new VueI18n(i18nConfig)
export default i18n

// vue3配置
import { createI18n } from 'vue-i18n'
// 国际化 json 文件
import zhHans from './zh-Hans.json' // 中文简体
import ptBR from './pt-BR.json' // 巴西葡萄牙语
const messages = {
	'zh-Hans': zhHans,
	'pt-BR': ptBR,
}
const i18nConfig = {
	locale: uni.getLocale(), // 获取已设置的语言
	messages
}
const i18n = createI18n(i18nConfig)
export default i18n

main.js 引入

// vue2
import App from './App'
import Vue from 'vue'
// 国际化
import i18n from './locale/index.js'
Vue.use(i18n)
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
	i18n,
	...App
})
app.$mount()
// vue3
import { createSSRApp } from 'vue'
import i18n from './locale/index.js'
export function createApp() {
  const app = createSSRApp(App)
	app.use(i18n)
  return {
    app
  }
}

2. 在页面使用

ps: $t()是i18n自带方法,可以全局使用。

在页面使用

<template>
	<view>{{$t('locale.pt-BR')}}</view>
</template>

在js使用

<script>
	export default {
		onLoad() {
			const locale = this.$t('locale.pt-BR')
			console.log(locale);
		}
	}
</script>

3.切换语言

ps: 页面中设置语言后需要调用this.$i18n.locale='zh-Hans’后生效。

<template>
	<view class="content">
		<view class="text-area">
			<text class="title">{{$t('locale.pt-BR')}}</text>
			<button @click="langChange('zh-Hans')">简体中文</button>
			<button @click="langChange('pt-BR')">葡萄牙语</button>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {}
		},
		onLoad() {},
		methods: {
			langChange(lang) {
				uni.setLocale(lang)
				this.$i18n.locale = lang
			}
		}
	}

</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.text-area {
		display: flex;
		justify-content: center;
		flex-direction: column;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}

</style>

4. 在pages.json中使用 %% 占位

ps:语言包文件一定要跟index.js同级,不然在pages.json设置语言将不生效。

{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "%index.home%"
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	"uniIdRouter": {}
}

uni-app 中实现国际化(i18n)主要依赖于插件机制和多语言资源文件的管理。以下是一些常见的实现方法: ### 1. 使用 `vue-i18n` 插件 `vue-i18n` 是 Vue.js 生态中广泛使用的国际化解决方案,同样适用于 uni-app 项目。通过该插件,可以轻松实现多语言切换和动态加载语言包。 #### 实现步骤: - 安装依赖: ```bash npm install vue-i18n --save ``` - 创建语言包文件,例如 `locales/zh-CN.json` 和 `locales/en-US.json`。 - 在 `main.js` 中配置 i18n 实例: ```javascript import { createI18n } from 'vue-i18n'; import zhCN from './locales/zh-CN.json'; import enUS from './locales/en-US.json'; const i18n = createI18n({ legacy: false, locale: 'zh-CN', // 默认语言 fallbackLocale: 'en-US', messages: { 'zh-CN': zhCN, 'en-US': enUS } }); const app = createApp(App); app.use(i18n); app.mount('#app'); ``` - 在页面中使用翻译内容: ```vue <template> <view> <text>{{ $t('welcome') }}</text> </view> </template> ``` ### 2. 使用 uni-app 官方推荐的国际化方案 uni-app 提供了对多语言支持的原生支持,可以通过 `manifest.json` 文件中的配置来定义语言资源。 #### 实现步骤: - 在 `src` 目录下创建多个语言资源文件,如 `i18n/zh-CN.js` 和 `i18n/en-US.js`。 - 在 `manifest.json` 中配置语言资源路径: ```json { "plus": { "distribute": { "android": { "i18n": { "zh-CN": "i18n/zh-CN.js", "en-US": "i18n/en-US.js" } } } } } ``` - 在页面中使用 `$t` 方法调用翻译内容: ```vue <template> <view> <text>{{ $t('settings.title') }}</text> </view> </template> ``` ### 3. 动态切换语言 除了静态配置语言资源,uni-app 还支持运行时动态切换语言。可以通过修改 `i18n.locale` 的值来实现语言切换。 #### 示例代码: ```vue <script> export default { methods: { changeLanguage(lang) { this.$i18n.locale = lang; } } } </script> ``` ### 4. 使用第三方插件或框架 除了 `vue-i18n`,还可以使用其他第三方插件如 `uni-i18n`,它专为 uni-app 优化,支持多语言切换、语言包动态加载等功能[^1]。 #### 示例代码: ```bash npm install uni-i18n --save ``` 在 `main.js` 中初始化: ```javascript import { initI18n } from 'uni-i18n'; import zhCN from './locales/zh-CN.json'; import enUS from './locales/en-US.json'; const i18n = initI18n({ locale: 'zh-CN', fallbackLocale: 'en-US', messages: { 'zh-CN': zhCN, 'en-US': enUS } }); const app = createApp(App); app.use(i18n); app.mount('#app'); ``` ### 5. 多语言资源文件管理 为了便于维护,建议将多语言资源文件集中管理,例如按语言代码命名的 JSON 文件,并在运行时根据用户选择或系统设置加载对应的语言文件[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baimozi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值