Überwachte maschinelle Übersetzung
Dieser Inhalt wurde maschinell übersetzt und basiert auf von Menschen kuratierten Glossaren und Styleguides. Da der Text nicht zeilenweise manuell überprüft wird, können gelegentlich Fehler oder unklare Formulierungen auftreten.
Bei etwaigen Abweichungen ist die ursprüngliche englische Version die maßgebliche Quelle.
Internationalisierung & Zeitzonen
Mit starlette-admin können Sie UI-Zeichenketten pro Benutzer lokalisieren und angezeigte Datums- und Zeitwerte in die lokale Zeitzone des Betrachters konvertieren – unabhängig davon, wie Ihre Datenbank sie speichert.
Vollständiges Beispiel: Eine vollständige, lauffähige Anwendung, die Internationalisierung und Zeitzonen demonstriert, finden Sie unter examples/10-i18n-timezone im GitHub-Repository.
Installation des i18n-Extras
Die Unterstützung für Übersetzungen erfordert Babel. Ohne Babel funktioniert der Admin weiterhin, fällt jedoch auf Englisch zurück und überspringt die locale-bewusste Formatierung von Datum und Zahlen.
Festlegen der Locale
from sqlalchemy import create_engine
from starlette_admin import I18nConfig
from starlette_admin.contrib.sqla import Admin
from starlette_admin.i18n import SUPPORTED_LOCALES
engine = create_engine("sqlite:///admin.sqlite")
admin = Admin(
engine,
title="My Admin",
i18n_config=I18nConfig(
default_locale="en",
language_switcher=SUPPORTED_LOCALES,
),
secret_key="a-long-random-string",
)
i18n_config ist standardmäßig None, wodurch der Admin auf Englisch läuft. Wenn Sie ein I18nConfig übergeben, installiert der Admin die LocaleMiddleware. Die Middleware ermittelt bei jeder Anfrage eine Locale und stellt sie den Templates sowie den Übersetzungsfunktionen (gettext und lazy_gettext) in Ihrem gesamten Feld- und View-Code zur Verfügung.
Der Parameter language_switcher fügt der Navigationsleiste des Admins ein Dropdown-Menü hinzu, über das Benutzer ihre Locale auswählen können. Lassen Sie ihn auf dem Standardwert None, um den Umschalter auszublenden und sich allein auf default_locale und die Erkennung pro Anfrage zu verlassen.
Referenz zu I18nConfig
| Attribut | Typ | Standardwert | Beschreibung |
|---|---|---|---|
default_locale |
str |
"en" |
Verwendete Locale, wenn weder Cookie noch Header eine unterstützte Locale ergeben. |
language_cookie_name |
str | None |
"language" |
Cookie, das zum Erkennen der Benutzer-Locale gelesen wird. Auf None setzen, um dies zu deaktivieren. |
language_header_name |
str | None |
"Accept-Language" |
Header, der gelesen wird, wenn kein Cookie vorhanden ist. Auf None setzen, um dies zu deaktivieren. |
language_switcher |
list[str] | None |
None |
Locales, die im Umschalter der Navigationsleiste angeboten werden. None blendet den Umschalter aus. |
Wie die Locale ermittelt wird
LocaleMiddleware ermittelt die Locale einmal pro Anfrage, in dieser Reihenfolge:
- Cookie: Der Wert von
language_cookie_name, sofern er einer integrierten unterstützten Locale entspricht. - Header: Der
Accept-Language-Header bzw. der Header, den Sie inlanguage_header_namefestgelegt haben, derselben Gültigkeitsprüfung unterworfen. - Standard: Die
default_locale, wenn weder Cookie noch Header übereinstimmen.
Die integrierten unterstützten Locales (starlette_admin.i18n.SUPPORTED_LOCALES) sind Deutsch, Englisch, Französisch, Portugiesisch, Russisch, Türkisch sowie Chinesisch (vereinfacht und traditionell). Wählt ein Benutzer eine Sprache in der Navigationsleiste aus, schreibt der Umschalter das Sprach-Cookie, sodass die Auswahl über mehrere Anfragen hinweg erhalten bleibt, ohne dass serverseitige Sessionspeicherung erforderlich ist.
Zeitzonen
from sqlalchemy import create_engine
from starlette_admin import TimezoneConfig
from starlette_admin.contrib.sqla import Admin
engine = create_engine("sqlite:///admin.sqlite")
admin = Admin(
engine,
title="My Admin",
timezone_config=TimezoneConfig(
default_timezone="UTC",
database_timezone="UTC",
timezone_switcher=["UTC", "Europe/Paris", "America/New_York", "Asia/Tokyo"],
),
secret_key="a-long-random-string",
)
Note
Anders als i18n_config ist timezone_config nicht standardmäßig None. Lassen Sie es weg, konstruiert die Admin-Klasse automatisch ein TimezoneConfig() für Sie, sodass die Zeitzonenkonvertierung ab Werk aktiv ist. Der Admin interpretiert naive Datums- und Zeitwerte als Werte in der database_timezone, die standardmäßig "UTC" beträgt, und zeigt sie jedem Benutzer in "UTC" an – dem Standardwert von default_timezone – sofern der Benutzer keine andere Zeitzone auswählt.
Wie die Zeitzone ermittelt wird
TimezoneMiddleware ermittelt die Zeitzone einmal pro Anfrage:
- Cookie: Der Wert von
timezone_cookie_name, der standardmäßig"timezone"lautet, sofern vorhanden. - Standard: Andernfalls die
default_timezone.
Der Zeitzonen-Umschalter in der Navigationsleiste schreibt dieses Cookie, genau wie der Sprachumschalter. Für Zeitzonen gibt es kein Äquivalent zum Accept-Language-Header, da Browser einen solchen nicht senden; die Erkennung stützt sich daher vollständig auf Cookies. Client-seitiges JavaScript, das Intl.DateTimeFormat().resolvedOptions().timeZone ausliest, setzt dieses Cookie typischerweise, ebenso wie der Umschalter selbst.
Wie Feldwerte konvertiert werden
DateTimeField und ArrowField konvertieren Werte zwischen der database_timezone und der ermittelten Zeitzone des Betrachters.
- Lesen (Liste, Detailansicht, Export): Der Admin interpretiert einen naiven Wert aus Ihrer Datenbank als Wert in der
database_timezoneund konvertiert ihn in die Zeitzone des Betrachters, bevor er ihn formatiert. - Schreiben (Erstellungs- und Bearbeitungsformulare): Der Admin interpretiert einen übermittelten Wert als Wert in der Zeitzone des Betrachters und konvertiert ihn in die
database_timezone, bevor er Ihr Modell erreicht.
Auf diese Weise können zwei Administratoren in verschiedenen Zeitzonen dieselbe Zeile bearbeiten, wobei jeder die Zeiten in seiner eigenen Ortszeit sieht, während die Datenbank eine einzige, konsistente Zeitzone beibehält.
Referenz zu TimezoneConfig
| Attribut | Typ | Standardwert | Beschreibung |
|---|---|---|---|
default_timezone |
str |
"UTC" |
Verwendete Zeitzone, wenn kein Cookie gesetzt ist. Akzeptiert jeden IANA-Zeitzonennamen. |
timezone_cookie_name |
str | None |
"timezone" |
Cookie, das zum Erkennen der Zeitzone des Betrachters gelesen wird. Auf None setzen, um dies zu deaktivieren. |
database_timezone |
str |
"UTC" |
Zeitzone, in der Ihre gespeicherten Datums- und Zeitwerte angenommen werden. |
timezone_switcher |
list[str] | None |
None |
Zeitzonen, die im Umschalter der Navigationsleiste angeboten werden. None blendet den Umschalter aus. |
use_user_locale_timezone |
bool |
True |
Bevorzugt eine aus der Benutzer-Locale abgeleitete Zeitzone gegenüber der default_timezone. |
Um die Auswahlmöglichkeiten für Benutzer einzuschränken, übergeben Sie eine kürzere Liste an timezone_switcher. Um eine einzige Zeitzone für alle Betrachter durchzusetzen, setzen Sie timezone_switcher auf None und legen default_timezone direkt fest, beispielsweise auf eine unternehmensweite "Europe/Paris".
Der Umschalter in der Navigationsleiste rendert den Anzeigenamen jeder Zeitzone sowie deren UTC-Versatz mithilfe der Template-Globals get_timezone und get_timezone_display_name. Diese Globals sowie alle weiteren dokumentiert der Leitfaden Templates.
Weiterführende Themen: