标签: django-i18n

Django i18n:{%blocktrans%}块的推荐大小和格式?

我刚刚开始使用Django国际化并试图了解使用的最佳实践{% blocktrans %}.是否最好{% blocktrans %}为每个段落使用一个,或者我应该有一个{% blocktrans %}包含许多段落的大?

拥有一个大{% blocktrans %}的更快,使我的模板看起来更干净,但我担心的是:

  • 它会导致HTML标签(如<p>...</p>)成为翻译字符串的一部分
  • 如果我在我的巨大块的一个部分中改变了一个东西,它msgid就会改变,这似乎会影响其他段落.如果我有较小的块,那么更改将更加孤立(我想).
  • 如果我进行格式更改,例如在段落之间添加/删除换行符,则会更改msgid.

我也想知道格式化.内线换线是否有任何复杂情况{% blocktrans %}?还是有领先的空间?例如:

{% blocktrans %}
    You have {{ num_messages }} messages.
    Another sentence.
{% blocktrans %}
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议.

python django django-templates django-i18n

11
推荐指数
1
解决办法
990
查看次数

如何更改Django管理语言?

我有一个运行i18n的django 1.6网站.我可以使用模板顶部的选择框更改前端语言,但我不知道是否有django应用程序或技巧来更改管理语言,因为它似乎存储在会话变量的某个地方,并且它保持我在前端使用的第一种语言.

python django django-i18n

10
推荐指数
3
解决办法
8903
查看次数

国际化JavaScript代码时清空目录

我正在尝试在我的Django应用程序中设置JavaScript代码的国际化.

我的Django应用程序有一个locale子目录,其中包含正确生成的djangojs.po文件.包的定义如下:

# urls.py
js_info_dict = {
    'packages': ('my_project',),
} 
Run Code Online (Sandbox Code Playgroud)

./manage.py makemessages由于该.po文件包含所有待翻译的字符串,但网站上没有任何JavaScript字符串被翻译,并且目录始终为空,因此效果很好.

django internationalization django-i18n

9
推荐指数
2
解决办法
1757
查看次数

Django翻译逃脱%标志

我正在尝试翻译一些包含百分号的文本,如下所示:

{% trans "100% butterfly" %}

当我运行makemessages命令时,我在德语.po文件中得到以下输出:

#: .\appName\templates\appName\butterflies.html:54
#, fuzzy, python-format
#| msgid ""
#| "100% butterfly"
msgid ""
"100%% butterfly"
msgstr ""
"100% shmetterling"
Run Code Online (Sandbox Code Playgroud)

在编译时,无法将文本翻译为德语.我已经尝试过了{% trans "100%% butterfly" %},但是当用德语和英语查看时,这会导致页面显示"100 %% butterfly".我也尝试使用blocktrans标签来翻译文本,结果相同.

手动删除.po文件中的额外%,以及#, fuzzy, python-format行工作,但我宁愿不必为我正在尝试翻译的每个%符号执行此操作.

我如何在我的HTML中逃避这一点,以便Django停止在.po文件中生成模糊翻译,并且不会混淆思考我正在尝试做一些python格式化?

python django internationalization django-i18n

9
推荐指数
1
解决办法
1912
查看次数

Django makemessages javascript(xgettext)

我想用django i18n支持翻译我的javascript文件.我有以下javascript文件:

var test_text = gettext('example');

@withStyles(styles)
export default class HomePage {
  static contextTypes = {
    i18n: PropTypes.object
  }

  constructor() {
    this.componentDidMount.bind(this);
    this.handleCitySearch.bind(this);
  }

  render() {
    return (
      <Grid className="HomePage">
        <Row className="HomePage-hero">
          <Col md={8} style={{ textAlign: 'center' }}>
            <Input ref="city" bsSize="large" type="text" />
            <Button bsSize="large" bsStyle="default" onClick={this.handleCitySearch}>{gettext('button text')}</Button>
          </Col>
          <Col md={4}>
            <ul>
              <li>{gettext('SOME TEXT')}</li>
              <li>{gettext('MORE TEXT')}</li>
            </ul>
          </Col>
        </Row>
      </Grid>
      );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我运行djangos makemessages命令:

python manage.py makemessages -l de -d djangojs -v 3 -s
Run Code Online (Sandbox Code Playgroud)

我希望创建的翻译文件有四个条目('example','button text','SOME TEXT'和'MORE TEXT'),因为gettext …

javascript django gettext xgettext django-i18n

8
推荐指数
1
解决办法
1051
查看次数

Django 翻译不适用于生产

我已经为不同的城市翻译了该网站,并且在开发机器上运行良好。但是在生产服务器上发布时,它没有显示任何翻译。

但它正确显示了可用语言和当前语言。

这是我的settings.py:

USE_I18N = True
USE_L10N = True
LANGUAGES = [
    ('ru-spb', _('SaintP')),
    ('ru-msk', _('Moscow')),
]

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'nordicsite/locale'),
)
Run Code Online (Sandbox Code Playgroud)

这是语言检查的模板:

 {% load i18n %}
 {% get_current_language as LANGUAGE_CODE %}
 {% get_available_languages as LANGUAGES %} 
 {% get_language_info_list for LANGUAGES as languages %}

 {{server}}<br/>
 {% trans 'Test 2' %}<br/>
 {{LANGUAGE_CODE}}<br/>
 {% for language in languages %}
     {{ language.name_local }} ({{ language.code }})<br/>
 {% endfor %}
 <br/>
 {% for path in paths %}
     {{path}}<br/>
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

