Bläddra i källkod

Localization: first step (class Dict and handling of Metamodel)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@338 a333f486-631f-4898-b8df-5754b55c2be0
romainq 15 år sedan
förälder
incheckning
a0ce18a861

+ 15 - 2
core/attributedef.class.inc.php

@@ -132,8 +132,10 @@ abstract class AttributeDefinition
 	public function IsNullAllowed() {return true;} 
 	public function GetNullValue() {return null;} 
 	public function GetCode() {return $this->m_sCode;} 
-	public function GetLabel() {return $this->Get("label");} 
-	public function GetDescription() {return $this->Get("description");} 
+	public function GetLabel() {return Dict::S('Class:'.$this->m_sHostClass.'/Attribute:'.$this->m_sCode, $this->m_sCode);} 
+	public function Obsolete_GetLabel() {return $this->Get("label");} 
+	public function GetDescription() {return Dict::S('Class:'.$this->m_sHostClass.'/Attribute:'.$this->m_sCode.'+', '');} 
+	public function Obsolete_GetDescription() {return $this->Get("description");} 
 	public function GetValuesDef() {return null;} 
 	public function GetPrerequisiteAttributes() {return array();} 
 	//public function IsSearchableStd() {return $this->Get("search_std");} 
@@ -828,6 +830,17 @@ class AttributeEnum extends AttributeString
 		// later, we could imagine a detailed description in the title
 		return "<span title=\"\">".parent::GetAsHtml($sLabel)."</span>";
 	}
+
+	public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
+	{
+		$aRawValues = parent::GetAllowedValues($aArgs, $sBeginsWith);
+		$aLocalizedValues = array();
+		foreach ($aRawValues as $sKey => $sValue)
+		{
+			$aLocalizedValues[$sKey] = Dict::S('Class:'.$this->GetHostClass().'/Attribute:'.$this->GetCode().'/Value:'.$sKey, $sKey);
+		}
+  		return $aLocalizedValues;
+  }
 }
 
 /**

+ 2 - 0
core/cmdbobject.class.inc.php

@@ -17,6 +17,8 @@ require_once('coreexception.class.inc.php');
 
 require_once('config.class.inc.php');
 
+require_once('dict.class.inc.php');
+
 require_once('attributedef.class.inc.php');
 require_once('filterdef.class.inc.php');
 require_once('stimulus.class.inc.php');

+ 44 - 3
core/config.class.inc.php

@@ -2,7 +2,7 @@
 require_once('coreexception.class.inc.php');
 /**
  * Config
- * configuration data
+ * configuration data (this class cannot not be localized, because it is responsible for loading the dictionaries)
  *
  * @package     iTopORM
  * @author      Romain Quetiez <romainquetiez@yahoo.fr>
@@ -30,6 +30,7 @@ class Config
 	protected $m_aAppModules;
 	protected $m_aDataModels;
 	protected $m_aAddons;
+	protected $m_aDictionaries;
 
 	protected $m_sDBHost;
 	protected $m_sDBUser;
@@ -59,13 +60,19 @@ class Config
 	 * @var boolean Whether or not a secure connection is required for using the application
 	 */	 	
 	protected $m_bSecureConnectionRequired;
-
+
+	/**
+	 * @var string Langage code, default if the user language is undefined
+	 */	 	
+	protected $m_sDefaultLanguage;
+
 	public function __construct($sConfigFile, $bLoadConfig = true)
 	{
 		$this->m_sFile = $sConfigFile;
 		$this->m_aAppModules = array();
 		$this->m_aDataModels = array();
 		$this->m_aAddons = array();
+		$this->m_aDictionaries = array();
 
 		$this->m_sDBHost = '';
 		$this->m_sDBUser = '';
@@ -77,6 +84,7 @@ class Config
 		$this->m_iStandardReloadInterval = DEFAULT_STANDARD_RELOAD_INTERVAL;
 		$this->m_iFastReloadInterval = DEFAULT_FAST_RELOAD_INTERVAL;
 		$this->m_bSecureConnectionRequired = DEFAULT_SECURE_CONNECTION_REQUIRED;
+		$this->m_sDefaultLanguage = 'EN US';
 		if ($bLoadConfig)
 		{
 			$this->Load($sConfigFile);
@@ -144,9 +152,14 @@ class Config
 		{
 			$MyModules['addons']['user rights'] = '../addons/userrights/userrightsnull.class.inc.php';
 		}
+		if (!array_key_exists('dictionaries', $MyModules))
+		{
+			throw new ConfigException('Missing item in configuration file', array('file' => $sConfigFile, 'expected' => '$MyModules[\'dictionaries\']'));
+		}
 		$this->m_aAppModules = $MyModules['application'];
 		$this->m_aDataModels = $MyModules['business'];
 		$this->m_aAddons = $MyModules['addons'];
+		$this->m_aDictionaries = $MyModules['dictionaries'];
 
 		$this->m_sDBHost = trim($MySettings['db_host']);
 		$this->m_sDBUser = trim($MySettings['db_user']);
@@ -159,6 +172,8 @@ class Config
 		$this->m_iStandardReloadInterval = isset($MySettings['standard_reload_interval']) ? trim($MySettings['standard_reload_interval']) : DEFAULT_STANDARD_RELOAD_INTERVAL;
 		$this->m_iFastReloadInterval = isset($MySettings['fast_reload_interval']) ? trim($MySettings['fast_reload_interval']) : DEFAULT_FAST_RELOAD_INTERVAL;
 		$this->m_bSecureConnectionRequired = isset($MySettings['secure_connection_required']) ? trim($MySettings['secure_connection_required']) : DEFAULT_SECURE_CONNECTION_REQUIRED;
+
+		$this->m_sDefaultLanguage = isset($MySettings['default_language']) ? trim($MySettings['default_language']) : 'EN US';
 	}
 
 	protected function Verify()
@@ -175,6 +190,10 @@ class Config
 		{
 			$this->CheckFile('addon module', $sToInclude);
 		}
+		foreach ($this->m_aDictionaries as $sModule => $sToInclude)
+		{
+			$this->CheckFile('dictionary', $sToInclude);
+		}
 	}
 
 	public function GetAppModules()
@@ -192,6 +211,11 @@ class Config
 		return $this->m_aAddons;
 	}
 
+	public function GetDictionaries()
+	{
+		return $this->m_aDictionaries;
+	}
+
 	public function GetDBHost()
 	{
 		return $this->m_sDBHost;
@@ -242,6 +266,11 @@ class Config
 		return $this->m_bSecureConnectionRequired;
 	}
 
+	public function GetDefaultLanguage()
+	{
+		return $this->m_sDefaultLanguage;
+	}
+
 	public function SetDBHost($sDBHost)
 	{
 		$this->m_sDBHost = $sDBHost;
@@ -292,6 +321,11 @@ class Config
 		$this->m_bSecureConnectionRequired = $bSecureConnectionRequired;
 	}
 
+	public function SetDefaultLanguage($sLanguageCode)
+	{
+		$this->m_sDefaultLanguage = $sLanguageCode;
+	}
+
 	public function FileIsWritable()
 	{
 		return is_writable($this->m_sFile);
@@ -334,6 +368,7 @@ class Config
 			fwrite($hFile, "\t'standard_reload_interval' => {$this->m_iStandardReloadInterval},\n");
 			fwrite($hFile, "\t'fast_reload_interval' => {$this->m_iFastReloadInterval},\n");
 			fwrite($hFile, "\t'secure_connection_required' => ".($this->m_bSecureConnectionRequired ? 'true' : 'false').",\n");
+			fwrite($hFile, "\t'default_language' => '{$this->m_sDefaultLanguage}',\n");
 			fwrite($hFile, ");\n");
 			
 			fwrite($hFile, "\n/**\n");
@@ -362,7 +397,13 @@ class Config
 			fwrite($hFile, "\t'addons' => array (\n");
 			fwrite($hFile, "\t\t'user rights' => '../addons/userrights/userrightsprofile.class.inc.php',\n");
 			fwrite($hFile, "\t\t// other modules to come later\n");
-			fwrite($hFile, "\t)\n");
+			fwrite($hFile, "\t),\n");
+			fwrite($hFile, "\t'dictionaries' => array (\n");
+			fwrite($hFile, "\t\t'../dictionaries/dictionary.itop.model.php',\n");
+			fwrite($hFile, "\t\t'../dictionaries/dictionary.itop.core.php',\n");
+			fwrite($hFile, "\t\t'../dictionaries/dictionary.itop.ui.php',\n");
+			fwrite($hFile, "\t\t// to be continued...\n");
+			fwrite($hFile, "\t),\n");
 			fwrite($hFile, ");\n");
 			fwrite($hFile, '?'.'>'); // Avoid perturbing the syntax highlighting !
 			return fclose($hFile);

+ 181 - 0
core/dict.class.inc.php

@@ -0,0 +1,181 @@
+<?php
+/**
+ * Dict
+ * Handles Localizable data 
+ *
+ * @package     iTopORM
+ * @author      Romain Quetiez <romainquetiez@yahoo.fr>
+ * @author      Denis Flaven <denisflave@free.fr>
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link        www.itop.com
+ * @since       1.0
+ * @version     1.1.1.1 $
+ */
+
+
+class DictException extends CoreException
+{
+}
+
+class DictExceptionUnknownLanguage extends DictException
+{
+	public function __construct($sLanguageCode)
+	{
+		$aContext = array();
+		$aContext['language_code'] = $sLanguageCode;
+		parent::__construct('Unknown localization language', $aContext);
+	}
+}
+
+class DictExceptionMissingString extends DictException
+{
+	public function __construct($sLanguageCode, $sStringCode)
+	{
+		$aContext = array();
+		$aContext['language_code'] = $sLanguageCode;
+		$aContext['string_code'] = $sStringCode;
+		parent::__construct('Missing localized string', $aContext);
+	}
+}
+
+
+define('DICT_ERR_STRING', 1); // when a string is missing, return the identifier
+define('DICT_ERR_EXCEPTION', 2); // when a string is missing, throw an exception
+//define('DICT_ERR_LOG', 3); // when a string is missing, log an error
+
+
+class Dict
+{
+	protected static $m_iErrorMode = DICT_ERR_STRING;
+	protected static $m_sCurrentLanguage = 'EN US';
+
+	protected static $m_aLanguages = array(); // array( code => array( 'description' => '...', 'localized_description' => '...') ...)
+	protected static $m_aData = array();
+
+
+	public static function SetLanguage($sLanguageCode)
+	{
+		if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
+		{
+			throw new DictExceptionUnknownLanguage($sLanguageCode);
+		}
+		self::$m_sCurrentLanguage = $sLanguageCode;
+	}
+
+
+	//returns a hash array( code => array( 'description' => '...', 'localized_description' => '...') ...)
+	public static function GetLanguages()
+	{
+		return self::$m_aLanguages;
+	}
+
+	// iErrorMode from {DICT_ERR_STRING, DICT_ERR_EXCEPTION}
+	public static function SetErrorMode($iErrorMode)
+	{
+		self::$m_iErrorMode = $iErrorMode;
+	}
+
+
+	public static function S($sStringCode, $sDefault = null)
+	{
+		$aCurrentDictionary = self::$m_aData[self::$m_sCurrentLanguage];
+		if (!array_key_exists($sStringCode, $aCurrentDictionary))
+		{
+			switch (self::$m_iErrorMode)
+			{
+				case DICT_ERR_STRING:
+					if (is_null($sDefault))
+					{
+						return $sStringCode;
+					}
+					else
+					{
+						return $sDefault;
+					}
+					break;
+
+				case DICT_ERR_EXCEPTION:
+				default:
+					throw new DictExceptionMissingString(self::$m_sCurrentLanguage, $sStringCode);
+					break;
+			}
+		}
+		return $aCurrentDictionary[$sStringCode];
+	}
+
+
+	public static function Format($sFormatCode /*, ... arguments ....*/)
+	{
+		$sLocalizedFormat = self::S($sFormatCode);
+
+		$aArguments = func_get_args();
+		array_shift($aArguments);
+		return vsprintf($sFormat, $aArguments);
+	}
+
+
+	// sLanguageCode: Code identifying the language i.e. FR-FR
+	// sEnglishLanguageDesc: Description of the language code, in English. i.e. French (France)
+	// sLocalizedLanguageDesc: Description of the language code, in its own language. i.e. Français (France)
+	// aEntries: Hash array of dictionnary entries
+	public static function Add($sLanguageCode, $sEnglishLanguageDesc, $sLocalizedLanguageDesc, $aEntries)
+	{
+		if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
+		{
+			self::$m_aLanguages[$sLanguageCode] = array($sEnglishLanguageDesc, $sLocalizedLanguageDesc);
+			self::$m_aData[$sLanguageCode] = array();
+		}
+		self::$m_aData[$sLanguageCode] = array_merge(self::$m_aData[$sLanguageCode], $aEntries);
+	}
+
+	public static function MakeStats($sLanguageCode, $sLanguageRef = 'EN US')
+	{
+		$aMissing = array(); // Strings missing for the target language
+		$aUnexpected = array(); // Strings defined for the target language, but not found in the reference dictionary
+		$aNotTranslated = array(); // Strings having the same value in both dictionaries
+		$aOK = array(); // Strings having different values in both dictionaries
+
+		foreach (self::$m_aData[$sLanguageRef] as $sStringCode => $sValue)
+		{
+			if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageCode]))
+			{
+				$aMissing[$sStringCode] = $sValue;
+			}
+		}
+
+		foreach (self::$m_aData[$sLanguageCode] as $sStringCode => $sValue)
+		{
+			if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageRef]))
+			{
+				$aUnexpected[$sStringCode] = $sValue;
+			}
+			else
+			{
+				// The value exists in the reference
+				$sRefValue = self::$m_aData[$sLanguageRef][$sStringCode];
+				if ($sValue == $sRefValue)
+				{
+					$aNotTranslated[$sStringCode] = $sValue;
+				}
+				else
+				{
+					$aOK[$sStringCode] = $sValue;
+				}
+			}
+		}
+		return array($aMissing, $aUnexpected, $aNotTranslated, $aOK);
+	}
+	
+	public static function Dump()
+	{
+		MyHelpers::var_dump_html(self::$m_aData);
+	}
+}
+
+/*
+Dans les templates, les chaines localizables seront remplacées par un tag <itopstring>code_de_la_chaine</itopstring>
+Modifier les profils utilisateurs pour stocker le langage de l'utilisateur.
+*/
+
+
+?>

+ 101 - 1
core/metamodel.class.php

@@ -194,7 +194,13 @@ abstract class MetaModel
 
 	final static public function GetName($sClass)
 	{
-		self::_check_subclass($sClass);	
+		self::_check_subclass($sClass);
+		$sStringCode = 'Class:'.$sClass;
+		return Dict::S($sStringCode, $sClass);
+	}
+	final static public function Obsolete_GetName($sClass)
+	{
+		self::_check_subclass($sClass);
 		return self::$m_aClassParams[$sClass]["name"];
 	}
 	final static public function GetCategory($sClass)
@@ -210,6 +216,12 @@ abstract class MetaModel
 	final static public function GetClassDescription($sClass)
 	{
 		self::_check_subclass($sClass);	
+		$sStringCode = 'Class:'.$sClass.'+';
+		return Dict::S($sStringCode, '');
+	}
+	final static public function Obsolete_GetClassDescription($sClass)
+	{
+		self::_check_subclass($sClass);	
 		return self::$m_aClassParams[$sClass]["description"];
 	}
 	final static public function IsAutoIncrementKey($sClass)
@@ -1130,6 +1142,11 @@ abstract class MetaModel
 	{
 		$sTargetClass = self::GetCallersPHPClass("Init");
 		self::$m_aStimuli[$sTargetClass][$sStimulusCode] = $oStimulus;
+
+		// I wanted to simplify the syntax of the declaration of objects in the biz model
+		// Therefore, the reference to the host class is set there 
+		$oStimulus->SetHostClass($sTargetClass);
+		$oStimulus->SetCode($sStimulusCode);
 	}
 
 	public static function Init_DefineTransition($sStateCode, $sStimulusCode, $aTransitionDef)
@@ -2089,6 +2106,83 @@ abstract class MetaModel
 		return $aDataDump;
 	}
 
