Diff for /loncom/localize/lonlocal.pm between versions 1.14 and 1.48

version 1.14, 2003/09/28 02:06:37 version 1.48, 2008/09/13 02:37:29
Line 162  package Apache::lonlocal; Line 162  package Apache::lonlocal;
   
 use strict;  use strict;
 use Apache::localize;  use Apache::localize;
 use Apache::File;  
 use locale;  use locale;
 use POSIX qw(locale_h);  use POSIX qw(locale_h strftime);
   use DateTime();
   use DateTime::TimeZone;
   
 require Exporter;  require Exporter;
   
 our @ISA = qw (Exporter);  our @ISA = qw (Exporter);
 our @EXPORT = qw(mt);  our @EXPORT = qw(mt mtn ns mt_user);
   
 my $reroute;  
   
 # ========================================================= The language handle  # ========================================================= The language handle
   
Line 180  use vars qw($lh); Line 179  use vars qw($lh);
 # ===================================================== The "MakeText" function  # ===================================================== The "MakeText" function
   
 sub mt (@) {  sub mt (@) {
     unless ($ENV{'environment.translator'}) {  #    open(LOG,'>>/home/www/loncapa/loncom/localize/localize/newphrases.txt');
  if ($lh) {  #    print LOG (@_[0]."\n");
     return $lh->maketext(@_);  #    close(LOG);
  } else {      if ($lh) {
     return @_;          if ($_[0] eq '') {
  }              if (wantarray) {
                   return @_;
               } else {
                   return $_[0];
               }
           } else {
               return $lh->maketext(@_);
           }
     } else {      } else {
  if ($lh) {   if (wantarray) {
     my $trans=$lh->maketext(@_);  
     my $link='<a target="trans" href="/cgi-bin/translator.pl?arg1='.  
  &Apache::lonnet::escape($_[0]).'&arg2='.  
  &Apache::lonnet::escape($_[1]).'&arg3='.  
  &Apache::lonnet::escape($_[2]).'&lang='.  
  $ENV{'environment.translator'}.  
  '">[['.$trans.']]</a>';  
     if ($ENV{'transreroute'}) {  
  $reroute.=$link;  
  return $trans;  
     } else {  
  return $link;  
     }  
  } else {  
     return @_;      return @_;
    } else {
       return $_[0];
  }   }
     }      }
 }  }
   
   sub mt_user {
       my ($user_lh,@what) = @_;
       if ($user_lh) {
           if ($what[0] eq '') {
               if (wantarray) {
                   return @what;
               } else {
                   return $what[0];
               }
           } else {
               return $user_lh->maketext(@what);
           }
       } else {
           if (wantarray) {
               return @what;
           } else {
               return $what[0];
           }
       }
   }
   
 # ============================================================== What language?  # ============================================================== What language?
   
 sub current_language {  sub current_language {
     my $lang=$lh->maketext('language_code');      if ($lh) {
     return ($lang eq 'language_code'?'en':$lang);   my $lang=$lh->maketext('language_code');
    return ($lang eq 'language_code'?'en':$lang);
       }
       return 'en';
 }  }
   
 # ============================================================== What encoding?  # ============================================================== What encoding?
   
 sub current_encoding {  sub current_encoding {
       my $default='UTF-8';
       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'?'':$enc);   return ($enc eq 'char_encoding'?$default:$enc);
       } else {
    return $default;
       }
   }
   
   # =============================================================== Which locale?
   # Refer to locale -a
   #
   sub current_locale {
       if ($lh) {
    my $enc=$lh->maketext('lang_locale');
    return ($enc eq 'lang_locale'?'':$enc);
     } else {      } else {
  return undef;   return undef;
     }      }
Line 234  sub texthash { Line 269  sub texthash {
     }      }
     return %hash;      return %hash;
 }  }
 # ======================================================== Re-route translation  
   
 sub clearreroutetrans {  # ========= Get a handle (do not invoke in vain, leave this to access handlers)
     &reroutetrans();  
     $reroute='';  
 }  
   
 # ======================================================== Re-route translation  sub get_language_handle {
       my $r=shift;
       if ($r) {
    my $headers=$r->headers_in;
    $ENV{'HTTP_ACCEPT_LANGUAGE'}=$headers->{'Accept-language'};
       }
       my @languages=&Apache::loncommon::preferred_languages;
       $ENV{'HTTP_ACCEPT_LANGUAGE'}='';
       $lh=Apache::localize->get_handle(@languages);
       if ($r) {
    $r->content_languages([&current_language()]);
       }
   ###    setlocale(LC_ALL,&current_locale);
   }
   
 sub reroutetrans {  # ========================================================== Localize localtime
     $ENV{'transreroute'}=1;  sub gettimezone {
       my $timezone; 
       if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}) {
           $timezone = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'};    
       } 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{'timezone_def'} ne '') {
                   $timezone = $domdefaults{'timezone_def'};
               }
           }
       }
       if ($timezone ne '') {
           if (DateTime::TimeZone->is_valid_name($timezone)) {
               return $timezone;
           }
       }
       return 'local';
 }  }
   
 # ==================================================== End re-route translation  sub locallocaltime {
 sub endreroutetrans {      my $thistime=shift;
     $ENV{'transreroute'}=0;      if (!defined($thistime) || $thistime eq '') {
     if ($ENV{'environment.translator'}) {   return &mt('Never');
  return $reroute;      }
       if (($thistime < 0) || ($thistime eq 'NaN')) {
           &Apache::lonnet::logthis("Unexpected time (negative or NaN) '$thistime' passed to lonlocal::locallocaltime");  
           return &mt('Never');
       }
       if ($thistime !~ /^\d+$/) {
           &Apache::lonnet::logthis("Unexpected non-numeric time '$thistime' passed to lonlocal::locallocaltime");
           return &mt('Never');
       }
   
       my $dt = DateTime->from_epoch(epoch => $thistime)
                        ->set_time_zone(&gettimezone());
       if ((&current_language=~/^en/) || (!$lh)) {
   
    return $dt->strftime("%a %b %e %I:%M:%S %P %Y (%Z)");
     } else {      } else {
  return '';   my $format=$lh->maketext('date_locale');
    if ($format eq 'date_locale') {
       return $dt->strftime("%a %b %e %I:%M:%S %P %Y (%Z)");
    }
    my $time_zone  = $dt->time_zone_short_name();
    my $seconds    = $dt->second();
    my $minutes    = $dt->minute();
    my $twentyfour = $dt->hour();
    my $day        = $dt->day_of_month();
    my $mon        = $dt->month()-1;
    my $year       = $dt->year();
    my $wday       = $dt->wday();
           if ($wday==7) { $wday=0; }
    my $month  =(split(/\,/,$lh->maketext('date_months')))[$mon];
    my $weekday=(split(/\,/,$lh->maketext('date_days')))[$wday];
    if ($seconds<10) {
       $seconds='0'.$seconds;
    }
    if ($minutes<10) {
       $minutes='0'.$minutes;
    }
    my $twelve=$twentyfour;
    my $ampm;
    if ($twelve>12) {
       $twelve-=12;
       $ampm=$lh->maketext('date_pm');
    } else {
       $ampm=$lh->maketext('date_am');
    }
    foreach ('seconds','minutes','twentyfour','twelve','day','year',
    'month','weekday','ampm') {
       $format=~s/\$$_/eval('$'.$_)/gse;
    }
    return $format." ($time_zone)";
     }      }
 }  }
   
 # ========= Get a handle (do not invoke in vain, leave this to access handlers)  # ==================== Normalize string (reduce fragility in the lexicon files)
   
 sub get_language_handle {  # This normalizes a string to reduce fragility in the lexicon files of
     my $r=shift;  # huge messages (such as are used by the helper), and allow useful
     $lh=Apache::localize->get_handle(&Apache::loncommon::preferred_languages);  # formatting: reduce all consecutive whitespace to a single space,
     if (&Apache::lonnet::mod_perl_version == 1) {  # and remove all HTML
  $r->content_languages([&current_language()]);  sub normalize_string {
       my $s = shift;
       $s =~ s/\s+/ /g;
       $s =~ s/<[^>]+>//g;
       # Pop off beginning or ending spaces, which aren't good
       $s =~ s/^\s+//;
       $s =~ s/\s+$//;
       return $s;
   }
   
   # alias for normalize_string; recommend using it only in the lexicon
   sub ns {
       return normalize_string(@_);
   }
   
   # mtn: call the mt function and the normalization function easily.
   # Returns original non-normalized string if there was no translation
   sub mtn (@) {
       my @args = @_; # don't want to modify caller's string; if we
      # didn't care about that we could set $_[0]
      # directly
       $args[0] = normalize_string($args[0]);
       my $translation = &mt(@args);
       if ($translation ne $args[0]) {
    return $translation;
       } else {
    return $_[0];
     }      }
     setlocale(LC_ALL,&current_language.'.'.&current_encoding);  }
   
   # ---------------------------------------------------- Replace MT{...} in files
   
   sub transstatic {
       my $strptr=shift;
       $$strptr=~s/MT\{([^\}]*)\}/&mt($1)/gse;
   }
   
   =pod 
   
   =item * mt_escape
   
   mt_escape takes a string reference and escape the [] in there so mt
   will leave them as is and not try to expand them
   
   =cut
   
   sub mt_escape {
       my ($str_ref) = @_;
       $$str_ref =~s/~/~~/g;
       $$str_ref =~s/([\[\]])/~$1/g;
 }  }
   
 1;  1;

Removed from v.1.14  
changed lines
  Added in v.1.48


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.