This page is out of date

You've reached a page on the Ren'Py wiki. Due to massive spam, the wiki hasn't been updated in over 5 years, and much of the information here is very out of date. We've kept it because some of it is of historic interest, but all the information relevant to modern versions of Ren'Py has been moved elsewhere.

Some places to look are:

Please do not create new links to this page.


多言語対応

ここでは Ren'Py 6.15 以降のバージョンについて説明しています。以前の方法はここを参照して下さい

このレシピでは Ren’Py で作成したゲームを複数の言語に対応する方法を説明します。 Ren'Py に含まれている機能により、ゲーム中に表示される文章を他の言語に変更したり、表示されるフォントを言語に合わせて変更したりできます。

翻訳可能なスクリプトの作成

多言語対応をする場合、元のゲームの内容を翻訳者が理解できるように英語で作成することをお勧めします。

Ren'Py では、次の2種類のテキストについて翻訳できます。

say ステートメントについては、翻訳後のスクリプトを完全に置き換えることができます。例えば、特定の言語向けにカスタマイズされたキャラクターに会話をさせることができます。

特にPythonコードを記述する際の注意点として、アンダースコア関数は通常のgettextの仕様とは異なり、戻り値は翻訳結果ではなく原文と同一です。翻訳結果を取得したい場合は __(s) (2重アンダースコア) を利用して下さい。

say ステートメントなどで翻訳結果を画面に表示する場合は、変数名の後ろに !t を付けます。

$ day = _("Monday")
e "Today is [day!t]."

このスクリプトでは、say ステートメントが実行される時に変数「day」の内容を翻訳して置換します。

ランチャーの機能を利用した翻訳ファイルの雛形の作成

Ren'Pyのランチャーにある「Generate Translations」を利用すると、翻訳ファイルの雛形を自動的に作成できます。

手順:

  1. 「Generate Translations」をクリックする
  2. 言語の名前(japanese, italian, spanish 等)を入力し、Enterキーを押す

この操作により、翻訳用の雛形がゲームディレクトリー下の ./tl/言語名 に作成されます。

雛形を編集して翻訳ファイルを作成する

作成される雛形の内、 common.rpy には Ren'Py のシステムに対する翻訳データが含まれています。それ以外のファイルについては、ゲームディレクトリー内の同名のファイルに含まれている文章に対する翻訳データが含まれています。

common.rpy ... Ren'Py システムの翻訳データ
screens.rpy ... screens.rpy に対応する翻訳データ
script.rpy ... script.rpy に対応する翻訳データ
...

すべての翻訳データは translate 言語名 から始まるブロックの中に記述されています。

Pythonコード中のテキストの翻訳

common.rpy を含め、スクリプト中のPythonコードの翻訳では、 old 以降に原文を、 new 以降に訳文を記述していきます。

例えば次のようになります。

translate japanese strings:

    # renpy/common/_errorhandling.rpym:408
    old "An exception has occurred."
    new "例外が発生しました。"

    # renpy/common/_errorhandling.rpym:434
    old "Rollback"
    new "ロールバック"

    # renpy/common/_errorhandling.rpym:436
    old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
    new "一つ前へのロールバックを試み、セーブまたは他の選択肢を選ぶことを許可します。"

    # renpy/common/_errorhandling.rpym:439
    old "Ignore"
    new "無視"

common.rpy には "%b %d, %H:%M" というテキストが含まれています。これはセーブ画面に表示される日時のフォーマット文字列を示しており、フォーマット指定子はC言語などの strftime 関数と同様です。日本語の一般的な表記に合わせるには "%m月%d日, %H:%M" などにします。

say ステートメントの翻訳

say ステートメントの翻訳では、ステートメント全体を完全に置き換える形で翻訳ファイルを記述していきます。

例えば次のようなスクリプトがあったとします。

label tutorial_video:

    e "Ren'Py supports playing movies. There are two ways of doing this."

    e "The first way allows you to show a movie as an image, along with every other image that's displayed on the screen."
    

これに対する翻訳ファイルは次のようになります。

# game/tutorial_video.rpy:11
translate japanese tutorial_video_f34a17f5:

    # e "Ren'Py supports playing movies. There are two ways of doing this."
    e "Ren'Pyは動画の再生に対応しています。方法は2つあります。"

# game/tutorial_video.rpy:13
translate japanese tutorial_video_4aefd413:

    # e "The first way allows you to show a movie as an image, along with every other image that's displayed on the screen."
    e "1つ目の方法は動画を画像として表示する方法で、他の画像と共に画面に表示されます。"

ここで e の代わりに特定の言語のための別のキャラクターを使用することもできます。また、複数行のスクリプトを記述して文字列を分割したり、言語に合わせた特別な処理を実行したりできます。

言語切り替え時にPythonのコードを実行する

選択された言語に合わせてフォントを切り替える場合など、言語切り替え時にPythonのコードを実行する必要があるでしょう。そのような場合は、 translate 言語名 python: というブロックを用います。

例えば日本語用に「VL-Gothic-Regular.ttf」というフォントを利用したい場合は次のスクリプトを追加します。

translate japanese python:
    style.default.font = "VL-Gothic-Regular.ttf"
    style.default.language = "japanese-strict"

style.default.language に指定する文字列については../英語以外の環境下での利用/を参照して下さい

他の翻訳ファイルと見分けが付くように、「style.rpy」等の名前を付けて翻訳ディレクトリーの下に設置するといいでしょう。

メニューで言語切り替えができるようにする

Language アクションを使用すると、指定された言語に切り替えることができます。

設定画面に言語設定を追加したい場合は、ゲームディレクトリー下の screens.rpy 内の screen preferences: ブロックの適切な位置に以下のコードを挿入します。

frame:
    style_group "pref"
    has vbox

    label _("Language")
    textbutton "English" action Language(None)
    textbutton u"日本語" text_font "tl/japanese/VL-Gothic-Regular.ttf" action Language("japanese")

ここで、メニューに使用するフォントはゲームディレクトリーからの相対パスで指定し、翻訳ファイルに記述したものとは異なることに注意して下さい。また、「English」や「日本語」が翻訳可能であってはいけません。例えば日本語設定時に英語圏の人に対して日本語で「英語」と書かれていても、それが自分たちが使っている言語のことかどうか分からないからです。

このコードにより、「English」が選択された時には原文が表示され、「日本語」が選択されたときは translate japanese * : ブロックで指定された訳文が表示されます。

サンプルの参照

Ren'Pyに付属しているチュートリアルゲームは、多言語対応及び日本語化されています。自分の作ったゲームを多言語対応したい場合や、翻訳者として作業したい場合に参考にするといいでしょう。