知识库
使用 General Translation 对应用、文档和内容进行本地化的常见问题解答。
国际化
在代码库中配置 i18n:库、框架和组件。
- 如何翻译 Flask 或 FastAPI 应用?标记面向用户的字符串,为每个请求确定区域设置(通常依据 Accept-Language),然后加载该区域设置的译文。Flask 应用通常使用 Flask-Babel 搭配 gettext 消息目录,FastAPI 应用则通过中间件接入 Babel。General Translation 的 CLI 可以填充这些消息目录,而其实验性的 gt-flask 和 gt-fastapi SDK 无需消息目录,即可翻译内联的 t() 字符串。视频
- 如何使用 strings.xml 本地化 Android 应用?将所有默认字符串放在 res/values/strings.xml 中,在带区域设置限定符的文件夹(如 values-es 或 values-b+zh+Hant+TW)下为每种语言各添加一个 strings.xml,并通过 stringResource 或 getString 读取文本。翻译可以手动完成,也可以在 Play Console 中完成,或者使用 General Translation 的 CLI——它会生成每个 values 文件夹,并为每种目标语言重建复数形式。视频
- 如何为 TanStack Start 添加 i18n?TanStack Start 没有内置 i18n,因此你需要引入一个库,在每个服务端请求中解析区域设置(通常依据 URL 前缀或 cookie),并在渲染前加载消息。Paraglide JS、react-i18next 和 Lingui 负责渲染你提供的译文;General Translation 的实验性库 gt-tanstack-start 还能根据 JSX 中内联编写的文案自动生成译文。视频
- 如何为 Next.js Pages Router 应用添加 i18n?在 next.config.js 中添加包含 locales 和 defaultLocale 的 i18n 配置块后,Next.js 便会提供 /es 和 /fr 等路径,根据浏览器语言重定向访问者,并将区域设置传递给 getStaticProps 和 getServerSideProps。消息由库负责渲染;General Translation 的 gt-next 还能根据直接以内联方式写在 JSX 中的文案生成译文。视频
- 如何翻译 Vue 应用?翻译 Vue 应用,就是让每个模板字符串都按当前语言进行查找,并将其翻译成每种目标语言。General Translation 的 gt-vue 插件会翻译包裹在 <T> 组件中的内容,npx gt translate 则会为每种目标语言生成一个目录。视频
- 如何翻译 React 应用?翻译 React 应用,需要先对组件进行国际化,使其以用户的语言渲染,再将每个字符串翻译成你支持的各种语言。General Translation 的 gt-react 在 <T> 组件中原地翻译 JSX,npx gt translate 则会为每种语言生成一个文件。视频
- 如何翻译 React Native 应用?在组件中标记文本,为每种语言生成一个翻译文件,添加 Intl 兼容性补丁,然后根据设备语言加载对应的文件。使用 General Translation 实验性的 gt-react-native 时,只需用 <T> 包裹文本,Babel 插件会自动添加 polyfills,npx gt translate 则负责生成翻译文件。视频
- 如何翻译 Node.js 应用?检测每个请求的语言(通常依据其 Accept-Language 请求头),并以该语言返回所有字符串。General Translation 的 gt-node 通过 withGT 为每个请求绑定区域设置,并通过 getGT 翻译字符串,所用译文由 npx gt translate --publish 在部署前生成。视频
- 如何翻译 JSX 之外的字符串?对于每个不属于 JSX 子节点的字符串(例如占位符或模块作用域常量),应在其渲染的位置通过翻译函数处理。General Translation 的 useGT 钩子会返回该函数,而 msg 搭配 useMessages 可以翻译在组件外部定义的常量。视频
- 如何使用 Cursor 或 Claude Code 为应用实现国际化?在 Cursor 或 Claude Code 中使用 General Translation 的 Setup for Agents 提示词,选定一个功能和目标语言,然后让智能体完成实现并验证结果。借助浏览器登录、机器可读文档和 MCP 工具,初始化设置可以与翻译和审校环节无缝衔接。使用 Locadex,即可通过拉取请求自动完成后续的持续本地化工作。视频
- 如何为 Next.js App Router 应用添加 i18n?首先在受支持的 App Router 项目中运行 gt init 来配置 General Translation,然后标记源内容、生成译文并验证语言切换。gt-next 将文案与翻译上下文一同保留在 JSX 中;CLI、仪表板编辑器和 Locadex 负责生成、审校和持续更新。本指南还演示了如何显式配置本地文件。视频
- 语言切换器最佳实践:用户体验、SEO 与无障碍访问用每种语言的本语名称来标注它,例如 Deutsch 或 日本語,不要使用国旗,因为国旗代表的是国家。每个选项都应通过可抓取的链接指向该语言版本的同一页面,用 cookie 记住用户的选择,并且切勿对已本地化的 URL 自动重定向。视频
- 应该如何命名 i18n 翻译键?应按文本出现的位置及其含义来命名键,例如 checkout.summary.title,而不是照搬英文措辞。即使英文相同,不同用途也应各用一个键:德语会把按钮上的 Open 译为 Öffnen,而把状态 Open 译为 Offen。视频
- 如何让网站支持多语言?先确定译文放在哪里:代理、CMS 插件、建站工具,还是你自己的代码;然后按照 Google 的建议,为每种语言分配独立的 URL。完整翻译页面以及标题和元描述,用 hreflang 关联各语言版本,并提供语言切换器,而不是自动重定向访问者。视频
- 如何检测用户的浏览器语言?读取浏览器提供的有序语言列表(在 JavaScript 中为 navigator.languages,在服务器端为 Accept-Language 标头),按 q 值排序,再与你支持的语言区域进行匹配,并设置后备语言区域。Safari 和 Chrome 无痕模式只会报告一种语言,而 IP 地理定位只能反映用户所在位置,无法反映其使用的语言。视频
- 如何找出未翻译的硬编码字符串?在 CI 中运行 linter,标记面向用户的字符串字面量,例如 JSX 可使用 eslint-plugin-i18next 的 no-literal-string 规则,Android 可使用 Android Lint 的 HardcodedText 检查,Rails 可使用 erb_lint 的 HardCodedString linter。然后切换到伪区域设置,逐一浏览应用,找出静态检查无法追踪到的文本。视频
- 如何使用 String Catalogs 本地化 iOS 应用?在 Xcode 中添加语言,使用 SwiftUI Text 和 String(localized:) 等可本地化 API 编写面向用户的文本,然后执行构建,Xcode 会将这些字符串收集到 String Catalog(.xcstrings)中。翻译可以在 Xcode 中完成,也可以借助 XLIFF;如果希望目录随版本发布同步更新,并与你的网站和 Android 应用共享术语,可以使用 General Translation 的 CLI。视频
- 国际化与本地化(i18n 与 l10n)国际化(i18n)是让一款产品支持多种区域设置的代码与设计工作,例如使用 Intl 格式化日期、支持从右到左的文本等。本地化(l10n)则针对某一区域设置对产品进行适配,除翻译外,还涵盖货币、日期格式、计量单位、语气和法律细节等方面。视频
- 什么是伪本地化?伪本地化是一种测试方法:将源文本替换为改写后的版本——加上重音符号、长度扩充约 40%,并用方括号包裹——这样在还没有任何翻译之前,硬编码字符串、截断、字体显示异常和句子拼接等问题就会暴露出来。Android 为此内置了 en-XA 和 ar-XB 两个伪区域设置。视频
- 应该自建 i18n,还是使用 General Translation?手写的 i18n(每种语言一个字典,外加一个简单的 t() 辅助函数)足以应对一两种语言、少量文案的场景。随着应用规模扩大,你会发现自己在重新实现复数规则、后备内容和文件同步,而且译文仍然得自己产出。General Translation 的开源库负责渲染,General Translation 则根据你的代码生成并更新译文。视频
- 多语言应用本地化测试清单在生产环境构建中,于每个支持的区域设置下测试九项内容:包括错误状态和邮件在内的完整流程、语言切换、复数形式、货币与时区、文本扩展、从右到左布局、无障碍访问、译文交付,以及可抓取的语言 URL。为每项检查设定明确的通过标准。视频
- react-intl 替代方案:General Translation 与 react-intl 对比General Translation 让 React 团队在保留 ICU 消息语法的同时,获得译文生成、共享术语和仪表板审校能力。react-intl 提供格式化功能和 FormatJS 目录工具;General Translation 还能直接生成译文。视频
- i18next 替代方案:General Translation 与 i18next 对比如果你希望将文案内联在 React 组件中,并借助其 JSX 结构和产品上下文生成译文,请选择 General Translation。你也可以继续使用 i18next,并用 General Translation 翻译现有的目录。i18next 负责消息渲染和复数形式选择,译文则需要由单独的服务生成。视频
- General Translation 与 vue-i18n 对比:该选哪一个?General Translation 让 Vue 团队可以直接在模板中编写源文案,并通过 CLI 生成译文。其 gt-vue 插件在渲染这些内容时,会应用符合区域设置的复数形式和数字格式化。如果你希望免去维护基于键的源文件,可以选择它;而对于使用 Nuxt i18n 模块、已有成熟目录工作流的团队,vue-i18n 依然是合适的选择。视频
- General Translation 与 Symfony Translation:该选哪一个?Symfony Translation 负责在 PHP 和 Twig 中渲染消息。General Translation 则在 CI 中翻译其 YAML 消息目录,随源内容的变化持续同步更新,并为审校人员提供可直接编辑译文的仪表板。保留 Symfony 的渲染机制,同时为你的发布工作流加入自动化翻译。视频
- General Translation 与 Rails I18n:两者都需要吗?Rails I18n 负责查找消息并格式化日期和数字。General Translation 负责生成译文,在英文内容变更时让译文保持同步,并为团队提供用于审校的仪表板。两者搭配使用,即可在每次发布时交付已翻译的 Rails 目录。视频
- General Translation 与 Paraglide JS:该选哪一个?如果你希望将文案内联在代码中,并结合 React 组件结构、共享术语和仪表板审阅来生成译文,请选择 General Translation。如果你需要编译生成的带类型消息函数,以及按单条消息进行的 tree-shaking,请选择 Paraglide JS。Paraglide 负责渲染你的消息目录;General Translation 则将源文案与译文生成及后续更新衔接起来。视频
- General Translation 与 nestjs-i18n:该选哪一个?nestjs-i18n 在 NestJS 应用中为每个请求解析语言,并从按语言划分的 JSON 或 YAML 消息目录中渲染消息,但它本身并不翻译任何内容。General Translation 的 CLI 可以翻译这些消息目录,其 gt-node 库则能翻译仅在运行时才存在的内容。因此,你可以继续使用 nestjs-i18n,同时引入 General Translation。视频
- General Translation 与 Mobility:该选哪一个?Mobility 将翻译后的模型属性存储在您的数据库中。General Translation 则通过其 API,结合您的词汇表和自定义提示词生成这些译文。两者搭配使用,即可在保留现有 Rails 模型的同时,翻译商品列表、文章及其他数据库内容。视频
- General Translation 与 Lingui:该选哪一个?如果你希望像使用 Lingui 一样将文案内联在代码中,同时以 JSX 结构作为上下文自动生成译文,请选择 General Translation。Lingui 会将内联消息提取到消息目录中,交由译者或已连接的服务翻译。General Translation 的 CLI 会随代码变更自动更新译文,你的团队可以在仪表板中审阅。视频
- General Translation 与 Intlayer:该选哪一个?Intlayer 将每个组件的内容保存在组件旁的类型化声明文件中,所有语言并排编写,并可借助你配置的 AI 提供商补全缺失的语言。General Translation 则将文案以单一语言内联在组件中,并结合代码上下文生成其他语言的译文。视频
- General Translation 与 i18next、react-intl 和 next-intl 对比:应该选择哪个国际化库?i18next、react-intl 和 next-intl 等开源库本身并不翻译任何内容。它们只负责显示你在各语言目录文件中提供的译文,这些译文由你、你的译者或其他服务编写。General Translation 的库同样开源,承担同样的工作,此外 General Translation 还会以你的代码为上下文完成翻译。视频
- General Translation 与 GNU gettext:两者都需要吗?继续用 GNU gettext 负责提取和渲染,再引入 General Translation 来生成和维护 PO 文件。General Translation 会把译者备注和消息上下文纳入生成过程,统一应用共享术语,并为审校人员提供 仪表板 编辑器。你现有的 gettext 调用和已编译的消息目录均保持原样。视频
- General Translation 与 Django 翻译框架:两者都需要吗?将 Django 的翻译框架与 General Translation 搭配使用。Django 负责消息提取、语言选择和渲染;General Translation 则基于你的产品术语和仪表板审阅,填充 Django 的 PO 文件(包括复数形式)。你的模板和 URL 模式无需改动,译文会随代码同步更新。视频
- General Translation 与 Babel、Flask-Babel 对比:该选哪一个?Babel 可以为任意区域设置格式化日期、数字和货币,并管理 gettext 消息目录;Flask-Babel 则负责将其集成到 Flask 中,但两者都不会翻译你的字符串。General Translation 的 CLI 会为每种语言填充 Babel 的 PO 文件(包括复数形式),因此你可以继续使用 Flask-Babel,不必再手动翻译消息目录。视频
- 不使用翻译文件能实现 i18n 吗?可以。借助 General Translation 的 gt-react 和 gt-next 库,你可以为 React 和 Next.js 实现 i18n,既无需翻译键,也不用为每种语言维护 JSON 文件。文案以内联方式写在 JSX 的 <T> 组件中,gt translate 命令会在构建时结合代码中的上下文,为每种语言生成译文。Locadex 还能通过拉取请求让译文保持最新。视频
- 如何翻译 JSX 中的条件文本?保持句子完整,并翻译它的每个版本。三元表达式会把句子拆成碎片,使其失去含义,也无法适应各语言的语序。General Translation 通过在 <T> 中使用 <Branch> 解决这一问题,将整个句子作为一个整体进行翻译。视频
按区域设置格式化
各区域设置下的复数形式、日期、数字、货币和从右到左的文本。
- 什么是区域设置代码(例如 en-US 和 en-GB)?区域设置代码用于标识一种语言,并在必要时标识其文字体系和地区,例如 en-US 表示美国英语,zh-Hant-TW 表示台湾地区使用的繁体中文。大多数软件使用由 ISO 代码组合而成的 BCP 47 标签。General Translation 在 gt.config.json 中使用 BCP 47 代码来指定源区域设置和目标区域设置。视频
- 如何按区域设置格式化数字、日期和货币?在页面渲染时,使用读者的区域设置和 JavaScript 的 Intl API 格式化每个值,并将值放在待翻译的句子之外。General Translation 的 <Num>、<Currency>、<DateTime> 和 <RelativeTime> 组件可在 <T> 内同时做到这两点,因此一份翻译即可适用于任意值。视频
- 如何在 CSS 中支持 RTL(从右到左)语言?在 html 元素上同时设置 dir="rtl" 和 lang,因为仅设置 lang 并不会改变文本方向;然后将 margin-left 等物理 CSS 属性替换为 margin-inline-start 等逻辑属性。Flex 行、Grid 列和默认文本对齐会自动翻转,而 translateX()、left 和 right 不会。视频
- 什么是 ICU 消息格式?ICU 消息格式是一种语法,可在单个可翻译字符串中同时包含变量、复数形式、select 选择和序数,例如 {count, plural, one {# file} other {# files}}。每种语言只保留自身所需的 CLDR 复数类别:英语使用 one 和 other,波兰语则额外增加了 few 和 many。视频
- 如何在 React 中处理复数形式?在 React 中处理复数形式时,应为每种语言的每个复数形式各准备一个句子,并按该语言的复数规则选出对应句子——英语有 2 种形式,俄语有 4 种,阿拉伯语有 6 种。gt-react 和 gt-next 提供的 General Translation <Plural> 组件只需接收你的源语言形式,General Translation 便会生成每种目标语言所需的形式。视频
翻译
机器翻译与 AI 翻译、翻译质量、上下文和词汇表。
- 面向开发者的最佳 AI 翻译工具:翻译 API 与本地化平台对比如果你已经有自己的本地化流水线,可以直接使用翻译 API;如果你希望统一管理上下文、一致性检查、审校和持续交付,请选择 General Translation。DeepL、Google Cloud Translation、OpenAI 和 Claude 可以作为生产环境流水线的翻译引擎;而 General Translation 则直接为你的应用、文档和网站提供一整套流水线。视频
- 如何翻译 YAML 区域设置文件?只翻译字符串值,键、占位符(如 %{name} 或 {{name}})和锚点均保持不变。包含冒号或以 % 或 { 开头的值需加引号;为每个文件设置区域设置根键或文件名,并补充目标语言所需的复数键。General Translation 的 CLI 会原地翻译 YAML 值,不会改动键。视频
- 如何翻译 PO 和 POT 文件?填写每一个 msgstr(包括 Plural-Forms 头部字段要求的每种复数形式),并保持 msgid、msgctxt 和占位符不变。运行 msgfmt --check 可检查头部信息、复数形式数量,以及带有 format 标志的条目中的占位符;此外还需单独检查是否有空的 msgstr。General Translation 的 CLI 会根据你的 POT 模板,为每种语言生成一个翻译好的 PO 文件。视频
- 如何翻译 Lottie 动画?翻译动画文本图层中的字符串(存储在 Lottie JSON 的 t.d.k[].s.t 中),然后检查每条译文能否放进对应的文本框、字体是否支持新的文字体系,以及是否有文本被导出成了形状。你可以按语言分别重新导出、在运行时替换文本,或用脚本修改 JSON;General Translation 的 CLI 可以翻译 dotLottie 1.0 .lottie 文件,并重新调整布局。视频
- 如何在 AI 翻译中保持术语一致?维护一份统一的词汇表来收录已批准的术语(包括无需翻译的名称),在每次翻译请求中都应用它,避免变量和代码被翻译,并对结果进行审校。General Translation 通过上下文组实现这一点:上下文组中的词汇表和自定义提示词会应用于其分配到的每个项目;对于始终不翻译的值,则可使用 Var 组件。视频
- 如何在 .NET 应用中翻译 .resx 文件?为每个中性的 .resx 文件创建一个以区域性命名的副本(例如 Resources.fr.resx),只翻译每个条目的值,名称、注释以及 {0} 等占位符均保持不变。.NET 会将每个区域性构建为一个附属程序集,并按 fr-CA → fr → 中性文件的顺序回退。General Translation 的 CLI 可根据中性的源文件生成这些区域性文件。视频
- 什么是翻译记忆库?有了 AI 还需要它吗?翻译记忆库(TM)是一个存储既往源文与译文片段对的数据库,翻译工具会在其中查找完全匹配、上下文匹配和模糊匹配。即便使用 AI,你仍然需要复用已批准的措辞,并将过往译文作为上下文。General Translation 会复用早期文件版本中匹配的译文并保留团队所做的修改,无需另外维护一套 TM。视频
- DeepL 替代方案:General Translation 与 DeepL 对比DeepL 是一款机器翻译 API,你发送的每段文本或每份文档,它都会返回对应的译文。General Translation 则是一个本地化平台,它补足了 API 留给你自行处理的部分:来自代码和团队的上下文、在所有用户交互界面中保持一致的术语、在仪表板中进行审校,以及随每次发布持续翻译。视频
- 如何翻译 Google Slides?为每种语言复制一份演示文稿,替换每个文本框、表格单元格和演讲者备注中的文本,并缩放溢出的文本。General Translation 的 Google Drive 集成会把每种语言分别写入源文件旁的独立副本,并执行一轮格式化处理,让新文本适配每张幻灯片。视频
- 如何审校和编辑译文?借助 General Translation,审校人员可以在仪表板中对比和编辑译文,并通过标签和评论跟踪审校进度。已保存的修改可以使用 CLI 下载,也可以在 Locadex 下一次运行翻译时纳入拉取请求。开发者还可以使用 gt save-local 将审校后的文件修改发送回平台。视频
- 如何翻译 i18n JSON 文件?只翻译 JSON 区域设置文件中的字符串值。非复数键、{{name}} 之类的占位符以及标签都应保持不变,但复数键会因语言而异:例如波兰语需要 inbox_few 和 inbox_many。请使用能识别文件格式的工具或 API,然后先解析并验证输出,再进行审校。视频
- 如何在不破坏语法的前提下翻译 Markdown 和 MDX?翻译面向读者的文本,同时保留可执行代码、导入语句、JSX 组件名称和机器内部标识符。General Translation 可直接处理 Markdown 和 MDX,包括用于显示文本的属性和 frontmatter 标题,并在文档更新时复用匹配的译文。发布前,请审校本地化后的文件并运行站点构建。视频
- 如何在不破坏时间轴的情况下翻译 SRT 字幕?只翻译 SRT 文件中的字幕文本;字幕序号、时间码、空行分隔符和格式标签均与源文件保持一致。然后根据目标平台的要求检查每行长度和阅读速度:例如,Netflix 的英语字幕指南规定,成人节目每行最多 42 个字符,每秒最多 20 个字符。视频
- AI 翻译的准确度足以用于生产环境应用吗?对于使用广泛的语言,通常可以,但前提是它要先通过针对你自己的语言、UI 字符串和高风险内容的评估。在 WMT25 中,Gemini 2.5 Pro 在 16 个语言对中有 10 个达到或超过了人工参考译文的水平,但文档级基准测试无法说明简短的界面字符串是否已经可以上线。视频
- Google Translate 替代方案:General Translation 与 Google Translate 对比Google Translate 适合快速翻译一次性文本,但要以另一种语言发布产品,还需要结合上下文翻译每个字符串、保持术语一致、正确处理变量和复数形式、进行审校,并建立发布流程。General Translation 能理解代码中每个字符串的上下文,将从代码、审校到每一次发布的整个本地化工作流全面自动化。视频
多语言 SEO
多语言网站的区域设置路由、hreflang、站点地图和已翻译的元数据。
- 如何翻译 SEO 标题和meta 描述?用各语言版本对应的语言撰写标题和meta 描述,并采用该市场用户实际搜索的词语——这些词往往与字面翻译不同。然后本地化与之相关的标签,包括 Open Graph、规范网址、hreflang、html lang 和结构化数据。General Translation 的 gt-next 可在 generateMetadata 中通过 getGT 翻译标题和描述。视频
- 如何为多语言网站创建站点地图?将每个页面的每个语言版本都列为独立的 url 条目。如果由站点地图承载 hreflang,则为每个条目添加指向所有版本(包括其自身)的 xhtml:link 替代项,并可选择添加 x-default;文件超过 50,000 个 URL 或 50MB 时需拆分。General Translation 的 gt-next 会为每个区域设置生成独立的 URL,供站点地图列出。视频
- 语言重定向与 SEO:URL、cookie 还是 Accept-Language?凡是希望被搜索引擎收录的页面,都应由 URL 决定其语言,因为 Googlebot 不会发送 Accept-Language 请求头,而且大多从美国 IP 地址抓取。只有在决定 / 这类中性根路径重定向到哪里时,才应优先参考 cookie 中保存的用户选择,其次是 Accept-Language,并使用临时的 302 或 307 重定向。视频
- 多语言 SEO:子目录、子域名与 ccTLD 对比如果同一产品共用一个站点和发布流程,请使用 example.com/de/ 这样的子目录。只有 ccTLD 能指明目标国家,子域名便于独立托管;Google 不建议使用 ?lang= 参数,并会将 .io、.ai 等个性化域名视为通用域名。视频
- 什么是 hreflang?如何设置?Hreflang 用于告诉 Google 哪些 URL 是同一页面的不同语言或区域版本,以便在搜索结果中展示正确的版本。你可以通过 HTML link 标签、HTTP Link 响应头或站点地图来添加它,确保所有链接相互指向,并使用有效的代码,例如 en-GB,而不是 en-UK。视频
- 如何为多语言 Next.js 应用设置 SEO?为每种语言提供带前缀的独立 URL,例如 /en/about 和 /es/about,然后为每种已发布的语言提供 html lang、自引用的规范网址、包含 x-default 的 hreflang 替代项、翻译后的 title 和 description,以及站点地图条目。将未发布的版本标记为 noindex。General Translation 的 gt-next 会将每种语言路由到各自的 URL,并通过 getGT 翻译标题。视频
工作流工具
选择本地化工具,并通过持续本地化保持译文同步。
- 哪些翻译工具按用量而非席位收费?如果你希望翻译支出与实际请求的工作量挂钩,请选择 General Translation:用户数量不限,Starter 方案平台费为 $0。Crowdin 和 Lokalise 的付费方案不限翻译角色数量,但会对部分其他角色收费;Hosted Weblate 不限译者数量,但按托管字符串容量收费。
- 如何在 Payload CMS 中翻译内容?在 Payload 配置中添加 localization,并为每个字段设置 localized true;此后 Payload 会为每个区域设置存储一个值,但不会自动填充。General Translation 的 gt-payload 插件会添加一个“翻译”按钮,用于写入每个目标区域设置:启用草稿时以草稿形式写入,否则直接写入。它从不发布内容。视频
- Weglot 替代方案:General Translation 与 Weglot 对比Weglot 是一项网站翻译服务,通过插件、代码片段或代理翻译已渲染的页面;Weglot 2.0 新增了基于 GitHub 的 JSON 翻译工作流。General Translation 是一个本地化平台,集源代码国际化、文件翻译、共享上下文、仪表板审校和区域设置路由于一体。视频
- General Translation 与 Lingo.dev:该选哪一个?Lingo.dev 以可配置的翻译引擎为核心,并提供 CLI、React 和 GitHub 工具来调用这些引擎。General Translation 是一个本地化平台,提供库、代码上下文、共享术语、所有方案均可用的仪表板审校,以及还能为代码完成国际化改造的 Locadex。如果你需要按语言对控制模型,请选择 Lingo.dev。视频
- 如何翻译 Mintlify 文档站点?为每种语言创建一个文件夹,在其中存放每个页面的译文副本,并将每种语言添加到 docs.json 导航中。General Translation 的 AI 智能体 Locadex 会提交一个拉取请求,添加翻译后的页面和各语言的导航,之后还会持续翻译后续变更。视频
- 如何在每次部署时保持译文同步更新?在每次生产环境构建之前,将翻译作为流水线中的一个步骤运行,这样新增文案就会在引入它的那次部署中以翻译好的形式一同上线。General Translation 的 gt CLI 通过 npx gt translate 实现这一点,所需的项目 API 密钥和项目 ID 以 CI 密钥的形式存储。视频
- 如何在 Storyblok 中翻译内容?在 Storyblok 中,先将目标语言添加到空间,再为每个可翻译字段按语言分别设置值。General Translation 的 Storyblok 集成可在仪表板中通过“同步并应用”填充这些值,并生成草稿,供你在 Storyblok 中审阅并发布。视频
- 如何在 Sanity 中翻译内容?将每种语言存储为独立文档,或在每个字段中按区域设置分别存储值,然后将源内容翻译为每个目标区域设置。General Translation 的 gt-sanity 插件会在 Sanity Studio 中添加 Translate 操作,并默认将每条译文导入为草稿,供你审校后发布。视频
- Locadex 智能体能做什么?Locadex 是 General Translation 推出的 AI 智能体,可在你的 GitHub 代码仓库中对代码进行国际化处理并翻译内容。它的自动化流程会在创建拉取请求、推送提交或你手动启动时运行,所有更改都以拉取请求的形式交付。视频
- 什么是翻译管理系统(TMS)?翻译管理系统(TMS)是一种用于存储源内容及其译文、并运行翻译工作流的软件,涵盖翻译记忆库、词汇表、审校、机器翻译和集成等功能。其翻译记忆库通过精确匹配或模糊匹配复用以往的译文。常见的 TMS 有 Crowdin、Lokalise、Phrase、Smartling 和 Transifex。视频
- Transifex 替代方案:General Translation 与 Transifex 对比如果你希望翻译带标记的 JSX 时保留其结构和开发者上下文,并将译文打包进应用包或通过 CDN 分发,请选择 General Translation。Transifex Native 同样将字符串保留在代码中,但通过自家的内容分发服务发布。如果团队需要使用 Transifex 的翻译合作伙伴、质量评分或基于代码片段的网站翻译,Transifex 是很好的选择。视频
- Smartling 替代方案:General Translation 与 Smartling 对比如果你希望在发布流程中直接从代码生成应用译文,请选择 General Translation。Smartling 集翻译管理系统、AI 与人工翻译服务以及网站翻译代理于一体。General Translation 让文案保留在组件中,将其上下文一并带入翻译,并为团队提供用于审校的仪表板。视频
- React 应用最适合使用哪个国际化库?主流的 React 国际化库有四个:General Translation 的 gt-react、react-i18next、Lingui 和 React Intl。四者都能渲染和格式化译文,但只有 gt-react 还能根据你在 JSX 中内联编写的文案直接生成译文。如果想继续沿用 i18next 的消息目录和插件,请选择 react-i18next;如果需要将文案提取为编译后的消息目录,请选择 Lingui;如果需要 FormatJS 和 ICU MessageFormat,请选择 React Intl。视频
- Phrase 替代方案:General Translation 与 Phrase 对比如果你的应用和文档一起发布,General Translation 是 Phrase Strings 的有力替代方案。它基于代码和内容文件生成译文,统一应用共享术语,并直接在你的发布工作流中运行。Phrase 则将软件本地化与以文档为中心的 TMS、供应商管理以及丰富的翻译引擎选择融为一体。视频
- next-intl 替代方案:gt-next 与 next-intl 对比next-intl 负责渲染你在各语言消息目录中提供的译文。gt-next 同样会渲染译文,此外,General Translation 还能根据你在 JSX 中内联编写的文案生成译文。两者均采用 MIT 许可证,并支持 App Router 和服务端组件。如果你现有的 next-intl 目录运行良好,可以继续保留,并直接用 General Translation 翻译,无需迁移。视频
- Lokalise 替代方案:General Translation 与 Lokalise 对比对于希望在 JSX 中直接编写可读文案、并将翻译融入开发流程的团队来说,General Translation 是 Lokalise 的有力替代方案。Lokalise 的核心是共享键、设计工具集成和移动端 OTA(空中下载)投递。General Translation 根据应用中已标记的内容生成译文,并支持在其仪表板或 GitHub 拉取请求中进行审阅。视频
- General Translation 与 Weblate:该选哪一个?Weblate 是一个可自托管、基于 Git 的本地化平台,专为社区或团队协作翻译代码仓库文件而设计。General Translation 则将译文生成融入开发与发布流程,依托已标记的 JSX 和共享的产品上下文完成翻译。你可以继续沿用现有的 gettext 文件,也可以改用内联编写,连源文案目录的维护工作也一并省去。视频
- General Translation 与 Tolgee:该如何选择?Tolgee 是一个可自托管的平台,集基于键的消息、上下文内编辑和 AI 翻译于一体。General Translation 则将可读的文案直接保留在组件中,并根据标记的 JSX 生成译文,无需维护消息键,即可用所有语言发布新文案。视频
- General Translation 与 TMS(Crowdin、Lokalise、Phrase)对比如果开发者希望译文生成、源自代码的上下文以及审校流程都与产品发布紧密衔接,请选择 General Translation。你可以保留现有的消息目录和渲染库,也可以直接编写内联 JSX,无需翻译键。TMS 适合以语言供应商、CAT 编辑器和 XLIFF 交换为核心的翻译项目,其集成可以自动完成文件传输。视频
- General Translation 与 Locize 对比:该选哪个?Locize 是由 i18next 创建者打造的翻译管理系统,通过 CDN 分发译文,从运行中的应用收集新键,并提供 AI 翻译和上下文内编辑器。但国际化库及其键仍需你自己维护。General Translation 既可以充当你的国际化库并负责翻译,也可以翻译你现有的 i18next 文件。视频
- General Translation 与 i18n-tasks:应该选择哪一个?i18n-tasks 是一个 Ruby gem,用于查找缺失和未使用的 Rails I18n 键、整理区域设置文件,还能借助 Google Translate、DeepL、OpenAI、Yandex 或 watsonx 补全缺失的键。General Translation 则结合你的词汇表、自定义提示词和仪表板审校,翻译完整的区域设置文件。两者分工不同,许多团队完全可以搭配使用。视频
- Crowdin 替代方案:General Translation 与 Crowdin 对比如果你希望将文案保留在组件中,并随构建生成译文,请选择 General Translation。Crowdin 围绕资源文件、译者和审校工作流程来管理翻译项目,需要工程师将其接入应用,并随产品迭代持续维护。对于开源社区翻译和由供应商主导的翻译项目,Crowdin 依然是很好的选择。视频
- 面向开发者的最佳本地化软件是什么?面向开发者的最佳本地化软件会直接在代码中编写内容的位置进行翻译,结合产品上下文,并让每种语言始终保持最新。General Translation 通过开源库、上下文组以及 Locadex(一个会提交拉取请求的 AI 智能体)做到了这一点。视频