关于不同系统中的django翻译模板{%trans“某事”%}

时间:2013-07-31 14:08:21

标签: django

我知道,我问的是类似的东西,要求很多次。但是有不同的观点。

我正在做一个小django项目。在开发了基本功能之后,现在我正在与多语言作斗争。

我能够在Windows笔记本电脑中使用一个简单的测试模板。但是当我将这个项目复制到测试(CentOS)服务器时,它不起作用。

此后我做了什么。

基础环境(两个系统)都是带有python 2.7,django 1.5,mysql-python 1.2.3和django-localeURL 1.5的virtualenv。 gettext v.1.7。

这些是settings.py的相关选项(注意:我使用的是django-localeURL应用程序)

# Django settings for contact_site project.
import os.path
PROJECT_DIR = os.path.dirname(__file__) # this is not Django setting.
# ... skip
LANGUAGE_CODE = 'it'
#...skip
USE_I18N = True
USE_L10N = True
#...skip

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',

    # LocaleMiddleware after SessionMiddleware: it needs sessions
    # commented out LocaleMiddleware to avoid conflict with LocaleURLMiddleware
    # 'django.middleware.locale.LocaleMiddleware',

    # LocaleURLMiddleware to manage multi language urls
    'localeurl.middleware.LocaleURLMiddleware',

    # CommonMiddleware after LocaleURLMiddleware or will not work APPEND_SLASH
    'django.middleware.common.CommonMiddleware',

    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

# ... skip

_ = lambda s: s
LANGUAGES = (
    ('en', _(u'English')),
    ('it', _(u'Italiano')),
    ('fr', _(u'Francais')),
)

LOCALE_PATHS = (
    # in windows laptop
    'C:/...skip.../virtualenvs/djprj/contact_site/locale',
    # in centos staging server
    # '/var/www/html/virtualenvs/djprj/contact_site/locale',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
    'django.core.context_processors.i18n',
    'django.contrib.auth.context_processors.auth',
)

TEMPLATE_DIRS = (
# ...skip
    os.path.join(PROJECT_DIR, "templates"),
)

INSTALLED_APPS = (
    # localeurl to manage multi language urls. it must be the 1st one!
    'localeurl',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
# ... skip
    # my application
    'contact',
)
# ... skip

我的项目urls.py(仅限家庭):

# ... skip
urlpatterns += patterns('',
    url(r'^$', 'contact_site.views.home', name='home'),
    )

my views.py(仅限家庭):

#... skip    
def home(request):
    return render(request, 'minimalistic.html', {})

最后是我的简约模板:

{% load debug_tags %}
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
<title>TITLE</title>
</head>
<body>
{# {% set_trace %} #}
<p>{% trans "Hello" %}</p>
<p>{% blocktrans %}Hello guys{% endblocktrans %}</p>

lingua richiesta: {{ request.LANGUAGE_CODE }}
</body>
</html>

然后我使用

制作了消息词典
django-admin.py makemessages --all

我编辑了词典(使用poedit) 最后,在Windows中运行开发服务器,我看到了令人垂涎的结果:

从浏览器http://127.0.0.1:8000/it偷看,给了我Salve ......

虽然获得http://127.0.0.1:8000/en给了我,你好......

不幸的是,在舞台系统中我从两个网址获得了Hello ....

为了安全起见,我甚至试过了几次

django-admin.py compilemessages

此操作没问题,但没有关于minimalistic.html模板渲染的不同结果

最后,是的,我在测试之间清除了浏览器缓存。

关于我缺少什么的任何建议?我该如何调试这种奇怪的行为?

1 个答案:

答案 0 :(得分:0)

嗯,我很抱歉,有点尴尬。

今天,调试django/utils/translate/trans_real.py,我意识到登台服务器settings.py文件中存在一个微妙的拼写错误。

我无法计算昨天检查过该配置文件的次数,错过了这一点!

再次抱歉