9

わかりました、私はこれを狂ったように探していました。私は単純な問題だと思います。

Django1.4を使用しています

問題は、djangoがテンプレート内の単純な{%trans "work"%}を変換しないことです。

これは私がしたことです:

Settings.py:

LANGUAGE_CODE = 'en-us'
USE_I18N = True
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.request",
)

LOCALE_PATHS = (
    '/home/m00p/PycharmProjects/astrid/locale'
)

これは私のマップ構造です:

/
myproject/
apps/
locale/
template/

だから私は走った

django-admin.py makemessages -l nl -i settings.py

ロケールフォルダnl/LC_MESSAGES / django.poで正常に作成されたので、django.poで見つかった翻訳を編集します

#: templates/base.html:22
msgid "work"
msgstr "ddddddddddddd"

次に、コンパイルコマンドを実行します

django-admin.py compilemessages

また、正しいフォルダーにdjango.moファイルを正常に作成しました

これをmyproject/urls.pyにも追加しました

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'^$', 'front.views.home', name='home'),
)

言語を変更できるように、これをbase.htmlファイルに追加しました

<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="/" />
    <select name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

したがって、WebサイトにアクセスするとURLに127.0.0.1:8000/en/が含まれますが、これは正しいです。英語がデフォルトの言語であるため、フォームをNLに変更すると、127.0.0.1:8000にリダイレクトされます。 / nl /しかし、私が翻訳したテキストは変更されませんでした。また、{{LANGUAGE_CODE}}を表示するとNLと表示されるため、言語はNLであると確信しています。

なぜ変わらないのか誰か知っていますか?

ありがとうm00p

問題が解決しました

動作するのを忘れたものを追加するプロセス中に、デプロイメントサーバーを再起動しましたが、ブラウザーのキャッシュをクリアしなかったため、古いページを使用していました。そのため、Chromeでブラウザーデータをクリアすると、ページを再確認し、正しく翻訳された言語を変更しました。とにかく提案をありがとう!

4

4 に答える 4

12

新しいプロジェクトSportolioで作業しているときに、Django 1.5でこの問題を修正するために数時間を費やしましたが、LOCALE_PATHの最後にコンマがないことがわかりました。

LOCALE_PATHS = (
    '/path/to/my/project/locale/',
)

DjangoはLOCALE_PATHSが文字列ではなくタプルであることを期待しているため、これは非常に重要です。

私はそれが誰かの命を救うことを願っています:)

于 2014-03-27T18:12:12.833 に答える
5

Django 1.4では、プロジェクトルートのロケールディレクトリはサポートされなくなりました。LOCALE_PATHSデフォルトでは空の設定に追加する必要があります。Djangoの設定

ただし、ロケール生成に関連する管理コマンドは機能しているように見えるので、すでに実行したかどうかはわかりません。

于 2012-10-10T19:25:32.393 に答える
0

私も同じ状況でした。フレーズの一部は翻訳でしたが、それらのほとんどはキーを示しただけです。enとfaの2つの主要言語があります。どちらも同じ問題を抱えていました。私はすべての同じ問題と、djangoの翻訳に関するすべてのドキュメントをオンラインで確認しました。私はほとんどすべてを試したと言えます。唯一の違いは、本番サーバーでテストしていたことです。そして、私はサーバーをリロードしませんでした!したがって、この1行のコマンドで、私は悲惨な状況から抜け出しました。

sudo /etc/init.d/uwsgi reload

私が間違っていたのは、uwsgiではなくwsgiを再起動したことです。

私がやったことをしたいのなら、ここにあります:私はサーバー上でこの順序でステップを実行します:

django-admin makemessages -l en
django-admin makemessages -l fa

テストするペルシア語のフレーズといくつかの英語のテキストを追加します。

django-admin compilemessages
python manage.py clear_cache
python manage.py runserver

サーバーはエラーなしで実行されます。ただし、enまたはfaの変更は行われません。djangoが古いキャッシュからロードしているようです。そこで、キャッシュ全体を削除し、サーバーからすべてのファイルを削除して、プロジェクト全体を再度インストールしました。それでも同じ問題。

ラップトップでdjangoからメッセージを作成し、サーバーに送信しました。また、poファイルやmoファイルを生成するために、さまざまなテキストエディタやpoeditなどの翻訳ツールを試しました。それでも問題は現れ続けます。

トランスタグを使用して置き換え、いずれかで機能するかどうかを確認しました。

{% trans ' ' %}
{% trans " " %}
{% blocktrans %} {% endblocktrans %}
{% trans "xyz" az XYZ %} {{ XYZ }}
{{ _() }}

それらのどれも機能しませんでした!

しかし、サーバーをリロードすると、すべてが整頓されます。誰かのお役に立てば幸いです。

于 2016-07-23T21:21:38.240 に答える
0

コマンドキーを押す位置が重要です。

私の場合、これは私のプロジェクト構造です。

myproject/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    apps/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

次のように、mysiteフォルダーに電話makemessagesをかけると、次のようになります。

D:\...\myproject\mysite> python ../manage.py makemessages -all

HTMLの文字列は取得されません{% trans "str" %}
しかし、myprojectフォルダーでmakemessagesを呼び出すと、次のようになります。

D:\...\myproject> python manage.py makemessages -all

できます!{% trans "str" %}すべてをHTMLで検索します。
だからあなたがいる場所に注意してください。

于 2020-11-23T15:23:50.047 に答える