【问题标题】:What is the best practice to capitalize words in Rails?在 Rails 中将单词大写的最佳做法是什么?
【发布时间】:2012-08-23 13:58:31
【问题描述】:

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

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)

【问题讨论】:

  • 值得注意的是,语言的东西会很快变得非常复杂。这是一个非常简单的例子。你有更现实的用例吗?

标签: ruby-on-rails ruby internationalization


【解决方案1】:

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

t(:hello_button)

然后在你的英文 YAML 中:

hello_button: "Hello"

这样翻译就可以使用适合所讨论语言的任何大小写。此外,有时英语会在两件事上使用同一个词,而其他语言会使用不同的词:考虑 orange 颜色和 orange 水果;因此上下文在您的翻译中的重要性。

此外,capitalize 仅适用于 ASCII 字符,除非您将 mb_chars 加入其中:

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

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

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

假设所有语言都表现得像英语,这只是触及了您将面临的困难的表面。等到你必须开始处理pluralization rules

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


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 对不起,我不同意你的观点,大小写取决于上下文。
    • 当然,我也在考虑使用第一个。但是,虽然发送语言变量或使用方法来大写的性能更昂贵?
    • @Gabamnml 在我的机器上运行 'hello'.capitalize 1,000,000 次需要 820 毫秒。每页执行几次对性能的小幅影响不值得维护开销。
    • @muistooshort 根据 OP 给出的上下文和他们的简单示例,我假设大写是语法上的,而不是语义上的。在这种情况下,大小写与字符串无关。
    • 但语法部分取决于语言环境,并非所有语言在与英语相同的上下文中都将单词大写。例如:德语将所有专有名词大写,英语则不然。有两条信息在起作用,它们都取决于语言环境:单词本身以及是否应该大写;这两个都需要翻译系统处理,不能分开处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2014-02-18
    • 2017-12-28
    • 2020-09-01
    • 1970-01-01
    • 2010-09-18
    • 2015-12-30
    相关资源
    最近更新 更多