+	public static function MakeDictionaryTemplate()
+	{
+		$sRes = '';
+
+		foreach (Dict::GetLanguages() as $sLanguageCode => $aLanguageData)
+		{
+			list($aMissing, $aUnexpected, $aNotTranslated, $aOK) = Dict::MakeStats($sLanguageCode, 'EN US');
+			echo "<p>Stats for language: $sLanguageCode</p>\n"; 
+			echo "<ul><li>Missing:".count($aMissing)."</li><li>Unexpected:".count($aUnexpected)."</li><li>NotTranslated:".count($aNotTranslated)."</li><li>OK:".count($aOK)."</li></ul>\n";
+		}
+		$sRes .= "// Dictionnay conventions\n";
+		$sRes .= htmlentities("// Class:<class_name>\n");
+		$sRes .= htmlentities("// Class:<class_name>+\n");
+		$sRes .= htmlentities("// Class:<class_name>/Attribute:<attribute_code>\n");
+		$sRes .= htmlentities("// Class:<class_name>/Attribute:<attribute_code>+\n");
+		$sRes .= htmlentities("// Class:<class_name>/Attribute:<attribute_code>/Value:<value>\n");
+		$sRes .= htmlentities("// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+\n");
+		$sRes .= htmlentities("// Class:<class_name>/Stimulus:<stimulus_code>\n");
+		$sRes .= htmlentities("// Class:<class_name>/Stimulus:<stimulus_code>+\n");
+		$sRes .= "\n";
+
+		// Note: I did not use EnumCategories(), because a given class maybe found in several categories
+		// Need to invent the "module", to characterize the origins of a class
+		$aModules = array('bizmodel', 'core/cmdb', 'gui' , 'application', 'addon/userrights');
+
+		$sRes .= "//////////////////////////////////////////////////////////////////////\n";
+		$sRes .= "// Note: The classes have been grouped by categories: ".implode(', ', $aModules)."\n";
+		$sRes .= "//////////////////////////////////////////////////////////////////////\n";
+
+		foreach ($aModules as $sCategory)
+		{
+			$sRes .= "//////////////////////////////////////////////////////////////////////\n";
+			$sRes .= "// Classes in '<em>$sCategory</em>'\n";
+			$sRes .= "//////////////////////////////////////////////////////////////////////\n";
+			$sRes .= "//\n";
+			$sRes .= "\n";
+			foreach (self::GetClasses($sCategory) as $sClass)
+			{
+				if (self::IsAbstract($sClass)) continue;
+	
+				$sRes .= "//\n";
+				$sRes .= "// Class: $sClass\n";
+				$sRes .= "//\n";
+				$sRes .= "\n";
+				$sRes .= "Dict::Add('EN US', 'English', 'English', array(\n";
+				$sRes .= "	'Class:$sClass' => '".self::GetName($sClass)."',\n";
+				$sRes .= "	'Class:$sClass+' => '".self::GetClassDescription($sClass)."',\n";
+				foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
+				{
+					// Skip this attribute if not originaly defined in this class
+					if (self::$m_aAttribOrigins[$sClass][$sAttCode] != $sClass) continue;
+	
+					$sRes .= "	'Class:$sClass/Attribute:$sAttCode' => '".$oAttDef->GetLabel()."',\n";
+					$sRes .= "	'Class:$sClass/Attribute:$sAttCode+' => '".$oAttDef->GetDescription()."',\n";
+					if ($oAttDef instanceof AttributeEnum)
+					{
+						foreach ($oAttDef->GetAllowedValues() as $sKey => $value)
+						{
+							$sValue = str_replace("'", "\\'", $value);
+							$sRes .= "	'Class:$sClass/Attribute:$sAttCode/Value:$sKey' => '$sValue',\n";
+							$sRes .= "	'Class:$sClass/Attribute:$sAttCode/Value:$sKey+' => '$sValue',\n";
+						}
+					}
+				}
+				foreach(self::EnumStimuli($sClass) as $sStimulusCode => $oStimulus)
+				{
+					$sRes .= "	'Class:$sClass/Stimulus:$sStimulusCode' => '".$oStimulus->Get('label')."',\n";
+					$sRes .= "	'Class:$sClass/Stimulus:$sStimulusCode+' => '".$oStimulus->Get('description')."',\n";
+				}
+	
+				$sRes .= "));\n";
+				$sRes .= "\n";
+			}
+		}
+		return $sRes;
+	}
+
 	public static function DBCheckFormat()
 	{
 		$aErrors = array();
@@ -2625,6 +2719,12 @@ abstract class MetaModel
 		{
 			self::Plugin($sConfigFile, 'addons', $sToInclude);
 		}
+		foreach ($oConfig->GetDictionaries() as $sModule => $sToInclude)
+		{
+			self::Plugin($sConfigFile, 'dictionaries', $sToInclude);
+		}
+		// Set the language... after the dictionaries have been loaded!
+		Dict::SetLanguage($oConfig->GetDefaultLanguage());
 
 		$sServer = $oConfig->GetDBHost();
 		$sUser = $oConfig->GetDBUser();

+ 27 - 1
core/stimulus.class.inc.php

@@ -12,16 +12,42 @@
  * @version     1.1.1.1 $
  */
 
+// #@# Really dirty !!!
+// #@# TO BE CLEANED -> ALIGN WITH OTHER METAMODEL DECLARATIONS
+
 class ObjectStimulus
 {
 	private $m_aParams = array();
+	private $m_sHostClass = null;
+	private $m_sCode = null;
 
 	public function __construct($aParams)
 	{
-		$this->m_aParams = $aParams;
+		// obsolete: $this->m_aParams = $aParams;
+		$this->m_aParams['label'] = 'foo';
+		$this->m_aParams['description'] = 'foo';
 		$this->ConsistencyCheck();
 	}
 
+	public function SetHostClass($sHostClass)
+	{
+		$this->m_sHostClass = $sHostClass;
+	}
+	public function GetHostClass()
+	{
+		return $this->m_sHostClass;
+	}
+	public function SetCode($sCode)
+	{
+		$this->m_sCode = $sCode;
+		$this->m_aParams['label'] = Dict::S('Class:'.$this->m_sHostClass.'/Stimulus:'.$this->m_sCode, $this->m_sCode); 
+		$this->m_aParams['description'] = Dict::S('Class:'.$this->m_sHostClass.'/Stimulus:'.$this->m_sCode.'+', '');
+	}
+	public function GetCode()
+	{
+		return $this->m_sCode;
+	}
+
 	public function Get($sParamName) {return $this->m_aParams[$sParamName];}
 
 	// Note: I could factorize this code with the parameter management made for the AttributeDef class

+ 354 - 0
dictionaries/dictionary.itop.core.php

@@ -0,0 +1,354 @@
+<?php
+
+//////////////////////////////////////////////////////////////////////
+// Classes in 'core/cmdb'
+//////////////////////////////////////////////////////////////////////
+//
+
+//
+// Class: CMDBChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChange' => 'change',
+	'Class:CMDBChange+' => 'Changes tracking',
+	'Class:CMDBChange/Attribute:date' => 'date',
+	'Class:CMDBChange/Attribute:date+' => 'date and time at which the changes have been recorded',
+	'Class:CMDBChange/Attribute:userinfo' => 'misc. info',
+	'Class:CMDBChange/Attribute:userinfo+' => 'caller\'s defined information',
+));
+
+//
+// Class: CMDBChangeOp
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOp' => 'change operation',
+	'Class:CMDBChangeOp+' => 'Change operations tracking',
+	'Class:CMDBChangeOp/Attribute:change' => 'change',
+	'Class:CMDBChangeOp/Attribute:change+' => 'change',
+	'Class:CMDBChangeOp/Attribute:date' => 'date',
+	'Class:CMDBChangeOp/Attribute:date+' => 'date and time of the change',
+	'Class:CMDBChangeOp/Attribute:userinfo' => 'user',
+	'Class:CMDBChangeOp/Attribute:userinfo+' => 'who made this change',
+	'Class:CMDBChangeOp/Attribute:objclass' => 'object class',
+	'Class:CMDBChangeOp/Attribute:objclass+' => 'object class',
+	'Class:CMDBChangeOp/Attribute:objkey' => 'object id',
+	'Class:CMDBChangeOp/Attribute:objkey+' => 'object id',
+	'Class:CMDBChangeOp/Attribute:finalclass' => 'Class',
+	'Class:CMDBChangeOp/Attribute:finalclass+' => 'Real (final) object class',
+));
+
+//
+// Class: CMDBChangeOpCreate
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpCreate' => 'object creation',
+	'Class:CMDBChangeOpCreate+' => 'Object creation tracking',
+));
+
+//
+// Class: CMDBChangeOpDelete
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpDelete' => 'object deletion',
+	'Class:CMDBChangeOpDelete+' => 'Object deletion tracking',
+));
+
+//
+// Class: CMDBChangeOpSetAttribute
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpSetAttribute' => 'object change',
+	'Class:CMDBChangeOpSetAttribute+' => 'Object properties change tracking',
+	'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Attribute',
+	'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'code of the modified property',
+));
+
+//
+// Class: CMDBChangeOpSetAttributeScalar
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpSetAttributeScalar' => 'property change',
+	'Class:CMDBChangeOpSetAttributeScalar+' => 'Object scalar properties change tracking',
+	'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Previous value',
+	'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'previous value of the attribute',
+	'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'New value',
+	'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'new value of the attribute',
+));
+
+//
+// Class: CMDBChangeOpSetAttributeBlob
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpSetAttributeBlob' => 'data change',
+	'Class:CMDBChangeOpSetAttributeBlob+' => 'data change tracking',
+	'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Previous data',
+	'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'previous contents of the attribute',
+));
+
+//
+// Class: CMDBChangeOpSetAttributeText
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:CMDBChangeOpSetAttributeText' => 'text change',
+	'Class:CMDBChangeOpSetAttributeText+' => 'text change tracking',
+	'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Previous data',
+	'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'previous contents of the attribute',
+));
+
+//
+// Class: Event
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Event' => 'Log Event',
+	'Class:Event+' => 'An application internal event',
+	'Class:Event/Attribute:message' => 'message',
+	'Class:Event/Attribute:message+' => 'short description of the event',
+	'Class:Event/Attribute:date' => 'date',
+	'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded',
+	'Class:Event/Attribute:userinfo' => 'user info',
+	'Class:Event/Attribute:userinfo+' => 'identification of the user that was doing the action that triggered this event',
+	'Class:Event/Attribute:finalclass' => 'Class',
+	'Class:Event/Attribute:finalclass+' => 'Real (final) object class',
+));
+
+//
+// Class: EventNotification
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:EventNotification' => 'Notification event',
+	'Class:EventNotification+' => 'Trace of a notification that has been sent',
+	'Class:EventNotification/Attribute:trigger_id' => 'Trigger',
+	'Class:EventNotification/Attribute:trigger_id+' => 'user account',
+	'Class:EventNotification/Attribute:action_id' => 'user',
+	'Class:EventNotification/Attribute:action_id+' => 'user account',
+	'Class:EventNotification/Attribute:object_id' => 'Object id',
+	'Class:EventNotification/Attribute:object_id+' => 'object id (class defined by the trigger ?)',
+));
+
+//
+// Class: EventNotificationEmail
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:EventNotificationEmail' => 'Email emission event',
+	'Class:EventNotificationEmail+' => 'Trace of an email that has been sent',
+	'Class:EventNotificationEmail/Attribute:to' => 'TO',
+	'Class:EventNotificationEmail/Attribute:to+' => 'TO',
+	'Class:EventNotificationEmail/Attribute:cc' => 'CC',
+	'Class:EventNotificationEmail/Attribute:cc+' => 'CC',
+	'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
+	'Class:EventNotificationEmail/Attribute:bcc+' => 'BCC',
+	'Class:EventNotificationEmail/Attribute:from' => 'From',
+	'Class:EventNotificationEmail/Attribute:from+' => 'Sender of the message',
+	'Class:EventNotificationEmail/Attribute:subject' => 'Subject',
+	'Class:EventNotificationEmail/Attribute:subject+' => 'Subject',
+	'Class:EventNotificationEmail/Attribute:body' => 'Body',
+	'Class:EventNotificationEmail/Attribute:body+' => 'Body',
+));
+
+//
+// Class: EventIssue
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:EventIssue' => 'Issue event',
+	'Class:EventIssue+' => 'Trace of an issue (warning, error, etc.)',
+	'Class:EventIssue/Attribute:issue' => 'Issue',
+	'Class:EventIssue/Attribute:issue+' => 'What happened',
+	'Class:EventIssue/Attribute:impact' => 'Impact',
+	'Class:EventIssue/Attribute:impact+' => 'What are the consequences',
+	'Class:EventIssue/Attribute:page' => 'Page',
+	'Class:EventIssue/Attribute:page+' => 'HTTP entry point',
+	'Class:EventIssue/Attribute:arguments_post' => 'Posted arguments',
+	'Class:EventIssue/Attribute:arguments_post+' => 'HTTP POST arguments',
+	'Class:EventIssue/Attribute:arguments_get' => 'URL arguments',
+	'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET arguments',
+	'Class:EventIssue/Attribute:callstack' => 'Callstack',
+	'Class:EventIssue/Attribute:callstack+' => 'Call stack',
+	'Class:EventIssue/Attribute:data' => 'Data',
+	'Class:EventIssue/Attribute:data+' => 'More information',
+));
+
+//
+// Class: EventWebService
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:EventWebService' => 'Web service event',
+	'Class:EventWebService+' => 'Trace of an web service call',
+	'Class:EventWebService/Attribute:verb' => 'Verb',
+	'Class:EventWebService/Attribute:verb+' => 'Name of the operation',
+	'Class:EventWebService/Attribute:result' => 'Result',
+	'Class:EventWebService/Attribute:result+' => 'Overall success/failure',
+	'Class:EventWebService/Attribute:log_info' => 'Info log',
+	'Class:EventWebService/Attribute:log_info+' => 'Result info log',
+	'Class:EventWebService/Attribute:log_warning' => 'Warning log',
+	'Class:EventWebService/Attribute:log_warning+' => 'Result warning log',
+	'Class:EventWebService/Attribute:log_error' => 'Error log',
+	'Class:EventWebService/Attribute:log_error+' => 'Result error log',
+	'Class:EventWebService/Attribute:data' => 'Data',
+	'Class:EventWebService/Attribute:data+' => 'Result data',
+));
+
+//
+// Class: Action
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Action' => 'action',
+	'Class:Action+' => 'Custom action',
+	'Class:Action/Attribute:name' => 'Name',
+	'Class:Action/Attribute:name+' => 'label',
+	'Class:Action/Attribute:description' => 'Description',
+	'Class:Action/Attribute:description+' => 'one line description',
+	'Class:Action/Attribute:status' => 'Status',
+	'Class:Action/Attribute:status+' => 'In production or ?',
+	'Class:Action/Attribute:status/Value:test' => 'Being tested',
+	'Class:Action/Attribute:status/Value:test+' => 'Being tested',
+	'Class:Action/Attribute:status/Value:enabled' => 'In production',
+	'Class:Action/Attribute:status/Value:enabled+' => 'In production',
+	'Class:Action/Attribute:status/Value:disabled' => 'Inactive',
+	'Class:Action/Attribute:status/Value:disabled+' => 'Inactive',
+	'Class:Action/Attribute:related_triggers' => 'Related Triggers',
+	'Class:Action/Attribute:related_triggers+' => 'Triggers linked to this action',
+	'Class:Action/Attribute:finalclass' => 'Class',
+	'Class:Action/Attribute:finalclass+' => 'Real (final) object class',
+));
+
+//
+// Class: ActionNotification
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:ActionNotification' => 'notification',
+	'Class:ActionNotification+' => 'Notification (abstract)',
+));
+
+//
+// Class: ActionEmail
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:ActionEmail' => 'email notification',
+	'Class:ActionEmail+' => 'Action: Email notification',
+	'Class:ActionEmail/Attribute:test_recipient' => 'Test recipient',
+	'Class:ActionEmail/Attribute:test_recipient+' => 'Detination in case status is set to "Test"',
+	'Class:ActionEmail/Attribute:from' => 'From',
+	'Class:ActionEmail/Attribute:from+' => 'Will be sent into the email header',
+	'Class:ActionEmail/Attribute:reply_to' => 'Reply to',
+	'Class:ActionEmail/Attribute:reply_to+' => 'Will be sent into the email header',
+	'Class:ActionEmail/Attribute:to' => 'To',
+	'Class:ActionEmail/Attribute:to+' => 'Destination of the email',
+	'Class:ActionEmail/Attribute:cc' => 'Cc',
+	'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
+	'Class:ActionEmail/Attribute:bcc' => 'bcc',
+	'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
+	'Class:ActionEmail/Attribute:subject' => 'subject',
+	'Class:ActionEmail/Attribute:subject+' => 'Title of the email',
+	'Class:ActionEmail/Attribute:body' => 'body',
+	'Class:ActionEmail/Attribute:body+' => 'Contents of the email',
+	'Class:ActionEmail/Attribute:importance' => 'importance',
+	'Class:ActionEmail/Attribute:importance+' => 'Importance flag',
+	'Class:ActionEmail/Attribute:importance/Value:low' => 'low',
+	'Class:ActionEmail/Attribute:importance/Value:low+' => 'low',
+	'Class:ActionEmail/Attribute:importance/Value:normal' => 'normal',
+	'Class:ActionEmail/Attribute:importance/Value:normal+' => 'normal',
+	'Class:ActionEmail/Attribute:importance/Value:high' => 'high',
+	'Class:ActionEmail/Attribute:importance/Value:high+' => 'high',
+));
+
+//
+// Class: Trigger
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Trigger' => 'trigger',
+	'Class:Trigger+' => 'Custom event handler',
+	'Class:Trigger/Attribute:description' => 'Description',
+	'Class:Trigger/Attribute:description+' => 'one line description',
+	'Class:Trigger/Attribute:linked_actions' => 'Triggered actions',
+	'Class:Trigger/Attribute:linked_actions+' => 'Actions performed when the trigger is activated',
+	'Class:Trigger/Attribute:finalclass' => 'Class',
+	'Class:Trigger/Attribute:finalclass+' => 'Real (final) object class',
+));
+
+//
+// Class: TriggerOnObject
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:TriggerOnObject' => 'Trigger on a class of objects',
+	'Class:TriggerOnObject+' => 'Trigger on a given class of objects',
+	'Class:TriggerOnObject/Attribute:target_class' => 'Target class',
+	'Class:TriggerOnObject/Attribute:target_class+' => 'label',
+));
+
+//
+// Class: TriggerOnStateChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:TriggerOnStateChange' => 'Trigger on object state change',
+	'Class:TriggerOnStateChange+' => 'Trigger on object state change',
+	'Class:TriggerOnStateChange/Attribute:state' => 'State',
+	'Class:TriggerOnStateChange/Attribute:state+' => 'label',
+));
+
+//
+// Class: TriggerOnStateEnter
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:TriggerOnStateEnter' => 'Trigger on object entering a state',
+	'Class:TriggerOnStateEnter+' => 'Trigger on object state change - entering',
+));
+
+//
+// Class: TriggerOnStateLeave
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:TriggerOnStateLeave' => 'Trigger on object leaving a state',
+	'Class:TriggerOnStateLeave+' => 'Trigger on object state change - leaving',
+));
+
+//
+// Class: TriggerOnObjectCreate
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:TriggerOnObjectCreate' => 'Trigger on object creation',
+	'Class:TriggerOnObjectCreate+' => 'Trigger on object creation of [a child class of] the given class',
+));
+
+//
+// Class: lnkTriggerAction
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkTriggerAction' => 'Actions-Trigger',
+	'Class:lnkTriggerAction+' => 'Link between a trigger and an action',
+	'Class:lnkTriggerAction/Attribute:action_id' => 'Action',
+	'Class:lnkTriggerAction/Attribute:action_id+' => 'The action to be executed',
+	'Class:lnkTriggerAction/Attribute:action_name' => 'Action Name',
+	'Class:lnkTriggerAction/Attribute:action_name+' => 'Name of the action',
+	'Class:lnkTriggerAction/Attribute:trigger_id' => 'Trigger',
+	'Class:lnkTriggerAction/Attribute:trigger_id+' => 'Trigger',
+	'Class:lnkTriggerAction/Attribute:trigger_name' => 'Trigger Name',
+	'Class:lnkTriggerAction/Attribute:trigger_name+' => 'Name of the trigger',
+	'Class:lnkTriggerAction/Attribute:order' => 'Order',
+	'Class:lnkTriggerAction/Attribute:order+' => 'Actions execution order',
+));
+
+
+?>

