Bug 7282 - invalid language selection
- ensure that without cookie, language selection is based on browser preferences - refactor function to obtain langugage for stem in search (opac + intranet) Signed-off-by: Frédéric Demians <f.demians@tamil.fr> To reproduce the bug: - Activate en and fr-FR for OPAC - Clear your browser cookies - Select your language preference in your browser: fr, fr-fr, en - Load OPAC main page - OPAC is displayed in English, rather than French as asked by browser preferences Apply the patch and test: - Clear your browser cookies - Load OPAC main page - Pages are displayed in French Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
This commit is contained in:
parent
8a87f15605
commit
0ad7e76cb7
3 changed files with 33 additions and 24 deletions
|
@ -273,21 +273,10 @@ sub themelanguage {
|
|||
($query) or warn "no query in themelanguage";
|
||||
|
||||
# Select a language based on cookie, syspref available languages & browser
|
||||
my $is_intranet = $interface eq 'intranet';
|
||||
my @languages = split(",", C4::Context->preference(
|
||||
$is_intranet ? 'language' : 'opaclanguages'));
|
||||
my $lang;
|
||||
$lang = getlanguagecookie($query);
|
||||
unless ($lang) {
|
||||
my $http_accept_language = $ENV{ HTTP_ACCEPT_LANGUAGE };
|
||||
$lang = accept_language( $http_accept_language,
|
||||
getTranslatedLanguages($interface,'prog') );
|
||||
}
|
||||
# Ignore a lang not selected in sysprefs
|
||||
$lang = undef unless first { $_ eq $lang } @languages;
|
||||
# Fall back to English if necessary
|
||||
$lang = 'en' unless $lang;
|
||||
my $lang = getlanguage($query, $interface);
|
||||
|
||||
# Select theme
|
||||
my $is_intranet = $interface eq 'intranet';
|
||||
my @themes = split(" ", C4::Context->preference(
|
||||
$is_intranet ? "template" : "opacthemes" ));
|
||||
push @themes, 'prog';
|
||||
|
@ -317,16 +306,36 @@ sub setlanguagecookie {
|
|||
);
|
||||
}
|
||||
|
||||
sub getlanguagecookie {
|
||||
my ($query) = @_;
|
||||
|
||||
sub getlanguage {
|
||||
my ($query, $interface) = @_;
|
||||
|
||||
# Select a language based on cookie, syspref available languages & browser
|
||||
my $is_intranet = $interface eq 'intranet';
|
||||
my @languages = split(",", C4::Context->preference(
|
||||
$is_intranet ? 'language' : 'opaclanguages'));
|
||||
|
||||
my $lang;
|
||||
if ($query->cookie('KohaOpacLanguage')){
|
||||
$lang = $query->cookie('KohaOpacLanguage') ;
|
||||
}else{
|
||||
$lang = $ENV{HTTP_ACCEPT_LANGUAGE};
|
||||
|
||||
|
||||
# cookie
|
||||
if ( $query->cookie('KohaOpacLanguage') ) {
|
||||
$lang = $query->cookie('KohaOpacLanguage');
|
||||
$lang =~ s/[^a-zA-Z_-]*//; # sanitize cookie
|
||||
}
|
||||
$lang =~ s/[^a-zA-Z_-]*//; #sanitzie
|
||||
|
||||
# HTTP_ACCEPT_LANGUAGE
|
||||
unless ($lang) {
|
||||
my $http_accept_language = $ENV{ HTTP_ACCEPT_LANGUAGE };
|
||||
$lang = accept_language( $http_accept_language,
|
||||
getTranslatedLanguages($interface,'prog') );
|
||||
}
|
||||
|
||||
# Ignore a lang not selected in sysprefs
|
||||
$lang = undef unless first { $_ eq $lang } @languages;
|
||||
|
||||
# Fall back to English if necessary
|
||||
$lang = 'en' unless $lang;
|
||||
|
||||
return $lang;
|
||||
}
|
||||
|
||||
|
|
|
@ -471,7 +471,7 @@ my ( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit
|
|||
my @results;
|
||||
|
||||
## I. BUILD THE QUERY
|
||||
my $lang = C4::Templates::getlanguagecookie($cgi);
|
||||
my $lang = C4::Templates::getlanguage($cgi, 'intranet');
|
||||
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$stopwords_removed,$query_type) = buildQuery(\@operators,\@operands,\@indexes,\@limits,\@sort_by,$scan,$lang);
|
||||
|
||||
## parse the query_cgi string and put it into a form suitable for <input>s
|
||||
|
|
|
@ -388,7 +388,7 @@ my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_
|
|||
my @results;
|
||||
|
||||
## I. BUILD THE QUERY
|
||||
my $lang = C4::Templates::getlanguagecookie($cgi);
|
||||
my $lang = C4::Templates::getlanguage($cgi, 'opac');
|
||||
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$stopwords_removed,$query_type) = buildQuery(\@operators,\@operands,\@indexes,\@limits,\@sort_by, 0, $lang);
|
||||
|
||||
sub _input_cgi_parse ($) {
|
||||
|
|
Loading…
Reference in a new issue