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
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
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.
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
14045100cookie-checkPHP – Holen Sie sich das aktuelle Gebietsschemayes
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