未找到默认实体翻译的翻译表单

Posted

技术标签:

【中文标题】未找到默认实体翻译的翻译表单【英文标题】:translation-form with default entity translations not found 【发布时间】:2015-07-28 03:25:28 【问题描述】:

我尝试设置翻译表格

http://a2lix.fr/bundles/translation-form/ 和https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md#translatable-entity-example

作曲家.json

    "a2lix/translation-form-bundle": "2.*@dev",
    "stof/doctrine-extensions-bundle": "1.2.*@dev",

config.yml

stof_doctrine_extensions: default_locale: zh 形式: 默认: 可译:真 sluggable:真 sluggable:真 可时间戳:真

a2lix_translation_form:
    locale_provider: default       # [1]
    locales: [pl, en, de]          # [1-a]
    default_locale: en
    manager_registry: doctrine      # [2]
    templating: "A2lixTranslationFormBundle::default.html.twig"

实体

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use APY\DataGridBundle\Grid\Mapping as GRID;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Translatable\Translatable;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="c_Base"
    ,indexes=
 *      @ORM\Index(name="search_name", columns="name"),
 *      @ORM\Index(name="orderCity", columns="city")
 * )
 */
class Base  implements Translatable

    /**
     * @ORM\Column(type="bigint")
     * @ORM\Id
     */
    private $id;

    /**
     * Hexaid
     * @var string
     */
    private $hid;

    /**
     * @ORM\Column(type="string")
     * @GRID\Column(title="name")
     * @Gedmo\Translatable
     * @var string
     */
    private $name;

    /**
     * @Gedmo\Locale
     * Used locale to override Translation listener`s locale
     * this is not a mapped field of entity metadata, just a simple property
     */
    private $locale;

构建表格

公共函数 buildForm(FormBuilderInterface $builder, array $options)

    $builder

        ->add('translations', 'a2lix_translations', array(
                'fields'=>array(
                    'name'=>array(),
                    'description'=>array(
                        'field_type' => 'ckeditor'
                    )
                )
            )
        );

错误

Neither the property "translations" nor one of the methods "getTranslations()", "translations()", "isTranslations()", "hasTranslations()", "__get()" exist and have public access in class "Mea\CharterBundle\Entity\Base".

我没有私人 $translations; var in base - 因为是公共翻译 - 例如个人翻译存在 $translations https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md#personal-translations

但https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md#translatable-entity-example 不是。

我可以在http://a2lix.fr/bundles/translation-form/ 中使用它吗?

这是另一种方式的例子 DoctrineExtensions Notice: Undefined index: foreignKey in $em->getRepository('Gedmo\\Translatable\\Entity\\Translation');

【问题讨论】:

来自 Atlantic18 的 DoctrineExtensions 更难使用,最好使用来自 KNP 的 DoctrineExtensions。如果你愿意,我可以举个例子。 请显示示例,也许我改变了我失去了很多时间 - 我回到旧版本 Atlantic18 并且它工作但有时会生成未定义的索引:foreignKey 如果你有有趣的例子,是的。它有一些表单扩展来编辑翻译? 【参考方案1】:

这是我当前项目中如何使用 KNP 中的 DoctrineExtension 的工作示例(我知道这不能回答问题,请查看上面的 cmets)。

composer.json:

"knplabs/doctrine-behaviors": "dev-master",
"a2lix/translation-form-bundle" : "dev-master"

config.yml:

imports:
    ...
    -  resource: ../../vendor/knplabs/doctrine-behaviors/config/orm-services.yml 

framework:
    translator:
        fallback: "%locale%"
    ...

a2lix_translation_form:
    locale_provider: default
    locales: [ru, en]
    default_locale: ru
    required_locales: [ru]
    manager_registry: doctrine
    templating: "@SLCore/includes/translation.html.twig" # if you want to use your own template 

实体: 产品

use Knp\DoctrineBehaviors\Model\Translatable\Translatable;

class Product

    use Translatable;

    // other fields which should not be translated
    // $translations field alredy has been created and mapped by DE

ProductTranslation(DE 需要此实体):

use Knp\DoctrineBehaviors\Model\Translatable\Translation;

class ProductTranslation

    use Translation;

    // fields that should be translated
    // e.g. $title, $description (id, locale, translatable fields already have been created by Translation trait, mapped by DE)

ProductType 形式:

->add('translations', 'a2lix_translations', [/* other options go here */])

form.html.twig:

% block javascripts %
     parent() 
    <script type="text/javascript" src=" asset('bundles/a2lixtranslationform/js/a2lix_translation_bootstrap.js') "></script>
% endblock %

...

 form_widget(form.translations) 

我知道这不是一个有趣的例子,但它确实有效。

【讨论】:

谢谢你这个例子对我有好处,我不确定 a2lix_translations,就像你展示它与 KNP 一起工作

以上是关于未找到默认实体翻译的翻译表单的主要内容,如果未能解决你的问题,请参考以下文章

wpml-在存档页显示所有CPT,如果未翻译,则显示默认语言

VB.NET本地化,检测未翻译文本

谷歌翻译设置默认语言

未捕获的翻译错误:com.android.dx.cf.code.SimException:在没有 --min-sdk-version >= 24 的情况下使用默认或静态接口方法

英语翻译property在这里是啥意思

Symfony 3 上的 Sonata Admin 实体翻译