Das Ziel ist es, eine Schaltfläche / Auswahl-Dropdown-Liste oder Ähnliches anzubieten, um die Sprache der öffentlichen Benutzeroberfläche 1) im laufenden Betrieb umzuschalten .
Wonach ich suche
- Plugin oder Theme Code ...
- ... oder Ideen
- Verwenden eines Workarounds mit
load_textdomain()
Umgehungslösung mit verwenden, wird empfohlen, die Übersetzung in PO / MO-Dateien zu hinterlassen - Ideen zum Parsen der Zeichenfolgen in die Benutzeroberfläche (z. B. Ajax- / Plain-PHP- / INI-, JSON-, XML-Dateien), wenn Sie sich nicht auf eine Textdomain-Funktion verlassen
Hinweis:
1) Es geht nicht darum, in verschiedenen Sprachen zu veröffentlichen.
2) Ich benötige keinen Code, um das eigentliche Dropdown / den eigentlichen Button / was auch immer zu erstellen. Es geht nur darum, dass der Code / das System die Zeichenfolgen für die Benutzeroberfläche bereitstellt.
Vielen Dank!
multi-language
translation
language
Kaiser
quelle
quelle
WPLANG
Konstante eine Option sein. Ich mache das auf zwei Websites mit mehrsprachigem Inhalt, bei denen das Mehrsprachigkeits-Plugin keine UI-Übersetzung auslöst. Wenn es eine AJAX / JSON-Lösung sein muss, würde ich nicht wissen, wie ich helfen kann.Antworten:
Mit Abstand der beste (einfachste) Weg ist die Verwendung des Gebietsschemafilters (innen)
get_locale()
).Richten Sie zunächst eine Schnellfunktion zum Abrufen einer anderen Sprache für den
locale
Filter ein.Ich habe dies als globale Funktion belassen, könnte praktisch sein ...? Den Rest des Plugins habe ich in einer Klasse verpackt.
Es wird ein Dropdown-Menü mit möglichen Sprachen erstellt, aus denen Sie auswählen können.
Nachteile
wp-content/languages
nach Dateien des Formularsxx_xx.mo
. Wenn es nicht von dieser Form ist (nicht alle .mo-Dateien sind es), wird das Plug-in es nicht erkennen!$locale
etwas anderes als Sprache? In diesem Fall ist es immer noch möglich, dasselbe Gebietsschema zu erhalten, aber alternative Übersetzungen bereitzustellen. Es ist allerdings viel unordentlicher ...Der Code
quelle
'wp-admin/includes/ms.php'
eine Administratorbenachrichtigung zum Aktualisieren Ihrer Netzwerksites auslöst (wenn Sie eine einzelne Site sind!). Möglicherweiseformat_code_lang()
muss dies in einer benutzerdefinierten Funktion dupliziert werden.Wenn Sie sich mit einer Seitenaktualisierung zufrieden geben können, kann eine Neudefinition der
WPLANG
Konstante eine Option sein. Ich mache das auf zwei Websites mit mehrsprachigem Inhalt, bei denen das Mehrsprachigkeits-Plugin keine UI-Übersetzung auslöst.quelle
http://example.com/language/whatever/
richtig?$_SESSION
VariableWPLANG
festlegen , die die Neudefinition beim nächsten Laden auslöst. Wenn Sie dies auf einer mehrsprachigen Site replizieren möchten, beachten Sie, dass der darin enthaltene Code, wie im Kommentar zum Pastebin angegeben, mit WPML (letzte kostenlose Version) funktioniert. Sie kann mit qTranslate nicht 1 zu 1 repliziert werden, da diese URIs nicht physisch sind, sondern über dasmod_rewrite
Apache-Modul neu geschrieben werden. Ich bin sicher, dass es angepasst werden kann, aber nicht so funktioniert, wie es ist.$_SESSION
) Mein Problem ist, dass sie ziemlich schwierig zu handhaben sind und Dinge zwischen Globals und dem Array leicht verwechselt werden können. Wenn ich also versuchen möchte, einen Weg zur Veränderung zu findenWPLANG
, muss ich einen soliden Weg finden, um ihn von einer Anfrage zur nächsten zu geben. Vielleichtadd_query_arg/get_query_var
wird der Trick ...http://www.qianqin.de/qtranslate/
ist was du brauchst ...
Bearbeite ich - nach Kommentar. Erstens - danke für alle, die zum Downvotes-Strom beigetragen haben. (das ist was passiert wenn man nicht oft genug besucht: -))
now - Die Funktion, die den Schalter handhabt, befindet sich in qtranslate-core. (Beginnt mehr oder weniger in Zeile 80 - hängt von der gewünschten Version ab.)
Da Sie sich keinen NOT OOP-Code ansehen können und ich jetzt nichts anderes zu tun habe, habe ich 10 Minuten gebraucht, um diesen Non-OOP-Code mit einem weiteren Non-OOP-Code zu paraphrasieren.
(Entschuldigung - primitive alte Schule hier)
Angenommen, ich habe die Frage verstanden && Angenommen, Sie möchten, dass der Code für den Administrator bestimmt ist && Angenommen, Sie wissen, wie er auf das Front-End portiert wird, wenn Sie möchten && Angenommen, Sie verstehen, dass der Code nicht optimal ist:
BEMERKUNGEN :
1 - Dies wurde in 10 min gebaut. auf der lokalen Maschine am Flughafen. Der Grund, warum ich das sage, ist, dass die einzige fertige WordPress-Installation, die ich hier habe, ziemlich alt ist. (2,9 denke ich).
Dies bedeutet, dass wahrscheinlich das Sprachmenü UNTER der kontextbezogenen Hilfediv angezeigt wird, da kürzlich eine neue Div-Struktur (mit Registerkarten) eingeführt wurde - sie sollte aber dennoch funktionieren. (Ich verspreche, später darauf zurückzukommen, wenn ich Zeit habe.)
Wenn ich mehr Zeit hätte (und einen neuen WordPress-Code hier), würde ich dies wahrscheinlich in die neue Admin-Leiste mit integrieren
add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(ich habe bereits versprochen, darauf zurückzukommen).2 - Sie sollten die aufgelisteten Sprachdateien im Ordner "languages" in wp-content (besser ??) oder wp-include haben. in diesem Punkt - der Code ist nur ein Proof-of-Concept - und wenn man mehr Zeit hat, sollte das Menü natürlich dynamisch aufgebaut sein und nicht wie hier gemacht.
3 - Ihr WPLANG in der Konfiguration sollte leer sein. Ich bin nicht sicher, ob es auf neueren WP-Versionen funktioniert, wenn bereits eine Sprache eingestellt ist.
4 - Es handelt sich um einen einfachen synthetisierten und umschriebenen Proof of Concept, der auf dem basiert, was im qtranslate-Code (auch in der alten Version) zu sehen war. Die meisten Dinge werden also "schnell" und nicht unbedingt "richtig" ausgeführt (wie das Hinzufügen von JS) , keine dedizierte Textdomain etc ..).
EDIT II
Jemand hat heute Glück! (Flugverspätung )
Da Sie nach "Ideen" für Ansätze gesucht haben, ist hier eine andere berühmte.
Es passt nicht in ein Plugin oder eine andere nicht-exklusive Umgebung, aber es kann Ihnen eine andere Richtung geben, wie Sie mit dem "Browser-Zeug" umgehen sollen.
Dies ermöglicht es einem, die Sprache mit einem GET wie:
<a href="index.php?lang=de">German</a>
oder zu erhalten<a href="whatever.php?lang=ml">my Language</a>
Zur Verwendung können Sie einen Code erstellen (nennen wir ihn wp-langswitch.php)
Jetzt müssen wir in wp-config kurz vor der WPLANG-Konstante unseren Code einfügen.
Jetzt - natürlich ist es besser, der Mischung einige Cookies hinzuzufügen, um die Sprachen zu speichern.
EDIT III
Ich habe versprochen, später darauf zurückzukommen - hier ist, wie es (auf eine sehr unkorrekte und primitive Weise) in die Admin-Leiste integriert werden kann (anstelle des Kontext-Hilfemenüs)
Ersetzen Sie einfach diese Funktion (oder fügen Sie sie dem alten Code hinzu) (das ursprüngliche NICHT-OOP-Nicht-Plugin).
Wie gesagt, ich habe hier auf local keine neue WordPress-Installation mit Admin-Leiste - aber es sollte funktionieren.
(und dann könnte es auch nicht funktionieren ... aber ich bin sicher, dass Sie das beheben können, wenn Sie es wirklich wollen - auch wenn Sie dachten, dass es kein OOP ist) :-)
muss jetzt rennen hoffe es hilft irgendwie.
EDIT IV - Edit III wurde in die Arbeitsversion für die Admin-Menüleiste geändert (zumindest auf meinem WP 3.4)
da ich keine funktionierende Installation von 3.4 hatte - und jetzt zurückkehre und ich tue - habe ich die Edit III-Lösung bearbeitet - und es funktioniert für mich.
Über die Upvotes konnte ich mich nicht weniger Gedanken machen. Und ich brauche keine "Kopfgelder" (was auch immer das sein mag ...). Es war nur zum Zweck der Übung, die Sie vielleicht dem Autor von qTranslate geben sollten. :-) trotz der Tatsache, dass es nicht OOP ist - es ist ein geniales Plugin, von dem man in vielen Bereichen viel lernen kann. Wenn man bedenkt, wann dieses Plugin veröffentlicht wurde, ist es sogar erstaunlich. die unbeschreibliche Mühe wert, einen NON OOP-Code zu lesen - auch wenn es nicht so ist - OOP. Und selbst wenn es nicht richtig eingerückt ist (guter Gott!).
quelle
require()
. Sie können nichtdefine()
zweimal dieselbe Zeichenfolge verwenden. Edit III hat einige Probleme mit den Sprachen. Die Auswahlen_US
würde nichts bewirken (?), Aberde_DE
aufEnglish
;) setzen. Um es zusammenzufassen: Ich vergebe Kopfgelder und verteile sie an (zum Beispiel StephenHarris) für eine vollständige und funktionierende Antwort. Wenn Sie so etwas haben, aktualisieren Sie bitte Ihre Antwort (Cookie-Ansatz interessant) und ich kann hinzufügen und belohnen Sie ein Kopfgeld.