Gettextガイド

ページ名:Gettextガイド

翻訳 |地域化 |国際化 |navbarの編集

ここではgettextシステムの概要のみを説明します。より完全で正確な情報については、gettextのinfoページを参照してください。

gettextはFreecivが使用している国際化/地域化システムです。

目次

.poファイルフォーマットの基本[]

.poファイルは人が編集可能なテキストファイルです。1カラム目に文字'#'がある行はコメント行で、行の終端までがコメントになります。gettextプログラムでは、特殊な"フラグ"や有益な情報を示すためにもコメント行が使用されます。

すべての.poファイルには"エントリ"が含まれています。1つのエントリは、翻訳が必要な文字列それぞれに対応しています。

典型的なエントリは以下のようになります。

#: client/civclient.c:104 server/civserver.c:242 #, c-format msgid "Usage: %s [option ...]\n" msgstr "Utilisation: %s [option ...]\n"

エントリの第1行は"#:"で始まっていますが、これは翻訳対象文字列がソースコード内で含まれている場所をすべて挙げたリストになっています。リストが複数行になる場合もあります。

第2行は"#,"で始まっていますが、ここには"フラグ"が含まれています。フラグ行は常に存在するわけではありません。今回のケースでは、フラグが1つのみ(", c-format")指定されています。このフラグは、翻訳対象文字列がCフォーマットの文字列であることを意味しています。

第3行は"msgid"で始まっていますが、これは翻訳対象の英語文字列です。この文字列は複数行にわたることもあります。たとえば以下のようになります。

msgid "" "Usage: %s [option ...]\n" "Valid options are:\n"

第4行は"msgstr"で始まっていますが、これは翻訳後の文字列です。この文字列は複数行にわたることもあります。たとえば以下のようになります。

msgstr "" "Utilisation: %s [option ...]\n" "Les options valides sont:\n"


gettextの3種のプログラム: 'xgettext'、'msgmerge'、'msgfmt'[]

(以下の"make"コマンドは、'./configure'を済ませていることを仮定しています)


xgettext[]

翻訳対象となる文字列は、"マーク付け"をしたソースファイルから'xgettext'プログラムが自動的に抽出します。ソースファイルが正しくマーク付されているかを確認するのはプログラマーの仕事です。

慣例として、'xgettext'は'<パッケージ>.pot'という名前のファイルを生成します(私たちの場合は'freeciv.pot'となります。ビルド後に'./po'ディレクトリ内で確認できます)。'freeciv.pot'をリビルドするには、cdで'./po'ディレクトリに移動し、"make freeciv.pot"と入力します。


msgmerge[]

ただし、'freeciv.pot'は「空っぽの」地域化ファイルです('.po'ファイルと同じフォーマットですが、"msgid"文字列があるだけで"msgstr"文字列は含まれていません)。今度は、"新しい"'freeciv.pot'ファイルと、手持ちの"既存の"'<言語>.po'ファイルを"マージ"します。これは'msgmerge'プログラムの仕事です。

やはり慣例として、'msgmerge'は'<言語>.pox'という名前のファイルを生成します(たとえば'de.pox')。'<言語>.pox'をビルドするには、cdで'./po'ディレクトリに移動し、"make <言語>.pox"と入力します(たとえば"make de.pox")。こうすると、既存の'<言語>.po'と新しい'freeciv.pot'を読み込んで、マージした新しい'<言語>.pox'ファイルを生成します。

ここで、新しい'.pox'を'.po'にmoveすれば古いファイルが置換され、編集を始められるようになります(たとえば"mv de.pox de.po")。

'msgmerge'は、新たなファイルのエントリのいくつかにフラグを付けます。フラグの意味を覚えておいてください。

  • ", fuzzy"(あいまい)というフラグが付いたエントリは、「よく似ているけれども正確にはマッチしてない」ということを意味します。あいまいなエントリは'msgfmt'('.po'ファイルを読み込んでランタイム用の'.gmo'ファイルを生成するプログラム)によって翻訳されることはありません。ですから、翻訳の際は"あいまい"なところを探し、翻訳が正しくなっているか確認した上で、そのエントリの", fuzzy"フラグ(他にフラグがなければフラグ行ごと)を削除してください。

注: すべての'.po'ファイルにはあいまいエントリが必ず1つ存在します。それはファイルの先頭にあり、"msgid"の文字列が空になっているエントリです。

