Php 控制器上的Codeigniter多语言

Php 控制器上的Codeigniter多语言,php,codeigniter,multilingual,Php,Codeigniter,Multilingual,我使用的是codeigniter多语言,效果很好。问题是当我尝试在URL中使用多语言时。。。我怎么做 我的意思是控制器必须是一个文件,有一个名称,还有它的功能。。。所以我不知道该怎么做 我认为唯一的选择是为我需要的每种语言创建相同的控制器。。。但这只是为了更改控制器和函数的名称而重复了很多代码。。。而且维护也会是个大麻烦 有什么帮助吗?将语言指示器作为“获取”值传递给控制器功能: 例如 然后在控制器中像这样使用它: /** * @desc This will get calle

我使用的是codeigniter多语言,效果很好。问题是当我尝试在URL中使用多语言时。。。我怎么做

我的意思是控制器必须是一个文件,有一个名称,还有它的功能。。。所以我不知道该怎么做

我认为唯一的选择是为我需要的每种语言创建相同的控制器。。。但这只是为了更改控制器和函数的名称而重复了很多代码。。。而且维护也会是个大麻烦


有什么帮助吗?

将语言指示器作为“获取”值传递给控制器功能: 例如

然后在控制器中像这样使用它:

    /**
     * @desc This will get called when no method specified 
     * Will show home page (list of items)
     */
    function inventory($lang="en",$from=0){

        // load proper language file
        $this->lang->load('language_filename', $lang);

        // generate db where clause
        $where = array(
            "published"=>"1",
            "language"=>$lang
        );

        // paging
        $this->_setPagingLinks($this->newsModel->getTotalRecordsNumber($where),10,4,"inventory/".$lang,$lang);

        // loading items from db
        $this->data["news"] = $this->newsModel->getRecords($where,$from,10,"time");

        // load the view according to language
        $this->data["content"] = $this->load->view("$lang/news",$this->data,TRUE);
        $this->load->view("$lang/container",$this->data);
    }

这可能会有所帮助:您希望创建将语言作为参数的路由。通常这是第一个参数,例如
example.com/en/login
。在控制器中使用该参数加载语言文件等。您可以使用一个路由和一个控制器来完成此操作。@MatthewRapati我要问的问题是我想翻译url。。。example.com/en/login,好的,en段是动态的,但是控制器登录名将始终是“login”,我想翻译de controller和函数too@tereško这将帮助我,但我发现这很难。。。翻译的那部分urls@slayerbleast翻译URL不仅很复杂,而且还有其他各种问题。大多数国际网站在URL中使用
/en/
/de/
片段,其他所有内容都使用单一语言。您还可以使用类似于
/en/123/lorem ipsum
的内容,其中
“123”
实际上是文章的ID,
“lorem ipsum”
并不是真正用于路由。有点像帖子/用户链接。翻译页面内容没有问题,我已经做了。问题是,我也想翻译网址。在您的示例中,url仍然是基本url/controller/inventory/en。所有语言的控制器和函数清单都会被修复,就像我把你的问题搞错了一样。。是否要更改URL中的控制器类名?如果是的话,那么你可能想看看URI路由看看这个我在对我的问题的评论中回答了这个问题:(a)slayerbleast你可以在routes ellisab.com/codeIgniter/user-guide/general/Routing.html中使用正则表达式,这样你就可以做$route[':language/(apple)|(pomme)]–MatthewRapati(a)MatthewRapati,是的,我想了想。。。。但问题是,如果我这样做,我必须创建控制器“apple”和“pomme”。它们必须同时存在,并且它们将完全相同,但所有函数的名称都已翻译。。。这是一项繁重的工作,对mantain来说似乎很混乱。。想象一下,如果我有8种语言杀戮者
    /**
     * @desc This will get called when no method specified 
     * Will show home page (list of items)
     */
    function inventory($lang="en",$from=0){

        // load proper language file
        $this->lang->load('language_filename', $lang);

        // generate db where clause
        $where = array(
            "published"=>"1",
            "language"=>$lang
        );

        // paging
        $this->_setPagingLinks($this->newsModel->getTotalRecordsNumber($where),10,4,"inventory/".$lang,$lang);

        // loading items from db
        $this->data["news"] = $this->newsModel->getRecords($where,$from,10,"time");

        // load the view according to language
        $this->data["content"] = $this->load->view("$lang/news",$this->data,TRUE);
        $this->load->view("$lang/container",$this->data);
    }