Explorar el Código

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

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@400 a333f486-631f-4898-b8df-5754b55c2be0
dflaven hace 15 años
padre
commit
6144226f2b
Se han modificado 3 ficheros con 172 adiciones y 55 borrados
  1. 59 0
      dictionaries/dictionary.itop.ui.php
  2. 59 0
      dictionaries/fr.dictionary.itop.ui.php
  3. 54 55
      pages/schema.php

+ 59 - 0
dictionaries/dictionary.itop.ui.php

@@ -452,6 +452,65 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:RunQuery:DevelopedQuery' => 'Redevelopped query expression: ',
 	'UI:RunQuery:SerializedFilter' => 'Serialized filter: ',
 	'UI:RunQuery:Error' => 'An error occured while running the query: %1$s',
+	
+	'UI:Schema:Title' => 'iTop objects schema',
+	'UI:Schema:CategoryMenuItem' => 'Category <b>%1$s</b>',
+	'UI:Schema:Relationships' => 'Relationships',
+	'UI:Schema:AbstractClass' => 'Abstract class: no object from this class can be instantiated.',
+	'UI:Schema:NonAbstractClass' => 'Non abstract class: objects from this class can be instantiated.',
+	'UI:Schema:ClassHierarchyTitle' => 'Class hierarchy',
+	'UI:Schema:AllClasses' => 'All classes',
+	'UI:Schema:ExternalKey_To' => 'External key to %1$s',
+	'UI:Schema:Columns_Description' => 'Columns: <em>%1$s</em>',
+	'UI:Schema:Default_Description' => 'Default: "%1$s"',
+	'UI:Schema:NullAllowed' => 'Null Allowed',
+	'UI:Schema:NullNotAllowed' => 'Null NOT Allowed',
+	'UI:Schema:Attributes' => 'Attributes',
+	'UI:Schema:AttributeCode' => 'Attribute Code',
+	'UI:Schema:AttributeCode+' => 'Internal code of the attribute',
+	'UI:Schema:Label' => 'Label',
+	'UI:Schema:Label+' => 'Label of the attribute',
+	'UI:Schema:Type' => 'Type',
+	'UI:Schema:Type+' => 'Data type of the attribute',
+	'UI:Schema:Origin' => 'Origin',
+	'UI:Schema:Origin+' => 'The base class in which this attribute is defined',
+	'UI:Schema:Description' => 'Description',
+	'UI:Schema:Description+' => 'Description of the attribute',
+	'UI:Schema:AllowedValues' => 'Allowed values',
+	'UI:Schema:AllowedValues+' => 'Restrictions on the possible values for this attribute',
+	'UI:Schema:MoreInfo' => 'More info',
+	'UI:Schema:MoreInfo+' => 'More information about the field defined in the database',
+	'UI:Schema:SearchCriteria' => 'Search criteria',
+	'UI:Schema:FilterCode' => 'Filter code',
+	'UI:Schema:FilterCode+' => 'Code of this search criteria',
+	'UI:Schema:FilterDescription' => 'Description',
+	'UI:Schema:FilterDescription+' => 'Description of this search criteria',
+	'UI:Schema:AvailOperators' => 'Available operators',
+	'UI:Schema:AvailOperators+' => 'Possible operators for this search criteria',
+	'UI:Schema:ChildClasses' => 'Child classes',
+	'UI:Schema:ReferencingClasses' => 'Referencing classes',
+	'UI:Schema:RelatedClasses' => 'Related classes',
+	'UI:Schema:LifeCycle' => 'Life cycle',
+	'UI:Schema:Triggers' => 'Triggers',
+	'UI:Schema:Relation_Code_Description' => 'Relation <em>%1$s</em> (%2$s)',
+	'UI:Schema:RelationDown_Description' => 'Down: %1$s',
+	'UI:Schema:RelationUp_Description' => 'Up: %1$s',
+	'UI:Schema:RelationPropagates' => '%1$s: propagate to %2$d levels, query: %3$s',
+	'UI:Schema:RelationDoesNotPropagate' => '%1$s: does not propagates (%2$d levels), query: %3$s',
+	'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s is referenced by the class %2$s via the field %3$s',
+	'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s is linked to %2$s via %3$s::<em>%4$s</em>',
+	'UI:Schema:Links:1-n' => 'Classes pointing to %1$s (1:n links):',
+	'UI:Schema:Links:n-n' => 'Classes linked to %1$s (n:n links):',
+	'UI:Schema:Links:All' => 'Graph of all related classes',
+	'UI:Schema:NoLifeCyle' => 'There is no life cycle defined for this class.',
+	'UI:Schema:LifeCycleTransitions' => 'Transitions',
+	'UI:Schema:LifeCyleAttributeOptions' => 'Attribute options',
+	'UI:Schema:LifeCycleHiddenAttribute' => 'Hidden',
+	'UI:Schema:LifeCycleReadOnlyAttribute' => 'Read-only',
+	'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatory',
+	'UI:Schema:LifeCycleAttributeMustChange' => 'Must change',
+	'UI:Schema:LifeCycleAttributeMustPrompt' => 'User will be prompted to change the value',
+	'UI:Schema:LifeCycleEmptyList' => 'empty list',
 
 ));
 

