プラグイン入れたら UI が英語だった、というあるあるケース
Moodle にサードパーティのプラグインをインストールして、いざ設定画面を開いたら 英語のままだった、という経験ありませんか?
コアのメニューは日本語なのに、そのプラグインだけ英語。ユーザーに見えるメッセージや設定項目の意味が分からなくて困る……これ、けっこうあるあるです。
この記事では、User Expire プラグイン を例に、Moodle の公式翻訳プラットフォーム AMOS を使って日本語言語パックを作成・適用するまでの手順を解説します。
この記事でやること
- なぜ日本語化が必要か(+OSS貢献につながる理由)
- AMOS の仕組みを理解する
- Web UI で1行ずつ翻訳する方法
- 言語ファイルをまとめてアップロードする方法
- 言語パック保守者(Language Pack Maintainers)への送信テンプレート
- 生成 AI を使った一括翻訳プロンプト例
そもそも、なぜ日本語化が必要?
より良いユーザー体験を提供できる
Moodle を業務で使うユーザーの多くがIT用語や英語が得意とは限りません。「Expired」とか「Grace period」とか書かれても、何のことか分からない。日本語にしておくだけで 問い合わせを減らす ことができるでしょう。
オープンソースコミュニティへの貢献になる
Moodle は世界中で使われているオープンソース LMS です。あなたが作った日本語訳は、AMOS 経由で Moodle の公式リポジトリに取り込まれ、世界中の日本語ユーザーが恩恵を受けます(どれくらいいるかは不明ですが・・・)。
「自分のサイトだけで使えればいい」という翻訳ファイルも、AMOS に投稿するだけでグローバルな貢献になる。これが Moodle コミュニティの良いところです。
実際の影響範囲
日本語翻訳が不完全なプラグインは、AMOS のデータベース上で「翻訳完了率」が低いと表示されます。コミュニティ全体で見ると、こういった未翻訳プラグインは意外に多く、あなたの一投稿が多くのユーザーの利便性を直接改善することにつながります。
AMOS ってなに?
AMOS(A Moodle Open-Source Translation System)は、Moodle の公式翻訳プラットフォームです。
どういう仕組みで動いているか
① 開発者がプラグインの英語言語ファイルを GitHub に push
↓
② AMOS が自動的に英語文字列を取り込む
↓
③ 翻訳者(あなた)が AMOS の Web UI または言語ファイルで日本語訳を登録
↓
④ 言語パック保守者が確認・承認
↓
⑤ Moodle サイトが「言語パックの更新」を実行すると自動で反映される
重要なのは、最終的には それぞれの Moodle サイト側で「言語パックの更新」を実行しないと反映されない点です。翻訳を承認してもらったあとに一度更新が必要です。
AMOS を使うのに必要なもの
- Moodle.org のアカウント(無料)
- 翻訳したいプラグインの名前(コンポーネント名)
- 日本語訳したいというモチベーション(これが一番大事)
今回の例:User Expire Block
User Expire Block(block_userexpire)は、コースへの登録有効期限をユーザーに通知するブロックプラグインです。残り日数・時間をブロック内に表示し、有効期限が設定されていない場合は登録ページへのリンクを表示します。
GitHub リポジトリ:https://github.com/coderader/moodle-block_userexpire
インストール直後は、ブロックに表示されるテキストがすべて英語です。これを日本語化していきます。
Step 1|AMOS にログインして翻訳対象を探す
- https://lang.moodle.org にアクセス
| 項目 | 設定値 |
|---|---|
| Component | block_userexpire |
| Language | Japanese/日本語[ja] |
| missing and outdated strings only | チェックを入れる(未翻訳のみ表示) |
- 「Show Strings」 ボタンをクリック
画面の下に未翻訳の文字列一覧が表示されます。
Step 2a|Web UI で1行ずつ翻訳する方法
手軽にできる方法から始めましょう。文字列数が少ないプラグインや、部分的に修正したいときに向いています。
翻訳の入力
検索結果に英語の文字列と、その隣に入力フィールドが並んでいます。今回の例では、まだ誰も日本語に翻訳していないことがわかります。
block_userexpire の文字列はこんな感じで入力します。
strftimedate は日付フォーマット文字列
strftimedate は PHP の date() に渡されるフォーマット指定です。%Y年%m月%d日 のように日本語の区切り文字を入れると、「2026年05月31日」のような表示になります。英語の %d %B %Y(例:31 May 2026)より自然な日本語表示になります。
変数 {$a} や HTML タグはそのまま残す
他のプラグインに {$a->username} のような変数プレースホルダーや <a href> などのタグがある場合、翻訳しても絶対に削除・変更しないでください。消してしまうと表示が壊れます。
各行を入力したら、画面下部の 「Go to the stage」 リンクを選択します。
フィールドに入力すると一時的にstage状態として保存されますが、この状態ではまだサイトには反映されません。言語パック保守者にリクエストを送信し、承認されて初めて有効になります。
言語パック保守者に送信する
入力内容と再度確認し、「Send strings to language pack mainteiners」ボタンをクリックします。
Step 2b|言語ファイルで一括アップロードする方法
文字列数が多いプラグインや、ローカルで一括翻訳したい場合はこちらが効率的です。
英語の言語ファイルを取得する
プラグインの言語ファイルは通常、GitHub リポジトリの lang/en/ ディレクトリにあります。
# User Expire Block の場合
https://github.com/coderader/moodle-block_userexpire/blob/master/lang/en/block_userexpire.php
ファイルの中身はこんな PHP 形式になっています:
<?php
$string['pluginname'] = 'User Expire Block';
$string['expiretitle'] = 'Enrollment Expires';
$string['expirelabel'] = 'Expires';
$string['expireday'] = 'days';
$string['expirehours'] = 'hours';
$string['enrolltitle'] = 'Enroll in Course';
$string['enrolltext'] = 'Click here to enroll in the course';
$string['strftimedate'] = '%d %B %Y';
日本語ファイルを作成する
英語ファイルをベースに、同じキー名のまま value だけを日本語に変えたファイルを作ります。
<?php
$string['enrolltext'] = 'このコースに登録してください';
$string['enrolltitle'] = 'このコースに登録';
$string['expireday'] = '日';
$string['expirehours'] = '時間';
$string['expirelabel'] = '有効期限';
$string['expiretitle'] = 'あなたの登録';
$string['pluginname'] = 'ユーザー有効期限ブロック';
$string['strftimedate'] = 'Y年m月d日';
ファイル名とキー名は絶対に変えない
- ファイル名:
block_userexpire.php(英語と同じ) -
$string['key']のキー部分:変更NG - 変えていいのは
= '...'の中身だけ
AMOS にアップロードする
- AMOS の未翻訳のStrings一覧の画面で、まだ何も日本語文字列を入力していない状態で「Go to the stage 」リンクを選択します。
2.「Import translated strings from file 」メニューが表示されますので、これを選択します。
- バージョンと言語を選択し、先ほど作成した日本語の言語ファイルを選択しアップロードします。
- 「Import」 をクリック
アップロードが成功すると、ステージング画面に取り込まれた文字列の一覧が表示されます。
- インポートされた内容を確認し、「Send strings to language pack mainteiners」ボタンをクリックします。
これで全文字列が一括で「Suggested(提案中)」ステータスになります。
Step 3|言語パック保守者に送信する
翻訳の提案が完了したら、言語パック保守者に確認を依頼します。
AMOS 上では自動的に指定した言語の保守者へ通知が飛ぶ仕組みになっていますが、誰が保守者に登録されているかは一覧で確認することができます。
言語パック保守者一覧: https://lang.moodle.org/local/amos/credits.php?lang=ja
言語パック保守者への連絡テンプレート
件名:[AMOS] block_userexpire 日本語翻訳のレビューをお願いします
日本語言語パック保守者の皆様
はじめまして、[あなたの名前] と申します。
block_userexpire(User Expire Block)プラグインの日本語翻訳を AMOS に登録しましたので、
レビューをお願いできますでしょうか。
【翻訳コンポーネント】
- プラグイン名:block_userexpire
- 対象バージョン:Moodle 4.x
- 翻訳文字列数:8 件
【翻訳方針】
- Moodle コア日本語パックの用語に準拠しました
- 変数プレースホルダー({$a})は原文のまま保持しています
- 直訳が不自然になる箇所は UI として自然な表現に意訳しています
【確認いただきたい箇所】
- `strftimedate` の訳:「%Y年%m月%d日」(日本語の日付表記として自然かご確認ください)
- `enrolltext` の訳:「コースに登録するにはここをクリックしてください」(リンクテキストとして長すぎる場合は短縮も検討します)
お忙しいところ恐縮ですが、よろしくお願いします。
[あなたの名前]
[Moodle.org のプロフィール URL]
最後に「Submit to mainteners」ボタンをクリックして送信します。
今回は日本人の保守者が受け取ることがわかっているので、日本語でタイトルとメッセージ入力しましたが、もし他の言語の翻訳を行う場合は、英語で入力するのが良いでしょう。
Step 4|Moodle サイト側で言語パックを更新する
AMOS で承認された翻訳は、Moodle サイトが言語パックを更新したタイミングで反映されます。
サイト管理 → 言語設定 → 言語パック を開いて、「すべてのインストール済みの言語パックを更新する」 を実行してください。
更新後にコースページを開くと、User Expire Block の表示が日本語になっているはずです。
承認されるまでの間でも、作成した日本語ファイルを moodledata/lang/ja/ ディレクトリに手動で配置すれば、自サイトだけ先に日本語化できます。
::
moodledata/
└── lang/
└── ja/
└── block_userexpire.php ← ここに配置
(おまけ)生成 AI で一括翻訳するプロンプト例
文字列数が少ないうちは手で訳すのが一番ですが、多い場合は生成 AI に初稿を作ってもらって、そこから手直しするのが効率的です。
プロンプト例
あなたは Moodle プラグイン翻訳に精通したプロのローカライザーです。
以下の英語の言語ファイル(PHP形式)を日本語に翻訳してください。
【翻訳ルール】
- 英語の語順に縛られず、日本語として自然で読みやすい表現にする
- Moodle コア日本語パックの用語に準拠する(Course→コース、Dashboard→ダッシュボード 等)
- 変数プレースホルダー({$a}、{$a->変数名})は絶対に変更・削除しない
- HTML タグはそのまま保持する
- $string['key'] のキー名は変更しない
- 文脈が不明で判断が難しい箇所は訳文の上に // TODO: コメントを残す
【出力形式】
PHP の言語ファイル形式のみで出力する(説明文・コードブロック記法は不要)
【翻訳対象】
```php
<?php
$string['pluginname'] = 'User Expire Block';
$string['expiretitle'] = 'Enrollment Expires';
// ... 以下に英語ファイルの内容を貼り付ける
```
行数が多いと精度が落ちることがあります
言語ファイルが 100 行を超えてくると、AI がキーと値のマッピングを誤ったり、変数を削除してしまうミスが増えます。そのような場合は 50行前後に分割して依頼するか、生成結果を必ず原文と照合するようにしてください。
block_userexpire は文字列数が少ないので問題ありませんが、大きなプラグインを翻訳するときは注意してください。また、文脈が読み取れない短い文字列(enabled、status など)は AI でも判断が難しく、誤訳になりやすいです。そういった箇所は手動で確認が必要です。
まとめ
| ステップ | やること |
|---|---|
| Step 1 | AMOS にログインして block_userexpire を検索 |
| Step 2a | Web UI で1行ずつ入力(小規模向け) |
| Step 2b | PHP ファイルを作って一括アップロード(大規模向け) |
| Step 3 | 言語パック保守者に確認を依頼 |
| Step 4 | Moodle サイト側で言語パックを更新 |
手間はかかりますが、一度やってしまえば同じプラグインを使っている世界中の日本語ユーザーが助かります。自分のサイトの利便性を上げながらオープンソースに貢献できる、Moodle ならではの仕組みです。
初めて翻訳する場合、レビューには数日〜数週間かかることがあります。急ぎの場合は手動ファイル配置で先に対応しておくと安心です。
参考リンク
- AMOS - Moodle 翻訳プラットフォーム
- User Expire Block(Moodle Plugins Directory)
- User Expire Block(GitHub)
- Moodle の言語パック管理 - MoodleDocs
- AMOS の使い方(Contributing translations)- MoodleDocs
- 日本語言語パック保守者一覧
※ この記事は Zenn (rublix) にも投稿しています。
















