From 54f4018c3b3f314868f1b759618528e6db63c416 Mon Sep 17 00:00:00 2001 From: Brice Sanchez Date: Thu, 30 Apr 2015 13:48:25 -0400 Subject: [PATCH] Add ability to translate image_title and image_alt fields --- changelog.md | 1 + images/app/models/refinery/image.rb | 2 ++ .../refinery/admin/images/_form.html.erb | 5 +++- .../admin/images/_list_view_image.html.erb | 21 +++++++++++--- images/config/locales/fr.yml | 4 +++ ...0150430171341_translate_refinery_images.rb | 14 ++++++++++ images/lib/refinery/images.rb | 4 +++ images/refinerycms-images.gemspec | 1 + .../shared contexts/admin_images_tab.rb | 18 ++++++------ .../support/shared examples/image_editor.rb | 28 +++++++++++++++++-- .../support/shared examples/image_indexer.rb | 4 +-- 11 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 images/db/migrate/20150430171341_translate_refinery_images.rb diff --git a/changelog.md b/changelog.md index 5c5aac3dd3..74b4700b10 100644 --- a/changelog.md +++ b/changelog.md @@ -16,6 +16,7 @@ * Added ability to create page part title different form slug. [#2875](https://github.com/refinery/refinerycms/pull/2875). [Brice Sanchez](https://github.com/bricesanchez) & [Philip Arndt](https://github.com/parndt) & [Josef Šimánek](https://github.com/simi) * Deprecated `part_with_title` method in `Refinery#Page` and `title_matches?` method in `Refinery#PagePart`. [#2875](https://github.com/refinery/refinerycms/pull/2875). [Brice Sanchez](https://github.com/bricesanchez) & [Philip Arndt](https://github.com/parndt) & [Josef Šimánek](https://github.com/simi) * Added ability to customize and translate filename. [#2966](https://github.com/refinery/refinerycms/pull/2966). [Brice Sanchez](https://github.com/bricesanchez) +* Added ability to translate images title and alt attributes. [#2965](https://github.com/refinery/refinerycms/pull/2965). [Brice Sanchez](https://github.com/bricesanchez) * [See full list](https://github.com/refinery/refinerycms/compare/2-1-stable...master) diff --git a/images/app/models/refinery/image.rb b/images/app/models/refinery/image.rb index dfdbc7a150..9a0863062e 100644 --- a/images/app/models/refinery/image.rb +++ b/images/app/models/refinery/image.rb @@ -2,6 +2,8 @@ module Refinery class Image < Refinery::Core::BaseModel + translates :image_title, :image_alt + dragonfly_accessor :image, :app => :refinery_images include Images::Validators diff --git a/images/app/views/refinery/admin/images/_form.html.erb b/images/app/views/refinery/admin/images/_form.html.erb index 8b0b497a67..41fbd27621 100644 --- a/images/app/views/refinery/admin/images/_form.html.erb +++ b/images/app/views/refinery/admin/images/_form.html.erb @@ -5,6 +5,8 @@ object: @image, include_object_name: false %> + <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale if @image.persisted? %> +
<% if action_name =~ /(edit)|(update)/ %>

@@ -45,7 +47,8 @@ continue_editing: false, hide_cancel: (@app_dialog or action_name == 'insert' or from_dialog?), delete_title: t('delete', scope: 'refinery.admin.images'), - delete_confirmation: t('message', scope: 'refinery.admin.delete', title: @image.image_name) -%> + delete_confirmation: t('message', scope: 'refinery.admin.delete', title: @image.image_name), + cancel_url: refinery.admin_images_path -%> <% if @app_dialog %> diff --git a/images/app/views/refinery/admin/images/_list_view_image.html.erb b/images/app/views/refinery/admin/images/_list_view_image.html.erb index 6e9ab4afbd..8917949269 100644 --- a/images/app/views/refinery/admin/images/_list_view_image.html.erb +++ b/images/app/views/refinery/admin/images/_list_view_image.html.erb @@ -2,11 +2,24 @@ <%= list_view_image.title %> - - <%= action_icon :info, '#', "Title: #{list_view_image.title} Alt text: #{list_view_image.alt}" %> - -   + <% if Refinery::I18n.frontend_locales.many? %> + + <% list_view_image.translations.sort_by{ |t| Refinery::I18n.frontend_locales.index(t.locale)}.each do |translation| %> + <% if translation.image_title.present? %> + <%= link_to refinery.edit_admin_image_path(list_view_image, switch_locale: translation.locale), + class: 'locale', title: translation.locale.upcase do %> + +

+ <%= locale_text_icon(translation.locale.upcase) %> +
+ <% end %> + <% end %> + <% end %> + + <% end %> + + <%= list_view_image.image_name %> <%= action_icon :preview, list_view_image.url, t('view_live_html', scope: 'refinery.admin.images') %> diff --git a/images/config/locales/fr.yml b/images/config/locales/fr.yml index 93de65dcbd..4e7003ceb5 100644 --- a/images/config/locales/fr.yml +++ b/images/config/locales/fr.yml @@ -15,6 +15,10 @@ fr: replace_image: " la remplacer par celle-ci..." current_image: Image actuelle maximum_image_size: "La taille de l'image ne doit pas excéder %{bytes}." + image_title: Titre + image_title_help: Information complémentaire sur l'image + image_alt: Alt + image_alt_help: Texte utilise si l'image ne peut pas être affichée. actions: create_new_image: Ajouter une image records: diff --git a/images/db/migrate/20150430171341_translate_refinery_images.rb b/images/db/migrate/20150430171341_translate_refinery_images.rb new file mode 100644 index 0000000000..cfbb39a5e2 --- /dev/null +++ b/images/db/migrate/20150430171341_translate_refinery_images.rb @@ -0,0 +1,14 @@ +class TranslateRefineryImages < ActiveRecord::Migration + def self.up + Refinery::Image.create_translation_table!({ + image_alt: :string, + image_title: :string + }, { + :migrate_data => true + }) + end + + def self.down + Refinery::Image.drop_translation_table! migrate_data: true + end +end diff --git a/images/lib/refinery/images.rb b/images/lib/refinery/images.rb index 87cc70d598..9e19e03012 100644 --- a/images/lib/refinery/images.rb +++ b/images/lib/refinery/images.rb @@ -22,3 +22,7 @@ def factory_paths end end end + +ActiveSupport.on_load(:active_record) do + require 'globalize' +end \ No newline at end of file diff --git a/images/refinerycms-images.gemspec b/images/refinerycms-images.gemspec index cc3bcf1ffe..d103707823 100644 --- a/images/refinerycms-images.gemspec +++ b/images/refinerycms-images.gemspec @@ -20,6 +20,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- spec/*`.split("\n") s.add_dependency 'dragonfly', '~> 1.0.0' + s.add_dependency 'globalize', ['>= 4.0.0', '< 5.2'] s.add_dependency 'refinerycms-core', version s.required_ruby_version = Refinery::Version.required_ruby_version diff --git a/images/spec/support/shared contexts/admin_images_tab.rb b/images/spec/support/shared contexts/admin_images_tab.rb index db17d44ba9..22bebf4236 100644 --- a/images/spec/support/shared contexts/admin_images_tab.rb +++ b/images/spec/support/shared contexts/admin_images_tab.rb @@ -1,17 +1,17 @@ shared_context 'admin images tab' do - let(:open_upload_dialog) { find('a', text: ::I18n.t('create_new_image', scope: 'refinery.admin.images.actions')).trigger(:click) } - let(:select_upload) {} - let(:initialize_context) {} - let(:index_in_frame) {false} - let(:dialog_frame_id) {'dialog_iframe'} + let(:open_upload_dialog) { find('a', text: ::I18n.t('create_new_image', scope: 'refinery.admin.images.actions')).trigger(:click) } + let(:select_upload) {} + let(:initialize_context) {} + let(:index_in_frame) {false} + let(:dialog_frame_id) {'dialog_iframe'} let(:initial_path) { refinery.admin_images_path(view: %w(grid list).sample) } - let(:index_item_selector) {'#records li'} - let(:gridview_img_selector) {' > img'} + let(:index_item_selector) {'#records li'} + let(:gridview_img_selector) {' > img'} let(:gridview_title_selector) {'[tooltip]'} - let(:gridview_alt_selector) {'[alt]'} + let(:gridview_alt_selector) {'[alt]'} let(:listview_title_selector) {' > span.title'} - let(:listview_alt_selector) {' > span.alt'} + let(:listview_filename_selector) {' > span.preview'} end diff --git a/images/spec/support/shared examples/image_editor.rb b/images/spec/support/shared examples/image_editor.rb index 7d93f9bd86..6beae89b44 100644 --- a/images/spec/support/shared examples/image_editor.rb +++ b/images/spec/support/shared examples/image_editor.rb @@ -1,3 +1,27 @@ shared_examples 'edits an image' do - pending -end + let!(:image) { FactoryGirl.create(:image) } + + describe "translate", focus: true do + before do + allow(Refinery::I18n).to receive(:frontend_locales).and_return([:en, :fr]) + end + + it "can have a second locale added to it" do + visit refinery.admin_images_path + expect(page).to have_content("Refinery Is Awesome") + expect(page).to have_selector("a[href='/refinery/images/#{image.id}/edit']") + + click_link "Edit this image" + + within "#switch_locale_picker" do + click_link "FR" + end + + fill_in "Title", :with => "Première image" + click_button "Save" + + expect(page).to have_content("'Première image' was successfully updated.") + expect(Image.translation_class.count).to eq(1) + end + end +end \ No newline at end of file diff --git a/images/spec/support/shared examples/image_indexer.rb b/images/spec/support/shared examples/image_indexer.rb index 47db01219d..0dc60b06e6 100644 --- a/images/spec/support/shared examples/image_indexer.rb +++ b/images/spec/support/shared examples/image_indexer.rb @@ -61,8 +61,8 @@ expect(page).to have_selector(index_item_selector << listview_title_selector, count: image_count) end - it 'makes the alt attribute of each image available' do - expect(page).to have_selector(index_item_selector << listview_alt_selector, count: image_count) + it 'makes the filename of each image available' do + expect(page).to have_selector(index_item_selector << listview_filename_selector, count: image_count) end it 'has an option to switch to grid view' do