2008-11-07 35 views
32

Tôi đang phát triển hỗ trợ đa ngôn ngữ cho ứng dụng web của mình. Chúng tôi đang sử dụng Django's helpers xung quanh thư viện gettext. Mọi thứ đều dễ dàng đến ngạc nhiên, ngoại trừ câu hỏi về cách xử lý các câu bao gồm đánh dấu HTML đáng kể. Dưới đây là một ví dụ đơn giản:Bạn xử lý bản dịch của văn bản bằng đánh dấu như thế nào?

Please <a href="/login/">log in</a> to continue. 

Sau đây là các cách tiếp cận tôi có thể nghĩ:

  1. Thay đổi liên kết để bao gồm toàn bộ bản án. Bất kể sự thay đổi là một ý tưởng hay trong trường hợp này, vấn đề với giải pháp này là giao diện người dùng phụ thuộc vào nhu cầu của i18n khi hai điều này là độc lập lý tưởng.

  2. Đánh dấu toàn bộ chuỗi ở trên để dịch (bao gồm định dạng). Các chuỗi dịch sẽ sau đó cũng bao gồm HTML trực tiếp. Vấn đề với điều này là việc thay đổi định dạng HTML yêu cầu thay đổi tất cả bản dịch.

  3. Chấm dứt nhiều bản dịch, sau đó sử dụng nội suy chuỗi để kết hợp chúng. Ví dụ: cụm từ "Vui lòng% s để tiếp tục" và "đăng nhập" có thể được đánh dấu riêng để dịch, sau đó kết hợp. "Đăng nhập" được bản địa hóa, sau đó được bao bọc trong HREF, sau đó chèn vào cụm từ đã dịch, giữ cụm từ% s trong bản dịch để đánh dấu vị trí của liên kết. Cách tiếp cận này làm phức tạp mã và phá vỡ sự độc lập của các chuỗi dịch.

Có tùy chọn nào khác không? Những người khác đã giải quyết vấn đề này như thế nào?

Trả lời

7

Tuyên bố từ chối trách nhiệm: Tôi không có kinh nghiệm quốc tế hóa phần mềm.

  1. Tôi không nghĩ rằng đây sẽ là tốt trong mọi trường hợp - chỉ cần giới thiệu quá nhiều khớp nối ...
  2. Chừng nào bạn giữ định dạng thưa thớt trong những phần mà cần phải được dịch, đây có thể được. Cung cấp cho người dịch khả năng đưa ra các từ đặc biệt quan trọng (bằng cách làm cho chúng trở thành một liên kết hoặc có thể sử dụng một cách rõ ràng hoặc có thể sử dụng một cách rõ ràng như một ý tưởng hay). công việc không cần thiết cho tôi…

Nếu là tôi, tôi nghĩ tôi sẽ tiếp cận phương pháp thứ hai, nhưng tôi sẽ đặt URI vào tham số định dạng để điều này có thể thay đổi mà không phải thay đổi tất cả các bản dịch đó .

Please <a href="%s">log in</a> to continue. 

Bạn nên ghi nhớ thứ bạn có thể cần phải dạy cho người dịch của bạn một kiến ​​thức cơ bản về (X) HTML nếu bạn đi với phương pháp này, để họ không làm hỏng đánh dấu của bạn và để họ biết những gì mong đợi từ văn bản họ viết. Nhưng dù sao, kiến ​​thức bổ sung này có thể dẫn đến đánh dấu ngữ nghĩa tốt hơn, bởi vì, như đã đề cập ở trên, các văn bản có thể được dịch và chú thích bằng (X) HTML để phản ánh phong cách viết cục bộ.

+0

