5

我有一个实体类别,它有一个代码。此代码是内部代码,我们为每种语言使用翻译它。例如,想象一下:

Categories:
---- id:1 Code: "Bread"
---- id:2 Code: "Butter"

我有一个带有表单字段实体的表单。我想通过翻译标签订购。

以英文为例,会显示

Bread
Butter

但是以法语为例,顺序不同

Beurre (butter)
Pain (bread)

所以我不能使用实体字段的orderBy。

我有一个手工制作的解决方案,很脏:我使用带有翻译标签的选择字段

$categories_translated =array();
$categories= $this->em->getRepository('MyRepo')->findAll();
foreach($categories as $category){
    $categories_translated[$category->getId()]= $this->translator->trans($category);
}
asort($categories_translated);//sorted 

//then later
$builder->add('category','choice',array( 'choices' => $choices_technologies) )

你有正确的方法来做到这一点吗?

4

2 回答 2

0

代码是静态的吗?即烤箱烘烤的面团(无论哪种语言)在您的数据字典中始终为 id=1,那么排序就可以了。假设,如果你有一个如下表:

category
    - catid int auto_increment,
    - locale varchar(5),
    - itemid int,
    - text varchar(100)

可以选择访问按 . 排序的类别text
如果只是根据相关区域设置和想要的项目进行栅格化,您将获得类别的全局 ID。

您可能希望使用更好的 i18n 机制,但这对于静态类别来说非常简单。

于 2013-10-10T09:03:07.377 回答
0

您的方式是使用基于文件的翻译处理此问题的最佳(我认为也是唯一)方式。确实有更多的可能性来解决与数据库相关的翻译这样的问题。例如:https ://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/symfony2.md

于 2013-09-16T11:44:20.407 回答