过时的翻译替换导致缺失翻译

大家好。
在我大约一周前进行的更新之后,用户个人资料页面上出现了如下的按钮显示问题。我曾以为可以在接下来的几天进行的更新中修复它,并且虽然我进行了持续的更新,但问题并未得到改善。

1 个赞

这段文字在 Meta 上的您的个人资料中有效吗?

您过去自定义过该字符串吗?

我还发现了这个主题 Turkish translation issue with share dialog

4 个赞

在 meta 中似乎没有问题。但问题仍然存在于我自己的网站上。我没有进行任何自定义/本地化。
我也尝试了您提供的链接中的解决方案并重建了 Discourse。不幸的是,它没有奏效。

您是否尝试过使用其他浏览器或隐私浏览/无痕标签页?

感谢您的关心。
我在 4 种不同的浏览器和移动设备上都试过了。我可以明确地说,它不起作用。

那么您可能已经尝试过安全模式了。

1 个赞

安全模式下问题仍然存在,很遗憾。。。

已移至支持:

在这里能正确看到文本……您确定更新到绝对最新了吗?

1 个赞

当我检查时,我可以看到它是最新的。
我不明白是什么原因造成的。


我认为这与以下内容有关:

我能够重现土耳其语中“preferences”字符串损坏的问题。在更新之前,我自定义了 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 个赞

哇,我没看到这里有同样的 bug 报告()

我正在追踪它,但很奇怪,我认为这应该可以正常工作……我不知道这里发生了什么。

2 个赞

在生产站点上这样做应该是安全的。:+1: (不过在尝试修改 rails console 之前请务必备份,因为意外可能会发生)

不过,如果所有文本自定义都不起作用,您确定这是同一个问题吗?

2 个赞

此问题已在最新更新中得到解决。(3.4.0.beta1-dev)

1 个赞

是的,我也确认该问题已在当前更新中得到解决。

2 个赞

为了完善此事,这是修复的 PR::partying_face:

2 个赞

此主题已在 14 小时后自动关闭。不再允许回复。