Мультиязычный плагин 🌐

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

:page_facing_up: Получить исходный код

:book: Прочитать документацию


Обзор возможностей

Плагин «Многоязычность» расширяет существующую систему локалей Discourse, предоставляя вам:

  1. административный интерфейс для всех языков, используемых на вашем форуме;

  2. систему языков контента, позволяющую вам и вашим пользователям фильтровать контент на форуме по языку;

  3. интеграцию с плагином «Переводчик Discourse», автоматизирующую работу некоторых аспектов системы языков контента;

  4. возможность переводить названия категорий, теги и другой полустатический текст на вашем форуме;

  5. возможность отключить использование существующих языков интерфейса на вашем форуме;

  6. возможность добавлять собственные языки интерфейса («локали») непосредственно на ваш форум;

  7. расширенные функции языка для гостей, включая переключатель языка интерфейса гостя («локаль») (в виде нижней панели или меню); и

  8. необязательные поля выбора языка интерфейса и языка контента при регистрации (скоро).


:point_right: Обратите внимание

Все вышеперечисленные функции работают поверх существующей системы локалей Discourse и функционируют в сочетании со всеми возможностями этой системы (см. более подробное объяснение здесь).

Если вы хотите добавить языки интерфейса («локали») в Discourse, лучший способ сделать это — следовать инструкциям, изложенным здесь: How to add a new language. Также можно добавить локаль через плагин, как описано здесь.

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


Примеры скриншотов

Административный интерфейс

Перевод полустатического текста (и переключатель локали гостя)

Система языков контента

Screen Shot 2020-02-25 at 2.24.51 PM

Интеграция системы языков контента с плагином «Переводчик»


Благодарности

Этот плагин стал возможен благодаря поддержке Фонда Викимедиа, в частности, при участии @Elena_Lappen и @icaria36, которые внесли значительный вклад в разработку функциональности.

Для дальнейшего обсуждения идей, лежащих в основе этого плагина, см.:

Structuring a multilingual community

68 лайков

Вау! Вы были очень заняты. :slight_smile: Отличная работа, @angus! С нетерпением жду примеров этого в реальной жизни. Дайте знать, если понадобится кто-то вроде меня, чтобы посмотреть и дать обратную связь.

Одним из пробелов было отсутствие функции, позволяющей сотрудникам улучшать переводы постов, предоставленных плагином перевода — будет ли это частью текущей работы?

10 лайков

Хм. Я не исключаю этого, но это, вероятно, больше относится к сфере плагина Translate.

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

«x переводов отсутствуют на этой странице. Помогите нам перевести их здесь: (ссылка на Transifex для Discourse)».

7 лайков

Отличная работа, как всегда, Энгус! Я тестировал это на своём сайте и столкнулся с парой небольших проблем и возникло несколько вопросов.

Проблемы

  1. При редактировании существующей темы текст выпадающего меню не соответствует цветам темы:

  1. Настройка языка контента становится очень неудобной при добавлении нескольких языков из-за отображения в одну строку:

Вопросы

  1. Похоже, что многим нашим старым темам автоматически присваивается языковой тег, что желательно, но пока это касается лишь нескольких тем. Будет ли запущена фоновая задача для присвоения тега всем существующим постам в будущем? Если нет, есть ли способ присвоить языковой тег всем существующим постам? Наш сайт до сих пор был исключительно на английском, поэтому я хочу, чтобы все существующие посты имели тег en.
  2. Когда в настройках «Языки контента» указано несколько языков, можно ли фильтровать по отдельному языку? В данный момент при клике на один из языков в выпадающем списке ничего не происходит.
2 лайка

Спасибо за обратную связь, Дэвид, и за то, что попробовали это. Я внес ряд обновлений, которые, среди прочего, исправляют две проблемы, которые вы упомянули выше.

Пока нет. В настоящее время только сообщения, переведённые плагином Translator, автоматически получают тег контента ретроспективно (если плагин Translator включён и включена функция синхронизации).

Я могу добавить такую задачу, но она должна будет принимать конкретный язык в качестве параметра и выполняться в определённых границах. Помимо охвата «весь сайт», я могу реализовать это по категориям или по тегам (не относящимся к контенту) (например, применить этот тег контента ко всем темам в этой категории или с этим другим тегом). Что бы подошло вам?

Нет, список предназначен только для того, чтобы показать вам, какие языки контента в настоящее время установлены. Не могли бы вы подробно описать, как вы ожидаете (или хотели бы), чтобы это работало?

2 лайка

Спасибо, Энгус, это решило мои проблемы.

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

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

