-# {{{ 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)
# 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
=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 {
$_ => [
Gettext => (substr(__FILE__, 0, -3) . "/$_.po"),
Gettext => "$RT::LocalLexiconPath/*/$_.po",
+ Gettext => "$RT::LocalLexiconPath/$_.po",
],
} @lang
});
}
}
+ # 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;
}
# }}}
-
# {{{ _GuessCharset
=head2 _GuessCharset STRING
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) {