form由翻译后的值排序的实体

时间:2013-08-20 14:38:02

标签: symfony

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

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) )

你有正确的方法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

代码是静态的吗?即烤箱烘焙的面团(无论什么语言)在您的数据词典中总是id = 1,然后排序很好。 假设,如果您有一个表格如下:

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

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

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