我认为为每种语言设置单独的文件不是一个好主意。您可以使用其他一些易于实现的技术轻松完成。
在处理我的一个 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...”。并且必须将翻译写入文本字段。
保存时,翻译将存储在特定语言文件中,用于选择翻译的特定语言。
使用此方法,您将来可以添加任意数量的语言,而无需为每种语言创建视图文件,因此非常灵活。
我希望我已经解释得足够多,这样您就可以了解实现翻译系统的难易程度,并避免为每种语言单独查看文件。
如果您有任何问题,请随时在此处与我联系。
谢谢