0

我有 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 上联系他,因为这似乎是我最近能找到他活跃的唯一地方。

任何帮助,将不胜感激。

4

1 回答 1

0

为什么你使用 PO 文件而不是常见的Rails 翻译?或者globalize3如果您更喜欢将翻译保存在数据库中并添加模型翻译。还有一个 gem 可以帮助您转换现有的翻译:i18n-translators-tools

于 2013-06-22T09:20:13.483 回答