Home / Guides / Localize your game for free

How to localize your indie game for free with AI

Short answer: move every piece of player facing text into a string table (Godot's CSV translations or Unity's Localization package, both free), get a first draft from DeepL's Free version or an AI assistant, run a quick check so no placeholder breaks, then have a native speaker review it. Free plans on POEditor, Localazy or Weblate help you manage volunteer translators. Finally, list each language on your store page.

Facts checked Oct 29, 2026 on the official sites: Steamworks documentation, the Godot 4.7 docs, Unity's Localization package docs, and each tool's pricing page. Plans change, so check again before you rely on a limit. The CSV and script below were tested with Godot 4.7 stable and Python 3.

Why bother with a small game?

Steamworks says over 60% of Steam users use Steam in a language other than English. It also says Steam favors products that are localized, and that language support is decided by your game's in-game languages, not just the store page. A short game with a few hundred lines of text is the cheapest it will ever be to translate, especially if you set it up early.

What you need

Step 1: Pick your first languages

Steamworks' advice for choosing languages:

Steam's full platform languages include Simplified and Traditional Chinese, Japanese, Korean, Russian, Brazilian Portuguese, Spanish (Spain and Latin America as separate languages), German, French and more. The full list with API codes is on Steamworks' Languages Supported on Steam page. For a first game, two or three languages done well beat ten done badly.

Step 2: Move all text into a string table

A string table is a spreadsheet where each row has a key (like MENU_PLAY) and one column per language. Your game shows the key's text for the current language instead of hard coded English. Godot's docs recommend unique IDs as keys because you can then revise the English text while it is being translated.

Godot

Godot imports translations from CSV files. The file must be UTF-8 without a byte order mark. Godot's docs warn that Microsoft Excel saves CSV as ANSI by default and recommend LibreOffice or Google Sheets instead. The first column holds the keys, each other column header is a language code, and columns that start with an underscore are comments that are not imported:

keys,en,es,fr,_notes
MENU_PLAY,Play,Jugar,Jouer,Main menu button. Keep it short.
PICKUP_ITEM,{player} picked up the {item},{player} recogió {item},{player} a ramassé {item},Shown in the log
COINS,Coins: %d,Monedas: %d,Pièces : %d,HUD counter

Save it as translations.csv in your project. Godot imports it and creates one .translation file per language. Importing does not register them yet: open Project > Project Settings > Localization > Translations and add them. Then use the keys:

# Use keys as Label/Button text, or translate in code:
$PlayButton.text = tr("MENU_PLAY")
$Log.text = tr("PICKUP_ITEM").format({"player": player_name, "item": item_name})
$Coins.text = tr("COINS") % coins

# Start in the player's language (falls back to your Fallback locale):
TranslationServer.set_locale(OS.get_locale_language())

Label and Button nodes translate automatically when their text matches a key. Turn that off on nodes that show a player's name, with Auto Translate > Mode set to Disabled. Since Godot 4.6, a CSV can also hold plural forms (a ?plural column, used with tr_n()) and contexts (a ?context column) for words like "Close" that translate differently by meaning.

Unity

Unity's official Localization package gives you string tables and asset tables (a different texture, model or audio clip per language), Smart Strings for placeholders and plurals, pseudo-localization, and import and export to XLIFF, CSV and Google Sheets. Export a CSV, translate it, and import it back.

Placeholders: name them

Word order changes between languages. Godot's docs recommend named placeholders with String.format(), like {player} picked up the {item}, because translators can then move each one and get context from the name. Never build sentences by gluing translated pieces together.

Step 3: Make a first draft with AI

DeepL Free

DeepL's Free version (checked Oct 29, 2026) translates 50,000 characters a month of text, plus 1 file translation a month up to 5 MB, with 1 glossary of 5 entries per language pair. Use the glossary for your game's name and the most important invented words so they stay consistent. Individual is €7.49 a month billed annually for 300,000 characters. For a game with a few thousand words, the free text box is enough: paste one column at a time, keep the keys in your spreadsheet, and paste the results back next to them.

An AI assistant or coding agent

A chat assistant, or a coding agent like Claude Code working in your project folder, can translate the whole CSV and keep its structure. The advantage over a plain translator is context: you can tell it what the game is and what each line is for. A prompt that works:

