【问题标题】:(Jekyll?) automatic i18n (with Apache’s mod_negotiation)?(Jekyll?)自动 i18n(使用 Apache 的 mod_negotiation)?
【发布时间】:2013-06-04 13:03:15
【问题描述】:

我能说流利的法语和英语。我希望我的网站以任何一种语言显示,具体取决于访问者的语言设置。作为记录,此信息由访问者的浏览器提供,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 在我的网站上实现自动国际化?我很难想象自己会手动编写所有网站。

【问题讨论】:

    标签: apache internationalization virtualhost jekyll mod-negotiation


    【解决方案1】:

    Jekyll 本身不支持 i18n。

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      相关资源
      最近更新 更多