Diff for /loncom/localize/lonlocal.pm between versions 1.13 and 1.33

version 1.13, 2003/09/23 03:02:37 version 1.33, 2005/04/18 22:17:45
Line 144  like this: Line 144  like this:
     'No purchase necessary. Illegal where not allowed.'      'No purchase necessary. Illegal where not allowed.'
  => 'Es ist erlaubt, einfach zu verlieren, und das ist Ihre Schuld.'   => 'Es ist erlaubt, einfach zu verlieren, und das ist Ihre Schuld.'
   
 The German translation lexicon is in pretty okay shape, but not   
 complete yet. Portuguese currently only covers the login screen.   
 Russian is purely experimental. Looks like UTF-8 is the way to encode   
 this, at least for latin/greek-based languages, but we still have to   
 learn a lot.  
   
 Comments may be added with the # symbol, which outside of a string  Comments may be added with the # symbol, which outside of a string
 (the things with the apostrophe surrounding them, which are the   (the things with the apostrophe surrounding them, which are the 
Line 166  but for most purposes, we do not have to Line 161  but for most purposes, we do not have to
 package Apache::lonlocal;  package Apache::lonlocal;
   
 use strict;  use strict;
   use Apache::Constants qw(:common);
 use Apache::localize;  use Apache::localize;
 use Apache::File;  use Apache::File;
   use locale;
   use POSIX qw(locale_h);
   
 require Exporter;  require Exporter;
   
 our @ISA = qw (Exporter);  our @ISA = qw (Exporter);
 our @EXPORT = qw(mt);  our @EXPORT = qw(mt mtn ns);
   
 my $reroute;  
   
 # ========================================================= The language handle  # ========================================================= The language handle
   
Line 183  use vars qw($lh); Line 179  use vars qw($lh);
 # ===================================================== The "MakeText" function  # ===================================================== The "MakeText" function
   
 sub mt (@) {  sub mt (@) {
     unless ($ENV{'environment.translator'}) {  #    my $fh=Apache::File->new('>>/home/www/loncapa/loncom/localize/localize/newphrases.txt');
  if ($lh) {  #    print $fh @_[0]."\n";
     return $lh->maketext(@_);  #    $fh->close();
  } else {      if ($lh) {
     return @_;   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];
  }   }
     }      }
 }  }
Line 213  sub mt (@) { Line 196  sub mt (@) {
 # ============================================================== 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=undef;
       }
     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 237  sub texthash { Line 240  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='';  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 && &Apache::lonnet::mod_perl_version == 1) {
    $r->content_languages([&current_language()]);
       }
   ###    setlocale(LC_ALL,&current_locale);
 }  }
   
 # ======================================================== Re-route translation  # ========================================================== Localize localtime
   
 sub reroutetrans {  sub locallocaltime {
     $ENV{'transreroute'}=1;      my $thistime=shift;
       if ((&current_language=~/^en/) || (!$lh)) {
    return ''.localtime($thistime);
       } else {
    my $format=$lh->maketext('date_locale');
    if ($format eq 'date_locale') {
       return ''.localtime($thistime);
    }
    my ($seconds,$minutes,$twentyfour,$day,$mon,$year,$wday,$yday,$isdst)=
       localtime($thistime);
    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;
    }
    $year+=1900;
    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;
       }
 }  }
   
 # ==================================================== End re-route translation  # ==================== Normalize string (reduce fragility in the lexicon files)
 sub endreroutetrans {  
     $ENV{'transreroute'}=0;  # This normalizes a string to reduce fragility in the lexicon files of
     if ($ENV{'environment.translator'}) {  # huge messages (such as are used by the helper), and allow useful
  return $reroute;  # formatting: reduce all consecutive whitespace to a single space,
   # and remove all HTML
   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 {      } else {
  return '';   return $_[0];
     }      }
 }  }
   
 # ========= Get a handle (do not invoke in vain, leave this to access handlers)  # ---------------------------------------------------- Replace MT{...} in files
   
 sub get_language_handle {  sub transstatic {
       my $strptr=shift;
       $$strptr=~s/MT\{([^\}]*)\}/&mt($1)/gse;
   }
   
   # ----------------------------------------------- Handler Routine /adm/localize
   sub handler {
     my $r=shift;      my $r=shift;
     $lh=Apache::localize->get_handle(&Apache::loncommon::preferred_languages);      &Apache::lonlocal::get_language_handle($r);
     if (&Apache::lonnet::mod_perl_version == 1) {      &Apache::loncommon::content_type($r,'text/html');
  $r->content_languages([&current_language()]);      $r->send_http_header;
     }      return OK if $r->header_only;
   
       my $uri=$r->uri;
       $uri=~s/^\/adm\/localize//;
       my $fn=$Apache::lonnet::perlvar{'lonDocRoot'}.$uri;
   
       my $file=&Apache::lonnet::getfile($fn);
       &transstatic(\$file);
       $r->print($file);
       return OK;
 }  }
   
 1;  1;

Removed from v.1.13  
changed lines
  Added in v.1.33


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>