http://www.qianqin.de/qtranslate/
est ce dont vous avez besoin ...
Edit I - après commentaire. Tout d'abord - merci pour tous ceux qui ont contribué au torrent downvotes. (c'est ce qui arrive quand on ne visite pas assez souvent: -))
now - La fonction qui gère le commutateur est dans qtranslate-core. (commence à la ligne 80 plus ou moins - dépend de la version que vous voulez.)
Puisque vous ne pouvez pas regarder dans un code NOT OOP, et que je n'ai plus rien d'autre à faire - j'ai pris 10 minutes pour synthétiser, paraphraser compiler ce non-OOp avec encore un autre code non-OOP pour vous.
(désolé, - vieille école primitive ici)
En supposant que j'ai compris la question && En supposant que vous vouliez que le code soit pour l'administrateur && en supposant que vous saurez comment le porter sur le front-end si vous voulez && en supposant que vous compreniez que le code n'est pas optimal:
<?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.
?>
REMARQUES :
1 - Il a été construit en 10 min. sur la machine locale à l'aéroport. La raison pour laquelle je dis cela est que la seule installation wordpress disponible disponible que j'ai ici est assez ancienne. (2.9 je pense).
Cela signifie que le menu de langue apparaîtra probablement sous la division d'aide contextuelle, car une nouvelle structure de div a été récemment introduite (avec des onglets) - mais cela devrait quand même fonctionner. (Je promets d'y revenir plus tard si j'ai le temps)
Si j'avais plus de temps (et un nouveau code wordpress ici), j'intégrerais probablement cela dans la nouvelle barre d'administration avec add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(j'ai déjà promis d'y revenir)
2 - vous devriez avoir les fichiers de langues listés dans le dossier "languages" dans wp-content (mieux ??) ou wp-include. sur ce point - le code n'est qu'une preuve de concept - et bien sûr si on a plus de temps le menu doit être construit de manière dynamique et pas comme ici.
3 - votre WPLANG dans la configuration doit être vide. Je ne suis pas sûr que cela fonctionnera sur les versions wp plus récentes si une langue est déjà définie.
4 - il s'agit d'une simple preuve de concept synthétisée et paraphrasée construite sur ce qui a été vu dans le code de traduction (également ancienne version) - donc la plupart des choses se font de manière "rapide", pas nécessairement de la "bonne" façon (comme l'ajout de JS , pas de domaine texte dédié etc.).
EDIT II
quelqu'un a de la chance aujourd'hui! (Retard de vol)
Puisque vous recherchiez des "idées" d'approches, en voici une autre célèbre.
Il ne rentrera pas dans un plugin, ni dans aucun autre environnement non exclusif, mais il pourrait vous donner une autre direction sur la façon de gérer les "trucs du navigateur".
Cela permettra d'obtenir la langue avec un GET comme: <a href="index.php?lang=de">German</a>
ou<a href="whatever.php?lang=ml">my Language</a>
Pour l'utiliser, vous pouvez créer un code (appelons-le 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', '');
}
}
}
maintenant, dans wp-config, juste avant la constante WPLANG, nous devons inclure notre code.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Maintenant - il serait évidemment préférable d'ajouter des cookies au mélange pour stocker les langues.
EDIT III
J'ai promis d'y revenir plus tard - voici comment (d'une manière très incorrecte et primitive) il pourrait être intégré à la barre d'administration (au lieu du menu d'aide contextuelle)
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 );
Remplacez simplement cette fonction (ou ajoutez) à l'ancien code (le non-plugin NON-OOP d'origine).
Comme je l'ai dit, je n'ai pas de nouvelle installation wordpress ici sur local qui dispose d'une barre d'administration - mais cela devrait fonctionner.
(et encore une fois, cela pourrait ne pas fonctionner ... mais je suis sûr que vous pouvez résoudre ce problème si vous le voulez vraiment - même si ce n'est pas OOP) :-)
dois courir maintenant. j'espère que cela aide en quelque sorte.
EDIT IV - changé edit III en verion de travail pour la barre de menu admin (au moins sur mon wp 3.4)
puisque je n'avais pas d'installation de 3.4 en état de fonctionnement - et maintenant je suis revenu et je le fais - j'ai édité la solution Edit III - et cela fonctionne pour moi.
Concernant les votes positifs, je m'en fichais. Et je n'ai pas besoin de "primes" (quelles qu'elles soient ..) C'est juste pour le plaisir de l'exercice que vous devriez peut-être le donner à l'auteur de qTranslate. :-) malgré le fait qu'il ne s'agit pas de POO - c'est un plugin génial avec beaucoup à apprendre dans de nombreux domaines. compte tenu du "quand" de cette version du plugin, c'est même incroyable. vaut l'effort indescriptible de lire un code NON OOP - même s'il ne l'est pas - OOP. Et même s'il n'est pas correctement en retrait (bon dieu!).
WPLANG
constante pourrait être une option. Je le fais sur deux sites avec un contenu multilingue où le plugin multilingue ne parvient pas à déclencher la traduction de l'interface utilisateur. S'il devait s'agir d'une solution AJAX / JSON, je ne saurais pas comment aider.