Текст заголовка приветствия %{site_name} выдает ошибку: недопустимый ключ интерполяции site_name

Следующий ключ интерполяции недопустим: site_name

Я думаю, что «Site_text» недоступен. Когда я пытаюсь отредактировать текст по адресу /admin/customize/site_texts/js.welcome_banner.header.new_members?locale=en, я вижу, что доступно только имя.


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

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

По какой-то причине для анонимных посетителей работает только %site_name.

Я хотел бы сделать:

Добро пожаловать, %{preferred_display_name}, на %{site_name}!

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

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

Да, но я бы хотел использовать %site_name также для авторизованных пользователей :smiley:

Спасибо за сообщение! Похоже, я переоценил, какие переменные доступны… Скоро выйдет обновление, которое исправит это.

Получается, мы всё ещё не можем добавить %{site_name}, если пользователь авторизован?

Хм… похоже, что так:


Думаю, вы сможете отобразить название сайта с помощью компонента темы, сделав запрос к /about.json и получив заголовок сайта (я посмотрел на сервис site и не нашёл ничего о заголовке сайта).

Сервис siteSetting может подойти для получения значения настройки сайта title

Я изучил этот вопрос. Проблема здесь не в доступе к значению title. Проблема в том, что бэкенд проверяет переводы, извлекая допустимые ключи интерполяции из строк локали по умолчанию.

Поэтому, если %{site_name} отсутствует в строке локали по умолчанию, он отклоняется как «недопустимый ключ интерполяции».

Я не знаю, какая идея у @NateDhaliwal. Я лишь хотел предложить альтернативу дополнительному запросу к /about.json.

Думаю, правильным решением будет создание пользовательского компонента, который копирует приветственный баннер, но добавляет ключ site_name для всех текстов.
Или же PR, который добавляет site_name как доступный ключ для текстов авторизованных пользователей в ядре.

  get headerText() {
    if (!this.currentUser) {
      return i18n("welcome_banner.header.anonymous_members", {
        site_name: this.siteSettings.title,
      });
    }

    const isNewUser = !this.currentUser.previous_visit_at;
    const key = isNewUser
      ? "welcome_banner.header.new_members"
      : "welcome_banner.header.logged_in_members";

    return i18n(key, {
      preferred_display_name: sanitize(
        prioritizeNameFallback(this.currentUser.name, this.currentUser.username)
      ),
+     site_name: this.siteSettings.title,
    });
  }

@hipp0 ещё раз спасибо за то, что подняли эту тему! Мы выпустили обновление, которое делает переменную site_name доступной во всех трёх полях заголовка: