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