Django i18n模块中有一些字符串没有被翻译

12

我在使用Django的国际化模块时遇到了一些奇怪的问题。大部分字符串都被翻译成了应该有的样子,但还有一些没有。让我举个例子:

<li>{% trans "Upload Score" %}</li>
<li>{% trans "Profile" %}</li>
<li>{% trans "Invite friends" %}</li>
<li>{% trans "Settings" %}</li>

我有一个包含4个菜单项的列表。我运行django命令makemessages将网站翻译成法语,一切都如预期的那样:

#: templates/main.html:190 templates/main.html.py:195
#, fuzzy
msgid "Upload Score"
msgstr "Publier"

#: templates/main.html:191 templates/main.html.py:196
msgid "Profile"
msgstr "Profil"

#: templates/main.html:192 templates/main.html.py:197
#, fuzzy
msgid "Invite Friends"
msgstr "inviter vos amis"

#: templates/main.html:193 templates/main.html.py:198
msgid "Settings"
msgstr "Préférences"

但是当我编译它时,使用django-admin compilemessages命令,只有“Profile”和“Settings”被翻译了。您知道这可能是哪里出了问题吗?是否与使用空格有关?i18n模块中是否有调试模式?
谢谢您的帮助! :)
编辑:我们使用的是django 1.4版本。

你的 Django 项目语言设置是什么样子的?(LANGUAGE_CODE, USE_I18N)。你的系统语言设置是什么样子的?ProfileSettings 是通用字符串,可以在属于 Django 自身的翻译中找到。我猜测你的翻译可能没有被使用,因为语言设置不匹配或其他类似的原因。 - yedpodtrzitko
3个回答

8
您需要删除模糊的行。
模糊可能意味着原始字符串已被更改。Gettext不想丢失您的翻译,所以它会更改但标记为模糊。
我推荐您使用rosetta。它将为您创建类似于管理员的界面,您可以在其中翻译字符串并管理模糊。
祝好

4
我有完全相同的症状,原来我只是忘记添加LOCALE_PATHS设置,Django使用了一些默认的翻译字符串替代我的自定义开发消息文件中的某些字符串导致无法到达。

添加此设置解决了问题:

LOCALE_PATHS = (
    PROJECT_DIR.child('locale'),  # assuming PROJECT_DIR is set to project root (using unipath)
)

应该是 LOCALE_PATH(没有 S)吧。 - Juho Rutila
1
我已经链接到文档,非常清楚地说明了它是 LOCALE_PATHS - Yuval Adam

2

在我的情况下,问题出在存放LC_MESSAGES目录的文件夹名称是按照我想要的语言代码命名的(例如en-us),而不是按照语言环境来命名(en_US)。将其重命名为语言环境格式即可解决问题。


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