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

时间:2012-07-03 16:24:53

标签: ruby-on-rails internationalization

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

我有:

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
  • 利用

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

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

..可能会发展成这个混乱:

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

您在帖子中描述的做法,即:

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

是非常有效和正确的。至少我经常在我参与的项目中遇到它。至于"混乱"你提到过:

  one_l:   "article"
  other_l: "articles"

Imho你不应该担心它,因为你基本上可以在任何字符串上调用downcase。只要你使用给定语言的单数和复数形式,你就会很好。

至于%{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:'

希望有所帮助