http://www.qianqin.de/qtranslate/
jest to czego potrzebujesz ...
Edytuj I - po komentarzu. Po pierwsze - dziękuję wszystkim, którzy wnieśli swój wkład w torrent downvotes. (tak się dzieje, gdy nie odwiedza się wystarczająco często: -))
teraz - funkcja obsługująca przełącznik znajduje się w rdzeniu qtranslate. (zaczyna się mniej więcej od linii 80 - zależy od wybranej wersji).
Ponieważ nie możesz zajrzeć do kodu NOT OOP, a teraz nie mam już nic innego do roboty - syntezowanie zajęło 10 minut, parafrazując skompiluj ten non-OOp z jeszcze innym kodem innym niż OOP.
(przepraszam, - prymitywny stary skool tutaj)
Zakładając, że rozumiem pytanie i& Zakładając, że chcesz, aby kod był dla administratora i&, zakładając, że będziesz wiedział, jak przenieść go do interfejsu, jeśli chcesz i&, zakładając, że rozumiesz, że kod nie jest optymalny:
<?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.
?>
UWAGI:
1 - Zbudowano go w 10 minut. na lokalnej maszynie podczas pobytu na lotnisku. Powodem, dla którego to mówię, jest to, że jedyna dostępna instalacja Wordpress, którą mam tutaj, jest dość stara. (Myślę, że 2.9).
Oznacza to, że prawdopodobnie menu języka pojawi się pod kontekstowym div pomocy, ponieważ ostatnio wprowadzono nową strukturę div (z zakładkami) - ale nadal powinna działać. (Obiecuję, że wrócę do tego później, jeśli będę miał czas)
Gdybym miał więcej czasu (i nowy kod Wordpress tutaj), prawdopodobnie zintegrowałbym to z nowym paskiem administracyjnym z add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(już obiecałem wrócić do tego)
2 - powinieneś mieć wymienione pliki językowe w folderze „languages” w wp-content (lepiej ??) lub wp-include. jeśli chodzi o ten punkt - kod jest tylko dowodem koncepcji - i oczywiście, jeśli ktoś ma więcej czasu, menu powinno być budowane w sposób dynamiczny, a nie jak tutaj.
3 - Twój WPLANG w konfiguracji powinien być pusty. Nie jestem pewien, czy będzie działać na nowszych wersjach wp, jeśli język jest już ustawiony.
4 - jest to prosty zsyntetyzowany i sparafrazowany dowód koncepcji oparty na tym, co widzieliśmy w kodzie qtranslate (także w starej wersji) - więc większość rzeczy jest wykonywana w „szybki” sposób, niekoniecznie w „właściwy” sposób (jak dodanie JS , brak dedykowanej domeny tekstowej itp.).
EDYCJA II
dzisiaj ktoś ma szczęście! (Opóźnienie lotu )
Ponieważ szukałeś „pomysłów” na podejścia, oto kolejny znany.
Nie zmieści się we wtyczce ani w żadnym innym niewyłącznym środowisku, ale może dać ci inny kierunek, jak radzić sobie z „przeglądarkami”.
Umożliwi to zdobycie języka z GET, takim jak: <a href="index.php?lang=de">German</a>
lub<a href="whatever.php?lang=ml">my Language</a>
Aby użyć, możesz utworzyć kod (nazwijmy go 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', '');
}
}
}
teraz w wp-config, tuż przed stałą WPLANG, musimy dołączyć nasz kod.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Teraz - oczywiście lepiej byłoby dodać kilka ciasteczek do miksu, aby przechowywać języki.
EDYCJA III
Obiecałem, że wrócę do tego później - oto jak (w bardzo niepoprawny i prymitywny sposób) można go zintegrować z paskiem administratora (zamiast menu pomocy kontekstowej)
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 );
Po prostu zastąp tę funkcję (lub dodaj) do starego kodu (oryginalna wtyczka NON - OOP).
Tak jak powiedziałem, nie mam tutaj nowej instalacji wordpress na lokalnym, która zawiera pasek administratora - ale powinien działać.
(a potem znowu może nie działać ... ale jestem pewien, że możesz to naprawić, jeśli naprawdę chcesz - nawet myślałem, że to nie jest OOP) :-)
muszę teraz biec. mam nadzieję, że to jakoś pomaga.
EDYCJA IV - zmieniono edycję III na działającą wersję dla paska menu administratora (przynajmniej na moim wp 3.4)
ponieważ nie miałem działającej instalacji 3.4 - a teraz wróciłem i tak zrobiłem - edytowałem rozwiązanie Edit III - i działa dla mnie.
Jeśli chodzi o głosy poparcia, nie obchodzi mnie to mniej. I nie potrzebuję żadnych „nagród” (cokolwiek by to było…) To tylko ze względu na ćwiczenie, które powinieneś być w stanie przekazać autorowi qTranslate. :-) pomimo tego, że nie jest to OOP - jest to genialna wtyczka, z której można się wiele nauczyć w wielu obszarach. biorąc pod uwagę „kiedy” tego wydania wtyczki, jest to nawet niesamowite. warte nieopisanego wysiłku odczytania kodu NON OOP - nawet jeśli nie jest - OOP. I nawet jeśli nie jest poprawnie wcięte (dobry Boże!).
WPLANG
opcją może być ponowne zdefiniowanie stałej. Robię to na dwóch stronach z treściami wielojęzycznymi, gdzie wtyczka wielojęzyczności nie uruchamia tłumaczenia interfejsu użytkownika. Gdyby to miało być rozwiązanie AJAX / JSON, nie wiedziałbym, jak pomóc.