Кстати, я бы очень хотел иметь возможность переместить кнопку языка. В моей панели навигации уже много элементов, и она начинает выглядеть загромождённой. Кроме того, подсвеченная кнопка выглядит неуместно над кнопкой «Новая тема», из-за чего она сдвигается вниз. Неужели нельзя переместить её в начало панели навигации, например, перед Latest? Или она могла бы плавать в углу, как у меня на главной странице WordPress: https://naturephotographers.network, или располагаться в заголовке, аналогично опции в плагине перевода.

Я понимаю ваше решение разместить её в панели навигации, так как фильтрация происходит аналогично другим кнопкам, но дело в том, что это настраивается один раз и затем забывается. Это не то, что вы будете регулярно использовать для фильтрации по разным языкам.

Ещё раз спасибо, этот плагин вместе с переводом — настоящий прорыв.

3 лайка

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

Однако в качестве опции была бы полезна функция «массового добавления тегов».

2 лайка

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

@angus, я не на 100% уверен, связано ли это с вашим плагином или с изменением в ядре, но, возможно, я столкнулся с ошибкой. Когда я редактирую существующее сообщение, вношу изменения и пытаюсь сохранить, получаю ошибку «Ни один из выбранных вами тегов не может быть использован». Теги не установлены, кроме тега en, а параметр «минимальное количество тегов, необходимых в теме» установлен на 0. Есть какие-либо идеи?

2 лайка

Сегодня столкнулся с ещё одной проблемой, Энгус. Ранее у меня был тег ig (сокращение от Instagram), который плагин удалил, чтобы освободить место для языка игбо. Предполагаю, что вернуть его уже нельзя? Я пробовал отключить плагин в надежде, что тег всё ещё где-то сохранился, но, увы, похоже, он безвозвратно утерян. Я понимаю, что это риск, на который идут при тестировании плагинов. Возможно, стоит добавить предупреждение о том, что плагин удалит любые теги с таким же именем.

3 лайка

Я напишу вам об этом в личные сообщения (скорее всего, он не был утерян).

Другие полезные предложения и обратную связь я рассмотрю завтра.

3 лайка

Боже мой! Вы потрясающий!
Я имею в виду, я действительно восхищаюсь вами. Хотя я также надеюсь, что этот пост не отвлечёт внимание людей от вашей замечательной работы.

7 лайков

Просто заметка: Дэвид и я решили эту проблему и восстановили существующие теги ig.

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

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

9 лайков

Уважаемый Ангус, возможно ли использовать только переключатель языка для гостей? Мне не нужны все функции этой системы — нужно лишь предоставить гостям возможность менять язык интерфейса.

2 лайка

Каждая функция плагина работает независимо.

Установите плагин и просто включите переключатель локалей: Pavilion.

Мы используем этот плагин для этих целей на thepavilion.io.

4 лайка

Отличная работа, @angus!

Мы установили плагин, но теперь пользователи, включая сотрудников, больше не видят ни одного контента. Однако при редактировании категории и попытке её удаления появляется следующее предупреждение:

Единственный способ открыть тему — перейти по ссылке в сообщении предупреждения или знать URL темы. Если мы откроем тему (RIO Paris) и добавим языковой тег, например «english», то она станет видимой, как и ожидалось. Мы предполагаем, что плагин Multilingual работает корректно: отображается только контент, связанный с тегом. Однако нам кажется вводящим в заблуждение и запутывающим, что пользователи не могут увидеть все связанные темы без привязки языкового тега. У нас есть тысячи ранее опубликованных тем, которые сейчас невидимы. Есть ли решение, чтобы быстро назначить языковые теги им, поскольку мы сейчас не видим списка?

Пожалуйста, дайте совет.

Редакция: Я решил проблему с видимостью, добавив теги ко всем темам определённых категорий в соответствии с языком, который они должны использовать, через Rails:

  1. cd /var/discourse, затем ./launcher enter app
  2. Получение ID категорий с помощью rake categories:list
  3. Если категория, которая должна содержать только темы на немецком, имеет ID 245, выполните rake tags:bulk_tag_category["de",245]
1 лайк

После выполнения команды
./launcher rebuild app
появляется пустая страница.

Обнаружил, что это вызывает данный плагин. Не могу открыть сайт и панель администратора.
Я активировал только многоязычный контент, но не заполнял его.

Как можно сбросить настройки этого плагина в базе данных?

Работает ли ваш .website.com/safe-mode?

Я деактивировал этот плагин. Проблемы начались с исчезновения списка плагинов в панели администратора. После этого я попытался пересобрать приложение. Но после пересборки сайт не открывался. Теперь он открывается, но с этим плагином деактивированным.

@angus, не могли бы вы проверить свой плагин с новой версией Discourse?

в безопасном режиме без неофициальных плагинов я вижу эту страницу без списка плагинов:

безопасный режим без всех плагинов:

Возможно ли сбросить настройки этого плагина в базе данных?

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

1 лайк