Skip to main content

Täielik Godot'i mängu lokaliseerimise juhend

TranslationServer'ist varukirjatüüpide ahelateni: lokaliseeri Godot'i mäng CSV- ja PO-failide, GDScript'i ning automaatse tehisintellekti tõlkega.

1

TranslationServer'i põhitõed

Godot'i sisseehitatud TranslationServer on lokaliseerimissüsteemi tuum. See laadib tõlkeressursid käivitamisel ja lahendab võtmed funktsiooni tr() kaudu. Iga GDScript'i tr() kutse läbib TranslationServer'i — lisateeke pole vaja.

TranslationServer basics
# TranslationServer is Godot's built-in localization system.
# It loads translations at startup and resolves keys via tr().

# Set the game's locale
TranslationServer.set_locale("ja")

# Get the current locale
var current = TranslationServer.get_locale()  # "ja"

# Translate a key — works everywhere in GDScript
var text = tr("MENU_START")  # "ゲームスタート"

# Translate with context (Godot 4.x)
var text = tr("OPEN", "verb")    # "Open" (action)
var text = tr("OPEN", "adj")     # "Open" (state)
TranslationServer toetab CSV-, PO (Gettext)- ja .translation (binaarset) vormingut. See tuvastab süsteemi lokaadi automaatselt funktsiooniga OS.get_locale() ja valib vastava tõlkeressursi. Lokaati saab igal ajal alistada funktsiooniga TranslationServer.set_locale().
2

CSV-tõlkefailid

CSV on Godot'i tõlgete lihtsaim vorming. Üks fail sisaldab kõiki keeli veergudes. Esimene veerg on võti ja iga järgnev veerg lokaat. Godot impordib .csv-failid automaatselt ja loob .translation-ressursid.

translations.csv
# translations.csv
# First column = key, subsequent columns = locale codes
keys,en,ja,de,es
MENU_START,Start Game,ゲームスタート,Spiel starten,Iniciar juego
MENU_SETTINGS,Settings,設定,Einstellungen,Configuración
MENU_QUIT,Quit,終了,Beenden,Salir
ITEM_SWORD,Sword,剣,Schwert,Espada
ITEM_SHIELD,Shield,盾,Schild,Escudo
DIALOG_GREETING,"Hello, adventurer!",冒険者よ、こんにちは!,"Hallo, Abenteurer!","¡Hola, aventurero!"
Importing CSV translations
# In Godot Editor:
# 1. Place your .csv file in the project (e.g., res://translations.csv)
# 2. Godot auto-imports it — creates .translation resources
# 3. Go to Project > Project Settings > Localization > Translations
# 4. Add the generated .translation files
Ümbritse komasid või reavahetusi sisaldavad väärtused jutumärkidega. Väärtuses olevad jutumärgid varjesta kujul "". Hoia võtmed lühikesed ja kirjeldavad: MENU_START on parem kui menu_start_button_text_label.
3

PO- ja Gettext-tõlkefailid

PO (Portable Object) failid on tarkvara lokaliseerimise tööstusstandard. Godot 4.x toetab loomupäraselt PO-vormingut koos mitmusevormide, konteksti eristamise ja tõlkijate kommentaaridega. Loo kataloogi locale/ üks .po-fail keele kohta.

locale/ja.po
# translations.po — Gettext format for Godot
# Place in res://locale/ja.po

msgid ""
msgstr ""
"Language: ja\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"

# Simple translation
msgid "MENU_START"
msgstr "ゲームスタート"

# Translation with context (disambiguates identical source strings)
msgctxt "verb"
msgid "OPEN"
msgstr "開く"

msgctxt "adj"
msgid "OPEN"
msgstr "開いている"

# Plural form
msgid "You collected %d coin."
msgid_plural "You collected %d coins."
msgstr[0] "%d枚のコインを集めました。"
Loading PO files
# Project Settings > Localization > Translations
# Add each .po file:
#   res://locale/en.po
#   res://locale/ja.po
#   res://locale/de.po
#   res://locale/es.po

