http://www.qianqin.de/qtranslate/
це те, що вам потрібно ...
Редагувати I - після коментаря. Перший - дякую всім, хто сприяв поточному потоку. (це відбувається, коли людина не відвідує досить часто: -))
тепер - Функція, яка обробляє комутатор, знаходиться в qtranslate-core. (Починається з 80 або більше рядка - залежить від потрібної версії.)
Оскільки ви не можете заглянути в код NOT OOP, і мені зараз нічого більше не потрібно - мені знадобилося 10 хвилин, щоб синтезувати, перефразовувати компіляцію, що не є OOp, і ще одним не-OOP кодом для вас.
(вибачте - тут примітивний старий скол)
Якщо припустити, що я зрозумів питання && Припустимо, що ви хочете, щоб цей код був для адміністратора &&, припускаючи, що ви знаєте, як перенести його до переднього кінця, якщо ви хочете &&, якщо ви розумієте, що код не є оптимальним:
<?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.
?>
ЗАМОВЛЕННЯ:
1 - Це було побудовано за 10 хв. на місцевій машині, перебуваючи в аеропорту. Причина, чому я говорю це, полягає в тому, що єдина доступна інсталяція Wordpress, яка у мене тут, є досить старою. (2.9 я думаю).
Це означає, що, ймовірно, меню мови з’явиться під контекстним довідником через те, що нещодавно була введена нова структура div (з вкладками) - але все-таки вона повинна працювати. (Обіцяю повернутися до цього пізніше, якщо встигну)
Якби у мене було більше часу (і тут з'явився новий код wordpress), я б, мабуть, інтегрував це в нову панель адміністрування add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(я вже пообіцяв повернутися до цього)
2 - ви повинні мати перелічені файли мов всередині папки "languages" у wp-контенті (краще ??) або wp-include. щодо цього моменту - код є лише доказом концепції - і, звичайно, якщо у вас є більше часу, меню має будуватися динамічно, а не так, як це робиться тут.
3 - ваш WPLANG у config повинен бути порожнім. Я не впевнений, що він буде працювати над новішими версіями wp, якщо мова вже встановлена.
4 - це простий синтезований і перефразований доказ концепції, побудованої на тому, що було помічено в коді qtranslate (також стара версія) - тому більшість речей робиться "швидким" способом, не обов'язково "правильним" способом (як додавання JS , немає виділеного текстового домену тощо.).
РЕДАКТ II
комусь пощастило сьогодні! (Затримка польоту)
Оскільки ви шукали «ідеї» для підходів, ось ще одна відома.
Він не впишеться у плагін чи фактично будь-яке інше неексклюзивне середовище, але це може дати вам інший напрямок щодо того, як поводитися з "матеріалами браузера".
Це дозволить отримати мову за допомогою GET типу: <a href="index.php?lang=de">German</a>
або<a href="whatever.php?lang=ml">my Language</a>
Для використання можна створити код (назвемо його 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', '');
}
}
}
тепер, у wp-config, безпосередньо перед константою WPLANG, нам потрібно включити наш код.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Тепер - очевидно, було б краще додати трохи файлів cookie до суміші, щоб зберігати мови.
EDIT III
Я пообіцяв повернутися до цього пізніше - ось як (дуже не правильним і примітивним способом) він міг бути інтегрований всередині адмін-панелі (замість контекстного довідкового меню)
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 );
Просто замініть цю функцію (або додайте) на старий код (оригінальний неплагін NON - OOP).
Як я вже сказав, у мене немає нової установки WordPress на локальній, яка має адмін-бар - але вона повинна працювати.
(і знову ж таки, це може не спрацювати ... але я впевнений, що ви могли б це виправити, якщо дуже хочете - навіть подумали, що це не ООП) :-)
зараз треба бігти. сподіваюся, що це якось допомагає.
EDIT IV - змінив редагування III на робочу версію для панелі меню адміністратора (принаймні на моїй версії 3.4)
так як у мене не було робочої установки 3.4 - а тепер я повернувся і це роблю - я відредагував рішення Edit III - і це працює для мене.
Про анотації я міг би не менше піклуватися. І мені не потрібні будь-які «щедроти» (як би там не було ..) Це було просто заради вправи, яку ви, можливо, дасте автору qTranslate. :-) незважаючи на те, що це не OOP - це геніальний плагін, з якого можна багато чому навчитися у багатьох областях. враховуючи "коли" цього випуску плагінів, це навіть дивовижно. Варто невимовно намагатися прочитати код NON OOP - навіть якщо це не так - OOP. І навіть якщо він неправильно відведений (добрий бог!).
WPLANG
константи може бути варіантом. Я роблю це на двох сайтах з багатомовним вмістом, де плагін багатомовності не може запустити трансляцію інтерфейсу. Якщо це повинно бути рішенням AJAX / JSON, я не знаю, як допомогти.