使用鹈鹕i18n子网插件与静态主页

时间:2016-01-02 21:31:22

标签: python internationalization jinja2 pelican

我有一个静态主页,但我也使用了i18n子网站插件。所以对于我的主页,在pelicanconf.py:

INDEX_SAVE_AS = 'blog/index.html'
INDEX_URL = 'blog'

和英文版:

I18N_SUBSITES = {
    'en': {
        'OUTPUT_PATH': 'output/en/',
        'INDEX_SAVE_AS': 'blog/index.html',
        'INDEX_URL': 'blog',
    }
}

(截断不必要的位)

问题在于主页的翻译链接。翻译宏有:

{% for translation in article.translations %}
    <a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang | lookup_lang_name }}</a>

因此,对于英语主页,我可以将url和输出文件名设置为:

    <meta name="save_as" content="en/index.html">
    <meta name="url" content="en/">

这使得翻译链接转到site.com/en/en/(并且有效),或者将它们设置为:

    <meta name="save_as" content="index.html">
    <meta name="url" content="/">

与标准语言主页有冲突。

另一个相关的问题是索引页面(博客页面)没有英文翻译链接或者回到标准语言版本。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

关于问题的第二部分,请查看creating language buttons

答案 1 :(得分:0)

我能够通过以下翻译宏来解决我的问题:

{% macro translations_for(article) %}

    {% if extra_siteurls %}
        {% for lang, url in extra_siteurls.items() %}
            {% if article %}
            <a href="{{ url }}/{{article.permalink}}">{{ lang | lookup_lang_name }}</a>
            {% else %}
            <a href="{{ url }}">{{ lang | lookup_lang_name }}</a>
            {% endif %}
        {% endfor %}
    {% endif %}

{% endmacro %}

通过在每篇文章和页面中添加固定链接选项,我还可以翻译所述文章或页面的URL(否则您可以在上面的宏中使用slug)。

最后但并非最不重要的是,我还从两个主页中删除了url和save_as数据。

要修复博客页面,我将其添加到index.html模板中:

{% block translation_links %}
    {% if lang == 'nl' %}
    <a href="/en/blog/">English</a>
    {% else %}
    <a href="/blog/">Nederlands</a>
    {% endif %}
{% endblock %}