2015-06-23 9 views
5

मैं बहुभाषी वेब एप्लिकेशन बनाने के लिए CodeIgniter का उपयोग कर रहा हूं। मेरे पास /system/languages/ फ़ोल्डर के तहत अंग्रेजी और अन्य भाषाएं हैं और मैंने रन-टाइम पर काम करने वाली भाषा को बदलने के लिए जिम्मेदार मॉडल बनाया है।रन सत्यापन समय के दौरान बदलते समय फॉर्म सत्यापन अनदेखा करता है

डिफ़ॉल्ट रूप से CodeIgniter, के रूप में एक URI खंड मॉडल के हिसाब से भाषा बदल जाती है के अनुसार, /application/config/config.php

$config['language'] = 'french';

बाद में परिभाषित फ्रेंच में काम कर रहा है सरलीकृत उदाहरण bellow:

class multilang extends CI_Model { 
    public function __construct() { 
     parent::__construct(); 
     if ($this->uri->segment(1) == 'en') { 
      $this->config->set_item('language', 'english'); 
     } 
    } 
} 

यह मॉडल /application/config/autoload.php में ऑटो लोड सेटिंग्स के तहत सूचीबद्ध पहला मॉडल है और मैं यह पुष्टि कर सकता हूं कि भाषा वास्तव में कॉल करके गतिशील रूप से बदल दी गई है:

echo $this->config->item('language');

हालांकि फ़ॉर्म सत्यापन पुस्तकालय में बनाया खाते में बदली हुई भाषा नहीं ले करता है, बजाय केवल कठिन सेटिंग्स में कोडित भाषा से त्रुटि संदेश दायर इस मामले फ्रेंच में /application/config/config.php को दर्शाता है।

पहले मुझे लगता है कि ऐसा इसलिए था क्योंकि फॉर्म सत्यापन multilang मॉडल से पहले लोड किया गया था। यकीन है कि मॉडल पहले लोड किया गया था बनाने के लिए, मैं इस तरह कुछ और करने से पहले मॉडल लोड करने के लिए फ़ॉर्म सत्यापन निर्माता संशोधित:

public function __construct($rules = array()) 
{ 
    $this->CI =& get_instance(); 
    $this->CI->load->model('multilang'); 
    // normal code after.... 
} 

यह मॉडल फ़ॉर्म सत्यापन से पहले लोड सुनिश्चित किया। दुर्भाग्यवश यह पर्याप्त नहीं था और रन-टाइम के दौरान बदलते समय फॉर्म सत्यापन अभी भी भाषा को अनदेखा करता है। कोई जानता है कि ऐसा क्यों होता है?

धन्यवाद।

उत्तर

4

समस्या यह थी कि मैं AJAX अनुरोध कर रहा था जिसने यूआरआई सेगमेंट में ध्यान नहीं दिया था जिसमें भाषा संक्षेप था, क्योंकि एजीएक्स अनुरोधों के लिए यूआरआई को भाषा खंड की पहली जगह की आवश्यकता नहीं थी, इसलिए मैं पूरी तरह से इसके बारे में भूल गए।

इसलिए मैंने भाषा को स्टोर करने के लिए सत्र कुकी का उपयोग किया।

class multilang extends CI_Model { 
    public function __construct() { 
     parent::__construct(); 

     # store lang between session 
     $data = $this->session->all_userdata(); 

     if (isset($data['language'])) { 
      $lang = $data['language']; 
      # if lang was changed between sessions 
      if ($this->uri->segment(1) == 'fr'){ 
       $lang = 'french'; 
      } else if ($this->uri->segment(1) == 'en'){ 
       $lang = 'english'; 
      } 

      # if lang was changed using one of the lang abbreviations 
      # overule session setting 
      if ($this->uri->segment(1) == 'en') { 
       $lang = 'english'; 
      } else if ($this->uri->segment(1) == 'fr') { 
       $lang = 'french'; 
      } 

      $this->config->set_item('language', $lang); 
      $this->session->set_userdata('language', $lang); 
     } else { 
      if ($this->uri->segment(1) == 'en') { 
       $this->config->set_item('language', 'english'); 
       $this->session->set_userdata('language', 'english'); 
      } else if ($this->uri->segment(1) == 'fr') { 
       $this->config->set_item('language', 'french'); 
       $this->session->set_userdata('language', 'french'); 
      } 
     } 
    } 
} 

नोट:: करने के लिए multilang निर्माता बदलने form_validation निर्माता करने के लिए परिवर्तन की आवश्यकता नहीं थी।

उत्तर भविष्य के संदर्भ के लिए प्रदान किया गया उत्तर, और छोटी चीजों के लोगों को याद दिलाने के लिए हमें याद आती है। यह इतना स्पष्ट था! वैसे यह अगले भूलने में मदद कर सकता है।

बंद प्रश्न।

संबंधित मुद्दे