2019年7月12日金曜日

翻訳アプリとサイト

Windowsで使用できる代表的な翻訳ツールの説明

Poeditここ

全機能を使用するには送金が必要です。しかし未送金のままほとんどの機能が使用できます。
チームを組みシームレスな連携をとって翻訳などの場合は、送金が必要です。

対応拡張子(gettext系なので).pot、.po と.xlf、.xliff
最終翻訳ファイルは.moとしてコンパイルされます。
※アプリによっては.poのままでも扱うことができます。(KodiやCheat Engineなど) 


・OmegaT ここ
無料で全機能が使用できます。
Freeの辞書ツールであるGoldenDictなどが使用する辞書ファイル

.bglや.idxを組み込んでOmegaTのペイン内で確認しつつの翻訳が可能です。

代表的な対応拡張子は(タブン).xlfですが、その他対応可能な拡張子が超豊富です。

・lokalizeここ 
実質Linux系に特化されたようで、今だとWindows版がありません。
無料で全機能が使用できます。
 

 応拡張子は、.xlf、.po、.pot、.ts

・Linguist
Qt開発環境に含まれるLinguist.exeがその本体です。
 

対応拡張子は、.ts、.xlf(は若干の対応制限あり)
最終翻訳ファイルは.qmとしてコンパイルされます。


なぜ?バージョンごとに翻訳を更新(変更)する必要があるのか

例として、
"固有のID:原文:翻訳内容"という並びがあってアプリから呼び出される。 
簡略化していますが、おおよそこんな感じで翻訳された文章はアプリから表示されています。

本体のバージョン ベータ
1000:Apple:りんご
1001:Orange:オレンジ
1002:Plum:プラム 

本体のバージョン1で、1003(牛乳)が追加
1000:Apple:りんご
1001:Orange:オレンジ
1002:Plum:プラム
1003:Milk:牛乳 

本体のバージョン2で、1000(りんご)が必要なくなったので削除
1001:Orange:オレンジ
1002:Plum:プラム
1003:Milk:牛乳 

本体のバージョン3で、1000(りんご)と1001(オレンジ)が入れ替わり。
1000:Orange:オレンジ
1001:Apple:りんご
1002:Plum:プラム
1003:Milk:牛乳 

本体のバージョン4 パターン1(翻訳が間に合ったパターン)
ほとんど入れ替え発生、1003(牛乳)だけそのまま。
1000:Strawberry:いちご
1001:Grapefruit:グレープフルーツ
1002:Grape:ぶどう
1003:Milk:牛乳 

本体のバージョン4 パターン2(翻訳が間に合わなかったパターン)
ほとんど入れ替え発生、1003(牛乳)だけそのまま。
1000:Strawberry:りんご
1001:Grapefruit:オレンジ
1002:Grape:プラム
1003:Milk:牛乳

実際には、これらのパターンが複雑に混ざっています。 

バージョン ベータでは、"りんご" を食べるだったのに、バージョン4 パターン1では、"いちご" になっています。
そのため、バージョン4 パターン2のままだったりすると、りんごを食べるボタンを押したのに、なぜか、いちごを食べてるぞ?になります。
(ただし、表示言語を英語にすると、きちんとにStrawberryと表示)
基本的に、 原文(Apple ⇒ Strawberry)に変更があったら、応対する翻訳は初期化され、原文を表示するようになっている場合が多いのですが、そこはアプリ次第です。 

バージョン4で、"Strawberry:いちご" これは、いちごの文字数がStrawberryより短いので、ボタン内に収まりますが、"Grapefruit:グレープフルーツ"は、英語より長いので場合によってはボタンに収まりません。
表示される文字に応じて、大きさが変わるボタンだったら大丈夫ですが、固定長のボタンだったら、グレープフルーツと半角カタカナで書く場合もあります。
自動的にボタンの幅が変わるものや、固定長なボタン、表示幅を翻訳者が指定できるボタンなど
アプリよってここらは、まちまちです。

また、入れ替わった内容が"牛乳"だった場合、牛乳を食べるは変なんで、飲むとかへの対処も必要になるかもしれません。その場合、牛乳を食べるで妥協する、
"食べる"のほうの翻訳をどうかならないか頑張ってみる(飲食とか?)、
アプリの作者に連絡して、日本語だとこういう表現で違和感があるんでどうにかならない?と相談してみることもあります。


