เปลี่ยนภาษาโดยคลิกที่ปุ่ม


21

เป้าหมายคือเสนอปุ่ม / เลือกแบบหล่นลงหรือคล้ายกันเพื่อสลับส่วนต่อประสานสาธารณะ1)ภาษาได้ทันที

สิ่งที่ฉันกำลังค้นหา

  • ปลั๊กอินหรือรหัสธีม ...
  • ... หรือไอเดีย
  • การใช้วิธีแก้ไขปัญหาด้วยload_textdomain()จะทำให้การแปลเป็นไฟล์. po / .mo
  • แนวคิดเกี่ยวกับวิธีแยกสตริงลงในส่วนต่อประสาน (เช่นไฟล์ ajax / plain php / ini, json, xml) เมื่อไม่พึ่งพาฟังก์ชันข้อความโดเมนบางตัว

บันทึก:

1)มันไม่เกี่ยวกับการเผยแพร่ในภาษาต่าง ๆ

2)ฉันไม่จำเป็นต้องใช้รหัสในการสร้างปุ่มแบบเลื่อนลง / ปุ่ม / อะไรก็ตาม เป็นเพียงเกี่ยวกับรหัส / ระบบที่ส่งมอบสตริงสำหรับ UI

ขอบคุณ!


1
หากคุณสามารถชำระสำหรับการรีเฟรชหน้าการกำหนดWPLANGค่าคงที่ใหม่อาจเป็นตัวเลือก ฉันทำอย่างนั้นกับสองไซต์ที่มีเนื้อหาหลายภาษาซึ่งปลั๊กอินการพูดได้หลายภาษาไม่สามารถกระตุ้นการแปล UI หากต้องเป็นโซลูชัน AJAX / JSON ฉันจะไม่รู้วิธีช่วยเหลือ
Johannes Pille

@ JohannesPille คุณต้องการสลับจุดใด Btw: คุณสามารถย้ายคำตอบนั้นได้หรือไม่ ลงคะแนนแล้ว ขอบคุณ
ไกเซอร์

ฉันทำมันในปลั๊กอินไม่มีส่วนเกี่ยวข้อง มันเป็นการแก้ไขที่สกปรกมากและฉันก็ไม่ได้ภูมิใจในมันเท่าไหร่ แต่มันก็ทำได้สำเร็จในเวลานั้น คุณสามารถดูรหัสของปลั๊กอินในpastebinนี้ มันคืออะไรอธิบายตนเอง เว็บไซต์ที่ฉันคัดลอกมาใช้ประโยชน์จาก WPML เวอร์ชันฟรีล่าสุด ยุติธรรมพอย้ายไปที่คำตอบ
Johannes Pille

ดูเหมือนว่า URL pastebin จะตาย
PapaFreud

@JohannesPille คุณคิดว่าการโพสต์รหัสของคุณเป็นการอัปเดตไปยัง Q ของคุณหรือเพิ่ม pastebin ที่ยังไม่หมดอายุ
ไกเซอร์

คำตอบ:


15

วิธีที่ดีที่สุด (ง่ายที่สุด) คือการใช้ตัวกรองตำแหน่งที่ตั้ง (ภายในget_locale())

ก่อนอื่นให้ตั้งค่าฟังก์ชั่นอย่างรวดเร็วสำหรับการดึงภาษาอื่นเพื่อใช้กับlocaleตัวกรอง

/**
 * A function returns with returns the user's selectd locale, if stored. 
 */
function wpse35622_get_new_locale($locale=false){
$new_locale = get_user_meta(get_current_user_id(), 'wpse_locale', true);
    if($new_locale)
        return $new_locale;

    return $locale;
}

ฉันทิ้งนี่ไว้เป็นฟังก์ชั่นระดับโลกอาจจะมีประโยชน์ ... ส่วนที่เหลือของปลั๊กอินที่ฉันห่อไว้ในชั้นเรียน

มันสร้างเมนูแบบหล่นลงของภาษาที่คุณสามารถเลือกได้

ข้อเสีย

  • การค้นหาไฟล์ในรูปแบบwp-content/languages xx_xx.moหากไม่ใช่แบบฟอร์มนั้น (ไม่ใช่ไฟล์. mo ทั้งหมด) ปลั๊กอินจะไม่มารับ!
  • รายการแบบหล่นลงให้รายชื่อของสถานที่ที่พบให้เลือก แต่สิ่งเหล่านี้จะแสดงในรูปแบบ 'xx_xx` ของสถานที่ไม่เป็นวิธีที่เป็นมิตรกับมนุษย์ - ความคิดใด ๆ ??
  • ไม่$localeทำอะไรอื่นนอกเหนือจากภาษา? ถ้าเป็นเช่นนั้นก็ยังคงเป็นไปได้ที่จะได้รับสถานที่เดียวกัน แต่ให้การแปลทางเลือก มันเป็นเรื่องที่ยุ่งมาก ...

รหัส

class SH_Pick_Lang{
    /**
     * A unique name for this plug-in
     */
    static $name ='sh_pick_lang';

    /**
     * Hook the functions
     */
    public function __construct(){

        if( isset($_POST[self::$name]) ){
            add_action('locale',array($this,'update_user'));
        }
        add_filter( 'locale', 'wpse35622_get_new_locale',20 );
        add_action( 'wp_before_admin_bar_render', array( $this, 'admin_bar') );
    }

    /**
     * Update the user's option just in time! Only once mind...
     */
    function update_user($locale){
        $save_locale = $_POST[self::$name];
        update_user_meta(get_current_user_id(), 'wpse_locale', $save_locale);
        remove_filter(current_filter(),__FUNCTION__);
        return $locale;
    }

    /**
     * Add a really horrible looking dropdown menu that I'm sure Kaiser will make look fantastic.
     */
    function admin_bar(){
        global $wp_admin_bar;

        $wp_admin_bar->add_menu( array(
            'id'        => 'shlangpick',
            'title'     => $this->wpse_language_dropown(),
        ) );
    }

    /**
     * Generates a list of available locales.
     * Searches the wp-content/languages folder for files of the form xx_xx.mo
     * 
     * TODO Not all locales are of the form xx_xx.mo - we might miss some.
     * TODO Better way of gettin gthe wp-content/languages folder without a constant?
     */
    function wpse_language_dropown(){
         $name = self::$name;
         $locale = get_locale();
         $langs = get_available_languages();
         $langs[] = 'en_US';

         //For the labels (format_code_lang)
         require_once( ABSPATH . 'wp-admin/includes/ms.php');

         $html = "<form method='post'> ";
         $html .= "<select name='{$name}'>";
         foreach($langs as $lang){
              $label = format_code_lang( $lang );
              $html .= "<option ".selected( $lang, $locale, false)." value='{$lang}'>{$label}</option>";
        }
         $html .= "</select>";
         $html .= get_submit_button('Change Language','secondary', 'submit', true);
         $html .= "</form >";

         return $html;
    }

} // END Class

//Initiate...
$sh_pick_lang = new SH_Pick_Lang();

1
ลงคะแนนเสร็จแล้ว (loughing เกี่ยวกับความคิดเห็นแบบอินไลน์ทั้งหมดเช่นกัน) เงินรางวัลจะถูกตั้งค่าและจะมอบให้กับคุณทันทีที่ฉันได้รับอนุญาต (ปล่อยทิ้งไว้ 23 ชั่วโมงชี้ให้ฉันถ้าลืม)
ไกเซอร์

2
อัปเดตเพื่อสะท้อนคำตอบสำหรับคำถามนี้
Stephen Harris

N1ce หนึ่ง บุ๊คมาร์ค +1
Johannes Pille

ฉันสังเกตเห็นว่าเพียงรวมถึง'wp-admin/includes/ms.php'ทริกเกอร์ประกาศผู้ดูแลระบบสำหรับการอัปเดตเว็บไซต์เครือข่ายของคุณ (เมื่อคุณเป็นไซต์เดียว!) อาจเป็นได้ว่าformat_code_lang()จะต้องมีการทำซ้ำภายในฟังก์ชั่นที่กำหนดเอง
Stephen Harris

ฉันเพิ่มส่วนสำคัญในการล้างข้อมูลของฉัน - ไม่มีการทดสอบในขณะที่ฉันยุ่งกับโฟลเดอร์ปลั๊กอินในปัจจุบันและนั่นหมายความว่าไม่มีปลั๊กอินตัวอื่นทำงานได้ หวังว่าคุณจะสามารถทำงานร่วมกับแก่นสารที่ให้ไว้และอาจแยก / อัปเดต ฉันสามารถให้รางวัลเงินรางวัลได้ภายในครึ่งชั่วโมง แต่ต้องไปก่อนแล้วดังนั้นฉันจะส่งพรุ่งนี้ ขอบคุณสำหรับทุกการทำงานของคุณ - ควรจะอยู่ในการติดตั้งเริ่มต้นใด ๆ :)
Kaiser

5

หากคุณสามารถชำระสำหรับการรีเฟรชหน้าการกำหนดWPLANGค่าคงที่ใหม่อาจเป็นตัวเลือก ฉันทำอย่างนั้นกับสองไซต์ที่มีเนื้อหาหลายภาษาซึ่งปลั๊กอินการพูดได้หลายภาษาไม่สามารถกระตุ้นการแปล UI


อืม .. คุณสามารถใช้ ajax เพื่อแทนที่ body หรือแท็ก html ทั้งหมดของหน้าสำหรับเรื่องนั้นหลังจากรันโค้ดข้างต้น (ในคำขอ ajax เดียวกัน) บนปุ่มของคุณหรืออะไรทำนองนั้น
Joshua Abenazer

+1 เพียงแค่ดูที่ Pastebin ของคุณ หมายความว่าการตั้งค่าของคุณhttp://example.com/language/whatever/ใช่ไหม
ไกเซอร์

