feat(admin): 从已有玩家升级代理、修复 i18n 与过期 .js 冲突
- 新建一级代理改为选择已有玩家;新建用户可选一级代理 - 操作日志/注单等扁平 key 翻译;清理 src 内误生成 .js,Vite 优先解析 .ts Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,34 +1,38 @@
|
||||
import { ref, computed } from 'vue';
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import {
|
||||
ADMIN_LOCALES,
|
||||
adminT,
|
||||
adminLocaleTag,
|
||||
type AdminLocale,
|
||||
} from '../i18n/admin-messages';
|
||||
import { ADMIN_LOCALE_STORAGE_KEY } from '../i18n';
|
||||
import { resolveAdminMessage } from '../i18n/resolve-message';
|
||||
|
||||
const STORAGE_KEY = 'admin_locale';
|
||||
|
||||
const locale = ref<AdminLocale>(
|
||||
(localStorage.getItem(STORAGE_KEY) as AdminLocale) || 'zh-CN',
|
||||
);
|
||||
|
||||
export function getAdminLocale(): AdminLocale {
|
||||
return locale.value;
|
||||
}
|
||||
export type { AdminLocale };
|
||||
export { getAdminLocale } from '../i18n';
|
||||
|
||||
export function useAdminLocale() {
|
||||
const t = (key: string, params?: Record<string, string | number>) =>
|
||||
adminT(locale.value, key, params);
|
||||
const { locale } = useI18n();
|
||||
|
||||
/** 扁平 key 查表 + 占位符,不依赖 vue-i18n 嵌套路径解析 */
|
||||
function t(key: string, params?: Record<string, string | number>): string {
|
||||
const loc = locale.value as AdminLocale;
|
||||
let raw = resolveAdminMessage(key, loc) ?? key;
|
||||
if (!params) return raw;
|
||||
return Object.entries(params).reduce(
|
||||
(s, [k, v]) => s.replace(new RegExp(`\\{${k}\\}`, 'g'), String(v)),
|
||||
raw,
|
||||
);
|
||||
}
|
||||
|
||||
function setLocale(code: AdminLocale) {
|
||||
locale.value = code;
|
||||
localStorage.setItem(STORAGE_KEY, code);
|
||||
document.cookie = `${STORAGE_KEY}=${encodeURIComponent(code)};path=/;max-age=31536000;SameSite=Lax`;
|
||||
localStorage.setItem(ADMIN_LOCALE_STORAGE_KEY, code);
|
||||
document.cookie = `${ADMIN_LOCALE_STORAGE_KEY}=${encodeURIComponent(code)};path=/;max-age=31536000;SameSite=Lax`;
|
||||
}
|
||||
|
||||
return {
|
||||
locale: computed(() => locale.value),
|
||||
localeTag: computed(() => adminLocaleTag(locale.value)),
|
||||
locale: computed(() => locale.value as AdminLocale),
|
||||
localeTag: computed(() => String(locale.value)),
|
||||
locales: ADMIN_LOCALES,
|
||||
setLocale,
|
||||
t,
|
||||
|
||||
Reference in New Issue
Block a user