Translate the "en" column of this CSV into Spanish (es) and French (fr).
It is the text for a cozy 2D farming game for all ages.
Rules:
- Return the full CSV with the same header and the same keys, in the same order.
- Never translate or change the keys column, or columns that start with _.
- Keep placeholders exactly as written, like %d, %s, {player} and {item}.
  You may move them inside the sentence.
- Keep UI labels (keys starting with MENU_) as short as the English.
- Read the _notes column for context.
- If a line is ambiguous, translate it anyway and list your question below the CSV.

Check the free plan limits and terms of whichever assistant you use, and never paste anything private. Whichever route you take, the output is a draft until a person who speaks the language has read it in the game.

Step 4: Check placeholders and missing strings

The most common way a translation breaks a game is a changed placeholder: {item} translated to {objet}, or a %d that disappears. This Python script reads a Godot style CSV and flags missing translations, duplicate keys and placeholders that do not match the first language column:

import csv, re, sys

# Finds placeholders like %s, %d, %05.2f and {name}
PH = re.compile(r"%[-+ 0#]*\d*(?:\.\d+)?[sdifxXc]|\{[A-Za-z_][A-Za-z0-9_]*\}")

path = sys.argv[1] if len(sys.argv) > 1 else "translations.csv"
with open(path, encoding="utf-8", newline="") as f:
    rows = list(csv.reader(f))

header = rows[0]
langs = [h for h in header[1:] if not h.startswith(("_", "?"))]
source = header.index(langs[0])
problems = 0
seen = set()
for row in rows[1:]:
    key = row[0]
    if key in seen:
        print(f"{key}: duplicate key"); problems += 1
    seen.add(key)
    want = sorted(PH.findall(row[source]))
    for lang in langs[1:]:
        text = row[header.index(lang)]
        if not text.strip():
            print(f"{key} [{lang}]: missing translation"); problems += 1
        elif sorted(PH.findall(text)) != want:
            print(f"{key} [{lang}]: placeholders {sorted(PH.findall(text))} should be {want}"); problems += 1
print(f"{len(rows) - 1} keys, {len(langs)} languages, {problems} problems")
sys.exit(1 if problems else 0)

Run python3 check_translations.py translations.csv. It exits with an error when it finds a problem, so you can also run it before each build. In our test with Godot 4.7, the fixed CSV above passed the check and printed "Ana recogió Sword" and "Ana a ramassé Sword" in Spanish and French. Notice the item name stayed in English: translate item names as their own keys and pass the translated name in.

Step 5: Get a native speaker review (for free)

Steamworks suggests that if you have close contact with community members who speak other languages, you may be able to get feedback from your players, for example through a sub-forum for each language. To manage volunteers without emailing spreadsheets around, these free plans were checked Oct 29, 2026:

Ask reviewers to play, not just read. Many mistakes only show up in context: a button label that should be a verb, a joke that does not land, or a word that needs a different gender.

Step 6: Fix fonts and layout, then test

To test in Godot, use View > Preview Translation in the editor, set the Locale Test property (clear it before you commit), or run godot --language fr. Also add a language option in your settings menu. Godot's docs recommend letting players change language in game even when you detect it automatically.

Step 7: List your languages on Steam and itch.io

On Steam, store page and in-game localization are separate:

On itch.io, list the languages in your page description so players know before they download. New to itch.io? Start with How to publish your first game on itch.io.

Free tools in this guide

Godot Localization

Godot's built-in translation system. Import translations from spreadsheets (CSV) or gettext files, use tr() for keys, remap assets per language, and test with pseudolocalization.

Pricing: Free. Beginner rating: 4/5. Built into the free engine and well documented, with an official demo project.

CSV or gettext translations, pseudolocalization and a --language flag for testing. Built into the free engine.

Unity Localization

Unity's official Localization package for string and asset localization, with Smart Strings for plurals and placeholders, pseudo-localization, and import or export to XLIFF, CSV and Google Sheets.

Pricing: Free. Beginner rating: 3/5. Official and free, but the tables and settings take a tutorial or two to learn.

String and asset tables with CSV, XLIFF and Google Sheets import and export.

DeepL

