2010-05-03 29 views
5

Tôi muốn bản địa hóa một số văn bản trong đơn xin Zend Framework của tôi. Có một số văn bản như:Bản địa hóa với HTML-Thẻ

Hello, I'm <a href="test.php" title="Title-Attribute" rel="test">a sample text</a>, greetings to all of you! :)

Nếu không có html trong nó, nó đơn giản để localizate, nhưng với HTML trong nó, làm thế nào tôi nên làm điều đó tốt nhất?

+0

cùng một chủ đề được thảo luận http://stackoverflow.com/questions/2566432/add-some-html-to-zend-forms/2567764#2567764 kiểm tra ở đó – user1400

Trả lời

4

Một số công cụ bản địa hóa như Virtaal xử lý các thẻ XML (HTML) trong một way giúp người dịch dễ dàng làm việc. Các tùy chọn khác là để đơn giản hóa chuỗi trình bày cho localisers của bạn bằng cách thay thế các thẻ với một biến định dạng chuỗi và làm cho chuỗi định dạng localisable thay vì kết quả của các định dạng. Ví dụ (tôi chủ yếu đoán vì lợi ích của ví dụ và không biết PHP rất tốt):

printf(_("Hello, I'm %sa sample%s, greetings to all of you!"), '<a href="test.php" title="Title-Attribute" rel="test">', "</a>");

Trong tuyên bố trên chuỗi rằng localiser sẽ thấy chỉ là một trong chứa %s biến định dạng (vì nó được bao bọc trong hàm _() gettext). Điều này, tất nhiên, có nhược điểm là khá khó hiểu với một localiser nếu (s) anh ta không biết những gì các biến sẽ được thay thế bằng, do đó, bao gồm một bình luận địa phương hóa thích hợp.

+2

Tôi hiểu rằng "Title-Attribute" cũng sẽ được dịch. – Gordon

+0

Trong trường hợp đó, câu trả lời của xtofl trông giống như câu trả lời hay hơn. Upvoted nó. Cùng một ý tưởng, mặc dù. :) – Walter

2

Bạn nên bản địa hóa bất kỳ chuỗi nào trong giao diện người dùng. Trong tình huống này, bạn có sự kết hợp các yếu tố giao diện người dùng/kiểm soát. Điều đó có nghĩa là nội dung của thuộc tính title phải được bản địa hóa riêng biệt.

Trong trường hợp này, điều này có nghĩa là:

$guilink = "<a href='test.php' " 
      ."title='".gettext("Title-Attribute")."'" 
      ." rel='test'>" 
      .gettext("a sample text") 
      ."</a>"; 

$guistring = sprintf( 
     gettext("Hello, I'm %s, greetings to all of you! :)"), $guilink); 

Nhưng, như Gordon nói: không overcomplicate.

1

Đối với bộ điều hợp bản dịch, không nên tạo sự khác biệt cho dù bản dịch có chứa HTML hay không. Nếu bạn có chuỗi ngắn với HTML nội tuyến, chỉ cần đặt bản dịch cùng với HTML vào tệp nguồn ngôn ngữ của bạn nếu cần. Bạn chỉ cần đảm bảo đầu ra không được thoát khi có HTML bên trong chuỗi.


EDIT Giống như xtofl chỉ ra trong các ý kiến, có HTML bên trong tập tin ngôn ngữ không phải là một giải pháp tối ưu, bởi vì người dịch có thể không quen với xử lý HTML. Trong khi có một số sự thật cho điều đó, tôi thấy nó có thể bỏ qua. HTML không phải là khoa học tên lửa và trong một vài trường hợp, trong đó các thành phần HTML nội tuyến có thể xuất hiện, bạn có thể cung cấp cho chúng một trang lừa đảo. Dịch giả chuyên nghiệp sẽ có thể xử lý điều đó. Một mối quan tâm khác là họ sẽ chèn nội dung không mong muốn, ví dụ: các liên kết (nếu bạn đang làm việc với các dịch giả cộng đồng thay vì các chuyên gia). Nhưng kể từ khi bạn không đề cập đến bất kỳ dịch giả nào, tôi giả sử bạn đang làm bản dịch, trong trường hợp đó tất cả các bên trên là yagni. Không cần phải overcomplicate things.

+0

Thực hiện điều này để cạnh, bạn có thể có người dịch hoàn thành mã nguồn và chọn ra các chuỗi ký tự ... Tôi không thích điều đó, thực sự. Người dịch phải không biết chi tiết kỹ thuật, để hoàn thành công việc một cách hiệu quả. (Ai biết nếu thuộc tính 'name' trong đầu vào của biểu mẫu html nên được dịch sang' nom', 'name',' gnorpx'?) – xtofl

+0

@xtofl Vì mục đích của OP, ở trên là một cách tiếp cận hợp lệ.Chúng tôi không biết liệu OP có đang làm việc với các dịch giả hay không. Nếu OP làm, người dịch có thể nói với anh ta, nếu họ có thể xử lý HTML nội dòng. Phục hồi câu trả lời của riêng bạn, nếu bạn nghĩ rằng đó là một giải pháp tốt hơn. – Gordon

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