Inhaltsverzeichnis
Internacionalizacija (i18n)
Smernice za večjezičnost WvdS FPC RAD Suite.
Osnovno načelo
Nobenih dobesednih nizov v Pascal kodi (razen v blokih asm in tehničnih konstantah).
Podprti jeziki
| Koda | Jezik | Status |
|---|---|---|
| EN | Angleščina | Osnova (obvezno) |
| DE | Nemščina | Popolno |
| SL | Slovenščina | Popolno |
| HR | Hrvaščina | Popolno |
Resourcestrings
Struktura
sources/common/core/ ├── WvdS.VSCode.Strings.pas # Angleščina (privzeto) ├── WvdS.VSCode.Strings.DE.pas # Nemščina ├── WvdS.VSCode.Strings.SL.pas # Slovenščina └── WvdS.VSCode.Strings.HR.pas # Hrvaščina
Osnovna enota (angleščina)
unit WvdS.VSCode.Strings; {$mode objfpc}{$H+} interface resourcestring // === CORE === rsCoreActivated = 'WvdS Core extension activated'; rsCoreDeactivated = 'WvdS Core extension deactivated'; rsCoreError = 'Error: %s'; // === BUILD === rsBuildStarting = 'Build starting...'; rsBuildCompleted = 'Build completed successfully'; rsBuildFailed = 'Build failed: %s'; rsBuildCompilerNotFound = 'Compiler not found: %s'; // === PROJECTS === rsProjectCreating = 'Creating project...'; rsProjectCreated = 'Project ''%s'' created successfully'; rsProjectNameEmpty = 'Project name cannot be empty'; rsProjectNameTooLong = 'Project name cannot exceed %d characters'; rsProjectNameInvalidChar = 'Invalid character in project name: ''%s'''; // === TOOLCHAIN === rsToolNotFound = 'Tool not found: %s'; rsToolDetected = '%s detected at %s'; rsToolVersionMismatch = '%s version %s found, expected %s'; // === VALIDATION === rsValidationFailed = 'Validation failed: %s'; rsFileNotFound = 'File not found: %s'; rsAccessDenied = 'Access denied: %s'; rsUnexpectedError = 'Unexpected error (%s): %s'; implementation end.
Slovenski prevod
unit WvdS.VSCode.Strings.SL; {$mode objfpc}{$H+} interface resourcestring // === CORE === rsCoreActivated = 'WvdS Core razširitev aktivirana'; rsCoreDeactivated = 'WvdS Core razširitev deaktivirana'; rsCoreError = 'Napaka: %s'; // === BUILD === rsBuildStarting = 'Gradnja se zaganja...'; rsBuildCompleted = 'Gradnja uspešno zaključena'; rsBuildFailed = 'Gradnja ni uspela: %s'; rsBuildCompilerNotFound = 'Prevajalnik ni najden: %s'; // === PROJECTS === rsProjectCreating = 'Ustvarjanje projekta...'; rsProjectCreated = 'Projekt ''%s'' uspešno ustvarjen'; rsProjectNameEmpty = 'Ime projekta ne sme biti prazno'; rsProjectNameTooLong = 'Ime projekta ne sme presegati %d znakov'; rsProjectNameInvalidChar = 'Neveljaven znak v imenu projekta: ''%s'''; // === TOOLCHAIN === rsToolNotFound = 'Orodje ni najdeno: %s'; rsToolDetected = '%s zaznano na %s'; rsToolVersionMismatch = '%s različica %s najdena, pričakovana %s'; // === VALIDATION === rsValidationFailed = 'Validacija ni uspela: %s'; rsFileNotFound = 'Datoteka ni najdena: %s'; rsAccessDenied = 'Dostop zavrnjen: %s'; rsUnexpectedError = 'Nepričakovana napaka (%s): %s'; implementation end.
Uporaba v kodi
Preprosti nizi
uses WvdS.VSCode.Strings; // PRAVILNO ShowInfoMessage(rsBuildStarting); // PREPOVEDANO ShowInfoMessage('Build starting...');
Nizi s parametri
// PRAVILNO - uporabite Format ShowInfoMessage(Format(rsProjectCreated, [ProjectName])); ShowErrorMessage(Format(rsBuildFailed, [ErrorMessage])); // PREPOVEDANO ShowInfoMessage('Project ''' + ProjectName + ''' created');
Množina
resourcestring rsFilesFound_One = '%d datoteka najdena'; rsFilesFound_Many = '%d datotek najdenih'; function GetFilesFoundMessage(ACount: Integer): string; begin if ACount = 1 then Result := Format(rsFilesFound_One, [ACount]) else Result := Format(rsFilesFound_Many, [ACount]); end;
Dovoljene izjeme
Tehnične konstante
const // Tehnični ID-ji - ne prevajajte COMMAND_ID = 'wvds.build.run'; FILE_EXTENSION = '.pas'; CONFIG_KEY = 'wvds.toolchain.fpcPath';
Formatni nizi
const // JSON/XML predloge - ne prevajajte JSON_TEMPLATE = '{"name": "%s", "version": "%s"}'; XML_TEMPLATE = '<%s>%s</%s>';
Bloki asm
// JavaScript koda lahko vsebuje nize asm console.log('Debug message'); vscode.window.showInformationMessage('Hello'); end;
Potek dela: Dodajanje novega niza
Korak 1: Definirajte angleški niz
// WvdS.VSCode.Strings.pas resourcestring rsNewFeatureMessage = 'New feature activated';
Korak 2: Nemški prevod
// WvdS.VSCode.Strings.DE.pas resourcestring rsNewFeatureMessage = 'Neue Funktion aktiviert';
Korak 3: Slovenski prevod
// WvdS.VSCode.Strings.SL.pas resourcestring rsNewFeatureMessage = 'Nova funkcija aktivirana';
Korak 4: Hrvaški prevod
// WvdS.VSCode.Strings.HR.pas resourcestring rsNewFeatureMessage = 'Nova funkcija aktivirana';
Korak 5: Uporabite v kodi
ShowInfoMessage(rsNewFeatureMessage);
Izbira jezika med izvajanjem
Jezik se prebere iz nastavitev VS Code:
function GetCurrentLanguage: string; begin Result := GetVSCodeLanguage; // npr. 'de', 'en', 'sl', 'hr' end; procedure LoadLanguageStrings; var Lang: string; begin Lang := GetCurrentLanguage; case Lang of 'de': LoadGermanStrings; 'sl': LoadSlovenianStrings; 'hr': LoadCroatianStrings; else // Angleščina kot nadomestek LoadEnglishStrings; end; end;
Validacija
Preverjanje i18n z wvds-lint
wvds-lint i18n --path sources/
Preveri se:
- Zakodirani nizi v kodi
- Manjkajoči prevodi
- Neuporabljeni resourcestrings
- Doslednost formatnih nizov (enako število %s, %d)
Kontrolni seznam
[ ] Angleški niz definiran [ ] Nemški prevod dodan [ ] Slovenski prevod dodan [ ] Hrvaški prevod dodan [ ] Formatni parametri se ujemajo [ ] V kodi uporabljeno (ni zakodirano) [ ] wvds-lint i18n uspešen
Najboljše prakse
Jasni, od konteksta neodvisni nizi
// DOBRO - Samoopisujoče rsFileNotFound = 'Datoteka ni najdena: %s'; // SLABO - Manjka kontekst rsNotFound = 'Ni najdeno: %s'; // Kaj ni bilo najdeno?
Prednostno polni stavki
// DOBRO rsProjectCreatedSuccessfully = 'Projekt ''%s'' je bil uspešno ustvarjen.'; // SLABO - Fragmenti rsProject = 'Projekt'; rsCreated = 'ustvarjen'; rsSuccessfully = 'uspešno'; // UI: rsProject + ' ' + Name + ' ' + rsCreated + ' ' + rsSuccessfully // Problem: Besedni red se razlikuje med jeziki!
Dosledna terminologija
| Pojem | Angleščina | Slovenščina |
| Build | Build | Gradnja |
| Compile | Compile | Prevajanje |
| Path | Path | Pot |
| Settings | Settings | Nastavitve |
Glejte tudi
Zuletzt geändert: dne 29.01.2026 ob 22:27