http-accept-language-1.0.2/0000755000175000017500000000000012041615373014477 5ustar anishanishhttp-accept-language-1.0.2/.gitignore0000644000175000017500000000005012041615373016462 0ustar anishanish*.gem .bundle Gemfile.lock pkg/* .rvmrc http-accept-language-1.0.2/rails/0000755000175000017500000000000012041615373015611 5ustar anishanishhttp-accept-language-1.0.2/rails/init.rb0000644000175000017500000000003712041615373017101 0ustar anishanishrequire "http_accept_language" http-accept-language-1.0.2/Rakefile0000644000175000017500000000112412041615373016142 0ustar anishanishrequire "bundler/gem_tasks" require 'rake/testtask' desc 'Test the http_accept_language plugin.' Rake::TestTask.new(:test) do |t| t.libs << 'lib' t.pattern = 'test/**/*_test.rb' t.verbose = true end desc 'Default: run unit tests.' task :default => :test require 'rake/rdoctask' desc 'Generate documentation for the http_accept_language plugin.' Rake::RDocTask.new(:rdoc) do |rdoc| rdoc.rdoc_dir = 'rdoc' rdoc.title = 'HttpAcceptLanguage' rdoc.options << '--line-numbers' << '--inline-source' rdoc.rdoc_files.include('README.rdoc') rdoc.rdoc_files.include('lib/**/*.rb') end http-accept-language-1.0.2/metadata.yml0000644000175000017500000000244112041615373017003 0ustar anishanish--- !ruby/object:Gem::Specification name: http_accept_language version: !ruby/object:Gem::Version version: 1.0.2 prerelease: platform: ruby authors: - iain autorequire: bindir: bin cert_chain: [] date: 2011-09-11 00:00:00.000000000Z dependencies: [] description: Find out which locale the user preferes by reading the languages they specified in their browser email: - iain@iain.nl executables: [] extensions: [] extra_rdoc_files: [] files: - .gitignore - Gemfile - README.rdoc - Rakefile - http_accept_language.gemspec - lib/http_accept_language.rb - rails/init.rb - test/http_accept_language_test.rb homepage: https://github.com/iain/http_accept_language licenses: [] post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement none: false requirements: - - ! '>=' - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement none: false requirements: - - ! '>=' - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: http_accept_language rubygems_version: 1.8.6 signing_key: specification_version: 3 summary: Find out which locale the user preferes by reading the languages they specified in their browser test_files: - test/http_accept_language_test.rb http-accept-language-1.0.2/test/0000755000175000017500000000000012041615373015456 5ustar anishanishhttp-accept-language-1.0.2/test/http_accept_language_test.rb0000644000175000017500000000271312041615373023206 0ustar anishanish$:.unshift(File.dirname(__FILE__) + '/../lib') require 'http_accept_language' require 'test/unit' class MockedCgiRequest include HttpAcceptLanguage def env @env ||= {'HTTP_ACCEPT_LANGUAGE' => 'en-us,en-gb;q=0.8,en;q=0.6'} end end class HttpAcceptLanguageTest < Test::Unit::TestCase def test_should_return_empty_array request.env['HTTP_ACCEPT_LANGUAGE'] = nil assert_equal [], request.user_preferred_languages end def test_should_properly_split assert_equal %w{en-US en-GB en}, request.user_preferred_languages end def test_should_ignore_jambled_header request.env['HTTP_ACCEPT_LANGUAGE'] = 'odkhjf89fioma098jq .,.,' assert_equal [], request.user_preferred_languages end def test_should_find_first_available_language assert_equal 'en-GB', request.preferred_language_from(%w{en en-GB}) end def test_should_find_first_compatible_language assert_equal 'en-hk', request.compatible_language_from(%w{en-hk}) assert_equal 'en', request.compatible_language_from(%w{en}) end def test_should_find_first_compatible_from_user_preferred request.env['HTTP_ACCEPT_LANGUAGE'] = 'en-us,de-de' assert_equal 'en', request.compatible_language_from(%w{de en}) end def test_should_accept_symbols_as_available_languages request.env['HTTP_ACCEPT_LANGUAGE'] = 'en-us' assert_equal :"en-HK", request.compatible_language_from([:"en-HK"]) end private def request @request ||= MockedCgiRequest.new end end http-accept-language-1.0.2/http_accept_language.gemspec0000644000175000017500000000140512041615373022205 0ustar anishanish# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "http_accept_language" s.version = '1.0.2' s.authors = ["iain"] s.email = ["iain@iain.nl"] s.homepage = "https://github.com/iain/http_accept_language" s.summary = %q{Find out which locale the user preferes by reading the languages they specified in their browser} s.description = %q{Find out which locale the user preferes by reading the languages they specified in their browser} s.rubyforge_project = "http_accept_language" s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } s.require_paths = ["lib"] end http-accept-language-1.0.2/Gemfile0000644000175000017500000000015012041615373015766 0ustar anishanishsource "http://rubygems.org" # Specify your gem's dependencies in http_accept_language.gemspec gemspec http-accept-language-1.0.2/lib/0000755000175000017500000000000012041615373015245 5ustar anishanishhttp-accept-language-1.0.2/lib/http_accept_language.rb0000644000175000017500000000372412041615373021741 0ustar anishanishmodule HttpAcceptLanguage # Returns a sorted array based on user preference in HTTP_ACCEPT_LANGUAGE. # Browsers send this HTTP header, so don't think this is holy. # # Example: # # request.user_preferred_languages # # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ] # def user_preferred_languages @user_preferred_languages ||= env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l| l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/ l.split(';q=') end.sort do |x,y| raise "Not correctly formatted" unless x.first =~ /^[a-z\-]+$/i y.last.to_f <=> x.last.to_f end.collect do |l| l.first.downcase.gsub(/-[a-z]+$/i) { |x| x.upcase } end rescue # Just rescue anything if the browser messed up badly. [] end # Sets the user languages preference, overiding the browser # def user_preferred_languages=(languages) @user_preferred_languages = languages end # Finds the locale specifically requested by the browser. # # Example: # # request.preferred_language_from I18n.available_locales # # => 'nl' # def preferred_language_from(array) (user_preferred_languages & array.collect { |i| i.to_s }).first end # Returns the first of the user_preferred_languages that is compatible # with the available locales. Ignores region. # # Example: # # request.compatible_language_from I18n.available_locales # def compatible_language_from(available_languages) user_preferred_languages.map do |x| #en-US available_languages.find do |y| # en y = y.to_s x == y || x.split('-', 2).first == y.split('-', 2).first end end.compact.first end end if defined?(ActionDispatch::Request) ActionDispatch::Request.send :include, HttpAcceptLanguage elsif defined?(ActionDispatch::AbstractRequest) ActionDispatch::AbstractRequest.send :include, HttpAcceptLanguage elsif defined?(ActionDispatch::CgiRequest) ActionDispatch::CgiRequest.send :include, HttpAcceptLanguage end http-accept-language-1.0.2/README.rdoc0000644000175000017500000000226512041615373016312 0ustar anishanish= HttpAcceptLanguage A small effort in making a plugin which helps you detect the users preferred language, as sent by the HTTP header. == Features * Splits the http-header into languages specified by the user * Returns empty array if header is illformed. * Corrects case to xx-XX * Sorted by priority given, as much as possible. * Gives you the most important language * Gives compatible languages See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html == Example class SomeController < ApplicationController def some_action request.user_preferred_languages # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ] available = %w{en en-US nl-BE} request.preferred_language_from(available) # => 'nl-BE' request.user_preferred_languages # => [ 'en-GB'] available = %w{en-US} request.compatible_language_from(available) # => 'en-US' end end == Installation Install the gem +http_accept_language+, require it in your Rails app. == Changelog * 2011-09-11: 1.0.2 release, still works appearantly * 2010-01-05: Gem release * 2009-03-12: Rails 2.3 compatible Copyright (c) 2008-2011 Iain Hecker, released under the MIT license