http://www.qianqin.de/qtranslate/
是您需要的...
编辑我 -评论后。首先-感谢所有为downvotes洪流做出贡献的人。(如果访问频率不够高,就会发生这种情况:-))
现在-处理切换的功能位于qtranslate-core中。(或多或少地从第80行开始-取决于所需的版本。)
由于您无法查看NOT OOP代码,而我现在无事可做-我花了10分钟的时间进行综合,因此用另一种非OOP代码为您编译该非OOp。
(对不起,-这里是原始的老家伙)
假设我理解了&&的问题,并假设您希望将代码用于admin &&,假设您想知道&&并认为代码不是最佳方法,那么您将知道如何将其移植到前端:
<?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-您应该将列出的语言文件放在wp-content(更好?)或wp-include中的“ languages”文件夹中。关于这一点-代码只是一种概念上的证明-当然,如果有更多时间,应该以动态方式构建菜单,而不是像此处那样。
3-您在配置中的WPLANG应该为空。如果已经设置了某种语言,我不确定它是否可以在较新的wp版本上使用。
4-它是基于qtranslate代码(也是旧版本)中的内容而进行的简单综合和释义的概念证明-因此,大多数事情都是以“快速”方式完成的,不一定是“正确”方式(例如添加JS) ,没有专用的textdomain等。)。
编辑二
今天有人很幸运!(飞机延迟 )
由于您一直在寻找方法的“想法”,因此这里是另一种著名的方法。
它不适合插件或其他任何非排他性环境,但是它可能为您提供处理“浏览器内容”的另一个方向。
这样一来,您就可以使用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安装,但具有admin-bar功能,但是应该可以使用。
(然后再次,它可能无法正常工作...但是我敢肯定,如果您确实想要,甚至可以认为它不是OOP,也可以解决此问题:)
现在要运行。希望它能有所帮助。
编辑IV-将编辑III更改为管理菜单栏的工作版本(至少在我的wp 3.4上)
因为我没有3.4的有效安装-现在又返回了,然后我做了-我已经编辑了Edit III解决方案-并且对我有用。
关于投票,我一点也不在乎。而且我不需要任何“奖励”(无论可能是什么。)只是为了练习,您应该将其交给qTranslate的作者。:-)尽管它不是OOP-它是一个很棒的插件,在许多领域都有很多值得学习的地方。考虑到该插件发布的“时间”,这甚至是惊人的。值得阅读NON OOP代码(即使不是OOP)也花费了巨大的精力。即使没有正确缩进(天哪!)。
WPLANG
可以重新定义常量。我正在两个具有多语言内容的站点上执行此操作,其中多语言插件无法触发UI转换。如果必须是AJAX / JSON解决方案,我将不知道如何提供帮助。