本地化:django-admin compilemessages skip venv

Posted

技术标签:

【中文标题】本地化:django-admin compilemessages skip venv【英文标题】:Localization: django-admin compilemessages skip venv 【发布时间】:2019-06-11 05:59:06 【问题描述】:

我在Django 1.11 应用程序中使用本地化。我可以排除虚拟环境文件夹和node_modules 文件夹,同时使用-i 选项在消息文件中添加消息,例如:

django-admin makemessages -l 'no' -i venv
django-admin makemessages -d djangojs --locale no -i venv -i node_modules

添加翻译后,我正在使用以下方法编译消息:

django-admin compilemessages

它处理位于虚拟环境文件夹中的所有已安装软件包的django.po 文件。因此,完成编译翻译需要更长的时间。

我在documentation 中没有找到任何参数来跳过compilemessages 命令中的特定路径。

是否有任何选项可以跳过venvcompilemessages 的特定路径?

【问题讨论】:

我有同样的问题,我很惊讶makemessagescompilemessages 可能会出现忽略标志。在此期间您是否找到任何解决方案?此thread 建议将venv 文件夹移出django 项目,但最好在compilemessages 命令中忽略它。 没有。我还没有找到任何解决方案。 【参考方案1】:

Django 3.0 添加了 --ignore 选项

