[Rt-commit] r3686 - in rt/branches/3.5-TESTING: . bin html/Admin/Users html/SelfService html/Ticket/Elements lib lib/RT lib/RT/Action lib/RT/I18N lib/RT/Interface lib/t/regression sbin

jesse at bestpractical.com jesse at bestpractical.com
Thu Aug 18 17:48:06 EDT 2005


Author: jesse
Date: Thu Aug 18 17:46:53 2005
New Revision: 3686

Added:
   rt/branches/3.5-TESTING/lib/t/regression/07rights.t
Modified:
   rt/branches/3.5-TESTING/   (props changed)
   rt/branches/3.5-TESTING/bin/rt.in
   rt/branches/3.5-TESTING/html/Admin/Users/Modify.html
   rt/branches/3.5-TESTING/html/SelfService/Display.html
   rt/branches/3.5-TESTING/html/Ticket/Elements/ShowHistory
   rt/branches/3.5-TESTING/html/Ticket/Elements/ShowTransaction
   rt/branches/3.5-TESTING/lib/RT.pm.in
   rt/branches/3.5-TESTING/lib/RT/ACE_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/Action/Generic.pm
   rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm
   rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/CustomField.pm
   rt/branches/3.5-TESTING/lib/RT/CustomField_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/I18N/fr.po
   rt/branches/3.5-TESTING/lib/RT/Interface/Email.pm
   rt/branches/3.5-TESTING/lib/RT/Interface/Web.pm
   rt/branches/3.5-TESTING/lib/RT/Principal_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/Record.pm
   rt/branches/3.5-TESTING/lib/RT/ScripAction_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/Template_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/Transaction_Overlay.pm
   rt/branches/3.5-TESTING/lib/RT/User_Overlay.pm
   rt/branches/3.5-TESTING/lib/t/regression/06mailgateway.t
   rt/branches/3.5-TESTING/sbin/rt-test-dependencies.in
Log:
 r13210 at hualien:  jesse | 2005-08-18 15:36:15 -0400
  r13195 at hualien:  jesse | 2005-08-18 14:19:57 -0400
   r4892 at hualien:  jesse | 2005-07-18 11:47:55 -0400
   
  
 


Modified: rt/branches/3.5-TESTING/bin/rt.in
==============================================================================
--- rt/branches/3.5-TESTING/bin/rt.in	(original)
+++ rt/branches/3.5-TESTING/bin/rt.in	Thu Aug 18 17:46:53 2005
@@ -1255,7 +1255,7 @@
     my @values = ref $val eq 'ARRAY' ? @$val : $val;
 
     foreach my $line (map {split /\n/} @values) {
-        # XXX: This should become a real parser, à la Text::ParseWords.
+        # XXX: This should become a real parser, à la Text::ParseWords.
         $line =~ s/^\s+//;
         $line =~ s/\s+$//;
         push @words, split /\s*,\s*/, $line;
@@ -1771,7 +1771,7 @@
 
     Examples:
 
-        rt comment -t 'Not worth fixing.' -a stddisclaimer.h 23
+        rt comment -m 'Not worth fixing.' -a stddisclaimer.h 23
 
 --
 

Modified: rt/branches/3.5-TESTING/html/Admin/Users/Modify.html
==============================================================================
--- rt/branches/3.5-TESTING/html/Admin/Users/Modify.html	(original)
+++ rt/branches/3.5-TESTING/html/Admin/Users/Modify.html	Thu Aug 18 17:46:53 2005
@@ -251,44 +251,44 @@
 
     $current_tab = 'Admin/Users/Modify.html?id='.$id;
     if ($id eq 'new') {
-    ( $val, $msg ) = $UserObj->Create(
-        Name                  => $Name,
-        EmailAddress          => $ARGS{'EmailAddress'},
-        Name                  => $ARGS{'Name'},
-        Comments              => $ARGS{'Comments'},
-        Signature             => $ARGS{'Signature'},
-        EmailAddress          => $ARGS{'EmailAddress'},
-        FreeformContactInfo   => $ARGS{'FreeformContactInfo'},
-        Organization          => $ARGS{'Organization'},
-        RealName              => $ARGS{'RealName'},
-        NickName              => $ARGS{'NickName'},
-        Lang                  => $ARGS{'Lang'},
-        EmailEncoding         => $ARGS{'EmailEncoding'},
-        WebEncoding           => $ARGS{'WebEncoding'},
-        ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
-        ContactInfoSystem     => $ARGS{'ContactInfoSystem'},
-        Gecos                 => $ARGS{'Gecos'},
-        ExternalAuthId        => $ARGS{'ExternalAuthId'},
-        AuthSystem            => $ARGS{'AuthSystem'},
-        HomePhone             => $ARGS{'HomePhone'},
-        WorkPhone             => $ARGS{'WorkPhone'},
-        MobilePhone           => $ARGS{'MobilePhone'},
-        PagerPhone            => $ARGS{'PagerPhone'},
-        Address1              => $ARGS{'Address1'},
-        Address2              => $ARGS{'Address2'},
-        City                  => $ARGS{'City'},
-        State                 => $ARGS{'State'},
-        Zip                   => $ARGS{'Zip'},
-        Country               => $ARGS{'Country'},
-        Privileged           => $ARGS{'Privileged'},
-        Disabled            => ($ARGS{'Enabled'} ? 0 : 1) 
-				       );
+	( $val, $msg ) = $UserObj->Create(
+	    Name                  => $Name,
+	    EmailAddress          => $ARGS{'EmailAddress'},
+	    Name                  => $ARGS{'Name'},
+	    Comments              => $ARGS{'Comments'},
+	    Signature             => $ARGS{'Signature'},
+	    EmailAddress          => $ARGS{'EmailAddress'},
+	    FreeformContactInfo   => $ARGS{'FreeformContactInfo'},
+	    Organization          => $ARGS{'Organization'},
+	    RealName              => $ARGS{'RealName'},
+	    NickName              => $ARGS{'NickName'},
+	    Lang                  => $ARGS{'Lang'},
+	    EmailEncoding         => $ARGS{'EmailEncoding'},
+	    WebEncoding           => $ARGS{'WebEncoding'},
+	    ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
+	    ContactInfoSystem     => $ARGS{'ContactInfoSystem'},
+	    Gecos                 => $ARGS{'Gecos'},
+	    ExternalAuthId        => $ARGS{'ExternalAuthId'},
+	    AuthSystem            => $ARGS{'AuthSystem'},
+	    HomePhone             => $ARGS{'HomePhone'},
+	    WorkPhone             => $ARGS{'WorkPhone'},
+	    MobilePhone           => $ARGS{'MobilePhone'},
+	    PagerPhone            => $ARGS{'PagerPhone'},
+	    Address1              => $ARGS{'Address1'},
+	    Address2              => $ARGS{'Address2'},
+	    City                  => $ARGS{'City'},
+	    State                 => $ARGS{'State'},
+	    Zip                   => $ARGS{'Zip'},
+	    Country               => $ARGS{'Country'},
+	    Privileged           => $ARGS{'Privileged'},
+	    Disabled            => ($ARGS{'Enabled'} ? 0 : 1)
+	);
+
 	if ($val) {
 		push @results, $msg;
 	} else {
 		push @results, loc('User could not be created: [_1]', $msg);
-	}	
-
+	}
     } else {
 	$UserObj->Load($id) || $UserObj->Load($Name) || Abort("Couldn't load user '$Name'");
 	$val = $UserObj->Id();
@@ -296,14 +296,13 @@
 
     if ($val) {
 	$title = loc("Modify the user [_1]", $UserObj->Name);
-    }	
+    }
 
     # If the create failed
     else {
 	$title = loc("Create a new user");
 	$Create = 1;
-    }    
-
+    }
 }
 
 
@@ -311,14 +310,14 @@
 
 # If we have a user to modify, lets try. 
 if ($UserObj->Id && $id ne 'new') {
-    
+
     my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo 
 		    Organization RealName NickName Lang EmailEncoding WebEncoding 
 		    ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId 
 		    AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
-		Address2 City State Zip Country 
+		    Address2 City State Zip Country 
 		   );
-    
+
     my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
 					    Object => $UserObj,
 					    ARGSRef => \%ARGS );
@@ -326,35 +325,40 @@
     push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
 
 
-# {{{ Deal with special fields: Privileged, Enabled and Password
-if  ( ($SetPrivileged) and ( $Privileged != $UserObj->Privileged) ) {
-my  ($code, $msg) = $UserObj->SetPrivileged($Privileged);
-     push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
-}
+    # {{{ Deal with special fields: Privileged, Enabled
+    if  ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
+         my ($code, $msg) = $UserObj->SetPrivileged($Privileged);
+         push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
+    }
 
-#we're asking about enabled on the web page but really care about disabled.
-if ($Enabled == 1) {
-    $Disabled = 0;
-}	
-else {
-    $Disabled = 1;
-}
-if  ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { 
-    my  ($code, $msg) = $UserObj->SetDisabled($Disabled);
-    push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
-}
+    #we're asking about enabled on the web page but really care about disabled.
+    $Disabled = $Enabled ? 0 : 1;
 
+    if  ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { 
+        my  ($code, $msg) = $UserObj->SetDisabled($Disabled);
+        push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
+    }
 
-#TODO: make this report errors properly
-if ((defined $Pass1) and ($Pass1 ne '') and ($Pass1 eq $Pass2) and (!$UserObj->IsPassword($Pass1))) {
-    my ($code, $msg);
-    ($code, $msg) = $UserObj->SetPassword($Pass1);
-    push @results, loc('Password: [_1]', loc_fuzzy($msg));
-} elsif ( $Pass1 && ($Pass1 ne $Pass2)) {
-    push @results, loc("Passwords do not match.");
+
+    # }}}
 }
 
-# }}}
+if ( $UserObj->Id ) {
+    my $password_not_set;
+    # Deal with Password field
+    if ( !$Pass1 and !$Pass2 ) {
+	$password_not_set = 1;
+    } elsif ( $Pass1 ne $Pass2 ) {
+	$password_not_set = 1;
+        push @results, loc("Passwords do not match.");
+    } elsif ( $Pass1 eq $Pass2 and !$UserObj->IsPassword($Pass1) ) {
+        my ($code, $msg) = $UserObj->SetPassword($Pass1);
+        push @results, loc_fuzzy($msg);
+	$password_not_set = 1 unless $code;
+    }
+    if ($id eq 'new' and $password_not_set) {
+	push @results, loc("A password was not set, so user won't be able to login.");
+    } 
 }
 
 

Modified: rt/branches/3.5-TESTING/html/SelfService/Display.html
==============================================================================
--- rt/branches/3.5-TESTING/html/SelfService/Display.html	(original)
+++ rt/branches/3.5-TESTING/html/SelfService/Display.html	Thu Aug 18 17:46:53 2005
@@ -70,7 +70,14 @@
 
 
 %#!!pape: selfservice_find_attachments.patch {{
-<& /Ticket/Elements/ShowHistory, Ticket => $Ticket, AttachPath => "Attachment", Attachments => $attachments, UpdatePath => "Update.html" &>
+<& /Ticket/Elements/ShowHistory, 
+      Ticket => $Ticket, 
+      URIFile => "Display.html", 
+      ShowHeaders => $ARGS{'ShowHeaders'},
+      AttachPath => "Attachment", 
+      Attachments => $attachments, 
+      UpdatePath => "Update.html" 
+&>
 %#!!pape: selfservice_find_attachments.patch }}
 
 

Modified: rt/branches/3.5-TESTING/html/Ticket/Elements/ShowHistory
==============================================================================
--- rt/branches/3.5-TESTING/html/Ticket/Elements/ShowHistory	(original)
+++ rt/branches/3.5-TESTING/html/Ticket/Elements/ShowHistory	Thu Aug 18 17:46:53 2005
@@ -97,8 +97,8 @@
     $m->comp( 'ShowTransaction',
             %ARGS,
 
-	      AttachPath	  => $AttachPath,
-	      UpdatePath	   => $UpdatePath,
+              AttachPath           => $AttachPath,
+              UpdatePath           => $UpdatePath,
               Ticket               => $Ticket,
               Transaction          => $Transaction,
               ShowHeaders          => $ShowHeaders,
@@ -124,7 +124,7 @@
 my $Transactions = new RT::Transactions($session{'CurrentUser'});
 if ($Tickets) {
     while (my $t = $Tickets->Next) {
-	$Transactions->LimitToTicket($t->id);
+        $Transactions->LimitToTicket($t->id);
     }
 } else {
     $Transactions = $Ticket->Transactions;
@@ -148,5 +148,4 @@
 $ShowTitleBarCommands => 1
 $AttachPath => $RT::WebPath."/Ticket/Attachment"
 $UpdatePath => $RT::WebPath."/Ticket/Update.html"
-
 </%ARGS>

Modified: rt/branches/3.5-TESTING/html/Ticket/Elements/ShowTransaction
==============================================================================
--- rt/branches/3.5-TESTING/html/Ticket/Elements/ShowTransaction	(original)
+++ rt/branches/3.5-TESTING/html/Ticket/Elements/ShowTransaction	Thu Aug 18 17:46:53 2005
@@ -47,7 +47,7 @@
 <table width="100%" cellspacing="0" cellpadding="2" border="0">
   <tr>
     <td rowspan="2" valign="top" class="type">
-      <a name="txn-<%$Transaction->Id%>" href="#txn-<%$Transaction->Id%>">#</a>
+      <a name="txn-<%$Transaction->Id%>" href="<% $DisplayPath %>#txn-<%$Transaction->Id%>">#</a>
       <% $LastTransaction ? '<a name="lasttrans">&nbsp;</a>' : '&nbsp;' |n %>
     </td>
     <td class="date"><% $transdate|n %></td>
@@ -78,6 +78,7 @@
 $Collapsed => undef
 $ShowTitleBarCommands => 1
 $RowNum => 1
+$DisplayPath => $RT::WebPath."/Ticket/Display.html?id=".$Ticket->id
 $AttachPath => $RT::WebPath."/Ticket/Attachment"
 $UpdatePath => $RT::WebPath."/Ticket/Update.html"
 $EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html"

Modified: rt/branches/3.5-TESTING/lib/RT.pm.in
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT.pm.in	(original)
+++ rt/branches/3.5-TESTING/lib/RT.pm.in	Thu Aug 18 17:46:53 2005
@@ -279,10 +279,12 @@
 ## mechanism (see above).
 
 $SIG{__WARN__} = sub {
+    my $w = shift;
+    $w =~ s/(?:\r*\n)+$//;
     # The 'wide character' warnings has to be silenced for now, at least
     # until HTML::Mason offers a sane way to process both raw output and
     # unicode strings.
-    $RT::Logger->warning($_[0]) if index($_[0], 'Wide character in ') != 0;
+    $RT::Logger->warning($w) if index($w, 'Wide character in ') != 0;
 };
 
 #When we call die, trap it and log->crit with the value of the die.

Modified: rt/branches/3.5-TESTING/lib/RT/ACE_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/ACE_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/ACE_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -133,8 +133,8 @@
 
             OR
 
-        ObjectType => undef,
-        ObjectId => undef
+	      ObjectType => undef,
+	      ObjectId => undef
 
 =cut
 
@@ -159,16 +159,9 @@
         );
     }
 
-    my ($object_type, $object_id);
-    
-    if ($args{'Object'} && UNIVERSAL::can($args{'Object'},'id')) {
-        $object_type = ref($args{'Object'});
-        $object_id = $args{'Object'}->id;
-    } elsif ($args{'ObjectId'} || $args{'ObjectType'}) {
-        $object_type = $args{'ObjectType'};
-        $object_id = $args{'ObjectId'};
-    } else {
-            return ( 0, $self->loc("System error. Right not granted.") );
+    my ($object, $object_type, $object_id) = $self->_ParseObjectArg( %args );
+    unless( $object ) {
+	return ( 0, $self->loc("System error. Right not granted.") );
     }
 
     $self->LoadByCols( PrincipalId   => $princ_obj->Id,
@@ -225,8 +218,16 @@
     my %args = ( PrincipalId   => undef,
                  PrincipalType => undef,
                  RightName     => undef,
-                 Object    => $RT::System,
+                 Object        => undef,
                  @_ );
+    #if we haven't specified any sort of right, we're talking about a global right
+    if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) {
+        $args{'Object'} = $RT::System;
+    }
+    ($args{'Object'}, $args{'ObjectType'}, $args{'ObjectId'}) = $self->_ParseObjectArg( %args );
+    unless( $args{'Object'} ) {
+	return ( 0, $self->loc("System error. Right not granted.") );
+    }
 
     # {{{ Validate the principal
     my $princ_obj;
@@ -242,17 +243,6 @@
 
     # }}}
 
-
-    if ($args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'})) {
-        use Carp;
-        $RT::Logger->crit(Carp::cluck("ACE::Create called with an ObjectType or an ObjectId"));
-    }
-
-
-    
-    unless ($args{'Object'} && UNIVERSAL::can($args{'Object'},'id')) {
-            return ( 0, $self->loc("System error. Right not granted.") );
-    }
     # {{{ Check the ACL
 
     if (ref( $args{'Object'}) eq 'RT::Group' ) {
@@ -302,17 +292,14 @@
         }
     }
 
-    unless ( $args{'RightName'} ) {
-        return ( 0, $self->loc('Invalid right') );
-    }
     # }}}
 
     # Make sure the right doesn't already exist.
     $self->LoadByCols( PrincipalId   => $princ_obj->id,
                        PrincipalType => $args{'PrincipalType'},
                        RightName     => $args{'RightName'},
-                       ObjectType    => ref($args{'Object'}),
-                       ObjectId      => $args{'Object'}->id,
+                       ObjectType    => $args{'ObjectType'},
+                       ObjectId      => $args{'ObjectId'},
                        DelegatedBy   => 0,
                        DelegatedFrom => 0 );
     if ( $self->Id ) {
@@ -940,5 +927,32 @@
     return ( $princ_obj, $princ_type );
 }
 
+sub _ParseObjectArg {
+    my $self = shift;
+    my %args = ( Object    => undef,
+                 ObjectId    => undef,
+                 ObjectType    => undef,
+                 @_ );
+
+    if( $args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'}) ) {
+	$RT::Logger->crit( "Method called with an ObjectType or an ObjectId and Object args" );
+	return ();
+    } elsif( $args{'Object'} && !UNIVERSAL::can($args{'Object'},'id') ) {
+	$RT::Logger->crit( "Method called called Object that has no id method" );
+	return ();
+    } elsif( $args{'Object'} ) {
+	my $obj = $args{'Object'};
+	return ($obj, ref $obj, $obj->id);
+    } elsif ( $args{'ObjectType'} ) {
+	my $obj =  $args{'ObjectType'}->new( $self->CurrentUser );
+	$obj->Load( $args{'ObjectId'} );
+	return ($obj, ref $obj, $obj->id);
+    } else {
+	$RT::Logger->crit( "Method called with wrong args" );
+	return ();
+    }
+}
+
+
 # }}}
 1;

