So erhalten Sie den Kalendertyp nach Gebietsschema-Zeichenfolge

9

Wie Sie wissen, unterstützt ICU die folgenden Kalender:

%Vor%

Allerdings konvertiert IntlDateFormatter nur das gregorianische Format von date in ein Gebietsschema und konvertiert den Kalender nicht automatisch, dennoch ist es möglich, den Kalender zu senden und es wird den Trick machen. Das Problem ist, dass ich das Kalendersystem für jedes Gebietsschema manuell herausfinden muss.

So erhalten Sie den Kalendertyp aus der Gebietsschema-Zeichenfolge. zum Beispiel sending fa_IR Ich brauche 'persian', also sende es an IntleDateFormatter, um eine Datenzeichenfolge für dieses Gebietsschema zu generieren.

    
PHPst 22.10.2017, 04:15
quelle

1 Antwort

3

Kurz gesagt; du kannst nicht. Warum?

Sehen wir uns an, was beide Objekte sind: IntlDateFormatter ist Teil der Internationalisierungserweiterung, die zur Ausführung verschiedener standortbezogener Operationen erstellt wurde. Zu diesen Operationen gehören Datumsformatierer und ein länderbezogener Kalender.

Locale class ist ein Bezeichner, der verwendet wird, um sprachliches, kulturelles oder regionalspezifisches Verhalten zu erhalten.

Obwohl sie Teil derselben Erweiterung sind, sind sie wie beschrieben orthogonal. hier . Das bedeutet, dass Sie nicht voneinander unterscheiden können. Diese Aussage wird in der Bedienungsanleitung des ICU-Projekts weiter bestätigt.

  

... Gegenwärtig verwenden alle Ländereinstellungen standardmäßig einen Gregorianischen Kalender, mit Ausnahme der Kompatibilitätslocales th_TH_TRADITIONAL und ja_JP_TRADITIONAL. Wenn das Schlüsselwort "calendar" angegeben wird, überschreibt dieser Wert den Standardwert für dieses Gebietsschema.

Quelle: Benutzerhandbuch ICU-Projekt

Da im Zitat angegeben wird, dass für jedes Gebietsschema standardmäßig der Gregorianische Kalender verwendet wird, es sei denn wird das Schlüsselwort "calendar" bereitgestellt. Sie können den Kalender nicht von dem automatisch bereitgestellten Gebietsschema ableiten.

Die Lösung für Ihr Problem wird höchstwahrscheinlich beim Erstellen eines Wrappers gefunden. Es gibt einige Pakete im Internet, die Ihnen dabei helfen, aber es ist bei weitem nicht das, was Sie genau wollen. Wenn Sie das Datum speichern möchten, speichern Sie es als Zeitstempel und zeigen Sie es in dem vom Benutzer gewünschten Format an. Letzteres ist der Fall, wenn Sie die Freiheit haben, einige Kontoeinstellungen oder Ähnliches zu implementieren.

Ein Modul, bei dem ich auf meiner Suche nach der Antwort Inspiration fand, ist GlobalizeJS . Es gibt ein offenes offenes Problem , das ein interessantes Bild davon zeichnet, wie schwierig es ist, richtig zu kommen. Nehmen Sie zum Beispiel die Vereinigten Arabischen Emirate (AE), sie haben fünf Kalenderpräferenzen; Gregorianisch, Islamisch Um al-Qura, Islamisch, Islamisch Civil und Islamisch Tabellarisch. Ich würde den Benutzer bestimmen lassen, welchen Kalender er bevorzugt, damit er für sie am nützlichsten ist.

Viel Glück!

    
Sketchy Coder 08.11.2017 09:57
quelle