enlace
é o que você precisa ...
Editar I - após comentário.
Primeiro - obrigado por todos que contribuíram no torrent downvotes.
(isso é o que acontece quando alguém não visita com frequência suficiente: -))
agora -
A função que lida com o switch está no qtranslate-core.
(começa na linha 80 mais ou menos - depende da versão que você quer.)
Como você não pode olhar para um código NOT OOP, e estou agora sem mais nada para fazer - levei 10 minutos para sintetizar, parafrasear compilar esse não-OOp com outro código não-OOP para você.
(desculpe, - old skool primitivo aqui)
Supondo que entendi a pergunta & & Supondo que você queira que o código seja para admin & & supondo que você saberá como portá-lo para o front end se quiser & & supondo que você entenda que o código não é ideal:
<?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.
?>
OBSERVAÇÕES:
1 - Este foi construído em 10 min. na máquina local, enquanto no aeroporto.
A razão pela qual eu digo isso é que a única instalação wordpress disponível que tenho aqui é bastante antiga. (2.9 eu acho).
Isso significa que provavelmente o menu de idiomas aparecerá sob o div de ajuda contextual, devido ao fato de que uma nova estrutura div foi introduzida recentemente (com abas) - mas ainda assim deve funcionar.
(Eu prometo voltar a isso mais tarde, se eu tiver tempo)
Se eu tivesse mais tempo (e um novo código wordpress aqui) eu provavelmente iria integrar isso na nova barra de administração com add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(eu já prometi voltar a isso)
2 - você deve ter os arquivos de idiomas listados dentro da pasta "languages" em wp-content (better ??) ou wp-include.
Quanto a este ponto - o código é apenas uma prova de conceito - e, claro, se alguém tem mais tempo, o menu deve ser construído de forma dinâmica e não como aqui.
3 - o seu WPLANG em config deve estar vazio. Não tenho certeza de que funcionará em versões wp mais recentes se uma linguagem já estiver definida.
4 - é uma simples prova sintetizada e parafraseada de conceito construída sobre o que foi visto no código qtranslate (também versão antiga) - então a maioria das coisas é feita de maneira "rápida", não necessariamente "correta" ( como adicionar JS, não textdomain dedicado etc ..).
EDIT II
alguém tem sorte hoje! (Atraso de Voo)
Já que você estava procurando por "idéias" para abordagens, aqui está outra famosa.
Ele não caberá em um plug-in ou em qualquer outro ambiente não exclusivo, mas poderá fornecer uma outra orientação sobre como lidar com o "material do navegador".
Isso permitirá que uma pessoa receba o idioma com um GET como: <a href="index.php?lang=de">German</a>
ou <a href="whatever.php?lang=ml">my Language</a>
Para usar, você pode criar um código (vamos chamá-lo de 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', '');
}
}
}
agora, em wp-config, logo antes da constante WPLANG, precisamos incluir nosso código.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Agora - obviamente, seria melhor adicionar alguns cookies à mistura para armazenar os idiomas.
EDIT III
Eu prometi voltar a isso mais tarde - aqui está como (de uma maneira não correta e primitiva) ele pode ser integrado dentro da barra de administração (ao invés do menu de ajuda 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 );
Apenas substitua esta função (ou adicione) ao código antigo (o não plugin original não-OOP).
Como eu disse, eu não tenho uma nova instalação wordpress aqui no local que possui admin-bar - mas deve funcionar.
(e, em seguida, novamente, pode não funcionar ... mas tenho certeza que você poderia consertar isso, se você realmente quer - até pensei que não é OOP): -)
tenho que correr agora. espero que ajude de alguma forma.
EDIT IV - alterou a edição III para a versão de trabalho para a barra de menus do administrador (pelo menos no meu wp 3.4)
desde que eu não tinha uma instalação funcional de 3.4 - e agora voltei e o faço - editei a solução Edit III - e funciona para mim.
Sobre o upvotes, eu não poderia me importar menos. E eu não preciso de nenhuma "recompensa" (o que quer que seja que seja ...) Foi apenas por causa do exercício que você deve dar ao autor do qTranslate. :-) apesar do fato de que não é OOP - é um plugin genioso com muito a aprender em muitas áreas. considerando o "quando" desta versão do plugin, é até incrível. Vale a pena o esforço indescritível de ler um código não-OOP - mesmo que não seja - OOP. E mesmo que não seja corretamente recuado (bom deus!).