--- loncom/localize/lonlocal.pm 2008/11/24 16:53:16 1.51 +++ loncom/localize/lonlocal.pm 2008/11/28 14:36:55 1.52 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Localization routines # -# $Id: lonlocal.pm,v 1.51 2008/11/24 16:53:16 jms Exp $ +# $Id: lonlocal.pm,v 1.52 2008/11/28 14:36:55 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -233,6 +233,56 @@ sub current_language { return 'en'; } +sub preferred_languages { + my @languages=(); + if (($Apache::lonnet::env{'request.role.adv'}) && ($Apache::lonnet::env{'form.languages'})) { + @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'form.languages'})); + } + if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.languages'}) { + @languages=(@languages,split(/\s*(\,|\;|\:)\s*/, + $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.languages'})); + } + + if ($Apache::lonnet::env{'environment.languages'}) { + @languages=(@languages, + split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'environment.languages'})); + } + my $browser=$ENV{'HTTP_ACCEPT_LANGUAGE'}; + if ($browser) { + my @browser = + map { (split(/\s*;\s*/,$_))[0] } (split(/\s*,\s*/,$browser)); + push(@languages,@browser); + } + + foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'}, + $Apache::lonnet::perlvar{'lonDefDomain'}) { + if ($domtype ne '') { + my %domdefs = &Apache::lonnet::get_domain_defaults($domtype); + if ($domdefs{'lang_def'} ne '') { + push(@languages,$domdefs{'lang_def'}); + } + } + } + return &get_genlanguages(@languages); +} + +sub get_genlanguages { + my (@languages) = @_; +# turn "en-ca" into "en-ca,en" + my @genlanguages; + foreach my $lang (@languages) { + unless ($lang=~/\w/) { next; } + push(@genlanguages,$lang); + if ($lang=~/(\-|\_)/) { + push(@genlanguages,(split(/(\-|\_)/,$lang))[0]); + } + } + #uniqueify the languages list + my %count; + @genlanguages = map { $count{$_}++ == 0 ? $_ : () } @genlanguages; + return @genlanguages; +} + # ============================================================== What encoding? sub current_encoding { @@ -279,7 +329,7 @@ sub get_language_handle { my $headers=$r->headers_in; $ENV{'HTTP_ACCEPT_LANGUAGE'}=$headers->{'Accept-language'}; } - my @languages=&Apache::loncommon::preferred_languages; + my @languages=&preferred_languages(); $ENV{'HTTP_ACCEPT_LANGUAGE'}=''; $lh=Apache::localize->get_handle(@languages); if ($r) {