--- loncom/interface/loncommon.pm	2003/09/11 22:37:54	1.116
+++ loncom/interface/loncommon.pm	2003/09/17 16:50:58	1.119
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.116 2003/09/11 22:37:54 albertel Exp $
+# $Id: loncommon.pm,v 1.119 2003/09/17 16:50:58 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -68,6 +68,8 @@ use POSIX qw(strftime mktime);
 use Apache::Constants qw(:common :http :methods);
 use Apache::lonmsg();
 use Apache::lonmenu();
+use Apache::lonlocal;
+
 my $readit;
 
 =pod 
@@ -346,11 +348,11 @@ sub selectstudent_link {
 	   return '';
        }
        return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'");'."'>Select User</a>";
+        '","'.$udomele.'");'."'>".&mt('Select User')."</a>";
    }
    if ($ENV{'request.role'}=~/^(au|dc|su)/) {
        return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'",1);'."'>Select User</a>";
+        '","'.$udomele.'",1);'."'>".&mt('Select User')."</a>";
    }
    return '';
 }
@@ -382,7 +384,7 @@ ENDSTDBRW
 sub selectcourse_link {
    my ($form,$unameele,$udomele)=@_;
     return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'");'."'>Select Course</a>";
+        '","'.$udomele.'");'."'>".&mt('Select Course')."</a>";
 }
 
 =pod
@@ -514,7 +516,7 @@ END
     foreach my $value (sort(keys(%$hashref))) {
         $result.="    <option value=\"$value\" ";
         $result.=" selected=\"true\" " if ($value eq $firstdefault);
-        $result.=">$hashref->{$value}->{'text'}</option>\n";
+        $result.=">".&mt($hashref->{$value}->{'text'})."</option>\n";
     }
     $result .= "</select>\n";
     my %select2 = %{$hashref->{$firstdefault}->{'select2'}};
@@ -524,7 +526,7 @@ END
     foreach my $value (sort(keys(%select2))) {
         $result.="    <option value=\"$value\" ";        
         $result.=" selected=\"true\" " if ($value eq $seconddefault);
-        $result.=">$select2{$value}</option>\n";
+        $result.=">".&mt($select2{$value})."</option>\n";
     }
     $result .= "</select>\n";
     #    return $debug;
@@ -765,7 +767,7 @@ sub select_form {
     foreach (sort keys %hash) {
         $selectform.="<option value=\"$_\" ".
             ($_ eq $def ? 'selected' : '').
-                ">".$hash{$_}."</option>\n";
+                ">".&mt($hash{$_})."</option>\n";
     }
     $selectform.="</select>";
     return $selectform;
@@ -1611,16 +1613,8 @@ sub fileextensions {
 
 sub display_languages {
     my %languages=();
-    if ($ENV{'environment.languages'}) {
-	foreach (split(/\s*(\,|\;|\:)\s*/,$ENV{'environment.languages'})) {
-	    $languages{$_}=1;
-        }
-    }
-    if ($ENV{'course.'.$ENV{'request.course.id'}.'.languages'}) {
-	foreach (split(/\s*(\,|\;|\:)\s*/,
-	$ENV{'course.'.$ENV{'request.course.id'}.'.languages'})) {
-	    $languages{$_}=1;
-        }
+    foreach (&preferred_languages()) {
+	$languages{$_}=1;
     }
     &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);
     if ($ENV{'form.displaylanguage'}) {
@@ -1631,6 +1625,46 @@ sub display_languages {
     return %languages;
 }
 
+sub preferred_languages {
+    my @languages=();
+    if ($ENV{'environment.languages'}) {
+	@languages=split(/\s*(\,|\;|\:)\s*/,$ENV{'environment.languages'});
+    }
+    if ($ENV{'course.'.$ENV{'request.course.id'}.'.languages'}) {
+	@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,
+	         $ENV{'course.'.$ENV{'request.course.id'}.'.languages'}));
+    }
+    my $browser=(split(/\;/,$ENV{'HTTP_ACCEPT_LANGUAGE'}))[0];
+    if ($browser) {
+	@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$browser));
+    }
+    if ($Apache::lonnet::domain_lang_def{$ENV{'user.domain'}}) {
+	@languages=(@languages,
+		$Apache::lonnet::domain_lang_def{$ENV{'user.domain'}});
+    }
+    if ($Apache::lonnet::domain_lang_def{$ENV{'request.role.domain'}}) {
+	@languages=(@languages,
+		$Apache::lonnet::domain_lang_def{$ENV{'request.role.domain'}});
+    }
+    if ($Apache::lonnet::domain_lang_def{
+	                          $Apache::lonnet::perlvar{'lonDefDomain'}}) {
+	@languages=(@languages,
+		$Apache::lonnet::domain_lang_def{
+                                  $Apache::lonnet::perlvar{'lonDefDomain'}});
+    }
+# turn "en-ca" into "en-ca,en"
+    my @genlanguages;
+    foreach (@languages) {
+	unless ($_=~/\w/) { next; }
+	push (@genlanguages,$_);
+	if ($_=~/(\-|\_)/) {
+	    push (@genlanguages,(split(/(\-|\_)/,$_))[0]);
+	}
+    }
+    &Apache::lonnet::logthis('Lang: '.join(',',@genlanguages));
+    return @genlanguages;
+}
+
 ###############################################################
 ##               Student Answer Attempts                     ##
 ###############################################################
@@ -2059,6 +2093,7 @@ other decorations will be returned.
 
 sub bodytag {
     my ($title,$function,$addentries,$bodyonly,$domain,$forcereg)=@_;
+    $title=&mt($title);
     unless ($function) {
 	$function='student';
         if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {