语言与文化之间的困惑! :(

Posted

技术标签:

【中文标题】语言与文化之间的困惑! :(【英文标题】:Confused between Language & Culture! :( 【发布时间】:2010-07-15 11:03:05 【问题描述】:

我反复对 Symfony 中的语言和文化感到困惑。 - 我将文化设置为 (en_US),我猜这是正确的 - 但翻译文件是为一种语言创建的 (en) - 另外,当在数据库中使用翻译时,lang=en

我有一个模型,其定义如下:

Option:
  package: Options
  tableName: Com_Options
  actAs:
    I18n:
      fields: [name, tooltip]
  columns:
    id:
      type: integer(2)
      primary: true
      notnull: true
      unsigned: true
#      autoincrement: true
    name:
      type: string(50)
      notnull: true
      notblank: true
    tooltip:
      type: string(100)
    sequence:
      type: integer(1)
      unsigned: true
      range: [0,255]

这个类被其他几个类引用。 当我尝试将名称打印为 $refObj->Option->Name 时,我什么也得不到。当我检查查询时,我看到总共触发了 3 个查询。

1) to get refObj
2) to get Option
3) to get Translation

但真正的问题是,对于 3,查询中没有语言参数。

我想知道它将如何获得翻译后的名称? sf_culture的当前值:en_US

是否有其他方法可以根据用户的语言访问“名称”? 还是我需要为每个模型编写自定义查询?

问题是因为自动增量关闭,还是因为我使用了一个包?

非常感谢!

【问题讨论】:

您是否也将 sf_default_culture 设置为 en_US? 【参考方案1】:

发现了这个:一个非常乏味且成本​​高昂的方法,但有效:

$class->relation->Translation[$lang]->property

如果你想直接从数据库中读取

$q = Table::getInstance()->createQuery('a')
        ->select('a.id, t.name')
        ->leftJoin('a.Translation t')
        ->where('t.lang = ?', $lang);
return $q->execute(array(), Doctrine::HYDRATE_NONE);

如果您使用 XLIFF 文件,则无需传递文化/语言

__('text which is translated in the XLIFF for user\'s culture');

【讨论】:

以上是关于语言与文化之间的困惑! :(的主要内容,如果未能解决你的问题,请参考以下文章

Date.js 文化信息让我感到困惑

我们实施DevOps的挑战之二 -- 配置文件的困惑

在 JavaGit、JGit 和 EGit 之间选择的困惑

困惑度 (perplexity)

GameplayKit - 关于在组件之间发送消息的困惑

Verilog 语言,关于状态机的困惑