http://www.qianqin.de/qtransTable/
là những gì bạn cần ...
Chỉnh sửa tôi - sau khi bình luận. Đầu tiên - cảm ơn tất cả những người đã đóng góp trong downvote torrent. (đây là những gì xảy ra khi một người không truy cập thường xuyên đủ: -))
ngay bây giờ - Chức năng xử lý công tắc nằm trong qtranslate-core. (bắt đầu ở dòng 80 nhiều hơn hoặc ít hơn - tùy thuộc vào phiên bản bạn muốn.)
Vì bạn không thể xem mã KHÔNG OOP và bây giờ tôi không có gì khác để làm - tôi mất 10 phút để tổng hợp, paraph khẩu biên dịch mà không phải OOp với một mã không OOP khác cho bạn.
(xin lỗi, - skool cũ nguyên thủy ở đây)
Giả sử rằng tôi đã hiểu câu hỏi && Giả sử bạn muốn mã dành cho quản trị viên && giả sử bạn sẽ biết cách chuyển nó sang giao diện người dùng nếu bạn muốn && giả sử bạn hiểu rằng mã không tối ưu:
<?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.
?>
NHẬN XÉT:
1 - Điều này được xây dựng trong 10 phút. trên máy cục bộ khi ở sân bay. Lý do tại sao tôi nói điều này là cài đặt wordpress có sẵn duy nhất mà tôi có ở đây khá cũ. (2.9 Tôi nghĩ).
Điều này có nghĩa là có lẽ menu ngôn ngữ sẽ xuất hiện DƯỚI div trợ giúp theo ngữ cảnh, do thực tế là một cấu trúc div mới đã được giới thiệu gần đây (với các tab) - nhưng nó vẫn hoạt động. (Tôi hứa sẽ quay lại vấn đề này sau nếu tôi có thời gian)
Nếu tôi có nhiều thời gian hơn (và một mã wordpress mới ở đây) tôi có thể sẽ tích hợp mã này vào thanh quản trị mới add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(tôi đã hứa sẽ quay lại vấn đề này)
2 - bạn nên có các tệp ngôn ngữ được liệt kê bên trong thư mục "ngôn ngữ" trong nội dung wp (tốt hơn ??) hoặc wp-gộp. liên quan đến điểm này - mã chỉ là một bằng chứng về khái niệm - và tất nhiên nếu ai đó có nhiều thời gian hơn thì menu sẽ được xây dựng theo cách năng động và không giống như được thực hiện ở đây.
3 - WPLANG của bạn trong cấu hình nên trống. Tôi không chắc nó sẽ hoạt động trên các phiên bản wp mới hơn nếu ngôn ngữ đã được đặt.
4 - đó là một bằng chứng khái niệm đơn giản được tổng hợp và diễn giải dựa trên những gì đã thấy trong mã qtranslate (cũng là phiên bản cũ) - vì vậy hầu hết mọi thứ đều được thực hiện theo cách "nhanh chóng", không nhất thiết là cách "đúng" (như thêm JS , không có tên miền văn bản chuyên dụng, v.v.).
EDIT II
hôm nay có người may mắn (Hoãn chuyến bay )
Vì bạn đang tìm kiếm "ý tưởng" cho các phương pháp tiếp cận, đây là một ý tưởng nổi tiếng khác.
Nó sẽ không phù hợp với một plugin, hoặc bất kỳ môi trường không độc quyền nào khác, nhưng nó có thể cung cấp cho bạn một hướng khác là cách xử lý "Nội dung trình duyệt".
Điều này sẽ cho phép một người có được ngôn ngữ với GET như: <a href="index.php?lang=de">German</a>
hoặc<a href="whatever.php?lang=ml">my Language</a>
Để sử dụng, bạn có thể tạo một mã (hãy để tên gọi là 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', '');
}
}
}
bây giờ, trong wp-config, ngay trước hằng số WPLANG, chúng ta cần bao gồm mã của chúng tôi.
require_once(dirname(__FILE__).'/wp-langswitch.php');
define ('WPLANG', '');
Bây giờ - rõ ràng sẽ tốt hơn nếu thêm một số cookie vào hỗn hợp để lưu trữ ngôn ngữ.
EDIT III
Tôi đã hứa sẽ quay lại vấn đề này sau - đây là cách (theo cách rất không chính xác và nguyên thủy) nó có thể được tích hợp bên trong thanh quản trị (thay vì trình đơn trợ giúp theo ngữ cảnh)
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 );
Chỉ cần thay thế chức năng này (hoặc thêm) vào mã cũ (NON - OOP ban đầu không phải là plugin).
Như tôi đã nói, tôi không có cài đặt wordpress mới ở đây trên địa phương có tính năng quản trị viên - nhưng nó sẽ hoạt động.
(và sau đó một lần nữa, nó có thể không hoạt động ... nhưng tôi chắc chắn bạn có thể khắc phục điều đó nếu bạn thực sự muốn - thậm chí nghĩ rằng đó không phải là OOP) :-)
phải chạy ngay bây giờ hy vọng nó sẽ giúp
EDIT IV - đã thay đổi chỉnh sửa III thành verion làm việc cho thanh menu của quản trị viên (ít nhất là trên wp 3.4 của tôi)
vì tôi không cài đặt được 3,4 - và bây giờ tôi đã quay lại và tôi làm - tôi đã chỉnh sửa giải pháp Chỉnh sửa III - và nó hoạt động với tôi.
Về upvote, tôi không thể không quan tâm. Và tôi không cần bất kỳ "tiền thưởng" nào (dù đó là những gì có thể ..) Đó chỉ là vì mục đích của bài tập mà bạn có thể đưa nó cho tác giả của qTranslate. :-) mặc dù thực tế rằng nó không phải là OOP - nó là một plugin có nhiều gen để học hỏi trong nhiều lĩnh vực. xem xét "khi nào" của phiên bản plugin này, nó thậm chí còn tuyệt vời. xứng đáng với nỗ lực không thể diễn tả khi đọc mã NON OOP - ngay cả khi nó không - OOP. Và ngay cả khi nó không được thụt lề chính xác (trời ơi!).
WPLANG
hằng số có thể là một tùy chọn. Tôi đang làm điều đó trên hai trang web có nội dung đa ngôn ngữ trong đó plugin đa ngôn ngữ không kích hoạt dịch thuật UI. Nếu nó phải là một giải pháp AJAX / JSON, tôi sẽ không biết cách giúp đỡ.