(杰基尔?)自动i18n(用Apache的mod_negotiation)?

时间:2013-06-04 13:03:16

标签: apache internationalization virtualhost jekyll mod-negotiation

我用法语和英语流利地说。我希望我的网站能够以任何一种语言显示,具体取决于访问者的语言设置。为了记录,这些信息由访问者的浏览器提供,Accept-Language HTTP header

据我所知,实现这一目标的最好(也是唯一?)方法是使用Apache的mod_negotiation。考虑以下树结构:

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

访问page.html会以英语或法语显示该页面。 我想使用一个使用这种i18n方法的CMS。


我正在考虑将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 个答案:

答案 0 :(得分:0)

Jekyll本身不支持i18n。

您可能需要自己翻译包含和布局。您可能希望正确命名您的包含 - 例如footer_en.html。与您的布局相同 - 将它们称为page_en.html,post.en.html等。在YAMl前端,指定必须使用的布局:

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

如果您将lang属性设置为自定义YAML Front事项,则您甚至可以仅在帖子列表中呈现所需语言的帖子,例如如果您有一个标签云或一个类别中的特定帖子列表。

但是,这很可能会打破分页。您可以通过将分页器的每页元素加倍,然后手动丢弃for循环中具有错误语言的元素来避免这种情况:

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

如果您不翻译每篇文章,那么将会出现分页问题(如果其他语言中缺少帖子,您最终可能会有超过预期的每页帖子数量)。

如果你不害怕使用插件,甚至可能有更好的选择。