@@ -, +, @@ - Clear the cookies of your browser - Choose a language and browse - Change the language and browse --- C4/Languages.pm | 29 +++++++++++++++++++---------- C4/Templates.pm | 11 +++++------ Koha/Cache.pm | 5 +++++ 3 files changed, 29 insertions(+), 16 deletions(-) --- a/C4/Languages.pm +++ a/C4/Languages.pm @@ -569,6 +569,13 @@ sub accept_language { sub getlanguage { my ($cgi) = @_; + my $cache = Koha::Cache->get_instance(); + my $cache_key = "getlanguage"; + if ( not $cgi or not $cgi->param('language') ) { + my $cached = $cache->get_from_cache($cache_key); + return $cached if $cached; + } + $cgi //= new CGI; my $interface = C4::Context->interface; my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' ); @@ -584,14 +591,14 @@ sub getlanguage { } # Chose language from the URL - $language = $cgi->param( 'language' ); - if ( defined $language && any { $_ eq $language } @languages) { - return $language; + my $cgi_param_language = $cgi->param( 'language' ); + if ( defined $cgi_param_language && any { $_ eq $cgi_param_language } @languages) { + $language = $cgi_param_language; } # cookie - if ($language = $cgi->cookie('KohaOpacLanguage') ) { - $language =~ s/[^a-zA-Z_-]*//; # sanitize cookie + if (not $language and my $cgi_cookie_language = $cgi->cookie('KohaOpacLanguage') ) { + ( $language = $cgi_cookie_language ) =~ s/[^a-zA-Z_-]*//; # sanitize cookie } # HTTP_ACCEPT_LANGUAGE @@ -601,16 +608,18 @@ sub getlanguage { } # Ignore a lang not selected in sysprefs - if ( $language && any { $_ eq $language } @languages ) { - return $language; + if ( $language && not any { $_ eq $language } @languages ) { + $language = undef; } # Pick the first selected syspref language - $language = shift @languages; - return $language if $language; + $language = shift @languages unless $language; # Fall back to English if necessary - return 'en'; + $language ||= 'en'; + + $cache->set_in_cache( $cache_key, $language ); + return $language; } 1; --- a/C4/Templates.pm +++ a/C4/Templates.pm @@ -273,12 +273,11 @@ sub themelanguage { sub setlanguagecookie { my ( $query, $language, $uri ) = @_; - my $cookie = $query->cookie( - -name => 'KohaOpacLanguage', - -value => $language, - -HttpOnly => 1, - -expires => '+3y' - ); + my $cookie = getlanguagecookie( $query, $language ); + + # We do not want to set getlanguage in cache, some additional checks are + # done in C4::Languages::getlanguage + Koha::Cache->get_instance()->clear_from_cache( 'getlanguage' ); print $query->redirect( -uri => $uri, -cookie => $cookie --- a/Koha/Cache.pm +++ a/Koha/Cache.pm @@ -287,6 +287,11 @@ sub set_in_cache { } } +sub set_in_L1_cache_only { + my ( $self, $key, $value ) = @_; + $L1_cache{ $key } = $value; +} + =head2 get_from_cache my $value = $cache->get_from_cache($key, [ $options ]); --