Parcourir la source

- Implementation of the localization... on going...

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@406 a333f486-631f-4898-b8df-5754b55c2be0
dflaven il y a 15 ans
Parent
commit
8dd82cc254

+ 23 - 23
addons/userrights/userrightsprofile.class.inc.php

@@ -84,11 +84,11 @@ class URP_Users extends UserRightsBaseClass
 	{
 		if (UserRights::IsActionAllowed($sClass, $iAction, null, $this->GetKey())) 
 		{
-			return '<span style="background-color: #ddffdd;">yes</span>';
+			return '<span style="background-color: #ddffdd;">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
 		}
 		else
 		{
-			return '<span style="background-color: #ffdddd;">no</span>';
+			return '<span style="background-color: #ffdddd;">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
 		}
 	}
 	
@@ -98,7 +98,7 @@ class URP_Users extends UserRightsBaseClass
 		if (UserRights::IsAdministrator($iUserId))
 		{
 			// Looks dirty, but ok that's THE ONE
-			$oPage->p('Has Read/Write access to any object in the database.');
+			$oPage->p(Dict::S('UI:UserManagement:AdminProfile+'));
 			return;
 		}
 
@@ -120,7 +120,7 @@ class URP_Users extends UserRightsBaseClass
 			}
 			else
 			{
-				$sStimuli = '<em title="no lifecycle has been defined for this class">n/a</em>';
+				$sStimuli = '<em title="'.Dict::S('UI:UserManagement:NoLifeCycleApplicable+').'">'.Dict::S('UI:UserManagement:NoLifeCycleApplicable').'</em>';
 			}
 			
 			$aDisplayData[] = array(
@@ -134,12 +134,12 @@ class URP_Users extends UserRightsBaseClass
 		}
 	
 		$aDisplayConfig = array();
-		$aDisplayConfig['class'] = array('label' => 'Class', 'description' => '');
-		$aDisplayConfig['read'] = array('label' => 'Read', 'description' => '');
-		$aDisplayConfig['bulkread'] = array('label' => 'Bulk read', 'description' => 'List objects or export massively');
-		$aDisplayConfig['write'] = array('label' => 'Write', 'description' => 'Create and edit (modify)');
-		$aDisplayConfig['bulkwrite'] = array('label' => 'Bulk write', 'description' => 'Massively create/edit (CSV import)');
-		$aDisplayConfig['stimuli'] = array('label' => 'Stimuli', 'description' => 'Allowed (compound) actions');
+		$aDisplayConfig['class'] = array('label' => Dict::S('UI:UserManagement:Class'), 'description' => Dict::S('UI:UserManagement:Class+'));
+		$aDisplayConfig['read'] = array('label' => Dict::S('UI:UserManagement:Action:Read'), 'description' => Dict::S('UI:UserManagement:Action:Read+'));
+		$aDisplayConfig['bulkread'] = array('label' => Dict::S('UI:UserManagement:Action:BulkRead'), 'description' => Dict::S('UI:UserManagement:Action:BulkRead+'));
+		$aDisplayConfig['write'] = array('label' => Dict::S('UI:UserManagement:Action:Modify'), 'description' => Dict::S('UI:UserManagement:Action:Modify+'));
+		$aDisplayConfig['bulkwrite'] = array('label' => Dict::S('UI:UserManagement:Action:BulkModify'), 'description' => Dict::S('UI:UserManagement:Action:BulkModify+'));
+		$aDisplayConfig['stimuli'] = array('label' => Dict::S('UI:UserManagement:Action:Stimuli'), 'description' => Dict::S('UI:UserManagement:Action:Stimuli+'));
 		$oPage->table($aDisplayConfig, $aDisplayData);
 	}
 
@@ -207,11 +207,11 @@ class URP_Profiles extends UserRightsBaseClass
 		$oGrant = $oUserRights->GetClassActionGrant($this->GetKey(), $sClass, $sAction);
 		if (is_object($oGrant) && ($oGrant->Get('permission') == 'yes')) 
 		{
-			return '<span style="background-color: #ddffdd;">yes</span>';
+			return '<span style="background-color: #ddffdd;">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
 		}
 		else
 		{
-			return '<span style="background-color: #ffdddd;">no</span>';
+			return '<span style="background-color: #ffdddd;">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
 		}
 	}
 	
@@ -220,7 +220,7 @@ class URP_Profiles extends UserRightsBaseClass
 		if ($this->GetName() == "Administrator")
 		{
 			// Looks dirty, but ok that's THE ONE
-			$oPage->p('Has Read/Write access to any object in the database.');
+			$oPage->p(Dict::S('UI:UserManagement:AdminProfile+'));
 			return;
 		}
 
@@ -254,14 +254,14 @@ class URP_Profiles extends UserRightsBaseClass
 		}
 	
 		$aDisplayConfig = array();
