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:
@@ -8,20 +8,20 @@
|
||||
|
||||
<!-- 页面头部大标题 -->
|
||||
<view class="page-header tn-margin-bottom-xl tn-margin-top-xl fade-in">
|
||||
<view class="tn-text-bold tn-color-black title-text">{{ t('pageTitle') }}</view>
|
||||
<view class="tn-color-gray tn-text-sm tn-margin-top-sm subtitle-text">{{ t('pageDesc') }}</view>
|
||||
<view class="tn-text-bold tn-color-black title-text">{{ $tr('欢迎回来') }}</view>
|
||||
<view class="tn-color-gray tn-text-sm tn-margin-top-sm subtitle-text">{{ $tr('登录绿居公寓,探索您的国际化青年社区') }}</view>
|
||||
</view>
|
||||
|
||||
<!-- 登录表单 -->
|
||||
<view class="form-area tn-margin-top-xl fade-in-up">
|
||||
<view class="form-item tn-margin-bottom-lg">
|
||||
<view class="form-label tn-text-bold tn-margin-bottom-sm">{{ t('accountLabel') }}</view>
|
||||
<view class="form-label tn-text-bold tn-margin-bottom-sm">{{ $tr('账号 / 邮箱') }}</view>
|
||||
<view class="input-wrapper" :class="{ 'is-focused': accountFocused }">
|
||||
<text class="tn-icon-my input-icon"></text>
|
||||
<input
|
||||
class="form-input"
|
||||
:placeholder="t('accountPlaceholder')"
|
||||
placeholder-class="input-placeholder"
|
||||
<input
|
||||
class="form-input"
|
||||
:placeholder="$tr('请输入账号或邮箱')"
|
||||
placeholder-class="input-placeholder"
|
||||
v-model="form.account"
|
||||
@focus="accountFocused = true"
|
||||
@blur="accountFocused = false"
|
||||
@@ -30,13 +30,13 @@
|
||||
</view>
|
||||
|
||||
<view class="form-item tn-margin-bottom-xl">
|
||||
<view class="form-label tn-text-bold tn-margin-bottom-sm">{{ t('passwordLabel') }}</view>
|
||||
<view class="form-label tn-text-bold tn-margin-bottom-sm">{{ $tr('密码') }}</view>
|
||||
<view class="input-wrapper" :class="{ 'is-focused': passwordFocused }">
|
||||
<text class="tn-icon-lock input-icon"></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="password"
|
||||
:placeholder="t('passwordPlaceholder')"
|
||||
:placeholder="$tr('请输入密码')"
|
||||
placeholder-class="input-placeholder"
|
||||
v-model="form.password"
|
||||
@focus="passwordFocused = true"
|
||||
@@ -50,22 +50,22 @@
|
||||
<view class="action-area tn-margin-top-xxl fade-in-up" style="animation-delay: 0.2s;">
|
||||
<view class="custom-btn btn-primary" @click="handleLogin" :class="{ 'btn-disabled': isSubmitting }">
|
||||
<text v-if="isSubmitting" class="tn-icon-loading tn-margin-right-xs spin"></text>
|
||||
<text class="tn-text-bold tn-text-lg">{{ isSubmitting ? t('submitting') : t('submitLogin') }}</text>
|
||||
<text class="tn-text-bold tn-text-lg">{{ isSubmitting ? $tr('登录中...') : $tr('立即登录') }}</text>
|
||||
</view>
|
||||
|
||||
<view class="secondary-entry-card tn-margin-top-lg" @click="goToRegistrationRecords">
|
||||
<view class="tn-flex tn-flex-row-between tn-flex-col-center">
|
||||
<view>
|
||||
<view class="secondary-entry-title">{{ t('viewRegistrationRecords') }}</view>
|
||||
<view class="secondary-entry-desc tn-margin-top-xs">{{ t('viewRegistrationRecordsDesc') }}</view>
|
||||
<view class="secondary-entry-title">{{ $tr('查看注册记录') }}</view>
|
||||
<view class="secondary-entry-desc tn-margin-top-xs">{{ $tr('未登录也可查看当前微信账号提交的注册申请记录') }}</view>
|
||||
</view>
|
||||
<text class="tn-icon-right secondary-entry-arrow"></text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="tn-flex tn-flex-row-center tn-margin-top-xl">
|
||||
<view class="tn-color-gray tn-text-sm">{{ t('noAccount') }}</view>
|
||||
<view class="tn-color-black tn-text-bold tn-text-sm tn-margin-left-xs register-link" @click="goToRegister">{{ t('goRegister') }}</view>
|
||||
<view class="tn-color-gray tn-text-sm">{{ $tr('还没有账号?') }}</view>
|
||||
<view class="tn-color-black tn-text-bold tn-text-sm tn-margin-left-xs register-link" @click="goToRegister">{{ $tr('去注册') }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -96,44 +96,6 @@ export default {
|
||||
form: {
|
||||
account: '',
|
||||
password: ''
|
||||
},
|
||||
i18n: {
|
||||
zh: {
|
||||
pageTitle: '欢迎回来',
|
||||
pageDesc: '登录绿居公寓,探索您的国际化青年社区',
|
||||
accountLabel: '账号 / 邮箱',
|
||||
accountPlaceholder: '请输入账号或邮箱',
|
||||
passwordLabel: '密码',
|
||||
passwordPlaceholder: '请输入密码',
|
||||
submitting: '登录中...',
|
||||
submitLogin: '立即登录',
|
||||
viewRegistrationRecords: '查看注册记录',
|
||||
viewRegistrationRecordsDesc: '未登录也可查看当前微信账号提交的注册申请记录',
|
||||
noAccount: '还没有账号?',
|
||||
goRegister: '去注册',
|
||||
loading: '加载中...',
|
||||
validateRequired: '请输入账号和密码',
|
||||
loginSuccess: '登录成功',
|
||||
loginFailed: '登录失败,请稍后重试'
|
||||
},
|
||||
en: {
|
||||
pageTitle: 'Welcome Back',
|
||||
pageDesc: 'Sign in to Luju Apartments and explore your international youth community.',
|
||||
accountLabel: 'Account / Email',
|
||||
accountPlaceholder: 'Enter account or email',
|
||||
passwordLabel: 'Password',
|
||||
passwordPlaceholder: 'Enter password',
|
||||
submitting: 'Signing In...',
|
||||
submitLogin: 'Sign In',
|
||||
viewRegistrationRecords: 'View Registration Records',
|
||||
viewRegistrationRecordsDesc: 'You can review registration records submitted by this Wechat account even without signing in.',
|
||||
noAccount: 'No account yet?',
|
||||
goRegister: 'Register',
|
||||
loading: 'Loading...',
|
||||
validateRequired: 'Please enter both account and password',
|
||||
loginSuccess: 'Signed in successfully',
|
||||
loginFailed: 'Sign-in failed, please try again later'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -143,9 +105,6 @@ export default {
|
||||
await this.checkPendingRegistration(bypass)
|
||||
},
|
||||
methods: {
|
||||
t(key) {
|
||||
return this.$tm('pkgAccount.login.login', key)
|
||||
},
|
||||
normalizeRedirectUrl(value = '') {
|
||||
if (!value) {
|
||||
return ''
|
||||
@@ -192,7 +151,7 @@ export default {
|
||||
})
|
||||
},
|
||||
async checkPendingRegistration(bypassRedirect = false) {
|
||||
uni.showLoading({ title: this.t('loading') })
|
||||
uni.showLoading({ title: this.$tr('加载中...') })
|
||||
try {
|
||||
const providerValue = await this.getWechatCode()
|
||||
if (!providerValue) {
|
||||
@@ -229,7 +188,7 @@ export default {
|
||||
}
|
||||
|
||||
uni.showToast({
|
||||
title: this.t('validateRequired'),
|
||||
title: this.$tr('请输入账号和密码'),
|
||||
icon: 'none'
|
||||
})
|
||||
return false
|
||||
@@ -361,7 +320,7 @@ export default {
|
||||
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: this.t('loginSuccess'),
|
||||
title: this.$tr('登录成功'),
|
||||
icon: 'success'
|
||||
})
|
||||
setTimeout(() => {
|
||||
@@ -375,7 +334,7 @@ export default {
|
||||
}
|
||||
|
||||
this.isSubmitting = true
|
||||
uni.showLoading({ title: this.t('submitting') })
|
||||
uni.showLoading({ title: this.$tr('登录中...') })
|
||||
|
||||
return this.resolveLoginState()
|
||||
.then(loginState => {
|
||||
@@ -390,7 +349,7 @@ export default {
|
||||
uni.hideLoading()
|
||||
this.isSubmitting = false
|
||||
uni.showToast({
|
||||
title: this.t('loginFailed'),
|
||||
title: this.$tr('登录失败,请稍后重试'),
|
||||
icon: 'none'
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user