2012-01-07 21 views
6

Có thể tôi đang xem một giải pháp rõ ràng hoặc suy nghĩ sai ...Nhận văn bản có thể dịch từ nguồn bên ngoài vào danh mục

Tôi có một số lượng giới hạn văn bản, từ trong cơ sở dữ liệu, mà tôi muốn hiển thị đã dịch cho người dùng trong webapp/jinja/babel webapp. ví dụ. "chạy" là một giá trị có thể có của cột "hoạt động" và cần được "laufen" cho người dùng tiếng Đức của tôi.

Từ trong mẫu và mã được trích xuất và đưa vào danh mục, nhưng làm cách nào để nhận được các từ bổ sung vào danh mục? Có một bộ giải nén tập tin văn bản đơn giản?

Điều duy nhất tôi có thể nghĩ đến là, chỉ cần tạo một tệp .py và đặt nhiều dòng _ ('...') vào chúng, nhưng điều đó cảm thấy sai ... phải không?

+0

Những từ này có trong cơ sở dữ liệu được định nghĩa là enums không? – plaes

+0

Có, nhưng đừng giới hạn bản thân với các cơ sở dữ liệu hoặc cơ sở dữ liệu cho vấn đề đó. Một kịch bản khác có thể là hệ thống bên ngoài, có thể gửi JSON tới hệ thống của tôi, với một số từ nhất định, tôi cần dịch, * không bao giờ * xuất hiện trong * mã * của tôi, nhưng chỉ trong các thư đến. Tôi * biết * những từ đó từ các thông số API, nhưng tôi muốn tránh đặt chúng trong mã của tôi là '_ ('word')', chỉ để được gettext chọn. Tôi đoán tôi sẽ chỉ sử dụng tệp văn bản đau với một từ trên mỗi dòng và viết chức năng trích xuất của riêng tôi cho nó. – Florian

Trả lời

3

Tôi tạo ra một messages.txt với "chữ" của tôi như chức năng gettext gọi:

_('cycling') 
_('running') 

và thêm nó vào babel.cfg của tôi như là nguồn python:

[python: messages.txt] 

đơn giản, đơn giản, ngu ngốc, nhưng hoạt động.

1

Trước tiên, hãy bắt đầu với http://flask.pocoo.org/snippets/4/.

Thứ hai, bạn cần lưu trữ các giá trị 'hạn chế' là số nguyên hoặc enums trong cơ sở dữ liệu và sau đó tạo ra các bảng tra cứu cho tất cả những enums trong mã (để Babel biết về họ):

i18n_val = {0: _('running'), ...} 
# Or multi-level dict with different categories: 
i18n_all = { 
    'activity': { 
    0: _('running'), ... 
    'foo': { 
    0: _('bar..'), ... 
    } 
} 

Và truy cập chuỗi dịch từ mẫu tại là đơn giản như:

{{ i18n_val[obj.activity] }} 
{{ i18n_all['activity'][obj.activity] }} 

để làm cho i18n_vali18n_all biến sẵn cho tất cả các mẫu, chỉ cần đăng ký với context processors.

+0

Phần thứ hai là phần tôi gặp vấn đề. Tôi không muốn lấy tất cả văn bản đó từ cơ sở dữ liệu và sao chép nó ở đâu đó trong mã bằng tay. Đó là bit cuối cùng, tôi thực sự giải quyết bằng cách sử dụng bộ lọc "| trans", tìm kiếm bản dịch. – Florian

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