Poeditを使用した、翻訳の流用方法 
(ある程度は操作方法がわかっているかた向け)

このアプリに不慣れなかたは、使用方法を検索してみるか、
リンク先のファイルに目を通して流れをつかむと、このセクションの説明が分かり易くなるかもしれません。

Skyrimの日本語ファイルアップローダへのリンクです。 ⇒ ここ
(このファイルの筆者は私です)

想定される状況: 例題はKodi
・v18.3の原文とv17.0の原文に、ある程度の一致、もしくは完全に一致した場所があるかもしれないので、v18.3の翻訳を流用したい。
・更新されてv18.4が出たけど、未翻訳なので、v18.3の翻訳内容を事前に適用したい。
・v18.3の翻訳へ一切手を加えることなく、そのままv18.4へコピペして使ってみたら、表示される内容と実際の動作がちがったので、v18.4に翻訳を移植したい。

方法その①

インポートで既存の"strings.po"を選んで、翻訳メモリに取り込めば準備完了です。

その後、適用したいファイル(例題だとv18.4かv17.0)を読み込んで、対象となる翻訳先言語に"日本語" か "日本語 (日本)" を選択します。
最後に、"完全に一致した部分だけ" か "あいまいに一致してても適用" かを選んで、"事前翻訳"を実行します。

方法その②

事前にベース(翻訳されている)、.poを読み込む ⇒ SSを参考にして、
"カタログ" ⇒ "POTファイルから更新" でターゲットになる(未翻訳な).poを読み込む。
最後に、ウィザードに従って更新差分を抽出する。
例題の場合だと、
事前にv18.3の.poを読み込んでおく ⇒ その後、v18.4の.poを読み込んで更新された部分を抽出。

方法その①は、翻訳メモリ内にある語句と一致したものが自動的に翻訳に割り当てられるので、
場合によっては、翻訳にバラツキがでます。カテゴリ、カテゴリーの混在など。

方法その②は、既存の翻訳内容を崩さず、そのまま流用しながら続きで翻訳が可能です。

使い分けたり、併用したりしてください。

Qt Linguistを使用した、翻訳の流用方法
(ある程度は操作方法がわかっているかた向け)

いくつか方法があります。
私が使用していて(一番簡単だと思っている)パターンを説明。

※Linguistでは、翻訳メモリではなく、フレーズブックと呼びます。


新しいフレーズブックとして、.qm(コンパイル済みな翻訳ファイル)か.ts(コンパイル前な翻訳ファイル)を、.qph(フレーズブックファイル)へ変換して作成します。

変換には、Qt Linguistに含まれている、lconvert.exeを使用します。
コマンドの例: 変換するファイル名は、hoge_ja.*、変換先は、hoge_ja.qph

.tsから.qphへ
lconvert -if ts -i hoge_ja.ts -of qph -o hoge_ja.qph

.qmから.qphへ
lconvert -if qm -i hoge_ja.qm -of qph -o hoge_ja.qph

・.poから.qphへ
lconvert -if po -i hoge_ja.po -of qph -o hoge_ja.qph

・.potから.qphへ
lconvert -if pot -i hoge_ja.pot -of qph -o hoge_ja.qph

・.xlfから.qphへ
lconvert -if po -i hoge_ja.xlf -of qph -o hoge_ja.qph

・いくつかの.tsを束ねて.qphへ(hoge.tsとhoge2.tsを束ねて、hogehoge_ja.qph)
lconvert -if ts -i hoge_ja.ts -if ts -i hoge2_ja.ts -of qph -o hogehoge_ja.qph

これらの変換したものを、"フレーズ"のメニューから読み込めば流用できます。
また、変換したファイルを使って、一致した部分を一括して翻訳するには、
SSを参考にして "編集" ⇒ "一括翻訳" でできます。


備考: lconvert.exeを使用して、.ts、.qm、.po、.pot、.xlfの相互変換が可能です。
普段使用している翻訳アプリで翻訳した後に、Qt用の.qmへ最終変換など。

※Qtの翻訳は、可能な限り、Linguistの使用を推奨します。
理由:
Qtの開発環境の一部なので必然的にQtのフレームワークの使用が前提となります。
そのため該当するソースがあれば、GUIで実際のアプリでどのように表示されるかを確認しながらの翻訳ができます。
Poeditなどは、汎用の翻訳アプリなので、どのように反映されているかは、
実アプリを起動する必要があります。
(ただしPoedit内からでも該当するソースの行を見ることは可能です)



