2009-07-16 29 views
11

Tôi đang thực hiện bản địa hóa ứng dụng Django.Làm cho quản trị viên Django sử dụng tên trường đã dịch

Trang web giao diện người dùng hoạt động tốt và trang quản trị Django cũng chọn ngôn ngữ đã chọn.

Nhưng nó chỉ áp dụng cài đặt ngôn ngữ ở một số địa điểm và sử dụng phiên bản tiếng Anh mặc định của tên trường và cột, mặc dù đã được dịch. Tại sao? Tôi làm cách nào để sử dụng tên đã dịch cho tên cột và trường trong giao diện quản trị?

Ví dụ:

class Order(models.Model): 
    OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 

    user = models.ForeignKey(User, name=_("User")) 
    payment = models.IntegerField(choices=self.OPTIONS, name=_("Payment")) 

Đối với mà tôi nhận được:

  1. dịch văn bản quản trị chuẩn như "Chào mừng" và "Thoát" ở
  2. Translated Options chọn hàng đầu cho việc thanh toán loại
  3. KHÔNG dịch tên cột và nhãn biểu mẫu cho các trường ("Người dùng", "Thanh toán")

Tôi đang sử dụng Django 1.0.2. Các văn bản không được dịch đã xuất hiện trong các tệp miền địa phương cùng với các văn bản hoạt động.

Câu hỏi phụ: có thể bản địa hóa tên ứng dụng không?

Trả lời

13

Hóa ra tôi đã đặt phiên bản đã dịch cho tên thay vì verbose_name.

này hoạt động:

class Order(models.Model): 
    OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 

    user = models.ForeignKey(User, verbose_name=_("User")) 
    payment = models.IntegerField(choices=self.OPTIONS, verbose_name=_("Payment")) 
+0

đâu đã làm 'cái tên self' trong 'tự. OPTIONS' đến từ đâu? Điều này không làm tăng một NameError? –

+0

@ChrisWesseling Tôi không giỏi về Python nhưng không tự giới thiệu bản thân mô-đun trong trường hợp này? OPTIONS được định nghĩa ngay trên "class Order" ... –

+0

Tham số đầu tiên của phương thức bound là chính đối tượng đó. Theo quy ước, điều này được đặt tên là self, nhưng 'self' không có từ khóa ma thuật như' this' là trong JavaScript hoặc PHP; nó phải được ràng buộc một cách rõ ràng. Nhưng tôi có thể sai. –

0

Có phải bạn đang sử dụng một ModelForm tùy chỉnh cho mô hình này (trong admin.py)? Bạn sẽ cần thêm giá trị gettext-ed cho nhãn của các trường bạn ghi đè.

Không thể đặt tên ứng dụng bản địa hóa, như Django 1.0 - không chắc chắn là 1.1.

7

Toma có câu trả lời đúng.

Nhưng Django hiện nhận đối số đầu tiên là tên tiết của trường, except cho các loại trường ForeignKey, ManyToManyFieldOneToOneField. Vì vậy, nếu bạn là lười biếng bạn cũng có thể viết:

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS) 

Bạn vẫn phải sử dụng một đối số từ khóa cho ví dụ ForeignKey, mặc dù:

user = models.ForeignKey(User, verbose_name=_("User")) 
+0

Cảm ơn bạn đã cập nhật! –

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