Каков наилучший подход для локализации изображений (кнопок и другого содержимого) в приложении i18n rails?
Лучший подход для локализации изображений
Ответ 1
Я обычно вставляю имя локали в каждом пути или в имени изображения. В первом случае создайте разные папки для разных локалей.
/public/images/en/file.png
/public/images/it/file.png
image_tag("#{I18n.locale}/file.png")
Во втором случае
/public/images/file.it.png
/public/images/file.en.png
image_tag("file.#{I18n.locale}.png")
Я обычно предпочитаю второе решение, потому что есть много активов, которые мне не нужно локализовать, и мне часто нужно постоянно переводить/распространять активы в тех же папках, чтобы воспользоваться шаблоном конфигурации со связью.
Ответ 2
Мои 2 цента на этот старый вопрос.
Я предпочитаю подход вспомогательного метода и игнорирую локали по умолчанию, поэтому мне не нужно добавлять .en
ко всем моим активам
def localize(image_path, type = :svg)
image_path.concat('.').concat(I18n.locale.to_s) if I18n.locale != I18n.default_locale
image_path.concat('.').concat(type.to_s) if type
image_path
end
используется как:
= image_tag localize('svg/feature-one-bubble-copy')
Ответ 3
В недавнем приложении я впервые перепробовал переводы i18n с некоторым успехом, хотя код может быть немного грязным.
В application_controller у меня есть:
class ApplicationController < ActionController::Base
before_filter :set_locale
AVAILABLE_LOCALES = I18n.backend.available_locales
private
##########
# Internationalisation
# For more information see http://guides.rubyonrails.org/i18n.html
# Additional locale starting points can be found here http://github.com/svenfuchs/rails-i18n/tree/a0be8dd219ccce6716955566ee557cc75122cb33/rails/locale
def tld
domain_array = request.subdomains.split(".")
domain_array[0] == "www" ? domain_array[1].to_s : domain_array[0].to_s
end
def available_locales
AVAILABLE_LOCALES
end
def set_locale
I18n.locale = extract_locale_from_subdomain
end
def extract_locale_from_subdomain
(available_locales.include? tld.to_sym) ? tld : nil unless tld.blank?
end
end
Это в основном ищет соответствующий язык из указанного субдомена, поэтому http://en.mysite.com находится на английском языке и http://it.mysite.com находится на итальянском языке.
Далее следуют ваши взгляды, в которых вы просто используете:
<%= t(:click_to_edit) %>
Наконец, в config/locales создайте файл en.yml с требуемыми переводами:
en:
admin_menu: "Admin Menu"
Arabic: "Arabic"
back: "Back"
Basque: "Basque"
blogs: "Blogs"
blog_list: "Blog List"
blogroll: "Blogroll"
Итальянский файл содержит:
it:
admin_menu: "Menu Amministrazione"
Arabic: "Italian Arabic"
back: "Indietro"
Basque: "Italian Basque"