Modified: rt/branches/3.5-TESTING/lib/RT/Action/Generic.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Action/Generic.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Action/Generic.pm	Thu Aug 18 17:46:53 2005
@@ -85,31 +85,31 @@
 # {{{ sub _Init 
 sub _Init  {
   my $self = shift;
-  my %args = ( TransactionObj => undef,
-	       TicketObj => undef,
-	       ScripObj => undef,
-	       TemplateObj => undef,
-	       Argument => undef,
-	       Type => undef,
-            CurrentUser => undef,
-	       @_ );
-  
-  
+  my %args = ( Argument => undef,
+               CurrentUser => undef,
+               ScripActionObj => undef,
+               ScripObj => undef,
+               TemplateObj => undef,
+               TicketObj => undef,
+               TransactionObj => undef,
+               Type => undef,
+
+               @_ );
+
   $self->{'Argument'} = $args{'Argument'};
+  $self->CurrentUser( $args{'CurrentUser'});
+  $self->{'ScripActionObj'} = $args{'ScripActionObj'};
   $self->{'ScripObj'} = $args{'ScripObj'};
+  $self->{'TemplateObj'} = $args{'TemplateObj'};
   $self->{'TicketObj'} = $args{'TicketObj'};
   $self->{'TransactionObj'} = $args{'TransactionObj'};
-  $self->{'TemplateObj'} = $args{'TemplateObj'};
   $self->{'Type'} = $args{'Type'};
-  $self->CurrentUser( $args{'CurrentUser'});
-    Scalar::Util::weaken($self->{'ScripObj'});
-    Scalar::Util::weaken($self->{'TicketObj'});
-    Scalar::Util::weaken($self->{'TemplateObj'});
-    Scalar::Util::weaken($self->{'TransactionObj'});
-
-
-
 
+  Scalar::Util::weaken($self->{'ScripActionObj'});
+  Scalar::Util::weaken($self->{'ScripObj'});
+  Scalar::Util::weaken($self->{'TemplateObj'});
+  Scalar::Util::weaken($self->{'TicketObj'});
+  Scalar::Util::weaken($self->{'TransactionObj'});
 
 }
 # }}}
@@ -151,6 +151,13 @@
 }
 # }}}
 
+# {{{ sub ScripActionObj
+sub ScripActionObj  {
+  my $self = shift;
+  return($self->{'ScripActionObj'});
+}
+# }}}
+
 # {{{ sub Type
 sub Type  {
   my $self = shift;
@@ -206,13 +213,11 @@
 
     # We need to clean up all the references that might maybe get
     # oddly circular
+    $self->{'ScripActionObj'} = undef;
+    $self->{'ScripObj'} = undef;
     $self->{'TemplateObj'} =undef
     $self->{'TicketObj'} = undef;
     $self->{'TransactionObj'} = undef;
-    $self->{'ScripObj'} = undef;
-
-
-     
 }
 
 # }}}

Modified: rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm	Thu Aug 18 17:46:53 2005
@@ -229,9 +229,11 @@
     my $self    = shift;
     my $MIMEObj = shift;
 
-    my $msgid = $MIMEObj->head->get('Message-Id');
+    my $msgid = $MIMEObj->head->get('Message-ID');
     chomp $msgid;
 
+    $self->ScripActionObj->{_Message_ID}++;
+    
     $RT::Logger->info( $msgid . " #"
         . $self->TicketObj->id . "/"
         . $self->TransactionObj->id
@@ -398,12 +400,13 @@
         $type = 'EmailRecord';
     }
 
+    my $msgid = $MIMEObj->head->get('Message-ID');
+    chomp $msgid;
 
-      
     my ( $id, $msg ) = $transaction->Create(
         Ticket         => $self->TicketObj->Id,
         Type           => $type,
-        Data           => $MIMEObj->head->get('Message-Id'),
+        Data           => $msgid,
         MIMEObj        => $MIMEObj,
         ActivateScrips => 0
     );
@@ -433,20 +436,36 @@
     $self->SetReturnAddress();
     $self->SetReferencesHeaders();
 
-
-
-    # TODO We should always add References headers for all message-ids
-    # of previous messages related to this ticket.
-
-    $self->SetHeader( 'Message-ID',
-        "<rt-"
-        . $RT::VERSION . "-"
-        . $self->TicketObj->id() . "-"
-        . $self->TransactionObj->id() . "-"
-        . $self->ScripObj->Id . "."
-        . rand(20) . "\@"
-        . $RT::Organization . ">" )
-      unless $self->TemplateObj->MIMEObj->head->get('Message-ID');
+    unless ($self->TemplateObj->MIMEObj->head->get('Message-ID')) {
+      # Get Message-ID for this txn
+      my $msgid = "";
+      $msgid = $self->TransactionObj->Message->First->GetHeader("RT-Message-ID")
+        || $self->TransactionObj->Message->First->GetHeader("Message-ID")
+        if $self->TransactionObj->Message && $self->TransactionObj->Message->First;
+
+      # If there is one, and we can parse it, then base our Message-ID on it
+      if ($msgid 
+          and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/
+                         "<$1." . $self->TicketObj->id
+                          . "-" . $self->ScripObj->id
+                          . "-" . $self->ScripActionObj->{_Message_ID}
+                          . "@" . $RT::Organization . ">"/eg
+          and $2 == $self->TicketObj->id) {
+        $self->SetHeader( "Message-ID" => $msgid );
+      } else {
+        $self->SetHeader( 'Message-ID',
+            "<rt-"
+            . $RT::VERSION . "-"
+            . $$ . "-"
+            . CORE::time() . "-"
+            . int(rand(2000)) . '.'
+            . $self->TicketObj->id . "-"
+            . $self->ScripObj->id . "-"  # Scrip
+            . $self->ScripActionObj->{_Message_ID} . "@"  # Email sent
+            . $RT::Organization
+            . ">" );
+      }
+    }
 
     $self->SetHeader( 'Precedence', "bulk" )
       unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") );
@@ -722,73 +741,58 @@
     my $attachments = $self->TransactionObj->Message;
 
     if ( my $top = $attachments->First() ) {
-        @in_reply_to = split(/\s+/m, $top->GetHeader('In-Reply-To') ||'');  
-        @references = split(/\s+/m, $top->GetHeader('References')||'' );  
-        @msgid = split(/\s+/m,$top->GetHeader('Message-Id') || ''); 
+        @in_reply_to = split(/\s+/m, $top->GetHeader('In-Reply-To') || '');  
+        @references = split(/\s+/m, $top->GetHeader('References') || '' );  
+        @msgid = split(/\s+/m, $top->GetHeader('Message-ID') || ''); 
     }
     else {
         return (undef);
     }
 
