Передача перевода Symfony в Symfony Webpack Encore

С Symfony я использую компоненты перевод, Twig и Webpack на бис.

Я могу перевести в интерфейс Twig с помощью:

'my_key'|trans

Я использую команду yarn encore dev для создания моего app.js, но Компонент перевода PHP недоступен в Javascript.

Мне нужно много чего перевести в javascript.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 395
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны использовать BazingaJsTranslationBundle, который позволяет вам получить доступ к переводам, которые вы предоставили через javascript:

Translator.trans('key', {}, 'DOMAIN_NAME');

Translator.transChoice('key', 1, {}, 'DOMAIN_NAME');
Ответ принят как подходящий

К сожалению, поскольку JS не обрабатывается PHP и, соответственно, не Symfony, у вас не будет доступа к компоненту перевода Symfony внутри ваших js-файлов.

Обходной путь, который может работать, когда у вас не так много переводов, которые вам нужно передать, — это создать объект данных JS внутри вашего шаблона twig как часть вашего приложения Symfony, а затем получить к нему доступ из ваших файлов js. Так примерно так:

# inside your twig template, e.g. index.html.twig
{% block javascripts %}
    <script type = "text/javascript">
    const TRANSLATION_MAP = {
        'my_key': "{{ 'some_key '|trans }}",
        'my_other_key': "{{ 'other_key '|trans }}"
    };
    </script>

    {{ parent() }} # This loads all your js files which can then access the translation map defined above
{% endblock %}

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

В общем, это может быть не лучшим решением, но может быть достойным обходным путем для небольших проектов, пока вы не обнаружите, что это становится более неприятным, и вам нужно найти что-то более сложное.

это решение, но вам нужно добавить тег <script>, например: <script> const TRANSLATION_MAP = { ... } </script>

Pamela Pereyra 12.06.2021 16:39

На самом деле это довольно удобное решение для непродолжительного использования.

Mecanik 10.08.2021 10:31
  1. Вы можете преобразовать переводы yaml в json с помощью webpack или диспетчера задач (gulp | grunt).
  2. Поместите созданные файлы перевода JSON в активы.
  3. Требуйте их внутри js-скрипта.
  4. Передайте значение локали во внешний интерфейс, чтобы выбрать правильный перевод json-объекта внутри js-скрипта.

Примечание: в случае веб-пакета вы должны последовательно выполнить 2 шага: На первом этапе будут созданы переводы ресурсов, которые потребуются в js-скриптах. второй шаг впоследствии скомпилирует js-скрипты.

Вот часть конфигурации webpack encore, которая преобразует файлы переводов *.yaml в json с помощью «js-yaml» и помещает их в каталог ресурсов:

.addPlugin(new CopyWebpackPlugin(
    {
        patterns: [
            {
                from: './translations/*.yaml',
                to: './[name].json',
                transform(content) {
                    return Buffer.from(
                        JSON.stringify(
                            yaml.safeLoad(content.toString('utf8'), {schema: yaml.JSON_SCHEMA})
                        ),
                        'utf8'
                    )
                }
            }
        ],
    }));

Другие вопросы по теме