Django サイトにロシア語の翻訳をインストールしようとしています。
私がしたこと: 「locale」フォルダーで、他の言語と一緒に「ru」フォルダーを作成し、その中に「LC_MESSAGES」フォルダーを作成し、そこに翻訳を含む「django.po」ファイルを配置しました。翻訳は Excel ファイルとして提供されたので、その .po ファイルを手動で作成しました。その .po ファイルで、同じプロジェクトの別の .po ファイルで見つけたヘッダーをコピーし、スクリプトを使用して、Excel ファイルからこの情報を抽出する 'msgid' / 'msgstr' ペアを作成しました。私はファイルをチェックし、いくつかのエラーを手動で修正した後、正しいように見え、コンパイルメッセージを実行してもエラーは発生せず、.mo ファイルが作成されました。次に、設定ファイルに言語として「ru」を追加しました。次に、ホームページをリロードすると、言語を切り替えるために使用するウィジェットにロシア語が表示されました。しかし、クリックするとページがリロードされ、Unicode エラーが発生します。
いくつかのコンテキスト: サイトは英語ですが、スペイン語の翻訳が既にインストールされており、ASCII 以外の文字で適切に動作しています。
完全な解決策でなくても、それをデバッグする方法だけでも大歓迎です。
エラー: 'ascii' コーデックは位置 0 のバイト 0xd0 をデコードできません: 序数が範囲内にありません (128)。() を渡しました
私が発見したことから、これは ugettext lazy の問題ですが、私が理解していないのは、他の翻訳で機能する理由です...
Django から Unicode のヒントを取得します。エンコード/デコードできなかった文字列は次のとおりです: ������ この文字列は、読み込もうとしているページに応じて変化します。
トレースバックは次のとおりです。
Traceback:
File "/home/env/project/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
136. response.render()
File "/home/env/project/lib/python2.7/site-packages/django/template/response.py" in render
96. self._set_content(self.rendered_content)
File "/home/env/project/lib/python2.7/site-packages/django/template/response.py" in rendered_content
75. content = template.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render
123. return self._render(context)
File "/home/env/project/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
57. return self.nodelist.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/loader_tags.py" in render
127. return compiled_parent._render(context)
File "/home/env/project/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
57. return self.nodelist.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/loader_tags.py" in render
127. return compiled_parent._render(context)
File "/home/env/project/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
57. return self.nodelist.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/loader_tags.py" in render
64. result = block.nodelist.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/home/env/project/lib/python2.7/site-packages/django/templatetags/i18n.py" in render
76. return _render_value_in_context(output, context)
File "/home/env/project/lib/python2.7/site-packages/django/template/base.py" in _render_value_in_context
777. value = force_unicode(value)
File "/home/env/project/lib/python2.7/site-packages/django/utils/encoding.py" in force_unicode
93. raise DjangoUnicodeDecodeError(s, *e.args)
Exception Type: DjangoUnicodeDecodeError at /
Exception Value: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128). You passed in <django.utils.functional.__proxy__ object at 0x9f3f16c> (<class 'django.utils.functional.__proxy__'>)
編集:
一からやり直してみました。「makemessages」コマンドを試すために手動で作成したロケール フォルダーと .po ファイルを削除しましたが、そのコマンドの実行中に次のエラーが発生しました。
processing language ru
Traceback (most recent call last):
File "./manage.py", line 15, in <module>
execute_manager(settings)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/home/env/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/commands/makemessages.py", line 365, in handle_noargs
make_messages(locale, domain, verbosity, process_all, extensions, symlinks, ignore_patterns, no_wrap, no_obsolete)
File "/home/env/project/lib/python2.7/site-packages/django/core/management/commands/makemessages.py", line 233, in make_messages
f.write(templatize(src, orig_file[2:]))
File "/home/env/project/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 127, in templatize
return _trans.templatize(src, origin)
File "/home/env/project/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 450, in templatize
content = u''.join(comment)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)
したがって、明らかに何かがどこかで間違っているに違いありません。探し続けます。
編集:
「makemessages」ツールは、翻訳対象としてマークされているかどうかに関係なく、テンプレート内の非 ASCII 文字を処理できないようです。私はそれらをかなり多く見つけましたが、それらをどうするかまだわかりません。見つけ次第、ここに報告します。