日本語化(多言語化)

Last-modified: 2019-11-27 (水) 23:48:00

日本語化

WML中の「 _"文字列" 」という形式で書かれた部分は、対応する言語用のファイル(.mo)があれば、翻訳して表示されます。
WML中で「 "文字列" ( _ が付いていない)」という形式で書かれた文字列は翻訳対象外です。

 

アドオンを作成した場合、文字列に直接日本語を記述すれば日本語対応のアドオンを作ることができますが、日本語/英語両対応させたい場合は、日本語用の翻訳ファイル(.mo)を用意する必要があります。

 

.moは以下の場所に配置します。

 

/add-ons/アドオン名/translations/ja/LC_MESSAGES/wesnoth-my.mo

 

.moを導入した上で、_main.cfgに日本語化の記述をした上で、シナリオなどのcfgファイルの先頭に以下のように記述すれば、日本語化されます。(wesnoth-myの部分は好きな英字を設定します)
textdomain ホニャララは[textdomain]ないで定義したことを適用するコマンドです。
基本的には_main.cfgに書くだけで良いでしょう。

_main.cfgに

#textdomain wesnoth-my
[textdomain]
    name="wesnoth-my"
    path="data/add-ons/[アドオン名]/translations/"
[/textdomain]
 

各シナリオに

#textdomain wesnoth-my
 

cfgファイルの途中で #textdomain を使うこともできます。例えば以下の行の後は、マルチプレイヤー用の翻訳が使われます。

#textdomain wesnoth-multiplayer

.poファイルの作成

(以下はLinux等のUnix的な環境で実行することを想定します。)

 

.moファイルを作るためには、.poファイルが必要になります。
.poファイルはアドオン等のものも含めて本家サイトに用意されていることがあります。

 

しかし、そのサイトにあるものがすごく古いものだったり、一部のアドオンについてはそもそも存在しないこともあります。そのような時は自分で.poファイルを作ることで用意できます。これをするためにはwmlxgettextコマンドが必要なのですが、通常配布されているwesnothのパッケージにはここで使いたいwmlxgettextコマンドは含まれていません。

 

(配布パッケージにはtools/wmlxgettextがありますが、これを正しく実行する方法は良くわかりません。また、通常使われているwmlxgettextはこのtoolsのものでは無く、以下で述べるutilsに含まれているものみたいです。)

 

そこで、まずはwesnothのソースパッケージをダウンロードして、wmlxgettextを入手します。このコマンドはソースコード中、wesnoth-(バージョン)/utils/wmlxgettextにあります。

 

以下では未知よりの侵略(Invasion from the Unknown)のアドオンの場合の実行例を示します。まずは、このアドオンがインストールされている場所へ移動します。これを書いてるヒトの環境(wesnoth-1.10 at debian testing)では .local/share/wesnoth/1.10/data/add-ons/Invasion_from_the_Unknown になります。

 

ここで以下のようなコマンドを実行します。(どっか)や(バージョン)、ドメイン名、出力ファイル名は適宜置き換えて下さい。

% find . -iname "*.cfg" -or -iname "*.lua" | \
  xargs (どっか)/wesnoth-(バージョン)/utils/wmlxgettext --directory . \
  -domain wesnoth-Invasion_from_the_Unknown \
  > wesnoth-Invasion_from_the_Unknown.pot

現在のディレクトリ以下にある.cfgファイルからまとめてテキストを抽出しています。domainに渡す文字列は上の項目にあるような、そのアドオンのtextdomainです。(_main.cfg 等の先頭に書いてあります)。あとは、できた.potファイルを元に一旦 msginit --locale=ja --input=wesnoth-Invasion_from_the_Unknown.pot とでも行って、.poファイルを生成。そんでpoedit等で編集していく流れになるかもしれない今日この頃。

 

なお、上のコマンドについては、

% (どっか)/wesnoth-(バージョン)/utils/wmlxgettext --directory . \
 -domain wesnoth-Invasion_from_the_Unknown *.cfg */*.cfg */*/*.cfg \
 */*/*/*.cfg */*/*/*/*.cfg > wesnoth-Invasion_from_the_Unknown.po

のようにも書けます。あらかじめディレクトリ階層を調べないといけないのでちょっと面倒くさいですが、こちらのほうがわかりやすいかもしれません。ちなみに、.luaファイルにも翻訳可能な文字列が存在する場合があるので、その時はそれらのファイルも読み込ませる必要があります。

(2015/01/29) .luaファイル関連の記述追加とか色々更新

.poファイルと.moファイル

.moファイルはバイナリ(機械語)ファイルで、.poファイル(テキストファイル)を変換したものです。
そのため、まず.poファイルを作って、それを変換することになります。

 
 

.poの書き方

一番最初に以下のようなコードを書く必要があります。

 
msgid ""
msgstr ""
"Project-Id-Version: Battle for Wesnoth 1.10.3-CVS\n"
"Report-Msgid-Bugs-To: http://bugs.wesnoth.org/\n"
"POT-Creation-Date: 2014-02-21 18:28+0200\n"
"PO-Revision-Date: 2014-02-27 14:12+0900\n"
"Last-Translator: 訳者の名前\n"
"Language-Team: 訳しているチーム名\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 

続いて以下のようなコードを書いていきます。

msgid "sword"
msgstr "剣"
msgid "spear"
msgstr "槍"
msgid "staff"
msgstr "杖"
msgid "Survive until turn 50."
msgstr "50ターン生き残る"
msgid "Kill enemy leader(s)"
msgstr "敵のリーダー(達)を倒す"
msgid "teamname^West"
msgstr "西軍"
msgid ""
"You wouldn’t do anything stupid like charging that quintain yourself again, "
"now would you?\n"
"Use the fighters you recruited first; they’ll be a lot of help."
msgstr ""
"もう一度クィンティンに自分で突撃するような馬鹿な真似はしないだろうな?\n"
"雇用した戦士を先に使うのだ。彼らは非常に助けになってくれるだろう。"
 

この中に出てくる \n は改行を意味しています。

 
 

.poと.moの変換

以下のページに.poと.moの変換についての説明があります。
日本語化などに使うmoファイルの編集について - ねこじゃらし

 

Mac (OS X)向けには以下のページがあります。
Mac OSXでpoからmo変換の国際化環境を構築する ~MacPortsをインストールする~ | aguuu
Mac OSXでpoからmo変換の国際化環境を構築する ~gettextをインストールしてpoからmoにコンバートする~ | aguuu