django-admin compilemessages --ignore=cache --ignore=outdated/*/locale

文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-compilemessages-ignore


(方法#2)

在我发现忽略 VENV 的最佳技巧之前:

cd to project
python ../manage.py makemessages  (jumping one directory up)
python ../manage.py compilemessages

(来自同事的这个小技巧避免了编译 venv .po)


(方法#3)

在此之前,另一种解决方法是尝试使用 --exclude 标志的更复杂的方法

usage: django-admin compilemessages [-h] [--version] [-v 0,1,2,3]
                                    [--settings SETTINGS]
                                    [--pythonpath PYTHONPATH] [--traceback]
                                    [--no-color] [--locale LOCALE]
                                    [--exclude EXCLUDE] [--use-fuzzy]

github

        parser.add_argument(
            '--exclude', '-x', action='append', default=[],
            help='Locales to exclude. Default is none. Can be used multiple times.',
        )

不幸的是,这是针对语言环境的,但这是我迄今为止发现的唯一东西

从 these internal communications 的 Django 开发中,我可以看到忽略标志已从 makemessages 复制到 compilemessages 以供将来版本使用

我自己用的(不包括es和en)

django-admin compilemessages --exclude=sw --exclude=sl --exclude=sk --exclude=km --exclude=sv --exclude=ko --exclude=sq --exclude=sr --exclude=kk --exclude=ka --exclude=es_MX --exclude=fa --exclude=fy --exclude=fr --exclude=en_AU --exclude=ne --exclude=nb --exclude=nn --exclude=nl --exclude=id --exclude=az --exclude=io --exclude=ar --exclude=ia --exclude=kn --exclude=it --exclude=is --exclude=vi --exclude=af --exclude=my --exclude=mr --exclude=uk --exclude=pl --exclude=ur --exclude=mk --exclude=mn --exclude=ml --exclude=he --exclude=hi --exclude=hu --exclude=hr --exclude=en_GB --exclude=pa --exclude=cs --exclude=fi --exclude=cy --exclude=sr_Latn --exclude=os --exclude=pt --exclude=ja --exclude=bs --exclude=br --exclude=bn --exclude=ast --exclude=bg --exclude=hsb --exclude=dsb --exclude=ro --exclude=es_CO --exclude=ru --exclude=et --exclude=eu --exclude=zh_Hant --exclude=zh_Hans --exclude=be --exclude=eo --exclude=el --exclude=da --exclude=de --exclude=pt_BR --exclude=ta --exclude=ca --exclude=te --exclude=es_AR --exclude=th --exclude=lt --exclude=lv --exclude=tr --exclude=tt --exclude=es_VE --exclude=lb --exclude=gl --exclude=ga --exclude=gd --exclude=udm--exclude=sw --exclude=sl --exclude=sk --exclude=km --exclude=sv --exclude=ko --exclude=sq --exclude=sr --exclude=kk --exclude=ka --exclude=es_MX --exclude=fa --exclude=fy --exclude=fr --exclude=en_AU --exclude=ne --exclude=nb --exclude=nn --exclude=nl --exclude=id --exclude=az --exclude=io --exclude=ar --exclude=ia --exclude=kn --exclude=it --exclude=is --exclude=vi --exclude=af --exclude=my --exclude=mr --exclude=uk --exclude=pl --exclude=ur --exclude=mk --exclude=mn --exclude=ml --exclude=he --exclude=hi --exclude=hu --exclude=hr --exclude=en_GB --exclude=pa --exclude=cs --exclude=fi --exclude=cy --exclude=sr_Latn --exclude=os --exclude=pt --exclude=ja --exclude=bs --exclude=br --exclude=bn --exclude=ast --exclude=bg --exclude=hsb --exclude=dsb --exclude=ro --exclude=es_CO --exclude=ru --exclude=et --exclude=eu --exclude=zh_Hant --exclude=zh_Hans --exclude=be --exclude=eo --exclude=el --exclude=da --exclude=de --exclude=pt_BR --exclude=ta --exclude=ca --exclude=te --exclude=es_AR --exclude=th --exclude=lt --exclude=lv --exclude=tr --exclude=tt --exclude=es_VE --exclude=lb --exclude=gl --exclude=ga --exclude=gd --exclude=udm --exclude=zh_CN  --exclude=ky --exclude=zh_TW --exclude=no --exclude=pt_PT  --exclude=hy

【讨论】:

如果您收到错误:“CommandError:此脚本应从 Django Git 签出或您的项目或应用程序树中运行,或者使用指定的设置模块运行。” ,您可能需要在设置中设置LOCALE_PATHS Github 链接断开【参考方案2】:

正如其他人已经说过的,遗憾的是,在 Django 2.x 中,只有一些技巧可以解决这个问题。 (Django 3.0 终于将--ignore 添加到compilemessages。)

我发现最透明的是调试到compilemessages 并查看subprocess 调用它的问题。您可以从中派生对msgfmt 工具的直接调用。

对于我们相对简单的项目,makemessages 收集了locale/$LANGUAGE/LC_MESSAGES/django.po 中的*.po 文件。然后msgfmt 会将生成的*.mo 放在同一个文件夹中。所以我们只写了一个脚本来执行这样的步骤:

set -e

django-admin makemessages --all --ignore venv

# HACK: Run msgfmt manually instead from "django-admin compilemessages"
# because the latter also searches venv.
msgfmt -o locale/de/LC_MESSAGES/django.mo locale/de/LC_MESSAGES/django.po
msgfmt -o locale/en/LC_MESSAGES/django.mo locale/en/LC_MESSAGES/django.po
msgfmt -o locale/hu/LC_MESSAGES/django.mo locale/hu/LC_MESSAGES/django.po
# ...add other languages as needed.

这当然非常笨拙,但很容易理解和扩展。

【讨论】:

【参考方案3】:

Django 3.0 添加了 --ignore 选项

django-admin compilemessages --ignore=cache --ignore=outdated/*/locale

文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-compilemessages-ignore

【讨论】:

【参考方案4】:

使用忽略选项

python manage.py compilemessages -i "venv*"

这个命令对我有用。确保 venv 应该用双引号(“”),而不是单引号('')

【讨论】:

如果你使用docker,请确保路径是相对于密码的,当我尝试./manage.py compilemessages -i "/app/.tox*"它不起作用时,我需要使用./manage.py compilemessages -i ".tox*"

以上是关于本地化:django-admin compilemessages skip venv的主要内容,如果未能解决你的问题,请参考以下文章

django-admin 和django-admin.py的区别

django-admin.py startproject 不工作

win10 nginx + django +flup 配置

autoslugfield 进入 django-admin 界面?

找不到命令:django-admin.py

django-admin:command not found的解决办法