🎩 告别复制粘贴!写中文自动生成翻译Key,这才是国际化该有的效率

139 阅读5分钟

试想一下:如果写国际化代码时,你不再需要费心构思t('user.login.error')这种Key,而是直接写下t('用户名不能为空'),剩下的所有事情——生成Key、写入语言文件、翻译成英文日文德文……都自动完成。这是一种怎样的体验?

如果你觉得这像天方夜谭,那么今天介绍的这款VSCode插件i18n Mage,将会彻底改变你的工作方式。

image.png

一、传统开发流程 vs 智能开发流程

传统方式(繁琐易错):

  1. 在代码中写:t('用户名不能为空') // 先用中文占位
  2. 打开语言文件 zh-CN.json
  3. 构思Key名:usernameCannotBeEmpty
  4. 手动添加:"usernameCannotBeEmpty": "用户名不能为空"
  5. 打开语言文件 en-US.json
  6. 手动添加:"usernameCannotBeEmpty": ""
  7. 打开翻译网站,翻译“用户名不能为空”
  8. 将翻译结果复制粘贴到en-US.json中
  9. 返回代码,将中文替换为Key:t('usernameCannotBeEmpty')

共计:9个步骤,多次上下文切换,极易出错

i18n Mage方式(一键完成):

  1. 在代码中写:t('用户名不能为空') // 保持中文
  2. 按下快捷键 Ctrl+Alt+F

共计:2个步骤,无需切换界面,全自动完成

二、如何实现这一魔法?

第1步:安装并启用插件

在VSCode扩展商店中搜索 i18n Mage 并安装。插件会自动识别项目中的语言文件目录。

第2步:调整配置

  • 使用快捷键 Ctrl + , 打开设置,进入扩展 -> i18n Mage -> 翻译服务,勾选修复时自动翻译未定义词条。

    image.png

  • 点击活动栏的巫师图标,打开插件面板,在同步信息模块下右键将中文设为翻译源语言。

    image.png

第3步:直接书写中文文案

在代码中,你只需要按照最自然的方式编写:

// 登录表单验证
const loginFormRules = {
  username: [
    { required: true, message: t('请输入用户名'), trigger: 'blur' }
  ],
  password: [
    { required: true, message: t('密码不能为空'), trigger: 'blur' },
    { min: 6, message: t('密码长度不能少于6个字符'), trigger: 'blur' }
  ]
}

暂时完全不需要考虑Key的命名问题,就像还没有做国际化时那样编写即可。

第4步:使用快捷键触发魔法

当你完成一个模块的编写后,只需简单一步:使用快捷键 Ctrl+Alt+F (Fix的首字母)

fixUndefinedTranslation.gif

第5步:查看自动生成的结果

插件会在瞬间完成以下所有工作:

  1. 匹配已有Key:将未定义的文案与已有翻译进行比对,若命中,则直接使用已有翻译的Key。若没有命中,则进入下一步

  2. 智能生成Key:基于中文文案的英文翻译自动生成语义化的Key

  • '请输入用户名' → pleaseEnterUsername (驼峰式)
  • '密码不能为空' → passwordCannotBeEmpty
  1. 自动写入翻译
  • zh-CN.json中添加:"pleaseEnterUsername": "请输入用户名"
  • en-US.json中添加:"pleaseEnterUsername": "Please enter your username"
  • ja-JP.json中添加:"pleaseEnterUsername": "ユーザー名を入力してください"
  1. 自动替换代码
  • 将源代码中的 t('请输入用户名') 自动替换为 t('pleaseEnterUsername')

三、如何保证Key的语义化和可读性?

你可能会担心自动生成的Key名是否合理。i18n Mage提供了强大的配置选项:

1. 多种命名风格

在VSCode设置中搜索 i18n Mage,可以配置生成的Key风格:

  • camelCaseuserNameCannotBeEmpty (默认)
  • snake_caseuser_name_cannot_be_empty
  • kebab-caseuser-name-cannot-be-empty
  • PascalCaseUserNameCannotBeEmpty

2. 最长截断处理

插件支持配置key名生成的最大字符数,如果超出这个长度,则会使用“文件名 + Text + 序号”的形式生成 key。

3. 自定义Key生成规则

如果你对某些Key的生成有特殊要求,可以在中文前添加特殊标记:

// 使用 %...% 指定固定Key
t('%login.submit%登录') // 会生成Key:login.submit

// 使用 #...# 指定Key前缀  
t('#common#帮助') // 会生成Key:common.help

四、实际开发中的应用场景

场景1:快速开发新功能

在新功能开发过程中,你可以完全专注于业务逻辑和UI,不需要中断思路来构思Key名和添加翻译。所有国际化工作可以留到后期一次性处理。

场景2:改造旧项目

对于之前没有做国际化的项目,你可以直接使用搜索替换,将所有需要国际化的文案套上t()函数,然后使用i18n Mage一次性修复所有未定义翻译。

场景3:团队协作规范

团队中可以统一Key的生成规范,避免不同成员命名风格不一致的问题。

总结

i18n Mage 的这个“智能修复”功能,真正实现了国际化开发的关注点分离

  • 开发阶段:你只需要关注文案内容本身
  • 国际化阶段:插件自动处理Key生成和翻译工作

这种方式不仅极大提升了开发效率,更重要的是减少了上下文切换带来的认知负担,让你能够保持流畅的开发状态。

如果你也厌倦了在Key命名和文件切换上浪费时间,强烈建议尝试一下这个插件的“智能修复”功能,它可能会改变你对国际化开发的看法。

大家如果有其他提高国际化开发效率的技巧,欢迎在评论区分享交流!