1

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 文字を処理できないようです。私はそれらをかなり多く見つけましたが、それらをどうするかまだわかりません。見つけ次第、ここに報告します。

4

1 に答える 1

0

Django 1.4.5 に更新したところ、問題は完全に解消されました。.po ファイルは適切に生成され、コンパイルもうまくいきます。

于 2013-04-11T23:16:25.453 に答える