koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] koha/C4 Languages.pm [rel_3_0]


From: Joshua Ferraro
Subject: [Koha-cvs] koha/C4 Languages.pm [rel_3_0]
Date: Tue, 20 Feb 2007 05:29:13 +0000

CVSROOT:        /sources/koha
Module name:    koha
Branch:         rel_3_0
Changes by:     Joshua Ferraro <kados>  07/02/20 05:29:13

Added files:
        C4             : Languages.pm 

Log message:
        Languages.pm provides three new functions for dealing with lists of
        languages. There are also some helper functions that simplify the
        previous code in Koha.pm.
        
        FUNCTIONS
               getFrameworkLanguages
        
               Returns a reference to an array of hashes:
        
                my $languages = getFrameworkLanguages();
                for my $language(@$languages) {
                   print "$language->{language_code}\n"; # language code in iso 
639-2
                   print "$language->{language_name}\n"; # language name in 
native script
                   print "$language->{language_locale_name}\n"; # language name 
in current locale
                }
        
               getTranslatedLanguages
        
               Returns a reference to an array of hashes:
        
                my $languages = getTranslatedLanguages();
                print "Available translated langauges:\n";
                for my $language(@$trlanguages) {
                   print "$language->{language_code}\n"; # language code in iso 
639-2
                   print "$language->{language_name}\n"; # language name in 
native script
                   print "$language->{language_locale_name}\n"; # language name 
in current locale
                }
        
               getAllLanguages
        
               Returns a reference to an array of hashes:
        
                my $alllanguages = getAllLanguages();
                print "Available translated langauges:\n";
                for my $language(@$alllanguages) {
                   print "$language->{language_code}\n";
                   print "$language->{language_name}\n";
                   print "$language->{language_locale_name}\n";
                }

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/C4/Languages.pm?cvsroot=koha&only_with_tag=rel_3_0&rev=1.1.2.1