开发人员的输出:

???? …
Run Code Online (Sandbox Code Playgroud)

django translation internationalization django-i18n

8
推荐指数
1
解决办法
915
查看次数

尝试从Django模板更改语言的问题

我需要包含两个按钮或链接,以允许用户更改英语和西班牙语之间的语言.我已经阅读了文档并尝试了这个:

<form action="/i18n/setlang/" method="post">{% csrf_token %}
    <input name="language" type="hidden" value="es" />
    <input type="submit" value="ES" />
</form>
Run Code Online (Sandbox Code Playgroud)

但是,每次单击该按钮时,页面都会重新加载,但语言根本不会更改.我错过了什么吗?

注意:我没有设置next,因为我只想用所需语言重新加载当前页面.

如果我使用docs提供的默认表单,结果是相同的:页面重新加载但语言没有改变:

<form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" …
Run Code Online (Sandbox Code Playgroud)

python django internationalization django-i18n

7
推荐指数
2
解决办法
1万
查看次数

在Django中翻译格式化的字符串不起作用

我在使用Django翻译格式化字符串时遇到问题django.utils.translations.只有没有格式(%s{})的字符串才有效.

我的locale/en/LC_MESSAGES/django.po档案:

msgid "foo"
msgstr "bar"

#, python-format
msgid "foo %s"
msgstr "bar %s"

#, python-format
msgid "foo %(baz)s"
msgstr "bar %(baz)s "

#, python-brace-format
msgid "foo {}"
msgstr "bar {}"

#, python-brace-format
msgid "foo {baz}"
msgstr "bar {baz}"
Run Code Online (Sandbox Code Playgroud)

第一个字符串工作:

>>> from django.utils import translation
>>> translation.activate('en')
>>> translation.ugettext('foo')
'bar'
Run Code Online (Sandbox Code Playgroud)

但休息不是:

>>> translation.ugettext('foo %s' % 'bax')
'foo bax'
>>> translation.ugettext('foo %(baz)s' % {'baz': 'bax'})
'foo bax'
>>> translation.ugettext('foo {}'.format('bax'))
'foo bax'
>>> …
Run Code Online (Sandbox Code Playgroud)

django django-i18n

7
推荐指数
1
解决办法
1650
查看次数

Django-复数形式的无效标记:EXPRESSION

我在 django 网站中添加了“库尔德”语言。django 不支持这种语言,所以我添加了以下语言:\nin settings.py

\n\n
gettext = lambda s: s\nNEW_LANG_INFO = {\n    \'ku\': {\n       \'bidi\': True,\n       \'code\': \'ku\',\n       \'name\': \'Kurdish\',\n       \'name_local\': u\'\xda\xa9\xd9\x88\xd8\xb1\xd8\xaf\xdb\x8c\',\n    },\n}\n\nimport django.conf.locale\nLANG_INFO = dict(**django.conf.locale.LANG_INFO, **NEW_LANG_INFO)\ndjango.conf.locale.LANG_INFO = LANG_INFO\n\nLANGUAGES = (\n    (\'en\', \'English\'),\n    (\'ku\', gettext(\'Kurdish\')),\n    (\'ar\', \'Arabic\')\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在当我去的时候mysite.com/en/admin/它工作正常。当我去时mysite.com/ar/admin/它工作正常。\n但是当我去时mysite.com/ku/admin/它会引发错误并显示以下消息:\nValueError at /ku/admin/\n invalid token in plural form: EXPRESSION\n

\n\n

Django 版本是1.11.6.

\n\n

有什么问题以及如何解决它?

\n\n

更新\n我发现在 django.po 中locale/ku/LC_MESSAGES,最后一行注释是"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"

\n

python django django-i18n

7
推荐指数
2
解决办法
3683
查看次数

如何将 gettext 中的 msgid 复制到 msgstr 以进行 django i18n/翻译?

在 JavaScript“djangojs”的 Django i18n 中,有一个错误的假设,即只有语言是英语 - https://code.djangoproject.com/ticket/20280

由于此限制,如果我的语言不是英语,我必须在字符串提取后将所有 msgid 复制到 msgstr。我在互联网上搜索但没有找到任何相关内容。

是否有任何工具可以在 *.po 文件上运行,将所有 msgid 复制到 msgstr?

我需要将波兰语翻译成波兰语,因为如果我不这样做,Django 就会将波兰语 JavaScript 翻译成英语——出了什么问题。欢迎您提出所有建议。


示例 - 波兰语 *.po:

msgid "Polski"
msgstr ""
Run Code Online (Sandbox Code Playgroud)

应该:

msgid "Polski"
msgstr "Polski"
Run Code Online (Sandbox Code Playgroud)

如果不这样做: Polski = 波兰语无效:

如果完成了 Polski = Polski!

这种需要是因为如果波兰语翻译为空,Django 首先加载英语而不是更新翻译,即使不需要,也不会翻译任何内容。除英语以外的所有语言都应该用这个技巧来完成。

django translation gettext internationalization django-i18n

6
推荐指数
1
解决办法
1898
查看次数