Skip to main content

Celovit vodnik za lokalizacijo iger Godot

Od TranslationServerja do nadomestnih pisav: lokalizirajte svojo igro Godot z datotekami CSV in PO, jezikom GDScript ter samodejnim prevajanjem z umetno inteligenco.

1

Osnove TranslationServerja

Godotov vgrajeni TranslationServer je jedro lokalizacijskega sistema. Ob zagonu naloži prevodne vire in razrešuje ključe prek funkcije tr(). Vsak klic tr() v jeziku GDScript poteka prek TranslationServerja — dodatne knjižnice niso potrebne.

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 podpira oblike CSV, PO (Gettext) in .translation (dvojiška oblika). Sistemsko jezikovno nastavitev samodejno zazna prek OS.get_locale() in izbere ustrezen prevodni vir. Jezikovno nastavitev lahko kadar koli preglasite s TranslationServer.set_locale().
2

Prevodne datoteke CSV

CSV je najpreprostejša oblika za prevode v Godotu. Ena datoteka vsebuje vse jezike v stolpcih. Prvi stolpec vsebuje ključ, vsak naslednji pa jezikovno nastavitev. Godot samodejno uvozi datoteke .csv in ustvari vire .translation.

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
Vrednosti, ki vsebujejo vejice ali nove vrstice, obdajte z dvojnimi narekovaji. Dvojne narekovaje znotraj vrednosti zapišite kot "". Ključi naj bodo kratki in opisni: MENU_START je primernejši kot menu_start_button_text_label.
3

Prevodne datoteke PO / Gettext

Datoteke PO (Portable Object) so panožni standard za lokalizacijo programske opreme. Godot 4.x izvorno podpira datoteke PO z množinskimi oblikami, razločevanjem po kontekstu in komentarji za prevajalce. Za vsak jezik ustvarite po eno datoteko .po v imeniku locale/.

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)
Datoteke PO podpirajo msgctxt za razločevanje po kontekstu (npr. 'OPEN' kot glagol ali pridevnik), msgid_plural za množinske oblike in komentarje za prevajalce (vrstice #.), s katerimi jim pojasnite, kje in kako se nizi uporabljajo.
4

Uporaba prevodov v jeziku GDScript

Za prevajanje nizov uporabite tr() kjer koli v jeziku GDScript. Za oblikovanje nizov jo združite z operatorjem % jezika GDScript. Za zanesljivo upravljanje jezikovnih nastavitev ustvarite skript Autoload, ki s signali skrbi za zaznavanje, shranjevanje in preklapljanje jezikovne nastavitve.

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()
Sprememba jezikovne nastavitve s TranslationServer.set_locale() ne posodobi samodejno besedila, ki je že upodobljeno v prizorih. Po spremembi jezikovne nastavitve morate tr() ročno znova uporabiti za vse vidne oznake, gumbe in besedilna vozlišča. S signali upravljalnika jezikovnih nastavitev obvestite prizore uporabniškega vmesnika, da se morajo osvežiti.
5

Množinske oblike in označbe mest

Godot množinske oblike obravnava prek množinskih oblik v datotekah PO. Vsak jezik v glavi PO določa svojo množinsko formulo. Operator % jezika GDScript obravnava položajne označbe mest (%s za nize, %d za cela števila). Za poimenovane označbe mest uporabite 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))
Množinske logike, kot je 'if count == 1', nikoli ne zapisujte neposredno v kodo. Jeziki imajo zelo različna množinska pravila: angleščina ima 2 obliki, ruščina 3, arabščina 6, japonščina pa 1. Izbiro naj samodejno opravi množinski sistem PO. Datoteke CSV ne podpirajo množinskih oblik — za vsebino, ki jih potrebuje, uporabite datoteke PO.
6

Nadomestne pisave za CJK, arabščino in druge pisave

Glavna pisava Vaše igre verjetno ne vsebuje pismenk za japonsko, korejsko, kitajsko, arabsko ali tajsko pisavo. Godot 4.x podpira verige nadomestnih pisav — če pismenka manjka v glavni pisavi, Godot po vrsti preveri nadomestne pisave. Brez njih se nelatinično besedilo prikaže kot prazni kvadratki.

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
Uporabite Googlovo družino pisav Noto, ki pokriva skoraj vsa pisma Unicode. Kot nadomestne pisave dodajte Noto Sans JP, Noto Sans KR, Noto Sans SC in Noto Sans Arabic. Pri igrah s slikovnimi pikami razmislite o pisavi Noto Sans Mono ali bitnih pisavah, ki vključujejo podnabore CJK. Upoštevajte skupno velikost pisav — celotne pisave CJK so lahko velike po 15-20 MB.
7

Lokalizacija prizorov in uporabniškega vmesnika

