From 6d6dc32c387a3420adf2a9955a7be43c493774fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Fuentes?= Date: Fri, 20 Jul 2018 13:54:52 +0200 Subject: [PATCH] Complete basic I18n backend and frontend --- .../information_texts_controller.rb | 72 ++++--- app/models/i18n_content.rb | 11 ++ .../information_texts/_debates.html.erb | 3 - .../information_texts/_emails.html.erb | 3 - .../information_texts/_form.html.erb | 3 +- .../information_texts/_form_field.html.erb | 6 +- .../information_texts/_management.html.erb | 3 - .../_more_information.html.erb | 3 - .../_participatory_budgets.html.erb | 3 - .../information_texts/_polls.html.erb | 3 - .../information_texts/_proposals.html.erb | 3 - .../information_texts/_tabs.html.erb | 28 +-- .../information_texts/index.html.erb | 27 +-- app/views/welcome/welcome.html.erb | 2 +- config/initializers/i18n_translation.rb | 25 +++ config/locales/en/i18n_contents.yml | 180 ++++++++++++++++++ config/locales/es/i18n_contents.yml | 180 ++++++++++++++++++ ...115545_create_i18n_content_translations.rb | 17 ++ db/schema.rb | 17 +- 19 files changed, 490 insertions(+), 99 deletions(-) create mode 100644 app/models/i18n_content.rb delete mode 100644 app/views/admin/site_customization/information_texts/_debates.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_emails.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_management.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_more_information.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_participatory_budgets.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_polls.html.erb delete mode 100644 app/views/admin/site_customization/information_texts/_proposals.html.erb create mode 100644 config/initializers/i18n_translation.rb create mode 100644 config/locales/en/i18n_contents.yml create mode 100644 config/locales/es/i18n_contents.yml create mode 100644 db/migrate/20180718115545_create_i18n_content_translations.rb diff --git a/app/controllers/admin/site_customization/information_texts_controller.rb b/app/controllers/admin/site_customization/information_texts_controller.rb index 2049ab75d..6f2e6777d 100644 --- a/app/controllers/admin/site_customization/information_texts_controller.rb +++ b/app/controllers/admin/site_customization/information_texts_controller.rb @@ -2,40 +2,62 @@ class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomiz include Translatable def index - @contents = I18nContent.all + existing_keys = {} + @tab = params[:tab] || :debates + I18nContent.begins_with_key(@tab).all. + map{|content| existing_keys[content.key] = content } + @content = {} + I18n.backend.send(:translations)[:en].each do |k,v| + @content[k.to_s] = flat_hash(v).keys.map{|s| existing_keys["#{k.to_s}.#{s}"].nil? ? + I18nContent.new(key: "#{k.to_s}.#{s}") : + existing_keys["#{k.to_s}.#{s}"] } + end + @content = @content[@tab.to_s] + end def update content_params.each do |content| - text = I18nContent.find(content[:id]) - text.update(content[:values].slice(*translation_params(content[:values]))) + value = content[:values].slice(*translation_params(content[:values])) + unless value.empty? + text = I18nContent.by_key(content[:id]).last || I18nContent.create(key: content[:id]) + text.update(value) + text.save + end end redirect_to admin_site_customization_information_texts_path end private - def i18n_content_params - attributes = [:key, :value] - params.require(:information_texts).permit(*attributes, translation_params(params[:information_texts])) - end - - def resource_model - I18nContent - end - - def resource - resource_model.find(content_params[:id]) - end - - def content_params - params.require(:contents).values - end - - def delete_translations - languages_to_delete = params[:delete_translations].select { |k, v| params[:delete_translations][k] == "1" }.keys - languages_to_delete.each do |locale| - I18nContentTranslation.destroy_all(locale: locale) + def i18n_content_params + attributes = [:key, :value] + params.require(:information_texts).permit(*attributes, translation_params(params[:information_texts])) end - end + + def resource_model + I18nContent + end + + def resource + resource_model.find(content_params[:id]) + end + + def content_params + params.require(:contents).values + end + + def delete_translations + languages_to_delete = params[:delete_translations].select { |k, v| params[:delete_translations][k] == "1" }.keys + languages_to_delete.each do |locale| + I18nContentTranslation.destroy_all(locale: locale) + end + end + + def flat_hash(h, f=nil, g={}) + return g.update({ f => h }) unless h.is_a? Hash + h.each { |k, r| flat_hash(r, [f,k].compact.join('.'), g) } + g + end + end diff --git a/app/models/i18n_content.rb b/app/models/i18n_content.rb new file mode 100644 index 000000000..48192d0ef --- /dev/null +++ b/app/models/i18n_content.rb @@ -0,0 +1,11 @@ +class I18nContent < ActiveRecord::Base + + scope :by_key, -> (key){ where(key: key) } + scope :begins_with_key, -> (key){ where("key LIKE ?", "#{key}?%") } + + validates :key, uniqueness: true + + translates :value, touch: true + globalize_accessors locales: [:en, :es, :fr, :nl, :val, :pt_br] + +end \ No newline at end of file diff --git a/app/views/admin/site_customization/information_texts/_debates.html.erb b/app/views/admin/site_customization/information_texts/_debates.html.erb deleted file mode 100644 index 25130608f..000000000 --- a/app/views/admin/site_customization/information_texts/_debates.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.debates] %> diff --git a/app/views/admin/site_customization/information_texts/_emails.html.erb b/app/views/admin/site_customization/information_texts/_emails.html.erb deleted file mode 100644 index 01836c341..000000000 --- a/app/views/admin/site_customization/information_texts/_emails.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.emails] %> diff --git a/app/views/admin/site_customization/information_texts/_form.html.erb b/app/views/admin/site_customization/information_texts/_form.html.erb index 54039694d..d3c0489b7 100644 --- a/app/views/admin/site_customization/information_texts/_form.html.erb +++ b/app/views/admin/site_customization/information_texts/_form.html.erb @@ -1,3 +1,5 @@ +<%= render "globalize_locales" %> + <%= form_tag admin_site_customization_information_texts_path do %> <% I18n.available_locales.each do |l| %> <%= hidden_field_tag "delete_translations[#{l}]", 0 %> @@ -8,7 +10,6 @@ <% content.globalize_locales.each do |locale| %> <%= render 'form_field', content: content, locale: locale %> <% end %> - <% end %> <% end %> <%= submit_tag "Save", class: "button" %> diff --git a/app/views/admin/site_customization/information_texts/_form_field.html.erb b/app/views/admin/site_customization/information_texts/_form_field.html.erb index 5dbe732df..f247870f4 100644 --- a/app/views/admin/site_customization/information_texts/_form_field.html.erb +++ b/app/views/admin/site_customization/information_texts/_form_field.html.erb @@ -1,9 +1,9 @@ <% globalize(locale) do %> - <%= hidden_field_tag "contents[content_#{content.id}][id]", content.id %> - <%= text_area_tag "contents[content_#{content.id}]values[value_#{locale}]", + <%= hidden_field_tag "contents[content_#{content.key}][id]", content.key %> + <%= text_area_tag "contents[content_#{content.key}]values[value_#{locale}]", content.send("value_#{locale}"), {rows: 5, class: "js-globalize-attribute", style: display_translation?(locale), - data: { locale: locale }}%> + data: { locale: locale }} %> <% end %> diff --git a/app/views/admin/site_customization/information_texts/_management.html.erb b/app/views/admin/site_customization/information_texts/_management.html.erb deleted file mode 100644 index 2bc6c226e..000000000 --- a/app/views/admin/site_customization/information_texts/_management.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.management, I18nContent.guides] %> diff --git a/app/views/admin/site_customization/information_texts/_more_information.html.erb b/app/views/admin/site_customization/information_texts/_more_information.html.erb deleted file mode 100644 index 14a8d788f..000000000 --- a/app/views/admin/site_customization/information_texts/_more_information.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.devise_locales, I18nContent.devise_views, I18nContent.layouts, I18nContent.legislation] %> diff --git a/app/views/admin/site_customization/information_texts/_participatory_budgets.html.erb b/app/views/admin/site_customization/information_texts/_participatory_budgets.html.erb deleted file mode 100644 index 4ef7e1c15..000000000 --- a/app/views/admin/site_customization/information_texts/_participatory_budgets.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.budgets] %> diff --git a/app/views/admin/site_customization/information_texts/_polls.html.erb b/app/views/admin/site_customization/information_texts/_polls.html.erb deleted file mode 100644 index 9798bd6ef..000000000 --- a/app/views/admin/site_customization/information_texts/_polls.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.polls] %> diff --git a/app/views/admin/site_customization/information_texts/_proposals.html.erb b/app/views/admin/site_customization/information_texts/_proposals.html.erb deleted file mode 100644 index c1e58679d..000000000 --- a/app/views/admin/site_customization/information_texts/_proposals.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= render "globalize_locales" %> - -<%= render "form", contents: [I18nContent.community, I18nContent.proposals] %> diff --git a/app/views/admin/site_customization/information_texts/_tabs.html.erb b/app/views/admin/site_customization/information_texts/_tabs.html.erb index 7eabb3246..e3ba440c9 100644 --- a/app/views/admin/site_customization/information_texts/_tabs.html.erb +++ b/app/views/admin/site_customization/information_texts/_tabs.html.erb @@ -1,23 +1,7 @@ -