배지와 그룹을 어떻게 다국어(로컬라이제이션)로 설정할 수 있나요?

배지(badge)와 그룹을 어떻게 다국어(로컬라이제이션)로 설정할 수 있나요? 설정 중에 배지와 그룹의 제목이 테마 언어에 따라 바뀌지 않는 것을 확인했습니다. 배지와 그룹이 테마 전환을 따르도록 하려면 어떻게 해야 하나요?

다국어 사이트에서 사용자 정의 배지 및 그룹을 지역화할 수 있는 기능은 아직 존재하지 않으며, 현재는 게시물, 카테고리, 태그만 지역화할 수 있습니다.

네, 감사합니다. 그런데 왜 이 웹사이트(meta.discourse.org)의 배지가 테마와 함께 언어가 바뀌나요? 번역 기능 때문인가요? 공식 팀에서는 배지, 그룹, 태그에 대한 다국어 사용자 정의 설정을 추가해 주셨으면 좋겠습니다. 그렇지 않으면 다국어 사용자들이 배지, 그룹, 태그의 내용을 이해할 수 없기 때문입니다.

모든 사이트에는 Crowdin을 통해 국제화(i18n) 처리된 시드 배지가 몇 가지 있습니다.

커스텀 배지는 데이터베이스에 이름/설명을 일반 텍스트로 저장합니다. I18n.t(국제화 기능)가 badges.my_custom_badge.name과 같은 키로 호출되면 일치하는 번역이 없으므로 저장된 DB 값으로 폴백(fallback)됩니다. 즉, 모든 로케일에서 동일한 텍스트가 표시됩니다.

관리자가 로케일별로 커스텀 배지 키에 대한 번역을 수동으로 추가할 수 있는 우회 방법이 있습니다.

<your site>/admin/customize/site_texts에서 사이트 텍스트를 사용자 정의할 수 있습니다.


구체적인 단계

  1. 배지 생성
  • /admin/badges → New Badge로 이동
  • 이름, 설명, 아이콘 등을 정상적으로 설정
  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 - 배지 상세 페이지에 표시되는 전체 설명

english

japanese

안녕하세요! 답변 감사합니다! 2단계에서 "i18n 키"를 찾는 것이 어떻게 구현되는지 궁금합니다. i18n 키의 위치를 찾지 못했습니다.

실제로 “찾아내는” 것이 아니라, 배지에 붙일 이름에서 파생됩니다. (두 번째 단계에서 “find” 대신 "derive"를 사용하도록 업데이트할 예정입니다)

예를 들어 배지 이름을 "Bug Finder"로 사용한다면, 키는 badges.bug_finder.name이 됩니다.

정확한 원인은 모르겠지만, /admin/customize/site_texts에서 어떤 내용을 검색하든 "No matching site texts found"라는 메시지가 표시됩니다. 이 현상의 원인이 무엇인지 알고 계신가요?

아, 죄송합니다! 이전 단계에 오류가 있었습니다!

사이트 텍스트 관리자 페이지(/admin/customize/site_texts)는 Discourse의 번역 파일에 이미 존재하는 키만 찾을 수 있습니다. 따라서 badges.pokémon_master.name와 같은 사용자 지정 배지 키는 해당 파일에 존재하지 않으며, 이를 검색하면 아무것도 표시되지 않습니다(현재 겪고 계신 문제입니다).

제가 공유한 스크린샷은 Rails 콘솔을 통해 번역 항목을 생성한 환경에서 촬영한 것입니다. 제가 안내한 관리자 UI 단계는 그대로 적용할 수 없습니다. 혼동을 드려 죄송합니다. 콘솔 접근 권한이 있다면 사용자 지정 배지에 대한 번역 오버라이드를 생성할 수 있습니다:

# 키 패턴: badges.{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 님이 언급했듯이, 사용자 지정 배지의 지역화는 아직 지원되지 않습니다.

이 문제를 작은 플러그인(GitHub - canbekcan/discourse-localized-badges · GitHub)으로 해결했습니다. 이 플러그인을 사용하여 자신의 GitHub 저장소를 만들고 언어 파일을 수정할 수 있습니다. 마이그레이션은 필요하지 않지만, 필요할 경우 db 폴더를 확인하거나 db 폴더를 삭제하면 됩니다.

이 플러그인은 모든 언어 정보를 configlocales에 추가하는 방식으로 작동합니다. 몇 가지 파일이 있으며, 자신의 언어 파일을 만들 수 있습니다. 번역을 마친 후에는 자신의 저장소를 app.yml에 추가해야 합니다(도커를 사용하는 경우). 그 다음 rebuild를 실행합니다. 위에서 @nat가 언급했듯이, 새 배지를 badges.your_badge.name과 같이 이름 붙이면 됩니다. 그러면 언어 파일에 정의한 대로 일반 이름이 자동으로 표시됩니다. 현재 언어 파일을 업데이트할 때는 앱을 rebuild하는 대신 관리자 패널에서 업데이트할 수 있습니다.

파일 구조를 확인하고 locales 폴더에 자신의 언어 파일을 만들 수 있지만, 파일은 공백에 매우 민감합니다 :slight_smile:

참고: 이 글은 배지 언어 문제 해결을 위한 제 개인적인 해결책입니다. 더 나은 방법이 있다면 알려주시면 감사하겠습니다 :slight_smile: