我有 PO 文件(en.po 和 fr.po),我想用它们将我的 Rails 应用程序本地化为法语。我最近提交了问题https://stackoverflow.com/questions/17203622/translating-a-rails-application-3-2-13-using-po-gettext-files以查看是否可以得到任何帮助。我提到我已经阅读了一些关于 Fast-Gettext 和另一个 gem 的信息。我决定查看 Fast-Gettext gem,因为它允许在不使用数据库的情况下使用 PO 文件。
我在我的 Gemfile 中添加了最新版本的 fast_gettext 和 gettext_i18n_rails。我安装了后一个 gem 以消除未定义的方法“_”错误消息,即使此时我没有使用数据库功能的计划。
我在 config/application.rb 中添加了以下代码。
# add FastGettext configuration
FastGettext.add_text_domain 'my_app', :path => 'config/locales', :type => :po, :ignore_fuzzy => true, :report_warning => false
FastGettext.default_text_domain = 'my_app' # set the default textdomain
FastGettext.default_available_locales = ["en","fr"] # set available locales # (note: the first one is used as a fallback if you try to set an unavailable locale)
FastGettext.default_locale = 'en'
这是我在 application_controller.rb 中的设置,允许使用 cookie 设置和保存语言环境。
include FastGettext::Translation
before_filter :set_users_locale
def set_users_locale
I18n.locale = FastGettext.set_locale(params[:locale] || cookies[:locale] ||
request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
cookies[:locale] = I18n.locale if cookies[:locale] != I18n.locale.to_s
end
我添加了用户可以单击标志并设置 :locale 值的逻辑。
<%= link_to_unless_current image_tag("flag_us_30px.jpg", :alt => "Set Language to English"), locale: "en" %>
<%= link_to_unless_current image_tag("flag_fr_30px.jpg", :alt => "Set Language to French"), locale: "fr" %>
当一个人单击该标志时,它会正确设置 :locale 的值。我的路线格式为 domain.com/:locale/link。现在根将包括语言环境,直到我添加逻辑来覆盖它。
以下是我正在测试的两个观点:
<%= _("Language") %>
<%= _("Note: If you do not understand the text on the icons, use the text links at the bottom of the page.") %>
当我单击法国国旗将 :locale 的值更改为“fr”时,链接会正确更改,但两个字符串的代码仍为英文。PO 文件包含这两个术语的法语翻译。我认为如果它没有找到 PO 文件,我应该会看到错误消息指出它没有找到它们。
我首先尝试使用 config/initializers/fast_gettext.rb 中的配置代码,但没有得到任何结果,所以我决定将它放在 config/application.rb 中,看看是否可以让它工作。我还删除了 ':ignore_fuzzy => true, :report_warning => false' 看看这是否会改变事情。但是我得到了相同的结果。
我正在使用 fast_gettext,因为早在 2011 年 @svenfuchs 就推荐它使用 Gettext。我可能会尝试在 Twitter 上联系他,因为这似乎是我最近能找到他活跃的唯一地方。
任何帮助,将不胜感激。