http://www.qianqin.de/qtranslate/
è quello che ti serve ...
Modifica I - dopo il commento. Innanzitutto, grazie per tutti coloro che hanno contribuito al downvotes torrent. (questo è ciò che accade quando non si visita abbastanza frequentemente: -))
now - La funzione che gestisce l'interruttore è in qtranslate-core. (inizia alla riga 80 più o meno - dipende dalla versione desiderata.)
Dal momento che non puoi cercare un codice NOT OOP, e ora non ho nient'altro da fare - ho impiegato 10 minuti per sintetizzare, parafrasando compilando quel non-OOp con l'ennesimo codice non-OOP per te.
(scusa, - vecchia skool primitiva qui)
Supponendo di aver compreso la domanda && Supponendo che si desideri che il codice sia destinato all'amministratore && supponendo che si saprà portarlo al front-end se si desidera && supponendo di aver compreso che il codice non è ottimale:
<?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.
?>
OSSERVAZIONI:
1 - Costruito in 10 minuti. sulla macchina locale mentre all'aeroporto. Il motivo per cui dico questo è che l'unica installazione wordpress disponibile disponibile che ho qui è piuttosto vecchia. (2.9 Penso).
Ciò significa che probabilmente il menu della lingua apparirà SOTTO il div della guida contestuale, a causa del fatto che una nuova struttura div è stata recentemente introdotta (con schede) - ma dovrebbe comunque funzionare. (Prometto di tornarci più tardi se avrò tempo)
Se avessi più tempo (e un nuovo codice wordpress qui) probabilmente lo integrerei nella nuova barra di amministrazione con add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(ho già promesso di tornare a questo)
2 - dovresti avere i file delle lingue elencati nella cartella "lingue" in wp-content (meglio ??) o wp-include. riguardo a questo punto - il codice è solo una prova di concetto - e ovviamente se si ha più tempo il menu dovrebbe essere costruito in modo dinamico e non come fatto qui.
3 - il tuo WPLANG in config dovrebbe essere vuoto. Non sono sicuro che funzionerà con le nuove versioni di wp se è già impostata una lingua.
4 - è una semplice dimostrazione sintetizzata e parafrasata del concetto basata su ciò che è stato visto nel codice qtranslate (anche versione precedente) - quindi la maggior parte delle cose sono fatte nel modo "rapido", non necessariamente nel modo "giusto" (come l'aggiunta di JS , nessun textdomain dedicato ecc.).
EDIT II
qualcuno è fortunato oggi! (Ritardo del volo )
Dato che stavi cercando "idee" per approcci, eccone un'altra famosa.
Non si adatta a un plug-in o in realtà a qualsiasi altro ambiente non esclusivo, ma potrebbe darti un'altra direzione su come gestire le "cose del browser".
Ciò consentirà di ottenere la lingua con un GET come: <a href="index.php?lang=de">German</a>
o<a href="whatever.php?lang=ml">my Language</a>
Per usare, puoi creare un codice (chiamiamolo 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', '');
}
}
}
ora, in wp-config, appena prima della costante WPLANG, dobbiamo includere il nostro codice.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Ora, ovviamente, sarebbe meglio aggiungere alcuni cookie al mix per memorizzare le lingue.
EDIT III
Ho promesso di tornare a questo in seguito - ecco come (in un modo molto non corretto e primitivo) potrebbe essere integrato all'interno della barra di amministrazione (invece del menu di aiuto contestuale)
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 );
Basta sostituire questa funzione (o aggiungere) al vecchio codice (il non plugin originale NON - OOP).
Come ho detto, non ho una nuova installazione di wordpress qui su local che presenta la barra di amministrazione - ma dovrebbe funzionare.
(e poi di nuovo, potrebbe non funzionare ... ma sono sicuro che potresti risolverlo se vuoi davvero - anche se pensavo che non fosse OOP) :-)
devo correre ora. spero che aiuti in qualche modo.
EDIT IV - cambiato edit III in versione funzionante per la barra dei menu dell'amministratore (almeno sul mio wp 3.4)
dal momento che non avevo un'installazione funzionante di 3.4 - e ora sono tornato e lo faccio - ho modificato la soluzione Edit III - e funziona per me.
A proposito dei voti, non me ne può fregare di meno. E non ho bisogno di "doni" (qualunque essi siano ..) Era solo per il bene dell'esercizio che potresti darlo all'autore di qTranslate. :-) nonostante non sia OOP - è un plugin geniale con molto da cui imparare in molte aree. considerando il "quando" di questa versione del plugin, è persino sorprendente. vale la pena indescrivibile di leggere un codice NON OOP - anche se non lo è - OOP. E anche se non è correttamente rientrato (buon dio!).
WPLANG
costante potrebbe essere un'opzione. Lo sto facendo su due siti con contenuti multilingue in cui il plug-in multilingue non riesce ad attivare la traduzione dell'interfaccia utente. Se deve essere una soluzione AJAX / JSON, non saprei aiutare.