hugo/docs/content/en/functions/lang/Translate.md
2023-12-04 15:24:01 +01:00

2.7 KiB

title description categories keywords action aliases
lang.Translate Translates a string using the translation tables in the i18n directory.
aliases related returnType signatures
T
i18n
string
lang.Translate KEY [CONTEXT]
/functions/i18n

Let's say your multilingual site supports two languages, English and Polish. Create a translation table for each language in the i18n directory.

i18n/
├── en.toml
└── pl.toml

The translation tables can contain both:

  • Simple translations
  • Translations with pluralization

The Unicode CLDR Plural Rules chart describes the pluralization categories for each language.

The English translation table:

{{< code-toggle file=i18n/en >}} privacy = 'privacy' security = 'security'

[day] one = 'day' other = 'days'

[day_with_count] one = '{{ . }} day' other = '{{ . }} days' {{< /code-toggle >}}

The Polish translation table:

{{< code-toggle file=i18n/pl >}} privacy = 'prywatność' security = 'bezpieczeństwo'

[day] one = 'miesiąc' few = 'miesiące' many = 'miesięcy' other = 'miesiąca'

[day_with_count] one = '{{ . }} miesiąc' few = '{{ . }} miesiące' many = '{{ . }} miesięcy' other = '{{ . }} miesiąca' {{< /code-toggle >}}

{{% note %}} The examples below use the T alias for brevity. {{% /note %}}

When viewing the English language site:

{{ T "privacy" }} → privacy
{{ T "security" }} → security

{{ 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

When viewing the Polish language site:

{{ T "privacy" }} → prywatność
{{ T "security" }} → bezpieczeństwo

{{ 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

In the pluralization examples above, we passed an integer in context (the second argument). You can also pass a map in context, providing a count key to control pluralization.

Translation table:

{{< code-toggle file=i18n/en >}} [age] one = '{{ .name }} is {{ .count }} year old.' other = '{{ .name }} is {{ .count }} years old.' {{< /code-toggle >}}

Template code:

{{ T "age" (dict "name" "Will" "count" 1) }} → Will is 1 year old.
{{ T "age" (dict "name" "John" "count" 3) }} → John is 3 years old.