2009-03-28 36 views
5

Tôi sắp quyết định cách xử lý quốc tế hóa định dạng dựa trên XML cho mô tả giao diện người dùng.I18N của tài liệu XML

Định dạng thường trông giống như sau:

... 
<devif> 
    <screen id="scr1" title="Settings for this and that"> 
    <header text="Climate readings"/> 
    <rd setp="123" text="Air temperature" unit="°C"/> 
    <rd setp="234" text="Humidity" unit="%RH"/> 
    <rd setp="345" text="CO2" unit="ppm"/> 

    <header text="Settings"/> 
    <wr setp="567" text="Air temperature demand" unit="°C"/> 
    </screen> 
    ... 
</devif> 

Mỗi tập tin có chứa rất nhiều màn hình và có thể lên đến một số 10.000 dòng, và chúng tôi có một tá các tập tin trong ứng dụng của chúng tôi.

Tôi vẫn có thể thay đổi định dạng để phù hợp nhất với nhu cầu của mình. Vì vậy, làm thế nào bạn sẽ đi về dịch này?

Tôi đã suy nghĩ về một số cách có thể để xử lý này:

  • Một tập tin riêng biệt cho mỗi ngôn ngữ có chứa các văn bản tiếng Anh và dịch văn bản
  • Sử dụng một ID cho mỗi thẻ và sử dụng một tập tin riêng biệt với văn bản dịch cho mỗi id
  • Đặt tất cả các bản dịch trong cùng một tệp

các giải pháp đầu tiên có vấn đề nơi các văn bản tiếng Anh có thể được dịch ra tiếng các thông điệp khác nhau tùy thuộc vào ngữ cảnh.

Giải pháp thứ hai làm cho tệp nguồn ít có thể đọc được (mặc dù không nhiều) và nó không xử lý việc dịch các thuộc tính một cách dễ dàng.

Giải pháp thứ ba sẽ làm cho tệp rất lớn và cồng kềnh khi làm việc với một khi tệp đã được dịch sang một số ngôn ngữ 5-6.

+0

Cám ơn góp ý của bạn. Hai đề xuất đầu tiên khá giống nhau, ngoại trừ lần đầu tiên có vẻ như XML: ish. Tuy nhiên, tôi thích sự đơn giản của đề xuất thứ hai. – Jonatan

Trả lời

1

Tôi sẽ tạo tệp mẫu, ví dụ: có tên là "somename.xml.template"

<devif> 
    <screen id="scr1" title="[SettingsForThisCard]"> 
    <header text="[ClimateReadings]"/> 
    <rd setp="123" text="[AirTemperature]" unit="°C"/> 
... 

Sau đó, bạn có thể tạo ra một loạt các tập tin ini-like cho mỗi ngôn ngữ có chứa:

SettingsForThisCard = thông điệp của bạn trong ngôn ngữ nhất định

Sau đó, bạn có thể thay thế các thẻ bằng các tin nhắn được đọc từ các tệp ini. Ưu điểm là nếu có một thẻ không có bản dịch, nó rất dễ phát hiện và không lãng phí các nỗ lực dịch thuật. Ngoài ra, nó rất đơn giản, do đó có thể không phải là tốt nhất cho các yêu cầu cụ thể của bạn.

1

Tại sao không sử dụng các thực thể XML để xác định các thuật ngữ phải được bản địa hóa và chúng có các DTD riêng biệt cho mỗi ngôn ngữ? Về cơ bản, đây là cách tiếp cận được sử dụng bởi Firefox XUL, ví dụ: Localization on MDN.

2

Chúng tôi sử dụng các tệp tiêu chuẩn TMX, là các tệp XML chuẩn để chứa các chữ cái được quốc tế hóa. Mỗi mục được xác định bởi một nhãn, đó là tham chiếu tất cả xung quanh mã. Mỗi mục có tất cả các bản dịch có thể và phần quan trọng nhất là TMX là một tiêu chuẩn được sử dụng bởi các chương trình dịch thuật và các chuyên gia.

Nếu bạn đã có tệp XML để giữ các chữ cái của mình, bạn có thể chuyển đổi chúng theo phương thức của biểu định kiểu XSLT.

Dưới đây là một ví dụ về các định dạng:

<?xml version="1.0" encoding="UTF-8"?> 
<tmx> 
    <body> 
     <tu tuid="$ALARM_BARCODE_READER_COMMS"> 
      <tuv lang="ES"> 
       <seg>Lector códigos de barras: No Operativo</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Barcode reader: Not operative</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:通讯错误</seg> 
      </tuv> 
     </tu> 
     <tu tuid="$ALARM_BARCODE_READER_FAIL"> 
      <tuv lang="ES"> 
       <seg>Lector códigos de barras: Fallo</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Barcode Reader: Fail</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:故障</seg> 
      </tuv> 
     </tu> 
     <tu tuid="$NO_PAYMENT_MODE_AVAILABLE"> 
      <tuv lang="ES"> 
       <seg>No hay sistemas de pago disponibles</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>No payment systems available</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:故障</seg> 
      </tuv> 
     </tu>  
     <tu tuid="$ALARM_BLACKLIST_CARD"> 
      <tuv lang="ES"> 
       <seg>Tarjeta de pago en lista negra</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Payment card in blacklist</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>付费的IC卡是黑名单卡</seg> 
      </tuv> 
     </tu> 
    </body> 
</tmx> 
Các vấn đề liên quan