V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ashin
V2EX  ›  Go 编程语言

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

  •  
  •   ashin ·
    axiaoxin · 155 天前 · 1750 次点击
    这是一个创建于 155 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的方案:用 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用于提交链接,目前还比较粗糙,欢迎大家来完善

    3 条回复    2024-08-01 20:17:39 +08:00
    tairan2006
        1
    tairan2006  
       155 天前
    现在都前后端分离了吧……
    ashin
        2
    ashin  
    OP
       155 天前
    @tairan2006 我还没有分离 一个人这样更快(主要是相对更熟悉一点部署也方便)
    securityCoding
        3
    securityCoding  
       146 天前
    不分离的项目倒是不常见了 233
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:46 · PVG 00:46 · LAX 08:46 · JFK 11:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.