#, fuzzy msgid "" msgstr "" "Project-Id-Version ...

このエントリの"#, fuzzy"フラグは決して削除してはいけません。これはフェイクエントリです。ここを翻訳可能にしてしまうと、ランタイムライブラリを混乱させてしまいます。

  • 場合によっては、古いエントリがまるごと("#~"を使用して)コメントアウトされることがあります。これは新しい'.pot'ファイルにまったくマッチするものがないエントリです。'msgmerge'はそれらのファイルをファイル内に残した上でコメントアウトします。これは、新しい文字列を訳す際に役立つかもしれないからです。それらの古い翻訳がもう必要ないと判断できる場合は、削除してしまってもかまいません。


msgfmt[]

新しい'.po'ファイルの編集が終わったら、'msgfmt'を使用して、'<言語>.gmo'という名前のランタイム翻訳ファイルを生成します。'<言語>.gmo'をビルドするには、cdで'./po'ディレクトリに移動し、"make <言語>.gmo"と入力します(たとえば、'pt.gmo'をビルドする場合は"make pt.gmo")。Freecivを完全ビルドした場合には、すべての'.gmo'ファイルもビルドされます。


.poファイルをチェックする2つの方法[]

'msgfmt'には、デフォルト以上に細かくチェックする機能があります。"-c"パラメータは言語特有のチェックを要求するものです。たとえば、'./po'ディレクトリで"msgfmt -c -o junk.gmo <言語>.po"と入力します。すると、Cフォーマット文字列の翻訳時に発生するエラーを表示します。

残念ながら、Freecivで "msgfmt -c"をすると、実際には問題にならないことが問題として報告されることがあります。そこで、Freecivでは独自の'.po'ファイルチェッカー'check_po.pl'を用意しています。

'check_po.pl'は'./po'ディレクトリにあります。'./po'ディレクトリから実行するには、"./check_po.pl <言語>.po"と入力します。すると、'.po'ファイル内のエラーが表示されます。このエラーには、実際に問題となるであろうものが挙げられます。


作成した.gmoファイルをソースツリー内で使用する方法[]

私はいつもソースツリー内から実行しています(テストのためだけにインストールしたくはないのです)。私がしている方法はエレガントではないですが、使えているのでいいのです。すべてのロケールディレクトリから、私の開発ディレクトリ内のそれぞれの'.gmo'ファイルへのシンボリックリンクを作成します。たとえば以下のようになります(環境によってパスは異なります)。

su # パーミッション確保 cd /usr/local/share/locale/<言語>/LC_MESSAGES ln -s ~/prj/freeciv/po/<言語>.gmo freeciv.mo exit

(リンクは'freeciv.mo'と呼ばれていますが、これがリンクしているファイルはあなたが作成した'<言語>.gmo'になっていることに注意してください)

これで、'<言語>'ロケールをテストしたいと思ったら、以下のようにすればよくなりました。

LANG=<言語> ./ser ...

あるいは

LANG=<言語> ./civ ...バージョン2.6の場合[]

ソースが.moファイルを探している場所に注意を払う必要があります。 これを行うには、ユーティリティディレクトリのMakefileを確認する必要があります。 現在${datarootdir}/localeであるLOCALEDIRの値を見つけたいと考えています。 datarootdirは${prefix}/shareで、プレフィックスは/usr/localです。 したがって、ソースは/usr/local/share/localeでmoファイルを探しています(現在のディストリビューションはおそらく別のディレクトリを使用しています。これで問題ありません)。ソースから再生するには、必要に応じてすべての変数を設定する2つのスクリプトからfreecivを呼び出す必要があります。

sudo mkdir /usr/local/share/localesudo mkdir /usr/local/share/locale/<言語>sudo mkdir /usr/local/share/locale/<言語>/LC_MESSAGESsudo ln -s ~/prj/translations/freeciv/<言語>.gmo /usr/local/share/locale/<言語>/LC_MESSAGES/freeciv.mosudo ln -s ~/prj/translations/nations/<言語>.gmo /usr/local/share/locale/<言語>/LC_MESSAGES/freeciv-nations.mo

現在freeciv.moとfreeciv-nations.moの2つの.moファイルがあるため、指示は次のようになります。

./fcser ... #オプションを設定してサーバーを立ちあげます./fcgui ... #クライアントオプションを加えます。たとえば -t amplio

特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。

シェアボタン: このページをSNSに投稿するのに便利です。


最近更新されたページ

