Localization Guide ja

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.


ローカライゼーション

ADempiereをどこの国でも利用できるようにするためには、ローカル言語および会計システムへの適用が必要です。完全な翻訳作業には6人月程度を必要としますが、ヘルプファイルなどを対象外とすれば、2カ月以内で実施できるでしょう。また、アプリケーションでのみ利用される部分の翻訳であれば、会計部分の対応と並行して行うことができるため、3-4週間で行うことができるかもしれません。

  • ADempiereのローカライズとしては以下ステップが挙げられます:
  1. 用語集の作成
  2. メニュー、タブ、ヘルプファイル等の翻訳
  3. ローカル勘定科目の取り込み


用語集の作成

翻訳作業に入る前の最初のステップは、用語集の整備です。これにより翻訳作業を簡潔にし、エンドユーザが「対象が同じなのに、このタブではドキュメント(Document)と表記し、他では証明書(Voucher)と表示している」というような不満をさけられることができます。一方、このことは、事前に翻訳される文字列のすべてを読み、用語として書き出す必要があることを示します。用語集は一般的にテキストファイルもしくは、2列からなるスプレッドシートの形式を取ります。

ADempiereの翻訳

ADemiereの翻訳には2つの方法があります。ADempiereを通して直接、翻訳することもできれば、.xmlファイルをエクスポートし、翻訳メモリーツール(オリジナルの記述と翻訳の双方が記述された巨大なXMLファイル)を用いた翻訳の方法が挙げられます。翻訳メモリツールを用いることの利点としては、用語が繰り返して登録されている部分に対して、ツールはマッチングフレーズを用いて自動的に置換します (ADempiereには、6,500語の用語が反復して登録され、10,500語もの用語登録が行われています)。その上、ツールは用語比較を行い、テキストのタイピングを減らすように、最も近いと予想される用語の提示をおこなってくれます (これはバージョンアップの際には、とても有効に機能します!)。こちらは専門的な方法にあたります。欠点は、大きなプロジェクトにおいては、もっとも有効ですが、小規模なプロジェクトにおいては、オーバーヘッドとなるでしょう。このことはXMLファイルに記載されているものに対してのみに対する翻訳でであり、XML内の記載が、ERP上のどこの表示と対応づいているか、わからず、XMLファイルのすべてに対して翻訳を行うことになるかもしれません。ADempiereのXMLファイルにて作業を行う最適なツールについては、残念ながらオープンソースではありませんが、Multilizerをご覧ください。

ERP上での翻訳設定

ERP内部での翻訳は簡単です。"翻訳(translation)"メニューを検索し、英語のフレーズを確認の上、対応するローカル言語のフレーズを入力するだけです。不都合な点としては、一度大量のエントリーを翻訳した後は、同様の手順で再度繰り返したくないでしょう。すなわち、翻訳の途中で、用語を変更したくなった場合、すべての箇所を手動で変更しなおさなければなりません (それが用語集が重要となる理由です)

Launchpad.netでの翻訳

  • これは新しいバザール方式でのADempiere ERPの翻訳です。簡単であり、ファンシーな方法です。
  • 詳細についてはJa/TranslationProjectおよびADempiere Translation Project in Launchpad.netをご確認ください
  • それはどのようなものですか?
    • もしローカル言語がADempiere Translation Projectに登録されていない場合は、Ubuntu translation projectを参照ください。(日本語はすでに登録されています)
    • きっとあなたの言語がそこで確認できるでしょう。いくつかの例を以下に記載します:

Spanish, Thai, Malay, German, Chinese (Simplified), Russian on the launchpad.net


翻訳メモリを用いた、.xmlエクスポートファイルからの翻訳

翻訳メモリを利用するためには、ADempiereから翻訳情報をエクスポートする必要があります。エクスポートフォーマットは多数の英語フレーズとローカル言語に対応するフレーズからなる、巨大なXMLファイルとなっています。現在、Multilizerが唯一、ローカル言語の翻訳を行うソフトウェアとなっていますが、オリジナルの項目を翻訳しているわけではありません。また、エクスポートされたファイルの翻訳として、XMLエディタをりようすることもできます。エクスポートされた翻訳対象のテキストを.csvファイル形式に翻訳し、OpenOffice spreadsheetフォーマットに保存します。そして、その翻訳として、OmegaTを用います。ここでの問題としては、翻訳をXMLファイルに戻すことが難しい点です。一方、OmegaTを用いることで、standards compliantの翻訳メモリを.tmx (翻訳メモリ変換フォーマット)形式で取得できます。.tmx形式の翻訳メモリは、Multilizerの評価版にて、XMLファイルを数秒の内に自動翻訳することを可能とします。しかしOmegaTを単体利用するにはトリックがありますので、以下を参照ください。

