在Rails中利用单词的最佳实践是什么?

时间:2012-08-29 01:35:28

标签: ruby-on-rails ruby internationalization

我正在使用R ails中的语言,我想知道什么是最佳实践是什么时候大写。

en.yml:

hello: "hello"

application.html.erb:

<%= link_to t(:hello).capitalize, hello_path %> (with capitalization)
<%= link_to t(:hello), hello_path %> (without capitalization)

en.yml:

Hello: "Hello"
hello: "hello"

application.html.erb:

<%= link_to t(:Hello), hello_path %> (with capitalization)
<%= link_to t(:hello), hello_path %> (without capitalization)

2 个答案:

答案 0 :(得分:22)

第二个更有可能是正确的。何时大写以及何时不依赖于语言环境,因此您无法知道t(:hello).capitalize是否会在不查看周围环境的情况下产生正确的结果。比其中任何一种更好的方法是在符号中包含上下文,如下所示:

t(:hello_button)

然后在你的英语YAML中:

hello_button: "Hello"

这样,翻译可以使用适合所讨论语言的任何一种情况。此外,当其他语言使用不同的单词时,有时英语将使用相同的单词:考虑橙色颜色和橙色水果;因此,翻译中语境的重要性。

此外,capitalize仅适用于ASCII字符,除非您将mb_chars投入混合:

> 'µ'.capitalize
=> "µ" 
> 'µ'.mb_chars.capitalize.to_s
=> "Μ"

您可能不会遇到前导µ,但在单词开头的简单重音非常常见:

> 'éclair'.capitalize
=> "éclair" 
> 'éclair'.mb_chars.capitalize.to_s
=> "Éclair" 

假设所有语言都像英语一样,这只是表面上你将遇到的困难。等到你必须开始处理pluralization rules

L10N中的基本规则是将面向用户的字符串视为不透明的数据块,您可以从某种数据库中提取数据并向用户显示,而无需在其间进行操作。是的,这会使您的代码更复杂,但正确性非常重要。


当我在这里时,尝试翻译单个单词往往会产生难以理解的混乱,如果你翻译整个句子,你会得到更好的结果。

答案 1 :(得分:4)

第一个。不要只用大小写来复制你的数据作为区别,它只会使维护更难。