Lokalisierung

Prof. Dr. Robin Nunkesser

Agentisches Beispiel: Localization

Verwendete Instructions

  • .github/copilot-instructions.md
  • .github/instructions/artifacts.instructions.md
  • .github/instructions/artifacts-consumers-education.instructions.md
  • .github/instructions/slides.instructions.md

Exakter Prompt

Erstelle ein agent-generated example für Localization (MAUI, fortgeschrittene Studierende).
Feature-Scope: minimal. Wende MVVM mit CommunityToolkit.Mvvm und Unit Tests mit MSTest an.
Entscheide anhand der Architektur-Entscheidungstabelle aus den Instructions, welche weiteren Muster (Core-Projekt, Architekturschichten) das Konzept rechtfertigt — verwende sie, wenn dieselbe Komplexität in einem produktiven Einsatz diese Strukturen erfordern würde.
Lies zuerst die Instructions, ermittle den Foliensatz, dokumentiere Instructions + Prompt dort, vergleiche mit manuellem Beispiel, verifiziere MacCatalyst Build mit workaround zum mismatch des workloads mit der xcode version.

Architekturentscheidung (gemäß Tabelle)

Aspekt Entscheidung Begründung
Feature-Scope Minimal (Sprache wechseln, Strings anzeigen) Fokus auf Struktur statt Feature-Breite
MVVM Ja Observable Properties, Datenbindung, Commands
Unit Tests Ja (MSTest) Sprachwechsel-Logik und Lifecycle direkt testbar
Core-Projekt + Interfaces Nein Kein Domänen- oder Persistenzbedarf
Architekturschichten Nein Lokalisierungsservice ist einfaches Utility

Ergebnis (agent-generated)

  • LocalizationRecipe.ViewModels mit ILocalizationService und DefaultLocalizationService (en/de/es, In-Memory)
  • MainPageViewModel mit [ObservableProperty] für Sprache, Strings, Counter, Lifecycle
  • [RelayCommand] SwitchLanguageAsync(languageCode) für Sprachwechsel-Buttons
  • LocalizationRecipe.Tests mit 3 MSTest-Fällen
  • MacCatalyst-Workaround gesetzt: ValidateXcodeVersion=false, SupportedOSPlatformVersion=15.0

Vergleich: manuell vs. agent-generated

Kriterium Manuelles Beispiel Agent-generated Beispiel
Sprachverwaltung Statische XAML-Ressourcen Injizierter ILocalizationService
Sprachwechsel Kein Command [RelayCommand] SwitchLanguageAsync
UI-Bindung keine / direkte Manipulation Bindings auf ViewModel-Zustände
MVVM-Struktur rudimentär klar getrennt (Service + ViewModel + View)
Unit Tests keine 3 MSTest-Fälle
Lifecycle-Rückmeldung keine sichtbar via LifecycleState
Architekturschichten nein nein (bewusst, gemäß Tabelle)

Fazit: Das agent-generated Beispiel macht Lokalisierung, MVVM und Testbarkeit gemeinsam sichtbar — didaktisch klarer als eine rein ressourcen-basierte Lösung.

Live-Coding

Repository

Verifikation

  • Tests: dotnet test LocalizationRecipe.Tests/LocalizationRecipe.Tests.csproj → 3/3 erfolgreich
  • MacCatalyst-Build: dotnet build LocalizationRecipe/LocalizationRecipe.csproj -f net10.0-maccatalyst → erfolgreich