Установить домен перевода по умолчанию на основе параметров в Symfony и Twig - PullRequest
0 голосов
/ 16 мая 2018

Приложение Symfony разворачивается на двух разных серверах, так как почти все они одинаковы, мы используем одну кодовую базу и показываем или не показываем определенные вещи во внешнем интерфейсе.

В нашем app/config/parameters.ymlфайл у нас есть строка page: foo на одном сервере, а на другом page: bar.Затем мы внедряем это в каждый шаблон ветки как глобальную переменную в нашем файле config.yml в разделе веток, например:

# Twig Configuration
twig:
    [...]
    globals:
        foobar: '%page%'

Этот шов работает так же, как когда мы выгружаем его в любой файл ветки {{ dump(foobar) }}получить правильное значение.

Проблема, однако, с файлами перевода.Поскольку эти два приложения совместно используют одно git-репо, нам нужен способ определить, какой домен перевода по умолчанию используется: одно приложение будет загружать messages_foo.xliff, а другое - messages_bar.xliff

В наших файлах веток мы поэтому добавили:

{% if foobar == 'bar' %}
    {% trans_default_domain "messages_bar" %}
{% else %}
    {% trans_default_domain "messages_foo" %}
{% endif %}

Однако при извлечении переводов он извлекает только messages_foo независимо от значения foobar.Затем мы скопировали messages_foo.xliff и назвали копию messages_bar.xliff, изменили там значение, очистили кеш и убедились, что параметр конфигурации был bar, однако twig по-прежнему полностью отображал значение для файла messages_foo.xliffигнорирование messages_bar.xliff.

Есть ли способ достичь этого?Единственный способ добиться этого без динамической установки default_domain - это иметь в git помимо ветки master ветки foo и bar, сначала объединить новые функции в master, а затем объединить master обав foo и bar, что кажется мне слишком сложным.

Еще одна вещь, которую мы пытались использовать вместо конструкции if else для простого вызова {% trans_default_domain foobar == 'bar' ? "messages_bar" : "messages_foo" %}, что привело к ошибке:

[LogicException]                                                        
Attribute "value" does not exist for Node "Twig_Node_Expression_Name".

Команда для извлечения сообщений: php bin/console translation:extract en --config=user --enable-extractor=jms_i18n_routing --output-format=xliff

Примечание:

  • Похоже, можно использовать переменную для домена перевода по умолчанию: https://github.com/symfony/symfony/issues/8469
  • Я знаю, что мы не можем установить глобальный домен перевода по умолчанию: Установить домен перевода для каждой ветки (AFAIK, также нет способа установить его вконтроллер или конфиг (который, вероятно, решит проблему под рукой, так что если вы что-то знаете, дайте мне знать))
...