ここでは、Freecivの地域化(l10n)への貢献に関する情報を提供します。 対象読者はプレーヤーではなく翻訳者です。
Freecivは、国際化と地域化のためにgettextシステムを使用しています。 gettextの概要については、FreecivのGettextガイドを参照してください。詳細については、gettextのドキュメントを参照してください。 Freeciv翻訳の技術的詳細については国際化を参照してください。
参加するには[]
ロケールがすでにサポートされている場合は、既存のメンテナに連絡してみてください。 既存のロケールのリストと現況、連絡先の詳細については、翻訳ページを参照してください。 また、既存のpo-fileも調べてください。これには、最新の連絡先の詳細が含まれている可能性があります。 (ただし、翻訳が見捨てられたように見える場合は、それを引き継ぐことが適切な場合があります。)
新しいロケールを提供したい場合はfreeciv-i18n メーリングリストに投稿して意図をお知らせください。 ソースツリーへのアクセスを申請して、翻訳を追加および維持できるようにすることもできますが必須ではありません。
変更を投稿する方法など、すべての参加者に知っておいてほしい事柄については、こちらにも情報があります。
新たな言語のサポート[]
たとえば、コーンウォール語(kwロケール)を追加したいとします。その場合、下記の事項を実行します。
- 翻訳するバージョンを決めます。
- GitからFreecivのソースをダウンロードしてインストールします。
- configure.acの、ALL_LINGUASの含まれる行に'kw'を追加します。
変更前:
ALL_LINGUAS="es fr"
変更後:
ALL_LINGUAS="es fr kw" - autoConfツールを再生成します。
$ ./autogen.sh - Freecivをconfigureします。
$ ./configure - translation/coreディレクトリに移動します。
$ cd ./translation/core - freeciv-core.potファイルをmakeします。
$ make freeciv-core.pot - freeciv-core.potをkw.pox(予備の.poファイル)にコピーします。
$ cp freeciv-core.pot kw.pox - kw.poxファイルを編集してすべてのエントリを翻訳します。
- kw.poxのファイル名をkw.poに変更します。
$ mv kw.pox kw.po - kw.gmoファイルをmakeします。
$ make kw.gmo
(ただし、これが唯一の方法ではありません。このページからあなたの作業するバージョンの最近のfreeciv.potを入手してステップ8までスキップできます。)
poeditがエラーになるときは[]
新しいpoファイルを保存しようとしたときにpoeditがエラーを返す場合は、ファイルの最上部から次の行を削除してください。
#, fuzzy msgid "" msgstr ""
翻訳の更新[]
コードは常に変更されているため、新たな文章が追加されたり、古い文章が変更または削除されたりします。 上記の手順に従って行った翻訳を更新したいとします。その場合、下記の手順を実行する必要があります。
- Freecivソースをダウンロードしてインストールします。
(これは既存のkw.poファイルを含みます。)
po翻訳ファイルにすばやくアクセスするために、このページで最近生成されたファイルを取得できます。 - Freecivをconfigureします。
$ ./configure - 作業中の翻訳ディレクトリごとに以下のことを行います。(2.4以前ではpoのみ、2.5以降はtranslations/freeciv、translations/nationsなど)
- 翻訳ディレクトリに移動します:
$cd ./translations/freeciv - 補助.poファイルを作成します。
$make kw.pox
(これにはソースコード中の以前の翻訳と変更点のマージが含まれています。) - kw.poxファイルを編集して、すべてのエントリを更新します。
- kw.poxの名前をkw.poに変更します。
$mv kw.pox kw.po - kw.gmoファイルを作成します:
$make kw.gmo
- 翻訳ディレクトリに移動します:
新しいブランチでは、翻訳ディレクトリでmake update-poを使用できます。これにより、.potファイルが更新されてから、すべての.poファイルが更新されます。ソースディレクトリのルートでmake installを実行して、コンパイル済みの.gmoファイルをインストールし、実行時に翻訳を確認することを忘れないでください。
作業するブランチの選択[]
FreecivのGitリポジトリには、安定版ブランチがいくつもあります。どのブランチを作業するべきか選ぶヒントをいくつか紹介します。
- Freecivの最新の公開安定版(現在は3.1.0)のブランチを確認しましょう。よりバグフィックスを進めたリリースがこのブランチから作成される可能性があります。文字列は比較的安定しています。
- Freeciv.orgのダウンロードページで、ベータリリースが最近出ていないか確認しましょう。もしあれば、今後数カ月のうちにいくつかのリリースがこのブランチから作成される可能性がより高いでしょう。新しい翻訳を開始し、完了するまでに時間がかかると予想される場合は、完了する前に開発が終了する可能性のある安定したブランチではなく、ベータブランチまたは開発ブランチから開始することをお勧めします。 ただし、文字列はより不安定になります。
マスターブランチで直接作業することは避けるのが最善です。これは、新機能が開発され文字列が不安定であり、リリースにならない文字列を翻訳することになる場合があるためです。 古いブランチで行われた作業はいつでも新しいブランチに移行できるため、古いブランチを選択してもかまいません。疑問がある場合は、freeciv-i18nでアドバイスを求めてください。
作業する文字列の選択方法[]
Freeciv 2.5以降、翻訳可能な文字列はいくつかのセットに分割されました。
- freeciv/core
- ゲームエンジンで使用されるコア文字列、提供されたルールセットとシナリオ、および提供されたルールセット内の比較的少数の文明のセット。すべてのローカリゼーションには、このセットを含める必要があります。 (S3_0以降はcoreに名前が変更されました。)
- nations
- 拡張された文明のセット。これには何百もの追加の文明の説明が含まれており、多くのテキストが追加されますが、すべての寄稿者が維持することを約束しているわけではありません。これらの文明はアクセスするのは簡単ですが、デフォルトではプレーヤーに表示されなくなりました。プレイヤーは、文明名がローカライズされていない可能性があるという警告を受け取ります。
(2.4以前のバージョンではこれらは文字列のメインセットに含まれていましたが、多くのローカリゼーションで完全に翻訳されていませんでした。)
- ruledit(2.6から)
- ルールセットエディタに関連する文字列の小さなカタログ。これらは、translationsディレクトリの下に個別の文字列カタログとして保持され、それぞれに独自のfreeciv * .pot と言語 .po ファイルがあります。(現在、単一のカタログでこれらすべての文字列を処理したい翻訳者や、文字列カタログ間の競合/重複を調整するための適切なサポートはありません。)
2.4以前には、単一の文字列カタログ( po )がありました。ローカリゼーションを分割されたファイルに移行することは少し複雑であり、開発者に任せるのが最善です。 freeciv-i18n で質問してください。 (勇敢な人のために、これを支援するスクリプトがGNAPATCH#4650に添付されています。)休止中の翻訳はすでに全て移行されています。
2つのブランチの同期[]
Freecivの開発にはGitブランチを使用しています。私たちは、リリースを準備する際に必ず、その時点でいったん開発を止めたブランチを分岐させます。分岐したブランチではその後はバグフィックスのみを行うようにし、これが最終的に次の安定版としてリリースされます。この安定版ブランチと、頻繁に変更が加えられる開発版ブランチとの間で翻訳を同期させる方法を知らなかったとしたら、あなたは悪夢を見ることになるでしょう。
でも大丈夫です。同期させることはそれほど難しくはありません。まず作業するブランチを選び(安定版でも開発版でもかまいません)、翻訳を変更したら、'msgmerge'プログラムを使用します。これにより、一方のブランチで行った変更を他方のブランチにマージさせることができます。
安定版ブランチでde.poの翻訳を完了し、それを開発版ブランチにも適用したいとします。cdでtranslations/coreに移動し、下記のようにmsgmergeを呼び出します。
make freeciv-core.pot msgmerge --compendium=de.po <安定版de.poへのパス> freeciv-core.pot -o de.pox
例:
make freeciv-core.pot msgmerge --compendium=de.po ../../stable/translations/core/de.po freeciv-core.pot -o de.pox
この手順を行うと、'make de.pox'を呼び出すのと同様の結果が得られますが、3つ目のファイルである.poファイルも一緒にマージされる点が異なります。
最新のfreeciv*.potファイルの作成[]
(既にあるファイルに頼らずに) 最新のfreeciv*.potファイルを自力で作成するには、下記の手順を実行します。
- Gitリポジトリから最新のFreecivソースをチェックアウトします。
Gitの使用方法については、ここを参照してください。 - Freecivをconfigureします。
$ ./configure - ディレクトリに移動します。(2.5以降ではtranslations/freeciv やtranslations/coreなど):
$ cd ./translations/core - freeciv-core.potファイルをmakeします。
$ make freeciv-core.pot
訳し分け文字列の処理[]
一部の文は複数の解釈ができるため、簡単には翻訳できません。典型的な例は、英単語 "game" です。この単語はFreecivでは2つの役割で使用されます。
- 私たちがプレイする game。Freecivではメニューバーの先頭項目などで使用されます(日本語訳はゲーム)。
- 地形特徴の game 動物。食べるために狩猟される動物です(日本語訳は獲物)。
まったく異なる2つの概念が含まれている単語は、ほとんどの場合は別の単語に訳す必要があります。しかし、これらはコード内で同一の文として登場することがしばしばあります。これを通常の方法で国際化すると、freeciv.potファイル内では1つのエントリとして統合されてしまいます。
#: menu.c:123 terrain.c:321 msgid "Game" msgstr ""
そうなると、本来は別個の単語に訳し分けなければいけないのに、訳し分けることができません。
Freecivではこの問題を解決するために、訳し分け文字列(qualified translatable strings)という概念を導入しています。文字列が"訳し分け可能"であることを、単語の先頭に"?"と":"で挟んだ説明タグを付けることで示します。
gameの例で言えば、訳し分け文字列にするには下記のようにします。
"?play:Game" "?animals:Game"
こうすることで、freeciv.potファイル内に2つの独立したエントリとして登場するようになります。
#: menu.c:123 msgid "?play:Game" msgstr "" #: terrain.c:321 msgid "?animals:Game" msgstr ""
これで必要に応じた訳ができるようになりました。たとえば、de.poでは下記のようになります。
#: menu.c:123 msgid "?play:Game" msgstr "?Spiel:Spiel" #: terrain.c:321 msgid "?animals:Game" msgstr "?Tiere:Wild"
これはユーザーには下記のように表示されます。
Spiel および Wild
注意してほしいのは、説明タグは翻訳する必要がないということです。ユーザーには決して表示されないのですから。たとえば下記のようにしてかまいません。
#: menu.c:123 msgid "?play:Game" msgstr "Spiel" #: terrain.c:321 msgid "?animals:Game" msgstr "Wild"
引数の順序変更[]
文字列内の引数の順序を入れ替える必要がある場合があります。単語の順序が英語と逆になる言語では特に重要です。
2つの引数からなる文字列"%s %s"
があった場合、"%2$s %1$s"
とすることで、引数の順序を入れ替えることができます。フォーマット指定子の%の後ろに、X$を入れます。ここでXは、原文の何番目の引数をここに代入したいのか、その番号を指定します。
引数が混在している場合(たとえば、%sと%dの場合、項目に番号を付ける必要があることに注意)、たとえば、"%s and %d other unit lost to an attack from the %s %s"の引数の順序を変更するには、これらは「%3$s の %4$sからの攻撃により、%1$s と %2$d個の他のユニットが失われました」となります。
文字列にすでに数値が含まれている場合、たとえば"%2d: The %s ruler %s scored %d points"の場合、そのような数値と文字の組み合わせを1つのかたまりであるかのように扱います。 したがって「%2d: %s の統治者 %s が %d ポイントを獲得」のようになります。
よくあるエラーの確認[]
翻訳した.poファイルをGitに加える前に、明らかなエラーが含まれていないか確認した方が良いでしょう。
まず、.poファイルの先頭付近に、下記のようなエントリがあるはずです。
msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2000-04-07 13:50-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n"
(他にもフィールドが追加されているかもしれません)。このエントリは必ず存在し、最低でも下記の部分が含まれます。
msgid "" msgstr "" "POT-Creation-Date: 2000-04-07 13:50-0400\n"
次に、gettextには.poファイルを検証する機能があるので、それでクイックチェックを行いましょう。
% cd po % msgfmt -v -c --stat de.po
指定した.poファイルに何らかのエラーが見つかった場合、それぞれの問題についての説明が出力されます。
翻訳のチェックイン[]
(これは必須ではありません。freeciv-i18nリストに投稿して、誰かにこれを依頼することができます。) これには、Gitチェックアウトとツリーへの書き込みアクセスが必要です。
ソースルートディレクトリから、下記のようにコマンドを実行します。
% git commit --message "what I did with the po file, updates etc." translations/core/de.po
地域化ミニFAQ[]
ここでは地域化に関するいくつかの問題や疑問について述べます。
Freecivはどうやって使用言語を決定しているのですか?[]
Freecivは環境変数$LANGを確認して言語を決めています。ですから、この環境変数を設定する必要があります。たとえば、ドイツ語を使用するには、civserverあるいはcivclientを起動する前に、bashコマンドの"export LANG=de_DE"を発行する必要があります。tcshを使用している場合は"setenv LANG de_DE"です。 これでも英語のままの場合は、正しくない値を指定している可能性があります("de_DE"ではなく、間違えて"de"と指定していませんか? それでは上手くいかないでしょう)。あるいは、Freecivのソフトウェアを地域化サポート機能抜きでコンパイルしてしまったのかもしれません。こちらも参照してください。
"make freeciv.pot"を実行したのですが、ファイルが生成されません。[]
./configureがGNUバージョンのxgettextを見つけられなかったのだと思われます。./configureからの出力を見て、下記のような行を探してください。
checking for xgettext... :
(単なる":"です。xgettextへのパスではありません)この場合、./configureはいかなるバージョンのxgettextも見つけることができなかったことになります。あるいは、下記のような行があったとします。
checking for xgettext... /usr/bin/xgettext found xgettext program is not GNU xgettext; ignore it
この場合、./configureはGNUバージョンのxgettextを見つけることができなかったことになります。
どちらの場合でも、GNUバージョンのgettextシステムを入手してインストールする必要があります。非標準のディレクトリにインストールした場合は、./configureを呼び出す前に、gettextを$PATHに追加してください。
"Freeciv"は翻訳すべきでしょうか?[]
いいえ。どこで出てきても"Freeciv"のままにしてください("Freeciv"の"c"は大文字ではないことにも注意してください)。
poファイルをロードしても、Emacsのpoモードが起動しません。どうすればいいでしょうか?[]
GNU Gettextをインストールしてあるか確認してください。GNU FTPミラーサイトからダウンロードできます。
GNU Gettextはインストール済みですが、やはりpoモードが起動しません。今度はどうすればいいでしょうか?[]
シェルで'info gettext'と入力し(あるいはEmacsのinfoモードを使用し)、'Basics'から'Installation'を選択してください。Emacsのpoモードをインストールする方法の詳細が記述されています。
Emacsにpoファイルをロードしたところ、"Fontifying XX.po...buffer too big"というエラーメッセージが出ました。poファイルが大きすぎるのでしょうか?[]
心配は要りません。バッファもファイルもサイズは正常です。Emacsがこのようなエラーメッセージを出すのは、変数font-lock-maximum-sizeの値が小さすぎるためです。この値より大きいバッファのフォント表示をEmacsが拒否するのは、大きなバッファに対してフォントロックをすると、リソースが多量に消費されることがあるためです。値を変更するには、'M-x'を押し、'customize-variable'と入力し、Returnを押し、'font-lock-maximum-size'と入力し、Returnを押します。開いたバッファ内のヘルプテキストを読み、値を524288(2^19です。適切であると思われる値であればなんでもいいです)に変更してカスタマイズしてください。これでファイルを開いたときにフォント表示されるでしょう(ファイルサイズが512kB以上でなければ)。