我正在使用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)
答案 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)
第一个。不要只用大小写来复制你的数据作为区别,它只会使维护更难。