diff --git a/app/helpers/globalize_helper.rb b/app/helpers/globalize_helper.rb index 92d02b63e..f6780eb7a 100644 --- a/app/helpers/globalize_helper.rb +++ b/app/helpers/globalize_helper.rb @@ -4,9 +4,59 @@ module GlobalizeHelper options_for_select(locale_options, nil) end - def locale_options - I18n.available_locales.map do |locale| - [name_for_locale(locale), locale] + def available_locales(resource) + I18n.available_locales.select{ |locale| enabled_locale?(resource, locale) }.map do |locale| + [name_for_locale(locale), locale , { data: { locale: locale } }] + end + end + + def enabled_locale?(resource, locale) + return site_customization_enable_translation?(locale) if resource.blank? + + if resource.translations.empty? + locale == I18n.locale + else + resource.locales_not_marked_for_destruction.include?(locale) + end + end + + def first_available_locale(resource) + return first_i18n_content_translation_locale if resource.blank? + + if translations_for_locale?(resource, I18n.locale) + I18n.locale + elsif resource.translations.any? + resource.translations.first.locale + else + I18n.locale + end + end + + def first_i18n_content_translation_locale + if I18nContentTranslation.existing_languages.count == 0 || + I18nContentTranslation.existing_languages.include?(I18n.locale) + I18n.locale + else + I18nContentTranslation.existing_languages.first + end + end + + def translations_for_locale?(resource, locale) + resource.present? && resource.translations.any? && + resource.locales_not_marked_for_destruction.include?(locale) + end + + def selected_languages_description(resource) + t("shared.translations.languages_in_use_html", count: active_languages_count(resource)) + end + + def active_languages_count(resource) + if resource.blank? + languages_count + elsif resource.locales_not_marked_for_destruction.size > 0 + resource.locales_not_marked_for_destruction.size + else + 1 end end diff --git a/app/views/shared/_common_globalize_locales.html.erb b/app/views/shared/_common_globalize_locales.html.erb index 3b6362bb2..c114135c3 100644 --- a/app/views/shared/_common_globalize_locales.html.erb +++ b/app/views/shared/_common_globalize_locales.html.erb @@ -1,15 +1,13 @@
" - data-one-languages-description="<%= t("shared.translations.languages_in_use", count: 1) %>" - data-other-languages-description="<%= t("shared.translations.languages_in_use", count: 2) %>"> + data-zero-languages-description="<%= t("shared.translations.languages_in_use_html", count: 0) %>" + data-one-languages-description="<%= t("shared.translations.languages_in_use_html", count: 1) %>" + data-other-languages-description="<%= t("shared.translations.languages_in_use_html", count: 2) %>">
- - -
<%= active_languages_text(resource) %>
-
-
+ + <%= selected_languages_description(resource) %> + <%= select_tag :select_language, - active_languages(resource), + options_for_select_language(resource), prompt: "Choose language", class: "js-select-language" %> @@ -27,7 +25,7 @@
<% if manage_languages %> <%= select_tag :add_language, - options_for_locale_select, + options_for_add_language, prompt: t("admin.translations.add_language"), class: "js-add-language" %> <% end %> diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index db88d478b..db5333dd6 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -825,6 +825,14 @@ en: legislation_process: "Download legislation processes" budget: "Download budgets" investments: "Download projects" + translations: + select_language_prompt: Choose language + remove_language: Remove language + add_language: Add language + languages_in_use_html: + zero: "0 languages in use" + one: "1 language in use" + other: "%{count} languages in use" social: facebook: "%{org} Facebook" twitter: "%{org} Twitter" diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index 5555ef968..1671150ea 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -822,6 +822,14 @@ es: legislation_process: "Descargar procesos legislativos" budget: "Descargar presupuestos" investments: "Descargar proyectos" + translations: + select_language_prompt: Seleccionar idioma + remove_language: Eliminar idioma + add_language: Añadir idioma + languages_in_use_html: + zero: "0 idiomas en uso" + one: "1 idioma en uso" + other: "%{count} idiomas en uso" social: facebook: "Facebook de %{org}" twitter: "Twitter de %{org}" diff --git a/spec/shared/features/edit_translatable.rb b/spec/shared/features/edit_translatable.rb index ed19ad63c..3690d54ae 100644 --- a/spec/shared/features/edit_translatable.rb +++ b/spec/shared/features/edit_translatable.rb @@ -335,6 +335,30 @@ shared_examples "edit_translatable" do |factory_name, path_name, input_fields, t expect_page_to_have_translatable_field fields.sample, :fr, with: "" end + + context "Languages in use" do + scenario "Show default description" do + visit path + + expect(page).to have_content "2 languages in use" + end + + scenario "Increase description count after add new language", :js do + visit path + + select "Français", from: :add_language + + expect(page).to have_content "3 languages in use" + end + + scenario "Decrease description count after remove a language", :js do + visit path + + click_link "Remove language" + + expect(page).to have_content "1 language in use" + end + end end end diff --git a/spec/shared/features/new_translatable.rb b/spec/shared/features/new_translatable.rb index 56fb6a028..2d30308b9 100644 --- a/spec/shared/features/new_translatable.rb +++ b/spec/shared/features/new_translatable.rb @@ -154,6 +154,30 @@ shared_examples "new_translatable" do |factory_name, path_name, input_fields, te expect(page).not_to have_link "English" end + + context "Languages in use" do + scenario "Show default description" do + visit new_translatable_path + + expect(page).to have_content "1 language in use" + end + + scenario "Increase description count after add new language", :js do + visit new_translatable_path + + select "Español", from: :add_language + + expect(page).to have_content "2 languages in use" + end + + scenario "Decrease description count after remove a language", :js do + visit new_translatable_path + + click_link "Remove language" + + expect(page).to have_content "0 languages in use" + end + end end end