在 i18n Rails 应用程序中本地化图像(按钮和其他内容)的最佳方法是什么?
我通常在每个路径或图像名称中注入区域设置名称。 在第一种情况下,为不同的语言环境创建不同的文件夹
/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 美分。
我更喜欢辅助方法并忽略默认区域设置,因此我不必将
.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')
如果您的网站不包含大量带有需要翻译的文本的图像,一种更简单的方法是将图像视为您引用的图像文件名。作为一个字符串,可以像其他所有内容一样进行翻译:
en.yml
images:
header: my_header.png
it.yml:
images:
header: my_header.it.png
那就简单地做吧
image_tag(I18n.t('images.header'))
在最近的一个应用程序中,我第一次尝试了 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"