Theo khuyến nghị của Wordpress.org với ví dụ sprintf (__ ('Thay thế% 1 $ s với% 2 $ s') cho. Ví dụ này là dành cho nhiều chuỗi HTML riêng biệt. –

11

2, với khả năng xoay.

Bạn chắc chắn có thể khoanh vùng toàn bộ chuỗi, như:

loginLink=Please <a href="/login">log in</a> to continue 

Tuy nhiên, tùy thuộc vào dụng cụ và nhóm nội địa hóa của bạn, họ có thể thích để bạn có thể làm điều gì đó như:

// tokens in this string add html links 
loginLink=Please {0}log in{1} to continue 

Đó sẽ là phương pháp ưa thích của tôi. Bạn có thể sử dụng một mẫu thay thế khác nếu bạn có công cụ bản địa hoá bỏ qua các ký tự nhất định. Ví dụ.

Sau đó thực hiện sự thay thế trong jsp của bạn, servlet, hoặc tương đương đối với bất cứ ngôn ngữ bạn đang sử dụng ...

+0

Với gettext, có thể là " Xin hãy% slog trong% s để tiếp tục ". – hangy

+1

Tôi thích ý tưởng này. Đã xảy ra với tôi để tách văn bản bên trong khỏi văn bản bên ngoài thành các chuỗi riêng biệt, nhưng tôi đã không nghĩ đến việc thay đổi * chính HTML * Điều đó có vẻ như nó có thể hoạt động tốt hơn và ít gây nhầm lẫn cho người dịch. –

0
  1. Làm cho không có ý nghĩa, làm thế nào bạn sẽ dịch "đăng nhập"?
  2. Tôi không nghĩ nhiều người dịch có kinh nghiệm với HTML (người dịch không nhận HTML thông thường sẽ rẻ hơn)
  3. Tôi sẽ sử dụng tùy chọn 3 hoặc sử dụng "Vui lòng% slog in% s để tiếp tục" và thay thế% s bằng các phần của liên kết.
1

Câu hỏi thú vị, tôi sẽ gặp sự cố này rất sớm. Tôi nghĩ rằng tôi sẽ đi cho 2, mà không có bất kỳ loại công cụ phức tạp. Việc đánh dấu HTML rất đơn giản, các url sẽ không chuyển bất kỳ lúc nào và nếu có bất kỳ điều gì thay đổi, mục nhập mới sẽ được tạo trong django.po, vì vậy chúng tôi có cơ hội xem lại bản dịch (ví dụ: một tập lệnh sẽ kiểm tra bản dịch trống sau makemessages).

Vì vậy, trong mẫu:

{% load i18n %} 
{% trans 'hello <a href="/">world</a>' %} 

... sau đó, sau khi python manage.py makemessages tôi nhận được trong django.po tôi

#: templates/out.html:3 
msgid "hello <a href=\"/\">world</a>" 
msgstr "" 

tôi thay đổi nó để nhu cầu của tôi

#: templates/out.html:3 
msgid "hello <a href=\"/\">world</a>" 
msgstr "bonjour <a href=\"/\">monde</a>" 

... và trong những trường hợp đơn giản nhưng thường xuyên tôi sẽ gặp phải, nó sẽ không có giá trị thêm bất kỳ rắc rối nào. Các giải pháp khác ở đây có vẻ khá thông minh nhưng tôi không nghĩ rằng giải pháp cho vấn đề đánh dấu là đánh dấu nhiều hơn. Thêm vào đó, tôi muốn tránh quá nhiều thứ khó hiểu bên trong các mẫu.

Mẫu của bạn sẽ khá ổn định sau một thời gian, tôi đoán, nhưng tôi không biết bạn đang gặp sự cố nào khác. Nếu nội dung thay đổi nhiều lần, có lẽ địa điểm của nội dung đó không nằm trong khuôn mẫu mà bên trong một mô hình.

Chỉnh sửa: Tôi vừa kiểm tra trong số documentation, nếu bạn cần biến bên trong bản dịch, có blocktrans.

2

Bạn đã bao giờ giữ toàn bộ câu là một chuỗi. Bạn cần phải hiểu toàn bộ sentece để dịch nó một cách chính xác.

Không phải tất cả các từ đều được dịch sang tất cả các ngôn ngữ: ví dụ:trong một Na Uy không sử dụng "xin vui lòng" (chúng tôi có thể nói "vær så snill" nghĩa là "có lòng tốt" nhưng khi được sử dụng như là một lệnh nó có vẻ quá mạnh mẽ) để vould norwegian đúng là:

  • "Logg trọ cho å fortsette" thắp sáng .: "Đăng nhập để tiếp tục" hoặc
  • "Fortsett ved å logge trọ" thắp sáng .: "tiếp tục bằng cách đăng nhập" vv

Bạn phải cho phép hoàn toàn thay đổi thứ tự, ví dụ bằng một ngôn ngữ bản demo hư cấu:

  • "Für kontinuer bitte ins Loggen" (nếu đó là sự thật) thắp sáng .: "Tiếp tục đăng nhập xin vui lòng trong"

Một số ngôn ngữ thậm chí có thể có một từ duy nhất cho (hầu hết) câu này quá ...

Tôi sẽ đề xuất giải pháp 1 hoặc có thể "Vui lòng% {startlink} đăng nhập% {endlink} để tiếp tục" theo cách này người dịch có thể làm cho toàn bộ câu là liên kết nếu đó là tự nhiên hơn và có thể được tái cơ cấu hoàn toàn.

17

Giải pháp 2 là những gì bạn muốn. Gửi cho họ toàn bộ câu, với đánh dấu HTML được nhúng.

Lý do:

  1. Các công cụ dịch thuật chiếm ưu thế, Trados, có thể duy trì đánh dấu từ tham nhũng vô ý của một người phiên dịch.
  2. Giao dịch cũng có thể tự động dịch văn bản đã xem trước đó, ngay cả khi nội dung của các thẻ đã thay đổi (nhưng số lượng thẻ và vị trí của chúng trong câu giống nhau). Ít nhất, người phiên dịch sẽ giảm giá cho bạn.
  3. Kiểu dáng là địa phương cụ thể. Trong một số trường hợp, chữ in đậm sẽ không phù hợp bằng tiếng Trung hoặc tiếng Nhật, và chữ in nghiêng thường ít được sử dụng trong các ngôn ngữ Đông Á chẳng hạn. Người dịch phải có quyền tự do giữ hoặc loại bỏ các kiểu.
  4. Thứ tự từ là ngôn ngữ cụ thể. Nếu bạn phân đoạn câu trên thành các mảnh, nó có thể hoạt động cho tiếng Anh và tiếng Pháp, nhưng bằng tiếng Trung hoặc tiếng Nhật, thứ tự từ sẽ không chính xác khi bạn nối. Vì lý do này, tốt nhất là thực hành i18n để ngoại bộ hóa toàn bộ các câu, chứ không phải các đoạn câu.
Các vấn đề liên quan