version 1.52, 2008/11/28 14:36:55
|
version 1.60.4.2, 2010/12/06 00:35:19
|
Line 173 require Exporter;
|
Line 173 require Exporter;
|
our @ISA = qw (Exporter); |
our @ISA = qw (Exporter); |
our @EXPORT = qw(mt mtn ns mt_user); |
our @EXPORT = qw(mt mtn ns mt_user); |
|
|
|
my %mtcache=(); |
|
|
# ========================================================= The language handle |
# ========================================================= The language handle |
|
|
use vars qw($lh); |
use vars qw($lh $current_language); |
|
|
# ===================================================== The "MakeText" function |
# ===================================================== The "MakeText" function |
|
|
Line 191 sub mt (@) {
|
Line 193 sub mt (@) {
|
return $_[0]; |
return $_[0]; |
} |
} |
} else { |
} else { |
return $lh->maketext(@_); |
if ($#_>0) { return $lh->maketext(@_); } |
|
if ($mtcache{$current_language.':'.$_[0]}) { |
|
return $mtcache{$current_language.':'.$_[0]}; |
|
} |
|
my $translation=$lh->maketext(@_); |
|
$mtcache{$current_language.':'.$_[0]}=$translation; |
|
return $translation; |
} |
} |
} else { |
} else { |
if (wantarray) { |
if (wantarray) { |
Line 234 sub current_language {
|
Line 242 sub current_language {
|
} |
} |
|
|
sub preferred_languages { |
sub preferred_languages { |
|
my $defdom = &Apache::lonnet::default_login_domain(); |
|
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'},$defdom) { |
|
next if ($domtype eq ''); |
|
if ($domtype =~ /^\w+ci/) { |
|
return ($domtype); |
|
} elsif ($domtype =~ /^(\w+c)itest$/) { |
|
return ($1.'t'); |
|
} else { |
|
return ('gci'); |
|
} |
|
} |
my @languages=(); |
my @languages=(); |
if (($Apache::lonnet::env{'request.role.adv'}) && ($Apache::lonnet::env{'form.languages'})) { |
if (($Apache::lonnet::env{'request.role.adv'}) && ($Apache::lonnet::env{'form.languages'})) { |
@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'form.languages'})); |
@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$Apache::lonnet::env{'form.languages'})); |
Line 254 sub preferred_languages {
|
Line 273 sub preferred_languages {
|
push(@languages,@browser); |
push(@languages,@browser); |
} |
} |
|
|
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'}, |
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'},$defdom) { |
$Apache::lonnet::perlvar{'lonDefDomain'}) { |
|
if ($domtype ne '') { |
if ($domtype ne '') { |
my %domdefs = &Apache::lonnet::get_domain_defaults($domtype); |
my %domdefs = &Apache::lonnet::get_domain_defaults($domtype); |
if ($domdefs{'lang_def'} ne '') { |
if ($domdefs{'lang_def'} ne '') { |
Line 287 sub get_genlanguages {
|
Line 305 sub get_genlanguages {
|
|
|
sub current_encoding { |
sub current_encoding { |
my $default='UTF-8'; |
my $default='UTF-8'; |
if ($Apache::lonnet::env{'browser.os'} eq 'win' && |
# UTF-8 character encoding needed for the whole LON-CAPA system |
$Apache::lonnet::env{'browser.type'} eq 'explorer') { |
# (interface language and homework problem content) |
$default='ISO-8859-1'; |
# See Bugzilla 5702 vs. 2189 and 4067 |
} |
# if ($Apache::lonnet::env{'browser.os'} eq 'win' && |
|
# $Apache::lonnet::env{'browser.type'} eq 'explorer') { |
|
# $default='ISO-8859-1'; |
|
# } |
if ($lh) { |
if ($lh) { |
my $enc=$lh->maketext('char_encoding'); |
my $enc=$lh->maketext('char_encoding'); |
return ($enc eq 'char_encoding'?$default:$enc); |
return ($enc eq 'char_encoding'?$default:$enc); |
Line 332 sub get_language_handle {
|
Line 353 sub get_language_handle {
|
my @languages=&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); |
|
$current_language=¤t_language(); |
if ($r) { |
if ($r) { |
$r->content_languages([¤t_language()]); |
$r->content_languages([¤t_language()]); |
} |
} |
Line 340 sub get_language_handle {
|
Line 362 sub get_language_handle {
|
|
|
# ========================================================== Localize localtime |
# ========================================================== Localize localtime |
sub gettimezone { |
sub gettimezone { |
my $timezone; |
my ($timezone) = @_; |
if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}) { |
if ($timezone ne '') { |
$timezone = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}; |
if (!DateTime::TimeZone->is_valid_name($timezone)) { |
} elsif ($Apache::lonnet::env{'request.course.id'} ne '') { |
$timezone = 'local'; |
my $cdom = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.domain'}; |
} |
if ($cdom ne '') { |
return $timezone; |
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
} |
if ($domdefaults{'timezone_def'} ne '') { |
my $cid = $Apache::lonnet::env{'request.course.id'}; |
$timezone = $domdefaults{'timezone_def'}; |
if ($cid ne '') { |
|
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 373 sub gettimezone {
|
Line 404 sub gettimezone {
|
} |
} |
|
|
sub locallocaltime { |
sub locallocaltime { |
my $thistime=shift; |
my ($thistime,$timezone) = @_; |
|
|
if (!defined($thistime) || $thistime eq '') { |
if (!defined($thistime) || $thistime eq '') { |
return &mt('Never'); |
return &mt('Never'); |
} |
} |
Line 387 sub locallocaltime {
|
Line 419 sub locallocaltime {
|
} |
} |
|
|
my $dt = DateTime->from_epoch(epoch => $thistime) |
my $dt = DateTime->from_epoch(epoch => $thistime) |
->set_time_zone(&gettimezone()); |
->set_time_zone(gettimezone($timezone)); |
|
|
|
# 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)"); |