在 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.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) 我在 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)
也许我必须编写自己的模板标签......
我正在做一个项目,我在前端使用 React js,后端使用 Django。我需要实现i18n 国际化和本地化 我看到了 Django 文档并遇到了 django I18n javascript_catalog。如何在 React JS 中使用 getText() 使用相同的内容?有没有其他实现方式?
提前致谢
我有一个模板,我想在其中翻译一个字符串。
{% 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-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)
当然,删除该行可以修复错误并使其消失.
如何防止添加此行?
按照翻译 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) 我正在努力让我的网站翻译加快速度,并且我的模板中已经有.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)
但它不会填充这些字段
我有一个基于 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
当用户单击 Django 中的按钮时,我试图更改网站的语言。
\n\n我有一个基础项目,网址是:
\n\nurlpatterns += i18n_patterns(\n # Ecommerce is the app where I want to change the language\n url(r\'^\', include("ecommerce.urls")),\n)\nRun Code Online (Sandbox Code Playgroud)\n\nEcommerce.urls 内的 url 是:
\n\nurlpatterns = [\n url(r\'^testing/$\', views.test, name=\'url_testing\'),\n ... other urls\n]\nRun Code Online (Sandbox Code Playgroud)\n\n当我访问上面的网址时,我首先访问:http://localhost/en/testing/。
我想设置一个链接<a href="{% url \'url_testing\' %}">Change Language</a>,以便当用户单击它时,它会将语言更改为http://localhost/zh-hans/testing/. 如何在我的模板中执行此操作?
编辑
\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>\nRun Code Online (Sandbox Code Playgroud)\n\n … django ×10
django-i18n ×10
python ×4
translation ×2
django-forms ×1
gettext ×1
po ×1
reactjs ×1