Muhtemelen bildiğiniz gibi, Rails 2.2'den başlayarak, Raylar basit bir yerelleştirme ve uluslararasılaşma arka uç ile gönderilir.Rails ve I18n: yerelleştirilmiş şablonlar vs localized string
Varsayılan olarak, config
klasöründeki yerelleştirme dosyalarında çevirmeniz gereken dizeleri saklayabilirsiniz.
config/locales/en.yml
config/locales/it.yml
Ancak Rails, şablonları ve kısmi alanları da yerelleştirme becerisi sağlar. Örneğin, MainController # indeks eylemi şablon dosya adı ve geçerli yerel ayarlara göre yerelleştirilmiş bir şablon seçebilir. Eğer tek dizeleri veya kısa paragraflar çevirmek gerektiğinde
apps/views/main/index.it.html.erb
apps/views/main/index.en.html.erb
ilk uzun metrajlı yararlıdır. İkinci işlem, aynı eylem geçerli yerel değere göre farklı şekillerde işlendiğinde iyi bir seçimdir.
Ancak, aynı iş mantığını paylaşan ancak çok miktarda metin içeren adil ve basit şablonlarla nasıl baş edersiniz? Örneğin aşağıdaki şablonu kullanın:
<% javascript_content_for :head do %>
$(function() {
$("#choices :radio").change(function() {
$(".choice-wizard").hide();
$("#" + $(this).val()).show();
});
});
<% end %>
<h1><%= title t(".title") %></h1>
<div class="widget">
<div class="entry form">
<h2><%= title t(".header_choices") %></h1>
<% form_tag "#", :id => "choices" do %>
<p>
<%= radio_button_tag :choice, "with" %>
<%= label_tag "choice_with", "..." %>
</p>
<p>
<%= radio_button_tag :choice, "without" %>
<%= label_tag "choice_without", "..." %>
</p>
<% end %>
<div id="with" class="choice-wizard" style="display: none;">
<!-- to be localized -->
<h3>....</h3>
<p>a long paragraph</p>
<p>a long paragraph</p>
<p class="textcentered">
<%= link_to "Continue", new_path, :class => "button" %>
</p>
<!--/to be localized -->
</div>
<div id="without" class="choice-wizard" style="display: none;">
<!-- to be localized -->
<h3>....</h3>
<p>a long paragraph</p>
<p>a long paragraph</p>
<p class="textcentered">
<%= link_to "Continue", new_path, :class => "button" %>
</p>
<!--/to be localized -->
</div>
</div>
</div>
<% sidebar do %>
<%= render :partial => "sidebar/user" %>
<% end %>
Burada bir form, bir JavaScript içeriği ve az miktarda metin var. Ben metin ama çevirmek gerekir:
- metin .yml dosyasında basit bir dize oluşturmak için çok uzun ve ben her paragraf için O (n) dizeleri, bir tane oluşturmak sonunda istemiyoruz
- şablonu bazı "özellikler" içeriyor ve her bir dil için bir tane olmak üzere 5 şablon oluşturmak istemiyorum, çünkü uygulamanın bakımı daha da zorlaştıracak.
Kodu nasıl düzenlerdiniz?
Lokalize kısmi kısmi kullanıyorum. Bu yaklaşımın dezavantajı, sadece bu eylem için, ((1 görünüm) + (5 * 2 kısmi = 10)) = 11 dosya ile biter. : S –
Bu problemi görebiliyorum ama X * L veri parçalarıyla sonuçlanmayan bir çözüm bulmuyorum (X, tercüme edilen parçaların sayısı, L, sunulan dil çevirisi sayısıdır. .) Her bir X 'içerik_foru bloğundan oluşan L kısmi ile birlikte 'verim: named_content' yöntemini kullanabiliyor olabilirsiniz, ancak bu, bir diğeri için bir çözüme karşı bir endişe duyuyoruz. –