version 1.58, 2009/05/04 21:44:00
|
version 1.66, 2015/06/09 21:23:15
|
Line 81 Inside might be something like this
|
Line 81 Inside might be something like this
|
if ($status eq 'WON') { |
if ($status eq 'WON') { |
$message='You have won.'; |
$message='You have won.'; |
} elsif ($status eq 'LOST') { |
} elsif ($status eq 'LOST') { |
$message='You are a total looser.'; |
$message='You are a total loser.'; |
} |
} |
return $message; |
return $message; |
} |
} |
Line 103 The first two examples are easy:
|
Line 103 The first two examples are easy:
|
if ($status eq 'WON') { |
if ($status eq 'WON') { |
$message='You have won.'; |
$message='You have won.'; |
} elsif ($status eq 'LOST') { |
} elsif ($status eq 'LOST') { |
$message='You are a total looser.'; |
$message='You are a total loser.'; |
} |
} |
return &mt($message); |
return &mt($message); |
} |
} |
Line 135 like this:
|
Line 135 like this:
|
'You have won.' |
'You have won.' |
=> 'Sie haben gewonnen.', |
=> 'Sie haben gewonnen.', |
|
|
'You are a total looser.' |
'You are a total loser.' |
=> 'Sie sind der totale Verlierer.', |
=> 'Sie sind der totale Verlierer.', |
|
|
'Rules' |
'Rules' |
Line 171 use DateTime::Locale;
|
Line 171 use DateTime::Locale;
|
require Exporter; |
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 js_escape html_escape); |
|
|
my %mtcache=(); |
my %mtcache=(); |
|
|
Line 262 sub preferred_languages {
|
Line 262 sub preferred_languages {
|
push(@languages,@browser); |
push(@languages,@browser); |
} |
} |
|
|
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'}, |
my $defdom = &Apache::lonnet::default_login_domain(); |
$Apache::lonnet::perlvar{'lonDefDomain'}) { |
foreach my $domtype ($Apache::lonnet::env{'user.domain'},$Apache::lonnet::env{'request.role.domain'},$defdom) { |
if ($domtype ne '') { |
if (($domtype ne '') && ($domtype ne 'public')) { |
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 '') { |
push(@languages,$domdefs{'lang_def'}); |
push(@languages,$domdefs{'lang_def'}); |
Line 295 sub get_genlanguages {
|
Line 295 sub get_genlanguages {
|
|
|
sub current_encoding { |
sub current_encoding { |
my $default='UTF-8'; |
my $default='UTF-8'; |
# UTF-8 character encoding needed for the whole LON-CAPA system |
unless ($Apache::lonnet::env{'browser.unicode'}) { |
# (interface language and homework problem content) |
if ($Apache::lonnet::env{'browser.os'} eq 'win' && |
# See Bugzilla 5702 vs. 2189 and 4067 |
$Apache::lonnet::env{'browser.type'} eq 'explorer') { |
# if ($Apache::lonnet::env{'browser.os'} eq 'win' && |
$default='ISO-8859-1'; |
# $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 326 sub current_locale {
|
Line 325 sub current_locale {
|
|
|
sub texthash { |
sub texthash { |
my %hash=@_; |
my %hash=@_; |
foreach (keys %hash) { |
foreach (keys(%hash)) { |
$hash{$_}=&mt($hash{$_}); |
$hash{$_}=&mt($hash{$_}); |
} |
} |
return %hash; |
return %hash; |
Line 335 sub texthash {
|
Line 334 sub texthash {
|
# ========= Get a handle (do not invoke in vain, leave this to access handlers) |
# ========= Get a handle (do not invoke in vain, leave this to access handlers) |
|
|
sub get_language_handle { |
sub get_language_handle { |
my $r=shift; |
my ($r,$chosen) = @_; |
if ($r) { |
if ($r) { |
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; |
|
if ($chosen ne '') { |
|
@languages=($chosen); |
|
} else { |
|
@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(); |
$current_language=¤t_language(); |
Line 378 sub gettimezone {
|
Line 382 sub gettimezone {
|
if ($uroledomdefs{'timezone_def'} ne '') { |
if ($uroledomdefs{'timezone_def'} ne '') { |
$timezone = $uroledomdefs{'timezone_def'}; |
$timezone = $uroledomdefs{'timezone_def'}; |
} |
} |
} elsif ($Apache::lonnet::env{'user.domain'} ne '') { |
} elsif (($Apache::lonnet::env{'user.domain'} ne '') && |
|
($Apache::lonnet::env{'user.domain'} ne 'public')) { |
my %udomdefaults = |
my %udomdefaults = |
&Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'}); |
&Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'}); |
if ($udomdefaults{'timezone_def'} ne '') { |
if ($udomdefaults{'timezone_def'} ne '') { |
Line 393 sub gettimezone {
|
Line 398 sub gettimezone {
|
return 'local'; |
return 'local'; |
} |
} |
|
|
our $timezone_local; |
|
|
|
sub locallocaltime { |
sub locallocaltime { |
my ($thistime,$timezone,$datetime) = @_; |
my ($thistime,$timezone) = @_; |
|
|
if (!defined($thistime) || $thistime eq '') { |
if (!defined($thistime) || $thistime eq '') { |
return &mt('Never'); |
return &mt('Never'); |
Line 410 sub locallocaltime {
|
Line 413 sub locallocaltime {
|
return &mt('Never'); |
return &mt('Never'); |
} |
} |
|
|
my $dt; |
my $dt = DateTime->from_epoch(epoch => $thistime) |
my $convert_time; |
->set_time_zone(gettimezone($timezone)); |
|
|
#### START # Speed up if this function is called often #### |
# TimeZone tries to determine the 'local' timezone from $ENV{TZ} if this |
|
# fails it searches through various system files. Under certain |
# Is a $datetime parameter set? |
# circumstances this is an extremly expensive operation. |
if(defined($datetime)) { |
# So after the first run we store the timezone in $ENV{TZ} to significantly |
# Check for an instance of a DateTime object |
# speed up future lookups. |
if(!(defined $$datetime)) { |
$ENV{TZ} = $dt->time_zone()->name() |
# No object, create one |
if (! $ENV{TZ} && gettimezone($timezone) eq 'local'); |
$$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)) { |
|
|
Line 625 sub mt_escape {
|
Line 575 sub mt_escape {
|
$$str_ref =~s/([\[\]])/~$1/g; |
$$str_ref =~s/([\[\]])/~$1/g; |
} |
} |
|
|
|
=pod |
|
|
|
=item * js_escape |
|
|
|
js_escape takes a string, string reference or hash reference, |
|
and escapes the values so that they can be used within a <script> element. |
|
It replaces all instances of \ by \\, ' by \', " by \" and \n by \\n. |
|
It is typically used with localized strings, which might contain quotes. |
|
|
|
=cut |
|
|
|
sub js_escape { |
|
my ($v) = @_; |
|
my $ref = ref($v); |
|
if ($ref eq 'SCALAR') { |
|
$$v =~ s/\\/\\\\/g; |
|
$$v =~ s/'/\\'/g; |
|
$$v =~ s/"/\\"/g; |
|
$$v =~ s/\n/\\n/g; |
|
} elsif ($ref eq 'HASH') { |
|
foreach my $key (keys %$v) { |
|
$v->{$key} =~ s/\\/\\\\/g; |
|
$v->{$key} =~ s/'/\\'/g; |
|
$v->{$key} =~ s/"/\\"/g; |
|
$v->{$key} =~ s/\n/\\n/g; |
|
} |
|
} else { |
|
$v =~ s/\\/\\\\/g; |
|
$v =~ s/'/\\'/g; |
|
$v =~ s/"/\\"/g; |
|
$v =~ s/\n/\\n/g; |
|
return $v; |
|
} |
|
} |
|
|
|
=pod |
|
|
|
=item * html_escape |
|
|
|
js_escape takes a string, string reference or hash reference, |
|
and escapes the values so that they can be used as HTML. |
|
It encodes <, >, &, ' and ". |
|
|
|
=cut |
|
|
|
sub html_escape { |
|
my ($v) = @_; |
|
my $ref = ref($v); |
|
if ($ref eq 'SCALAR') { |
|
$$v =~ s/&/&/g; |
|
$$v =~ s/</</g; |
|
$$v =~ s/>/>/g; |
|
$$v =~ s/'/'/g; |
|
$$v =~ s/"/"/g; |
|
} elsif ($ref eq 'HASH') { |
|
foreach my $key (keys %$v) { |
|
$v->{$key} =~ s/&/&/g; |
|
$v->{$key} =~ s/</</g; |
|
$v->{$key} =~ s/>/>/g; |
|
$v->{$key} =~ s/'/'/g; |
|
$v->{$key} =~ s/"/"/g; |
|
} |
|
} else { |
|
$v =~ s/&/&/g; |
|
$v =~ s/</</g; |
|
$v =~ s/>/>/g; |
|
$v =~ s/'/'/g; |
|
$v =~ s/"/"/g; |
|
return $v; |
|
} |
|
# NOTE: we could also turn \n into <br> if needed |
|
} |
|
|
|
=pod |
|
|
|
=item * choose_language |
|
|
|
choose_language prompts a user to enter a two letter language code via |
|
keyboard when running a script from the command line. Default is en. |
|
|
|
=cut |
|
|
|
sub choose_language { |
|
my %languages = ( |
|
ar => 'Arabic', |
|
de => 'German', |
|
en => 'English', |
|
es => 'Spanish', |
|
fa => 'Persian', |
|
fr => 'French', |
|
he => 'Hebrew', |
|
ja => 'Japanese', |
|
pt => 'Portuguese', |
|
ru => 'Russian', |
|
tr => 'Turkish', |
|
zh => 'Chinese (Simplified)' |
|
); |
|
my @posslangs = sort(keys(%languages)); |
|
my $langlist = join('|',@posslangs); |
|
my $lang = 'en'; |
|
print 'Language: English (en). Change? ['.$langlist.']? '; |
|
my $langchoice = <STDIN>; |
|
chomp($langchoice); |
|
$langchoice =~ s/(^\s+|\s+$)//g; |
|
$langchoice = lc($langchoice); |
|
if (defined($languages{$langchoice})) { |
|
$lang = $langchoice; |
|
} |
|
return $lang; |
|
} |
|
|
1; |
1; |
|
|
__END__ |
__END__ |