中间人i18n不工作

时间:2016-01-30 13:05:25

标签: ruby-on-rails rails-i18n middleman

我是使用红宝石和中间人的新手,我创建了我的项目并且一切正常,但是当我转到/es路径时,我没有得到任何翻译。我搜索了没有任何结果的信息,并尝试在测试配置的文件夹之间移动代码而没有。

我的文件夹结构是:

|locales
  |---en.yml
  |---es.yml
|source
  |es
    |---index.html.haml
  |layouts
    |---layout.html.haml
  |partials
    |_header.html.haml
    |_navigation.html.haml
  |---index.html.haml

我的YAML文件

en.yml

en:
  home: 'Home'

es.yml

es:
  home: 'Inicio'

我的HAML

%nav
   = link_to t(:home), '/', class: "#{'active' if current_page.url == '/'}"
   = link_to 'Portfolio', '/portfolio', class: "#{'active' if current_page.url == '/portfolio/'}"
   = link_to t(:skills), '/skills', class: "#{'active' if current_page.url == '/skills/'}"
   = link_to t(:about), '/about', class: "#{'active' if current_page.url == '/about/'}"
   = link_to t(:contact), '/contact', class: "#{'active' if current_page.url == '/contact/'}"

我的配置

config.rb

###
# Page options, layouts, aliases and proxies
###

# Per-page layout changes:
#
# With no layout
page '/*.xml', layout: false
page '/*.json', layout: false
page '/*.txt', layout: false

# With alternative layout
# page "/path/to/file.html", layout: :otherlayout

# Proxy pages (http://middlemanapp.com/basics/dynamic-pages/)
# proxy "/this-page-has-no-template.html", "/template-file.html", locals: {
#  which_fake_page: "Rendering a fake page with a local variable" }

# General configuration
set :partials_dir, 'partials'
activate :i18n, :templates_dir => 'partials'
activate :directory_indexes

# Reload the browser automatically whenever files change
configure :development do
  activate :livereload
end

###
# Helpers
###

# Methods defined in the helpers block are available in templates
# helpers do
#   def some_helper
#     "Helping"
#   end
# end

# Build-specific configuration
configure :build do
  # Minify CSS on build
  activate :minify_css

  # Minify Javascript on build
  activate :minify_javascript
end

4 个答案:

答案 0 :(得分:0)

我不能写评论,但我认为这可能是原因,你的es.yml是错的,因为它开始了:

 en:
    home: 'Inicio'

不应该是

 es:
    home: 'Inicio'

答案 1 :(得分:0)

我知道这个问题已经过了几个月但是我遇到了同样的问题,在网上看了好几个小时试图找到并回答并设法通过在激活 i18n 后添加这些参数来解决问题:

<强> config.rb

configure :build do
   activate :i18n,
      :mount_at_root => 'en',
      :lang_map => { :'en' => 'en', :'es' => 'es' },
      :path => '/'
end

显然,如果您想要“es”作为默认值,请更改 mount_at_root

希望这有帮助。

答案 2 :(得分:0)

我用英语和西班牙语实现了具有单独URL的本地化路径
在源目录的根目录中添加 index.es.html.erb
并设置激活:i18n,:path =&gt; config.rb中的“/:locale /”

在浏览器中,我的语言选择器会将用户发送到 / / es

http://website.com/

西班牙语

http://website.com/es

文件夹结构

|data
  |---home.json
|locales
  |---en.yml
  |---es.yml
|source
  |---index.html.erb
  |---index.es.html.erb
  |---_slide.erb
|---config.rb

<强> config.rb

configure :build do
  activate :i18n, :path => "/:locale/"
  activate :directory_indexes
  ...
end

<强> slide.erb
使用 t 作为 I18n.t 的快捷方式,我通过数据动态引用翻译后的值。

<%= link_to t([data.link.text]),
    data.link.href,
    :id => data.link.id,
    :class => 'btn btn-primary btn-lg btn-dark'
%>

<强> home.json
text ”的值与.yml文件中的键相关联。

{
  "slides": [
    {
      "text": "slides.learnMore",
      ...
    },
    ...
  ]
}

<强> en.yml

en:
  slides:
    learnMore: "LEARN MORE"
    ...

<强> es.yml

es:
  slides:
    learnMore: "APRENDE MÁS"
    ...

答案 3 :(得分:0)

将需要按语言复制的所有 .erb.html 移动到文件夹:/source/localizable,如文档中所述:

您可以使用修饰符更改此文件夹名称:templates_dir:

# Look in `source/language_specific` instead
activate :i18n, :templates_dir => "language_specific"