softspring/doctrine-simple-translation-type-bundle

此包为Doctrine提供了使用JSON类型的简单翻译类型。


README

Latest Stable Latest Unstable License PHP Version Downloads CI

此包为Doctrine提供了一个简单的翻译类型,并包含其与Symfony的集成包。

安装

使用Symfony Flex的应用程序

打开命令行,进入您的项目目录并执行

$ composer require softspring/doctrine-simple-translation-type-bundle

配置

配置Doctrine类型

# config/packages/doctrine.yaml

doctrine:
    dbal:
        types:
            simple_translation: 'Softspring\DoctrineSimpleTranslationTypeBundle\Doctrine\Type\SimpleTranslationType'

使用方法

配置使用该类型的实体

use Doctrine\ORM\Mapping as ORM;

/**
 * @var SimpleTranslation
 * @ORM\Column(name="translated_name", type="simple_translation", nullable=false)
 */
protected $translatedName;

public function __construct()
{
    $this->translatedName = new SimpleTranslation();
}
            
/**
 * @return SimpleTranslation
 */
public function getName(): SimpleTranslation
{
    return $this->translatedName;
}

/**
 * @param SimpleTranslation $translatedName
 */
public function setName(SimpleTranslation $translatedName): void
{
    $this->translatedName = $translatedName;
}   

管理模型

模型类为 Softspring\DoctrineSimpleTranslationTypeBundle\Model\SimpleTranslation

设置默认翻译

$entity->getName()->setDefaultLocale('es');
$entity->getName()->setTranslation(null, 'Nombre de la entidad'); // null means default locale
$entity->getName()->setTranslation('es', 'Nombre de la entidad'); // it's also posible to specify the locale

添加额外翻译

$entity->getName()->setTranslation('en', 'Entity name');

获取值

$entity->getName()->translate(); // returns the default value 'Nombre de la entidad'
$entity->getName()->translate('es'); // returns 'Nombre de la entidad'
$entity->getName()->translate('en'); // returns 'Entity name'

使用完整方法

$entity->getName()->getTranslations(); // returns ['es'=>'Nombre de la entidad', 'en'=>'Entity name']
$entity->getName()->setTranslations(['es'=>'Nombre de la entidad', 'en'=>'Entity name']);

作为数组使用

模型实现了ArrayAccess接口,因此可以作为数组使用

$entity->getName()['en']; // returns 'Entity name'
$entity->getName()['es']; // returns 'Nombre de la entidad'

Twig使用

{{ entity.name|translate }} {# returns 'Nombre de la entidad' if app.request.locale is 'es' #}    
{{ entity.name|translate('es') }} {# returns 'Nombre de la entidad' #}    
{{ entity.name|translate('en') }} {# returns 'Entity name' #}    

在表单中编辑值

您可以使用 Softspring\DoctrineSimpleTranslationTypeBundle\Form\SimpleTranslationType

use Symfony\Component\Form\FormBuilderInterface;

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('translatedName'); // automatically uses the SimpleTranslationType thanks to the TypeGuesser
}

强制语言

$builder->add('translatedName', SimpleTranslationType::class, [
    'languages' => ['es','en','de'],    
]);