Skip to content

常见问题

英文源码和中文源码取词逻辑一样吗

不完全一样。

英文源码中很多字符串可能是协议值、类型值、类名、路径或内部标识,不能只要出现英文就翻译。因此英文模式会优先提取用户可见 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 应该怎么选择

按钮、菜单、状态、表格列名这类短文本通常建议使用标题式大小写,例如 LoginNormal 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 文件。

Released under the MIT License.