Godotove prizore lahko lokalizirate na tri načine: prevedete jih v _ready() s tr(), uporabite lastnost Auto Translate v urejevalniku ali naložite povsem drugačne prizore za jezike, ki zahtevajo drugačne postavitve (na primer jeziki RTL).

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 deluje samo za lastnost text vozlišča. Če besedilo po _ready() dinamično nastavite v kodi, preglasite samodejni prevod. Za dinamično posodobljeno besedilo vedno izrecno uporabite tr() v kodi. Upoštevajte tudi, da Auto Translate uporabi tr() za dobesedno vrednost besedila — zato mora lastnost text vsebovati prevodni ključ in ne človeku berljivega izvornega niza.
8

Pametna nadomestna jezikovna nastavitev z LocaleChain

Godotov TranslationServer ob manjkajoči regionalni različici neposredno uporabi privzeto jezikovno nastavitev projekta. Igralcu z nastavitvijo pt-BR se zato ob razpoložljivem le prevodu pt-PT namesto portugalščine prikaže angleščina. LocaleChain to odpravi tako, da ob nastavitvi v TranslationServer združi prevode iz nastavljivih verig nadomestnih jezikovnih nastavitev.

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 je dodatek, napisan izključno v jeziku GDScript — brez izvornih razširitev ali sprememb pogona. Namestite ga iz knjižnice Godot AssetLib ali v projekt kopirajte mapo addons/locale_chain/. Deluje z datotekami CSV, PO in .translation.
9

Avtomatizacija prevajanja iger

Ko dokončate nastavitev lokalizacije, prevedite datoteke CSV ali PO z umetno inteligenco. Avtomatizirajte prevajanje nizov igre, besedila uporabniškega vmesnika, opisov predmetov in dialogov — neposredno iz razvojnega okolja ali cevovoda CI/CD.

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
Prevajajte postopoma. Ko v izvorno datoteko dodate nove ključe, prevedite le razlike, namesto da bi znova ustvarili vse prevode. Tako ohranite prevode pripovednih dialogov ali kulturno občutljive vsebine, ki jih je pregledal človek.

Avtomatizacija kakovosti prevodov

Z orodjem i18n-validate odkrijte manjkajoče ključe in poškodovane označbe mest, preden pridejo v izdajo. Preden prispejo pravi prevodi, uporabniški vmesnik preizkusite s psevdoprevodi z orodjem i18n-pseudo.

Pogoste pasti

Prevodne datoteke niso uvožene

Godot mora datoteke .csv in .po uvoziti, preden jih je mogoče uporabiti. Če se prevodi ne prikažejo, preverite, ali so datoteke navedene v Project Settings > Localization > Translations. Pri datotekah CSV preverite, ali je Godot ustvaril datoteke .translation v imeniku .godot/imported/.

Vejice ali narekovaji v vrednostih CSV povzročijo napako pri razčlenjevanju

Vrednosti, ki vsebujejo vejice, morajo biti obdane z dvojnimi narekovaji. Dvojne narekovaje znotraj vrednosti je treba zapisati kot "". Zaradi manjkajočega narekovaja se celotna vrstica razčleni napačno, vsi naslednji stolpci pa se pogosto neopazno zamaknejo.

Besedilo CJK ali arabsko besedilo se prikaže kot prazni kvadratki

Glavna pisava ne vsebuje pismenk za ta pisma. V vir Theme ali LabelSettings dodajte nadomestne pisave. Brez njih se manjkajoče pismenke upodobijo kot prazni pravokotniki. Za celovito pokritost nabora Unicode uporabite različice pisave Noto Sans.

Napačno število množinskih oblik v glavi PO

Če se vrednost nplurals v glavi PO ne ujema z dejanskim številom vnosov msgstr, se lahko Godot zruši ali prikaže napačno množinsko obliko. Vedno preverite, ali se glava Plural-Forms ujema s specifikacijo CLDR za posamezni ciljni jezik.

Koda preglasi Auto Translate

Če po _ready() v jeziku GDScript nastavite lastnost text vozlišča, preglasite rezultat samodejnega prevajanja. Uporabljajte izključno Auto Translate (besedilo nastavite v urejevalniku in nikoli v kodi) ali izključno tr() v kodi. Mešanje obeh pristopov povzroči nedosledno delovanje.

Priporočena struktura projekta

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

Preizkusite i18n Agent zdaj

Spustite prevajalsko datoteko sem

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

ali kliknite za izbiro

Ciljni jeziki

Registracija ni potrebnaTakojšnja ocena

Nadomestna jezikovna nastavitev z locale-chain-godot

Ko v regionalni jezikovni nastavitvi, kot je pl_PL, manjka prevodni ključ, Godot neposredno uporabi privzeto jezikovno nastavitev projekta, namesto da bi najprej preveril nadrejeno jezikovno nastavitev pl.

Terminal
# Namestitev iz knjižnice Godot Asset Library
# Iskanje: 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"],
})

V našem vodniku po nadomestnih jezikovnih nastavitvah si oglejte celoten seznam podprtih ogrodij in 75 vgrajenih verig. Learn more →

Pogosta vprašanja o lokalizaciji v Godotu