在RoR中构建翻译的有效方法?

我希望有人可以看一下,因为我之前从未翻译过任何英文,所以我不确定是否会有语法冲突。

我有:

en: articles: name: "Articles" comments: name: "Comments" # things no_results: "There are no %{things}" my: "My %{things}" 

然后在视图文件中,例如:

 #title= t('articles.name') %ul %li= link_to t('my', things: t('articles.name')), articles_path(user) .no_results= t('no_results', things: t('comments.name').downcase) 

我正在尝试做的是干掉我的翻译,但也没有使用方法搞得一团糟:

  • 变复数
  • singularize
  • downcase
  • 利用

在文本中使用时,似乎最常见的模型forms是大写和多元化,这就是我选择“文章”与“文章”或“文章”的原因。 您是否支持视图文件中的上述方法,例如:

 articles: one: "Article" other: "Articles" 

..可能会发展成这个烂摊子:

 articles: one: "Article" other: "Articles" one_l: "article" other_l: "articles" 

不同语言对句子的构建方式有不同的规则。 翻译你的翻译可能会导致语法错误的外语句子。 我建议一次坚持逻辑文本块。 例如段落,句子,表达或单词。

例如,您假设在您希望将您的应用程序翻译成的每种语言中,单词“my”将始终位于“articles”之前,并且“my”只有一个单词。

在某些语言中,“我的”版本可能取决于随之而来的单词。 我会用保加利亚语,因为我很清楚 – “我的车”翻译成“Moiata kola”和“我的卡车”翻译成“Moiat kamion”。 不是“我的”的直接翻译。

也可能在某些语言中你不得不说“我的文章”之前的“文章”之类的东西。 对于不同的语言,您可以在“my”之前配置“文章”,但如果您的翻译包含多个变量,则可能会出现问题。

我会为每一个单独的一行:“我的文章”,“没有文章”,“我的车”,“没有车”等等。

您在post中描述的练习,即:

 articles: one: "Article" other: "Articles" 

是非常有效和正确的。 至少我经常在我参与的项目中遇到它。 至于你提到的“乱七八糟”:

  one_l: "article" other_l: "articles" 

Imho你不应该担心它,因为你基本上可以在任何字符串上调用一个downcase 。 只要你在给定的语言中有单数和复数forms,你就是好的。

至于%{things}的不同位置,这很自然。 你把它放在适合的地方。 例如,有5种不同的语言:

  not_saved: one: ! '1 fejl medførte at denne %{resource} ikke kunne gemmes:' other: ! '%{count} fejl medførte at denne %{resource} ikke kunne gemmes:' not_saved: one: ! '1 error prohibited this %{resource} from being saved:' other: ! '%{count} errors prohibited this %{resource} from being saved:' not_saved: one: ! '1 virhe esti %{resource} tallentamisen:' other: ! '%{count} virhettä esti %{resource} tallentamisen:' not_saved: one: ! 'Én feil gjorde at %{resource} ikke kunne lagres:' other: ! '%{count} feil gjorde at %{resource} ikke kunne lagres:' not_saved: one: ! '1 fel hindrade denna %{resource} från att sparas:' other: ! '%{count} fel hindrade denna %{resource} från att sparas:' 

希望有所帮助