Bugzilla – Attachment 5808 Details for
Bug 6755
Problems with switching languages
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Second missing patch
0002-3.4.x-Bug-6755-Web-browser-default-lang-syspref-sele.patch (text/plain), 9.67 KB, created by
Frédéric Demians
on 2011-10-08 22:00:12 UTC
(
hide
)
Description:
Second missing patch
Filename:
MIME Type:
Creator:
Frédéric Demians
Created:
2011-10-08 22:00:12 UTC
Size:
9.67 KB
patch
obsolete
>From 1fe62d34bd820080b30bab26963da5523fef9c10 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?= <f.demians@tamil.fr> >Date: Fri, 23 Sep 2011 15:06:56 +0200 >Subject: [PATCH 2/2] [3.4.x] Bug 6755 Web browser default lang != syspref > selected langs > >When Web browser default selected language doesn't belong to selected >languages list defined by syspref (language / opaclanguages), web pages >are returned in this language, which is wrong... > >This patch get this behavior: > >- If selected by user language is available (cookie), it is used. >- Otherwise, language is set to default web browser language. >- If this language doesn't belong to languages list (syspref), > English is selected > >Some code cleanup. > >To test properly: don't forget to delete your cookies, and to test what >happens without and with cookie. >--- > C4/Languages.pm | 1 - > C4/Templates.pm | 160 ++++++++++++++++--------------------------------------- > 2 files changed, 46 insertions(+), 115 deletions(-) > >diff --git a/C4/Languages.pm b/C4/Languages.pm >index fd16596..091d3bb 100644 >--- a/C4/Languages.pm >+++ b/C4/Languages.pm >@@ -456,7 +456,6 @@ sub get_bidi { > > sub accept_language { > # referenced http://search.cpan.org/src/CGILMORE/I18N-AcceptLanguage-1.04/lib/I18N/AcceptLanguage.pm >- # FIXME: since this is only used in Output.pm as of Jan 8 2008, maybe it should be IN Output.pm > my ($clientPreferences,$supportedLanguages) = @_; > my @languages = (); > if ($clientPreferences) { >diff --git a/C4/Templates.pm b/C4/Templates.pm >index 812f3dc..c3a9850 100644 >--- a/C4/Templates.pm >+++ b/C4/Templates.pm >@@ -4,6 +4,7 @@ use strict; > use warnings; > use Carp; > use CGI; >+use List::Util qw/first/; > > # Copyright 2009 Chris Cormack and The Koha Dev Team > # >@@ -169,57 +170,6 @@ sub _current_language { > return $_current_language; > } > >-sub themelanguage_lite { >- my ( $htdocs, $tmpl, $interface ) = @_; >- my $query = new CGI; >- >- # Set some defaults for language and theme >- # First, check the user's preferences >- my $lang; >- >- # But, if there's a cookie set, obey it >- $lang = $query->cookie('KohaOpacLanguage') >- if ( defined $query and $query->cookie('KohaOpacLanguage') ); >- >- # Fall back to English >- my @languages; >- if ( $interface eq 'intranet' ) { >- @languages = split ",", C4::Context->preference("language"); >- } >- else { >- @languages = split ",", C4::Context->preference("opaclanguages"); >- } >- if ($lang) { >- @languages = ( $lang, @languages ); >- } >- else { >- $lang = $languages[0] || 'en'; >- } >- my $theme = 'prog'; # in the event of theme failure default to 'prog' -fbcit >- my @themes; >- if ( $interface eq "intranet" ) { >- @themes = split " ", C4::Context->preference("template"); >- } >- else { >- @themes = split " ", C4::Context->preference("opacthemes"); >- } >- >- # searches through the themes and languages. First template it find it returns. >- # Priority is for getting the theme right. >- THEME: >- foreach my $th (@themes) { >- foreach my $la (@languages) { >- if ( -e "$htdocs/$th/$la/modules/$tmpl" ) { >- $theme = $th; >- $lang = $la; >- last THEME; >- } >- last unless $la =~ /[-_]/; >- } >- } >- $_current_language = $lang; # FIXME part of bad hack to paper over bug 4403 >- return ( $theme, $lang ); >-} > > # wrapper method to allow easier transition from HTML template pro to Template Toolkit > sub param { >@@ -250,9 +200,11 @@ my $path = C4::Context->config('intrahtdocs') . "/prog/en/includes/"; > # FIXME - POD > > sub _get_template_file { >- my ( $tmplbase, $interface, $query ) = @_; >- my $htdocs = C4::Context->config( $interface ne 'intranet' ? 'opachtdocs' : 'intrahtdocs' ); >- my ( $theme, $lang ) = themelanguage( $htdocs, $tmplbase, $interface, $query ); >+ my ($tmplbase, $interface, $query) = @_; >+ >+ my $is_intranet = $interface eq 'intranet'; >+ my $htdocs = C4::Context->config($is_intranet ? 'intrahtdocs' : 'opachtdocs'); >+ my ($theme, $lang) = themelanguage($htdocs, $tmplbase, $interface, $query); > my $opacstylesheet = C4::Context->preference('opacstylesheet'); > > # if the template doesn't exist, load the English one as a last resort >@@ -261,24 +213,29 @@ sub _get_template_file { > $lang = 'en'; > $filename = "$htdocs/$theme/$lang/modules/$tmplbase"; > } >- >- return ( $htdocs, $theme, $lang, $filename ); >+ return ($htdocs, $theme, $lang, $filename); > } > >+ > sub gettemplate { > my ( $tmplbase, $interface, $query ) = @_; > ($query) or warn "no query in gettemplate"; > my $path = C4::Context->preference('intranet_includes') || 'includes'; > my $opacstylesheet = C4::Context->preference('opacstylesheet'); > $tmplbase =~ s/\.tmpl$/.tt/; >- my ( $htdocs, $theme, $lang, $filename ) = _get_template_file( $tmplbase, $interface, $query ); >+ my ($htdocs, $theme, $lang, $filename) >+ = _get_template_file($tmplbase, $interface, $query); > my $template = C4::Templates->new($interface, $filename, $tmplbase, $query); >- my $themelang=( $interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' ) >- . "/$theme/$lang"; >+ my $is_intranet = $interface eq 'intranet'; >+ my $themelang = >+ ($is_intranet ? '/intranet-tmpl' : '/opac-tmpl') . >+ "/$theme/$lang"; > $template->param( > themelang => $themelang, >- yuipath => (C4::Context->preference("yuipath") eq "local"?"$themelang/lib/yui":C4::Context->preference("yuipath")), >- interface => ( $interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' ), >+ yuipath => C4::Context->preference("yuipath") eq "local" >+ ? "$themelang/lib/yui" >+ : C4::Context->preference("yuipath"), >+ interface => $is_intranet ? '/intranet-tmpl' : '/opac-tmpl', > theme => $theme, > lang => $lang > ); >@@ -308,67 +265,42 @@ sub gettemplate { > #--------------------------------------------------------------------------------------------------------- > # FIXME - POD > sub themelanguage { >- my ( $htdocs, $tmpl, $interface, $query ) = @_; >+ my ($htdocs, $tmpl, $interface, $query) = @_; > ($query) or warn "no query in themelanguage"; > >- # Set some defaults for language and theme >- # First, check the user's preferences >+ # Select a language based on cookie, syspref available languages & browser >+ my $is_intranet = $interface eq 'intranet'; >+ my @languages = split(",", C4::Context->preference( >+ $is_intranet ? 'language' : 'opaclanguages')); > my $lang; >- my $http_accept_language = $ENV{ HTTP_ACCEPT_LANGUAGE }; >- $lang = accept_language( $http_accept_language, >- getTranslatedLanguages($interface,'prog') ) >- if $http_accept_language; >- # But, if there's a cookie set, obey it >- $lang = $query->cookie('KohaOpacLanguage') if (defined $query and $query->cookie('KohaOpacLanguage')); >- # Fall back to English >- my @languages; >- if ($interface eq 'intranet') { >- @languages = split ",", C4::Context->preference("language"); >- } else { >- @languages = split ",", C4::Context->preference("opaclanguages"); >- } >- if ($lang){ >- @languages=($lang,@languages); >- } else { >- $lang = $languages[0]; >- } >- my $theme = 'prog'; # in the event of theme failure default to 'prog' -fbcit >- my $dbh = C4::Context->dbh; >- my @themes; >- if ( $interface eq "intranet" ) { >- @themes = split " ", C4::Context->preference("template"); >- } >- else { >- # we are in the opac here, what im trying to do is let the individual user >- # set the theme they want to use. >- # and perhaps the them as well. >- #my $lang = $query->cookie('KohaOpacLanguage'); >- @themes = split " ", C4::Context->preference("opacthemes"); >+ $lang = $query->cookie('KohaOpacLanguage') >+ if defined $query and $query->cookie('KohaOpacLanguage'); >+ unless ($lang) { >+ my $http_accept_language = $ENV{ HTTP_ACCEPT_LANGUAGE }; >+ $lang = accept_language( $http_accept_language, >+ getTranslatedLanguages($interface,'prog') ); > } >- >- # searches through the themes and languages. First template it find it returns. >- # Priority is for getting the theme right. >- THEME: >- foreach my $th (@themes) { >- foreach my $la (@languages) { >- #for ( my $pass = 1 ; $pass <= 2 ; $pass += 1 ) { >- # warn "$htdocs/$th/$la/modules/$interface-"."tmpl"; >- #$la =~ s/([-_])/ $1 eq '-'? '_': '-' /eg if $pass == 2; >- if ( -e "$htdocs/$th/$la/modules/$tmpl") { >- #".($interface eq 'intranet'?"modules":"")."/$tmpl" ) { >- $theme = $th; >- $lang = $la; >- last THEME; >- } >- last unless $la =~ /[-_]/; >- #} >+ # Ignore a lang not selected in sysprefs >+ $lang = undef unless first { $_ eq $lang } @languages; >+ # Fall back to English if necessary >+ $lang = 'en' unless $lang; >+ >+ my @themes = split(" ", C4::Context->preference( >+ $is_intranet ? "template" : "opacthemes" )); >+ push @themes, 'prog'; >+ >+ # Try to find first theme for the selected language >+ for my $theme (@themes) { >+ if ( -e "$htdocs/$theme/$lang/modules/$tmpl" ) { >+ $_current_language = $lang; >+ return ($theme, $lang) > } > } >- >- $_current_language = $lang; # FIXME part of bad hack to paper over bug 4403 >- return ( $theme, $lang ); >+ # Otherwise, return prog theme in English 'en' >+ return ('prog', 'en'); > } > >+ > sub setlanguagecookie { > my ( $query, $language, $uri ) = @_; > my $cookie = $query->cookie( >-- >1.7.6.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6755
:
5146
|
5382
|
5385
|
5407
|
5534
|
5538
|
5539
|
5565
|
5597
|
5807
|
5808
|
5809
|
6831