Patches:
Index: Languages.pm
===================================================================
RCS file: Languages.pm
diff -N Languages.pm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Languages.pm        20 Feb 2007 05:29:13 -0000      1.1.2.1
@@ -0,0 +1,451 @@
+package C4::Languages;
+
+# Copyright 2006 (C) LibLime
+# Joshua Ferraro <address@hidden>
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+
+# $Id: Languages.pm,v 1.1.2.1 2007/02/20 05:29:13 kados Exp $
+
+use strict; use warnings; #FIXME: turn off warnings before release
+require Exporter;
+use C4::Context;
+use vars qw($VERSION @ISA @EXPORT);
+
+$VERSION = do { my @v = '$Revision: 1.1.2.1 $' =~ /\d+/g; shift(@v) . "." . 
join( "_", map { sprintf "%03d", $_ } @v ); };
+
+=head1 NAME
+
+C4::Languages - Perl Module containing language list functions for Koha 
+
+=head1 SYNOPSIS
+
+use C4::Languages;
+
+=head1 DESCRIPTION
+
+=head1 FUNCTIONS
+
+=cut
+
address@hidden    = qw(Exporter);
address@hidden = qw(
+  &getFrameworkLanguages
+  &getTranslatedLanguages
+  &getAllLanguages
+  );
+
+my $DEBUG = 0;
+
+=head2 getFrameworkLanguages
+
+Returns a reference to an array of hashes:
+
+ my $languages = getFrameworkLanguages();
+ for my $language(@$languages) {
+    print "$language->{language_code}\n"; # language code in iso 639-2
+    print "$language->{language_name}\n"; # language name in native script
+    print "$language->{language_locale_name}\n"; # language name in current 
locale
+ }
+
+=cut
+
+sub getFrameworkLanguages {
+       # get a hash with all language codes, names, and locale names
+       my $all_languages = getAllLanguages();
+       my @languages;
+
+       # find the available directory names
+       my $dir=C4::Context->config('intranetdir')."/misc/sql-datas/";
+       opendir (MYDIR,$dir);
+    my @listdir= grep { !/^\.|CVS/ && -d "$dir/$_"} readdir(MYDIR);    
+       closedir MYDIR;
+
+       # pull out all data for the dir names that exist
+       for my $dirname (@listdir) {
+               for my $language_set (@$all_languages) {
+                       my $language_name = $language_set->{language_name};
+                       my $language_locale_name = 
$language_set->{language_locale_name};
+
+            if ($dirname eq $language_set->{language_code}) {
+                push @languages, {'language_code'=>$dirname, 
'language_name'=>$language_name, 'language_locale_name'=>$language_locale_name}
+                       }
+               }
+       }
+       return address@hidden;
+}
+
+=head2 getTranslatedLanguages
+
+Returns a reference to an array of hashes:
+
+ my $languages = getTranslatedLanguages();
+ print "Available translated langauges:\n";
+ for my $language(@$trlanguages) {
+    print "$language->{language_code}\n"; # language code in iso 639-2
+    print "$language->{language_name}\n"; # language name in native script
+    print "$language->{language_locale_name}\n"; # language name in current 
locale
+ }
+
+=cut
+
+sub getTranslatedLanguages {
+    my ($interface, $theme) = @_;
+    my $htdocs;
+       my $all_languages = getAllLanguages();
+       my @languages;
+       my $lang;
+       
+    if ( $interface eq 'opac' ) {
+        $htdocs = C4::Context->config('opachtdocs');
+        if ( $theme and -d "$htdocs/$theme" ) {
+                       (@languages) = _get_language_dirs($htdocs,$theme);
+                       return _get_final_languages($all_languages,@languages);
+               }
+        else {
+            for my $theme ( _get_themes('opac') ) {
+                               push @languages, 
_get_language_dirs($htdocs,$theme);
+            }
+            return _get_final_languages($all_languages,@languages);
+        }
+    }
+    elsif ( $interface eq 'intranet' ) {
+        $htdocs = C4::Context->config('intrahtdocs');
+        if ( $theme and -d "$htdocs/$theme" ) {
+                       @languages = _get_language_dirs($htdocs,$theme);
+                       return _get_final_languages($all_languages,@languages);
+        }
+        else {
+            foreach my $theme ( _get_themes('opac') ) {
+                               push @languages, 
_get_language_dirs($htdocs,$theme);
+            }
+                       return _get_final_languages($all_languages,@languages);
+        }
+    }
+    else {
+        my $htdocs = C4::Context->config('intrahtdocs');
+        foreach my $theme ( _get_themes('intranet') ) {
+                       push @languages, _get_language_dirs($htdocs,$theme);
+        }
+        $htdocs = C4::Context->config('opachtdocs');
+        foreach my $theme ( _get_themes('opac') ) {
+                       push @languages, _get_language_dirs($htdocs,$theme);
+        }
+               return _get_final_languages($all_languages,@languages);
+    }
+}
+
+=head2 getAllLanguages
+
+Returns a reference to an array of hashes:
+
+ my $alllanguages = getAllLanguages();
+ print "Available translated langauges:\n";
+ for my $language(@$alllanguages) {
+    print "$language->{language_code}\n";
+    print "$language->{language_name}\n";
+    print "$language->{language_locale_name}\n";
+ }
+
+=cut
+
+sub getAllLanguages {
+    my $languages_loop = [
+        {
+            language_code          => "",
+            language_name => "No Limit",
+            language_locale_name   => "",
+            selected       => "selected",
+        },
+        {
+            language_code          => "ara",
+            language_name =>
+              "&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;",
+            language_locale_name => "Arabic",
+            ,
+        },
+        {
+            language_code          => "bul",
+            language_name =>
+              
"&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;",
+            language_locale_name => "Bulgarian",
+            ,
+        },
+        {
+            language_code          => "chi",
+            language_name => "&#20013;&#25991;",
+            language_locale_name   => "Chinese",
+            ,
+        },
+        {
+            language_code          => "scr",
+            language_name => "Hrvatski",
+            language_locale_name   => "Croatian",
+            ,
+        },
+        {
+            language_code          => "cze",
+            language_name => "&#x010D;e&#353;tina",
+            language_locale_name   => "Czech",
+            ,
+        },
+        {
+            language_code          => "dan",
+            language_name => "D&aelig;nsk",
+            language_locale_name   => "Danish",
+            ,
+        },
+        {
+            language_code          => "dut",
+            language_name => "ned&#601;rl&#593;ns",
+            language_locale_name   => "Dutch",
+            ,
+        },
+        {
+            language_code          => "en",
+            language_name => "English",
+            language_locale_name   => "English",
+            ,
+        },
+        {
+            language_code          => "fr",
+            language_name => "Fran&ccedil;ais",
+            language_locale_name   => "French",
+            ,
+        },
+        {
+            language_code          => "ger",
+            language_name => "Deutsch",
+            language_locale_name   => "German",
+            ,
+        },
+        {
+            language_code          => "gre",
+            language_name =>
+              "&#949;&#955;&#955;&#951;&#957;&#953;&#954;&#940;",
+            language_locale_name => "Greek, Modern [1453- ]",
+            ,
+        },
+        {
+            language_code          => "heb",
+            language_name => "&#1506;&#1489;&#1512;&#1497;&#1514;",
+            language_locale_name   => "Hebrew",
+            ,
+        },
+        {
+            language_code          => "hin",
+            language_name => "&#2361;&#2367;&#2344;&#2381;&#2342;&#2368;",
+            language_locale_name   => "Hindi",
+            ,
+        },
+        {
+            language_code          => "hun",
+            language_name => "Magyar",
+            language_locale_name   => "Hungarian",
+            ,
+        },
+        {
+            language_code          => "ind",
+            language_name => "",
+            language_locale_name   => "Indonesian",
+            ,
+        },
+        {
+            language_code          => "ita",
+            language_name => "Italiano",
+            language_locale_name   => "Italian",
+            ,
+        },
+        {
+            language_code          => "jpn",
+            language_name => "&#26085;&#26412;&#35486;",
+            language_locale_name   => "Japanese",
+            ,
+        },
+        {
+            language_code          => "kor",
+            language_name => "&#54620;&#44397;&#50612;",
+            language_locale_name   => "Korean",
+            ,
+        },
+        {
+            language_code          => "lat",
+            language_name => "Latina",
+            language_locale_name   => "Latin",
+            ,
+        },
+        {
+            language_code          => "nor",
+            language_name => "Norsk",
+            language_locale_name   => "Norwegian",
+            ,
+        },
+        {
+            language_code          => "per",
+            language_name => "&#1601;&#1575;&#1585;&#1587;&#1609;",
+            language_locale_name   => "Persian",
+            ,
+        },
+        {
+            language_code          => "pol",
+            language_name => "Polski",
+            language_locale_name   => "Polish",
+            ,
+        },
+        {
+            language_code          => "por",
+            language_name => "Portugu&ecirc;s",
+            language_locale_name   => "Portuguese",
+            ,
+        },
+        {
+            language_code          => "rum",
+            language_name => "Rom&acirc;n&#259;",
+            language_locale_name   => "Romanian",
+            ,
+        },
+        {
+            language_code          => "rus",
+            language_name =>
+              "&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;",
+            language_locale_name => "Russian",
+            ,
+        },
+        {
+            language_code          => "spa",
+            language_name => "Espa&ntilde;ol",
+            language_locale_name   => "Spanish",
+            ,
+        },
+        {
+            language_code          => "swe",
+            language_name => "Svenska",
+            language_locale_name   => "Swedish",
+            ,
+        },
+        {
+            language_code          => "tha",
+            language_name =>
+              "&#3616;&#3634;&#3625;&#3634;&#3652;&#3607;&#3618;",
+            language_locale_name => "Thai",
+            ,
+        },
+        {
+            language_code          => "tur",
+            language_name => "T&uuml;rk&ccedil;e",
+            language_locale_name   => "Turkish",
+            ,
+        },
+        {
+            language_code          => "ukr",
+            language_name =>
+"&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;",
+            language_locale_name => "Ukrainian",
+            ,
+        },
+
+    ];
+    return $languages_loop;
+}
+
+=head2 _get_themes
+
+Internal function, returns an array of all available themes.
+
+  (@themes) = &_get_themes('opac');
+  (@themes) = &_get_themes('intranet');
+
+=cut
+
+sub _get_themes {
+    my $interface = shift;
+    my $htdocs;
+    my @themes;
+    if ( $interface eq 'intranet' ) {
+        $htdocs = C4::Context->config('intrahtdocs');
+    }
+    else {
+        $htdocs = C4::Context->config('opachtdocs');
+    }
+    opendir D, "$htdocs";
+    my @dirlist = readdir D;
+    foreach my $directory (@dirlist) {
+               # if there's an en dir, it's a valid theme
+        -d "$htdocs/$directory/en" and push @themes, $directory;
+    }
+    return @themes;
+}
+
+=head2 _get_language_dirs
+
+Internal function, returns an array of directory names, excluding non-language 
directories
+
+=cut
+
+sub _get_language_dirs {
+       my ($htdocs,$theme) = @_;
+       my @languages;
+       opendir D, "$htdocs/$theme";
+       for my $language ( readdir D ) {
+               next if $language =~/^\./;
+               next if $language eq 'all';
+               next if $language =~/png$/;
+               next if $language =~/css$/;
+               next if $language =~/CVS$/;
+               next if $language =~/itemtypeimg$/;
+               next if $language =~/\.txt$/i;     #Don't read the readme.txt !
+               next if $language eq 'images';
+               push @languages, $language;
+       }
+           return (@languages);
+}
+
+=head2 _get_final_languages 
+
+Internal function for building the ref to array of hashes
+
+FIXME: this could be rewritten and simplified using map
+
+=cut
+
+sub _get_final_languages {
+               my ($all_languages,@languages) = @_;
+               my @final_languages;
+               my %seen_languages;
+               for my $language (@languages) {
+                       unless ($seen_languages{$language}) {
+                               for my $language_code (@$all_languages) {
+                                       if ($language eq 
$language_code->{'language_code'}) {
+                                               push @final_languages, 
$language_code;
+                                       }
+                               }
+                               $seen_languages{$language}++;
+                       }
+               }
+               return address@hidden;
+}
+
+1;
+
+__END__
+
+=back
+
+=head1 AUTHOR
+
+Joshua Ferraro
+
+=cut




reply via email to

[Prev in Thread] Current Thread [Next in Thread]