Django的{% trans "Hello" %}功能失效了。

3

我知道,这个问题已经被问了无数遍,但是我仍然不能让我的django模板被翻译。

我在项目树中创建了 locale 文件夹。

我在settings.py中添加了以下内容:

LOCALE_PATHS = (
  os.path.join(PROJECT_PATH,'locale'),
)

settings.py默认语言是英语:

LANGUAGE_CODE = 'en-us'

我添加了更多的语言,比如:

LANGUAGES = ( 
  ('de', _('German')),
  ('fr', _('French')),
  ('es', _('Spanish')),
  ('pt', _('Portuguese'))
)

并添加到TEMPLATE_CONTEXT_PROCESSORS

'django.core.context_processors.i18n',

并将其添加到MIDDLEWARE_CLASSES

'django.middleware.locale.LocaleMiddleware',

NOW: 我将这段代码添加到我的index.html文件中。

{% load i18n %}
{% trans "it is me" as me %}
<title>Newsportal {{ me }}</title>

并且做了:
python manage.py makemessages -a

"it is me"翻译成德语"das bin ich",并且完成了翻译工作。

python manage.py compilemessages

我创建了.mo文件,一切看起来都很棒。

我将我的chrome浏览器语言设置为德语。

但是:它仍然显示文本为"it is me"

我做错了什么?

解决方案:首先,感谢Liarez在这段可怕的时间里一直支持我,最终我找到了错误。

我曾经做过:

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
LOCALE_PATHS = (
   os.path.join(PROJECT_PATH, 'locale'),
)

在项目树中有一个名为settings.py的文件,我进行了深入修改。

我将其更改为:

LOCALE_PATHS = (
   os.path.realpath('locale'),
) 

而它的运行方式像童话故事一样。

@matousc 你的意思是在.po文件内部吗? - doniyor
1
你现在使用的是哪种语言?“it is me”是英文单词,你改变了语言吗?是使用translation.activate("de")吗?你可以在模板中使用{{LANGUAGE_CODE}}来检查你的语言,这样你就可以检查翻译是否起作用了。 - AlvaroAV
@Liarez 哦不,我没有。我应该在哪里做这个?在settings.py文件中吗? - doniyor
你需要一个视图来检测语言的变化,类似于 www.yourproject.com/de,这应该调用一个视图来检测你想要更改的语言,然后进行更改。如果需要,我可以向你展示一个简单的函数。 - AlvaroAV
你是怎么翻译这个信息的?那不是重点,但你还需要将 en-us 添加到你的语言中。 - cor
显示剩余8条评论
1个回答

1
这是一种简单的管理语言和通过URL更改活动语言的方法:
在urls.py中添加:
url(r'^set_language/(?P<language_code>[\w-]+)/?', 'YOUR_PROJECT.views.set_language', name='set_language'),

在你的 views.py 文件中:
def set_language(request, language_code):
    ''' Change language '''

    translation.activate(language_code)
    return HttpResponseRedirect('/')

在任何模板中:
您应该在模板的任何位置询问(仅供测试):{{LANGUAGE_CODE}},以了解实际语言并检查翻译是否有效。

谢谢,但我已经在我的视图中完成了这个操作。仍然是“it is me”。我在视图中使用了translation.activate('de') - doniyor
1
当您在模板中添加 {{LANGUAGE_CODE}},它会显示 de 还是 en - AlvaroAV
在模板中,LANGUAGE_CODE 显示为 de。但为什么字符串仍然是英文的呢? - doniyor
1
让我们在这个聊天室里交流,以避免一直在评论区留言。 - AlvaroAV
1
我找到了问题所在:PROJECT_PATHsettings.py深了一步。因此它在settings.py所在的文件夹中查找locale文件夹,这是错误的。我不得不写下这个:LOCALE_PATHS = ( os.path.realpath('locale'), ),然后它就像童话故事中一样奏效了。 - doniyor
很高兴听到您终于找到了问题! - AlvaroAV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接