ruby-on-rails - 在 Rails 中大写单词的最佳做法是什么?

标签 ruby-on-rails ruby internationalization

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

zh.yml:

hello: "hello"

应用程序.html.erb:

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

zh.yml:

Hello: "Hello"
hello: "hello"

应用程序.html.erb:

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

最佳答案

第二个更有可能是正确的。何时大写何时不大写取决于语言环境,因此如果不查看周围的上下文,您将无法知道 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 的基本规则是将面向用户的字符串视为不透明的数据 block ,您可以从某种数据库中提取这些数据,并在中间不进行任何操作地显示给用户。是的,这会使您的代码更加复杂,但正确性很重要。


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

关于ruby-on-rails - 在 Rails 中大写单词的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169785/

相关文章:

mysql - 更新collection_singular_ids时如何触发 `dependent: destroy`

html - 如何使悬停后面的内容可点击?

ruby-on-rails - 命令轨服务器

ruby - 在/var/www 目录下使用 sass --watch 命令时出现 "sudo: sass: command not found"错误

ruby - unicode 零宽度连接器到正常空间

ruby-on-rails - 如何配置 Rails 路由以适应 i18n

java - 在Java中,是否需要Collat​​or来精确匹配utf-8字符串?

ruby-on-rails - 对同一模型使用具有多个命名空间的设计

ruby-on-rails - 使用对象属性 update_all

从日语源估计英语翻译单词数量的算法