module FlagIcon # It returns the language name # # @param code -> language locale # @example language_name('el') # => Greek # @return String def language_name(code) FlagIcon::Countries::LANGUAGES[code.to_sym] end # It returns the country name # # @param code -> country iso code # @example country_name('gr') # => Greece # @return String def country_name(code) FlagIcon::Countries::NAMES[code.to_sym] end # It returns the country iso code # # @param code -> language locale # @example language_flag('el') # => gr # @return String def language_flag(code) FlagIcon::Countries::LANGUAGE_FLAGS[code.to_sym] || 'xx' end # It returns an array that can be used in the select tag # # @example select_language # @return Array def select_language available_languages.map { |lang| [language_name(lang), lang] } end # It returns an hash of arrays that can be used in the select tag # # @param popular -> title of the popular group # @param available -> title of the available group # @example grouped_select_language(popular: 'Popular', available: 'Available') # @return Hash def grouped_select_language(popular: 'Popular', available: 'Available') { popular => popular_languages, available => available_languages.map { |lang| [language_name(lang), lang] } } end # It returns HTML element with country icon and title # # @param code -> language locale # @example language_icon('el') # @return String def language_icon(code, title: "Audio language - #{language_name(code)}") "" end # It returns HTML element with country icon and title # # @param code -> country iso code # @example country_icon('gr') # @return String def country_icon(code, title: "Available in #{country_name(code)}") "" end # Define in your application_helper to override the popular languages # Default: [['English', :en], ['Spanish', :es]] # # @example # def popular_languages # [['English', :en], ['Spanish', :es]] # end # @return Array def popular_languages [['English', :en], ['Spanish', :es]] end # Define in your application_helper to override the available languages # @example [['English', :en], ['Spanish', :es]] #default # @example # def available_languages # Language.all.order(:language_locale).pluck(:language_locale) # end # @return Array def available_languages @languages ||= FlagIcon::Countries::LANGUAGES.keys end # exposed methods for testing module_function :language_name module_function :country_name module_function :language_flag module_function :select_language module_function :grouped_select_language module_function :language_icon module_function :country_icon module_function :popular_languages module_function :available_languages end