0

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

基本上,codeigniter 遵循 mvc 模式,所以没问题。现在我被困在本地化上。我不想更改网址,以便/Company/About在英语和德语中保持不变。内部视图我在 asp.netViews/Index.cshtml中作为德语和Views/Index.en.US.cshtml英语本地化页面的默认设置。

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

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

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

谢谢

4

1 回答 1

1

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

在处理我的一个 CI 项目时,我需要让它支持多种语言。由于我在 Prestashop 等其他多语言系统中工作,所以我从那里借鉴了一些想法并在我的 CI 项目中实现了它。

我已按如下方式实现它:

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

$_lang = array(
      'hello_b10a8db164e0754105b7a99be72e3fe5' => 'hallo Welt',
      ...
      ... 
      ...
    )

$_lang 关联数组的键是世界附加文件名,要翻译,值是翻译。

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

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

<?=$this->l('Hello World...', 'hello')?>

3) 现在l辅助函数对传递给它的参数执行小操作。如上所示,它需要世界的 md5 并附加文件名。然后它调用我的翻译库的成员函数,该函数查看 $_lang 数组以找到匹配项。如果找到匹配项,则返回翻译。如果没有找到该单词的翻译,则l辅助函数返回原始文本。

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

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

<?=$this->l('Hello World...', 'hello')?>

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

保存时,翻译将存储在特定语言文件中,用于选择翻译的特定语言。

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

我希望我已经解释得足够多,这样您就可以了解实现翻译系统的难易程度,并避免为每种语言单独查看文件。

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

谢谢

于 2013-05-21T06:33:15.203 回答