diff --git a/app/helpers/locales_helper.rb b/app/helpers/locales_helper.rb index 78ab251893e..3ae6bb5ef8c 100644 --- a/app/helpers/locales_helper.rb +++ b/app/helpers/locales_helper.rb @@ -1,10 +1,7 @@ module LocalesHelper def name_for_locale(locale) - default = I18n.t("locale", locale: locale) - I18n.backend.translate(locale, "i18n.language.name", default: default) - rescue - nil + I18n.t("i18n.language.name", locale: locale, fallback: false, default: locale.to_s) end end diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index b673c211043..d7ae6c72b34 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -43,6 +43,7 @@ data: - config/locales/%{locale}/images.yml - config/locales/%{locale}/guides.yml - config/locales/%{locale}/user_groups.yml + - config/locales/%{locale}/i18n.yml # Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom: # `i18n-tasks normalize -p` will force move the keys according to these rules diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index 5afd4a9cd54..5de10978fb7 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -249,7 +249,6 @@ en: text_sign_in: login text_sign_up: sign up title: How I can comment this document? - locale: English notifications: index: empty_notifications: You don't have new notifications. diff --git a/config/locales/en/i18n.yml b/config/locales/en/i18n.yml new file mode 100644 index 00000000000..65fdd3ed544 --- /dev/null +++ b/config/locales/en/i18n.yml @@ -0,0 +1,4 @@ +en: + i18n: + language: + name: "English" \ No newline at end of file diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index 02f60f8e621..ddab82f5788 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -249,7 +249,6 @@ es: text_sign_in: iniciar sesión text_sign_up: registrarte title: '¿Cómo puedo comentar este documento?' - locale: Español notifications: index: empty_notifications: No tienes notificaciones nuevas. diff --git a/config/locales/es/i18n.yml b/config/locales/es/i18n.yml new file mode 100644 index 00000000000..8df5d7ec136 --- /dev/null +++ b/config/locales/es/i18n.yml @@ -0,0 +1,4 @@ +es: + i18n: + language: + name: "Español" \ No newline at end of file diff --git a/config/locales/fr/general.yml b/config/locales/fr/general.yml index cf1488375fd..e0c603a51be 100644 --- a/config/locales/fr/general.yml +++ b/config/locales/fr/general.yml @@ -892,7 +892,6 @@ fr: open_gov: Gouvernement ouvert proposals: Propositions spending_proposals: Propositions de dépense - locale: Français mailers: comment: hi: Bonjour diff --git a/config/locales/fr/i18n.yml b/config/locales/fr/i18n.yml new file mode 100644 index 00000000000..911aa3352a1 --- /dev/null +++ b/config/locales/fr/i18n.yml @@ -0,0 +1,4 @@ +fr: + i18n: + language: + name: "Français" \ No newline at end of file diff --git a/config/locales/he/general.yml b/config/locales/he/general.yml index 96b7702d1fd..11510005851 100644 --- a/config/locales/he/general.yml +++ b/config/locales/he/general.yml @@ -192,7 +192,6 @@ he: poll_questions: הצבעות budgets: מימון השתתפותי spending_proposals: הצעות להוצאת כספים - locale: עברית notifications: index: empty_notifications: אין לך תגובות חדשות diff --git a/config/locales/he/i18n.yml b/config/locales/he/i18n.yml new file mode 100644 index 00000000000..003edcd71fc --- /dev/null +++ b/config/locales/he/i18n.yml @@ -0,0 +1,4 @@ +he: + i18n: + language: + name: "עברית" \ No newline at end of file diff --git a/config/locales/it/general.yml b/config/locales/it/general.yml index c0309e8722a..d2c01bb151f 100644 --- a/config/locales/it/general.yml +++ b/config/locales/it/general.yml @@ -244,7 +244,6 @@ it: text_sign_in: "" text_sign_up: "" title: "" - locale: "" notifications: index: comments_on: diff --git a/config/locales/nl/general.yml b/config/locales/nl/general.yml index 62221c2801d..e6cb6355872 100644 --- a/config/locales/nl/general.yml +++ b/config/locales/nl/general.yml @@ -232,7 +232,6 @@ nl: text_sign_in: log in text_sign_up: registreer title: Hoe kan ik reageren? - locale: Nederlands notifications: index: comments_on: diff --git a/config/locales/nl/i18n.yml b/config/locales/nl/i18n.yml new file mode 100644 index 00000000000..c85ec12945d --- /dev/null +++ b/config/locales/nl/i18n.yml @@ -0,0 +1,4 @@ +nl: + i18n: + language: + name: "Nederlands" \ No newline at end of file diff --git a/config/locales/pt-BR/general.yml b/config/locales/pt-BR/general.yml index 0bc8ff9fcec..ef797dac5f4 100644 --- a/config/locales/pt-BR/general.yml +++ b/config/locales/pt-BR/general.yml @@ -1,8 +1,5 @@ --- pt-BR: - i18n: - language: - name: Português account: show: change_credentials_link: Alterar meus dados pessoais @@ -879,7 +876,6 @@ pt-BR: open_gov: Governo aberto proposals: Propostas spending_proposals: Propostas de despesas - locale: Português brasileiro mailers: comment: hi: Olá diff --git a/config/locales/pt-BR/i18n.yml b/config/locales/pt-BR/i18n.yml new file mode 100644 index 00000000000..a9a624a6890 --- /dev/null +++ b/config/locales/pt-BR/i18n.yml @@ -0,0 +1,4 @@ +pt-BR: + i18n: + language: + name: "Português brasileiro" \ No newline at end of file diff --git a/config/locales/val/general.yml b/config/locales/val/general.yml index 7a01cfbb945..d444787142b 100644 --- a/config/locales/val/general.yml +++ b/config/locales/val/general.yml @@ -250,7 +250,6 @@ val: text_sign_in: iniciar sessió text_sign_up: registrar-te title: Com puc comentar aquest document? - locale: Valencià notifications: index: empty_notifications: No tens noves notificacions. diff --git a/config/locales/val/i18n.yml b/config/locales/val/i18n.yml new file mode 100644 index 00000000000..59e13344bca --- /dev/null +++ b/config/locales/val/i18n.yml @@ -0,0 +1,4 @@ +val: + i18n: + language: + name: "Valencià" \ No newline at end of file diff --git a/spec/features/localization_spec.rb b/spec/features/localization_spec.rb index eb345cb7c6f..fc9cfb1e608 100644 --- a/spec/features/localization_spec.rb +++ b/spec/features/localization_spec.rb @@ -48,4 +48,31 @@ expect(page).not_to have_content('Language') expect(page).not_to have_css('div.locale') end + + context "Missing language names" do + + let!(:default_enforce) { I18n.enforce_available_locales } + let!(:default_locales) { I18n.available_locales.dup } + + before do + I18n.enforce_available_locales = false + I18n.available_locales = default_locales + [:wl] + I18n.locale = :wl + end + + after do + I18n.enforce_available_locales = default_enforce + I18n.available_locales = default_locales + I18n.locale = I18n.default_locale + end + + scenario 'Available locales without language translation display locale key' do + visit '/' + + within('.locale-form .js-location-changer') do + expect(page).to have_content 'wl' + end + end + + end end diff --git a/spec/features/site_customization/custom_pages_spec.rb b/spec/features/site_customization/custom_pages_spec.rb index 74148b577f7..d9bf01acbe3 100644 --- a/spec/features/site_customization/custom_pages_spec.rb +++ b/spec/features/site_customization/custom_pages_spec.rb @@ -107,7 +107,7 @@ scenario "Listed in more information page" do custom_page = create(:site_customization_page, :published, - slug: "another-slug", + slug: "another-slug", title_en: "Another custom page", subtitle_en: "Subtitle for custom page", more_info_flag: true @@ -136,10 +136,10 @@ expect(page).to have_content("Subtitle for custom page") end end - end - + end + context "Translation" do - + let(:custom_page) { create(:site_customization_page, :published, slug: "example-page", title_en: "Title in English", @@ -148,7 +148,7 @@ subtitle_es: "Subtitulo en Español", content_en: "Content in English", content_es: "Contenido en Español" - ) } + ) } background do admin = create(:administrator) @@ -162,19 +162,19 @@ scenario "Add a translation in Português", :js do visit @edit_page_url - select "Português", from: "translation_locale" + select "Português brasileiro", from: "translation_locale" fill_in 'site_customization_page_title_pt_br', with: 'Titulo em Português' click_button 'Update Custom page' expect(page).to have_content "Page updated successfully" - + visit @edit_page_url expect(page).to have_field('site_customization_page_title_en', with: 'Title in English') click_link "Español" expect(page).to have_field('site_customization_page_title_es', with: 'Titulo en Español') - click_link "Português" + click_link "Português brasileiro" expect(page).to have_field('site_customization_page_title_pt_br', with: 'Titulo em Português') end @@ -190,11 +190,11 @@ visit custom_page.url select('English', from: 'locale-switcher') - + expect(page).to have_content("Title in English") select('Español', from: 'locale-switcher') - + expect(page).to have_content("Titulo correcta en Español") end diff --git a/spec/features/translations/poll_question_answers_spec.rb b/spec/features/translations/poll_question_answers_spec.rb index cd33106c1d2..fded75cfdb5 100644 --- a/spec/features/translations/poll_question_answers_spec.rb +++ b/spec/features/translations/poll_question_answers_spec.rb @@ -91,11 +91,11 @@ scenario "Add a translation for a locale with non-underscored name", :js do visit @edit_answer_url - select('Português', from: 'translation_locale') + select('Português brasileiro', from: 'translation_locale') fill_in_ckeditor 'poll_question_answer_description_pt_br', with: 'resposta em Português' click_button 'Save' - select('Português', from: 'locale-switcher') + select('Português brasileiro', from: 'locale-switcher') expect(page).to have_content("resposta em Português") end diff --git a/spec/helpers/locales_helper_spec.rb b/spec/helpers/locales_helper_spec.rb new file mode 100644 index 00000000000..2eb10be050e --- /dev/null +++ b/spec/helpers/locales_helper_spec.rb @@ -0,0 +1,32 @@ +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 \ No newline at end of file diff --git a/spec/shared/features/translatable.rb b/spec/shared/features/translatable.rb index 843df2c0951..e3abf5f8497 100644 --- a/spec/shared/features/translatable.rb +++ b/spec/shared/features/translatable.rb @@ -107,14 +107,14 @@ visit path field = fields.sample - select "Português", from: "translation_locale" + select "Português brasileiro", from: "translation_locale" fill_in field_for(field, :pt_br), with: text_for(field, :"pt-BR") click_button update_button_text visit path - select('Português', from: 'locale-switcher') + select('Português brasileiro', from: 'locale-switcher') expect(page).to have_field(field_for(field, :pt_br), with: text_for(field, :"pt-BR")) end