Страницы тегов блога посредника не соответствуют локали - PullRequest
0 голосов
/ 07 июня 2019

В настоящее время сталкивается с проблемой, когда на страницах тегов блога нет локали, включенной в URL (таким образом, игнорируется любой выбранный язык). Я думаю, что это может быть связано с i18n, но не уверен.

Например, я хочу, чтобы страница тегов отображалась как {lang} / blog / tags / {tag} .html, но, похоже, переменная {lang} игнорируется.

В результате при нажатии на тег (например, Python) он показывает каждый экземпляр этой статьи (версии на японском, английском и немецком языках) на одной странице. Очевидно, я хочу, чтобы он показывал только статью, связанную с текущей локалью, но поскольку язык игнорируется, Middleman просто захватывает все экземпляры статьи и отображает их.

Я попытался создать функцию с помощью скрипта активации блога, но это вызвало другие проблемы, поэтому я отбросил эту идею. Даже следование документам в Middleman не помогло в моем случае, и я искал похожие проблемы на форумах Middleman и в Google.

Config.rb: (несвязанный код вычеркнут)

# Page options, layouts, aliases and proxies
activate :syntax

activate :i18n do |i18n|
  i18n.path = "/:locale/"
  i18n.langs = [:en, :de, :ja]
  i18n.lang_map = { :en => :en, :de => :de, :ja => :ja }
  i18n.templates_dir = "content"
  i18n.mount_at_root = false
end

page "/feed.xml", layout: false
page "/sitemap.xml", layout: false

# With alternative layout

page "/*/error/*.html", :layout => :layout_simple
page "/*/contact/*.html", :layout => :layout_simple
page "/*/imprint/*.html", :layout => :layout_simple
page "/*/disclaimer/*.html", :layout => :layout_simple
page "/*/company/jobs/*.html", :layout => :layout_simple


page "/*/blog/index.html", :layout => :layout_blog_list

page "/*/blog/**/*.html", :layout => :layout_blog_article

page "/index.*", :layout => false
page "/*/blog/feed.xml", :layout => false, :directory_index => false
page "/*/contact/send.php", :layout => false, :directory_index => false

page "/*/services/*.html", :layout => :layout_page
page "/*/products/*.html", :layout => :layout_page
page "/*/projects/*.html", :layout => :layout_page

page "/**/*.html", :layout => :layout_page



###
# Blog
###

activate :blog do |blog|
  # This will add a prefix to all links, template references and source paths
  blog.prefix = "{lang}/blog/"
  blog.default_extension = "md"

  blog.permalink = "{year}/{title}"
  blog.sources = "{year}/{year}-{month}-{day}-{title}"

  blog.summary_generator = nil
  # blog.summary_separator = /(READMORE)/
  blog.summary_separator = /READMORE/
  blog.summary_length = 250

  blog.publish_future_dated = false
  #tags
  blog.taglink = "/tags/{tag}.html"

  blog.tag_template = "content/blog/layout_tag.html"

  # Enable pagination
  blog.paginate = true
  blog.per_page = 6
  blog.page_link = "p{num}"
end

helpers do
  # Returns a localized path with leading language code
  def local_path(path, options={})
    lang = options[:language] ? options[:language] : I18n.locale.to_s
    "/#{lang}/#{path}"
  end

  # Returns all pages under a certain directory.
  def sub_pages(dir, options={})
    lang = options[:language] ? options[:language] : I18n.locale.to_s
    sitemap.resources.select do |resource|
      resource.url.start_with?("/#{lang}/#{dir}/")
    end
  end

  # Returns certain page (ends with directory).
  def find_pages(dir, options={})
    lang = options[:language] ? options[:language] : I18n.locale.to_s
    sitemap.resources.select do |resource|
      resource.url.end_with?("/#{lang}/#{dir}/")
    end
  end
end

configure :development do
  activate :livereload do |reload|
    reload.no_swf = true
  end
end

configure :production do
  activate :minify_html
  activate :asset_hash, ignore: [/\.jpg\Z/, /\.png\Z/, /\.svg\Z/]
end

# MUST be after :18n and :blog activation
activate :directory_indexes

activate :external_pipeline,
  name: :webpack,
  command: build? ? 'npm run build' : 'npm run watch',
  source: ".tmp/dist",
  latency: 1

Если щелкнуть тег внутри статьи (например, Python или Tutorial), он должен вернуть статью, связанную с выбранным в данный момент языком. Но в действительности Мидлман игнорирует язык и возвращает каждый экземпляр статьи, поэтому пользователь видит статьи на английском, немецком и японском языках.

...