切换到同一页面上的另一种语言?

时间:2018-08-26 10:23:26

标签: middleman middleman-4

我正在尝试为Middleman添加语言转换器,但它未生成正确的链接。我的默认语言是英语。

url_for("/#{current_page.path}", locale: :ja)

我希望与JA中的当前页面等效,这是与JA相同的URL。有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我是一个中间人初学者,但是经过一番谷歌搜索之后,这似乎是一个相当普遍的问题。我试图浏览中间人的资源,以查看是否可以找到解决方案,但是我一直无法做到。我对此有些失望,因为中间人似乎对本地化具有一流的支持。无法轻松地彼此链接似乎是令人惊讶的遗漏。

我要做的是做一个小帮手,可以根据需要交换路径中的本地化。

def change_locale_in_path(path, locale)
  locale_prefix = I18n.locale

  path.gsub(/^#{locale_prefix}/, locale.to_s)
end

但是,这不是一个很好的解决方案。如果您更改i18n :path,则需要对其进行调整,除非您mount_at_root: false,否则它将不起作用。但是,它足够好让我继续前进。我真的很想看到一个更好的解决方案。

我发现了一些GitHub问题,似乎引用了这个问题。 Here's one

答案 1 :(得分:0)

我正在使用以下帮助程序以另一种语言为当前页面生成URL。它最初是基于this gist的,然后对其进行了一些调整,以便无论是否使用mount_at_root都可以使用。

def current_url_for_locale(loc)
  url_regex = /\A\/(?:(#{I18n.available_locales.join('|')})\/)?/
  locale_root = url_for('/', locale: loc)
  current_page.url.gsub(url_regex, '').blank? ?
      locale_root :
      current_page.url.gsub(url_regex, locale_root)
end