Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2][SF2]Translation domain
Forum PHP.pl > Forum > PHP > Frameworki
BigPig
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.
skowron-line
domyslna domena jest messages
BigPig
Wiem, wyczytałem to gdzieś w necie. Ale jak ją zmienić?

Ewentualnie zostaje jeszcze importowanie innych plików translacji do pliku messages tongue.gif
skowron-line
Jak masz w roznych plikach to jak sobie to wyobrazasz questionmark.gif (chyba ze w bundlach masz pliki messages)
BigPig
Wyobrażam to sobie mniej więcej tak:
  1. //app/config/config.yml
  2. translator:
  3. domains:
  4. bleble
  5. hehehe
  6. admin



I po takim załadowaniu pliki translacji są łączone, i nie trzeba podawać parametru domeny przy wywołaniu translacji.

To może inaczej, czy jest jakieś rozwiązanie, które pozwoli mi na wywołanie translacji bez podawania nazwy domeny translacji jako parametru? Pomijamy te opcje:
- zamieszczenie wszystkich translacji w pliki messages
- ustawienie {% trans_default_domain "some_domain" %}
blahy
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.
skowron-line
Napisz sobie takie rozwiazanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.