This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / rt / lib / RT / I18N.pm
index af5ece0..affff98 100644 (file)
@@ -1,8 +1,8 @@
-# {{{ BEGIN BPS TAGGED BLOCK
+# BEGIN BPS TAGGED BLOCK {{{
 # 
 # COPYRIGHT:
 #  
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC 
+# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
 #                                          <jesse@bestpractical.com>
 # 
 # (Except where explicitly superseded by other copyright notices)
@@ -42,7 +42,8 @@
 # works based on those contributions, and sublicense and distribute
 # those contributions and any derivatives thereof.
 # 
-# }}} END BPS TAGGED BLOCK
+# END BPS TAGGED BLOCK }}}
+
 =head1 NAME
 
 RT::I18N - a base class for localization of RT
@@ -98,9 +99,11 @@ ok(RT::I18N->Init);
 =cut
 
 sub Init {
+    require File::Glob;
+
     # Load language-specific functions
-    foreach my $language ( glob(substr(__FILE__, 0, -3) . "/*.pm")) {
-        if ($language =~ /^([-\w.\/\\~:]+)$/) {
+    foreach my $language ( File::Glob::bsd_glob(substr(__FILE__, 0, -3) . "/*.pm")) {
+        if ($language =~ /^([-\w\s.\/\\~:]+)$/) {
             require $1;
         }
         else {
@@ -117,6 +120,7 @@ sub Init {
            $_  => [
                Gettext => (substr(__FILE__, 0, -3) . "/$_.po"),
                Gettext => "$RT::LocalLexiconPath/*/$_.po",
+               Gettext => "$RT::LocalLexiconPath/$_.po",
            ],
        } @lang
     });
@@ -318,6 +322,20 @@ sub DecodeMIMEWordsToEncoding {
            }
        }
 
+        # XXX TODO: RT doesn't currently do the right thing with mime-encoded headers
+        # We _should_ be preserving them encoded until after parsing is completed and
+        # THEN undo the mime-encoding.
+        #
+        # This routine should be translating the existing mimeencoding to utf8 but leaving
+        # things encoded.
+        #
+        # It's legal for headers to contain mime-encoded commas and semicolons which
+        # should not be treated as address separators. (Encoding == quoting here)
+        #
+        # until this is fixed, we must escape any string containing a comma or semicolon
+        # this is only a bandaid
+
+        $enc_str = qq{"$enc_str"} if ($enc_str =~ /[,;]/);                                     
        $str .= $prefix . $enc_str . $trailing;
     }
 
@@ -357,7 +375,6 @@ sub _FindOrGuessCharset {
 
 # }}}
 
-
 # {{{ _GuessCharset
 
 =head2 _GuessCharset STRING
@@ -423,6 +440,7 @@ sub SetMIMEHeadToEncoding {
     return if $charset eq $enc and $preserve_words;
 
     foreach my $tag ( $head->tags ) {
+        next unless $tag; # seen in wild: headers with no name
         my @values = $head->get_all($tag);
         $head->delete($tag);
         foreach my $value (@values) {