i18n-js翻译没有使用.yml中的其他翻译进行更新

时间:2017-01-04 22:39:15

标签: javascript ruby-on-rails ruby internationalization

我已经读了好几天了,似乎什么都没有用。我已经看过很多关于这个问题的文档,但是没有一个工作对我有用。 我有:

  Rails 5.0.1
  * sprockets (3.7.1)
  * sprockets-rails (3.2.0)
  * i18n (0.7.0)
  * i18n-js (3.0.0.rc15)

配置/ I18N-js.yml

translations:
- file: "app/assets/javascripts/application/i18n/translations.js"
  only: '*.js*'

配置/ application.rb中

    config.middleware.use I18n::JS::Middleware

当我将新翻译添加到相应的yml文件时,i18n / translations.js不会更新以包含新的.yml翻译。

例如,在en.yml中:

en:
 form_error:
    tos_check: "You must agree to Lexody's Terms of Use to continue."
    choose_city: "Please select a city from the menu."
    cancel_reason: "Please provide a reason for cancelling."

$('.prompt').html('<p style="color:#e57373">' + I18n.t('form_error.cancel_reason') +'</p>');

返回:[missing "en.form_error.cancel_reason" translation]

我试过了:

删除translations.js并运行rake i18n:js:export

rake tmp:cache:clear

rake assets:precompile

有没有人可以尝试其他解决方案?谢谢!

4 个答案:

答案 0 :(得分:2)

更新

查看其他配置文件后,这个config/i18n-js.yml似乎很可疑:

translations:
- file: "app/assets/javascripts/application/i18n/translations.js"
  only: '*.js*'

根据export configuration文档,only键指的是要导出的翻译键,而不是文件名。因此'*.js*'将不会匹配,导致 no 翻译被导出。

将此文件更改为:

translations:
- file: "app/assets/javascripts/application/i18n/translations.js"
  only: '*'

(以下原文答案)

工作示例

这是一个最小的工作示例,它使用i18n-js gem产生预期的行为:

#!/bin/bash
rails _5.0.1_ new .
echo "gem 'i18n-js', '3.0.0.rc15'" >> Gemfile
echo "  NEW_KEY: NEW_VALUE" >> config/locales/en.yml
bundle install
bundle exec rake i18n:js:export
grep -o '"NEW_KEY"' public/javascripts/translations.js

对我来说,按照预期运行上面的脚本在最后一行输出"NEW_KEY"(证明在新鲜NEW_KEY运行后public/javascripts/translations.js已正确添加到i18n:js:export Rails安装),这意味着你的本地项目正在进行其他工作。

进一步调查

为了了解其他具体内容,您需要进一步调查与新Rails安装相比,您在本地更改了哪些配置。

(请注意,最简单的方法是提供一个Minimal, Complete and Verifiable example,例如指向GitHub仓库的链接,它可以准确地解决您的问题。)

  • 你说“i18n / translations.js不会更新以包含新的.yml翻译。”,但更新的默认路径为public/javascripts/translations.js。如果您为translations.js文件使用非标准路径,那么在config/i18n-js.yml中是否有其他配置? (如果是,请分享此文件的全部内容)。
  • 您是否确认新翻译未显示在translations.js中(例如,使用上述grep命令)?或者问题是否可能与asset pipeline配置相关?

答案 1 :(得分:0)

不确定您的意思是dev还是prod env。我在dev env中遇到了类似的问题,我通过将config.middleware.use(I18n::JS::Middleware)添加到config/application.rb来解决了这个问题。你可以查看它here。希望它有所帮助。

答案 2 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrapper"> <div id="fotos" class="bananas">X <img class="modal-content" src="http://assets.barcroftmedia.com.s3-website-eu-west-1.amazonaws.com/assets/images/recent-images-11.jpg" id="imgdisplay" /> </div> </div> <div class="wrapper"> <div id="fotos1" class="bananas">X <img class="modal-content" src="http://i.telegraph.co.uk/multimedia/archive/03598/lightning-10_3598416k.jpg" id="imgdisplay1" /> </div> </div>文件中,检查语言代码后的冒号。

您的示例如下:

.yml

尝试:

en
 form_error:
    cancel_reason: "Please provide a reason for cancelling."

我没有试过用这个做一个例子。但是,我拥有副本的项目中的en: form_error: cancel_reason: "Please provide a reason for cancelling." 文件在语言名称后面都有冒号。而这只是一种令人愤怒的拼写错误,可能对接近它的人来说是不可见的。儿!

答案 3 :(得分:-1)

您似乎有英文翻译,但正试图访问法语区域设置。