Yii:多
我发现Yii很棒的框架,用yiic shell创建的示例网站是一个很好的开始......但不幸的是,它并没有涵盖多语言网站的主题。 该文档涵盖翻译短信的主题,但不包含多语言内容......
我即将开始在一个至少需要两种语言的网站上工作,我想知道为此保留内容的最佳方式是什么......问题在于内容与常见元素广泛混合(如嵌入式视频文件)。
我需要避免重复那些共同点...到目前为止,我曾经有一个包含文本的数组(通常不超过1-2个短段落),然后视图文件只是从数组中呈现文本。
现在我想避免把它放在数组中(当把双引号括起来时需要注意一些“”,并且总体上不方便...)。
那么,保留这些短段的最好方法是什么? 我应该像数据库一样保存它们(id | msg_id | language | content),然后通过msg_id和language选择它们吗? 这仍然需要我创建一些msg_id并将它们嵌入到视图文件中...
Yii有什么建议的范例有一些解决方案?
谢谢,米。
Yii应用程序默认使用yii :: t()方法来转换文本消息,消息来源有三种不同的类型:
如果我没有误解,你正在使用经典的数组进行翻译。 我建议你在Yii上使用GetText和PO文件进行翻译操作。
你可以在这个官方文档页面找到很多关于翻译和iii的信息。
Gettext对于易于翻译很有好处,但默认的PHP实现不是线程安全的。 Yii因此使用它自己的解包器,与php数组相比,它大大增加了处理时间。
自从我设立一个高容量,高交易站点以来,性能不佳是不可接受的。 另外,通过使用APC,我们可以缓存PHP翻译以进一步提高性能。
因此,我的方法是使用PHP数组,但将翻译保留在数据库中以便翻译,并在翻译发生变化时生成所需的文件。
数据库与此类似:
TABLE Message // stores source language, updated by script
id INT UNSIGNED
category VARCHAR(20) // first argument to Yii::t()
key TEXT // second argument to Yii::t()
occurences TINYINT UNSIGNED // number of times found in sources
TABLE MessageTranslation // stores target language, translated by human
id INT UNSIGNED
language VARCHAR(3) // ISO 639-1 or 639-3, as used by Yii
messageId INT UNSIGNED // foreign key on Message table
value TEXT
version VARCHAR(15)
creationTime TIMESTAMP DEFAULT NOW()
lastModifiedTime TIMESTAMP DEFAULT NULL
lastModifiedUserId INT UNSIGNED
然后,我修改了CLI工具yiic'message'命令,将收集的字符串转储到数据库中。
http://www.yiiframework.com/wiki/41/how-to-extend-yiic-shell-commands/
一旦进入数据库,可以设置一个简单的CMS,为翻译人员提供翻译的简单方法,同时提供版本信息,恢复到旧版本,检查翻译人员的质量等。
另一个脚本,也从yiic修改,然后采取数据库信息和编译到PHP数组。 基本上是每种语言的两个表的JOIN,然后使用'Message','key'和'MessageTranslation','value'作为(还有什么?)key => value ...来保存到名为'消息'。'category'在由语言指定的文件夹中。
生成的文件通过Yii CPhpMessageSource正常加载。
对于图片来说,这很简单,只需将它们放在具有适当语言的文件夹中,并在链接时获取应用程序语言。
<img src="/images/<?php echo Yii::app()->language; ?>/help_button.png">
请注意,在现实生活中,我写了一个辅助方法从语言字符串中剥离国家,'en_us'应该是'en'。
那么我认为这里关心的是如何翻译页面上的静态文本/消息,Yii使用Yii解决了它:t()和Edigu的答案就是这样。
我在FlexicaCMS上查看关于在数据库中翻译动态内容的文章,最后在解决静态文本/消息问题之后这将是下一个,这是使用Yii行为的一个真正的好方法。 不确定FlexicaCMS作者是否过于雄心勃勃地支持翻译,因为它会使内容翻译成为一件无忧的事情 - 非常棒。
他们没有提到的一件事是翻译页面的网址。 例如your.site.com/fr/translated_article_title.html。 我的意思是url必须有/ language_id / part,所以它可以帮助搜索引擎优化。
链接地址: http://www.djcxy.com/p/37483.html上一篇: Yii: Multi
下一篇: Best practice to make a multi language application in C#/WinForms?