Files
kniip/.cursor/plans/meertaligheid_kniip_72a787f1.plan.md
T
2026-11-10 15:33:49 +01:00

6.9 KiB

name, overview, todos, isProject
name overview todos isProject
Meertaligheid kniip kniip meertalig maken (Nederlands, Engels, Duits, Frans, Spaans, Italiaans, Portugees) met een taalinstelling die standaard de Windows-taal volgt en direct wisselt zonder herstart, net als de kleurmodus. Daarnaast de installer en de README vertalen.
id content status
infra LanguageManager, AppLanguage-instelling, Strings.*.xaml-skelet en opstart-aanroep pending
id content status
settings-ui Taalkeuze op tab Weergave in SettingsWindow met direct wisselen pending
id content status
xaml Alle XAML-teksten omzetten naar DynamicResource (nl-bron) pending
id content status
csharp C#-teksten omzetten naar LanguageManager.T, inclusief tray en verversen bij Changed pending
id content status
translate Vertalingen en, de, fr, es, it, pt invullen en controlescript voor sleutels in tools/ pending
id content status
installer Inno Setup: zeven talen, CustomMessages, eerste taal doorgeven aan de app pending
id content status
docs README in zeven talen, CHANGELOG-entry pending
id content status
verify Bouwen, elke taal doorlopen, breedtes van lange teksten (de, fr, es, it, pt) nalopen pending
false

Meertaligheid kniip (nl, en, de, fr, es, it, pt)

Aanpak

Zelfde patroon als src/Kniip/Infrastructure/ThemeManager.cs: per taal een ResourceDictionary met strings, die in Application.Current.Resources.MergedDictionaries wordt gewisseld. XAML gebruikt DynamicResource, dus alle open vensters wisselen direct mee.

flowchart LR
    Settings["AppSettings.Language"] --> LangMgr["LanguageManager.Apply"]
    LangMgr --> Dict["Strings.xx.xaml in MergedDictionaries"]
    Dict --> Xaml["XAML: DynamicResource"]
    LangMgr --> Changed["LanguageManager.Changed"]
    Changed --> CodeTexts["C#-teksten, tray, open menu's verversen"]
    LangMgr --> Culture["CurrentUICulture en CurrentCulture"]

Onderdelen

1. Taalbestanden in de nieuwe map src/Kniip/Languages/:

  • Strings.nl.xaml (bron, huidige teksten), Strings.en.xaml, Strings.de.xaml, Strings.fr.xaml, Strings.es.xaml, Strings.it.xaml, Strings.pt.xaml
  • Portugees is Braziliaans Portugees (de grootste groep gebruikers) en wordt ook gebruikt voor Windows in pt-PT
  • Sleutels in de vorm Settings.Hotkeys.Title, Editor.Menu.Undo, Tray.PauseCapture; teksten met variabelen gebruiken {0} voor string.Format
  • Een ontbrekende sleutel in een taal valt terug op Engels (Engels wordt onder de gekozen taal gemerged)

2. LanguageManager (nieuw, src/Kniip/Infrastructure/LanguageManager.cs):

  • Apply(AppLanguage): wisselt de dictionary, zet CultureInfo (datums, getallen) en het Language-attribuut van open vensters, en roept daarna Changed aan
  • T(string key) en T(string key, params object[] args) voor C#-code
  • Bij System de Windows-UI-taal (CultureInfo.InstalledUICulture) nemen; staat die niet in de lijst, dan Engels

3. Instelling in src/Kniip/Settings/AppSettings.cs:

  • enum AppLanguage { System, Dutch, English, German, French, Spanish, Italian, Portuguese }, met public AppLanguage Language { get; set; } = AppLanguage.System;
  • In src/Kniip/Settings/SettingsWindow.xaml, tab Weergave, een kopje "Taal" boven Kleurmodus met een ComboBox. Taalnamen staan altijd in de eigen taal (Nederlands, English, Deutsch, Français, Español, Italiano, Português), en een wissel geldt direct, net als bij de kleurmodus
  • Aanroep van LanguageManager.Apply bij het opstarten in src/Kniip/App.xaml.cs, vóór ThemeManager.Apply en vóór het eerste venster

