Ich habe ein PHP-Backend, mit dem verschiedene Arten von Geräten über eine öffentliche API kommunizieren. Anforderungen enthalten normalerweise eine erforderliche Sprache für die Antwort (z. B. "en" oder "fr" oder "ru" usw.) - jedoch nicht das vollständige Gebietsschema. Dies hat für alles, was ich in den letzten Jahren brauchte, gut funktioniert. Aber jetzt muss ich Datumsinformationen in die Antwort aufnehmen - und brauche ein Gebietsschema, um Datumsangaben zu formatieren.
Wie kann ich ein Gebietsschema von der Sprache bekommen? Ich verstehe, dass eine Sprache nicht ausreicht, um ein Gebietsschema eindeutig zu identifizieren, aber ich brauche zumindest etwas. Wenn ich mindestens ein Gebietsschema erhalten kann, z.B. en_GB für 'en' oder 'ru_RU' für 'ru' usw. - das wäre ausreichend.
Nachdem ich mehr über das Problem und die spezielle Einrichtung, die ich habe, nachgedacht habe, kam ich auf diese Lösung, die zu funktionieren scheint. Beachten Sie, dass ich keine Kontrolle über die Sprachen habe, die ich unterstützen muss: Es gibt Übersetzungsdateien, die an einem vordefinierten Ort abgelegt werden, und Systemeinstellungen, die von jemand anderem installiert wurden. Während der Laufzeit muss ich eine bestimmte Sprache unterstützen, wenn eine entsprechende Übersetzungsdatei existiert und das Systemgebietsschema installiert ist. Das hat mich zu dieser Lösung gebracht:
%Vor%Ich setze standardmäßig auf en_GB, wenn ich ein Gebietsschema nicht auflösen kann, weil ich sicher bin, dass en_GB installiert ist (wir befinden uns in Großbritannien wie unsere Server).
Vielleicht könnten Sie $_SERVER['HTTP_ACCEPT_LANGUAGE'];
anstelle der angegebenen Sprache verwenden, um das Gebietsschema zu erhalten. Häufig enthält dies das tatsächliche Gebietsschema mit einem Bindestrich anstelle eines Unterstrichs.
Beispiel $_SERVER['HTTP_ACCEPT_LANGUAGE']
:
en-ca,en;q=0.8,fr-ca;q=0.5,fr;q=0.3
Bekommen Sie einfach alles vor dem ersten ,
und Sie sind fertig. Dies ist auch besser als ein Array von Locales zu füllen, da es dem Server mitteilen kann, welche Sprache es bevorzugt, nicht umgekehrt, aber ein Array wie in hakres Antwort sollte als Backup-System verwendet werden, falls ein ungültiger / leerer / fehlende $_SERVER['HTTP_ACCEPT_LANGUAGE']
wird bereitgestellt.
Noch etwas, das Sie sich näher ansehen möchten, sind die Sprachumgebung und vielleicht die locale::acceptFromHttp Methode
Außerdem sollten Sie vielleicht in Betracht ziehen, Ihre API so zu modifizieren, dass Benutzer ihr Gebietsschema explizit festlegen können, indem Sie einfach sicherstellen, dass sie auf das System zurückgreift, das Sie jetzt implementieren möchten.
Verstehe ich Sie richtig, dass Sie nur eine Karte von Sprache (wie en
) zu Gebietsschema (wie en_GB
) benötigen? Wenn ja, können Sie eines für die von Ihnen verwendeten Sprachen erstellen:
Aber das ist so trivial, dass ich nicht sicher bin, ob ich Ihre Frage richtig verstanden habe.
Wenn Sie nicht sicher sind, was das Gebietsschema für eine Sprache ist, nehmen Sie einfach die Sprache selbst, die ein gültiges Gebietsschema sein sollte, nur ohne ein Land:
l = & gt; l l
Solange die Sprache im Zwei-Buchstaben-Format ist, sieht es für mich gut aus (ISO-Norm 639, "Code für die Darstellung von Namen von Sprachen"), Siehe auch Tags für die Identifizierung von Sprachen (RFC 1766) .
%Vor%Dies kann jedoch davon abhängen, welches Gebietsschemaformat die von Ihnen verwendete Funktion erwartet.
%Vor%