2012-03-06 4 views
7

Tôi cần trích xuất thư từ tệp .po. Có một mô-đun python để làm điều đó? Tôi viết một trình phân tích cú pháp, nhưng nó phụ thuộc vào nền tảng (như \ r \ n, \ n), vì vậy có lẽ có một số cách bình thường để làm điều đó?phân tích cú pháp các tệp gettext .po với python

Trả lời

0

Babel bao gồm một phân tích cú pháp file .po viết bằng Python:

http://babel.edgewall.org/

Việc xây dựng trong mô-đun gettext chỉ làm việc với các file .mo nhị phân.

-2

Sử dụng mô-đun gettext dựng sẵn: http://docs.python.org/library/gettext.html

Nó xuất hiện đối với tôi như là kết quả tìm kiếm đầu tiên trong Google sau khi cung cấp python gettext. Nếu bạn tự hỏi liệu đây có phải là những gì bạn đã tìm kiếm hay không, thì đúng vậy.

+1

'gettext' là tuyệt vời, nhưng nó chỉ làm việc với biên soạn' file mo', không đơn giản text 'những po' – MestreLion

17

Trong hầu hết các trường hợp, bạn không cần tự phân tích cú pháp các tệp .po. Nhà phát triển cung cấp cho người dịch một tệp mẫu .pot, họ đổi tên thành xx_XX.po và dịch các chuỗi. Sau đó, bạn là nhà phát triển chỉ cần "biên dịch" họ .mo file sử dụng gettext công cụ GNU (hoặc thực hiện Python của nó, pygettext)

Nhưng, nếu bạn muốn/cần phải phân tích po tập tin bản thân, thay vì biên dịch chúng tôi khuyên bạn nên sử dụng polib, một thư viện trăn nổi tiếng để xử lý các tệp po. Nó được sử dụng bởi một số dự án quy mô lớn, chẳng hạn như động cơ Launchpad dịch Mercurial và Ubuntu:

PyPi gói nhà: http://pypi.python.org/pypi/polib/

kho Code: https://bitbucket.org/izi/polib/wiki/Home

Tài liệu: http://polib.readthedocs.org

Mô-đun nhập là một tệp duy nhất, với giấy phép MIT, vì vậy bạn có thể dễ dàng kết hợp nó trong mã của bạn như sau:

import polib 
po = polib.pofile('path/to/catalog.po') 
for entry in po: 
    print entry.msgid, entry.msgstr 

Nó không thể được dễ dàng hơn đó;)

+1

@saeedgnu: có lẽ bạn có thể giúp cải thiện nó? 'polib' là thư viện được sử dụng rộng rãi nhất để thao tác các tệp po, và nó được duy trì tích cực, vì vậy bất kỳ cải tiến nào cũng sẽ có lợi * rất nhiều * phần mềm – MestreLion

+0

Tôi nghĩ nó có nghĩa là theo cách này, chương trình sử dụng nó có thể thêm một số mục sau tải tập tin po (hoặc tạo một đối tượng pofile mới), tất cả trong bộ nhớ – saeedgnu