Skip to main content

Täydellinen opas Godot-pelien lokalisointiin

TranslationServer:istä kirjasinten varaketjuihin: lokalisoi Godot-pelisi CSV- ja PO-tiedostoilla, GDScript:illä ja automaattisella tekoälykäännöksellä.

1

TranslationServer:in perusteet

Godot:in sisäänrakennettu TranslationServer on lokalisointijärjestelmän ydin. Se lataa käännösresurssit käynnistyksen yhteydessä ja ratkaisee avaimet tr()-funktion kautta. Jokainen GDScript:in tr()-kutsu kulkee TranslationServer:in kautta — lisäkirjastoja ei tarvita.

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 tukee CSV-, PO (Gettext)- ja .translation (binääri) -muotoja. Se tunnistaa järjestelmän kieliversion automaattisesti OS.get_locale()-funktiolla ja valitsee vastaavan käännösresurssin. Voit ohittaa kieliversion milloin tahansa TranslationServer.set_locale()-funktiolla.
2

CSV-käännöstiedostot

CSV on Godot-käännösten yksinkertaisin muoto. Yksi tiedosto sisältää kaikki kielet sarakkeissa. Ensimmäinen sarake on avain ja jokainen seuraava sarake yksi kieliversio. Godot tuo .csv-tiedostot automaattisesti ja luo .translation-resurssit.

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
Ympäröi pilkkuja tai rivinvaihtoja sisältävät arvot lainausmerkeillä. Koodaa arvon lainausmerkit muodossa "". Pidä avaimet lyhyinä ja kuvaavina: MENU_START on parempi kuin menu_start_button_text_label.
3

PO- ja Gettext-käännöstiedostot

PO (Portable Object) -tiedostot ovat ohjelmistojen lokalisoinnin alan standardi. Godot 4.x tukee suoraan monikkomuotoja, asiayhteyden täsmennystä ja kääntäjän kommentteja sisältävää PO-muotoa. Luo locale/-hakemistoon yksi .po-tiedosto kieltä kohden.

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-tiedostot tukevat asiayhteyden täsmennykseen msgctxt-arvoa (esimerkiksi OPEN verbinä tai adjektiivina), monikkomuotoihin msgid_plural-arvoa ja kääntäjän kommentteja (#.-alkuiset rivit), jotka kertovat, missä ja miten merkkijonoja käytetään.
4

Käännösten käyttö GDScript:issä

Käännä merkkijonoja käyttämällä tr()-funktiota missä tahansa GDScript:issä. Yhdistä se merkkijonojen muotoiluun GDScript:in prosenttioperaattorilla (%). Luo luotettavaan kieliversion hallintaan Autoload-komentosarja, joka käsittelee tunnistuksen, säilytyksen ja vaihdon signaaleilla.

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()
Kieliversion vaihtaminen TranslationServer.set_locale()-funktiolla ei päivitä automaattisesti näkymissä jo hahmonnettua tekstiä. tr()-funktiota on käytettävä uudelleen kaikkiin näkyviin nimikkeisiin, painikkeisiin ja tekstisolmuihin kieliversion vaihtamisen jälkeen. Ilmoita käyttöliittymän näkymille päivitystarpeesta kieliversiohallinnan signaaleilla.
5

Monikkomuodot ja paikkamerkit

Godot käsittelee monikkomuodot PO-tiedoston monikkomuodoilla. Kukin kieli määrittää PO-otsakkeessa oman monikkokaavansa. GDScript:in prosenttioperaattori (%) käsittelee sijaintipaikkamerkit (%s merkkijonoille, %d kokonaisluvuille). Käytä nimettyihin paikkamerkkeihin String.replace()-funktiota.

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))
Älä koskaan kovakoodaa monikkologiikkaa ehdolla 'if count == 1'. Kielten monikkosäännöt eroavat valtavasti: englannissa on kaksi muotoa, venäjässä kolme, arabiassa kuusi ja japanissa yksi. Anna PO-monikkojärjestelmän hoitaa valinta automaattisesti. CSV-tiedostot eivät tue monikkomuotoja — käytä PO-tiedostoja kaikkeen monikkomuotoja tarvitsevaan sisältöön.
6

Kirjasinten varaketjut CJK:lle, arabialle ja muille

Pelisi ensisijainen kirjasin ei todennäköisesti sisällä japanin, korean, kiinan, arabian tai thain kirjoitusmerkkejä. Godot 4.x tukee kirjasinten varaketjuja — kun merkki puuttuu ensisijaisesta kirjasimesta, Godot tarkistaa varakirjasimet järjestyksessä. Ilman niitä muu kuin latinalainen teksti hahmontuu tyhjinä neliöinä.

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
Käytä Google:n Noto-kirjasinperhettä, joka kattaa lähes kaikki Unicode-kirjoitusjärjestelmät. Lisää varakirjasimiksi Noto Sans JP, Noto Sans KR, Noto Sans SC ja Noto Sans Arabic. Harkitse pikseligrafiikkapeleihin Noto Sans Monoa tai CJK-osajoukkoja sisältäviä bittikarttakirjasimia. Huomioi kirjasinten kokonaiskoko — täydet CJK-kirjasimet voivat olla 15-20 Mt kukin.
7

Näkymien ja käyttöliittymän lokalisointi

