Lines 28-33
use List::MoreUtils qw( any );
Link Here
|
28 |
use C4::Context; |
28 |
use C4::Context; |
29 |
use Koha::Caches; |
29 |
use Koha::Caches; |
30 |
use Koha::Cache::Memory::Lite; |
30 |
use Koha::Cache::Memory::Lite; |
|
|
31 |
use Koha::Language; |
31 |
|
32 |
|
32 |
our (@ISA, @EXPORT_OK); |
33 |
our (@ISA, @EXPORT_OK); |
33 |
BEGIN { |
34 |
BEGIN { |
Lines 111-122
Returns a reference to an array of hashes:
Link Here
|
111 |
=cut |
112 |
=cut |
112 |
|
113 |
|
113 |
sub getTranslatedLanguages { |
114 |
sub getTranslatedLanguages { |
114 |
my ($interface, $theme, $current_language, $which) = @_; |
115 |
my ($interface, $theme, $current_language) = @_; |
115 |
my @languages; |
116 |
my @languages; |
116 |
my @enabled_languages = |
117 |
|
117 |
( $interface && $interface eq 'intranet' ) |
118 |
my @enabled_languages; |
118 |
? split ",", C4::Context->preference('StaffInterfaceLanguages') |
119 |
if ($interface) { |
119 |
: split ",", C4::Context->preference('OPACLanguages'); |
120 |
if ($interface eq 'intranet') { |
|
|
121 |
@enabled_languages = split ",", C4::Context->preference('StaffInterfaceLanguages'); |
122 |
} elsif ($interface eq 'opac') { |
123 |
@enabled_languages = split ",", C4::Context->preference('OPACLanguages'); |
124 |
} |
125 |
} |
120 |
|
126 |
|
121 |
my $cache = Koha::Caches->get_instance; |
127 |
my $cache = Koha::Caches->get_instance; |
122 |
my $cache_key = "languages_${interface}_${theme}"; |
128 |
my $cache_key = "languages_${interface}_${theme}"; |
Lines 640-647
sub accept_language {
Link Here
|
640 |
|
646 |
|
641 |
=head2 getlanguage |
647 |
=head2 getlanguage |
642 |
|
648 |
|
643 |
Select a language based on the URL parameter 'language', a cookie, |
649 |
Select a language based on: |
644 |
syspref available languages & browser |
650 |
|
|
|
651 |
=over |
652 |
|
653 |
=item * the URL parameter 'language' (staff and opac interfaces only), |
654 |
|
655 |
=item * the 'KohaOpacLanguage' cookie (staff and opac interfaces only), |
656 |
|
657 |
=item * the language set by C<Koha::Language::set_requested_language> |
658 |
(interfaces other than staff and opac only). The REST API sets this to the |
659 |
value of 'KohaOpacLanguage' cookie, |
660 |
|
661 |
=item * syspref StaffInterfaceLanguages (staff only) |
662 |
|
663 |
=item * syspref OpacLanguages (opac only), |
664 |
|
665 |
=item * HTTP header Accept-Language (more precisely, environment variable |
666 |
HTTP_ACCEPT_LANGUAGE) |
667 |
|
668 |
=back |
645 |
|
669 |
|
646 |
=cut |
670 |
=cut |
647 |
|
671 |
|
Lines 655-683
sub getlanguage {
Link Here
|
655 |
return $cached if $cached; |
679 |
return $cached if $cached; |
656 |
} |
680 |
} |
657 |
|
681 |
|
658 |
$cgi //= CGI->new; |
|
|
659 |
my $interface = C4::Context->interface; |
682 |
my $interface = C4::Context->interface; |
660 |
my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' ); |
683 |
my $theme = ''; |
661 |
my $language; |
684 |
my $language; |
662 |
|
|
|
663 |
my $preference_to_check = |
664 |
$interface eq 'intranet' ? 'StaffInterfaceLanguages' : 'OPACLanguages'; |
665 |
# Get the available/valid languages list |
666 |
my @languages; |
685 |
my @languages; |
667 |
my $preference_value = C4::Context->preference($preference_to_check); |
|
|
668 |
if ($preference_value) { |
669 |
@languages = split /,/, $preference_value; |
670 |
} |
671 |
|
686 |
|
672 |
# Chose language from the URL |
687 |
if ($interface eq 'opac' || $interface eq 'intranet') { |
673 |
my $cgi_param_language = $cgi->param( 'language' ); |
688 |
$cgi //= CGI->new; |
674 |
if ( defined $cgi_param_language && any { $_ eq $cgi_param_language } @languages) { |
689 |
$theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' ); |
675 |
$language = $cgi_param_language; |
690 |
|
676 |
} |
691 |
my $preference_to_check = |
|
|
692 |
$interface eq 'intranet' ? 'StaffInterfaceLanguages' : 'OPACLanguages'; |
693 |
# Get the available/valid languages list |
694 |
my $preference_value = C4::Context->preference($preference_to_check); |
695 |
if ($preference_value) { |
696 |
@languages = split /,/, $preference_value; |
697 |
} |
698 |
|
699 |
# Chose language from the URL |
700 |
my $cgi_param_language = $cgi->param( 'language' ); |
701 |
if ( defined $cgi_param_language && any { $_ eq $cgi_param_language } @languages) { |
702 |
$language = $cgi_param_language; |
703 |
} |
677 |
|
704 |
|
678 |
# cookie |
705 |
# cookie |
679 |
if (not $language and my $cgi_cookie_language = $cgi->cookie('KohaOpacLanguage') ) { |
706 |
if (not $language and my $cgi_cookie_language = $cgi->cookie('KohaOpacLanguage') ) { |
680 |
( $language = $cgi_cookie_language ) =~ s/[^a-zA-Z_-]*//; # sanitize cookie |
707 |
( $language = $cgi_cookie_language ) =~ s/[^a-zA-Z_-]*//; # sanitize cookie |
|
|
708 |
} |
709 |
} else { |
710 |
@languages = map { $_->{rfc4646_subtag} } @{ getTranslatedLanguages($interface, $theme) }; |
711 |
$language = Koha::Language->get_requested_language(); |
681 |
} |
712 |
} |
682 |
|
713 |
|
683 |
# HTTP_ACCEPT_LANGUAGE |
714 |
# HTTP_ACCEPT_LANGUAGE |