From 81b4e90a0f7d19efb8b01fb872c685af15b87b51 Mon Sep 17 00:00:00 2001
From: Mathieu Saby <mathieu.saby@univ-rennes2.fr>
Date: Fri, 9 Nov 2012 00:49:49 +0100
Subject: [PATCH] Bug 8954: Make languages list in advanced search translatable (revision 1)
In opac-search.pl and search.pl, this patch moves the $lang variable from the end to the begining of the script, and use it as a parameter for getAllLanguages.
In Languages.pm, getAllLanguages function is modified :
- if no parameter is passed to the function, it returns english languages names
- if a $lang parameter conforming to RFC4646 syntax is passed :
-- the function returns languages names translated in $lang if possible
-- if a language name is not translated in $lang in database, the function returns english language name
To test, set your opac and staff interface in english and in other languages and check search.pl and opac-search.pl :
- If language names in your languages_description table are translated in the same language you use for your GUI, the language names in dropdown list will be translated in this language (+native name).
- If your GUI is in english, or in a language into whitch languages names are not translated in languages_description, the dropdown list will stay in english (+native name).
---
C4/Languages.pm | 30 +++++++++++++++++++++++-------
catalogue/search.pl | 5 ++---
opac/opac-search.pl | 5 ++---
3 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/C4/Languages.pm b/C4/Languages.pm
index d0eed69..da98aed 100644
--- a/C4/Languages.pm
+++ b/C4/Languages.pm
@@ -168,7 +168,7 @@ sub getTranslatedLanguages {
Returns a reference to an array of hashes:
- my $alllanguages = getAllLanguages();
+ my $alllanguages = getAllLanguages()
print "Available translated languages:\n";
for my $language(@$alllanguages) {
print "$language->{language_code}\n";
@@ -179,19 +179,35 @@ Returns a reference to an array of hashes:
=cut
sub getAllLanguages {
+ my $lang = shift;
+# if no parameter is passed to the function, it returns english languages names
+# if a $lang parameter conforming to RFC4646 syntax is passed, the function returns languages names translated in $lang
+# if a language name is not translated in $lang in database, the function returns english language name
my @languages_loop;
my $dbh=C4::Context->dbh;
- my $current_language = shift || 'en';
+ my $default_language = 'en';
+ my $current_language = $default_language;
+ if ($lang) {
+ $current_language = regex_lang_subtags($lang)->{'language'};
+ }
my $sth = $dbh->prepare('SELECT * FROM language_subtag_registry WHERE type=\'language\'');
$sth->execute();
while (my $language_subtag_registry = $sth->fetchrow_hashref) {
-
- # pull out all the script descriptions for each language
+ my $desc;
+ # check if language name is stored in current language
+ my $sth4= $dbh->prepare("SELECT description FROM language_descriptions WHERE type='language' AND subtag =? AND lang = ?");
+ $sth4->execute($language_subtag_registry->{subtag},$current_language);
+ while (my $language_desc = $sth4->fetchrow_hashref) {
+ $desc=$language_desc->{description};
+ }
my $sth2= $dbh->prepare("SELECT * FROM language_descriptions LEFT JOIN language_rfc4646_to_iso639 on language_rfc4646_to_iso639.rfc4646_subtag = language_descriptions.subtag WHERE type='language' AND subtag =? AND language_descriptions.lang = ?");
- $sth2->execute($language_subtag_registry->{subtag},$current_language);
-
+ if ($desc) {
+ $sth2->execute($language_subtag_registry->{subtag},$current_language);
+ }
+ else {
+ $sth2->execute($language_subtag_registry->{subtag},$default_language);
+ }
my $sth3 = $dbh->prepare("SELECT description FROM language_descriptions WHERE type='language' AND subtag=? AND lang=?");
-
# add the correct description info
while (my $language_descriptions = $sth2->fetchrow_hashref) {
$sth3->execute($language_subtag_registry->{subtag},$language_subtag_registry->{subtag});
diff --git a/catalogue/search.pl b/catalogue/search.pl
index 8b1234b..d1a3ca2 100755
--- a/catalogue/search.pl
+++ b/catalogue/search.pl
@@ -158,7 +158,7 @@ use CGI qw('-no_undef_params');
my $cgi = new CGI;
my ($template,$borrowernumber,$cookie);
-
+my $lang = C4::Templates::getlanguage($cgi, 'intranet');
# decide which template to use
my $template_name;
my $template_type;
@@ -334,7 +334,7 @@ if ( $template_type eq 'advsearch' ) {
search_boxes_loop => \@search_boxes_array);
# load the language limits (for search)
- my $languages_limit_loop = getAllLanguages();
+ my $languages_limit_loop = getAllLanguages($lang);
$template->param(search_languages_loop => $languages_limit_loop,);
# Expanded search options in advanced search:
@@ -472,7 +472,6 @@ my ( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit
my @results;
## I. BUILD THE QUERY
-my $lang = C4::Templates::getlanguage($cgi, 'intranet');
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$stopwords_removed,$query_type) = buildQuery(\@operators,\@operands,\@indexes,\@limits,\@sort_by,$scan,$lang);
## parse the query_cgi string and put it into a form suitable for <input>s
diff --git a/opac/opac-search.pl b/opac/opac-search.pl
index 7677d86..73d2c53 100755
--- a/opac/opac-search.pl
+++ b/opac/opac-search.pl
@@ -71,7 +71,7 @@ BEGIN {
}
my ($template,$borrowernumber,$cookie);
-
+my $lang = C4::Templates::getlanguage($cgi, 'opac');
# decide which template to use
my $template_name;
my $template_type = 'basic';
@@ -178,7 +178,7 @@ $template->param(
);
# load the language limits (for search)
-my $languages_limit_loop = getAllLanguages();
+my $languages_limit_loop = getAllLanguages($lang);
$template->param(search_languages_loop => $languages_limit_loop,);
# load the Type stuff
@@ -418,7 +418,6 @@ my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_
my @results;
## I. BUILD THE QUERY
-my $lang = C4::Templates::getlanguage($cgi, 'opac');
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$stopwords_removed,$query_type) = buildQuery(\@operators,\@operands,\@indexes,\@limits,\@sort_by, 0, $lang);
sub _input_cgi_parse {
--
1.7.9.5