i18n AI提取实操:15分钟极速搞定多语言支持!

各位跨境伙伴,大家好!在咱们日常的跨境业务开发中,随着项目不断成长,新增功能堆积如山,多语言支持(也就是咱们常说的i18n国际化)这事儿常常被一拖再拖。产品经理催着要翻译,可想从那堆代码里把需要翻译的文本一个个扒拉出来,简直是件苦差事。那有没有更“智慧”的办法,让AI来帮咱们省省心呢?新媒网跨境获悉,答案是肯定的!
今天,我就给大家介绍一个简单实用的命令行工具,它用TypeScript写成,核心思想就是利用AI批量处理源码,把那些散落在代码里的字符串“揪”出来,为多语言支持打下基础。这个点子,我从第一次接触OpenAI时就在琢磨,现在终于有了实战落地的工具。
核心理念其实很简单:让AI批量扫描源码,实现一些实在的功能。我最终决定动手做出来,于是就有了这个小巧的CLI工具,它能做到以下几点:
- 逐一扫描:按照你指定的目录,一个文件一个文件地把源码都过一遍。
- 提取信息:把源码里需要翻译的文本内容精准地提取出来。
- 生成变更:为后续的多语言支持(i18n)生成代码变更的“差异补丁”。
- 应用变更:直接把这些“差异补丁”应用到咱们的源文件里。
咱们这就深入看看它是怎么工作的!
i18n-wizard:你的国际化得力助手
i18n-wizard,听名字就知道它是国际化方面的“小能手”。它是一个轻量级的命令行工具,专门用来提取代码中的内联文本,并且能智能地生成对应的翻译键(translation keys)。更妙的是,它还能把这些内联字符串“转化”成翻译键,让你能轻松地接入自己喜欢的i18n库。这个工具目前通过npx就可以免费使用。
这个CLI工具的“幕后英雄”就是OpenAI。它巧妙地利用AI来生成代码的“差异补丁”(diffs)。这样一来,无论是插入新的库、重命名变量,还是对源码进行其他调整,都不需要为每一种语言或框架单独开发复杂的解析器了,极大地提升了灵活性。
AI自动提取消息,省心又省力
CLI工具最核心的功能,就是自动从源码中提取需要翻译的消息。市面上虽然也有不少同类工具,但它们往往与特定的框架或语言深度绑定,通用性不高。而i18n-wizard借助AI的力量,实现了“平台无关”。这意味着它无需针对每一种语言或框架去实现和维护复杂的解析器,大大降低了维护成本,也让咱们的应用范围更广。
智能插入库,代码改造更灵活
除了提取消息,i18n-wizard还能为源文件生成差异补丁。这功能厉害在哪儿呢?它能让你把那些内联的字符串,轻松地迁移到你选择的i18n库中。和消息提取一样,CLI也是借助OpenAI来生成这些补丁的。所以,它不仅能帮你插入库,还能修改变量名,或者对源码做任何你需要的改动,完全不需要你去为每种语言或框架定制解析器。
当然,咱们也得实话实说,这个工具目前还在初期阶段,偶尔可能会生成一些无效的差异补丁。所以,我建议大家在全项目应用之前,先拿一小部分文件做个测试,手动审查一下生成的补丁。虽然它不是百分百完美,但毫无疑问,它能极大地加快你为项目添加多语言支持的速度,把咱们从繁琐的机械劳动中解放出来。
i18n-wizard实战指南
在咱们把这个CLI工具跑遍整个项目之前,有几点非常重要的注意事项,各位跨境伙伴务必牢记:
- 先小范围测试:务必先在少量文件上跑一遍,看看生成的差异补丁是否准确无误。
- 备份是王道:CLI工具会直接修改文件,所以务必在操作前做好源码备份,以防万一。
- 敏感信息勿存:源码中的任何敏感信息,比如密钥、个人隐私等,都不要直接暴露在文件中,因为这些内容都会被发送到OpenAI进行处理。安全合规,这一点不能马虎。