OmegaTのみを用いる、エクスポートされた.xmlファイルの翻訳

オープンソースツールOmegaTのみを用いることによる、もうひとつの方法があります。Multilizerへの変換を行うことなく、OmegaTによるHTMLファイルの編集機能を利用することで対応可能です。ADempiereからエクスポートされるXMLファイルは、<value>のXMLタグからなります。ここでは代表的なものを以下に記載します。

  • <value column="Name" original="Client">Client</value>

OmegaTは、<value>のXMLタグを認識しませんが、<p>については、HTMLタグに該当するため、認識されます。よってここでのトリックは、sedやnawkのようなテキスト編集ツールを用いて、以下に示すサンプルスクリプトを参考に、<value>を<p>に置換します。この方法により上に示すXMLタグは以下に示すHTMLタグに変換されます:

  • <p column="Name" original="Client">Client</p>

OmegaTは、開始タグの中に含まれる'original='の後に続く文字列についても、オリジナル(英語)の用語として認識します。そして、翻訳対象の用語については、開始と終了タグの間の文字列となります。翻訳がおこなわれていない間は、双方の文字列はClientとなっています。OmegaTによる翻訳を通して、次に示す翻訳タグを含むような、新しく翻訳されたHTMLターゲットファイル(ドイツ語の例)が生成されます:

  • <p column="Name" original="Client">Mandant</p>

次の作業としては、<p>タグを<value>への変換と翻訳言語の指定です。翻訳XMLファイルを取得するここでの方法により、ADempiereへのインポートの準備が整いました。以下から、sedを用いて、双方向でのタグの変換を行う、bashスクリプトの2つの例をご参照ください。XMLファイルのAD_Element_Trl_en_US.xmlおよびde_DEは例です。

<value> タグから <p> タグへの変換を行うサンプルスクリプト (XML to HTML)
INPUTFILE=AD_Element_Trl_en_US.xml
OUTPUTFILE=AD_Element_Trl_de_DE.html
cat $INPUTFILE > temp
# replace language=en_US by language=de_DE
sed 's:language="en_US":language="de_DE":g' temp > temporary
cat temporary > temp
# replace XML flag <value> by HTML flag <p>, done for start and end flag in one go
sed 's:<value column="\([^"]*\)" original="\([^"]*\)">\([^<]*\)</value>:<p column="\1" original="\2">\3</p>:g' temp > temporary
cat temporary > $OUTPUTFILE
<p> タグから <value> タグへの変換を行うサンプルスクリプト (HTML to XML)
INPUTFILE=AD_Element_Trl_de_DE.html
OUTPUTFILE=AD_Element_Trl_de_DE.xml
cat $INPUTFILE > temp
# replace HTML flag <p> by XML flag <value>, done for start and end flag in one go
sed 's:<p column="\([^"]*\)" original="\([^"]*\)">\([^<]*\)</p>:<value column="\1" original="\2">\3</value>:g' temp > temporary
cat temporary > $OUTPUTFILE

XMLファイルの翻訳を行いました - OmegaTはさらなるリリースに対して、再利用できるのでしょうか?

翻訳の間、OmegaTstandards compliant翻訳メモリを.tmx(translation memory exchange)フォーマットにて生成します。これらの翻訳メモリファイルはOmegaTにて、あいまい検索、つまり、すでに翻訳された用語に対してフィットする翻訳の候補を翻訳者に表示するのに利用されます。翻訳候補を引き継ぐためには、翻訳者は対象をクリックします。このことは、ADempiereのあるリリースから他のものへ移行する際に、新しいリリースに向けて、何千回も既に存在する翻訳の継承のためにクリックをしなければならないことを示します。それは誰も望まない道でしょう!

ここにもうひとつのトリックがあります:OmegaTは内部でtmxフォーマットの特別なファイルを利用しています。このファイルはproject_save.tmxと呼ばれ、既に適用されている翻訳情報を管理する内部の記録に用いられています。つまり、翻訳作業を継続的に行えるよう、project_save.tmxに保存されているすべての翻訳情報はOmegaTにより自動的に編集処理が行われると同時に、project_save.tmxの翻訳情報がプログラムに読み込まれます。