Godot-näkymiä voi lokalisoida kolmella tavalla: käännä _ready()-funktiossa tr()-funktiolla, käytä editorin Auto Translate -ominaisuutta tai lataa täysin eri näkymät eri asetteluja tarvitseville kielille, kuten RTL-kielille.

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 toimii vain solmun text-ominaisuudella. Jos asetat tekstin dynaamisesti koodissa _ready()-funktion jälkeen, automaattinen käännös ohitetaan. Käytä dynaamisesti päivitettävälle tekstille aina tr()-funktiota eksplisiittisesti koodissa. Huomaa myös, että automaattinen käännös käyttää tr()-funktiota text-ominaisuuden kirjaimelliseen arvoon, joten ominaisuuden on sisällettävä käännösavain, ei ihmisen luettava lähdeteksti.
8

Älykäs varakieli LocaleChain:illa

Godot:in TranslationServer siirtyy alueellisen muodon puuttuessa suoraan projektin oletuskieliversioon. pt-BR-pelaaja, jolle on saatavilla vain pt-PT-käännökset, näkee portugalin sijaan englannin. LocaleChain korjaa tämän yhdistämällä määritettävien varakieliketjujen käännökset TranslationServer:iin määrityksen yhteydessä.

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 pelkkää GDScript:iä käyttävä lisäosa ilman natiiveja laajennuksia tai pelimoottorin muutoksia. Asenna se Godot AssetLibistä tai kopioi addons/locale_chain/-kansio projektiisi. Se toimii CSV-, PO- ja .translation-tiedostojen kanssa.
9

Automatisoi pelin käännökset

Kun lokalisointi on otettu käyttöön, käännä CSV- tai PO-tiedostosi tekoälyllä. Automatisoi pelin merkkijonojen, käyttöliittymätekstien, esinekuvausten ja dialogin kääntäminen suoraan IDE-ympäristöstäsi tai CI/CD-putkestasi.

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
Käännä vaiheittain. Kun lisäät uusia avaimia lähdetiedostoon, käännä vain diff äläkä luo kaikkea uudelleen. Näin ihmisten tarkistamat tarinadialogin ja kulttuurisesti arkaluonteisen sisällön käännökset säilyvät.

Automatisoi käännöslaatu

Löydä puuttuvat avaimet ja rikkoutuneet paikkamerkit i18n-validate:lla ennen julkaisua. Testaa käyttöliittymää pseudokäännöksillä i18n-pseudo:n avulla ennen oikeiden käännösten valmistumista.

Tavalliset sudenkuopat

Käännöstiedostoja ei ole tuotu

Godot:in on tuotava .csv- ja .po-tiedostot ennen niiden käyttöä. Jos käännökset eivät näy, tarkista tiedostojesi olevan luettelossa kohdassa Project Settings > Localization > Translations. Varmista CSV-tiedostoille, että Godot on luonut .translation-tiedostot .godot/imported/-hakemistoon.

Pilkkuja tai lainausmerkkejä sisältävät CSV-arvot rikkovat jäsennyksen

Pilkkuja sisältävät arvot on ympäröitävä lainausmerkeillä. Lainausmerkkejä sisältävissä arvoissa ne on koodattava muodossa "". Puuttuva lainausmerkki saa koko rivin jäsentymään väärin ja siirtää usein kaikki seuraavat sarakkeet huomaamatta.

CJK- tai arabialainen teksti näkyy tyhjinä neliöinä

Ensisijainen kirjasimesi ei sisällä näiden kirjoitusjärjestelmien merkkejä. Lisää kirjasinten varaketjut Theme- tai LabelSettings-resurssiisi. Ilman varakirjasimia puuttuvat merkit hahmontuvat tyhjinä suorakulmioina. Käytä kattavaan Unicode-tukeen Noto Sans -muunnelmia.

PO-otsakkeen monikkomuotojen määrä on virheellinen

Jos PO-otsakkeen nplurals-arvo ei vastaa msgstr-merkintöjen todellista määrää, Godot voi kaatua tai näyttää väärän monikkomuodon. Varmista aina, että Plural-Forms-otsake vastaa kunkin kohdekielen CLDR-määritystä.

Koodi ohittaa automaattisen käännöksen

Solmun text-ominaisuuden asettaminen GDScript:issä _ready()-funktion jälkeen ohittaa automaattisen käännöksen tuloksen. Käytä joko vain automaattista käännöstä (aseta teksti editorissa, älä koskaan koodissa) tai vain tr()-funktiota koodissa. Molempien sekoittaminen aiheuttaa epäjohdonmukaisen toiminnan.

Suositeltu projektirakenne

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

Kokeile i18n Agent:ia nyt

Pudota käännöstiedostosi tähän

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

tai valitse napsauttamalla

Kohdekielet

Rekisteröitymistä ei tarvitaVälitön arvio

Varakieliketju locale-chain-godot:illa

Kun alueellisesta kieliversiosta, kuten pl_PL:stä, puuttuu käännösavain, Godot siirtyy suoraan projektin oletuskieliversioon eikä tarkista ensin pääkieliversiota 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"],
})

Katso varakielioppaastamme kaikki tuetut ohjelmistokehykset ja 75 sisäänrakennettua ketjua. Learn more →

Usein kysyttyä Godot-lokalisoinnista