http://www.qianqin.de/qtranslate/
это то, что вам нужно ...
Редактировать я - после комментария. Первое - спасибо всем, кто внес вклад в торренты downvotes. (это то, что происходит, когда человек не посещает достаточно часто: -))
now - Функция, которая обрабатывает коммутатор, находится в 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, из-за того, что недавно была введена новая структура div (с вкладками) - но все же она должна работать. (Я обещаю вернуться к этому позже, если у меня будет время)
Если бы у меня было больше времени (и нового кода WordPress здесь), я бы, вероятно, интегрировал это в новую админ-бар с add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(я уже обещал вернуться к этому)
2 - у вас должны быть файлы перечисленных языков в папке «languages» в wp-content (лучше ??) или wp-include. Что касается этого пункта - код является только доказательством концепции - и, конечно, если у вас есть больше времени, меню должно быть построено динамически, а не как здесь.
3 - ваш WPLANG в конфиге должен быть пустым. Я не уверен, что он будет работать на более новых версиях 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 в смесь для хранения языков.
РЕДАКТИРОВАТЬ 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 на рабочую версию панели меню администратора (по крайней мере, на моем wp 3.4)
так как у меня не было рабочей установки 3.4 - и теперь я вернулся, и я возвращаюсь - я отредактировал решение Edit III - и оно работает для меня.
Про упущения мне наплевать. И мне не нужны никакие «щедрости» (какими бы они ни были ...). Только для упражнения вы, возможно, дадите его автору qTranslate. :-) Несмотря на то, что это не ООП - это гениальный плагин, у которого есть чему поучиться во многих областях. учитывая «когда» этого выпуска плагина, это даже удивительно. стоит неописуемых усилий по чтению кода без ООП - даже если это не так - ООП. И даже если это не правильно с отступом (боже мой!).
WPLANG
константы может быть вариантом. Я делаю это на двух сайтах с многоязычным контентом, где плагин многоязычия не запускает перевод интерфейса. Если бы это было решение AJAX / JSON, я бы не знал, как помочь.