PHP – Holen Sie sich das aktuelle Gebietsschema

Lesezeit: 3 Minuten

Ich stelle das Gebietsschema der Website mit dieser Funktion ein:

function set_locale($locale) { // ie. en, es

    $language = $locale;
    putenv("LANG=".$language); 
    setlocale(LC_ALL, $language);
    $domain = "phd";
    bindtextdomain($domain, "locale"); 
    bind_textdomain_codeset($domain, 'UTF-8');

    textdomain($domain);

} // end set_locale

Wenn jemand die Website besucht, hat er die Möglichkeit, sein Gebietsschema zu ändern. Was ich versuche zu tun, ist irgendwo anders auf der Site abzurufen, was das aktuelle Gebietsschema ist.

Wie würde ich das tun?

  • in einer Sitzung speichern?

    Benutzer557846

    29. April 2015 um 1:32 Uhr

  • Ich weiß nicht, warum du putenv verwendest, aber um es abzurufen, verwende einfach getenv()

    – Sonnenscheinjr

    29. April 2015 um 1:34 Uhr

  • Welchen Umfang hat diese Konfiguration? Erlauben Sie ihnen, es für die Dauer der Verbindung einzustellen? Suchen Sie ein festes Set? Oder versuchen Sie, ihr Gebietsschema dynamisch zu bestimmen?

    – jhansen

    29. April 2015 um 1:34 Uhr

  • Sie klicken auf einen Link mit einer GET-Variablen wie ?do=locale&lang=en und jede Seite sucht nach diesen GET-Variablen und durchläuft diese Funktion, wenn sie gesetzt ist.

    – MultiDev

    29. April 2015 um 1:36 Uhr

  • Versuchen Sie, einen Blick auf stackoverflow.com/questions/2316476/…

    – SameOldNick

    29. April 2015 um 2:00 Uhr

Benutzeravatar von Jerry Saravia
Jerry Saravia

Sie können setlocale so aufrufen, und es wird das aktuelle Local zurückgeben.

$currentLocale = setlocale(LC_ALL, 0);
echo $currentLocale; //outputs C/en_US.UTF-8/C/C/C/C on my machine

Hier ist die Dokumentation von php.net, kommentiert von @JROB

Gebietsschema

Wenn Gebietsschema “0” ist, wird die Gebietsschemaeinstellung nicht beeinflusst, es wird nur die aktuelle Einstellung zurückgegeben.

Wenn locale NULL oder die leere Zeichenfolge “” ist, werden die Locale-Namen aus den Werten von Umgebungsvariablen mit den gleichen Namen wie die obigen Kategorien oder aus “LANG” festgelegt.

Wenn das Gebietsschema ein Array ist oder von zusätzlichen Parametern gefolgt wird, wird versucht, jedes Array-Element oder jeden Parameter als neues Gebietsschema festzulegen, bis es erfolgreich ist. Dies ist nützlich, wenn ein Gebietsschema auf verschiedenen Systemen unter verschiedenen Namen bekannt ist oder um ein Fallback für ein möglicherweise nicht verfügbares Gebietsschema bereitzustellen.

  • Zur Verdeutlichung habe ich dies von php.net gepostet: setlocale (int $category, string $locale). Wenn Gebietsschema “0” ist, wird die Gebietsschemaeinstellung nicht beeinflusst, es wird nur die aktuelle Einstellung zurückgegeben.

    – Benutzerland

    7. September 2016 um 4:35 Uhr


  • Siehe auch localeconv um numerische Formate zu erhalten.

    – Peter Krauß

    25. Oktober 2016 um 13:26 Uhr

  • Update für PHP 8.0+. ich benutze setlocale(LC_ALL, 'en_US'); aber setlocale(LC_ALL, 0); einfach zurück C.

    – v

    8. Dezember 2021 um 11:09 Uhr


  • Entschuldigung, ich habe den Fehler jetzt gefunden. (stackoverflow.com/a/70312801/128761)

    – v

    11. Dezember 2021 um 5:25 Uhr

Benutzeravatar von Handsome Nerd
Hübscher Nerd

Eine weitere Antwort nach zwei Jahren!

Sie können einfach Benutzer Locale::getDefault() oder locale_get_default() um das aktuelle Gebietsschema zu erhalten.

http://php.net/manual/en/locale.getdefault.php

Intl Locale class ist die moderne Alternative für alte Funktionen. Sobald Sie damit begonnen haben, müssen Sie die Funktion local by php.net/manual/en/locale.setdefault.php aktualisieren

  • Nein tut es nicht. Es bekommt die Ursprünglich Gebietsschema, nicht das aktuell Gebietsschema. Das Standardgebietsschema ist per Definition nicht dasselbe wie das aktuelle Gebietsschema. Wenn Sie zwischen Gebietsschemas wechseln, ist setlocale(LC_WHATEVER, 0) immer noch die Möglichkeit, das aktuelle Gebietsschema abzurufen.

    – Friek

    31. Mai 2018 um 12:30 Uhr

  • Du beziehst dich wieder auf die Ursprünglich Gebietsschema, das, wie ich bereits sagte, per Definition nicht dasselbe ist wie das aktuell Gebietsschema.

    – Friek

    7. Juni 2018 um 12:20 Uhr

  • Code zum Generieren von Dokumenten mit unterschiedlichen Gebietsschemata, beispielsweise unter Verwendung von strftime. Es ist nicht möglich, ein Gebietsschema an strftime zu übergeben, daher muss das Gebietsschema vorübergehend geändert werden. Ich weiß, dass das intl-Modul für die Formatierung von Datum/Uhrzeit verwendet werden könnte, aber es gibt immer noch viele Funktionen in PHP, die sich auf das aktuelle Gebietsschema verlassen. Sogar die Konvertierung von einem Float in einen String verwendet das aktuelle Gebietsschema. Daher ist das Standardgebietsschema nicht immer hilfreich, wenn Sie i18n-Zeug machen und zwischen verschiedenen Gebietsschemas wechseln müssen.

    – Friek

    7. Juni 2018 um 16:15 Uhr

  • Dies funktioniert auch nicht auf allen Maschinen. Ich habe den Fehler „Uncaught Error: Call to undefined function locale_get_default“ erhalten.

    – v

    28. Oktober 2019 um 12:58 Uhr

  • @vee, Sie müssen zuerst die Intl-Erweiterung installieren

    – Hübscher Nerd

    29. Oktober 2019 um 3:15 Uhr

1404510cookie-checkPHP – Holen Sie sich das aktuelle Gebietsschema

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy