2017-05-14 17 views
0

Django i18nの仕組みを理解しようとしています。すでに公式と他のチュートリアルを読んでいる。問題はDjangoが.poファイルを生成するのですが、私のモデルとPythonスクリプトからのメッセージは含まれていません。(まあ、私はスクリプトと一緒に暮らす準備ができていますが、モデルを翻訳しなければなりません。ここに私の設定です:Djangoが翻訳メッセージを検索していません

LOCALE_PATHS = [ 
    os.path.join(BASE_DIR, 'locale'), 
    os.path.join(BASE_DIR, 'install', 'locale'), 
] 


LANGUAGES = (
    ('ru', _('Russian')), 
    ('en', _('English')), 
) 

MIDDLEWARE = [ 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

LANGUAGE_CODE = 'en' 

そして、ここではの.poファイル(「ロケール」フォルダをプロジェクトのルートに位置しています)です。ご覧のとおり

# SOME DESCRIPTIVE TITLE. 
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the PACKAGE package. 
# FIRST AUTHOR <[email protected]>, YEAR. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2017-05-12 12:26-0400\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" 
"10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%" 
"100>=11 && n%100<=14)? 2 : 3);\n" 

#: trackpost/settings.py:127 
msgid "Russian" 
msgstr "" 

#: trackpost/settings.py:128 
msgid "English" 
msgstr "" 

、それからだけの文字列が含まれています設定。モデルでは、ugettext_lazy as _を使用します。

これで3日間は戦っています。これがなぜ起こっているのか?

UPD。私はいくつかの変数を翻訳します。そのうちの1つはv = 'string'のようになり、次に_(v)と表示され、もう1つはAPIを介して取得するテキスト変数です。 Djangoによって発見されるものはありませんが、最初はそうでなければなりません。

UPD。ここではプロジェクトの構造がある(マイグレーションのような重要でないファイルは逃した):あなたが翻訳されるように、モデルを保持している、あなたのアプリのlocaleディレクトリを含めるようにLOCALE_PATHSリストを更新する必要があります

├── account 
│   ├── admin.py 
│   ├── apps.py 
│   ├── __init__.py 
│   ├── models.py 
│   ├── tests.py 
│   ├── urls.py 
│   └── views.py 
├── binder.py 
├── db.sqlite3 
├── install 
│   ├── admin.py 
│   ├── apps.py 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── locale 
│   │   └── ru 
│   │    └── LC_MESSAGES 
│   ├── models.py 
│   ├── tests.py 
│   ├── urls.py 
│   └── views.py 
├── locale 
│   └── ru 
│    └── LC_MESSAGES 
│     └── django.po 
├── manage.py 
├── nginx.conf 
├── nohup.out 
├── payments.py 
├── trackpost 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── settings.py 
│   ├── urls.py 
│   └── wsgi.py 
├── uwsgi.ini 
+0

あなたのアプリの構造を追加してください。 (manage.py、settings、appフォルダを含む) –

+0

@Tarasが構造を追加しました。しかし、どのように役立つだろうか? –

+0

@ RyanSnow、どの翻訳が発見されていないのですか? 'install'アプリの下にあるものは?あなたの '設定'を表示してもらえますか? –

答えて

1

。 、そして、

myapp/locale/ru/LC_MESSAGES/ 

LOCALE_PATHS内で宣言された各locale dirの下になります./manage.py makemessages --allを実行し、そこ.poを作成します。

LOCALE_PATHS = [ 
    os.path.join(BASE_DIR, 'locale'), 
    os.path.join(BASE_DIR, 'myapp', 'locale'), # translation lookup directory for "myapp" app 
    os.path.join(BASE_DIR, 'another_app', 'locale'), # translation lookup directory for "another_app" app 
] 

その後、手動でこのように、あなたのアプリケーションの下でロケール構造を作成する必要がありますファイル。あなたは残りを知っています(./manage.py compilemessages)。

+0

残念ながら、それは役に立たない。たぶん私は私のアプリで変数を使用しているのですか? –

+0

どのような変数ですか?あなたの質問を編集し、関連するコードを追加してください。私はそれをローカルでテストし、魅力的に働きました。 –

+0

ああ、申し訳ありませんが、男、あなたのコメントが表示されませんでした。これはテキスト変数です。 1つの場所では、 'v = 'string''、次に' _(v) 'のように見えます。別の場所では、私はAPIを介して取得した文字列変数を翻訳しようとしますが、それは問題になる可能性がありますが、少なくとも最初の変数はDjangoによって見つけられるべきです。 –

関連する問題