5

我有一个 django 网站,我正在使用语言选择器添加翻译,该语言选择器列出了用户语言中的可用语言。我想让下拉列表也包括本机拼写。

目前它看起来像这样:
英语
荷兰语
简体中文

当我切换到中文时,它看起来像:
英语
荷兰语<br> 简体中文

我试图让它看起来像:
English/English
Dutch/Nederlands
Simplified Chinese/简体中文

settings.py 包括:

ugettext = lambda s: s  
LANGUAGES = (
    ('en', ugettext('English')),
    ('nl', ugettext('Dutch')),
    ('zh-cn', ugettext('Simplified Chinese')),
)

base.html:

    {% load i18n %}
    {% get_available_languages as LANGUAGES %}
    <form action="/i18n/setlang/" method="post">{% csrf_token %}
      <input name="next" type="hidden" value="/" />
        {% csrf_token %}
        <select name="language">
          {% for lang in LANGUAGES %}
            <option value="{{ lang.0 }}">{{ lang.1 }}</option>
          {% endfor %}
        </select>
      <input type="submit" value="Go" />
    </form>

我的想法是在母语 LANGUAGES 中添加另一个项目,例如:

LANGUAGES = (
    ('en', ugettext('English'), 'English'),
    ('nl', ugettext('Dutch'), 'Nederlands'),
    ('zh-ch', ugettext('Simplified Chinese'), '简体中文'),)

但 Django 似乎期望 LANGUAGES 有一个 2 项元组。还有其他想法吗?

根据亚历山大的评论编辑: 我认为这可能是一个更简单的解决方案,但在更改代码之后:

        <form action="/i18n/setlang/" method="post">{% csrf_token %}
        <input name="next" type="hidden" value="/" />
        <select name="language">
            <option value="en">English</option>
            <option value="nl">Dutch\Nederlands</option>
            <option value="ru">Russian\Русский</option>
            <option value="zh-cn">Simplified Chinese-简体中文&lt;/option>
        </select>
        <input type="submit" value="Go" />
    </form>  

俄语和中文脚本显示为问号 - 俄语\???????,中文-????

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 在 html 中,其他俄文和中文文本(在此表单之外)看起来很好。

4

2 回答 2

6

试试这个:

LANGUAGES = (
    ('en',    '{}/{}'.format(ugettext('English'), 'English')),
    ('nl',    '{}/{}'.format(ugettext('Dutch'), 'Nederlands')),
    ('zh-cn', '{}/{}'.format(ugettext('Simplified Chinese'), '简体中文')),
)

然后你可以在你的模板中使用它:

{% for lang in LANGUAGES %}
    <option value="{{ lang.0 }}">{{ lang.1 }}</option>
{% endfor %}
于 2012-07-19T02:20:25.443 回答
1

接受 Alexander 的建议,我能够让上面编辑中的代码正常工作。我在“头部”区域内没有这<meta http-equiv="content-type" content="text/html;charset=UTF-8" /> 条线,这是必需的,这给了我???? 汉字应该在哪里。

在看到它的实际操作后,我可能有 2 个语言选择器,一个被翻译成当前语言,另一个带有英语/母语字符,如果它不是太忙的话。

我还将语言列表放在一个模块中,并将其传递给类似于获取 LANGUAGES 的模板。

于 2012-07-19T21:07:58.610 回答