Machine translator known for natural sounding text. Paste your menu text, item names or dialogue and get a first draft in another language.

Pricing: Freemium, from €7.49/mo. Beginner rating: 4/5. Paste text, pick a language, copy the result. No setup.

The fastest free first draft: 50,000 characters a month on the Free version.

POEditor

Online translation management system. Upload your string files (JSON, CSV, XLIFF, PO and more), invite translators or use machine translation, then export each language back into your game.

Pricing: Freemium, from $20/mo. Beginner rating: 4/5. Clean web editor, no credit card to start, and it reads common game string formats.

1,000 strings and 5 contributors free, no credit card.

Localazy

Translation management platform with AI and machine translation, placeholder checks and plural handling. Upload your game's string files (Localazy's Unity page shows JSON), or add keys online, invite volunteers and export each language back.

Pricing: Freemium, from $41/mo. Beginner rating: 4/5. Upload a file or type keys in the web app, no install needed. The CLI and API are there when you want to automate.

200 source keys free with unlimited languages and translators.

Weblate

Open source, web based localization platform that connects to your Git repository so new strings reach translators and translations flow back into your project.

Pricing: Freemium, from €47/mo. Beginner rating: 4/5. Best if you already use Git. Self hosting it is a technical job.

Free to self host, and a gratis hosted plan for public open source games.

Related

Still building the game? Start with Make your first game with free AI tools or Godot vs Unity for beginners. Adding voices in other languages? See Best free AI tools for game voice acting. Getting ready to launch? Read How to make a game trailer for free and browse all localization tools.

FAQ

Can I localize my game for free?

Yes, for a small game. Godot's translation system and Unity's Localization package are free, DeepL's Free version translates 50,000 characters a month, and POEditor (1,000 strings, 5 contributors) and Localazy (200 source keys, unlimited seats and languages) have free plans for organizing translators. What usually costs money is professional human translation, which this guide replaces with volunteers and native speaker reviews.

Is AI translation good enough for a game?

Use it as a first draft, not the final text. Machine translation does not know your game's context, so it can get item names, jokes, gendered words and short UI labels wrong. Steamworks suggests getting feedback directly from players who speak other languages, so ask a native speaker to check menus, tutorials and anything emotional before you list the language.

Which languages should I translate my indie game into first?

Steamworks says over 60% of Steam users use Steam in a language other than English, and that the less a language looks like English, the higher the expected return. It suggests translating your store page first and checking your regional wishlists to see where your game might be popular. You can add more languages later as an update.

Do I have to disclose AI translation on Steam?

Steam's Content Survey has a Generative AI section about content that ships with your game and is consumed by players, and it lists localization as an example. If AI wrote translations that ship in your game, answer that section honestly.

How do I add translations to a Godot game?

Make a UTF-8 CSV with a keys column and one column per language (for example keys,en,es,fr), put it in your project so Godot imports it, then add the generated .translation files in Project Settings under Localization > Translations. Use keys like MENU_PLAY as Label and Button text or call tr("MENU_PLAY") in code. Test with View > Preview Translation or run godot --language fr.

How do I stop translations from breaking my game's text?

Keep placeholders like %d or {player} identical in every language, use named placeholders so translators can reorder them, and run a check before you build. This guide includes a short Python script that flags missing translations, duplicate keys and changed placeholders in a Godot style CSV.

Why do Chinese or Japanese characters show as boxes?

Your font does not contain those characters. Godot's docs say the default project font only supports a subset of Latin-1 and recommend Noto Fonts for other scripts. Add a font that covers the language, or set fallback fonts.

Sources: Steamworks Localization and Languages, Languages Supported on Steam and Content Survey; Godot docs Internationalizing games and Localization using spreadsheets; Unity Localization package; DeepL pricing; POEditor pricing; Localazy pricing; Weblate pricing; Crowdin pricing. Checked October 29, 2026.

Get the free First Game Starter Pack

A 7-step path to your first tiny game, free art and sound you can actually use, and our AI tools kit for Godot, Unity, Unreal and Roblox. Plus one short tool tip a week. No spam, unsubscribe any time.

No spam. Unsubscribe in 1 click. Privacy See past issues

Preview of the First Game Starter Pack: the README, the AI Tools Kit and the first game checklist