View | Details | Raw Unified | Return to bug 6000
Collapse All | Expand All

(-)a/C4/Languages.pm (-55 / +25 lines)
Lines 23-29 use strict; Link Here
23
#use warnings; FIXME - Bug 2505
23
#use warnings; FIXME - Bug 2505
24
use Carp;
24
use Carp;
25
use C4::Context;
25
use C4::Context;
26
use List::MoreUtils qw/any/;
26
use List::MoreUtils qw/any uniq/;
27
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
27
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
28
28
29
eval {
29
eval {
Lines 87-94 Returns a reference to an array of hashes: Link Here
87
sub getFrameworkLanguages {
87
sub getFrameworkLanguages {
88
    # get a hash with all language codes, names, and locale names
88
    # get a hash with all language codes, names, and locale names
89
    my $all_languages = getAllLanguages();
89
    my $all_languages = getAllLanguages();
90
    my @languages;
90
        
91
    
92
    # find the available directory names
91
    # find the available directory names
93
    my $dir=C4::Context->config('intranetdir')."/installer/data/";
92
    my $dir=C4::Context->config('intranetdir')."/installer/data/";
94
    opendir (MYDIR,$dir);
93
    opendir (MYDIR,$dir);
Lines 121-172 Returns a reference to an array of hashes: Link Here
121
sub getTranslatedLanguages {
120
sub getTranslatedLanguages {
122
    my ($interface, $theme, $current_language, $which) = @_;
121
    my ($interface, $theme, $current_language, $which) = @_;
123
    my $htdocs;
122
    my $htdocs;
124
    my $all_languages = getAllLanguages();
125
    my @languages;
123
    my @languages;
126
    my @enabled_languages;
124
    my @enabled_languages;
127
 
125
 
128
    if ($interface && $interface eq 'opac' ) {
126
    my ($preference,$config);
129
        my $languages= C4::Context->preference('opaclanguage') ||'en';
127
    if ($interface && $interface eq 'intranet' ) {
130
        @enabled_languages = split ",", $languages;
128
        $preference="language";
131
        $htdocs = C4::Context->config('opachtdocs');
129
        $config='intrahtdocs';
132
        if ( $theme and -d "$htdocs/$theme" ) {
133
            (@languages) = _get_language_dirs($htdocs,$theme);
134
        }
135
        else {
136
            for my $theme ( _get_themes('opac') ) {
137
                push @languages, _get_language_dirs($htdocs,$theme);
138
            }
139
        }
140
    }
130
    }
141
    elsif ($interface && $interface eq 'intranet' ) {
131
    else {
142
        my $languages= C4::Context->preference('language') ||'en';
132
        $preference="opaclanguages";
143
        @enabled_languages = split ",", $languages;
133
        $config='opachtdocs';
144
        $htdocs = C4::Context->config('intrahtdocs');
134
        $interface ||='opac';
145
        if ( $theme and -d "$htdocs/$theme" ) {
135
146
            @languages = _get_language_dirs($htdocs,$theme);
136
    }
147
        }
137
148
        else {
138
    my $languages= C4::Context->preference($preference) ||'en';
149
            foreach my $theme ( _get_themes('intranet') ) {
139
    @enabled_languages = split ",", $languages;
150
                push @languages, _get_language_dirs($htdocs,$theme);
140
    $htdocs = C4::Context->config($config);
151
            }
141
    if ( $theme and -d "$htdocs/$theme" ) {
152
        }
142
        (@languages) = _get_language_dirs($htdocs,$theme);
153
    }
143
    }
154
    else {
144
    else {
155
        my $languages= C4::Context->preference('opaclanguage') ||'en';
145
        for my $theme ( _get_themes($interface) ) {
156
        @enabled_languages = split ",", $languages;
157
        my $htdocs = C4::Context->config('intrahtdocs');
158
        foreach my $theme ( _get_themes('intranet') ) {
159
            push @languages, _get_language_dirs($htdocs,$theme);
146
            push @languages, _get_language_dirs($htdocs,$theme);
160
        }
147
        }
161
        $htdocs = C4::Context->config('opachtdocs');
148
        @languages=uniq @languages;
162
        foreach my $theme ( _get_themes('opac') ) {
163
            push @languages, _get_language_dirs($htdocs,$theme);
164
        }
165
        my %seen;
166
        $seen{$_}++ for @languages;
167
        @languages = keys %seen;
168
    }
149
    }
169
    return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
150
    @enabled_languages=grep{my $enabled_language=$_;any{$_ eq $enabled_language}@languages}@enabled_languages;
151
    return _build_languages_arrayref(\@enabled_languages,$current_language);
170
}
152
}
171
153
172
=head2 getAllLanguages
154
=head2 getAllLanguages
Lines 283-292 FIXME: this could be rewritten and simplified using map Link Here
283
=cut
265
=cut
284
266
285
sub _build_languages_arrayref {
267
sub _build_languages_arrayref {
286
        my ($all_languages,$translated_languages,$current_language,$enabled_languages) = @_;
268
        my ($translated_languages,$current_language) = @_;
287
        my @translated_languages = @$translated_languages;
269
        my @translated_languages = @$translated_languages;
288
        my @languages_loop; # the final reference to an array of hashrefs
270
        my @languages_loop; # the final reference to an array of hashrefs
289
        my @enabled_languages = @$enabled_languages;
290
        # how many languages are enabled, if one, take note, some contexts won't need to display it
271
        # how many languages are enabled, if one, take note, some contexts won't need to display it
291
        my %seen_languages; # the language tags we've seen
272
        my %seen_languages; # the language tags we've seen
292
        my %found_languages;
273
        my %found_languages;
Lines 298-312 sub _build_languages_arrayref { Link Here
298
            # separate the language string into its subtag types
279
            # separate the language string into its subtag types
299
            my $language_subtags_hashref = regex_lang_subtags($translated_language);
280
            my $language_subtags_hashref = regex_lang_subtags($translated_language);
300
281
301
            # is this language string 'enabled'?
302
            for my $enabled_language (@enabled_languages) {
303
                #warn "Checking out if $translated_language eq $enabled_language";
304
                $language_subtags_hashref->{'enabled'} = 1 if $translated_language eq $enabled_language;
305
            }
306
            
307
            # group this language, key by langtag
282
            # group this language, key by langtag
308
            $language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
283
            $language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
309
            $language_subtags_hashref->{'rfc4646_subtag'} = $translated_language;
284
            $language_subtags_hashref->{'rfc4646_subtag'} = $translated_language;
285
            $language_subtags_hashref->{'enabled'} = 1;
310
            $language_subtags_hashref->{'native_description'} = language_get_description($language_subtags_hashref->{language},$language_subtags_hashref->{language},'language');
286
            $language_subtags_hashref->{'native_description'} = language_get_description($language_subtags_hashref->{language},$language_subtags_hashref->{language},'language');
311
            $language_subtags_hashref->{'script_description'} = language_get_description($language_subtags_hashref->{script},$language_subtags_hashref->{'language'},'script');
287
            $language_subtags_hashref->{'script_description'} = language_get_description($language_subtags_hashref->{script},$language_subtags_hashref->{'language'},'script');
312
            $language_subtags_hashref->{'region_description'} = language_get_description($language_subtags_hashref->{region},$language_subtags_hashref->{'language'},'region');
288
            $language_subtags_hashref->{'region_description'} = language_get_description($language_subtags_hashref->{region},$language_subtags_hashref->{'language'},'region');
Lines 318-328 sub _build_languages_arrayref { Link Here
318
        while( my ($key, $value) = each %$language_groups) {
294
        while( my ($key, $value) = each %$language_groups) {
319
295
320
            # is this language group enabled? are any of the languages within it enabled?
296
            # is this language group enabled? are any of the languages within it enabled?
321
            my $enabled;
322
            for my $enabled_language (@enabled_languages) {
323
                my $regex_enabled_language = regex_lang_subtags($enabled_language);
324
                $enabled = 1 if $key eq $regex_enabled_language->{language};
325
            }
326
            push @languages_loop,  {
297
            push @languages_loop,  {
327
                            # this is only use if there is one
298
                            # this is only use if there is one
328
                            rfc4646_subtag => @$value[0]->{rfc4646_subtag},
299
                            rfc4646_subtag => @$value[0]->{rfc4646_subtag},
Lines 331-337 sub _build_languages_arrayref { Link Here
331
                            sublanguages_loop => $value,
302
                            sublanguages_loop => $value,
332
                            plural => $track_language_groups->{$key} >1 ? 1 : 0,
303
                            plural => $track_language_groups->{$key} >1 ? 1 : 0,
333
                            current => $current_language_regex->{language} eq $key ? 1 : 0,
304
                            current => $current_language_regex->{language} eq $key ? 1 : 0,
334
                            group_enabled => $enabled,
305
                            group_enabled=>1
335
                           };
306
                           };
336
        }
307
        }
337
        return \@languages_loop;
308
        return \@languages_loop;
338
- 

Return to bug 6000