サイトで翻訳 - Transifexの説明 ここ
(ここ以外にも、crowdinなど多数あります)

・オンラインで翻訳をしたい場合、
エクセル風の罫線区切りなインターフェースで翻訳に参加できます。



・大まかな説明
左、中央、右の3ペインが基本となった画面で翻訳をします。
(このSSは、指定期日以降に翻訳されたものだけを表示するようにフィルターで設定しています)
内訳は、左側の列に原文、真ん中の列に翻訳、右側の列に、原文と似た文章の翻訳サンプル(原文とどの程度類似性があるかの%表示付き)と翻訳履歴。
自分、または別の人のコメントや登録しておいたその言語共通の辞書機能があります。
(英日辞書や表記ゆれの防止に登録しておいた訳など)

コメント機能は、その言語の翻訳者だけに向けたコメント(日本語で書いても大丈夫)と、
他の言語の翻訳者などでも表示される問題提起コメント(共通言語の英語で書く)があります。

問題コメントは、
提起者がどの言語担当なのかと、なぜ問題を提起しているかが書かれています。
例えば、超難解なtheだけの項目(この場合基本的に、日本語の場合"それ や これ"でいいと思いますが " "空白一個 で凌いだりします。
相当悩めるのが、各行から呼び出され動的に内容が入れかわる行な場合...。
the なんとか、なんとか the などで、前後が動的に入れ替わる。(%1 theとかthe %1など) 
単語が3個以内の短文(Is、is、as、to、too、IS this、There wareなど)でどこを指しているか不明な場合など。

 ・オフラインで翻訳したい場合は、翻訳に必要なファイルを選択後に(翻訳用、レビューされた項目のみ、ユーザー用)ダウンロードして、手元の翻訳アプリで翻訳後にアップロードし反映させることもできます。
手元で翻訳した内容と、サイト側がすでに同一の場合、その項目は書き換わりません。
変更があった場所だけが、更新されます。

・Githubとの連携が可能です。Githubの原文を修正すれば、Transifex側の該当部分にも(設定すれば)反映させることができます。ただし、即時反映というわけではなく、
ラグがあります。(6-24時間程度、ポーリング間隔がどうなっているのか不明)

・原文が更新された場合、登録したmailへその更新を知らせる機能もあります。
Transifexの個人設定の通知と、ウォッチする各プロジェクトの両方で設定する必要があります。

 ログイン後の、画面で右上の方で赤で囲った場所。

簡易的なTransifexの各翻訳者の権限


・コーディネーター権限 ⇒ 下記の全権限を持っています。
 (この上の権限所持者は、原文の管理者=プロジェクトの創案者)
・レビュアー権限 ⇒ 未翻訳な部分の翻訳に加えて、
 項目をレビュー済み(確定、校正済)としてロック可能
・一般翻訳者権限 ⇒ 未翻訳な部分や、ロックがかかっていない項目のみ改変が可能

※詳細 ⇒ TransifexのHELP CENTER

翻訳に参加する場合、基本的に一般翻訳者権限を原文の管理者から付与されます。

一般翻訳者権限から昇格したい場合(ロックがかかった部分を修正したい(表記ゆれを統一等))
レビュアー権限は、原文の管理者かコーディネーターのどちらかに申請して受理される必要があります。(一般的に原文の管理者へ申請します)

誰もその言語の翻訳に参加していない場合、基本的にコーディネーター権限が付与されます。
注意! Japanese(日本語)とJavanese(ジャワ語)を間違えないでください。
綴り全体で、三文字目の"p"と"v"しか違わないため、間違えやすいです。
間違えて申請すると、その言語のコーディネーター権限が(おそらく)付与されます。 

また、間違った場合、Japaneseで再申請して、受理されるまで待つ必要があります。
 
備考:
Kodiの翻訳は、transifexでのレビュー権限を、個人的に管理者あてへ申請していません。
そのため、私が一般翻訳者権限で翻訳した部分や、
レビュー済みとしてロックがかかっている既存の翻訳(40程度)を除いて、プロジェクトに参加すれば修正可能です。
一般翻訳者権限は、transifexにログインしてプロジェクトへの参加を申請すれば、原文の管理者から数日以内に許可が降りると思います。