标签: django-i18n

如何将 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
查看次数

I18n停止了工作

我总是使用这个脚本来编译django.po并且它总是在工作:

#!/bin/sh
django-admin.py makemessages -a
django-admin.py compilemessages
Run Code Online (Sandbox Code Playgroud)

突然它停止工作,出现这个错误:

$ i18n.sh
Traceback (most recent call last):
  File "c:/Python34/Scripts/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "c:\Python34\lib\site-packages\django\core\management\__init__.py", line
385, in execute_from_command_line
    utility.execute()
  File "c:\Python34\lib\site-packages\django\core\management\__init__.py", line
377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "c:\Python34\lib\site-packages\django\core\management\base.py", line 288,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "c:\Python34\lib\site-packages\django\core\management\base.py", line 338,
 in execute
    output = self.handle(*args, **options)
  File "c:\Python34\lib\site-packages\django\core\management\base.py", line 533,
 in handle
    return self.handle_noargs(**options)
  File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag
es.py", line 283, in handle_noargs
    potfiles = self.build_potfiles()
  File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag
es.py", line 299, in build_potfiles
    file_list …
Run Code Online (Sandbox Code Playgroud)

django django-i18n

6
推荐指数
2
解决办法
2114
查看次数

Django - 防止模板中可用语言名称的翻译

我在 settings.py 中有可用的语言

LANGUAGE_CODE = 'en'
LANGUAGES = (
    ('fr', _('French')),
    ('en', _('English')),
)
Run Code Online (Sandbox Code Playgroud)

当我在模板中循环时,我认为 django 通过 {{ lang.1 }} 为我提供翻译名称是预期的行为。但我不想翻译语言名称,所以我更改了我的settings.py,如下所示:

LANGUAGES = (
        ('fr', 'Francais'),
        ('en', 'English'),
    )
Run Code Online (Sandbox Code Playgroud)

我仍然得到翻译后的语言名称。你有好主意吗?{% get_available_languages as languages %} 模板标签是否会自动翻译列表项?如果是这样,我如何在可用语言循环时使用未翻译的语言名称?

- - 编辑 - -

我检查了django的get_available_languages模板标签的代码。我想这里翻译的是:

class GetAvailableLanguagesNode(Node):
    def __init__(self, variable):
        self.variable = variable

    def render(self, context):
        context[self.variable] = [(k, translation.ugettext(v)) for k, v in settings.LANGUAGES]
        return ''
Run Code Online (Sandbox Code Playgroud)

也许我必须编写自己的模板标签......

django django-i18n

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

React Django 中的 i18n 国际化和本地化

我正在做一个项目,我在前端使用 React js,后端使用 Django。我需要实现i18n 国际化和本地化 我看到了 Django 文档并遇到了 django I18n javascript_catalog。如何在 React JS 中使用 getText() 使用相同的内容?有没有其他实现方式?

提前致谢

django internationalization django-i18n reactjs

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

带有变量的 Django blocktrans

我有一个模板,我想在其中翻译一个字符串。

{% blocktrans with "www.mywebsite.com" as website_name %}footer-slogan{{ website_name }}{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)

我已经生成了 po 文件,其中我将字符串翻译如下:

msgid "footer-slogan %(website_name)s"
msgstr "This is a test %(website_name)s"
Run Code Online (Sandbox Code Playgroud)

在我生成的 html 文件中,我得到了这个未翻译的元素:

footer-slogan www.mywebsite.com
Run Code Online (Sandbox Code Playgroud)

如果我从翻译后的字符串中删除变量,它就会起作用:

msgid "footer-slogan %(website_name)s"
msgstr "This is a test"
Run Code Online (Sandbox Code Playgroud)

我什至尝试从源翻译中删除变量,但将变量保留在翻译后的字符串中,问题是相同的:

template.html
{% blocktrans with "www.mywebsite.com" as website_name %}footer-slogan{% endblocktrans %}

django.po
msgid "footer-slogan"
msgstr "This is a test %(website_name)s"
Run Code Online (Sandbox Code Playgroud)

我希望能够仅在翻译后的字符串上设置变量。

我在翻译后的字符串上做错了什么?

django internationalization po django-i18n

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

"django-admin.py makemessages -l en"将Plural-Forms添加到输出文件中

每次运行时django-admin.py makemessages -l en,它都会在djangojs.po文件中添加以下行:

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
Run Code Online (Sandbox Code Playgroud)

在那次运行python manage.py runserver之后发生了这个错误:

ValueError: plural forms expression could be dangerous
Run Code Online (Sandbox Code Playgroud)

当然,删除该行可以修复错误并使其消失.
如何防止添加此行?

python django django-i18n

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

Django url 没有被翻译

