Это форум технической поддержки WPML – плагина для многоязычной WordPress.

Доступно для чтения всем, но только клиенты, купившие WPML, могут оставлять сообщения. Сотрудники WPML отвечают на сообщения форума 6 дней в неделю, 22 часов в сутки.

Our next available supporter will start replying to tickets in about 2.62 hours from now. Thank you for your understanding.

Помечено: 

This topic contains 6 ответов, has 2 голосов.

Last updated by davidB-55 6 мес., 3 нед. назад.

Assigned support staff: Andrey.

Автор Сообщения
Апрель 23, 2019 в 5:32 пп #3666521

davidB-55

Я пытаюсь чтобы wp_set_script_translations функция корректно загружала файлы переводов в json формате и чтобы эти переводы были доступны в JS файлах. Относительно части на стороне WP все используется корректно по рекомендациям WordPress Codex.

Проблему можно увидеть, если использовать wp_set_script_translations функцию, после чего в console.log вывести желаемое сообщение для перевода, напр.: "__('Test message', 'some_domain');", получаем отсутствие перевода и по пути "\wp-content\languages\wpml" сгенерированный "locale-domain-handle.json" с доменом "messages" в коде, вместо того что я указал и отсутствием переводов.
Так же описал проблему тут: https://stackoverflow.com/questions/55807783/how-to-make-work-wp-set-script-translations-function-automatically

Я покопался в файлах WPML плагина и обнаружил, что JED функции устанавливают домен "messages" по умолчанию и игнорируют домен пользователя, прошу исправить эти ошибки, чтобы все работало корректно. Спасибо.

Апрель 24, 2019 в 8:58 дп #3670727

Andrey
Supporter

Languages: Английский (English ) Русский (Русский )

Timezone: Europe/Kiev (GMT+02:00)

В настоящее время WPML может импортировать только переводы JS (в файлах JED / aka JSON). Затем WPML создает свои собственные JED-файлы из строк в БД.

Нужно проверить, существует ли автоматически сгенерированный файл WPML JED (это также может быть проблема с правами доступа к файлу). Если он существует, в чем к примеру разница между /languages/my_theme .json файл (родные переводы) и /wp-content/languages/wpml/ сгенерированный.json (переводы WPML).

Также проверьте статус /languages/my_theme .json в таблице icl_mo_files_domains. Если вы хотите повторно импортировать файл, Вы можете удалить соответствующую строку в этой таблице.

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

https://wpml.org/faq/install-wpml/

Апрель 24, 2019 в 4:23 пп #3675129

davidB-55

Спасибо, все эти рекомендации я выполнил до этого на локальном сайте, правда ни одного json файла в таблице icl_mo_files_domains нету, только .mo. Но то что ошибка при генерации json файла в файле wpml-st-jed-file-builder.php на строках 57 и 62 это точно, т.к. не возможно установить свой собственный домен, и конечно же лезть менять код плагина я не буду, так что пока не исправится по крайней мере эта ошибка, про другие говорить рано. Прикрепляю скриншоты ошибки, я использовал домен отличный от "messages" в wp_set_script_translations, хотя если в wpml-st-jed-file-builder.php файле указать правильный домен ради эксперимента, все равно корректные переводы не подтягиваются.

Апрель 25, 2019 в 9:22 дп #3680431

Andrey
Supporter

Languages: Английский (English ) Русский (Русский )

Timezone: Europe/Kiev (GMT+02:00)

Спасибо за более подробную информацию. Для того, чтобы передать этот вопрос разработчикам на рассмотрение мне нужно иметь рабочий пример. Так как, вопрос не связан с просто тестированием чего-то на стороне админ. панели, мне необходимо запросить тестовый сайт, где проблема была воспроизведена.

Следующий ответ установлен, как частный. Информацию, которую Вы ведете является частной, что означает только Вы и я могу видеть и иметь доступ к ней. Вы можете расшарить ссылки для скачивания копии сайта. Duplicator (https://wordpress.org/plugins/duplicator/) плагин может помочь создать копию.

Укажите там же, действия пошагово, чтобы я смог вопсроизвести, то что получаете Вы в своих тестах.

Апрель 30, 2019 в 7:31 пп #3714601

Andrey
Supporter

Languages: Английский (English ) Русский (Русский )

Timezone: Europe/Kiev (GMT+02:00)

Спасибо за информацию. Я сообщил о данном вопросе разработчикам. Я дам Вам знать здесь, как только будут новости.

Май 1, 2019 в 4:35 пп #3718929

Andrey
Supporter

Languages: Английский (English ) Русский (Русский )

Timezone: Europe/Kiev (GMT+02:00)

Я получил ответ от разработчиков и он говорит, о том что существует путаница в отношении того, что может WPML делать. Объяснение:

1. Когда скрипт A загружен, WordPress попытается загрузить соответствующий файл перевода JED.
2. WPML перехватит файл перевода скрипта A, проанализирует его и вставит все строки с их переводами в базу данных (в асинхронном процессе, через очередь импорта).
3. Когда скрипт A будет загружен снова, WPML создаст новый файл JED из переводов, которые он имеет в БД, и сохранит его в папке languages/wpml. Наконец, он предоставит файл WPML вместо исходного.
4. В следующий раз, когда скрипт A будет загружен, WPML будет подавать пользовательский файл перевода (но не будет пересоздавать его).
5. Если когда-нибудь и перевод скрипта будет отредактирован, JED-файл WPML будет удален (и мы начнем снова с шага 3).

Поэтому в настоящее время WPML не может сканировать строки в файле JS (у нас имеется по этому поводу внутренний тикет, возможно будет решено в будущем).

Однако мы заметили, что Вы создали файл PO / MO для скрипта. Вам удается просканировать его с помощью WPML, потому что в текущей теме есть несколько строк PHP, но это не ожидаемый процесс.

Процесс создания файла перевода JS выглядит следующим образом:
- Во-первых, нужно создать файл POT (для каждого скрипта JS).
- Затем перевести строки и построить файлы PO / MO (для каждого скрипта).
- Наконец, нужно преобразовать PO-файл в JED-файл (снова для каждого скрипта).

Я надеюсь эта информация поможет Вам двигаться дальше с проектом.

Май 2, 2019 в 4:20 пп #3726775

davidB-55

Спасибо! Будем пробовать. Успехов в доработки этого нужного функционала.