【问题标题】:Django doesn't create translation .po filesDjango 不创建翻译 .po 文件
【发布时间】:2011-01-05 22:11:27
【问题描述】:

我的翻译字符串仅在模板中(存储在 project_dir/Templates 中),我尝试在项目根目录和使用带有 trans 的模板的应用程序目录中运行 $ django-admin.py createmessages -l ru。字符串。它创建了文件夹 locale/ru/LC_MESSAGES 但文件夹是空的。我尝试手动添加 django.po 文件(使用l10n 文档中提到的语法)。并运行 createmessages -a 和 compilemessages 命令。它创建了 .mo 文件,但翻译没有出现在浏览器中。

  1. 当我手动创建 .po 文件时,我没有以 # 开头的行。我应该在那里写什么?
  2. 我的模板文件与应用程序的 .py 文件位于不同的文件夹中。我应该添加一些额外的链接吗?

【问题讨论】:

  • 你检查过 django 没有为翻译设置惰性标签吗?粘贴 .po 文件的片段以查看您拥有的内容。
  • 我创建的 .po 文件是 msgids and msgstrs 对,其中 msgid 对应于模板中的 {% trans %}。
  • 你的LOCALE_PATHS在设置里设置了吗?

标签: python django localization


【解决方案1】:

你试过了吗:

python manage.py makemessages -a 

来自项目根目录和应用程序?

这应该创建一个您必须编辑的 .po。 一定要删除到处都是“模糊”的东西。

然后:

python manage.py compilemessages

您需要重启服务器

【讨论】:

  • 它不会创建 .po 文件。它只显示processing language ru,仅此而已:(
  • 很奇怪。你有gettext安装吗?此外,模板必须可以通过 settings.TEMPLATE_LOADERS 加载才能被检测到。还可以尝试在 .py 文件中添加对 django.utils.translation.gettext 的调用,以查看它是否来自模板。
  • “去除所有地方的模糊东西”究竟是什么意思?
  • makemessages 之后,工具可能会将某些条目标记为模糊。这些是与其他现有字符串相似但不完全相等的字符串。这可能会发生,即,如果对字符串进行了轻微修改。然后makemessages 将标记这些条目以供审核,并且 Django 不会显示这些条目,直到 fuzzy 标志被删除。
【解决方案2】:

对于较新版本的 Django(例如 3.2):

  1. 在根目录下创建文件夹“locale”

  2. 运行命令django-admin makemessages -l ru

  3. 更新您的语言文件(位于语言环境文件夹中)

  4. 运行django-admin compilemessages

  5. 在settings.py中配置LOCALE_PATHS,否则看不到翻译:

    LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]

    LANGUAGE_CODE = 'ru'

【讨论】:

    【解决方案3】:

    修复空的 po 文件:

    1. 确保按照documentation 中的说明对模板进行了必要的更改。请确保您正在检查项目的正确文档版本。
    2. 您可以在templates 目录中添加locale 目录,并将其路径添加到LOCALE_PATHS 列表中。 (可选,但有助于确保模板目录包含在步骤 4 中)
    3. 转到 project_dir(您应该在要翻译的文件的父目录中运行下一个命令)
    4. 运行命令django-admin makemessages -l ru

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多