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. |
|
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}voorstring.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, zetCultureInfo(datums, getallen) en hetLanguage-attribuut van open vensters, en roept daarnaChangedaanT(string key)enT(string key, params object[] args)voor C#-code- Bij
Systemde 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 }, metpublic 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.Applybij het opstarten in src/Kniip/App.xaml.cs, vóórThemeManager.Applyen 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 inSettingsWindow.xaml.csenScreencastWindow.xaml.cs) krijgenSetResourceReferenceof verversen bijLanguageManager.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]komendutch,english(Default.isl),german,french,spanish,italianenbrazilianportuguese(BrazilianPortuguese.isl), metShowLanguageDialog=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 blijftSystemde standaard
8. Documentatie:
README.mdwordt Engels (internationaal standaard) met taallinks bovenaan; daarnaastREADME.nl.md(huidige tekst),README.de.md,README.fr.md,README.es.md,README.it.mdenREADME.pt.mdCHANGELOG.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 (bijvoorbeeldWidth="150"in de instellingen). Waar nodig wordt de breedte aangepast - Een klein script in
tools/vergelijkt de sleutels van de zeven taalbestanden met elkaar