ここでの対応案は、翻訳されたXMLファイルを用いて、tmxフォーマットの関連ファイルを作成することです。一度、そのようなファイルを用意すれば、あいまい検索に用いるため、もしくは、OmegaTが内部の翻訳情報をもっているように見せるため、正しいヘッダ、フッタを持つtmxファイルを作成するため、そのファイルをOmegaTの翻訳メモリにコピーできます。対象ファイルを適切な場所(omegatと呼ばれるサブディレクトリ)にファイルをコピーすれば、もしくは、もしファイルがすでに存在するのであれば上書きコピーを行えば、OmegaTはproject_save.tmxファイルとしてそのファイルを認識するでしょう。OmegaTは、翻訳者が保存ボタンを押すとすぐに、このproject_save.tmxファイルにあるすべての適用可能な翻訳情報を自動的に編集し、適用可能でないものについては削除し、新しいproject_save.tmxファイルとして保存します。OmegaTはproject_save.tmxファイルを内部利用として用いることを想定していることから、この方法は推奨される手順ではありませんが(OmegaTのドキュメントにもそのような操作の記述は見つかりません)、すくなくとも私が利用しているOmegaT version1.6 RC12においては、問題なく処理が行われます。

英語の'Clientをどのようにドイツ語のMandantに変換するかについては、疑問が残ります。XMLファイルの例としては

<value column="Name" original="Client">Mandant</value>

を以下のtmxフォーマットに変換することがあげられます。

<tu>
  <tuv lang="EN-US">
    <seg>Client</seg>
  </tuv>
  <tuv lang="DE">
    <seg>Mandant</seg>
  </tuv>
</tu>

次の章に示すbashスクリプトがこの処理を実施します。さらにこのスクリプトは、project_save.tmxファイルに必要なヘッダ、フッタの挿入も行います。すくなくともヘッダの設定は利用しているOmegaTのバージョンには必要となるでしょう!下記スクリプトにある、'Write header to tmx file'の部分をご確認ください。EOFで終了するラインとEOFのみからなるラインの間のすべての行が1つずつ出力ファイルにコピーされます。よって、スクリプトを必要とするヘッダとして指定するためには、以下に示すような構成とする必要があります。

cat > $OUTPUTFILE <<-EOF
These 3 lines
are copied as they are
to the outputfile.
EOF


<value> タグからtmxへの変換を行うサンプルスクリプト (XML to Translation Memory)
INPUTFILE=AD_Element_Trl_de_DE.xml
OUTPUTFILE=project_save.tmx
cat $INPUTFILE > temp

# remove header
sed 's:<?xml.*table="AD_[^"]*">::g' temp > temporary
cat temporary > temp
# remove footer
sed 's:</adempiereTrl>::g' temp > temporary
cat temporary > temp
# remove row end and start tags
sed 's:</row>::g' temp > temporary
cat temporary > temp
sed 's:<row[^>]*>::g' temp > temporary
cat temporary > temp
# replace value start tag, but keep english text, i.e. text after 'original='
sed 's:<value column=[^g]*ginal="\([^"]*\)">:<tu><tuv lang="EN-US"><seg>\1</seg></tuv><tuv lang="DE"><seg>:g' temp > temporary
cat temporary > temp
# replace value end tag, translated (german) text in front of that tag is not touched
sed 's:</value>:</seg></tuv></tu>:g' temp > temporary
cat temporary > temp


# Write header to tmx file. This part needs to be adapted, if another OmegaT version is used.
cat > $OUTPUTFILE <<-EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tmx SYSTEM "tmx11.dtd">
<tmx version="1.1">
  <header
    creationtool="OmegaT"
    creationtoolversion="1.6 RC12"
    segtype="sentence"
    o-tmf="OmegaT TMX"
    adminlang="EN-US"
    srclang="EN-US"
    datatype="plaintext"
  >
  </header>
  <body>
EOF


# write all translations in tmx format to tmx file
cat temp >> $OUTPUTFILE


# write footer to tmx file
cat >> $OUTPUTFILE <<-EOF
  </body>
</tmx>
EOF

ローカル勘定科目のインポート

会での利用のためには、ADempiereでは、ローカル勘定科目に対応する、75個までの基本的な勘定科目のセットが必要となることから、経験のある会計士のサポートが必要となるでしょう。それぞれの国での会計システムの差異から、これら勘定科目は国ごとに異なるでしょう。あなたの顧客の会計士から、サポートを得られるようにアプローチすることは、いずれ、個各の利益にもつながることでしょう。

便利サイト