Skip to main content

Heildarleiðbeiningar um staðfærslu Unreal Engine

Frá FText-fjölvum til staðfærsluvarakeðja: staðfærðu UE5-leikinn þinn með Localization Dashboard, String Tables, C++, Blueprints og sjálfvirkum þýðingum.

1

FText og staðfærsluvinnslurásin

FText er strengjagerð Unreal Engine sem tekur mið af staðfærslu. Allir strengir í leiknum sem notendur sjá — viðmótsmerkingar, samtöl, vísbendingar og tilkynningar — verða að nota FText til að fara í gegnum staðfærsluvinnslurásina. FString er aðeins fyrir innri rökvirkni.

LOCTEXT krefst tveggja viðfanga: lykils og frumstrengs. Lykillinn verður að vera einkvæmur innan nafnrýmisins. Textasafnari UE notar lyklana til að rekja þýðingar milli staðfærslna. Með NSLOCTEXT geturðu tilgreint nafnrýmið beint; LOCTEXT notar nafnrýmið sem umlykjandi LOCTEXT_NAMESPACE-fjölvinn skilgreinir.
FText Basics
// FText is UE's localization-aware string type.
// ALWAYS use FText for user-facing text, never FString.

// LOCTEXT: localize a literal string (most common)
FText Title = LOCTEXT("MainMenuTitle", "Start Game");

// NSLOCTEXT: specify namespace explicitly
FText Msg = NSLOCTEXT("UI", "WelcomeMessage", "Welcome, adventurer!");

// INVTEXT: invariant text (never translated — debug/logging only)
FText Debug = INVTEXT("Debug overlay active");

// FText::Format: safe variable interpolation
FText Greeting = FText::Format(
    LOCTEXT("PlayerGreeting", "Hello, {PlayerName}!"),
    FText::FromString(PlayerName)
);
MainMenuWidget.cpp
// In a UMG Widget (C++)
void UMainMenuWidget::NativeConstruct()
{
    Super::NativeConstruct();

    // Bind localized text to UI elements
    if (TitleLabel)
    {
        TitleLabel->SetText(LOCTEXT("GameTitle", "My Epic Game"));
    }

    if (PlayButton)
    {
        PlayButton->SetText(LOCTEXT("PlayButtonLabel", "Play Now"));
    }
}

// IMPORTANT: Always use LOCTEXT for UMG widget text.
// Setting text via FString bypasses the localization pipeline.
Búðu aldrei til texta sem notendur sjá með FString::Printf eða samskeytingu strengja. Það fer alfarið fram hjá staðfærsluvinnslurásinni — ekki er hægt að safna textanum, þýða hann eða birta hann rétt á RTL-tungumálum. Notaðu alltaf FText::Format með LOCTEXT-mynstrum í staðinn.
2

Settu Localization Dashboard upp

Localization Dashboard er innbyggt þýðingarumsýsluverkfæri UE. Það safnar öllum LOCTEXT- og NSLOCTEXT-strengjum úr frumkóðanum, flytur þá út sem .po-skrár fyrir þýðingu og vistþýðir niðurstöðurnar í .locres-tvíundarskrár sem UE hleður við keyrslu.

Localization Dashboard Workflow
# 1. Open the Localization Dashboard:
#    Window > Localization Dashboard

# 2. Add a localization target (e.g., "Game")

# 3. Add cultures:
#    Click "Add New Culture" > select languages (de, ja, fr, es, ko, zh-Hans...)

# 4. Gather text:
#    Click "Gather Text" — UE scans all LOCTEXT/NSLOCTEXT macros

# 5. Export translations:
#    Click "Export" to generate .po files for each culture

# 6. Import translations:
#    After translating .po files, click "Import"

# 7. Compile translations:
#    Click "Compile" to generate .locres binary files

# 8. Preview:
#    Editor Preferences > Region & Language > Preview Game Language
Keyrðu 'Gather Text' eftir hverja kóðabreytingu sem bætir við eða breytir LOCTEXT-fjölvum. Ef þessu skrefi er sleppt birtast nýir strengir ekki í .po-skránum og þýðendur sjá þá ekki. Bættu söfnunarskrefi við sjálfvirka smíðina til að tryggja þetta.
3

Notaðu String Tables fyrir gagnadrifinn texta

Með String Tables geturðu skilgreint staðfærða strengi í miðlægu tilfangi í stað þess að dreifa LOCTEXT-fjölvum um frumskrár. Þær henta vel fyrir viðmótstexta, samtöl og alla strengi sem hönnuðir eða höfundar þurfa að breyta án þess að snerta kóða. Hægt er að skilgreina String Tables sem UE-tilföng eða flytja þær inn úr CSV.

