히브리어 클라이언트 로케일에서 잘못된 MF 번역 문자열로 인해 치명적인 사이트 오류 발생

컨테이너에 들어가서 vim을 설치하고 로케일을 복구하겠습니다.
깨진 히브리어 로케일을 저장한 후 영어 로케일로 덮어쓰는 것도 방법입니다 …

root@carrie-app:/var/www# for i in `find . -name *.he.yml` ; do cp ${i/he.yml/en.yml} $i ; done

귀여운 아이디어였지만, 실제로는 작동하지 않았습니다. 로케일을 다시 HE로 전환했을 때 오류가 발생했습니다. 당분간은 사용자를 반복하면서 모두 영어로 설정하는 방식으로 돌아가야 할 것 같습니다.

로케일을 수정한 후 Discourse를 재시작하셨나요?

응. 별로 한 게 없었어.

image

예전 루비 실력을 좀 뽐낸 뒤에 일단 모두를 영어로 전환해뒀어. 다음에 히브리어 로케일 관련 티켓을 열 거야.

@JammyDodger 님, Contribute > Bug 채널로 옮겨 주셔서 감사합니다. 버그 리포트를 열려면 이것만으로 충분한 건가요, 아니면 별도의 버그 트래커에서 공식적인 리포트를 여야 하나요?

en 로케일을 복사하면 병합 과정에서 오류가 발생합니다(번역되지 않은 항목이 제거되고, 아무것도 남지 않으면 오류가 발생하는 것 같습니다).

그러나 config/locales/client.he.yml 파일을 제거하면 테스트 사이트에서 로그인이 가능합니다.

EN에 완전히 의존하기 때문입니다. 이것이 예상되는 동작이라고 생각합니다.

히브리어 로케일 config/locales/client.he.yml에서

    posts_likes_MF: |
      { count, plural,
          one {תגובה,}
          two {שתי תגובות,}
          many {# תגובות,}
        other {# תגובות,}
      }{ ratio, select,
          low { יחס גבוה בין פוסטים ללייקים,}
          med { יחס גבוה מאוד בין פוסטים ללייקים,}
         high { יחס גבוה במיוחד בין פוסטים ללייקים,}
        other {}
      } קפיצה לפוסט הראשון או האחרון…

다음 줄을

          many {# תגובות,}

삭제해야 합니다.

히브리어에서는 many를 사용할 수 없습니다(Language Plural Rules 참고)

이 문제는 사용자 인터페이스를 통해 해결할 수 있습니다. 이를 위해 히브리어로 /admin/customize/site_texts/js.posts_likes_MF에 수정된 값을 입력해야 합니다:

{ count, plural,
    one {תגובה,}
    two {שתי תגובות,}
   other {# תגובות,}
}{ ratio, select,
    low { יחס גבוה בין פוסטים ללייקים,}
    med { יחס גבוה מאוד בין פוסטים ללייקים,}
   high { יחס גבוה במיוחד בין פוסטים ללייקים,}
  other {}
} קפיצה לפוסט הראשון או האחרון…

텍스트 커스터마이징에 잘못된 데이터를 입력하면 사이트 전체가 사용할 수 없게 될 수 있다는 사실은 다소 이상하게 느껴집니다.

2개의 좋아요

여기에 기록하는 것이 버그 리포트 작성의 적절한 곳입니다. :+1:

2개의 좋아요

git으로 들어가서 그 줄에 대해 누가 책임져야 하는지 확인해 보려고 합니다. 그 파일에 커밋할 수 있는 권한이 있는 쪽은 crowdin뿐인 줄 알았는데 말이죠.
또한, 만약 그렇다면 영어를 히브리어로 복사한 후 unicorn을 재시작해도 이 문제가 해결되지 않는 이유는 무엇일까요?

허용되지 않음(not allowed)과 지원되지 않음(unsupported) 사이에는 명확한 구분이 있어야 합니다.

이상하게도, Discourse 코드에서는 아랍어와 공유되는 언어 코드에 대해 "두 개의 복수(plural two)"조차 지원되지 않습니다. 이 부분이 문제를 해결해야 할 곳이라고 생각합니다. PR을 만들 예정이지만, Crowdin이 이 plurals.rb 파일을 따르지 않는 것으로 보아, “불필요한” many 필드에 대한 하드 페일(hard fail)을 수정할 필요성이 분명히 있습니다.

나는 그보다 더 복잡한 문제라고 생각한다.
프론트엔드 번역은 @messageformat/core 노드 모듈이 messageformat-wrapper를 사용하여 해석한다.

문제는 복수 규칙이 두 곳에 정의되어 있다는 것입니다. 다른 한 곳은 최근 라이브러리(DEV: Upgrade the MessageFormat library (JS) · discourse/discourse@301713e · GitHub)를 사용하도록 변경되었습니다.

그러나 라이브러리에 정의된 복수형은 이전 Discourse에서 사용하던 것과 항상 동일하지 않으며, plurals.rb에 있는 정의는 변경되지 않았습니다. Inconsistency in plural definition

하지만 이것이 Crowdin이 많은 항목에 대해 별도의 버전을 생성한 이유를 설명하지는 않습니다.

2개의 좋아요

번역에 필요한 필드 규칙을 추가했지만, 이는 이 버그에 대한 해결책이 아니라 Crowdin 출력을 위한 호환성 처리일 뿐입니다.

줄 끝의 규칙도 조정이 필요하다고 생각합니다.
현재 이 규칙은 여전히 "one"과 "other"만 언급하고 있습니다.
rule: lambda { |n| n == 1 ? :one : :other }

네, 제 실수였습니다. amend로 수정했는데, --force 없이 push한 사실을 놓쳤네요. 이제 수정했습니다.

모두 감사합니다. 더 넓은 범위의 문제는 이 주제에서 계속 추적하겠습니다:

2개의 좋아요