2012-10-12 45 views
12

thể trùng lặp:
How does gettext handle dynamic content?Biến trong PHP gettext

Tôi đang sử dụng gettext PHP. Tôi muốn dịch một câu có một biến trong đó. Điều này có thể không?

Ví dụ, trong tiếng Anh:

Are you sure you want to block Alice?

(ở đâu "Alice" là tên của người dùng.)

Nhưng, bằng tiếng Đức, vấn đề này không xuất hiện ở phần cuối của câu .

Sind Sie sicher, dass Sie Alice blockieren?

Trong messages.po, tôi có

msgid "BLOCK" 
msgstr "Are you sure you want to block" 

Nhưng tôi thấy không có cách nào để vượt qua một hay nhiều biến. Điều này có thể không?

+2

Placeholdrs như '% s' và 'sprintf' hoặc tương tự thường được sử dụng cho điều đó. Ngoài ra, bạn không nên sử dụng ABBReviations cho chuỗi nguồn gettext. Sử dụng tiếng Anh đơn giản cho các tin nhắn chưa được dịch. Tin nhắn hiếm khi thay đổi trong thực tế và danh mục gettext có thể dễ dàng điều chỉnh nếu nó xảy ra. – mario

Trả lời

26

poedit nhận ra các vars.

msgid "Are you sure you want to block %s?" 
msgstr "Sind Sie sicher, dass Sie %s blockieren?" 

và trong PHP

sprintf(_('Are you sure you want to block %s?'),'Alice'); 
+0

Điều đó thật dễ dàng! Cảm ơn. Đã chỉnh sửa để hiển thị sprintf. printf chỉ hiển thị độ dài. –

+2

Sprintf? Tại sao? Printf in chuỗi và sprintf trả về nó. Có thể bạn viết 'echo sprintf'. –

+2

@chumkiu - 'sprintf()' có thể được sử dụng ở đây vì những lý do không liên quan đến gettext và nội địa hoá. (Bản thân ứng dụng có lẽ cần thiết để lưu trữ/thao tác chuỗi kết quả, không xuất trực tiếp ra stdout.) – rinogo