451 lines
13 KiB
Perl
451 lines
13 KiB
Perl
package C4::Languages;
|
|
|
|
# Copyright 2006 (C) LibLime
|
|
# Joshua Ferraro <jmf@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$
|
|
|
|
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$' =~ /\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
|
|
|
|
@ISA = qw(Exporter);
|
|
@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,@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 =>
|
|
"العربية",
|
|
language_locale_name => "Arabic",
|
|
,
|
|
},
|
|
{
|
|
language_code => "bul",
|
|
language_name =>
|
|
"Български",
|
|
language_locale_name => "Bulgarian",
|
|
,
|
|
},
|
|
{
|
|
language_code => "chi",
|
|
language_name => "中文",
|
|
language_locale_name => "Chinese",
|
|
,
|
|
},
|
|
{
|
|
language_code => "scr",
|
|
language_name => "Hrvatski",
|
|
language_locale_name => "Croatian",
|
|
,
|
|
},
|
|
{
|
|
language_code => "cze",
|
|
language_name => "čeština",
|
|
language_locale_name => "Czech",
|
|
,
|
|
},
|
|
{
|
|
language_code => "dan",
|
|
language_name => "Dænsk",
|
|
language_locale_name => "Danish",
|
|
,
|
|
},
|
|
{
|
|
language_code => "dut",
|
|
language_name => "nedərlɑns",
|
|
language_locale_name => "Dutch",
|
|
,
|
|
},
|
|
{
|
|
language_code => "en",
|
|
language_name => "English",
|
|
language_locale_name => "English",
|
|
,
|
|
},
|
|
{
|
|
language_code => "fr",
|
|
language_name => "Français",
|
|
language_locale_name => "French",
|
|
,
|
|
},
|
|
{
|
|
language_code => "ger",
|
|
language_name => "Deutsch",
|
|
language_locale_name => "German",
|
|
,
|
|
},
|
|
{
|
|
language_code => "gre",
|
|
language_name =>
|
|
"ελληνικά",
|
|
language_locale_name => "Greek, Modern [1453- ]",
|
|
,
|
|
},
|
|
{
|
|
language_code => "heb",
|
|
language_name => "עברית",
|
|
language_locale_name => "Hebrew",
|
|
,
|
|
},
|
|
{
|
|
language_code => "hin",
|
|
language_name => "हिन्दी",
|
|
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 => "日本語",
|
|
language_locale_name => "Japanese",
|
|
,
|
|
},
|
|
{
|
|
language_code => "kor",
|
|
language_name => "한국어",
|
|
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 => "فارسى",
|
|
language_locale_name => "Persian",
|
|
,
|
|
},
|
|
{
|
|
language_code => "pol",
|
|
language_name => "Polski",
|
|
language_locale_name => "Polish",
|
|
,
|
|
},
|
|
{
|
|
language_code => "por",
|
|
language_name => "Português",
|
|
language_locale_name => "Portuguese",
|
|
,
|
|
},
|
|
{
|
|
language_code => "rum",
|
|
language_name => "Română",
|
|
language_locale_name => "Romanian",
|
|
,
|
|
},
|
|
{
|
|
language_code => "rus",
|
|
language_name =>
|
|
"Русский",
|
|
language_locale_name => "Russian",
|
|
,
|
|
},
|
|
{
|
|
language_code => "spa",
|
|
language_name => "Español",
|
|
language_locale_name => "Spanish",
|
|
,
|
|
},
|
|
{
|
|
language_code => "swe",
|
|
language_name => "Svenska",
|
|
language_locale_name => "Swedish",
|
|
,
|
|
},
|
|
{
|
|
language_code => "tha",
|
|
language_name =>
|
|
"ภาษาไทย",
|
|
language_locale_name => "Thai",
|
|
,
|
|
},
|
|
{
|
|
language_code => "tur",
|
|
language_name => "Türkçe",
|
|
language_locale_name => "Turkish",
|
|
,
|
|
},
|
|
{
|
|
language_code => "ukr",
|
|
language_name =>
|
|
"Українська",
|
|
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 \@final_languages;
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=back
|
|
|
|
=head1 AUTHOR
|
|
|
|
Joshua Ferraro
|
|
|
|
=cut
|