(Джекилл?) Автоматический i18n (с mod_negotiation Apache)?

Я свободно говорю по-французски и по-английски. Я хотел бы, чтобы мой веб-сайт отображался на любом языке, в зависимости от языковой настройки посетителя. Для записи, эта информация предоставляется браузером посетителя, Accept-Language HTTP заголовок.

Насколько я знаю, лучший (и единственный?) Способ добиться этого - использовать mod_negotiation в Apache. Учитывая следующую древовидную структуру:

.
├── page.html.en
└── page.html.fr

Посещение page.html отображает страницу на английском или французском языке. Я хотел бы использовать CMS, которая использует этот метод i18n.


Я рассматриваю возможность использования Jekyll для моего сайта. В структуре каталогов, приведенной ниже, я предполагаю, что мне нужно написать свои включения, макеты и сообщения на французском и английском языках (2013-06-04-Omelette-du-fromage.markdown.en, так далее.).

.
├── _config.yml
├── _includes
│   ├── footer.html
│   └── header.html
├── index.html
├── _layouts
│   ├── page.html
│   └── post.html
├── _posts
│   └── 2013-06-04-Omelette-du-fromage.markdown
└── _site

Итак, вопрос: как я могу реализовать автоматическую интернационализацию на своем веб-сайте с помощью CMS? Я с трудом представляю, что пишу весь свой сайт вручную.

1 ответ

Решение

Jekyll не поддерживает i18n сам по себе.

Возможно, вам придется самостоятельно перевести ваши включения и макеты. Вы, вероятно, захотите правильно назвать ваши включения - например, footer_en.html. То же самое с вашими макетами - назовите их page_en.html, post.en.html и т. Д. В контексте YAMl укажите, какой макет должен использоваться:

---
layout: post_en
lang: en
---

Если вы установите атрибут lang в качестве пользовательского раздела YAML, вы сможете отображать посты только с нужного языка в списках постов, например, когда у вас есть облако тегов или список определенных постов в категории.

Это, однако, скорее всего, сломает нумерацию страниц. Вы можете избежать этого, удвоив число элементов на странице для paginator, а затем вручную отбрасывая элементы, у которых неправильный язык в цикле for:

{% for post in paginator.posts %}
    {% if post.lang == 'en' %}
    <!--- display --->
    {% endif %}
{% endfor %}

Когда вы не переводите каждое сообщение, могут возникнуть проблемы с разбиением на страницы (в результате может быть больше ожидаемого количества сообщений на странице, если сообщения отсутствуют на другом языке).

Если вы не боитесь использовать плагины, возможно, есть даже лучшая альтернатива.

Другие вопросы по тегам