首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django i18n:翻译不出现的常见原因

Django i18n:翻译不出现的常见原因
EN

Stack Overflow用户
提问于 2010-02-25 01:45:13
回答 9查看 9K关注 0票数 26

我正在制作一个多语言的Django网站。我创建了一个消息文件,填充并编译它。我用我想要的语言(希伯来语)检查了网站(本例中的管理员),大多数短语在希伯来语中看起来应该是这样的,但有些不是。我检查了源码,这些短语仍然像他们应该的那样显示为_('Whatever'),而且它们在消息文件上也被翻译了,是的,我记得做了compilemessages

翻译不是这样的常见原因是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-03-05 02:23:51

可能翻译后的字符串被标记为fuzzy

票数 35
EN

Stack Overflow用户

发布于 2013-11-09 01:56:18

刚被一辆车撞了。我在项目的根目录中有locale/目录,但默认情况下,Django looks for translationsINSTALLED_APPS目录中,并且在缺省翻译中。所以它找不到我添加的翻译。但是我的一些字符串是Django自带的默认翻译(例如“搜索”),所以一些字符串被翻译了,这让我很困惑。

要将我的翻译所在的目录添加到Django将查找翻译的位置列表中,我必须设置LOCALE_PATHS setting。因此,在我的例子中,locale/目录和settings.py都在django项目的根目录中,我可以将以下内容放在settings.py

代码语言:javascript
复制
from os import path
LOCALE_PATHS = (
    path.join(path.abspath(path.dirname(__file__)), 'locale'),
)
票数 21
EN

Stack Overflow用户

发布于 2017-05-14 00:03:07

我试着提供一份完整的清单:

  • In settings.py,是否正确设置了USE_I18NUSE_L10NLANGUAGE_CODELOCALE_PATHS

代码语言:javascript
复制
- See [this list](http://www.i18nguy.com/unicode/language-identifiers.html) for all allowed values of language identifiers. Note that Simplified Chinese is specified by `zh-hans`, not `zh-cn`.

运行django-admin makemessages -l <locale-name>

代码语言:javascript
复制
- You can see an _incomplete_ list of allowed locale name by running `ls your/path/to/python/site-packages/django/conf/locale/` on your machine, or by [taking a look at the source code](https://github.com/django/django/tree/master/django/conf/locale)
- **Note that you have to use** **`_`** **rather than** **`-`** **here.** For example, to specify simplified Chinese, execute `django-admin makemessages -l zh_Hans`, not `zh_CN` or `zh_hans` or `zh-Hans` or anything else.

  • 您是否删除了PO中的所有fuzzy标记?

您是否使用django-admin compilemessages

  • Have (重新)编译了OP文件并重新启动了web服务器

其他注意事项:

  • 如果您的某些翻译被Django的默认翻译所覆盖,请使用contextual markers来绕过它。例如,

models.py

代码语言:javascript
复制
first_name = models.CharField(
    pgettext_lazy('override default', 'first name'),
    max_length=30
)

last_name = models.CharField(
    pgettext_lazy('override default', 'last name'),
    max_length=150
)

django.po

代码语言:javascript
复制
#: models.py:51
msgctxt "override default"
msgid "first name"
msgstr "姓"

#: models.py:55
msgctxt "override default"
msgid "last name"
msgstr "名"

您将看到,而不是默认的姓氏名字

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档