web-dev-qa-db-ja.com

XMLファイルからテキストをローカライズする

PoEditが.phpファイルからのものと同様に、.xmlファイルから自動的に文字列を取り出して.po/.potファイルに格納する方法を知っていますか。

XML構造は次のようになります。

<?xml version="1.0" encoding="iso-8859-1"?>
<options>
  <page id="content" label="Content Options" icon="4">
    <section id="post" label="Content Options">
      <option id="title" type="checkbox" default="yes" label="Show post title"></option>
      <option id="comments" type="checkbox" default="yes" label="Show comments link"></option>
      <option id="thumb_size" type="select" default="default" label="Thumbnail Size">
        <value id="default" label="Default Size, (%s)" vars="default_size"></value>
        <value id="100x100" label="Small (100x100)"></value>
        <value id="150x150" label="Medium (150x150)"></value>
        <value id="200x200" label="Large (200x200)"></value>
      </option>

    </section>
  </page>
</options>

"label"属性内の文字列はgettextパーサか何かによって検出されるべきです...

3
onetrickpony

XLIFFTMXのようなローカライズされたXMLフォーマットを使うべきです。XLIFFを.poに変換するためのツールがあります。

ソースXMLを変更できない場合、いくつかの選択肢がありますが、実際にこのXML情報をどのように出力するかによって異なります。

  1. XMLを(ラベル用に)解析し、これらの文字列に対するgettext出力を含む.poを作成します(それからおそらく.poファイルをマージします)。
  2. XMLを複製して_() gettextをXMLに挿入し、それを出力時に解析します。

また、このツールを見て、そしてxml - > poを変換できるコマンドラインのpythonツールがいくつかあります。 http://itstool.org/

3
Wyck

あなたがそれを試してみたい場合は、あなたはそれにあなたのフォーマットのカスタムITSルールファイルを与える必要があります。投稿したスニペットには、次の規則が適用されます。

<its:rules
    xmlns:its="http://www.w3.org/2005/11/its"
    its:version="1.0">
  <its:translateRule translate="yes" selector="//@label"/>
</its:rules>

これをoptions.itsという名前で保存してから、次のようにitstoolを実行します。

itstool -i options.its -o somefile.pot somefile.xml

翻訳者が翻訳してPOファイル(たとえばxx.po)を渡したら、それをmoファイルにコンパイルしてから、itstoolを使用してマージします。

msgfmt -o xx.mo xx.po
itstool -m xx.mo -i options.its -o somefile.xx.xml somefile.xml

詳しくは、ドキュメントを確認してください。 http://itstool.org/documentation/

3
Shaun McCance