+ 59 - 0
dictionaries/fr.dictionary.itop.ui.php

@@ -453,6 +453,65 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'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: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: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:Default_Description' => 'Valeur par défaut: "%1$s"',
+	'UI:Schema:NullAllowed' => 'Null autorisé',
+	'UI:Schema:NullNotAllowed' => 'Null interdit',
+	'UI:Schema:Attributes' => 'Attributs',
+	'UI:Schema:AttributeCode' => 'Code',
+	'UI:Schema:AttributeCode+' => 'Code interne de l\'attribut',
+	'UI:Schema:Label' => 'Label',
+	'UI:Schema:Label+' => 'Label de l\'attribut',
+	'UI:Schema:Type' => 'Type',
+	'UI:Schema:Type+' => 'Type de données de l\'attribut',
+	'UI:Schema:Origin' => 'Origine',
+	'UI:Schema:Origin+' => 'La classe de base dans laquelle l\'attribut est défini',
+	'UI:Schema:Description' => 'Description',
+	'UI:Schema:Description+' => 'Description de l\'attribut',
+	'UI:Schema:AllowedValues' => 'Valeurs possibles',
+	'UI:Schema:AllowedValues+' => 'Restrictions des valeurs possibles pour cet attribut',
+	'UI:Schema:MoreInfo' => 'Plus info',
+	'UI:Schema:MoreInfo+' => 'Plus d\'information à propos de la définition de ce champ dans la base de données',
+	'UI:Schema:SearchCriteria' => 'Critères de recherche',
+	'UI:Schema:FilterCode' => 'Code',
+	'UI:Schema:FilterCode+' => 'Code de ce critère de recherche',
+	'UI:Schema:FilterDescription' => 'Description',
+	'UI:Schema:FilterDescription+' => 'Description de ce critère de recherche',
+	'UI:Schema:AvailOperators' => 'Opérateurs',
+	'UI:Schema:AvailOperators+' => 'Opérateurs possibles pour ce critère de recherche',
+	'UI:Schema:ChildClasses' => 'Classes dérivées',
+	'UI:Schema:ReferencingClasses' => 'Classes faisant référence',
+	'UI:Schema:RelatedClasses' => 'Classes reliées',
+	'UI:Schema:LifeCycle' => 'Cycle de vie',
+	'UI:Schema:Triggers' => 'Déclencheurs',
+	'UI:Schema:Relation_Code_Description' => 'Relation <em>%1$s</em> (%2$s)',
+	'UI:Schema:RelationDown_Description' => 'Sens descendant: %1$s',
+	'UI:Schema:RelationUp_Description' => 'Sens montant: %1$s',
+	'UI:Schema:RelationPropagates' => '%1$s: se propage sur %2$d niveau(x), requête: %3$s',
+	'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: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',
+	'UI:Schema:LifeCyleAttributeOptions' => 'Options des attributs',
+	'UI:Schema:LifeCycleHiddenAttribute' => 'Caché',
+	'UI:Schema:LifeCycleReadOnlyAttribute' => 'Lecture seule',
+	'UI:Schema:LifeCycleMandatoryAttribute' => 'Obligatoire',
+	'UI:Schema:LifeCycleAttributeMustChange' => 'Doit changer',
+	'UI:Schema:LifeCycleAttributeMustPrompt' => 'L\'utilisateur se verra proposer de changer la valeur',
+	'UI:Schema:LifeCycleEmptyList' => 'liste vide',
+
 ));
 
 ?>

