2009-03-28 10 views
5

UI記述のためのXMLベースの形式の国際化を扱う方法を決定しようとしています。XML文書のI18N

形式が一般的にこのようなものになります。

... 
<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> 

を各ファイルには、画面の多くが含まれており、いくつかの10.000行まで可能、と我々は我々のアプリケーションでこれらのファイルのダースを持っています。

私のニーズに合わせてフォーマットを変更することはできます。それでは、どうやってこれを翻訳するのですか?

私はこれを処理するためにいくつかの可能な方法について考えてきた:

  • 各タグのIDを使用して別のファイルを使用して、英語のテキストと翻訳されたテキスト
  • を含む言語ごとに個別のファイル同じファイル内のすべての翻訳を配置する各ID
  • のための翻訳されたテキストと
  • 最初のソリューションは、英語のテキストがに翻訳されるかもしれない問題を抱えている

文脈によって異なるメッセージ。

2番目の解決策は、ソースファイルの読み込みが少なくて済みますが(多くはないにしても)、属性の変換を簡単に処理できません。

ファイルをいくつかの5-6言語に翻訳したら、3番目の解決策はファイルを非常に大きく、扱いにくくします。

+0

ありがとう:ここ

は、フォーマットの一例です。 最初の2つの提案は非常に似ていますが、最初のものはもっとXMLと思われます:ish。しかし、私は2番目の提案の単純さが好きです。 – Jonatan

答えて

1

私はテンプレートファイルを作成します。 「somename.xml.template」

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

命名次にあなたが含む各言語用のiniファイルのようなファイルの束を作成することができますすることができます、そして、

SettingsForThisCard =与えられた言語でメッセージが

をタグをiniファイルから読み込まれたメッセージで置き換えます。利点は、翻訳がないタグがある場合、検出が容易であり、翻訳作業を無駄にしないということです。また、それは非常に単純なので、あなたの特定の要件に最適なものではないかもしれません。

1

XMLエンティティを使用してローカライズする必要がある用語を定義し、各言語ごとに別々のDTDを持つのはなぜでしょうか?これは基本的にはFirefox XULで使用されているアプローチです(例:Localization on MDN)。

2

国際化リテラルを保持する標準XMLファイルである標準TMXファイルを使用します。各エントリはラベルで識別されます。これはコードのすべてを参照します。すべてのエントリーに可能なすべての翻訳があり、最も重要な部分は、TMXは翻訳プログラムや専門家によって使用される標準であるということです。

リテラルを保持するXMLファイルがすでにある場合は、XSLTスタイルシートを使用してリテラルを変換できます。ご提案のための

<?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>