cakephp - 翻译行为和相关模型翻译

标签 cakephp translate

我在网络上搜索了 1000000000000000 次,但找不到一个干净的解决方案

这是我的CertificateType模型翻译部分:

public $actsAs = array('Translate'=>array('title','description')) ;

和证书模型:

public $actsAs=array('Translate'=>array('filename')) ;

    public $belongsTo = array(
    'CertificateType' => array(
        'className' => 'CertificateType',
        'foreignKey' => 'certificate_type_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ) ,
   );

但是在获取时所属模型将不会转换:

    public function admin_index() {
    $this->Certificate->locale = $this->Session->read('Config.language');
    $this->Certificate->CertificateType->locale =  $this->Session->read('Config.language');
    $this->Certificate->recursive = 0;
    $this->set('certificates', $this->paginate());
    debug($this->Certificate->paginate()) ;
}

为什么?

最佳答案

我用过这个,效果很好!

在AppModel.php中我写了这些代码:

    public function getTranslatedModelField($id = 0, $field) {
    // retrieve active language
    $ActiveLanguageCatalog=CakeSession::read('Config.ActiveLanguageCatalog') ;
    $res = false;
    $translateTable = (isset($this->translateTable))?$this->translateTable:"i18n";

    $db = $this->getDataSource();
    $tmp = $db->fetchAll(
        "SELECT content from {$translateTable} WHERE model = ? AND locale = ? AND foreign_key = ? AND field = ? LIMIT 1",
        array($this->alias, $ActiveLanguageCatalog['locale'], $id, $field)
    );
    if (!empty($tmp)) {
        $res = $tmp[0][$translateTable]['content'];
    }
    return $res;
}   

public function afterFind($results, $primary = false) {

    if($primary == false && array_key_exists('Translate', $this->actsAs)) {
        foreach ($results as $key => $val) {
            if (isset($val[$this->name]) && isset($val[$this->name]['id'])) {
                foreach($this->actsAs['Translate'] as $translationfield) {  
                    $results[$key][$this->name][$translationfield] = $this->getTranslatedModelField($val[$this->name]['id'], $translationfield);
                }
            } else if($key == 'id' && is_numeric($val)) {
                foreach($this->actsAs['Translate'] as $translationfield) {  
                    $results[$translationfield] = $this->getTranslatedModelField($val, $translationfield);
                }                   
            }
         }
    }

    return $results;
}

关于cakephp - 翻译行为和相关模型翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761028/

相关文章:

php - CakePHP 3 : Generate shortened url (canonical)

api - 浏览器 API key 不适用于引用程序

java - 如何将多维 vector 从 C++ 转换为 Java?

c# - 在没有 MonoTouch 托管类的情况下获取 Objective-C 类名

javascript - Angular 平移一个元素中的多个键

authentication - 如何与经过身份验证的用户数据一起检索关联?

php - CakePHP:访问 database.php 值

sql - 按两个字段的总和排序

php - 如何在不使用 CakePHP 中各处的 using 'view/layout' 语句的情况下保持多个相似的 'if()' 文件干燥?

python - 如何循环一个乏味​​的 if 语句