Content localization

In addition to controlling site-wide localization in podspec.yaml, you can create and manage fully localized content at the collection-level or the document-level.

Front matter localization

You can localize front matter data on a per-locale basis. If you've localized some fields, but not all fields that are specified in the blueprint or default locale, the localized fields will fall back to default locale's fields, cascading from a localized version down to the default version.

title@: Title
title@fr: Title in FR
body@: Body
body@fr: Body for FR
caption@: Caption
# Default
{{doc.title}} -> Title
{{doc.body}} -> Body
{{doc.caption}} -> Caption

# FR
{{doc.title}} -> Title in FR
{{doc.body}} -> Body for FR
{{doc.caption}} -> Caption

File based localization

Similar to the idea of using the @locale localization in the front matter, file names can also be used to manage the localization.

The file naming should follow the CLDR codes for locales (case sensitive to support all file systems). For example, files should be named page@en_GB.yaml instead of page@en_gb.yaml.

# Content /content/pages/presentation.yaml
title@: Title
body@: Body
caption@: Caption
# Content /content/pages/[email protected]
title: Title in FR
body: Body for FR
# Default
{{doc.title}} -> Title
{{doc.body}} -> Body
{{doc.caption}} -> Caption

# FR
{{doc.title}} -> Title in FR
{{doc.body}} -> Body for FR
{{doc.caption}} -> Caption

Locale class

Grow's Locale objects subclass the Babel project's Locale class, providing access to some useful data. Grow validates locales and only accepts locales from the Common Locale Data Repository (CLDR), which uses ICU.

A full list of compatible locales can be found here.

# Page /de/hello/
{{doc.locale.get_language_name('en')}}       # German.
{{doc.locale.get_language_name('de')}}       # Deutsch.