如何最好地翻译作为变量传递给 Django 模块的字符串?
How to best translate strings passed as variable to a Django module?
我正在做我在 Django 中的第一步,我正在尝试让文本翻译工作,我通过 .ini 文件传递给应用程序。
假设我的 init.ini
是:
[test]
GREETING = Hello World
在我的 settings.py
中,我正在做:
from six.moves import configparser
from django.utils.translation import ugettext_lazy as _
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Retrieve initialization configuration
init_parser = configparser.ConfigParser()
init_parser.read(os.path.join(BASE_DIR, 'init.ini'))
...
HELLO = init_parser.get('test', 'GREETING')
HELLO = _(init_parser.get('test', 'GREETING'))
我的标签翻译在调用 makemessage
时没有显示。
(The caveat with using variables or computed values, as in the
previous two examples, is that Django’s translation-string-detecting
utility, django-admin makemessages, won’t be able to find these
strings. More on makemessages later.)
但是他们虽然makemessage
在文档页面上有很多内容,但它没有提供如何翻译这样的variables/computed值的解决方案。因此我的问题是:
是否有推荐的实用方法将字符串作为变量传递到 python 模块并让 makemessage
捕获它们?
编辑:
添加 django-admin makemessages -l de --e=html,py,txt,ini
中的扩展名也不起作用,但现在我很好奇如何制作一个 txt
文件来覆盖。也许这是个主意。
所以这个 django-admin makemessages -l de --e=html,py,txt,ini
让我走上了正确的轨道,因为如果 txt
按照 documentation 默认包含,它必须以某种方式工作。
我创建了 foo.txt
:
_("yeah why not")
{% trans "maybe like this" %}
第二个片段在调用 makemessages
时出现在 .po
文件中。
我创建了 foo.ini
:
_("from ini, yeah why not")
{% trans "from ini, maybe like this" %}
和 运行 django-admin makemessages -l de --e=html,py,txt,ini
也将第二个片段包含在 .po
文件中。
所以 {% trans "" %}- 化初始化文件中的所有文本片段似乎可以完成这项工作。然后我可以从我的模块中获取翻译后的值。
我正在做我在 Django 中的第一步,我正在尝试让文本翻译工作,我通过 .ini 文件传递给应用程序。
假设我的 init.ini
是:
[test]
GREETING = Hello World
在我的 settings.py
中,我正在做:
from six.moves import configparser
from django.utils.translation import ugettext_lazy as _
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Retrieve initialization configuration
init_parser = configparser.ConfigParser()
init_parser.read(os.path.join(BASE_DIR, 'init.ini'))
...
HELLO = init_parser.get('test', 'GREETING')
HELLO = _(init_parser.get('test', 'GREETING'))
我的标签翻译在调用 makemessage
时没有显示。
(The caveat with using variables or computed values, as in the previous two examples, is that Django’s translation-string-detecting utility, django-admin makemessages, won’t be able to find these strings. More on makemessages later.)
但是他们虽然makemessage
在文档页面上有很多内容,但它没有提供如何翻译这样的variables/computed值的解决方案。因此我的问题是:
是否有推荐的实用方法将字符串作为变量传递到 python 模块并让 makemessage
捕获它们?
编辑:
添加 django-admin makemessages -l de --e=html,py,txt,ini
中的扩展名也不起作用,但现在我很好奇如何制作一个 txt
文件来覆盖。也许这是个主意。
所以这个 django-admin makemessages -l de --e=html,py,txt,ini
让我走上了正确的轨道,因为如果 txt
按照 documentation 默认包含,它必须以某种方式工作。
我创建了 foo.txt
:
_("yeah why not")
{% trans "maybe like this" %}
第二个片段在调用 makemessages
时出现在 .po
文件中。
我创建了 foo.ini
:
_("from ini, yeah why not")
{% trans "from ini, maybe like this" %}
和 运行 django-admin makemessages -l de --e=html,py,txt,ini
也将第二个片段包含在 .po
文件中。
所以 {% trans "" %}- 化初始化文件中的所有文本片段似乎可以完成这项工作。然后我可以从我的模块中获取翻译后的值。