-		$aDisplayConfig['class'] = array('label' => 'Class', 'description' => '');
-		$aDisplayConfig['read'] = array('label' => 'Read', 'description' => '');
-		$aDisplayConfig['bulkread'] = array('label' => 'Bulk read', 'description' => 'List objects or export massively');
-		$aDisplayConfig['write'] = array('label' => 'Write', 'description' => 'Create and edit (modify)');
-		$aDisplayConfig['bulkwrite'] = array('label' => 'Bulk write', 'description' => 'Massively create/edit (CSV import)');
-		$aDisplayConfig['delete'] = array('label' => 'Write', 'description' => 'Delete');
-		$aDisplayConfig['bulkdelete'] = array('label' => 'Bulk delete', 'description' => 'Massively delete');
-		$aDisplayConfig['stimuli'] = array('label' => 'Stimuli', 'description' => 'Allowed (compound) actions');
+		$aDisplayConfig['class'] = array('label' => Dict::S('UI:UserManagement:Class'), 'description' => Dict::S('UI:UserManagement:Class+'));
+		$aDisplayConfig['read'] = array('label' => Dict::S('UI:UserManagement:Action:Read'), 'description' => Dict::S('UI:UserManagement:Action:Read+'));
+		$aDisplayConfig['bulkread'] = array('label' => Dict::S('UI:UserManagement:Action:BulkRead'), 'description' => Dict::S('UI:UserManagement:Action:BulkRead+'));
+		$aDisplayConfig['write'] = array('label' => Dict::S('UI:UserManagement:Action:Modify'), 'description' => Dict::S('UI:UserManagement:Action:Modify+'));
+		$aDisplayConfig['bulkwrite'] = array('label' => Dict::S('UI:UserManagement:Action:BulkModify'), 'description' => Dict::S('UI:UserManagement:Action:BulkModify+'));
+		$aDisplayConfig['delete'] = array('label' => Dict::S('UI:UserManagement:Action:Delete'), 'description' => Dict::S('UI:UserManagement:Action:Delete+'));
+		$aDisplayConfig['bulkdelete'] = array('label' => Dict::S('UI:UserManagement:Action:BulkDelete'), 'description' => Dict::S('UI:UserManagement:Action:BulkDelete+'));
+		$aDisplayConfig['stimuli'] = array('label' => Dict::S('UI:UserManagement:Action:Stimuli'), 'description' => Dict::S('UI:UserManagement:Action:Stimuli+'));
 		$oPage->table($aDisplayConfig, $aDisplayData);
 	}
 
@@ -271,7 +271,7 @@ class URP_Profiles extends UserRightsBaseClass
 
 		$oPage->SetCurrentTabContainer('Related Objects');
 
-		$oPage->SetCurrentTab('Grants matrix');
+		$oPage->SetCurrentTab(Dict::S('UI:UserManagement:GrantMatrix'));
 		$this->DoShowGrantSumary($oPage);		
 	}
 }
@@ -428,7 +428,7 @@ class URP_UserProfile extends UserRightsBaseClass
 
 	public function GetName()
 	{
-		return "link between ".$this->Get('userlogin')." and ".$this->Get('profile');
+		return Dict::Format('UI:USerManagement:LinkBetween_User_And_Profile');
 	}
 }
 

+ 3 - 3
application/cmdbabstract.class.inc.php

