
本文档旨在为 Go 语言开发者提供一套基于 go-gettext 库的国际化 (I18n) 解决方案,适用于 Web 应用的本地化。内容涵盖环境配置、代码实现、模板生成、翻译以及部署,通过具体示例,指导开发者完成从零开始的 Go 应用国际化改造。
首先,确保你的 Go 项目已经初始化。然后,你需要克隆 go-gettext 库到你的项目中。假设你的项目目录结构如下:
~appname/ |~app/ | `-app.go |+github.com/ `-app.yaml
执行以下命令克隆 go-gettext:
$ cd appname $ git clone git://github.com/samuel/go-gettext.git github.com/samuel/go-gettext
在你的 Go 代码中使用 go-gettext 库进行国际化。 以下是一个简单的示例:
package app
import (
"fmt"
"log"
"net/http"
"github.com/samuel/go-gettext"
)
func init() {
http.HandleFunc("/", home)
}
func home(w http.ResponseWriter, r *http.Request) {
d, err := gettext.NewDomain("appname", "locale")
if err != nil {
log.Fatal("Failed at NewDomain.")
}
cat := d.GetCatalog("fr_FR")
if cat == gettext.NullCatalog {
log.Fatal("Failed at GetCatalog.")
}
fmt.Fprintf(w, cat.GetText("Yes."))
}说明:
注意: go-gettext 库不支持 _("String to be translated") 这种简写形式,因为下划线在 Go 语言中有特殊含义。你需要使用 GetText 这样的函数名来包裹需要翻译的字符串。
使用 xgettext 工具从 Go 代码中提取需要翻译的字符串。
$ xgettext -d appname -kGetText -s -o appname.pot app/app.go
参数说明:
重要: -kGetText 参数是必需的,否则 xgettext 将无法识别 GetText 函数调用,.pot 文件将为空。
创建本地化目录和 .po 文件。
$ mkdir -p locale/fr_FR/LC_MESSAGES $ msginit -l fr_FR -o french.po -i appname.pot
参数说明:
编辑 french.po 文件,添加翻译:
# Appname l10n # Copyright (C) 2023 Your Name # This file is distributed under the same license as the appname package. # Your Name <<your_email@example.com>>, 2023. # msgid "" msgstr "" "Project-Id-Version: appname v0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-27 10:00+0000\n" "PO-Revision-Date: 2023-10-27 10:10+0000\n" "Last-Translator: Your Name <<your_email@example.com>>\n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: app/app.go:15 msgid "Yes." msgstr "Oui."
将 msgid "Yes." 对应的 msgstr 修改为法语翻译 "Oui."。
使用 msgfmt 工具将 .po 文件编译成 .mo 文件。
$ msgfmt -c -v -o locale/fr_FR/LC_MESSAGES/appname.mo french.po
参数说明:
最终的目录结构应该如下所示:
~appname/ |~app/ | `-app.go |~github.com/ | `~samuel/ | `~go-gettext/ | +locale/ | |-catalog.go | |-domain.go | `-mo.go |~locale/ | `~fr_FR/ | `LC_MESSAGES/ | `-appname.mo `-app.yaml
将 appname 部署到你的环境中。访问应用时,如果一切配置正确,你应该看到 "Oui."。
注意事项:
通过以上步骤,你已经成功地使用 go-gettext 库为你的 Go 应用实现了国际化。 这只是一个简单的示例,你可以根据你的实际需求进行扩展,例如支持更多的语言、使用更复杂的翻译逻辑等。记住,国际化是一个持续的过程,需要不断地更新和维护翻译文件,以确保你的应用能够为不同语言的用户提供最佳的体验。
以上就是Go 应用国际化 (I18n) 实践指南:基于 go-gettext的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号