X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FLanguages.pm;h=371b5beb2b5224de21613124b78eae7196956216;hb=3950a9c9eb72fa8c116b0ed521ee2bc63880be71;hp=d0eed6982efc8b7be2233bb48ee71f97612447ea;hpb=3ce542ce2668770a5669d2fb98b666f42a5bd388;p=koha_fer diff --git a/C4/Languages.pm b/C4/Languages.pm index d0eed6982e..371b5beb2b 100644 --- a/C4/Languages.pm +++ b/C4/Languages.pm @@ -43,9 +43,10 @@ BEGIN { @EXPORT = qw( &getFrameworkLanguages &getTranslatedLanguages + &getLanguages &getAllLanguages ); - @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages get_bidi regex_lang_subtags language_get_description accept_language); + @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language); $DEBUG = 0; } @@ -119,7 +120,6 @@ Returns a reference to an array of hashes: sub getTranslatedLanguages { my ($interface, $theme, $current_language, $which) = @_; my $htdocs; - my $all_languages = getAllLanguages(); my @languages; my @enabled_languages; @@ -161,7 +161,7 @@ sub getTranslatedLanguages { $seen{$_}++ for @languages; @languages = keys %seen; } - return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages); + return _build_languages_arrayref(\@languages,$current_language,\@enabled_languages); } =head2 getAllLanguages @@ -179,19 +179,52 @@ Returns a reference to an array of hashes: =cut sub getAllLanguages { + return getLanguages(shift); +} + +=head2 getLanguages + +Returns a reference to an array of hashes. +Extracted from getAllLanguages to limit effect on the code base. +This new function (name) will allow for more arguments to customize the values returned. + +- 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 +- If $isFiltered is set to true, only the detail of the languages selected in system preferences AdvanceSearchLanguages is returned. + +=cut + +sub getLanguages { + my $lang = shift; + my $isFiltered = shift; + my @languages_loop; my $dbh=C4::Context->dbh; - my $current_language = shift || 'en'; + my $default_language = 'en'; + my $current_language = $default_language; + my $language_list = $isFiltered ? C4::Context->preference("AdvancedSearchLanguages") : undef; + 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}); @@ -211,7 +244,9 @@ sub getAllLanguages { $language_subtag_registry->{language_description} = $language_descriptions->{description}; } } - push @languages_loop, $language_subtag_registry; + if ( !$language_list || index ( $language_list, $language_subtag_registry->{ iso639_2_code } ) >= 0) { + push @languages_loop, $language_subtag_registry; + } } return \@languages_loop; } @@ -258,10 +293,11 @@ sub _get_language_dirs { next if $lang_string =~/^\./; next if $lang_string eq 'all'; next if $lang_string =~/png$/; + next if $lang_string =~/js$/; next if $lang_string =~/css$/; next if $lang_string =~/CVS$/; next if $lang_string =~/\.txt$/i; #Don't read the readme.txt ! - next if $lang_string =~/img|images|famfam|sound|pdf/; + next if $lang_string =~/img|images|famfam|js|less|lib|sound|pdf/; push @lang_strings, $lang_string; } return (@lang_strings); @@ -276,7 +312,7 @@ FIXME: this could be rewritten and simplified using map =cut sub _build_languages_arrayref { - my ($all_languages,$translated_languages,$current_language,$enabled_languages) = @_; + my ($translated_languages,$current_language,$enabled_languages) = @_; my @translated_languages = @$translated_languages; my @languages_loop; # the final reference to an array of hashrefs my @enabled_languages = @$enabled_languages;