2024-01-29 14:48:07 +08:00
|
|
|
|
<route lang="json">
|
|
|
|
|
{
|
|
|
|
|
"style": {
|
|
|
|
|
"navigationBarTitleText": "%app.name%"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</route>
|
2024-01-29 18:59:17 +08:00
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2024-06-16 16:28:08 +08:00
|
|
|
|
import i18n, { t } from '@/locale/index'
|
2024-04-02 21:20:40 +08:00
|
|
|
|
import { testI18n } from '@/utils/i18n'
|
2024-01-29 18:59:17 +08:00
|
|
|
|
|
2024-01-29 19:56:25 +08:00
|
|
|
|
const current = ref(uni.getLocale())
|
2024-04-25 16:18:14 +08:00
|
|
|
|
const user = { name: '张三', detail: { height: 178, weight: '75kg' } }
|
2024-01-29 19:14:01 +08:00
|
|
|
|
const languages = [
|
|
|
|
|
{
|
2024-01-29 19:56:25 +08:00
|
|
|
|
value: 'zh-Hans',
|
2024-01-29 19:14:01 +08:00
|
|
|
|
name: '中文',
|
|
|
|
|
checked: 'true',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'en',
|
|
|
|
|
name: '英文',
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
|
2025-06-21 17:37:25 +08:00
|
|
|
|
function radioChange(evt) {
|
2024-01-29 19:14:01 +08:00
|
|
|
|
// console.log(evt)
|
|
|
|
|
current.value = evt.detail.value
|
2024-01-29 19:56:25 +08:00
|
|
|
|
// 下面2句缺一不可!!!
|
2024-01-29 19:14:01 +08:00
|
|
|
|
uni.setLocale(evt.detail.value)
|
2024-01-29 19:56:25 +08:00
|
|
|
|
i18n.global.locale = evt.detail.value
|
2024-01-29 19:14:01 +08:00
|
|
|
|
}
|
2024-01-29 18:59:17 +08:00
|
|
|
|
</script>
|
2024-01-29 19:35:37 +08:00
|
|
|
|
|
2025-06-21 17:37:25 +08:00
|
|
|
|
<template>
|
|
|
|
|
<view class="mt-6 center flex-col">
|
|
|
|
|
<view class="p-4 text-red-500 leading-6">
|
|
|
|
|
经过我的测试发现,小程序里面会有2处BUG:
|
|
|
|
|
<view>
|
|
|
|
|
<text class="line-through">
|
|
|
|
|
1. 页面标题多语言不生效
|
|
|
|
|
</text>
|
|
|
|
|
<text class="ml-2 text-green-500">
|
|
|
|
|
已解决
|
|
|
|
|
</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view>
|
|
|
|
|
<text class="line-through">
|
|
|
|
|
2. 多语言传递的参数不生效,如下 heavy
|
|
|
|
|
</text>
|
|
|
|
|
<text class="ml-2 text-green-500">
|
|
|
|
|
已解决
|
|
|
|
|
</text>
|
|
|
|
|
<view class="ml-2 text-green-500">
|
|
|
|
|
把 $t 改为自定义的 t 即可
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="text-green-500">
|
|
|
|
|
多语言测试
|
|
|
|
|
</view>
|
|
|
|
|
<view class="m-4">
|
|
|
|
|
{{ $t('app.name') }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="text-gray-500 italic">
|
|
|
|
|
使用$t: {{ $t('weight', { heavy: 100 }) }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="m-4">
|
|
|
|
|
{{ $t('weight', { heavy: 100 }) }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="text-gray-500 italic">
|
|
|
|
|
使用t: {{ t('weight', { heavy: 100 }) }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="m-4">
|
|
|
|
|
{{ t('weight', { heavy: 100 }) }}
|
|
|
|
|
</view>
|
|
|
|
|
<view class="m-4">
|
|
|
|
|
{{ t('introduction', user) }}
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="mt-12 text-green-500">
|
|
|
|
|
切换语言
|
|
|
|
|
</view>
|
|
|
|
|
<view class="uni-list">
|
|
|
|
|
<radio-group class="radio-group" @change="radioChange">
|
|
|
|
|
<label v-for="item in languages" :key="item.value" class="uni-list-cell uni-list-cell-pd">
|
|
|
|
|
<view>
|
|
|
|
|
<radio :value="item.value" :checked="item.value === current" />
|
|
|
|
|
</view>
|
|
|
|
|
<view>{{ item.name }}</view>
|
|
|
|
|
</label>
|
|
|
|
|
</radio-group>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<!-- http://localhost:9000/#/pages/index/i18n -->
|
|
|
|
|
<button class="mb-44 mt-20" @click="testI18n">
|
|
|
|
|
测试弹窗
|
|
|
|
|
</button>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
2024-01-29 19:35:37 +08:00
|
|
|
|
<style lang="scss">
|
|
|
|
|
.uni-list {
|
|
|
|
|
position: relative;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
width: 100%;
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.radio-group {
|
|
|
|
|
width: 200px;
|
2024-01-29 20:19:15 +08:00
|
|
|
|
margin: 10px auto;
|
2024-01-29 19:35:37 +08:00
|
|
|
|
border-radius: 12px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.uni-list-cell {
|
|
|
|
|
position: relative;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
background-color: #bcecd1;
|
|
|
|
|
}
|
|
|
|
|
</style>
|