In Lektion 2.5.12 haben Sie die Buchungsseite zweisprachig gemacht: Texte in .resx-Dateien, IStringLocalizer<T>, die Sprache aus der
Adresse, ein Umschalter. Der siebte Meilenstein zieht das durch die ganze öffentliche Kladde. Jede Seite, die ein Besucher ohne Anmeldung
sieht, gibt es danach auf Deutsch und auf Englisch, und die Mails einer Buchung kommen in der Sprache, in der gebucht wurde.
Das klingt nach Fleißarbeit, und ein Teil ist es auch. Die eigentlichen Fragen liegen woanders: Wer entscheidet, welche Sprache eine Anfrage bekommt? Wie merkt man, dass eine Seite ihre zweite Sprache vergessen hat? Und in welcher Sprache schreibt ein Hintergrunddienst, der gar keine Anfrage hat?
| Pull Request | Branch | Bringt | Wo in dieser Lektion |
|---|---|---|---|
| 1 | feature/m7-language-from-address |
die Adresse entscheidet über die Sprache, <html lang> folgt ihr |
„Pull Request 1“ |
| 2 | feature/m7-public-layout |
hreflang und Sprachumschalter im öffentlichen Layout |
„Pull Request 2“ |
| 3 | feature/m7-all-public-pages |
alle öffentlichen Seiten unter beiden Adressen, der Test über alle Seiten | „Pull Request 3“ und Übung 1 |
| 4 | feature/m7-mail-language |
die Buchung merkt sich ihre Sprache, Mails und ihre Links folgen ihr | Übung 2 |
Wo die Kladde steht
Nach Modul 2.5 und Meilenstein 6 gilt in den Lösungen:
- Seit Lektion 2.5.12 entscheidet die Adresse über die Sprache:
PathCultureProvidermacht/en/…englisch und alles andere deutsch;?culture=undAccept-Languagefragt die Kladde nicht. Für interaktive Inseln setzt sie zusätzlich das Kultur-Cookie, und<html lang>folgt der Kultur. - Die Texte stehen in
.resx-Dateien neben ihren Komponenten (Home,BookAppointment,MainLayout,SkipLink, je Deutsch und Englisch), die Meldungen der Buchung inBookingTexts.resx.ResourceTestsprüft, dass jede Datei einen englischen Zwilling mit denselben Namen hat. Languagesbaut Links in der Sprache der Seite (Languages.Link,GermanOf,EnglishOf), undLanguageLinksim öffentlichen LayoutMainLayoutaus Lektion 2.5.3 schreibthreflangund den Umschalter. Das interne Layout bleibt Deutsch.- Zweisprachig sind die Startseite und die Buchungsseite unter
/terminund/en/termin. Die Seiten aus den Meilensteinen 3 und 4 sind nur Deutsch: „Fast geschafft“ unter/termin/danke, Bestätigen, Absagen, dazu „nicht gefunden“ und die Seite der Ratenbegrenzung. Die Mails schreibtBookingMailsauf Deutsch.
Die Beispiele dieser Lektion bauen die Pull Requests 1 und 2 von Grund auf und mit anderen Namen: eine gemeinsame Ressourcendatei
Resources/Texts.resx für IStringLocalizer<Texts>, KladdeLanguages für den Anbieter, LanguagePaths statt Languages und ein
öffentliches Layout mit dem Umschalter. Mit der Lösung von Lektion 2.5.12 haben Sie das meiste davon schon. Lesen Sie die beiden Abschnitte
dann als Prüfliste, übernehmen Sie nur, was Ihrer Kladde fehlt, etwa UseRequestLocalization vor der Ratenbegrenzung, und setzen Sie in
den Beispielen Languages.Link für LanguagePaths.Current, die .resx-Dateien neben der Seite für Texts.resx und MainLayout für das
öffentliche Layout. Die eigentliche Arbeit dieses Meilensteins steckt in den Pull Requests 3 und 4. Heißen Ihre Dateien, Klassen oder
Ordner anders, behalten Sie Ihre Namen und übertragen Sie die Schritte.