+ 1383 - 0
dictionaries/dictionary.itop.model.php

@@ -0,0 +1,1383 @@
+<?php
+
+// Dictionnay conventions
+// Class:<class_name>
+// Class:<class_name>+
+// Class:<class_name>/Attribute:<attribute_code>
+// Class:<class_name>/Attribute:<attribute_code>+
+// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
+// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
+// Class:<class_name>/Stimulus:<stimulus_code>
+// Class:<class_name>/Stimulus:<stimulus_code>+
+
+//////////////////////////////////////////////////////////////////////
+// Note: The classes have been grouped by categories: bizmodel, core/cmdb, gui, application, addon/userrights
+//////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////
+// Classes in 'bizmodel'
+//////////////////////////////////////////////////////////////////////
+//
+
+//
+// Class: bizOrganization
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizOrganization' => 'Organization',
+	'Class:bizOrganization+' => 'Organizational structure: can be Company and/or Department',
+	'Class:bizOrganization/Attribute:name' => 'Name',
+	'Class:bizOrganization/Attribute:name+' => 'Common name',
+	'Class:bizOrganization/Attribute:code' => 'Code',
+	'Class:bizOrganization/Attribute:code+' => 'Organization code (Siret, DUNS,...)',
+	'Class:bizOrganization/Attribute:status' => 'Status',
+	'Class:bizOrganization/Attribute:status+' => 'Lifecycle status',
+	'Class:bizOrganization/Attribute:status/Value:production' => 'production',
+	'Class:bizOrganization/Attribute:status/Value:production+' => 'production',
+	'Class:bizOrganization/Attribute:status/Value:implementation' => 'implementation',
+	'Class:bizOrganization/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:bizOrganization/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:bizOrganization/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:bizOrganization/Attribute:parent_id' => 'Parent',
+	'Class:bizOrganization/Attribute:parent_id+' => 'Parent organization',
+	'Class:bizOrganization/Attribute:parent_name' => 'Parent Name',
+	'Class:bizOrganization/Attribute:parent_name+' => 'Name of the parent organization',
+));
+
+//
+// Class: logRealObject
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:logRealObject' => 'Object',
+	'Class:logRealObject+' => 'Any CMDB object',
+	'Class:logRealObject/Attribute:name' => 'Name',
+	'Class:logRealObject/Attribute:name+' => 'Common name',
+	'Class:logRealObject/Attribute:status' => 'Status',
+	'Class:logRealObject/Attribute:status+' => 'Lifecycle status',
+	'Class:logRealObject/Attribute:status/Value:production' => 'production',
+	'Class:logRealObject/Attribute:status/Value:production+' => 'production',
+	'Class:logRealObject/Attribute:status/Value:implementation' => 'implementation',
+	'Class:logRealObject/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:logRealObject/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:logRealObject/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:logRealObject/Attribute:status/Value:off' => 'off',
+	'Class:logRealObject/Attribute:status/Value:off+' => 'off',
+	'Class:logRealObject/Attribute:status/Value:left company' => 'left company',
+	'Class:logRealObject/Attribute:status/Value:left company+' => 'left company',
+	'Class:logRealObject/Attribute:status/Value:available' => 'available',
+	'Class:logRealObject/Attribute:status/Value:available+' => 'available',
+	'Class:logRealObject/Attribute:org_id' => 'Organization',
+	'Class:logRealObject/Attribute:org_id+' => 'ID of the object owner organization',
+	'Class:logRealObject/Attribute:org_name' => 'Organization',
+	'Class:logRealObject/Attribute:org_name+' => 'Company / Department owning this object',
+	'Class:logRealObject/Attribute:finalclass' => 'Class',
+	'Class:logRealObject/Attribute:finalclass+' => 'Real (final) object class',
+));
+
+//
+// Class: bizContact
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizContact' => 'Contact',
+	'Class:bizContact+' => 'Contact',
+	'Class:bizContact/Attribute:status' => 'Status',
+	'Class:bizContact/Attribute:status+' => 'Lifecycle status',
+	'Class:bizContact/Attribute:status/Value:off' => 'off',
+	'Class:bizContact/Attribute:status/Value:off+' => 'off',
+	'Class:bizContact/Attribute:status/Value:left company' => 'left company',
+	'Class:bizContact/Attribute:status/Value:left company+' => 'left company',
+	'Class:bizContact/Attribute:status/Value:available' => 'available',
+	'Class:bizContact/Attribute:status/Value:available+' => 'available',
+	'Class:bizContact/Attribute:org_name' => 'Organization',
+	'Class:bizContact/Attribute:org_name+' => 'Company / Department of the contact',
+	'Class:bizContact/Attribute:email' => 'eMail',
+	'Class:bizContact/Attribute:email+' => 'Email address',
+	'Class:bizContact/Attribute:phone' => 'Phone',
+	'Class:bizContact/Attribute:phone+' => 'Telephone',
+	'Class:bizContact/Attribute:location_id' => 'Location',
+	'Class:bizContact/Attribute:location_id+' => 'Id of the location where the contact is located',
+	'Class:bizContact/Attribute:location_name' => 'Location Name',
+	'Class:bizContact/Attribute:location_name+' => 'Name of the location where the contact is located',
+));
+
+//
+// Class: bizPerson
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizPerson' => 'Person',
+	'Class:bizPerson+' => 'Person',
+	'Class:bizPerson/Attribute:first_name' => 'First Name',
+	'Class:bizPerson/Attribute:first_name+' => 'First name',
+	'Class:bizPerson/Attribute:employee_number' => 'Employee Number',
+	'Class:bizPerson/Attribute:employee_number+' => 'employee number',
+));
+
+//
+// Class: bizTeam
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizTeam' => 'Team',
+	'Class:bizTeam+' => 'A group of contacts',
+));
+
+//
+// Class: lnkContactTeam
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactTeam' => 'TeamsLinks',
+	'Class:lnkContactTeam+' => 'A link between a contact and a Team',
+	'Class:lnkContactTeam/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactTeam/Attribute:contact_id+' => 'The contact',
+	'Class:lnkContactTeam/Attribute:contact_name' => 'Contact Name',
+	'Class:lnkContactTeam/Attribute:contact_name+' => 'name of the contact',
+	'Class:lnkContactTeam/Attribute:contact_phone' => 'Phone',
+	'Class:lnkContactTeam/Attribute:contact_phone+' => 'Phone number of the contact',
+	'Class:lnkContactTeam/Attribute:contact_email' => 'eMail',
+	'Class:lnkContactTeam/Attribute:contact_email+' => 'eMail address of the contact',
+	'Class:lnkContactTeam/Attribute:team_id' => 'Team',
+	'Class:lnkContactTeam/Attribute:team_id+' => 'Team linked',
+	'Class:lnkContactTeam/Attribute:team_name' => 'Team',
+	'Class:lnkContactTeam/Attribute:team_name+' => 'name of the Team',
+	'Class:lnkContactTeam/Attribute:role' => 'Role',
+	'Class:lnkContactTeam/Attribute:role+' => 'Role of the contact',
+));
+
+//
+// Class: bizDocument
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizDocument' => 'Document',
+	'Class:bizDocument+' => 'Document',
+	'Class:bizDocument/Attribute:status' => 'Status',
+	'Class:bizDocument/Attribute:status+' => 'Lifecycle status',
+	'Class:bizDocument/Attribute:status/Value:production' => 'production',
+	'Class:bizDocument/Attribute:status/Value:production+' => 'production',
+	'Class:bizDocument/Attribute:status/Value:implementation' => 'implementation',
+	'Class:bizDocument/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:bizDocument/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:bizDocument/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:bizDocument/Attribute:org_name' => 'Organization',
+	'Class:bizDocument/Attribute:org_name+' => 'Company / Department owning the document',
+	'Class:bizDocument/Attribute:type' => 'type',
+	'Class:bizDocument/Attribute:type+' => 'usage of the document',
+	'Class:bizDocument/Attribute:type/Value:documentation' => 'documentation',
+	'Class:bizDocument/Attribute:type/Value:documentation+' => 'documentation',
+	'Class:bizDocument/Attribute:type/Value:contract' => 'contract',
+	'Class:bizDocument/Attribute:type/Value:contract+' => 'contract',
+	'Class:bizDocument/Attribute:type/Value:working instructions' => 'working instructions',
+	'Class:bizDocument/Attribute:type/Value:working instructions+' => 'working instructions',
+	'Class:bizDocument/Attribute:type/Value:network map' => 'network map',
+	'Class:bizDocument/Attribute:type/Value:network map+' => 'network map',
+	'Class:bizDocument/Attribute:type/Value:white paper' => 'white paper',
+	'Class:bizDocument/Attribute:type/Value:white paper+' => 'white paper',
+	'Class:bizDocument/Attribute:type/Value:presentation' => 'presentation',
+	'Class:bizDocument/Attribute:type/Value:presentation+' => 'presentation',
+	'Class:bizDocument/Attribute:type/Value:training' => 'training',
+	'Class:bizDocument/Attribute:type/Value:training+' => 'training',
+	'Class:bizDocument/Attribute:description' => 'Description',
+	'Class:bizDocument/Attribute:description+' => 'Service Description',
+	'Class:bizDocument/Attribute:contents' => 'Contents',
+	'Class:bizDocument/Attribute:contents+' => 'File content',
+));
+
+//
+// Class: lnkDocumentRealObject
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkDocumentRealObject' => 'DocumentsLinks',
+	'Class:lnkDocumentRealObject+' => 'A link between a document and another object',
+	'Class:lnkDocumentRealObject/Attribute:doc_id' => 'Document',
+	'Class:lnkDocumentRealObject/Attribute:doc_id+' => 'id of the Document',
+	'Class:lnkDocumentRealObject/Attribute:doc_name' => 'Document Name',
+	'Class:lnkDocumentRealObject/Attribute:doc_name+' => 'name of the document',
+	'Class:lnkDocumentRealObject/Attribute:object_id' => 'Object',
+	'Class:lnkDocumentRealObject/Attribute:object_id+' => 'Object linked',
+	'Class:lnkDocumentRealObject/Attribute:object_name' => 'Object Name',
+	'Class:lnkDocumentRealObject/Attribute:object_name+' => 'name of the linked object',
+	'Class:lnkDocumentRealObject/Attribute:link_type' => 'Link Type',
+	'Class:lnkDocumentRealObject/Attribute:link_type+' => 'More information',
+));
+
+//
+// Class: lnkContactRealObject
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactRealObject' => 'ContactsLinks',
+	'Class:lnkContactRealObject+' => 'A link between a contact and another object',
+	'Class:lnkContactRealObject/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactRealObject/Attribute:contact_id+' => 'The contact',
+	'Class:lnkContactRealObject/Attribute:contact_name' => 'Contact Name',
+	'Class:lnkContactRealObject/Attribute:contact_name+' => 'name of the contact',
+	'Class:lnkContactRealObject/Attribute:contact_phone' => 'Phone',
+	'Class:lnkContactRealObject/Attribute:contact_phone+' => 'Phone number of the contact',
+	'Class:lnkContactRealObject/Attribute:contact_email' => 'eMail',
+	'Class:lnkContactRealObject/Attribute:contact_email+' => 'eMail address of the contact',
+	'Class:lnkContactRealObject/Attribute:object_id' => 'Object',
+	'Class:lnkContactRealObject/Attribute:object_id+' => 'Object linked',
+	'Class:lnkContactRealObject/Attribute:object_name' => 'Object Name',
+	'Class:lnkContactRealObject/Attribute:object_name+' => 'name of the linked object',
+	'Class:lnkContactRealObject/Attribute:role' => 'Role',
+	'Class:lnkContactRealObject/Attribute:role+' => 'Role of the contact',
+));
+
+//
+// Class: logInfra
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:logInfra' => 'Infra',
+	'Class:logInfra+' => 'Infrastructure real object',
+	'Class:logInfra/Attribute:status' => 'Status',
+	'Class:logInfra/Attribute:status+' => 'Lifecycle status',
+	'Class:logInfra/Attribute:status/Value:production' => 'production',
+	'Class:logInfra/Attribute:status/Value:production+' => 'production',
+	'Class:logInfra/Attribute:status/Value:implementation' => 'implementation',
+	'Class:logInfra/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:logInfra/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:logInfra/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:logInfra/Attribute:severity' => 'Business Criticity',
+	'Class:logInfra/Attribute:severity+' => 'Severity for this infrastructure',
+	'Class:logInfra/Attribute:severity/Value:high' => 'high',
+	'Class:logInfra/Attribute:severity/Value:high+' => 'high',
+	'Class:logInfra/Attribute:severity/Value:medium' => 'medium',
+	'Class:logInfra/Attribute:severity/Value:medium+' => 'medium',
+	'Class:logInfra/Attribute:severity/Value:low' => 'low',
+	'Class:logInfra/Attribute:severity/Value:low+' => 'low',
+));
+
+//
+// Class: lnkContactInfra
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactInfra' => 'ContactsInfraLinks',
+	'Class:lnkContactInfra+' => 'A link between a contact and an infrastructure',
+	'Class:lnkContactInfra/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactInfra/Attribute:contact_id+' => 'The contact',
+	'Class:lnkContactInfra/Attribute:contact_name' => 'Contact Name',
+	'Class:lnkContactInfra/Attribute:contact_name+' => 'name of the contact',
+	'Class:lnkContactInfra/Attribute:contact_phone' => 'Phone',
+	'Class:lnkContactInfra/Attribute:contact_phone+' => 'Phone number of the contact',
+	'Class:lnkContactInfra/Attribute:contact_email' => 'eMail',
+	'Class:lnkContactInfra/Attribute:contact_email+' => 'eMail address of the contact',
+	'Class:lnkContactInfra/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkContactInfra/Attribute:infra_id+' => 'Infrastructure linked',
+	'Class:lnkContactInfra/Attribute:infra_name' => 'Infrastructure',
+	'Class:lnkContactInfra/Attribute:infra_name+' => 'name of the linked infrastructure',
+	'Class:lnkContactInfra/Attribute:role' => 'Role',
+	'Class:lnkContactInfra/Attribute:role+' => 'Role of the contact',
+));
+
+//
+// Class: bizLocation
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizLocation' => 'Location',
+	'Class:bizLocation+' => 'Any type of location: Region, Country, City, Site, Building, Floor, Room, Rack,...',
+	'Class:bizLocation/Attribute:address' => 'Address',
+	'Class:bizLocation/Attribute:address+' => 'The postal address of the location',
+	'Class:bizLocation/Attribute:country' => 'Country',
+	'Class:bizLocation/Attribute:country+' => 'Country of the location',
+	'Class:bizLocation/Attribute:parent_location_id' => 'Parent Location',
+	'Class:bizLocation/Attribute:parent_location_id+' => 'where is the real object physically located',
+	'Class:bizLocation/Attribute:parent_location_name' => 'Parent location (Name)',
+	'Class:bizLocation/Attribute:parent_location_name+' => 'name of the parent location',
+));
+
+//
+// Class: bizCircuit
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizCircuit' => 'Circuit',
+	'Class:bizCircuit+' => 'Any type of circuit',
+	'Class:bizCircuit/Attribute:speed' => 'speed',
+	'Class:bizCircuit/Attribute:speed+' => 'speed of the circuit',
+	'Class:bizCircuit/Attribute:location1_id' => 'Location 1',
+	'Class:bizCircuit/Attribute:location1_id+' => 'Id of the location 1',
+	'Class:bizCircuit/Attribute:location1_name' => 'Location 1',
+	'Class:bizCircuit/Attribute:location1_name+' => 'Name of the location',
+	'Class:bizCircuit/Attribute:location2_id' => 'Location 2',
+	'Class:bizCircuit/Attribute:location2_id+' => 'Id of the location 2',
+	'Class:bizCircuit/Attribute:location2_name' => 'Location 2',
+	'Class:bizCircuit/Attribute:location2_name+' => 'Name of the location',
+	'Class:bizCircuit/Attribute:interface1_id' => 'Interface 1',
+	'Class:bizCircuit/Attribute:interface1_id+' => 'id of the interface 1',
+	'Class:bizCircuit/Attribute:interface1_name' => 'Interface',
+	'Class:bizCircuit/Attribute:interface1_name+' => 'Name of the interface 1',
+	'Class:bizCircuit/Attribute:device1_name' => 'Device 1',
+	'Class:bizCircuit/Attribute:device1_name+' => 'Name of the device 1',
+	'Class:bizCircuit/Attribute:interface2_id' => 'Interface 2',
+	'Class:bizCircuit/Attribute:interface2_id+' => 'id of the interface 2',
+	'Class:bizCircuit/Attribute:interface2_name' => 'Interface',
+	'Class:bizCircuit/Attribute:interface2_name+' => 'Name of the interface 2',
+	'Class:bizCircuit/Attribute:device2_name' => 'Interface',
+	'Class:bizCircuit/Attribute:device2_name+' => 'Name of the device 2',
+	'Class:bizCircuit/Attribute:provider_id' => 'Carrier ID',
+	'Class:bizCircuit/Attribute:provider_id+' => 'Organization ID of the provider of the Circuit',
+	'Class:bizCircuit/Attribute:carrier_name' => 'Carrier',
+	'Class:bizCircuit/Attribute:carrier_name+' => 'Name of the carrier',
+	'Class:bizCircuit/Attribute:carrier_ref' => 'Carrier reference',
+	'Class:bizCircuit/Attribute:carrier_ref+' => 'reference of the circuit used by the carrier',
+));
+
+//
+// Class: bizInterface
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizInterface' => 'Interface',
+	'Class:bizInterface+' => 'Interface',
+	'Class:bizInterface/Attribute:device_id' => 'Device',
+	'Class:bizInterface/Attribute:device_id+' => 'Device on which the interface is physically located',
+	'Class:bizInterface/Attribute:device_name' => 'Device',
+	'Class:bizInterface/Attribute:device_name+' => 'name of the device on which the interface is located',
+	'Class:bizInterface/Attribute:device_location_id' => 'Device location',
+	'Class:bizInterface/Attribute:device_location_id+' => 'location of the device on which the interface is located',
+	'Class:bizInterface/Attribute:device_location_name' => 'Device location',
+	'Class:bizInterface/Attribute:device_location_name+' => 'name of the location of the device on which the interface is located',
+	'Class:bizInterface/Attribute:logical_type' => 'Logical type',
+	'Class:bizInterface/Attribute:logical_type+' => 'Logical type of interface',
+	'Class:bizInterface/Attribute:logical_type/Value:primary' => 'primary',
+	'Class:bizInterface/Attribute:logical_type/Value:primary+' => 'primary',
+	'Class:bizInterface/Attribute:logical_type/Value:secondary' => 'secondary',
+	'Class:bizInterface/Attribute:logical_type/Value:secondary+' => 'secondary',
+	'Class:bizInterface/Attribute:logical_type/Value:backup' => 'backup',
+	'Class:bizInterface/Attribute:logical_type/Value:backup+' => 'backup',
+	'Class:bizInterface/Attribute:logical_type/Value:port' => 'port',
+	'Class:bizInterface/Attribute:logical_type/Value:port+' => 'port',
+	'Class:bizInterface/Attribute:logical_type/Value:logical' => 'logical',
+	'Class:bizInterface/Attribute:logical_type/Value:logical+' => 'logical',
+	'Class:bizInterface/Attribute:physical_type' => 'Physical type',
+	'Class:bizInterface/Attribute:physical_type+' => 'Physical type of interface',
+	'Class:bizInterface/Attribute:physical_type/Value:ethernet' => 'ethernet',
+	'Class:bizInterface/Attribute:physical_type/Value:ethernet+' => 'ethernet',
+	'Class:bizInterface/Attribute:physical_type/Value:framerelay' => 'framerelay',
+	'Class:bizInterface/Attribute:physical_type/Value:framerelay+' => 'framerelay',
+	'Class:bizInterface/Attribute:physical_type/Value:atm' => 'atm',
+	'Class:bizInterface/Attribute:physical_type/Value:atm+' => 'atm',
+	'Class:bizInterface/Attribute:physical_type/Value:vlan' => 'vlan',
+	'Class:bizInterface/Attribute:physical_type/Value:vlan+' => 'vlan',
+	'Class:bizInterface/Attribute:ip_address' => 'IP address',
+	'Class:bizInterface/Attribute:ip_address+' => 'address IP for this interface',
+	'Class:bizInterface/Attribute:mask' => 'Subnet Mask',
+	'Class:bizInterface/Attribute:mask+' => 'Subnet mask for this interface',
+	'Class:bizInterface/Attribute:mac' => 'MAC address',
+	'Class:bizInterface/Attribute:mac+' => 'MAC address for this interface',
+	'Class:bizInterface/Attribute:speed' => 'Speed (Kb/s)',
+	'Class:bizInterface/Attribute:speed+' => 'speed of this interface',
+	'Class:bizInterface/Attribute:duplex' => 'Duplex',
+	'Class:bizInterface/Attribute:duplex+' => 'Duplex configured for this interface',
+	'Class:bizInterface/Attribute:duplex/Value:half' => 'half',
+	'Class:bizInterface/Attribute:duplex/Value:half+' => 'half',
+	'Class:bizInterface/Attribute:duplex/Value:full' => 'full',
+	'Class:bizInterface/Attribute:duplex/Value:full+' => 'full',
+	'Class:bizInterface/Attribute:duplex/Value:unknown' => 'unknown',
+	'Class:bizInterface/Attribute:duplex/Value:unknown+' => 'unknown',
+	'Class:bizInterface/Attribute:if_connected_id' => 'Connected interface',
+	'Class:bizInterface/Attribute:if_connected_id+' => 'interface connected to this one',
+	'Class:bizInterface/Attribute:if_connected_name' => 'Connected interface',
+	'Class:bizInterface/Attribute:if_connected_name+' => 'name of the interface connected to this one',
+	'Class:bizInterface/Attribute:if_connected_device' => 'Connected device',
+	'Class:bizInterface/Attribute:if_connected_device+' => 'name of the device connected to this interface',
+));
+
+//
+// Class: bizSubnet
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizSubnet' => 'Subnet',
+	'Class:bizSubnet+' => 'Logical or physical subnet',
+	'Class:bizSubnet/Attribute:ip' => 'IP',
+	'Class:bizSubnet/Attribute:ip+' => 'IP',
+	'Class:bizSubnet/Attribute:mask' => 'IP mask',
+	'Class:bizSubnet/Attribute:mask+' => 'IP mask',
+));
+
+//
+// Class: bizDevice
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizDevice' => 'Device',
+	'Class:bizDevice+' => 'Electronic devices',
+	'Class:bizDevice/Attribute:location_id' => 'Location',
+	'Class:bizDevice/Attribute:location_id+' => 'where is the located object physically located',
+	'Class:bizDevice/Attribute:location_name' => 'Location Name',
+	'Class:bizDevice/Attribute:location_name+' => 'name of the location',
+	'Class:bizDevice/Attribute:country' => 'Country',
+	'Class:bizDevice/Attribute:country+' => 'country where the device is located',
+	'Class:bizDevice/Attribute:brand' => 'Brand',
+	'Class:bizDevice/Attribute:brand+' => 'The manufacturer of the device',
+	'Class:bizDevice/Attribute:model' => 'Model',
+	'Class:bizDevice/Attribute:model+' => 'The model number of the device',
+	'Class:bizDevice/Attribute:serial_number' => 'Serial Number',
+	'Class:bizDevice/Attribute:serial_number+' => 'The serial number of the device',
+	'Class:bizDevice/Attribute:mgmt_ip' => 'Mgmt IP',
+	'Class:bizDevice/Attribute:mgmt_ip+' => 'Management IP',
+));
+
+//
+// Class: bizPC
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizPC' => 'PC',
+	'Class:bizPC+' => 'Personal Computers',
+	'Class:bizPC/Attribute:type' => 'Type',
+	'Class:bizPC/Attribute:type+' => 'Type of computer',
+	'Class:bizPC/Attribute:type/Value:desktop PC' => 'desktop PC',
+	'Class:bizPC/Attribute:type/Value:desktop PC+' => 'desktop PC',
+	'Class:bizPC/Attribute:type/Value:laptop' => 'laptop',
+	'Class:bizPC/Attribute:type/Value:laptop+' => 'laptop',
+	'Class:bizPC/Attribute:memory_size' => 'Memory Size',
+	'Class:bizPC/Attribute:memory_size+' => 'Size of the memory',
+	'Class:bizPC/Attribute:cpu' => 'CPU',
+	'Class:bizPC/Attribute:cpu+' => 'CPU type',
+	'Class:bizPC/Attribute:hdd_size' => 'HDD Size',
+	'Class:bizPC/Attribute:hdd_size+' => 'Size of the hard drive',
+	'Class:bizPC/Attribute:os_family' => 'OS Family',
+	'Class:bizPC/Attribute:os_family+' => 'Type of operating system',
+	'Class:bizPC/Attribute:os_version' => 'OS Version',
+	'Class:bizPC/Attribute:os_version+' => 'Detailed version number of the operating system',
+	'Class:bizPC/Attribute:shipment_number' => 'Shipment Code',
+	'Class:bizPC/Attribute:shipment_number+' => 'Number for tracking shipment',
+	'Class:bizPC/Attribute:default_gateway' => 'Default Gateway',
+	'Class:bizPC/Attribute:default_gateway+' => 'Default Gateway for this device',
+));
+
+//
+// Class: bizServer
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizServer' => 'Server',
+	'Class:bizServer+' => 'Computer Servers',
+	'Class:bizServer/Attribute:memory_size' => 'Memory Size',
+	'Class:bizServer/Attribute:memory_size+' => 'Size of the memory',
+	'Class:bizServer/Attribute:cpu' => 'CPU type',
+	'Class:bizServer/Attribute:cpu+' => 'CPU type',
+	'Class:bizServer/Attribute:number_of_cpus' => 'Number of CPUs',
+	'Class:bizServer/Attribute:number_of_cpus+' => 'Number of CPUs',
+	'Class:bizServer/Attribute:hdd_size' => 'HDD Size',
+	'Class:bizServer/Attribute:hdd_size+' => 'Size of the hard drive',
+	'Class:bizServer/Attribute:hdd_free_size' => 'Free HDD Size',
+	'Class:bizServer/Attribute:hdd_free_size+' => 'Size of the free space on the hard drive(s)',
+	'Class:bizServer/Attribute:os_family' => 'OS Family',
+	'Class:bizServer/Attribute:os_family+' => 'Type of operating system',
+	'Class:bizServer/Attribute:os_version' => 'OS Version',
+	'Class:bizServer/Attribute:os_version+' => 'Detailed version number of the operating system',
+	'Class:bizServer/Attribute:shipment_number' => 'Shipment number',
+	'Class:bizServer/Attribute:shipment_number+' => 'Number for tracking shipment',
+	'Class:bizServer/Attribute:default_gateway' => 'Default Gateway',
+	'Class:bizServer/Attribute:default_gateway+' => 'Default Gateway for this device',
+));
+
+//
+// Class: bizNetworkDevice
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizNetworkDevice' => 'Network Device',
+	'Class:bizNetworkDevice+' => 'A network device',
+	'Class:bizNetworkDevice/Attribute:type' => 'Type',
+	'Class:bizNetworkDevice/Attribute:type+' => 'Type of device',
+	'Class:bizNetworkDevice/Attribute:type/Value:switch' => 'switch',
+	'Class:bizNetworkDevice/Attribute:type/Value:switch+' => 'switch',
+	'Class:bizNetworkDevice/Attribute:type/Value:router' => 'router',
+	'Class:bizNetworkDevice/Attribute:type/Value:router+' => 'router',
+	'Class:bizNetworkDevice/Attribute:type/Value:firewall' => 'firewall',
+	'Class:bizNetworkDevice/Attribute:type/Value:firewall+' => 'firewall',
+	'Class:bizNetworkDevice/Attribute:type/Value:load balancer' => 'load balancer',
+	'Class:bizNetworkDevice/Attribute:type/Value:load balancer+' => 'load balancer',
+	'Class:bizNetworkDevice/Attribute:type/Value:hub' => 'hub',
+	'Class:bizNetworkDevice/Attribute:type/Value:hub+' => 'hub',
+	'Class:bizNetworkDevice/Attribute:type/Value:WAN accelerator' => 'WAN accelerator',
+	'Class:bizNetworkDevice/Attribute:type/Value:WAN accelerator+' => 'WAN accelerator',
+	'Class:bizNetworkDevice/Attribute:default_gateway' => 'Default Gateway',
+	'Class:bizNetworkDevice/Attribute:default_gateway+' => 'Default Gateway for this device',
+	'Class:bizNetworkDevice/Attribute:ios_version' => 'IOS version',
+	'Class:bizNetworkDevice/Attribute:ios_version+' => 'IOS (software) version',
+	'Class:bizNetworkDevice/Attribute:memory' => 'Memory',
+	'Class:bizNetworkDevice/Attribute:memory+' => 'Memory description',
+	'Class:bizNetworkDevice/Attribute:snmp_read' => 'SNMP Community (Read)',
+	'Class:bizNetworkDevice/Attribute:snmp_read+' => 'SNMP Read Community String',
+	'Class:bizNetworkDevice/Attribute:snmp_write' => 'SNMP Community (Write)',
+	'Class:bizNetworkDevice/Attribute:snmp_write+' => 'SNMP Write Community String',
+));
+
+//
+// Class: bizInfraGroup
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizInfraGroup' => 'Infra Group',
+	'Class:bizInfraGroup+' => 'A group of infrastructure elements',
+	'Class:bizInfraGroup/Attribute:type' => 'Type',
+	'Class:bizInfraGroup/Attribute:type+' => 'Type of groupe',
+	'Class:bizInfraGroup/Attribute:type/Value:Monitoring' => 'Monitoring',
+	'Class:bizInfraGroup/Attribute:type/Value:Monitoring+' => 'Monitoring',
+	'Class:bizInfraGroup/Attribute:type/Value:Reporting' => 'Reporting',
+	'Class:bizInfraGroup/Attribute:type/Value:Reporting+' => 'Reporting',
+	'Class:bizInfraGroup/Attribute:type/Value:list' => 'list',
+	'Class:bizInfraGroup/Attribute:type/Value:list+' => 'list',
+	'Class:bizInfraGroup/Attribute:description' => 'Description',
+	'Class:bizInfraGroup/Attribute:description+' => 'usage of the Group',
+	'Class:bizInfraGroup/Attribute:parent_group_id' => 'Parent Group',
+	'Class:bizInfraGroup/Attribute:parent_group_id+' => 'including group',
+	'Class:bizInfraGroup/Attribute:parent_group_name' => 'Parent Group (Name)',
+	'Class:bizInfraGroup/Attribute:parent_group_name+' => 'name of the parent group',
+));
+
+//
+// Class: bizApplication
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizApplication' => 'Application',
+	'Class:bizApplication+' => 'General application',
+	'Class:bizApplication/Attribute:device_id' => 'Hosting device',
+	'Class:bizApplication/Attribute:device_id+' => 'The device where application is installed',
+	'Class:bizApplication/Attribute:device_name' => 'Hosting device',
+	'Class:bizApplication/Attribute:device_name+' => 'Name of the device where application is installed',
+	'Class:bizApplication/Attribute:install_date' => 'Installation Date',
+	'Class:bizApplication/Attribute:install_date+' => 'Date when application was installed',
+	'Class:bizApplication/Attribute:version' => 'Version',
+	'Class:bizApplication/Attribute:version+' => 'Application version',
+	'Class:bizApplication/Attribute:function' => 'Function',
+	'Class:bizApplication/Attribute:function+' => 'Function provided by this application',
+));
+
+//
+// Class: lnkInfraGrouping
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraGrouping' => 'Infra Grouping',
+	'Class:lnkInfraGrouping+' => 'Infra part of an Infra Group',
+	'Class:lnkInfraGrouping/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraGrouping/Attribute:infra_id+' => 'Infrastructure part of the group',
+	'Class:lnkInfraGrouping/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraGrouping/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraGrouping/Attribute:infra_status' => 'Status',
+	'Class:lnkInfraGrouping/Attribute:infra_status+' => 'Status of the impacted infrastructure',
+	'Class:lnkInfraGrouping/Attribute:infra_group_id' => 'Group',
+	'Class:lnkInfraGrouping/Attribute:infra_group_id+' => 'Name of the group',
+	'Class:lnkInfraGrouping/Attribute:group_name' => 'Group Name',
+	'Class:lnkInfraGrouping/Attribute:group_name+' => 'Name of the group containing infrastructure',
+	'Class:lnkInfraGrouping/Attribute:impact' => 'Relation',
+	'Class:lnkInfraGrouping/Attribute:impact+' => 'Relation between this group and infra',
+));
+
+//
+// Class: lnkClientServer
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkClientServer' => 'ClientServerLinks',
+	'Class:lnkClientServer+' => 'Link between client server application',
+	'Class:lnkClientServer/Attribute:status' => 'Status',
+	'Class:lnkClientServer/Attribute:status+' => 'Lifecycle status',
+	'Class:lnkClientServer/Attribute:status/Value:production' => 'production',
+	'Class:lnkClientServer/Attribute:status/Value:production+' => 'production',
+	'Class:lnkClientServer/Attribute:status/Value:implementation' => 'implementation',
+	'Class:lnkClientServer/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:lnkClientServer/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:lnkClientServer/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:lnkClientServer/Attribute:client_id' => 'Client',
+	'Class:lnkClientServer/Attribute:client_id+' => 'The client part of the link',
+	'Class:lnkClientServer/Attribute:client_name' => 'Client',
+	'Class:lnkClientServer/Attribute:client_name+' => 'Name of the client',
+	'Class:lnkClientServer/Attribute:server_id' => 'Server',
+	'Class:lnkClientServer/Attribute:server_id+' => 'the server part of the link',
+	'Class:lnkClientServer/Attribute:server_name' => 'Server',
+	'Class:lnkClientServer/Attribute:server_name+' => 'Name of the server',
+	'Class:lnkClientServer/Attribute:relation' => 'Relation',
+	'Class:lnkClientServer/Attribute:relation+' => 'Type of relation between both application',
+));
+
+//
+// Class: bizPatch
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizPatch' => 'Patch',
+	'Class:bizPatch+' => 'Patch installed on infrastucture',
+	'Class:bizPatch/Attribute:status' => 'Status',
+	'Class:bizPatch/Attribute:status+' => 'Lifecycle status',
+	'Class:bizPatch/Attribute:status/Value:production' => 'production',
+	'Class:bizPatch/Attribute:status/Value:production+' => 'production',
+	'Class:bizPatch/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:bizPatch/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:bizPatch/Attribute:device_id' => 'Device',
+	'Class:bizPatch/Attribute:device_id+' => 'The Device where patch is installed',
+	'Class:bizPatch/Attribute:device_name' => 'Device Name',
+	'Class:bizPatch/Attribute:device_name+' => 'Name of the impacted device',
+	'Class:bizPatch/Attribute:install_date' => 'Installation Date',
+	'Class:bizPatch/Attribute:install_date+' => 'Date when application was installed',
+	'Class:bizPatch/Attribute:description' => 'Description',
+	'Class:bizPatch/Attribute:description+' => 'description du patch',
+	'Class:bizPatch/Attribute:patch_type' => 'Type',
+	'Class:bizPatch/Attribute:patch_type+' => 'type de patch',
+));
+
+//
+// Class: bizIncidentTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizIncidentTicket' => 'Incident',
+	'Class:bizIncidentTicket+' => 'Incident ticket',
+	'Class:bizIncidentTicket/Attribute:name' => 'Ticket Ref',
+	'Class:bizIncidentTicket/Attribute:name+' => 'Refence number ofr this incident',
+	'Class:bizIncidentTicket/Attribute:title' => 'Title',
+	'Class:bizIncidentTicket/Attribute:title+' => 'Overview of the Incident',
+	'Class:bizIncidentTicket/Attribute:type' => 'Type',
+	'Class:bizIncidentTicket/Attribute:type+' => 'Type of the Incident',
+	'Class:bizIncidentTicket/Attribute:type/Value:Network' => 'Network',
+	'Class:bizIncidentTicket/Attribute:type/Value:Network+' => 'Network',
+	'Class:bizIncidentTicket/Attribute:type/Value:Server' => 'Server',
+	'Class:bizIncidentTicket/Attribute:type/Value:Server+' => 'Server',
+	'Class:bizIncidentTicket/Attribute:type/Value:Desktop' => 'Desktop',
+	'Class:bizIncidentTicket/Attribute:type/Value:Desktop+' => 'Desktop',
+	'Class:bizIncidentTicket/Attribute:type/Value:Application' => 'Application',
+	'Class:bizIncidentTicket/Attribute:type/Value:Application+' => 'Application',
+	'Class:bizIncidentTicket/Attribute:org_id' => 'Customer',
+	'Class:bizIncidentTicket/Attribute:org_id+' => 'who is impacted by the ticket',
+	'Class:bizIncidentTicket/Attribute:customer_name' => 'Customer',
+	'Class:bizIncidentTicket/Attribute:customer_name+' => 'Name of the customer impacted by this ticket',
+	'Class:bizIncidentTicket/Attribute:ticket_status' => 'Status',
+	'Class:bizIncidentTicket/Attribute:ticket_status+' => 'Status of the ticket',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:New' => 'New',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:New+' => 'New',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Assigned' => 'Assigned',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Assigned+' => 'Assigned',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:WorkInProgress' => 'WorkInProgress',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:WorkInProgress+' => 'WorkInProgress',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Resolved' => 'Resolved',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Resolved+' => 'Resolved',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Closed' => 'Closed',
+	'Class:bizIncidentTicket/Attribute:ticket_status/Value:Closed+' => 'Closed',
+	'Class:bizIncidentTicket/Attribute:initial_situation' => 'Initial Situation',
+	'Class:bizIncidentTicket/Attribute:initial_situation+' => 'Initial situation of the Incident',
+	'Class:bizIncidentTicket/Attribute:current_situation' => 'Current Situation',
+	'Class:bizIncidentTicket/Attribute:current_situation+' => 'Current situation of the Incident',
+	'Class:bizIncidentTicket/Attribute:start_date' => 'Starting date',
+	'Class:bizIncidentTicket/Attribute:start_date+' => 'Incident starting date',
+	'Class:bizIncidentTicket/Attribute:last_update' => 'Last update',
+	'Class:bizIncidentTicket/Attribute:last_update+' => 'last time the Ticket was modified',
+	'Class:bizIncidentTicket/Attribute:next_update' => 'Next update',
+	'Class:bizIncidentTicket/Attribute:next_update+' => 'next time the Ticket is expected to be  modified',
+	'Class:bizIncidentTicket/Attribute:end_date' => 'Closure Date',
+	'Class:bizIncidentTicket/Attribute:end_date+' => 'Date when the Ticket was closed',
+	'Class:bizIncidentTicket/Attribute:caller_id' => 'Caller',
+	'Class:bizIncidentTicket/Attribute:caller_id+' => 'person that trigger incident',
+	'Class:bizIncidentTicket/Attribute:caller_mail' => 'Caller',
+	'Class:bizIncidentTicket/Attribute:caller_mail+' => 'Person that trigger this incident',
+	'Class:bizIncidentTicket/Attribute:impact' => 'Impact',
+	'Class:bizIncidentTicket/Attribute:impact+' => 'Impact of the Incident',
+	'Class:bizIncidentTicket/Attribute:workgroup_id' => 'Workgroup',
+	'Class:bizIncidentTicket/Attribute:workgroup_id+' => 'which workgroup is owning ticket',
+	'Class:bizIncidentTicket/Attribute:workgroup_name' => 'Workgroup',
+	'Class:bizIncidentTicket/Attribute:workgroup_name+' => 'name of workgroup managing the Ticket',
+	'Class:bizIncidentTicket/Attribute:agent_id' => 'Agent',
+	'Class:bizIncidentTicket/Attribute:agent_id+' => 'who is managing the ticket',
+	'Class:bizIncidentTicket/Attribute:agent_mail' => 'Agent',
+	'Class:bizIncidentTicket/Attribute:agent_mail+' => 'mail of agent managing the Ticket',
+	'Class:bizIncidentTicket/Attribute:action_log' => 'Action Logs',
+	'Class:bizIncidentTicket/Attribute:action_log+' => 'List all action performed during the incident',
+	'Class:bizIncidentTicket/Attribute:severity' => 'Severity',
+	'Class:bizIncidentTicket/Attribute:severity+' => 'Field defining the criticity if the incident',
+	'Class:bizIncidentTicket/Attribute:severity/Value:critical' => 'critical',
+	'Class:bizIncidentTicket/Attribute:severity/Value:critical+' => 'critical',
+	'Class:bizIncidentTicket/Attribute:severity/Value:medium' => 'medium',
+	'Class:bizIncidentTicket/Attribute:severity/Value:medium+' => 'medium',
+	'Class:bizIncidentTicket/Attribute:severity/Value:low' => 'low',
+	'Class:bizIncidentTicket/Attribute:severity/Value:low+' => 'low',
+	'Class:bizIncidentTicket/Attribute:assignment_count' => 'Assignment Count',
+	'Class:bizIncidentTicket/Attribute:assignment_count+' => 'Number of times this ticket was assigned or reassigned',
+	'Class:bizIncidentTicket/Attribute:resolution' => 'Resolution',
+	'Class:bizIncidentTicket/Attribute:resolution+' => 'Description of the resolution',
+	'Class:bizIncidentTicket/Attribute:impacted_infra_manual' => 'Impacted Infrastructure',
+	'Class:bizIncidentTicket/Attribute:impacted_infra_manual+' => 'CIs that are not meeting the SLA',
+	'Class:bizIncidentTicket/Attribute:related_tickets' => 'Related Tickets',
+	'Class:bizIncidentTicket/Attribute:related_tickets+' => 'Other incident tickets related to this one',
+	'Class:bizIncidentTicket/Attribute:contacts_a_notifier' => 'contacts auto',
+	'Class:bizIncidentTicket/Attribute:contacts_a_notifier+' => 'blah',
+	'Class:bizIncidentTicket/Stimulus:ev_assign' => 'Assign this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_assign+' => 'Assign this ticket to a group and an agent',
+	'Class:bizIncidentTicket/Stimulus:ev_reassign' => 'Reassign this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_reassign+' => 'Reassign this ticket to a different group and agent',
+	'Class:bizIncidentTicket/Stimulus:ev_start_working' => 'Work on this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_start_working+' => 'Start working on this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_resolve' => 'Resolve this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_resolve+' => 'Resolve this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_close' => 'Close this ticket',
+	'Class:bizIncidentTicket/Stimulus:ev_close+' => 'Close this ticket',
+));
+
+//
+// Class: lnkRelatedTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkRelatedTicket' => 'Related Ticket',
+	'Class:lnkRelatedTicket+' => 'Ticket related to a ticket',
+	'Class:lnkRelatedTicket/Attribute:rel_ticket_id' => 'Related Ticket',
+	'Class:lnkRelatedTicket/Attribute:rel_ticket_id+' => 'The related ticket',
+	'Class:lnkRelatedTicket/Attribute:rel_ticket_name' => 'Related ticket',
+	'Class:lnkRelatedTicket/Attribute:rel_ticket_name+' => 'Name of the related ticket',
+	'Class:lnkRelatedTicket/Attribute:ticket_id' => 'Ticket',
+	'Class:lnkRelatedTicket/Attribute:ticket_id+' => 'Ticket number',
+	'Class:lnkRelatedTicket/Attribute:ticket_name' => 'Ticket Name',
+	'Class:lnkRelatedTicket/Attribute:ticket_name+' => 'Name of the ticket',
+	'Class:lnkRelatedTicket/Attribute:impact' => 'Impact',
+	'Class:lnkRelatedTicket/Attribute:impact+' => 'Impact on the related ticket',
+));
+
+//
+// Class: lnkInfraTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraTicket' => 'Infra Ticket',
+	'Class:lnkInfraTicket+' => 'Infra impacted by a ticket',
+	'Class:lnkInfraTicket/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraTicket/Attribute:infra_id+' => 'The infrastructure impacted',
+	'Class:lnkInfraTicket/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraTicket/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraTicket/Attribute:ticket_id' => 'Ticket #',
+	'Class:lnkInfraTicket/Attribute:ticket_id+' => 'Ticket number',
+	'Class:lnkInfraTicket/Attribute:ticket_name' => 'Ticket Name',
+	'Class:lnkInfraTicket/Attribute:ticket_name+' => 'Name of the ticket',
+	'Class:lnkInfraTicket/Attribute:impact' => 'Impact',
+	'Class:lnkInfraTicket/Attribute:impact+' => 'Level of impact of the infra by the related ticket',
+));
+
+//
+// Class: lnkContactTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactTicket' => 'Contact Ticket',
+	'Class:lnkContactTicket+' => 'Contacts to be notify for a ticket',
+	'Class:lnkContactTicket/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactTicket/Attribute:contact_id+' => 'Contact to Notify',
+	'Class:lnkContactTicket/Attribute:contact_email' => 'Contact email',
+	'Class:lnkContactTicket/Attribute:contact_email+' => 'Mail for the contact',
+	'Class:lnkContactTicket/Attribute:ticket_id' => 'Ticket #',
+	'Class:lnkContactTicket/Attribute:ticket_id+' => 'Ticket number',
+	'Class:lnkContactTicket/Attribute:ticket_name' => 'Ticket Name',
+	'Class:lnkContactTicket/Attribute:ticket_name+' => 'Name of the ticket',
+	'Class:lnkContactTicket/Attribute:role' => 'Role',
+	'Class:lnkContactTicket/Attribute:role+' => 'Role of the contact',
+));
+
+//
+// Class: bizWorkgroup
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizWorkgroup' => 'Workgroup',
+	'Class:bizWorkgroup+' => 'Call tracking workgroup',
+	'Class:bizWorkgroup/Attribute:status' => 'Status',
+	'Class:bizWorkgroup/Attribute:status+' => 'Lifecycle status',
+	'Class:bizWorkgroup/Attribute:status/Value:production' => 'production',
+	'Class:bizWorkgroup/Attribute:status/Value:production+' => 'production',
+	'Class:bizWorkgroup/Attribute:status/Value:implementation' => 'implementation',
+	'Class:bizWorkgroup/Attribute:status/Value:implementation+' => 'implementation',
+	'Class:bizWorkgroup/Attribute:status/Value:obsolete' => 'obsolete',
+	'Class:bizWorkgroup/Attribute:status/Value:obsolete+' => 'obsolete',
+	'Class:bizWorkgroup/Attribute:org_name' => 'Organization',
+	'Class:bizWorkgroup/Attribute:org_name+' => 'Company / Department owning this object',
+	'Class:bizWorkgroup/Attribute:team_id' => 'Team',
+	'Class:bizWorkgroup/Attribute:team_id+' => 'Team owning the workgroup',
+	'Class:bizWorkgroup/Attribute:team_name' => 'Team Name',
+	'Class:bizWorkgroup/Attribute:team_name+' => 'name of the team',
+	'Class:bizWorkgroup/Attribute:role' => 'Role',
+	'Class:bizWorkgroup/Attribute:role+' => 'Role of this work group',
+));
+
+//
+// Class: bizService
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizService' => 'Service',
+	'Class:bizService+' => 'Service provided by an organization',
+	'Class:bizService/Attribute:name' => 'Name',
+	'Class:bizService/Attribute:name+' => 'Name of the service',
+	'Class:bizService/Attribute:org_id' => 'Provider',
+	'Class:bizService/Attribute:org_id+' => 'Provider for this service',
+	'Class:bizService/Attribute:provider_name' => 'Provider',
+	'Class:bizService/Attribute:provider_name+' => 'name of the Provider',
+	'Class:bizService/Attribute:service_category' => 'Service Category',
+	'Class:bizService/Attribute:service_category+' => 'Category for this contract',
+	'Class:bizService/Attribute:service_category/Value:Server' => 'Server',
+	'Class:bizService/Attribute:service_category/Value:Server+' => 'Server',
+	'Class:bizService/Attribute:service_category/Value:Network' => 'Network',
+	'Class:bizService/Attribute:service_category/Value:Network+' => 'Network',
+	'Class:bizService/Attribute:service_category/Value:End-User' => 'End-User',
+	'Class:bizService/Attribute:service_category/Value:End-User+' => 'End-User',
+	'Class:bizService/Attribute:service_category/Value:Desktop' => 'Desktop',
+	'Class:bizService/Attribute:service_category/Value:Desktop+' => 'Desktop',
+	'Class:bizService/Attribute:service_category/Value:Application' => 'Application',
+	'Class:bizService/Attribute:service_category/Value:Application+' => 'Application',
+	'Class:bizService/Attribute:description' => 'Description',
+	'Class:bizService/Attribute:description+' => 'Description of this service',
+	'Class:bizService/Attribute:status' => 'Status',
+	'Class:bizService/Attribute:status+' => 'Status of the service',
+	'Class:bizService/Attribute:status/Value:New' => 'New',
+	'Class:bizService/Attribute:status/Value:New+' => 'New',
+	'Class:bizService/Attribute:status/Value:Implementation' => 'Implementation',
+	'Class:bizService/Attribute:status/Value:Implementation+' => 'Implementation',
+	'Class:bizService/Attribute:status/Value:Production' => 'Production',
+	'Class:bizService/Attribute:status/Value:Production+' => 'Production',
+	'Class:bizService/Attribute:status/Value:Obsolete' => 'Obsolete',
+	'Class:bizService/Attribute:status/Value:Obsolete+' => 'Obsolete',
+	'Class:bizService/Attribute:type' => 'Type',
+	'Class:bizService/Attribute:type+' => 'Type of the service',
+	'Class:bizService/Attribute:type/Value:Hardware' => 'Hardware',
+	'Class:bizService/Attribute:type/Value:Hardware+' => 'Hardware',
+	'Class:bizService/Attribute:type/Value:Software' => 'Software',
+	'Class:bizService/Attribute:type/Value:Software+' => 'Software',
+	'Class:bizService/Attribute:type/Value:Support' => 'Support',
+	'Class:bizService/Attribute:type/Value:Support+' => 'Support',
+));
+
+//
+// Class: bizContract
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizContract' => 'Contract',
+	'Class:bizContract+' => 'Contract signed by an organization',
+	'Class:bizContract/Attribute:name' => 'Name',
+	'Class:bizContract/Attribute:name+' => 'Name of the contract',
+	'Class:bizContract/Attribute:org_id' => 'Customer',
+	'Class:bizContract/Attribute:org_id+' => 'Customer for this contract',
+	'Class:bizContract/Attribute:customer_name' => 'Customer',
+	'Class:bizContract/Attribute:customer_name+' => 'name of the Customer',
+	'Class:bizContract/Attribute:service_id' => 'Service',
+	'Class:bizContract/Attribute:service_id+' => 'Provider for this contract',
+	'Class:bizContract/Attribute:provider_name' => 'Provider',
+	'Class:bizContract/Attribute:provider_name+' => 'name of the service provider',
+	'Class:bizContract/Attribute:service_name' => 'Service',
+	'Class:bizContract/Attribute:service_name+' => 'name of the service',
+	'Class:bizContract/Attribute:team_id' => 'Team',
+	'Class:bizContract/Attribute:team_id+' => 'Team managing this contract',
+	'Class:bizContract/Attribute:team_name' => 'Team',
+	'Class:bizContract/Attribute:team_name+' => 'name of the team managing this contract',
+	'Class:bizContract/Attribute:service_level' => 'Service Level',
+	'Class:bizContract/Attribute:service_level+' => 'Level of service for this contract',
+	'Class:bizContract/Attribute:service_level/Value:Gold' => 'Gold',
+	'Class:bizContract/Attribute:service_level/Value:Gold+' => 'Gold',
+	'Class:bizContract/Attribute:service_level/Value:Silver' => 'Silver',
+	'Class:bizContract/Attribute:service_level/Value:Silver+' => 'Silver',
+	'Class:bizContract/Attribute:service_level/Value:Bronze' => 'Bronze',
+	'Class:bizContract/Attribute:service_level/Value:Bronze+' => 'Bronze',
+	'Class:bizContract/Attribute:cost_unit' => 'Cost Unit',
+	'Class:bizContract/Attribute:cost_unit+' => 'Cost unit to compute global cost for this contract',
+	'Class:bizContract/Attribute:cost_unit/Value:Devices' => 'Devices',
+	'Class:bizContract/Attribute:cost_unit/Value:Devices+' => 'Devices',
+	'Class:bizContract/Attribute:cost_unit/Value:Persons' => 'Persons',
+	'Class:bizContract/Attribute:cost_unit/Value:Persons+' => 'Persons',
+	'Class:bizContract/Attribute:cost_unit/Value:Applications' => 'Applications',
+	'Class:bizContract/Attribute:cost_unit/Value:Applications+' => 'Applications',
+	'Class:bizContract/Attribute:cost_unit/Value:Global' => 'Global',
+	'Class:bizContract/Attribute:cost_unit/Value:Global+' => 'Global',
+	'Class:bizContract/Attribute:cost_freq' => 'Billing frequency',
+	'Class:bizContract/Attribute:cost_freq+' => 'Frequency of cost for this contract',
+	'Class:bizContract/Attribute:cost_freq/Value:Monthly' => 'Monthly',
+	'Class:bizContract/Attribute:cost_freq/Value:Monthly+' => 'Monthly',
+	'Class:bizContract/Attribute:cost_freq/Value:Yearly' => 'Yearly',
+	'Class:bizContract/Attribute:cost_freq/Value:Yearly+' => 'Yearly',
+	'Class:bizContract/Attribute:cost_freq/Value:Once' => 'Once',
+	'Class:bizContract/Attribute:cost_freq/Value:Once+' => 'Once',
+	'Class:bizContract/Attribute:cost' => 'Cost',
+	'Class:bizContract/Attribute:cost+' => 'Cost of this contract',
+	'Class:bizContract/Attribute:currency' => 'Currency',
+	'Class:bizContract/Attribute:currency+' => 'Currency of cost for this contract',
+	'Class:bizContract/Attribute:currency/Value:Euros' => 'Euros',
+	'Class:bizContract/Attribute:currency/Value:Euros+' => 'Euros',
+	'Class:bizContract/Attribute:currency/Value:Dollars' => 'Dollars',
+	'Class:bizContract/Attribute:currency/Value:Dollars+' => 'Dollars',
+	'Class:bizContract/Attribute:description' => 'Description',
+	'Class:bizContract/Attribute:description+' => 'Description of this contract',
+	'Class:bizContract/Attribute:move2prod_date' => 'Date of Move To Production',
+	'Class:bizContract/Attribute:move2prod_date+' => 'Date when the contract is on production',
+	'Class:bizContract/Attribute:end_prod' => 'Date of End Of Production',
+	'Class:bizContract/Attribute:end_prod+' => 'Date when the contract is stopped',
+	'Class:bizContract/Attribute:status' => 'Status',
+	'Class:bizContract/Attribute:status+' => 'Status of the contract',
+	'Class:bizContract/Attribute:status/Value:New' => 'New',
+	'Class:bizContract/Attribute:status/Value:New+' => 'New',
+	'Class:bizContract/Attribute:status/Value:Negotiating' => 'Negotiating',
+	'Class:bizContract/Attribute:status/Value:Negotiating+' => 'Negotiating',
+	'Class:bizContract/Attribute:status/Value:Signed' => 'Signed',
+	'Class:bizContract/Attribute:status/Value:Signed+' => 'Signed',
+	'Class:bizContract/Attribute:status/Value:Production' => 'Production',
+	'Class:bizContract/Attribute:status/Value:Production+' => 'Production',
+	'Class:bizContract/Attribute:status/Value:Finished' => 'Finished',
+	'Class:bizContract/Attribute:status/Value:Finished+' => 'Finished',
+	'Class:bizContract/Attribute:type' => 'Type',
+	'Class:bizContract/Attribute:type+' => 'Type of the contract',
+	'Class:bizContract/Attribute:type/Value:Hardware' => 'Hardware',
+	'Class:bizContract/Attribute:type/Value:Hardware+' => 'Hardware',
+	'Class:bizContract/Attribute:type/Value:Software' => 'Software',
+	'Class:bizContract/Attribute:type/Value:Software+' => 'Software',
+	'Class:bizContract/Attribute:type/Value:Support' => 'Support',
+	'Class:bizContract/Attribute:type/Value:Support+' => 'Support',
+	'Class:bizContract/Attribute:type/Value:Licence' => 'Licence',
+	'Class:bizContract/Attribute:type/Value:Licence+' => 'Licence',
+	'Class:bizContract/Attribute:version_number' => 'Version',
+	'Class:bizContract/Attribute:version_number+' => 'Revision number for this contract',
+));
+
+//
+// Class: lnkInfraContract
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraContract' => 'InfraContractLinks',
+	'Class:lnkInfraContract+' => 'Infra covered by a contract',
+	'Class:lnkInfraContract/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraContract/Attribute:infra_id+' => 'The infrastructure impacted',
+	'Class:lnkInfraContract/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraContract/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraContract/Attribute:infra_status' => 'Status',
+	'Class:lnkInfraContract/Attribute:infra_status+' => 'Status of the impacted infrastructure',
+	'Class:lnkInfraContract/Attribute:contract_id' => 'Contract',
+	'Class:lnkInfraContract/Attribute:contract_id+' => 'Contract id',
+	'Class:lnkInfraContract/Attribute:contract_name' => 'Contract Name',
+	'Class:lnkInfraContract/Attribute:contract_name+' => 'Name of the contract',
+	'Class:lnkInfraContract/Attribute:coverage' => 'Coverage',
+	'Class:lnkInfraContract/Attribute:coverage+' => 'coverage for the given infra',
+	'Class:lnkInfraContract/Attribute:service_level' => 'Service Level',
+	'Class:lnkInfraContract/Attribute:service_level+' => 'service level for the given infra',
+));
+
+//
+// Class: lnkContactContract
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactContract' => 'ContactContractLink',
+	'Class:lnkContactContract+' => 'Contact associated to a contract',
+	'Class:lnkContactContract/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactContract/Attribute:contact_id+' => 'The contact linked to contract',
+	'Class:lnkContactContract/Attribute:contact_mail' => 'Contact E-mail',
+	'Class:lnkContactContract/Attribute:contact_mail+' => 'Mail for the contact',
+	'Class:lnkContactContract/Attribute:contract_id' => 'Contract',
+	'Class:lnkContactContract/Attribute:contract_id+' => 'Contract ID',
+	'Class:lnkContactContract/Attribute:contract_name' => 'Contract Name',
+	'Class:lnkContactContract/Attribute:contract_name+' => 'Name of the contract',
+	'Class:lnkContactContract/Attribute:role' => 'Role',
+	'Class:lnkContactContract/Attribute:role+' => 'Role of this contact for this contract',
+));
+
+//
+// Class: lnkDocumentContract
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkDocumentContract' => 'DocumentsContractLinks',
+	'Class:lnkDocumentContract+' => 'A link between a document and another contract',
+	'Class:lnkDocumentContract/Attribute:doc_id' => 'Document',
+	'Class:lnkDocumentContract/Attribute:doc_id+' => 'id of the Document',
+	'Class:lnkDocumentContract/Attribute:doc_name' => 'Document Name',
+	'Class:lnkDocumentContract/Attribute:doc_name+' => 'name of the document',
+	'Class:lnkDocumentContract/Attribute:contract_id' => 'Contract',
+	'Class:lnkDocumentContract/Attribute:contract_id+' => 'Contract linked to this document',
+	'Class:lnkDocumentContract/Attribute:contract_name' => 'Contract Name',
+	'Class:lnkDocumentContract/Attribute:contract_name+' => 'name of the linked contract',
+	'Class:lnkDocumentContract/Attribute:link_type' => 'Link Type',
+	'Class:lnkDocumentContract/Attribute:link_type+' => 'More information',
+));
+
+//
+// Class: bizChangeTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizChangeTicket' => 'Change',
+	'Class:bizChangeTicket+' => 'Change ticket',
+	'Class:bizChangeTicket/Attribute:name' => 'Ticket Ref',
+	'Class:bizChangeTicket/Attribute:name+' => 'Refence number ofr this change',
+	'Class:bizChangeTicket/Attribute:title' => 'Title',
+	'Class:bizChangeTicket/Attribute:title+' => 'Overview of the Change',
+	'Class:bizChangeTicket/Attribute:type' => 'Change Type',
+	'Class:bizChangeTicket/Attribute:type+' => 'Type of the Change',
+	'Class:bizChangeTicket/Attribute:domain' => 'Domain',
+	'Class:bizChangeTicket/Attribute:domain+' => 'Domain for the Change',
+	'Class:bizChangeTicket/Attribute:reason' => 'Reason For Change',
+	'Class:bizChangeTicket/Attribute:reason+' => 'Reason for the Change',
+	'Class:bizChangeTicket/Attribute:requestor_id' => 'Requestor',
+	'Class:bizChangeTicket/Attribute:requestor_id+' => 'who is requesting this change',
+	'Class:bizChangeTicket/Attribute:requestor_mail' => 'Requestor',
+	'Class:bizChangeTicket/Attribute:requestor_mail+' => 'mail of user requesting this change',
+	'Class:bizChangeTicket/Attribute:org_id' => 'Customer',
+	'Class:bizChangeTicket/Attribute:org_id+' => 'who is impacted by the ticket',
+	'Class:bizChangeTicket/Attribute:customer_name' => 'Customer',
+	'Class:bizChangeTicket/Attribute:customer_name+' => 'Name of the customer impacted by this ticket',
+	'Class:bizChangeTicket/Attribute:ticket_status' => 'Status',
+	'Class:bizChangeTicket/Attribute:ticket_status+' => 'Status of the ticket',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:New' => 'New',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:New+' => 'New',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Validated' => 'Validated',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Validated+' => 'Validated',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Rejected' => 'Rejected',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Rejected+' => 'Rejected',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Assigned' => 'Assigned',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Assigned+' => 'Assigned',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:PlannedScheduled' => 'PlannedScheduled',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:PlannedScheduled+' => 'PlannedScheduled',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Approved' => 'Approved',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Approved+' => 'Approved',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:NotApproved' => 'NotApproved',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:NotApproved+' => 'NotApproved',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Implemented' => 'Implemented',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Implemented+' => 'Implemented',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Monitored' => 'Monitored',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Monitored+' => 'Monitored',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Closed' => 'Closed',
+	'Class:bizChangeTicket/Attribute:ticket_status/Value:Closed+' => 'Closed',
+	'Class:bizChangeTicket/Attribute:creation_date' => 'Creation Date',
+	'Class:bizChangeTicket/Attribute:creation_date+' => 'Change creation date',
+	'Class:bizChangeTicket/Attribute:last_update' => 'Last Update',
+	'Class:bizChangeTicket/Attribute:last_update+' => 'last time the Ticket was modified',
+	'Class:bizChangeTicket/Attribute:start_date' => 'Start Date',
+	'Class:bizChangeTicket/Attribute:start_date+' => 'Time the change is expected to start',
+	'Class:bizChangeTicket/Attribute:end_date' => 'End Date',
+	'Class:bizChangeTicket/Attribute:end_date+' => 'Date when the change is supposed to end',
+	'Class:bizChangeTicket/Attribute:close_date' => 'Closure Date',
+	'Class:bizChangeTicket/Attribute:close_date+' => 'Date when the Ticket was closed',
+	'Class:bizChangeTicket/Attribute:impact' => 'Risk Assessment',
+	'Class:bizChangeTicket/Attribute:impact+' => 'Impact of the change',
+	'Class:bizChangeTicket/Attribute:workgroup_id' => 'Workgroup',
+	'Class:bizChangeTicket/Attribute:workgroup_id+' => 'which workgroup is owning ticket',
+	'Class:bizChangeTicket/Attribute:workgroup_name' => 'Workgroup',
+	'Class:bizChangeTicket/Attribute:workgroup_name+' => 'name of workgroup managing the Ticket',
+	'Class:bizChangeTicket/Attribute:agent_id' => 'Agent',
+	'Class:bizChangeTicket/Attribute:agent_id+' => 'who is managing the ticket',
+	'Class:bizChangeTicket/Attribute:agent_mail' => 'Agent',
+	'Class:bizChangeTicket/Attribute:agent_mail+' => 'name of agent managing the Ticket',
+	'Class:bizChangeTicket/Attribute:supervisorgroup_id' => 'Supervisor Group',
+	'Class:bizChangeTicket/Attribute:supervisorgroup_id+' => 'which workgroup is supervising ticket',
+	'Class:bizChangeTicket/Attribute:supervisorgroup_name' => 'Supervisor Group',
+	'Class:bizChangeTicket/Attribute:supervisorgroup_name+' => 'name of the group supervising the Ticket',
+	'Class:bizChangeTicket/Attribute:supervisor_id' => 'Supervisor',
+	'Class:bizChangeTicket/Attribute:supervisor_id+' => 'who is managing the ticket',
+	'Class:bizChangeTicket/Attribute:supervisor_mail' => 'Supervisor',
+	'Class:bizChangeTicket/Attribute:supervisor_mail+' => 'name of agent supervising the Ticket',
+	'Class:bizChangeTicket/Attribute:managergroup_id' => 'Manager Group',
+	'Class:bizChangeTicket/Attribute:managergroup_id+' => 'which workgroup is approving ticket',
+	'Class:bizChangeTicket/Attribute:managergroup_name' => 'Manager Group',
+	'Class:bizChangeTicket/Attribute:managergroup_name+' => 'name of workgroup approving the Ticket',
+	'Class:bizChangeTicket/Attribute:manager_id' => 'Manager',
+	'Class:bizChangeTicket/Attribute:manager_id+' => 'who is approving the ticket',
+	'Class:bizChangeTicket/Attribute:manager_mail' => 'Manager',
+	'Class:bizChangeTicket/Attribute:manager_mail+' => 'name of agent approving the Ticket',
+	'Class:bizChangeTicket/Attribute:outage' => 'Planned Outage',
+	'Class:bizChangeTicket/Attribute:outage+' => 'Flag to define if there is a planned outage',
+	'Class:bizChangeTicket/Attribute:outage/Value:Yes' => 'Yes',
+	'Class:bizChangeTicket/Attribute:outage/Value:Yes+' => 'Yes',
+	'Class:bizChangeTicket/Attribute:outage/Value:No' => 'No',
+	'Class:bizChangeTicket/Attribute:outage/Value:No+' => 'No',
+	'Class:bizChangeTicket/Attribute:change_request' => 'Change Request',
+	'Class:bizChangeTicket/Attribute:change_request+' => 'Description of Change required',
+	'Class:bizChangeTicket/Attribute:change_log' => 'Implementation Log',
+	'Class:bizChangeTicket/Attribute:change_log+' => 'List all action performed during the change',
+	'Class:bizChangeTicket/Attribute:fallback' => 'Fallback Plan',
+	'Class:bizChangeTicket/Attribute:fallback+' => 'Instruction to come back to former situation',
+	'Class:bizChangeTicket/Attribute:assignment_count' => 'Assignment Count',
+	'Class:bizChangeTicket/Attribute:assignment_count+' => 'Number of times this ticket was assigned or reassigned',
+	'Class:bizChangeTicket/Attribute:impacted_infra_manual' => 'Impacted Infrastructure',
+	'Class:bizChangeTicket/Attribute:impacted_infra_manual+' => 'CIs that are impacted by this change',
+	'Class:bizChangeTicket/Stimulus:ev_validate' => 'Validate this change',
+	'Class:bizChangeTicket/Stimulus:ev_validate+' => 'Make sure it is a valid change request',
+	'Class:bizChangeTicket/Stimulus:ev_reject' => 'Reject this change',
+	'Class:bizChangeTicket/Stimulus:ev_reject+' => 'This change request is rejected because it is a non valid one',
+	'Class:bizChangeTicket/Stimulus:ev_assign' => 'Assign this change',
+	'Class:bizChangeTicket/Stimulus:ev_assign+' => 'This change request is assigned',
+	'Class:bizChangeTicket/Stimulus:ev_reopen' => 'Modify this change',
+	'Class:bizChangeTicket/Stimulus:ev_reopen+' => 'Update change request to make it valid',
+	'Class:bizChangeTicket/Stimulus:ev_plan' => 'Plan this change',
+	'Class:bizChangeTicket/Stimulus:ev_plan+' => 'Plan and Schedule this change for validation',
+	'Class:bizChangeTicket/Stimulus:ev_approve' => 'Approve this change',
+	'Class:bizChangeTicket/Stimulus:ev_approve+' => 'This change is approved by CAB',
+	'Class:bizChangeTicket/Stimulus:ev_replan' => 'Update planning and schedule',
+	'Class:bizChangeTicket/Stimulus:ev_replan+' => 'Modify Plan and Schedule in order to have this change re-validated',
+	'Class:bizChangeTicket/Stimulus:ev_notapprove' => 'Not approve this change',
+	'Class:bizChangeTicket/Stimulus:ev_notapprove+' => 'This change is not approved by CAB',
+	'Class:bizChangeTicket/Stimulus:ev_implement' => 'Implement this change',
+	'Class:bizChangeTicket/Stimulus:ev_implement+' => 'Implementation pahse for current change',
+	'Class:bizChangeTicket/Stimulus:ev_monitor' => 'Monitor this change',
+	'Class:bizChangeTicket/Stimulus:ev_monitor+' => 'Starting monitoring period for this change',
+	'Class:bizChangeTicket/Stimulus:ev_finish' => 'Close change',
+	'Class:bizChangeTicket/Stimulus:ev_finish+' => 'Change is done, and can be closed',
+));
+
+//
+// Class: lnkInfraChangeTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraChangeTicket' => 'Infra Change Ticket',
+	'Class:lnkInfraChangeTicket+' => 'Infra impacted by a Change ticket',
+	'Class:lnkInfraChangeTicket/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraChangeTicket/Attribute:infra_id+' => 'The infrastructure impacted',
+	'Class:lnkInfraChangeTicket/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraChangeTicket/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraChangeTicket/Attribute:ticket_id' => 'Ticket',
+	'Class:lnkInfraChangeTicket/Attribute:ticket_id+' => 'Ticket number',
+	'Class:lnkInfraChangeTicket/Attribute:ticket_name' => 'Ticket Name',
+	'Class:lnkInfraChangeTicket/Attribute:ticket_name+' => 'Name of the ticket',
+	'Class:lnkInfraChangeTicket/Attribute:impact' => 'Impact',
+	'Class:lnkInfraChangeTicket/Attribute:impact+' => 'Level of impact of the infra by the related ticket',
+));
+
+//
+// Class: lnkContactChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkContactChange' => 'ContactChangeLink',
+	'Class:lnkContactChange+' => 'Contact associated to a change',
+	'Class:lnkContactChange/Attribute:contact_id' => 'Contact',
+	'Class:lnkContactChange/Attribute:contact_id+' => 'The contact linked to contract',
+	'Class:lnkContactChange/Attribute:contact_mail' => 'Contact E-mail',
+	'Class:lnkContactChange/Attribute:contact_mail+' => 'Mail for the contact',
+	'Class:lnkContactChange/Attribute:change_id' => 'Change Ticket',
+	'Class:lnkContactChange/Attribute:change_id+' => 'Change ticket ID',
+	'Class:lnkContactChange/Attribute:change_number' => 'Change Ticket',
+	'Class:lnkContactChange/Attribute:change_number+' => 'Ticket number for this change',
+	'Class:lnkContactChange/Attribute:role' => 'Role',
+	'Class:lnkContactChange/Attribute:role+' => 'Role of this contact for this change',
+));
+
+//
+// Class: bizKnownError
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizKnownError' => 'Known Error',
+	'Class:bizKnownError+' => 'Error documented for a known issue',
+	'Class:bizKnownError/Attribute:name' => 'Name',
+	'Class:bizKnownError/Attribute:name+' => 'Name to identify this error',
+	'Class:bizKnownError/Attribute:org_id' => 'Organization',
+	'Class:bizKnownError/Attribute:org_id+' => 'Organization for this known error',
+	'Class:bizKnownError/Attribute:cust_name' => 'Organization',
+	'Class:bizKnownError/Attribute:cust_name+' => 'Company / Department owning this object',
+	'Class:bizKnownError/Attribute:symptom' => 'Symptom',
+	'Class:bizKnownError/Attribute:symptom+' => 'Description of this error',
+	'Class:bizKnownError/Attribute:root_cause' => 'Root cause',
+	'Class:bizKnownError/Attribute:root_cause+' => 'Original cause for this known error',
+	'Class:bizKnownError/Attribute:workaround' => 'Workaround',
+	'Class:bizKnownError/Attribute:workaround+' => 'Work around to fix this error',
+	'Class:bizKnownError/Attribute:solution' => 'Solution',
+	'Class:bizKnownError/Attribute:solution+' => 'Description of this contract',
+	'Class:bizKnownError/Attribute:error_code' => 'Error Code',
+	'Class:bizKnownError/Attribute:error_code+' => 'Key word to identify error',
+	'Class:bizKnownError/Attribute:domain' => 'Domain',
+	'Class:bizKnownError/Attribute:domain+' => 'Domain for this known error, network, desktop, ...',
+	'Class:bizKnownError/Attribute:domain/Value:Network' => 'Network',
+	'Class:bizKnownError/Attribute:domain/Value:Network+' => 'Network',
+	'Class:bizKnownError/Attribute:domain/Value:Server' => 'Server',
+	'Class:bizKnownError/Attribute:domain/Value:Server+' => 'Server',
+	'Class:bizKnownError/Attribute:domain/Value:Application' => 'Application',
+	'Class:bizKnownError/Attribute:domain/Value:Application+' => 'Application',
+	'Class:bizKnownError/Attribute:domain/Value:Desktop' => 'Desktop',
+	'Class:bizKnownError/Attribute:domain/Value:Desktop+' => 'Desktop',
+	'Class:bizKnownError/Attribute:vendor' => 'Vendor',
+	'Class:bizKnownError/Attribute:vendor+' => 'Vendor concerned by this known error',
+	'Class:bizKnownError/Attribute:model' => 'Model',
+	'Class:bizKnownError/Attribute:model+' => 'Model concerned by this known error, it may be an application, a device ...',
+	'Class:bizKnownError/Attribute:version' => 'Version',
+	'Class:bizKnownError/Attribute:version+' => 'Version related to model impacted by known error',
+));
+
+//
+// Class: lnkInfraError
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraError' => 'InfraErrorLinks',
+	'Class:lnkInfraError+' => 'Infra related to a known error',
+	'Class:lnkInfraError/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraError/Attribute:infra_id+' => 'The infrastructure impacted',
+	'Class:lnkInfraError/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraError/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraError/Attribute:infra_status' => 'Status',
+	'Class:lnkInfraError/Attribute:infra_status+' => 'Status of the impacted infrastructure',
+	'Class:lnkInfraError/Attribute:error_id' => 'Error',
+	'Class:lnkInfraError/Attribute:error_id+' => 'Error id',
+	'Class:lnkInfraError/Attribute:error_name' => 'Error Name',
+	'Class:lnkInfraError/Attribute:error_name+' => 'Name of the error',
+));
+
+//
+// Class: lnkDocumentError
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkDocumentError' => 'DocumentsErrorLinks',
+	'Class:lnkDocumentError+' => 'A link between a document and a known error',
+	'Class:lnkDocumentError/Attribute:doc_id' => 'Document',
+	'Class:lnkDocumentError/Attribute:doc_id+' => 'id of the Document',
+	'Class:lnkDocumentError/Attribute:doc_name' => 'Document Name',
+	'Class:lnkDocumentError/Attribute:doc_name+' => 'name of the document',
+	'Class:lnkDocumentError/Attribute:error_id' => 'Error',
+	'Class:lnkDocumentError/Attribute:error_id+' => 'Error linked to this document',
+	'Class:lnkDocumentError/Attribute:error_name' => 'Error Name',
+	'Class:lnkDocumentError/Attribute:error_name+' => 'name of the linked error',
+	'Class:lnkDocumentError/Attribute:link_type' => 'Link Type',
+	'Class:lnkDocumentError/Attribute:link_type+' => 'More information',
+));
+
+//
+// Class: bizServiceCall
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:bizServiceCall' => 'ServiceCall',
+	'Class:bizServiceCall+' => 'Service Call from customer',
+	'Class:bizServiceCall/Attribute:name' => 'Service Call Ref',
+	'Class:bizServiceCall/Attribute:name+' => 'Refence identifier for this service call',
+	'Class:bizServiceCall/Attribute:title' => 'Title',
+	'Class:bizServiceCall/Attribute:title+' => 'Overview of the service call',
+	'Class:bizServiceCall/Attribute:type' => 'Type',
+	'Class:bizServiceCall/Attribute:type+' => 'Type of the Incident',
+	'Class:bizServiceCall/Attribute:type/Value:Network' => 'Network',
+	'Class:bizServiceCall/Attribute:type/Value:Network+' => 'Network',
+	'Class:bizServiceCall/Attribute:type/Value:Server' => 'Server',
+	'Class:bizServiceCall/Attribute:type/Value:Server+' => 'Server',
+	'Class:bizServiceCall/Attribute:type/Value:Desktop' => 'Desktop',
+	'Class:bizServiceCall/Attribute:type/Value:Desktop+' => 'Desktop',
+	'Class:bizServiceCall/Attribute:type/Value:Application' => 'Application',
+	'Class:bizServiceCall/Attribute:type/Value:Application+' => 'Application',
+	'Class:bizServiceCall/Attribute:org_id' => 'Customer',
+	'Class:bizServiceCall/Attribute:org_id+' => 'Customer concerned by this service call',
+	'Class:bizServiceCall/Attribute:customer_name' => 'Customer',
+	'Class:bizServiceCall/Attribute:customer_name+' => 'Name of the customer raising this service call',
+	'Class:bizServiceCall/Attribute:call_status' => 'Status',
+	'Class:bizServiceCall/Attribute:call_status+' => 'Status of the ticket',
+	'Class:bizServiceCall/Attribute:call_status/Value:New' => 'New',
+	'Class:bizServiceCall/Attribute:call_status/Value:New+' => 'New',
+	'Class:bizServiceCall/Attribute:call_status/Value:Assigned' => 'Assigned',
+	'Class:bizServiceCall/Attribute:call_status/Value:Assigned+' => 'Assigned',
+	'Class:bizServiceCall/Attribute:call_status/Value:WorkInProgress' => 'WorkInProgress',
+	'Class:bizServiceCall/Attribute:call_status/Value:WorkInProgress+' => 'WorkInProgress',
+	'Class:bizServiceCall/Attribute:call_status/Value:Resolved' => 'Resolved',
+	'Class:bizServiceCall/Attribute:call_status/Value:Resolved+' => 'Resolved',
+	'Class:bizServiceCall/Attribute:call_status/Value:Closed' => 'Closed',
+	'Class:bizServiceCall/Attribute:call_status/Value:Closed+' => 'Closed',
+	'Class:bizServiceCall/Attribute:call_description' => 'Description',
+	'Class:bizServiceCall/Attribute:call_description+' => 'Description of the call as describe by caller',
+	'Class:bizServiceCall/Attribute:creation_date' => 'Creation date',
+	'Class:bizServiceCall/Attribute:creation_date+' => 'Call creation date',
+	'Class:bizServiceCall/Attribute:last_update' => 'Last update',
+	'Class:bizServiceCall/Attribute:last_update+' => 'last time the call was modified',
+	'Class:bizServiceCall/Attribute:next_update' => 'Next update',
+	'Class:bizServiceCall/Attribute:next_update+' => 'next time the Ticket is expected to be  modified',
+	'Class:bizServiceCall/Attribute:end_date' => 'Closure Date',
+	'Class:bizServiceCall/Attribute:end_date+' => 'Date when the call was closed',
+	'Class:bizServiceCall/Attribute:caller_id' => 'Caller',
+	'Class:bizServiceCall/Attribute:caller_id+' => 'person that trigger this call',
+	'Class:bizServiceCall/Attribute:caller_mail' => 'Caller',
+	'Class:bizServiceCall/Attribute:caller_mail+' => 'Person that trigger this call',
+	'Class:bizServiceCall/Attribute:impact' => 'Impact',
+	'Class:bizServiceCall/Attribute:impact+' => 'Impact for this call',
+	'Class:bizServiceCall/Attribute:workgroup_id' => 'Workgroup',
+	'Class:bizServiceCall/Attribute:workgroup_id+' => 'which workgroup is owning call',
+	'Class:bizServiceCall/Attribute:workgroup_name' => 'Workgroup',
+	'Class:bizServiceCall/Attribute:workgroup_name+' => 'name of workgroup managing the call',
+	'Class:bizServiceCall/Attribute:agent_id' => 'Agent',
+	'Class:bizServiceCall/Attribute:agent_id+' => 'who is managing the call',
+	'Class:bizServiceCall/Attribute:agent_mail' => 'Agent',
+	'Class:bizServiceCall/Attribute:agent_mail+' => 'mail of agent managing the call',
+	'Class:bizServiceCall/Attribute:action_log' => 'Action Logs',
+	'Class:bizServiceCall/Attribute:action_log+' => 'List all action performed during the call',
+	'Class:bizServiceCall/Attribute:severity' => 'Severity',
+	'Class:bizServiceCall/Attribute:severity+' => 'Field defining the criticity for the call',
+	'Class:bizServiceCall/Attribute:severity/Value:critical' => 'critical',
+	'Class:bizServiceCall/Attribute:severity/Value:critical+' => 'critical',
+	'Class:bizServiceCall/Attribute:severity/Value:medium' => 'medium',
+	'Class:bizServiceCall/Attribute:severity/Value:medium+' => 'medium',
+	'Class:bizServiceCall/Attribute:severity/Value:low' => 'low',
+	'Class:bizServiceCall/Attribute:severity/Value:low+' => 'low',
+	'Class:bizServiceCall/Attribute:resolution' => 'Resolution',
+	'Class:bizServiceCall/Attribute:resolution+' => 'Description of the resolution',
+	'Class:bizServiceCall/Attribute:source' => 'Source',
+	'Class:bizServiceCall/Attribute:source+' => 'source type for this call',
+	'Class:bizServiceCall/Attribute:source/Value:phone' => 'phone',
+	'Class:bizServiceCall/Attribute:source/Value:phone+' => 'phone',
+	'Class:bizServiceCall/Attribute:source/Value:E-mail' => 'E-mail',
+	'Class:bizServiceCall/Attribute:source/Value:E-mail+' => 'E-mail',
+	'Class:bizServiceCall/Attribute:source/Value:Fax' => 'Fax',
+	'Class:bizServiceCall/Attribute:source/Value:Fax+' => 'Fax',
+	'Class:bizServiceCall/Attribute:impacted_infra_manual' => 'Impacted Infrastructure',
+	'Class:bizServiceCall/Attribute:impacted_infra_manual+' => 'CIs that are not meeting the SLA',
+	'Class:bizServiceCall/Attribute:related_tickets' => 'Related Incident',
+	'Class:bizServiceCall/Attribute:related_tickets+' => 'Other incident tickets related to this call',
+	'Class:bizServiceCall/Stimulus:ev_assign' => 'Assign this call',
+	'Class:bizServiceCall/Stimulus:ev_assign+' => 'Assign this call to a group and an agent',
+	'Class:bizServiceCall/Stimulus:ev_reassign' => 'Reassign this call',
+	'Class:bizServiceCall/Stimulus:ev_reassign+' => 'Reassign this call to a different group and agent',
+	'Class:bizServiceCall/Stimulus:ev_start_working' => 'Work on this call',
+	'Class:bizServiceCall/Stimulus:ev_start_working+' => 'Start working on this call',
+	'Class:bizServiceCall/Stimulus:ev_resolve' => 'Resolve this call',
+	'Class:bizServiceCall/Stimulus:ev_resolve+' => 'Resolve this call',
+	'Class:bizServiceCall/Stimulus:ev_close' => 'Close this call',
+	'Class:bizServiceCall/Stimulus:ev_close+' => 'Close this call',
+));
+
+//
+// Class: lnkCallTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkCallTicket' => 'Call Ticket',
+	'Class:lnkCallTicket+' => 'Ticket related to a call',
+	'Class:lnkCallTicket/Attribute:ticket_id' => 'Related Ticket',
+	'Class:lnkCallTicket/Attribute:ticket_id+' => 'The related ticket',
+	'Class:lnkCallTicket/Attribute:ticket_name' => 'Related ticket',
+	'Class:lnkCallTicket/Attribute:ticket_name+' => 'Name of the related ticket',
+	'Class:lnkCallTicket/Attribute:call_id' => 'Call',
+	'Class:lnkCallTicket/Attribute:call_id+' => 'Ticket number',
+	'Class:lnkCallTicket/Attribute:call_name' => 'Call name',
+	'Class:lnkCallTicket/Attribute:call_name+' => 'Name of the call',
+	'Class:lnkCallTicket/Attribute:impact' => 'Impact',
+	'Class:lnkCallTicket/Attribute:impact+' => 'Impact on the call',
+));
+
+//
+// Class: lnkInfraCall
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkInfraCall' => 'Infra Call',
+	'Class:lnkInfraCall+' => 'Infra concerned by a call',
+	'Class:lnkInfraCall/Attribute:infra_id' => 'Infrastructure',
+	'Class:lnkInfraCall/Attribute:infra_id+' => 'The infrastructure impacted',
+	'Class:lnkInfraCall/Attribute:infra_name' => 'Infrastructure Name',
+	'Class:lnkInfraCall/Attribute:infra_name+' => 'Name of the impacted infrastructure',
+	'Class:lnkInfraCall/Attribute:call_id' => 'Call',
+	'Class:lnkInfraCall/Attribute:call_id+' => 'Call number',
+	'Class:lnkInfraCall/Attribute:call_name' => 'Call name',
+	'Class:lnkInfraCall/Attribute:call_name+' => 'Name of the call',
+	'Class:lnkInfraCall/Attribute:impact' => 'Impact',
+	'Class:lnkInfraCall/Attribute:impact+' => 'Level of impact of the infra by the related ticket',
+));
+
+
+?>

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