AI从源代码中提取的源消息
第一步:准备好你的提示词文件
要让AI干活,咱们首先得告诉它咱们想干啥。这个CLI工具支持自定义提示词(prompt),你可以根据自己的项目需求进行调整。这一步至关重要,因为生成的差异补丁质量,直接取决于咱们提示词的清晰度和准确性。
你可以创建一个名为prompt.txt的文件,作为起点,可以参考下面这个提示词:
你是一名软件开发人员,正在为一个需要翻译成多种语言的项目工作。你的任务是从源代码中提取所有需要翻译的文本。
在源代码中找到所有需要翻译的纯文本,并为找到的翻译键思考一个合适的名称。
以如下所示的有效JSON格式返回所有翻译键和消息:
{"d": "", "e": [{"k": "翻译键", "m": "文本"}]},
其中 "e" 包含你的翻译键和找到的文本列表。"k" 是你的翻译键,"m" 是源代码中的原始文本。
如果没有需要翻译的内容,你可以返回一个空的差异补丁和一个空的提取翻译列表。
这是你需要分析的源代码:{\_\_fileContent\_\_}
如果你使用的语言或框架比较特殊,可以在提示词中更具体地说明,这样AI就能生成更精准的差异补丁。注意,{\_\_fileContent\_\_}这个占位符千万不能删,因为它在处理过程中会被替换成文件的实际内容。如果你的需求需要文件路径,也可以加上{\_\_filePath\_\_}这个占位符。
第二步:准备CLI命令
要启动这个流程,你需要运行类似这样的命令:
npx @simplelocalize/i18n-wizard ./my-directory/**/*.{tsx,ts}
但在执行之前,咱们先来了解一下几个必要的参数:
--prompt:指定提示词文件的路径,默认是./prompt.txt。--output:指定输出文件的路径,默认是./extraction.json。--openAiKey:你的OpenAI API密钥。当然,你也可以把它设置为环境变量(OPENAI_API_KEY)来使用,这样更安全方便。--openAiModel:指定使用的OpenAI模型,默认是gpt-4.1(注:这里是原始文档的描述,实际OpenAI模型版本迭代很快,目前主流可能是gpt-4或gpt-3.5-turbo系列,大家使用时请以OpenAI官网最新为准,新媒网跨境提醒您注意教程时效性)。--extractMessages:是否从源码中提取消息,默认是false。--generateDiff:是否为CLI工具所做的更改生成一个差异文件,默认是false。--applyDiff:是否将差异文件应用到源码中,默认是false。
在接下来的例子中,我将给大家演示如何结合不同的选项来使用这个CLI工具。为了简化操作,我将OpenAI API密钥通过环境变量设置。
如果什么选项都不加,直接运行CLI,它只会告诉你哪些文件将被处理,而不会执行任何实际操作。
示例TSX文件:一个React组件
咱们用一个简单的React组件作为例子,它里面包含了一些需要翻译的文本。这是一个页脚组件,里面有指向帮助、联系方式、支持、隐私政策和服务条款页面的链接。
import * as React from "react";
const Footer = () => {
return (
<footer className="footer-landing no-print">
<div className="container">
<div className="footer-landing__content">
<nav>
<img src="/render-form.svg" width="45" height="45" className="navbar-brand" alt="RenderForm" />
<ul>
<li>
<a href="/docs/">Help</a>
</li>
<li>
<a href="mailto:contact@renderform.io">Contact</a>
</li>
<li>
<a href="/docs/general/support/">Support</a>
</li>
<li>
<a href="/legal/privacy-policy/">Privacy Policy</a>
</li>
<li>
<a href="/legal/terms-of-service/">Terms of Service</a>
</li>
</ul>
</nav>
</div>
</div>
</footer>
);
};
export default Footer;
仅运行消息提取
如果只想从源码中提取消息,可以这样使用命令:
npx @simplelocalize/i18n-wizard --extractMessages ./my-directory/**/*.{tsx,ts}
CLI执行后,会在extraction.json文件中输出类似这样的结果。这个输出文件遵循SimpleLocalize的JSON格式,可以直接导入SimpleLocalize或类似的国际化平台使用,非常方便。
{
"footer.help": {
"defaultMessage": "Help",
"source": "/Users/jpomykala/Workspace/RenderForm/WebClient/components/landing/Footer.tsx"
},
"footer.contact": {
"defaultMessage": "Contact",
"source": "/Users/jpomykala/Workspace/RenderForm/WebClient/components/landing/Footer.tsx"
},
"footer.support": {
"defaultMessage": "Support",
"source": "/Users/jpomykala/Workspace/RenderForm/WebClient/components/landing/Footer.tsx"
}
}
消息的质量会受到提示词文件的影响,所以你可能需要根据实际情况调整提示词,以获得更理想的结果。值得注意的是,AI每次运行可能会生成不同的键名和消息。在下面的例子中,我也尝试了gpt-3.5-turbo模型,它速度更快,但结果准确性可能略逊一筹。不过在我自己的测试中,它表现得非常好,甚至有时候比GPT-4更给力。
提取了26条消息
运行消息提取并生成差异补丁
如果你想同时提取消息并为源文件生成差异补丁,可以使用下面的命令:
npx @simplelocalize/i18n-wizard --extractMessages --generateDiff ./my-directory/**/*.{tsx,ts}
这里要再次强调:OpenAI生成的差异补丁可能不是完全有效的。所以在将它们应用到源码之前,你需要仔细审查并手动修正。否则,CLI工具在应用时会失败。
将差异补丁应用到源码
一旦你生成了差异补丁,就可以通过启用--applyDiff选项来应用它们:
npx @simplelocalize/i18n-wizard --applyDiff ./my-directory/**/*.{tsx,ts}
如果CLI在应用某个文件的差异补丁时失败了,它会自动跳过该文件,并打印错误信息,然后继续处理下一个文件。成功应用的差异补丁文件会自动删除,这样你就能专注于解决那些出错的问题,修复后再重新运行CLI即可。
总结与前瞻
利用AI来自动化源码中的消息提取,是加速项目多语言支持进程的一个绝佳途径。尽管这个CLI工具并非十全十美,但它能有效地帮助咱们将内联字符串迁移到所选的i18n库中,大大减少了手动操作的工作量。
一个好的提示词文件,是获得更好结果的关键。不幸的是,在很多情况下,AI生成的差异补丁可能无法直接使用,但通过调整提示词,仍然能够显著减少将内联字符串迁移到目标i18n库所需的手动工作。
对于那些从未进行过国际化,或者项目中有大量文本需要翻译的项目来说,这是一个非常棒的起点,但它并非“万能药”。咱们要保持积极的心态,利用好这些工具,但也要认识到其局限性,不能盲目依赖。
i18n-wizard CLI是开源的,欢迎大家查阅代码,如果你觉得能改进它,也欢迎贡献力量!我非常鼓励大家去尝试一下,并告诉我你们的看法!
已知风险与时效提醒
AI驱动的工具在带来便利的同时,也有一些潜在的风险和局限,各位跨境伙伴需要知悉:
- 成本考量:OpenAI对输出的token(也就是生成内容)收费远高于输入token(咱们提交的源码内容)。因此,在大型代码库上运行这个CLI,成本可能会相对较高。为了优化这一点,我选择让AI生成差异补丁而不是直接生成整个文件内容,这样可以减少输出token。然而,正如前面提到的,它生成的差异补丁常常无效,这反而阻止了CLI将更改应用到源码。所以,在实际操作中,大家需要权衡成本与效率。
- 补丁有效性:目前AI在生成复杂或精准的差异补丁方面仍有进步空间,生成的补丁无效是常见问题。这意味着咱们不能完全“撒手不管”,仍需人工复核,这部分工作量需要预留。
- 技术迭代:AI模型和相关工具发展迅速,本教程基于2025年的技术背景,后续OpenAI的模型更新、功能调整以及最佳实践都可能发生变化。新媒网跨境建议大家在使用时,及时关注官方文档和社区动态,确保与最新版本保持同步,最大化工具的效用。
社区共建
这个工具是开源的,欢迎大家自由fork仓库,根据自己的需求进行定制,或者提交Pull Request(PR)来贡献新功能!如果你有任何疑问或需要帮助,随时可以通过邮件联系我。咱们一起把这个工具做得更好,为咱们中国的跨境事业添砖加瓦!
新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。
本文来源:新媒网 https://nmedialink.com/posts/i18n-ai-extract-15-min-localization-guide.html


粤公网安备 44011302004783号 













