我已经读了好几天了,似乎什么都没有用.我已经看过很多关于这个问题的文档,但是没有一个工作对我有用.
我有 :
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>');
返回:[缺少“en.form_error.cancel_reason”翻译]
我试过了:
删除translations.js并运行rake i18n:js:export
rake tmp:cache:clear
rake资产:预编译
有没有人有我可以尝试的其他解决方案?谢谢!!
最佳答案 更新
在查看其他配置文件之后,这个config / i18n-js.yml似乎是可疑的:
translations:
- file: "app/assets/javascripts/application/i18n/translations.js"
only: '*.js*'
根据export configuration文档,唯一的键是指要导出的翻译键,而不是文件名.因此’* .js *’将不匹配,导致不导出任何翻译.
将此文件更改为:
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”,正如预期的那样(在新的Rails安装中运行i18n:js:export后,证明NEW_KEY已正确添加到public / javascripts / translations.js),这意味着什么否则你的本地项目正在进行中.
进一步的调查
为了了解其他具体内容,您必须进一步调查与新Rails安装相比,您在本地更改了哪些配置.
(请注意,最简单的方法是提供Minimal, Complete and Verifiable example,例如指向GitHub仓库的链接,它可以准确地解决您的问题.)
>你说“i18n / translations.js不会更新以包含新的.yml翻译.”,但更新的默认路径是public / javascripts / translations.js.如果您使用的是translation.js文件的非标准路径,那么在config / i18n-js.yml中是否有其他配置? (如果是,请分享此文件的全部内容).
>您是否确认新翻译根本没有出现在translations.js中(例如,使用上面的grep命令)?或者问题是否可能与asset pipeline配置有关?