Skip to main content

Heildarleiðarvísir um staðfærslu Godot-leikja

Frá TranslationServer til varaleturs: staðfærðu Godot-leikinn þinn með CSV, PO-skrám, GDScript og sjálfvirkum gervigreindarþýðingum.

1

Grunnatriði TranslationServer

Innbyggði TranslationServer í Godot er kjarninn í staðfærslukerfinu. Hann hleður þýðingartilföngum við ræsingu og flettir upp lyklum með fallinu tr(). Hvert kall á tr() í GDScript fer í gegnum TranslationServer — engin viðbótarsöfn eru nauðsynleg.

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 styður CSV, PO (Gettext) og .translation (tvíundarsnið). Hann greinir sjálfkrafa staðfærslu kerfisins með OS.get_locale() og velur samsvarandi þýðingartilfang. Þú getur hvenær sem er valið aðra staðfærslu með TranslationServer.set_locale().
2

CSV-þýðingarskrár

CSV er einfaldasta sniðið fyrir Godot-þýðingar. Ein skrá geymir öll tungumál í dálkum. Fyrsti dálkurinn er lykillinn og hver dálkur þar á eftir er staðfærsla. Godot flytur .csv-skrár sjálfkrafa inn og býr til .translation-tilföng.

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
Settu gildi sem innihalda kommur eða línuskil innan tvöfaldra gæsalappa. Tvöfaldaðu tvöfaldar gæsalappir innan gildis sem "". Hafðu lykla stutta og lýsandi: MENU_START er betra en menu_start_button_text_label.
3

PO-/Gettext-þýðingarskrár

PO-skrár (Portable Object) eru staðlað snið hugbúnaðargeirans fyrir staðfærslu. Godot 4.x styður PO beint, þar á meðal fleirtölumyndir, aðgreiningu eftir samhengi og athugasemdir þýðenda. Búðu til eina .po-skrá fyrir hvert tungumál í möppunni 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)
PO-skrár styðja msgctxt til að aðgreina samhengi (til dæmis „OPEN“ sem sögn eða lýsingarorð), msgid_plural fyrir fleirtölumyndir og athugasemdir þýðenda (#.-línur) sem útskýra hvar og hvernig strengir eru notaðir.
4

Notkun þýðinga í GDScript

Notaðu tr() hvar sem er í GDScript til að þýða strengi. Sameinaðu það við %-virkjann í GDScript til að sníða strengi. Búðu til Autoload-skriftu fyrir trausta umsjón staðfærslna sem sér um greiningu, varðveislu og skipti með merkjum.

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()
Þegar staðfærslu er breytt með TranslationServer.set_locale() uppfærist texti sem þegar hefur verið birtur í senum ekki sjálfkrafa. Þú þarft að kalla tr() aftur handvirkt fyrir öll sýnileg textamerki, hnappa og textahnúta eftir breytingu. Notaðu merki frá umsjónarkerfi staðfærslna til að láta senur notandaviðmótsins endurnýjast.
5

Fleirtölumyndir og staðgenglar

Godot annast fleirtölur með fleirtölumyndum PO-skráa. Hvert tungumál skilgreinir eigin fleirtöluformúlu í PO-hausnum. %-virki GDScript sér um staðsetta staðgengla (%s fyrir strengi og %d fyrir heiltölur). Notaðu String.replace() fyrir nafngreinda staðgengla.

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))
Aldrei skal harðkóða fleirtölurökvísi á borð við 'if count == 1'. Fleirtölureglur tungumála eru mjög ólíkar: enska hefur 2 myndir, rússneska 3, arabíska 6 og japanska 1. Láttu fleirtölukerfi PO velja sjálfkrafa. CSV-skrár styðja ekki fleirtölur — notaðu PO-skrár fyrir allt efni sem þarf fleirtölumyndir.
6

Varaletur fyrir CJK, arabísku og fleiri stafróf

Aðalleturgerð leiksins inniheldur líklega ekki stafatákn fyrir japönsku, kóresku, kínversku, arabísku eða taílensku. Godot 4.x styður varakeðjur leturgerða — þegar stafatákn vantar í aðalleturgerðina prófar Godot varaletur í tiltekinni röð. Án þeirra birtast stafatákn utan latneska stafrófsins sem auðir ferningar.

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
Notaðu Noto-leturfjölskyldu Google — hún nær yfir nær öll Unicode-stafróf. Bættu Noto Sans JP, Noto Sans KR, Noto Sans SC og Noto Sans Arabic við sem varaletri. Fyrir leiki með pixlamyndlist skaltu íhuga Noto Sans Mono eða punktamyndaletur sem inniheldur CJK-undirmengi. Hafðu heildarstærð leturs í huga — full CJK-letur geta verið 15-20 MB hvert.
7

Staðfærsla sena og notandaviðmóts

Þrjár leiðir eru til að staðfæra Godot-senur: þýða í _ready() með tr(), nota eiginleikann Auto Translate í ritlinum eða hlaða inn gjörólíkum senum fyrir tungumál sem þurfa annars konar uppsetningu (til dæmis RTL-tungumál).

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 virkar aðeins á text-eiginleika hnútsins. Ef þú stillir textann kvikt í kóða eftir _ready() er sjálfvirka þýðingin yfirskrifuð. Notaðu alltaf tr() sérstaklega í kóðanum fyrir texta sem uppfærist kvikt. Athugaðu einnig að sjálfvirk þýðing beitir tr() á bókstaflegt textagildi — text-eiginleikinn verður því að innihalda þýðingarlykilinn en ekki læsilegan frumstreng.
8

Snjöll varastaðfærsla með LocaleChain

TranslationServer í Godot notar sjálfgefna staðfærslu verkefnisins beint til vara þegar svæðisbundið afbrigði vantar. Leikmaður með pt-BR og aðeins pt-PT-þýðingar sér ensku í stað portúgölsku. LocaleChain lagar þetta með því að sameina þýðingar úr stillanlegum varakeðjum inn í TranslationServer þegar kerfið er stillt.

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 er hrein GDScript-viðbót — engar innbyggðar viðbætur eða breytingar á leikjavélinni. Settu hana upp úr Godot AssetLib eða afritaðu möppuna addons/locale_chain/ inn í verkefnið. Hún virkar með CSV-, PO- og .translation-skrám.
9

Gerðu leikjaþýðingar sjálfvirkar

Þegar staðfærsluuppsetningin er tilbúin geturðu þýtt CSV- eða PO-skrárnar með gervigreind. Gerðu þýðingu leikjastrengja, texta notandaviðmóts, hlutalýsinga og samtala sjálfvirka — beint úr þróunarumhverfinu eða CI/CD-vinnslurásinni.

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
Þýddu í áföngum. Þegar þú bætir nýjum lyklum við frumskrána skaltu aðeins þýða mismuninn í stað þess að búa allt til aftur. Þannig varðveitast þýðingar sem fólk hefur yfirfarið fyrir frásagnarsamtöl eða menningarlega viðkvæmt efni.

Gerðu gæðaeftirlit þýðinga sjálfvirkt

Finndu lykla sem vantar og bilaða staðgengla áður en þeir fara í útgáfu með i18n-validate. Prófaðu notandaviðmótið með sýndarþýðingum í i18n-pseudo áður en raunverulegar þýðingar berast.

Algengar gryfjur

Þýðingarskrár hafa ekki verið fluttar inn

Godot verður að flytja .csv- og .po-skrár inn áður en hægt er að nota þær. Ef þýðingar birtast ekki skaltu athuga að skrárnar séu skráðar undir Project Settings > Localization > Translations. Fyrir CSV skaltu ganga úr skugga um að Godot hafi búið til .translation-skrár í möppunni .godot/imported/.

Kommur eða gæsalappir í CSV-gildum raska þáttun

Setja verður gildi sem innihalda kommur innan tvöfaldra gæsalappa. Tvöfalda þarf tvöfaldar gæsalappir innan gildis sem "". Gæsalöpp sem vantar veldur því að öll röðin er þáttuð rangt og færir oft alla dálka þar á eftir hljóðlega til.

CJK- eða arabískur texti birtist sem auðir ferningar

Aðalleturgerðin inniheldur ekki stafatákn þessara stafrófa. Bættu varaletri við Theme- eða LabelSettings-tilfangið. Án varaleturs birtast stafatákn sem vantar sem auðir rétthyrningar. Notaðu afbrigði Noto Sans fyrir víðtæka Unicode-þekju.

Rangur fjöldi fleirtölumynda í PO-haus

Ef gildi nplurals í PO-hausnum samsvarar ekki raunverulegum fjölda msgstr-færslna getur Godot hrunið eða sýnt ranga fleirtölumynd. Gakktu ávallt úr skugga um að hausinn Plural-Forms samræmist CLDR-forskriftinni fyrir hvert markmál.

Kóði yfirskrifar Auto Translate

Ef text-eiginleiki hnúts er stilltur í GDScript eftir _ready() er niðurstaða sjálfvirkrar þýðingar yfirskrifuð. Notaðu annaðhvort aðeins sjálfvirka þýðingu (stilltu textann í ritlinum en aldrei í kóða) eða aðeins tr() í kóða. Ef hvoru tveggja er blandað saman verður hegðunin ósamræmd.

Ráðlögð verkefnaskipan

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

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Varastaðfærsla með locale-chain-godot

Þegar þýðingarlykil vantar í svæðisbundna staðfærslu á borð við pl_PL fer Godot beint í sjálfgefna staðfærslu verkefnisins í stað þess að athuga fyrst móðurstaðfærsluna 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"],
})

Sjá leiðarvísinn okkar um varastaðfærslur fyrir heildarlista yfir studd þróunarramaverk og 75 innbyggðar keðjur. Learn more →

Algengar spurningar um staðfærslu í Godot