Topics

Astro SSG 网站使用 Google Translate API 实现多语言化

  • column

有一天,总裁给我下达了命令:“让我们把网站做成多语言的。显然,谷歌云翻译API可以在构建过程中自动翻译!”

我们的网站是一个使用 Astro 构建的静态网站 (SSG)。我在研究 Google Cloud Translation API 时,决定尝试将其集成到我们的网站上。

准备工作:启用 API 密钥并创建服务帐户

启用云翻译 API

Google Cloud Console“API 和服务” > “云翻译 API”使能够

创建服务帐户和密钥

要使用 API,请创建服务帐户并下载 JSON 密钥。

此 JSON 密钥包含您的私钥,绝对不能公开。

授予服务帐户访问权限。

转到 IAM,将服务帐户的电子邮件地址添加为主体,并将角色添加为“云翻译 API 用户”。

如何生成多语言页面

我尝试的第一种方法是“复制 Astro 文件,立即调用翻译 API,并自动生成多语言 Astro 文件”。

虽然页面已经生成,但我们遇到了几个问题,例如代码围栏损坏、与导入的组件不兼容以及在属性中编写标签时出现问题,因此我们改变了方法。

最终,我选择了一个简单的构建后处理流程,该流程对构建后生成的静态 HTML 执行翻译。

语言设置与 Astro 的 i18n 配置文件相关联。

为了管理网站的多语言结构,我使用了原始的 Astro i18n 配置文件(LOCALES_SETTING)被用作翻译脚本的“配置文件”。

要添加语言,只需在此处添加即可。

export const LOCALES_SETTING: LocaleSetting = {
  ja: {
    label: '日本語',
    lang: 'ja',
    oglocale: 'ja_JP',
    path: 'ja',
  },
  en: {
    label: 'English',
    lang: 'en',
    oglocale: 'en_US',
    path: 'en',
  },
  de: {
    label: 'Deutsch',
    lang: 'de',
    oglocale: 'de_DE',
    path: 'de',
  },
  es: {
    label: 'Español',
    lang: 'es',
    oglocale: 'es_ES',
    path: 'es',
  },
  cn: {
    label: '简体中文',
    lang: 'zh-CN',
    oglocale: 'zh_CN',
    path: 'zh-cn',
  },
  tw: {
    label: '繁體中文',
    lang: 'zh-TW',
    oglocale: 'zh_TW',
    path: 'zh-tw',
  },
};

语言切换实现

语言选择下拉菜单也是根据 i18n 配置文件生成的。标签将是所选项目的名称,因此我们不希望翻译它。所以,我们添加了一个流程,用标签值覆盖它。(translate="no" 与云翻译 API 不兼容。)

顺便说一下,有人建议我“在下拉菜单里添加国旗”,我也尝试这么做了,但似乎用国旗来切换语言是一种反模式。例如,如果一个讲德语的用户同时也是奥地利用户,他们可能会对德国国旗感到困惑,所以国家和语言并不一定匹配。你这么一说,确实如此。在某些情况下,这可能是一个敏感问题。

缓存以减少 API 使用量。

至此,多语言文本生成机制已基本完成。然而,问题在于成本。

通过反复试验和不断构建,API 使用费很快就超过了 10,000 日元。

因此,在构建时,API 处理的日语和翻译的组合会被缓存。translate-cache.json数据将保存到一个文件中,下次构建将使用此 JSON 文件。规范已更改,现在仅通过 API 调用缺失的数据,并将结果追加到 JSON 文件中。

它将以这种方式保存。

{
  "en:UIデザイン": "UI Design",
  "en:私たちについて": "About Us",
  "en:サービス": "Service",
  ...
}

这大大降低了成本!根据更新频率,运行成本每月只需几百日元。

操作说明

当使用内容管理系统 (CMS) 添加文章并通过部署钩子进行构建时,服务器只能访问 Git 上的旧缓存文件。因此,我们决定严格执行一条规则:每次添加内容时都先在本地构建,然后将更新后的缓存文件推送到 Git。

控制错误翻译

正如机器翻译的常态,偶尔会出现一些奇怪的翻译。
专有名词的拼写存在明显的差异,例如公司名称“Liberogic”有时被写成“Liberlogic”,有时被写成“Liberogic”,公司实体(有限公司、有限公司等)的拼写也不一致。

云翻译 API 具有词汇表功能,但它仅作为机器翻译的辅助工具,无法提供完整、详细的控制。除了上传 CSV 文件外,每次还需要运行命令来重新创建资源,这对于不熟悉 Web 的运维人员来说可能比较困难。

通过电子表格集成实现可靠控制

因此,我们将语言和拼写错误汇总到一个电子表格中,在构建过程中以 CSV 格式检索该电子表格,并执行文本替换过程,以便可以覆盖和更正标记。

这意味着管理员只需更新电子表格,即可在一定程度上控制翻译,而无需修改任何代码。

概括

经过多次尝试,我最终利用谷歌云翻译API创建了一个比预期更实用的自动翻译系统。我认为它足以满足简单、经济的多语言翻译需求!

(总统表示他想在RTL电视台增加阿拉伯语支持,但这将是一个大工程。)

撰稿人

他从桌面排版领域转战网页设计,迅速成为一位技艺精湛的“大师”,精通标记语言、前端设计、方向指导和无障碍设计。自 Liberlogic 创立以来,他一直活跃于各个领域,如今已成为公司内部的活字典。最近,他痴迷于探索如何利用提示来提高效率,并思考着“我们能否更多地依赖人工智能来实现无障碍设计?”他的技术和思维仍在不断发展。

Futa

IAAP认证的Web无障碍专家(WAS)/标记工程师/前端工程师/网站总监

查看这位员工的文章

我们以可靠的团队结构和快速的响应能力而自豪。

在 Liberogic,我们经验丰富的员工积极推动项目进展,这也是我们受到客户高度评价的原因。
我们确保项目经理和主管得到合理分配,以确保整个项目的顺利进行。 我们避免因全额承诺而导致不必要的成本增加,并将资源分配给合适的人员和合适的岗位,并以快速掌握工作内容、创建和提交预算而闻名。

请注意,我们不积极参与SES式的现场工作。

我们支持几乎所有主流的项目管理和聊天工具,包括 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom 和 Webex。

在使用 SES 和离岸的大型项目中您是否遇到任何技术问题或担心如何解决这些问题?

案例研究