【问题标题】:How to implement translation on a existing web project?如何在现有的 Web 项目上实现翻译?
【发布时间】:2011-10-01 10:11:39
【问题描述】:

我拯救了一个最初只为西班牙观众编写的旧项目,现在我必须将它国际化。

这个项目有3种文本字符串:

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

首先是没有问题的,因为字符串真的很少,而且非常本地化。第二种情况也非常本地化,所以这不是一个大问题。但最后两种情况难以处理:数百个 HTML 文件(静态 + 数据库),其中包含数百个字符串。

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

是否存在类似的东西或者我应该创建一个自定义解决方案?在这种情况下,有什么想法吗?

【问题讨论】:

    标签: php internationalization translation multilingual


    【解决方案1】:

    好的。 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 使用的方式,但级别非常低:?看看吧。这比为每种语言创建文件要好。

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2016-12-06
      • 1970-01-01
      相关资源
      最近更新 更多