7

ここのpython初心者。ウェブサイトで英語と中国語をサポートしたい。だから私はジャンゴの本、第19章の国際化に従っています。しかし、それは私にはうまくいかないようです。文字列は中国語で表示され、まだ英語で表示されることを望んでいます。私のコードと設定は次のとおりです。

[設定.py]

LANGUAGE_CODE = 'zh-cn'
USE_I18N = True
USE_L10N = True
LANGUAGES = (
    ('en', 'English'),
    ('zh-cn', 'Chinese')
)

TEMPLATE_CONTEXT_PROCESSORS = {
        'django.core.context_processors.i18n',
}
    MIDDLEWARE_CLASSES = (
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

私のアプリのviews.pyでは、インデックスに言語コードを「zh-cn」として強制的に設定しました

def index( request ):
    response= render_to_response( 'index.htm' )
    response.set_cookie('django_language','zh-cn')
    return response

次に、index.htm の後に読み込まれる別のページに中国語の文字列が表示されることを願っています。

別のページが upload.html によってレンダリングされます

{% load i18n %}
<html>
<head>
{% block head %}

{% endblock %}
</head>
<body>
{% block body %}
<h1>{% trans 'Upload Demo' %}</h1>
{% endblock %}
</body>
</html>

その後、私は

django-admin.py makemessages -l zh-cn -e htm

私のdjangoプロジェクトフォルダーで、django.poをlocale/zh-cn/LC_MESSAGES/django.poで取得しました。コンテンツは次のようなものです

#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-05-10 18:33+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: uploader/template/base.htm:10
msgid "Upload Demo"
msgstr "上传文件"

その後、次のコマンドを呼び出して、メッセージ django-admin.py compilemessages をコンパイルします。

django.poのあるフォルダーにdjango.moファイルを取得しました

最初にインデックス ページにアクセスし、次に「Upload Demo」文字列 ID を持つ別のページにアクセスします。実際、私はまだそこに英語の文字列を見ています。

言語コードを印刷してデバッグを試みたところ、言語が正しく設定されていることがわかりました。

context = RequestContext(request) 印刷コンテキスト translation.activate('zh-cn')

最後に、私は

gettext locale/zh-cn/LC_MESSAGES/django.mo "Upload Demo"

本当に 'Upload Demo' を手に入れました。だから私は問題がここにあると思います。しかし、なぜこれが起こるのですか?私は本当に混乱しました。どんな体でも私を助けることができますか?

コメントやヘルプに深く感謝します。


gettext locale/zh-cn/LC_MESSAGES/django.mo "Upload Demo"

私は間違いを犯したと思います。上記のコマンドは、翻訳された文字列ではなく、文字列 ID として入力した文字列と同じ文字列を返します。上記のコマンドでは、「Upload Demo」です。つまり、上記のコマンドで「Upload Demo」を「bla bla」に変更すると、「bla bla」になります。

4

6 に答える 6

3

LANGUAGE_CODE が django_language と同じではないことがわかります。utils.py の get_language がアンダースコアの LANGUAGES を正しく処理していないと思います。get_language は zh-cn を返しますが、cn に分割しないでください。代わりに、zh-cn を zh_CN に変換する必要があります。

したがって、setting.py で以下のコードを使用する必要があります。

LANGUAGES = (
  ('en', _('English')),
  ('zh-cn', _('Simplified Chinese')),
)

ターミナルから次のコマンドを実行します

django-admin.py makemessages -l zh_CN
django-admin.py compilemessages

これは私にとって完璧に機能しています

于 2014-06-17T08:51:14.130 に答える
3

あなたのコードブロックは少し乱雑であるため、すべてを読むのは非常に困難です。しかし、.mo ファイルから始めたいと思うかもしれません。#, fuzzy注釈が含まれています。Fuzzy は、ビルド スクリプトが翻訳について確信が持てず、翻訳者 (=あなた) の注意が必要であることを意味します。#, fuzzyマークされたすべての翻訳をチェックすることから始めます。翻訳が正しい場合 (または間違った翻訳を修正した後)、#, fuzzy注釈を削除します。次に、もう一度コンパイル メッセージを実行します。これで問題が解決する可能性があります。

#, fuzzy
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2012-05-10 18:33+0800\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME \n" 
"Language-Team: LANGUAGE \n" 
"Language: \n" 
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

参照: django ファジー文字列の翻訳が表示されない

よろしく、 Wout

于 2012-05-10T09:34:27.623 に答える
1

同様の問題が発生しました。現在のディレクトリでcompilemessagesのみ動作しているようです。localeこれは救済策でした:

find . -name "locale" | while read VAR1; do CURR="``pwd``";cd $VAR1/..; echo "in $VAR1";django-admin.py compilemessages ; cd $CURR; done`
于 2015-01-14T18:14:40.833 に答える