-    #   RFC 2822 - Section 3.6.4
-    #
-    #   The "In-Reply-To:" field will contain the contents of the "Message-
-    #   ID:" field of the message to which this one is a reply (the "parent
-    #   message").  If there is more than one parent message, then the "In-
-    #   Reply-To:" field will contain the contents of all of the parents'
-    #   "Message-ID:" fields.  If there is no "Message-ID:" field in any of
-    #   the parent messages, then the new message will have no "In-Reply-To:"
-    #   field.
-
-    # We interpret this section to mean that since this outgoing message is
-    # a child both of whatever the user was replying to and that user's reply,
-    # we want both headers.
-
-    # Scenario:
-    #   RT sends joe messageid "A".
-    #   Joe replies with message "B"
-    #   RT forwards that to the team as "C"
-
-    # Message A has an unspecified reply-to
-    # Message B is in-reply-to A
-    # Message C is in-reply-to A. (should be A and B
-    # XXX FIXME TODO Sadly, MUAs hate can't cope with multiple in-reply-to)
-
-    my @source_msg;
-    if ( @in_reply_to) {
-        @source_msg = @in_reply_to;
-    }
-    else {
-        @source_msg = @msgid;
-    }
-    $self->SetHeader( 'In-Reply-To', join( " ",  ( @source_msg ))); # , @msgid ) ) );
+    # There are two main cases -- this transaction was created with
+    # the RT Web UI, and hence we want to *not* append its Message-ID
+    # to the References and In-Reply-To.  OR it came from an outside
+    # source, and we should treat it as per the RFC
+    if ( "@msgid" =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>/) {
+
+      # Make all references which are internal be to version which we
+      # have sent out
+      for (@references, @in_reply_to) {
+        s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/
+          "<$1." . $self->TicketObj->id .
+             "-" . $self->ScripObj->id .
+             "-" . $self->ScripActionObj->{_Message_ID} .
+             "@" . $RT::Organization . ">"/eg
+      }
 
-    #   RFC 2822 - Section 3.6.4
-    #
-    #   The "References:" field will contain the contents of the parent's
-    #   "References:" field (if any) followed by the contents of the parent's
-    #   "Message-ID:" field (if any).  If the parent message does not contain
-    #   a "References:" field but does have an "In-Reply-To:" field
-    #   containing a single message identifier, then the "References:" field
-    #   will contain the contents of the parent's "In-Reply-To:" field
-    #   followed by the contents of the parent's "Message-ID:" field (if
-    #   any).  If the parent has none of the "References:", "In-Reply-To:",
-    #   or "Message-ID:" fields, then the new message will have no
-    #   "References:" field.
+      # In reply to whatever the internal message was in reply to
+      $self->SetHeader( 'In-Reply-To', join( " ",  ( @in_reply_to )));
+
+      # Default the references to whatever we're in reply to
+      @references = @in_reply_to unless @references;
+
+      # References are unchanged from internal
+    } else {
+      # In reply to that message
+      $self->SetHeader( 'In-Reply-To', join( " ",  ( @msgid )));
 
-    if ( !@references && scalar(@in_reply_to) ) {
-        @references = @in_reply_to;
+      # Default the references to whatever we're in reply to
+      @references = @in_reply_to unless @references;
+
+      # Push that message onto the end of the references
+      push @references, @msgid;
     }
-  
+
+    # Push pseudo-ref to the front
     my $pseudo_ref = $self->PseudoReference;
-    @references = ($pseudo_ref, grep { $_ ne $pseudo_ref } @references , @msgid);
+    @references = ($pseudo_ref, grep { $_ ne $pseudo_ref } @references);
 
-    # If there are more than 10 references headers, remove all but the first four and the last six
-    # (Gotta keep this from growing forever)
+    # If there are more than 10 references headers, remove all but the
+    # first four and the last six (Gotta keep this from growing
+    # forever)
     splice(@references, 4, -6) if ($#references >= 10);
 
-
-
+    # Add on the references
     $self->SetHeader( 'References', join( " ",   @references) );
     $self->TemplateObj->MIMEObj->head->fold_length( 'References', 80 );
 
@@ -798,7 +802,7 @@
 
 =head2 PseudoReference
 
-Returns a fake Message-Id: header for the ticket to allow a base level of threading
+Returns a fake Message-ID: header for the ticket to allow a base level of threading
 
 =cut
 

Modified: rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -157,8 +157,8 @@
     defined($Subject) or $Subject = '';
     chomp($Subject);
 
-    #Get the Message-id
-    my $MessageId = $Attachment->head->get( 'Message-Id', 0 );
+    #Get the Message-ID
+    my $MessageId = $Attachment->head->get( 'Message-ID', 0 );
     defined($MessageId) or $MessageId = '';
     chomp ($MessageId);
     $MessageId =~ s/^<(.*)>$/$1/go;

Modified: rt/branches/3.5-TESTING/lib/RT/CustomField.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/CustomField.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/CustomField.pm	Thu Aug 18 17:46:53 2005
@@ -97,6 +97,9 @@
   varchar(255) 'LookupType'.
   smallint(6) 'Disabled'.
 
+  'LookupType' is generally the result of either 
+  RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType
+
 =cut
 
 

Modified: rt/branches/3.5-TESTING/lib/RT/CustomField_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/CustomField_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/CustomField_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -140,10 +140,15 @@
   varchar(200) 'Type'.
   int(11) 'MaxValues'.
   varchar(255) 'Pattern'.
+  smallint(6) 'Repeated'.
   varchar(255) 'Description'.
   int(11) 'SortOrder'.
+  varchar(255) 'LookupType'.
   smallint(6) 'Disabled'.
 
+  'LookupType' is generally the result of either 
+  RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType
+
 =cut
 
 
@@ -451,6 +456,8 @@
 Returns a RT::ObjectCustomFieldValues object of this Field's values for TICKET.
 TICKET is a ticket id.
 
+This is deprecated -- use ValuesForObject instead.
+
 
 =cut
 
@@ -473,6 +480,8 @@
 
 Adds a custom field value for a ticket. Takes a param hash of Ticket and Content
 
+This is deprecated -- use AddValueForObject instead.
+
 =cut
 
 sub AddValueForTicket {
@@ -480,7 +489,7 @@
 	my %args = ( Ticket => undef,
                  Content => undef,
 		     @_ );
-    $RT::Logger->debug( ref($self) . " -> AddValueForTicket deprecated in favor of ValuesForObject"); 
+    $RT::Logger->debug( ref($self) . " -> AddValueForTicket deprecated in favor of AddValueForObject"); 
 
 
     my $ticket = RT::Ticket->new($self->CurrentUser);
@@ -498,6 +507,8 @@
 
 Adds a custom field value for a ticket. Takes a param hash of Ticket and Content
 
+This is deprecated -- use DeleteValueForObject instead.
+
 =cut
 
 sub DeleteValueForTicket {
@@ -506,7 +517,7 @@
                  Content => undef,
 		     @_ );
 
-    $RT::Logger->debug( ref($self) . " -> DeleteValueForTicket deprecated in favor of ValuesForObject"); 
+    $RT::Logger->debug( ref($self) . " -> DeleteValueForTicket deprecated in favor of DeleteValueForObject"); 
 
 
     my $ticket = RT::Ticket->new($self->CurrentUser);

Modified: rt/branches/3.5-TESTING/lib/RT/I18N/fr.po
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/I18N/fr.po	(original)
+++ rt/branches/3.5-TESTING/lib/RT/I18N/fr.po	Thu Aug 18 17:46:53 2005
@@ -16,11 +16,10 @@
 
 #: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
 #. ($Ticket->id, $Ticket->Subject)
-#. ($ticket->Id, $ticket->Subject)
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
 #. ($TicketObj->Id, $TicketObj->Subject)
 msgid "#%1: %2"
-msgstr "n°%1: %2"
+msgstr "n°%1 : %2"
 
 #: html/Elements/ShowSearch:86
 msgid "$1"
@@ -36,13 +35,13 @@
 msgid "%1 #%2"
 msgstr "%1 n°%2"
 
-#: lib/RT/Date.pm:361
+#: lib/RT/Date.pm:360
 #. ($s, $time_unit)
 msgid "%1 %2"
 msgstr "%1 %2"
 
-#: lib/RT/Date.pm:397
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:396
+#. ($self->GetWeekday($wday)
 msgid "%1 %2 %3 %4:%5:%6 %7"
 msgstr "%1 %2 %3 %4:%5:%6 %7"
 
@@ -53,7 +52,7 @@
 msgid "%1 %2 added"
 msgstr "%1 %2 ajouté"
 
-#: lib/RT/Date.pm:358
+#: lib/RT/Date.pm:357
 #. ($s, $time_unit)
 msgid "%1 %2 ago"
 msgstr "il y a %1 %2"
@@ -73,8 +72,9 @@
 
 #: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:64 html/Ticket/Elements/PreviewScrips:99
 #. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#. ($scrip->ConditionObj->Name, $scrip->ActionObj->Name, $scrip->TemplateObj->Name)
 msgid "%1 %2 with template %3"
-msgstr "%1 %2 avec modèle %3"
+msgstr "%1 %2 avec le modèle %3"
 
 #: html/Ticket/Elements/ShowAttachments:72
 #. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
@@ -137,23 +137,25 @@
 msgid "%1 appears to be a local object, but can't be found in the database"
 msgstr "%1 semble être un objet local, mais est introuvable dans la base de données"
 
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:519
+#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:518
 #. ($self->BriefDescription , $self->CreatorObj->Name)
 #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
 msgid "%1 by %2"
 msgstr "%1 par %2"
 
-#: lib/RT/Transaction_Overlay.pm:776 lib/RT/Transaction_Overlay.pm:785 lib/RT/Transaction_Overlay.pm:788
+#: lib/RT/Record.pm:520 lib/RT/Transaction_Overlay.pm:583 lib/RT/Transaction_Overlay.pm:775 lib/RT/Transaction_Overlay.pm:784 lib/RT/Transaction_Overlay.pm:787
+#. ($args{'Field'},            ( $old_val ? "'$old_val'" : $self->loc("(no value)
+#. ($self->Field,                ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value)
 #. ($self->Field , $q1->Name , $q2->Name)
 #. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)
 msgid "%1 changed from %2 to %3"
 msgstr "%1 changé(e) de %2 à %3"
 
 #: html/Search/Build.html:206
 #. ($Description)
 msgid "%1 copy"
-msgstr "%1 copie"
+msgstr "copie de %1"
 
 #: lib/RT/Record.pm:934
 msgid "%1 could not be set to %2."
@@ -164,12 +166,12 @@
 msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
 msgstr "%1 ne peut pas mettre le statut à résolu. La base de données RT est peut être incohérente."
 
-#: lib/RT/Transaction_Overlay.pm:559
+#: lib/RT/Transaction_Overlay.pm:558
 #. ($obj_type)
 msgid "%1 created"
 msgstr "%1 créé(e)"
 
-#: lib/RT/Transaction_Overlay.pm:564
+#: lib/RT/Transaction_Overlay.pm:563
 #. ($obj_type)
 msgid "%1 deleted"
 msgstr "%1 supprimé(e)"
@@ -209,9 +211,9 @@
 msgstr "%1 objets"
 
 #: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
+#. (loc($ObjectType =~ /^RT::(.*)
 msgid "%1 rights"
-msgstr "Droits de %1"
+msgstr "droits de %1"
 
 #: lib/RT/Action/ResolveMembers.pm:63
 #. (ref $self)
@@ -232,7 +234,7 @@
 msgid "%1's saved searches"
 msgstr "Recherches sauvées de %1"
 
-#: lib/RT/Transaction_Overlay.pm:469
+#: lib/RT/Transaction_Overlay.pm:468
 #. ($self)
 msgid "%1: no attachment specified"
 msgstr "%1: pas d'attachement spécifié"
@@ -243,7 +245,7 @@
 msgstr "%1b"
 
 #: html/Ticket/Elements/ShowTransactionAttachments:75
-#. (int( $size / 102.4 ) / 10)
+#. (int( $size / 102.4)
 msgid "%1k"
 msgstr "%1k"
 
@@ -271,7 +273,7 @@
 #: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
 #. ($RT::CorrespondAddress)
 #. ($RT::CommentAddress)
-msgid "(If left blank, will default to %1)"
+msgid "(If left blank, will default to %1"
 msgstr "(sera par défaut %1 si laissé vide)"
 
 #: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
@@ -384,15 +386,19 @@
 msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
 msgstr "<input type=\"submit\" value=\"Créer un ticket dans\">&nbsp;%1"
 
-#: etc/initialdata:218
+#:
+msgid "<input type=\\\"submit\\\" value=\\\"New ticket in\\\">&nbsp;~[_1~]"
+msgstr "<input type=\\\"submit\\\" value=\\\"Créer un ticket dans\\\">&nbsp;~[_1~]"
+
+#:
 msgid "A blank template"
 msgstr "Un modèle vide"
 
-#: lib/RT/ACE_Overlay.pm:182 lib/RT/Principal_Overlay.pm:224
+#: lib/RT/ACE_Overlay.pm:181 lib/RT/Principal_Overlay.pm:224
 msgid "ACE not found"
 msgstr "ACE non trouvé"
 
-#: lib/RT/ACE_Overlay.pm:867
+#: lib/RT/ACE_Overlay.pm:866
 msgid "ACEs can only be created and deleted."
 msgstr "Les ACE peuvent seulement être créés et effacés."
 
@@ -412,7 +418,7 @@
 msgid "Action"
 msgstr "Action"
 
-#: lib/RT/Scrip_Overlay.pm:173
+#: lib/RT/Scrip_Overlay.pm:172
 #. ($args{'ScripAction'})
 msgid "Action %1 not found"
 msgstr "Action %1 non trouvée"
@@ -425,7 +431,7 @@
 msgid "Action prepared..."
 msgstr "Action préparée..."
 
-#: html/Search/Build.html:85
+#: html/Search/Build.html:65
 msgid "Add"
 msgstr "Ajouter"
 
@@ -495,7 +501,7 @@
 msgstr "Ajout groupe/utilisateur comme %1 pour cette file"
 
 #: lib/RT/Ticket_Overlay.pm:1417
-#. ($self->loc($args{'Type'}))
+#. ($self->loc($args{'Type'})
 msgid "Added principal as a %1 for this ticket"
 msgstr "Ajout groupe/utilisateur comme %1 pour ce ticket"
 
@@ -511,11 +517,11 @@
 msgid "Admin Cc"
 msgstr "Admin Cc"
 
-#: etc/initialdata:295
+#:
 msgid "Admin Comment"
 msgstr "Commentaire Admin"
 
-#: etc/initialdata:274
+#:
 msgid "Admin Correspondence"
 msgstr "Correspondance Admin "
 
@@ -527,7 +533,7 @@
 msgid "Admin/Global configuration"
 msgstr "configuration Gestion/Globale"
 
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114
+#: html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
 msgid "AdminCc"
 msgstr "AdminCc"
 
@@ -543,15 +549,15 @@
 msgid "AdminGroupMembership"
 msgstr "GérerAppartenanceGroupes"
 
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:80
 msgid "AdminOwnPersonalGroups"
 msgstr "GérerGroupesPersonnelsPropres"
 
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:92
 msgid "AdminQueue"
 msgstr "GérerFile"
 
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:81
 msgid "AdminUsers"
 msgstr "GérerUtilisateurs"
 
@@ -571,7 +577,7 @@
 msgid "Aggregator"
 msgstr "Aggrégateur"
 
-#: etc/initialdata:363
+#:
 msgid "All Approvals Passed"
 msgstr "Toutes les approbations obtenues"
 
@@ -604,23 +610,23 @@
 #. ($ticket->id, $msg)
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
 msgid "Approval #%1: %2"
-msgstr "Approbation n°%1: %2"
+msgstr "Approbation #%1 : %2"
 
 #: html/Approvals/index.html:75
 #. ($ticket->Id)
 msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "Approbation n°%1: Notes non enregistrées en raison d'une erreur système"
+msgstr "Approbation #%1: Notes non enregistrées à cause d'une erreur système"
 
 #: html/Approvals/index.html:73
 #. ($ticket->Id)
 msgid "Approval #%1: Notes recorded"
-msgstr "Approbation n°%1: Notes non enregistrées"
+msgstr "Approbation #%1: Notes enregistrées"
 
-#: etc/initialdata:351
+#:
 msgid "Approval Passed"
 msgstr "Approbations obtenues"
 
-#: etc/initialdata:374
+#:
 msgid "Approval Rejected"
 msgstr "Approbations refusées"
 
@@ -632,7 +638,7 @@
 msgid "Approver's notes: %1"
 msgstr "Notes de l'approbateur : %1"
 
-#: lib/RT/Date.pm:440
+#: lib/RT/Date.pm:437
 msgid "Apr."
 msgstr "Avr."
 
@@ -640,11 +646,11 @@
 msgid "Ascending"
 msgstr "Croissant"
 
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:96
 msgid "Assign and remove custom fields"
 msgstr "Fixer et supprimer les champs personnalisés"
 
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:96
 msgid "AssignCustomFields"
 msgstr "FixerChampsPersonnalisés"
 
@@ -665,7 +671,11 @@
 msgid "Attachment '%1' could not be loaded"
 msgstr "Attachement '%1' ne peut pas être chargé"
 
-#: lib/RT/Transaction_Overlay.pm:477
+#:
+msgid "Attachment '~[_1~]' could not be loaded"
+msgstr "Attachement '~[_1~]' ne peut pas être chargé"
+
+#: lib/RT/Transaction_Overlay.pm:476
 msgid "Attachment created"
 msgstr "Attachement créé"
 
@@ -677,19 +687,19 @@
 msgid "Attachments"
 msgstr "Attachements"
 
-#: lib/RT/Attributes_Overlay.pm:172
+#: lib/RT/Attributes_Overlay.pm:170
 msgid "Attribute Deleted"
 msgstr "Attibut supprimé"
 
-#: lib/RT/Date.pm:444
+#: lib/RT/Date.pm:441
 msgid "Aug."
 msgstr "Aoû."
 
-#: etc/initialdata:221
+#:
 msgid "Autoreply"
 msgstr "RéponseAuto"
 
-#: etc/initialdata:72
+#:
 msgid "Autoreply To Requestors"
 msgstr "Réponse automatique aux demandeurs"
 
@@ -709,7 +719,7 @@
 msgid "Be sure to save your changes"
 msgstr "Assurez-vous de sauvegarder vos modifications"
 
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360
+#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:358
 msgid "Before"
 msgstr "Avant"
 
@@ -717,7 +727,7 @@
 msgid "Best Practical Solutions, LLC corporate logo"
 msgstr "Logo d'entreprise de Best Practical Solutions, LLC"
 
-#: etc/initialdata:217
+#:
 msgid "Blank"
 msgstr "Vide"
 
@@ -741,7 +751,7 @@
 msgid "Can not modify system users"
 msgstr "Les utilisateurs système ne peuvent être modifiés"
 
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Queue_Overlay.pm:91
 msgid "Can this principal see this queue"
 msgstr "Le groupe/utilisateur peut-il voir cette file"
 
@@ -758,7 +768,7 @@
 msgid "Can't find a saved search to work with"
 msgstr "Impossible de trouver une recherche sauvée et de l'utiliser"
 
-#: lib/RT/Link_Overlay.pm:160
+#: lib/RT/Link_Overlay.pm:159
 msgid "Can't link a ticket to itself"
 msgstr "Un ticket ne peut être lié à lui même"
 
@@ -773,7 +783,7 @@
 #: html/autohandler:166
 #. ($msg)
 msgid "Cannot create user: %1"
-msgstr "Impossible de créer l'utilisateur: %1"
+msgstr "Impossible de créer l'utilisateur : %1"
 
 #: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
 msgid "Category"
@@ -847,11 +857,11 @@
 msgid "Comment Address"
 msgstr "Adresse de commentaire"
 
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:111
 msgid "Comment on tickets"
 msgstr "Commentaire sur le ticket"
 
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:111
 msgid "CommentOnTicket"
 msgstr "CommenterTicket"
 
@@ -867,11 +877,11 @@
 msgid "Comments about this user"
 msgstr "Commentaires sur cet utilisateur"
 
-#: lib/RT/Transaction_Overlay.pm:622
+#: lib/RT/Transaction_Overlay.pm:621
 msgid "Comments added"
 msgstr "Commentaires ajoutés"
 
-#: lib/RT/Action/Generic.pm:169
+#: lib/RT/Action/Generic.pm:168
 msgid "Commit Stubbed"
 msgstr "tr(Commit Stubbed)"
 
@@ -879,11 +889,11 @@
 msgid "Condition"
 msgstr "Condition"
 
-#: bin/rt-crontool:131
+#:
 msgid "Condition matches..."
 msgstr "La condition satisfait..."
 
-#: lib/RT/Scrip_Overlay.pm:189
+#: lib/RT/Scrip_Overlay.pm:188
 msgid "Condition not found"
 msgstr "Condition non trouvée"
 
@@ -907,11 +917,11 @@
 msgid "Copy"
 msgstr "Copier"
 
-#: etc/initialdata:286
+#:
 msgid "Correspondence"
 msgstr "Courrier"
 
-#: lib/RT/Transaction_Overlay.pm:618
+#: lib/RT/Transaction_Overlay.pm:617
 msgid "Correspondence added"
 msgstr "Courrier ajouté"
 
@@ -938,7 +948,7 @@
 msgid "Could not create CustomField: %1"
 msgstr "Impossible de créer le champ personnalisé : %1"
 
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509
+#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:501 lib/RT/Group_Overlay.pm:508
 msgid "Could not create group"
 msgstr "Impossible de créer un groupe"
 
@@ -951,7 +961,7 @@
 msgid "Could not create ticket. Queue not set"
 msgstr "Impossible de créer un ticket. File non indiquée"
 
-#: lib/RT/User_Overlay.pm:256 lib/RT/User_Overlay.pm:270 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:288 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:311 lib/RT/User_Overlay.pm:321 lib/RT/User_Overlay.pm:497
+#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496
 msgid "Could not create user"
 msgstr "Impossible de créer l'utilisateur"
 
@@ -967,39 +977,43 @@
 msgid "Could not load CustomField %1"
 msgstr "Impossible de charger le champ personnalisé %1"
 
+#:
+msgid "Could not load CustomField ~[_1~]"
+msgstr "Impossible de charger le champ personnalisé ~[_1~]"
+
 #: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
 msgid "Could not load group"
 msgstr "Impossible de charger ce groupe"
 
-#: lib/RT/SavedSearch.pm:120
+#: lib/RT/SavedSearch.pm:119
 #. ($privacy)
 msgid "Could not load object for %1"
 msgstr "Impossible de charger l'objet pour %1"
 
-#: lib/RT/SavedSearch.pm:188
+#: lib/RT/SavedSearch.pm:187
 msgid "Could not load search attribute"
 msgstr "Impossible de charger l'attribut de recherche"
 
-#: lib/RT/Queue_Overlay.pm:758
+#: lib/RT/Queue_Overlay.pm:754
 #. ($args{'Type'})
 msgid "Could not make that principal a %1 for this queue"
 msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette file"
 
 #: lib/RT/Ticket_Overlay.pm:1406
-#. ($self->loc($args{'Type'}))
+#. ($self->loc($args{'Type'})
 msgid "Could not make that principal a %1 for this ticket"
 msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour ce ticket"
 
-#: lib/RT/Queue_Overlay.pm:857
+#: lib/RT/Queue_Overlay.pm:853
 #. ($args{'Type'})
 msgid "Could not remove that principal as a %1 for this queue"
 msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour cette file"
 
-#: lib/RT/User_Overlay.pm:192
+#: lib/RT/User_Overlay.pm:191
 msgid "Could not set user info"
 msgstr "Impossible de sauver les informations utilisateur"
 
-#: lib/RT/Group_Overlay.pm:1011
+#: lib/RT/Group_Overlay.pm:1009
 msgid "Couldn't add member to group"
 msgstr "Impossible d'ajouter un membre à ce groupe"
 
@@ -1012,7 +1026,7 @@
 msgid "Couldn't find row"
 msgstr "Colonne introuvable"
 
-#: lib/RT/Group_Overlay.pm:985
+#: lib/RT/Group_Overlay.pm:983
 msgid "Couldn't find that principal"
 msgstr "groupe/utilisateur introuvable"
 
@@ -1020,7 +1034,7 @@
 msgid "Couldn't find that value"
 msgstr "Valeur introuvable"
 
-#: lib/RT/CurrentUser.pm:146
+#: lib/RT/CurrentUser.pm:144
 #. ($self->Id)
 msgid "Couldn't load %1 from the users database.\\n"
 msgstr "Impossible de charger %1 depuis la base des utilisateurs.\\n"
@@ -1030,17 +1044,29 @@
 msgid "Couldn't load Class %1"
 msgstr "Impossible de charger la classe %1"
 
+#:
+msgid "Couldn't load Class ~[_1~]"
+msgstr "Impossible de charger la classe ~[_1~]"
+
 #: html/Admin/CustomFields/GroupRights.html:107
 #. ($id)
 msgid "Couldn't load CustomField %1"
 msgstr "Impossible de charger le champ personnalisé %1"
 
+#:
+msgid "Couldn't load [_1] from the users database.\\n"
+msgstr "Impossible de charger [_1] depuis la base de données des utilisateurs.\\n"
+
 #: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
 #. ($id)
 msgid "Couldn't load group %1"
 msgstr "Impossible de charger le groupe %1"
 
-#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239
+#:
+msgid "Couldn't load group ~[_1~]"
+msgstr "Impossible de charger le groupe ~[_1~]"
+
+#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
 msgid "Couldn't load link"
 msgstr "Impossible de charger le lien"
 
@@ -1049,6 +1075,10 @@
 msgid "Couldn't load object %1"
 msgstr "Impossible de charger l'objet %1"
 
+#:
+msgid "Couldn't load object ~[_1~]"
+msgstr "Impossible de charger l'objet ~[_1~]"
+
 #: html/Admin/Queues/People.html:142
 #. ($id)
 msgid "Couldn't load queue"
@@ -1082,7 +1112,7 @@
 msgid "Create"
 msgstr "Ajouter"
 
-#: etc/initialdata:135
+#:
 msgid "Create Tickets"
 msgstr "Ajouter des tickets"
 
@@ -1091,11 +1121,11 @@
 msgstr "Ajouter un Champ Personnalisé"
 
 #: html/Admin/Queues/CustomField.html:69
-#. ($QueueObj->Name())
+#. ($QueueObj->Name()
 msgid "Create a CustomField for queue %1"
 msgstr "Ajouter un champ personnalisé pour la file %1"
 
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: html/Admin/Groups/Modify.html:124 html/Admin/Groups/Modify.html:98
 msgid "Create a new group"
 msgstr "Ajouter un nouveau groupe"
 
@@ -1120,6 +1150,10 @@
 msgid "Create a scrip for queue %1"
 msgstr "Ajouter un scrip pour la file %1"
 
+#:
+msgid "Create a scrip for queue ~[_1~]"
+msgstr "Ajouter un scrip pour la file ~[_1~]"
+
 #: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
 msgid "Create a template"
 msgstr "Ajouter un modèle"
@@ -1128,7 +1162,7 @@
 msgid "Create a ticket"
 msgstr "Ajouter un ticket"
 
-#: etc/initialdata:137
+#:
 msgid "Create new tickets based on this scrip's template"
 msgstr "Ajouter de nouveaux tickets basés sur le modèle de ce scrip"
 
@@ -1136,7 +1170,7 @@
 msgid "Create ticket"
 msgstr "Ajouter un ticket"
 
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:109
 msgid "Create tickets in this queue"
 msgstr "Ajouter des tickets dans cette file"
 
@@ -1144,23 +1178,23 @@
 msgid "Create, delete and modify custom fields"
 msgstr "Ajouter, supprimer et modifier des champs personnalisés"
 
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:92
 msgid "Create, delete and modify queues"
 msgstr "Ajouter, supprimer et modifier les files"
 
-#: lib/RT/System.pm:81
+#: lib/RT/System.pm:80
 msgid "Create, delete and modify the members of personal groups"
 msgstr "Ajouter, supprimer et modifier les membres d'un groupe personnel"
 
-#: lib/RT/System.pm:82
+#: lib/RT/System.pm:81
 msgid "Create, delete and modify users"
 msgstr "Ajouter, supprimer et modifier les utilisateurs"
 
-#: lib/RT/System.pm:88
+#: lib/RT/System.pm:87
 msgid "CreateSavedSearch"
 msgstr "CréerRechercheSauvée"
 
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:109
 msgid "CreateTicket"
 msgstr "CréerTicket"
 
@@ -1169,7 +1203,7 @@
 msgstr "Créé"
 
 #: html/Admin/CustomFields/Modify.html:137 html/Admin/Elements/EditCustomField:117
-#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name()
 msgid "Created CustomField %1"
 msgstr "Champ Personnalisé %1 créé"
 
@@ -1218,6 +1252,10 @@
 msgid "Custom Fields for %1"
 msgstr "Champs personnalisés pour %1"
 
+#:
+msgid "Custom Fields for ~[_1~]"
+msgstr "Champs personnalisés pour ~[_1~]"
+
 #: html/Admin/Elements/EditScrip:123
 msgid "Custom action cleanup code"
 msgstr "Programme de nettoyage d'action personnalisé"
@@ -1262,7 +1300,7 @@
 msgid "Custom field value deleted"
 msgstr "La valeur du champ personnalisé est effacée"
 
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:626
+#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:625
 msgid "CustomField"
 msgstr "ChampPersonnalisé"
 
@@ -1274,11 +1312,11 @@
 msgid "Dates"
 msgstr "Dates"
 
-#: lib/RT/Date.pm:448
+#: lib/RT/Date.pm:445
 msgid "Dec."
 msgstr "Déc."
 
-#: etc/initialdata:222
+#:
 msgid "Default Autoresponse template"
 msgstr "Modèle de réponse automatique par défaut"
 
@@ -1290,19 +1328,19 @@
 msgid "Default Requestor"
 msgstr "Demandeur par défaut"
 
-#: etc/initialdata:296
+#:
 msgid "Default admin comment template"
 msgstr "Modèle de commentaire administrateur par défaut"
 
-#: etc/initialdata:275
+#:
 msgid "Default admin correspondence template"
 msgstr "Modèle de courrier administrateur par défaut"
 
-#: etc/initialdata:287
+#:
 msgid "Default correspondence template"
 msgstr "Modèle de courrier par défaut"
 
-#: etc/initialdata:253
+#:
 msgid "Default transaction template"
 msgstr "Modèle de transaction par défaut"
 
@@ -1310,11 +1348,11 @@
 msgid "Delegate rights"
 msgstr "Déléguer les droits"
 
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:84
 msgid "Delegate specific rights which have been granted to you."
 msgstr "Déléguer des droits spécifiques qui vous ont été accordés"
 
-#: lib/RT/System.pm:85
+#: lib/RT/System.pm:84
 msgid "DelegateRights"
 msgstr "DéléguerDroits"
 
@@ -1330,7 +1368,7 @@
 msgid "Delete Template"
 msgstr "Détruire le modèle"
 
-#: lib/RT/SavedSearch.pm:211
+#: lib/RT/SavedSearch.pm:210
 #. ($msg)
 msgid "Delete failed: %1"
 msgstr "Échec de la destruction : %1"
@@ -1339,7 +1377,7 @@
 msgid "Delete selected scrips"
 msgstr "Supprimer les scrips sélectionnés"
 
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:114
 msgid "Delete tickets"
 msgstr "Supprimer les tickets"
 
@@ -1351,15 +1389,15 @@
 msgid "DeleteTicket"
 msgstr "SupprimerTicket"
 
-#: lib/RT/SavedSearch.pm:209
+#: lib/RT/SavedSearch.pm:208
 msgid "Deleted search"
 msgstr "Recherche détruite"
 
-#: lib/RT/Queue_Overlay.pm:391
+#: lib/RT/Queue_Overlay.pm:387
 msgid "Deleting this object would break referential integrity"
 msgstr "Effacer cet objet briserait l'intégrité référentielle"
 
-#: lib/RT/User_Overlay.pm:513
+#: lib/RT/User_Overlay.pm:512
 msgid "Deleting this object would violate referential integrity"
 msgstr "Effacer cet objet violerait l'intégrité référentielle"
 
@@ -1371,22 +1409,22 @@
 msgid "Depended on by"
 msgstr "En dépend"
 
-#: lib/RT/Transaction_Overlay.pm:706
+#: lib/RT/Transaction_Overlay.pm:705
 #. ($value)
 msgid "Dependency by %1 added"
 msgstr "Ajout de la dépendance par %1"
 
-#: lib/RT/Transaction_Overlay.pm:746
+#: lib/RT/Transaction_Overlay.pm:745
 #. ($value)
 msgid "Dependency by %1 deleted"
 msgstr "Suppression de la dépendance par %1"
 
-#: lib/RT/Transaction_Overlay.pm:703
+#: lib/RT/Transaction_Overlay.pm:702
 #. ($value)
 msgid "Dependency on %1 added"
 msgstr "Ajout de la dépendance de %1"
 
-#: lib/RT/Transaction_Overlay.pm:743
+#: lib/RT/Transaction_Overlay.pm:742
 #. ($value)
 msgid "Dependency on %1 deleted"
 msgstr "Suppression de la dépendance de %1"
@@ -1411,7 +1449,7 @@
 msgid "Display"
 msgstr "Afficher"
 
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:93
 msgid "Display Access Control List"
 msgstr "Afficher la liste des droits"
 
@@ -1419,11 +1457,11 @@
 msgid "Display Columns"
 msgstr "Afficher les colonnes"
 
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:99
 msgid "Display Scrip templates for this queue"
 msgstr "Afficher les modèles de Scrips pour cette file"
 
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:102
 msgid "Display Scrips for this queue"
 msgstr "Afficher les Scrips pour cette file"
 
@@ -1439,7 +1477,7 @@
 msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
 msgstr "Distribué selon les termes de la version 2 de la <a href=\"http://www.gnu.org/copyleft/gpl.html\">licence GNU GPL.</a>"
 
-#: lib/RT/System.pm:76
+#: lib/RT/System.pm:75
 msgid "Do anything and everything"
 msgstr "Faire tout et n'importe quoi"
 
@@ -1519,15 +1557,23 @@
 msgstr "Modifier la configuration de la file %1"
 
 #: html/Admin/CustomFields/Modify.html:141 html/Admin/Elements/EditCustomField:120
-#. ($CustomFieldObj->Name())
+#. ($CustomFieldObj->Name()
 msgid "Editing CustomField %1"
 msgstr "Modifier le champ personnalisé %1"
 
+#:
+msgid "Editing CustomField ~[_1~]"
+msgstr "Modifier le ChampPersonnalisé ~[_1~]"
+
 #: html/Admin/Groups/Members.html:53
 #. ($Group->Name)
 msgid "Editing membership for group %1"
 msgstr "Modifier les membres du groupe %1"
 
+#:
+msgid "Editing membership for group ~[_1~]"
+msgstr "Modifier les membres du groupe ~[_1~]"
+
 #: html/User/Groups/Members.html:150
 #. ($Group->Name)
 msgid "Editing membership for personal group %1"
@@ -1541,7 +1587,7 @@
 msgid "Email"
 msgstr "Email"
 
-#: lib/RT/User_Overlay.pm:236
+#: lib/RT/User_Overlay.pm:235
 msgid "Email address in use"
 msgstr "Adresse email utilisée"
 
@@ -1567,10 +1613,14 @@
 msgstr "État %1 activé"
 
 #: html/Admin/CustomFields/Modify.html:159 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
+#. (loc_fuzzy($msg)
 msgid "Enabled status: %1"
 msgstr "État actif : %1"
 
+#:
+msgid "Enabled status: ~[_1~]"
+msgstr "État actif: ~[_1~]"
+
 #: lib/RT/CustomField_Overlay.pm:64
 msgid "Enter multiple values"
 msgstr "Saisir plusieurs valeurs"
@@ -1599,11 +1649,11 @@
 msgid "Error"
 msgstr "Erreur"
 
-#: lib/RT/Queue_Overlay.pm:669
+#: lib/RT/Queue_Overlay.pm:665
 msgid "Error in parameters to Queue->AddWatcher"
 msgstr "Erreur de paramètres pour Queue->AddWatcher"
 
-#: lib/RT/Queue_Overlay.pm:830
+#: lib/RT/Queue_Overlay.pm:826
 msgid "Error in parameters to Queue->DeleteWatcher"
 msgstr "Erreur dans les paramètre de Queue->DeleteWatcher"
 
@@ -1615,7 +1665,7 @@
 msgid "Error in parameters to Ticket->DeleteWatcher"
 msgstr "Erreur dans les paramètres de Ticket->DeleteWatcher"
 
-#: bin/rt-crontool:233
+#:
 msgid "Escalate tickets"
 msgstr "Échelonner les tickets"
 
@@ -1623,11 +1673,11 @@
 msgid "Estimated"
 msgstr "Estimé"
 
-#: etc/initialdata:20
+#:
 msgid "Everyone"
 msgstr "Tout le monde"
 
-#: bin/rt-crontool:219
+#:
 msgid "Example:"
 msgstr "Exemple :"
 
@@ -1635,29 +1685,28 @@
 msgid "Extra info"
 msgstr "Info supplémentaire"
 
-#: lib/RT/SavedSearch.pm:165
+#: lib/RT/SavedSearch.pm:164
 msgid "Failed to create search attribute"
 msgstr "Impossible de créer l'attribut de recherche"
 
-#: lib/RT/User_Overlay.pm:377
+#: lib/RT/User_Overlay.pm:376
 msgid "Failed to find 'Privileged' users pseudogroup."
 msgstr "Recherche du pseudo groupe d'utilisateurs 'Priviligiés' infructueuse"
 
-#: lib/RT/User_Overlay.pm:384
+#: lib/RT/User_Overlay.pm:383
 msgid "Failed to find 'Unprivileged' users pseudogroup"
 msgstr "Recherche du pseudo groupe d'utilisateurs 'non-privilégiés' infructueuse"
 
-#: bin/rt-crontool:163
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "Echec de chargement du module %1. (%2)"
+#:
+msgid "Failed to load module ~[_1~]. (~[_2~])"
+msgstr "Echec de chargement du module ~[_1~]. (~[_2~])"
 
-#: lib/RT/SavedSearch.pm:168
+#: lib/RT/SavedSearch.pm:167
 #. ($privacy)
 msgid "Failed to load object for %1"
 msgstr "Impossible de charger l'objet pour %1"
 
-#: lib/RT/Date.pm:438
+#: lib/RT/Date.pm:435
 msgid "Feb."
 msgstr "Fév."
 
@@ -1713,11 +1762,11 @@
 msgid "First"
 msgstr "Premier"
 
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: lib/RT/StyleGuide.pod:766
 msgid "Foo Bar Baz"
 msgstr "Foo Bar Baz"
 
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: lib/RT/StyleGuide.pod:757
 msgid "Foo!"
 msgstr "Foo!"
 
@@ -1732,13 +1781,13 @@
 #: html/Search/Results.html:142
 #. ($ticketcount)
 msgid "Found %quant(%1,ticket)"
-msgstr "%quant(%1,ticket) trouvés"
+msgstr "Trouvé %quant(%1,ticket)"
 
 #: lib/RT/Record.pm:946
 msgid "Found Object"
 msgstr "Objet trouvé"
 
-#: lib/RT/Date.pm:417
+#: lib/RT/Date.pm:415
 msgid "Fri."
 msgstr "Ven."
 
@@ -1750,7 +1799,7 @@
 msgid "Get template from file"
 msgstr "Obtenir le modèle àpartir d'un fichier"
 
-#: lib/RT/Transaction_Overlay.pm:672
+#: lib/RT/Transaction_Overlay.pm:671
 #. ($New->Name)
 msgid "Given to %1"
 msgstr "Donné à %1"
@@ -1792,20 +1841,28 @@
 msgid "Group Rights"
 msgstr "Droits de groupe"
 
-#: lib/RT/Group_Overlay.pm:991
+#:
+msgid "Group [_1] [_2]: [_3]"
+msgstr "Groupe [_1] [_2] : [_3]"
+
+#: lib/RT/Group_Overlay.pm:989
 msgid "Group already has member"
 msgstr "Le groupe a déjà un membre"
 
-#: html/Admin/Groups/Modify.html:109
+#: html/Admin/Groups/Modify.html:108
 #. ($create_msg)
 msgid "Group could not be created: %1"
-msgstr "Le groupe %1 n'a pu être créé"
+msgstr "Le groupe %1 ne peut être créé"
+
+#:
+msgid "Group could not be created: ~[_1~]"
+msgstr "Le groupe ~[_1~] n'a pu être créé"
 
-#: lib/RT/Group_Overlay.pm:529
+#: lib/RT/Group_Overlay.pm:528
 msgid "Group created"
 msgstr "Groupe ajouté"
 
-#: lib/RT/Group_Overlay.pm:1163
+#: lib/RT/Group_Overlay.pm:1161
 msgid "Group has no such member"
 msgstr "Un tel membre n'appartient pas au groupe"
 
@@ -1817,7 +1874,7 @@
 msgid "Groups"
 msgstr "Groupes"
 
-#: lib/RT/Group_Overlay.pm:997
+#: lib/RT/Group_Overlay.pm:995
 msgid "Groups can't be members of their members"
 msgstr "Les groupes ne peuvent pas être membres de leurs membres"
 
@@ -1829,11 +1886,11 @@
 msgid "Groups this user belongs to"
 msgstr "Cette utilisateur appartient aux groupes"
 
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Interface/CLI.pm:94
 msgid "Hello!"
 msgstr "Bonjour !"
 
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
+#: lib/RT/StyleGuide.pod:773
 #. ($name)
 msgid "Hello, %1"
 msgstr "Bonjour, %1"
@@ -1847,6 +1904,10 @@
 msgid "History of the group %1"
 msgstr "Historique du groupe %1"
 
+#:
+msgid "History of the group ~[_1~]"
+msgstr "Historique du groupe ~[_1~]"
+
 #: html/Admin/Users/History.html:62
 #. ($UserObj->Name)
 msgid "History of the user %1"
@@ -1877,7 +1938,7 @@
 msgid "Identity"
 msgstr "Identité"
 
-#: etc/initialdata:429
+#:
 msgid "If an approval is rejected, reject the original and delete pending approvals"
 msgstr "Si une approbation est refusée, rejette l'original et supprime les approbations en attente"
 
@@ -1889,7 +1950,7 @@
 msgid "If no queue is specified, create tickets in this queue."
 msgstr "Si aucune file n'est spécifée, créer les tickets dans cette file."
 
-#: bin/rt-crontool:215
+#:
 msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
 msgstr "Si cet outil était setgid, un utilisateur local mal intentionné pourrait l'utiliser pour obtenir un access administrateur à RT"
 
@@ -1952,7 +2013,7 @@
 msgid "Internal Error: %1"
 msgstr "Erreur interne : %1"
 
-#: lib/RT/Group_Overlay.pm:676
+#: lib/RT/Group_Overlay.pm:675
 msgid "Invalid Group Type"
 msgstr "Type de groupe invalide"
 
@@ -1969,11 +2030,11 @@
 msgid "Invalid pattern: %1"
 msgstr "Motif invalide : %1"
 
-#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276
+#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:276
 msgid "Invalid queue"
 msgstr "File invalide"
 
-#: lib/RT/ACE_Overlay.pm:275 lib/RT/ACE_Overlay.pm:284 lib/RT/ACE_Overlay.pm:290 lib/RT/ACE_Overlay.pm:301 lib/RT/ACE_Overlay.pm:306
+#: lib/RT/ACE_Overlay.pm:274 lib/RT/ACE_Overlay.pm:283 lib/RT/ACE_Overlay.pm:289 lib/RT/ACE_Overlay.pm:300 lib/RT/ACE_Overlay.pm:305
 msgid "Invalid right"
 msgstr "Droit invalide"
 
@@ -1990,15 +2051,15 @@
 msgid "Invalid value for status"
 msgstr "Valeur de statut invalide"
 
-#: bin/rt-crontool:216
+#:
 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
 msgstr "Il est extrêmement important que les utilisateurs non autorisés n'aient pas accès à cet outil"
 
-#: bin/rt-crontool:217
+#:
 msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
 msgstr "Il est suggéré de créer un utilisateur Unix non privilégié appartenant au bon groupe et ayant accès à RT pour utiliser cet outil"
 
-#: bin/rt-crontool:188
+#:
 msgid "It takes several arguments:"
 msgstr "Il faut plusieurs paramètres :"
 
@@ -2006,7 +2067,7 @@
 msgid "Italic"
 msgstr "Italique"
 
-#: lib/RT/Date.pm:437
+#: lib/RT/Date.pm:434
 msgid "Jan."
 msgstr "Jan."
 
@@ -2014,7 +2075,7 @@
 msgid "Join or leave this group"
 msgstr "Rejoignez ou quittez ce groupe"
 
-#: lib/RT/Date.pm:443
+#: lib/RT/Date.pm:440
 msgid "Jul."
 msgstr "Jul."
 
@@ -2022,7 +2083,7 @@
 msgid "Jumbo"
 msgstr "Tout"
 
-#: lib/RT/Date.pm:442
+#: lib/RT/Date.pm:439
 msgid "Jun."
 msgstr "Jun."
 
@@ -2109,7 +2170,7 @@
 msgid "Load saved search:"
 msgstr "Charger les recherches sauvées :"
 
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:86
 msgid "LoadSavedSearch"
 msgstr "ChargerRechercheSauvée"
 
@@ -2117,7 +2178,7 @@
 msgid "Loaded perl modules"
 msgstr "Modules perl chargés"
 
-#: lib/RT/SavedSearch.pm:112
+#: lib/RT/SavedSearch.pm:111
 #. ($self->Name)
 msgid "Loaded search %1"
 msgstr "Recherche %1 chargée"
@@ -2212,33 +2273,33 @@
 msgid "Manage users and passwords"
 msgstr "Gérer les utilisateurs et mots de passe"
 
-#: lib/RT/Date.pm:439
+#: lib/RT/Date.pm:436
 msgid "Mar."
 msgstr "Mar."
 
-#: lib/RT/Date.pm:441
+#: lib/RT/Date.pm:438
 msgid "May."
 msgstr "Mai."
 
-#: lib/RT/Transaction_Overlay.pm:719
+#: lib/RT/Transaction_Overlay.pm:718
 #. ($value)
 msgid "Member %1 added"
 msgstr "Membre %1 ajouté"
 
-#: lib/RT/Transaction_Overlay.pm:759
+#: lib/RT/Transaction_Overlay.pm:758
 #. ($value)
 msgid "Member %1 deleted"
 msgstr "Membre %1 supprimé"
 
-#: lib/RT/Group_Overlay.pm:1008
+#: lib/RT/Group_Overlay.pm:1006
 msgid "Member added"
 msgstr "Membre ajouté"
 
-#: lib/RT/Group_Overlay.pm:1170
+#: lib/RT/Group_Overlay.pm:1168
 msgid "Member deleted"
 msgstr "Membre supprimé"
 
-#: lib/RT/Group_Overlay.pm:1174
+#: lib/RT/Group_Overlay.pm:1172
 msgid "Member not deleted"
 msgstr "Membre non supprimé"
 
@@ -2250,12 +2311,12 @@
 msgid "Members"
 msgstr "Membres"
 
-#: lib/RT/Transaction_Overlay.pm:716
+#: lib/RT/Transaction_Overlay.pm:715
 #. ($value)
 msgid "Membership in %1 added"
 msgstr "Appartenance à %1 ajoutée"
 
-#: lib/RT/Transaction_Overlay.pm:756
+#: lib/RT/Transaction_Overlay.pm:755
 #. ($value)
 msgid "Membership in %1 deleted"
 msgstr "Appartenance à %1 supprimée"
@@ -2285,7 +2346,7 @@
 msgid "Merge into"
 msgstr "Fusionner dans"
 
-#: lib/RT/Transaction_Overlay.pm:722
+#: lib/RT/Transaction_Overlay.pm:721
 #. ($value)
 msgid "Merged into %1"
 msgstr "Fusionné avec %1"
@@ -2322,19 +2383,23 @@
 msgid "Mobile"
 msgstr "Mobile"
 
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:94
 msgid "Modify Access Control List"
 msgstr "Modifier la liste de droits"
 
 #: html/Admin/Elements/ObjectCustomFields:96
-#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+#. (loc(lc($FriendlySubTypes)
 msgid "Modify Custom Fields which apply to %1 for all %2"
 msgstr "Modifier les champs personnalisés s'appliquant à %1 pour tous les %2"
 
 #: html/Admin/Elements/ObjectCustomFields:98
-#. (loc(lc($Types)))
+#. (loc(lc($Types)
 msgid "Modify Custom Fields which apply to all %1"
-msgstr "Modifier les champs personnalisés qui s'appliquent à tous les %1"
+msgstr "Modifier les champs personnalisés s'appliquant à tous les %1"
+
+#:
+msgid "Modify Custom Fields which apply to all ~[_1~]"
+msgstr "Modifier les champs personnalisés qui s'appliquent à tous les ~[_1~]"
 
 #: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
 msgid "Modify Group Rights"
@@ -2348,11 +2413,11 @@
 msgid "Modify Rights"
 msgstr "Modifier les droits"
 
-#: lib/RT/Queue_Overlay.pm:98
+#: lib/RT/Queue_Overlay.pm:97
 msgid "Modify Scrip templates for this queue"
 msgstr "Modifier les modèles de Scrips pour cette file"
 
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
 msgid "Modify Scrips for this queue"
 msgstr "Modifier les Scrips pour cette file"
 
@@ -2361,7 +2426,7 @@
 msgstr "Modifier les droits des usagers"
 
 #: html/Admin/Queues/CustomField.html:66
-#. ($QueueObj->Name())
+#. ($QueueObj->Name()
 msgid "Modify a CustomField for queue %1"
 msgstr "Modifier un champ personnalisé pour la file %1"
 
@@ -2370,6 +2435,10 @@
 msgid "Modify a scrip for queue %1"
 msgstr "Modifier le scrip pour la file %1"
 
+#:
+msgid "Modify a scrip for queue ~[_1~]"
+msgstr "Modifier le scrip pour la file ~[_1~]"
+
 #: html/Admin/Global/Scrip.html:69
 msgid "Modify a scrip which applies to all queues"
 msgstr "Modifier le scrip qui s'applique à toutes les files"
@@ -2379,15 +2448,27 @@
 msgid "Modify associated objects for %1"
 msgstr "Modifier les objets associés à %1"
 
+#:
+msgid "Modify dates for # [_1]"
+msgstr "Modifier les dates pur n°[_1]"
+
 #: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
 #. ($TicketObj->Id)
 msgid "Modify dates for #%1"
 msgstr "Modifier les dates pour n°%1"
 
+#:
+msgid "Modify dates for #~[_1~]"
+msgstr "Modifier les dates pour n°~[_1~]"
+
 #: html/Ticket/ModifyDates.html:56
 #. ($TicketObj->Id)
 msgid "Modify dates for ticket # %1"
-msgstr "Modifier les dates du ticket n°%1"
+msgstr "Modifier les dates pour le ticket n°%1"
+
+#:
+msgid "Modify dates for ticket # ~[_1~]"
+msgstr "Modifier les dates du ticket n°~[_1~]"
 
 #: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
 msgid "Modify global custom fields"
@@ -2418,21 +2499,33 @@
 msgid "Modify group rights for custom field %1"
 msgstr "Modifier les droits de groupe pour le champ personnalisé %1"
 
+#:
+msgid "Modify group rights for custom field ~[_1~]"
+msgstr "Modifier les droits de groupe pour le champ personnalisé ~[_1~]"
+
 #: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
 #. ($GroupObj->Name)
 msgid "Modify group rights for group %1"
-msgstr "Modifier les droits du groupe %1"
+msgstr "Modifier les droits de groupes du groupe %1"
+
+#:
+msgid "Modify group rights for group ~[_1~]"
+msgstr "Modifier les droits du groupe ~[_1~]"
 
 #: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
 #. ($QueueObj->Name)
 msgid "Modify group rights for queue %1"
 msgstr "Modifier les droits de groupe pour la file %1"
 
+#:
+msgid "Modify group rights for queue ~[_1~]"
+msgstr "Modifier les droits de groupe pour la file ~[_1~]"
+
 #: lib/RT/Group_Overlay.pm:173
 msgid "Modify membership roster for this group"
 msgstr "Modifier la liste des membres pour ce groupe"
 
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:82
 msgid "Modify one's own RT account"
 msgstr "Modifier son propre profil RT"
 
@@ -2441,37 +2534,57 @@
 msgid "Modify people related to queue %1"
 msgstr "Modifier les utilisateurs de la file %1"
 
+#:
+msgid "Modify people related to queue ~[_1~]"
+msgstr "Modifier les utilisateurs de la file ~[_1~]"
+
 #: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56
 #. ($Ticket->id)
 #. ($Ticket->Id)
 msgid "Modify people related to ticket #%1"
 msgstr "Modifier les utilisateurs du ticket n°%1"
 
+#:
+msgid "Modify people related to ticket #~[_1~]"
+msgstr "Modifier les utilisateurs du ticket n°~[_1~]"
+
 #: html/Admin/Queues/Scrips.html:67
 #. ($QueueObj->Name)
 msgid "Modify scrips for queue %1"
 msgstr "Modifier les scrips de la file %1"
 
+#:
+msgid "Modify scrips for queue ~[_1~]"
+msgstr "Modifier les scrips de la file ~[_1~]"
+
 #: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
 msgid "Modify scrips which apply to all queues"
 msgstr "Modifier les scrips s'appliquant à toutes les files"
 
 #: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
-#. (loc($TemplateObj->Name()))
+#. (loc($TemplateObj->Name()
 #. ($TemplateObj->id)
 msgid "Modify template %1"
 msgstr "Modifier le modèle %1"
 
+#:
+msgid "Modify template ~[_1~]"
+msgstr "Modifier le modèle ~[_1~]"
+
 #: html/Admin/Global/Templates.html:65
 msgid "Modify templates which apply to all queues"
 msgstr "Modifier les modèles globaux"
 
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
+#: html/Admin/Groups/Modify.html:118 html/User/Groups/Modify.html:107
 #. ($Group->Name)
 msgid "Modify the group %1"
 msgstr "Modifier le groupe %1"
 
-#: lib/RT/Queue_Overlay.pm:96
+#:
+msgid "Modify the group ~[_1~]"
+msgstr "Modifier le groupe ~[_1~]"
+
+#: lib/RT/Queue_Overlay.pm:95
 msgid "Modify the queue watchers"
 msgstr "Modifier les observateurs de la file"
 
@@ -2480,17 +2593,29 @@
 msgid "Modify the user %1"
 msgstr "Modifier l'utilisateur %1"
 
+#:
+msgid "Modify the user ~[_1~]"
+msgstr "Modifier l'utilisateur ~[_1~]"
+
 #: html/Ticket/ModifyAll.html:58
 #. ($Ticket->Id)
 msgid "Modify ticket # %1"
 msgstr "Modifier le ticket n°%1"
 
+#:
+msgid "Modify ticket # ~[_1~]"
+msgstr "Modifier le ticket # ~[_1~]"
+
 #: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
 #. ($TicketObj->Id)
 msgid "Modify ticket #%1"
-msgstr "Modifier le ticket n°%1"
+msgstr "Modifier le ticket n°1"
 
-#: lib/RT/Queue_Overlay.pm:114
+#:
+msgid "Modify ticket #~[_1~]"
+msgstr "Modifier le ticket n°~[_1~]"
+
+#: lib/RT/Queue_Overlay.pm:113
 msgid "Modify tickets"
 msgstr "Modifier les tickets"
 
@@ -2499,17 +2624,29 @@
 msgid "Modify user rights for custom field %1"
 msgstr "Modifier les droits utilisateurs pour le champ personnalisé %1"
 
+#:
+msgid "Modify user rights for custom field ~[_1~]"
+msgstr "Modifier les droits utilisateurs pour le champ personnalisé ~[_1~]"
+
 #: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
 #. ($GroupObj->Name)
 msgid "Modify user rights for group %1"
 msgstr "Modifier les droits utilisateurs pour le groupe %1"
 
+#:
+msgid "Modify user rights for group ~[_1~]"
+msgstr "Modifier les droits utilisateurs pour le groupe ~[_1~]"
+
 #: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
 #. ($QueueObj->Name)
 msgid "Modify user rights for queue %1"
 msgstr "Modifier les droits utilisateurs pour la file %1"
 
-#: lib/RT/Queue_Overlay.pm:95
+#:
+msgid "Modify watchers for queue '[_1]'"
+msgstr "Modifier les observateurs dela file '[_1]'"
+
+#: lib/RT/Queue_Overlay.pm:94
 msgid "ModifyACL"
 msgstr "ModifierACL"
 
@@ -2521,27 +2658,27 @@
 msgid "ModifyOwnMembership"
 msgstr "ModifierPropresAppartenances"
 
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:95
 msgid "ModifyQueueWatchers"
 msgstr "ModifierObservateurs"
 
-#: lib/RT/Queue_Overlay.pm:101
+#: lib/RT/Queue_Overlay.pm:100
 msgid "ModifyScrips"
 msgstr "ModifierScrips"
 
-#: lib/RT/System.pm:83
+#: lib/RT/System.pm:82
 msgid "ModifySelf"
 msgstr "ModifierDonnéesPerso"
 
-#: lib/RT/Queue_Overlay.pm:98
+#: lib/RT/Queue_Overlay.pm:97
 msgid "ModifyTemplate"
 msgstr "ModifierModèle"
 
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Queue_Overlay.pm:113
 msgid "ModifyTicket"
 msgstr "ModifierTicket"
 
-#: lib/RT/Date.pm:413
+#: lib/RT/Date.pm:411
 msgid "Mon."
 msgstr "Lun."
 
@@ -2562,14 +2699,14 @@
 msgid "Multiple"
 msgstr "Multiple"
 
-#: lib/RT/User_Overlay.pm:227
+#: lib/RT/User_Overlay.pm:226
 msgid "Must specify 'Name' attribute"
 msgstr "Attribut 'Nom' obligatoire"
 
 #: html/SelfService/Elements/MyRequests:69
 #. ($friendly_status)
 msgid "My %1 tickets"
-msgstr "Mes tickets %1s"
+msgstr "Mes %1 tickets"
 
 #: html/Approvals/index.html:46 html/Approvals/index.html:47
 msgid "My approvals"
@@ -2583,7 +2720,7 @@
 msgid "Name"
 msgstr "Nom"
 
-#: lib/RT/User_Overlay.pm:234
+#: lib/RT/User_Overlay.pm:233
 msgid "Name in use"
 msgstr "Nom utilisé"
 
@@ -2599,7 +2736,7 @@
 msgid "New Password"
 msgstr "Nouveau mot de passe"
 
-#: etc/initialdata:332
+#:
 msgid "New Pending Approval"
 msgstr "Nouvelles approbations en attente"
 
@@ -2699,7 +2836,7 @@
 msgid "No Queue defined"
 msgstr "Aucune file définie"
 
-#: bin/rt-crontool:73
+#:
 msgid "No RT user found. Please consult your RT administrator.\\n"
 msgstr "Pas d'utilisateur RT trouvé. Merci de consulter votre administrateur RT.\\n"
 
@@ -2724,7 +2861,7 @@
 msgid "No description for %1"
 msgstr "Aucune description disponible pour %1"
 
-#: lib/RT/Users_Overlay.pm:185
+#: lib/RT/Users_Overlay.pm:184
 msgid "No group specified"
 msgstr "Aucun groupe spécifié"
 
@@ -2740,7 +2877,7 @@
 msgid "No password set"
 msgstr "Pas de mot de passe configuré"
 
-#: lib/RT/Queue_Overlay.pm:358
+#: lib/RT/Queue_Overlay.pm:354
 msgid "No permission to create queues"
 msgstr "Permission refusée pour la création de file"
 
@@ -2749,7 +2886,7 @@
 msgid "No permission to create tickets in the queue '%1'"
 msgstr "Vous n'êtes pas autorisé à créer un ticket dans cette file '%1'"
 
-#: lib/RT/User_Overlay.pm:187
+#: lib/RT/User_Overlay.pm:186
 msgid "No permission to create users"
 msgstr "Permission refusée pour la création d'utilisateurs"
 
@@ -2781,7 +2918,7 @@
 msgid "No rights granted."
 msgstr "Aucun droit accordé."
 
-#: lib/RT/SavedSearch.pm:187
+#: lib/RT/SavedSearch.pm:186
 msgid "No search loaded"
 msgstr "Pas de recherche chargée"
 
@@ -2793,7 +2930,7 @@
 msgid "No subject"
 msgstr "Pas de sujet"
 
-#: lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:553
+#: lib/RT/Transaction_Overlay.pm:515 lib/RT/Transaction_Overlay.pm:552
 msgid "No transaction type specified"
 msgstr "Aucun type de transaction spécifié."
 
@@ -2817,7 +2954,7 @@
 msgid "Not logged in."
 msgstr "Non connecté"
 
-#: lib/RT/Date.pm:393
+#: lib/RT/Date.pm:392
 msgid "Not set"
 msgstr "Non renseigné"
 
@@ -2833,75 +2970,75 @@
 msgid "Notification could not be sent"
 msgstr "Impossible d'envoyer la notification"
 
-#: etc/initialdata:101
+#:
 msgid "Notify AdminCcs"
 msgstr "Avertir les AdminCCs"
 
-#: etc/initialdata:97
+#:
 msgid "Notify AdminCcs as Comment"
 msgstr "Avertir les AdminCCs par un commentaire"
 
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#:
 msgid "Notify Ccs"
 msgstr "Aviser par cc"
 
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#:
 msgid "Notify Ccs as Comment"
 msgstr "Aviser par cc pour commentaires"
 
-#: etc/initialdata:128
+#:
 msgid "Notify Other Recipients"
 msgstr "Avertir les autres destinataires"
 
-#: etc/initialdata:124
+#:
 msgid "Notify Other Recipients as Comment"
 msgstr "Avertir les autres destinataires par un commentaire"
 
-#: etc/initialdata:85
+#:
 msgid "Notify Owner"
 msgstr "Avertir l'intervenant"
 
-#: etc/initialdata:81
+#:
 msgid "Notify Owner as Comment"
 msgstr "Avertir l'intervenant par un commentaire"
 
-#: etc/initialdata:376
+#:
 msgid "Notify Owner of their rejected ticket"
 msgstr "Avertir l'Intervenant du rejet de son ticket"
 
-#: etc/initialdata:365
+#:
 msgid "Notify Owner of their ticket has been approved by all approvers"
 msgstr "Avertir l'Intervenant de l'approbation de son ticket par tous les approbateurs"
 
-#: etc/initialdata:353
+#:
 msgid "Notify Owner of their ticket has been approved by some approver"
 msgstr "Avertir l'Intervenant de l'approbation de son ticket par un des approbateurs"
 
-#: etc/initialdata:334
+#:
 msgid "Notify Owners and AdminCcs of new items pending their approval"
 msgstr "Avertir les intervenants et les AdminCCs de nouveaux éléments attendant leur approbation"
 
-#: etc/initialdata:77
+#:
 msgid "Notify Requestors"
 msgstr "Avertir les demandeurs"
 
-#: etc/initialdata:111
+#:
 msgid "Notify Requestors and Ccs"
 msgstr "Avertir les demandeurs et les Ccs"
 
-#: etc/initialdata:106
+#:
 msgid "Notify Requestors and Ccs as Comment"
 msgstr "Avertir les demandeurs et les CC par un commentaire"
 
-#: etc/initialdata:120
+#:
 msgid "Notify Requestors, Ccs and AdminCcs"
 msgstr "Avertir les demandeurs, CCs et AdminCCs"
 
-#: etc/initialdata:116
+#:
 msgid "Notify Requestors, Ccs and AdminCcs as Comment"
 msgstr "Avertir les demandeurs, CCs et AdminCCs par un commentaire"
 
-#: lib/RT/Date.pm:447
+#: lib/RT/Date.pm:444
 msgid "Nov."
 msgstr "Nov."
 
@@ -2913,7 +3050,7 @@
 msgid "Object could not be created"
 msgstr "L'objet n'a pas pu être ajouté"
 
-#: lib/RT/Record.pm:124
+#: lib/RT/Record.pm:123
 msgid "Object could not be deleted"
 msgstr "Impossible d'effacer l'objet"
 
@@ -2921,7 +3058,7 @@
 msgid "Object created"
 msgstr "Objet ajouté"
 
-#: lib/RT/Record.pm:121
+#: lib/RT/Record.pm:120
 msgid "Object deleted"
 msgstr "Objet effacé"
 
@@ -2935,7 +3072,7 @@
 msgid "Object type mismatch"
 msgstr "Le type d'objet ne correspond pas"
 
-#: lib/RT/Date.pm:446
+#: lib/RT/Date.pm:443
 msgid "Oct."
 msgstr "Oct."
 
@@ -2955,39 +3092,39 @@
 msgid "On"
 msgstr "Le"
 
-#: etc/initialdata:163
+#:
 msgid "On Comment"
 msgstr "Lors d'un commentaire"
 
-#: etc/initialdata:156
+#:
 msgid "On Correspond"
 msgstr "Lors d'un courrier"
 
-#: etc/initialdata:145
+#:
 msgid "On Create"
 msgstr "Lors d'une création"
 
-#: etc/initialdata:184
+#:
 msgid "On Owner Change"
 msgstr "Lors d'un changement d'intervenant"
 
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#:
 msgid "On Priority Change"
 msgstr "Lors d'un changement de priorité"
 
-#: etc/initialdata:192
+#:
 msgid "On Queue Change"
 msgstr "Lors d'un changement de file"
 
-#: etc/initialdata:198
+#:
 msgid "On Resolve"
 msgstr "Lors de la résolution/clôture"
 
-#: etc/initialdata:169
+#:
 msgid "On Status Change"
 msgstr "Lors d'un changement de statut"
 
-#: etc/initialdata:150
+#:
 msgid "On Transaction"
 msgstr "Lors d'une transaction"
 
@@ -3013,7 +3150,7 @@
 msgid "Open tickets"
 msgstr "Tickets ouverts"
 
-#: etc/initialdata:140
+#:
 msgid "Open tickets on correspondence"
 msgstr "Ouvrir les tickets lors d'une correspondance"
 
@@ -3032,13 +3169,17 @@
 #: html/Approvals/Elements/Approve:53
 #. ($approving->Id, $approving->Subject)
 msgid "Originating ticket: #%1"
-msgstr "Ticket source: n°%1"
+msgstr "Ticket source : n°%1"
+
+#:
+msgid "Originating ticket: #~[_1~]"
+msgstr "Ticket source: n°~[_1~]"
 
-#: lib/RT/Transaction_Overlay.pm:610
+#: lib/RT/Transaction_Overlay.pm:609
 msgid "Outgoing email about a comment recorded"
 msgstr "Mail sortant suite à l'enregistrement d'un commentaire"
 
-#: lib/RT/Transaction_Overlay.pm:614
+#: lib/RT/Transaction_Overlay.pm:613
 msgid "Outgoing email recorded"
 msgstr "Mail sortant enregistré"
 
@@ -3046,11 +3187,11 @@
 msgid "Over time, priority moves toward"
 msgstr "Temps dépassé, priorité augmentée"
 
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:112
 msgid "Own tickets"
 msgstr "Tickets propres"
 
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:112
 msgid "OwnTicket"
 msgstr "PrendreTicket"
 
@@ -3062,7 +3203,7 @@
 msgid "Owner could not be set."
 msgstr "Le propriétaire ne peut être sauvé"
 
-#: lib/RT/Transaction_Overlay.pm:660
+#: lib/RT/Transaction_Overlay.pm:659
 #. ($Old->Name , $New->Name)
 msgid "Owner forcibly changed from %1 to %2"
 msgstr "Intervenant forcé de %1 à %2"
@@ -3072,6 +3213,10 @@
 msgid "Page %1 of %2"
 msgstr "Page %1 sur %2"
 
+#:
+msgid "Page ~[_1~] of ~[_2~]"
+msgstr "Page ~[_1~] sur ~[_2~]"
+
 #: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97
 msgid "Pager"
 msgstr "Bipeur"
@@ -3098,7 +3243,7 @@
 msgstr "Le mot de passe doit comporter au moins %1 caractères"
 
 #: html/Admin/Users/Modify.html:352 html/User/Prefs.html:232
-#. (loc_fuzzy($msg))
+#. (loc_fuzzy($msg)
 msgid "Password: %1"
 msgstr "Mot de passe : %1"
 
@@ -3114,7 +3259,7 @@
 msgid "People"
 msgstr "Personnes"
 
-#: etc/initialdata:133
+#:
 msgid "Perform a user-defined action"
 msgstr "Réaliser une action définie par l'utilisateur"
 
@@ -3146,7 +3291,7 @@
 msgid "Preferences"
 msgstr "Préférences"
 
-#: lib/RT/Action/Generic.pm:189
+#: lib/RT/Action/Generic.pm:188
 msgid "Prepare Stubbed"
 msgstr "Préparation interrompue"
 
@@ -3158,7 +3303,7 @@
 msgid "Previous Page"
 msgstr "Page précédente"
 
-#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:583
+#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:238 lib/RT/ACE_Overlay.pm:582
 #. ($args{'PrincipalId'})
 msgid "Principal %1 not found."
 msgstr "Personne/groupe %1 non trouvé"
@@ -3175,20 +3320,24 @@
 msgid "Privacy:"
 msgstr "Privé:"
 
-#: etc/initialdata:25
+#:
 msgid "Privileged"
 msgstr "Privilégié"
 
 #: html/Admin/Users/Modify.html:332 html/User/Prefs.html:223
-#. (loc_fuzzy($msg))
+#. (loc_fuzzy($msg)
 msgid "Privileged status: %1"
 msgstr "Statut privilégiés : %1"
 
+#:
+msgid "Privileged status: ~[_1~]"
+msgstr "Statuts privilégiés : ~[_1~]"
+
 #: html/Admin/Users/index.html:102
 msgid "Privileged users"
 msgstr "Utilisateurs privilégiés"
 
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#:
 msgid "Pseudogroup for internal use"
 msgstr "Pseudo groupe pour usage interne"
 
@@ -3210,11 +3359,11 @@
 msgid "Queue Name"
 msgstr "Nom de la file"
 
-#: lib/RT/Queue_Overlay.pm:362
+#: lib/RT/Queue_Overlay.pm:358
 msgid "Queue already exists"
 msgstr "File déjà créée"
 
-#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377
+#: lib/RT/Queue_Overlay.pm:367 lib/RT/Queue_Overlay.pm:373
 msgid "Queue could not be created"
 msgstr "Impossible de créer la file"
 
@@ -3222,7 +3371,7 @@
 msgid "Queue could not be loaded."
 msgstr "File ne pouvant être chargée"
 
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809
+#: lib/RT/Queue_Overlay.pm:377 lib/RT/StyleGuide.pod:809
 msgid "Queue created"
 msgstr "File créée"
 
@@ -3230,6 +3379,10 @@
 msgid "Queue not found"
 msgstr "File inconnue"
 
+#:
+msgid "Queue ~[_1~] not found"
+msgstr "File ~[_1~] non trouvée"
+
 #: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
 msgid "Queues"
 msgstr "Files"
@@ -3254,7 +3407,7 @@
 msgid "RSS"
 msgstr "RSS"
 
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
+#: lib/RT/StyleGuide.pod:796
 #. ($RT::VERSION, $RT::rtname)
 msgid "RT %1 for %2"
 msgstr "RT %1 pour %2"
@@ -3292,22 +3445,22 @@
 msgid "Real Name"
 msgstr "Nom"
 
-#: lib/RT/Transaction_Overlay.pm:713
+#: lib/RT/Transaction_Overlay.pm:712
 #. ($value)
 msgid "Reference by %1 added"
 msgstr "Ajout d'une référence par %1"
 
-#: lib/RT/Transaction_Overlay.pm:753
+#: lib/RT/Transaction_Overlay.pm:752
 #. ($value)
 msgid "Reference by %1 deleted"
 msgstr "Suppression de la référence par %1"
 
-#: lib/RT/Transaction_Overlay.pm:710
+#: lib/RT/Transaction_Overlay.pm:709
 #. ($value)
 msgid "Reference to %1 added"
 msgstr "Ajout d'une référence à %1"
 
-#: lib/RT/Transaction_Overlay.pm:750
+#: lib/RT/Transaction_Overlay.pm:749
 #. ($value)
 msgid "Reference to %1 deleted"
 msgstr "Suppression d'une référence à %1"
@@ -3323,7 +3476,7 @@
 #: html/Elements/Refresh:57
 #. ($value/60)
 msgid "Refresh this page every %1 minutes."
-msgstr "Rafraîchir cette page toutes les %1 minutes."
+msgstr "Rafraîchir cette page toutes les %1 minutes"
 
 #: lib/RT/Transaction_Overlay.pm:799
 #. ($ticket->Subject)
@@ -3378,11 +3531,11 @@
 msgid "Reply to requestors"
 msgstr "Répondre aux demandeurs"
 
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:110
 msgid "Reply to tickets"
 msgstr "Répondre aux tickets"
 
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:110
 msgid "ReplyToTicket"
 msgstr "RépondreTicket"
 
@@ -3460,15 +3613,19 @@
 msgid "Right Delegated"
 msgstr "Droit délégué"
 
-#: lib/RT/ACE_Overlay.pm:334
+#: lib/RT/ACE_Overlay.pm:333
 msgid "Right Granted"
 msgstr "Droit accordé"
 
-#: lib/RT/ACE_Overlay.pm:186
+#: lib/RT/ACE_Overlay.pm:185
 msgid "Right Loaded"
 msgstr "Droit activé"
 
-#: lib/RT/ACE_Overlay.pm:709 lib/RT/ACE_Overlay.pm:730
+#:
+msgid "Right [_1] not found for [_2]  [_3] in scope [_4] ([_5])\\n"
+msgstr "Le droit [_1] introuvable pour [_2] [_3] dans le périmètre [_4] ([_5])\\n"
+
+#: lib/RT/ACE_Overlay.pm:708 lib/RT/ACE_Overlay.pm:729
 msgid "Right could not be revoked"
 msgstr "Droit irrévocable"
 
@@ -3476,11 +3633,11 @@
 msgid "Right not found"
 msgstr "Droit inconnu"
 
-#: lib/RT/ACE_Overlay.pm:574 lib/RT/ACE_Overlay.pm:669
+#: lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:668
 msgid "Right not loaded."
 msgstr "Droit non activé"
 
-#: lib/RT/ACE_Overlay.pm:726
+#: lib/RT/ACE_Overlay.pm:725
 msgid "Right revoked"
 msgstr "Droit révoqué"
 
@@ -3488,12 +3645,12 @@
 msgid "Rights"
 msgstr "Droits"
 
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:896
+#: html/Admin/CustomFields/GroupRights.html:129 html/Admin/CustomFields/UserRights.html:100 lib/RT/Interface/Web.pm:882
 #. ($object_type)
 msgid "Rights could not be granted for %1"
 msgstr "Les droits n'ont pas pu être attribués à %1"
 
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:925
+#: html/Admin/CustomFields/GroupRights.html:156 html/Admin/CustomFields/UserRights.html:130 lib/RT/Interface/Web.pm:911
 #. ($object_type)
 msgid "Rights could not be revoked for %1"
 msgstr "Les droits n'ont pas pu être révoqués pour %1"
@@ -3510,7 +3667,7 @@
 msgid "Rows per page"
 msgstr "Lignes par pages"
 
-#: lib/RT/Date.pm:418
+#: lib/RT/Date.pm:416
 msgid "Sat."
 msgstr "Sam."
 
@@ -3530,7 +3687,7 @@
 msgid "Save changes"
 msgstr "Enregistrer les modifications"
 
-#: lib/RT/SavedSearch.pm:162
+#: lib/RT/SavedSearch.pm:161
 #. ($name)
 msgid "Saved search %1"
 msgstr "Recherche %1 sauvée"
@@ -3546,7 +3703,11 @@
 msgid "Scrip #%1"
 msgstr "Scrip n°%1"
 
-#: lib/RT/Scrip_Overlay.pm:205
+#:
+msgid "Scrip #~[_1~]"
+msgstr "Scrip n°~[_1~]"
+
+#: lib/RT/Scrip_Overlay.pm:204
 msgid "Scrip Created"
 msgstr "Scrip ajouté"
 
@@ -3574,7 +3735,7 @@
 msgid "Search Preferences"
 msgstr "Préférences de recherche"
 
-#: lib/RT/SavedSearch.pm:116
+#: lib/RT/SavedSearch.pm:115
 msgid "Search attribute load failure"
 msgstr "Impossible de charger les attributs de recherche"
 
@@ -3608,7 +3769,7 @@
 msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
 msgstr "La recherche en texte intégral (<em>full text</em>) sur chacun des tickets peut prendre un long moment, mais si vous le nécessitez, vous pouvez rechercher n'importe quel mot dans les historiques de tickets en tapant  <b>fulltext:<i>mot</i></b>."
 
-#: bin/rt-crontool:213
+#:
 msgid "Security:"
 msgstr "Sécurité :"
 
@@ -3616,15 +3777,15 @@
 msgid "See custom fields"
 msgstr "Voir les champs personnalisés"
 
-#: lib/RT/Queue_Overlay.pm:107
+#: lib/RT/Queue_Overlay.pm:106
 msgid "See exact outgoing email messages and their recipeients"
 msgstr "Voir les mails sortant et leurs destinataires"
 
-#: lib/RT/Queue_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:104
 msgid "See ticket private commentary"
 msgstr "Voir les commentaires privés du ticket"
 
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
 msgid "See ticket summaries"
 msgstr "Vue récapitulative des tickets"
 
@@ -3636,7 +3797,7 @@
 msgid "SeeGroup"
 msgstr "VoirGroupe"
 
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Queue_Overlay.pm:91
 msgid "SeeQueue"
 msgstr "VoirFile"
 
@@ -3728,7 +3889,7 @@
 msgid "Selections modified. Please save your changes"
 msgstr "Sélections modifiées. Merci de sauver vos modifications"
 
-#: etc/initialdata:121
+#:
 msgid "Send mail to all watchers"
 msgstr "Envoyer un courrier à tous les observateurs"
 
@@ -3736,43 +3897,43 @@
 msgid "Send mail to all watchers as a \"comment\""
 msgstr "Envoyer un mail de commentaire à tous les observateurs"
 
-#: etc/initialdata:112
+#:
 msgid "Send mail to requestors and Ccs"
 msgstr "Envoyer un courrier aux demandeurs et aux CCs"
 
-#: etc/initialdata:107
+#:
 msgid "Send mail to requestors and Ccs as a comment"
 msgstr "Envoyer un courrier aux demandeurs et aux CCs en tant que commentaire"
 
-#: etc/initialdata:78
+#:
 msgid "Sends a message to the requestors"
 msgstr "Envoyer un courrier aux demandeurs"
 
-#: etc/initialdata:125 etc/initialdata:129
+#:
 msgid "Sends mail to explicitly listed Ccs and Bccs"
 msgstr "Envoyer un courrier aux CCs et Bccs explicitement indiqués"
 
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#:
 msgid "Sends mail to the Ccs"
 msgstr "Envoyer un courriel en cc"
 
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#:
 msgid "Sends mail to the Ccs as a comment"
 msgstr "Envoyer un courriel en cc pour commentaires"
 
-#: etc/initialdata:102
+#:
 msgid "Sends mail to the administrative Ccs"
 msgstr "Envoyer un mail aux AdminCCs"
 
-#: etc/initialdata:98
+#:
 msgid "Sends mail to the administrative Ccs as a comment"
 msgstr "Envoyer un mail aux AdminCCs en tant que commentaire"
 
-#: etc/initialdata:82 etc/initialdata:86
+#:
 msgid "Sends mail to the owner"
 msgstr "Envoyer un courrier à l'intervenant"
 
-#: lib/RT/Date.pm:445
+#: lib/RT/Date.pm:442
 msgid "Sep."
 msgstr "Sep."
 
@@ -3816,15 +3977,15 @@
 msgid "Show requests awaiting other approvals"
 msgstr "Afficher les requêtes attendant d'autres approbations"
 
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:93
 msgid "ShowACL"
 msgstr "AfficherACL"
 
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:85
 msgid "ShowConfigTab"
 msgstr "VoirOngletConfiguration"
 
-#: lib/RT/Queue_Overlay.pm:107
+#: lib/RT/Queue_Overlay.pm:106
 msgid "ShowOutgoingEmail"
 msgstr "AfficherEmailSortant"
 
@@ -3832,27 +3993,27 @@
 msgid "ShowSavedSearches"
 msgstr "AfficherRecherchesSauvées"
 
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:102
 msgid "ShowScrips"
 msgstr "AfficherScrips"
 
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:99
 msgid "ShowTemplate"
 msgstr "AfficherModèle"
 
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:103
 msgid "ShowTicket"
 msgstr "AfficherTicket"
 
-#: lib/RT/Queue_Overlay.pm:105
+#: lib/RT/Queue_Overlay.pm:104
 msgid "ShowTicketComments"
 msgstr "AfficherCommentairesTickets"
 
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
 msgid "Sign up as a ticket Requestor or ticket or queue Cc"
 msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket"
 
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:108
 msgid "Sign up as a ticket or queue AdminCc"
 msgstr "S'identifier en tant qu'AdminCC de ticket ou de file"
 
@@ -3904,7 +4065,7 @@
 msgid "Status"
 msgstr "Statut"
 
-#: etc/initialdata:309
+#:
 msgid "Status Change"
 msgstr "Changement de statut"
 
@@ -3912,17 +4073,17 @@
 msgid "Steal"
 msgstr "Voler"
 
-#: lib/RT/Queue_Overlay.pm:118
+#: lib/RT/Queue_Overlay.pm:117
 msgid "Steal tickets"
 msgstr "Voler les tickets "
 
-#: lib/RT/Queue_Overlay.pm:118
+#: lib/RT/Queue_Overlay.pm:117
 msgid "StealTicket"
 msgstr "VolerTicket"
 
-#: lib/RT/Transaction_Overlay.pm:666
+#: lib/RT/Transaction_Overlay.pm:665
 #. ($Old->Name)
-msgid "Stolen from %1"
+msgid "Stolen from %1 "
 msgstr "Volé à %1"
 
 #: html/Search/Elements/EditFormat:81
@@ -3933,7 +4094,7 @@
 msgid "Subject"
 msgstr "Sujet"
 
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:688
+#: lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:687
 #. ($self->Data)
 msgid "Subject changed to %1"
 msgstr "Sujet modifié en %1"
@@ -3942,15 +4103,15 @@
 msgid "Submit"
 msgstr "Valider"
 
-#: lib/RT/Group_Overlay.pm:782
+#: lib/RT/Group_Overlay.pm:780
 msgid "Succeeded"
 msgstr "Réussi"
 
-#: lib/RT/Date.pm:419
+#: lib/RT/Date.pm:417
 msgid "Sun."
 msgstr "Dim."
 
-#: lib/RT/System.pm:76
+#: lib/RT/System.pm:75
 msgid "SuperUser"
 msgstr "SuperUtilisateur"
 
@@ -3962,11 +4123,11 @@
 msgid "System Configuration"
 msgstr "Configuration système"
 
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:598 lib/RT/Interface/Web.pm:895 lib/RT/Interface/Web.pm:924
+#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:597 lib/RT/Interface/Web.pm:881 lib/RT/Interface/Web.pm:910
 msgid "System Error"
 msgstr "Erreur système"
 
-#: lib/RT/Transaction_Overlay.pm:214 lib/RT/Transaction_Overlay.pm:220
+#: lib/RT/Transaction_Overlay.pm:213 lib/RT/Transaction_Overlay.pm:219
 #. ($msg)
 msgid "System Error: %1"
 msgstr "Erreur système : %1"
@@ -3975,11 +4136,11 @@
 msgid "System Tools"
 msgstr "Outils système"
 
-#: lib/RT/ACE_Overlay.pm:647
+#: lib/RT/ACE_Overlay.pm:646
 msgid "System error. Right not delegated."
 msgstr "Erreur système. Droit non délégué."
 
-#: lib/RT/ACE_Overlay.pm:171 lib/RT/ACE_Overlay.pm:254 lib/RT/ACE_Overlay.pm:337 lib/RT/ACE_Overlay.pm:934
+#: lib/RT/ACE_Overlay.pm:170 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:336 lib/RT/ACE_Overlay.pm:933
 msgid "System error. Right not granted."
 msgstr "Erreur système. Droit non accordé"
 
@@ -3987,11 +4148,11 @@
 msgid "System groups"
 msgstr "Groupes systèmes"
 
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#:
 msgid "SystemRolegroup for internal use"
 msgstr "SystemRolegroup à usage interne"
 
-#: lib/RT/CurrentUser.pm:358
+#: lib/RT/CurrentUser.pm:356
 msgid "TEST_STRING"
 msgstr "Chaîne_de_test"
 
@@ -3999,15 +4160,15 @@
 msgid "Take"
 msgstr "Prendre"
 
-#: lib/RT/Queue_Overlay.pm:116
+#: lib/RT/Queue_Overlay.pm:115
 msgid "Take tickets"
 msgstr "Prendre les tickets"
 
-#: lib/RT/Queue_Overlay.pm:116
+#: lib/RT/Queue_Overlay.pm:115
 msgid "TakeTicket"
 msgstr "PrendreTicket"
 
-#: lib/RT/Transaction_Overlay.pm:651
+#: lib/RT/Transaction_Overlay.pm:650
 msgid "Taken"
 msgstr "Pris"
 
@@ -4016,15 +4177,19 @@
 msgstr "Modèle"
 
 #: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
-#. ($TemplateObj->Id())
+#. ($TemplateObj->Id()
 msgid "Template #%1"
 msgstr "Modèle n°%1"
 
+#:
+msgid "Template #~[_1~]"
+msgstr "Modèle n°~[_1~]"
+
 #: html/Admin/Elements/EditTemplates:110
 msgid "Template deleted"
 msgstr "Modèle supprimé"
 
-#: lib/RT/Scrip_Overlay.pm:181
+#: lib/RT/Scrip_Overlay.pm:180
 msgid "Template not found"
 msgstr "Modèle inconnu"
 
@@ -4048,21 +4213,21 @@
 msgid "That is the same value"
 msgstr "Valeur identique"
 
-#: lib/RT/ACE_Overlay.pm:319 lib/RT/ACE_Overlay.pm:628
+#: lib/RT/ACE_Overlay.pm:318 lib/RT/ACE_Overlay.pm:627
 msgid "That principal already has that right"
 msgstr "Ce groupe/utilisateur dispose déjà de ce droit"
 
-#: lib/RT/Queue_Overlay.pm:750
+#: lib/RT/Queue_Overlay.pm:746
 #. ($args{'Type'})
 msgid "That principal is already a %1 for this queue"
 msgstr "Ce groupe/utilisateur est déjà un %1 pour cette file"
 
 #: lib/RT/Ticket_Overlay.pm:1397
-#. ($self->loc($args{'Type'}))
+#. ($self->loc($args{'Type'})
 msgid "That principal is already a %1 for this ticket"
 msgstr "Ce groupe/utilisateur est déjà un %1 pour ce ticket"
 
-#: lib/RT/Queue_Overlay.pm:849
+#: lib/RT/Queue_Overlay.pm:845
 #. ($args{'Type'})
 msgid "That principal is not a %1 for this queue"
 msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette file"
@@ -4083,19 +4248,19 @@
 msgid "That user does not exist"
 msgstr "Utilisateur inconnu"
 
-#: lib/RT/User_Overlay.pm:390
+#: lib/RT/User_Overlay.pm:389
 msgid "That user is already privileged"
 msgstr "Utilisateur possédant déjà un statut privilégié"
 
-#: lib/RT/User_Overlay.pm:411
+#: lib/RT/User_Overlay.pm:410
 msgid "That user is already unprivileged"
 msgstr "Utilisateur déjà sans privilèges"
 
-#: lib/RT/User_Overlay.pm:403
+#: lib/RT/User_Overlay.pm:402
 msgid "That user is now privileged"
 msgstr "Utilisateur bénéficiant à présent du statut privilégié"
 
-#: lib/RT/User_Overlay.pm:424
+#: lib/RT/User_Overlay.pm:423
 msgid "That user is now unprivileged"
 msgstr "Cet utilisateur est maintenant non privilégié"
 
@@ -4103,7 +4268,7 @@
 msgid "That user may not own tickets in that queue"
 msgstr "Cet utilisateur peut ne pas avoir de ticket dans cette file."
 
-#: lib/RT/Link_Overlay.pm:234
+#: lib/RT/Link_Overlay.pm:233
 msgid "That's not a numerical id"
 msgstr "Identifiant non numérique"
 
@@ -4111,15 +4276,15 @@
 msgid "The Basics"
 msgstr "Éléments de base"
 
-#: lib/RT/ACE_Overlay.pm:113
+#: lib/RT/ACE_Overlay.pm:112
 msgid "The CC of a ticket"
 msgstr "Le CC d'un ticket"
 
-#: lib/RT/ACE_Overlay.pm:114
+#: lib/RT/ACE_Overlay.pm:113
 msgid "The administrative CC of a ticket"
 msgstr "L'AdminCC d'un ticket"
 
-#: bin/rt-crontool:223
+#:
 msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
 msgstr "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures:"
 
@@ -4127,11 +4292,11 @@
 msgid "The new value has been set."
 msgstr "La nouvelle valeur est enregistrée"
 
-#: lib/RT/ACE_Overlay.pm:111
+#: lib/RT/ACE_Overlay.pm:110
 msgid "The owner of a ticket"
 msgstr "L'intervenant d'un ticket"
 
-#: lib/RT/ACE_Overlay.pm:112
+#: lib/RT/ACE_Overlay.pm:111
 msgid "The requestor of a ticket"
 msgstr "Le demandeur d'un ticket"
 
@@ -4147,15 +4312,20 @@
 msgid "This feature is only available to system administrators"
 msgstr "Cet possibilité n'est offerte qu'aux administrateurs systèmes"
 
+#: html/Elements/SetupSessionCookie:94
+#. ($RT::MasonSessionDir)
+msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
+msgstr "Cela peut signifier que le répertoire '%1' est en lecture seule ou que la base est manquante ou corrompue."
+
 #: html/Ticket/Elements/PreviewScrips:93
 msgid "This message will be sent to..."
 msgstr "Ce message va être envoyé à..."
 
-#: bin/rt-crontool:214
+#:
 msgid "This tool allows the user to run arbitrary perl modules from within RT."
 msgstr "Cet outil permet à l'utilisateur de lancer un module perl quelconque depuis RT"
 
-#: lib/RT/Transaction_Overlay.pm:287
+#: lib/RT/Transaction_Overlay.pm:286
 msgid "This transaction appears to have no content"
 msgstr "Cette opération semble ne pas avoir de contenu"
 
@@ -4164,7 +4334,11 @@
 msgid "This user's %1 highest priority tickets"
 msgstr "Les %1 tickets prioritaires de cet utilisateur"
 
-#: lib/RT/Date.pm:416
+#:
+msgid "This user's ~[_1~] highest priority tickets"
+msgstr "Les ~[_1~] tickets prioritaires de cet utilisateur"
+
+#: lib/RT/Date.pm:414
 msgid "Thu."
 msgstr "Jeu."
 
@@ -4178,7 +4352,15 @@
 msgid "Ticket #%1: %2"
 msgstr "Ticket n°%1: %2"
 
-#: lib/RT/Action/CreateTickets.pm:1258 lib/RT/Action/CreateTickets.pm:1267 lib/RT/Action/CreateTickets.pm:595 lib/RT/Action/CreateTickets.pm:716 lib/RT/Action/CreateTickets.pm:729
+#:
+msgid "Ticket #~[_1~] Jumbo update: ~[_2~]"
+msgstr "Ticket n°~[_1~] mise à jour globale : ~[_2~]"
+
+#:
+msgid "Ticket #~[_1~]: ~[_2~]"
+msgstr "Ticket n°~[_1~]: ~[_2~]"
+
+#: lib/RT/Action/CreateTickets.pm:1255 lib/RT/Action/CreateTickets.pm:1264 lib/RT/Action/CreateTickets.pm:593 lib/RT/Action/CreateTickets.pm:713 lib/RT/Action/CreateTickets.pm:726
 #. ($T::Tickets{$template_id}->Id)
 #. ($T::Tickets{$template_id}->id)
 #. ($ticket->Id)
@@ -4193,7 +4375,7 @@
 #: html/Search/Bulk.html:365
 #. ($Ticket->Id, $_)
 msgid "Ticket %1: %2"
-msgstr "Ticket %1: %2"
+msgstr "Ticket %1 : %2"
 
 #: html/Admin/Elements/QueueTabs:74
 msgid "Ticket Custom Fields"
@@ -4204,7 +4386,7 @@
 msgid "Ticket History # %1 %2"
 msgstr "Historique du ticket n°%1 %2"
 
-#: etc/initialdata:324
+#:
 msgid "Ticket Resolved"
 msgstr "Ticket résolu"
 
@@ -4228,11 +4410,15 @@
 msgid "Ticket metadata"
 msgstr "Méta-données du ticket"
 
-#: etc/initialdata:310
+#:
 msgid "Ticket status changed"
 msgstr "Statut de ticket modifié"
 
-#: lib/RT/Search/FromSQL.pm:83
+#:
+msgid "Ticket ~[_1~]: ~[_2~]"
+msgstr "Ticket ~[_1~]: ~[_2~]"
+
+#: lib/RT/Search/FromSQL.pm:82
 #. (ref $self)
 msgid "TicketSQL search module"
 msgstr "Module de recherche TicketSQL"
@@ -4314,12 +4500,12 @@
 msgid "Transaction"
 msgstr "Transaction"
 
-#: lib/RT/Transaction_Overlay.pm:793
+#: lib/RT/Transaction_Overlay.pm:792
 #. ($self->Data)
 msgid "Transaction %1 purged"
 msgstr "La transaction %1 est supprimée"
 
-#: lib/RT/Transaction_Overlay.pm:173
+#: lib/RT/Transaction_Overlay.pm:172
 msgid "Transaction Created"
 msgstr "Transaction ajoutée"
 
@@ -4327,7 +4513,7 @@
 msgid "Transaction Custom Fields"
 msgstr "Champs personnalisées de la transaction"
 
-#: lib/RT/Transaction_Overlay.pm:124
+#: lib/RT/Transaction_Overlay.pm:123
 msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
 msgstr "Transation->Create a échoué car vous n'avez pas spécifié de type d'objet et d'id"
 
@@ -4335,7 +4521,7 @@
 msgid "Transactions are immutable"
 msgstr "Les transactions ne peuvent être transférées"
 
-#: lib/RT/Date.pm:414
+#: lib/RT/Date.pm:412
 msgid "Tue."
 msgstr "Mar."
 
@@ -4343,7 +4529,7 @@
 msgid "Type"
 msgstr "Type"
 
-#: lib/RT/ScripCondition_Overlay.pm:129
+#: lib/RT/ScripCondition_Overlay.pm:128
 msgid "Unimplemented"
 msgstr "Fonction non disponible"
 
@@ -4369,7 +4555,7 @@
 msgid "Unnamed search"
 msgstr "Recherche non nommée"
 
-#: etc/initialdata:32
+#:
 msgid "Unprivileged"
 msgstr "Non privilégié"
 
@@ -4381,7 +4567,7 @@
 msgid "Unselected objects"
 msgstr "Objets non sélectionnés"
 
-#: lib/RT/Transaction_Overlay.pm:647
+#: lib/RT/Transaction_Overlay.pm:646
 msgid "Untaken"
 msgstr "Non pris"
 
@@ -4401,7 +4587,7 @@
 msgid "Update multiple tickets"
 msgstr "Mettre à jour plusieurs tickets"
 
-#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:519
+#: lib/RT/Action/CreateTickets.pm:734 lib/RT/Interface/Web.pm:505
 msgid "Update not recorded."
 msgstr "Mise à jour non enregistrée"
 
@@ -4412,14 +4598,22 @@
 #: html/SelfService/Update.html:112 html/SelfService/Update.html:47
 #. ($Ticket->id)
 msgid "Update ticket #%1"
-msgstr "Mettre à jour le ticket n°%1"
+msgstr "Mette à jour le ticket n°%1"
 
 #: html/Ticket/Update.html:159
 #. ($TicketObj->id, $TicketObj->Subject)
 msgid "Update ticket #%1 (%2)"
-msgstr "Mettre à jour le ticket n°%1 (%2)"
+msgstr "Mette à jour le ticket n°%1 (%2)"
+
+#:
+msgid "Update ticket #~[_1~]"
+msgstr "Mettre à jour le ticket n°~[_1~]"
+
+#:
+msgid "Update ticket #~[_1~] (~[_2~])"
+msgstr "Mettre à jour le ticket n°~[_1~] (~[_2~])"
 
-#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:518
+#: lib/RT/Action/CreateTickets.pm:732 lib/RT/Interface/Web.pm:503
 msgid "Update type was neither correspondence nor comment."
 msgstr "Le type de mise à jour n'était ni un commentaire ni un courrier."
 
@@ -4468,7 +4662,7 @@
 msgid "User '%1' could not be found."
 msgstr "L'utilisateur %1 ne peut être trouvé"
 
-#: etc/initialdata:132 etc/initialdata:206
+#:
 msgid "User Defined"
 msgstr "Utilisateur défini"
 
@@ -4488,9 +4682,13 @@
 #: html/Admin/Users/Modify.html:289
 #. ($msg)
 msgid "User could not be created: %1"
-msgstr "Utilisateur ne peut pas être créé : %1"
+msgstr "L'utilisateur ne peut être crééu : %1"
 
-#: lib/RT/User_Overlay.pm:331
+#:
+msgid "User could not be created: ~[_1~]"
+msgstr "Utilisateur ne peut pas être créé : ~[_1~]"
+
+#: lib/RT/User_Overlay.pm:330
 msgid "User created"
 msgstr "Utilisateur créé"
 
@@ -4498,7 +4696,7 @@
 msgid "User defined groups"
 msgstr "Groupes utilisateur"
 
-#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613
+#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
 msgid "User loaded"
 msgstr "Utilisateur chargé"
 
@@ -4530,11 +4728,11 @@
 msgid "Values"
 msgstr "Valeurs"
 
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:107
 msgid "Watch"
 msgstr "Observer"
 
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:108
 msgid "WatchAsAdminCc"
 msgstr "ObserverCommeAdminCC"
 
@@ -4542,59 +4740,59 @@
 msgid "Watchers"
 msgstr "Observateurs"
 
-#: lib/RT/Date.pm:415
+#: lib/RT/Date.pm:413
 msgid "Wed."
 msgstr "Mer."
 
-#: etc/initialdata:521
+#:
 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
 msgstr "Quand un ticket a été approuvé par tous les approbateurs, ajoute le courrier au ticket source"
 
-#: etc/initialdata:485
+#:
 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
 msgstr "Quand un ticket a été approuvé par au moins un approbateur, ajoute le courrier au ticket source "
 
-#: etc/initialdata:146
+#:
 msgid "When a ticket is created"
 msgstr "Quand un ticket est créé"
 
-#: etc/initialdata:418
+#:
 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
 msgstr "Quand un ticket d'approbation est créé, informer l'intervenant et l'AdminCC de l'élément attendant leur approbation"
 
-#: etc/initialdata:151
+#:
 msgid "When anything happens"
 msgstr "Quand quelque chose arrive"
 
-#: etc/initialdata:199
+#:
 msgid "Whenever a ticket is resolved"
 msgstr "Lorsqu'un ticket quelconque est résolu/clos"
 
-#: etc/initialdata:185
+#:
 msgid "Whenever a ticket's owner changes"
 msgstr "Lorsqu'un ticket quelconque change d'intervenant"
 
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#:
 msgid "Whenever a ticket's priority changes"
 msgstr "Lorsqu'un ticket change de priorité"
 
-#: etc/initialdata:193
+#:
 msgid "Whenever a ticket's queue changes"
 msgstr "Lorsqu'un ticket quelconque change de file"
 
-#: etc/initialdata:170
+#:
 msgid "Whenever a ticket's status changes"
 msgstr "Lorsqu'un ticket quelconque change de statut"
 
-#: etc/initialdata:207
+#:
 msgid "Whenever a user-defined condition occurs"
 msgstr "Lorsqu'une condition définie par l'utilisateur est satisfaite"
 
-#: etc/initialdata:164
+#:
 msgid "Whenever comments come in"
 msgstr "Lorsque un commentaire arrive"
 
-#: etc/initialdata:157
+#:
 msgid "Whenever correspondence comes in"
 msgstr "Lorsque un courrier arrive"
 
@@ -4626,7 +4824,7 @@
 msgid "You can only reassign tickets that you own or that are unowned"
 msgstr "Vous pouvez seulement réaffecter vos ticket ou ceux qui ne sont pas affectés"
 
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
+#: lib/RT/StyleGuide.pod:780
 #. ($num, $queue)
 msgid "You found %1 tickets in queue %2"
 msgstr "%1 tickets trouvés dans la file %2"
@@ -4647,15 +4845,19 @@
 msgid "You're welcome to login again"
 msgstr "Vous êtes invité à vous identifier à nouveau"
 
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "Votre demande a été approuvée par %1. D'autres approbations sont peut être toujours en attente"
+#:
+msgid "Your [_1] requests"
+msgstr "Vos [_1] requêtes"
+
+#:
+msgid "Your request has been approved by ~[_1~]. Other approvals may still be pending."
+msgstr "Votre demande a été approuvée par ~[_1~]. D'autres approbations sont peut être toujours en attente"
 
-#: etc/initialdata:540
+#:
 msgid "Your request has been approved."
 msgstr "Votre demande a été approuvée"
 
-#: etc/initialdata:445
+#:
 msgid "Your request was rejected."
 msgstr "Votre demande a été rejetée."
 
@@ -4667,11 +4869,75 @@
 msgid "Zip"
 msgstr "Code Postal"
 
-#: lib/RT/System.pm:88
+#:
+msgid "[_1] - [_2] shown"
+msgstr "Tickets [_1] à [_2]"
+
+#:
+msgid "[_1] [_2] of group [_3]"
+msgstr "[_1] [_2] du groupe [_3]"
+
+#:
+msgid "[_1] aliases require a TicketId to work on"
+msgstr "les alias [_1] nécessitent un TicketId sur lequel travailler"
+
+#:
+msgid "[_1] aliases require a TicketId to work on "
+msgstr "les alias [_1] nécessitent un TicketId sur lequel travailler "
+
+#:
+msgid "[_1] aliases require a TicketId to work on (from [_2]) [_3]"
+msgstr "les alias [_1] nécessitent un TicketId pour fonctionner avec (depuis [_2]) [_3]"
+
+#:
+msgid "[_1] couldn't init a transaction ([_2])\\n"
+msgstr "[_1] n'a pas pu initialiser une transaction ([_2])\\n"
+
+#:
+msgid "[_1] highest priority tickets I own..."
+msgstr "Mes [_1] tickets à traiter en priorité..."
+
+#:
+msgid "[_1] highest priority tickets I requested..."
+msgstr "Mes [_1] demandes les plus prioritaires..."
+
+#:
+msgid "[_1] isn't a valid Queue id."
+msgstr "[_1] n'est pas un identifiant de file valide"
+
+#:
+msgid "[_1] not shown"
+msgstr "[_1] non montré"
+
+#:
+msgid "[_1] succeeded\\n"
+msgstr "[_1] réussi\\n"
+
+#:
+msgid "[_1] type unknown for $MessageId"
+msgstr "Type [_1] inconnu pour $MessageId"
+
+#:
+msgid "[_1] type unknown for [_2]"
+msgstr "type [_1] inconnu pour [_2]"
+
+#:
+msgid "[_1] was created without a CurrentUser\\n"
+msgstr "[_1] a été créé sans utilisateur courant\\n"
+
+#:
+msgid "[_1] will stall a ~[local~] BASE if it's dependent ~[or member~] of a linked up request."
+msgstr "[_1] va bloquer une base ~[locale~] s'il dépend ou est membre d'une demande liée."
+
+#: lib/RT/I18N.pm:139
+msgid "__Content-Type"
+msgstr "__Content-Type"
+
+#: lib/RT/System.pm:87
 msgid "allow creation of saved searches"
 msgstr "autorise la création de recherches sauvées"
 
-#: lib/RT/System.pm:87
+#: lib/RT/System.pm:86
 msgid "allow loading of saved searches"
 msgstr "autorise le chargement de recherches sauvées"
 
@@ -4692,11 +4958,16 @@
 msgid "contains"
 msgstr "contient"
 
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342
+#: html/Search/Build.html:629
+#. (                      . $token                      . " in '$string'\n")
+msgid "current: $current, want $want, Error near ->$val<- expecting a "
+msgstr "actuel: $current, désirant $want, Erreur près de ->$val<- attendant un"
+
+#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:341
 msgid "days"
 msgstr "jours"
 
-#: lib/RT/Queue_Overlay.pm:88
+#: lib/RT/Queue_Overlay.pm:87
 msgid "deleted"
 msgstr "effacé"
 
@@ -4774,15 +5045,15 @@
 msgid "matches"
 msgstr "correspond"
 
-#: lib/RT/Date.pm:334
+#: lib/RT/Date.pm:333
 msgid "min"
 msgstr "min"
 
-#: lib/RT/Date.pm:350
+#: lib/RT/Date.pm:349
 msgid "months"
 msgstr "mois"
 
-#: lib/RT/Queue_Overlay.pm:83
+#: lib/RT/Queue_Overlay.pm:82
 msgid "new"
 msgstr "nouveau"
 
@@ -4816,19 +5087,19 @@
 msgid "queue %1 %2"
 msgstr "file %1 %2"
 
-#: lib/RT/Queue_Overlay.pm:87
+#: lib/RT/Queue_Overlay.pm:86
 msgid "rejected"
 msgstr "rejeté"
 
-#: lib/RT/Queue_Overlay.pm:86
+#: lib/RT/Queue_Overlay.pm:85
 msgid "resolved"
 msgstr "résolu"
 
-#: lib/RT/Date.pm:330
+#: lib/RT/Date.pm:329
 msgid "sec"
 msgstr "sec"
 
-#: lib/RT/System.pm:86
+#: lib/RT/System.pm:85
 msgid "show Configuration tab"
 msgstr "montrer l'onglet de configuration"
 
@@ -4836,7 +5107,7 @@
 msgid "spreadsheet"
 msgstr "feuille de calcul"
 
-#: lib/RT/Queue_Overlay.pm:85
+#: lib/RT/Queue_Overlay.pm:84
 msgid "stalled"
 msgstr "bloqué"
 
@@ -4878,11 +5149,86 @@
 msgid "user %1"
 msgstr "utilisateur %1"
 
-#: lib/RT/Date.pm:346
+#: lib/RT/Date.pm:345
 msgid "weeks"
 msgstr "semaines"
 
-#: lib/RT/Date.pm:354
+#: lib/RT/Date.pm:353
 msgid "years"
 msgstr "années"
 
+#:
+msgid "~[_1~] (Unchanged)"
+msgstr "~[_1~] (inchangé)"
+
+#:
+msgid "~[_1~] (~[_2~]) by ~[_3~]"
+msgstr "~[_1~] (~[_2~]) par ~[_3~]"
+
+#:
+msgid "~[_1~] - An argument to pass to ~[_2~]"
+msgstr "~[_1~] - Un paramètre à passer à ~[_2~]"
+
+#:
+msgid "~[_1~] - Output status updates to STDOUT"
+msgstr "~[_1~] - Ecrit les mises à jour de statuts sur STDOUT"
+
+#:
+msgid "~[_1~] - Specify the action module you want to use"
+msgstr "~[_1~] - Précisez l'action que vous voulez utiliser"
+
+#:
+msgid "~[_1~] - Specify the condition module you want to use"
+msgstr "~[_1~] - Précisez la condition que vous voulez utiliser"
+
+#:
+msgid "~[_1~] - Specify the search module you want to use"
+msgstr "~[_1~] - Précisez la recherche que vous voulez utiliser"
+
+#:
+msgid  "~[_1~] RT ~[_2~] Copyright 1996-~[_3~] ~[_4~]."
+msgstr "~[_1~] RT ~[_2~] Copyright 1996-~[_3~] ~[_4~]."
+
+#:
+msgid "~[_1~] copy"
+msgstr "~[_1~] copie"
+
+#:
+msgid "~[_1~] highest priority tickets I own"
+msgstr "Mes ~[_1~] tickets de plus haute priorité"
+
+#:
+msgid "~[_1~] is a tool to act on tickets from an external scheduling tool, such as cron."
+msgstr "~[_1~] est un outil agissant sur les tickets depuis un planificateur externe tel que cron"
+
+#:
+msgid "~[_1~] min"
+msgstr "~[_1~] min"
+
+#:
+msgid "~[_1~] newest unowned tickets"
+msgstr "les ~[_1~] derniers tickets sans propriétaire"
+
+#:
+msgid "~[_1~] rights"
+msgstr "Droits de ~[_1~]"
+
+#:
+msgid "~[_1~] ~[_2~] with template ~[_3~]"
+msgstr "~[_1~] ~[_2~] avec modèle ~[_3~]"
+
+#:
+msgid "~[_1~]'s saved searches"
+msgstr "recherches sauvées de ~[_1~]"
+
+#:
+msgid "~[_1~]b"
+msgstr "~[_1~]b"
+
+#:
+msgid "~[_1~]k"
+msgstr "~[_1~]k"
+
+#:
+msgid "~[no subject~]"
+msgstr "~[Pas de sujet~]"

Modified: rt/branches/3.5-TESTING/lib/RT/Interface/Email.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Interface/Email.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Interface/Email.pm	Thu Aug 18 17:46:53 2005
@@ -530,7 +530,7 @@
 
     my $ErrorsTo = ParseErrorsToAddressFromHead($head);
 
-    my $MessageId = $head->get('Message-Id')
+    my $MessageId = $head->get('Message-ID')
       || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>";
 
     #Pull apart the subject line

Modified: rt/branches/3.5-TESTING/lib/RT/Interface/Web.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Interface/Web.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Interface/Web.pm	Thu Aug 18 17:46:53 2005
@@ -460,12 +460,15 @@
             Body    => $args{ARGSRef}->{'UpdateContent'},
         );
 
-        $Message->head->add( 'Message-Id' => "<rt-"
+        $Message->head->add( 'Message-ID' => 
+              "<rt-"
               . $RT::VERSION . "-"
-              . $args{TicketObj}->id . "-"
               . $$ . "-"
-              . time() . "-"
-              . rand(2000) . '@'
+              . CORE::time() . "-"
+              . int(rand(2000)) . "."
+              . $args{'TicketObj'}->id . "-"
+              . "0" . "-"  # Scrip
+              . "0" . "@"  # Email sent
               . $RT::Organization
               . ">" );
         my $old_txn = RT::Transaction->new( $session{'CurrentUser'} );
@@ -477,11 +480,13 @@
         }
 
         if ( $old_txn->Message && $old_txn->Message->First ) {
-            $Message->head->replace( 'In-Reply-To',
-                $old_txn->Message->First->GetHeader('Message-Id') );
-            $Message->head->replace( 'References',
-                    $old_txn->Message->First->GetHeader('References') . " "
-                  . $old_txn->Message->First->GetHeader('Message-Id') );
+            my @in_reply_to = split(/\s+/m, $old_txn->Message->First->GetHeader('In-Reply-To') || '');  
+            my @references = split(/\s+/m, $old_txn->Message->First->GetHeader('References') || '' );  
+            my @msgid = split(/\s+/m,$old_txn->Message->First->GetHeader('Message-ID') || ''); 
+            my @rtmsgid = split(/\s+/m,$old_txn->Message->First->GetHeader('RT-Message-ID') || ''); 
+
+            $Message->head->replace( 'In-Reply-To', join (' ', @rtmsgid ? @rtmsgid : @msgid));
+            $Message->head->replace( 'References', join(' ', @references, @msgid, @rtmsgid));
         }
 
     if ( $args{ARGSRef}->{'UpdateAttachments'} ) {

Modified: rt/branches/3.5-TESTING/lib/RT/Principal_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Principal_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Principal_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -157,11 +157,6 @@
                 @_);
 
 
-    #if we haven't specified any sort of right, we're talking about a global right
-    if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) {
-        $args{'Object'} = $RT::System;
-    }
-
     unless ($args{'Right'}) {
         return(0, $self->loc("Invalid Right"));
     }

Modified: rt/branches/3.5-TESTING/lib/RT/Record.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Record.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Record.pm	Thu Aug 18 17:46:53 2005
@@ -262,7 +262,7 @@
 
 # {{{ sub Create 
 
-=item  Create PARAMHASH
+=head2  Create PARAMHASH
 
 Takes a PARAMHASH of Column -> Value pairs.
 If any Column has a Validate$PARAMNAME subroutine defined and the 
@@ -1550,7 +1550,7 @@
 
 # {{{ AddCustomFieldValue
 
-=item AddCustomFieldValue { Field => FIELD, Value => VALUE }
+=head2 AddCustomFieldValue { Field => FIELD, Value => VALUE }
 
 VALUE should be a string.
 FIELD can be a CustomField object OR a CustomField ID.
@@ -1718,7 +1718,7 @@
 
 # {{{ DeleteCustomFieldValue
 
-=item DeleteCustomFieldValue { Field => FIELD, Value => VALUE }
+=head2 DeleteCustomFieldValue { Field => FIELD, Value => VALUE }
 
 Deletes VALUE as a value of CustomField FIELD. 
 
@@ -1774,7 +1774,7 @@
 
 # {{{ FirstCustomFieldValue
 
-=item FirstCustomFieldValue FIELD
+=head2 FirstCustomFieldValue FIELD
 
 Return the content of the first value of CustomField FIELD for this ticket
 Takes a field id or name
@@ -1797,7 +1797,7 @@
 
 # {{{ CustomFieldValues
 
-=item CustomFieldValues FIELD
+=head2 CustomFieldValues FIELD
 
 Return a ObjectCustomFieldValues object of all values of the CustomField whose 
 id or Name is FIELD for this record.

Modified: rt/branches/3.5-TESTING/lib/RT/ScripAction_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/ScripAction_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/ScripAction_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -175,13 +175,13 @@
  
     eval "require $type" || die "Require of $type failed.\n$@\n";
     
-    $self->{'Action'}  = $type->new ( ScripActionObj => $self, 
-				      TicketObj => $args{'TicketObj'},
-				      ScripObj => $args{'ScripObj'},
-				      TransactionObj => $args{'TransactionObj'},
-				      TemplateObj => $self->TemplateObj,
-				      Argument => $self->Argument,
-                      CurrentUser => $self->CurrentUser
+    $self->{'Action'}  = $type->new ( Argument => $self->Argument,
+                                      CurrentUser => $self->CurrentUser,
+                                      ScripActionObj => $self, 
+                                      ScripObj => $args{'ScripObj'},
+                                      TemplateObj => $self->TemplateObj,
+                                      TicketObj => $args{'TicketObj'},
+                                      TransactionObj => $args{'TransactionObj'},
 				    );
 }
 # }}}
@@ -229,6 +229,7 @@
 
 sub Prepare  {
     my $self = shift;
+    $self->{_Message_ID} = 0;
     return ($self->Action->Prepare());
   
 }

Modified: rt/branches/3.5-TESTING/lib/RT/Template_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Template_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Template_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -328,6 +328,9 @@
 
  This routine performs Text::Template parsing on the template and then
  imports the results into a MIME::Entity so we can really use it
+
+ Takes a hash containing Argument, TicketObj, and TransactionObj.
+
  It returns a tuple of (val, message)
  If val is 0, the message contains an error message
 

Modified: rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -2375,6 +2375,24 @@
                                  ) )
       if defined $args{'BccMessageTo'};
 
+    # If this is from an external source, we need to come up with its
+    # internal Message-ID now, so all emails sent because of this
+    # message have a common Message-ID
+    unless ($args{'MIMEObj'}->head->get('Message-ID')
+            =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>/) {
+        $args{'MIMEObj'}->head->set( 'RT-Message-ID',
+            "<rt-"
+            . $RT::VERSION . "-"
+            . $$ . "-"
+            . CORE::time() . "-"
+            . int(rand(2000)) . '.'
+            . $self->id . "-"
+            . "0" . "-"  # Scrip
+            . "0" . "@"  # Email sent
+            . $RT::Organization
+            . ">" );
+    }
+
     #Record the correspondence (write the transaction)
     my ( $Trans, $msg, $TransObj ) = $self->_NewTransaction(
              Type => $args{'NoteType'},
@@ -3701,6 +3719,17 @@
 
 # }}}
 
+# {{{ sub CustomFieldLookupType
+
+=head2 CustomFieldLookupType
+
+Returns the RT::Ticket lookup type, which can be passed to 
+RT::CustomField->Create() via the 'LookupType' hash key.
+
+=cut
+
+# }}}
+
 sub CustomFieldLookupType {
     "RT::Queue-RT::Ticket";
 }

Modified: rt/branches/3.5-TESTING/lib/RT/Transaction_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Transaction_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/Transaction_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -88,8 +88,9 @@
 
 Create a new transaction.
 
-This routine should _never_ be called anything other Than RT::Ticket. It should not be called 
-from client code. Ever. Not ever.  If you do this, we will hunt you down. and break your kneecaps.
+This routine should _never_ be called by anything other than RT::Ticket. 
+It should not be called 
+from client code. Ever. Not ever.  If you do this, we will hunt you down and break your kneecaps.
 Then the unpleasant stuff will start.
 
 TODO: Document what gets passed to this
@@ -1024,6 +1025,7 @@
         next
           unless ( $arg =~
             /^(?:Object-RT::Transaction--)?CustomField-(\d+)/ );
+	next if $arg =~ /-Magic$/;
         my $cfid   = $1;
         my $values = $args->{$arg};
         foreach
@@ -1068,6 +1070,17 @@
 
 # }}}
 
+# {{{ sub CustomFieldLookupType
+
+=head2 CustomFieldLookupType
+
+Returns the RT::Transaction lookup type, which can 
+be passed to RT::CustomField->Create() via the 'LookupType' hash key.
+
+=cut
+
+# }}}
+
 sub CustomFieldLookupType {
     "RT::Queue-RT::Ticket-RT::Transaction";
 }

Modified: rt/branches/3.5-TESTING/lib/RT/User_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/User_Overlay.pm	(original)
+++ rt/branches/3.5-TESTING/lib/RT/User_Overlay.pm	Thu Aug 18 17:46:53 2005
@@ -1028,7 +1028,7 @@
     my $password = shift;
 
     unless ( $self->CurrentUserCanModify('Password') ) {
-        return ( 0, $self->loc('Permission Denied') );
+        return ( 0, $self->loc('Password: Permission Denied') );
     }
 
     if ( !$password ) {
@@ -1038,9 +1038,11 @@
         return ( 0, $self->loc("Password needs to be at least [_1] characters long", $RT::MinimumPasswordLength) );
     }
     else {
+        my $new = !$self->HasPassword;
         $password = $self->_GeneratePassword($password);
         my ( $val, $msg ) = $self->SUPER::SetPassword($password);
         if ($val) {
+            return ( 1, $self->loc("Password set") ) if $new;
             return ( 1, $self->loc("Password changed") );
         }
         else {

Modified: rt/branches/3.5-TESTING/lib/t/regression/06mailgateway.t
==============================================================================
--- rt/branches/3.5-TESTING/lib/t/regression/06mailgateway.t	(original)
+++ rt/branches/3.5-TESTING/lib/t/regression/06mailgateway.t	Thu Aug 18 17:46:53 2005
@@ -51,6 +51,7 @@
 
 =cut
 
+use strict;
 use Test::More tests => 57;
 use RT;
 RT::LoadConfig();

Added: rt/branches/3.5-TESTING/lib/t/regression/07rights.t
==============================================================================
--- (empty file)
+++ rt/branches/3.5-TESTING/lib/t/regression/07rights.t	Thu Aug 18 17:46:53 2005
@@ -0,0 +1,110 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+# 
+# COPYRIGHT:
+#  
+# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
+#                                          <jesse.com>
+# 
+# (Except where explicitly superseded by other copyright notices)
+# 
+# 
+# LICENSE:
+# 
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+# 
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# 
+# 
+# CONTRIBUTION SUBMISSION POLICY:
+# 
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+# 
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+# 
+# END BPS TAGGED BLOCK }}}
+
+use Test::More tests => 14;
+use RT;
+RT::LoadConfig();
+RT::Init();
+use RT::I18N;
+use strict;
+no warnings 'once';
+
+use RT::Queue;
+use RT::ACE;
+use RT::User;
+use RT::Group;
+use RT::Ticket;
+
+
+# clear all global right
+my $acl = RT::ACL->new($RT::SystemUser);
+$acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' );
+$acl->LimitToObject( $RT::System );
+while( my $ace = $acl->Next ) {
+	$ace->Delete;
+}
+
+# create new queue to be shure we don't mess with rights
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($queue_id) = $queue->Create( Name => 'rights');
+ok( $queue_id, 'queue created for rights tests' );
+
+# new privileged user to check rights
+my $user = RT::User->new( $RT::SystemUser );
+my ($user_id) = $user->Create( Name => 'rights',
+			   EmailAddress => 'rights at localhost',
+			   Privileged => 1,
+			   Password => 'qwe123',
+			 );
+ok( !$user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can't own ticket" );
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" );
+
+my $group = RT::Group->new( $RT::SystemUser );
+ok( $group->LoadQueueRoleGroup( Queue => $queue_id, Type=> 'Owner' ), "load queue owners role group" );
+my $ace = RT::ACE->new( $RT::SystemUser );
+my ($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ReplyToTicket', Object => $queue );
+ok( $ace_id, "Granted queue owners role group with ReplyToTicket right: $msg" );
+ok( $group->PrincipalObj->HasRight( Right => 'ReplyToTicket', Object => $queue ), "role group can reply to ticket" );
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" );
+
+# new ticket
+my $ticket = RT::Ticket->new($RT::SystemUser);
+my ($ticket_id) = $ticket->Create( Queue => $queue_id, Subject => 'test');
+ok( $ticket_id, 'new ticket created' );
+is( $ticket->Owner, $RT::Nobody->Id, 'owner of the new ticket is nobody' );
+
+my $status;
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'OwnTicket' );
+ok( $status, "successfuly granted right: $msg" );
+ok( $user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can own ticket" );
+
+($status, $msg) = $ticket->SetOwner( $user_id );
+ok( $status, "successfuly set owner: $msg" );
+is( $ticket->Owner, $user_id, "set correct owner" );
+
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $ticket ), "user is owner and can reply to ticket" );
+

Modified: rt/branches/3.5-TESTING/sbin/rt-test-dependencies.in
==============================================================================
--- rt/branches/3.5-TESTING/sbin/rt-test-dependencies.in	(original)
+++ rt/branches/3.5-TESTING/sbin/rt-test-dependencies.in	Thu Aug 18 17:46:53 2005
@@ -203,7 +203,7 @@
 GD
 GD::Graph
 GD::Text
-Text::WikiFormat
+Text::WikiFormat 0.76
 .
 
 $deps{'MAILGATE'} = [ _( << '.') ];


More information about the Rt-commit mailing list