Localization (i18n)
cMind je plne localizable a ships v rovnakých 23 jazykoch, ktoré samotný cTrader podporuje, takže obchodník používa platformu — a číta tieto dokumenty — vo svojom vlastnom jazyku. Angličtina je fallback; akýkoľvek chýbajúci translation degraduje pekne na angličtinu namiesto zobrazenia blanku alebo raw key.
Supported languages
Arabic (RTL), Chinese (Simplified), Czech, English, French, German, Greek, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Polish, Portuguese (Brazil), Russian, Serbian, Slovak, Slovenian, Spanish, Thai, Turkish, Vietnamese.
Jeden zdroj pravdy je Core.Constants.SupportedCultures — request-culture middleware, language
switcher, resource-parity test a no-hardcoded-string gate všetci čítajú z toho. Pridávanie jazyka je
one-line zmena tam plus jeho resource files.
Ako to funguje (Blazor Server)
- Resources. UI strings žijú v
src/Web/Resources/Ui.resx(English base) plus jedenUi.<culture>.resxper language. Components čítajú cezIStringLocalizer<Ui>—@L["key"], nikdy literal..resxfiles sú generated ztools/i18n/ui-translations.json(pwsh tools/i18n/gen-resx.ps1), translator-friendly source of truth. - Culture resolution.
RequestLocalizationMiddlewarepicks culture z.AspNetCore.Culturecookie prvý, potom browserAccept-Language, potom English. - Switching. App-bar language switcher (a Settings → Language section) naviguje na
GET /set-cultureendpoint — full-reload vonku Blazor circuit, pretože circuit nemôže zmeniť culture live. Piše cookie a, pre signed-in user, persist voľba na svoj profile (UserProfile.Locale); reload boots fresh circuit v chosen language. - Persistence & login. Saved profile locale je written späť do culture cookie pri sign-in, takže user lands vo svojom jazyku na every device.
- Right-to-left. Arabic (a akýkoľvek budúci RTL language) sets
<html dir="rtl">a wraps layout v MudBlazorMudRTLProvider, mirroring whole shell. - ICU. Web host beží s ICU enabled (
InvariantGlobalization=false); wire/parse code zostáva naCultureInfo.InvariantCulture, takže len per-culture UI formatting je affected — nikdy backtest alebo CSV.
Gate — žádny hard-coded UI text
Nový user-facing strings nemôžu byť merged un-localized v covered scope:
- Build-failing arch-guard test (
NoHardcodedUiTextTests) skenuje migrated.razorfiles a fails na akýkoľvek literal, text-bearing attribute (Label,Text,Title,Placeholder,HelperText,aria-label,alt), ktorý nie je@L["…"]lookup. - Resource-parity test (
ResourceParityTests) fails build ak akýkoľvek language schýba kľúč alebo ships blank value — každý language vždy má každý kľúč.
Pridávanie alebo zmena string
- Add/edit kľúč v
tools/i18n/ui-translations.jsonpre každú kultúru. - Regenerate
.resx:pwsh tools/i18n/gen-resx.ps1. - Reference to v component s
@L["your.key"]. dotnet test— parity a hardcoded-text gates vás drž čestný.
Docs localization
Tieto dokumenty sú lokalizované aj. Docusaurus i18n je configured pre všetkých 23 locales (website/i18n/), s
locale dropdown v navbar a RTL pre Arabic. Scaffold locale translation files s
npm run write-translations -- --locale <code> a translate pod website/i18n/<code>/. Per
localization mandate, pridávanie alebo zmena akéhokoľvek doc znamená updating každej locale v rovnakej zmene.