@@ -0,0 +1,266 @@
+<?php
+
+//////////////////////////////////////////////////////////////////////
+// Classes in 'gui'
+//////////////////////////////////////////////////////////////////////
+//
+
+
+//
+// Class: menuNode
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:menuNode' => 'menuNode',
+	'Class:menuNode+' => 'Main menu configuration elements',
+	'Class:menuNode/Attribute:name' => 'Menu Name',
+	'Class:menuNode/Attribute:name+' => 'Short name for this menu',
+	'Class:menuNode/Attribute:label' => 'Menu Description',
+	'Class:menuNode/Attribute:label+' => 'Long description for this menu',
+	'Class:menuNode/Attribute:hyperlink' => 'Hyperlink',
+	'Class:menuNode/Attribute:hyperlink+' => 'Hyperlink to the page',
+	'Class:menuNode/Attribute:icon_path' => 'Menu Icon',
+	'Class:menuNode/Attribute:icon_path+' => 'Path to the icon o the menu',
+	'Class:menuNode/Attribute:template' => 'Template',
+	'Class:menuNode/Attribute:template+' => 'HTML template for the view',
+	'Class:menuNode/Attribute:type' => 'Type',
+	'Class:menuNode/Attribute:type+' => 'Type of menu',
+	'Class:menuNode/Attribute:type/Value:application' => 'application',
+	'Class:menuNode/Attribute:type/Value:application+' => 'application',
+	'Class:menuNode/Attribute:type/Value:user' => 'user',
+	'Class:menuNode/Attribute:type/Value:user+' => 'user',
+	'Class:menuNode/Attribute:type/Value:administrator' => 'administrator',
+	'Class:menuNode/Attribute:type/Value:administrator+' => 'administrator',
+	'Class:menuNode/Attribute:rank' => 'Display rank',
+	'Class:menuNode/Attribute:rank+' => 'Sort order for displaying the menu',
+	'Class:menuNode/Attribute:parent_id' => 'Parent Menu Item',
+	'Class:menuNode/Attribute:parent_id+' => 'Parent Menu Item',
+	'Class:menuNode/Attribute:parent_name' => 'Parent Menu Item',
+	'Class:menuNode/Attribute:parent_name+' => 'Parent Menu Item',
+	'Class:menuNode/Attribute:user_id' => 'Owner of the menu',
+	'Class:menuNode/Attribute:user_id+' => 'User who owns this menu (for user defined menus)',
+));
+
+//////////////////////////////////////////////////////////////////////
+// Classes in 'application'
+//////////////////////////////////////////////////////////////////////
+//
+
+//
+// Class: AuditCategory
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:AuditCategory' => 'AuditCategory',
+	'Class:AuditCategory+' => 'A section inside the overall audit',
+	'Class:AuditCategory/Attribute:name' => 'Category Name',
+	'Class:AuditCategory/Attribute:name+' => 'Short name for this category',
+	'Class:AuditCategory/Attribute:description' => 'Audit Category Description',
+	'Class:AuditCategory/Attribute:description+' => 'Long description for this audit category',
+	'Class:AuditCategory/Attribute:definition_set' => 'Definition Set',
+	'Class:AuditCategory/Attribute:definition_set+' => 'SibusQL expression defining the set of objects to audit',
+));
+
+//
+// Class: AuditRule
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:AuditRule' => 'AuditRule',
+	'Class:AuditRule+' => 'A rule to check for a given Audit category',
+	'Class:AuditRule/Attribute:name' => 'Rule Name',
+	'Class:AuditRule/Attribute:name+' => 'Short name for this rule',
+	'Class:AuditRule/Attribute:description' => 'Audit Rule Description',
+	'Class:AuditRule/Attribute:description+' => 'Long description for this audit rule',
+	'Class:AuditRule/Attribute:query' => 'Query to Run',
+	'Class:AuditRule/Attribute:query+' => 'The SibusQL expression to run',
+	'Class:AuditRule/Attribute:valid_flag' => 'Valid objects?',
+	'Class:AuditRule/Attribute:valid_flag+' => 'True if the rule returns the valid objects, false otherwise',
+	'Class:AuditRule/Attribute:valid_flag/Value:true' => 'true',
+	'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'true',
+	'Class:AuditRule/Attribute:valid_flag/Value:false' => 'false',
+	'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'false',
+	'Class:AuditRule/Attribute:category_id' => 'Category',
+	'Class:AuditRule/Attribute:category_id+' => 'The category for this rule',
+	'Class:AuditRule/Attribute:category_name' => 'Category',
+	'Class:AuditRule/Attribute:category_name+' => 'Name of the category for this rule',
+));
+
+//////////////////////////////////////////////////////////////////////
+// Classes in 'addon/userrights'
+//////////////////////////////////////////////////////////////////////
+//
+
+//
+// Class: URP_Users
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_Users' => 'user',
+	'Class:URP_Users+' => 'users and credentials',
+	'Class:URP_Users/Attribute:userid' => 'Contact (person)',
+	'Class:URP_Users/Attribute:userid+' => 'Personal details from the business data',
+	'Class:URP_Users/Attribute:last_name' => 'Last name',
+	'Class:URP_Users/Attribute:last_name+' => 'Name of the corresponding contact',
+	'Class:URP_Users/Attribute:first_name' => 'First name',
+	'Class:URP_Users/Attribute:first_name+' => 'First name of the corresponding contact',
+	'Class:URP_Users/Attribute:email' => 'Email',
+	'Class:URP_Users/Attribute:email+' => 'Email of the corresponding contact',
+	'Class:URP_Users/Attribute:login' => 'Login',
+	'Class:URP_Users/Attribute:login+' => 'user identification string',
+	'Class:URP_Users/Attribute:password' => 'Password',
+	'Class:URP_Users/Attribute:password+' => 'user authentication string',
+	'Class:URP_Users/Attribute:profiles' => 'Profiles',
+	'Class:URP_Users/Attribute:profiles+' => 'roles, granting rights for that person',
+));
+
+//
+// Class: URP_Profiles
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_Profiles' => 'profile',
+	'Class:URP_Profiles+' => 'usage profiles',
+	'Class:URP_Profiles/Attribute:name' => 'Name',
+	'Class:URP_Profiles/Attribute:name+' => 'label',
+	'Class:URP_Profiles/Attribute:description' => 'Description',
+	'Class:URP_Profiles/Attribute:description+' => 'one line description',
+	'Class:URP_Profiles/Attribute:users' => 'Users',
+	'Class:URP_Profiles/Attribute:users+' => 'persons having this role',
+));
+
+//
+// Class: URP_Dimensions
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_Dimensions' => 'dimension',
+	'Class:URP_Dimensions+' => 'application dimension (defining silos)',
+	'Class:URP_Dimensions/Attribute:name' => 'Name',
+	'Class:URP_Dimensions/Attribute:name+' => 'label',
+	'Class:URP_Dimensions/Attribute:description' => 'Description',
+	'Class:URP_Dimensions/Attribute:description+' => 'one line description',
+	'Class:URP_Dimensions/Attribute:type' => 'Type',
+	'Class:URP_Dimensions/Attribute:type+' => 'class name or data type (projection unit)',
+));
+
+//
+// Class: URP_UserProfile
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_UserProfile' => 'User to profile',
+	'Class:URP_UserProfile+' => 'user profiles',
+	'Class:URP_UserProfile/Attribute:userid' => 'User',
+	'Class:URP_UserProfile/Attribute:userid+' => 'user account',
+	'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
+	'Class:URP_UserProfile/Attribute:userlogin+' => 'User\'s login',
+	'Class:URP_UserProfile/Attribute:profileid' => 'Profile',
+	'Class:URP_UserProfile/Attribute:profileid+' => 'usage profile',
+	'Class:URP_UserProfile/Attribute:profile' => 'Profile',
+	'Class:URP_UserProfile/Attribute:profile+' => 'Profile name',
+	'Class:URP_UserProfile/Attribute:reason' => 'Reason',
+	'Class:URP_UserProfile/Attribute:reason+' => 'explain why this person may have this role',
+));
+
+//
+// Class: URP_ProfileProjection
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_ProfileProjection' => 'profile_projection',
+	'Class:URP_ProfileProjection+' => 'profile projections',
+	'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Dimension',
+	'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'application dimension',
+	'Class:URP_ProfileProjection/Attribute:dimension' => 'Dimension',
+	'Class:URP_ProfileProjection/Attribute:dimension+' => 'application dimension',
+	'Class:URP_ProfileProjection/Attribute:profileid' => 'Profile',
+	'Class:URP_ProfileProjection/Attribute:profileid+' => 'usage profile',
+	'Class:URP_ProfileProjection/Attribute:profile' => 'Profile',
+	'Class:URP_ProfileProjection/Attribute:profile+' => 'Profile name',
+	'Class:URP_ProfileProjection/Attribute:value' => 'Value expression',
+	'Class:URP_ProfileProjection/Attribute:value+' => 'OQL expression (using $user) | constant |  | +attribute code',
+	'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribute',
+	'Class:URP_ProfileProjection/Attribute:attribute+' => 'Target attribute code (optional)',
+));
+
+//
+// Class: URP_ClassProjection
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_ClassProjection' => 'class_projection',
+	'Class:URP_ClassProjection+' => 'class projections',
+	'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimension',
+	'Class:URP_ClassProjection/Attribute:dimensionid+' => 'application dimension',
+	'Class:URP_ClassProjection/Attribute:dimension' => 'Dimension',
+	'Class:URP_ClassProjection/Attribute:dimension+' => 'application dimension',
+	'Class:URP_ClassProjection/Attribute:class' => 'Class',
+	'Class:URP_ClassProjection/Attribute:class+' => 'Target class',
+	'Class:URP_ClassProjection/Attribute:value' => 'Value expression',
+	'Class:URP_ClassProjection/Attribute:value+' => 'OQL expression (using $this) | constant |  | +attribute code',
+	'Class:URP_ClassProjection/Attribute:attribute' => 'Attribute',
+	'Class:URP_ClassProjection/Attribute:attribute+' => 'Target attribute code (optional)',
+));
+
+//
+// Class: URP_ActionGrant
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_ActionGrant' => 'action_permission',
+	'Class:URP_ActionGrant+' => 'permissions on classes',
+	'Class:URP_ActionGrant/Attribute:profileid' => 'Profile',
+	'Class:URP_ActionGrant/Attribute:profileid+' => 'usage profile',
+	'Class:URP_ActionGrant/Attribute:profile' => 'Profile',
+	'Class:URP_ActionGrant/Attribute:profile+' => 'usage profile',
+	'Class:URP_ActionGrant/Attribute:class' => 'Class',
+	'Class:URP_ActionGrant/Attribute:class+' => 'Target class',
+	'Class:URP_ActionGrant/Attribute:permission' => 'Permission',
+	'Class:URP_ActionGrant/Attribute:permission+' => 'allowed or not allowed?',
+	'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'yes',
+	'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'yes',
+	'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'no',
+	'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'no',
+	'Class:URP_ActionGrant/Attribute:action' => 'Action',
+	'Class:URP_ActionGrant/Attribute:action+' => 'operations to perform on the given class',
+));
+
+//
+// Class: URP_StimulusGrant
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_StimulusGrant' => 'stimulus_permission',
+	'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
+	'Class:URP_StimulusGrant/Attribute:profileid' => 'Profile',
+	'Class:URP_StimulusGrant/Attribute:profileid+' => 'usage profile',
+	'Class:URP_StimulusGrant/Attribute:profile' => 'Profile',
+	'Class:URP_StimulusGrant/Attribute:profile+' => 'usage profile',
+	'Class:URP_StimulusGrant/Attribute:class' => 'Class',
+	'Class:URP_StimulusGrant/Attribute:class+' => 'Target class',
+	'Class:URP_StimulusGrant/Attribute:permission' => 'Permission',
+	'Class:URP_StimulusGrant/Attribute:permission+' => 'allowed or not allowed?',
+	'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'yes',
+	'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'yes',
+	'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'no',
+	'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'no',
+	'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
+	'Class:URP_StimulusGrant/Attribute:stimulus+' => 'stimulus code',
+));
+
+//
+// Class: URP_AttributeGrant
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:URP_AttributeGrant' => 'attribute_permission',
+	'Class:URP_AttributeGrant+' => 'permissions at the attributes level',
+	'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Action grant',
+	'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'action grant',
+	'Class:URP_AttributeGrant/Attribute:attcode' => 'Attribute',
+	'Class:URP_AttributeGrant/Attribute:attcode+' => 'attribute code',
+));
+
+
+?>

+ 7 - 0
pages/ITopConsultant.php

@@ -263,6 +263,7 @@ function printMenu($sConfigFile)
 	echo "<h4>Target database: $sConfigFile</h4>\n";
 	echo "<p>$sClassCount classes referenced in the model</p>\n";
 	echo "<ul>";
+	echo "   <li><a href=\"$sUrl&todo=checkdictionary\">Dictionary</a></li>";
 	echo "   <li><a href=\"$sUrl&todo=checkmodel\">Biz model consistency</a></li>";
 	echo "   <li><a href=\"$sUrl&todo=showzlists\">Show ZLists</a></li>";
 	echo "   <li><a href=\"$sUrl&todo=showbizmodel\">Browse business model</a></li>";
@@ -471,6 +472,12 @@ else
 			printMenu($sConfigFile);
 			echo $sRes;
 			break;
+		case "checkdictionary":
+			echo "Dictionary template...</br>\n";
+			echo "<pre>\n";
+			echo MetaModel::MakeDictionaryTemplate();
+			echo "</pre>\n";
+			break;
 		case "checkmodel":
 			echo "Check definitions...</br>\n";
 			MetaModel::CheckDefinitions();