Template: header
Template: markdown

Locale-aware content

Amagaki has inbuilt support for generating localized pages, using localized URL
paths and supporting localized content. See the steps below to learn how to
generate localized pages.

Localized URL paths

To start with localization, create a page. Define its localization path
structure in front matter, and specify the locales it should be available in.

$path: /${doc.basename}/
$localization:
  path: /${doc.locale.id}/${doc.basename}/
  locales:
  - en
  - de
  - it

The above configuration will generate four pages, at the following URL paths:

  • /about/
  • /de/about/
  • /it/about/

Default locale

Within amagaki.ts, you can specify the pod's default locale. By default,
the default locale for all Amagaki projects is en. The default locale
indicates the "base" document, and it will not be included in localized paths.

Unique URL paths

Ensure that every localized path is unique. If two localized paths are
identical, Amagaki will raise an error.

Localized collections

You can localize all documents within a collection by specifying $localization
within the collection's _collection.yaml. In the below example, the $path
and $localization settings will be applied to all documents within the
/content/pages collection.

Settings can be overriden on a per-document basis.

$path: /${doc.basename}/
$localization:
  path: /${doc.locale.id}/${doc.basename}/
  locales:
  - en
  - de
  - it

Localized content

Now that you're generating localized pages, you can use the !IfLocale YAML
type to conditionally change content.

Let's say you want to change the hero copy in the de locale:

# ...
hero: !IfLocale
  default: !pod.string Hello World
  de: !pod.string Welcome to the site
# ...

In the above example, Amagaki will render "Hello World" for all locales, and
request the translation for "Welcome to the site" for locale de from
/content/locales/de.yaml.

NOTE: Avoid the common pitfall of including translated copy in YAML files.
Website translations should always be managed witin locales files. The
!IfLocale type is meant to vary source strings (or non-translated data), and
you should avoid storing translations within the documents.

Template: footer