我已经读了好几天了,似乎什么都没有用。我已经看过很多关于这个问题的文档,但是没有一个工作对我有用。 我有:
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
有没有人可以尝试其他解决方案?谢谢!
答案 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仓库的链接,它可以准确地解决您的问题。)
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)
您似乎有英文翻译,但正试图访问法语区域设置。