我正在尝试将 asp.net mvc 应用程序重写为 codeigniter。
基本上 codeigniter 遵循 mvc 模式,所以它非常好。现在我陷入了本地化。 我不想更改网址,以便
/Company/About
在英语和德语中保持不变。我在 asp.net 中的内部视图 Views/Index.cshtml
作为德语默认页面,Views/Index.en.US.cshtml
作为英语本地化页面。
我将描述在我的 asp 网站上完美运行的场景。
如何将这种方法应用于 codeigniter,或至少类似?
我认为为每种语言创建单独的文件并不是一个好主意。您可以使用一些其他易于实现的技术轻松完成。
在从事我的一个 CI 项目时,我需要使其支持多种语言。由于我在 Prestashop 等其他多语言系统中工作,因此我借鉴了那里的想法并将其实施到我的 CI 项目中。
我的实现如下:
我正在将单词存储在语言文件中。每种语言都有其名为语言 ISO 代码的单个文件,例如英语,其名称为 en.php 在此语言文件中,单词存储为数组中的file_name_md5(单词的),如下所示,视图文件中的Hello World你好.php .
$_lang = 数组( 'hello_b10a8db164e0754105b7a99be72e3fe5' => '你好世界', ... ... ... )
$_lang关联数组的键是要翻译的文件名后面的世界,值是翻译结果。
存储单词以及从这些语言文件中提取单词,由我创建的翻译库处理。
视图文件中的所有静态文本都是用英文编写的。我为其创建了辅助函数,名为 "l" ,小 L 。假设我想要 Hello world 在我看来(比如 hello.php)并且应该被翻译成多种语言。所以我认为我这样写
l('你好世界...', '你好')?>现在 l 辅助函数对传递给它的参数执行小操作。它获取世界的 md5 并将其附加到文件名,如上面所示。然后它调用我的翻译库的成员函数,该函数会查找 $_lang 数组以查找匹配项。如果找到匹配,则返回翻译。如果没有找到该单词的翻译,则 l 辅助函数将返回原始文本。
我创建了自己的控制器库,我的所有控制器都从中扩展。为了保留 CI 功能,我的父控制器是从默认 CI 控制器扩展而来的。在我的父控制器中,我根据用户语言加载语言文件。这样,翻译库就可以使用 $_lang 数组来查找单词。
在我的管理端,我创建了一个翻译系统,它读取我的所有视图文件以获取特定模式,如下所示
l('你好世界...', '你好')?>代码生成一个表单,其中为每个单词创建一个文本字段。文本字段名称与 $_lang 数组键相同,例如 filename_md5_of_word 。在本例中,文本字段标签是原始单词“Hello World...”。并且翻译必须写入文本字段。
保存时,翻译将存储到所选翻译的特定语言的特定语言文件中。
使用此方法,您将来可以添加任意数量的语言,而无需为每种语言创建视图文件,因此非常灵活。
我希望我已经解释得足够多了,这样您就可以了解如何轻松地实现翻译系统,并避免为每种语言使用单独的视图文件。