lang.Translate
语法
lang.Translate KEY [CONTEXT]
返回值
string
别名
T
i18n
lang.Translate
函数返回当前语言的翻译表中定义的给定键的值。
如果在当前语言的翻译表中找不到该键,则 lang.Translate
函数会回退到defaultContentLanguage
的翻译表。
如果在 defaultContentLanguage
的翻译表中找不到该键,则 lang.Translate
函数返回一个空字符串。
翻译表
在 i18n
目录中创建翻译表,根据RFC 5646命名每个文件。翻译表可以是 JSON、TOML 或 YAML。例如
i18n/en.toml
i18n/en-US.toml
基本名称必须与站点配置中定义的语言键匹配。
还支持RFC 5646 § 2.2.7中定义的带有私用子标签的人工语言。为了简洁起见,您可以省略 art-x-
前缀。例如
i18n/art-x-hugolang.toml
i18n/hugolang.toml
私用子标签不得超过 8 个字母数字字符。
简单翻译
假设您的多语言站点支持两种语言,英语和波兰语。在 i18n
目录中为每种语言创建一个翻译表。
i18n/
├── en.toml
└── pl.toml
英语翻译表
i18n/en.
privacy: privacy
security: security
privacy = 'privacy'
security = 'security'
{
"privacy": "privacy",
"security": "security"
}
波兰语翻译表
i18n/pl.
privacy: prywatność
security: bezpieczeństwo
privacy = 'prywatność'
security = 'bezpieczeństwo'
{
"privacy": "prywatność",
"security": "bezpieczeństwo"
}
当查看英语站点时
{{ T "privacy" }} → privacy
{{ T "security" }} → security
当查看波兰语站点时
{{ T "privacy" }} → prywatność
{{ T "security" }} → bezpieczeństwo
带复数的翻译
假设您的多语言站点支持两种语言,英语和波兰语。在 i18n
目录中为每种语言创建一个翻译表。
i18n/
├── en.toml
└── pl.toml
Unicode CLDR 复数规则图表描述了每种语言的复数类别。
英语翻译表
i18n/en.
day:
one: day
other: days
day_with_count:
one: '{{ . }} day'
other: '{{ . }} days'
[day]
one = 'day'
other = 'days'
[day_with_count]
one = '{{ . }} day'
other = '{{ . }} days'
{
"day": {
"one": "day",
"other": "days"
},
"day_with_count": {
"one": "{{ . }} day",
"other": "{{ . }} days"
}
}
波兰语翻译表
i18n/pl.
day:
few: miesiące
many: miesięcy
one: miesiąc
other: miesiąca
day_with_count:
few: '{{ . }} miesiące'
many: '{{ . }} miesięcy'
one: '{{ . }} miesiąc'
other: '{{ . }} miesiąca'
[day]
few = 'miesiące'
many = 'miesięcy'
one = 'miesiąc'
other = 'miesiąca'
[day_with_count]
few = '{{ . }} miesiące'
many = '{{ . }} miesięcy'
one = '{{ . }} miesiąc'
other = '{{ . }} miesiąca'
{
"day": {
"few": "miesiące",
"many": "miesięcy",
"one": "miesiąc",
"other": "miesiąca"
},
"day_with_count": {
"few": "{{ . }} miesiące",
"many": "{{ . }} miesięcy",
"one": "{{ . }} miesiąc",
"other": "{{ . }} miesiąca"
}
}
当查看英语站点时
{{ T "day" 0 }} → days
{{ T "day" 1 }} → day
{{ T "day" 2 }} → days
{{ T "day" 5 }} → days
{{ T "day_with_count" 0 }} → 0 days
{{ T "day_with_count" 1 }} → 1 day
{{ T "day_with_count" 2 }} → 2 days
{{ T "day_with_count" 5 }} → 5 days
当查看波兰语站点时
{{ T "day" 0 }} → miesięcy
{{ T "day" 1 }} → miesiąc
{{ T "day" 2 }} → miesiące
{{ T "day" 5 }} → miesięcy
{{ T "day_with_count" 0 }} → 0 miesięcy
{{ T "day_with_count" 1 }} → 1 miesiąc
{{ T "day_with_count" 2 }} → 2 miesiące
{{ T "day_with_count" 5 }} → 5 miesięcy
在上面的复数示例中,我们在上下文中传递了一个整数(第二个参数)。您还可以在上下文中传递一个 map,提供一个 count
键来控制复数。
翻译表
i18n/en.
age:
one: '{{ .name }} is {{ .count }} year old.'
other: '{{ .name }} is {{ .count }} years old.'
[age]
one = '{{ .name }} is {{ .count }} year old.'
other = '{{ .name }} is {{ .count }} years old.'
{
"age": {
"one": "{{ .name }} is {{ .count }} year old.",
"other": "{{ .name }} is {{ .count }} years old."
}
}
模板代码
{{ T "age" (dict "name" "Will" "count" 1) }} → Will is 1 year old.
{{ T "age" (dict "name" "John" "count" 3) }} → John is 3 years old.
保留键
Hugo 使用 go-i18n 包来查找翻译表中的值。此包为内部使用保留了以下键
- id
- (
string
) 唯一标识消息。 - description
- (
string
) 描述消息,以便为可能与翻译相关的翻译人员提供额外的上下文。 - hash
- (
string
) 唯一标识此消息翻译自的消息内容。 - leftdelim
- (
string
) 左 Go 模板分隔符。 - rightdelim
- (
string
) 右 Go 模板分隔符。 - zero
- (
string
) CLDR 复数形式“zero”的消息内容。 - one
- (
string
) CLDR 复数形式“one”的消息内容。 - two
- (
string
) CLDR 复数形式“two”的消息内容。 - few
- (
string
) CLDR 复数形式“few”的消息内容。 - many
- (
string
) CLDR 复数形式“many”的消息内容。 - other
- (
string
) CLDR 复数形式“other”的消息内容。
如果您需要为其中一个保留键提供翻译,可以在单词前面加上下划线。例如
i18n/es.
_description: descripción
_few: pocos
_many: muchos
_one: uno
_other: otro
_two: dos
_zero: cero
_description = 'descripción'
_few = 'pocos'
_many = 'muchos'
_one = 'uno'
_other = 'otro'
_two = 'dos'
_zero = 'cero'
{
"_description": "descripción",
"_few": "pocos",
"_many": "muchos",
"_one": "uno",
"_other": "otro",
"_two": "dos",
"_zero": "cero"
}
然后在您的模板中
{{ T "_description" }} → descripción
{{ T "_few" }} → pocos
{{ T "_many" }} → muchos
{{ T "_one" }} → uno
{{ T "_two" }} → dos
{{ T "_zero" }} → cero
{{ T "_other" }} → otro