2011-05-27 94 views
1

我使用Django 1.3。 我有一個乾淨的項目有:Django 1.3中的i18n不適用於我

settings.py

import os, sys 

# absolute path to the project 
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__)) 

    # add to PYTHONPATH 
    sys.path.append(os.path.join(PROJECT_ROOT, "apps")) 

LANGUAGE_CODE = 'ru-ru' 


    USE_I18N = True  
    USE_L10N = True 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT,'templates'), 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'i18n_app', 
) 

urls.py

urlpatterns = patterns('', 
    url(r'^$', 'i18n_app.views.test'), 
) 

i18n_app/views.py

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def test(request): 

    return render_to_response('i18n_app/test.html', context_instance=RequestContext(request)) 

模板/ i18n_app /測試。 html

{% load i18n %} 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
{% trans "String for trans" %} 
<br> 
<br> 
<br> 
{% blocktrans %}And one more{% endblocktrans %} 
</body> 
</html> 

從項目的根我運行這個命令:

D:\Django\projects\testi18n>django-admin.py makemessages -l ru 
processing language ru 

然後我填寫這是該命令後創建的文件django.po做:

D:\Django\projects\testi18n>django-admin.py compilemessages --traceback 
processing file django.po in D:\Django\projects\testi18n\conf\locale\ru\LC_MESSAGES 

但我只看到它的英文字符串。 我發現了太多的問題,但沒有人對我沒有幫助。

我在做什麼錯了?

回答

5

添加到您的設置:

ugettext = lambda s: s 
LANGUAGES = (
    ('ru', ugettext('Russian')), 
    ('en', ugettext('English')), 
) 

創建您的項目命名爲locale目錄

然後從你的項目目錄下運行一個空文件夾:

django-admin.py makemessages -l ru 

該命令將在locale文件夾內創建一個.po文件。打開該文件d填寫空的msgstr ""字段,並在上面填寫msgid字段的所需譯文。 這是您在.html文件中定義您標記爲翻譯的字符串的翻譯的位置。

寫你的字符串翻譯後運行:

django-admin.py compilemessages 
+0

是的,你是對的。我在我的項目目錄config/locale中創建了它,但它不起作用。但目錄區域設置正常 – tony 2011-05-27 13:07:45

+0

在嘗試了幾個其他提示後,終於奏效了!謝謝! – damienix 2013-12-01 13:50:18

0

看起來你的settings.py中缺少LANGUAGES設置。嘗試把在類似的東西:

ugettext = lambda s: s 
LANGUAGES = (
    ('ru', ugettext('Russian')), 
    ('en', ugettext('English')), 
) 

除了確保「django.core.context_processors.i18n」是你的MIDDLEWARE_CLASSES設置,否則您將無法更改語言。詳細信息請參見docs

我不明白 - 爲什麼在項目目錄中使用django-admin.py?基本上你應該在項目目錄中使用manage.py。

./manage.py makemessages -l ru 
+0

如果您有其他問題,則可以編輯原始帖子。這不是一個答案。 – 2011-05-27 13:07:08

1

Django的測試服務器需要重新啓動才能在帳戶區域設置文件更改/幽靈。否則翻譯將無法正常工作。

0

不要忘記將LOCALE_PATHS設置爲您的區域文件夾