如何通过按钮单击实现语言切换?

时间:2017-09-19 10:10:10

标签: php codeigniter

首先加载配置文件,因此从那里选择默认语言。 但我需要通过按钮点击动态更改默认语言。我怎样才能做到这一点? 在我的控制器中我有

public function __construct()
    {
        parent::__construct();

        $this->config->set_item('language', 'japanese');
        $this->load->helper('language');
        $this->lang->load('fileimport');
        var_dump(lang('message_missing_csvfile_import'));

    }

这将以日语显示值

config.php如下:

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

autoload.php如下:

$autoload['language'] = array(
    'application'
);

我的观点如下:

<form action ='<?php echo current_url(); ?>' enctype =
 'multipart/form-data' method ='post' name="formtest" id="formtest">

             <div>
                 <select id="main_language" name ="main_language">
                     <option>English</option>
                   <option>Japanese</option>
                </select>
                <input id="main_lang_button" type="button" value="Set Main Language">
            </div></form>

2 个答案:

答案 0 :(得分:2)

从表单中获取值后,将其放入cookie中。这样的事情:

/* form validation here */

// ...

// After you know it's a valid value:
setcookie('language', $_POST['main_language'], 0, '/');

然后在 application / config / config.php 中使用该cookie:

$allowed_languages = array('English', 'Japanese');
if (isset($_COOKIE['language']) && in_array($_COOKIE['language'], $allowed_languages, true)) {
    $config['language'] = strtolower($_COOKIE['language']);
} else {
    $config['language'] = 'english';
}

请注意,您还需要验证Cookie。无论您是否设置它,它都是用户输入。

当然,此配置默认为“英语&#39;根据您仍在处理表单的请求。只需确保在设置Cookie后进行重定向,您就可以解决该问题。

答案 1 :(得分:1)

您可以针对您的问题尝试此解决方案。

  

请更改My_controller以进行语言更改。

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if(!$this->session->userdata('language')) {
            $this->session->set_userdata('language','japanese');
        }
        $this->lang->load('language_name',$this->session->userdata('language'));
    }
} ?>
  

您可以为语言添加设置会话任何您的控制器为ex。   仪表板控制器。

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
class Dashboard extends CI_Controller {
   public function change_language($lang = 'japasese') {
        if($this->input->is_ajax_request()) {
            $this->session->set_userdata('language',(($lang=='japasese') ? 'japasese' : 'english'));
            echo true;
        } else {
            redirect('login');
        }
    }
} ?>
  

您可以将视图文件设置为

<form action ='#' enctype ='multipart/form-data' method ='post' name="formtest" id="formtest">
    <select id="main_language" name ="main_language">
        <option value="english">English</option>
        <option value="japasese">Japanese</option>
    </select>
</form>
  

添加Scrip文件。

<script type="text/javascript">
    base_url = '<?=base_url()?>';
    $(document).on('change', '#main_language', function () {
        lang = $('#main_language').val();
        $.ajax
         ({
             'type': 'GET',
             'url': base_url + 'dashboard/change_language/'+lang,
             'success': function(response){
                 window.location.reload();
             }
         });
    });
</script>

我希望这会对你有所帮助。