左メニュー

左メニューサンプル左メニューはヘッダーメニューの【編集】&gt;【左メニューを編集する】をクリックすると編集できます。ご自由に編集してください。掲示板雑談・質問・相談掲示板更新履歴最近のコメントカウン...

高山部隊

高山部隊U.alpine troops.png生産コスト50維持コストシールド食料不幸101必要条件戦術旧式化するなし次世代なし体力移動力攻撃力2015火力視界防御力125輸送燃料00地形効果を無視し...

騎馬兵

騎馬兵U.horsemen.png生産コスト20維持コストシールド食料不幸101必要条件騎乗旧式化するなし次世代騎士体力移動力攻撃力1022火力視界防御力121輸送燃料00ユニットのマニュアルページヘ...

騎士

騎士U.knights.png生産コスト40維持コストシールド食料不幸101必要条件騎兵隊旧式化するチャリオット, 騎馬兵次世代竜騎兵体力移動力攻撃力1024火力視界防御力122輸送燃料00特定の防御...

騎兵隊

騎兵隊U.cavalry.png生産コスト60維持コストシールド食料不幸101必要条件戦術旧式化する竜騎兵次世代機甲部隊体力移動力攻撃力2028火力視界防御力123輸送燃料00都市で解散することで生産...

駆逐艦

駆逐艦U.destroyer.png生産コスト60維持コストシールド食料不幸101必要条件電気学旧式化する装甲艦次世代なし体力移動力攻撃力3064火力視界防御力184輸送燃料00都市で解散することでユ...

関連リンク

非公式wikiに関連リンクの記事がありますFreeciv非公式wiki 攻略情報満載。初心者でも熟練者でもどうぞ!公式Twitteren:Related_links 英語版の関連リンクFreeciv基...

開拓者

開拓者U.settlers.png生産コスト40維持コストシールド食料不幸110必要条件なし旧式化するなし次世代なし体力移動力攻撃力2010火力視界防御力121輸送燃料00開拓者はゲームの鍵となるユニ...

長槍兵

長槍兵U.pikemen.png生産コスト20維持コストシールド食料不幸101必要条件封建主義旧式化するファランクス, 戦士次世代マスケット兵体力移動力攻撃力1011火力視界防御力122輸送燃料00ユ...

都市

概要 | 操作 | 地形 | 都市 | ユニット | 戦闘 | 経済 | 外交 | 政治体制 | 科学技術 | 世界の不思議 | 都市建造物 | マニュアルのトップページこのマニュアルはまだver3....

輸送船

輸送船U.transport.png生産コスト50維持コストシールド食料不幸101必要条件産業化旧式化するガレオン船次世代なし体力移動力攻撃力3050火力視界防御力183輸送燃料80陸上ユニットを8体...

貨物運送車

貨物運送車U.freight.png生産コスト50維持コストシールド食料不幸000必要条件株式会社旧式化するキャラバン次世代なし体力移動力攻撃力1020火力視界防御力121輸送燃料00ユニットのマニュ...

装甲艦

装甲艦U.ironclad.png生産コスト60維持コストシールド食料不幸101必要条件蒸気機関旧式化するフリゲート艦次世代駆逐艦体力移動力攻撃力3044火力視界防御力124輸送燃料00都市で解散する...

翻訳

翻訳 |地域化 |国際化 |navbarの編集Freecivを20以上の言語でプレイできることはご存知でしょうか?Freecivの開発チームでは、キーワードと文章を翻訳して他の言語でもプレイできるよう...

編集モード

ver2.2から「編集モード」が追加され、マップ作成がやや容易に行えるようになった。非公式wikiに編集モードの記事がありますできること[]ユニットや都市を新たに配置する、あるいは削除する。地形や特産...

総督府

Original: CVS-1.2 Translator: SAWADA Katsuya 非公式wikiに総督府の記事があります目次1 総督府(Citizen Management Agent, 市民...

経済

概要 | 操作 | 地形 | 都市 | ユニット | 戦闘 | 経済 | 外交 | 政治体制 | 科学技術 | 世界の不思議 | 都市建造物 | マニュアルのトップページこのマニュアルはまだver3....

竜騎兵

竜騎兵U.dragoons.png生産コスト50維持コストシールド食料不幸101必要条件指揮旧式化する騎士次世代騎兵隊体力移動力攻撃力2025火力視界防御力122輸送燃料00都市で解散することで生産コ...