Плохая строка перевода 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

После того как я освежил свои старые навыки Ruby, я пока перевёл всех на английский. Следующим шагом открою задачу по локализации на иврит.

Спасибо @JammyDodger за перенос в 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 после копирования английского на иврит не исправит это?

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

Странно, но в коде Discourse даже «множественное число два» не поддерживается ни для одного из кодов языков, который ОБЩИЙ с арабским. Думаю, именно здесь нужно исправить проблему. Я создам PR для этого, но определённо необходимо исправить жёсткий сбой из-за «лишнего» поля many, так как, похоже, Crowdin не соответствует этому файлу plurals.rb.

Я думаю, это более сложно.
Переводы на фронтенде интерпретируются модулем node @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. Сейчас уже исправлено.

Спасибо всем, давайте продолжим отслеживать более широкую проблему в этой теме:

2 лайка