我知道有很多主题讲述同样的事情,但我无法找到任何一个解决方案。
我创建了一个新的django项目
这是我唯一的模板:
{% load i18n %}
[...]
<h1>{% trans "Please translate me" %}</h1>
<h1>{{ _("Please translate me") }}</h1>
<h1>{% blocktrans %}Please translate me{% endblocktrans %}</h1>
<p>{% trans "Password" %}</p>
<p>{{ _("Password") }}</p>
<p>{% blocktrans %}Password{% endblocktrans %}</p>
<h1>{% get_current_language as lang %}{{lang}}</h1>
<p>LOCALE_PATHS = {{ s }}</p>
[...]
正如你所看到的,我正在尝试三种不同的翻译方法:trans和blocktrans标签,甚至_(&#34; string&#34;)调用。 这些行是用于改变语言的小形式下面的行。不需要在这里复制它,你会发现它工作得很好。
以下是调用模板的视图:
def welcome(request):
from djp import settings
s=settings.LOCALE_PATHS
return render(request, 'welcome.html', locals())
我的设置:
LANGUAGE_CODE = 'en_us' # EDIT
USE_I18N = True
USE_L10N = True
gettext = lambda x: x
LANGUAGES = (
('en_us', gettext('English')),
('fr_fr', gettext('French')),
('de_de', gettext('German')),
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
我还有 django.core.context_processors.i18n 和 django.middleware.locale.LocaleMiddleware 行,我添加了 url(r&# 39; ^ i18n /&#39;,在urlpatterns中包含(&#39; django.conf.urls.i18n&#39;))行。
现在,在 ./ manage.py makemessages -l fr_fr 之后,我打开django.po文件,删除所有#,模糊行并翻译所有字符串,除了&#39;密码&#39 ;,Django自动翻译:
[...]
#: templates/welcome.html:30 templates/welcome.html.py:31
#: templates/welcome.html:32
msgid "Please translate me"
msgstr "S'il-te-plaît traduis moi"
#: templates/welcome.html:33 templates/welcome.html.py:34
#: templates/welcome.html:35
msgid "Password"
msgstr ""
然后我运行 ./ manage.py compilemessages ,获取django.mo文件,然后运行服务器。
现在这就是我用英语写的:
Please translate me
Please translate me
Please translate me
Password
Password
Password
en-us
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)
法语:
Please translate me
Please translate me
Please translate me
Mot de passe
Mot de passe
Mot de passe
fr-fr
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)
用德语:
Please translate me
Please translate me
Please translate me
Passwort
Passwort
Passwort
de-de
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)
所以,正如你所看到的那样,“密码”这个词很容易。正确翻译(由Django我猜),这意味着标签工作(trans,blocktrans和_(&#34;&#34;)),语言正确更改。
但我的翻译并没有显示出来。我试图清理浏览器的缓存,它没有修复它
您认为这里的问题是什么?即使设置了LOCALE_PATHS元组,Django也无法找到我的语言环境目录吗?
Django版本:1.6.5
答案 0 :(得分:0)
首先,LANGUAGE_CODE保存您的默认安装语言: https://docs.djangoproject.com/en/1.6/ref/settings/#language-code
所以它应该指向一种语言,而不是你的语言列表:
LANGUAGE_CODE = 'en_us'
然后(你不会在你的urls.py中粘贴你的网址我只是要粘贴一个样本):
urlpatterns = i18n_patterns('',
...
yourapppurls are here
...
)
答案 1 :(得分:0)
我们可以阅读https://docs.djangoproject.com/en/1.3/topics/i18n/deployment/
LocaleMiddleware只能选择有的语言 Django提供的基本翻译。如果您想提供翻译 对于尚未包含在翻译集中的应用程序 Django的源代码树,你至少要提供一个基本树 在Locale限制说明中描述。
这就解释了为什么我的翻译没有被使用。 但是:
如果基本语言可用但指定的子语言不可用, Django使用基本语言。例如,如果用户指定de-at (奥地利德语)但Django只有de,Django使用de。
...解释为什么“密码”一词仍然被翻译! 知道了这一点,我将语言改为
LANGUAGES = (
('en', gettext('English')),
('fr', gettext('French')),
('de', gettext('German')),
)
...并调整我的locale子目录名称以匹配它 可以通过列出 django / conf / locale 目录(如果使用virtualenv在site-packages目录中)找到Django支持的语言列表。