http://www.qianqin.de/qtranslate/
é o que você precisa ...
Editar I - após o comentário. Primeiro - obrigado por todos os que contribuíram no downvotes torrent. (é o que acontece quando não se visita com frequência suficiente: -))
now - 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ê deseja).
Como você não pode procurar um código NOT OOP, e agora não tenho mais nada a fazer - levei 10 minutos para sintetizar, parafraseando a compilação desse non-OOp com outro código não-OOP.
(desculpe, - skool antigo primitivo aqui)
Supondo que eu entendi a pergunta && Supondo que você queira que o código seja para admin && assumindo que você saberá como portá-lo para o front-end se quiser && assumindo que entende que o código não é 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 estiver no aeroporto. A razão pela qual digo isso é que a única instalação pronta disponível do wordpress disponível aqui é bastante antiga. (2,9 eu acho).
Isso significa que provavelmente o menu de idiomas aparecerá SOB a ajuda contextual div, devido ao fato de uma nova estrutura div ter sido introduzida recentemente (com guias) - mas ainda assim deve funcionar. (Eu prometo voltar a isso mais tarde, se tiver tempo)
Se eu tivesse mais tempo (e um novo código wordpress aqui), provavelmente integraria 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. sobre esse ponto - o código é apenas uma prova de conceito - e, claro, se houver mais tempo, o menu deve ser construído de forma dinâmica e não como aqui.
3 - seu WPLANG na configuração deve estar vazio. Não tenho certeza se funcionará em versões mais recentes do wp se um idioma já estiver definido.
4 - é uma simples prova de conceito sintetizada e parafraseada, construída com base no que foi visto no código qtranslate (também versão antiga) - para que a maioria das coisas seja feita da maneira "rápida", não necessariamente da maneira "certa" (como adicionar JS , nenhum domínio de texto dedicado etc.).
EDIT II
alguém tem sorte hoje! (Atraso no voo)
Desde que você estava procurando "idéias" para abordagens, aqui está outra famosa.
Ele não se encaixa em um plug-in ou em qualquer outro ambiente não exclusivo, mas pode fornecer outra orientação sobre como lidar com o "material do navegador".
Isso permitirá obter 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, no 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
Prometi voltar a isso mais tarde - eis como (de uma maneira muito incorreta e primitiva) ele poderia ser integrado dentro da barra de administração (em vez 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 plug-in NON-OOP original).
Como eu disse, eu não tenho uma nova instalação do wordpress aqui no local que apresenta o admin-bar - mas deve funcionar.
(e, novamente, pode não funcionar ... mas tenho certeza de que você pode corrigir isso se realmente quiser - mesmo que não seja OOP) :-)
tenho que correr agora. espero que ajude de alguma forma.
EDIT IV - alteração da edição III para a versão de trabalho da barra de menus do administrador (pelo menos no meu wp 3.4)
desde que eu não tinha uma instalação funcional do 3.4 - e agora voltei e o faço - editei a solução Edit III - e funciona para mim.
Sobre os votos, eu não poderia me importar menos. E não preciso de "recompensas" (sejam elas quais forem ..) Foi apenas por causa do exercício que talvez você devesse dar ao autor do qTranslate. :-) apesar de não ser OOP - é um plugin genial com muito o que aprender em muitas áreas. considerando o "quando" desta versão do plugin, é ainda incrível. vale o esforço indescritível de ler um código NÃO OOP - mesmo que não seja - OOP. E mesmo que não esteja corretamente recuado (bom Deus!).
WPLANG
constante pode ser uma opção. Estou fazendo isso em dois sites com conteúdo multilíngue, em que o plug-in multilíngue falha ao disparar a tradução da interface do usuário. Se tivesse que ser uma solução AJAX / JSON, não saberia como ajudar.