【问题标题】:Cakephp delete translation for specific languageCakephp 删除特定语言的翻译
【发布时间】:2013-03-10 15:42:54
【问题描述】:

我试图在模型上创建一些翻译行为。但是我如何删除特定的翻译。

我的示例是一个类别,它的名称应该被翻译。可以说我有英文和西班牙文的翻译。我如何删除西班牙语翻译? offcouse 我可以创建自己的 sql 查询,但是有 cakephp 方法可以做到这一点。

【问题讨论】:

  • 没有真正的删除,因此该类别不会显示在西班牙语翻译页面上。

标签: cakephp internationalization


【解决方案1】:

没有蛋糕功能可以做到这一点

不过,实现起来很容易

删除给定语言环境的所有翻译

删除给定语言环境的所有翻译(与任何破坏性操作一样 - 在执行任何操作之前进行数据库备份,以便在出现错误或意外删除某些内容时恢复):

DELETE FROM i18n WHERE locale = 'esp';

当然,语言环境取决于您的特定应用程序 - 您可以检查您的配置,或者直接询问数据库:

SELECT DISTINCT(locale) FROM i18n; 

删除给定语言环境和模型的所有翻译

只需添加一个模型条件:

DELETE FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category'
;

删除特定模型字段的所有翻译

你需要知道你要操作的记录的id,然后:

DELETE FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category' AND 
    foreign_key = 2468789 AND 
    field = 'name'
;

如果您不确定直接在数据库上运行查询,请先运行 select 以查看要删除的内容:

SELECT * FROM i18n 
WHERE 
    locale = 'esp' AND 
    model = 'Category' AND 
    foreign_key = 2468789 AND 
    field = 'name'
;

即找到你想要的,然后简单地将SELECT 更改为DELETE 语句。

【讨论】:

  • 好的,感谢您的帮助。我只是认为有这样的功能,因为它很容易创建和编辑翻译
【解决方案2】:

令人惊讶的是,没有这样的原生 CakePHP 方法可以删除给定实体的任何翻译。 @AD7six 显然是正确的,但让我给你一个更“按部就班”的方法。

你可以这样做:

<a href="<?= $this->Url->build(['action' => 'deleteTranslation', 'foreign_key' => 123, 'model' => 'Pluginname.Controller', 'locale' => 'de_DE']); ?>"><?= __('Remove translation'); ?></a>

然后创建一个利用该功能的方法:

//put this into src/AppController.php to enable that functionality across the whole application

public function deleteTranslation() {
    $this->loadModel('I18n');
    if($this->I18n->deleteAll([
        'locale' => $this->request->getQuery('locale'),
        'model' => $this->request->getQuery('model'),
        'foreign_key' => $this->request->getQuery('foreign_key')
    ])) {
        $this->Flash->success(__('Successfully deleted a translation.'));
    }
    else {
        $this->Flash->error(__('Could not delete a translation.'));
    }
    return $this->redirect($this->referer());
}

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2015-06-20
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多