好的。 I18n(国际化)是一个很奇怪的东西。您必须对代码进行许多更改才能使其成为多语言。
对我来说,最好的解决方案是将它移到已经在许多层中支持 I18n 的 CakePHP 上。但是这个解决方案会让你花费很多时间。所以....
一种快速翻译内部文本的方法,例如
echo "Hello World"
或
<p>Hello World</p>
为每种语言(即:es.php、el.php、en.php 等)创建一个带有 php 扩展名的适当语言文件,该文件将包含一个包含键和值的数组,如下所示:
$l = array(
'WEB_TITLE' => 'My web site title',
'GEN_HELLO' => 'Hello World',
'MENU_HOME' => 'Home',
'MENU_PRODUCTS' => 'Products',
...
);
然后在您的网站中,您必须在每个页面的开头加载适当的语言文件,然后在您的页面中执行以下操作:
echo $l['GEN_HELLO'];
和
<p><?php echo $l['GEN_HELLO']; ?></p>
这是您的应用程序的前端。现在要使您的数据多语言化,您必须以某种方式更改数据库结构。
假设你有那张桌子
ARTICLES
id Title Content Date Active
在上述结构中,您必须使 Title 和 Content I18n 兼容。为了翻译这些列,您必须创建另一个名为示例 ARTICLES_L 的表,看起来像这样
ARTICLES_L
ID POST_ID COLUMN LANGUAGE CONTENT
在上表中,您必须存储文章 id、翻译所属的列(即:标题)语言和翻译内容。
所以如果你在文章中有这些记录
ARTICLES
id Title Content Date Active
1 Title 1 This is content 1 2011-10-01 13:28:45 1
2 Title 2 This is content 2 2011-10-01 13:28:45 1
3 Title 3 This is content 3 2011-10-01 13:28:45 1
表 ARTICLES_L 将包含这些记录
ARTICLES_L
ID POST_ID COLUMN LANGUAGE CONTENT
1 1 title es_ES Título 1
2 1 content es_ES Este es el contenido 1
3 1 title el_GR Τίτλος 1
4 1 content el_GR Αυτό είναι το περιεχόμενο 1
5 2 title es_ES Título 2
6 2 content es_ES Este es el contenido 1
....
实际上,您还有许多其他任务需要完成,但这就是我给您的解决方案背后的想法 :)
祝你好运
PN : 更好的应用程序前端是使用http://php.net/manual/en/book.gettext.php
这种方式是 WordPress 和 CakePHP 使用的方式,但级别非常低:?看看吧。这比为每种语言创建文件要好。