version 1.50.2.2, 2009/01/05 16:55:04
|
version 1.58, 2009/05/04 21:44:00
|
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 287 sub get_genlanguages {
|
Line 295 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 343 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 347 sub gettimezone {
|
Line 359 sub gettimezone {
|
} |
} |
return $timezone; |
return $timezone; |
} |
} |
my $cid = $Apache::lonnet::env{'request.course.id'}; |
my $cid = $Apache::lonnet::env{'request.course.id'}; |
if ($cid ne '') { |
if ($cid ne '') { |
if ($Apache::lonnet::env{'course.'.$cid.'.timezone'}) { |
if ($Apache::lonnet::env{'course.'.$cid.'.timezone'}) { |
$timezone = $Apache::lonnet::env{'course.'.$cid.'.timezone'}; |
$timezone = $Apache::lonnet::env{'course.'.$cid.'.timezone'}; |
} else { |
} else { |
my $cdom = $Apache::lonnet::env{'course.'.$cid.'.domain'}; |
my $cdom = $Apache::lonnet::env{'course.'.$cid.'.domain'}; |
if ($cdom ne '') { |
if ($cdom ne '') { |
Line 381 sub gettimezone {
|
Line 393 sub gettimezone {
|
return 'local'; |
return 'local'; |
} |
} |
|
|
|
our $timezone_local; |
|
|
sub locallocaltime { |
sub locallocaltime { |
my ($thistime,$timezone) = @_; |
my ($thistime,$timezone,$datetime) = @_; |
|
|
if (!defined($thistime) || $thistime eq '') { |
if (!defined($thistime) || $thistime eq '') { |
return &mt('Never'); |
return &mt('Never'); |
} |
} |
Line 395 sub locallocaltime {
|
Line 410 sub locallocaltime {
|
return &mt('Never'); |
return &mt('Never'); |
} |
} |
|
|
my $dt = DateTime->from_epoch(epoch => $thistime) |
my $dt; |
->set_time_zone(&gettimezone($timezone)); |
my $convert_time; |
|
|
|
#### START # Speed up if this function is called often #### |
|
|
|
# Is a $datetime parameter set? |
|
if(defined($datetime)) { |
|
# Check for an instance of a DateTime object |
|
if(!(defined $$datetime)) { |
|
# No object, create one |
|
$$datetime = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
$dt = $$datetime; |
|
} else { |
|
# If the return-value is "local", we have to convert it for DateTime |
|
|
|
# Converts the "local"-String only once |
|
if(!defined($timezone_local)) |
|
{ |
|
$timezone_local = DateTime::TimeZone->new( name => gettimezone('local'))->name(); |
|
} |
|
|
|
my $timezone_now; |
|
|
|
if(gettimezone($timezone) == 'local') |
|
{ |
|
$timezone_now = $timezone_local; |
|
} else { |
|
$timezone_now = gettimezone($timezone); |
|
} |
|
|
|
# Has the timezone changed? |
|
if($timezone_now eq $$datetime->time_zone_short_name() || |
|
$timezone_now eq $$datetime->time_zone_long_name()) |
|
{ |
|
# There is already an object (dereference) |
|
$dt = $$datetime; |
|
|
|
# We need this as temporary value |
|
$convert_time = DateTime->from_epoch( epoch => $thistime ); |
|
#->set_time_zone('floating'); |
|
|
|
# Preventing a set_time_zone call (time consuming) |
|
# Using old instance of DateTime with timezone |
|
$dt->set( year => $convert_time->year(), |
|
month => $convert_time->month(), |
|
day => $convert_time->day(), |
|
hour => $convert_time->hour(), |
|
minute => $convert_time->minute(), |
|
second => $convert_time->second() ); |
|
} else { |
|
# The timezone has changed since last time |
|
$$datetime = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
$dt = $$datetime; |
|
} |
|
} |
|
} else { |
|
# There is no $datetime parameter |
|
$dt = DateTime->from_epoch(epoch => $thistime) |
|
->set_time_zone(&gettimezone($timezone)); |
|
} |
|
#### END # Speed up if this function is called often #### |
|
|
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 469 sub getdatelocale {
|
Line 546 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 486 sub normalize_string {
|
Line 569 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] |