will_paginateの日本語化

Pocket

initializersの下に以下の内容の適当なファイルを入れておきます。


# will_paginateで出力されるページネーションの日本語化
WillPaginate::ViewHelpers.pagination_options = {
  :class          => 'pagination',
  :previous_label => '«前へ',
  :next_label     => '次へ»',
  :inner_window   => 4, # links around the current page
  :outer_window   => 1, # links around beginning and end
  :separator      => ' ', # single space is friendly to spiders and non-graphic browsers
  :param_name     => :page,
  :params         => nil,
  :renderer       => 'WillPaginate::ViewHelpers::LinkRenderer',
  :page_links     => true,
  :container      => true
}

# エントリー情報を日本語化
module WillPaginate::ViewHelpers::Base
  def page_entries_info(collection, options = {})
    entry_name = options[:entry_name] || (collection.empty?? 'entry' :
                 collection.first.class.name.underscore.gsub('_', ' '))

    plural_name = if options[:plural_name]
      options[:plural_name]
    elsif entry_name == 'entry'
      plural_name = 'entries'
    elsif entry_name.respond_to? :pluralize
      plural_name = entry_name.pluralize
    else
      entry_name + 's'
    end

    unless options[:html] == false
      b  = '<b>'
      eb = '</b>'
      sp = ' '
    else
      b  = eb = ''
      sp = ' '
    end

    if collection.total_pages < 2
      case collection.size
      when 0; "#{plural_name}は見つかりませんでした。"
      when 1; "#{b}1#{eb} 件の#{entry_name}が見つかりました。"
      else;   "#{b}#{collection.size}#{eb} 件の#{plural_name}を表示しています。"
      end
    else
      %{#{b}%d#{eb} 件中 #{b}%d#{sp}-#{sp}%d#{eb} 番目までの#{plural_name}を表示しています。} % [
        collection.total_entries,
        collection.offset + 1,
        collection.offset + collection.length,
      ]
    end
  end
end


ビューにはこんな感じで書きます。

<%= page_entries_info @items, :entry_name => '1つだけ見つかったときのエントリ名', :plural_name => '複数見つかったときのエントリ名' %>
<%= will_paginate @items %>

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください