Выбор локализации заголовка

:information_source: Краткое описание Header Locale Selector добавляет в заголовок сайта селектор языка для пользователей.
:eyeglasses: Предпросмотр Предпросмотр на theme-creator.discourse.org
:hammer_and_wrench: Ссылка на репозиторий GitHub - Ahmedgagan/header-locale-selector · GitHub
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

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

Примечание: эта функция доступна только для авторизованных пользователей.

Спонсор

Особая благодарность @Richard_Millington за спонсирование этого компонента.

13 лайков

Сделать это более заметным и добавить флаги действительно могло бы помочь пользователям на многоязычных форумах.

Отличное дополнение к экосистеме. :+1:

5 лайков

Это потрясающая и замечательная функция! Я рекомендую команде рассмотреть возможность включения этого компонента как минимум в качестве предустановленного тематического компонента в ядре!

Огромное спасибо за выпуск этой функции!
:vulcan_salute::star_struck::+1:

2 лайка

У меня есть небольшая просьба по улучшению.

Возможно ли сделать выпадающую ссылку адаптируемой для мобильных устройств?

Если я включу плагин чата, интерфейс станет очень перегруженным. Возможно, стоит сделать эту настройку конфигурируемой: на рабочем столе использовать флаги, а на мобильных устройствах — двухбуквенные обозначения, как это было в ранних версиях Windows (wasvit). Прошло уже много времени, ха-ха.

Хотя, возможно, масштабирование сработает, чтобы размер был сопоставим с иконкой лупы поиска.

Вот немного отзывов от одного из участников.

Отличный компонент!

Выбор языков с флагами — это круто, но, к сожалению, есть некоторые ошибки. У Хорватии нет флага.
Каталония является частью Испании.


Также, не могли бы вы поделиться кодом для уменьшения размера флагов на мобильных устройствах?

Возможно ли добавить опцию использования кода страны вместо флагов? Аналогично выбору языка клавиатуры в Windows.

Например: en, es и т. д. Флаг на мобильных устройствах занимает слишком много места. Или хотя бы опция уменьшения размера флага.

Даже возможность переопределения через CSS была бы полезна. Спасибо.

1 лайк

Да, этот переключатель нужно изменить, чтобы он соответствовал общему стилю речи. Сейчас он ужасен.

1 лайк

Скриншоты текущего вида для справки:

Десктоп:

Мобильная версия:

Этот компонент не работает у меня. Есть ли что-то ещё, что нужно сделать, кроме включения и выбора шаблона?

Его нужно хотя бы частично переделать. Если кто-то захочет внести вклад и отправить PR для исправления различных проблем, это будет с радостью принято :slight_smile:

1 лайк

Временно помечено как broken

Компонент сломан, но помечен как совместимый с последней версией

@volanar Это не тот же самый компонент.

1 лайк

Я удаляю тег broken.

Во-первых, компонент никогда не был сломан!
Возникло недопонимание относительно другого компонента темы Discourse, о котором Volanar сообщил как о неработающем.

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

Я уже создал запрос на слияние (PR) (спонсор: @Richard_Millington) :+1:

6 лайков

PR принят в основную ветку; спасибо, Ахмед. :+1:

4 лайка

Как использовать 2 или 3 языка и убрать остальные?
Кстати, я оптимизировал код для locale-selector.js:

import Component from "@ember/component";
import { action } from "@ember/object";
import { inject as service } from "@ember/service";
import { ajax } from "discourse/lib/ajax";
import { userPath } from "discourse/lib/url";
import { isTesting } from "discourse-common/config/environment";

export default class LocaleSelector extends Component {
  @service currentUser;

  get availableLocales() {
    // Кэшируем отфильтрованные локали для оптимизации производительности
    if (!this._filteredLocales) {
      const allLocales = JSON.parse(this.siteSettings.available_locales);
      this._filteredLocales = allLocales.filter(locale => ['en', 'ar'].includes(locale));
    }
    return this._filteredLocales;
  }

  @action
  onChangeLocale(value) {
    this.set("currentUser.locale", value);
    ajax(userPath(`${this.currentUser.username_lower}.json`), {
      data: { locale: this.currentUser.locale },
      type: "PUT",
    }).then(() => {
      if (!isTesting()) {
        location.reload();
      }
    });
  }

  defaultItem() {
    const currentUserLocale = document.documentElement
      .getAttribute("lang")
      ?.replaceAll("-", "_");

    return (
      this.content.find((val) => val.value === currentUserLocale) ||
      this.content.find((val) => val.value === this.siteSettings.default_locale)
    );
  }
}

После тестирования Discourse продолжает зависать.
Есть какие-то идеи?

available_locales имеет следующую структуру:

[
  {
    name: "English (US)",
    value: "en"
  },
  ...
] 

Поэтому в вашем коде нужно использовать locale.value. :+1:

@Ahmed_Gagan Похоже, возникла новая проблема с этим компонентом темы:

Просто заметка: этот компонент темы больше не нужен, так как он поддерживается ядром в указанных выше настройках сайта. (Документация)