【问题标题】:TranslateBehavior does not take default fields on default localeTranslateBehavior 在默认语言环境中不采用默认字段
【发布时间】:2017-08-05 15:13:04
【问题描述】:

我使用的是 CakePHP 3.4,我将它用于双语言网站,其中西班牙语 (es) 是默认语言环境。我有一个MangasTable,它为字段TranslateBehavior 实现了slug,我正在尝试查询它,如下所示:

$manga = $this->Mangas->find()
    ->select([
        'id',
        'nombre'
    ])
    ->where([$this->Mangas->translationField('slug') => $slug])
    ->firstOrFail();

重点是,$this->Mangas->translationField('slug') 部分将为我提供 slug 的翻译别名字段。或多或少,Mangas_slug_translation.content。当它被本地化为英语时很好,但使用默认的西班牙语,因为在i18n 表中没有该语言的任何条目,它什么也没有返回给我。穷人的方法是为语言设置一个条件并将其分配给$field 变量,但这看起来不太好。

还有其他方法吗,还是我遗漏了什么?

【问题讨论】:

    标签: internationalization cakephp-3.0 behavior


    【解决方案1】:

    穷人的方法是为语言设置一个条件并将其分配给$field 变量,但这看起来不太好。

    恐怕这是您必须做的事情,因为原始字段在检索到数据后会被替换,并且翻译行为中没有任何功能可以确定适当的过滤字段。您可以将逻辑隐藏在模型层中的某处(表格、自定义/扩展行为)以实现 DRYness,但通常无法绕过它 AFAICT。

    您可能想open an issue 并提出改进建议。也许根据当前语言环境返回适当过滤字段的附加方法可以补充translationField() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2016-09-07
      • 2014-03-31
      • 1970-01-01
      • 2020-04-05
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多