簡體   English   中英

多語言網站的會議-Codeigniter

[英]session with multilingual website - codeigniter

我遵循了本教程,但是在下拉菜單中選擇其他語言時,文本不會切換為另一種語言。 重定向有效。

我正在使用數據庫會話,並且數據庫中的site_lang值已正確更改。 在我看來,我做了一個print_r($return_lang)return_lang$data['return_lang'] = $this->session->all_userdata(); 結果是:

數組([__ci_last_regenerate] => 1458691563)

似乎site_lang從來沒有出現過。 僅在數據庫中。 我不知道怎么了。

我使用了本教程的Hooks方法,在language文件夾下創建了3個語言文件,並在htaccess中輸入了以下內容(來自另一本教程):

RewriteRule上的RewriteEngine ^(。*)$ index.php / $ 1 [PT,L]

RewriteCond $ 1!^(index.php)

這是我的homeController:

<?php
class homeController extends CI_Controller{
    public function index(){
        $data['main_content'] = 'home';
        $data['return_lang'] = $this->session->all_userdata();
        $this->load->view('templates/default',$data); 
    }
    function initialize() {
        $ci =& get_instance();
        $ci->load->helper('language');
        $siteLang = $ci->session->userdata('site_lang');
        if ($siteLang) {
            $ci->lang->load('message',$siteLang);
        } else {
            $ci->lang->load('message','english');
        }
    }
}

其他文件與本教程中描述的文件完全相同。

LanguageSwitcher.php有我不懂的一行:

函數switchLang($ language =“”){

為什么我們將語言設置為"" 我試圖刪除= "" ,但仍然沒有幫助...

更新1:

我發現了問題之一:

$config['base_url']設置為' '只有在URL中使用127.0.0.1而不是localhost時,我才得到預期的行為。

然后,我更改為:

$config['base_url'] = 'http://localhost/mySite/';

但是它僅在URL中使用localhost時有效。

使用$config['base_url'] = 'http://127.0.0.1/mySite/'; 使它在使用URL欄中的IP地址時才能正常工作。

我想讓它適用於任何東西(本地主機和IP地址)。 當我說它不能按預期工作時, [site_lang]會話中未填充english / french / german。

LangSwitcher.php CI中使用LangSwitcher.php ,這是我的工作代碼:

your_controller.php

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

        $lang = $this->session->userdata('site_lang');      
        $this->lang->load("message",$lang);
}

LanguageSwitch.php(控制器)

<?php
class LangSwitch extends CI_Controller
{
    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
    }

    function switchLanguage($language = "") {
        $language = ($language != "") ? $language : "english";
        $this->session->set_userdata('site_lang', $language);               
        $url = (null !== $this->session->userdata('ciutat_name')) ? $this->session->userdata('ciutat_name') : "tria_ciutat";  

        redirect(base_url($url));
    }
}

然后,對於每個lang語言文件夾,您必須具有不同的文件夾,例如:english,French,所有文件名為: message_lang.php

用這種方式翻譯:

$lang["text"]   = "Text in english";

在視圖中,每次需要使用翻譯時都使用此方法: <?php echo lang('text'); ?> <?php echo lang('text'); ?>

而要切換到lang,您應該轉到: <?php echo base_url('langswitch/switchLanguage/english'); ?> <?php echo base_url('langswitch/switchLanguage/english'); ?>

結構為:

/controllers:
 - your_controllers.php //here in the __construct set the lang
 - langswitch.php //the langswitcher

/languages
  /english: message_lang.php  //here the translations
  /french: message_lang

/views
  your_views.php  //here you use lang()

希望它對您有所幫助或對您的問題有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM