Замена устаревшего перевода вызывает отсутствие перевода

Всем привет.
После обновления, которое я сделал примерно неделю назад, на странице профиля пользователя возникла проблема с отображением кнопки, как показано ниже. Я думал, что это будет исправлено в рамках предстоящих обновлений, и хотя я продолжал вносить обновления, ситуация не улучшилась.

1 лайк

Работает ли текст на вашем профиле здесь, в Meta?

Вы ранее настраивали эту строку?

Я также нашел эту тему Turkish translation issue with share dialog, так что, возможно, стоит попробовать пересобрать.

4 лайка

В meta, похоже, проблем нет. Но проблема сохраняется на моём собственном сайте. Я не вносил никаких изменений в настройку или локализацию.

Я также попробовал решение по ссылке, которую вы дали, и пересобрал Discourse. К сожалению, это не помогло.

Вы пробовали другой браузер или режим инкогнито?

Спасибо за вашу обеспокоенность.
Я попробовал в 4 разных браузерах и на мобильном устройстве. Я могу с уверенностью сказать, что это не работает.

Тогда вы, вероятно, уже пробовали безопасный режим.

1 лайк

К сожалению, проблема сохраняется в безопасном режиме. . .

Перенёс это в поддержку:

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

1 лайк

Когда я проверяю, я вижу, что всё актуально.
Не понимаю, что стало причиной этого.


Я думаю, это связано с

Мне удалось воспроизвести проблему, когда строка для настроек на турецком языке была повреждена. Я кастомизировал js.user.preferences до обновления, и после обновления новый js.user.preferences.title оказался поврежден.
Затем я выполнил

TranslationOverride.where(translation_key: "js.user.preferences").delete_all
TranslationOverride.send(:reload_locale!)

и это помогло :tada:

Но я бы подождил подтверждения от кого-то с большим опытом, прежде чем пробовать это сделать самостоятельно на продакшн-сайте.

3 лайка

Когда я проверяю, значение текста отображается корректно.

Я изменил текст по умолчанию, но это не помогло, и проблема сохраняется.

Безопасно ли делать это в продакшн-окружении? Кто-нибудь может подсказать?
Настройка текста на форуме не работает. Это касается не только этой области.

1 лайк

TL;DR: Существующее переопределение перевода грубо заменяет устаревшее пользовательское переопределение новым переводом, что вызывает проблемы с типами. Или, говоря иначе, не удалось обновить устаревшее переопределение перевода до статуса «устаревшее».

Проблема

На форуме, который я администрирую, существует переопределение перевода js.user.preferences. До этого коммита это была строка, поэтому переопределение перевода работало корректно.

После этого коммита ключ стал объектом. Однако переопределение перевода не определяет тип ключа и напрямую перезаписывает его на старую определенную строку. Это приводит к отсутствию перевода ключа в интерфейсе.

Как воспроизвести

Для последних версий форумов, похоже, требуется вручную вставить устаревшую запись, чтобы спровоцировать проблему:

INSERT INTO translation_overrides
  (locale, translation_key, value, created_at, updated_at)
VALUES 
  ('en', 'js.user.preferences', 'test', current_timestamp, current_timestamp);

Затем измените произвольный текст сайта, чтобы запустить обновление.

Похоже, что каким-то образом статус этого переопределения не был обновлен до «устаревшее»:

[5] pry(main)> TranslationOverride.last
  TranslationOverride Load (1.2ms)  SELECT "translation_overrides".* FROM "translation_overrides" ORDER BY "translation_overrides"."id" DESC LIMIT 1
=> #<TranslationOverride:0x00007f0b20a31e20
 id: 18,
 locale: "en",
 translation_key: "js.user.preferences",
 value: "test",
 created_at: Tue, 23 Jul 2024 17:08:17.317404000 UTC +00:00,
 updated_at: Tue, 23 Jul 2024 17:08:17.317404000 UTC +00:00,
 compiled_js: nil,
 original_translation: nil,
 status: "up_to_date">
2 лайка

Я перенёс ваш репродуцент в предыдущие отчёты, чтобы они были сгруппированы вместе. :+1:

1 лайк

Ого, я не заметил, что здесь уже есть похожий отчёт об ошибке ().

Я уже разбираюсь в этом, но это странно, мне кажется, это должно работать нормально… Не понимаю, что здесь происходит.

2 лайка

Это должно быть безопасно для производственного сайта. :+1: (однако, пожалуйста, сделайте резервную копию перед внесением изменений в консоль Rails, так как могут произойти ошибки)

Хотя, если никакая кастомизация текста не работает, вы уверены, что это та же самая проблема?

2 лайка

Эта проблема была решена в последнем обновлении. (3.4.0.beta1-dev)

1 лайк

Да, я также подтверждаю, что проблема была решена в текущем обновлении.

2 лайка

Чтобы завершить это, вот PR с исправлением: :partying_face:

2 лайка

Эта тема была автоматически закрыта через 14 часов. Новые ответы больше не принимаются.