StringTableUsage.cpp
// StringTables provide a data-driven approach to localization.
// Define strings in a CSV asset instead of scattering LOCTEXT across code.

// 1. Create a String Table asset:
//    Content Browser > Right-click > Miscellaneous > String Table

// 2. Or define via CSV (importable into UE):
// Key,SourceString
// MainMenu_Title,Start Game
// MainMenu_Continue,Continue
// MainMenu_Settings,Settings
// MainMenu_Quit,Quit to Desktop
// HUD_Health,Health
// HUD_Ammo,Ammo: {0}
// Dialog_Merchant_Greeting,Welcome to my shop!

// 3. Reference in C++:
FText Title = FText::FromStringTable(
    FName(TEXT("/Game/Localization/ST_MainMenu")),
    TEXT("MainMenu_Title")
);

// 4. Reference in Blueprints:
//    Use the "Make Text from String Table" node
//    Set Table ID and Key
Localization Dashboard safnar String Tables sjálfkrafa. Þú þarft ekki LOCTEXT-fjölva fyrir strengi sem eru skilgreindir í String Table — vísaðu aðeins í þá með töfluauðkenni og lykli í C++ eða Blueprints.
4

Staðfærslumynstur í C++

Í C++ skaltu skilgreina LOCTEXT_NAMESPACE efst í hverri .cpp-skrá og nota LOCTEXT fyrir alla strengi sem notendur sjá. Notaðu FText::Format fyrir kvikt efni með breytum. Afturkallaðu alltaf skilgreiningu nafnrýmisins í lok skrárinnar til að koma í veg fyrir leka.

MainMenuWidget.cpp
// Define a namespace at the top of each .cpp file
// All LOCTEXT calls in this file use this namespace
#define LOCTEXT_NAMESPACE "MyGame.MainMenu"

#include "MainMenuWidget.h"

void UMainMenuWidget::NativeConstruct()
{
    Super::NativeConstruct();

    // These use the "MyGame.MainMenu" namespace automatically
    TitleText->SetText(LOCTEXT("Title", "Main Menu"));
    PlayText->SetText(LOCTEXT("PlayButton", "Play"));
    SettingsText->SetText(LOCTEXT("SettingsButton", "Settings"));
    QuitText->SetText(LOCTEXT("QuitButton", "Quit"));
}

// CRITICAL: Always undefine at the end of the file
#undef LOCTEXT_NAMESPACE
FText::Format Examples
// FText::Format — the safe way to build localized strings
// NEVER use FString::Printf or string concatenation for user-facing text.

// Named arguments (recommended)
FText ItemPickup = FText::Format(
    LOCTEXT("ItemPickup", "You picked up {ItemName} x{Count}"),
    FText::FromString(ItemName),
    FText::AsNumber(Count)
);

// FText::AsNumber respects locale formatting:
//   English: 1,234,567
//   German:  1.234.567
//   French:  1 234 567

// FText::AsCurrency for prices:
FText Price = FText::AsCurrency(
    9.99,
    TEXT("USD"),
    &FInternationalization::Get().GetCurrentCulture().Get()
);

// FText::AsDate and FText::AsTime for dates:
FText DateStr = FText::AsDate(FDateTime::Now());
Viðföng FText::Format verða einnig að vera FText, ekki óunnið FString. Notaðu FText::FromString() til að umbreyta FString-gildum, FText::AsNumber() fyrir staðfærsluháð talnasnið og FText::AsCurrency() fyrir verð. Samskeyting óunninna FString-gilda myndar texta sem fylgir ekki staðfærslureglum um snið.
5

Staðfærsla Blueprint

Allir Text-eiginleikar í Blueprints eru sjálfgefið FText og því tilbúnir til staðfærslu. Stilltu Key og Namespace á upplýsingaspjaldi eiginleikans svo hægt sé að safna strengjunum. Notaðu Format Text-hnútinn fyrir kvikt efni með breytum.

