version 1.48, 2008/09/13 02:37:29
|
version 1.50.2.1, 2008/12/12 04:29:35
|
Line 166 use locale;
|
Line 166 use locale;
|
use POSIX qw(locale_h strftime); |
use POSIX qw(locale_h strftime); |
use DateTime(); |
use DateTime(); |
use DateTime::TimeZone; |
use DateTime::TimeZone; |
|
use DateTime::Locale; |
|
|
require Exporter; |
require Exporter; |
|
|
Line 232 sub current_language {
|
Line 233 sub current_language {
|
return 'en'; |
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? |
# ============================================================== What encoding? |
|
|
sub current_encoding { |
sub current_encoding { |
Line 278 sub get_language_handle {
|
Line 329 sub get_language_handle {
|
my $headers=$r->headers_in; |
my $headers=$r->headers_in; |
$ENV{'HTTP_ACCEPT_LANGUAGE'}=$headers->{'Accept-language'}; |
$ENV{'HTTP_ACCEPT_LANGUAGE'}=$headers->{'Accept-language'}; |
} |
} |
my @languages=&Apache::loncommon::preferred_languages; |
my @languages=&preferred_languages(); |
$ENV{'HTTP_ACCEPT_LANGUAGE'}=''; |
$ENV{'HTTP_ACCEPT_LANGUAGE'}=''; |
$lh=Apache::localize->get_handle(@languages); |
$lh=Apache::localize->get_handle(@languages); |
if ($r) { |
if ($r) { |
Line 300 sub gettimezone {
|
Line 351 sub gettimezone {
|
$timezone = $domdefaults{'timezone_def'}; |
$timezone = $domdefaults{'timezone_def'}; |
} |
} |
} |
} |
|
} elsif ($Apache::lonnet::env{'request.role.domain'} ne '') { |
|
my %uroledomdefs = |
|
&Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'request.role.domain'}); |
|
if ($uroledomdefs{'timezone_def'} ne '') { |
|
$timezone = $uroledomdefs{'timezone_def'}; |
|
} |
|
} elsif ($Apache::lonnet::env{'user.domain'} ne '') { |
|
my %udomdefaults = |
|
&Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'}); |
|
if ($udomdefaults{'timezone_def'} ne '') { |
|
$timezone = $udomdefaults{'timezone_def'}; |
|
} |
} |
} |
if ($timezone ne '') { |
if ($timezone ne '') { |
if (DateTime::TimeZone->is_valid_name($timezone)) { |
if (DateTime::TimeZone->is_valid_name($timezone)) { |
Line 366 sub locallocaltime {
|
Line 429 sub locallocaltime {
|
} |
} |
} |
} |
|
|
|
sub getdatelocale { |
|
my ($datelocale,$locale_obj); |
|
if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.datelocale'}) { |
|
$datelocale = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.datelocale'}; |
|
} elsif ($Apache::lonnet::env{'request.course.id'} ne '') { |
|
my $cdom = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.domain'}; |
|
if ($cdom ne '') { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
|
if ($domdefaults{'datelocale_def'} ne '') { |
|
$datelocale = $domdefaults{'datelocale_def'}; |
|
} |
|
} |
|
} elsif ($Apache::lonnet::env{'user.domain'} ne '') { |
|
my %udomdefaults = &Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'}); |
|
if ($udomdefaults{'datelocale_def'} ne '') { |
|
$datelocale = $udomdefaults{'datelocale_def'}; |
|
} |
|
} |
|
if ($datelocale ne '') { |
|
eval { |
|
$locale_obj = DateTime::Locale->load($datelocale); |
|
}; |
|
if (!$@) { |
|
if ($locale_obj->id() eq $datelocale) { |
|
return $locale_obj; |
|
} |
|
} |
|
} |
|
return $locale_obj; |
|
} |
|
|
|
|
# ==================== Normalize string (reduce fragility in the lexicon files) |
# ==================== Normalize string (reduce fragility in the lexicon files) |
|
|
# This normalizes a string to reduce fragility in the lexicon files of |
# This normalizes a string to reduce fragility in the lexicon files of |