# Or load programmatically:
func _ready():
    var translation = load("res://locale/ja.po")
    TranslationServer.add_translation(translation)
PO-failid toetavad konteksti eristamiseks msgctxti (nt OPEN verbi või omadussõnana), mitmusevormide jaoks msgid_pluralit ning tõlkijate kommentaare (read algusega #.), mis annavad konteksti stringide kasutuskoha ja -viisi kohta.
4

Tõlgete kasutamine GDScript'is

Kasuta stringide tõlkimiseks tr() mis tahes GDScript'is. Stringide vormindamiseks ühenda see GDScript'i protsendioperaatoriga (%). Töökindla lokaadihalduse jaoks loo Autoloadi skript, mis haldab tuvastamist, säilitamist ja signaalidega vahetamist.

Using tr() in scenes
extends Control

func _ready():
    # Simple key lookup
    $TitleLabel.text = tr("MENU_START")

    # With string formatting (positional)
    $GreetingLabel.text = tr("DIALOG_GREETING_NAME") % [player_name]

    # With multiple placeholders
    $StatusLabel.text = tr("PLAYER_STATUS") % [player_name, level, health]

    # Context-aware translation (Godot 4.x)
    $ActionButton.text = tr("OPEN", "verb")

    # Update UI when locale changes
    TranslationServer.set_locale("de")
    _update_ui()

func _update_ui():
    # Re-apply all translated strings
    $TitleLabel.text = tr("MENU_START")
    $GreetingLabel.text = tr("DIALOG_GREETING_NAME") % [player_name]
locale_manager.gd (Autoload)
# locale_manager.gd — Register as Autoload in Project Settings
extends Node

signal locale_changed(new_locale: String)

const SUPPORTED_LOCALES = ["en", "ja", "de", "es", "fr", "ko", "zh"]

func _ready():
    var system_locale = OS.get_locale_language()
    if system_locale in SUPPORTED_LOCALES:
        set_locale(system_locale)
    else:
        set_locale("en")

func set_locale(locale: String):
    TranslationServer.set_locale(locale)
    locale_changed.emit(locale)

func get_locale() -> String:
    return TranslationServer.get_locale()
Lokaadi muutmine funktsiooniga TranslationServer.set_locale() ei värskenda automaatselt stseenides juba renderdatud teksti. Pärast lokaadi muutmist pead kõigile nähtavatele siltidele, nuppudele ja tekstisõlmedele tr() uuesti rakendama. Teavita kasutajaliidese stseene värskendamisest lokaadihalduri signaalidega.
5

Mitmusevormid ja kohatäitjad

Godot käsitleb mitmusevorme PO-faili mitmusevormidega. Iga keel määrab PO päises oma mitmusevalemi. GDScript'i protsendioperaator (%) haldab positsioonilisi kohatäitjaid (%s stringidele, %d täisarvudele). Nimega kohatäitjate jaoks kasuta String.replace().

Plural forms by language
# Godot uses Gettext PO plural rules.
# Each language defines its own plural formula.

# English (2 forms: one, other)
msgid "You collected %d coin."
msgid_plural "You collected %d coins."
msgstr[0] "You collected %d coin."
msgstr[1] "You collected %d coins."

# Japanese (1 form: other — no singular/plural distinction)
msgid "You collected %d coin."
msgid_plural "You collected %d coins."
msgstr[0] "%d枚のコインを集めました。"

# Russian (3 forms: one, few, many)
msgid "You collected %d coin."
msgid_plural "You collected %d coins."
msgstr[0] "Вы собрали %d монету."
msgstr[1] "Вы собрали %d монеты."
msgstr[2] "Вы собрали %d монет."
Placeholder formatting
# GDScript string formatting with tr()

# Positional placeholders with %
var msg = tr("SCORE_MSG") % [score]        # "Score: %d" → "Score: 1500"
var msg = tr("STATS") % [name, level, hp]  # "%s — Lv %d — HP: %d"

# Named placeholders (manual replacement)
var template = tr("WELCOME_BACK")
var msg = template.replace("{player}", name).replace("{days}", str(days))
Ära kunagi kodeeri mitmuseloogikat jäigalt tingimusega 'if count == 1'. Keelte mitmusereeglid erinevad tohutult: inglise keeles on kaks vormi, vene keeles kolm, araabia keeles kuus ja jaapani keeles üks. Lase PO mitmusesüsteemil valik automaatselt teha. CSV-failid ei toeta mitmusevorme — kasuta mitmusevorme vajava sisu jaoks PO-faile.
6

Varukirjatüübid CJK, araabia ja muude kirjade jaoks

Mängu põhikirjatüüp ei sisalda tõenäoliselt jaapani, korea, hiina, araabia või tai kirja glüüfe. Godot 4.x toetab varukirjatüüpide ahelaid — kui glüüf põhikirjatüübis puudub, kontrollib Godot varukirjatüüpe järjekorras. Ilma nendeta renderdub mitteladina tekst tühjade ruutudena.

Font fallback setup
# Godot 4.x supports font fallback chains.
# When a glyph is missing from the primary font, fallbacks are checked in order.

# In the Editor:
# 1. Create a LabelSettings or Theme resource
# 2. Set the primary font (e.g., Noto Sans for Latin)
# 3. Add fallback fonts: Noto Sans JP, KR, SC, Arabic

# Programmatically:
func setup_fonts():
    var font = FontFile.new()
    font.load_dynamic_font("res://fonts/NotoSans-Regular.ttf")

    var fallback_jp = FontFile.new()
    fallback_jp.load_dynamic_font("res://fonts/NotoSansJP-Regular.ttf")
    font.add_fallback(fallback_jp)

    $Label.add_theme_font_override("font", font)
RTL support
# Right-to-left (RTL) support for Arabic, Hebrew, etc.

# In the Editor:
# Select your Control node > Layout > Text Direction = RTL

# Programmatically:
func setup_rtl():
    var locale = TranslationServer.get_locale()
    var rtl_locales = ["ar", "he", "fa", "ur"]

    if locale.substr(0, 2) in rtl_locales:
        $Label.text_direction = Control.TEXT_DIRECTION_RTL
        $Container.layout_direction = Control.LAYOUT_DIRECTION_RTL
Kasuta Google'i Noto kirjatüübiperet, mis katab peaaegu kõiki Unicode'i kirju. Lisa varukirjatüüpidena Noto Sans JP, Noto Sans KR, Noto Sans SC ja Noto Sans Arabic. Piksligraafikaga mängude puhul kaalu Noto Sans Monot või CJK alamhulkadega rasterkirjatüüpe. Arvesta kirjatüüpide kogumahuga — täielikud CJK-kirjatüübid võivad olla igaüks 15-20 MB.
7

Stseenide ja kasutajaliidese lokaliseerimine

Godot'i stseene saab lokaliseerida kolmel viisil: tõlgi funktsioonis _ready() tr() abil, kasuta redaktori atribuuti Auto Translate või laadi täiesti erinevad stseenid teistsugust paigutust vajavatele keeltele, näiteks RTL-keeltele.

Scene localization approaches
# Approach 1: Translate in _ready() using tr()
extends Control

func _ready():
    $StartButton.text = tr("MENU_START")
    $SettingsButton.text = tr("MENU_SETTINGS")
    $QuitButton.text = tr("MENU_QUIT")

# Approach 2: Use auto-translate in the editor
# Set the Text property to the translation key (e.g., "MENU_START")
# and enable "Auto Translate" on the node.

# Approach 3: Locale-specific scenes for complex layouts
func load_localized_scene():
    var locale = TranslationServer.get_locale().substr(0, 2)
    var path = "res://ui/main_menu_%s.tscn" % locale
    if ResourceLoader.exists(path):
        add_child(load(path).instantiate())
    else:
        add_child(load("res://ui/main_menu_en.tscn").instantiate())
Auto Translate töötab ainult sõlme text-atribuudil. Kui määrad teksti pärast _ready() funktsiooni koodis dünaamiliselt, alistatakse automaattõlge. Dünaamiliselt värskendatava teksti jaoks kasuta koodis alati selgesõnaliselt tr(). Pane ka tähele, et automaattõlge rakendab tr() text-atribuudi sõnasõnalisele väärtusele, seega peab see sisaldama tõlkevõtit, mitte inimloetavat lähteteksti.
8

Nutikas varulokaat LocaleChain'iga

Godot'i TranslationServer taandub piirkondliku variandi puudumisel otse projekti vaikelokaadile. pt-BR mängija, kellele on olemas ainult pt-PT tõlked, näeb portugali keele asemel inglise keelt. LocaleChain parandab selle, ühendades seadistamise ajal seadistatavate varulokaadiahelate tõlked TranslationServer'isse.

LocaleChain plugin
# LocaleChain for Godot — smart locale fallback
# Install from Godot AssetLib or copy addons/locale_chain/ into your project

# Problem: Godot's TranslationServer falls back directly to the default locale.
# A pt-BR player with only pt-PT translations sees English, not Portuguese.

# Solution: One-line setup
func _ready():
    LocaleChain.configure()  # Uses built-in fallback chains

# Now pt-BR falls back to pt-PT → pt → default
# es-MX falls back to es-419 → es → default
# zh-Hant-HK falls back to zh-Hant-TW → zh-Hant → default

# Custom configuration:
func _ready():
    # Override specific chains
    LocaleChain.configure({"pt-BR": ["pt"]})

    # Full custom — only your chains
    LocaleChain.configure(
        {"pt-BR": ["pt-PT", "pt"], "es-MX": ["es-419", "es"]},
        false  # don't merge defaults
    )

    # Reset to original state
    LocaleChain.reset()
LocaleChain on puhas GDScript'i lisand, millel pole omamaiseid laiendusi ega mootori muudatusi. Paigalda see Godot AssetLibist või kopeeri kaust addons/locale_chain/ oma projekti. See töötab CSV-, PO- ja .translation-failidega.
9

Automatiseeri mängu tõlked

Kui lokaliseerimise seadistus on valmis, tõlgi CSV- või PO-failid tehisintellektiga. Automatiseeri mängustringide, kasutajaliidese teksti, esemekirjelduste ja dialoogi tõlkimine otse IDE-st või CI/CD-konveierist.

Terminal
# Translate your Godot locale files with AI
# CSV files:
# In your IDE, ask your AI assistant:
> Translate translations.csv to Japanese, Korean, and German

# PO files:
> Translate locale/en.po to ja, ko, de

# Or use the CLI in CI/CD:
npx i18n-agent translate locale/en.po --lang ja,ko,de

# The tool preserves:
# - CSV column structure and delimiters
# - PO msgctxt, msgid_plural, and plural forms
# - Placeholder syntax (%s, %d, {name})
# - Comments and metadata headers
Tõlgi järk-järgult. Kui lisad lähtefaili uusi võtmeid, tõlgi kõige uuesti loomise asemel ainult diff. Nii säilivad inimeste ülevaadatud narratiivse dialoogi ja kultuuritundliku sisu tõlked.

Automatiseeri tõlkekvaliteet

Leia i18n-validate'i abil puuduvad võtmed ja katkised kohatäitjad enne avaldamist. Testi kasutajaliidest i18n-pseudo abil pseudotõlgetega enne päris tõlgete saabumist.

Levinud komistuskivid

Tõlkefaile pole imporditud

Godot peab .csv- ja .po-failid enne kasutamist importima. Kui tõlkeid ei kuvata, kontrolli, et failid oleks loetletud jaotises Project Settings > Localization > Translations. CSV puhul veendu, et Godot oleks loonud .translation-failid kataloogi .godot/imported/.

Komade või jutumärkidega CSV-väärtused rikuvad parsimise

Komasid sisaldavad väärtused tuleb ümbritseda jutumärkidega. Jutumärke sisaldavates väärtustes tuleb need varjestada kujul "". Puuduv jutumärk põhjustab kogu rea vale parsimise ning nihutab sageli märkamatult kõiki järgnevaid veerge.

CJK või araabia tekst kuvatakse tühjade ruutudena

Põhikirjatüüp ei sisalda nende kirjade glüüfe. Lisa Theme'i või LabelSettingsi ressursile varukirjatüübid. Ilma varukirjatüüpideta renderduvad puuduvad glüüfid tühjade ristkülikutena. Põhjalikuks Unicode'i katvuseks kasuta Noto Sansi variante.

PO päises on vale mitmusevormide arv

Kui PO päise nplurals-väärtus ei vasta msgstr-kirjete tegelikule arvule, võib Godot kokku joosta või kuvada vale mitmusevormi. Kontrolli alati, et Plural-Forms päis vastaks iga sihtkeele CLDR-i spetsifikatsioonile.

Kood alistab automaattõlke

Sõlme text-atribuudi määramine GDScript'is pärast _ready() funktsiooni alistab automaattõlke tulemuse. Kasuta kas ainult automaattõlget (määra tekst redaktoris, mitte kunagi koodis) või ainult tr() funktsiooni koodis. Nende segamine põhjustab ebajärjekindlat käitumist.

Soovituslik projektistruktuur

Project Structure
my_godot_game/
├── addons/
│   └── locale_chain/              # LocaleChain plugin (optional)
│       ├── fallback_map.gd
│       ├── locale_chain.gd
│       └── plugin.cfg
├── fonts/
│   ├── NotoSans-Regular.ttf       # Primary font (Latin)
│   ├── NotoSansJP-Regular.ttf     # Japanese fallback
│   ├── NotoSansKR-Regular.ttf     # Korean fallback
│   └── NotoSansArabic-Regular.ttf # Arabic fallback
├── locale/
│   ├── en.po                      # English (source)
│   ├── ja.po                      # Japanese
│   ├── de.po                      # German
│   ├── es.po                      # Spanish
│   └── ar.po                      # Arabic
├── translations.csv               # Alternative: CSV format
├── scenes/
│   └── ui/
│       ├── main_menu.tscn
│       └── settings_menu.tscn
├── scripts/
│   ├── locale_manager.gd          # Autoload for locale management
│   └── ui/
│       └── main_menu.gd
├── project.godot
└── export_presets.cfg

Proovi i18n Agent'i kohe

Kukuta tõlkefail siia

JSON, YAML, PO, XML, CSV, Markdown, Properties

või klõpsa faili valimiseks

Sihtkeeled

Registreerumine pole vajalikKohene hinnang

Varulokaat locale-chain-godot'iga

Kui piirkondlikust lokaadist, näiteks pl_PL-ist, puudub tõlkevõti, liigub Godot otse projekti vaikelokaadile ega kontrolli esmalt põhilokaati pl.

Terminal
# Install from Godot Asset Library
# Search: locale-chain-godot
Configuration
var lc = LocaleChain.new()
lc.configure({
    "pl": ["pl_PL", "en"],
    "pt_BR": ["pt", "en"],
    "zh_Hant_HK": ["zh_Hant", "zh", "en"],
})

Vaata meie varulokaadi juhendist kõigi toetatud raamistike ja 75 sisseehitatud ahela loendit. Learn more →

Godot'i lokaliseerimise KKK