Localization

Note Just as explained in the product overview, DatoCMS is totally agnostic in terms of static site generators: it just allows you to dump content locally, and the rest is up to you. There are several ways to handle multiple languages with Jekyll — just as an example, take a look at this guide, or this plugin.

Within your dato.config.rb file, you can easily switch between your locales like this:

# dato.config.rb

I18n.locale = :en
dato.blog_posts.first.title   # => "Hello world!"

I18n.locale = :it
dato.blog_posts.first.title   # => "Ciao mondo!"

If you need to temporarily switch locale, and then restore the previous value, you can use I18n.with_locale:

# dato.config.rb

I18n.locale = :en
dato.blog_posts.first.title     # => "Hello world!"

I18n.with_locale('it') do
  I18n.locale                   # => :it
  dato.blog_posts.first.title   # => "Ciao mondo!"
end

I18n.locale                     # => :en
dato.blog_posts.first.title     # => "Hello world!"

You can also obtain the list of languages of your administrative area with I18n.available_locales:

# dato.config.rb

I18n.available_locales  # => [ :en, :it ]

Here's an complete example that creates multiple versions of your articles, one for each available locale:

# dato.config.rb

# inside the "_posts" directory
directory "_posts" do

  # iterate over all the administrative area languages
  I18n.available_locales.each do |locale|

    # switch to the nth locale
    I18n.with_locale(locale) do

    # iterate over the "Blog post" records...
      dato.blog_posts.each do |article|

        # ...and create a localized markdown file for each article!
        create_post "#{locale}-#{article.slug}.md" do
          frontmatter(
            :yaml,
            title: article.title,
            language: locale,
          )

          content(article.content)
        end
      end
    end
  end
end