2015-04-07 113 views
1

我的Web應用程序的默認語言代碼是韓語。Django:模板翻譯不起作用

我想在客戶的Accept-languageen-us時將其翻譯成英文。

我更喜歡使用模板翻譯,而不是Python代碼或i18n_urlpatterns

這是我的代碼。


Django的版本

1.7.7 

settings.py

... 

    def ABS_PATH(*args): 
     return os.path.join(PROJECT_DIR, *args)  

    LANGUAGE_CODE = 'ko' 
    ugettext = lambda s: s 
    LANGUAGES = (
     ('en', ugettext('English')), 
     ('ko', ugettext('Korean')), 
    ) 
    LOCALE_PATHS = (
     ABS_PATH('locale'),  # /var/www/mysite.com/locale 
    ) 
    USE_I18N = True 
    USE_L10N = True 

    ... 

    MIDDLEWARE_CLASSES = (
     'django.contrib.sessions.middleware.SessionMiddleware', 
     'django.middleware.locale.LocaleMiddleware', 
     'django.middleware.common.CommonMiddleware', 
     ... 
    ) 

    # `TEMPLATE_CONTEXT_PROCESSORS` have `django.core.context_processors.i18n` as default. 

views.py

def home(request): 
     return render_to_response('index.html', locals(), context_instance=RequestContext(request)) 

索引。上殼HTML

{% load i18n %} 
    ... 
    {% trans "Hello" %} 
    ... 

實現郵件文件

$ django-admin.py makemessages -l en


編輯消息文件上殼

$ django-admin.py compilemessages

Check file at /var/www/mysite.com/locale/en/LC_MESSAGES/django.mo

/var/www/mysite.com/locale/en/LC_MESSAGES/django.po

#: .../index.html:14 
    msgid "Hello" 
    msgstr "안녕" 

編譯消息文件210

重啓測試服務器

$ manage.py runserver


檢查通過瀏覽器

Accept-language : en-US,en;q=0.8,ko;q=0.6

Expectation : 안녕 

    Result : Hello 

當客戶端瀏覽器的Accept-language標頭爲en-us時,應該怎麼做才能顯示英文模板?

+0

我在Chrome瀏覽器的設置中更改了語言,並通過django_debug_toolbar的標題面板選中了「接受語言」。 –

回答

1

對不起,這是我的錯誤。我是多麼愚蠢..

ABS_PATH('locale')返回/var/www/mysite.com/mysite/locale

更改ABS_PATH('locale')/var/www/mysite.com/locale解決的問題

我希望上面的步驟可能是對他人有幫助的。

+0

謝謝,這是我的問題。我還沒有意識到必須在settings.py中設置LOCALE_PATHS才能使翻譯工作(開發服務器不會打印任何有關丟失路徑的警告!) – Escher