下面的代码是我在 rails 应用程序中的一个咖啡脚本文件中的代码。我正在努力为“Select Account First”和“Select One”等字符串值添加 i18n 支持。在常规 javascript 文件中,我一直在使用 I18n.t("shared.select_account_first") 之类的东西来获取使用 i18n-js gem 的字符串的国际化值。
jQuery ->
networks = $('#account_offering_network_id').html()
select_network_options = new Option("Select Account First", "", true, false)
filter_networks_by_account = (account) ->
if account is 'Select One'
$('#account_offering_network_id').html(select_network_options)
else
escaped_account = account.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options = $(networks).filter("optgroup[label='#{escaped_account}']")
$('#account_offering_network_id').html(options.html())
# Show proper network dropdown first time
filter_networks_by_account($('#account_offering_account_id :selected').text())
# Show proper network dropdown on account change
$('#account_offering_account_id').change -> filter_networks_by_account($('#account_offering_account_id :selected').text())
所有这些的目标是根据所选帐户过滤网络下拉列表。如果未选择帐户(帐户下拉菜单的值显示“选择一个”或相应的 i18n 值),网络下拉菜单应在所选区域设置中显示“首先选择帐户”。
我正在使用 i18s-js gem(https://github.com/fnando/i18n-js) 在 javascript 中启用翻译。以下是我必须在应用程序中进行的更改以支持 gem。
在 application.js 中:
//= require i18n
//= require i18n/translations
在 production.rb 和 development.rb 中添加的属性:
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
config.i18n.available_locales = [:en, :ru]
在 application.html.erb 中:
<%# For localization/i18n in javascript %>
<script type="text/javascript">
I18n.defaultLocale = "<%= I18n.default_locale %>";
I18n.locale = "<%= I18n.locale %>";
I18n.fallbacks = true;
</script>
最后我运行了“rake i18n:js:export”,它将创建一个翻译文件 (app/javascripts/i18n/translations.js),其中加载了名称-值对。现在,我可以通过任何 javascript 访问使用 I18n.t(name) 的翻译。