TTX 形式での翻訳用に準備された Java プロパティ ファイルから生成された数千の xml ファイルがあります。それらにはかなりの数の変数が含まれており、翻訳者はしばしばそのようなものを壊してしまうため、翻訳者から保護する必要があります。変数は、数値または場合によっては中括弧のペアの間のテキストの形式です。{0}、{これ}。
これらの変数がまだ属性になっておらず、 ut要素の内部テキストの一部になっていない場合は、次のように、これらの変数を xml 要素で囲む必要があります。
<ut DisplayText="{0}"><{0}></ut>
私の入力は次のようになります。
<ut Type="start"DisplayText="string"><string></ut> text string {0}
<ut DisplayText="{1}"><{1}></ut> in:
<ut DisplayText="\n"><\n/></ut> {2}.
<ut Type="end" DisplayText="resource"></resource></ut>
正しい出力は次のようになります。
<ut Type="start"DisplayText="string"><string></ut> text string <ut DisplayText="{0}">{0}</ut>
<ut DisplayText="{1}"><{1}></ut> in:
<ut DisplayText="\n"><\n/></ut> <ut DisplayText="{2}">{2}</ut>.
<ut Type="end" DisplayText="resource"></resource></ut>
私の最初のアプローチは、正規表現を使用して中かっこ内の用語を照合し、その周りにパターン置換を使用して xml 要素を構築することでした。上記の最初のコード ブロックのようにパターンが存在する場合、このアプローチは失敗します。
以前のパターンの検索と置換 (notepad++ で):
探す
({[A-Za-z0-9]*})
交換
<ut DisplayText="\1">\1</ut>
正規表現は仕事に適したツールではないように見え始めているので、より良いアプローチ、さまざまなツール、またはこれを迅速かつ繰り返し解決できるようにするためのより完全な正規表現について提案したいと思います。
更新:問題は、以前に想定されていたよりも少し複雑であることが判明しました。ある種の条件ステートメントのように見えるテキストと変数を混合する、かなりあいまいな構文を含む、保護が必要なものがさらにいくつかあるようです。記憶から:
{o,choice|1#1 error|1<{0,number,integer} errors}
「エラー」と「エラー」は翻訳可能であり、保護されるべきではありません。現時点で最も簡単な解決策は、上記の正規表現を実行し、それが作成するいくつかのエラーを修正してから、より複雑な項目に対して通常の検索と置換パスをさらに 2 回実行することです。正規表現として抽象化することもできますが、現時点ではそれを行う意味はあまりありません。
提供される表現の改善に加えて、より良い正規表現サポートを備えた xslt およびその他のエディターへのポインターに感謝します。時間が許せば、いくつかのオプションを試してみます。