Tiếng Việt trong Django model phiên bản 1.4

Mình theo tài liệu này để hiển thị tên Model trong phần quản trị của Django
https://docs.djangoproject.com/en/1.4/topics/i18n/translation/
của Django. Tuy nhiên, mình thấy dài dòng quá, đọc rất mất thời gian.
Mình tóm tắt lại như sau:

Bước 1,
Vào settings.py, đổi, hoặc thêm mới:
    LANGUAGE_CODE = ‘vi-vn’
    LOCALE_PATHS = (‘PATH_TO_LOCALE’,)
    USE_I18N = True

Bước 2:
Với mỗi Model
Thêm class Meta  với các trường thuộc tính
    verbose_name
    verbose_name_plural
Thêm verbose_name vào trường thuộc tính.
Ví dụ: name = models.CharField(max_length=128, verbose_name=_(“Category name”))

Bước 3,

Đứng tại thư mục  gốc của project
Tạo một thư mục là “locale”. Sau đó, chạy lệnh sau
$django-admin.py makemessages -l vi
Lệnh này sẽ tự động sinh ra file
locale/vi/LC_MESSAGES/django.po

Bước 4,
Mở file bằng PlainText Editor (Notepad++, EmEditor, …), dịch.
Chạy lệnh sau để complile thành file django.mo :
$django-admin.py compilemessages

Giới thiệu cơ bản về Decorator trong Python (Phần 1)

Trong ngôn ngữ Python, lập trình viên có thể làm được những thứ rất hay ho với “Functions”. Thực tế, “functions” là first-class objects, có nghĩa là bạn có thể làm gì với kiểu strings, integers, … thì bạn có thể làm được như vậy với Functions. Ví dụ, bạn có thể gán một Functions với một biến:
>>> def square(n):
... return n * n
>>> square(4)
16
>>> alias = square
>>> alias(4)
16

Sức mạnh thực sự của Functions đến từ việc Function được coi như first-class object. Như vậy một Functions có thể chập nhận một function khác làm biến đầu vào, và trả ra một function. Ví dụ, một hàm có sẵn trong Python là hàm map, bạn có thể truyền vào một list
và trả ra một list mới bằng cách gọi một hàm khác tương tác với từng phần tử trong list:
>>> numbers = [1, 2, 3, 4, 5]
>>> map(square, numbers)
[1, 4, 9, 16, 25]

Khi một function được truyền vào và gọi đến một function khác được gọi là Higher-order_function.
Ta có thể dùng Higher-order_function để thay đổi hành vi của Function khác.

“Decorators” được áp dụng từ Python 2.4 dùng để đóng gói Function (Higher-order-function). Cách thông thường để áp dụng Higher-order-function trước khi sử dụng Decorators như sau:
>>> class WhatFor(object):
... def it(cls):
... print 'work with %s' % cls
... it = classmethod(it)
... def uncommon():
... print 'I could be a global function'
... uncommon = staticmethod(uncommon)
...

Cú pháp như trên sẽ trở nên khó đọc khi mã nguồn phức tạp. Vì vậy, Decorators được sử dụng giúp cú pháp trong sáng hơn:
>>> class WhatFor(object):
... @classmethod
... def it(cls):
... print 'work with %s' % cls
... @staticmethod
... def uncommon():
... print 'I could be a global function'
...

>>> this_is = WhatFor()
>>> this_is.it()
work with
>>> this_is.uncommon()
I could be a global function

(Tôi sẽ trình bày tiếp trong phần sau …)

Tham khảo:
1, PythonDecoratorLibrary
2,Understanding Python decorators
3, Class decorators vs function decorators