mirror of
https://github.com/discourse/discourse.git
synced 2025-01-23 07:19:28 +08:00
DEV: Output failing MF keys when compilation fails
Currently, when the MessageFormat compiler fails on some translations, we just have the raw output from the compiler in the logs and that’s not always very helpful. Now, when there is an error, we iterate over the translation keys and try to compile them one by one. When we detect one that is failing, it’s added to a list that is now outputted in the logs. That way, it’s easier to know which keys are not properly translated, and the problems can be addressed quicker.
This commit is contained in:
parent
7bf7bc2b8c
commit
aedfb12eda
|
@ -163,7 +163,17 @@ module JsLocaleHelper
|
|||
require("discourse-mf");
|
||||
JS
|
||||
rescue => e
|
||||
Rails.logger.error("Failed to compile message formats for #{locale} '#{e}'")
|
||||
message_formats[locale.to_s]
|
||||
.filter_map do |key, value|
|
||||
next if MessageFormat.compile(locale, value, strict: false)
|
||||
rescue StandardError
|
||||
key
|
||||
end
|
||||
.then do |strings|
|
||||
Rails.logger.error(
|
||||
"Failed to compile message formats for #{locale}.\n\nBroken strings are: #{strings.join(", ")}\n\nError: #{e}",
|
||||
)
|
||||
end
|
||||
<<~JS
|
||||
console.error("Failed to compile message formats for #{locale}. Some translation strings will be missing.");
|
||||
JS
|
||||
|
|
|
@ -169,8 +169,10 @@ RSpec.describe JsLocaleHelper do
|
|||
let(:translated_message) do
|
||||
v8_ctx.eval("I18n._mfMessages.get('posts_likes_MF', {count: 3, ratio: 'med'})")
|
||||
end
|
||||
let(:fake_logger) { FakeLogger.new }
|
||||
|
||||
before do
|
||||
Rails.logger.broadcast_to(fake_logger)
|
||||
overriden_translation_ja.update_columns(
|
||||
value: "{ count, plural, one {返信 # 件、} other {返信 # 件、} }",
|
||||
)
|
||||
|
@ -178,6 +180,8 @@ RSpec.describe JsLocaleHelper do
|
|||
v8_ctx.eval(output)
|
||||
end
|
||||
|
||||
after { Rails.logger.stop_broadcasting_to(fake_logger) }
|
||||
|
||||
context "when locale is 'en'" do
|
||||
let(:locale) { "en" }
|
||||
|
||||
|
@ -258,6 +262,11 @@ RSpec.describe JsLocaleHelper do
|
|||
it "raises an error" do
|
||||
expect(output).to match(/Failed to compile message formats/)
|
||||
end
|
||||
|
||||
it "logs which keys are problematic" do
|
||||
output
|
||||
expect(fake_logger.errors).to include(/posts_likes_MF/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user