@@ -716,7 +716,7 @@ abstract class cmdbAbstractObject extends CMDBObject
 				{
 					if (count($aMapCriteria[$sFilterCode]) > 1)
 					{
-						$sFilterValue = '* mixed *';
+						$sFilterValue = Dict::S('UI:SearchValue:Mixed');
 					}
 					else
 					{
@@ -734,7 +734,7 @@ abstract class cmdbAbstractObject extends CMDBObject
 			{
 				//Enum field or external key, display a combo
 				$sValue = "<select name=\"$sFilterCode\">\n";
-				$sValue .= "<option value=\"\">* Any *</option>\n";
+				$sValue .= "<option value=\"\">".Dict::S('UI:SearchValue:Any')."</option>\n";
 				foreach($aAllowedValues as $key => $value)
 				{
 					if ($sFilterValue == $key)
@@ -900,7 +900,7 @@ abstract class cmdbAbstractObject extends CMDBObject
 							// Few choices, use a normal 'select'
 							// In case there are no valid values, the select will be empty, thus blocking the user from validating the form
 							$sHTMLValue = "<select name=\"attr_{$sAttCode}{$sNameSuffix}\" id=\"$iInputId\"{$sCSSClasses}>\n";
-							$sHTMLValue .= "<option value=\"0\">-- select one --</option>\n";
+							$sHTMLValue .= "<option value=\"0\">".Dict::S('UI:SelectOne')."</option>\n";
 							foreach($aAllowedValues as $key => $display_value)
 							{
 								$sSelected = ($value == $key) ? ' selected' : '';

+ 2 - 2
application/webpage.class.inc.php

@@ -132,12 +132,12 @@ class WebPage
 					$sAlias = $aMatches[1];
 					$sClass = $aParams['class'][$sAlias];
 					$sUIPage = cmdbAbstractObject::ComputeUIPage($sClass);
-					$sHtml .= "<td><a class=\"no-arrow\" href=\"$sUIPage?operation=details&id=".$aRow[$sName]."&class=".$sClass."&".$oAppContext->GetForLink()."\"><img src=\"../images/zoom.gif\" title=\"Details\" border=\"0\"></a></td>\n";
+					$sHtml .= "<td><a class=\"no-arrow\" href=\"$sUIPage?operation=details&id=".$aRow[$sName]."&class=".$sClass."&".$oAppContext->GetForLink()."\"><img src=\"../images/zoom.gif\" title=\"".Dict::S('UI:Details+')."\" border=\"0\"></a></td>\n";
 				}
 				else if ($sName == 'key')
 				{
 					$sUIPage = cmdbAbstractObject::ComputeUIPage($aParams['class']);
-					$sHtml .= "<td><a class=\"no-arrow\" href=\"$sUIPage?operation=details&id=".$aRow['key']."&class=".$aParams['class']."&".$oAppContext->GetForLink()."\"><img src=\"../images/zoom.gif\" title=\"Details\" border=\"0\"></a></td>\n";
+					$sHtml .= "<td><a class=\"no-arrow\" href=\"$sUIPage?operation=details&id=".$aRow['key']."&class=".$aParams['class']."&".$oAppContext->GetForLink()."\"><img src=\"../images/zoom.gif\" title=\"".Dict::S('UI:Details+')."\" border=\"0\"></a></td>\n";
 				}
 				else
 				{

+ 116 - 2
dictionaries/dictionary.itop.ui.php

@@ -318,7 +318,7 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:Button:Apply' => 'Apply',
 	'UI:Button:Back' => ' << Back ',
 	'UI:Button:Next' => ' Next >> ',
-	'UI:Button:Next' => ' Finish ',
+	'UI:Button:Finish' => ' Finish ',
 	'UI:Button:DoImport' => ' Run the Import ! ',
 	'UI:Button:Done' => ' Done ',
 	'UI:Button:SimulateImport' => ' Simulate the Import ',
@@ -330,6 +330,7 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:Button:AddToList' => ' << Add ',
 	'UI:Button:RemoveFromList' => ' Remove >> ',
 	'UI:Button:FilterList' => ' Filter... ',
+	'UI:Button:Delete' => 'Delete ! ',
 
 	'UI:SearchToggle' => 'Search',
 	'UI:ClickToCreateNew' => 'Click here to create a new %1$s',
@@ -349,6 +350,22 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:Error:UploadStoppedByExtension_FileName' => 'Upload stopped  by extension. (Original file name = "%1$s").',
 	'UI:Error:UploadFailedUnknownCause_Code' => 'File upload failed, unknown cause. (Error code = "%1$s").',
 	
+	'UI:Error:1ParametersMissing' => 'Error: the following parameter must be specified for this operation: %1$s.',
+	'UI:Error:2ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s and %2$s.',
+	'UI:Error:3ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s and %3$s.',
+	'UI:Error:4ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s, %3$s and %4$s.',
+	'UI:Error:IncorrectOQLQuery_Message' => 'Error: incorrect OQL query: %1$s',
+	'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'An error occured while running the query: %1$s',
+	'UI:Error:ObjectAlreadyUpdated' => 'Error: the object has already been updated.',
+	'UI:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated.',
+	'UI:Error:ObjectsAlreadyDeleted' => 'Error: objects have already been deleted!',
+	'UI:Error:BulkDeleteNotAllowedOn_Class' => 'You are not allowed to perform a bulk delete of objects of class %1$s',
+	'UI:Error:DeleteNotAllowedOn_Class' => 'You are not allowed to delete objects of class %1$s',
+	'UI:Error:ObjectAlreadyCloned' => 'Error: the object has already been cloned!',
+	'UI:Error:ObjectAlreadyCreated' => 'Error: the object has laready been created!',
+	'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Error: invalid stimulus "%1$s" on object %2$s in state "%3$s".',
+	
+	
 	'UI:GroupBy:Count' => 'Count',
 	'UI:GroupBy:Count+' => 'Number of elements',
 	'UI:CountOfObjects' => '%1$d objects matching the criteria.',
@@ -385,6 +402,9 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:OQLQueryTab' => 'OQL Query',
 	'UI:SimpleSearchTab' => 'Simple Search',
 	'UI:Details+' => 'Details',
+	'UI:SearchValue:Any' => '* Any *',
+	'UI:SearchValue:Mixed' => '* mixed *',
+	'UI:SelectOne' => '-- select one --',
 	'UI:Login:Welcome' => 'Welcome to iTop!',
 	'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
 	'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
@@ -545,7 +565,101 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:Message:EmptyList:UseAdd' => 'The list is empty, use the "Add..." button to add elements.',
 	'UI:Message:EmptyList:UseSearchForm' => 'Use the search form above to search for objects to be added.',
 	
-	'UI:Wizard:FinalStepTitle' => 'Final step: confirmation'
+	'UI:Wizard:FinalStepTitle' => 'Final step: confirmation',
+	'UI:Title:DeletionOf_Object' => 'Deletion of %1$s',
+	'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Bulk deletion of %1$d objects of class %2$s',
+	'UI:Delete:NotAllowedToDelete' => 'You are not allowed to delete this object',
+	'UI:Delete:NotAllowedToUpdate_Fields' => 'You are not allowed to update the following field(s): %1$s',
+	'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user do not have sufficient rights',
+	'UI:Error:CannotDeleteBecauseOfDepencies' => 'This object could not be deleted because some manual operations must be performed prior to that',
+	'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
+	'UI:Delete:AutomaticallyDeleted' => 'automatically deleted',
+	'UI:Delete:AutomaticResetOf_Fields' => 'automatic reset of field(s): %1$s',
+	'UI:Delete:CleaningUpRefencesTo_Object' => 'Cleaning up all references to %1$s...',
+	'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Cleaning up all references to %1$d objects of class %2$s...',
+	'UI:Delete:Done+' => 'What was done...',
+	'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s deleted.',
+	'UI:Delete:ConfirmDeletionOf_Name' => 'Deletion of %1$s',
+	'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Deletion of %1$d objects of class %2$s',
+	'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Should be automaticaly deleted, but you are not allowed to do so',
+	'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Must be deleted manually - but you are not allowed to delete this object, please contact your application admin',
+	'UI:Delete:WillBeDeletedAutomatically' => 'Will be automaticaly deleted',
+	'UI:Delete:MustBeDeletedManually' => 'Must be deleted manually',
+	'UI:Delete:CannotUpdateBecause_Issue' => 'Should be automatically updated, but: %1$s',
+	'UI:Delete:WillAutomaticallyUpdate_Fields' => 'will be automaticaly updated (reset: %1$s)',
+	'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objects/links are referencing %2$s',
+	'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objects/links are referencing some of the objects to be deleted',	
+	'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'To ensure Database integrity, any reference should be further eliminated',
+	'UI:Delete:Consequence+' => 'What will be done',
+	'UI:Delete:SorryDeletionNotAllowed' => 'Sorry, you are not allowed to delete this object, see the detailed explanations above',
+	'UI:Delete:PleaseDoTheManualOperations' => 'Please perform the manual operations listed above prior to requesting the deletion of this object',
+	'UI:Delect:Confirm_Object' => 'Please confirm that you want to delete %1$s.',
+	'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Please confirm that you want to delete the following %1$d objects of class %2$s.',
+	'UI:WelcomeToITop' => 'Welcome to iTop',
+	'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s details',
+	'UI:ErrorPageTitle' => 'iTop - Error',
+	'UI:ObjectDoesNotExist' => 'Sorry, this object does not exist (or you are not allowed to view it).',
+	'UI:SearchResultsPageTitle' => 'iTop - Search Results',
+	'UI:Search:NoSearch' => 'Nothing to search for',
+	'UI:FullTextSearchTitle_Text' => 'Results for "%1$s":',
+	'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d object(s) of class %2$s found.',
+	'UI:Search:NoObjectFound' => 'No object found.',
+	'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modification',
+	'UI:ModificationTitle_Class_Object' => 'Modification of %1$s: <span class=\"hilite\">%2$s</span>',
+	'UI:ClonePageTitle_Object_Class' => 'iTop - Clone %1$s - %2$s modification',
+	'UI:CloneTitle_Class_Object' => 'Clone of %1$s: <span class=\"hilite\">%2$s</span>',
+	'UI:CreationPageTitle_Class' => 'iTop - Creation of a new %1$s ',
+	'UI:CreationTitle_Class' => 'Creation of a new %1$s',
+	'UI:Class_Object_NotUpdated' => 'No change detected, %1$s (%2$s) has <strong>not</strong> been modified.',
+	'UI:Class_Object_Updated' => '%1$s (%2$s) updated.',
+	'UI:BulkDeletePageTitle' => 'iTop - Bulk Delete',
+	'UI:BulkDeleteTitle' => 'Select the objects you want to delete:',
+	'UI:PageTitle:ObjectCreated' => 'iTop Object Created.',
+	'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s created.',
+	'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Applying %1$s on object: %2$s in state %3$s to target state: %4$s.',
+	'UI:PageTitle:FatalError' => 'iTop - Fatal Error',
+	'UI:FatalErrorMessage' => 'Fatal error, iTop cannot continue.',
+	'UI:Error_Details' => 'Error: %1$s.',
+
+	'UI:PageTitle:ClassProjections'	=> 'iTop user management - class projections',
+	'UI:PageTitle:ProfileProjections' => 'iTop user management - profile projections',
+	'UI:UserManagement:Class' => 'Class',
+	'UI:UserManagement:Class+' => 'Class of objects',
+	'UI:UserManagement:ProjectedObject' => 'Object',
+	'UI:UserManagement:ProjectedObject+' => 'Projected object',
+	'UI:UserManagement:AnyObject' => '* any *',
+	'UI:UserManagement:User' => 'User',
+	'UI:UserManagement:User+' => 'User involved in the projection',
+	'UI:UserManagement:Profile' => 'Profile',
+	'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
+	'UI:UserManagement:Action:Read' => 'Read',
+	'UI:UserManagement:Action:Read+' => 'Read/display objects',
+	'UI:UserManagement:Action:Modify' => 'Modify',
+	'UI:UserManagement:Action:Modify+' => 'Create and edit (modify) objects',
+	'UI:UserManagement:Action:Delete' => 'Delete',
+	'UI:UserManagement:Action:Delete+' => 'Delete objects',
+	'UI:UserManagement:Action:BulkRead' => 'Bulk Read (Export)',
+	'UI:UserManagement:Action:BulkRead+' => 'List objects or export massively',
+	'UI:UserManagement:Action:BulkModify' => 'Bulk Modify',
+	'UI:UserManagement:Action:BulkModify+' => 'Massively create/edit (CSV import)',
+	'UI:UserManagement:Action:BulkDelete' => 'Bulk Delete',
+	'UI:UserManagement:Action:BulkDelete+' => 'Massively delete objects',
+	'UI:UserManagement:Action:Stimuli' => 'Stimuli',
+	'UI:UserManagement:Action:Stimuli+' => 'Allowed (compound) actions',
+	'UI:UserManagement:Action' => 'Action',
+	'UI:UserManagement:Action+' => 'Action performed by the user',
+	'UI:UserManagement:TitleActions' => 'Actions',
+	'UI:UserManagement:Permission' => 'Permission',
+	'UI:UserManagement:Permission+' => 'User\'s permissions',
+	'UI:UserManagement:Attributes' => 'Attributes',
+	'UI:UserManagement:ActionAllowed:Yes' => 'Yes',
+	'UI:UserManagement:ActionAllowed:No' => 'No',
+	'UI:UserManagement:AdminProfile+' => 'Administrators have full read/write access to all objects in the database.',
+	'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
+	'UI:UserManagement:NoLifeCycleApplicable+' => 'No lifecycle has been defined for this class',
+	'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
+	'UI:USerManagement:LinkBetween_User_And_Profile' => 'Link between %1$s and %2$s',
+
 ));
 
 

+ 125 - 11
dictionaries/fr.dictionary.itop.ui.php

@@ -313,6 +313,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Button:Apply' => 'Appliquer',
 	'UI:Button:Back' => ' << Retour ',
 	'UI:Button:Next' => ' Suite >> ',
+	'UI:Button:Finish' => ' Terminer ',
 	'UI:Button:DoImport' => ' Lancer l\'import ! ',
 	'UI:Button:Done' => ' Terminé ',
 	'UI:Button:SimulateImport' => ' Simuler l\'import ',
@@ -324,10 +325,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Button:AddToList' => ' << Ajouter ',
 	'UI:Button:RemoveFromList' => ' Enlever >> ',
 	'UI:Button:FilterList' => ' Filtrer... ',
+	'UI:Button:Delete' => 'Supprimer ! ',
 	
 	'UI:SearchToggle' => 'Recherche',
 
-	'UI:ClickToCreateNew' => 'Cliquez ici pour créer un nouveau %1$s',
+	'UI:ClickToCreateNew' => 'Cliquez ici pour créer un nouvel objet de type %1$s',
 	'UI:NoObjectToDisplay' => 'Aucun objet à afficher.',
 	'UI:Error:MandatoryTemplateParameter_object_id' => 'Le paramètre object_id est obligatoire quand link_attr est spécifié. Vérifiez la définition du modèle.',
 	'UI:Error:MandatoryTemplateParameter_link_attr' => 'Le paramètre target_attr est obligatoire quand link_attr est spécifié. Vérifiez la définition du modèle.',
@@ -344,6 +346,21 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Error:UploadStoppedByExtension_FileName' => 'Téléchargement arrêté à cause de l\'extension. (Nom du fichier original = "%1$s").',
 	'UI:Error:UploadFailedUnknownCause_Code' => 'Le téléchargement a échoué pour une raison inconnue. (Code d\'erreur = "%1$s").',
 	
+	'UI:Error:1ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque le paramètre suivant: %1$s.',
+	'UI:Error:2ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque les paramètres suivants: %1$s and %2$s.',
+	'UI:Error:3ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque les paramètres suivants: %1$s, %2$s and %3$s.',
+	'UI:Error:4ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque les paramètres suivants: %1$s, %2$s, %3$s and %4$s.',
+	'UI:Error:IncorrectOQLQuery_Message' => 'Erreur: requête OQL incorrecte: %1$s',
+	'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Une erreur s\'est produite en exécutant la requête: %1$s',
+	'UI:Error:ObjectAlreadyUpdated' => 'Erreur: l\'objet a déjà été mis à jour.',
+	'UI:Error:ObjectCannotBeUpdated' => 'Erreur: l\'objet ne peut pas être mis à jour.',
+	'UI:Error:ObjectsAlreadyDeleted' => 'Erreur: les objets ont déjà été supprimés !',
+	'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Vous n\'êtes pas autorisé à faire une suppression massive sur les objets de type %1$s',
+	'UI:Error:DeleteNotAllowedOn_Class' => 'Vous n\'êtes pas autorisé supprimer des objets de type %1$s',
+	'UI:Error:ObjectAlreadyCloned' => 'Erreur: l\'objet a déjà été dupliqué !',
+	'UI:Error:ObjectAlreadyCreated' => 'Erreur: l\'objet a déjà été créé !',
+	'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Erreur: le stimulus "%1$s" n\'est pas valide pour l\'objet %2$s dans l\'état "%3$s".',
+	
 	'UI:GroupBy:Count' => 'Nombre',
 	'UI:GroupBy:Count+' => 'Nombre d\'éléments',
 	'UI:CountOfObjects' => '%1$d objets correspondants aux critères.',
@@ -360,8 +377,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Menu:New' => 'Créer...',
 	'UI:Menu:Add' => 'Ajouter...',
 	'UI:Menu:Manage' => 'Gérer...',
-	'UI:Menu:EMail' => 'eMail',
-	'UI:Menu:CSVExport' => 'Export CSV',
+	'UI:Menu:EMail' => 'Envoyer par eMail',
+	'UI:Menu:CSVExport' => 'Exporter en CSV',
 	'UI:Menu:Modify' => 'Modifier...',
 	'UI:Menu:Delete' => 'Supprimer...',
 	'UI:Menu:Manage' => 'Gérer...',
@@ -380,6 +397,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:OQLQueryTab' => 'Requête OQL',
 	'UI:SimpleSearchTab' => 'Recherche simple',
 	'UI:Details+' => 'Détails',
+	'UI:SearchValue:Any' => '* Indifférent *',
+	'UI:SearchValue:Mixed' => '* Plusieurs *',
+	'UI:SelectOne' => '-- choisir une valeur --',
 	'UI:Login:Welcome' => 'Bienvenue dans iTop!',
 	'UI:Login:IncorrectLoginPassword' => 'Mot de passe ou identifiant incorrect.',
 	'UI:Login:IdentifyYourself' => 'Merci de vous identifier',
@@ -465,20 +485,20 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:RunQuery:HeaderOQLExpression' => 'Requête OQL',
 	'UI:RunQuery:HeaderOQLExpression+' => 'La requête en OQL',
 	'UI:RunQuery:ExpressionToEvaluate' => 'Requête à exécuter : ',
-	'UI:RunQuery:MoreInfo' => 'Plus d\'information sur le requête: ',
+	'UI:RunQuery:MoreInfo' => 'Plus d\'information sur le requête : ',
 	'UI:RunQuery:DevelopedQuery' => 'Requête OQL décompilée : ',
 	'UI:RunQuery:SerializedFilter' => 'Version sérialisée : ',
-	'UI:RunQuery:Error' => 'Une erreur s\'est produite durant l\'exécution de la requête: %1$s',
+	'UI:RunQuery:Error' => 'Une erreur s\'est produite durant l\'exécution de la requête : %1$s',
 
 	'UI:Schema:Title' => 'Modèle de données iTop',
 	'UI:Schema:CategoryMenuItem' => 'Catégorie <b>%1$s</b>',
 	'UI:Schema:Relationships' => 'Relations',
-	'UI:Schema:AbstractClass' => 'Class abstraite: les objets de cette classe ne peuvent pas être instanciés.',
-	'UI:Schema:NonAbstractClass' => 'Class concrète: les objets de cette classe peuvent être instanciés.',
+	'UI:Schema:AbstractClass' => 'Classe abstraite : les objets de cette classe ne peuvent pas être instanciés.',
+	'UI:Schema:NonAbstractClass' => 'Classe concrète : les objets de cette classe peuvent être instanciés.',
 	'UI:Schema:ClassHierarchyTitle' => 'Hiérachie des classes',
 	'UI:Schema:AllClasses' => 'Toutes les classes',
 	'UI:Schema:ExternalKey_To' => 'Clef externe vers %1$s',
-	'UI:Schema:Columns_Description' => 'Colonnes: <em>%1$s</em>',
+	'UI:Schema:Columns_Description' => 'Colonnes : <em>%1$s</em>',
 	'UI:Schema:Default_Description' => 'Valeur par défaut: "%1$s"',
 	'UI:Schema:NullAllowed' => 'Null autorisé',
 	'UI:Schema:NullNotAllowed' => 'Null interdit',
@@ -516,8 +536,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Schema:RelationDoesNotPropagate' => '%1$s: ne se propage pas (%2$d niveaux), requête: %3$s',
 	'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s est référencé par la classe %2$s via le champ %3$s',
 	'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s est lié à la classe %2$s via %3$s::<em>%4$s</em>',
-	'UI:Schema:Links:1-n' => 'Classes pointant sur %1$s (liens 1:n):',
-	'UI:Schema:Links:n-n' => 'Classes liées à %1$s (liens n:n):',
+	'UI:Schema:Links:1-n' => 'Classes pointant sur %1$s (liens 1:n) :',
+	'UI:Schema:Links:n-n' => 'Classes liées à %1$s (liens n:n) :',
 	'UI:Schema:Links:All' => 'Graphe de toutes les classes liées',
 	'UI:Schema:NoLifeCyle' => 'Aucun cycle de vie n\'est défini pour cette classe.',
 	'UI:Schema:LifeCycleTransitions' => 'Transitions',
@@ -542,7 +562,101 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:Message:EmptyList:UseAdd' => 'La liste est vide, utilisez le bouton "Ajouter..." pour ajouter des objets.',
 	'UI:Message:EmptyList:UseSearchForm' => 'Utilisez le formulaire de recherche ci-dessus pour trouver les objets à ajouter.',
 
-	'UI:Wizard:FinalStepTitle' => 'Dernière étape: confirmation'
+	'UI:Wizard:FinalStepTitle' => 'Dernière étape: confirmation',
+	'UI:Title:DeletionOf_Object' => 'Suppression de %1$s',
+	'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Suppression massive de %1$d objets de type %2$s',
+	'UI:Delete:NotAllowedToDelete' => 'Vous n\'êtes pas autorisé à supprimer cet objet',
+	'UI:Delete:NotAllowedToUpdate_Fields' => 'Vous n\'êtes pas autorisé à mettre à jour les champs suivants : %1$s',
+	'UI:Error:NotEnoughRightsToDelete' => 'Cet objet ne peut pas être supprimé car l\'utilisateur courant n\'a pas les droits nécessaires.',
+	'UI:Error:CannotDeleteBecauseOfDepencies' => 'Cet objet ne peut pas être supprimé, des opérations manuelles sont nécessaire avant sa suppression.',
+	'UI:Archive_User_OnBehalfOf_User' => '%1$s pour %2$s',
+	'UI:Delete:AutomaticallyDeleted' => 'supprimé automatiquement',
+	'UI:Delete:AutomaticResetOf_Fields' => 'mise à jour automatique des champ(s): %1$s',
+	'UI:Delete:CleaningUpRefencesTo_Object' => 'Suppression de toutes les références vers %1$s...',
+	'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Supression de toutes les références vers les %1$d objets de type %2$s...',
+	'UI:Delete:Done+' => 'Ce qui a été effectué...',
+	'UI:Delete:_Name_Class_Deleted' => ' %2$s %1$s supprimé.',
+	'UI:Delete:ConfirmDeletionOf_Name' => 'Suppression de %1$s',
+	'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Supression de %1$d objets de type %2$s',
+	'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Devrait être supprimé automatiquement, mais vous n\'avez pas le droit d\'effectuer cette opération.',
+	'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Doit être supprimé manuellement - mais vous n\'avez pas le droit de supprimer cet objet, contactez votre administrateur pour régler ce problème',
+	'UI:Delete:WillBeDeletedAutomatically' => 'Sera supprimé automatiquement',
+	'UI:Delete:MustBeDeletedManually' => 'Doit être supprimé manuellement',
+	'UI:Delete:CannotUpdateBecause_Issue' => 'Devrait être mis à jour automatiquement, mais: %1$s',
+	'UI:Delete:WillAutomaticallyUpdate_Fields' => 'Va être mis à jour automatiquement (champs impactés : %1$s)',
+	'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objets ou liens font référence à %2$s',
+	'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objets ou liens font référence à certain des objets à supprimer',	
+	'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'pour garantir l\'intégrité de la base de données, toutes les références doivent être supprimées.',
+	'UI:Delete:Consequence+' => 'Ce qui va être effectué',
+	'UI:Delete:SorryDeletionNotAllowed' => 'Désolé, vous n\'êtes pas autorisé à supprimer cette objet. Voir les explications détaillées ci-dessus.',
+	'UI:Delete:PleaseDoTheManualOperations' => 'Vous devez effectuer les opération manuelles listées ci-dessus avant de pourvoir supprimer cet objet.',
+	'UI:Delect:Confirm_Object' => 'Confirmez que vous voulez bien supprimer %1$s.',
+	'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Confirmez que vous voulez bien supprimer les %1$d objets de type %2$s ci-dessous.',
+	'UI:WelcomeToITop' => 'Bienvenue dans iTop',
+	'UI:DetailsPageTitle' => 'iTop - %2$s - Détails de %1$s',
+	'UI:ErrorPageTitle' => 'iTop - Erreur',
+	'UI:ObjectDoesNotExist' => 'Désolé cet objet n\'existe pas (où vous n\'êtes pas autorisé à l\'afficher).',
+	'UI:SearchResultsPageTitle' => 'iTop - Résultats de la recherche',
+	'UI:Search:NoSearch' => 'Rien à rechercher',
+	'UI:FullTextSearchTitle_Text' => 'Résultats pour "%1$s" :',
+	'UI:Search:Count_ObjectsOf_Class_Found' => 'Trouvé %1$d objet(s) de type %2$s.',
+	'UI:Search:NoObjectFound' => 'Aucun objet trouvé.',
+	'UI:ModificationPageTitle_Object_Class' => 'iTop - %2$s - Modification de %1$s',
+	'UI:ModificationTitle_Class_Object' => '%1$s - Modification de <span class=\"hilite\">%2$s</span>',
+	'UI:ClonePageTitle_Object_Class' => 'iTop - %2$s - Duplication de %1$s',
+	'UI:CloneTitle_Class_Object' => ' %1$s - Duplication de <span class=\"hilite\">%2$s</span>',
+	'UI:CreationPageTitle_Class' => 'iTop - Création d\'un objet de type %1$s ',
+	'UI:CreationTitle_Class' => 'Création d\'un objet de type %1$s',
+	'UI:Class_Object_NotUpdated' => 'Aucun changement détecté, %2$s (type : %2$s) n\'a <strong>pas</strong> été modifié.',
+	'UI:Class_Object_Updated' => '%1$s (%2$s) mise à jour.',
+	'UI:BulkDeletePageTitle' => 'iTop - Supression massive',
+	'UI:BulkDeleteTitle' => 'Sélectionnez les objets à supprimer:',
+	'UI:PageTitle:ObjectCreated' => 'iTop objet créé.',
+	'UI:Title:Object_Of_Class_Created' => '%2$s - %1$s créé(e).',
+	'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '%1$s de %2$s de l\'état %3$s vers l\'état %4$s.',
+	'UI:PageTitle:FatalError' => 'iTop - Erreur Fatale',
+	'UI:FatalErrorMessage' => 'Erreur fatale, iTop ne peut pas continuer.',
+	'UI:Error_Details' => 'Erreur: %1$s.',
+
+	'UI:PageTitle:ClassProjections'	=> 'iTop gestion des utilisateurs - projections des classes',
+	'UI:PageTitle:ProfileProjections' => 'iTop gestion des utilisateurs - projections des profils',
+	'UI:UserManagement:Class' => 'Type',
+	'UI:UserManagement:Class+' => 'Type des objets',
+	'UI:UserManagement:ProjectedObject' => 'Objet',
+	'UI:UserManagement:ProjectedObject+' => 'L\'objet projeté',
+	'UI:UserManagement:AnyObject' => '* indifférent *',
+	'UI:UserManagement:User' => 'Utilisateur',
+	'UI:UserManagement:User+' => 'L\'utilisateur',
+	'UI:UserManagement:Profile' => 'Profil',
+	'UI:UserManagement:Profile+' => 'Profil dans lequel la projection est définie',
+	'UI:UserManagement:Action:Read' => 'Lecture',
+	'UI:UserManagement:Action:Read+' => 'Lecture et affichage d\'un objet',
+	'UI:UserManagement:Action:Modify' => 'Modification',
+	'UI:UserManagement:Action:Modify+' => 'Création et modification d\'un objet',
+	'UI:UserManagement:Action:Delete' => 'Suppression',
+	'UI:UserManagement:Action:Delete+' => 'Supression d\'un objet',
+	'UI:UserManagement:Action:BulkRead' => 'Lecture en masse (export)',
+	'UI:UserManagement:Action:BulkRead+' => 'Export de liste d\'objets',
+	'UI:UserManagement:Action:BulkModify' => 'Modification en masse',
+	'UI:UserManagement:Action:BulkModify+' => 'Création et modification de plusieurs objets (import CSV)',
+	'UI:UserManagement:Action:BulkDelete' => 'Suppression en masse',
+	'UI:UserManagement:Action:BulkDelete+' => 'Suppression de plusieurs objets',
+	'UI:UserManagement:Action:Stimuli' => 'Stimuli',
+	'UI:UserManagement:Action:Stimuli+' => 'Actions autorisées',
+	'UI:UserManagement:Action' => 'Action',
+	'UI:UserManagement:Action+' => 'l\'action effectuée par l\'utilisateur',
+	'UI:UserManagement:TitleActions' => 'Actions',
+	'UI:UserManagement:Permission' => 'Permission',
+	'UI:UserManagement:Permission+' => 'Les droits de l\'utilisateur',
+	'UI:UserManagement:Attributes' => 'Champs',
+	'UI:UserManagement:ActionAllowed:Yes' => 'Oui',
+	'UI:UserManagement:ActionAllowed:No' => 'Non',
+	'UI:UserManagement:AdminProfile+' => 'Les administrateurs ont un accès total à tous les objets de la base de données.',
+	'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
+	'UI:UserManagement:NoLifeCycleApplicable+' => 'Aucun cycle de vie n\'est défini pour ce type d\'objets.',
+	'UI:UserManagement:GrantMatrix' => 'Matrice des droits',
+	'UI:USerManagement:LinkBetween_User_And_Profile' => 'Lien entre %1$s et %2$s',
+
 ));
 
 ?>

Fichier diff supprimé car celui-ci est trop grand
+ 329 - 367
pages/UI.php


+ 4 - 4
pages/usermanagement_classproj.php

@@ -32,8 +32,8 @@ function ComputeProjections($oPage, $sScope)
 	// Setup display structure
 	//
 	$aDisplayConfig = array();
-	$aDisplayConfig['class'] = array('label' => 'Class', 'description' => 'Class');
-	$aDisplayConfig['object'] = array('label' => 'Object', 'description' => 'Projected object');
+	$aDisplayConfig['class'] = array('label' => Dict::S('UI:UserManagement:Class'), 'description' => Dict::S('UI:UserManagement:Class+'));
+	$aDisplayConfig['object'] = array('label' => Dict::S('UI:UserManagement:ProjectedObject'), 'description' => Dict::S('UI:UserManagement:ProjectedObject+'));
 	foreach ($aDimensions as $iDimension => $oDimension)
 	{
 		$aDisplayConfig['dim'.$oDimension->GetKey()] = array('label' => $oDimension->GetName(), 'description' => $oDimension->Get('description'));
@@ -57,7 +57,7 @@ function ComputeProjections($oPage, $sScope)
 			$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 			if (is_null($aValues))
 			{
-				$sValues = htmlentities('<any>');
+				$sValues = htmlentities(Dict::S('UI:UserManagement:AnyObject'));
 			}
 			else
 			{
@@ -88,7 +88,7 @@ $iActiveNodeId = utils::ReadParam('menu', -1);
 $currentOrganization = utils::ReadParam('org_id', 1);
 $sScope = utils::ReadParam('scope', 'SELECT bizDevice');
 
-$oPage = new iTopWebPage("iTop user management - class projections", $currentOrganization);
+$oPage = new iTopWebPage(Dict::S('UI:PageTitle:ClassProjections'), $currentOrganization);
 $oPage->no_cache();
 
 ComputeProjections($oPage, $sScope);

+ 4 - 4
pages/usermanagement_profileproj.php

@@ -37,8 +37,8 @@ function ComputeProjections($oPage)
 	// Setup display structure
 	//
 	$aDisplayConfig = array();
-	$aDisplayConfig['user'] = array('label' => 'User', 'description' => 'User concerned by the projection');
-	$aDisplayConfig['profile'] = array('label' => 'Profile', 'description' => 'Profile in which the projection is specified');
+	$aDisplayConfig['user'] = array('label' => Dict::S('UI:UserManagement:User'), 'description' => Dict::S('UI:UserManagement:User+'));
+	$aDisplayConfig['profile'] = array('label' => Dict::S('UI:UserManagement:Profile'), 'description' => Dict::S('UI:UserManagement:Profile+'));
 	foreach ($aDimensions as $iDimension => $oDimension)
 	{
 		$aDisplayConfig['dim'.$oDimension->GetKey()] = array('label' => $oDimension->GetName(), 'description' => $oDimension->Get('description'));
@@ -67,7 +67,7 @@ function ComputeProjections($oPage)
 				$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
 				if (is_null($aValues))
 				{
-					$sValues = htmlentities('<any>');
+					$sValues = htmlentities(Dict::S('UI:UserManagement:AnyObject'));
 				}
 				else
 				{
@@ -98,7 +98,7 @@ $oAppContext = new ApplicationContext();
 $iActiveNodeId = utils::ReadParam('menu', -1);
 $currentOrganization = utils::ReadParam('org_id', 1);
 
-$oPage = new iTopWebPage("iTop user management - profile projections", $currentOrganization);
+$oPage = new iTopWebPage(Dict::S('UI:PageTitle:ProfileProjections'), $currentOrganization);
 $oPage->no_cache();
 
 ComputeProjections($oPage);

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff