Skip to content

Commit

Permalink
Bug 9735 - Let the language be selected through URL parameters
Browse files Browse the repository at this point in the history
Passing language=<valid_language_code> as a parameter in any Koha's URL
can be used to set the desired language.
This patch touches
 - C4::Templates
 - C4::Auth

Adds a new method getlanguagecookie that does exactly that, for use in
get_template_and_user.
Also modifies getlanguage so it checks (a) if there's a 'language'
parameter in the CGI object and (b) checks if its valid and enabled for
the desired interface.

To test:
* Without the patch
  - access any koha page
  - add ?language=code to the end of the URL (change code for a valid language code
    it needs to be installed using perl translate install code, and enabled either for
    the staff or opac interface, depending where are you testing)
  - Nothing happens with the language parameter
* With the patch
  - access any koha page
  - add ?language=code (the same as before) and hit enter
  - the language should be changed to the one you chose
  - if you browse through some links, you will see
    koha 'remembers' the language you passed as a parameter
    (i.e. the language cookie has been updated).

Sponsored-by: Universidad Nacional de Córdoba
Signed-off-by: Brendan <brendan@bywatersolutions.com>
Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>

Comment: Works very well. No errors.
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes all tests and QA script.
More comments on last patch.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
  • Loading branch information
tomascohen authored and gmcharlt committed Oct 4, 2013
1 parent 9469084 commit 3b7c693
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
10 changes: 10 additions & 0 deletions C4/Auth.pm
Expand Up @@ -461,6 +461,16 @@ sub get_template_and_user {

$template->param(OpacPublic => '1') if ($user || C4::Context->preference("OpacPublic"));
}

# Check if we were asked using parameters to force a specific language
if ( defined $in->{'query'}->param('language') ) {
# Extract the language, let C4::Templates::getlanguage choose
# what to do
my $language = C4::Templates::getlanguage($in->{'query'},$in->{'type'});
my $languagecookie = C4::Templates::getlanguagecookie($in->{'query'},$language);
$cookie = [$cookie, $languagecookie];
}

return ( $template, $borrowernumber, $cookie, $flags);
}

Expand Down
34 changes: 33 additions & 1 deletion C4/Templates.pm
Expand Up @@ -316,17 +316,49 @@ sub setlanguagecookie {
);
}

=head2 getlanguagecookie
my $cookie = getlanguagecookie($query,$language);
Returns a cookie object containing the calculated language to be used.
=cut

sub getlanguagecookie {
my ( $query, $language ) = @_;
my $cookie = $query->cookie(
-name => 'KohaOpacLanguage',
-value => $language,
-HttpOnly => 1,
-expires => '+3y'
);

return $cookie;
}

=head2 getlanguage
Select a language based on the URL parameter 'language', a cookie,
syspref available languages & browser
=cut

sub getlanguage {
my ($query, $interface) = @_;

# Select a language based on cookie, syspref available languages & browser
my $preference_to_check =
$interface eq 'intranet' ? 'language' : 'opaclanguages';
# Get the available/valid languages list
my @languages = split /,/, C4::Context->preference($preference_to_check);

my $lang;

# Chose language from the URL
$lang = $query->param( 'language' );
if ( defined $lang && any { $_ eq $lang } @languages) {
return $lang;
}

# cookie
if ( $query->cookie('KohaOpacLanguage') ) {
$lang = $query->cookie('KohaOpacLanguage');
Expand Down

0 comments on commit 3b7c693

Please sign in to comment.