2008-12-14 37 views
9

Xin chào, tôi hiện đang làm việc trên ứng dụng django cho các nghiên cứu của tôi và đã đến thời điểm l18n. Bản địa hóa trang web là rất dễ dàng, nhưng bây giờ tôi phải cho phép người dùng, dịch nội dung động của ứng dụng. Người dùng có thể lưu "sản phẩm" trong cơ sở dữ liệu và cung cấp cho họ tên và mô tả, nhưng vì toàn bộ trang web phải được bản địa hóa, tôi phải cung cấp cách dịch tên và mô tả cho người dùng.Cách bản địa hóa Nội dung của ứng dụng Django

Có cách nào tự nhiên trong django để thực hiện việc này không? Hoặc làm tôi phải nhận ra nó như là một phần của ứng dụng (bằng cách đại diện cho các bản dịch trong DataModel)

Cảm ơn, Janosch

Trả lời

10

Tôi khuyên bạn nên xem django-multilingual. Nó là một ứng dụng của bên thứ ba cho phép bạn xác định các trường dịch trên các mô hình của bạn.

Tất nhiên, bạn vẫn phải nhập vào bản dịch thực sự, nhưng chúng được lưu trữ trong suốt trong cơ sở dữ liệu (trái ngược với tệp PO tĩnh), đó là những gì tôi tin bạn đang hỏi.

0

Nó phụ thuộc vào những người sẽ cung cấp các bản dịch. Nếu bạn muốn cung cấp một giao diện web để dịch, thì bạn cần phát triển bản thân, và cũng đại diện cho các bản dịch trong cơ sở dữ liệu.

Nếu cùng một dịch giả dịch trang web cũng sẽ dịch dữ liệu, bạn có thể cung cấp cho họ cùng một mô hình mà họ sử dụng cho trang web (có lẽ là gettext) và sau đó bạn có thể sử dụng gettext cho nội dung này.

1

"tôi phải cung cấp cách dịch các tên và mô tả cho người dùng."

"Có cách nào tự nhiên trong django để thực hiện việc này không?"

Bạn có hỏi liệu Django có thể dịch từ ngôn ngữ này sang ngôn ngữ khác không? Bạn đang hỏi về một cái gì đó như http://translate.google.com/?

Tôi không nghĩ Django có thể dịch đầu vào của người dùng sang ngôn ngữ khác.

Nếu bạn định thực hiện bản dịch cho người dùng của mình, đây phải là một phần của mô hình dữ liệu của bạn.

Bộ lọc i18n của Django cho phép bạn có một bảng chuỗi dịch. documentation nói điều này.

  1. Nhúng chuỗi dịch vào mã và mẫu Python của bạn.
  2. Nhận bản dịch cho các chuỗi đó, trong bất kỳ ngôn ngữ nào bạn muốn hỗ trợ. Đây là việc bạn làm theo cách thủ công, bằng cách thuê người dịch hoặc tự biết nhiều ngôn ngữ.
  3. Kích hoạt phần mềm trung gian miền địa phương trong cài đặt Django của bạn.
5

tôi sử dụng django-multilingual cho nội dung bản địa hóa và django-localeurl cho việc lựa chọn ngôn ngữ dựa trên url (ví dụ mypage/en /).

Bạn có thể xem cách multilingua và localeurl hoạt động trên trang JewishKrakow.net.

0

Cũng đang tìm plugin nội dung hóa nội dung hoặc cách viết plugin. thể thêm vào danh sách django-i18n-model

0

Tôi nghĩ bạn nên vận hành theo hai bước:

  1. dịch Nhận
  2. Hiện dịch chuỗi

Đối với bước đầu tiên, bạn nên nói với Django rằng các chuỗi do người dùng chèn sẽ được dịch. Tôi nghĩ rằng không có cách nào để làm như vậy. Có lẽ bạn có thể trích xuất các chuỗi từ db của bạn đặt chúng trong các tập tin địa phương cụ thể, chạy 'makemessages' trên chúng, tập tin django.po obtaint và dịch.

Thứ hai, sử dụng ugettext để hiển thị các chuỗi đó trên ứng dụng web của bạn.

Hy vọng điều này có thể giúp những người có cùng vấn đề với bạn.

0

Hoặc thử này:

http://packages.python.org/django-easymode/i18n/index.html

Nó sẽ nằm rất gần với cách bạn thường làm một mô hình django, bạn chỉ cần thêm 1 trang trí trên mô hình của bạn. Nó có hỗ trợ quản trị cho các trường đã dịch, bao gồm inlines và inlines chung. Hầu như bất cứ điều gì bạn có thể làm với các mô hình thường xuyên và các lớp quản trị bạn có thể làm với các phiên bản quốc tế.

+0

Bạn đã thử nghiệm giải pháp trong sản xuất và nó so sánh với django-đa ngôn ngữ như thế nào? Tôi đang chọn một cách tiếp cận mới để bản địa hóa các lĩnh vực cơ sở dữ liệu kể từ khi django-đa ngôn ngữ không hoạt động trên Django 1.2+ và django-đa ngôn ngữ trông hoàn toàn chết. – stricjux

+1

có, điều này được sử dụng trong sản xuất trên nhiều trang web. Lý do duy nhất nó có trạng thái beta là bộ thử nghiệm chưa có mức độ phù hợp 100%. – specialunderwear

1

Tôi có 2 ngôn ngữ trên trang web của mình: Tiếng Anh và tiếng Ả Rập Người dùng có thể chuyển đổi giữa các ngôn ngữ nhấp vào cờ. Trong mô hình tôi sử dụng một mô hình proxy:

class Product(models.Model): 
    name=models.CharField(max_length=100) 
    name_ar=models.CharField(max_length=100, default='') 

    def __unicode__(self): 
     return self.name 

class Product_ar(Product): 
    def __unicode__(self): 
     return self.name_ar 
    class Meta: 
     proxy=True 

Trong hình thức tôi sử dụng 2 hình thức thay vì một:

class CollectionEditForm_en(forms.Form): 
    name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'})) 
    product = forms.ModelChoiceField(label=_('product'), queryset=Product.objects.filter(enabled=True), empty_label=None) 

class CollectionEditForm_ar(forms.Form): 
    name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'})) 
    product = forms.ModelChoiceField(label=_('product'), queryset=Product_ar.objects.filter(enabled=True), empty_label=None) 

Trong ngôn ngữ kiểm tra code theo cách này:

if request.LANGUAGE_CODE=='ar': 
    CollectionEditForm=CollectionEditForm_ar 
else: 
    CollectionEditForm=CollectionEditForm_en 

Vì vậy, trong các mẫu tôi kiểm tra:

{% if LANGUAGE_CODE == "ar" %} 
    <a href="/product/{{product.alias}}/">{{product.name_ar}}</a> 
{% else %} 
    <a href="/product/{{product.alias}}/">{{product.name}}</a> 
{% endif %} 

Hy vọng giải pháp này sẽ giúp ai đó

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