【问题标题】:Yii framework and multi-language contentYii 框架和多语言内容
【发布时间】:2011-05-05 11:09:01
【问题描述】:

我继承了一个用自定义(小型)php 框架编写的中型网站。我想切换到 yii 框架,但首先我需要找到以下问题的解决方案:该站点基本上是一系列课程和练习,可用于多种语言。事实上,所有内容都支持多种语言。

用户可以选择他们喜欢的语言,并从数据库中检索本地化内容。

数据库组织:

  • 带有 id 和无语言列的表格练习
  • 带有练习 ID、sLanguage 和 sContent 的表格练习字符串

这如何与“Post::model()->findAll()”yii 从数据库中检索数据的方式轻松集成?

我是否应该编写自定义派生类的 CModel 来从 IUserIdentity 类中检索语言首选项并调整查询? 是否有一些我可以查看的代码?

【问题讨论】:

    标签: php internationalization translation yii


    【解决方案1】:

    我是否应该编写自定义派生类的 CModel 来从 IUserIdentity 类中检索语言偏好并调整查询?

    我不认为,你需要这样做。有不同的方法:

    1.) 您可以在创建对象实例之后和运行 findAll 之前使用 cdbcriteria 设置条件(例如 where 子句) http://www.yiiframework.com/doc/guide/1.1/en/database.ar(看第二季的末尾)

    2.) 另一种方法是覆盖模型中的 findAll:

        public function findAll($condition='',$params=array())
            {   $condition["criteria"]->compare ....
                 return parent::findAll($condition,$params);
                 }
    

    3.) 您还可以使用 onBeforFind 触发器http://www.yiiframework.com/doc/api/1.1/CActiveRecord#onBeforeFind-detail,它在(每次)findAll 搜索之前触发

    我更喜欢第一个或第二个想法。

    【讨论】:

    • 所以使用关系活动记录我会使用Post::model()->with('PostStrings')->findAll(),在PostStrings 类中我可以覆盖findAll 以自动加载正确的翻译。
    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多