Golang Go语言中 实现的网站如何实现高度自定义且自动化的国际化 i18n 多语言?

发布于 1周前 作者 wuwangju 来自 Go语言

我的方案:用 Golang 的 template 编写网页,使用 gnu gettext 实现 i18n ,定时任务更新 gnu po file 。

大致流程:在 web 服务上添加中间件,网站服务启动时加载预先生成好的各种语言的 po 翻译文件,后端可以通过用户自行设置语言或根据浏览器信息自动匹配语言,在前端网页上通过 hreflang 告知搜索引擎本地化相关的链接信息,这有助于 seo 。

实现自定义的需要自动转换语言的标记方法,通常需要包含 3 类,go 中调用的方法、html 模板方法、以及 js 代码中的标记。

在 html 模板中调用 i18n 需要语言参数,通常是需要从请求头中获取的,但无法直接将请求上下文传入到模板中,需要将语言参数使用模板变量的形式从后端传到 html 模板方法里。

编写业务代码时, 在 Golang 代码和 HTML 模板代码和以及 JS 代码中使用自定义的方法标记需要翻译成其他语言的字符串,这样就能自动将文字翻译为不同的语言。

使用 shell 脚本每天根据规则定时提取 HTML 、Go 、JS 代码中的标记字符串, 以及数据库中需要翻译的内容(历史的、新增的、更新过的),以特定格式生成文本文件,很多网站的国际化只有导航等固定内容的国际化,实际数据库中的动态内容却没有国际化,这是我想处理的重点问题。每一次生成的新文件都要和历史文件进行对比合并避免文件因重复内容过多导致太大处理困难。

使用 gnu gettext 将生成文件转换为 po 模板,然后通过 python 代码读取解析 po 模板,找出没有翻译过的内容。 然后将这些内容通过调用谷歌翻译翻译为不同国家的语言后在写回到 po 文件中,同时会翻译结果的格式做一些换行等修正处理。

完成后再将新增的 URL 更新到 sitemap ,自动提交代码,触发自动部署上线更新网站,上线成功后再将新增和更新的 URL 提交通知给百度、微软以及谷歌等搜索引擎,这有助于更新后的网页能被快速搜索到。

为了在最后一步便捷地将 URL 提交通知给百度、微软以及谷歌等搜索引擎,昨晚写了一个 golang 包 urlsubmitter用于提交链接,目前还比较粗糙,欢迎大家来完善


Golang Go语言中 实现的网站如何实现高度自定义且自动化的国际化 i18n 多语言?

更多关于Golang Go语言中 实现的网站如何实现高度自定义且自动化的国际化 i18n 多语言?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

现在都前后端分离了吧……

更多关于Golang Go语言中 实现的网站如何实现高度自定义且自动化的国际化 i18n 多语言?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我还没有分离 一个人这样更快(主要是相对更熟悉一点部署也方便)

不分离的项目倒是不常见了 233

在Golang(Go语言)中,实现高度自定义且自动化的国际化(i18n)多语言支持,可以遵循以下步骤:

  1. 使用专门的i18n库:Go语言生态中有多个i18n库,如go-i18ngo-i18next等,这些库提供了加载、解析和格式化多语言资源的功能。选择合适的库并集成到你的项目中。

  2. 定义语言文件和资源:创建不同语言的资源文件,如JSON或YAML格式,包含网站所需的所有文本。确保这些文件结构清晰,易于管理和扩展。

  3. 自动化加载和解析:在应用程序启动时,自动加载所有语言资源文件,并解析成内部数据结构。可以使用配置文件指定资源文件的位置和格式。

  4. 实现语言检测和切换:根据用户请求中的语言参数(如URL参数、HTTP头中的Accept-Language等),自动选择并应用相应的语言资源。同时,提供用户手动切换语言的界面。

  5. 模板引擎集成:如果你的网站使用模板引擎(如Go的html/template),确保模板引擎能够识别并渲染多语言文本。这通常通过模板函数或自定义标签实现。

  6. 持续集成和测试:将多语言资源文件的更新和测试纳入CI/CD流程,确保每次更新都能自动测试所有语言版本,保持一致性。

通过遵循这些步骤,你可以在Go语言中实现一个高度自定义且自动化的国际化多语言网站。

回到顶部