|
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 |