@kaiser Yup นั่นคือการตั้งค่าบนเว็บไซต์ที่มีรหัสมา หากคุณสนใจภาษา UI เท่านั้นให้ส่งผ่านสตริงการสืบค้น URL หรือตั้งค่า$_SESSIONตัวแปรเพื่อให้มีการกำหนดนิยามใหม่ของWPLANGpageload ถัดไป หากคุณสนใจที่จะทำซ้ำสิ่งนี้บนเว็บไซต์ที่พูดได้หลายภาษาโปรดทราบว่าในขณะที่ความคิดเห็นกับ pastebin บอกว่ารหัสในการทำงานกับ WPML รุ่นฟรีล่าสุด ไม่สามารถจำลองแบบ 1 ต่อ 1 ด้วย qTranslate เนื่องจาก URI เหล่านั้นไม่ได้มีอยู่จริง แต่ถูกเขียนใหม่ผ่านmod_rewriteโมดูล apache ฉันแน่ใจว่าสามารถปรับได้ แต่จะไม่ทำงาน "ตามสภาพ"
Johannes Pille

ฉันจะไม่ใช้ qTranslate หรือ WPML มันเกี่ยวกับภาษา UI เท่านั้นจริงๆ โฆษณา$_SESSION) ปัญหาของฉันคือ Afaik พวกเขาค่อนข้างยากที่จะจัดการและสิ่งต่าง ๆ ระหว่างกลมกลืนและอาร์เรย์สามารถผสมกันได้อย่างง่ายดาย ดังนั้นถ้าฉันพยายามหาวิธีที่จะเปลี่ยนแปลงWPLANGฉันก็ต้องหาวิธีที่มั่นคงในการขอจากที่หนึ่งไปยังอีกที่หนึ่ง บางทีadd_query_arg/get_query_varจะทำเคล็ดลับ ...
Kaiser

ฉันแค่คิดถึงเรื่องนี้อีกครั้ง (วิธีแก้ปัญหายังไม่ได้สร้างไว้ในโครงการ): คุณช่วยห่อมันให้เป็นอาแจ็กซ์ได้ไหม? ฉันคิดว่านี่จะเป็นวิธีที่ดีที่สุดในการหลีกเลี่ยงสิ่งนี้ ฉันต้องการปิด Q และทำเครื่องหมายเป็นวิธีแก้ปัญหา :) ขอบคุณ
ไกเซอร์

2

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 และแม้ว่ามันจะไม่ได้เยื้องอย่างถูกต้อง (พระเจ้าที่ดี!)


3
อาจมีวิธีแก้ปัญหาฝังอยู่ในความลึกของรหัสนี้ แต่มันใกล้จะเป็นไปไม่ได้ที่จะคิดออกทุกวิธีเพราะมันไม่ได้เขียนใน OOP หากคุณทราบว่าการตรวจจับภาษาอยู่ตรงไหน (สิ่งที่เบราว์เซอร์) และวิธีการกรองสตริง gettext โปรดแจ้งให้เราทราบ
ไกเซอร์

1
@kaiser - ดูการแก้ไขฉันสำหรับ "สิ่งที่เบราว์เซอร์"
krembo99

1
@kaiser .. และดูการแก้ไข II สำหรับ "ข้อมูลเบราว์เซอร์" เพิ่มเติม - และแก้ไข III สำหรับวิธีรวม "ข้อมูลเบราว์เซอร์" ไว้ใน "เบราว์เซอร์ (เนื้อหา)"
krembo99

ตกลงฉัน upvote มัน (ไม่ downvote เพื่อย้อนกลับที่นี่) สำหรับความพยายามของคุณ ความคิดที่ใช้คุกกี้เป็นสิ่งที่ดี อย่างไรก็ตาม here're บันทึกบาง: require()แก้ไขครั้งที่สองจะโยนข้อผิดพลาดหลังจากที่ คุณไม่สามารถใช้define()กับสตริงเดียวกันสองครั้ง แก้ไข III มีปัญหาบางอย่างกับภาษา การเลือกen_USจะไม่ทำอะไรเลย (?) แต่de_DEจะตั้งเป็นEnglish;) เพื่อสรุป: ฉันมอบรางวัลและมอบให้ (เช่น StephenHarris) สำหรับคำตอบที่สมบูรณ์และใช้งานได้ หากคุณได้รับสิ่งนั้นโปรดอัปเดตคำตอบของคุณ (น่าสนใจเกี่ยวกับคุกกี้) และฉันอาจเพิ่มและให้รางวัลแก่คุณ
ไกเซอร์

โปรดอย่าแสดงความคิดเห็นสำหรับฉัน แก้ไขคำตอบของคุณเพื่อให้ทุกคนสามารถอ่านแนวคิดของคุณได้ Sidenote: ควรเพิ่มรหัสภายนอกimhoเป็น plugin / MU-Plugin / Theme / DropIn เพื่อให้เคลื่อนย้ายได้
ไกเซอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.