我开始创建一个应用程序,并计划好了我的基本脚手架。假设我创建了这个资源:
rails g scaffold CircusAnimal fieldOne:string fieldTwo:string
我使用RailsI18n来翻译表单上的标签,使用:
en:
activerecord:
attributes:
circus_animal:
fieldOne: Breed
fieldTwo: Trainer
到目前为止还不错,当我生成一个表单,其中包含模型的所有字段时,翻译都被正确提取:
<%= form.fields_for :circus_animals do |f| %>
<%= f.label :fieldOne %>
<%= f.text_field :fieldOne %>
<%= f.label :fieldTwo %>
<%= f.text_field :fieldTwo %>
<% end %>
然后我决定我需要这个表单的另一个字段,所以我运行了一个迁移:
rails g migration add_fieldThree_to_circusAnimal fieldThree:integer
rails db:migrate
我将新字段添加到控制器中允许的字段中,并将其添加到视图中。
<%= form.fields_for :circus_animal do |f| %>
<%= f.label :fieldOne %>
<%= f.text_field :fieldOne %>
<%= f.label :fieldTwo %>
<%= f.text_field :fieldTwo %>
+ <%= f.label :fieldThree %>
+ <%= f.number_field :fieldThree %>
<% end %>
我还在en.yml
:中添加了一个翻译
en:
activerecord:
attributes:
circus_animal:
fieldOne: Breed
fieldTwo: Trainer
+ fieldThree: Age
但是,fieldThree
的标签没有被翻译。我尝试过破坏资产,我尝试过运行rails db:schema:cache:clear
,我也尝试过在rails控制台中运行它:
CircusAnimal.connection.schema_cache.clear!
CircusAnimal.reset_column_information
如果我运行CircusAnimal.columns
,我会正确地看到fieldThree
列。
如何像前两个最初是脚手架搭建的字段一样翻译新添加的字段?
我的错,我看到发生了什么。有问题的资源(称之为CircusAnimal
)属于另一个资源(称其为Circus
),因此CircusAnimal
的表单字段与Circus
表单字段一起包含在Circus
资源的视图页面上。我在Circus
资源的视图上添加了:fieldThree
,而没有在CircusAnimal
资源的视图中添加:因此,我的自定义i18n-tasks
扫描仪将:fieldThree
与Circus
资源而不是CircusAnimal
资源相关联。为了修复此问题,我只是将:fieldThree
添加到CircusAnimal
的视图中,扫描仪将其拾取并正确地将其与CircusAnimal
关联。现在,当我在正确的资源下在en.yml
中翻译它时,翻译正确地显示在视图中。对不起,愚蠢的错误!我试图在rails控制台中用I18n.t('activerecords.attributes.circus_animal.fieldThree')
进行翻译,结果发现翻译键丢失了。这让我注意到密钥位于错误的资源下,因为它是从Circus
资源的视图中提取的!