use CGI;
use List::MoreUtils qw( any );
use C4::Context;
+use Koha::Cache::Memory::Lite;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
-eval {
- if (C4::Context->ismemcached) {
- require Memoize::Memcached;
- import Memoize::Memcached qw(memoize_memcached);
-
- memoize_memcached('getTranslatedLanguages', memcached => C4::Context->memcached);
- memoize_memcached('getFrameworkLanguages' , memcached => C4::Context->memcached);
- memoize_memcached('getAllLanguages', memcached => C4::Context->memcached);
- }
-};
-
BEGIN {
require Exporter;
@ISA = qw(Exporter);
push ( @{ $language_groups->{$language_subtags_hashref->{language}} }, $language_subtags_hashref );
}
# $key is a language subtag like 'en'
- while( my ($key, $value) = each %$language_groups) {
+ my %idx = map { $enabled_languages->[$_] => $_ } reverse 0 .. @$enabled_languages-1;
+ my @ordered_keys = sort {
+ my $aa = $language_groups->{$a}->[0]->{rfc4646_subtag};
+ my $bb = $language_groups->{$b}->[0]->{rfc4646_subtag};
+ ( exists $idx{$aa} and exists $idx{$bb} and ( $idx{$aa} cmp $idx{$bb} ) )
+ || ( exists $idx{$aa} and exists $idx{$bb} )
+ || exists $idx{$bb}
+ } keys %$language_groups;
+
+ for my $key ( @ordered_keys ) {
+ my $value = $language_groups->{$key};
# is this language group enabled? are any of the languages within it enabled?
my $enabled;
for my $enabled_language (@enabled_languages) {
sub getlanguage {
my ($cgi) = @_;
+ my $memory_cache = Koha::Cache::Memory::Lite->get_instance();
+ my $cache_key = "getlanguage";
+ unless ( $cgi and $cgi->param('language') ) {
+ my $cached = $memory_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' );
}
# 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
}
# 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';
+
+ $memory_cache->set_in_cache( $cache_key, $language );
+ return $language;
}
1;