常见问题
英文源码和中文源码取词逻辑一样吗
不完全一样。
英文源码中很多字符串可能是协议值、类型值、类名、路径或内部标识,不能只要出现英文就翻译。因此英文模式会优先提取用户可见 UI 文案、通知提示、对象展示字段、组件展示属性、JSX/Vue 文本等。
非英文源码中,脚本和 JSX/TSX 的取词会更开放,但仍会跳过样式、路径、正则、类型声明、已处理的 $t(...) 等技术上下文。
为什么有些默认值不取词
解构默认值和函数参数默认值通常代表数据结构兜底,不一定是用户可见文案。
js
const { propertyName = 'User name' } = objectToDestruct
function submit(label = 'Save') {}这类默认跳过,避免误改接口适配、工具函数和类型兜底。真正用于展示的兜底表达式会提取:
js
const text = data?.text || 'Default text'
const desc = data?.description ?? 'No description'如何临时跳过某段代码
使用忽略注释:
js
// @hias-i18n-ignore-next
message.success('Keep original')
/* @hias-i18n-ignore-start */
const a = 'Keep original'
const b = 'Keep original too'
/* @hias-i18n-ignore-end */Vue 模板:
vue
<!-- @hias-i18n-ignore-next -->
<div>保持原文</div>整文件跳过:
js
// @hias-i18n-ignore-file为什么图片路径中的中文不应该翻译
资源路径是文件引用,不是用户可见文案。
vue
<img src="@/assets/images/ssHome/供应商总数量.png" alt="供应商总数量" />其中 src 应保持原样,alt 可以翻译:
vue
<img src="@/assets/images/ssHome/供应商总数量.png" :alt="$t('vue3All.total_number_of_suppliers')" />为什么括号不放进翻译 key
当中文和表达式组合时,标点往往属于页面结构,不一定属于文案本身。
推荐:
vue
<h1>{{ $t('vue3All.leave_a_message') }}({{ remarkList ? remarkList.length : 0 }})</h1>语言包:
json
{
"leave_a_message": "留言"
}这样不同语言可以独立维护文案,页面里的数量结构也更清晰。
长句应该拆成多个 key 吗
一般不建议。自然语言段落应该尽量作为完整句子或完整段落处理。
不推荐:
jsx
<div>
{t('part_one')},{t('part_two')},{t('part_three')}
</div>推荐:
jsx
<div>{t('jsxAll.river_story')}</div>机器翻译和人工校对都更容易处理完整语义。
Login 和 login 应该怎么选择
按钮、菜单、状态、表格列名这类短文本通常建议使用标题式大小写,例如 Login、Normal Status。
长句、提示语、说明文案通常保持句子大小写,例如 Please enter your username。
其他语言不一定有英语这样的大小写规则,因此建议把大小写策略限制在英语目标语言上,多语言词库仍以人工译文优先。
正则里的中文要翻译吗
通常不要。
js
const regex = /中文|English/giu正则是程序匹配规则,翻译后可能改变业务逻辑。
英文模式下正则同样会跳过。
如何检查语言包是否漏 key
执行:
sh
hias tcheck src --report .hias\reports\tcheck.json它会检查缺失 key、未使用 key、不同 locale JSON 之间不一致的 key,以及无法解析的 JSON 文件。