【问题标题】:How to build an inline translation system similar to Magento's如何构建类似于 Magento 的内联翻译系统
【发布时间】:2010-07-19 09:10:50
【问题描述】:
我正在从事 Zend Framework、MVC、企业网站项目。我想开发一个友好的翻译系统,能够根据上下文翻译每个单词(有时同一个单词有不同的翻译)。
Zend 框架使用 Zend_Translate 进行 i18n 和本地化。我们还看到了 Magento(使用 ZF)的内联翻译系统,用户可以在其中 translate pages directly。
我们想知道这个内联翻译系统是如何工作的,以便我们可以构建一个类似的系统并进行改进。
翻译存储在哪里:在数据库中还是在 CSV 文件中?
当用户在不同的页面上进行不同的翻译时,系统如何知道获取相同单词的翻译?
我们应该如何构建一个页面来支持内联翻译?
系统如何处理静态文本与动态(数据库驱动)文本?
内嵌翻译似乎会使网站变得很慢。 Magento 是如何解决这个问题的?
如果您有更多需要解释的要点,请写下来。谢谢
【问题讨论】:
标签:
zend-framework
magento
zend-translate
【解决方案1】:
从这里开始(在未来,这可能不仅仅是一个合乎逻辑的问题):
Magento 将基本翻译(由程序员提供)存储在 CSV 文件中,但内联翻译存储在数据库中。
Magento 的翻译作用于整个字符串,而不是单词。通过为翻译提供整个句子的上下文,可以实现惯用翻译。权衡显然是每个句子都必须翻译,而不是每个单词。
-
Magento 对此的回答是将所有可本地化的字符串包装在对本地化程序的调用中。 Magento 模板通常看起来像这样(双下划线函数映射到“翻译到当前语言环境”函数):
print $this->__("Please translate this string");
-
Magento 中的动态文本(如产品描述)通常不会被翻译,但如果您想这样做,只需将正确的字符串传递给翻译器,就像这样:
print $this->__($someString);
翻译不太可能成就或破坏您的网站(查看您的数据库查询以了解大多数性能问题),但这仍然是一个合理的问题。 Magento 做了一些事情来提供帮助。首先,它将 CSV 文件的序列化版本存储在缓存中,以便更高效地读取 CSV。其次,Magento 提供页面缓存,以便可以存储整个页面的输出(假设它会以相同的方式呈现),以及为页面的较小位提供块级缓存。在这两者之间,您大部分时间都处于良好状态。
希望有帮助!
谢谢,
乔