feat(i18n): 管理端与玩家端三语支持(中/英/马来语)

- 管理后台 adminT 文案库、结算与代理端页面、表单校验
- 玩家端 vue-i18n 补全首页/公告/串关与 ms 文案
- Element Plus ms 语言包与共享 locale 工具
This commit is contained in:
2026-06-03 15:05:36 +08:00
parent 80adc0e928
commit cbfa18d1d3
63 changed files with 3081 additions and 1038 deletions

View File

@@ -6,16 +6,12 @@ import api from '../api';
import { formatMoney } from '../utils/localeDisplay';
import LocaleFlag from '../components/LocaleFlag.vue';
import { useAuthStore } from '../stores/auth';
import { useAppLocale } from '../composables/useAppLocale';
const { t, locale } = useI18n();
const router = useRouter();
const auth = useAuthStore();
const locales = [
{ code: 'zh-CN', label: '中文' },
{ code: 'en-US', label: 'EN' },
{ code: 'ms-MY', label: 'BM' },
] as const;
const { locales, setLocale, initFromUser } = useAppLocale();
const profile = ref<{
username?: string;
@@ -25,12 +21,11 @@ const profile = ref<{
onMounted(async () => {
const { data } = await api.get('/player/profile');
profile.value = data.data;
initFromUser(data.data?.locale);
});
async function changeLocale(code: string) {
locale.value = code;
localStorage.setItem('locale', code);
await api.post('/player/language', { locale: code });
await setLocale(code);
}
function logout() {
@@ -79,6 +74,19 @@ function logout() {
</button>
</div>
</div>
<div class="settings-cell settings-cell--stack rules-cell">
<div class="cell-head">
<span class="cell-label">{{ t('profile.rules_title') }}</span>
</div>
<div class="rules-body">
<p>{{ t('profile.rules_p1') }}</p>
<p>{{ t('profile.rules_p2') }}</p>
<p>{{ t('profile.rules_p3') }}</p>
<p>{{ t('profile.rules_p4') }}</p>
<p>{{ t('profile.rules_p5') }}</p>
</div>
</div>
</section>
<button type="button" class="logout-btn" @click="logout">
@@ -236,4 +244,19 @@ function logout() {
.logout-btn:active {
background: rgba(255, 69, 58, 0.08);
}
.rules-body {
padding: 0 0 12px;
font-size: 12px;
line-height: 1.55;
color: var(--text-muted);
}
.rules-body p {
margin: 0 0 8px;
}
.rules-body p:last-child {
margin-bottom: 0;
}
</style>