--- loncom/localize/lonlocal.pm 2003/10/11 14:06:01 1.24
+++ loncom/localize/lonlocal.pm 2005/04/18 22:17:45 1.33
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Localization routines
#
-# $Id: lonlocal.pm,v 1.24 2003/10/11 14:06:01 www Exp $
+# $Id: lonlocal.pm,v 1.33 2005/04/18 22:17:45 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -161,6 +161,7 @@ but for most purposes, we do not have to
package Apache::lonlocal;
use strict;
+use Apache::Constants qw(:common);
use Apache::localize;
use Apache::File;
use locale;
@@ -171,8 +172,6 @@ require Exporter;
our @ISA = qw (Exporter);
our @EXPORT = qw(mt mtn ns);
-my $reroute;
-
# ========================================================= The language handle
use vars qw($lh);
@@ -181,49 +180,19 @@ use vars qw($lh);
sub mt (@) {
# my $fh=Apache::File->new('>>/home/www/loncapa/loncom/localize/localize/newphrases.txt');
-# print $fh join('',@_)."\n";
+# print $fh @_[0]."\n";
# $fh->close();
- unless ($ENV{'environment.translator'}) {
- if ($lh) {
- return $lh->maketext(@_);
- } else {
- return @_;
- }
+ if ($lh) {
+ return $lh->maketext(@_);
} else {
- if ($lh) {
- my $trans=$lh->maketext(@_);
- my $link='[['.$trans.']]';
- if ($ENV{'transreroute'}) {
- $reroute.=$link;
- return $trans;
- } else {
- return $link;
- }
- } else {
+ if (wantarray) {
return @_;
+ } else {
+ return $_[0];
}
}
}
-# ================================================================ The tag
-
-BEGIN {
-}
-
-sub start_mt {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- return &mt(&Apache::lonxml::get_all_text("/mt",$parser));
-}
-
-sub end_mt {
- return '';
-}
-
# ============================================================== What language?
sub current_language {
@@ -237,11 +206,16 @@ sub current_language {
# ============================================================== What 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) {
my $enc=$lh->maketext('char_encoding');
- return ($enc eq 'char_encoding'?'':$enc);
+ return ($enc eq 'char_encoding'?$default:$enc);
} else {
- return undef;
+ return $default;
}
}
@@ -266,38 +240,21 @@ sub texthash {
}
return %hash;
}
-# ======================================================== Re-route translation
-
-sub clearreroutetrans {
- &reroutetrans();
- $reroute='';
-}
-
-# ======================================================== Re-route translation
-
-sub reroutetrans {
- $ENV{'transreroute'}=1;
-}
-
-# ==================================================== End re-route translation
-sub endreroutetrans {
- $ENV{'transreroute'}=0;
- if ($ENV{'environment.translator'}) {
- return $reroute;
- } else {
- return '';
- }
-}
# ========= Get a handle (do not invoke in vain, leave this to access handlers)
sub get_language_handle {
my $r=shift;
- $lh=Apache::localize->get_handle(&Apache::loncommon::preferred_languages);
- if (&Apache::lonnet::mod_perl_version == 1) {
+ 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([¤t_language()]);
}
- &Apache::lonxml::register('Apache::lonlocal',('mt'));
### setlocale(LC_ALL,¤t_locale);
}
@@ -376,6 +333,31 @@ sub mtn (@) {
}
}
+# ---------------------------------------------------- Replace MT{...} in files
+
+sub transstatic {
+ my $strptr=shift;
+ $$strptr=~s/MT\{([^\}]*)\}/&mt($1)/gse;
+}
+
+# ----------------------------------------------- Handler Routine /adm/localize
+sub handler {
+ my $r=shift;
+ &Apache::lonlocal::get_language_handle($r);
+ &Apache::loncommon::content_type($r,'text/html');
+ $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;
__END__