如何在现有的Web项目上实现翻译?

Iva*_*van 5 php multilingual translation internationalization

我救出了一个原本只为西班牙观众写的旧项目,现在我必须把它国际化.

该项目有3种文本字符串:

  • 从PHP编写的字符串:例如:echo"Hello world"
  • 数据库字段中的短字符串:包含文本的数据库字段,例如国家/地区名称列表.
  • HTML嵌入字符串(静态文件):例如包含HTML文件的静态文件:<html>...<body>...<p>Hello world</p>...
  • HTML嵌入字符串(数据库):与上面相同,但HTML文件插入数据库中的文本字段.

首先不是问题,因为实际上很少有字符串并且非常本地化.第二种情况也非常本地化,所以这不是一个大问题.但最后2个案例是无法诠释的:数百个HTML文件(静态+数据库)里面有数百个字符串.

所以,我正在寻找一种自动化方法,将所有字符串提取为可识别的格式,将其提供给翻译人员,然后将我的页面用于其他语言.

是否存在类似的东西,还是应该创建自定义解决方案?在这种情况下,任何想法?

Mer*_*kos 8

好.I18n(国际化)是一件非常奇怪的事情.您必须对代码进行许多更改才能使其更加多语言化.

对我来说,最好的解决方案是在已经支持多层I18n的CakePHP上移动它.但是这个解决方案会让你花费很多时间.所以....

翻译内部文本的快速方法

echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

要么

<p>Hello World</p>
Run Code Online (Sandbox Code Playgroud)

是为每种语言创建一个带有php扩展的适当语言文件(例如:es.php,el.php,en.php,等等),它将包含一个带有键和值的数组,如下所示:

$l = array(
   'WEB_TITLE' => 'My web site title',
   'GEN_HELLO' => 'Hello World',
   'MENU_HOME' => 'Home',
   'MENU_PRODUCTS' => 'Products',
   ...
);
Run Code Online (Sandbox Code Playgroud)

然后进入您的网站,您必须在每个页面的最开始加载相应的语言文件,然后在您的页面中,您必须执行以下操作:

echo $l['GEN_HELLO'];
Run Code Online (Sandbox Code Playgroud)

<p><?php echo $l['GEN_HELLO']; ?></p>
Run Code Online (Sandbox Code Playgroud)

这是您的应用程序的前端.现在要使您的数据多语言,您必须在某些方面更改数据库结构.

让我们说你有那张桌子

ARTICLES
id    Title    Content   Date   Active
Run Code Online (Sandbox Code Playgroud)

在上述结构中,您必须使Title和Content I18n兼容.为了翻译那些列,您必须创建另一个在示例ARTICLES_L中调用的表

ARTICLES_L
ID    POST_ID    COLUMN    LANGUAGE    CONTENT
Run Code Online (Sandbox Code Playgroud)

在上表中,您必须存储文章ID,翻译所属的列(即:标题)语言和翻译的内容.

所以,如果你在ARTICLES中有这些记录

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
Run Code Online (Sandbox Code Playgroud)

表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
....
Run Code Online (Sandbox Code Playgroud)

实际上还有许多其他任务你需要做,但这是我给你的解决方案背后的想法:)

祝好运

PN:对于应用程序的前端更好的是使用http://php.net/manual/en/book.gettext.php 这种方式是从WordPress和CakePHP使用的方式,但是在非常低的级别: ?看看吧.这比为每种语言创建文件要好.