+ 54 - 55
pages/schema.php

@@ -61,7 +61,7 @@ function DisplayReferencingClasses($oPage, $sClass)
 		{
 			foreach ($aRemoteKeys as $sExtKeyAttCode => $oExtKeyAttDef)
 			{
-				$oPage->add("<li>".MakeClassHLink($sRemoteClass)." by <em>$sExtKeyAttCode</em></li>\n");
+				$oPage->add("<li>".Dict::Format('UI:Schema:Class_ReferencingClasses_From_By', $sClass, MakeClassHLink($sRemoteClass), $sExtKeyAttCode)."</li>\n");
 			}
 		}
 		$oPage->add("</ul>\n");
@@ -82,7 +82,7 @@ function DisplayLinkingClasses($oPage, $sClass)
 		{
 			foreach($aRemoteClasses as $sExtKeyAttCode => $sRemoteClass)
 			{
-				$oPage->add("<li>".MakeClassHLink($sRemoteClass)." by <em>".MakeClassHLink($sLinkClass)."::$sExtKeyAttCode</em></li>\n");
+				$oPage->add("<li>".Dict::Format('UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute', $sClass, MakeClassHLink($sRemoteClass), MakeClassHLink($sLinkClass), $sExtKeyAttCode));
 			}
 		}
 		$oPage->add("</ul>\n");
@@ -133,16 +133,13 @@ function DisplayRelatedClassesBestInClass($oPage, $sClass, $iLevels = 20, &$aVis
  */
 function DisplayRelatedClasses($oPage, $sClass)
 {
-	$oPage->add("<h3>Childs</h3>\n");
-	DisplaySubclasses($oPage, $sClass);
-
-	$oPage->add("<h3>Pointed to by...</h3>\n");
+	$oPage->add("<h3>".Dict::Format('UI:Schema:Links:1-n', $sClass)."</h3>\n");
 	DisplayReferencingClasses($oPage, $sClass);
 
-	$oPage->add("<h3>Linked to ...</h3>\n");
+	$oPage->add("<h3>".Dict::Format('UI:Schema:Links:n-n', $sClass)."</h3>\n");
 	DisplayLinkingClasses($oPage, $sClass);
 
-	$oPage->add("<h3>ZE Graph ...</h3>\n");
+	$oPage->add("<h3>".Dict::S('UI:Schema:Links:All')."</h3>\n");
 	DisplayRelatedClassesBestInClass($oPage, $sClass, 4);
 }
 
@@ -154,14 +151,14 @@ function DisplayLifecycle($oPage, $sClass)
 	$sStateAttCode = MetaModel::GetStateAttributeCode($sClass);
 	if (empty($sStateAttCode))
 	{
-		$oPage->p("no lifecycle for this class");
+		$oPage->p(Dict::S('UI:Schema:NoLifeCyle'));
 	}
 	else
 	{
 		$aStates = MetaModel::EnumStates($sClass);
 		$aStimuli = MetaModel::EnumStimuli($sClass);
 		$oPage->add("<img src=\"../pages/graphviz.php?class=$sClass\">\n");
-		$oPage->add("<h3>Transitions</h3>\n");
+		$oPage->add("<h3>".Dict::S('UI:Schema:LifeCycleTransitions')."</h3>\n");
 		$oPage->add("<ul>\n");
 		foreach ($aStates as $sStateCode => $aStateDef)
 		{
@@ -187,7 +184,7 @@ function DisplayLifecycle($oPage, $sClass)
 		}
 		$oPage->add("</ul>\n");
 
-		$oPage->add("<h3>Attribute options</h3>\n");
+		$oPage->add("<h3>".Dict::S('UI:Schema:LifeCyleAttributeOptions')."</h3>\n");
 		$oPage->add("<ul>\n");
 		foreach ($aStates as $sStateCode => $aStateDef)
 		{
@@ -203,11 +200,11 @@ function DisplayLifecycle($oPage, $sClass)
 					$sAttLabel = $oAttDef->GetLabel();
 	
 					$aOptions = array();
-					if ($iOptions & OPT_ATT_HIDDEN) $aOptions[] = 'Hidden';
-					if ($iOptions & OPT_ATT_READONLY) $aOptions[] = 'Read-only';
-					if ($iOptions & OPT_ATT_MANDATORY) $aOptions[] = 'Mandatory';
-					if ($iOptions & OPT_ATT_MUSTCHANGE) $aOptions[] = 'Must change';
-					if ($iOptions & OPT_ATT_MUSTPROMPT) $aOptions[] = 'Must be proposed for changing';
+					if ($iOptions & OPT_ATT_HIDDEN) $aOptions[] = Dict::S('UI:Schema:LifeCycleHiddenAttribute');
+					if ($iOptions & OPT_ATT_READONLY) $aOptions[] = Dict::S('UI:Schema:LifeCycleReadOnlyAttribute');
+					if ($iOptions & OPT_ATT_MANDATORY) $aOptions[] = Dict::S('UI:Schema:LifeCycleMandatoryAttribute');
+					if ($iOptions & OPT_ATT_MUSTCHANGE) $aOptions[] = Dict::S('UI:Schema:LifeCycleAttributeMustChange');
+					if ($iOptions & OPT_ATT_MUSTPROMPT) $aOptions[] = Dict::S('UI:Schema:LifeCycleAttributeMustPrompt');
 					if (count($aOptions))
 					{
 						$sOptions = implode(', ', $aOptions);
@@ -223,7 +220,7 @@ function DisplayLifecycle($oPage, $sClass)
 			}
 			else
 			{
-				$oPage->p("<em>empty list</em>");
+				$oPage->p("<em>".Dict::S('UI:Schema:LifeCycleEmptyList')."</em>");
 			}
 		}
 		$oPage->add("</ul>\n");
@@ -246,7 +243,7 @@ function DisplayTriggers($oPage, $sClass)
  */
 function DisplayClassesList($oPage)
 {
-	$oPage->add("<h1>iTop objects schema</h1>\n");
+	$oPage->add("<h1>".Dict::S('UI:Schema:Title')."</h1>\n");
 
 	$oPage->add("<ul id=\"ClassesList\" class=\"treeview fileview\">\n");
 	foreach(MetaModel::EnumCategories() as $sCategory)
@@ -254,7 +251,7 @@ function DisplayClassesList($oPage)
 		if (empty($sCategory)) continue; // means 'all' -> skip
 
 		$sClosed = ($sCategory == 'bizmodel') ? '' : ' class="closed"';
-		$oPage->add("<li$sClosed>Category <b>$sCategory</b>\n");
+		$oPage->add("<li$sClosed>".Dict::Format('UI:Schema:CategoryMenuItem', $sCategory)."\n");
 
 		$oPage->add("<ul>\n");
 		foreach(MetaModel::GetClasses($sCategory) as $sClassName)
@@ -277,7 +274,7 @@ function DisplayClassesList($oPage)
 	$oPage->add("</ul>\n");
 
 
-	$oPage->add("<h1>Relationships</h1>\n");
+	$oPage->add("<h1>".Dict::S('UI:Schema:Relationships')."</h1>\n");
 
 	$oPage->add("<ul id=\"ClassesRelationships\" class=\"treeview\">\n");
 	foreach (MetaModel::EnumRelations() as $sRelCode)
@@ -304,14 +301,14 @@ function DisplayClassDetails($oPage, $sClass)
 	$oPage->p("<h2>$sClass</h2><br/>\n".MetaModel::GetClassDescription($sClass)."<br/>\n");
 	if (MetaModel::IsAbstract($sClass))
 	{
-		$oPage->p("Abstract class: could not be instantiated");
+		$oPage->p(Dict::S('UI:Schema:AbstractClass'));
 	}
 	else
 	{
-		$oPage->p("Not abstract: could be instantiated");
+		$oPage->p(Dict::S('UI:Schema:NonAbstractClass'));
 	}
-	$oPage->p("<h3>Class Hierarchy</h3>");
-	$oPage->p("[<a href=\"?operation='list'\">All classes</a>]");
+	$oPage->p("<h3>".Dict::S('UI:Schema:ClassHierarchyTitle')."</h3>");
+	$oPage->p("[<a href=\"?operation='list'\">".Dict::S('UI:Schema:AllClasses')."</a>]");
 	// List the parent classes
 	$sParent = MetaModel::GetParentPersistentClass($sClass);
 	$aParents = array();
@@ -345,7 +342,7 @@ function DisplayClassDetails($oPage, $sClass)
 	{
 		if ($oAttDef->IsExternalKey())
 		{
-		   $sValue = "External key to ".MakeClassHLink($oAttDef->GetTargetClass());
+		   $sValue = Dict::Format('UI:Schema:ExternalKey_To',MakeClassHLink($oAttDef->GetTargetClass()));
 		}
 		else
 		{
@@ -367,9 +364,9 @@ function DisplayClassDetails($oPage, $sClass)
 			$sCols = implode(', ', $aCols);
 	
 			$aMoreInfo = array();
-			$aMoreInfo[] = "Column(s): <em>$sCols</em>";
-			$aMoreInfo[] = "Default: '".$oAttDef->GetDefaultValue()."'";
-			$aMoreInfo[] = $oAttDef->IsNullAllowed() ? "Null allowed" : "Null NOT allowed";
+			$aMoreInfo[] = Dict::Format('UI:Schema:Columns_Description', $sCols);
+			$aMoreInfo[] =  Dict::Format('UI:Schema:Default_Description', $oAttDef->GetDefaultValue());
+			$aMoreInfo[] = $oAttDef->IsNullAllowed() ? Dict::S('UI:Schema:NullAllowed') : Dict::S('UI:Schema:NullNotAllowed');
 			$sMoreInfo .= implode(', ', $aMoreInfo);
 		}
 
@@ -378,14 +375,14 @@ function DisplayClassDetails($oPage, $sClass)
 
 		$aDetails[] = array('code' => $oAttDef->GetCode(), 'type' => $sType, 'origin' => $sOrigin, 'label' => $oAttDef->GetLabel(), 'description' => $sValue, 'values' => $sAllowedValues, 'moreinfo' => $sMoreInfo);
 	}
-	$oPage->SetCurrentTab('Attributes');
-	$aConfig = array( 'code' => array('label' => 'Attribute code', 'description' => 'Code of this attribute'),
-					  'label' => array('label' => 'Label', 'description' => 'Label of this attribute'),
-					  'type' => array('label' => 'Type', 'description' => 'Data type of this attribute'),
-					  'origin' => array('label' => 'Origin', 'description' => 'The base class for this attribute'),
-					  'description' => array('label' => 'Description', 'description' => 'Description of this attribute'),
-					  'values' => array('label' => 'Allowed Values', 'description' => 'Restrictions on the possible values for this attribute'),
-					  'moreinfo' => array('label' => 'More info', 'description' => 'More info for the fields related to a Database field'),
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:Attributes'));
+	$aConfig = array( 'code' => array('label' => Dict::S('UI:Schema:AttributeCode'), 'description' => Dict::S('UI:Schema:AttributeCode+')),
+					  'label' => array('label' => Dict::S('UI:Schema:Label'), 'description' => Dict::S('UI:Schema:Label+')),
+					  'type' => array('label' => Dict::S('UI:Schema:Type'), 'description' => Dict::S('UI:Schema:Type+')),
+					  'origin' => array('label' => Dict::S('UI:Schema:Origin'), 'description' => Dict::S('UI:Schema:Origin+')),
+					  'description' => array('label' => Dict::S('UI:Schema:Description'), 'description' => Dict::S('UI:Schema:Description+')),
+					  'values' => array('label' => Dict::S('UI:Schema:AllowedValues'), 'description' => Dict::S('UI:Schema:AllowedValues+')),
+					  'moreinfo' => array('label' => Dict::S('UI:Schema:MoreInfo'), 'description' => Dict::S('UI:Schema:MoreInfo+')),
 	);
 	$oPage->table($aConfig, $aDetails);
 
@@ -401,26 +398,26 @@ function DisplayClassDetails($oPage, $sClass)
 		}
 		$aDetails[] = array( 'code' => $sFilterCode, 'description' => $oFilterDef->GetLabel(),'operators' => implode(" / ", $aOpDescs));	
 	}
-	$oPage->SetCurrentTab('Search criteria');
-	$aConfig = array( 'code' => array('label' => 'Filter code', 'description' => 'Code of this search criteria'),
-					  'description' => array('label' => 'Description', 'description' => 'Description of this search criteria'),
-					  'operators' => array('label' => 'Available operators', 'description' => 'Possible operators for this search criteria')
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:SearchCriteria'));
+	$aConfig = array( 'code' => array('label' => Dict::S('UI:Schema:FilterCode'), 'description' => Dict::S('UI:Schema:FilterCode+')),
+					  'description' => array('label' => Dict::S('UI:Schema:FilterDescription'), 'description' => Dict::S('UI:Schema:FilterDescription+')),
+					  'operators' => array('label' => Dict::S('UI:Schema:AvailOperators'), 'description' => Dict::S('UI:Schema:AvailOperators+'))
 	);
 	$oPage->table($aConfig, $aDetails);
 
-	$oPage->SetCurrentTab('Child classes');
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:ChildClasses'));
 	DisplaySubclasses($oPage, $sClass);
 
-	$oPage->SetCurrentTab('Referencing classes');
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:ReferencingClasses'));
 	DisplayReferencingClasses($oPage, $sClass);
 
-	$oPage->SetCurrentTab('Related classes');
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:RelatedClasses'));
 	DisplayRelatedClasses($oPage, $sClass);
 
-	$oPage->SetCurrentTab('Lifecycle');
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:LifeCycle'));
 	DisplayLifecycle($oPage, $sClass);
 
-	$oPage->SetCurrentTab('Triggers');
+	$oPage->SetCurrentTab(Dict::S('UI:Schema:Triggers'));
 	DisplayTriggers($oPage, $sClass);
 
 	$oPage->SetCurrentTab();
@@ -436,9 +433,9 @@ function DisplayRelationDetails($oPage, $sRelCode)
 	$sDesc = MetaModel::GetRelationProperty($sRelCode, 'description');
 	$sVerbDown = MetaModel::GetRelationProperty($sRelCode, 'verb_down');
 	$sVerbUp = MetaModel::GetRelationProperty($sRelCode, 'verb_up');
-	$oPage->add("<h1>Relation <em>$sRelCode</em> ($sDesc)</h1>");
-	$oPage->p("Down: $sVerbDown");
-	$oPage->p("Up: $sVerbUp");
+	$oPage->add("<h1>".Dict::Format('UI:Schema:Relation_Code_Description', $sRelCode, $sDesc)."</h1>");
+	$oPage->p(Dict::Format('UI:Schema:RelationDown_Description', $sVerbDown));
+	$oPage->p(Dict::Format('UI:Schema:RelationUp_Description', $sVerbUp));
 
 	$oPage->add("<ul id=\"RelationshipDetails\" class=\"treeview\">\n");
 	foreach(MetaModel::GetClasses() as $sClass)
@@ -451,10 +448,15 @@ function DisplayRelationDetails($oPage, $sRelCode)
 			foreach ($aRelQueries as $sRelKey => $aQuery)
 			{
 				$sQuery = $aQuery['sQuery'];
-				$bPropagate = $aQuery['bPropagate'] ? "Propagate" : "Do not propagate";
 				$iDistance = $aQuery['iDistance'];
-
-				$oPage->add("<li>$sRelKey: $bPropagate ($iDistance) ".$sQuery."</li>\n");
+				if ($aQuery['bPropagate'])
+				{
+					$oPage->add("<li>".Dict::Format('UI:Schema:RelationPropagates', $sRelKey, $iDistance, $sQuery)."</li>\n");
+				}
+				else
+				{
+					$oPage->add("<li>".Dict::Format('UI:Schema:RelationDoesNotPropagate', $sRelKey, $iDistance, $sQuery)."</li>\n");
+				}
 			}
 			$oPage->add("</ul>\n");
 			$oPage->add("</li>\n");
@@ -474,7 +476,7 @@ $iActiveNodeId = utils::ReadParam('menu', -1);
 $currentOrganization = utils::ReadParam('org_id', 1);
 $operation = utils::ReadParam('operation', '');
 
-$oPage = new iTopWebPage("iTop objects schema", $currentOrganization);
+$oPage = new iTopWebPage(Dict::S('UI:Schema:Title'), $currentOrganization);
 $oPage->no_cache();
 
 $operation = utils::ReadParam('operation', '');
@@ -491,9 +493,6 @@ switch($operation)
 	DisplayRelationDetails($oPage, $sRelCode);
 	break;
 	
-	case 'details':
-	$oPage->p('operation=details has been deprecated, please use details_class');
-	break;
 	case 'list':
 	default:
 	DisplayClassesList($oPage);