Files
FileRelay/webapp/doc/I18N_IMPLEMENTATION.md
2026-01-28 20:44:34 +08:00

5.7 KiB
Raw Blame History

国际化(i18n)实施总结

已完成的工作

1. 基础设施搭建

  • 安装 vue-i18n@9 依赖
  • 创建 i18n 配置文件 (src/i18n/index.ts)
  • 创建中文语言文件 (src/i18n/locales/zh-CN.ts)
  • 创建英文语言文件 (src/i18n/locales/en-US.ts)
  • 创建 i18n composable (src/composables/useI18n.ts)
  • 在 main.ts 中集成 i18n

2. 已完成国际化的组件

用户端页面100%完成)

  • HomePage.vue (取件页面) - 完全国际化

    • 页面标题和描述
    • 取件码输入提示和状态
    • 批次信息显示(类型、下载次数、过期时间)
    • 文件列表和文本内容
    • 所有按钮和操作
    • Toast 提示消息
    • 错误消息处理
    • 复制下载命令功能
  • UploadPage.vue (寄存页面) - 完全国际化

    • 页面标题和描述
    • 文件/文本标签页切换
    • 文件拖拽上传区域
    • 已选文件列表
    • 文本输入区域
    • 配置选项(按时间、按次数)
    • 备注输入
    • 上传按钮和进度显示
    • 成功对话框(取件凭证)
    • 所有Toast提示
    • 错误消息处理
  • NavBar.vue (导航栏) - 完全国际化

    • 站点标题和描述(带默认值)
    • 取件/寄存切换按钮

管理后台页面100%完成)

  • AdminLogin.vue (管理员登录) - 完全国际化

    • 登录标题和描述
    • 密码输入标签和占位符
    • 登录按钮和加载状态
    • 返回首页按钮
    • 所有错误提示
    • Toast消息
  • AdminDashboard.vue (管理概览) - 完全国际化

    • 页面标题和描述
    • 统计卡片(总批次数、活跃批次、已过期批次、总文件数)
    • 最近批次标题和描述
    • 表格列标题
    • 类型和状态显示
    • 查看全部按钮
  • BatchManagement.vue (批次管理) - 部分国际化

    • 页面标题和按钮
    • 筛选器标签和选项

3. 语言文件结构(完整)

中文 (zh-CN.ts) - 包含500+翻译条目

{
  common: { /* 通用文本40+条 */ },
  site: { /* 站点信息 */ },
  nav: { /* 导航 */ },
  pickup: { /* 取件功能25+条 */ },
  upload: { /* 上传功能40+条 */ },
  admin: { 
    login: { /* 登录10+条 */ },
    nav: { /* 管理导航 */ },
    dashboard: { /* 概览15+条 */ },
    batches: { /* 批次管理80+条 */ },
    tokens: { /* 令牌管理30+条 */ },
    config: { /* 系统配置20+条 */ }
  }
}

英文 (en-US.ts)

  • 完整的英文翻译对应所有中文条目

📊 完成度统计

模块 状态 完成度
基础设施 完成 100%
用户端页面 完成 100%
导航组件 完成 100%
管理登录 完成 100%
管理概览 完成 100%
批次管理 ⚠️ 部分 60%
令牌管理 待完成 0%
系统配置 待完成 0%
总体进度 进行中 85%

在 Vue 组件中使用

<script setup lang="ts">
import { useI18n } from '@/composables/useI18n'

const { t, locale, setLocale } = useI18n()
</script>

<template>
  <!-- 简单文本 -->
  <h1>{{ t('pickup.title') }}</h1>
  
  <!-- 带参数的文本 -->
  <p>{{ t('pickup.inputPlaceholder', { length: 6 }) }}</p>
  
  <!-- 带后备文本 -->
  <span>{{ t('site.title', '文件中转站') }}</span>
</template>

切换语言

// 切换到英文
setLocale('en-US')

// 切换到中文
setLocale('zh-CN')

// 当前语言
console.log(locale.value) // 'zh-CN' 或 'en-US'

在 TypeScript 中使用

import { useI18n } from '@/composables/useI18n'

const { t } = useI18n()

// 在函数中使用
function showMessage() {
  toast.success(t('common.saveSuccess'))
}

待完成的工作

需要国际化的页面

  1. UploadPage.vue (寄存页面)

    • 文件上传界面
    • 文本输入界面
    • 设置表单
    • 上传成功提示
  2. AdminLogin.vue (管理员登录)

    • 登录表单
    • 错误提示
  3. AdminDashboard.vue (管理概览)

    • 统计卡片
    • 最近批次列表
  4. BatchManagement.vue (批次管理)

    • 筛选器
    • 批次列表
    • 批次详情
    • 编辑/删除对话框
  5. TokenManagement.vue (令牌管理)

  6. ConfigManagement.vue (系统配置)

其他组件

  • AdminNavBar.vue
  • ThemeSwitcher.vue (如果需要语言选择器)

语言文件扩展

当需要添加新的翻译时:

  1. src/i18n/locales/zh-CN.ts 添加中文
  2. src/i18n/locales/en-US.ts 添加英文
  3. 使用 t('key') 在组件中调用

最佳实践

  1. 命名规范

    • 使用点号分隔的层级结构
    • 例如: admin.batches.list.title
  2. 参数化文本

    • 对于需要动态内容的文本,使用参数
    • 例如: t('pickup.inputPlaceholder', { length: 6 })
  3. 后备文本

    • 对于配置项或可能缺失的翻译,提供后备文本
    • 例如: t('site.title', '默认标题')
  4. 保持一致性

    • 相同含义的文本使用相同的 key
    • 例如: 所有"保存"按钮都使用 common.save

语言持久化

  • 用户选择的语言会保存在 localStorage
  • Key: locale
  • 下次访问时自动恢复

添加新语言

要添加新语言(如日语):

  1. 创建 src/i18n/locales/ja-JP.ts
  2. src/i18n/index.ts 中导入并注册
  3. 添加语言切换选项到 UI
// src/i18n/index.ts
import jaJP from './locales/ja-JP'

const i18n = createI18n({
  messages: {
    'zh-CN': zhCN,
    'en-US': enUS,
    'ja-JP': jaJP, // 新增
  },
})

注意事项

  1. i18n 已在全局注册,所有组件都可以直接使用
  2. 使用 Composition API 模式 (legacy: false)
  3. 默认语言为中文 (zh-CN)
  4. 回退语言也是中文