基于cookie值的codeigniter本地化

ojsjcaue  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

我正在尝试将asp.net的mvc应用程序重写为codeigniter。
基本上,codeigniter遵循mvc模式,所以它是相当不错的。现在我被困在本地化。我不想改变网址,以便/Company/About在英语和德语中保持相同。内部视图我在asp.net的Views/Index.cshtml作为德语和Views/Index.en.US.cshtml作为英语本地化页面的默认值。
我将描述在我的asp网站上运行完美的场景。
1.用户单击国家/地区国旗
1.基于1。步骤值cookie使用国家/地区值填充
1.帮助程序将所需线程加载到当前线程中
1.视图已本地化
我如何将这种方法应用于codeigniter,或者至少是类似的代码?

iyr7buue

iyr7buue1#

我认为为每种语言单独创建文件不是一个好主意。你可以使用其他一些容易实现的技术来轻松实现。
在我的一个CI项目中,我需要使它支持多种语言。因为我在其他多语言系统中工作,如Prestashop,所以我借鉴了那里的想法,并在我的CI项目中实现了它。
我已经实现了如下:
1.我将单词存储在语言文件中。每种语言都有一个名为语言ISO代码的文件,比如英语的名称是en.php在这个语言文件中,单词被存储为file_name_md5(单词的)在数组中,就像下面的Hello World在视图文件hello.php中一样。
$_lang = array('hello_b10a8db164e0754105b7a99be72e3fe5' => 'hallo Welt',...)
$_lang关联数组的键是要翻译的附加有文件名的世界,值是翻译。
存储单词和从这些语言文件中获取单词,由我创建的翻译库处理。
1.我在视图文件中的所有静态文本都是用英语写的。我为它创建了一个助手函数,叫做**“l”,小L。假设我想在我的视图中(比如说hello.php)Hello world,并且应该被翻译成多种语言。所以在我的视图中,我这样写它
l('Hello World.','hello')?>
1.现在,lhelper函数对传递给它的参数执行小操作。它获取世界的md5,并在其后面添加文件名,正如你在上面看到的那样。然后它调用我的翻译库的成员函数,该函数查看$_lang数组以查找匹配。如果找到匹配,则返回翻译。如果没有找到该单词的翻译,然后
l**helper函数返回原始文本。
1.我已经创建了自己的控制器库,所有的控制器都是从这个控制器库扩展的。为了保留CI功能,我的父控制器是从默认CI控制器扩展的。在我的父控制器中,我根据用户语言加载语言文件。这样,$_lang数组就可以供翻译库查找单词。
1.在我的管理方面,我已经创建了一个翻译系统,它读取我的所有视图文件的特定模式,如下面的一个
l('Hello World.','hello')?>
代码生成一个表单,其中为每个单词创建一个文本字段。文本字段名称与$_lang数组键相同,如filename_md5_of_word。文本字段标签是原始单词,在本例中为“Hello World..."。翻译必须写入文本字段。
保存时,翻译将存储在特定语言文件中,用于选择翻译的特定语言。
使用此方法,您将来可以添加任意多的语言,而无需为每种语言创建视图文件,因此它非常灵活。
我希望我已经解释得足够多了,这样你就可以理解实现翻译系统是多么容易,并避免为每种语言单独创建视图文件。

相关问题