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

Joshua Ferraro jmf at liblime.com
Tue Feb 20 06:29:13 CET 2007


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 <jmf at liblime.com>
+#
+# 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
+
+ at ISA    = qw(Exporter);
+ at EXPORT = 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 \@languages;
+}
+
+=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, at languages);
+		}
+        else {
+            for my $theme ( _get_themes('opac') ) {
+				push @languages, _get_language_dirs($htdocs,$theme);
+            }
+            return _get_final_languages($all_languages, at 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, at languages);
+        }
+        else {
+            foreach my $theme ( _get_themes('opac') ) {
+				push @languages, _get_language_dirs($htdocs,$theme);
+            }
+			return _get_final_languages($all_languages, at 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, at 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, at 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 \@final_languages;
+}
+
+1;
+
+__END__
+
+=back
+
+=head1 AUTHOR
+
+Joshua Ferraro
+
+=cut





More information about the Koha-cvs mailing list