Inhaltsverzeichnis
Internacionalizacija (i18n)
Smjernice za višejezičnost WvdS FPC RAD Suite.
Temeljno načelo
Bez literalnih stringova u Pascal-kodu (osim u asm-blokovima i tehničkim konstantama).
Podržani jezici
| Kod | Jezik | Status |
|---|---|---|
| EN | Engleski | Baza (Obavezno) |
| DE | Njemački | Potpuno |
| SL | Slovenski | Potpuno |
| HR | Hrvatski | Potpuno |
Resourcestrings
Struktura
sources/common/core/ ├── WvdS.VSCode.Strings.pas # Engleski (Default) ├── WvdS.VSCode.Strings.DE.pas # Njemački ├── WvdS.VSCode.Strings.SL.pas # Slovenski └── WvdS.VSCode.Strings.HR.pas # Hrvatski
Bazna Unit (Engleski)
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.
Hrvatski prijevod
unit WvdS.VSCode.Strings.HR; {$mode objfpc}{$H+} interface resourcestring // === CORE === rsCoreActivated = 'WvdS Core extension aktiviran'; rsCoreDeactivated = 'WvdS Core extension deaktiviran'; rsCoreError = 'Greška: %s'; // === BUILD === rsBuildStarting = 'Build se pokreće...'; rsBuildCompleted = 'Build uspješno završen'; rsBuildFailed = 'Build neuspješan: %s'; rsBuildCompilerNotFound = 'Compiler nije pronađen: %s'; // === PROJECTS === rsProjectCreating = 'Kreiranje projekta...'; rsProjectCreated = 'Projekt ''%s'' uspješno kreiran'; rsProjectNameEmpty = 'Naziv projekta ne smije biti prazan'; rsProjectNameTooLong = 'Naziv projekta ne smije imati više od %d znakova'; rsProjectNameInvalidChar = 'Nevaljani znak u nazivu projekta: ''%s'''; // === TOOLCHAIN === rsToolNotFound = 'Alat nije pronađen: %s'; rsToolDetected = '%s pronađen na %s'; rsToolVersionMismatch = '%s verzija %s pronađena, očekivana %s'; // === VALIDATION === rsValidationFailed = 'Validacija neuspješna: %s'; rsFileNotFound = 'Datoteka nije pronađena: %s'; rsAccessDenied = 'Pristup odbijen: %s'; rsUnexpectedError = 'Neočekivana greška (%s): %s'; implementation end.
Korištenje u kodu
Jednostavni stringovi
uses WvdS.VSCode.Strings; // ISPRAVNO ShowInfoMessage(rsBuildStarting); // ZABRANJENO ShowInfoMessage('Build starting...');
Stringovi s parametrima
// ISPRAVNO - Koristiti Format ShowInfoMessage(Format(rsProjectCreated, [ProjectName])); ShowErrorMessage(Format(rsBuildFailed, [ErrorMessage])); // ZABRANJENO ShowInfoMessage('Project ''' + ProjectName + ''' created');
Pluralizacija
resourcestring rsFilesFound_One = '%d file found'; rsFilesFound_Many = '%d files found'; function GetFilesFoundMessage(ACount: Integer): string; begin if ACount = 1 then Result := Format(rsFilesFound_One, [ACount]) else Result := Format(rsFilesFound_Many, [ACount]); end;
Dozvoljene iznimke
Tehničke konstante
const // Tehnički ID-evi - ne prevoditi COMMAND_ID = 'wvds.build.run'; FILE_EXTENSION = '.pas'; CONFIG_KEY = 'wvds.toolchain.fpcPath';
Format-Stringovi
const // JSON/XML Templates - ne prevoditi JSON_TEMPLATE = '{"name": "%s", "version": "%s"}'; XML_TEMPLATE = '<%s>%s</%s>';
asm-blokovi
// JavaScript-kod smije sadržavati stringove asm console.log('Debug message'); vscode.window.showInformationMessage('Hello'); end;
Workflow: Dodavanje novog stringa
Korak 1: Definirati engleski string
// WvdS.VSCode.Strings.pas resourcestring rsNewFeatureMessage = 'New feature activated';
Korak 2: Njemački prijevod
// WvdS.VSCode.Strings.DE.pas resourcestring rsNewFeatureMessage = 'Neue Funktion aktiviert';
Korak 3: Slovenski prijevod
// WvdS.VSCode.Strings.SL.pas resourcestring rsNewFeatureMessage = 'Nova funkcija aktivirana';
Korak 4: Hrvatski prijevod
// WvdS.VSCode.Strings.HR.pas resourcestring rsNewFeatureMessage = 'Nova funkcija aktivirana';
Korak 5: Koristiti u kodu
ShowInfoMessage(rsNewFeatureMessage);
Odabir jezika za vrijeme izvršavanja
Jezik se čita iz VS Code postavki:
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 // Engleski kao Fallback LoadEnglishStrings; end; end;
Validacija
wvds-lint i18n-Check
wvds-lint i18n --path sources/
Provjerava se:
- Hardkodirani stringovi u kodu
- Nedostajući prijevodi
- Nekorišteni Resourcestrings
- Konzistentnost Format-Stringova (jednak broj %s, %d)
Checklista
[ ] Engleski string definiran [ ] Njemački prijevod dodan [ ] Slovenski prijevod dodan [ ] Hrvatski prijevod dodan [ ] Format-parametri se podudaraju [ ] Korišteno u kodu (nije hardkodirano) [ ] wvds-lint i18n uspješan
Best Practices
Jasni, kontekst-neovisni stringovi
// DOBRO - Samoobjašnjavajuće rsFileNotFound = 'File not found: %s'; // LOŠE - Nedostaje kontekst rsNotFound = 'Not found: %s'; // Što nije pronađeno?
Preferirati pune rečenice
// DOBRO rsProjectCreatedSuccessfully = 'Project ''%s'' was created successfully.'; // LOŠE - Fragmenti rsProject = 'Project'; rsCreated = 'created'; rsSuccessfully = 'successfully'; // UI: rsProject + ' ' + Name + ' ' + rsCreated + ' ' + rsSuccessfully // Problem: Redoslijed riječi varira između jezika!
Konzistentna terminologija
| Pojam | Engleski | Njemački | Hrvatski |
| Build | Build | Build (ne „Erstellung“) | Build |
| Compile | Compile | Kompilieren | Kompiliranje |
| Path | Path | Pfad | Putanja |
| Settings | Settings | Einstellungen | Postavke |
Vidi također
Zuletzt geändert: 29.01.2026. u 22:35