PHP翻译前端类似于罗塞塔?

我目前正在将 Web 应用程序从基于数据库的国际化方法(每个单词在翻译表中都有一个条目,以及实际的翻译)迁移到基于Zend_Translate和 CSV 文件的方法。

我需要提供一种最终用户友好的方式来快速轻松地更新这些翻译。理想情况下,为了最大限度地降低破坏内容的风险,用户不会直接编辑CSV文件,而是显示一个带有字段的漂亮表单。

您是否知道支持其中一个适配器的独立,基于PHP,最终用户兼容的翻译前端 - 理想情况下是gettext或csv?Zend_Translate

类似于Python的/ Django的Rosetta,但在PHP中?罗塞塔完全符合我的需求:

enter image description here

但是出于服务器设置的原因,我非常希望在这里继续使用PHP。

SimplePO看起来朝着正确的方向前进,但太简单了 - 它似乎无法处理多种语言和目录以及复数。


答案 1

我没有看到另一个,可能是出于以下原因。尽管在SimplePO网站上说了什么,翻译人员不喜欢并且通常不会在并排翻译系统上工作,如上所示。

这就是程序员想象翻译人员的工作方式,这是有缺陷的。翻译人员使用名为TMX的工具包,翻译记忆库交换(通用名称请参阅Okapi开源实现以获得感觉),并在其中为单词,短语和句子构建翻译词典。他们获取不同格式的文件并将其输入TMX软件,这给了他们第一次通过60%,70%等翻译,但就像Google语言API一样,在目标语言的意义方面严重受损。

然后他们所做的是翻译TMX没有处理的单词,在逻辑上添加到字典中,然后他们将其口语化,即使其在目标语言中工作并使其有意义。因此,翻译人员应始终翻译成其母语。

他们这样做有很多原因,a)这是有道理的,有效的,减少了他们的工作量,b)因为他们通过文字获得报酬,并肩翻译不允许他们使用他们的工具并最大化他们的收入。

翻译人员想要的是一个可以导出的格式的文件,他们可以导入和翻译,导出并发送回您导入。

文件格式可以是csv,rtf,tmx,xliff,gettext,如果你阅读Symfony框架文档,你可以看到他们是如何做到这一点和处理的(在我看来,他们做得很好)。

话虽如此,大约8年前,当我不得不用英语,法语,德语,匈牙利语和斯洛伐克语编写网站时,我处于类似的位置,我和SimplPO做了同样的事情,只是简单地编写了自己的并排应用程序,以便完成此操作。然而,我们编写应用程序的公司自己在内部进行了所有翻译,因此我们没有遇到翻译人员的问题。当我们这样做时,我们编写了一个导出到RTF并从RTF导入(这本身就令人难以置信),因此翻译人员可以如上所述。

然而,SimplePO是我见过的唯一其他想法的实现。像Zend这样的框架似乎认为你只是创建查找标记来替换单词和短语,并且没有在应用程序中构建任何控件来管理该过程。因此,它很快就会失控,维护起来既困难又昂贵。

大多数编写多语言网站的人实际上并没有。他们编写一个主站点,然后制作副本,翻译它并维护翻译的版本。对于我们逻辑类型来说,它似乎很笨拙,但实际上非常有效。

它有效的原因之一是i18n和l10n是关于语言以外的许多其他东西。

  • 外观和感觉。盎格鲁撒克逊人喜欢冷色和san衬线字体,西班牙裔人喜欢衬线字体和更明亮的颜色。当您跨越其他文化时,期望在布局,类型,颜色等方面差异很大。
  • 法语和某种程度上的德语比同等的英语长30%,更冗长,所以你的布局很快就会在手篮里下地狱。

  • 闪米特语从右到左

  • 日语和其他不基于字母的语言可以从上到下运行 ltr rtl,有些甚至没有空格
  • 日期?美国,日本,英国,匈牙利都不同
  • 货币和数字格式,甚至不要开始我

好吧,很抱歉继续总结:- 对于简单的侧向,只需自己编写,花了我大约两周的时间没有任何框架,并在我前进的过程中使用它,只需使用标签替换即可。但无论如何,想想你在做什么。仔细。


答案 2

如果您可以使用 gettext 文件(Zend_Translate支持它们),则可以尝试一下 POEdit。它使用起来非常简单,并且自1.3版本以来支持复数形式。

但是,用户将不得不下载文件并最终重新上传它们,因为POEdit不是在线工具。我不知道任何其他基于网络的工具。


推荐