헤더 로케일 선택기

:information_source: 요약 **헤더 로케일 선택기(Header Locale Selector)**는 사이트 헤더에 사용자를 위한 언어 선택기를 추가합니다.
:eyeglasses: 미리보기 theme-creator.discourse.org에서 미리보기
:hammer_and_wrench: 저장소 링크 GitHub - Ahmedgagan/header-locale-selector · GitHub
:open_book: 디스코urs 테마 초보자? 디스코urs 테마 사용 입문가이드

이 테마 컴포넌트 설치

이 테마 컴포넌트는 사이트 헤더에 사용 가능한 언어 드롭다운 메뉴를 추가합니다. 사이트의 기본 언어에 익숙하지 않은 사용자에게 매우 유용합니다.

참고: 이 기능은 로그인한 사용자에게만 제공됩니다.

스폰서

이 컴포넌트의 스폰서를 맡아주신 @Richard_Millington님께 특별한 감사의 말씀을 드립니다.

13개의 좋아요

이 기능을 더 눈에 띄게 만들고 국기 표시를 포함하면 다국어 포럼의 사용자에게 큰 도움이 될 것입니다.

생태계에 훌륭한 추가 기능입니다. :+1:

5개의 좋아요

정말 놀랍고 멋진 기능입니다! 팀이 이 구성 요소를 코어에 최소한으로 사전 설치된 테마 구성 요소로 추가하는 것을 고려해 주시길 추천드립니다!

이렇게 출시해 주셔서 진심으로 감사합니다!
:vulcan_salute::star_struck::+1:

2개의 좋아요

작은 기능 요청이 있습니다.

모바일에서 드롭다운 링크를 조정할 수 있도록 하는 것이 가능할까요?

채팅 플러그인을 활성화하면 화면이 매우 혼잡해질 것입니다. 데스크톱에서는 플래그를 사용하고, 모바일에서는 이전에 wasvit에서 했던 것처럼 2글자 약어를 사용하도록 설정할 수도 있을까요? 오랜만이네요. ㅋㅋ

아니면, 검색용 확대경 아이콘과 비슷한 크기로 스케일링을 적용하는 것도 방법일 것 같습니다.

멤버 중 한 명으로부터 받은 간단한 피드백입니다.

훌륭한 컴포넌트네요.

국기 표시와 함께 언어를 선택할 수 있는 기능은 멋지지만, 불행히도 몇 가지 오류가 있습니다. 크로아티아에는 국기가 표시되지 않았고, 카탈로니아는 스페인의 일부입니다.


그리고 모바일에서 국기 크기를 줄이는 데 사용할 수 있는 코드를 공유해 주실 수 있나요?

국기 대신 국가 코드를 사용할 수 있는 옵션이 가능할까요? Windows의 키보드 언어 설정과 유사한 방식이죠.

예를 들어 en, es 같은 코드 말입니다. 모바일에서 국기가 너무 크게 표시됩니다. 또는 국기 크기를 줄일 수 있는 옵션도 있으면 좋겠습니다.

CSS 오버라이드만 지원해도 유용할 것 같습니다. 감사합니다.

1개의 좋아요

네, 이 스위치는 토론의 일반적인 스타일에 맞게 수정해야 합니다. 지금은 너무 형편없어요.

1개의 좋아요

참고용 현재 모습 스크린샷:

데스크톱:

모바일:

이 컴포넌트가 제게 작동하지 않습니다. 켜서 템플릿을 선택하는 것 외에 다른 조치를 취해야 하나요?

최소한 부분적인 재구성이 필요합니다. 여러 문제를 수정하기 위해 기여하고 PR을 보내고 싶으신 분이 계시다면 환영합니다 :slight_smile:

1개의 좋아요

일단 broken 태그를 붙였습니다

컴포넌트가 손상되었지만 최신 버전과 호환 가능하도록 표시되어 있습니다

@volanar 그건 같은 컴포넌트가 아니에요.

1개의 좋아요

broken 태그를 제거합니다.

우선, 이 컴포넌트는 처음부터 깨져 있지 않았습니다!
Volanar가 깨졌다고 보고한 다른 Discourse 테마 컴포넌트에 대한 오해가 있었습니다.

해당 컴포넌트를 테스트해 보았으며, 최신 Discourse 버전에서도 여전히 정상적으로 작동합니다.
다만, 최신 Discourse 버전에서 잘 작동할 수 있도록 현대화하고, 비권장(deprecation) 문제를 해결하며, 사소한 문제를 수정하는 업데이트가 여전히 필요합니다.

이에 따라 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 이 테마 컴포넌트에 새로운 문제가 있는 것 같습니다:

여기서 참고할 점으로, 이 테마 구성 요소는 더 이상 필요하지 않으며, 위에서 나열된 사이트 설정에서 코어에 의해 지원됩니다. (문서)