From aad85b6eecac10b7d743e61122e3102d90273cad Mon Sep 17 00:00:00 2001 From: oliveranthony17 Date: Sun, 17 Nov 2024 15:30:03 +0100 Subject: [PATCH] Add translate_to_original method using original_backend --- app/assets/stylesheets/moirai/application.css | 2 ++ app/assets/stylesheets/translation_files.css | 22 +++++++++++++++ app/views/layouts/moirai/application.html.erb | 28 +++++++++++++++++++ .../moirai/translation_files/show.html.erb | 10 +++++-- lib/i18n/extensions/i18n.rb | 13 +++++++++ lib/moirai.rb | 3 +- lib/moirai/engine.rb | 1 + test/i18n/i18n_test.rb | 14 ++++++++++ 8 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 app/assets/stylesheets/translation_files.css create mode 100644 lib/i18n/extensions/i18n.rb create mode 100644 test/i18n/i18n_test.rb diff --git a/app/assets/stylesheets/moirai/application.css b/app/assets/stylesheets/moirai/application.css index 0ebd7fe..994acca 100644 --- a/app/assets/stylesheets/moirai/application.css +++ b/app/assets/stylesheets/moirai/application.css @@ -12,4 +12,6 @@ * *= require_tree . *= require_self + *= require translation_files + */ diff --git a/app/assets/stylesheets/translation_files.css b/app/assets/stylesheets/translation_files.css new file mode 100644 index 0000000..9590140 --- /dev/null +++ b/app/assets/stylesheets/translation_files.css @@ -0,0 +1,22 @@ +td { + height: 100px; + width: 200px; + vertical-align: top; +} + +form { + height: 100%; + display: flex; + align-items: stretch; +} + +textarea.translation-textarea { + width: 100%; + height: auto; + resize: vertical; + min-height: 3em; + overflow: hidden; + margin-bottom: 0; +} + +/*# TODO: this isn't coming through */ diff --git a/app/views/layouts/moirai/application.html.erb b/app/views/layouts/moirai/application.html.erb index db31aa4..d206b53 100644 --- a/app/views/layouts/moirai/application.html.erb +++ b/app/views/layouts/moirai/application.html.erb @@ -8,6 +8,34 @@ <%= stylesheet_link_tag "moirai/application", media: "all" %> + + + diff --git a/app/views/moirai/translation_files/show.html.erb b/app/views/moirai/translation_files/show.html.erb index 4b50c78..a9e8651 100644 --- a/app/views/moirai/translation_files/show.html.erb +++ b/app/views/moirai/translation_files/show.html.erb @@ -9,6 +9,7 @@ Key Value + Original Translation @@ -24,13 +25,18 @@ <% end %> - <%= form_for translation&.presence || Moirai::Translation.new(key: key, locale: @locale, value: value), url: moirai_create_or_update_translation_path, method: :post do |f| %> + <%= form_for translation&.presence || Moirai::Translation.new(key: key, locale: @locale, value: value), + url: moirai_create_or_update_translation_path, + method: :post do |f| %> <%= f.hidden_field :key %> <%= f.hidden_field :locale %> - <%= f.text_field :value %> + <%= f.text_area :value, class: 'translation-textarea' %> <%= f.submit 'Update', style: 'display: none;' %> <% end %> + + <%= I18n.translate_to_original(key, @locale) %> + <% end %> diff --git a/lib/i18n/extensions/i18n.rb b/lib/i18n/extensions/i18n.rb new file mode 100644 index 0000000..8e5f79d --- /dev/null +++ b/lib/i18n/extensions/i18n.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module I18n + class << self + attr_accessor :original_backend + end + + def self.translate_to_original(key, locale, **) + raise "Original backend is not set" unless original_backend + + original_backend.translate(locale, key, **) + end +end diff --git a/lib/moirai.rb b/lib/moirai.rb index 513fab5..0ed9837 100644 --- a/lib/moirai.rb +++ b/lib/moirai.rb @@ -1,9 +1,10 @@ # frozen_string_literal: true require "moirai/version" +require "i18n/extensions/i18n" +require "i18n/backend/moirai" require "moirai/engine" require "moirai/pull_request_creator" -require "i18n/backend/moirai" module Moirai # Your code goes here... diff --git a/lib/moirai/engine.rb b/lib/moirai/engine.rb index 9c79d59..ae0bffa 100644 --- a/lib/moirai/engine.rb +++ b/lib/moirai/engine.rb @@ -10,6 +10,7 @@ class Engine < ::Rails::Engine config.after_initialize do if ActiveRecord::Base.connection.data_source_exists?("moirai_translations") + I18n.original_backend = I18n.backend I18n.backend = I18n::Backend::Chain.new(I18n::Backend::Moirai.new, I18n.backend) else Rails.logger.warn("moirai disabled: tables have not been generated yet.") diff --git a/test/i18n/i18n_test.rb b/test/i18n/i18n_test.rb new file mode 100644 index 0000000..938ca30 --- /dev/null +++ b/test/i18n/i18n_test.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require "test_helper" + +class I18nExtensionsTest < ActiveSupport::TestCase + test "it correctly translates using .translate and .translate_to_original" do + assert_equal "Italienisch", I18n.t("locales.italian", locale: :de) + + Moirai::Translation.create!(locale: "de", key: "locales.italian", value: "Italianese") + + assert_equal "Italianese", I18n.t("locales.italian", locale: :de) + assert_equal "Italienisch", I18n.translate_to_original("locales.italian", :de) + end +end