96 lines
2.5 KiB
Ruby
96 lines
2.5 KiB
Ruby
class Shared::GlobalizeLocalesComponent < ApplicationComponent
|
|
attr_reader :resource, :manage_languages
|
|
use_helpers :first_translation, :first_marked_for_destruction_translation,
|
|
:enabled_locale?, :name_for_locale, :highlight_translation_html_class
|
|
|
|
def initialize(resource = nil, manage_languages: true)
|
|
@resource = resource
|
|
@manage_languages = manage_languages
|
|
end
|
|
|
|
private
|
|
|
|
def options_for_select_language
|
|
options_for_select(available_locales, selected_locale)
|
|
end
|
|
|
|
def available_locales
|
|
I18n.available_locales.select { |locale| enabled_locale?(resource, locale) }.map do |locale|
|
|
[name_for_locale(locale), locale, { data: { locale: locale }}]
|
|
end
|
|
end
|
|
|
|
def selected_locale
|
|
return first_i18n_content_locale if resource.blank?
|
|
|
|
if resource.locales_not_marked_for_destruction.any?
|
|
first_translation(resource)
|
|
elsif resource.locales_persisted_and_marked_for_destruction.any?
|
|
first_marked_for_destruction_translation(resource)
|
|
else
|
|
I18n.locale
|
|
end
|
|
end
|
|
|
|
def first_i18n_content_locale
|
|
if i18n_content_locales.empty? || i18n_content_locales.include?(I18n.locale)
|
|
I18n.locale
|
|
else
|
|
i18n_content_locales.first
|
|
end
|
|
end
|
|
|
|
def selected_languages_description
|
|
sanitize(t("shared.translations.languages_in_use", count: active_locales_count))
|
|
end
|
|
|
|
def select_language_error
|
|
return if resource.blank?
|
|
|
|
current_translation = resource.translation_for(selected_locale)
|
|
if current_translation.errors.added? :base, :translations_too_short
|
|
tag.div class: "small error" do
|
|
current_translation.errors[:base].join(", ")
|
|
end
|
|
end
|
|
end
|
|
|
|
def active_locales_count
|
|
if active_locales.size > 0
|
|
active_locales.size
|
|
else
|
|
1
|
|
end
|
|
end
|
|
|
|
def active_locales
|
|
if resource.present?
|
|
resource.locales_not_marked_for_destruction
|
|
else
|
|
i18n_content_locales
|
|
end
|
|
end
|
|
|
|
def display_destroy_locale_style(locale)
|
|
"display: none;" unless display_destroy_locale_link?(locale)
|
|
end
|
|
|
|
def display_destroy_locale_link?(locale)
|
|
selected_locale == locale
|
|
end
|
|
|
|
def options_for_add_language
|
|
options_for_select(all_language_options, nil)
|
|
end
|
|
|
|
def all_language_options
|
|
I18n.available_locales.map do |locale|
|
|
[name_for_locale(locale), locale]
|
|
end
|
|
end
|
|
|
|
def i18n_content_locales
|
|
I18nContentTranslation.existing_locales
|
|
end
|
|
end
|