version 1.50.2.3, 2010/02/12 14:20:41
|
version 1.51, 2008/11/24 16:53:16
|
Line 233 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 329 sub get_language_handle {
|
Line 279 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=&preferred_languages(); |
my @languages=&Apache::loncommon::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 340 sub get_language_handle {
|
Line 290 sub get_language_handle {
|
|
|
# ========================================================== Localize localtime |
# ========================================================== Localize localtime |
sub gettimezone { |
sub gettimezone { |
my ($timezone) = @_; |
my $timezone; |
if ($timezone ne '') { |
if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}) { |
if (!DateTime::TimeZone->is_valid_name($timezone)) { |
$timezone = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}; |
$timezone = 'local'; |
} elsif ($Apache::lonnet::env{'request.course.id'} ne '') { |
} |
my $cdom = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.domain'}; |
return $timezone; |
if ($cdom ne '') { |
} |
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
my $cid = $Apache::lonnet::env{'request.course.id'}; |
if ($domdefaults{'timezone_def'} ne '') { |
if ($cid ne '') { |
$timezone = $domdefaults{'timezone_def'}; |
if ($Apache::lonnet::env{'course.'.$cid.'.timezone'}) { |
|
$timezone = $Apache::lonnet::env{'course.'.$cid.'.timezone'}; |
|
} else { |
|
my $cdom = $Apache::lonnet::env{'course.'.$cid.'.domain'}; |
|
if ($cdom ne '') { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
|
if ($domdefaults{'timezone_def'} ne '') { |
|
$timezone = $domdefaults{'timezone_def'}; |
|
} |
|
} |
} |
} |
} |
} elsif ($Apache::lonnet::env{'request.role.domain'} ne '') { |
} elsif ($Apache::lonnet::env{'request.role.domain'} ne '') { |
Line 382 sub gettimezone {
|
Line 323 sub gettimezone {
|
} |
} |
|
|
sub locallocaltime { |
sub locallocaltime { |
my ($thistime,$timezone) = @_; |
my $thistime=shift; |
if (!defined($thistime) || $thistime eq '') { |
if (!defined($thistime) || $thistime eq '') { |
return &mt('Never'); |
return &mt('Never'); |
} |
} |
Line 396 sub locallocaltime {
|
Line 337 sub locallocaltime {
|
} |
} |
|
|
my $dt = DateTime->from_epoch(epoch => $thistime) |
my $dt = DateTime->from_epoch(epoch => $thistime) |
->set_time_zone(&gettimezone($timezone)); |
->set_time_zone(&gettimezone()); |
|
|
# TimeZone tries to determine the 'local' timezone from $ENV{TZ} if this |
|
# fails it searches through various system files. Under certain |
|
# circumstances this is an extremly expensive operation. |
|
# So after the first run we store the timezone in $ENV{TZ} to significantly |
|
# speed up future lookups. |
|
$ENV{TZ} = $dt->time_zone()->name() |
|
if (! $ENV{TZ} && gettimezone($timezone) eq 'local'); |
|
|
|
if ((¤t_language=~/^en/) || (!$lh)) { |
if ((¤t_language=~/^en/) || (!$lh)) { |
|
|
return $dt->strftime("%a %b %e %I:%M:%S %P %Y (%Z)"); |
return $dt->strftime("%a %b %e %I:%M:%S %P %Y (%Z)"); |
Line 478 sub getdatelocale {
|
Line 410 sub getdatelocale {
|
return $locale_obj; |
return $locale_obj; |
} |
} |
|
|
|
=pod |
|
|
|
=item * normalize_string |
|
|
# ==================== 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 |
|
huge messages (such as are used by the helper), and allow useful |
|
formatting: reduce all consecutive whitespace to a single space, |
|
and remove all HTML |
|
|
|
=cut |
|
|
# This normalizes a string to reduce fragility in the lexicon files of |
|
# huge messages (such as are used by the helper), and allow useful |
|
# formatting: reduce all consecutive whitespace to a single space, |
|
# and remove all HTML |
|
sub normalize_string { |
sub normalize_string { |
my $s = shift; |
my $s = shift; |
$s =~ s/\s+/ /g; |
$s =~ s/\s+/ /g; |
Line 495 sub normalize_string {
|
Line 433 sub normalize_string {
|
return $s; |
return $s; |
} |
} |
|
|
# alias for normalize_string; recommend using it only in the lexicon |
=pod |
|
|
|
=item * ns |
|
|
|
alias for normalize_string; recommend using it only in the lexicon |
|
|
|
=cut |
|
|
sub ns { |
sub ns { |
return normalize_string(@_); |
return normalize_string(@_); |
} |
} |
|
|
# mtn: call the mt function and the normalization function easily. |
=pod |
# Returns original non-normalized string if there was no translation |
|
|
=item * mtn |
|
|
|
mtn: call the mt function and the normalization function easily. |
|
Returns original non-normalized string if there was no translation |
|
|
|
=cut |
|
|
sub mtn (@) { |
sub mtn (@) { |
my @args = @_; # don't want to modify caller's string; if we |
my @args = @_; # don't want to modify caller's string; if we |
# didn't care about that we could set $_[0] |
# didn't care about that we could set $_[0] |