Digital Office Automation System
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

i18n-guide.md 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. # 多语言配置使用指南
  2. ## 概述
  3. 本项目已集成 Vue I18n 国际化支持,支持中文和英文两种语言。系统会根据用户浏览器语言自动选择默认语言,用户也可以手动切换语言。
  4. ## 主要特性
  5. - ✅ 支持中文(zh)、英文(en)和日文(ja)
  6. - ✅ 自动检测浏览器语言
  7. - ✅ Cookie 持久化语言选择
  8. - ✅ Element UI 组件多语言支持
  9. - ✅ Vuex 状态管理
  10. - ✅ 语言切换组件
  11. ## 目录结构
  12. ```
  13. src/
  14. ├── i18n/
  15. │ ├── index.js # i18n 主配置文件
  16. │ └── lang/
  17. │ ├── zh.js # 中文语言包
  18. │ ├── en.js # 英文语言包
  19. │ └── ja.js # 日文语言包
  20. ├── components/
  21. │ └── LangSelect/ # 语言切换组件
  22. │ └── index.vue
  23. └── store/
  24. └── modules/
  25. └── language.js # 语言状态管理
  26. ```
  27. ## 基础使用
  28. ### 1. 模板中使用
  29. ```vue
  30. <template>
  31. <div>
  32. <!-- 基础翻译 -->
  33. <h1>{{ $t('system.title') }}</h1>
  34. <!-- 按钮文本 -->
  35. <el-button>{{ $t('button.save') }}</el-button>
  36. <!-- 属性中使用 -->
  37. <el-input :placeholder="$t('form.username')"></el-input>
  38. <!-- 带参数的翻译 -->
  39. <span>{{ $t('pagination.total', { total: 100 }) }}</span>
  40. </div>
  41. </template>
  42. ```
  43. ### 2. JavaScript 中使用
  44. ```javascript
  45. export default {
  46. methods: {
  47. showMessage() {
  48. // 显示国际化消息
  49. this.$message.success(this.$t('message.success'))
  50. },
  51. // 表单验证规则中使用
  52. getValidationRules() {
  53. return {
  54. username: [
  55. {
  56. required: true,
  57. message: this.$t('message.inputRequired'),
  58. trigger: 'blur'
  59. }
  60. ]
  61. }
  62. }
  63. }
  64. }
  65. ```
  66. ### 3. 语言切换组件
  67. ```vue
  68. <template>
  69. <div>
  70. <!-- 在导航栏或任何位置添加语言切换器 -->
  71. <lang-select></lang-select>
  72. </div>
  73. </template>
  74. ```
  75. ## 语言包结构
  76. ### 中文语言包 (src/i18n/lang/zh.js)
  77. ```javascript
  78. export default {
  79. // 系统通用
  80. system: {
  81. title: '数字化办公自动化系统',
  82. name: 'DOAS',
  83. welcome: '欢迎使用'
  84. },
  85. // 通用按钮
  86. button: {
  87. search: '搜索',
  88. reset: '重置',
  89. add: '新增',
  90. save: '保存'
  91. },
  92. // 表单标签
  93. form: {
  94. username: '用户名',
  95. password: '密码',
  96. email: '邮箱'
  97. }
  98. }
  99. ```
  100. ### 英文语言包 (src/i18n/lang/en.js)
  101. ```javascript
  102. export default {
  103. // System common
  104. system: {
  105. title: 'Digital Office Automation System',
  106. name: 'DOAS',
  107. welcome: 'Welcome to'
  108. },
  109. // Common buttons
  110. button: {
  111. search: 'Search',
  112. reset: 'Reset',
  113. add: 'Add',
  114. save: 'Save'
  115. },
  116. // Form labels
  117. form: {
  118. username: 'Username',
  119. password: 'Password',
  120. email: 'Email'
  121. }
  122. }
  123. ```
  124. ### 日文语言包 (src/i18n/lang/ja.js)
  125. ```javascript
  126. export default {
  127. // システム共通
  128. system: {
  129. title: 'デジタルオフィス自動化システム',
  130. name: 'DOAS',
  131. welcome: 'ようこそ'
  132. },
  133. // 共通ボタン
  134. button: {
  135. search: '検索',
  136. reset: 'リセット',
  137. add: '追加',
  138. save: '保存'
  139. },
  140. // フォームラベル
  141. form: {
  142. username: 'ユーザー名',
  143. password: 'パスワード',
  144. email: 'メールアドレス'
  145. }
  146. }
  147. ```
  148. ## 高级用法
  149. ### 1. 动态语言切换
  150. ```javascript
  151. // 在组件中切换语言
  152. this.$i18n.locale = 'ja' // 或 'zh', 'en'
  153. this.$store.dispatch('language/setLanguage', 'ja')
  154. ```
  155. ### 2. 条件翻译
  156. ```vue
  157. <template>
  158. <div>
  159. <span v-if="$i18n.locale === 'zh'">中文特有内容</span>
  160. <span v-else>English specific content</span>
  161. </div>
  162. </template>
  163. ```
  164. ### 3. 复数形式处理
  165. ```javascript
  166. // 语言包中定义
  167. {
  168. message: {
  169. apple: 'no apples | one apple | {count} apples'
  170. }
  171. }
  172. // 使用
  173. {{ $tc('message.apple', count) }}
  174. ```
  175. ## 开发指南
  176. ### 1. 添加新的翻译
  177. 1. 在 `src/i18n/lang/zh.js` 中添加中文翻译
  178. 2. 在 `src/i18n/lang/en.js` 中添加对应的英文翻译
  179. 3. 确保两个语言包的 key 保持一致
  180. ### 2. 最佳实践
  181. #### 命名规范
  182. - 使用有意义的嵌套结构
  183. - 按功能模块组织翻译 key
  184. - 避免过深的嵌套层级(建议不超过 3 层)
  185. ```javascript
  186. // ✅ 推荐
  187. {
  188. user: {
  189. profile: {
  190. name: '姓名',
  191. email: '邮箱'
  192. }
  193. }
  194. }
  195. // ❌ 不推荐
  196. {
  197. userProfileFormFieldLabelName: '姓名'
  198. }
  199. ```
  200. #### 参数化翻译
  201. ```javascript
  202. // 语言包
  203. {
  204. welcome: '欢迎 {name},您有 {count} 条新消息'
  205. }
  206. // 使用
  207. {{ $t('welcome', { name: userName, count: messageCount }) }}
  208. ```
  209. ### 3. 测试多语言
  210. 建议在开发过程中:
  211. 1. 经常切换语言测试界面显示
  212. 2. 检查所有文本是否正确翻译
  213. 3. 确保不同语言下的布局不会破坏
  214. ## 扩展支持新语言
  215. 系统目前支持中文、英文、日文三种语言。如需添加其他新语言(如韩语),按以下步骤:
  216. 1. 创建语言包文件 `src/i18n/lang/ko.js`
  217. 2. 在 `src/i18n/index.js` 中导入并配置
  218. 3. 更新语言选择组件支持新语言
  219. 4. 导入对应的 Element UI 语言包
  220. ```javascript
  221. // src/i18n/index.js
  222. import koLocale from './lang/ko'
  223. import elementKoLocale from 'element-ui/lib/locale/lang/ko'
  224. const messages = {
  225. // ...existing languages
  226. ko: {
  227. ...koLocale,
  228. ...elementKoLocale
  229. }
  230. }
  231. ```
  232. ## 注意事项
  233. 1. **性能考虑**:大型应用建议按需加载语言包
  234. 2. **SEO 优化**:考虑使用不同的路由前缀区分语言版本
  235. 3. **日期时间**:使用 moment.js 或 dayjs 处理不同语言的日期格式
  236. 4. **数字格式**:注意不同地区的数字、货币格式差异
  237. ## 常见问题
  238. ### Q: 切换语言后页面没有立即更新?
  239. A: 确保使用了响应式的 `$t()` 函数,避免在 `data()` 中缓存翻译结果。
  240. ### Q: Element UI 组件的文本没有翻译?
  241. A: 检查是否正确配置了 Element UI 的 i18n 选项。
  242. ### Q: 如何处理长文本翻译?
  243. A: 建议将长文本放在单独的文件中,或者使用富文本编辑器。
  244. ## 参与贡献
  245. 如需添加新的翻译或改进现有翻译,请:
  246. 1. Fork 项目仓库
  247. 2. 创建功能分支
  248. 3. 添加或修改翻译文件
  249. 4. 提交 Pull Request
  250. ---
  251. 更多信息请参考 [Vue I18n 官方文档](https://vue-i18n.intlify.dev/)