NAME
HTTP::ClientDetect::Language - Lookup the client's preferred language
VERSION
Version 0.03
SYNOPSIS
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.
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
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.