codeigniter 中基于 cookie 值的本地化

问题描述 投票:0回答:1

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

基本上 codeigniter 遵循 mvc 模式,所以它非常好。现在我陷入了本地化。 我不想更改网址,以便

/Company/About
在英语和德语中保持不变。我在 asp.net 中的内部视图
Views/Index.cshtml
作为德语默认页面,
Views/Index.en.US.cshtml
作为英语本地化页面。

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

  1. 用户点击国旗
  2. 基于 1. 步骤值 cookie 中填充了国家/地区值
  3. 帮助程序将所需的线程加载到当前线程中
  4. 视图已本地化

如何将这种方法应用于 codeigniter,或至少类似?

php codeigniter
1个回答
1
投票

我认为为每种语言创建单独的文件并不是一个好主意。您可以使用一些其他易于实现的技术轻松完成。

在从事我的一个 CI 项目时,我需要使其支持多种语言。由于我在 Prestashop 等其他多语言系统中工作,因此我借鉴了那里的想法并将其实施到我的 CI 项目中。

我的实现如下:

  1. 我正在将单词存储在语言文件中。每种语言都有其名为语言 ISO 代码的单个文件,例如英语,其名称为 en.php 在此语言文件中,单词存储为数组中的file_name_md5(单词的),如下所示,视图文件中的Hello World你好.php .

    $_lang = 数组( 'hello_b10a8db164e0754105b7a99be72e3fe5' => '你好世界', ... ... ... )

$_lang关联数组的键是要翻译的文件名后面的世界,值是翻译结果。

存储单词以及从这些语言文件中提取单词,由我创建的翻译库处理。

  1. 视图文件中的所有静态文本都是用英文编写的。我为其创建了辅助函数,名为 "l" ,小 L 。假设我想要 Hello world 在我看来(比如 hello.php)并且应该被翻译成多种语言。所以我认为我这样写

    l('你好世界...', '你好')?>
  2. 现在 l 辅助函数对传递给它的参数执行小操作。它获取世界的 md5 并将其附加到文件名,如上面所示。然后它调用我的翻译库的成员函数,该函数会查找 $_lang 数组以查找匹配项。如果找到匹配,则返回翻译。如果没有找到该单词的翻译,则 l 辅助函数将返回原始文本。

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

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

    l('你好世界...', '你好')?>

代码生成一个表单,其中为每个单词创建一个文本字段。文本字段名称与 $_lang 数组键相同,例如 filename_md5_of_word 。在本例中,文本字段标签是原始单词“Hello World...”。并且翻译必须写入文本字段。

保存时,翻译将存储到所选翻译的特定语言的特定语言文件中。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.