Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF][Symfony2][SF2]Translation domain
BigPig
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Hej,

Po raz pierwszy wrzucam translację do projektu i mam z tym drobne problemy.

Polega on na tym, że jak robię to w ten sposób:

$translator->trans('some_translation', array(), 'domain')

To wszystko idzie, a bez podania domeny nie śmiga.

A więc pytanie, jak zarejestrować domenę, żeby nie było potrzeby podawania jej przy wywoływaniu translacji?
Interesuje mnie zainteresowanie paru domen.
Coś w stylu, że rejestrujemy je w config.yml.

Inna sprawa, że pewnego czasu pracowałem nad projektem, który korzystał z translacji na podanych przeze mnie zasadach(czyli bez podawania domeny), ale za cholerę nie mogłem znaleźć gdzie te domeny zostały zarejstrowane.

Ten post edytował BigPig 18.07.2015, 18:07:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
blahy
post
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

Ostrzeżenie: (0%)
-----


Chyba nie da sie zmienic, zeby domyslna domena byla inna: https://github.com/symfony/Translation/blob...slator.php#L208
Trzebaby je przekazywac za kazdym razem.

Jezeli po raz pierwszy wrzucasz translacje to polecam jeszcze raz przeczytac dokumentacje translacji w symfony i dokumentacje komponentu translacji.
Domeny sa uzyteczne w takiej formie, Ty chcialbys je usunac poprzez ladowanie wszystkiego do jednej.

Nie ma takiej opcji konfiguracji translatora o jakiej mowisz, ale translator posiada metode addResource: https://github.com/symfony/Translation/blob...slator.php#L129
Zakladajac ze uzywasz plikow yml masz juz zarejestrowany loader 'yml', wiec wystarczy dodawac sciezki z tlumaczeniami.

Zakladajac, ze masz nastepujace pliki translacji:

$ cat app/Resources/translations/messages.en.yml
key: one
i
$ cat app/Resources/sample.yml
key: translatedKey

Po wywolaniu gdzies w template {{ 'key'|trans }} dosaniemy: one.

Teraz wystarczy dodac nasz customowy plik sample.yml poprzez addResource do translatora, np w kontrollerze:

  1. $this->get('translator')->addResource(
  2. 'yml',
  3. $this->container->getParameter('kernel.root_dir').'/Resources/sample.yml',
  4. 'en'
  5. );


Nie podajac domeny pliki zostana dodane do domeny messages, czyli domyslnej.

Oczywiscie, jesli ma to byc robione zawsze to lepiej uzyc compiler pass.
W AppBundle dodajemy pass:
  1. class AppBundle extends Bundle
  2. {
  3. public function build(ContainerBuilder $container)
  4. {
  5. parent::build($container);
  6.  
  7. $container->addCompilerPass(new TranslationCompilerPass());
  8. }
  9. }


i w samym compiler passie dodajemy resource do translatora:
  1. <?php
  2.  
  3. namespace AppBundle\DependencyInjection;
  4.  
  5. use Symfony\Component\DependencyInjection\ContainerBuilder;
  6. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  7.  
  8. class TranslationCompilerPass implements CompilerPassInterface
  9. {
  10. public function process(ContainerBuilder $container)
  11. {
  12. $container->getDefinition('translator.default')->addMethodCall('addResource', [
  13. 'yml',
  14. $container->getParameter('kernel.root_dir').'/Resources/sample.yml',
  15. 'en'
  16. ]);
  17. }
  18. }


Wtedy juz bedziemy dostawac z {{ 'key'|trans }} wynik: translatedKey.

Zeby nie ptrzeba bylo dodawac kazdego pliku osobno mozna pomyslec nad wyszukaniem wszystkich plikow w folderze albo dodaniem sobie opcji konfiguracji plikow i ladowanie tutaj wszystkich potrzebnych pod jedna domene.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 06:30