http://www.qianqin.de/qtranslate/
คือสิ่งที่คุณต้องการ ...
แก้ไขฉัน - หลังความคิดเห็น ครั้งแรก - ขอบคุณสำหรับทุกคนที่มีส่วนในฝนตกหนัก downvotes (นี่คือสิ่งที่เกิดขึ้นเมื่อมีผู้เข้าชมไม่บ่อยพอ: -))
ตอนนี้ - ฟังก์ชั่นที่จัดการสวิตช์อยู่ใน qtranslate-core (เริ่มที่บรรทัดที่ 80 ขึ้นไป - ขึ้นอยู่กับรุ่นที่คุณต้องการ)
เนื่องจากคุณไม่สามารถดูรหัส NOT OOP ได้และตอนนี้ฉันไม่มีอะไรให้ทำอีก - ฉันใช้เวลา 10 นาทีในการสังเคราะห์รวบรวมข้อความถอดความรวบรวมที่ไม่ใช่ OOp ด้วยรหัสอื่นที่ไม่ใช่ OOP สำหรับคุณ
(ขออภัย - Skool เก่าแก่ที่นี่)
สมมติว่าฉันเข้าใจคำถาม && สมมติว่าคุณต้องการให้โค้ดสำหรับผู้ดูแลระบบ && โดยสมมติว่าคุณจะรู้วิธีที่จะย้ายไปยังส่วนหน้าหากคุณต้องการ && โดยสมมติว่าคุณเข้าใจว่ารหัสนั้นไม่เหมาะสม:
<?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 ความช่วยเหลือตามบริบทเนื่องจากโครงสร้าง div ใหม่ได้ถูกนำมาใช้เมื่อเร็ว ๆ นี้ (พร้อมแท็บ) - แต่ก็ยังควรใช้งานได้ (ฉันสัญญาว่าจะกลับมาอีกในภายหลังหากฉันมีเวลา)
ถ้าฉันมีเวลามากขึ้น (และรหัส wordpress ใหม่ที่นี่) ฉันอาจจะรวมสิ่งนี้ใน admin-bar ใหม่ด้วยadd_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(ฉันสัญญาแล้วว่าจะกลับไปที่นี่)
2 - คุณควรมีไฟล์ภาษาที่ระบุไว้ในโฟลเดอร์ "languages" ใน wp-content (ดีกว่า) หรือ wp-include เกี่ยวกับประเด็นนี้ - รหัสเป็นเพียงหลักฐานของแนวคิด - และแน่นอนว่าถ้ามีเวลามากขึ้นเมนูควรจะสร้างขึ้นในแบบไดนามิกและไม่เหมือนที่นี่
3 - WPLANG ในการกำหนดค่าของคุณควรว่างเปล่า ฉันไม่แน่ใจว่ามันจะทำงานกับ wp เวอร์ชั่นที่ใหม่กว่าถ้าตั้งค่าภาษาไว้แล้ว
4 - มันเป็นบทพิสูจน์ที่เรียบง่ายของการสังเคราะห์และถอดความจากแนวคิดที่สร้างขึ้นในสิ่งที่เห็นในรหัส qtranslate (เช่นรุ่นเก่า) - ดังนั้นสิ่งต่าง ๆ ส่วนใหญ่จะทำในลักษณะ "เร็ว" ไม่จำเป็นต้องเป็น "วิธี" ที่เหมาะสม (เช่นการเพิ่ม JS ไม่มีโดเมนข้อความเฉพาะ ฯลฯ .. )
แก้ไขครั้งที่สอง
บางคนโชคดีวันนี้! (เที่ยวบินล่าช้า )
เนื่องจากคุณกำลังมองหา "แนวคิด" สำหรับวิธีการนี่เป็นอีกวิธีหนึ่งที่มีชื่อเสียง
มันจะไม่พอดีกับปลั๊กอินหรือสภาพแวดล้อมที่ไม่ใช่เอกสิทธิ์อื่น ๆ แต่จริง ๆ แล้วมันอาจให้ทิศทางอีกวิธีในการจัดการกับ "สิ่งต่าง ๆ ของเบราว์เซอร์"
วิธีนี้จะทำให้ผู้ใช้สามารถรับภาษาที่มี GET like: <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', '');
ตอนนี้ - จะเป็นการดีกว่าถ้าคุณเพิ่มคุกกี้ลงในมิกซ์เพื่อจัดเก็บภาษา
แก้ไข 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) :-)
ต้องวิ่งตอนนี้ หวังว่ามันจะช่วยอย่างใด
EDIT IV - เปลี่ยน edit III เป็น verion ที่ใช้งานได้สำหรับแถบเมนูผู้ดูแลระบบ (อย่างน้อยใน wp ของฉัน 3.4)
เนื่องจากฉันไม่มีการติดตั้งที่ใช้งานได้ 3.4 - และตอนนี้ฉันกลับมาแล้วและฉันทำ - ฉันได้แก้ไขวิธีการแก้ไข III - และใช้งานได้สำหรับฉัน
เกี่ยวกับ upvotes ฉันไม่สามารถดูแลน้อยลง และฉันไม่ต้องการ "รางวัล" ใด ๆ (ไม่ว่ามันจะเป็นอะไร .. ) มันเป็นเพียงเพื่อประโยชน์ของการออกกำลังกายที่คุณอาจจะมอบให้กับผู้เขียน qTranslate :-) แม้จะมีความจริงที่ว่ามันไม่ได้เป็น OOP - มันเป็นปลั๊กอินที่ชาญฉลาดที่มีจำนวนมากที่จะเรียนรู้จากในหลายพื้นที่ เมื่อพิจารณาจาก "เมื่อ" ของปลั๊กอินนี้มันน่าทึ่งมาก คุ้มค่ากับความพยายามอย่างไม่สามารถอธิบายได้ของการอ่านรหัส NON OOP - แม้ว่าจะไม่ใช่ - OOP และแม้ว่ามันจะไม่ได้เยื้องอย่างถูกต้อง (พระเจ้าที่ดี!)
WPLANG
ค่าคงที่ใหม่อาจเป็นตัวเลือก ฉันทำอย่างนั้นกับสองไซต์ที่มีเนื้อหาหลายภาษาซึ่งปลั๊กอินการพูดได้หลายภาษาไม่สามารถกระตุ้นการแปล UI หากต้องเป็นโซลูชัน AJAX / JSON ฉันจะไม่รู้วิธีช่วยเหลือ