Evg*_*eny 9 django internationalization
我有文件locale/es/LC_MESSAGES/django.mo(和.po),运行makemessages和compilemessages.绝对是所有消息都被翻译
在settings.py中有:
USE_I18N = True
LANGUAGE_CODE = 'es'
Run Code Online (Sandbox Code Playgroud)
django仍然固执地从英文.po文件中获取字符串......为什么会这样?
一定有一些问题......谢谢.
编辑这似乎是这种情况,只有当LocaleMiddleware有效.
根据django文档
http://docs.djangoproject.com/en/dev/topics/i18n/#id2
LocaleMiddleware尝试通过以下算法确定用户的语言首选项:
Run Code Online (Sandbox Code Playgroud)* First, it looks for a django_language key in the current user's session. * Failing that, it looks for a cookie.
[...]
Run Code Online (Sandbox Code Playgroud)*Failing that, it looks at the Accept-Language HTTP header. This header is sent by your browser and tells the server which language(s) you prefer, in order by priority. Django > tries each language in the header until it finds one with available translations. * Failing that, it uses the global LANGUAGE_CODE setting.
如果您只需要一种语言'es',则可以禁用中间件.如果您确实需要LocaleMiddleware处于活动状态,请尝试使用此配方覆盖客户端浏览器http://www.djangosnippets.org/snippets/218/中的标题:
enter code here
class ForceDefaultLanguageMiddleware(object):
"""
Ignore Accept-Language HTTP headers
This will force the I18N machinery to always choose settings.LANGUAGE_CODE
as the default initial language, unless another one is set via sessions or cookies
Should be installed *before* any middleware that checks request.META['HTTP_ACCEPT_LANGUAGE'],
namely django.middleware.locale.LocaleMiddleware
"""
def process_request(self, request):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
del request.META['HTTP_ACCEPT_LANGUAGE']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4077 次 |
最近记录: |