Php 基于cookie值的codeigniter定位

Php 基于cookie值的codeigniter定位,php,codeigniter,Php,Codeigniter,我正在尝试将asp.net mvc应用程序重写为codeigniter 基本上,codeigniter遵循mvc模式,所以基本上是可以的。现在我陷入了本地化。 我不想更改url,以便/Company/About在英语和德语中保持不变。我在asp.netViews/Index.cshtml中的内部视图默认为德语,在Views/Index.en.US.cshtml中默认为英语本地化页面 我将描述在我的asp网站上完美运行的场景 用户点击国旗 基于1。步骤值cookie由国家值填充 助手将所需线程加载

我正在尝试将asp.net mvc应用程序重写为codeigniter

基本上,codeigniter遵循mvc模式,所以基本上是可以的。现在我陷入了本地化。 我不想更改url,以便
/Company/About
在英语和德语中保持不变。我在asp.net
Views/Index.cshtml
中的内部视图默认为德语,在
Views/Index.en.US.cshtml
中默认为英语本地化页面

我将描述在我的asp网站上完美运行的场景

  • 用户点击国旗
  • 基于1。步骤值cookie由国家值填充
  • 助手将所需线程加载到当前线程中
  • 视图是本地化的
  • 我如何将这种方法应用于codeigniter或至少类似的产品


    谢谢

    我认为为每种语言分别设置文件不是一个好主意。您可以使用其他一些易于实现的技术轻松地完成此任务

    在处理我的一个CI项目时,我需要使其支持多种语言。因为我在其他多语言系统中工作,比如Prestashop,所以我借鉴了那里的想法,并在我的CI项目中实现了它

    我已按以下方式实施:

    1) 我正在语言文件中存储单词。每种语言都有一个名为language ISO code的文件,就像英语一样,它的名称是en.php。在这个语言文件中,单词被存储为file\u name\u md5(单词)在如下数组中,用于查看文件Hello.php中的Hello World

    $_lang = array(
          'hello_b10a8db164e0754105b7a99be72e3fe5' => 'hallo Welt',
          ...
          ... 
          ...
        )
    
    $_lang关联数组的键是附加了要翻译的文件名的世界,值是翻译

    我创建的翻译库负责存储单词和从这些语言文件中提取单词

    2) 视图文件中的所有静态文本都是用英语编写的。我为它创建了一个名为“l”的助手函数,即小l。假设我想在我的视图(say Hello.php)中使用Hello world,并且应该翻译成多种语言。所以在我看来,我是这样写的

    <?=$this->l('Hello World...', 'hello')?>
    
    
    
    3) 现在,lhelper函数对传递给它的参数执行小操作。它采用世界上的md5,并将其附加到文件名中,如上面所示。然后它调用我的翻译库的一个成员函数,该函数查找$\u lang数组以找到匹配项。如果找到匹配项,则返回翻译。如果找不到该单词的翻译,则lhelper函数将返回原始文本

    4) 我已经创建了自己的控制器库,从中扩展了我的所有控制器。为了保留CI功能,将从默认CI控制器扩展父控制器。在父控制器中,我根据用户语言加载语言文件。这样翻译库就可以使用$_lang数组查找单词

    5) 在我的管理端,我创建了一个翻译系统,它可以读取我的所有视图文件,以获得一个特定的模式,如下所示

    <?=$this->l('Hello World...', 'hello')?>
    
    
    
    代码生成一个表单,其中为每个单词创建一个文本字段。文本字段名称与$\u lang数组键相同,如$\u word的filename\u md5\u。文本字段标签是本例中的原始单词“Hello World…”。翻译必须写入文本字段

    保存时,翻译将存储在选定进行翻译的特定语言的特定语言文件中

    使用此方法,您将来可以添加任意多的语言,而无需为每种语言创建视图文件,因此非常灵活

    我希望我已经解释得足够多了,这样您就可以了解如何轻松地实现翻译系统,并避免对每种语言使用单独的视图文件

    如果您有任何问题,请随时与我联系


    谢谢你

    从你以前的网站方法来看,最简单的方法似乎是按语言分隔模板文件,并根据cookies值设置路径:
    $this->load->view($language./file_name')。假设每种语言都需要单独的文件。