use strict;
use warnings;
-use Carp;
+use Carp qw( carp );
use CGI;
use List::MoreUtils qw( any );
use C4::Context;
+use Koha::Caches;
use Koha::Cache::Memory::Lite;
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
+our (@ISA, @EXPORT_OK);
BEGIN {
require Exporter;
@ISA = qw(Exporter);
- @EXPORT = qw(
- &getFrameworkLanguages
- &getTranslatedLanguages
- &getLanguages
- &getAllLanguages
+ @EXPORT_OK = qw(
+ getFrameworkLanguages
+ getTranslatedLanguages
+ getLanguages
+ getAllLanguages
);
- @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage);
- $DEBUG = 0;
+ push @EXPORT_OK, qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage get_rfc4646_from_iso639);
}
=head1 NAME
my @enabled_languages =
( $interface && $interface eq 'intranet' )
? split ",", C4::Context->preference('language')
- : split ",", C4::Context->preference('opaclanguages');
+ : split ",", C4::Context->preference('OPACLanguages');
+ my $cache = Koha::Caches->get_instance;
+ my $cache_key = "languages_${interface}_${theme}";
if ($interface && $interface eq 'opac' ) {
my $htdocs = C4::Context->config('opachtdocs');
- @languages = _get_opac_language_dirs( $htdocs, $theme );
+ my $cached = $cache->get_from_cache($cache_key);
+ if ( $cached ) {
+ @languages = @{$cached};
+ } else {
+ @languages = _get_opac_language_dirs( $htdocs, $theme );
+ $cache->set_in_cache($cache_key, \@languages );
+ }
}
elsif ($interface && $interface eq 'intranet' ) {
my $htdocs = C4::Context->config('intrahtdocs');
- @languages = _get_intranet_language_dirs( $htdocs, $theme );
+ my $cached = $cache->get_from_cache($cache_key);
+ if ( $cached ) {
+ @languages = @{$cached};
+ } else {
+ @languages = _get_intranet_language_dirs( $htdocs, $theme );
+ $cache->set_in_cache($cache_key, \@languages );
+ }
}
else {
my $htdocs = C4::Context->config('intrahtdocs');
if ($lang) {
$current_language = regex_lang_subtags($lang)->{'language'};
}
- my $sth = $dbh->prepare('SELECT * FROM language_subtag_registry WHERE type=\'language\'');
+ my $sth = $dbh->prepare('SELECT * FROM language_subtag_registry WHERE type=\'language\' ORDER BY description');
$sth->execute();
while (my $language_subtag_registry = $sth->fetchrow_hashref) {
my $desc;
my @languages_loop; # the final reference to an array of hashrefs
my @enabled_languages = @$enabled_languages;
# how many languages are enabled, if one, take note, some contexts won't need to display it
- my %seen_languages; # the language tags we've seen
- my %found_languages;
my $language_groups;
my $track_language_groups;
my $current_language_regex = regex_lang_subtags($current_language);
}
# No primary matches. Secondary? (ie, en-us requested and en supported)
return $secondaryMatch if $secondaryMatch;
- return undef; # else, we got nothing.
+ return; # else, we got nothing.
}
=head2 getlanguage
return $cached if $cached;
}
- $cgi //= new CGI;
+ $cgi //= CGI->new;
my $interface = C4::Context->interface;
my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' );
my $language;
my $preference_to_check =
- $interface eq 'intranet' ? 'language' : 'opaclanguages';
+ $interface eq 'intranet' ? 'language' : 'OPACLanguages';
# Get the available/valid languages list
my @languages;
my $preference_value = C4::Context->preference($preference_to_check);