[LON-CAPA-cvs] cvs: loncom /interface lonhelper.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Thu, 02 Oct 2003 21:05:42 -0000
This is a MIME encoded message
--bowersj21065128742
Content-Type: text/plain
bowersj2 Thu Oct 2 17:05:42 2003 EDT
Modified files:
/loncom/interface lonhelper.pm
Log:
Localizing lonhelper.
Also squashed a new bug in the helper; seems the behavior of the
Time::Local::timelocal has changed; instead of coercing Feb. 31 into
Mar. 3, it dies. May be related to locale change, may be a change in
newer perls. Don't care to investigate, since this new code will catch
either dieing or silent coercion and use it as an error. (Dieing was
impolite, though, hosed the server for no good reason. I would have left
the old behavion and added a 'strict' parameter, I think...)
--bowersj21065128742
Content-Type: text/plain
Content-Disposition: attachment; filename="bowersj2-20031002170542.txt"
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.49 loncom/interface/lonhelper.pm:1.50
--- loncom/interface/lonhelper.pm:1.49 Tue Sep 30 13:25:48 2003
+++ loncom/interface/lonhelper.pm Thu Oct 2 17:05:42 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# .helper XML handler to implement the LON-CAPA helper
#
-# $Id: lonhelper.pm,v 1.49 2003/09/30 17:25:48 bowersj2 Exp $
+# $Id: lonhelper.pm,v 1.50 2003/10/02 21:05:42 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -172,12 +172,20 @@
when you are done. See lonprintout.pm for examples of this usage in the
printHelper subroutine.
+=head2 Localization
+
+The helper framework tries to handle as much localization as
+possible. The text is always run through
+Apache::lonlocal::normalize_string, so be sure to run the keys through
+that function for maximum usefulness and robustness.
+
=cut
package Apache::lonhelper;
use Apache::Constants qw(:common);
use Apache::File;
use Apache::lonxml;
+use Apache::lonlocal;
# Register all the tags with the helper, so the helper can
# push and pop them
@@ -257,9 +265,9 @@
# Send header, don't cache this page
if ($r->header_only) {
if ($ENV{'browser.mathml'}) {
- $r->content_type('text/xml');
+ $r->content_type('text/xml; charset=UTF-8');
} else {
- $r->content_type('text/html');
+ $r->content_type('text/html; charset=UTF-8');
}
$r->send_http_header;
return OK;
@@ -359,9 +367,10 @@
package Apache::lonhelper::helper;
use Digest::MD5 qw(md5_hex);
-use HTML::Entities;
+use HTML::Entities();
use Apache::loncommon;
use Apache::File;
+use Apache::lonlocal;
sub new {
my $proto = shift;
@@ -523,7 +532,7 @@
# Phase 1: Post processing for state of previous screen (which is actually
# the "current state" in terms of the helper variables), if it wasn't the
# beginning state.
- if ($self->{STATE} ne "START" || $ENV{"form.SUBMIT"} eq "Next ->") {
+ if ($self->{STATE} ne "START" || $ENV{"form.SUBMIT"} eq &mt("Next ->")) {
my $prevState = $self->{STATES}{$self->{STATE}};
$prevState->postprocess();
}
@@ -574,13 +583,19 @@
}
# Phase 4: Display.
- my $stateTitle = $state->title();
- my $bodytag = &Apache::loncommon::bodytag("$self->{TITLE}",'','');
+ my $stateTitle = &mt($state->title());
+ my $helperTitle = &mt($self->{TITLE});
+ my $bodytag = &Apache::loncommon::bodytag($helperTitle,'','');
+ my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');
+ my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');
+ # FIXME: This should be parameterized, not concatenated - Jeremy
+ my $loncapaHelper = &mt("LON-CAPA Helper:");
$result .= <<HEADER;
<html>
<head>
- <title>LON-CAPA Helper: $self->{TITLE}</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>$loncapaHelper: $helperTitle</title>
</head>
$bodytag
HEADER
@@ -607,12 +622,12 @@
}
if ($self->{DONE}) {
my $returnPage = $self->{RETURN_PAGE};
- $result .= "<a href=\"$returnPage\">End Helper</a>";
+ $result .= "<a href=\"$returnPage\">" . &mt("End Helper") . "</a>";
}
else {
$result .= '<nobr><input name="back" type="button" ';
- $result .= 'value="<- Previous" onclick="history.go(-1)" /> ';
- $result .= '<input name="SUBMIT" type="submit" value="Next ->" /></nobr>';
+ $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';
+ $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></nobr>';
}
}
@@ -626,12 +641,12 @@
}
if ($self->{DONE}) {
my $returnPage = $self->{RETURN_PAGE};
- $result .= "<a href=\"$returnPage\">End Helper</a>";
+ $result .= "<a href=\"$returnPage\">" . &mt('End Helper') . "</a>";
}
else {
$result .= '<nobr><input name="back" type="button" ';
- $result .= 'value="<- Previous" onclick="history.go(-1)" /> ';
- $result .= '<input name="SUBMIT" type="submit" value="Next ->" /></nobr>';
+ $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';
+ $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></nobr>';
}
}
@@ -883,6 +898,7 @@
sub end_defaultvalue { return ''; }
+# Validators may need to take language specifications
sub start_validator {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
@@ -952,11 +968,17 @@
This is also a good template for creating your own new states, as it has
very little code beyond the state template.
+=head3 Localization
+
+The contents of the message tag will be run through the
+normalize_string function and that will be used as a call to &mt.
+
=cut
no strict;
@ISA = ("Apache::lonhelper::element");
use strict;
+use Apache::lonlocal;
BEGIN {
&Apache::lonhelper::register('Apache::lonhelper::message',
@@ -998,7 +1020,7 @@
sub render {
my $self = shift;
- return $self->{MESSAGE_TEXT};
+ return &mtn($self->{MESSAGE_TEXT});
}
# If a NEXTSTATE was given, switch to it
sub postprocess {
@@ -1100,6 +1122,7 @@
no strict;
@ISA = ("Apache::lonhelper::element");
use strict;
+use Apache::lonlocal;
BEGIN {
&Apache::lonhelper::register('Apache::lonhelper::choices',
@@ -1253,7 +1276,7 @@
$choiceLabel = eval($choiceLabel);
$choiceLabel = &$choiceLabel($helper, $self);
}
- $result .= "/></td><td> " . $choiceLabel . "</td></tr>\n";
+ $result .= "/></td><td> " . &mtn($choiceLabel) . "</td></tr>\n";
}
$result .= "</table>\n\n\n";
$result .= $buttons;
@@ -1312,9 +1335,13 @@
=cut
+# This really ought to be a sibling class to "choice" which is itself
+# a child of some abstract class.... *shrug*
+
no strict;
@ISA = ("Apache::lonhelper::element");
use strict;
+use Apache::lonlocal;
BEGIN {
&Apache::lonhelper::register('Apache::lonhelper::dropdown',
@@ -1404,7 +1431,7 @@
$choiceLabel = eval($choiceLabel);
$choiceLabel = &$choiceLabel($helper, $self);
}
- $result .= ">" . $choiceLabel . "\n";
+ $result .= ">" . &mtn($choiceLabel) . "\n";
}
$result .= "</select>\n";
@@ -1473,6 +1500,7 @@
no strict;
@ISA = ("Apache::lonhelper::element");
use strict;
+use Apache::lonlocal; # A localization nightmare
use Time::localtime;
@@ -1537,7 +1565,7 @@
} else {
$result .= "<option value='$i'>";
}
- $result .= $months[$i] . "</option>\n";
+ $result .= &mt($months[$i]) . "</option>\n";
}
$result .= "</select>\n";
@@ -1624,17 +1652,26 @@
$hour = $ENV{'form.' . $var . 'hour'};
}
- my $chosenDate = Time::Local::timelocal(0, $min, $hour, $day, $month, $year);
+ my $chosenDate;
+ eval {$chosenDate = Time::Local::timelocal(0, $min, $hour, $day, $month, $year);};
+ my $error = $@;
+
# Check to make sure that the date was not automatically co-erced into a
# valid date, as we want to flag that as an error
# This happens for "Feb. 31", for instance, which is coerced to March 2 or
- # 3, depending on if it's a leapyear
+ # 3, depending on if it's a leap year
my $checkDate = localtime($chosenDate);
- if ($checkDate->mon != $month || $checkDate->mday != $day ||
+ if ($error || $checkDate->mon != $month || $checkDate->mday != $day ||
$checkDate->year + 1900 != $year) {
+ unless (Apache::lonlocal::current_language()== ~/^en/) {
+ $self->{ERROR_MSG} = &mt("Invalid date entry");
+ return 0;
+ }
+ # LOCALIZATION FIXME: Needs to be parameterized
$self->{ERROR_MSG} = "Can't use " . $months[$month] . " $day, $year as a "
. "date because it doesn't exist. Please enter a valid date.";
+
return 0;
}
--bowersj21065128742--