如何在没有语言环境文件的情况下使用Ransack获取I18n属性?

时间:2013-03-04 16:56:01

标签: ruby-on-rails internationalization ruby-on-rails-3.2 ransack

我正在使用Rails 3.2和Ransack 0.7来搜索我的数据库,我遇到了模型属性显示名称的问题。我在标准条件字段中调用视图中的属性字段:

<%= f.attribute_fields do |a| %>
  <%= a.attribute_select( {}, { :class =>"formee-small" } ) %>
<% end %>

在模型中,我的属性字段由此定义:

UNRANSACKABLE_ATTRIBUTES = ["id"]

def self.ransackable_attributes auth_object = nil
  (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys
end

现在假设我有一个名为“username”的属性,在我看来会显示为“Username”。现在,如果我想要翻译它,我需​​要将翻译放在我的标准语言环境文件中,对于我的网站的德语版本,英语和de.yml将是en.yml。

现在问题出在这里:

只要我了解我的模型及其属性,此解决方案就可以正常工作。但是我有一个非常复杂的应用程序,它允许用户创建自己的MVC(模型,视图和控制器)并使用他自己的翻译。在每种情况下,这都可以正常工作,除了用户创建的MVC的Ransack搜索表单中显示的名称。

所以,可能的解决方案是:

1)我找到了一种方法来在每次用户创建新的MVC时更新我的​​语言环境文件,并且每当他更改属性的其中一个翻译时。

2)我绕过语言环境文件并直接告诉Ransack或Rails我的属性的正确名称。

无论哪种方式,我都没有找到任何方法来做到这一点,所以如果有人有解决方案,我会非常感激。其他解决方案也受到欢迎。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果有人想知道,我在

中更改了翻译中的translate.rb文件
lib/ransack/translate.rb 

并取代了正常的

t("translation key")

I18n.t("translation key")

现在我可以从我的数据库中读取属性,如果他们有以下密钥:

ransack.attributes.NAME_OF_THE_ATTRIBUTE

也许不是最好的方式,但它适用于我!