4. XAML omzetten: elke Text, Content, ToolTip, Header en Title wordt {DynamicResource ...}. Op volgorde van omvang:

  • SettingsWindow.xaml (ongeveer 110 teksten), EditorWindow.xaml (ongeveer 100), ScreencastWindow.xaml, HistoryWindow.xaml, RecordingToolbar.xaml, SnipToast.xaml, CountdownWindow.xaml, RegionSelectorWindow.xaml, RegionCaptureWindow.xaml, ColorPickerButton.xaml, EmojiPickerButton.xaml, App.xaml

5. C#-teksten omzetten naar LanguageManager.T(...):

  • Menu's die bij openen worden opgebouwd (contextmenu's in EditorWindow.xaml.cs, werkbalkmenu) zijn daarmee meteen goed
  • Teksten die langer blijven staan (bijvoorbeeld HintText, statusteksten, labels in SettingsWindow.xaml.cs en ScreencastWindow.xaml.cs) krijgen SetResourceReference of verversen bij LanguageManager.Changed
  • Tray (src/Kniip/Infrastructure/TrayIcon.cs, WinForms) bouwt de menu-teksten opnieuw op bij Changed
  • Overige bestanden: App.xaml.cs, HistoryActions.cs, HistoryWindow.xaml.cs, UploaderImporter.cs, ZiplineUploader.cs, RecordingController.cs, UpdateInstaller.cs, UpdateChecker.cs, ShellIntegration.cs, HotkeyGesture.cs (namen zoals "Geen"), EmojiCatalog.cs (categorienamen), MarkdownRenderer.cs, RulerControl.cs, VideoExporter.cs, GlobalHotkeyHook.cs, AppIdentity.cs
  • Standaardbestandsnamen "Knipsel" en "Screencast" volgen de taal (Knipsel, Snip, Ausschnitt, Capture, Recorte, Ritaglio, Recorte). Een eigen naamsjabloon blijft ongewijzigd
  • Release notes van GitHub blijven in de taal waarin ze geschreven zijn

6. Project: in src/Kniip/Kniip.csproj wordt SatelliteResourceLanguages nl;en;de;fr;es;it;pt-BR (voor de WPF-systeemteksten), en de Description wordt Engels.

7. Installer (installer/Kniip.iss):

  • In [Languages] komen dutch, english (Default.isl), german, french, spanish, italian en brazilianportuguese (BrazilianPortuguese.isl), met ShowLanguageDialog=auto
  • De eigen teksten (taken, "kniip nu starten", groepnamen) gaan naar [CustomMessages] per taal en worden aangeroepen met {cm:...}
  • De gekozen taal geeft de installer als eerste taal door aan de app, via HKCU\Software\kniip\Language, alleen als er nog geen instelling bestaat. Komt dit in de praktijk niet goed over, dan blijft System de standaard

8. Documentatie:

  • README.md wordt Engels (internationaal standaard) met taallinks bovenaan; daarnaast README.nl.md (huidige tekst), README.de.md, README.fr.md, README.es.md, README.it.md en README.pt.md
  • CHANGELOG.md: vanaf nu in het Engels; de bestaande geschiedenis blijft Nederlands. Een nieuwe entry voor deze versie meldt de taalondersteuning

Controle

  • Bouwen met build.ps1, daarna elke taal instellen en alle vensters doorlopen op ontbrekende sleutels (die zijn zichtbaar als lege tekst) en op afgekapte lange teksten (vooral Duits, Frans, Spaans, Italiaans en Portugees) in vaste breedtes (bijvoorbeeld Width="150" in de instellingen). Waar nodig wordt de breedte aangepast
  • Een klein script in tools/ vergelijkt de sleutels van de zeven taalbestanden met elkaar