Gebietsschema zur Laufzeit ändern?

Ich frage mich, gibt es eine Möglichkeit, das Gebietsschema zur Laufzeit mit WordPress zu ändern?

Was ich meine, ist, ich habe eine benutzerdefinierte URL erstellt, um eine XML-Datei mit Daten für die Integration mit einer anderen Webanwendung zu erstellen. Die URL hat auch einen Sprachanteil. Sagen wir, das ist meine URL

http://www.mysite.com/custom/url/en

Der letzte Teil der URL ist die englische Sprache. In diesem Fall mag ich das WordPress um ein englisches XML zu generieren. Aber wie kann ich das WordPress anweisen, das Gebietsschema an diesem Punkt der Ausführung zu ändern?

Beachten Sie, dass ich das Gebietsschema ändern muss, da ich auch Systemvariablen verwende, die übersetzt werden, z. B. __ (), _e () und so weiter.

Solutions Collecting From Web of "Gebietsschema zur Laufzeit ändern?"

Ich versuche, eine ähnliche Sache zu machen, und die Experten auf der Mailingliste wp-hackers (Otto, Nacin) haben mir das gesagt:

Versuchen Sie nicht, WPLANG zu ändern, Sie können eine definierte Konstante nicht ändern. Ändere stattdessen das globale $ Gebietsschema oder setze einen Filter auf ‘locale’.

Die beste Lösung besteht also darin, einen Filter auf die globale Variable ‘locale’ anzuwenden. Der einzige Weg dazu besteht in der Erstellung eines benutzerdefinierten Plugins. Wenn Sie den folgenden Code in Ihre functions.php Datei schreiben, wird er nicht richtig funktionieren, da er in der WP-Ladesequenz zu spät ausgeführt wird.

Ihr Plugin könnte so aussehen (ich benutze nur den URI Test Teil von OneTrickPony, Sie können es durch eine andere bedingte Testmethode ersetzen):

 < ?php /* Plugin Name: Change locale at runtime Plugin URI: http://wordpress.stackexchange.com/questions/49451/change-locale-at-runtime */ function wpsx_redefine_locale($locale) { // run your tests on the URI $lang = explode('/', $_SERVER['REQUEST_URI']); // here change to english if requested if(array_pop($lang) === 'en'){ $locale = 'en_US'; // otherwise stick to your default language }else{ $locale = 'gr_GR'; } return $locale; } add_filter('locale','wpsx_redefine_locale',10); ?> 

Ich hoffe, das kann jedem helfen!

Ein paar weitere Warnungen (zitiert Andrew Nacin), in Bezug auf die Kosten in Bezug auf die performance beim Wechsel des Gebiets:

Es ist möglich, ein Gebietsschema zu “wechseln”, nachdem das Standardgebietsschema geladen wurde, aber ich würde davon abraten, da es ineffizient ist, es sei denn, Ihre Standardsprache ist Englisch, in diesem Fall ist es nicht so schlecht.

Standardmäßige textdomain-Dateien werden nach plugins_loaded und setup_theme geladen, aber bevor das Theme geladen wird und bevor after_setup_theme wird. Das Laden von Englisch und das erneute Laden der Textdomäne auf Deutsch auf dem init Hook wäre in Ordnung, in Bezug auf die performance, da Englisch keine MO-Dateien hat. Aber das Laden von Spanisch als Standard und dann das Umschalten auf Deutsch würde nicht funktionieren.

Nützliche Informationen zur Ladesequenz finden Sie unter http://codex.wordpress.org/Plugin_API/Action_Reference .

Ich weiß nicht, ob es möglich ist, dies in einem Plugin zu tun, wegen der Konstanten, die WP vor einem bestimmten Punkt definiert hat, aber überprüfe die gewünschte Sprache in wp-config.php und definiere die notwendige Konstante:

 // split URI $lang = explode('/', $_SERVER['REQUEST_URI']); // here change to english if requested if(array_pop($lang) === 'en'){ define('WPLANG', 'en_US'); // otherwise stick to your default language }else{ define('WPLANG', 'gr_GR'); }