--- loncom/localize/lonlocal.pm 2003/09/22 18:16:43 1.10
+++ loncom/localize/lonlocal.pm 2003/10/08 18:08:16 1.21
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Localization routines
#
-# $Id: lonlocal.pm,v 1.10 2003/09/22 18:16:43 bowersj2 Exp $
+# $Id: lonlocal.pm,v 1.21 2003/10/08 18:08:16 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -144,11 +144,6 @@ like this:
'No purchase necessary. Illegal where not allowed.'
=> '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
(the things with the apostrophe surrounding them, which are the
@@ -168,6 +163,8 @@ package Apache::lonlocal;
use strict;
use Apache::localize;
use Apache::File;
+use locale;
+use POSIX qw(locale_h);
require Exporter;
@@ -184,20 +181,28 @@ use vars qw($lh);
sub mt (@) {
unless ($ENV{'environment.translator'}) {
- return $lh->maketext(@_);
+ if ($lh) {
+ return $lh->maketext(@_);
+ } else {
+ return @_;
+ }
} else {
- my $trans=$lh->maketext(@_);
- my $link='[['.$trans.']]';
- if ($ENV{'transreroute'}) {
- $reroute.=$link;
- return $trans;
+ if ($lh) {
+ my $trans=$lh->maketext(@_);
+ my $link='[['.$trans.']]';
+ if ($ENV{'transreroute'}) {
+ $reroute.=$link;
+ return $trans;
+ } else {
+ return $link;
+ }
} else {
- return $link;
+ return @_;
}
}
}
@@ -205,14 +210,34 @@ sub mt (@) {
# ============================================================== What language?
sub current_language {
- return $lh->language_tag();
+ if ($lh) {
+ my $lang=$lh->maketext('language_code');
+ return ($lang eq 'language_code'?'en':$lang);
+ }
+ return 'en';
}
# ============================================================== What encoding?
sub current_encoding {
- my $enc=$lh->maketext('char_encoding');
- return ($enc eq 'char_encoding'?'':$enc);
+ if ($lh) {
+ my $enc=$lh->maketext('char_encoding');
+ return ($enc eq 'char_encoding'?'':$enc);
+ } else {
+ return undef;
+ }
+}
+
+# =============================================================== Which locale?
+# Refer to locale -a
+#
+sub current_locale {
+ if ($lh) {
+ my $enc=$lh->maketext('lang_locale');
+ return ($enc eq 'lang_locale'?'':$enc);
+ } else {
+ return undef;
+ }
}
# ============================================================== Translate hash
@@ -252,13 +277,63 @@ sub endreroutetrans {
sub get_language_handle {
my $r=shift;
$lh=Apache::localize->get_handle(&Apache::loncommon::preferred_languages);
- $r->content_languages(["¤t_language()"]);
- my $enc=¤t_encoding();
- if ($enc) {
+ if (&Apache::lonnet::mod_perl_version == 1) {
+ $r->content_languages([¤t_language()]);
+ }
+### setlocale(LC_ALL,¤t_locale);
+}
+
+# ========================================================== Localize localtime
+sub locallocaltime {
+ my $thistime=shift;
+ if ((¤t_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;
}
}
+# ==================== Normalize string (reduce fragility in the lexicon files)
+
+# This normalizes a string to reduce fragility in the lexicon files of
+# huge messages (such as are used by the helper), and allow useful
+# 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;
+ return $s;
+}
1;
__END__