2012-04-12 9 views
0

Ich schreibe eine Desktop-Anwendung mit MVVM und Prism und ich habe das folgende Problem. Neben den Etiketten usw. müssen auch Daten in verschiedenen Sprachen gespeichert werden.Benutzersitzung mit verschiedenen Sprachen und MVVM

Zum Beispiel könnte sich ein Benutzer in den USA entweder mit Englisch oder Spanisch anmelden (da er ein Muttersprachler ist).

  • Wenn sich der Benutzer anmeldet mit Spanisch, wenn sie eine Produktdetails gehen in die Produktbeschreibung in der Datenbank gegen der spanischen Sprache bilden, werden gespeichert.
  • Wenn sie sich mit Englisch anmelden, wird die Produktbeschreibung in der Datenbank gespeichert und mit der englischen Sprache verknüpft.

Im Moment ist meine einzige Ideen wie folgt: -
- ein global zugänglichen ApplicationViewModel die

Was eine CurrentLoggedInUser Eigenschaft enthält würde ich wissen, wie ich protokolliert die zur Zeit sparend gehen über in Sprache des Benutzers bei der Verwendung von MVVM, insbesondere in einer Desktop-Anwendung?
N. B die gewählte Sprache kann auf die Sprache und das Gebietsschema unterscheiden, die das Betriebssystem

Wie andere Leute gehen diese zu lösen und den „Sitzung“ in verschiedenen Fenstern/Bedienelemente des Benutzers beibehalten in
ist, wenn MVVM mit?

Antwort

1

Alles, was Sie tun müssen, ist die aktuelle Sprache irgendwo zu speichern, vielleicht als LCID.

Im Allgemeinen wird dies verwendet, um eine sprachspezifische Ressourcendatei zu laden, die sich um die meisten sprachabhängigen Situationen kümmert. Controls usw. speichern alle ihre Strings in Ressourcen, so dass sie keinen direkten Zugriff auf die aktuelle Sprache benötigen.

Für Situationen, in denen Sie Zugriff auf die Sprache benötigen, z. B. wissen, wo die Datenbankzeichenfolge gespeichert werden soll, sollte die Sprache entweder statisch/Singleton oder besser in beliebige ViewModels eingefügt werden brauchen.

+0

Eine LCID ist ideal für die Sprache, um lokalisierte Ressourcen anzuzeigen, aber für diese Frage war ich mehr daran interessiert, wie man den Kontext des aktuell angemeldeten Benutzers in das Ansichtsmodell bringt. Würden Sie vorschlagen, dies zu tun, indem Sie etwas wie einen IUserContext in jedes Viewmodel einfügen, das die Spracheigenschaft verwenden muss? Danke Alex – lostinwpf

+0

Das wäre meine bevorzugte Art ja. Wenn das ViewModel die Informationen benötigt, muss es von irgendwoher abgerufen werden. Ja, Sie könnten einen statischen Service haben, wenn Sie denken, dass das Injizieren nicht praktikabel ist, aber das Injizieren ist weit vorzuziehen, um Dinge wie Komponententests zu erlauben. – GazTheDestroyer

+0

Wenn das ViewModel nur die Sprache benötigt, dann injizieren Sie nur die Sprache, um unnötige Kopplung mit Ihrem IUserContext zu vermeiden. Wenn es im Benutzerkontext andere Dinge benötigt, dann injizieren Sie offensichtlich den gesamten Kontext. – GazTheDestroyer

Verwandte Themen