Last active
August 29, 2015 14:04
-
-
Save webdevilopers/8bcbf18c7e0b1ea22d91 to your computer and use it in GitHub Desktop.
Symfony2 (static) Translation with Doctrine Extensions using Gedmo or / and Stof and messages.locale.domain
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
imports: | |
- { resource: parameters.yml } | |
- { resource: security.yml } | |
- { resource: doctrine_extensions.yml } | |
# Doctrine Configuration | |
doctrine: | |
dbal: | |
driver: "%database_driver%" | |
host: "%database_host%" | |
port: "%database_port%" | |
dbname: "%database_name%" | |
user: "%database_user%" | |
password: "%database_password%" | |
charset: UTF8 | |
# if using pdo_sqlite as your database driver, add the path in parameters.yml | |
# e.g. database_path: "%kernel.root_dir%/data/data.db3" | |
# path: "%database_path%" | |
types: | |
json: Sonata\Doctrine\Types\JsonType | |
orm: | |
auto_generate_proxy_classes: "%kernel.debug%" | |
auto_mapping: true | |
mappings: | |
translatable: | |
type: annotation | |
alias: Gedmo | |
prefix: Gedmo\Translatable\Entity | |
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/MappedSuperclass" | |
gedmo_translatable: | |
type: annotation | |
prefix: Gedmo\Translatable\Entity | |
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/MappedSuperclass" | |
alias: GedmoTranslatable # this one is optional and will default to the name set for the mapping | |
is_bundle: false | |
loggable: | |
type: annotation | |
alias: Gedmo | |
prefix: Gedmo\Loggable\Entity | |
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity" | |
stof_doctrine_extensions: | |
default_locale: de | |
translation_fallback: true | |
orm: | |
default: | |
timestampable: true | |
translatable: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Acme\DemoBundle\Entity; | |
use Doctrine\ORM\Mapping as ORM; | |
use Gedmo\Mapping\Annotation as Gedmo; | |
use Gedmo\Translatable\Translatable; | |
/** | |
* @ORM\Entity | |
* @ORM\Table(name="contract_states") | |
*/ | |
class ContractState | |
#implements Translatable | |
{ | |
/** | |
* @ORM\Id | |
* @ORM\Column(type="integer") | |
* @ORM\GeneratedValue(strategy="AUTO") | |
*/ | |
private $id; | |
/** | |
* @Gedmo\Translatable | |
* @ORM\Column(type="string") | |
*/ | |
private $state; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class ContractStateController extends Controller | |
{ | |
public function indexAction() | |
{ | |
$em = $this->getDoctrine()->getManager(); | |
$states = $em | |
->createQuery('SELECT cs FROM AcmeDemoBundle:ContractState cs') | |
->getArrayResult() | |
; | |
echo $states[0]->getState(); // expected translation from messages.de.yml 'pending' => 'Vorläufig' | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
services: | |
extension.listener: | |
class: Acmle\Demo\Listener\DoctrineExtensionListener | |
# class: Stof\DoctrineExtensionsBundle\EventListener\LocaleListener | |
# arguments: [@stof_doctrine_extensions.listener.translatable] | |
calls: | |
- [ setContainer, [ @service_container ] ] | |
tags: | |
# translatable sets locale after router processing | |
- { name: kernel.event_listener, event: kernel.request, method: onLateKernelRequest, priority: -10 } | |
# loggable hooks user username if one is in security context | |
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } | |
# Doctrine Extension listeners to handle behaviors | |
gedmo.listener.tree: | |
class: Gedmo\Tree\TreeListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] | |
gedmo.listener.translatable: | |
class: Gedmo\Translatable\TranslatableListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] | |
- [ setDefaultLocale, [ "de" ] ] | |
- [ setTranslationFallback, [ true ] ] | |
gedmo.listener.timestampable: | |
class: Gedmo\Timestampable\TimestampableListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] | |
gedmo.listener.sluggable: | |
class: Gedmo\Sluggable\SluggableListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] | |
gedmo.listener.sortable: | |
class: Gedmo\Sortable\SortableListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] | |
gedmo.listener.loggable: | |
class: Gedmo\Loggable\LoggableListener | |
tags: | |
- { name: doctrine.event_subscriber, connection: default } | |
calls: | |
- [ setAnnotationReader, [ @annotation_reader ] ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Plusquam\Bundle\ContractBundle\Listener; | |
use Symfony\Component\HttpKernel\Event\GetResponseEvent; | |
use Symfony\Component\DependencyInjection\ContainerAwareInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
class DoctrineExtensionListener implements ContainerAwareInterface | |
{ | |
/** | |
* @var ContainerInterface | |
*/ | |
protected $container; | |
public function setContainer(ContainerInterface $container = null) | |
{ | |
$this->container = $container; | |
} | |
public function onLateKernelRequest(GetResponseEvent $event) | |
{ | |
$translatable = $this->container->get('gedmo.listener.translatable'); | |
$translatable->setTranslatableLocale($event->getRequest()->getLocale()); | |
} | |
public function onKernelRequest(GetResponseEvent $event) | |
{ | |
$securityContext = $this->container->get('security.context', ContainerInterface::NULL_ON_INVALID_REFERENCE); | |
if (null !== $securityContext && null !== $securityContext->getToken() && $securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) { | |
$loggable = $this->container->get('gedmo.listener.loggable'); | |
$loggable->setUsername($securityContext->getToken()->getUsername()); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pending: 'Vorläufig' | |
in_progress: 'Läuft' | |
quote_submitted: 'Angebot erteilt' | |
contract_accepted: 'Auftrag erteilt' | |
contract_approved: 'Auftrag angenommen' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment