2017-05-14 69 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。我翻譯了一些變量。其中一個看起來像v = 'string',然後_(v),另一個是我通過API獲得的文本變量。他們都沒有被Django發現,儘管第一個應該是。

UPD。這裏是項目結構(如遷移不重要的文件遺漏):

├── 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,設置和應用程序文件夾) –

+0

@Taras添加了結構。但是,這有什麼幫助? –

+0

@RyanSnow,哪些翻譯沒有被發現?在'安裝'應用程序下的那些?您介意顯示您的「設置」嗎? –

回答

1

您應該更新LOCALE_PATHS名單包括locale目錄你的應用程序中保存待翻譯模型。

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 
] 

然後,您應該手動創建區域結構中的應用下,這樣的:

myapp/locale/ru/LC_MESSAGES/ 

然後,運行./manage.py makemessages --all將看LOCALE_PATHS內聲明的每個locale目錄下,並創建那裏.po文件。你知道其餘的(./manage.py compilemessages)。

+0

中包含這個值,不幸的是,這並沒有幫助。也許這是因爲我在我的應用程序中使用變量? –

+0

什麼變量?請編輯您的問題並添加相關的代碼。我在本地測試它,並像魅力一樣工作。 –

+0

哦,對不起,男人,沒有看到你的評論。這是一個文本變量。在一個地方,它看起來像'v ='string'',然後是'_(v)'。在另一個地方,我嘗試翻譯通過API獲得的字符串變量,這可能是一個問題,但至少第一個變量應該由Django找到,事實並非如此。 –