Jekyll I18n MultiPage

Maintainability Test Coverage Build Status Gem Version

Generate multiple pages for different locales based on single template.

Installation

Add this line to your application's Gemfile:

gem 'jekyll_i18n_multi_page'

And then execute:

$ bundle

Add the plugin to _config.yml file:

plugins:
  - jekyll_i18n_multi_page

Usage

Declare available locales in Jekyll config _config.yml:

i18n:
  - path: /
    locale: en
  - path: /tw
    locale: zh-TW

For each entry must contain path(the output of localized page) and locale.

Define files with localized contents in _i18n folder, filenames aren't mattered. For examples:

# _i18n/my-en-site.yml
en:
  index:
    title: English title
    hello: Hello
# _i18n/my-tw-site.yml
zh-TW:
  index:
    title: 中文標題
    hello: 哈囉

page.i18n is the way to access the current localized contents, said you have a HTML named index.html:

---
---
{{ page.i18n.title }}
{{ page.i18n.hello }}

After building, the dist folder should have two files index.html and tw/index.html.

Assume you have a file named some/where/my.html you should have its path in the localization file:

# _i18n/my-en-site.yml
en:
  some:
    where:
      my:
        hello: Hello # access this text via page.i18n.hello

Use cases

For some reason, I have a page which is only available for certain locales

---
i18n_locales: ['zh-TW']
---
{{ page.i18n.hello }}

Using i18n_locales to declare the supported locales. In this example, Jekyll will build tw/index.html file only.

How to disable the features on certain pages

---
i18n_disabled: true
---

Using i18n_disabled to tell the plugin do not do anything for me.

Show/Hide something for certain locales

---
---
{% if page.i18n_locale == 'en' %}
You will see me only in the en page.
{% end %}

Translate helper

{% t index.hello %}

t tag provides a way to translate content. When you take this way, you must write a full path.

i18n Filter

the filter is useful for forlooop in the case of page.i18n being unavailable. For example:

---
i18n_disabled: true
i18n_locale: zh-TW
---
{% t my.array %} <!-- the result from tags can not be reused like variable. -->
{% assign items = 'my.array' | i18n %}

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/yfxie/jekyll_i18n_multi_page.

License

The gem is available as open source under the terms of the MIT License.