11

我正在使用 Rails 中的语言,我想知道将单词大写时的最佳做法是什么。

en.yml:

hello: "hello"

应用程序.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"

应用程序.html.erb:

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

2 回答 2

23

第二个有更好的机会是正确的。何时大写以及何时不大写取决于语言环境,因此如果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" 

通过假设所有语言的行为都像英语,这只是触及了您将面临的困难的表面。等到你必须开始处理复数规则

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


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

于 2012-08-29T01:53:16.190 回答
4

首先。不要仅以大写作为区别来复制您的数据,这只会使其更难维护。

于 2012-08-29T01:38:05.047 回答