我有一个实体类别,它有一个代码。这段代码是内部的,我们使用它来翻译每种语言。例如,想象一下:
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) )
你有正确的方法吗?
答案 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机制,但这对于静态类别来说非常简单。