refactor: 国际化文本迁移至全局 locales/messages.js

将组件级 i18n 对象重构为统一由全局 locales/messages.js 管理,确保中英文语言切换时正确显示对应文本。

- 新增 utils/i18n.js 国际化工具函数
- 更新 store/$t.mixin.js 翻译混入逻辑
- 迁移 pkgService、pkgBooking、pkgAccount、pkgExplore、pages 等共 58 个组件的中英文文本至全局消息表
This commit is contained in:
liangjian
2026-07-24 13:43:41 +08:00
parent 445bd850f4
commit 6e721ccc7e
58 changed files with 1810 additions and 4065 deletions

View File

@@ -1,7 +1,7 @@
<template>
<view class="section-panel" v-if="facilityList && facilityList.length">
<view class="section-header">
<text class="section-title">{{ t('sectionTitle') }}</text>
<text class="section-title">{{ $tr('配套设施') }}</text>
</view>
<view class="facility-grid tn-flex tn-flex-wrap">
<view class="facility-item tn-flex tn-flex-direction-column tn-flex-col-center" v-for="(item, index) in facilityList" :key="index">
@@ -24,11 +24,7 @@ export default {
default: 'zh'
}
},
methods: {
t(key) {
return this.$tm('pkgExplore.store_detail.store_detail', key)
}
}
methods: {}
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<view class="section-panel room-section">
<view class="section-header tn-flex tn-flex-row-between tn-flex-col-center">
<text class="section-title">{{ t('roomSectionTitle', { count: roomTypes.length }) }}</text>
<text class="section-title">{{ $tr('在租房型({count})', { count: roomTypes.length }) }}</text>
</view>
<view class="room-list-vertical">
<view
@@ -28,11 +28,11 @@
<view class="room-bottom-v tn-flex tn-flex-row-between tn-flex-col-bottom">
<view class="room-price-v">
<text class="price-symbol">¥</text>
<text class="price-val">{{ formatPriceValue(room.price) || t('pricePending') }}</text>
<text class="price-unit">{{ t('priceUnit') }}</text>
<text class="price-val">{{ formatPriceValue(room.price) || $tr('待定') }}</text>
<text class="price-unit">{{ $tr('/月') }}</text>
</view>
<view class="go-btn-v tn-flex tn-flex-col-center tn-flex-row-center">
<text>{{ t('viewDetails') }}</text>
<text>{{ $tr('查看详情') }}</text>
<text class="tn-icon-right"></text>
</view>
</view>
@@ -65,9 +65,6 @@ export default {
}
},
methods: {
t(key, params = {}) {
return this.$tm('pkgExplore.store_detail.store_detail', key, params)
},
formatPriceValue(priceText) {
if (!priceText) {
return ''

View File

@@ -9,7 +9,7 @@
<text class="address-title tn-text-ellipsis">{{ shortAddress }}</text>
</view>
<view class="address-right tn-flex tn-flex-col-center">
<text class="nav-text">{{ t('navigate') }}</text>
<text class="nav-text">{{ $tr('导航') }}</text>
<text class="tn-icon-right nav-arrow"></text>
</view>
</view>
@@ -17,7 +17,7 @@
<!-- 小区简介 -->
<view class="section-panel" v-if="displayDescription">
<view class="section-header">
<text class="section-title">{{ t('storeIntro') }}</text>
<text class="section-title">{{ $tr('小区简介') }}</text>
</view>
<view
class="store-desc"
@@ -29,7 +29,7 @@
<text v-else>{{ displayDescription }}</text>
</view>
<view v-if="shouldShowToggle" class="expand-btn tn-flex tn-flex-row-center tn-flex-col-center" @click="toggleDesc">
<text>{{ isDescCollapsed ? t('expandAll') : t('collapse') }}</text>
<text>{{ isDescCollapsed ? $tr('展开全部') : $tr('收起') }}</text>
<text :class="isDescCollapsed ? 'tn-icon-down' : 'tn-icon-up'" class="expand-icon"></text>
</view>
</view>
@@ -104,19 +104,16 @@ export default {
? (this.storeData.addressEnDisplay || this.storeData.addressEn || this.storeData.address || '')
: (this.storeData.address || this.storeData.addressEn || '')
if (!addr) {
return this.t('noAddress')
return this.$tr('暂无地址')
}
if (this.language === 'en') {
return addr
}
const short = addr.replace(/^(?:.*?省|.*?自治区)?(?:.*?市|.*?自治州)?/, '');
return short.trim() ? short : (addr || this.t('noAddress'));
return short.trim() ? short : (addr || this.$tr('暂无地址'));
}
},
methods: {
t(key) {
return this.$tm('pkgExplore.store_detail.store_detail', key)
},
toggleDesc() {
this.isDescCollapsed = !this.isDescCollapsed;
},