翻译网站的简单方法

dua*_*ty_ 6 html php translation localization internationalization

问题

我有一个相当静态的网站,只有一些基本的 PHP 使用。现在客户想要翻译这个网站。我确实有一个解决方案,但它很麻烦,我想知道其他人是如何做到的以及标准是什么(在框架等中)。

我的方式

我的方式(为了更容易理解,我对其进行了一些简化):我从数据库中为每种语言生成一个 PHP 数组,并将该数组存储在一个语言文件中,例如西班牙语的 es.php。

然后,我使用 tr 函数翻译 HTML 中的字符串,如下所示:
Before: <h1>Hello World</h1>
After:<h1><?php echo tr('Hello World'); ?></h1>给出<h1>Hola Mundo</h1>西班牙语。

问题

这很麻烦并且容易出错。我必须仔细检查每个 .php 文件,并使用 echo 将此 PHP 标记替换所有硬编码字符串。
有没有更好的办法?其他人是怎么做的?如果需要,我可以详细说明我的实现。

Jas*_*vis 5

您应该查看 PHP GETTEXT 扩展,它非常快,并且会扫描 PHP 文件中的字符串以使用 .MO 和 .PO 文件进行翻译

然后,您可以简单地执行类似的操作__('Hello World');,或者如果您已经拥有所有字符串,tr('Hello World');那么您可以修改tr函数以将其传递__(string)gettext(string)类似的操作。

function tr($string){
    __($string)
}
Run Code Online (Sandbox Code Playgroud)

  • 这如何解决我的问题?这不会改变我在 HTML 中使用翻译的方式,并且由于我已经实现了后端,所以我没有看到任何好处。 (3认同)

edw*_*rdh 3

我想对你来说有点晚了,但万一像我这样的人偶然发现了这个线程......因为我目前遇到了和你一样的问题。不幸的是,似乎没有一种“不麻烦的方法”可以用 PHP 来做到这一点。一切似乎都涉及大量函数调用(如果您有大量文本)。

嗯...有一种方便的方法。但并不完全安全。在发送给用户之前操​​作输出缓冲区:=> http://dev-tips.com/featured/output-buffering-for-web-developers-a-beginners-guide

因此,您可以根据所选的语言定义一个充满“from->to”数据的数组,并通过循环替换缓冲区中的所有可读文本。

但是当然......如果您例如将“send”(英语)替换为“senden”(德语)并且链接到“send.html”,则会破坏该链接。

因此,如果不仅要翻译长的、绝对唯一的字符串,还要翻译较短的字符串,那么就必须只操作用户可读的文本。也有一个解决方案 - 但是,这是基于 JavaScript 的: => http://www.isogenicengine.com/documentation/jquery-multi-language-site-plugin/