当具有选定翻译键的局部变量发生变化时,为什么 I18n 翻译会发生变化?
Why I18n translations change when local variable with a selected translation key changes?
今天这在我之上。希望有人能给我解释一下!
假设您有一个 rails 项目,其中的 en.yml 文件包含以下内容:
en:
foo:
foo: foo
bar: bar
将I18n.t(:foo)的结果赋值给一个局部变量,你得到一个Hash:
2.0.0-p353 :001 > a = I18n.t(:foo)
=> {:foo=>"foo", :bar=>"bar"}
现在,更改此哈希中的键的值会导致 I18n.t('foo.foo'):
发生变化
2.0.0-p353 :005 > a[:foo] = 'bar'
=> "bar"
2.0.0-p353 :006 > I18n.t(:foo)
=> {:foo=>"bar", :bar=>"bar"}
所以,为了让问题更清楚 - 为什么将 a[:foo] 从 'foo' 更改为 'bar',会导致 I18n.t('foo.foo') ?
提前致谢!
之后
a = I18n.t(:foo)
引用a
不保存副本,而是引用同一个哈希。更改 a
处的哈希值会修改 I18n.t(:foo)
处的相同哈希值。
这不是 I18n.t
的特殊行为,而是 Ruby 的正常行为。
> a
=> {:foo=>:bar, :baz=>:qux}
> b = a
=> {:foo=>:bar, :baz=>:qux}
> b[:foo] = 1
=> 1
> b
=> {:foo=>1, :baz=>:qux}
> a
=> {:foo=>1, :baz=>:qux}
今天这在我之上。希望有人能给我解释一下!
假设您有一个 rails 项目,其中的 en.yml 文件包含以下内容:
en:
foo:
foo: foo
bar: bar
将I18n.t(:foo)的结果赋值给一个局部变量,你得到一个Hash:
2.0.0-p353 :001 > a = I18n.t(:foo)
=> {:foo=>"foo", :bar=>"bar"}
现在,更改此哈希中的键的值会导致 I18n.t('foo.foo'):
发生变化2.0.0-p353 :005 > a[:foo] = 'bar'
=> "bar"
2.0.0-p353 :006 > I18n.t(:foo)
=> {:foo=>"bar", :bar=>"bar"}
所以,为了让问题更清楚 - 为什么将 a[:foo] 从 'foo' 更改为 'bar',会导致 I18n.t('foo.foo') ?
提前致谢!
之后
a = I18n.t(:foo)
引用a
不保存副本,而是引用同一个哈希。更改 a
处的哈希值会修改 I18n.t(:foo)
处的相同哈希值。
这不是 I18n.t
的特殊行为,而是 Ruby 的正常行为。
> a
=> {:foo=>:bar, :baz=>:qux}
> b = a
=> {:foo=>:bar, :baz=>:qux}
> b[:foo] = 1
=> 1
> b
=> {:foo=>1, :baz=>:qux}
> a
=> {:foo=>1, :baz=>:qux}