There where two issues with the current implementation: - There was a possible duplication between looking up the language name in key "locale" and in key "i18n.language.name" - The "default" option was not being picked up, as the fallback always returned the default locale's translation, "English" With this implementation there is only a single place to put the language name: i18n.language.name. I think this place is easier to find and understand for Crowdin translators than a "locale" key hidden in general.yml If the translation is not found we display the language key, instead of English, which makes more sense to me too 😌 Solution based on recent comments[1] on a related I18n issue [1] https://github.com/svenfuchs/i18n/issues/365#issuecomment-419263847
32 lines
734 B
Ruby
32 lines
734 B
Ruby
require 'rails_helper'
|
|
|
|
describe LocalesHelper do
|
|
|
|
context "Language names" do
|
|
|
|
let!(:default_enforce) { I18n.enforce_available_locales }
|
|
|
|
before do
|
|
I18n.enforce_available_locales = false
|
|
end
|
|
|
|
after do
|
|
I18n.backend.reload!
|
|
I18n.enforce_available_locales = default_enforce
|
|
end
|
|
|
|
it "returns the language name in i18n.language.name translation" do
|
|
keys = { language: {
|
|
name: "World Language" }}
|
|
|
|
I18n.backend.store_translations(:wl, { i18n: keys })
|
|
|
|
expect(name_for_locale(:wl)).to eq("World Language")
|
|
end
|
|
|
|
it "retuns the locale key if i18n.language.name translation is not found" do
|
|
expect(name_for_locale(:wl)).to eq("wl")
|
|
end
|
|
|
|
end
|
|
end |