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:
<?php
/*
Plugin Name: k99 language switcher
Plugin URI: http://www.krembo99.com
Description: Admin Language switcher proof of concept only - do not use in production.
Version: 0.0.0.0.0.0.0.1
Author: Krembo99
Author URI: http://www.krembo99.com
*/
?>
<?php function k99_add_language_menu() {
// k99_load_ajax_display_functions();
?>
<div class="mgmb_help_setting">
<?php _e('Language:','your_text_domain'); ?>
<select name="mgmb_language_setting_help" id="mgmb_language_setting_help" onChange="mgmb_set_language_cookies(this.value);" >
<option value="en_US" <?php if($_COOKIE['k99_userLang']=="en_US"){echo "selected";} ?>><?php _e('English','your_text_domain');?></option>
<option value="de_DE" <?php if($_COOKIE['k99_userLang']=="de_DE"){echo "selected";} ?>><?php _e('German','your_text_domain');?></option>
<option value="zh_CN" <?php if($_COOKIE['k99_userLang']=="zh_CN"){echo "selected";} ?>><?php _e('Chinese','your_text_domain');?></option>
</select>
</div>
<?php
}
// Now we set that function up to execute when the help action is called
add_filter('contextual_help', 'k99_add_language_menu');
// I guess this is your mysterious "browser stuff"
function k99_language_change($lang){
global $locale;
// wp_cache_set( "language", $lang, 'options' );
if ( isset($_COOKIE['k99_userLang'])) {
$lang = $_COOKIE['k99_userLang'];
}
define( 'WPLANG', $lang );
if($locale!= $lang) {
$locale = $lang;
load_plugin_textdomain('your_text_domain', false, dirname( plugin_basename(__FILE__) ) . '/lang'); // sample use for plugins textdomain
load_plugin_textdomain('your_text_domain2', false, dirname( plugin_basename(__FILE__) ) . '/lang');
load_plugin_textdomain('your_text_domain3', false, dirname( plugin_basename(__FILE__) ) . '/lang');
}
return $locale;
}
add_filter('locale', 'k99_language_change',99);
////////// +++++++++++++++ START COOKIES CREATION +++++++++++++++//////////////////
// Javascript function set the language cookies
// access external
// @param lang - language code
// @return NULL
// or maybe this is the OP´s mysterious "browser stuff" ??
function mgmb_print_script() {
?>
<script type="text/javascript" >
function mgmb_set_language_cookies(lang){
var Then = new Date();
Then.setTime(Then.getTime() + 10000*60*60*1000 ); //set cookie expire to 10000 hours cookies (hour*minute*seconds*1000)
document.cookie = "k99_userLang="+lang+";expires="+ Then.toGMTString();
window.location.reload();
}
</script>
<?php
}
add_action('admin_print_scripts', 'mgmb_print_script'); // this is not the right way to do .. but no time now.
?>
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)
session_start();
if ( isset( $_GET['lang'] ) ) {
$_SESSION['WPLANG'] = $_GET['lang'];
define ('WPLANG', $_SESSION[WPLANG]);
} else {
if(isset($_SESSION['WPLANG'])) {
define ('WPLANG', $_SESSION['WPLANG']);
$_GET['lang'] = $_SESSION['WPLANG'];
} else {
if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) ) {
$languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
$languages = explode( ",", $languages );
$_SESSION['WPLANG'] = $languages[0];
$_SESSION['WPLANG'] = str_replace("-", "_", $_SESSION['WPLANG']);
$_GET['lang'] = substr($_SESSION['WPLANG'],0,2);
define ('WPLANG', $_SESSION[WPLANG]);
} else {
define ('WPLANG', '');
}
}
}
Jetzt müssen wir in wp-config kurz vor der WPLANG-Konstante unseren Code einfügen.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
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)
function k99_add_language_menu_bar() {
global $wp_admin_bar, $wpdb;
if ( !is_super_admin() || !is_admin_bar_showing() )
return;
// I am sure you can find a way alone to construct array from reading folder . If not , comment and I will update again.
if($_COOKIE['k99_userLang']=="en_US"){$sel==$_COOKIE['k99_userLang'];}
if($_COOKIE['k99_userLang']=="de_DE"){$sel==$_COOKIE['k99_userLang'];}
if($_COOKIE['k99_userLang']=="zh_CN"){$sel==$_COOKIE['k99_userLang'];}
$k99_lang = '';
$k99_lang .= '<select name="mgmb_language_setting_help" id="mgmb_language_setting_help" onChange="mgmb_set_language_cookies(this.value);" >';
$k99_lang .= '<option value="en_US" >English</option>';
$k99_lang .= '<option value="de_DE" >German</option>';
$k99_lang .= '<option value="zh_CN" >Chinese</option></select>';
/* Add the main siteadmin menu item */
$wp_admin_bar->add_menu( array( 'id' => 'Language', 'title' => __( 'language', 'your_text_domain3' ), 'href' => FALSE ) );
$wp_admin_bar->add_menu( array( 'parent' => 'Language', 'title' => $k99_lang, 'href' => FALSE ) );
}
add_action( 'admin_bar_menu', 'k99_add_language_menu_bar', 999 );
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!).
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.