Help:Extension:Translate/File format support/ja

From Linux Web Expert

略語 FFS は file format support を指します。翻訳拡張機能を使い、さまざまなファイル形式の翻訳済メッセージを読み書きするクラスの群を、一般に FFS と呼びます。

地域化技術の輪はソフトウェア開発者の手で何度も革新され、結果として翻訳対象のソフトウェアのメッセージにいくつもの保存形式が存在します。主に2グループに分類できます。

  • Key-based formats: each message has a key, usually a more-or-less meaningful string. Translation to every language is a map of keys pointing to values. Most formats fall into this group, including DTD, JSON, and MediaWiki's old format until 2014 (essentially a PHP array).
  • Gettext 型。プログラムの翻訳元は通常は英語で、英語自体が他言語の翻訳結果へのキーとなります。その実現には異なる形式でメッセージを保存するため、変動型の固有の偽キーを生成する必要があります。

FFS クラス入門

例外はいくつかありますが、FFS クラスはFFSインターフェースから派生し、すべてのクラスが実装するべき基本的なメソッドを定義します。

setWritePath( $target )
ファイル名の Setter。
getWritePath()
ファイル名の Getter。
read( $code )
ファイルからメッセージを読み取って構文解析する。
readFromVariable( $data )
ファイルと同じ形式の文字列変数からメッセージを読み取り、AUTHORS および MESSAGES の配列として返す。ここでファイルのテキストを実際に解析する。
write( MessageCollection $collection )
ファイルにメッセージを記述。
writeIntoVariable( MessageCollection $collection )
ファイルと同じ形式のストリング変数にメッセージを書き込む。ここで結果のメッセージファイルを慎重に構築する。

MediaWiki 翻訳

MediaWiki 翻訳を保存するクラスは、現状では FFS インターフェース導関数ではなく独立のクラスで処理をします。設定の説明書もあります。新規に FFS 型のクラスを開発中です。

SimpleFFS クラス

SimpleFFS クラスとは他の FFS クラス全ての祖先に当たり、また FFS クラスの記述の仕方を簡単に示しています。単純なキーに基づく形式を実行します。

  • ファイルごとに"\0\0\0\0"を境に2つの部分に別れます。
  • 片方には翻訳者名を "\0" で区切り記述します。
  • もう一方には "key=value" 形式で翻訳をやはり "\0" で区切って記述します。

SimpleFFS は意図的に単純化してあり、発生しがちなバグや問題を具体的に示します。例として等号「=」はエスケープされず、キーにも値にも使いません。ただ、それでは現実社会のプログラムには不都合もあります。SimpleFFS には便利なユーティリティの方法も実行します。

exists( $code )
ファイルが存在するかテスト。
writeReal( $collection )
より一般的なwriteIntoVariableとは別に、ファイル形式の書き込みの内部を実装。
filterAuthors
特製のブラックリストを用いて、ファイルから特定の執筆者を抽出。ボット、開発者、翻訳管理者などの利用者名の抽出に有効。
fixNewLines( $data )
行末を Unix 形式に置き換える。

FFS クラスを新規に記述する

上記の SimpleFFS メソッドはすべて上書きが可能です。ただし、ほとんどの実装はwriteIntoVariablereadFromVariableを実装するだけで済みます。

新規のクラスを記述する場合の一般的なヒント:

  • 実行可能ファイル形式の実行を避け、解析してください。
  • メッセージキーの修飾と復元を必ず実行します。
  • メッセージキーに問題のある文字が含まれていないと見込まないでください。含んでいるはずです。
  • 通常、出力はきれいで整っていて、読みやすいと期待されます。一部の人々は出力を手動で確認しようとします。
  • ほとんどの形式は fuzzy マーカーをサポートしません。エクスポート時にコメントとして追加し、インポート時にそれらを無視するものもあります。

サポートするファイル形式

既存の FFS クラスの一覧:

  • AndroidXml – Android アプリに使用
  • AppleFFS – iOS/Mac OS X 用でLocalizable.stringsに対応
  • Dtd – DTD ベースのプロジェクトに対応。例:Okawix、Mozillaなど。
  • FlatPhpFFS – MediaWiki で将来的に適用の予定
  • Gettext – Gettext ベースのプロジェクトに対応
  • Ini – INI ベースのプロジェクトに対応
  • JavaScript – すべての JavaScript 形式のファイル対応
  • Java properties – *.properties ファイル対応。Java および JavaScript プロジェクトの一部に対応し、しばしば DTD を伴う。
  • Json – jquery.i18n ベースのプロジェクトに対応。例:ポータブルな Universal Language Selector 用ライブラリ
  • Yaml – Waymarked Trails に対応
  • Ruby (Yaml) – オープンストリートマップと Shapado に使用
  • AMD (en) i18n bundle

この形式で実行する翻訳エクスポートの例はtranslatewiki.netを参照。

正しいタイトル処理はメッセージキーを修飾して確認

MediaWiki を基盤にする翻訳拡張機能は全てのメッセージを MediaWiki ページとして保存するため、キーには有効な MediaWiki ページ名を使う必要があります。キー修飾 (mangling ) はキー名をエスケープする手法がQuoted-printable エンコードに似ており、多少の改変をした後でメッセージをウィキページとして保存します。メッセージはキー復元を処理してから、ファイルに書き戻します。

FFS クラスでキー修飾のルーチンを上書きする場合は、往復とも性格に処理するか確認し – キーは MediaWiki への書き込み前に修飾し、元に戻してからファイルに訳文を書き戻す必要があります。

修飾を実行するのはStringMatcherクラスです。

FFS クラスをテストする

新しい FFS クラスを作成するたび、テスト用ディレクトリ内に対応するテスト用ファイルを作成してください。重要なテストの要素は次の通りです。

  • 形式のパーシング。基本的にreadFromVariable 関数から AUTHORS と MESSAGES に対する正しいキーと値が返ってくるか、テストします。
  • Roundtrip: キーとメッセージの記述が正しく読み書きできるかどうかテストします。

例えば既存のテスト用ルーチンとして JavaFFSTest を使ってください。