রতাকে বিশ্বায়িত করে কীভাবে কেবলমাত্র ইনপুটটির জন্য কীভাবে লোকাল স্যুইচ করবেন এবং পুরো পৃষ্ঠাটি নয়?


10

প্রসঙ্গ: বাইকের ভাড়ার জন্য রবি অন অন রেলস অ্যাপ্লিকেশনটির জন্য, আমি :descriptionবিভিন্ন ভাষায় ইনপুট নিয়ে কাজ করার জন্য রত্নকে বিশ্বায়নের ব্যবহার করছি ।

কুরেন্ট স্টেট: বিশ্বায়নের বাস্তবায়ন কাজ করেছে, আমার লোকালের উপর নির্ভর করে আমি descriptionএকটি নির্দিষ্ট ভাষায় সঞ্চয় করতে সক্ষম । :descriptionসম্পূর্ণ ওয়েবপেজের লোকেলের ভিত্তিতে ইনপুটটির জন্য ডিল করা হয়।

এর অর্থ হ'ল সঠিক পৃষ্ঠায় সঞ্চয় করার জন্য এই পৃষ্ঠার প্রতিটি কিছুরই ভাষা পরিবর্তন করতে হবে :description

বিকল্পভাবে, আমি সমস্ত উপলব্ধ লোকেলগুলি প্রদর্শন করতে এবং সেগুলির descriptionপ্রত্যেকটির জন্য প্রদর্শন করতে সক্ষম হয়েছি । (নীচে মন্তব্য আউট কোডও দেখুন)।

প্রশ্ন: আমি ব্যবহারকারীর জন্য একটি ভাষা নির্বাচন করতে দেওয়ার একটি উপায় অনুসন্ধান করছি:description এবং তারপরে :descriptionপুরো ওয়েবপৃষ্ঠার ভাষা পরিবর্তন না করে সঠিক ভাষায় সংরক্ষণ ।

কোড

ফর্ম

<div class="row">
        <%# I18n.available_locales.each do |locale| %>
          <!-- <h1><%#= locale %></h1> -->
          <%= f.globalize_fields_for locale do |ff| %>
          <div class="col-10">
            <div class="form-group">
              <label class="form-control-label text required" for="accommodation_category_description">Description</label>
              <div><%= ff.text_area :description, :rows =>"5", :cols =>"30",  class:"form-control is-valid text required" %></div>
              </div>
            </div>
          <% end %>
        <%# end %>
        </div>
      </div>

initializers / globalization.rb

module ActionView
  module Helpers
    class FormBuilder
      #
      # Helper that renders translations fields
      # on a per-locale basis, so you can use them separately
      # in the same form and still saving them all at once
      # in the same request.

      def globalize_fields_for(locale, *args, &proc)
        raise ArgumentError, "Missing block" unless block_given?
        @index = @index ? @index + 1 : 1
        object_name = "#{@object_name}[translations_attributes][#{@index}]"
        object = @object.translations.find_by_locale locale.to_s
        @template.concat @template.hidden_field_tag("#{object_name}[id]", object ? object.id : "")
        @template.concat @template.hidden_field_tag("#{object_name}[locale]", locale)
        @template.fields_for(object_name, object, *args, &proc)
      end
    end
  end
end

উত্তর:


3

আপনি Globalize.with_localeঅস্থায়ীভাবে লোকেল সেট করতে ব্যবহার করতে পারেন , এটি দেখার জন্যও কাজ করে:

<% Globalize.with_locale(some_other_locale) do %>
  in this part of the page locale will be <%= locale.inspect %>
<% end %>

তবে আপনার ক্ষেত্রে আরও ব্যবহারকারী-বান্ধব উপায় হ'ল ফর্মটিকে গতিময় করে তোলা, যাতে ব্যবহারকারী তাদের পছন্দের কয়েকটি ভাষায় অনুবাদ যুক্ত করতে পারেন।

গ্লোবালাইজ অনুবাদগুলি YourModel::Translationস্থানীয় এবং অনুবাদকৃত ক্ষেত্রগুলির জন্য ক্ষেত্রগুলি সহ কেবলমাত্র একটি অতিরিক্ত টেবিল / মডেল , যাতে আপনি অন্য কোনও নেস্টেড ফর্মগুলির মতো এগুলিতে সরাসরি কাজ করতে পারেন।

আপনার প্রকল্পে রত্ন কোকুন যুক্ত করুন , এটি গতিশীল ফর্মগুলি পরিচালনা করবে (যদি আপনি সম্পদ পাইপলাইনের পরিবর্তে ওয়েবপ্যাকার ব্যবহার করছেন - তবে অতিরিক্ত পদক্ষেপের প্রয়োজন হতে পারে, গ্লোবাল জ্যাকোয়ারি যুক্ত করতে এবং এর্ব ইন্টারপোলেশন ব্যবহার করে রত্ন থেকে জেএস প্রয়োজন হয়, এখানে আরও দেখুন )।

আপনার মডেল:

translates :description #, ...
accepts_nested_attributes_for :translations, allow_destroy: true

নিয়ামক ইন:

def your_some_params
  params.require(:your_model_name).permit(
        ...
        translations_attributes: [
          :id, :_destroy,
          :locale,
          :description,
        ]
      )
end

আকারে:

  <div id='translations'>
    <%= form.fields_for :translations do |t| %>
      <%= render 'translation_fields', f: t %>
    <% end %>

    <div class='links'>
      <%= link_to_add_association 'add translation', form, :translations  %>
    </div>
  </div>

মত অনুবাদ জন্য আংশিক:

<div class='nested-fields'>
  <%= f.hidden_field  :id %>
  <%= f.select :locale, I18n.available_locales %>
  <%= f.text_area :description %>

  <%= link_to_remove_association "remove this translation", f %>
</div>

ধন্যবাদ ভাসফিড !! সত্যই দরকারী
প্রযুক্তিবিদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.