Blueprint Localization Patterns
// Blueprint Localization Basics:
//
// 1. All Text properties in Blueprints are FText by default
//    (already localization-ready)
//
// 2. Set the Text property in the Details panel
//    Expand the dropdown to set:
//    - Key: unique identifier for translation
//    - Namespace: grouping for organization
//    - Source String: the text to display/translate
//
// 3. For dynamic text, use the "Format Text" node:
//    Format: "Hello, {PlayerName}!"
//    Connect a "Find" pin named "PlayerName" to your variable
//
// 4. For plurals, use "Text Format with Arguments":
//    Pattern: "{Count}|plural(one=item,other=items)"
//
// 5. Culture switching at runtime:
//    Use "Set Current Culture" node
//    Input: culture code string (e.g., "de", "ja", "fr")
Opnaðu fellilistann fyrir textaeiginleikann á Blueprint Details-spjaldinu til að sjá reitina Key, Namespace og Source String. Merkingarbær Key gerir þýðendum mun auðveldara að bera kennsl á strengi í .po-skránni.
6

Meðhöndlaðu fleirtölur og kyn

Unreal Engine styður ICU-skilaboðasnið fyrir fleirtölur og kynháðan texta. Skilgreindu fleirtölureglur í frumstrengjunum og UE velur sjálfkrafa rétta mynd samkvæmt CLDR-reglum virku staðfærslunnar.

ICU Plural & Gender Rules
// UE uses ICU message format for plurals.
// Define plural rules in your .po or String Table:

// English source:
// "{Count}|plural(one=You have # item,other=You have # items)"

// German translation:
// "{Count}|plural(one=Du hast # Gegenstand,other=Du hast # Gegenstaende)"

// Arabic translation (6 forms):
// "{Count}|plural(zero=لا عناصر,one=عنصر واحد,two=عنصران,few=# عناصر,many=# عنصرًا,other=# عنصر)"

// Japanese (1 form):
// "{Count}|plural(other=アイテム#個)"

// In C++:
FText ItemCount = FText::Format(
    LOCTEXT("ItemCount",
        "{Count}|plural(one=You have {Count} item,other=You have {Count} items)"),
    ItemCount
);

// Gender-dependent text:
// "{Gender}|gender(masculine=Il est,feminine=Elle est) prêt{Gender}|gender(masculine=,feminine=e)"
Aldrei harðkóða count == 1 til að greina eintölu. Franska meðhöndlar 0 sem eintölu. Rússneska hefur sérstakar myndir fyrir 'few' og 'many'. Arabíska hefur 6 fleirtölumyndir. Láttu ICU-fleirtölureglur sjá um rökin — skilgreindu allar nauðsynlegar myndir og UE velur rétta mynd fyrir hverja staðfærslu.
7

Pakkaðu og prófaðu staðfærsluna

Áður en gefið er út skaltu ganga úr skugga um að allar markstaðfærslur hafi vistþýddar .locres-skrár og að texti birtist rétt við keyrslu. Notaðu forskoðun staðfærslu í Editor, hnekkingar staðfærslu á skipanalínu og sjálfvirkar prófanir til að finna þýðingar sem vantar eða eru bilaðar.

Packaging & Testing Workflow
# Compile and test localization before packaging:

# 1. Editor Preferences > Region & Language > Preview Game Language
#    Set to each target language and verify all text renders correctly.

# 2. Command-line culture override for testing:
MyGame.exe -culture=ja

# 3. Packaging settings:
#    Project Settings > Packaging > Localizations to Package
#    Select all cultures you want to include in the build.

# 4. Verify .locres files exist after packaging:
MyGame/Content/Localization/Game/
├── en/
│   └── Game.locres
├── de/
│   └── Game.locres
├── ja/
│   └── Game.locres
├── fr/
│   └── Game.locres
└── ko/
    └── Game.locres

# 5. Runtime culture switching:
#    FInternationalization::Get().SetCurrentCulture(TEXT("ja"));
#    This reloads all FText strings from the new culture's .locres files.
Ef staðfærsla er ekki skráð undir Project Settings > Packaging > Localizations to Package eru .locres-skrár hennar ekki teknar með í smíðina. Leikmenn sem velja tungumálið við keyrslu sjá varatexta eða tóma strengi. Gakktu alltaf úr skugga um að pökkunarstillingarnar samsvari studdum staðfærslum.
8

Bættu við staðfærsluvarakeðjum

Sjálfgefin staðfærsla Unreal Engine notar aðeins varaleið eftir stigveldi IETF-undirmerkja. Notandi með pt-BR sem vantar þýðingu fær ensku í stað fullgóðrar pt-PT-þýðingar. locale-chain-ue bætir við stillanlegum hliðarvarakeðjum í gegnum FTextLocalizationManager svo svæðisbundnir notendur sjái alltaf þá þýðingu sem kemst næst þeirra máli.

locale-chain-ue (C++)
// locale-chain-ue: Smart fallback chains for UE5
// Problem: UE falls back to default when a locale is missing.
// pt-BR user gets English instead of pt-PT translations.

