2010-08-03 18 views
5

Tôi đã mã hóa một trình bao bọc gettext làm cho toàn bộ quá trình l10n trở nên đơn giản hơn một chút nhưng bằng cách nào đó tôi không thể nhận được PoEdit để xác định chính xác và phân tích các cuộc gọi phiên bản số nhiều đến hàm. Đây là những gì tôi ban đầu có:Làm thế nào để làm cho PoEdit phân tích cú pháp tùy chỉnh "ngettext" một cách chính xác?

_e(array('%d house', '%d houses'), 5); 

Nhưng điều đó không có tác dụng gì cả, PoEdit không chọn gì cả. Tôi cũng đã cố gắng:

_e('%d house', '%d houses', 5); 

thời gian PoEdit này bắt %d house nhưng không phải là dạng số nhiều của %d houses, tuy nhiên nếu tôi cố gắng giống hệt nhau nhưng với một ngettext() gọi nó hoạt động hoàn hảo, cả dạng số ít và số nhiều được xác định:

ngettext('%d house', '%d house', 5); 

Tôi đã thêm chính xác (?) Thêm từ khóa _e vào cài đặt dự án, nhưng không nhận các biến thể số nhiều. Tôi cũng nhận thấy rằng PoEdit chỉ có _, gettextgettext_noop làm công cụ khóa mặc định để chọn, không có tham chiếu nào tới các chức năng ngettext, dngettext hoặc dcngettext nhưng vẫn có thể nhận các cuộc gọi ngettext chính xác ... tôi tự hỏi nếu PoEdit đã mã hóa cứng từ khóa ngettext - điều đó sẽ thực sự buồn.

Dù sao, có cách nào để tạo PoEdit (hoặc bất kỳ ứng dụng tương tự nào khác), phân tích chính xác các chức năng tùy chỉnh không?

+0

Bạn có ít nhất Poedit 1.3.0 không? –

+0

@Alexandre: Poedit 1.4.6 (Windows). –

+0

Tôi tìm thấy liên kết này (http://www.devcomments.com/Zend_Translate-plural-forms-and-poedit-at188420.htm) có vẻ như không thể thực hiện được. Có lựa chọn thay thế nào không? –

Trả lời

0

Đây là một giải pháp khác, nó là rất dễ dàng để cài đặt. Chỉ cần thực hiện theo các bước bên dưới:

Menu: Danh mục -> Cài đặt sẽ mở hộp thoại Cài đặt. Trên tab Thông tin dự án, bạn sẽ tìm thấy "Dạng số nhiều" ở dưới cùng. Chỉ cần sao chép & dán dòng sau vào trường này:

nplurals=2; plural=n != 1; 

Điều đó sẽ khắc phục sự cố một cách hoàn hảo. Tôi thậm chí không phải quét lại các nguồn; các dòng chính xác sẽ tự động xuất hiện trong PoEditer.

+1

Tôi không nghĩ rằng bạn đã hiểu câu hỏi của tôi. –

3

Thực ra bạn cần thực hiện cả hai điều trên.

  • Xác định từ khóa như '_e: 1,2' VÀ
  • Thêm plural form nplurals = 2; số nhiều = n! = 1;

đến cài đặt danh mục

+1

Các dạng số nhiều thay đổi từ ngôn ngữ này sang ngôn ngữ khác, và vẫn không liên quan đến vấn đề. –

+0

ngettext chỉ hỗ trợ hai dạng số nhiều, vậy điểm của bạn là gì? – Deckard

+1

Thực ra, không. Xem ví dụ đầu tiên (và duy nhất) trên http://php.net/manual/en/function.ngettext.php: "1 okno", "2 okna" và "5 oken". –

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