2016-12-13 9 views
3

В проекте Symfony2, я работаю, переводы представляют собой файлы в нескольких файлах доменов какКак использовать несколько файлов переводов без доменов в Twig в Symfony2?

foo.en_GB.xlf 
bar.en_GB.xlf 
buz.en_GB.xlf 
... 
foo.de_DE.xlf 
bar.de_DE.xlf 
buz.de_DE.xlf 
... 
foo.fr_FR.xlf 
... 

Так в файлах Twig нужно определить домен, например:

{% trans from 'my_domain' %}my_key{% endtrans %} 

На самом деле мне не нужны домены в этом проекте. Все переводы являются частью одного большого домена. Итак, я хочу (1) использовать несколько файлы переводов и (2) в то же время, чтобы не заботиться о домене, так что

{% trans %}my_key{% endtrans %} 

должен работать на my_key переведенных в любом /.../translations/*.xlf файле.

Как использовать несколько файлов переводов без доменов в шаблоне Twig в Symfony2?

ответ

1

Это может быть достигнуто путем создания пользовательского загрузчика без перерыва ничего, все, что вам нужно использовать другое расширение файла:

namespace AppBundle\Translation\Loader; 

use Symfony\Component\Translation\Loader\XliffFileLoader; 

class FooFileLoader extends XliffFileLoader 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function load($resource, $locale, $domain = 'messages') 
    { 
     // ignoring $domain var and pass 'messages' instead 
     return parent::load($resource, $locale, 'messages'); 
    } 
} 

Register the translation loader:

services: 
    app.translation.loader.foo: 
     class: AppBundle\Translation\Loader\FooFileLoader 
     tags: 
      - { name: 'translation.loader', alias: 'foo' } 

Позже, вы должны назвать все ваши файлы:

bar.en_GB.foo 
baz.en_GB.foo 
bar.de_DE.foo 
baz.de_DE.foo 
... 

Все ваши права slation с расширением .foo будет объединен и включен в домен messages.

+0

Спасибо за ваш ответ! Я еще не расширил «XliffFileLoader», но изменил его (только для тестирования этого!) И добавил в начале ['XliffFileLoader # load (...)'] (https://github.com/symfony /translation/blob/master/Loader/XliffFileLoader.php#L31) '$ domain = 'messages';'. Но это не сработает. Вы пробовали свое решение? Он работает на вас? – automatix

+0

Я полагаю, что это будет работать только в случае одного файла перевода (на язык), который вызывает 'messages. {Locale}. {Alias}'. Но тогда нам не нужно расширять загрузчик файлов по умолчанию. – automatix

+0

Да, я пробовал свое решение и работает для всех файлов перевода с расширением '.foo'. – yceruto