2009-10-19 32 views
9

Tôi có chương trình với nhiều tên miền, một số tệp nguồn chứa dgettext() gọi với các miền văn bản khác nhau.gettext: trích xuất các chuỗi dgettext() thành các tệp domain.po

Cách trích xuất chuỗi gettext thành nhiều tệp .po? Ví dụ: hãy gọi số dgettext('one', 'Hello') phải truy cập one.po và dgettext('two', 'Bye') thành hai.po. xgettext chỉ bỏ qua miền văn bản và đặt mọi thứ vào một tệp.

+0

Tôi tìm thấy [gợi ý] (http://stackoverflow.com/a/5354360/645186) về cách phân tích từng miền riêng biệt. Tuy nhiên, đây là một giải pháp. – Shef

Trả lời

0

Nếu bạn đang sử dụng Linux, hãy sử dụng chương trình gtranslator để thao tác * .po và kiểm tra tệp * .po của bạn.

2

Trước tiên, bạn cần có cách tách các miền.

Ví dụ, giả sử bạn có một tên miền cho lib và một cho ứng dụng, sau đó tạo ra một phím tắt cho dgettext() cuộc gọi;

_app(msg) -> dgettext("app", msg); 

và một cho miền lib:

_lib(msg) -> dgettext("lib", msg); 

Thêm các cuộc gọi qua tất cả các mã của bạn, như thế này;

show_message(_app("Choose a directory to save your work.")); 
show_message(_lib("No space left on device.")); 

Hãy nhớ rằng bạn cần gọi bindtextdomain() cho cả hai tên miền khi khởi tạo ứng dụng của bạn.

Để trích xuất chúng, bạn cần phải xác định các từ khóa khác nhau để xgettext trên tất cả các tên tập tin trong cây nguồn của bạn có chứa các điểm đánh dấu:

xgettext --keyword=_app -d domain1 filenames... 
xgettext --keyword=_lib -d domain2 filenames... 

Cuối cùng, biên dịch cả các tập tin .po vào biến thể .mo nhị phân của họ và sao chép/cài đặt chúng vào đúng vị trí.

+0

Tôi đã biết giải pháp này, như đã đề cập trong các ý kiến ​​của câu hỏi, nhưng cảm ơn cho những nỗ lực. – Shef

+0

Nếu bạn nghĩ rằng đó là một cách giải quyết, tôi không nghĩ rằng sẽ có bất kỳ giải pháp cho vấn đề đó là không giải pháp. Cách khác là viết chương trình của riêng bạn để trích xuất các cuộc gọi dgettext(), nhưng sau đó bạn sẽ sao chép khá nhiều logic của xgettext. –

+1

Đây không phải là một giải pháp, nhưng tôi sẽ trao tiền thưởng cho bạn, bởi vì nó sẽ bị lãng phí nếu không. – Shef

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