http://www.qianqin.de/qtranslate/
es lo que necesitas ...
Editar I - después del comentario. Primero, gracias por todos los que contribuyeron en el torrente de votos negativos. (esto es lo que sucede cuando uno no visita con suficiente frecuencia: -))
ahora: la función que maneja el conmutador está en qtranslate-core. (comienza en la línea 80 más o menos, depende de la versión que desee).
Como no puede buscar un código NOT OOP, y ahora no tengo nada más que hacer, me tomé 10 minutos para sintetizar, parafrasear compilar ese no OOp con otro código no OOP para usted.
(lo siento, primitivo viejo skool aquí)
Suponiendo que entendí la pregunta && Suponiendo que desea que el código sea para el administrador && suponiendo que sabrá cómo portarlo al front-end si lo desea && asumiendo que comprende que el código no es óptimo:
<?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.
?>
OBSERVACIONES
1 - Esto fue construido en 10 min. en la máquina local, mientras que en el aeropuerto. La razón por la que digo esto es que la única instalación de WordPress disponible que tengo aquí es bastante antigua. (2.9 creo).
Esto significa que probablemente el menú de idioma aparecerá BAJO el div de ayuda contextual, debido al hecho de que recientemente se introdujo una nueva estructura div (con pestañas), pero aún así debería funcionar. (Prometo volver a esto más tarde si tengo tiempo)
Si tuviera más tiempo (y un nuevo código de WordPress aquí) probablemente integraría esto en la nueva barra de administración con add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(ya prometí volver a esto)
2 - debe tener los archivos de idiomas enumerados dentro de la carpeta "idiomas" en wp-content (mejor ??) o wp-include. con respecto a este punto, el código es solo una prueba de concepto, y, por supuesto, si uno tiene más tiempo, el menú debe construirse de forma dinámica y no como se hace aquí.
3 - tu WPLANG en la configuración debe estar vacío. No estoy seguro de que funcionará en las nuevas versiones de wp si ya se ha configurado un idioma.
4 - es una simple prueba de concepto sintetizada y parafraseada construida sobre lo que se vio en el código qtranslate (también versión anterior) - por lo que la mayoría de las cosas se hacen de la manera "rápida", no necesariamente de la manera "correcta" (como agregar JS , sin dominio de texto dedicado, etc.).
EDITAR II
Alguien tiene suerte hoy! (Vuelo demorado )
Como estaba buscando "ideas" para enfoques, aquí hay otra famosa.
No cabrá en un complemento, o en cualquier otro entorno no exclusivo, pero podría darle otra dirección sobre cómo manejar el "material del navegador".
Esto permitirá obtener el idioma con un GET como: <a href="index.php?lang=de">German</a>
o<a href="whatever.php?lang=ml">my Language</a>
Para usar, puede crear un código (vamos a llamarlo 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', '');
}
}
}
ahora, en wp-config, justo antes de la constante WPLANG, necesitamos incluir nuestro código.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Ahora, obviamente, sería mejor agregar algunas cookies a la mezcla para almacenar los idiomas.
EDITAR III
Prometí volver a esto más tarde: así es cómo (de una manera muy incorrecta y primitiva) podría integrarse dentro de la barra de administración (en lugar del menú de ayuda contextual)
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 );
Simplemente reemplace esta función (o agregue) al código anterior (el no plugin original NO - OOP).
Como dije, no tengo una nueva instalación de WordPress aquí en local que incluya la barra de administración, pero debería funcionar.
(y de nuevo, puede que no funcione ... pero estoy seguro de que podría solucionarlo si realmente lo desea, incluso aunque no sea POO) :-)
Tengo que correr ahora. Espero que ayude de alguna manera.
EDITAR IV : cambió la edición III a la versión de trabajo para la barra de menú de administración (al menos en mi wp 3.4)
Como no tenía una instalación funcional de 3.4, y ahora regresé y lo hago, he editado la solución Edit III, y funciona para mí.
Sobre los votos a favor, no podría importarme menos. Y no necesito ninguna "recompensa" (sean las que sean). Fue solo por el ejercicio que tal vez deberías dárselo al autor de qTranslate. :-) a pesar del hecho de que no es OOP, es un plugin genial con mucho que aprender en muchas áreas. considerando el "cuándo" de este lanzamiento de plugin, es incluso sorprendente. Vale la pena el esfuerzo indescriptible de leer un código NO OOP, incluso si no lo es, OOP. E incluso si no está correctamente sangrado (¡Dios mío!).
WPLANG
constante podría ser una opción. Lo estoy haciendo en dos sitios con contenido multilingüe donde el complemento multilingüismo no puede activar la traducción de la interfaz de usuario. Si tiene que ser una solución AJAX / JSON, no sabría cómo ayudar.