NAME
HTTP::ClientDetect::Language - Lookup the client's preferred language
VERSION
Version 0.03
SYNOPSIS
use HTTP::ClientDetect::Language;
my $lang_detect = HTTP::ClientDetect::Language->new(server_default => "en_US");
# inside a Dancer route
get '/detect' => sub {
my $req = request;
my $lang = $lang_detect->language($req);
}
ACCESSORS
server_default
The server_default
should be set in the constructor and defaults to en_US
. This will be always returned if the lookup fails
available_languages
Accessor to an arrayref of languages available on the server side. Please use the short version (de
, not de_DE
), otherwise the check will be too restrictive.
SUBROUTINES/METHODS
language($request_obj)
Return the preferred language of the request. The request object should an object which has the methods accept_language
or header
From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html:
The Accept-Language request-header field is similar to Accept, but
restricts the set of natural languages that are preferred as a
response to the request. Language tags are defined in section 3.10.
Accept-Language = "Accept-Language" ":"
1#( language-range [ ";" "q" "=" qvalue ] )
language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
Each language-range MAY be given an associated quality value which
represents an estimate of the user's preference for the languages
specified by that range. The quality value defaults to "q=1". For
example,
Accept-Language: da, en-gb;q=0.8, en;q=0.7
would mean: "I prefer Danish, but will accept British English and
other types of English." A language-range matches a language-tag if
it exactly equals the tag, or if it exactly equals a prefix of the
tag such that the first tag character following the prefix is "-".
The special range "*", if present in the Accept-Language field,
matches every tag not matched by any other range present in the
Accept-Language field.
Note: This use of a prefix matching rule does not imply that
language tags are assigned to languages in such a way that it is
always true that if a user understands a language with a certain
tag, then this user will also understand all languages with tags
for which this tag is a prefix. The prefix rule simply allows the
use of prefix tags if this is the case.
The language quality factor assigned to a language-tag by the
Accept-Language field is the quality value of the longest language-
range in the field that matches the language-tag. If no language-
range in the field matches the tag, the language quality factor
assigned is 0. If no Accept-Language header is present in the
request, the server
SHOULD assume that all languages are equally acceptable. If an
Accept-Language header is present, then all languages which are
assigned a quality factor greater than 0 are acceptable.
It might be contrary to the privacy expectations of the user to send
an Accept-Language header with the complete linguistic preferences
of the user in every request
browser_languages($request)
This method returns the parsed and sorted list of language preferences set in the browser, when the first element has higher priority.
language_short($request_obj)
Return the short language version (i.e.), the language name without the country part.
check_language_name
Returns a normalized version of the language name, lower case for the language, upper case for the country. Undef it was not possible to validate it.
AUTHOR
Marco Pessotto, <melmothx at gmail.com>
BUGS
Please report any bugs or feature requests to bug-interchange6-plugin-autodetect at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=HTTP-ClientDetect. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc HTTP::ClientDetect::Language
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
Copyright 2013 Marco Pessotto.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.