AMOSは、Automated Manipulation Of Strings(ストリングの自動操作)の略です。AMOSは、Moodleのストリングとその履歴を一元的に保管するリポジトリです。Moodleのコードへの英語ストリングの追加を追跡し、翻訳を収集し、一般的な翻訳タスクを処理し、Moodleサーバに展開する言語パッケージを生成します。
この名前は、Janua linguarum reserata(開かれた言語の扉)の著者であるヨハン・アモス・コメニウスにちなんで付けられました。ごめんね、Tori ;-)
AMOSは、Moodle翻訳サイトでホストされています。
基本概念
AMOSは、メインナビゲーションブロックから利用できる複数のツール、すなわち翻訳ツール(Translator)、ステージ(Stage)、スタッシュ(Stashes)、貢献(Contributions)およびログ(Log)で構成されています。
- 翻訳ツール(Translator) - 作業したいストリングを絞り込んで翻訳できるツールです。
- ステージ(Stage) - 現在のセッション中に翻訳したストリングを保持する一時的な作業領域です。メンテナは、ステージをストリングリポジトリに恒久的にコミットできます。貢献者は、ステージをメンテナに提出できます。
- スタッシュ(Stashes) - ステージのスナップショットです。作業内容を保存できる、コンピュータ上の普通のファイルのようなものだと考えてください。スタッシュは言語パックのメンテナに提出できます。
- 貢献(Contributions) - 提出されたすべての貢献とその現在のステータスを追跡するデータベースです。このデータベースのレコードは、翻訳されたストリングが添付されたMoodleトラッカーのイシューのようなものです。
- リポジトリ(Repository) - lang.moodle.orgサーバで稼働している、Moodleのすべてのストリングとその履歴のデータベースです。
- ログ(Log) - Moodleのストリングに対するすべての変更のログを表示します。
翻訳ワークフロー
次のデータフロー図は、翻訳プロセスの中でAMOSのツールがどのように使用されるかを示しています。
AMOSの重要なコンポーネントは、ステージング領域、略してステージです。ステージは、現在のログインセッション中に翻訳されたストリングを一時的に保持します。ログアウトすると、ステージはクリアされます(ただし、バックアップがあります。下記を参照してください)。翻訳をステージする、つまり翻訳されたストリングをステージに入れる方法はいくつかあります。
- AMOS翻訳ツールを使用する
- アップロードしたファイルからストリングをインポートする
- 以前に作成したスタッシュを適用する
- 提出された貢献を適用する
言語パックのメンテナは、AMOSのストリングリポジトリへの書き込みアクセス権を持っています。そのため、メンテナは自分のステージを恒久的にコミットできます。ステージがコミットされると、ステージされたストリングはAMOSリポジトリに保存されます。AMOSは1時間ごとに、リポジトリの最新のスナップショットからZIPパッケージを生成します。これらのZIPパッケージは、言語パックのダウンロードページ https://download.moodle.org/langpack/ で公開されます。さらに、Moodleサイトはサイト管理 > 言語設定 > 言語パックから、言語パッケージを自動的にインストールおよび更新できます。
コミュニティのメンバはリポジトリへの書き込みアクセス権を持っていないため、自分のステージをコミットすることはできません。その代わりに、ステージをメンテナに提出できます。ステージを提出すると、新しい貢献レコードが作成され、言語パックのメンテナに自動メールメッセージで通知されます。メンテナは提出された貢献をレビューし、承認した場合は貢献者に代わってコミットできます。
ステージは保存することもできるため、作業を中断して、次回サイトに戻ってきたときに続きを行うことができます。ステージは、いわゆる「スタッシュ領域」に保存されます。スタッシュ領域はスタッシュで構成されています。新しいスタッシュは、単に現在のステージのスナップショットコピーです。AMOSは、最新のステージのバックアップコピーとして、スタッシュを1つ自動的に保持します。スタッシュもメンテナに提出できます。
AMOSのツール
翻訳ツールの使用

翻訳ツールのページは、主に2つの部分で構成されています。上部には、フィルタフォーム(1)があります。このフィルタを使用して、翻訳したいストリングを取得します。フィルタ設定を保存すると(2)、絞り込まれたストリングの表が下に表示されます。
表の各行は、1つのストリングを表しています。表には4つの列があります。最初の列(3)には、ストリングが使用されているバージョン(またはブランチ)、その識別子およびコンポーネントが記載されています。次のようなテキストが表示されます。
4.0 [completiondate,coursereport_completion]
これは、「このストリングはMoodle 4.0で使用され、識別子は「completiondate」で、「courserepor_completion」コンポーネントに属している」という意味です。
2番目の列(4)には、ストリングの英語の原文が含まれています。テキストの下にGoogleアイコンが表示されます。このアイコンをクリックすると、翻訳中の言語へのストリングの自動翻訳を取得できます。次の列には、このストリングの翻訳先の言語のコード(たとえば、チェコ語の場合は「cs」)が含まれています。
最後の列には、翻訳そのものが含まれています。空の場合、そのストリングはまだ翻訳されていません。空でない場合は、現在の翻訳が表示されます。セルをクリックすると、入力エディタに変わります。翻訳を入力し、セルの外側をクリックすると、翻訳がステージされます。送信ボタンはなく、テキストはバックグラウンドで自動的にステージに送信されることに注意してください。セルの色が青に変わったことがわかります。青色は、その翻訳が現在ステージされていることを示しています。
ストリングフィルタには、さまざまな使い方があります。1つのコンポーネントで作業することも、未翻訳のすべてのストリングを一度に作業することもできます。特定のテキストを含むストリングを(英語または翻訳されたストリングのいずれかで)検索することなどもできます。古いバージョンのストリングを確認することもできますが、それらのストリングは読み取り専用です。それらのストリングは、1.x翻訳のCVSリポジトリからAMOSに自動的に取り込まれます。
フィルタの送信ボタンの下にある「permalink」を使用すると、現在のフィルタ設定を保持できます。たとえば、よく使用する設定をブックマークしたり、リンクのURLをコピーして誰かに送り、そのURLにアクセスするだけでフィルタを設定できるようにしたりできます。
翻訳が終わったら、ステージのページにアクセスすることを忘れないでください。おそらく、ステージをコミットする(言語パックのメンテナの場合)か、メンテナが作業内容をレビューして言語パックに含められるようにメンテナに提出するかのどちらかを行いたいはずです。
残念ながら、AMOSがリクエストURIが大きすぎて処理できないと判断することがあります :(
ステージの使用

翻訳されたストリングは、カーソルがエディタフィールドから離れるとすぐに、ステージと呼ばれる一時的な領域に入れられます。ステージは、作業内容がリポジトリにコミットされる(言語パックのメンテナの場合)か、取り込みのためにメンテナに提出されるか、スタッシュされるまで、作業内容を保持します。
ステージは、ログアウトするとクリアされます。ステージを恒久的に保存するには、明示的にコミットまたはスタッシュする必要があります。それを忘れた場合や、接続に問題が発生した場合、ブラウザがクラッシュした場合などでも、オートセーブスタッシュでステージの最新のスナップショットを見つけることができます。
言語パックのメンテナの場合は、ステージをリポジトリにコミットできます。これにより作業内容が登録され、翻訳されたストリングが公式の言語パッケージの一部になります。また、ストリングの送り先にしたいブランチを選択して「propagate」ボタンをクリックすることで、ストリングをほかのブランチに伝播させることもできます。作業を省き、バージョン間で表現の一貫性を保つために、そうするのが賢明です。
更新された言語パッケージは、ZIP形式で https://download.moodle.org/langpack/4.0/ に1時間ごとに公開されます。最終更新日時は、ページの下部で確認できます。同時に、Moodleサイトで自動更新に利用できるようになります。
ステージは、ファイルからストリングをインポートしたり、言語パックのバージョンをマージまたは比較したりするためにも使用できます。
ファイルのインポート

ストリングはオフラインで翻訳し、ステージのページを使用してAMOSにアップロードし直すことができます。現時点でサポートされている形式は、Moodleで使用されている一般的なPHP形式のみで、ストリングは$stringという連想配列で定義されます。明らかなセキュリティ上の理由から、AMOSはユーザがアップロードしたPHPファイルを実際に実行することはできません。その代わりに、PHPパーサと同様の方法でアップロードされたファイルを解析し、有効なストリング定義とみなされるパターンを探します。つまり、有効なPHPコードのすべてが有効なストリング定義になるわけではありません。AMOSパーサでは、次の条件を満たす必要があります。
- ファイル名が、Moodleで使用されている有効なコンポーネント名である(たとえば、moodle.php、enrol_manual.php、workshop.php)
- ファイルが構文エラーのない有効なPHPコードである(つまり、PHPのlintチェックに合格する)
- ストリングがグローバル配列$stringの要素として定義されている
- ストリングがシングルクォートで囲まれた定数である
AMOSにインポートする有効なファイルの例(ファイル名countries.php、チェコ語の翻訳)
<?php $string['AE'] = 'Spojené Arabské emiráty'; $string['AF'] = 'Afghánistán'; $string['CH'] = 'Švýcarsko'; $string['HU'] = 'Maďarsko'; ?>
インポート中、ファイル内で見つかったストリングは、ウェブで翻訳した場合と同じようにステージに追加されます。その権限がある場合は、ストリングをリポジトリにコミットできます。
複数の.phpファイルをZIPファイル(最大サイズ:2MB)にまとめてそのZIPファイルをインポートすると、一度にインポートできます。
スタッシュの使用
いつでも、現在のステージのスナップショットを保存できます。このようなスナップショットをスタッシュと呼びます。スタッシュされたストリングは、手動で破棄するまで永久に保持されます(これを乱用せず、スタッシュを適度な大きさに保ってください)。スタッシュを管理するには、AMOSの右側のメニューにある「Stashes」をクリックします。スタッシュの一覧が表示されます。スタッシュの上にマウスを移動すると、「いないいないばあ」のように現れるボタンがあります。スタッシュは適用(apply)でき、スタッシュされたストリングがステージにコピーし戻されます。ポップ(pop)は、スタッシュを適用してから破棄(削除)します。ドロップ(drop)は削除のようなものです。メンテナに提出(submit to maintainer)は、まさにそれを行うためのフォームを開きます。
すべてのユーザには、オートセーブスタッシュと呼ばれる特別なスタッシュレコードが1つあります。このスタッシュは、ステージの最新の状態を保持します。何らかの理由(ブラウザのクラッシュ、インターネット接続の切断、誤ってすべてのストリングのステージを解除したなど)で現在のステージを失った場合に役立ちます。そうなった場合は、オートセーブスタッシュを適用するだけで作業内容を取り戻せます。オートセーブスタッシュは、ストリングをステージするたびに更新されます。そのため、ステージが空で、オートセーブスタッシュにストリングがたくさん入っている状態で、スタッシュを適用せずに先に翻訳ツールに移動すると、オートセーブは新しく翻訳したストリングで置き換えられます。まずはこの機能を少し試してみることをお勧めします。
ログツールの使用
ログのページでは、匿名ユーザでも、AMOSが追跡しているコミットの履歴を検索できます。ページの上部には、特定の情報やレポートを探すためのフィルタがあります。フィルタが実際にどのように機能するかを理解しておくことが重要です。検索と絞り込みは、2つのステップで行われます(これはパフォーマンス上の理由から必要でした)。
- まず、「Commit filter」フォームで指定された条件に基づいて、コミットレコードが検索されます。フィルタ設定に一致するコミットが多く見つかった場合は、最新の100件のコミットのみが処理されます。
- 次に、見つかったコミットの中から、すべてのストリング変更レコードが返されるか、これらのレコードもフィルタできます。その場合は、「String filter」フォームセクションの設定が使用されます。
デフォルトでは、フィルタは前回ログインしたとき以降のすべてのコミットを探し、それらのコミットによって変更された、現在翻訳中のブランチのストリングのみを表示します。
言語パックとMoodleのバージョン
Moodleの新しいバージョンがリリースされると、それが「Amos - Translator」ページのデフォルトバージョンになります(上部のチェックボックスを参照してください)。
推奨されるワークフローは、新しいMoodleバージョンで翻訳作業を続け、その作業内容を古いバージョンにマージすることです。 以前は、「Amos - Stage」ページを使用してこれを行っていました。ソースバージョンを作業していたバージョンに設定し、ターゲットバージョンをストリングのコピー先にしたいバージョンに設定します。現在では、AMOSが(ほとんどの)ストリングを該当するすべてのブランチに自動的に伝播させます。
「お気に入り」のプラグインの翻訳すべきストリングを追跡する
パーマリンク機能を使用すると、限られた数の追加プラグインについて、未翻訳または古くなったストリングがないかを頻繁に確認できます。
パーマリンク機能は、次のように使用することを想定しています。
- AMOSのフィルタ設定を使用します(つまり、表示したいバージョンやコンポーネントなどを定義します)。たとえば、バージョン4.0を選択し、次にすべてのコアコンポーネントといくつかの追加コンポーネントを選択できます。
- 「Save filter settings」を押して、AMOSにストリングを表示させます。
- その後、「Permalink」リンクから取得できるURLをコピーまたはブックマークできます。
- そのURLにアクセスすると、フィルタが現在の設定に戻ります。
- 問題は、現時点では、AMOSでは、あるコンポーネントバージョンのストリングと別のコンポーネントバージョンのストリングを混在させることができないことです。そのため、「Workshop 3.11のストリングとEssential 3.9のストリングを一緒に」表示するようなことはできません。3.11と3.9の両方のバージョンフィールドと、WorkshopとEssentialの両方のコンポーネントを選択する必要があります。しかし、そうするとWorkshopのストリングが2回表示されてしまいます。
関連項目
- 貢献の承認 言語パックのメンテナ向けの説明動画
- 言語パックへの貢献 言語パックの貢献者向けの説明動画
- デフォルト言語の変更 デフォルト言語を変更する方法についての説明動画