按照翻译 URL 模式,我可以使我的 URL 以活动语言为前缀,但无法翻译它们。

urls.py

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _

from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

from exercises.views import ExerciseListView

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]

urlpatterns += i18n_patterns(
   ...
   url(_(r'^exercises/$'), ExerciseListView.as_view(), name='list'),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

语言环境/es/LC_MESSAGES/django.po

#: myproject/urls.py:54
msgid "^exercises/$"
msgstr "^ejercicios/$"
Run Code Online (Sandbox Code Playgroud)

管理.py shell

>>> from django.core.urlresolvers import reverse
>>> from django.utils.translation import activate
>>> activate('en')
>>> reverse('list')
'/en/exercises/' …
Run Code Online (Sandbox Code Playgroud)

python django django-multilingual django-i18n

5
推荐指数
1
解决办法
2203
查看次数

在 Django 中哪里可以翻译表单字段标签?

我正在努力让我的网站翻译加快速度,并且我的模板中已经有.po/.mo与所有{% trans %}标签一起使用的文件,但我不知道如何让我的表单很好地翻译。这些字段没有显示在我的 .po 文件中...

应用程序/表单.py:

from django import forms
from django.utils.translation import ugettext_lazy as trans

class ContactForm(forms.Form):
    subject = forms.CharField(required=True, label=trans(u'Subject'))
    name = forms.CharField(required=True, label=trans(u'Name'))
    email = forms.EmailField(required=True, label=trans(u'Email'))
    content = forms.CharField(required=True, widget=forms.Textarea, label=trans(u'Content'))
Run Code Online (Sandbox Code Playgroud)

我不确定这里还需要包含什么,如果我需要其他内容,请告诉我。我试过跑

django-admin makemessages -l lang
Run Code Online (Sandbox Code Playgroud)

但它不会填充这些字段

python django translation django-forms django-i18n

5
推荐指数
1
解决办法
3592
查看次数

Django i18n 和 jQuery Globalize 的单页应用程序消息

我有一个基于 Django 的 API 层,它在内部使用 Django 的 i18n 设施(ugettext 等)来提供对某些输出的翻译。该 API 提供一个单页 Javascript 应用程序,该应用程序通过 CLDN/消息文件等使用 jQuery 的 Globalize 及其自己的消息传递工具。

目前,我为 Globalize 的消息模块以 JSON 文件的形式为 UI 生成了自己的语言文件。
理想情况下,我想从一个位置驱动所有可翻译文本。我希望使用 Django 作为可翻译语言的唯一真实来源(因为我可以使用 Rosetta 作为促进翻译的一种方式)。然而,如何让两者一起工作并不是那么简单,我试图避免在它们可能已经存在的地方发明我自己的约定,以防止将来与其他开发人员混淆。

首先,有些文本块比几个单词还大。使用 Django 的 ugettext 我应该提供要翻译的文本或作为参数显示的文本 - 仅提供一个键并要求翻译存在(否则,只显示键)是否是好的约定?

其次,这种用例是否有既定的约定?
如果规范对这种情况有意义,我不想重新发明轮子或偏离规范。

第三- 我应该在两者之间做出选择吗?或者翻译是否可以存在于 Django/API 世界中,然后在 UI 请求时输出为 Globalize/messages 格式?或者我应该使用 Django 为 Javascript 提供的 gettext 实现?

谢谢

django internationalization django-i18n django-rosetta jquery-globalize

5
推荐指数
1
解决办法
421
查看次数

Django url 更改语言代码

当用户单击 Django 中的按钮时,我试图更改网站的语言。

\n\n

我有一个基础项目,网址是:

\n\n
urlpatterns += i18n_patterns(\n    # Ecommerce is the app where I want to change the language\n    url(r\'^\', include("ecommerce.urls")),\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

Ecommerce.urls 内的 url 是:

\n\n
urlpatterns = [\n    url(r\'^testing/$\', views.test, name=\'url_testing\'),\n    ... other urls\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我访问上面的网址时,我首先访问:http://localhost/en/testing/

\n\n

我想设置一个链接<a href="{% url \'url_testing\' %}">Change Language</a>,以便当用户单击它时,它会将语言更改为http://localhost/zh-hans/testing/. 如何在我的模板中执行此操作?

\n\n

编辑

\n\n

我现在可以使用以下代码更改语言,但问题是它只能工作一次:

\n\n
<form id="languageForm" action="/i18n/setlang/" method="post">\n    {% csrf_token %}\n    <input name="next" type="hidden" value="{% url \'url_testing\' %}" /> \n    <input id="newLanguageInput" type="hidden" name="language"/>\n</form>\n
Run Code Online (Sandbox Code Playgroud)\n\n …

python django django-i18n

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