set_language在django国际化中不起作用

时间:2015-02-21 11:17:30

标签: python django

  1. 我在settings.py中包含以下内容:

    LANGUAGES = (
        ('en', 'English'),
        ('ru', 'Russian'),
    )
    
    LANGUAGE_CODE = 'en-us'
    
    USE_I18N = True
    
  2. 标记了要翻译的字符串

    _('Enterprise')     # _ is lazy translate
    
  3. 将此包含在我的URLCOnf:

    url(r'^i18n/', include('django.conf.urls.i18n'))
    
  4. 创建了locale文件夹并执行了此操作:

    python manage.py makemessages -l ru
    
  5. 翻译了字符串并做了这个:

    python manage.py compilemessages
    
  6. 写了这个表格:

    <form action="/i18n/setlang/" method="post">
            {% csrf_token %}
            <input name="next" type="hidden" value="/" />
            <select name="language">
               {% for lang in LANGUAGES %}
               <option value="{{ lang.0 }}">{{ lang.1 }}</option>
               {% endfor %}
            </select>
            <input type="submit" value="Translate" />
     </form>
    
  7. 我认为我已经采取了所有措施使其发挥作用,但似乎我做错了什么或遗漏了什么。

    使用表单并尝试翻译并打印request.LANGUAGE_CODE时,它会显示我的预期价值。但字符串仍然使用与

    相同的语言

    这里有什么问题?

2 个答案:

答案 0 :(得分:1)

可能您忘了将语言环境中间件添加到您的设置文件中,它看起来应该像这样

'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', 
'django.middleware.common.CommonMiddleware',

您应该考虑到语言环境中间件应该位于commonmiddleware之前 并在Sessionmiddleware之后 由于它需要会话中间件的论证

答案 1 :(得分:0)

您应该在settings.py文件中定义LOCALE_PATHS,如下所示

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale/'),
)

django默认情况下不会在项目的根目录中查找语言环境目录。