在我的I18n en.yml文件中,键名可以包含连字符吗?

8
例如:
en:
  foobar-does-not-work: 'This is my value'

然后,如果我执行以下操作:
t(foobar-does-not-work) # => returns nil

这在Ruby的yml中无法解析。但是有没有什么办法让它起作用呢?我的键基于具有破折号( - )的URL。

我认为在键中使用破折号是允许的,不应该出现问题。你确定是破折号吗? - zwippie
@zwippie 我确定。Ruby 不允许这样做。 - Trip
我试过了,我的 Ruby 版本允许它。你用的是哪个 Ruby 版本? - zwippie
@zwippie 对不起!在原始的 Ruby 中似乎可以工作。我猜我的情况是当解析我的 en.yml(Il8n 文件)时它不起作用。我更新了我的问题。 - Trip
2
你的字符串周围没有引号。这只是一个打字错误吗(因为你说它返回nil而不是语法错误)? - matt
3个回答

5
你使用的是哪个版本的Ruby?能否向我们展示你的代码和错误信息?
这个对我有效:
> require 'yaml'
> YAML.load_file('foo.yml')
{"en"=>{"foobar-does-not-work"=>"This is my value"}} 

当我将它添加到我的en.yml文件中时,它就可以工作:

> I18n.t('foobar-does-not-work')
=> "This is my value" 

你检查过 I18n.locale 的值了吗?


嗯,有趣。是的,它似乎在控制台中像你的示例一样工作。但出于某种原因,当我通过我的en.yml(Il8n文件)执行它时,它无法加载。我更新了我的问题。 - Trip

2

显然存在一个需要被发掘的潜在问题。有一个非常好的工具可以分析你的i18n YAML文件,作为Rails应用程序,我发现这个工具非常有帮助。

安装并运行这个gem i18n-tasks:https://github.com/glebm/i18n-tasks

创建一个全面的报告,包括你的i18n组件:

$ i18n-tasks health

根据他们的规范:

This gem analyses code statically for key usages, such as I18n.t('some.key'), in order to:

Report keys that are missing or unused.
Pre-fill missing keys, optionally from Google Translate.
Remove unused keys.
Thus addressing the two main problems of i18n gem design:

Missing keys only blow up at runtime.
Keys no longer in use may accumulate and introduce overhead, without you knowing it.

我不确定这个 gem 是否旨在作为 i18n 调试工具使用,但我发现它对于调试难以找到的 i18n 问题非常有用。


1

我认为您在调用t方法时使用了错误的键。请从键中删除“en”。正确的写法是:

t('foobar-does-not-work')

非常好的观点。我刚刚检查了我的代码,发现我只在示例中包含了它。即使去掉“en”,它似乎仍然无法正常工作。 - Trip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接