【问题标题】:symfony i18n objects (Doctrine) get specific culturesymfony i18n objects (Doctrine) 获取特定的文化
【发布时间】:2023-03-29 04:16:02
【问题描述】:

我遇到了无法从 i18n 教义对象中检索特定翻译的问题。如果我打电话给$object->getName();,我会按预期得到当前文化中的名称。但是,如果我希望在不切换用户文化的情况下检索特定翻译...$object->getName('fr'); 在此示例中,我仍然获得当前文化而不是法语。这个$object->getTranslation()->fr->name; 确实有效。我究竟做错了什么? $object->getName($culture); 不是这样做的正确方法吗?

如果有帮助,这是我的架构的相关部分:

Object:
  actAs:
    Timestampable: ~
    I18n:
      fields:           [name, description]
  columns:
    name:               { type: string(255), notnull: true }
    description:        { type: string(1000) }
    user_id:            { type: integer }
  relations:
    User:               { class: sfGuardUser, local: user_id, foreign: id, type: one, foreignType: many, foreignAlias: Objects }

【问题讨论】:

    标签: php internationalization doctrine symfony-1.4


    【解决方案1】:
    $this->Translation['fr']->getName()
    

    或者:

    $translations = $this->getTranslations();
    $translations['fr']->getName();
    

    【讨论】:

    • $object->getName('fr'); symfony 1.0 的方式?我的印象是这也适用于 1.4。
    • 好的,我一定是设置有问题...当我尝试您的第一个解决方案时,我得到:未知方法 ObjectTranslation::getName。如果我使用 ->name 而不是 ->getName(),它会起作用。当我尝试您的第二个解决方案时,我得到:“对象”上的未知记录属性/相关组件“翻译”我以前从未遇到过任何问题,但我主要在 symfony 1.0 网站上工作,所以也许我是只是错过了一些关键的 1.4 步骤。
    【解决方案2】:

    这与your other question 的问题几乎相同,使用:

    $object->Translation['fr']->name;
    $object->Translation['en']->name;
    $object->Translation['it']->name;
    // etc ...
    

    我引用我在另一个问题上发表的评论:

    ->getName() 如果您直接使用对象,则可以使用,例如 $object->getName()。但是如果你点击翻译关系,我永远不会 使用 getter 来检索值。

    顺便说一句,我不记得我们可以将这个$object->getName('fr'); 与 sf1.0 一起使用。

    【讨论】:

    • $object->getName('fr');documentation shows 的方式,也是我以前一直这样做的方式......由于某种原因,在我当前的项目中,它不起作用。从文档中引用,“所以基本上,你永远不必直接处理 i18n 对象,而是每次使用常规对象进行查询时将文化传递给模型(或让它猜测它)。”顺便说一句,getter 对我来说工作得很好,我只是无法指定文化。
    • 好吧,我想我不需要使用这种方法。我只是一直认为这是正确的方法。在我目前的情况下,您的解决方案将起作用,就像我在问题中提到的 $object->getTranslation()->fr->name; 一样。我想只要这样做没有错,我可以继续。我仍然希望我知道为什么另一种方式不起作用......
    猜你喜欢
    • 2011-10-25
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2017-08-06
    相关资源
    最近更新 更多