Rails 应用程序中 javascript 字符串的国际化
Internationalization of javascript strings in a Rails application
我有一个 rails 应用程序,它在 assets / javascripts 文件中有一些字符串,我该如何国际化这些字符串?注意:我不能使用rails I18n,因为我不能给这些javascript文件加上.erb扩展名,所以我不能在它们上面使用ruby代码.
实现此目的的一种方法是编写一个简单的 rails 任务,生成包含翻译的 JavaScript 文件。
namespace :translations do
desc "Create a JavaScript File containing translations"
task :generate => :environment do
locale = ARGV[1] || I18n.default_locale
keys = ['hello', 'goodbye'] # ...
I18n.with_locale(locale) do
data = Hash[keys, keys.map { |k| I18n.t!(k) }]
end
begin
f = File.open(Rails.root.join('app/assets/javascript/translations.js') , 'w')
f.write("export default #{data.to_json}")
ensure
f.close
end
end
end
这将创建一个如下所示的 ES6 模块:
export default {
hello: 'Ola',
goodbye: 'Tchau'
}
然后在需要的地方导入:
import Translations from 'translations';
如果您不使用 Webpack,您可以对 Sprockets 使用相同的方法,但它并没有真正理解这一点,因为它将处理 ERB 文件,这是一个更简单的解决方案。您也可以使用 Webpack 的 ERB 加载程序来执行此操作。
有一个 gem i18n-js 可以做到这一点。您可以将您的字符串添加到其中一个翻译 yml 文件中,并以与在 Rails 端完全相同的方式访问它们。
我有一个 rails 应用程序,它在 assets / javascripts 文件中有一些字符串,我该如何国际化这些字符串?注意:我不能使用rails I18n,因为我不能给这些javascript文件加上.erb扩展名,所以我不能在它们上面使用ruby代码.
实现此目的的一种方法是编写一个简单的 rails 任务,生成包含翻译的 JavaScript 文件。
namespace :translations do
desc "Create a JavaScript File containing translations"
task :generate => :environment do
locale = ARGV[1] || I18n.default_locale
keys = ['hello', 'goodbye'] # ...
I18n.with_locale(locale) do
data = Hash[keys, keys.map { |k| I18n.t!(k) }]
end
begin
f = File.open(Rails.root.join('app/assets/javascript/translations.js') , 'w')
f.write("export default #{data.to_json}")
ensure
f.close
end
end
end
这将创建一个如下所示的 ES6 模块:
export default {
hello: 'Ola',
goodbye: 'Tchau'
}
然后在需要的地方导入:
import Translations from 'translations';
如果您不使用 Webpack,您可以对 Sprockets 使用相同的方法,但它并没有真正理解这一点,因为它将处理 ERB 文件,这是一个更简单的解决方案。您也可以使用 Webpack 的 ERB 加载程序来执行此操作。
有一个 gem i18n-js 可以做到这一点。您可以将您的字符串添加到其中一个翻译 yml 文件中,并以与在 Rails 端完全相同的方式访问它们。