(Джекилл?) Автоматический 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 %}
Когда вы не переводите каждое сообщение, могут возникнуть проблемы с разбиением на страницы (в результате может быть больше ожидаемого количества сообщений на странице, если сообщения отсутствуют на другом языке).
Если вы не боитесь использовать плагины, возможно, есть даже лучшая альтернатива.