// Solution: One function call at startup.
#include "LocaleChain.h"

void UMyGameInstance::Init()
{
    Super::Init();
    ULocaleChain::Configure();  // Load 75 built-in fallback chains
}

// Now resolve strings with per-key fallback:
FString Greeting = ULocaleChain::Resolve(
    TEXT("greeting"), TEXT("MyNamespace")
);
// pt-BR user: tries pt-BR -> pt-PT -> pt -> default

// Custom overrides:
TMap<FString, FString> Overrides;
Overrides.Add(TEXT("pt-BR"), TEXT("pt"));       // Simplify chain
Overrides.Add(TEXT("sv-FI"), TEXT("sv"));        // Add new chain
ULocaleChain::ConfigureWithOverrides(Overrides);

// Full control (C++ only):
TMap<FString, TArray<FString>> Custom;
Custom.Add(TEXT("pt-BR"), {TEXT("pt-PT"), TEXT("pt")});
Custom.Add(TEXT("es-MX"), {TEXT("es-419"), TEXT("es")});
ULocaleChain::ConfigureCustom(Custom, false);
Kallaðu einu sinni á ULocaleChain::Configure() við ræsingu til að hlaða 75 innbyggðum varakeðjum fyrir 11 tungumálafjölskyldur. Notaðu ConfigureWithOverrides fyrir sérstillingu sem hentar Blueprint eða ConfigureCustom í C++ til að stjórna varahegðuninni að fullu.

Gerðu þýðingargæði sjálfvirk

Finndu lykla sem vantar og bilaða staðgengla með i18n-validate áður en þeir eru gefnir út. Prófaðu viðmótið með sýndarþýðingum frá i18n-pseudo áður en raunverulegar þýðingar berast.

Algengar gryfjur

FString notað fyrir texta sem notendur sjá

FString fer fram hjá allri staðfærsluvinnslurásinni. Ekki er hægt að safna texta sem er smíðaður með FString::Printf eða samskeytingu strengja, þýða hann eða birta hann rétt á RTL-tungumálum. Notaðu alltaf FText með LOCTEXT-fjölvum og FText::Format fyrir sýnilega strengi.

#undef LOCTEXT_NAMESPACE vantar

Ef #undef LOCTEXT_NAMESPACE gleymist í lok .cpp-skrár lekur nafnrýmið inn í síðari þýðingareiningar. Þá fá strengir í öðrum skrám röng nafnrými án viðvörunar og þýðingar birtast í röngu samhengi.

Harðkóðuð fleirtölurök

Rithátturinn 'count == 1 ? singular : plural' hunsar CLDR-reglur. Franska meðhöndlar 0 sem eintölu, rússneska hefur 4 fleirtölumyndir og arabíska 6. Notaðu ICU-fleirtölusetningagerð í FText-mynstrunum og láttu UE beita reglunum fyrir hverja staðfærslu.

Gleymt að vistþýða eftir innflutning

Innflutningur .po-skráa uppfærir textagögnin en býr ekki til .locres-tvíundarskrár. Leikurinn hleður því enn gömlu vistþýddu þýðingunum við keyrslu. Keyrðu alltaf 'Compile' í Localization Dashboard eftir innflutning eða bættu skrefinu við sjálfvirku smíðina.

Ráðlögð verkefnauppbygging

Project Structure
MyUnrealProject/
├── Config/
│   └── Localization/
│       └── Game.ini                  # Localization target config
├── Content/
│   └── Localization/
│       ├── Game/
│       │   ├── Game.manifest         # Gather manifest
│       │   ├── en/
│       │   │   ├── Game.po           # Source strings (.po)
│       │   │   └── Game.locres       # Compiled binary
│       │   ├── de/
│       │   │   ├── Game.po
│       │   │   └── Game.locres
│       │   ├── ja/
│       │   │   ├── Game.po
│       │   │   └── Game.locres
│       │   └── fr/
│       │       ├── Game.po
│       │       └── Game.locres
│       └── StringTables/
│           ├── ST_MainMenu.uasset    # String Table asset
│           └── ST_HUD.uasset
├── Plugins/
│   └── LocaleChain/                  # locale-chain-ue plugin
│       ├── LocaleChain.uplugin
│       └── Source/
│           └── LocaleChain/
├── Source/
│   └── MyGame/
│       ├── UI/
│       │   ├── MainMenuWidget.h
│       │   └── MainMenuWidget.cpp    # LOCTEXT macros here
│       └── MyGameInstance.cpp        # ULocaleChain::Configure()
└── MyUnrealProject.uproject

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

Algengar spurningar