2013-05-27 40 views
9

Tôi đang gặp khó khăn trong việc quốc tế hóa ứng dụng của mình, vì vậy tôi trình bày ở đây một ví dụ tối thiểu khi triển khai của tôi không thành công.Ví dụ tối thiểu hóa quốc tế Django

Hãy xem xét các bước sau đây để tạo ra một trang web trong django với sự hỗ trợ quốc tế:

đi đến thư mục yêu thích của bạn tại nhà ga và:

django-admin.py startproject mysite 
cd mysite/ 
mkdir locale 
python manage.py startapp main 
# (1) modify mysite/urls.py 
# (2) modify main/views.py 
# (3) modify mysite/settings.py 
django-admin.py makemessages -l de 
# (4) modify locale/de/LC_MESSAGES/django.po 
django-admin.py compilemessages -l de 
python manage.py runserver 

nơi:

## (1) mysite/urls.py 
urlpatterns = patterns('', 
url(r'^$', 'main.views.home'), 
) 

## (2) main/views.py 
from django.http import HttpResponse 
from django.utils.translation import ugettext as _ 

def home(request): 
    return HttpResponse(_('Hello')) 

## (3) mysite/settings.py 
LANGUAGE_CODE = 'de' 

from django.conf import global_settings 
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + \ 
    ('django.core.context_processors.i18n',) # ensures all django processors are used. 

## (4) locale/de/LC_MESSAGES/django.po 
#: main/views.py:6 
msgid "Hello" 
msgstr "Hallo" 

tôi giả trang web có một số và chỉ một ngôn ngữ, do đó, tôi đã không kích hoạt miền địa phương trung gian bằng django documentation:

Nếu bạn muốn cho phép mỗi người dùng riêng biệt chỉ định ngôn ngữ anh ta hoặc cô ấy thích, hãy sử dụng LocaleMiddleware. LocaleMiddleware cho phép ngôn ngữ lựa chọn dựa trên dữ liệu từ yêu cầu. Tùy chỉnh nội dung cho mỗi người dùng.

Triển khai này không tạo bản dịch mong muốn "Hello" thành "Hallo". Tôi đang làm gì sai?

+0

Nếu bạn truy cập bảng điều khiển quản trị Django, có phải bằng tiếng Đức không? Bạn đã cố gắng đặt 'LOCALE_PATHS'? https://docs.djangoproject.com/en/dev/ref/settings/#locale-paths –

+0

@ andrea.ge: từ những gì tôi hiểu từ tài liệu django, đây phải là các bước tối thiểu để dịch ... Tôi đã thử LOCAL_PATHS, không thành công và tôi đã không cố gắng quản trị vì nó yêu cầu DB, mà tôi không sử dụng ... –

+0

Bạn đã đặt đường dẫn nào cho 'LOCALE_PATHS'? –

Trả lời

10

Django thu thập các bản dịch trong các 3 cách giải thích ở đây: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

Các thư mục được liệt kê trong LOCALE_PATHS có ưu tiên cao nhất, với những người xuất hiện đầu tiên có độ ưu tiên cao hơn so với những người xuất hiện sau đó.

Sau đó, nó sẽ tìm và sử dụng nếu nó tồn tại một thư mục miền địa phương trong mỗi ứng dụng được cài đặt được liệt kê trong INSTALLED_APPS. Những người xuất hiện đầu tiên có ưu tiên cao hơn so với những người xuất hiện sau này.

Cuối cùng, bản dịch cơ sở do Django cung cấp trong django/conf/locale được sử dụng làm dự phòng.

Kể từ tập tin dịch của bạn là trong không ai trong số những nơi bạn cần phải thiết lập nó bằng tay sử dụng LOCALE_PATHS như đã giải thích ở đây: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOCALE_PATHS

+0

Rất cảm ơn và đã dành thời gian giải quyết vấn đề! –

+1

đây là những gì đã sửa nó cho tôi: trong settings.py thêm LOCALE_PATHS = ('/ mysite/locale',) – max4ever

21

1º Enable Quốc tế hóa trong settings.py:

USE_I18N = True 

2º Trên cài đặt, nhập:

from django.utils.translation import ugettext_lazy as _

3º Đặt những ngôn ngữ mà bạn sẽ sử dụng trong settings.py:

LANGUAGES = (
    ('en', _('English')), 
    ('pt-br', _('Portuguese')), 
    ('it', _('Italian')), 
    ('fr', _('French')), 
    ('es', _('Spanish')), 
) 

3º Cấu hình LOCALE_PATH trong cài đặt.py quá:

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'conf/locale'), 
) 

4º Bên trong con đường bạn đã cấu hình trong LOCALE_PATH tạo các thư mục, ví dụ:

$ cd django_project_folder 
$ mkdir conf 
$ mkdir conf/locale 

5º Chạy lệnh:

django-admin.py makemessages -a 

Nó sẽ tạo ra một tập tin .po bên trong thư mục con của từng ngôn ngữ được đặt trong settings.py LANGUAGES. Thực hiện các bản dịch của mỗi câu bên trong tệp.

Ps: Chạy trên toàn bộ cây nguồn của thư mục hiện tại và kéo ra tất cả các chuỗi được đánh dấu để dịch.

Đối với kiểm tra, trước khi chạy, đưa thẻ

{% trans "Welcome to my project!" %} 

bên index.html của bạn và chạy makemessages lệnh một lần nữa. Bạn sẽ thấy bên trong de .po file một chuỗi mới:

msgid "Welcome to my Project" 
msgstr "" 

6º Bây giờ, hãy chạy lệnh:

django-admin compilemessages 

Nó sẽ thu thập tất cả msgstr từ .po tập tin và sẽ biên dịch trong một .mo nộp

7º Chạy dự án và kiểm tra

8ª Plus: Nếu bạn muốn điều đó trong URL chương trình ngôn ngữ gì người dùng đang sử dụng bạn có thể cấu hình url.py của bạn để chứng minh rằng:

012.
urlpatterns += i18n_patterns(
    # your urls here, 
) 
+0

Sau khi thêm mẫu url vào urls.py nó bắt đầu hiển thị lỗi không tìm thấy trang. –

+0

Cùng một vấn đề với tôi. Tôi đã mở [câu hỏi] (https://stackoverflow.com/questions/44502117/url-rendered-as-home-page-after-internationalization) – J0ANMM

Các vấn đề liên quan