3

私はフランス語と英語で流暢に話します。訪問者の言語設定に応じて、Web サイトをいずれかの言語で表示したいと考えています。記録として、この情報は訪問者のブラウザであるAccept-LanguageHTTP ヘッダーによって提供されます。

私の知る限り、それを達成するための最良の (そして唯一の?) 方法は、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 を使用して Web サイトに自動国際化を実装するにはどうすればよいかということです。自分のウェブサイトをすべて手書きで書いている自分を想像することはほとんどできません。

4

1 に答える 1

0

Jekyll 自体は i18n をサポートしていません。

おそらく、インクルードとレイアウトを自分で翻訳する必要があります。インクルードに適切な名前を付けることをお勧めします。たとえば、footer_en.html などです。レイアウトと同じ - それらを page_en.html、post.en.html などと呼びます。YAMl フロント マターで、どのレイアウトを使用する必要があるかを指定します。

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

lang 属性をカスタム YAML Front matter として設定すると、タグ クラウドやカテゴリ内の特定の投稿のリストがある場合など、投稿リストで目的の言語の投稿のみをレンダリングすることもできます。

ただし、これによりページネーションが壊れる可能性が高くなります。ページネーターのページあたりの要素を2倍にしてから、forループで間違った言語を持つ要素を手動で破棄することで、これを回避できます。

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

すべての投稿を翻訳しないと、ページネーションに問題が発生することがよくあります (他の言語で投稿が欠落している場合、1 ページあたりの投稿数が予想以上になる可能性があります)。

プラグインの使用を恐れていない場合は、より良い代替手段があるかもしれません.

于 2013-06-04T13:51:32.250 に答える