Как можно локализовать (мультиязычно) бейджи и группы?

Как можно локализовать значки и группы (поддерживать несколько языков)? Во время настройки я заметил, что заголовки значков и групп не меняются вместе с языком темы. Как сделать так, чтобы значки и группы следовали переключению темы?

3 лайка

Возможность локализации пользовательских значков и групп для многоязычного сайта пока отсутствует — на данный момент можно локализовать только посты, категории и теги.

1 лайк

Хорошо, спасибо. Но почему бейджи на этом сайте (meta.discourse.org) меняют язык вместе с темой? Это вызвано функцией перевода? Предлагаю официальному комьюнити добавить настройки многоязычной кастомизации для бейджей, групп и тегов; в противном случае многоязычные пользователи не смогут понять содержимое бейджей, групп и тегов.

2 лайка

На каждом сайте есть предустановленные значки, которые интернационализируются (i18n) через Crowdin.

Пользовательские значки хранят название и описание как обычный текст в базе данных. Когда вызывается I18n.t (функция интернационализации) с ключом вроде badges.my_custom_badge.name, соответствующий перевод не находится, поэтому система возвращается к значению, сохранённому в БД — один и тот же текст для всех локалей.

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

Вы можете настроить тексты своего сайта по адресу <ваш сайт>/admin/customize/site_texts.


Конкретные шаги для вас:

  1. Создайте значок
  • Перейдите в /admin/badges → Новый значок
  • Укажите название, описание, иконку и т. д. как обычно
  1. Определите ключ i18n
  • Шаблон ключа: badges.{snake_case_name}.name
  • snake_case_name — это название значка в нижнем регистре, где пробелы заменены на подчёркивания
  • Например: “Pokémon Master” → badges.pokémon_master.name
  1. Добавьте переопределения переводов
  • Перейдите в /admin/customize/site_texts
  • Найдите badges.pokémon_master
  • Вы увидите ключи, такие как:
    • badges.pokémon_master.name
    • badges.pokémon_master.description
    • badges.pokémon_master.long_description
  • Переключитесь на нужную локаль (например, 简体中文), кликните по ключу и введите переведённый текст
  1. Повторите для каждой локали
  • Переключайте локаль в выпадающем списке и добавляйте переводы для каждого необходимого языка
    • .name — заголовок значка
    • .description — краткое описание, отображаемое на карточках значков
    • .long_description — полное описание, отображаемое на странице деталей значка

английский

японский

4 лайка

Привет! Спасибо за ответ! Подскажите, пожалуйста, как именно реализуется второй шаг — поиск «i18n key»? Я не смог найти, где находится i18n key.

1 лайк

Вы не совсем «находите» его, а просто выводите из названия, которое вы дадите бейджу. (Обновлю второй шаг, чтобы использовать «выводить» вместо «находить»)

Так что, если вы используете «Bug Finder» в качестве названия бейджа, ключом будет badges.bug_finder.name

1 лайк

Неизвестно по какой причине, при поиске любого содержимого в `/admin/customize/site_texts` всегда отображается сообщение «No matching site texts found». Не могли бы вы подсказать, в чём может быть причина?

1 лайк

Ой, извините, мне нужно исправить мои предыдущие шаги!

Страница администрирования текстов сайта (/admin/customize/site_texts) может находить только ключи, которые уже существуют в файлах переводов Discourse. К сожалению, ключи для пользовательских значков, такие как badges.pokémon_master.name, там отсутствуют, поэтому поиск по ним ничего не вернёт (это именно та проблема, с которой вы столкнулись).

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

# шаблон ключа: badges.{name_in_snake_case}.{name|description|long_description}
# например, для значка под названием "Pokemon Master":
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "Мастер покемонов")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "Ваше описание")

После создания через консоль перевод появится в разделе /admin/customize/site_texts, и в дальнейшем его можно будет редактировать оттуда.

Если у вас нет доступа к консоли, это в настоящее время невозможно. Локализация пользовательских значков пока не поддерживается, как уже упоминал @awesomerobot.

4 лайка