DeepL API でゲームの文言を訳す手順|APIキー・用語集・Godot の CSV
DeepL API にプランを選んで登録し、API キーを Authorization ヘッダーに DeepL-Auth-Key の形で付けて POST /v2/translate に送ると、訳文が返ります。無料の API プランを選んだ場合は、https://api.deepl.com を https://api-free.deepl.com に置き換えます。
このページの目次
DeepL API に登録して最初のリクエストを送る
DeepL API を使うには、DeepL のプランのページでプランを選んで登録します。DeepL Translator のアカウントをすでに持っている場合は、ログアウトして新しいアカウントを作る必要があります。
登録したあとは、API キーを付けた翻訳のリクエストを POST /v2/translate に送ります。リクエストの形は次のとおりです。
POST /v2/translate HTTP/2
Host: api.deepl.com
Authorization: DeepL-Auth-Key [yourAuthKey]
User-Agent: YourApp/1.2.3
Content-Length: 45
Content-Type: application/json
{ "text":["Hello, world!"], "target_lang":"DE" }
返事は次の形で、translations に、検出された原文の言語と、訳文の text が入ります。
{ "translations": [ { "detected_source_language": "EN", "text": "Hallo, Welt!" } ] }
API キーは、Authorization ヘッダーに DeepL-Auth-Key [yourAuthKey] の形で付けます。リクエストの本文は、form-encoded(application/x-www-form-urlencoded)か JSON(application/json)で送れます。返事は JSON です。
API のエンドポイントは、Free API と Pro API で異なります。Free API は https://api-free.deepl.com、Pro API は https://api.deepl.com です。無料の API プランを選んだ場合は、サンプルの https://api.deepl.com を https://api-free.deepl.com に置き換えます。
API キーの見つけ方と扱い
API キーは、アカウントの「API Keys」のタブにあります。DeepL API Free の認証キーは、末尾の「:fx」で見分けられます(例:279a2e9d-83b3-c416-7e2d-f721593e42a0:fx)。
キーが侵害された場合は、そのキーを無効にして、「API Keys」のタブで新しいキーを作ります。
リクエストの大きさとプランの上限
リクエストには、次の上限があります。
| 種類 | 上限 |
|---|---|
| ヘッダーの大きさ | 16 KiB(16*1024 bytes) |
| リクエスト全体の大きさ | 128 KiB(128*1024 bytes) |
ファイル形式ごとのアップロードの上限は、無料のプランと有料のプランで分かれています。Excel(.xlsx)・Text(.txt)・XML(.xml)・JSON(.json)の上限は次のとおりです。
| ファイル形式 | 無料のプラン | 有料のプラン |
|---|---|---|
| Excel(.xlsx) | 10 MB・500,000 文字 | 30 MB・100万文字 |
| Text(.txt) | 1 MB・500,000 文字 | 1 MB・100万文字 |
| XML(.xml) | 10 MB・500,000 文字 | 10 MB・100万文字 |
| JSON(.json) | 1 MB・500,000 文字 | 1 MB・100万文字 |
プランごとの文字数の上限もあります。DeepL API Developer プランは、開発者が DeepL の API を無料で試用できるプランで、翻訳の合計制限は 1,000,000 文字です。この制限に達してもリセットされず、DeepL API Growth プランへのアップグレードが必要になります。DeepL API Growth プランの月間利用上限は、5,000万文字と300時間の音声のテキスト化です。
DeepL API Free プランと DeepL API Pro プランは、現在購入できません。
字数の数え方と見積もりの式
DeepL は、原文の文字数を Unicode のコードポイントで数えて課金します。「A」「Δ」「あ」「深」は、それぞれ1文字です。context パラメーターの文字と、タグ処理が有効なときの HTML/XML のタグは、数えません。テキストの翻訳では、原文の言語と訳す先の言語が同じでも、字数は課金に数えられます。同じ内容を複数の言語に訳すときは、言語ごとに別に数えます。
ドキュメントの翻訳では、一部のファイル形式に1つのドキュメントあたりの最小文字数があり、課金される字数が実際の文章より多くなることがあります。
月間の利用量は、原文の字数に、訳す先の言語の数と、見込む更新の頻度を掛けて見積もります。
Monthly usage = source characters × target languages × update factor
リクエストの本文に次の指定を付けると、返事に課金された字数が入り、実際に課金される字数を、手元で数えた字数と比べられます。
{
"text": ["Sample text from your website or document."],
"target_lang": "DE",
"show_billed_characters": true
}
現在の課金期間の利用量は、/v2/usage エンドポイントで取得できます。
用語集で語の訳を指定する
用語集は、POST /v2/glossaries で作ります。このエンドポイントを含む v2 の用語集の API(Glossaries v2)は、非推奨(deprecated)です。1つの用語集は、1つの言語の組について、原文と訳語の組のリストから作られます。リクエストの本文には、用語集の名前・原文の言語・訳文の言語に加えて、用語集の項目と項目の形式の指定が要ります。
{
"name": "My Glossary",
"source_lang": "en",
"target_lang": "de"
}
項目は、指定した項目の形式で書きます。現在使える項目の形式は、tsv(既定・タブ区切り)か csv(カンマ区切り)です。tsv の例は、「Hello」と「Guten Tag」をタブでつないだ1行です。原文の言語と訳文の言語に指定できる言語には、en・ja などがあります。
作成に成功すると、返事に用語集の ID・ready・項目の数などが入ります。ready は、作った用語集をすぐ翻訳のリクエストで使えるかを示します。まだ準備ができていない場合は、翻訳のリクエストで使う前に、待って ready の状態を確かめる必要があります。
タグを含む文と、訳さない部分
タグを含む文字列を XML として訳すには、タグ処理の指定を xml にします。API は XML の構造からテキストを取り出して訳し、訳文を構造に戻します。この指定を付けないと、タグは通常のテキストとして扱われます。
{
"text": ["Press <b>Continue</b> to advance."],
"target_lang": "DE",
"tag_handling": "xml",
"tag_handling_version": "v2"
}
タグはタグで囲まれた語に付いたまま、訳文が返ります。
中身を訳さないタグは、その名前を並べて指定すると、そのまま残ります。次の指定の例では、<x> と </x> のあいだのテキストが、そのまま残ります。
tag_handling=xml
ignore_tags=x
リクエスト: Please open the page <x>Settings</x> to configure your system.
返事: Bitte öffnen Sie die Seite <x>Settings</x> um Ihr System zu konfigurieren.
前の例の最後の指定は、タグ処理のバージョンの指定です。v2 を指定すると、v2 のタグ処理のアルゴリズムが使われます。2025年12月1日より後に初めてタグ処理を使ったアカウントでは、既定が v2 です。ほかのアカウントでは既定が v1 で、v2 を使うにはこの指定を明示する必要があります。バージョンによって結果が異なります。v2 では XML の入力が厳密に解析され、閉じていないタグなどの不正な XML は、Tag handling parsing failed, please check input. のエラーになります。
XML のファイル全体を送るときは、次の指定を付けると、ファイルの中の改行で文が分かれません。付けないと、文の途中の改行で、分かれた部分がそれぞれ別に訳されます。
split_sentences=nonewlines
Godot が読む CSV の形
Godot は、スプレッドシートを CSV の形で扱います。CSV ファイルは、バイトオーダーマークなしの UTF-8 で保存する必要があります。Microsoft Excel は、既定では CSV ファイルを UTF-8 ではなく ANSI で保存します。UTF-8 で保存するための組み込みの方法はありませんが、ほかのやり方はあります。
1行目は keys に、言語の列が続く形です。最初の列は翻訳のキーで、キーは一意です。言語の列の名前は、エンジンが対応するロケールのどれかか、アンダースコア(_)で始まる名前にします。アンダースコアで始まる列はコメントとして扱われ、インポートされません。左上のセルは無視され、空でも何を入れても構いません。例は次のとおりです。
keys,en,es,ja
GREET,"Hello, friend!","Hola, amigo!",こんにちは
ASK,How are you?,Cómo está?,元気ですか
BYE,Goodbye,Adiós,さようなら
QUOTE,"""Hello"" said the man.","""Hola"" dijo el hombre.",「こんにちは」男は言いました
テキストのまま編集するときは、カンマか改行かダブルクォートを含むメッセージを、ダブルクォートで囲みます。メッセージの中のダブルクォートは、前にもう1つダブルクォートを付けて書きます。カンマのかわりに別の区切り文字を、インポートのオプションで選ぶこともできます。
Godot 4.6 からは、CSV に ?plural の列を足して複数形を指定できます。?plural の列は、最初の列以外ならどこにでも置けます。最初の列は、翻訳のキーのために確保されています。複数形を使うと、Control の自動翻訳は使えません。文字列は手動で翻訳する必要があります。
Godot 4.6 からは、CSV に ?context の列を足して、翻訳の文脈を指定することもできます。文脈は、同じ原文で意味が違う文字列を区別するためのものです。?context の列も、最初の列以外ならどこにでも置けます。文脈を使うと、Control の自動翻訳は使えません。文字列は手動で翻訳する必要があります。
en,?context,fr,ru,ja,zh
Letter,Alphabet,Lettre,Буква,字母,字母
Letter,Message,Courrier,Письмо,手紙,信件
Godot は、CSV ファイルを既定で翻訳として扱います。インポートすると、CSV の隣に1つ以上の圧縮された翻訳のリソースのファイルが作られます。インポートのオプションは、.csv ファイルを選んで「インポート」ドックで決めます。オプションを変えたあとは、「Reimport」を押します。
訳文を Godot の CSV に書き出す GDScript の例
Godot 4.3 の GDScript で、決めておいた文言を DeepL API で複数の言語に訳し、Godot が読める CSV に書き出す例を示します。スクリプトは、どの種類のノードにも付けられます。基本的な流れの例なので、自分の必要・用途・プロジェクトの設定に合わせて作り変える必要があります。
訳す先の言語と原文を決めます。各原文には、キー・原文・文脈を持たせます。
var languages = [ "DE", "ES", "JA" ]
var originals = [
{ "key": "player_greeting", "original": "Hey there, ready for an adventure?", "context": "Player character; Initial interaction" },
{ "key": "exit", "original": "Press 'Exit' to leave.", "context": "Instruction; Button label for exiting the game" },
{ "key": "score", "original": "Your score is:", "context": "Result; Displayed after completing a level" },
]
スクリプトのノードの準備ができると、翻訳の処理が自動で始まります。原文ごと・言語ごとに DeepL API へリクエストを送り、リクエストの本文には、訳す文と訳す先の言語に加えて、文脈の context と formality の指定を、次のように入れます。
var request_body = {
"text": [ original_text ],
"target_lang": lang,
"context": context_text,
"formality": "prefer_less"
}
var json = JSON.new()
var json_content = json.stringify(request_body)
var headers = [ "Content-Type: application/json", "Authorization: DeepL-Auth-Key " + API_KEY ]
http_request.request(API_URL, headers, HTTPClient.METHOD_POST, json_content)
返事のコードが 200 のときは、response["translations"][0]["text"] の訳文を、言語とキーごとに保存します。200 以外のときは、HTTP リクエストが失敗したことと返事のコードを出力します。すべての返事が返ると、res://translations/translations.csv に書き出します。1行目は keys に、小文字にした言語コードが続く形です。訳文はダブルクォートで囲み、訳文の中のダブルクォートは2つ重ねます。
func save_new_translations():
var file_path = "res://translations/translations.csv"
var file_content = "keys"
for lang : String in languages:
file_content += "," + lang.to_lower()
file_content += "\n"
for original in originals:
file_content += original["key"]
for lang in languages:
var translation = translations[lang][original["key"]]
file_content += ",\"" + translation.replace("\"", "\"\"") + "\""
file_content += "\n"
save_to_file(file_path, file_content)
print("Translations saved to: " + file_path)
AIで訳した言語を Steam の対応言語に載せるときの決まりはAIで翻訳するときの対応言語の決まりに、Steam への言語の登録は対応言語と翻訳の登録にあります。用語の意味はローカライズにあります。
情報源
- DeepL Documentation — Quickstart(登録・最初のリクエスト・エンドポイント)https://developers.deepl.com/docs/getting-started/quickstart確認日 2026-10-21
- DeepL Documentation — Access and authentication(API キー・ヘッダーの上限・エンドポイント)https://developers.deepl.com/docs/getting-started/auth確認日 2026-10-21
- DeepL Documentation — Usage and limits(リクエストの大きさ・ファイル形式ごとの上限・字数の数え方)https://developers.deepl.com/docs/resources/usage-limits確認日 2026-10-21
- DeepL Documentation — Estimating Character Usage(字数の見積もりの式・show_billed_characters)https://developers.deepl.com/docs/best-practices/estimating-character-usage確認日 2026-10-21
- DeepL Documentation — Create a glossary(POST /v2/glossaries のパラメーター)https://developers.deepl.com/api-reference/glossaries/create-a-glossary確認日 2026-10-21
- DeepL Documentation — Translating XML(tag_handling・ignore_tags)https://developers.deepl.com/docs/translate/translating-xml確認日 2026-10-21
- DeepL Documentation — Automating Indie Game Localization with the DeepL API and Godot(Godot 4.3 の GDScript の例)https://developers.deepl.com/docs/learning-how-tos/cookbook/automating-indie-game-localization-with-the-deepl-api-and-godot確認日 2026-10-21
- DeepL ヘルプセンター — DeepL API のプラン(Developer プランと Growth プランの上限)https://support.deepl.com/hc/ja/articles/360021200939-DeepL-API-%E3%81%AE%E3%83%97%E3%83%A9%E3%83%B3確認日 2026-10-21
- Godot Docs — Localization using spreadsheets(CSV の形・?plural・?context)https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_spreadsheets.html確認日 2026-10-21