【发布时间】:2014-01-11 21:38:00
【问题描述】:
我希望在 Symfony2 框架上使用 Doctrine 管理记录本地化。
要求是
- 翻译记录的能力
- 只能在一种语言环境中添加记录
- 任何类型的开发人员友好的可重用模式来完成此任务
到目前为止,我已经实现了 DoctrineExtensions 库来使用 Translatable 扩展。在我阅读的任何地方,它都被认为是处理翻译的首选方式。我意识到这与本地化不同,但似乎这是我最接近的。
假设我有一个包含可翻译产品的产品表。我的默认语言是英语。在默认的英语语言环境中插入产品后,我可以稍后添加翻译,比如说意大利语。 我无法使用 Translatable 扩展程序做的是仅在意大利语区域设置中添加产品。如果我这样做,可翻译扩展程序还会以默认语言(英语)添加产品,但内容为意大利语。然后它继续添加意大利语翻译。
我的产品实体如下所示; (简体)
<?php
namespace Acme\DemoBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="acmedemobundle_product")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column()
* @Gedmo\Translatable
*/
protected $name;
...
}
有没有办法以非默认语言仅添加记录?还是我找错地方了?
-
在使用 Symfony&Doctrine 之前,我习惯于管理两个表中的本地化数据,然后使用请求的语言环境将它们连接在一起。
例如,products 表包含所有与语言环境无关的数据,例如
- 身份证
- category_id
products_i18n 表包含所有本地化数据,例如
- product_id
- 语言环境
- 姓名
- 说明
- 蛞蝓
这样,只有一个主记录可用于关系,以及一个或多个本地化扩展。没有本地化扩展的记录将被视为不存在。
也许有办法代替它?
-
说实话,到目前为止,我还没有找到关于这个特定主题的太多有用信息。我无法想象我是第一个遇到这个问题的人。
非常感谢您对此事的任何帮助!
=============== 更新
我决定采用自定义解决方案,将两个表联系在一起,就像我在上面的示例中说明的那样。这样做的主要原因(除了我需要该功能)是Translatable 将所有翻译的数据保存在一个表中。从性能和危机情景的角度来看,这并不正确。更有条理,将每个表的本地化数据放在自己的表中,而不是汇总。
目前,我接受了彼得的回答,因为它是最有帮助的。如果有更好的答案,我会考虑换。干杯!
【问题讨论】:
标签: php mysql symfony doctrine-orm internationalization