Compare commits

..

4 Commits

Author SHA1 Message Date
Eric Espie
a7517298c5 N°9617 - Send EVENT on data export for traceability - After Review 2026-07-09 15:49:45 +02:00
Eric Espie
7663be6e6e N°9617 - Send EVENT on data export for traceability 2026-07-09 15:37:52 +02:00
Eric Espie
574b7579c8 N°9617 - Send events on data export for traceability 2026-07-09 14:15:45 +02:00
Eric Espie
6a5f83e767 N°9617 - Send events on data export for traceability
# Conflicts:
#	core/restservices.class.inc.php
2026-07-09 14:15:41 +02:00
481 changed files with 4995 additions and 16753 deletions

View File

@@ -2,17 +2,13 @@
```mermaid
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'themeVariables': {
'git0': '#7ccf00',
'git1': '#7ccf00',
'git2': '#99a1af',
'git3': '#99a1af',
'git4': '#99a1af',
'git5': '#99a1af',
'git6': '#99a1af',
'git7': '#99a1af',
'git8': '#99a1af',
'git9': '#99a1af',
'git10': '#99a1af'
'git0': 'lawngreen',
'git3': 'dodgerblue',
'git4': 'grey',
'git5': 'grey',
'git6': 'grey',
'git7': 'grey',
'git8': 'grey'
}, 'gitGraph': {'showBranches': true,'mainBranchName': 'develop','rotateCommitLabel': true}} }%%
gitGraph
commit id: "2016-07-06" tag: "2.3.0" type: HIGHLIGHT
@@ -110,11 +106,6 @@ gitGraph
commit id: "2025-09-25" tag: "2.7.13"
checkout support/3.2
commit id: "2026-04-27 " tag: "3.2.3"
checkout support/3.2.3
commit id: "2026-05-25 " tag: "3.2.3-1"
commit id: "2026-07-17 " tag: "3.2.3-2"
checkout develop
commit id: "2026-07-23" tag: "3.3.0-beta1"
```
To learn more, check the [iTop community versions history on the official wiki](https://www.itophub.io/wiki/page?id=latest:release:start).

0
.make/license/gen-community-license.sh Executable file → Normal file
View File

0
.make/license/sortLicenceXml.php Executable file → Normal file
View File

0
.make/license/updateLicenses.php Executable file → Normal file
View File

0
.make/release/changelog.php Executable file → Normal file
View File

0
.make/release/update-versions.php Executable file → Normal file
View File

0
.make/release/update-xml.php Executable file → Normal file
View File

0
.make/release/update.classes.inc.php Executable file → Normal file
View File

View File

@@ -582,9 +582,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
*/
public function ListProfiles($oUser)
{
if (!array_key_exists('profile_list', $oUser->ListChanges())) {
// Profiles list is not modified on the $oUser object, we can use DBObjectSearch with `all data` capabilities
// Note: This is the default behavior
if (count($oUser->ListChanges()) === 0) { // backward compatibility
$aRet = [];
$oSearch = new DBObjectSearch('URP_UserProfile');
$oSearch->AllowAllData();
@@ -597,8 +595,6 @@ class UserRightsProfile extends UserRightsAddOnAPI
return $aRet;
} else {
// Profiles list must be computed with memory changes.
// Note: this is a bit tricky because the user object may have been modified in memory (e.g. a profile added or removed) and we need to take that into account
$aRet = [];
$oProfilesSet = $oUser->Get('profile_list');
foreach ($oProfilesSet as $oUserProfile) {

View File

@@ -1,7 +1,7 @@
<?php
/**
* Implement this interface to add sass files (SCSS) to the backoffice pages.
* Implement this interface to add sass file (SCSS) to the backoffice pages.
* example: return "css/setup.scss"
*
* @api
@@ -11,9 +11,9 @@
interface iBackofficeSassExtension
{
/**
* @return array An array of relative paths (from loaded import paths) to the files to compile and include
* @see \iTopWebPage::$a_linked_stylesheets
* @return string
* @see \iTopWebPage::$a_styles
* @api
*/
public function GetSassRelPaths(): array;
public function GetSass(): string;
}

View File

@@ -1046,7 +1046,7 @@ HTML
// Add extra data for markup generation
// - Attribute code and AttributeDef. class
$val['attcode'] = $sAttCode;
$val['atttype'] = $oAttDef->GetTypeShortClassName();
$val['atttype'] = $oAttDef->GetType();
$val['attlabel'] = $sAttLabel;
$val['attflags'] = ($bEditMode) ? $this->GetFormAttributeFlags($sAttCode) : OPT_ATT_READONLY;
@@ -1535,6 +1535,190 @@ HTML
return $sHtml;
}
/**
* @param WebPage $oPage
* @param \CMDBObjectSet $oSet
* @param array $aParams
*
* @throws \Exception
* only used in old and deprecated export.php
*
* @internal Only to be used by `/webservices/export.php` : this is a legacy method that produces wrong HTML (no TR on table body rows)
*/
public static function DisplaySetAsHTMLSpreadsheet(WebPage $oPage, CMDBObjectSet $oSet, $aParams = [])
{
$oPage->add(self::GetSetAsHTMLSpreadsheet($oSet, $aParams));
}
/**
* Spreadsheet output: designed for end users doing some reporting
* Then the ids are excluded and replaced by the corresponding friendlyname
*
* @param \DBObjectSet $oSet
* @param array $aParams
*
* @return string
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MissingQueryArgument
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
* @throws \Exception
*
* @internal Only to be used by `/webservices/export.php` : this is a legacy method that produces wrong HTML (no TR on table body rows)
*/
public static function GetSetAsHTMLSpreadsheet(DBObjectSet $oSet, $aParams = [])
{
$aFields = null;
if (isset($aParams['fields']) && (strlen($aParams['fields']) > 0)) {
$aFields = explode(',', $aParams['fields']);
}
$bFieldsAdvanced = false;
if (isset($aParams['fields_advanced'])) {
$bFieldsAdvanced = (bool)$aParams['fields_advanced'];
}
$bLocalize = true;
if (isset($aParams['localize_values'])) {
$bLocalize = (bool)$aParams['localize_values'];
}
$aList = [];
$aClasses = $oSet->GetFilter()->GetSelectedClasses();
$aAuthorizedClasses = [];
foreach ($aClasses as $sAlias => $sClassName) {
if (UserRights::IsActionAllowed($sClassName, UR_ACTION_READ, $oSet) != UR_ALLOWED_NO) {
$aAuthorizedClasses[$sAlias] = $sClassName;
}
}
$aHeader = [];
foreach ($aAuthorizedClasses as $sAlias => $sClassName) {
$aList[$sAlias] = [];
foreach (MetaModel::ListAttributeDefs($sClassName) as $sAttCode => $oAttDef) {
if (is_null($aFields) || (count($aFields) == 0)) {
// Standard list of attributes (no link sets)
if ($oAttDef->IsScalar() && ($oAttDef->IsWritable() || $oAttDef->IsExternalField())) {
$sAttCodeEx = $oAttDef->IsExternalField() ? $oAttDef->GetKeyAttCode().'->'.$oAttDef->GetExtAttCode() : $sAttCode;
$aList[$sAlias][$sAttCodeEx] = $oAttDef;
if ($bFieldsAdvanced && $oAttDef->IsExternalKey(EXTKEY_RELATIVE)) {
$sRemoteClass = $oAttDef->GetTargetClass();
foreach (MetaModel::GetReconcKeys($sRemoteClass) as $sRemoteAttCode) {
$aList[$sAlias][$sAttCode.'->'.$sRemoteAttCode] = MetaModel::GetAttributeDef(
$sRemoteClass,
$sRemoteAttCode
);
}
}
}
} else {
// User defined list of attributes
if (in_array($sAttCode, $aFields) || in_array($sAlias.'.'.$sAttCode, $aFields)) {
$aList[$sAlias][$sAttCode] = $oAttDef;
}
}
}
// Replace external key by the corresponding friendly name (if not already in the list)
foreach ($aList[$sAlias] as $sAttCode => $oAttDef) {
if ($oAttDef->IsExternalKey()) {
unset($aList[$sAlias][$sAttCode]);
$sFriendlyNameAttCode = $sAttCode.'_friendlyname';
if (!array_key_exists(
$sFriendlyNameAttCode,
$aList[$sAlias]
) && MetaModel::IsValidAttCode($sClassName, $sFriendlyNameAttCode)) {
$oFriendlyNameAtt = MetaModel::GetAttributeDef($sClassName, $sFriendlyNameAttCode);
$aList[$sAlias][$sFriendlyNameAttCode] = $oFriendlyNameAtt;
}
}
}
foreach ($aList[$sAlias] as $sAttCodeEx => $oAttDef) {
$sColLabel = $bLocalize ? MetaModel::GetLabel($sClassName, $sAttCodeEx) : $sAttCodeEx;
$oFinalAttDef = $oAttDef->GetFinalAttDef();
if (get_class($oFinalAttDef) == 'AttributeDateTime') {
$aHeader[] = $sColLabel.' ('.Dict::S('UI:SplitDateTime-Date').')';
$aHeader[] = $sColLabel.' ('.Dict::S('UI:SplitDateTime-Time').')';
} else {
$aHeader[] = $sColLabel;
}
}
}
$sHtml = "<table border=\"1\">\n";
$sHtml .= "<tr>\n";
$sHtml .= "<td>".implode("</td><td>", $aHeader)."</td>\n";
$sHtml .= "</tr>\n";
$oSet->Seek(0);
while ($aObjects = $oSet->FetchAssoc()) {
$aRow = [];
foreach ($aAuthorizedClasses as $sAlias => $sClassName) {
$oObj = $aObjects[$sAlias];
foreach ($aList[$sAlias] as $sAttCodeEx => $oAttDef) {
if (is_null($oObj)) {
$aRow[] = '<td></td>';
} else {
$oFinalAttDef = $oAttDef->GetFinalAttDef();
if (get_class($oFinalAttDef) == 'AttributeDateTime') {
$sDate = $oObj->Get($sAttCodeEx);
if ($sDate === null) {
$aRow[] = '<td></td>';
$aRow[] = '<td></td>';
} else {
$iDate = AttributeDateTime::GetAsUnixSeconds($sDate);
$aRow[] = '<td>'.date(
'Y-m-d',
$iDate
).'</td>'; // Format kept as-is for 100% backward compatibility of the exports
$aRow[] = '<td>'.date(
'H:i:s',
$iDate
).'</td>'; // Format kept as-is for 100% backward compatibility of the exports
}
} else {
if ($oAttDef instanceof AttributeCaseLog) {
$rawValue = $oObj->Get($sAttCodeEx);
$outputValue = str_replace(
"\n",
"<br/>",
utils::EscapeHtml($rawValue->__toString())
);
// Trick for Excel: treat the content as text even if it begins with an equal sign
$aRow[] = '<td x:str>'.$outputValue.'</td>';
} else {
$rawValue = $oObj->Get($sAttCodeEx);
// Due to custom formatting rules, empty friendlynames may be rendered as non-empty strings
// let's fix this and make sure we render an empty string if the key == 0
if ($oAttDef instanceof AttributeExternalField && $oAttDef->IsFriendlyName()) {
$sKeyAttCode = $oAttDef->GetKeyAttCode();
if ($oObj->Get($sKeyAttCode) == 0) {
$rawValue = '';
}
}
if ($bLocalize) {
$outputValue = utils::EscapeHtml($oFinalAttDef->GetEditValue($rawValue));
} else {
$outputValue = utils::EscapeHtml($rawValue);
}
$aRow[] = '<td>'.$outputValue.'</td>';
}
}
}
}
}
$sHtml .= implode("\n", $aRow);
$sHtml .= "</tr>\n";
}
$sHtml .= "</table>\n";
return $sHtml;
}
/**
* @param WebPage $oPage
* @param \CMDBObjectSet $oSet
@@ -3066,12 +3250,8 @@ EOF
}
$aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, $aArgs);
if (is_array($aAllowedValues) && count($aAllowedValues) == 1) {
// linkset are ignored
// N°9622 - Error in the user story life cycle
if (!$oAttDef->IsLinkSet()) {
$aValues = array_keys($aAllowedValues);
$this->Set($sAttCode, $aValues[0]);
}
$aValues = array_keys($aAllowedValues);
$this->Set($sAttCode, $aValues[0]);
}
}
}
@@ -3987,27 +4167,6 @@ HTML;
$sTagSetJson = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", null, 'raw_data');
if ($sTagSetJson !== null) { // bulk modify, direct linked set not handled
$value = json_decode($sTagSetJson, true);
if ($this->IsNew()) {
if (is_array($value['orig_value'])) {
foreach ($value['orig_value'] as $val) {
if (!in_array($val, $value['removed'])) {
$value['added'][] = $val;
}
}
}
} else {
$aCurrentValues = $this->Get($sAttCode)->GetValues();
foreach ($value['orig_value'] as $val) {
if (!in_array($val, $aCurrentValues) && !in_array($val, $value['removed']) && !in_array($val, $value['added'])) {
$value['added'][] = $val;
}
}
foreach ($aCurrentValues as $val) {
if (!in_array($val, $value['orig_value']) && !in_array($val, $value['removed']) && !in_array($val, $value['added'])) {
$value['removed'][] = $val;
}
}
}
}
break;
@@ -4348,7 +4507,7 @@ HTML;
$oDivField = FieldUIBlockFactory::MakeLarge("");
// UIContentBlockUIBlockFactory::MakeStandard(null,["field_container field_large"]);
$oDivField->AddDataAttribute("attribute-type", $oAttDef->GetTypeShortClassName());
$oDivField->AddDataAttribute("attribute-type", $oAttDef->GetType());
$oDivField->AddDataAttribute("attribute-label", $sAttMetaDataLabel);
$oDivField->AddDataAttribute("attribute-flag-hidden", false);
$oDivField->AddDataAttribute("attribute-flag-read-only", false);
@@ -4651,7 +4810,7 @@ EOF
// Not in preview mode, do the update for real
$sTransactionId = utils::ReadPostedParam('transaction_id', '', 'transaction_id');
if (!utils::IsTransactionValid($sTransactionId, false)) {
throw new Exception(Dict::S('UI:Error:InvalidToken'));
throw new Exception(Dict::S('UI:Error:ObjectAlreadyUpdated'));
}
utils::RemoveTransaction($sTransactionId);
}
@@ -5209,6 +5368,7 @@ JS
/**
* @param array $aChanges
* @param bool $bIsNew
* @param string|null $sStimulusBeingApplied
*
* @return void
* @throws \ArchivedObjectException
@@ -5222,6 +5382,20 @@ JS
$this->FireEvent(EVENT_DB_AFTER_WRITE, ['is_new' => $bIsNew, 'changes' => $aChanges, 'stimulus_applied' => $sStimulusBeingApplied, 'cmdb_change' => self::GetCurrentChange()]);
}
//////////////
/// READ
///
/**
* @return void
* @throws \CoreException
* @since 3.3.0
*/
final public function FireEventReadDetails(string $sExportType): void
{
$this->FireEvent(EVENT_DATA_EXPORT, ['export_type' => $sExportType]);
}
//////////////
/// DELETE
///

View File

@@ -501,7 +501,7 @@ EOF
*/
public function Render($oPage, $bEditMode = false, $aExtraParams = [], $bCanEdit = true)
{
$aExtraParams['dashboard_div_id'] = utils::Sanitize($aExtraParams['dashboard_div_id'] ?? $this->GetId(), $this->GetId(), utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER);
$aExtraParams['dashboard_div_id'] = utils::Sanitize($aExtraParams['dashboard_div_id'] ?? null, $this->GetId(), utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER);
/** @var \DashboardLayoutMultiCol $oLayout */
$oLayout = new $this->sLayoutClass();

View File

@@ -25,20 +25,6 @@ use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
use Combodo\iTop\Application\UI\Base\iUIBlock;
use Combodo\iTop\Application\UI\Base\UIBlock;
use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Core\AttributeDefinition\AttributeDateTime;
use Combodo\iTop\Core\AttributeDefinition\AttributeDecimal;
use Combodo\iTop\Core\AttributeDefinition\AttributeDuration;
use Combodo\iTop\Core\AttributeDefinition\AttributeEncryptedString;
use Combodo\iTop\Core\AttributeDefinition\AttributeEnum;
use Combodo\iTop\Core\AttributeDefinition\AttributeExternalField;
use Combodo\iTop\Core\AttributeDefinition\AttributeFriendlyName;
use Combodo\iTop\Core\AttributeDefinition\AttributeInteger;
use Combodo\iTop\Core\AttributeDefinition\AttributeLinkedSet;
use Combodo\iTop\Core\AttributeDefinition\AttributeOneWayPassword;
use Combodo\iTop\Core\AttributeDefinition\AttributePassword;
use Combodo\iTop\Core\AttributeDefinition\AttributePercentage;
use Combodo\iTop\Core\AttributeDefinition\AttributeSubItem;
use Combodo\iTop\Core\AttributeDefinition\iAttributeNoGroupBy;
require_once(APPROOT.'application/forms.class.inc.php');
@@ -454,7 +440,7 @@ EOF
// For external fields, find the real type of the target
$sExtFieldAttCode = $sAttCode;
$sTargetClass = $sClass;
while (is_a($sAttType, AttributeExternalField::class, true)) {
while (is_a($sAttType, 'AttributeExternalField', true)) {
$sExtKeyAttCode = $this->oModelReflection->GetAttributeProperty($sTargetClass, $sExtFieldAttCode, 'extkey_attcode');
$sTargetAttCode = $this->oModelReflection->GetAttributeProperty($sTargetClass, $sExtFieldAttCode, 'target_attcode');
$sTargetClass = $this->oModelReflection->GetAttributeProperty($sTargetClass, $sExtKeyAttCode, 'targetclass');
@@ -464,13 +450,13 @@ EOF
}
$aForbidenAttType = [
AttributeLinkedSet::class,
AttributeFriendlyName::class,
'AttributeLinkedSet',
'AttributeFriendlyName',
iAttributeNoGroupBy::class, //we cannot only use iAttributeNoGroupBy since this method is also used by the designer who do not have access to the classes' PHP reflection API. So the known classes has to be listed altogether
AttributeOneWayPassword::class,
AttributeEncryptedString::class,
AttributePassword::class,
'iAttributeNoGroupBy', //we cannot only use iAttributeNoGroupBy since this method is also used by the designer who do not have access to the classes' PHP reflection API. So the known classes has to be listed altogether
'AttributeOneWayPassword',
'AttributeEncryptedString',
'AttributePassword',
];
foreach ($aForbidenAttType as $sForbidenAttType) {
if (is_a($sAttType, $sForbidenAttType, true)) {
@@ -482,7 +468,7 @@ EOF
if (!in_array($sLabel, $aGroupBy)) {
$aGroupBy[$sAttCode] = $sLabel;
if (is_a($sAttType, AttributeDateTime::class, true)) {
if (is_a($sAttType, 'AttributeDateTime', true)) {
$aGroupBy[$sAttCode.':hour'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Hour', $sLabel);
$aGroupBy[$sAttCode.':month'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Month', $sLabel);
$aGroupBy[$sAttCode.':day_of_week'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-DayOfWeek', $sLabel);
@@ -1116,7 +1102,7 @@ abstract class DashletGroupBy extends Dashlet
$aAttributeTypes = $this->oModelReflection->ListAttributes($this->sClass);
if (isset($aAttributeTypes[$this->sGroupByAttCode])) {
$sAttributeType = $aAttributeTypes[$this->sGroupByAttCode];
if (is_subclass_of($sAttributeType, AttributeDateTime::class) || $sAttributeType == AttributeDateTime::class) {
if (is_subclass_of($sAttributeType, 'AttributeDateTime') || $sAttributeType == 'AttributeDateTime') {
$this->sOrderDirection = 'asc';
} else {
$this->sOrderDirection = 'desc';
@@ -1272,7 +1258,7 @@ abstract class DashletGroupBy extends Dashlet
if ($this->oModelReflection->IsValidAttCode($sClass, $this->sGroupByAttCode)) {
$aAttributeTypes = $this->oModelReflection->ListAttributes($sClass);
$sAttributeType = $aAttributeTypes[$this->sGroupByAttCode];
if (is_subclass_of($sAttributeType, AttributeDateTime::class) || $sAttributeType == AttributeDateTime::class) {
if (is_subclass_of($sAttributeType, 'AttributeDateTime') || $sAttributeType == 'AttributeDateTime') {
// Note: an alternative to this somewhat hardcoded way of doing things would be to implement...
//$oExpr = Expression::FromOQL($this->sGroupByExpr);
//$aTranslationData = array($oQuery->GetClassAlias() => array($this->sGroupByAttCode => new ScalarExpression(date('Y-m-d H:i:s', $iTime))));
@@ -1303,7 +1289,7 @@ abstract class DashletGroupBy extends Dashlet
foreach ($aValues as $sValue) {
$aDisplayValues[] = ['label' => $sValue, 'value' => (int)rand(1, 15)];
}
} elseif (is_subclass_of($sAttributeType, AttributeEnum::class) || $sAttributeType == AttributeEnum::class) {
} elseif (is_subclass_of($sAttributeType, 'AttributeEnum') || $sAttributeType == 'AttributeEnum') {
$aAllowed = $this->oModelReflection->GetAllowedValues_att($sClass, $this->sGroupByAttCode);
if ($aAllowed) { // null for non enums
foreach ($aAllowed as $sValue => $sValueLabel) {
@@ -1472,11 +1458,11 @@ abstract class DashletGroupBy extends Dashlet
}
foreach ($this->oModelReflection->ListAttributes($sClass) as $sAttCode => $sAttType) {
switch ($sAttType) {
case AttributeDecimal::class:
case AttributeDuration::class:
case AttributeInteger::class:
case AttributePercentage::class:
case AttributeSubItem::class: // TODO: Known limitation: no unit displayed (values in sec)
case 'AttributeDecimal':
case 'AttributeDuration':
case 'AttributeInteger':
case 'AttributePercentage':
case 'AttributeSubItem': // TODO: Known limitation: no unit displayed (values in sec)
$sLabel = $this->oModelReflection->GetLabel($sClass, $sAttCode);
$aFunctionAttributes[$sAttCode] = $sLabel;
break;

View File

@@ -519,6 +519,31 @@ Call $this->AddInitialAttributeFlags($sAttCode, $iFlags) for all the initial att
</event_datum>
</event_data>
</event>
<event id="EVENT_DATA_EXPORT" _delta="define">
<name>Object details read from outside iTop</name>
<description><![CDATA[An object details has been read during an export]]></description>
<sources>
<source id="cmdbAbstractObject">cmdbAbstractObject</source>
</sources>
<event_data>
<event_datum id="object">
<description>The object unarchived</description>
<type>DBObject</type>
</event_datum>
<event_datum id="attributes">
<description>Attribute codes exposed (empty means potentially all attributes)</description>
<type>array</type>
</event_datum>
<event_datum id="export_type">
<description>Type of export</description>
<type>string</type>
</event_datum>
<event_datum id="debug_info">
<description>Debug string</description>
<type>string</type>
</event_datum>
</event_data>
</event>
<event id="EVENT_DOWNLOAD_DOCUMENT" _delta="define">
<name>Document downloaded</name>
<description><![CDATA[A document has been downloaded from the GUI]]></description>

View File

@@ -1707,7 +1707,7 @@ JS
$oBlock->bAdvancedMode = utils::ReadParam('advanced', false);
$oBlock->sCsvFile = strtolower($this->m_oFilter->GetClass()).'.csv';
$oBlock->sDownloadLink = utils::GetAbsoluteUrlAppRoot().'webservices/export-v2.php?expression='.urlencode($this->m_oFilter->ToOQL(true)).'&format=csv&filename='.urlencode($oBlock->sCsvFile);
$oBlock->sDownloadLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php?expression='.urlencode($this->m_oFilter->ToOQL(true)).'&format=csv&filename='.urlencode($oBlock->sCsvFile);
$oBlock->sLinkToToggle = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search'.$oAppContext->GetForLink(true).'&filter='.rawurlencode($this->m_oFilter->serialize()).'&format=csv';
// Pass the parameters via POST, since expression may be very long
$aParamsToPost = [
@@ -1724,7 +1724,7 @@ JS
$oBlock->sLinkToToggle = $oBlock->sLinkToToggle.'&advanced=1';
$oBlock->sChecked = '';
}
$oBlock->sAjaxLink = utils::GetAbsoluteUrlAppRoot().'webservices/export-v2.php';
$oBlock->sAjaxLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php';
$oBlock->sCharsetNotice = false;
$oBlock->sJsonParams = json_encode($aParamsToPost);

View File

@@ -25,11 +25,11 @@
*/
use Combodo\iTop\Application\Branding;
use Combodo\iTop\Application\Helper\Session;
use Combodo\iTop\Application\WebPage\ErrorPage;
use Combodo\iTop\Application\WebPage\NiceWebPage;
use Combodo\iTop\Service\Events\EventData;
use Combodo\iTop\Service\Events\EventService;
use Combodo\iTop\Service\Session\Session;
/**
* Web page used for displaying the login form
@@ -369,7 +369,16 @@ class LoginWebPage extends NiceWebPage
public static function ResetSession()
{
// Unset all of the session variables.
Session::UnsetAll();
Session::Unset('auth_user');
Session::Unset('login_state');
Session::Unset('can_logoff');
Session::Unset('archive_mode');
Session::Unset('impersonate_user');
Session::Unset('PluginProperties');
Session::Unset('UrlMakerClass');
Session::Unset('itop_env');
Session::Unset('obj_messages');
Session::Unset('profile_list');
UserRights::_ResetSessionCache();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!

View File

@@ -115,7 +115,7 @@ class privUITransactionSession
// Strictly speaking, the two lines below should be grouped together
// by a critical section
// sem_acquire($rSemIdentified);
$id = static::GetUserPrefix().str_replace(['.', ' '], '', microtime()).'-'.bin2hex(random_bytes(24));
$id = static::GetUserPrefix().str_replace(['.', ' '], '', microtime());
Session::Set(['transactions', $id], true);
// sem_release($rSemIdentified);
@@ -236,7 +236,7 @@ class privUITransactionFile
self::CleanupOldTransactions();
$sTransactionIdFullPath = static::CreateUniqueTransactionFilePath(utils::GetDataPath().'transactions', static::GetUserPrefix());
$sTransactionIdFullPath = tempnam(utils::GetDataPath().'transactions', static::GetUserPrefix());
file_put_contents($sTransactionIdFullPath, $iCurrentUserId, LOCK_EX);
$sTransactionIdFileName = basename($sTransactionIdFullPath);
@@ -245,33 +245,6 @@ class privUITransactionFile
return $sTransactionIdFileName;
}
/**
* Create a transaction file path with a longer random suffix and create it atomically.
*
* @param string $sDir
* @param string $sPrefix
*
* @return string
*
* @throws CoreException
*/
private static function CreateUniqueTransactionFilePath(string $sDir, string $sPrefix): string
{
$iMaxAttempts = 10;
for ($i = 0; $i < $iMaxAttempts; $i++) {
$sFileName = $sPrefix.bin2hex(random_bytes(24)); // 48 random hex chars
$sFullPath = $sDir.'/'.$sFileName;
$hFile = @fopen($sFullPath, 'x');
if ($hFile !== false) {
fclose($hFile);
return $sFullPath;
}
}
throw new CoreException('Failed to allocate a unique transaction file name after multiple attempts.');
}
/**
* Check whether a transaction is valid or not and (optionally) remove the valid transaction from
* the session so that another call to IsTransactionValid for the same transaction id
@@ -308,18 +281,6 @@ class privUITransactionFile
return false;
}
$iTime = filemtime($sFilepath);
$iLifetime = (int) MetaModel::GetConfig()->Get('transactions_file_lifetime');
$iLimit = time() - $iLifetime;
if ($iTime < $iLimit) {
self::Info("IsTransactionValid: Transaction '$id' expired.");
if ($iLifetime < 3600) {
IssueLog::Warning("IsTransactionValid: Transaction '$id' expired after only $iLifetime seconds. Consider increasing the 'transactions_file_lifetime' configuration parameter.");
}
@unlink($sFilepath);
return false;
}
if ($bRemoveTransaction) {
$bResult = @unlink($sFilepath);
if (!$bResult) {
@@ -353,7 +314,7 @@ class privUITransactionFile
}
/**
* Cleanup old transactions which have been pending since more than the lifetime defined in the configuration parameter 'transactions_file_lifetime'.
* Cleanup old transactions which have been pending since more than 24 hours
* Use filemtime instead of filectime since filectime may be affected by operations on the directory (like changing the access rights)
*/
protected static function CleanupOldTransactions($sTransactionDir = null)
@@ -366,7 +327,7 @@ class privUITransactionFile
}
clearstatcache();
$iLimit = time() - (int) MetaModel::GetConfig()->Get('transactions_file_lifetime');
$iLimit = time() - 24 * 3600;
$sPattern = $sTransactionDir ? "$sTransactionDir/*" : utils::GetDataPath().'transactions/*';
$aTransactions = glob($sPattern);
foreach ($aTransactions as $sFileName) {

View File

@@ -1886,7 +1886,7 @@ SQL;
CURLOPT_HEADER => false, // don't return the headers in the output
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => static::GetConfig()->Get('http.request.user_agent'), // who am i
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
@@ -3022,6 +3022,7 @@ TXT
* Note: Only works for backoffice URLs for now
*
* @param string $sText Text containing the mentioned objects to be found
* @param string $sFormat {@uses static::ENUM_TEXT_FORMAT_HTML, ...}
*
* @return array Array of object classes / IDs for the ones found in $sText
*
@@ -3036,45 +3037,13 @@ TXT
public static function GetMentionedObjectsFromText(string $sText): array
{
$aMentionedObjects = [];
$aMentionAllowedClasses = MetaModel::GetConfig()->Get('mentions.allowed_classes');
$oDom = new \DOMDocument();
$bPreviousUseInternalErrors = libxml_use_internal_errors(true); // to keep processing even in case of "invalid" HTML, cf. testGetMentionedObjectsFromText
$aMentionMatches = [];
$sText = html_entity_decode($sText);
try {
$oDom->loadHTML('<?xml encoding="UTF-8">'.$sText);
} finally {
libxml_clear_errors();
libxml_use_internal_errors($bPreviousUseInternalErrors);
}
$oXpath = new \DOMXPath($oDom);
$oNodes = $oXpath->query('//a[@data-object-class and @data-object-key]');
foreach ($oNodes as $oObjNode) {
$sMatchedClass = $oObjNode->getAttribute('data-object-class');
$sMatchedId = $oObjNode->getAttribute('data-object-key');
$sMatchedName = trim($oObjNode->textContent);
// Ensure that what we found is actually configured as a mention
$sMentionPrefix = array_search($sMatchedClass, $aMentionAllowedClasses);
// - No direct configuration for the matched class, let's look for a configuration on parent classes
if (false === $sMentionPrefix) {
$bHasMentionConfigurationForParentClass = false;
foreach (MetaModel::EnumParentClasses($sMatchedClass, ENUM_PARENT_CLASSES_EXCLUDELEAF, false) as $aMatchedParentClass) {
$sMentionPrefix = array_search($aMatchedParentClass, $aMentionAllowedClasses);
if (false !== $sMentionPrefix) {
$bHasMentionConfigurationForParentClass = true;
break;
}
}
if (false === $bHasMentionConfigurationForParentClass) {
continue;
}
}
// - Test if the name starts with $sMentionPrefix (e.g. '@' for 'Contact' class)
if (false === str_starts_with($sMatchedName, $sMentionPrefix)) {
continue;
}
preg_match_all('/<a\s*([^>]*)data-object-class="([^"]*)"\s.*data-object-key="([^"]*)"/Ui', $sText, $aMentionMatches);
foreach ($aMentionMatches[0] as $iMatchIdx => $sCompleteMatch) {
$sMatchedClass = $aMentionMatches[2][$iMatchIdx];
$sMatchedId = $aMentionMatches[3][$iMatchIdx];
// Prepare array for matched class if not already present
if (!array_key_exists($sMatchedClass, $aMentionedObjects)) {
@@ -3249,48 +3218,4 @@ TXT
return (int)$sLimit;
}
}
/**
* @since 3.3.0 N°9875
* Open archive and raise appropriate exception.
* Warning: do not forget to close archive afterwhile
* @param string $sArchiveFilePath
* @param int|null $flags
* @return ZipArchive
* @throws \Exception
*/
public static function ZipArchiveOpen(string $sArchiveFilePath, int|null $flags = null): ZipArchive
{
$oZip = new ZipArchive();
if (is_null($flags)) {
$code = $oZip->open($sArchiveFilePath);
} else {
$code = $oZip->open($sArchiveFilePath, $flags);
}
if (true !== $code) {
//ZipArchive::ZIP_ER_NOZIP : 19
if ($code === 19) {
throw new \Exception(sprintf('Cannot open zip file due to inconsistent or empty content'));
}
throw new \Exception(sprintf('Cannot open zip file due to error code %s', $code));
}
return $oZip;
}
/**
* @since 3.3.0 N°9875
* @param string $sDirectory
* @param string $sPrefix
* @return ZipArchive
* @throws \Exception
*/
public static function ZipArchiveCreateWithTempNam(string $sDirectory, string $sPrefix): ZipArchive
{
$sTempnam = tempnam($sDirectory, $sPrefix);
unlink($sTempnam);
$sArchiveName = $sTempnam.'.zip';
return self::ZipArchiveOpen($sArchiveName, ZipArchive::CREATE);
}
}

View File

@@ -1288,14 +1288,6 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'transactions_file_lifetime' => [
'type' => 'integer',
'description' => 'Value in seconds for the lifetime of a transaction file (after this duration, the transaction will be invalid and the garbage collector could delete it). This only works if the "transaction_storage" parameter is set to "File".',
'default' => 3600,
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'log_transactions' => [
'type' => 'bool',
'description' => 'Whether or not to enable the debug log for the transactions.',

View File

@@ -334,12 +334,14 @@ EOF
while ($aRow = $oSet->FetchAssoc()) {
set_time_limit(intval($iLoopTimeLimit));
$aData = [];
foreach ($this->aStatusInfo['fields'] as $iCol => $aFieldSpec) {
$aExportedObjects = [];
foreach ($this->aStatusInfo['fields'] as $aFieldSpec) {
$sAlias = $aFieldSpec['sAlias'];
$sAttCode = $aFieldSpec['sAttCode'];
$sField = '';
$oObj = $aRow[$sAlias];
$aExportedObjects[] = $oObj;
if ($oObj != null) {
switch ($sAttCode) {
case 'id':
@@ -366,7 +368,13 @@ EOF
}
$sData .= implode($this->aStatusInfo['separator'], $aData)."\n";
$iCount++;
$aExportedObjects = array_unique($aExportedObjects);
foreach ($aExportedObjects as $oExportedObject) {
$oExportedObject->FireEventReadDetails(get_class($this));
}
}
// Restore original date & time formats
AttributeDateTime::SetFormat($oPrevDateTimeFormat);
AttributeDate::SetFormat($oPrevDateFormat);

View File

@@ -730,8 +730,13 @@ abstract class DBObject implements iDisplay
public function SetTrim($sAttCode, $sValue)
{
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$this->Set($sAttCode, $oAttDef->TrimValue($sValue));
$iMaxSize = $oAttDef->GetMaxSize();
$sLength = mb_strlen($sValue);
if ($iMaxSize && ($sLength > $iMaxSize)) {
$sMessage = " -truncated ($sLength chars)";
$sValue = mb_substr($sValue, 0, $iMaxSize - mb_strlen($sMessage)).$sMessage;
}
$this->Set($sAttCode, $sValue);
}
/**
@@ -2033,7 +2038,7 @@ abstract class DBObject implements iDisplay
}
}
if (!is_null($iMaxSize = $oAtt->GetMaxSize())) {
$iLen = $oAtt->GetSize($toCheck);
$iLen = mb_strlen($toCheck);
if ($iLen > $iMaxSize) {
return "String too long (found $iLen, limited to $iMaxSize)";
}
@@ -6242,7 +6247,9 @@ abstract class DBObject implements iDisplay
}
/**
* @param array $aChanges
* @param bool $bIsNew
* @param string|null $sStimulusBeingApplied
*
* @return void
* @since 3.1.0
@@ -6251,6 +6258,18 @@ abstract class DBObject implements iDisplay
{
}
//////////////
/// READ
///
/**
* @return void
* @since 3.3.0
*/
public function FireEventReadDetails(string $sExportType): void
{
}
//////////////
/// DELETE
///

View File

@@ -288,11 +288,13 @@ EOF
while ($aRow = $oSet->FetchAssoc()) {
set_time_limit(intval($iLoopTimeLimit));
$aData = [];
$aExportedObjects = [];
foreach ($this->aStatusInfo['fields'] as $iCol => $aFieldSpec) {
$sAlias = $aFieldSpec['sAlias'];
$sAttCode = $aFieldSpec['sAttCode'];
$oObj = $aRow[$sAlias];
$aExportedObjects[] = $oObj;
$sField = '';
if ($oObj) {
$sField = $this->GetValue($oObj, $sAttCode);
@@ -301,6 +303,11 @@ EOF
}
fwrite($hFile, json_encode($aData)."\n");
$iCount++;
$aExportedObjects = array_unique($aExportedObjects);
foreach ($aExportedObjects as $oExportedObject) {
$oExportedObject->FireEventReadDetails(get_class($this));
}
}
set_time_limit(intval($iPreviousTimeLimit));
$this->aStatusInfo['position'] += $this->iChunkSize;

View File

@@ -139,6 +139,7 @@ class HTMLBulkExport extends TabularBulkExport
} else {
$sData .= "<tr>";
}
$aExportedObjects = [];
foreach ($this->aStatusInfo['fields'] as $iCol => $aFieldSpec) {
$sAlias = $aFieldSpec['sAlias'];
$sAttCode = $aFieldSpec['sAttCode'];
@@ -147,12 +148,18 @@ class HTMLBulkExport extends TabularBulkExport
$sField = '';
if ($oObj) {
$sField = $this->GetValue($oObj, $sAttCode);
$aExportedObjects[] = $oObj;
}
$sValue = ($sField === '') ? '&nbsp;' : $sField;
$sData .= "<td>$sValue</td>";
}
$sData .= "</tr>";
$iCount++;
$aExportedObjects = array_unique($aExportedObjects);
foreach ($aExportedObjects as $oExportedObject) {
$oExportedObject->FireEventReadDetails(get_class($this));
}
}
set_time_limit(intval($iPreviousTimeLimit));
$this->aStatusInfo['position'] += $this->iChunkSize;

View File

@@ -1642,10 +1642,10 @@ abstract class MetaModel
if ($sFilterCode == 'id') {
return true;
}
if (array_key_exists($sClass, self::$m_aMagicFields) && in_array($sFilterCode, self::$m_aMagicFields[$sClass])) {
if (array_key_exists($sClass, self::$m_aMagicFields) && array_key_exists($sFilterCode, self::$m_aMagicFields[$sClass])) {
return true;
}
if (array_key_exists($sClass, self::$m_aFilterForbiddenAttributes) && in_array($sFilterCode, self::$m_aFilterForbiddenAttributes[$sClass])) {
if (array_key_exists($sClass, self::$m_aFilterForbiddenAttributes) && array_key_exists($sFilterCode, self::$m_aFilterForbiddenAttributes[$sClass])) {
return false;
}
return self::IsValidAttCode($sClass, $sFilterCode);
@@ -2963,9 +2963,8 @@ abstract class MetaModel
self::$m_aMagicFields[] = $sClass;
}
self::$m_aMagicFields[$sClass][] = $sCode;
self::$m_aAttribOrigins[$sClass][$sCode] = self::$m_aAttribOrigins[$sClass][$sAttCode];
}
if (!$oAttDef->IsValidFilterAttribute()) {
if (!$oAttDef->IsSearchable()) {
if (!array_key_exists($sClass, self::$m_aFilterForbiddenAttributes)) {
self::$m_aFilterForbiddenAttributes[] = $sClass;
}

View File

@@ -60,13 +60,15 @@ class OQLActualClassTreeResolver
$aTranslateFields = [];
foreach ($aExpectedAttributes as $sAttCode => $oExpression) {
// 'id' is managed later
if ($sAttCode === 'id') {
if ($sAttCode == 'id') {
continue;
}
// Attributes can be stored in attributes list or for magic ones into filter codes list.
$sOriginClass = null;
if (MetaModel::IsValidAttCode($sClass, $sAttCode) || MetaModel::IsValidFilterCode($sClass, $sAttCode)) {
if (MetaModel::IsValidAttCode($sClass, $sAttCode)) {
$sOriginClass = MetaModel::GetAttributeOrigin($sClass, $sAttCode);
} elseif ($sAttCode == 'id') {
$sOriginClass = $sClass;
} else {
continue;
}

View File

@@ -625,6 +625,7 @@ class CoreServices implements iRestServiceProvider, iRestInputSanitizer
}
while ($oObject = $oObjectSet->Fetch()) {
$oObject->FireEventReadDetails(get_class($this));
$oResult->AddObject(0, '', $oObject, $aShowFields, RestUtils::HasRequestedExtendedOutput($sShowFields));
}
$oResult->message = "Found: ".$oObjectSet->Count();
@@ -699,6 +700,7 @@ class CoreServices implements iRestServiceProvider, iRestInputSanitizer
if ($oElement instanceof RelationObjectNode) {
$oObject = $oElement->GetProperty('object');
if ($oObject) {
$oObject->FireEventReadDetails(get_class($this));
if ($bEnableRedundancy && $sDirection == 'down') {
// Add only the "reached" objects
if ($oElement->GetProperty('is_reached')) {

View File

@@ -233,7 +233,6 @@ EOF
public function GetNextChunk(&$aStatus)
{
$sRetCode = 'run';
$iPercentage = 0;
$oSet = new DBObjectSet($this->oSearch);
$oSet->SetLimit($this->iChunkSize, $this->aStatusInfo['position']);
@@ -254,7 +253,8 @@ EOF
set_time_limit(intval($iLoopTimeLimit));
$sData .= "<tr>";
foreach ($this->aStatusInfo['fields'] as $iCol => $aFieldSpec) {
$aExportedObjects = [];
foreach ($this->aStatusInfo['fields'] as $aFieldSpec) {
$sAlias = $aFieldSpec['sAlias'];
$sAttCode = $aFieldSpec['sAttCode'];
@@ -265,7 +265,7 @@ EOF
$sData .= "<td x:str></td>";
continue;
}
$aExportedObjects[] = $oObj;
switch ($sAttCode) {
case 'id':
$sField = $oObj->GetKey();
@@ -322,6 +322,11 @@ EOF
}
$sData .= "</tr>";
$iCount++;
$aExportedObjects = array_unique($aExportedObjects);
foreach ($aExportedObjects as $oExportedObject) {
$oExportedObject->FireEventReadDetails(get_class($this));
}
}
set_time_limit(intval($iPreviousTimeLimit));
$this->aStatusInfo['position'] += $this->iChunkSize;

View File

@@ -8,13 +8,6 @@
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Core\AttributeDefinition\AttributeExternalField;
use Combodo\iTop\Core\AttributeDefinition\AttributeExternalKey;
use Combodo\iTop\Core\AttributeDefinition\AttributeFriendlyName;
use Combodo\iTop\Core\AttributeDefinition\AttributeHierarchicalKey;
use Combodo\iTop\Core\AttributeDefinition\AttributeLinkedSet;
use Combodo\iTop\Core\AttributeDefinition\AttributeStopWatch;
use Combodo\iTop\Core\AttributeDefinition\AttributeSubItem;
/**
* Bulk export: Tabular export: abstract base class for all "tabular" exports.
@@ -98,8 +91,8 @@ abstract class TabularBulkExport extends BulkExport
{
$aResult = [];
switch (get_class($oAttDef)) {
case AttributeExternalKey::class:
case AttributeHierarchicalKey::class:
case 'AttributeExternalKey':
case 'AttributeHierarchicalKey':
$bAddFriendlyName = true;
$oKeyAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
@@ -149,7 +142,7 @@ abstract class TabularBulkExport extends BulkExport
}
break;
case AttributeStopWatch::class:
case 'AttributeStopWatch':
foreach (MetaModel::ListAttributeDefs($sClass) as $sSubAttCode => $oSubAttDef) {
if ($oSubAttDef instanceof AttributeSubItem) {
if ($oSubAttDef->GetParentAttCode() == $sAttCode) {

View File

@@ -135,6 +135,11 @@ abstract class Trigger extends cmdbAbstractObject
if ($oAction->IsActive()) {
$oKPI = new ExecutionKPI();
$aContextArgs['action->object()'] = $oAction;
if (array_key_exists('this->object()', $aContextArgs)) {
/** @var \DBObject $oObject */
$oObject = $aContextArgs['this->object()'];
$oObject->FireEventReadDetails(get_class($oAction));
}
$oAction->DoExecute($this, $aContextArgs);
$oKPI->ComputeStatsForExtension($oAction, 'DoExecute');
}

View File

@@ -144,6 +144,7 @@ class XMLBulkExport extends BulkExport
if (count($aAuthorizedClasses) > 1) {
$sData .= "<Row>\n";
}
$aExportedObjects = [];
foreach ($aAuthorizedClasses as $sAlias => $sClassName) {
$oObj = $aObjects[$sAlias];
if (is_null($oObj)) {
@@ -151,6 +152,7 @@ class XMLBulkExport extends BulkExport
} else {
$sClassName = get_class($oObj);
$sData .= "<$sClassName alias=\"$sAlias\" id=\"".$oObj->GetKey()."\">\n";
$aExportedObjects[] = $oObj;
}
foreach ($aClass2Attributes[$sAlias] as $sAttCode => $oAttDef) {
if (is_null($oObj)) {
@@ -166,6 +168,11 @@ class XMLBulkExport extends BulkExport
$sData .= "</Row>\n";
}
$iCount++;
$aExportedObjects = array_unique($aExportedObjects);
foreach ($aExportedObjects as $oExportedObject) {
$oExportedObject->FireEventReadDetails(get_class($this));
}
}
set_time_limit(intval($iPreviousTimeLimit));

View File

@@ -42,7 +42,7 @@ css/backoffice/
| vendors/ # Third-party libs, should be either:
| # - Overload of the lib SCSS variables (BEST way, but possible only if the lib exposes them. e.g. Bulma)
| # - Overload of the lib necessary CSS classes only (not great as it duplicates some rules in the browser, which add weight and computation. e.g. dataTables)
| # - Duplicate the lib CSS completely to insert SCSS variables (not great as it will be outdated when updating the lib itself. e.g. jQuery UI)
| # - Duplicate the lib CSS completly to insert SCSS variables (not great as it will be outdated when updating the lib itself. e.g. jQuery UI)
| | _bulma-variables-overload.scss # Bulma CSS framework
| | _jquery-ui.scss # jQuery UI
| ... # Etc…

View File

@@ -4,7 +4,7 @@
*/
$ibo-user-rights--padding-x: $ibo-spacing-400 !default;
$ibo-user-rights--padding-y: $ibo-spacing-100 !default;
$ibo-user-rights--padding-y: $ibo-spacing-200 !default;
$ibo-user-rights--border-radius: $ibo-border-radius-400 !default;
$ibo-user-rights--is-success--background-color: $ibo-color-success-100 !default;
@@ -18,8 +18,6 @@ $ibo-user-rights--is-failure--border-color: $ibo-color-danger-500 !default;
$ibo-user-rights--is-failure--border: 1px solid $ibo-user-rights--is-failure--border-color !default;
.ibo-user-rights {
display: inline-flex;
align-items: baseline;
padding: $ibo-user-rights--padding-y $ibo-user-rights--padding-x;
border-radius: $ibo-user-rights--border-radius;
&.ibo-is-success {

View File

@@ -8,74 +8,70 @@
padding-bottom: 14px;
}
// WIP SDK Forms
//form[is="itop-form-element"] {
//
// .help-text{
// padding: 1px 5px;
// background-color: #d7e3f8;
// border: 1px solid #c6e7f5;
// border-radius: 5px;
// margin: 5px 0;
// font-size: 0.9em;
// }
//
// .form-error ul{
// padding: 1px 5px;
// background-color: #f8d7da;
// border: 1px solid #f5c6cb;
// border-radius: 5px;
// margin: 5px 0;
// font-size: 0.9em;
// }
//
// .subform{
// background-color: #efefef;
// border-radius: 5px;
// padding: 10px;
// }
//
// .form-buttons{
// margin: 20px 0;
// }
//
// .form select{
// padding: 0;
// overflow-y: auto;
// }
//
// .form select option{
// height: 30px;
// display: flex;
// align-items: center;
// }
//
// .turbo-refreshing{
// opacity: .5;
// }
//
// .ibo-field legend{
// margin-top: 24px;
// }
//
// collection-entry-element {
// margin-top: 8px;
// display: block;
// padding: 10px 10px;
// background-color: #f5f5f5;
// border-radius: 5px;
// }
// .ts-control{
// height: auto;
// min-height: 30px;
// }
//
// .ibo-form-actions > .ibo-button > span{
// margin-right: 5px;
// }
//
// .ibo-form textarea{
// resize: vertical;
// }
//
//}
.help-text{
padding: 1px 5px;
background-color: #d7e3f8;
border: 1px solid #c6e7f5;
border-radius: 5px;
margin: 5px 0;
font-size: 0.9em;
}
.form-error ul{
padding: 1px 5px;
background-color: #f8d7da;
border: 1px solid #f5c6cb;
border-radius: 5px;
margin: 5px 0;
font-size: 0.9em;
}
.subform{
background-color: #efefef;
border-radius: 5px;
padding: 10px;
}
.form-buttons{
margin: 20px 0;
}
.form select{
padding: 0;
overflow-y: auto;
}
.form select option{
height: 30px;
display: flex;
align-items: center;
}
.turbo-refreshing{
opacity: .5;
}
.ibo-field legend{
margin-top: 24px;
}
collection-entry-element {
margin-top: 8px;
display: block;
padding: 10px 10px;
background-color: #f5f5f5;
border-radius: 5px;
}
.ts-control{
height: auto;
min-height: 30px;
}
.ibo-form-actions > .ibo-button > span{
margin-right: 5px;
}
.ibo-form textarea{
resize: vertical;
}

View File

@@ -70,7 +70,7 @@ $ibo-vendors-ckeditor--ck-mentions--item--padding-y: $ibo-spacing-200 !default;
}
}
.ck-editor__editable_inline:not(.ck-comment__input *), .ck-source-editing-area {
.ck-editor__editable_inline:not(.ck-comment__input *) {
height: 200px;
}
@@ -84,6 +84,11 @@ $ibo-vendors-ckeditor--ck-mentions--item--padding-y: $ibo-spacing-200 !default;
}
}
// N°7552 Allow source editing area to be scrollable in full screen
.ck-maximize_editor_main .ck-source-editing-area textarea{
overflow: auto !important;
}
/* Mentions */
.ck-mentions {
.ck-button {

View File

@@ -4,7 +4,7 @@
*/
/* SCSS variables */
$common-has-description--content: "?" !default;
$common-has-description--content: "\1F6C8" !default;
$common-has-description--padding-left: $common-spacing-200 !default;
$common-has-description--color: $common-color-grey-600 !default;
$common-has-description--font-size: 0.7em !default; /* Font size is em on purpose as we want it to be proportional to its context */

View File

@@ -11,9 +11,6 @@
*
* Usage: @extend %common-font-size-XXX;
*/
%common-font-size-20 {
font-size: $common-font-size-20;
}
%common-font-size-50 {
font-size: $common-font-size-50;
}

File diff suppressed because one or more lines are too long

View File

@@ -6,9 +6,8 @@
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'CAS:Error:UserNotAllowed' => '用户被禁止登录',
'CAS:Login:SignIn' => '使用 CAS 登录',
'CAS:Login:SignInTooltip' => '点击这里使用 CAS 服务器认证',
'CAS:Login:SignIn' => '使用CAS登录',
'CAS:Login:SignInTooltip' => '点击这里使用CAS服务器认证',
]);

View File

@@ -5,8 +5,10 @@
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*/
/**
* @author Robert Deng <denglx@gmail.com>
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -21,7 +23,6 @@
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
@@ -31,11 +32,9 @@
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: UserExternal
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserExternal' => '外部用户',
'Class:UserExternal+' => '用户在'.ITOP_APPLICATION_SHORT.'外部验证身份',

View File

@@ -14,7 +14,7 @@
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:UserLDAP' => 'Пользователь LDAP',
'Class:UserLDAP+' => 'Пользователь, аутентифицируемый через LDAP',
'UserLDAP:server' => 'Особенности LDAP',
'UserLDAP:server' => 'LDAP specifics~~',
]);
//
@@ -22,6 +22,6 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:UserLDAP/Attribute:ldap_server' => 'Сервер LDAP',
'Class:UserLDAP/Attribute:ldap_server+' => '',
'Class:UserLDAP/Attribute:ldap_server' => 'Ldap server~~',
'Class:UserLDAP/Attribute:ldap_server+' => '~~',
]);

View File

@@ -6,6 +6,7 @@
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
* @author Robert Deng <denglx@gmail.com>
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
@@ -21,7 +22,6 @@
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
@@ -31,15 +31,13 @@
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: UserLDAP
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserLDAP' => 'LDAP 用户',
'Class:UserLDAP+' => '用户身份由 LDAP 认证',
'UserLDAP:server' => 'LDAP 详情',
'Class:UserLDAP' => 'LDAP用户',
'Class:UserLDAP+' => '用户身份由LDAP认证',
'UserLDAP:server' => 'LDAP详情',
]);
//
@@ -47,6 +45,6 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserLDAP/Attribute:ldap_server' => 'LDAP 服务器',
'Class:UserLDAP/Attribute:ldap_server+' => '',
'Class:UserLDAP/Attribute:ldap_server' => 'Ldap server~~',
'Class:UserLDAP/Attribute:ldap_server+' => '~~',
]);

View File

@@ -25,7 +25,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'abgelaufen',
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'einmaliges Passwort',
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Das Passwort kann vom Benutzer nicht geändert werden.',
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '',
'Class:UserLocal/Attribute:password_renewed_date' => 'Letzte Passworterneuerung',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Letztes Änderungsdatum',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort muss mindestens 12 Zeichen lang sein und Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.',

View File

@@ -24,11 +24,11 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Истёкший',
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'Одноразовый пароль',
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Пароль не может быть изменён пользователем.',
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Дата изменения пароля',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Когда пароль был изменен в последний раз',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Пароль должен содержать не менее 12 символов и включать прописные, строчные, числовые и специальные символы.',
'UserLocal:password:expiration' => 'Поля требуют наличия доп. расширения',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Установка срока действия пароля "Одноразовый пароль" для своей собственной учётной записи не разрешена',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -6,6 +6,7 @@
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
* @author Robert Deng <denglx@gmail.com>
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
@@ -21,7 +22,6 @@
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
@@ -31,19 +31,16 @@
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: UserLocal
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' 用户',
'Class:UserLocal+' => '用户由'.ITOP_APPLICATION_SHORT.'验证身份',
'Class:UserLocal/Attribute:password' => '密码',
'Class:UserLocal/Attribute:password+' => '用于验证用户身份的字符串',
'Class:UserLocal/Attribute:expiration' => '密码过期时间',
'Class:UserLocal/Attribute:expiration+' => '密码过期状态 (需要扩展才能生效)',
'Class:UserLocal/Attribute:expiration' => '密码过期',
'Class:UserLocal/Attribute:expiration+' => '密码过期状态 (需要一个扩展才能生效)',
'Class:UserLocal/Attribute:expiration/Value:can_expire' => '允许过期',
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
'Class:UserLocal/Attribute:expiration/Value:never_expire' => '永不过期',
@@ -52,9 +49,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => '一次性密码',
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '用户不允许修改密码.',
'Class:UserLocal/Attribute:password_renewed_date' => '密码更新时间',
'Class:UserLocal/Attribute:password_renewed_date' => '密码更新',
'Class:UserLocal/Attribute:password_renewed_date+' => '上次修改密码的时间',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少12个字符, 包含大小写, 数字和特殊字符.',
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置 "一次性密码" 的失效期限',

View File

@@ -11,5 +11,5 @@
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'theme:darkmoon' => 'Тёмная луна',
'theme:darkmoon' => 'Dark moon~~',
]);

View File

@@ -21,7 +21,6 @@
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'theme:darkmoon' => 'Dark moon',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'theme:fullmoon-high-contrast' => 'Fullmoon (Hoher Kontrast)',
'theme:fullmoon-high-contrast' => 'Fullmoon (High contrast)~~',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'theme:fullmoon-high-contrast' => 'Fullmoon (высокая контрастность)',
'theme:fullmoon-high-contrast' => 'Fullmoon (High contrast)~~',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopie & Deuteranopie)',
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopia & Deuteranopia)~~',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (протанопия и дейтеранопия)',
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopia & Deuteranopia)~~',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopie)',
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopia)~~',
]);

View File

@@ -23,5 +23,5 @@
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'theme:fullmoon-tritanopia' => 'Fullmoon (тританопия)',
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopia)~~',
]);

View File

@@ -1,24 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3">
<classes>
<class id="ResourceDataFeatureRemoval" _delta="define">
<parent>AbstractResource</parent>
<properties>
<comment>/* Extension management access control. */</comment>
<abstract>true</abstract>
<category>grant_by_profile</category>
</properties>
<presentation/>
<methods/>
</class>
</classes>
<menus>
<menu id="DataFeatureRemovalMenu" xsi:type="WebPageMenuNode" _delta="define">
<rank>30</rank>
<parent>SystemTools</parent>
<url>$pages/exec.php?exec_module=combodo-data-feature-removal&amp;exec_page=index.php&amp;c[menu]=DataFeatureRemovalMenu</url>
<enable_class>ResourceDataFeatureRemoval</enable_class>
<enable_action>UR_ACTION_MODIFY</enable_action>
<enable_admin_only>1</enable_admin_only>
</menu>
</menus>
<module_parameters>

View File

@@ -1,71 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Localized data
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:DataFeatureRemovalMenu' => 'Extension-Verwaltung',
'combodo-data-feature-removal/Operation:Main/Title' => 'Extension-Verwaltung',
'DataFeatureRemoval:Main:Title' => 'Extension-Verwaltung',
'DataFeatureRemoval:Main:SubTitle' => 'In Ihrem iTop installierte Extensions aktivieren oder deaktivieren',
'DataFeatureRemoval:Failure:Title' => 'Fehler beim Testlauf der Extension-Entfernung',
'DataFeatureRemoval:Helper:Title' => 'Prüfen Sie, ob Daten oder Abhängigkeiten dem Hinzufügen bzw. Entfernen einer Extension entgegenstehen.',
'DataFeatureRemoval:Features:Title' => 'Extensions',
'DataFeatureRemoval:Result:Title' => 'Angeforderte Änderung',
'DataFeatureRemoval:NoResult:Title' => 'Keine Änderung angefordert',
'DataFeatureRemoval:Execution:Title' => 'Ausführung der Löschvorgänge',
'DataFeatureRemoval:Analysis:Title' => 'Analyseergebnis',
'DataFeatureRemoval:Analysis:Subtitle' => 'Prüfen Sie alle Elemente, die Ihre Aufmerksamkeit erfordern',
'DataFeatureRemoval:Analysis:SubTitle' => '%1$s Element(e) müssen bereinigt werden, bevor Sie fortfahren können',
'DataFeatureRemoval:DeletionPlan:Title' => 'Plan zur Datenlöschung',
'DataFeatureRemoval:DeletionPlan:SubTitle' => '%1$s Zeilen müssen bereinigt werden, bevor Sie fortfahren können',
'DataFeatureRemoval:DoDeletion:Title' => 'Löschung durchführen',
'DataFeatureRemoval:DoDeletion:SubTitle' => 'Alle Einträge aus der Datenbank entfernen',
'DataFeatureRemoval:DeletionPlan:Error:Issues' => 'Einige Objekte müssen vor der Bereinigung manuell gelöscht werden',
'DataFeatureRemoval:Table:Analysis:ClassName' => 'Zu entfernendes Element',
'DataFeatureRemoval:Table:Analysis:FeatureName' => 'Name der Extension',
'DataFeatureRemoval:Table:Analysis:Module' => 'Modulname',
'DataFeatureRemoval:Table:Analysis:Occurrence' => 'Vorkommen',
'DataFeatureRemoval:CleanupComplete:Title' => 'Alles bereinigt.',
'DataFeatureRemoval:CompilComplete' => 'Kompilierung erfolgreich. Keine Bereinigung erforderlich. Sie können mit dem Setup fortfahren.',
'DataFeatureRemoval:Compile:InProgress' => 'Kompilierung läuft...',
'DataFeatureRemoval:Compile:Success' => 'Kompilierung erfolgreich',
'DataFeatureRemoval:Compile:Error' => 'Fehler bei der Kompilierung',
'DataFeatureRemoval:RunAudit:InProgress' => 'Analyse läuft...',
'DataFeatureRemoval:RunAudit:Success' => 'Analyse abgeschlossen',
'DataFeatureRemoval:RunAudit:Error' => 'Fehler während der Analyse',
'UI:Button:Analyze' => 'Analysieren',
'UI:Button:ModifyChoices' => 'Auswahl ändern',
'UI:Button:AnalyzeAndSetup' => 'Analysieren und zum Setup',
'UI:Button:PlanDeletion' => 'Mit der Löschung fortfahren',
'UI:Button:DoDeletion' => 'Mit der Löschung fortfahren',
'UI:Button:BackToMain' => 'Auswahl ändern',
'UI:Button:Setup' => 'Setup ausführen',
'UI:Action:ForceUninstall' => 'Deinstallation erzwingen',
'UI:Action:MoreInfo' => 'Weitere Informationen',
'DataFeatureRemoval:Table:Empty' => 'Keine zu entfernenden Daten',
'DataFeatureRemoval:Column:Class' => 'Klasse',
'DataFeatureRemoval:Column:DeleteCount' => 'Zu löschende Einträge',
'DataFeatureRemoval:Column:UpdateCount' => 'Zu aktualisierende Einträge',
'DataFeatureRemoval:Column:IssueCount' => 'Gefundene Probleme, die eine automatische Bereinigung verhindern',
'DataFeatureRemoval:Column:DeletedCount' => 'Gelöschte Einträge',
'DataFeatureRemoval:Column:UpdatedCount' => 'Aktualisierte Einträge',
]);

View File

@@ -20,7 +20,6 @@ Dict::Add('EN US', 'English', 'English', [
'DataFeatureRemoval:Features:Title' => 'Extensions',
'DataFeatureRemoval:Result:Title' => 'Modification requested',
'DataFeatureRemoval:NoResult:Title' => 'No modification requested',
'DataFeatureRemoval:Execution:Title' => 'Deletion Executions',
'DataFeatureRemoval:Analysis:Title' => 'Analysis result',
'DataFeatureRemoval:Analysis:Subtitle' => 'Review all elements requiring attention',
@@ -40,14 +39,6 @@ Dict::Add('EN US', 'English', 'English', [
'DataFeatureRemoval:CleanupComplete:Title' => 'All clear.',
'DataFeatureRemoval:CompilComplete' => 'Compilation successful. No Cleanup needed. You can proceed to setup.',
'DataFeatureRemoval:Compile:InProgress' => 'Compilation in progress...',
'DataFeatureRemoval:Compile:Success' => 'Compilation successful',
'DataFeatureRemoval:Compile:Error' => 'Compilation error',
'DataFeatureRemoval:RunAudit:InProgress' => 'Analysis in progress...',
'DataFeatureRemoval:RunAudit:Success' => 'Analysis completed',
'DataFeatureRemoval:RunAudit:Error' => 'Error during analysis',
'UI:Button:Analyze' => 'Analyze',
'UI:Button:ModifyChoices' => 'Change my selection',
'UI:Button:AnalyzeAndSetup' => 'Analyze and go to setup',

View File

@@ -1,19 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Localized data
*
* Only the entries whose spelling differs from EN US are listed here; every
* other string falls back to the EN US dictionary.
*/
Dict::Add('EN GB', 'British English', 'British English', [
'DataFeatureRemoval:Helper:Title' => 'Analyse if there are any data or dependency preventing you from adding/removing an extension.',
'UI:Button:Analyze' => 'Analyse',
'UI:Button:AnalyzeAndSetup' => 'Analyse and go to setup',
]);

View File

@@ -20,7 +20,6 @@ Dict::Add('FR FR', 'French', 'Français', [
'DataFeatureRemoval:Features:Title' => 'Extensions',
'DataFeatureRemoval:Result:Title' => 'Modification demandée',
'DataFeatureRemoval:NoResult:Title' => 'Aucune modification demandée',
'DataFeatureRemoval:Execution:Title' => 'Suppressions',
'DataFeatureRemoval:Analysis:Title' => 'Résultat de lanalyse',
'DataFeatureRemoval:Analysis:Subtitle' => 'Vérifier les éléments à nettoyer',
@@ -40,14 +39,6 @@ Dict::Add('FR FR', 'French', 'Français', [
'DataFeatureRemoval:CleanupComplete:Title' => 'All clear.',
'DataFeatureRemoval:CompilComplete' => 'Compilation successful. No Cleanup needed. You can proceed to setup.',
'DataFeatureRemoval:Compile:InProgress' => 'Compilation en cours...',
'DataFeatureRemoval:Compile:Success' => 'Compilation terminée',
'DataFeatureRemoval:Compile:Error' => 'Erreur lors de la compilation',
'DataFeatureRemoval:RunAudit:InProgress' => 'Analyse en cours...',
'DataFeatureRemoval:RunAudit:Success' => 'Analyse terminée',
'DataFeatureRemoval:RunAudit:Error' => 'Erreur lors de l\'analyse',
'UI:Button:Analyze' => 'Analyser',
'UI:Button:ModifyChoices' => 'Modifier la sélection',
'UI:Button:AnalyzeAndSetup' => 'Analyser et ouvrir lassistant de configuration',

View File

@@ -1,75 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2025 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Localized data
*/
/**
* @author Vladimir Kunin <v.b.kunin@gmail.com>
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'Menu:DataFeatureRemovalMenu' => 'Управление расширениями',
'combodo-data-feature-removal/Operation:Main/Title' => 'Управление расширениями',
'DataFeatureRemoval:Main:Title' => 'Управление расширениями',
'DataFeatureRemoval:Main:SubTitle' => 'Включение и отключение расширений, установленных в вашем iTop',
'DataFeatureRemoval:Failure:Title' => 'Ошибки пробного удаления расширений',
'DataFeatureRemoval:Helper:Title' => 'Проверьте, есть ли данные или зависимости, мешающие добавить/удалить расширение.',
'DataFeatureRemoval:Features:Title' => 'Расширения',
'DataFeatureRemoval:Result:Title' => 'Запрошено изменение',
'DataFeatureRemoval:NoResult:Title' => 'Изменений не запрошено',
'DataFeatureRemoval:Execution:Title' => 'Выполнения удаления',
'DataFeatureRemoval:Analysis:Title' => 'Результат анализа',
'DataFeatureRemoval:Analysis:Subtitle' => 'Просмотрите все элементы, требующие внимания',
'DataFeatureRemoval:Analysis:SubTitle' => 'Элементов для очистки перед продолжением: %1$s',
'DataFeatureRemoval:DeletionPlan:Title' => 'План удаления данных',
'DataFeatureRemoval:DeletionPlan:SubTitle' => 'Строк для очистки перед продолжением: %1$s',
'DataFeatureRemoval:DoDeletion:Title' => 'Выполнить удаление',
'DataFeatureRemoval:DoDeletion:SubTitle' => 'Удалить все записи из базы данных',
'DataFeatureRemoval:DeletionPlan:Error:Issues' => 'Некоторые объекты нужно удалить вручную перед очисткой',
'DataFeatureRemoval:Table:Analysis:ClassName' => 'Элемент для удаления',
'DataFeatureRemoval:Table:Analysis:FeatureName' => 'Название расширения',
'DataFeatureRemoval:Table:Analysis:Module' => 'Название модуля',
'DataFeatureRemoval:Table:Analysis:Occurrence' => 'Количество',
'DataFeatureRemoval:CleanupComplete:Title' => 'Всё чисто.',
'DataFeatureRemoval:CompilComplete' => 'Компиляция выполнена успешно. Очистка не требуется. Можно переходить к установке.',
'DataFeatureRemoval:Compile:InProgress' => 'Идёт компиляция...',
'DataFeatureRemoval:Compile:Success' => 'Компиляция выполнена успешно',
'DataFeatureRemoval:Compile:Error' => 'Ошибка компиляции',
'DataFeatureRemoval:RunAudit:InProgress' => 'Идёт анализ...',
'DataFeatureRemoval:RunAudit:Success' => 'Анализ завершён',
'DataFeatureRemoval:RunAudit:Error' => 'Ошибка при анализе',
'UI:Button:Analyze' => 'Анализировать',
'UI:Button:ModifyChoices' => 'Изменить выбор',
'UI:Button:AnalyzeAndSetup' => 'Анализировать и перейти к установке',
'UI:Button:PlanDeletion' => 'Продолжить удаление',
'UI:Button:DoDeletion' => 'Продолжить удаление',
'UI:Button:BackToMain' => 'Изменить выбор',
'UI:Button:Setup' => 'Запустить установку',
'UI:Action:ForceUninstall' => 'Принудительно удалить',
'UI:Action:MoreInfo' => 'Подробнее',
'DataFeatureRemoval:Table:Empty' => 'Нет данных для удаления',
'DataFeatureRemoval:Column:Class' => 'Класс',
'DataFeatureRemoval:Column:DeleteCount' => 'Записей к удалению',
'DataFeatureRemoval:Column:UpdateCount' => 'Записей к обновлению',
'DataFeatureRemoval:Column:IssueCount' => 'Найдено проблем, мешающих автоматической очистке',
'DataFeatureRemoval:Column:DeletedCount' => 'Удалено записей',
'DataFeatureRemoval:Column:UpdatedCount' => 'Обновлено записей',
]);

View File

@@ -1,62 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2025 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Localized data
*/
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:DataFeatureRemovalMenu' => '扩展管理',
'combodo-data-feature-removal/Operation:Main/Title' => '扩展管理',
'DataFeatureRemoval:Main:Title' => '扩展管理',
'DataFeatureRemoval:Main:SubTitle' => '切换安装在您的 iTop 上的扩展',
'DataFeatureRemoval:Failure:Title' => '扩展预删除错误',
'DataFeatureRemoval:Helper:Title' => '分析是否有任何数据或依赖关系阻止您添加/删除扩展。',
'DataFeatureRemoval:Features:Title' => '扩展',
'DataFeatureRemoval:Result:Title' => '请求的修改',
'DataFeatureRemoval:Execution:Title' => '删除执行',
'DataFeatureRemoval:Analysis:Title' => '分析结果',
'DataFeatureRemoval:Analysis:Subtitle' => '审查所有需要关注的元素',
'DataFeatureRemoval:Analysis:SubTitle' => '%1$s 个元素需要在继续之前清理',
'DataFeatureRemoval:DeletionPlan:Title' => '数据删除计划',
'DataFeatureRemoval:DeletionPlan:SubTitle' => '%1$s 行需要在继续之前清理',
'DataFeatureRemoval:DoDeletion:Title' => '执行删除',
'DataFeatureRemoval:DoDeletion:SubTitle' => '从数据库中删除所有条目',
'DataFeatureRemoval:DeletionPlan:Error:Issues' => '某些对象必须在清理前手动删除',
'DataFeatureRemoval:Table:Analysis:ClassName' => '要删除的元素',
'DataFeatureRemoval:Table:Analysis:FeatureName' => '扩展名称',
'DataFeatureRemoval:Table:Analysis:Module' => '模块名称',
'DataFeatureRemoval:Table:Analysis:Occurrence' => '出现次数',
'DataFeatureRemoval:CleanupComplete:Title' => '全部清除.',
'DataFeatureRemoval:CompilComplete' => '编译成功. 无需清理. 您可以继续进行设置.',
'UI:Button:Analyze' => '分析',
'UI:Button:ModifyChoices' => '改变我的选择',
'UI:Button:AnalyzeAndSetup' => '分析并进入设置',
'UI:Button:PlanDeletion' => '继续删除',
'UI:Button:DoDeletion' => '继续删除',
'UI:Button:BackToMain' => '改变我的选择',
'UI:Button:Setup' => '运行安装向导',
'UI:Action:ForceUninstall' => '强制卸载',
'UI:Action:MoreInfo' => '更多信息',
'DataFeatureRemoval:Table:Empty' => '没有数据需要删除',
'DataFeatureRemoval:Column:Class' => '类',
'DataFeatureRemoval:Column:DeleteCount' => '待删除的条目',
'DataFeatureRemoval:Column:UpdateCount' => '待更新的条目',
'DataFeatureRemoval:Column:IssueCount' => '发现阻止自动清理的问题',
'DataFeatureRemoval:Column:DeletedCount' => '已删除的条目',
'DataFeatureRemoval:Column:UpdatedCount' => '已更新的条目',
]);

View File

@@ -47,11 +47,7 @@ class DataFeatureRemovalController extends Controller
$aParams = [];
SetupUtils::EraseSetupToken();
$oParameters = new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME);
$oParameters->Erase();
Session::Unset('aDeletionExecutionSummary');
Session::Set('bForceCompilation', true);
$oParameters->SetParameter('return_application', 'DataFeatureRemoval');
(new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME))->Erase();
$this->AddAnalyzeParams();
$aParams['sTransactionId'] = utils::GetNewTransactionId();
@@ -64,6 +60,7 @@ class DataFeatureRemovalController extends Controller
$aParams['sSetupUrl'] = utils::GetAbsoluteUrlAppRoot().'setup';
$aParams['iCount'] = $this->iCount;
Session::Set('bForceCompilation', true);
$this->AddLinkedStylesheet(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/css/DataFeatureRemoval.css');
$this->AddLinkedScript(utils::GetAbsoluteUrlModulesRoot().DataFeatureRemovalHelper::MODULE_NAME.'/assets/js/DataFeatureRemoval.js');
$this->DisplayPage($aParams);
@@ -97,7 +94,7 @@ class DataFeatureRemovalController extends Controller
}
// Display changed extensions
$aSetupParameterNames = [
$aHiddenInputNames = [
'selected_extensions' => '[]',
'selected_modules' => '[]',
'display_choices' => '',
@@ -111,38 +108,92 @@ class DataFeatureRemovalController extends Controller
'target_env' => ITOP_DEFAULT_ENV,
];
$oParameters = new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME);
foreach ($aSetupParameterNames as $sInputName => $defaultValue) {
$oParameters->SetParameter($sInputName, $oParameters->GetParameter($sInputName, $defaultValue));
$aHiddenInputs = [];
foreach ($aHiddenInputNames as $sInputName => $defaultValue) {
$aHiddenInputs[$sInputName] = utils::ReadPostedParam($sInputName, $defaultValue, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
}
$aParams['aHiddenInputs'] = $aHiddenInputs;
$aAddedExtensions = json_decode($oParameters->GetParameter('added_extensions', '[]'), true);
$aRemovedExtensions = json_decode($oParameters->GetParameter('removed_extensions', '[]'), true);
if ('[]' === $oParameters->GetParameter('selected_modules', '[]')) {
$aAddedExtensions = json_decode($aHiddenInputs['added_extensions'], true);
$aRemovedExtensions = json_decode($aHiddenInputs['removed_extensions'], true);
if ("[]" === $aHiddenInputs['selected_modules']) {
//it does not come from setup
// we get extensions from 1st screen uiblocks
$this->ReadExtensionsDiff();
$oParameters->SetParameter('force-uninstall', $this->bForcedUninstallation ? 'on' : '');
$aHiddenInputs['force-uninstall'] = $this->bForcedUninstallation ? 'on' : '';
$aAddedExtensions = $this->aExtensionsToCheck['to_be_installed'];
$oParameters->SetParameter('added_extensions', $this->ConvertIntoSetupFormat($aAddedExtensions));
$aHiddenInputs['added_extensions'] = $this->ConvertIntoSetupFormat($aAddedExtensions);
$aRemovedExtensions = $this->aExtensionsToCheck['to_be_removed'];
$oParameters->SetParameter('removed_extensions', $this->ConvertIntoSetupFormat($aRemovedExtensions));
$aExtensionsNotUninstallable = $this->aExtensionsToCheck['extensions_not_uninstallable'];
$oParameters->SetParameter('extensions_not_uninstallable', $this->ConvertIntoSetupFormat($aExtensionsNotUninstallable));
$aHiddenInputs['removed_extensions'] = $this->ConvertIntoSetupFormat($aRemovedExtensions);
}
$aParams['aAddedExtensions'] = $aAddedExtensions;
$aParams['aRemovedExtensions'] = $aRemovedExtensions;
DataFeatureRemovalLog::Debug(__METHOD__.' Extensions given in parameter', null, [
'added_extensions' => $aAddedExtensions,
'removed_extensions' => $aRemovedExtensions]);
$aParams['sTransactionId'] = utils::GetNewTransactionId();
$aParams['iColumnCount'] = $this->iColumnCount;
$aAvailableExtensions = $this->GetExtensionsDiff($aAddedExtensions, $aRemovedExtensions);
$aParams['aAvailableExtensionsCount'] = count($aAvailableExtensions);
$aParams['aAvailableExtensions'] = $this->SplitArrayIntoColumns($aAvailableExtensions, $this->iColumnCount);
$aParams['sAjaxURL'] = utils::GetAbsoluteUrlModulePage(DataFeatureRemovalHelper::MODULE_NAME, 'index.php');
$aParams['aAvailableExtensions'] = $this->SplitArrayIntoColumns($this->GetExtensionsDiff($aAddedExtensions, $aRemovedExtensions), $this->iColumnCount);
//to make setup redirection work, we need to pass complex data structures to setup wizards (ie extension/module lists)
$sSourceEnv = MetaModel::GetEnvironment();
$this->oRuntimeEnvironment = new RunTimeEnvironment($sSourceEnv, false);
if ('[]' === $aHiddenInputs['selected_modules']) {
$oConfig = MetaModel::GetConfig();
$aSelectedExtensions = DataFeatureRemoverExtensionService::GetInstance()->GetExtensionMap()->GetSelectedExtensions($oConfig, array_keys($aAddedExtensions), array_keys($aRemovedExtensions));
$aHiddenInputs['selected_extensions'] = $this->ConvertIntoSetupFormat($aSelectedExtensions);
$aSelectedModules = []; // keep it to compile method
} else {
$aSelectedExtensions = json_decode($aHiddenInputs['selected_extensions'], true);
$aSelectedModules = json_decode($aHiddenInputs['selected_modules'], true);
}
try {
$this->Compile($aSelectedExtensions, array_keys($aRemovedExtensions), $aSelectedModules);
$aHiddenInputs['selected_modules'] = $this->ConvertIntoSetupFormat($aSelectedModules);
} catch (CoreException $e) {
$aParams['DataFeatureRemovalErrorMessage'] = $e->getHtmlDesc();
$this->DisplayPage($aParams, 'AnalysisResult');
return;
} catch (Exception $e) {
$aParams['DataFeatureRemovalErrorMessage'] = $e->getMessage();
$this->DisplayPage($aParams, 'AnalysisResult');
return;
}
$oSetupAudit = new SetupAudit($sSourceEnv);
$aGetRemovedClasses = array_keys($oSetupAudit->RunDataAudit());
DataFeatureRemovalLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]);
$aParams['aClasses'] = $aGetRemovedClasses;
new ContextTag(ContextTag::TAG_SETUP);
$aParams['sLaunchSetupUrl'] = utils::GetAbsoluteUrlAppRoot().'setup/wizard.php';
$aParams['aSetupParams'] = [
"_class" => "WizStepLandingBeforeAudit",
"operation" => "next",
];
foreach ($aHiddenInputs as $sInputName => $sInputValue) {
$aParams['aSetupParams'][$sInputName] = $sInputValue;
}
[$aParams['aDeletionPlanSummary'], $aParams['iQueryCount'], $aParams['bDeletionPossible']] = $this->GetDeletionPlanSummaryTable($aGetRemovedClasses);
[$aParams['aDeletionExecutionSummary'], $aParams['bHasDeletionExecution']] = $this->GetExecutionSummaryTable();
$aParams['bDeletionNeeded'] = ($aParams['iQueryCount'] > 0);
Session::Set('aDeletionExecutionSummary', serialize($this->aDeletionExecutionSummary));
if (!$aParams['bDeletionNeeded']) {
// Erase session setup parameters
SetupUtils::CreateSetupToken();
}
$this->DisplayPage($aParams, 'AnalysisResult');
}
@@ -150,137 +201,55 @@ class DataFeatureRemovalController extends Controller
private function ConvertIntoSetupFormat(array $aData): string
{
$aNewData = [];
foreach ($aData as $sCode => $sLabel) {
$aNewData[] = sprintf('"%s":"%s"', $sCode, $sLabel);
foreach ($aData as $k => $sVal) {
$aNewData[] = sprintf('"%s":"%s"', $k, $sVal);
}
return "{".implode(',', $aNewData)."}";
}
/**
* @param array $aSelectedExtensions
* @param array $aRemovedExtensions
* @param array $aSelectedModules
*
* @return void
* @throws \ConfigException
* @throws \CoreException
*/
public function OperationAjaxCompile(): void
private function Compile(array $aSelectedExtensions, array $aRemovedExtensions, array &$aSelectedModules): void
{
$aParams = [];
//to make setup redirection work, we need to pass complex data structures to setup wizards (ie extension/module lists)
$sSourceEnv = MetaModel::GetEnvironment();
$oRuntimeEnvironment = new RunTimeEnvironment($sSourceEnv, false);
$oParameters = new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME);
$aSelectedModules = json_decode($oParameters->GetParameter('selected_modules', '[]'), true);
$aSelectedExtensions = json_decode($oParameters->GetParameter('selected_extensions', '[]'), true);
$aAddedExtensions = json_decode($oParameters->GetParameter('added_extensions', '[]'), true);
$aRemovedExtensions = json_decode($oParameters->GetParameter('removed_extensions', '[]'), true);
try {
$this->ValidateTransactionId();
$oConfig = MetaModel::GetConfig();
DataFeatureRemovalLog::Debug(
__METHOD__.": extension lists",
null,
['removed_extensions' => $aRemovedExtensions,
'selected_extensions' => $aSelectedExtensions,
'added_extensions' => $aAddedExtensions,
]
);
$sBuildDir = APPROOT."/env-$sSourceEnv-build";
if (! is_dir($sBuildDir)) {
SetupUtils::builddir($sBuildDir);
}
$bIsDirEmpty = count(scandir($sBuildDir)) === 2;
$bForceCompilation = Session::Get('bForceCompilation', false);
$oConfig = MetaModel::GetConfig();
if ($bIsDirEmpty || $bForceCompilation) {
Session::Unset('bForceCompilation');
$this->oRuntimeEnvironment->CopySetupFiles();
if (count($aSelectedModules) === 0) {
$aSelectedExtensions = DataFeatureRemoverExtensionService::GetInstance()->GetExtensionMap()->GetSelectedExtensions($oConfig, array_keys($aAddedExtensions), array_keys($aRemovedExtensions));
$oParameters->SetParameter('selected_extensions', $this->ConvertIntoSetupFormat($aSelectedExtensions));
$aSelectedModules = $this->oRuntimeEnvironment->GetModulesToLoadFromChoices($oConfig, $aSelectedExtensions);
}
$sBuildDir = APPROOT."/env-$sSourceEnv-build";
if (! is_dir($sBuildDir)) {
SetupUtils::builddir($sBuildDir);
DataFeatureRemovalLog::Debug(
__METHOD__,
null,
['sSourceEnv' => $sSourceEnv, 'sBuildDir' => $sBuildDir, 'bIsDirEmpty' => $bIsDirEmpty, glob("$sBuildDir/*")]
);
$this->oRuntimeEnvironment->DoCompile($aSelectedExtensions, $aRemovedExtensions, $aSelectedModules, MFCompiler::CanUseSymbolicLinks());
} else {
if (count($aSelectedModules) === 0) {
$aSelectedModules = $this->oRuntimeEnvironment->GetModulesToLoadFromChoices($oConfig, $aSelectedExtensions);
}
$bIsDirEmpty = count(scandir($sBuildDir)) === 2;
$bForceCompilation = Session::Get('bForceCompilation', false);
if ($bIsDirEmpty || $bForceCompilation) {
$oRuntimeEnvironment->CopySetupFiles();
if (count($aSelectedModules) === 0) {
$oExtensionsMap = \iTopExtensionsMap::GetExtensionsMap($oRuntimeEnvironment->GetBuildEnv());
// Removed modules are stored as static for FindModules()
$oExtensionsMap->DeclareExtensionAsRemoved($aRemovedExtensions);
$aSelectedModules = $oRuntimeEnvironment->GetModulesToLoadFromChoices($oConfig, $aSelectedExtensions);
}
DataFeatureRemovalLog::Debug(
__METHOD__,
null,
['sSourceEnv' => $sSourceEnv, 'sBuildDir' => $sBuildDir, 'bIsDirEmpty' => $bIsDirEmpty, glob("$sBuildDir/*")]
);
$oRuntimeEnvironment->DoCompile($aSelectedExtensions, $aRemovedExtensions, $aSelectedModules, MFCompiler::CanUseSymbolicLinks());
Session::Unset('bForceCompilation');
} else {
if (count($aSelectedModules) === 0) {
$aSelectedModules = $oRuntimeEnvironment->GetModulesToLoadFromChoices($oConfig, $aSelectedExtensions);
}
}
DataFeatureRemovalLog::Debug(__METHOD__.": modules", null, ['selected_modules' => $aSelectedModules]);
} catch (CoreException $e) {
$aParams['error_message'] = $e->getHtmlDesc();
} catch (Exception $e) {
$aParams['error_message'] = $e->getMessage();
}
$aParams['success_message'] = Dict::S('DataFeatureRemoval:Compile:Success');
$aParams['transaction_id'] = utils::GetNewTransactionId();
$oParameters->SetParameter('selected_modules', json_encode($aSelectedModules));
$this->DisplayJSONPage($aParams);
}
public function OperationAjaxRunAudit(): void
{
$oParameters = new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME);
$aParams = [];
$aPageParams = [];
try {
$this->ValidateTransactionId();
$sSourceEnv = MetaModel::GetEnvironment();
$oSetupAudit = new SetupAudit($sSourceEnv);
$aRemovedClasses = array_keys($oSetupAudit->RunDataAudit());
$oParameters->SetParameter('classes', $aRemovedClasses);
new ContextTag(ContextTag::TAG_SETUP);
$aPageParams['sLaunchSetupUrl'] = utils::GetAbsoluteUrlAppRoot().'setup/wizard.php';
$aPageParams['aSetupParams'] = [
"_class" => "WizStepLandingBeforeAudit",
"operation" => "next",
];
$aPageParams['sTransactionId'] = utils::GetNewTransactionId();
$aDeletionPlanSummaryEntities = $this->GetDeletionPlanSummaryEntities($aRemovedClasses);
[$aPageParams['aDeletionPlanSummary'], $aPageParams['iQueryCount'], $aPageParams['bDeletionPossible']] = $this->GetDeletionPlanSummaryTable($aDeletionPlanSummaryEntities);
[$aPageParams['aDeletionExecutionSummary'], $aPageParams['bHasDeletionExecution']] = $this->GetExecutionSummaryTable();
$aPageParams['bDeletionNeeded'] = ($aPageParams['iQueryCount'] > 0);
if (!$aPageParams['bDeletionNeeded']) {
// Erase session setup parameters
SetupUtils::CreateSetupToken();
}
$this->DisplayAjaxPage($aPageParams, 'AjaxRunAudit');
return;
} catch (CoreException $e) {
$aParams['error_message'] = $e->getHtmlDesc();
} catch (Exception $e) {
$aParams['error_message'] = $e->getMessage();
}
$this->DisplayJSONPage($aParams);
}
private function GetExecutionSummaryTable(): array
{
$sName = 'ExecutionSummary';
$this->aDeletionExecutionSummary = unserialize(Session::Get('aDeletionExecutionSummary') ?? serialize([]));
$sName = 'ExcutionSummary';
$aTableData = [];
if (count($this->aDeletionExecutionSummary) === 0) {
@@ -306,15 +275,11 @@ class DataFeatureRemovalController extends Controller
}
private function GetDeletionPlanSummaryEntities(array $aRemovedClasses): array
{
$oDataCleanupService = new StaticDeletionPlan();
return $oDataCleanupService->GetCleanupSummary($aRemovedClasses);
}
private function GetDeletionPlanSummaryTable(array $aDeletionPlanSummaryEntities): array
private function GetDeletionPlanSummaryTable(array $aRemovedClasses): array
{
$sName = 'DeletionPlanSummary';
$oDataCleanupService = new StaticDeletionPlan();
$aDeletionPlanSummaryEntities = $oDataCleanupService->GetCleanupSummary($aRemovedClasses);
$aColumns = ['Class', 'Delete Count' , 'Update Count', 'Issue Count'];
$aRows = [];
$iQueryCount = 0;
@@ -337,10 +302,9 @@ class DataFeatureRemovalController extends Controller
{
$this->ValidateTransactionId();
$this->aDeletionExecutionSummary = unserialize(Session::Get('aDeletionExecutionSummary') ?? serialize([]));
$this->aDeletionExecutionSummary = unserialize(Session::Get('aDeletionExecutionSummary'));
Session::Unset('aDeletionExecutionSummary');
$oParameters = new SessionParameters(SetupUtils::SESSION_PARAMETERS_NAME);
$aClasses = $oParameters->GetParameter('classes', []);
$aClasses = utils::ReadPostedParam('classes', null, utils::ENUM_SANITIZATION_FILTER_CLASS);
$oDataCleanupService = new DataCleanupService();
$aDeletionExecutionSummary = $oDataCleanupService->ExecuteCleanup($aClasses);
@@ -355,7 +319,6 @@ class DataFeatureRemovalController extends Controller
$oSummary->iTotalUpdateCount += $oExecutionSummary->iUpdateCount;
}
Session::Set('aDeletionExecutionSummary', serialize($this->aDeletionExecutionSummary));
$this->OperationAnalysisResult();
}
@@ -381,7 +344,7 @@ class DataFeatureRemovalController extends Controller
'uninstallable' => $oExtension->CanBeUninstalled(),
'remote' => $oExtension->IsRemote(),
'missing' => $oExtension->bRemovedFromDisk,
'dependency_issue' => $oExtension->HasDependencyIssue(),
'cannot-be-installed' => (!$oExtension->bInstalled && count($oExtension->aMissingDependencies) > 0),
],
];
@@ -449,11 +412,12 @@ class DataFeatureRemovalController extends Controller
/**
* Read extensions selected from posted parameters
* @return int Number of extensions to be added or removed
*/
public function ReadExtensionsDiff(): void
public function ReadExtensionsDiff(): int
{
if (!is_null($this->aExtensionsToCheck)) {
return;
return count($this->aExtensionsToCheck['to_be_installed']) + count($this->aExtensionsToCheck['to_be_removed']);
}
$aAvailableExtensions = $this->GetAvailableExtensions();
@@ -461,7 +425,6 @@ class DataFeatureRemovalController extends Controller
$this->aExtensionsToCheck = [
'to_be_installed' => [],
'to_be_removed' => [],
'extensions_not_uninstallable' => [],
];
foreach ($aAvailableExtensions as $sCode => &$aExtensionData) {
if (!isset($aSelectedExtensionsFromUI[$sCode])) {
@@ -475,15 +438,13 @@ class DataFeatureRemovalController extends Controller
if (! $this->bForcedUninstallation && $aExtensionData['extra_flags']['uninstallable']) {
$this->bForcedUninstallation = true;
}
if (false === $aExtensionData['extra_flags']['uninstallable'] || true === $aExtensionData['extra_flags']['remote']) {
$this->aExtensionsToCheck['extensions_not_uninstallable'][] = $sCode;
}
} elseif (!$aExtensionData['installed'] && $aSelectedExtensionsFromUI[$sCode] === 'on') {
$aExtensionData['extra_flags']['selected'] = true;
$sLabel = $aAvailableExtensions[$sCode]['label'];
$this->aExtensionsToCheck['to_be_installed'][$sCode] = $sLabel;
}
}
return count($this->aExtensionsToCheck['to_be_installed']) + count($this->aExtensionsToCheck['to_be_removed']);
}
/**

View File

@@ -13,11 +13,16 @@ class DeletionPlanEntity
public readonly DeletionPlanItem $oUpdate;
public readonly DeletionPlanItem $oIssue;
/**
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oDelete
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oUpdate
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oIssue
*/
public function __construct()
{
$this->oDelete = new DeletionPlanItem();
$this->oUpdate = new DeletionPlanItem();
$this->oIssue = new DeletionPlanItem();
$this->oDelete = $oDelete ?? new DeletionPlanItem();
$this->oUpdate = $oUpdate ?? new DeletionPlanItem();
$this->oIssue = $oIssue ?? new DeletionPlanItem();
}
public function TotalCount(): int

View File

@@ -134,6 +134,10 @@ class DataCleanupService
/** @var DBObject $oDependentObj */
while ($oDependentObj = $oSet->Fetch()) {
$iDeletePropagationOption = $oExtKeyAttDef->GetDeletionPropagationOption();
if ($iDeletePropagationOption == DEL_MANUAL) {
$this->oObjectService->SetIssue(get_class($oDependentObj));
continue;
}
if ($oExtKeyAttDef->IsNullAllowed()) {
// Optional external key, list to reset
@@ -148,12 +152,6 @@ class DataCleanupService
return false;
}
} else {
// Mandatory external key
if ($iDeletePropagationOption == DEL_MANUAL) {
// Cannot be deleted automatically, must be handled manually
$this->oObjectService->SetIssue(get_class($oDependentObj));
continue;
}
// Propagate deletion only if not visited
if ($this->IsVisited($oDependentObj)) {
continue;

View File

@@ -59,11 +59,9 @@ class StaticDeletionPlan
{
foreach ($aClasses as $sClass) {
$oDeletionPlanItem = $this->GetInitialClassDeletionPlan($sClass);
// N°9831 Do not overwrite existing entity as it may already exist for this class if a previously processed class references it (issues/updates already accumulated must be kept)
if (false === array_key_exists($sClass, $this->aDeletionPlan)) {
$this->aDeletionPlan[$sClass] = new DeletionPlanEntity();
}
$this->aDeletionPlan[$sClass]->oDelete->Merge($oDeletionPlanItem);
$oDeletionPlanEntity = new DeletionPlanEntity();
$oDeletionPlanEntity->oDelete->Merge($oDeletionPlanItem);
$this->aDeletionPlan[$sClass] = $oDeletionPlanEntity;
$this->DeletionPlanForReferencingClasses($sClass);
}

View File

@@ -1,34 +0,0 @@
{# @copyright Copyright (C) 2010-2026 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% if bDeletionNeeded %}
{% UIFieldSet Standard {sLegend:'DataFeatureRemoval:DeletionPlan:Title'|dict_s} %}
{% UIDataTable ForForm { sRef:'aDeletionPlanSummary', aColumns:aDeletionPlanSummary.Columns, aData:aDeletionPlanSummary.Data} %}{% EndUIDataTable %}
{% EndUIFieldSet %}
{% if bDeletionPossible %}
{% UIForm Standard {} %}
{% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %}
{% UIInput ForHidden { sName:'operation', sValue:'DoDeletion'} %}
{% UIToolbar ForButton {} %}
{% UIButton ForPrimaryAction {sLabel:'UI:Button:DoDeletion'|dict_s, sName:'btn_deletion', sId:'btn_deletion', bIsSubmit:true} %}
{% EndUIToolbar %}
{% EndUIForm %}
{% else %}
{% UIAlert ForFailure { sTitle: '', sContent: 'DataFeatureRemoval:DeletionPlan:Error:Issues'|dict_s } %}{% EndUIAlert %}
{% endif %}
{% else %}
{% UIAlert ForSuccess { sTitle:'DataFeatureRemoval:CleanupComplete:Title'|dict_s, sContent:'DataFeatureRemoval:CompilComplete'|dict_s } %}{% EndUIAlert %}
{% UIForm Standard {sId:'launch-setup-form', Action:sLaunchSetupUrl, EncType: 'application/x-www-form-urlencoded'} %}
{% for sKey, sValue in aSetupParams %}
{% UIInput ForHidden { sName:sKey, sValue:sValue } %}
{% endfor %}
{% UIButton ForPrimaryAction {sLabel:'UI:Button:Setup'|dict_s, sName:'btn_setup', sId:'btn_setup', bIsSubmit:true} %}
{% EndUIForm %}
{% endif %}
{% if bHasDeletionExecution %}
{% UIFieldSet Standard {sLegend:'DataFeatureRemoval:Execution:Title'|dict_s} %}
{% UIDataTable ForForm { sRef:'aDeletionExecutionSummary', aColumns:aDeletionExecutionSummary.Columns, aData:aDeletionExecutionSummary.Data} %}{% EndUIDataTable %}
{% EndUIFieldSet %}
{% endif %}

View File

@@ -1,49 +1,91 @@
{# @copyright Copyright (C) 2010-2026 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% UIPanel ForInformation { sTitle:'DataFeatureRemoval:Analysis:Title'|dict_s, sSubTitle: 'DataFeatureRemoval:Analysis:Subtitle'|dict_s} %}
{% if null != DataFeatureRemovalErrorMessage %}
<div id="feature_removal_error_msg_div" style="display:block">
{% UIAlert ForFailure { sTitle:'DataFeatureRemoval:Failure:Title'|dict_s, sId: 'feature_removal_error_msg', sContent:DataFeatureRemovalErrorMessage } %}
{% EndUIAlert %}
</div>
{% endif %}
{% UIAlert ForInformation { sTitle: '', sId: 'ajax_compile_in_progress_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}
{{ 'DataFeatureRemoval:Compile:InProgress'|dict_s }}
{% UISpinner Standard { } %}
{% EndUIAlert %}
{% UIAlert ForSuccess { sTitle:'success', sId: 'ajax_compile_success_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}{% EndUIAlert %}
{% UIAlert ForFailure { sTitle:'error', sId: 'ajax_compile_error_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}{% EndUIAlert %}
{% UIAlert ForInformation { sTitle: '', sId: 'ajax_run_audit_in_progress_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}
{{ 'DataFeatureRemoval:RunAudit:InProgress'|dict_s }}
{% UISpinner Standard { } %}
{% EndUIAlert %}
{% UIAlert ForSuccess { sTitle:'DataFeatureRemoval:RunAudit:Success'|dict_s, sId: 'ajax_run_audit_success_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}{% EndUIAlert %}
{% UIAlert ForFailure { sTitle:'error', sId: 'ajax_run_audit_error_msg', AddCSSClasses: ['ibo-is-hidden', 'ibo-is-html-content'] } %}{% EndUIAlert %}
{% if aAvailableExtensionsCount == 0 %}
{% UITitle Neutral { sTitle:'DataFeatureRemoval:NoResult:Title'|dict_s, iLevel:2 } %}{% EndUITitle %}
{% else %}
{% UIPanel Neutral { sTitle:'DataFeatureRemoval:Result:Title'|dict_s, sSubTitle: '' } %}
{% UIMultiColumn Standard {} %}
{% for iColumnIndex in 0..iColumnCount-1 %}
{% UIColumn Standard {} %}
{% for aExtension in aAvailableExtensions[iColumnIndex] %}
{% if aExtension['installed'] %}
{% UIExtensionDetails Installed { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source'], aExtension['code']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% UIExtensionDetails Installed { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% else %}
{% UIExtensionDetails NotInstalled { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source'], aExtension['code']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% UIExtensionDetails NotInstalled { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% endif %}
{% endfor %}
{% EndUIColumn %}
{% endfor %}
{% EndUIMultiColumn %}
{% EndUIPanel %}
{% endif %}
{% else %}
{% UIPanel Neutral { sTitle:'DataFeatureRemoval:Result:Title'|dict_s, sSubTitle: '' } %}
{% UIMultiColumn Standard {} %}
{% for iColumnIndex in 0..iColumnCount-1 %}
{% UIColumn Standard {} %}
{% for aExtension in aAvailableExtensions[iColumnIndex] %}
{% if aExtension['installed'] %}
{% UIExtensionDetails Installed { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% else %}
{% UIExtensionDetails NotInstalled { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% endif %}
{% endfor %}
{% EndUIColumn %}
{% endfor %}
{% EndUIMultiColumn %}
{% EndUIPanel %}
<div id="ajax_run_audit" class="ibo-block"></div>
{% if bDeletionNeeded %}
{% UIFieldSet Standard {sLegend:'DataFeatureRemoval:DeletionPlan:Title'|dict_s} %}
{% UIDataTable ForForm { sRef:'aDeletionPlanSummary', aColumns:aDeletionPlanSummary.Columns, aData:aDeletionPlanSummary.Data} %}{% EndUIDataTable %}
{% EndUIFieldSet %}
{% if bDeletionPossible %}
{% UIForm Standard {} %}
{% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %}
{% UIInput ForHidden { sName:'operation', sValue:'DoDeletion'} %}
{% for sKey, sClass in aClasses %}
{% UIInput ForHidden { sName:"classes[" ~ sKey ~ "]", sValue:sClass } %}
{% endfor %}
{% for sCode, sLabel in aAddedExtensions %}
{% UIInput ForHidden { sName:"aAddedExtensions[" ~ sCode ~ "]", sValue:sLabel } %}
{% endfor %}
{% for sCode, sLabel in aRemovedExtensions %}
{% UIInput ForHidden { sName:"aRemovedExtensions[" ~ sCode ~ "]", sValue:sLabel } %}
{% endfor %}
{% for sInputName, sValue in aHiddenInputs %}
{% UIInput ForHidden { sName:sInputName, sValue:sValue } %}
{% endfor %}
{% UIToolbar ForButton {} %}
{% UIButton ForPrimaryAction {sLabel:'UI:Button:DoDeletion'|dict_s, sName:'btn_deletion', sId:'btn_deletion', bIsSubmit:true} %}
{% EndUIToolbar %}
{% EndUIForm %}
{% else %}
{% UIAlert ForFailure { sContent: 'DataFeatureRemoval:DeletionPlan:Error:Issues'|dict_s } %}{% EndUIAlert %}
{% endif %}
{% else %}
{% UIAlert ForSuccess { sTitle:'DataFeatureRemoval:CleanupComplete:Title'|dict_s, sContent:'DataFeatureRemoval:CompilComplete'|dict_s, sId:value } %}{% EndUIAlert %}
{% UIForm Standard {'sId':'launch-setup-form', Action:sLaunchSetupUrl, 'EncType': 'application/x-www-form-urlencoded'} %}
{% for sKey, sValue in aSetupParams %}
{% UIInput ForHidden { sName:sKey, sValue:sValue } %}
{% endfor %}
{% UIButton ForPrimaryAction {sLabel:'UI:Button:Setup'|dict_s, sName:'btn_setup', sId:'btn_setup', bIsSubmit:true} %}
{% EndUIForm %}
{% endif %}
{% if bHasDeletionExecution %}
{% UIFieldSet Standard {sLegend:'DataFeatureRemoval:Execution:Title'|dict_s} %}
{% UIDataTable ForForm { sRef:'aDeletionExecutionSummary', aColumns:aDeletionExecutionSummary.Columns, aData:aDeletionExecutionSummary.Data} %}{% EndUIDataTable %}
{% EndUIFieldSet %}
{% endif %}
{% endif %}
{% UIForm Standard {} %}
{% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %}

View File

@@ -1,56 +0,0 @@
{# @copyright Copyright (C) 2010-2026 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
function ajax_run_audit(sTransactionId) {
$('#ajax_run_audit_in_progress_msg').removeClass('ibo-is-hidden');
$.post(
'{{ sAjaxURL|raw }}',
{ operation: 'ajax_run_audit', transaction_id: sTransactionId },
function (data) {
$('#ajax_run_audit_in_progress_msg').addClass('ibo-is-hidden');
if (data.error_message) {
$('#ajax_run_audit_error_msg .ibo-alert--title').html(data.error_message);
$('#ajax_run_audit_error_msg').removeClass('ibo-is-hidden');
} else {
$('#ajax_run_audit_success_msg').removeClass('ibo-is-hidden');
$('#ajax_run_audit').html(data);
}
}
)
.fail(function() {
$('#ajax_run_audit_in_progress_msg').addClass('ibo-is-hidden');
$('#ajax_run_audit_error_msg .ibo-alert--title').html('{{ 'DataFeatureRemoval:RunAudit:Error'|dict_s }}');
$('#ajax_run_audit_error_msg').removeClass('ibo-is-hidden');
});
}
function ajax_compile() {
$('#ajax_compile_in_progress_msg').removeClass('ibo-is-hidden');
$.post(
'{{ sAjaxURL|raw }}',
{ operation: 'ajax_compile', transaction_id: '{{ sTransactionId }}' },
function (data) {
$('#ajax_compile_in_progress_msg').addClass('ibo-is-hidden');
if (data.error_message) {
$('#ajax_compile_error_msg .ibo-alert--title').html(data.error_message);
$('#ajax_compile_error_msg').removeClass('ibo-is-hidden');
} else {
$('#ajax_compile_success_msg .ibo-alert--title').html(data.success_message);
$('#ajax_compile_success_msg').removeClass('ibo-is-hidden');
ajax_run_audit(data.transaction_id);
}
},
'json'
)
.fail(function() {
$('#ajax_compile_in_progress_msg').addClass('ibo-is-hidden');
$('#ajax_compile_error_msg .ibo-alert--title').html('{{ 'DataFeatureRemoval:Compile:Error'|dict_s }}');
$('#ajax_compile_error_msg').removeClass('ibo-is-hidden');
});
}
ajax_compile();

View File

@@ -5,6 +5,7 @@
{% UIForm Standard {} %}
{% UIInput ForHidden {sName:'operation', sValue:'AnalysisResult'} %}
{% UIInput ForHidden {sName:'transaction_id', sValue:sTransactionId} %}
{% UIInput ForHidden {sName:'return_application', sValue:'itop'} %}
{% UIPanel Neutral { sTitle:'DataFeatureRemoval:Features:Title'|dict_s, sSubTitle: '' } %}
{% UIMultiColumn Standard {} %}
@@ -12,9 +13,9 @@
{% UIColumn Standard {} %}
{% for aExtension in aAvailableExtensions[iColumnIndex] %}
{% if aExtension['installed'] %}
{% UIExtensionDetails Installed { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source'], aExtension['code']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% UIExtensionDetails Installed { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% else %}
{% UIExtensionDetails NotInstalled { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source'], aExtension['code']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% UIExtensionDetails NotInstalled { sCode : aExtension['code'], sLabel : aExtension['label'], sDescription : aExtension['description'], aMetaData : [aExtension['version'], aExtension['source']], aExtraFlags : aExtension['extra_flags']} %}{% EndUIExtensionDetails %}
{% endif %}
{% endfor %}
{% EndUIColumn %}

View File

@@ -64,7 +64,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'DBTools:LostAttachments:Step:Analyze' => 'Suche zunächst nach verlorenen / falsch platzierten Attachments mittels einer Analyse der Datenbank',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyseergebnisse:',
'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Toll! Alles scheint am richtigen Ort zu sein.',
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Manche Attachments (%1$d) scheinen am falschen Ort zu sein. Werfen Sie einen Blick auf die folgende Liste und wählen Sie diejenigen aus, die Sie gerne verschieben möchten.',
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Manche Attachments scheinen am falschen Ort zu sein. Werfen Sie einen Blick auf die folgende Liste und wählen Sie diejenigen aus, die Sie gerne verschieben möchten.',
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Dateiname',
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Derzeitiger Ort',
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Verschieben nach...',

View File

@@ -16,8 +16,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'DBTools:Class' => 'Класс',
'DBTools:Title' => 'Инструменты обслуживания базы данных',
'DBTools:ErrorsFound' => 'Найденные ошибки',
'DBTools:Indication' => 'Важно: после исправления ошибок в базе данных нужно будет запустить анализ заново, так как появятся новые несоответствия',
'DBTools:Disclaimer' => 'ВНИМАНИЕ: СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ БАЗЫ ДАННЫХ ПЕРЕД ЗАПУСКОМ ИСПРАВЛЕНИЙ',
'DBTools:Indication' => 'Important: after fixing errors in the database you\'ll have to run the analysis again as new inconsistencies will be generated~~',
'DBTools:Disclaimer' => 'DISCLAIMER: BACKUP YOUR DATABASE BEFORE RUNNING THE FIXES~~',
'DBTools:Error' => 'Ошибка',
'DBTools:Count' => 'Количество',
'DBTools:SQLquery' => 'SQL-запрос',
@@ -28,23 +28,23 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'DBTools:ShowIds' => 'Подробный вид',
'DBTools:ShowReport' => 'Отчёт',
'DBTools:IntegrityCheck' => 'Проверка целостности',
'DBTools:FetchCheck' => 'Проверка выборки (долго)',
'DBTools:SelectAnalysisType' => 'Выберите тип анализа',
'DBTools:FetchCheck' => 'Fetch Check (long)~~',
'DBTools:SelectAnalysisType' => 'Select analysis type~~',
'DBTools:Analyze' => 'Анализировать',
'DBTools:Details' => 'Показать подробности',
'DBTools:ShowAll' => 'Показать все ошибки',
'DBTools:Inconsistencies' => 'Несоответствия базы данных',
'DBTools:DetailedErrorTitle' => 'Ошибок (%2$s) в классе %1$s: %3$s',
'DBTools:DetailedErrorLimit' => 'Список ограничен %1$s ошибками',
'DBTools:DetailedErrorTitle' => '%2$s error(s) in class %1$s: %3$s~~',
'DBTools:DetailedErrorLimit' => 'List limited to %1$s errors~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Сиротская запись в `%1$s`, она должна иметь свой аналог в таблице `%2$s`',
'DBAnalyzer-Integrity-InvalidExtKey' => 'Недопустимый внешний ключ %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-MissingExtKey' => 'Отсутствует внешний ключ %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-InvalidValue' => 'Недопустимое значение для %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Некоторые учетные записи пользователей не имеют профилей',
'DBAnalyzer-Integrity-HKInvalid' => 'Повреждён иерархический ключ `%1$s`',
'DBAnalyzer-Fetch-Count-Error' => 'Ошибка количества выборки в `%1$s`: получено записей %2$d / посчитано %3$d',
'DBAnalyzer-Integrity-FinalClass' => 'Поле `%2$s`.`%1$s` должно иметь то же значение, что и `%3$s`.`%1$s`',
'DBAnalyzer-Integrity-RootFinalClass' => 'Поле `%2$s`.`%1$s` должно содержать допустимый класс',
'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`~~',
'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted~~',
'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
]);
// Database Info

View File

@@ -33,10 +33,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'DBTools:Disclaimer' => '免责申明: 在应用修复之前, 应先备份数据库',
'DBTools:Error' => '错误',
'DBTools:Count' => '个数',
'DBTools:SQLquery' => 'SQL 查询',
'DBTools:FixitSQLquery' => '用于修复问题的 SQL 查询(说明)',
'DBTools:SQLresult' => 'SQL 结果',
'DBTools:NoError' => '数据库 OK',
'DBTools:SQLquery' => 'SQL查询',
'DBTools:FixitSQLquery' => '修复问题的SQL查询 (指示)',
'DBTools:SQLresult' => 'SQL结果',
'DBTools:NoError' => '数据库正确',
'DBTools:HideIds' => '错误列表',
'DBTools:ShowIds' => '详细视图',
'DBTools:ShowReport' => '报告',
@@ -73,7 +73,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
// Lost attachments
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'DBTools:LostAttachments' => '附件缺失',
'DBTools:LostAttachments:Disclaimer' => '可以在此搜索数据库中丢失或错放的附件. 请注意, 这不是数据恢复工具, 无法恢复已删除的数据.',
'DBTools:LostAttachments:Disclaimer' => '可以在此搜索数据库中丢失或错放的附件. 这不是数据恢复工具, 无法恢复已删除的数据.',
'DBTools:LostAttachments:Button:Analyze' => '分析',
'DBTools:LostAttachments:Button:Restore' => '还原',

View File

@@ -40,7 +40,7 @@ oder melden Sie dem '.ITOP_APPLICATION_SHORT.' Administrator diesen Fehler, weil
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Attachment' => 'Attachment',
'Class:Attachment+' => 'Datei Text oder Bild , die mit genau einem Objekt verknüpft ist. Sie kann nicht geändert, sondern nur gelöscht werden. Anhänge lassen sich ausschließlich beim Bearbeiten ihres Objekts anlegen.',
'Class:Attachment+' => '',
'Class:Attachment/Attribute:expire' => 'Läuft ab',
'Class:Attachment/Attribute:expire+' => '',
'Class:Attachment/Attribute:temp_id' => 'Temporäre ID',
@@ -84,13 +84,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:TriggerOnAttachmentDownload' => 'Trigger (beim Herunterladen eines Attachment eines Objekts)',
'Class:TriggerOnAttachmentDownload+' => 'Trigger für das Herunterladen des Attachments der angegebenen Klasse oder einer Unterklasse',
'Class:TriggerOnAttachmentCreate' => 'Trigger (bei Erstellung eines Anhangs)',
'Class:TriggerOnAttachmentCreate+' => 'Trigger bei Erstellung eines Anhangs an einem Objekt',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email' => 'Datei an E-Mail anhängen',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email+' => 'Wenn aktiviert, wird die Datei automatisch an die E-Mail angehängt, sobald eine E-Mail-Aktion ausgelöst wird',
'Class:TriggerOnAttachmentDelete' => 'Trigger (bei Löschung eines Anhangs)',
'Class:TriggerOnAttachmentDelete+' => 'Trigger bei Löschung eines Anhangs an einem Objekt',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email' => 'Gelöschte Datei an E-Mail anhängen',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'Wenn aktiviert, wird die gelöschte Datei automatisch an die E-Mail angehängt, sobald eine E-Mail-Aktion ausgelöst wird',
'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Ein klassenunabhängiger Trigger ist für die Klasse Attachment nicht zulässig. Bitte verwenden Sie einen spezifischen Trigger',
'Class:TriggerOnAttachmentCreate' => 'Trigger (on object\'s attachment creation)~~',
'Class:TriggerOnAttachmentCreate+' => 'Trigger on object\'s attachment creation~~',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email' => 'Add file in email~~',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email+' => 'If checked, the file will be automatically attached to the email when an email action is triggered~~',
'Class:TriggerOnAttachmentDelete' => 'Trigger (on object\'s attachment deletion)~~',
'Class:TriggerOnAttachmentDelete+' => 'Trigger on object\'s attachment deletion~~',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email' => 'Add deleted file in email~~',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'If checked, the deleted file will be automatically attached to the email when an email action is triggered~~',
'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Trigger on object is not allowed on class Attachment. Please use specific trigger~~',
]);

View File

@@ -90,6 +90,6 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:TriggerOnAttachmentDelete' => 'Déclencheur sur la suppression d\'une pièce jointe',
'Class:TriggerOnAttachmentDelete+' => 'Déclencheur sur la suppression d\'une pièce jointe d\'un objet',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email' => 'Ajoute le fichier supprimé dans l\'email',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'Si coché, le fichier supprimé sera automatiquement joint à l\'email quand une action email sera lancée',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'If checked, the deleted file will be automatically attached to the email when an email action is triggered~~',
'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Les Triggers sur les objets ne sont pas autorisés sur la classe Attachement. Veuillez utiliser les triggers spécifiques pour cette classe',
]);

View File

@@ -26,12 +26,12 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Attachments:NoAttachment' => 'Нет вложений.',
'Attachments:PreviewNotAvailable' => 'Предварительный просмотр не доступен для этого типа вложений.',
'Attachments:Error:FileTooLarge' => 'Файл слишком велик для загрузки. %1$s',
'Attachments:Error:UploadedFileEmpty' => 'Полученный файл пуст и не может быть прикреплён.
Либо вы загрузили пустой файл,
либо обратитесь к администратору '.ITOP_APPLICATION_SHORT.' — возможно, диск сервера '.ITOP_APPLICATION_SHORT.' переполнен.',
'Attachments:Render:Icons' => 'Отображать как иконки',
'Attachments:Render:Table' => 'Отображать как список',
'UI:Attachments:DropYourFileHint' => 'Перетащите файлы в любое место этой области',
'Attachments:Error:UploadedFileEmpty' => 'The received file is empty and cannot be attached.
Either you have pushed an empty file,
or ask your '.ITOP_APPLICATION_SHORT.' administrator if the '.ITOP_APPLICATION_SHORT.' server disk is full.~~',
'Attachments:Render:Icons' => 'Display as icons~~',
'Attachments:Render:Table' => 'Display as list~~',
'UI:Attachments:DropYourFileHint' => 'Drop files anywhere in this area~~',
]);
//
@@ -62,7 +62,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Attachments:File:Uploader' => 'Пользователь',
'Attachments:File:Size' => 'Размер',
'Attachments:File:MimeType' => 'Тип',
'Attachments:File:DownloadsCount' => 'Скачиваний',
'Attachments:File:DownloadsCount' => 'Downloads~~',
]);
//
// Class: Attachment
@@ -82,15 +82,15 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:TriggerOnAttachmentDownload' => 'Триггер (на скачивание вложения объекта)',
'Class:TriggerOnAttachmentDownload+' => 'Триггер на скачивание вложения объекта заданного класса (или его дочернего класса)',
'Class:TriggerOnAttachmentCreate' => 'Триггер (на создание вложения объекта)',
'Class:TriggerOnAttachmentCreate+' => 'Триггер на создание вложения объекта',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email' => 'Добавлять файл в email',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email+' => 'Если отмечено, файл будет автоматически прикреплён к письму при срабатывании действия email',
'Class:TriggerOnAttachmentDelete' => 'Триггер (на удаление вложения объекта)',
'Class:TriggerOnAttachmentDelete+' => 'Триггер на удаление вложения объекта',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email' => 'Добавлять удалённый файл в email',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'Если отмечено, удалённый файл будет автоматически прикреплён к письму при срабатывании действия email',
'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Триггер на объект не допускается для класса Attachment. Используйте специальный триггер',
'Class:TriggerOnAttachmentDownload' => 'Trigger (on object\'s attachment download)~~',
'Class:TriggerOnAttachmentDownload+' => 'Trigger on object\'s attachment download of [a child class of] the given class~~',
'Class:TriggerOnAttachmentCreate' => 'Trigger (on object\'s attachment creation)~~',
'Class:TriggerOnAttachmentCreate+' => 'Trigger on object\'s attachment creation~~',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email' => 'Add file in email~~',
'Class:TriggerOnAttachmentCreate/Attribute:file_in_email+' => 'If checked, the file will be automatically attached to the email when an email action is triggered~~',
'Class:TriggerOnAttachmentDelete' => 'Trigger (on object\'s attachment deletion)~~',
'Class:TriggerOnAttachmentDelete+' => 'Trigger on object\'s attachment deletion~~',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email' => 'Add deleted file in email~~',
'Class:TriggerOnAttachmentDelete/Attribute:file_in_email+' => 'If checked, the deleted file will be automatically attached to the email when an email action is triggered~~',
'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Trigger on object is not allowed on class Attachment. Please use specific trigger~~',
]);

View File

@@ -20,7 +20,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'bkp-mysqldump-ok' => 'Утилита mysqldump найдена: %1$s',
'bkp-mysqldump-notfound' => 'Утилиту mysqldump найти не удалось: %1$s - пожалуйста, убедитесь в том, что она установлена, и путь до директории с бинарными файлами добавлен в PATH, либо измените параметр mysql_bindir в файле конфигурации.',
'bkp-mysqldump-issue' => 'Утилита mysqldump на может быть запущена (retcode=%1$d) Пожалуйста, убедитесь в том, что она установлена, и путь до директории с бинарными файлами добавлен в PATH, либо измените параметр mysql_bindir в файле конфигурации.',
'bkp-missing-dir' => 'Целевой каталог <code>%1$s</code> не найден',
'bkp-missing-dir' => 'The target directory <code>%1$s</code> could not be found~~',
'bkp-free-disk-space' => '<b>%1$s свободно</b> в <code>%2$s</code>',
'bkp-dir-not-writeable' => '%1$s недоступен для записи',
'bkp-wrong-format-spec' => 'Неправильный формат шаблона названия файлов резервных копий (%1$s). Будет использован шаблон по умолчанию: %2$s',
@@ -38,7 +38,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'bkp-status-backups-manual' => 'Резервное копирование вручную',
'bkp-status-backups-none' => 'Резервных копий ещё нет',
'bkp-next-backup' => 'Следующее резервное копирование будет выполняться в <b>%1$s</b> (%2$s) в %3$s',
'bkp-next-backup-unknown' => 'Следующее резервное копирование пока <b>не запланировано</b>.',
'bkp-next-backup-unknown' => 'The next backup is <b>not scheduled</b> yet.~~',
'bkp-button-backup-now' => 'Запустить сейчас!',
'bkp-button-restore-now' => 'Восстановить!',
'bkp-confirm-backup' => 'Пожалуйста, подтвердите, что вы хотите выполнить резервное копирование прямо сейчас.',

View File

@@ -21,6 +21,7 @@
use Combodo\iTop\Application\UI\Base\Component\Alert\AlertUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\FieldSet\FieldSet;
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Spinner\SpinnerUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
@@ -409,11 +410,8 @@ JS
$sEnvironment = addslashes(utils::GetCurrentEnvironment());
$oBackupModalSpinner = SpinnerUIBlockFactory::MakeMedium(null, $sPleaseWaitBackup);
$sBackupModalSpinnerHtml = BlockRenderer::RenderBlockTemplates($oBackupModalSpinner);
$oRestoreModalSpinner = SpinnerUIBlockFactory::MakeMedium(null, $sPleaseWaitRestore);
$sRestoreModalSpinnerHtml = BlockRenderer::RenderBlockTemplates($oRestoreModalSpinner);
$oModalSpinner = SpinnerUIBlockFactory::MakeMedium(null, $sPleaseWaitBackup);
$sModalSpinnerHtml = BlockRenderer::RenderBlockTemplates($oModalSpinner);
$oP->add_script(
<<<JS
@@ -426,7 +424,7 @@ function LaunchBackupNow()
{
const oModal = CombodoModal.OpenModal({
title: '$sBackUpNow',
content: `$sBackupModalSpinnerHtml`
content: `$sModalSpinnerHtml`
});
var oParams = {};
@@ -452,10 +450,10 @@ function LaunchRestoreNow(sBackupFile, sConfirmationMessage)
{
return;
}
const oModal = CombodoModal.OpenModal({
title: '$sRestore',
content: `$sRestoreModalSpinnerHtml`
content: '<i class="ajax-spin fas fa-sync-alt fa-spin"></i> $sPleaseWaitRestore'
});
$('#backup_success').addClass('ibo-is-hidden');

View File

@@ -13,7 +13,7 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkFunctionalCIToProviderContract' => 'Verknüpfung FunctionalCI/Provider-Vertrag',
'Class:lnkFunctionalCIToProviderContract+' => 'Diese Verknüpfung bildet ab, welche funktionalen CIs über einen Provider-Vertrag von einem externen Unternehmen betreut werden.',
'Class:lnkFunctionalCIToProviderContract+' => '',
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Provider-Vertrag',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
@@ -31,7 +31,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkFunctionalCIToService' => 'Verknüpfung FunctionalCI/Service',
'Class:lnkFunctionalCIToService+' => 'Diese Verknüpfung bildet ab, welche funktionalen CIs zur Erbringung eines Services benötigt werden und deren Ausfall die Qualität des Services beeinträchtigen würde.',
'Class:lnkFunctionalCIToService+' => '',
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Service',
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '',
@@ -49,9 +49,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Provider-Verträge',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'Alle Provider-Verträge zu diesem Konfigurationselement',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:services_list' => 'Services',
'Class:FunctionalCI/Attribute:services_list+' => 'Alle Services, die von diesem Konfigurationselement beeinträchtigt werden',
'Class:FunctionalCI/Attribute:services_list+' => '',
]);
//

View File

@@ -14,7 +14,7 @@
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkFunctionalCIToProviderContract' => 'Связь Функциональная КЕ/Договор с поставщиком',
'Class:lnkFunctionalCIToProviderContract+' => '',
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Договор с поставщиком',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => 'Договор с поставщиком',
@@ -32,7 +32,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkFunctionalCIToService' => 'Связь Функциональная КЕ/Услуга',
'Class:lnkFunctionalCIToService+' => '',
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Услуга',
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '',
'Class:lnkFunctionalCIToService/Attribute:service_name' => 'Услуга',

View File

@@ -13,7 +13,7 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkFunctionalCIToTicket' => 'Verknüpfung FunctionalCI/Ticket',
'Class:lnkFunctionalCIToTicket+' => 'Diese Verknüpfung bildet ab, welche funktionalen CIs von einem Ticket betroffen sind (etwa von einer Benutzeranfrage, einem Incident, einem Change ...)',
'Class:lnkFunctionalCIToTicket+' => '',
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',

View File

@@ -14,7 +14,7 @@
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkFunctionalCIToTicket' => 'Связь Функциональная КЕ/Тикет',
'Class:lnkFunctionalCIToTicket+' => '',
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Тикет',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => 'Тикет',

View File

@@ -19,14 +19,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:NewChange+' => 'Einen neuen Change erstellen',
'Menu:SearchChanges' => 'Suche nach Changes',
'Menu:SearchChanges+' => 'Unter den bestehenden Changes suchen',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Verknüpfungen zu vordefinierten Change-Listen',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes, die auf Annahme warten',
'Menu:WaitingAcceptance+' => 'Changes, die auf Annahme warten',
'Menu:WaitingApproval' => 'Changes, die auf Genehmigung warten',
'Menu:WaitingApproval+' => 'Changes, die auf Genehmigung warten',
'Menu:Changes' => 'Offene Changes',
'Menu:Changes+' => 'Alle Changes, die nicht im Status "geschlossen" sind',
'Menu:Changes+' => 'Offene Changes',
'Menu:MyChanges' => 'Changes, die mir zugewiesen sind',
'Menu:MyChanges+' => 'Changes, die mir zugewiesen sind',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes der letzten sieben Tage nach Kategorie',
@@ -53,7 +53,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Change' => 'Change',
'Class:Change+' => 'Abstrakte Klasse. Ein Ticket-Typ zur Behandlung von Changes, die sich auf erbrachte Services auswirken.',
'Class:Change+' => '',
'Class:Change/Attribute:status' => 'Status',
'Class:Change/Attribute:status+' => '',
'Class:Change/Attribute:status/Value:new' => 'Neu',
@@ -76,7 +76,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Change/Attribute:status/Value:monitored+' => '',
'Class:Change/Attribute:status/Value:closed' => 'Geschlossen',
'Class:Change/Attribute:status/Value:closed+' => '',
'Class:Change/Attribute:reason' => 'Ablehnungsgrund',
'Class:Change/Attribute:reason' => 'Ursache',
'Class:Change/Attribute:reason+' => '',
'Class:Change/Attribute:requestor_id' => 'Antragsteller',
'Class:Change/Attribute:requestor_id+' => '',
@@ -92,7 +92,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Change/Attribute:supervisor_group_name+' => '',
'Class:Change/Attribute:supervisor_id' => 'Aufsicht',
'Class:Change/Attribute:supervisor_id+' => '',
'Class:Change/Attribute:supervisor_email' => 'E-Mail der Aufsicht',
'Class:Change/Attribute:supervisor_email' => 'Aufsicht',
'Class:Change/Attribute:supervisor_email+' => '',
'Class:Change/Attribute:manager_group_id' => 'Manager-Team',
'Class:Change/Attribute:manager_group_id+' => '',
@@ -100,7 +100,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Change/Attribute:manager_group_name+' => '',
'Class:Change/Attribute:manager_id' => 'Manager',
'Class:Change/Attribute:manager_id+' => '',
'Class:Change/Attribute:manager_email' => 'E-Mail des Managers',
'Class:Change/Attribute:manager_email' => 'Manager',
'Class:Change/Attribute:manager_email+' => '',
'Class:Change/Attribute:outage' => 'Ausfall',
'Class:Change/Attribute:outage+' => '',
@@ -156,7 +156,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:RoutineChange' => 'Routine Change',
'Class:RoutineChange+' => 'Standard-Change mit geringem Risiko, ohne zusätzliche Genehmigung, für den ein freigegebenes Verfahren existiert, das angewendet werden muss.',
'Class:RoutineChange+' => '',
'Class:RoutineChange/Stimulus:ev_validate' => 'Validieren',
'Class:RoutineChange/Stimulus:ev_validate+' => '',
'Class:RoutineChange/Stimulus:ev_reject' => 'Ablehnen',
@@ -187,7 +187,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ApprovedChange' => 'Genehmigte Changes',
'Class:ApprovedChange+' => 'Abstrakte Klasse. Normale und Notfall-Changes, die eine Genehmigung erfordern.',
'Class:ApprovedChange+' => '',
'Class:ApprovedChange/Attribute:approval_date' => 'Datum der Genehmigung',
'Class:ApprovedChange/Attribute:approval_date+' => '',
'Class:ApprovedChange/Attribute:approval_comment' => 'Kommentar zur Genehmigung',
@@ -222,7 +222,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NormalChange' => 'Normaler Change',
'Class:NormalChange+' => 'Change-Typ',
'Class:NormalChange+' => '',
'Class:NormalChange/Attribute:acceptance_date' => 'Datum der Annahme',
'Class:NormalChange/Attribute:acceptance_date+' => '',
'Class:NormalChange/Attribute:acceptance_comment' => 'Kommentar zur Annahme',
@@ -257,7 +257,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:EmergencyChange' => 'Emergency Change',
'Class:EmergencyChange+' => 'Change-Ticket für Notfallsituationen (Fehlfunktionen, Sicherheit). Der Genehmigungsprozess ist verkürzt, der Notfall-Change wird so schnell wie möglich umgesetzt.',
'Class:EmergencyChange+' => '',
'Class:EmergencyChange/Stimulus:ev_validate' => 'Validieren',
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
'Class:EmergencyChange/Stimulus:ev_reject' => 'Ablehnen',

View File

@@ -30,12 +30,12 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => 'Changes in planned status',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Changes assigned to me',

View File

@@ -27,24 +27,24 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:Change:Overview' => '概况',
'Menu:Change:Overview+' => '',
'Menu:NewChange' => '新建变更',
'Menu:NewChange+' => '新建变更工单',
'Menu:NewChange+' => '新建变更',
'Menu:SearchChanges' => '搜索变更',
'Menu:SearchChanges+' => '搜索变更工单',
'Menu:Change:Shortcuts' => '变更',
'Menu:Change:Shortcuts+' => '快速访问预定义的变更数据',
'Menu:SearchChanges+' => '搜索变更',
'Menu:Change:Shortcuts' => '快捷方式',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '等待审核的变更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '等待批准的变更',
'Menu:WaitingApproval+' => '处于计划状态的变更',
'Menu:Changes' => '所有待处理的变更',
'Menu:Changes+' => '所有待处理的变更',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => '所有打开的变更',
'Menu:Changes+' => '所有打开的变更',
'Menu:MyChanges' => '分配给我的变更',
'Menu:MyChanges+' => '分配给我的变更 (作为办理人)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => '最近一周的变更 (按类型)',
'UI-ChangeManagementOverview-Last-7-days' => '最近一周的变更 (按数量)',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => '最近一周的变更 (按范围)',
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => '最近一周的变更 (按状态)',
'Tickets:Related:OpenChanges' => '待处理的变更',
'Tickets:Related:OpenChanges' => '打开的变更',
'Tickets:Related:RecentChanges' => '最近的变更 (72小时)',
]);
@@ -132,7 +132,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:Change/Attribute:related_incident_list' => '相关事件',
'Class:Change/Attribute:related_incident_list+' => '此变更相关的所有事件',
'Class:Change/Attribute:child_changes_list' => '子变更',
'Class:Change/Attribute:child_changes_list+' => '此变更相关的变更',
'Class:Change/Attribute:child_changes_list+' => '此变更相关的变更',
'Class:Change/Attribute:parent_id_friendlyname' => '父级变更昵称',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => '变更类型',

View File

@@ -19,14 +19,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:NewChange+' => 'Einen neuen Change erstellen',
'Menu:SearchChanges' => 'Suche nach Changes',
'Menu:SearchChanges+' => 'Unter den bestehenden Changes suchen',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Verknüpfungen zu vordefinierten Change-Listen',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes, die auf Annahme warten',
'Menu:WaitingAcceptance+' => 'Changes, die auf Annahme warten',
'Menu:WaitingApproval' => 'Changes, die auf Genehmigung warten',
'Menu:WaitingApproval+' => 'Changes, die auf Genehmigung warten',
'Menu:Changes' => 'Offene Changes',
'Menu:Changes+' => 'Alle Changes, die nicht im Status "geschlossen" sind',
'Menu:Changes+' => 'Offene Changes',
'Menu:MyChanges' => 'Changes, die mir zugewiesen sind',
'Menu:MyChanges+' => 'Changes, die mir zugewiesen sind',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes der letzten sieben Tage nach Kategorie',
@@ -53,7 +53,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Change' => 'Change',
'Class:Change+' => 'Ein Ticket-Typ zur Behandlung von Changes, die sich auf erbrachte Services auswirken.',
'Class:Change+' => '',
'Class:Change/Attribute:status' => 'Status',
'Class:Change/Attribute:status+' => '',
'Class:Change/Attribute:status/Value:new' => 'Neu',

View File

@@ -30,12 +30,12 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => 'Changes in planned status',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Changes assigned to me',

View File

@@ -26,15 +26,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:Change:Overview' => '概况',
'Menu:Change:Overview+' => '',
'Menu:NewChange' => '新建变更',
'Menu:NewChange+' => '新建变更工单',
'Menu:NewChange+' => '新建变更',
'Menu:SearchChanges' => '搜索变更',
'Menu:SearchChanges+' => '搜索变更工单',
'Menu:Change:Shortcuts' => '变更',
'Menu:Change:Shortcuts+' => '快速访问预定义的变更数据',
'Menu:SearchChanges+' => '搜索变更',
'Menu:Change:Shortcuts' => '快捷方式',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '等待审核的变更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '等待批准的变更',
'Menu:WaitingApproval+' => '处于计划状态的变更',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => '所有打开的变更',
'Menu:Changes+' => '所有打开的变更',
'Menu:MyChanges' => '分配给我的变更',
@@ -43,7 +43,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'UI-ChangeManagementOverview-Last-7-days' => '最近一周的变更 (按数量)',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => '最近一周的变更 (按范围)',
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => '最近一周的变更 (按状态)',
'Tickets:Related:OpenChanges' => '待处理的变更',
'Tickets:Related:OpenChanges' => '打开的变更',
'Tickets:Related:RecentChanges' => '最近的变更 (72小时)',
]);

View File

@@ -1,21 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<Brand alias="Brand" id="1">
<name>HPE</name>
<Brand alias="Brand" id="6">
<name>Acer</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icon-hpe.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d3c
udzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIGlkPSJrYXRtYW5fMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2MzAgNjMwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWhwZS5zdmciIHdpZHRoPSI2MzAiIGhlaWdodD0iNjMwIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzM
iIvPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzIiIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiMwMDAwMDAiIGJvcmRlcm9wYWNpdHk9IjAuMjUiIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIiBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiIHNob3dndWlkZXM9InRydWUiIGlua3NjYXBlOnpvb209IjAuNjkwNTUxNSIgaW5rc2N
hcGU6Y3g9Ii0yMTcuOTQxNzUiIGlua3NjYXBlOmN5PSIyNzUuMTQyNCIgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIiBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzYwIiBpbmtzY2FwZTp3aW5kb3cteD0iMCIgaW5rc2NhcGU6d2luZG93LXk9IjAiIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImthdG1hbl8xIj48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjE5Ny42NjI0NCwzMTQuNDg4NDgiIG9yaWVudGF0a
W9uPSIwLC0xIiBpZD0iZ3VpZGUyIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9InN0eWxlMSI+Cgkuc3Qwe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MzY7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwM0E4ODM7c3Ryb2tlLXdpZHRoOjM2O30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0ibSAxOC41MTE5ODcsNDA1LjkzMDEyIHYgLTE4MCBtIDE
1NC4wMDAwMDMsMTgwIHYgLTE4MCBtIC0xNTQuMDAwMDAzLDg5IEggMTU1LjUxMTk5IG0gOTUsOTEgdiAtMTgwIG0gMCwxOCBoIDEwMiBjIDI3LjYsMCA1MCwyMi40IDUwLDUwIDAsMjcuNiAtMjIuNCw1MCAtNTAsNTAgaCAtMTAyIG0gMjIyLC02NyB2IC0zMyBoIDE1OCIgaWQ9InBhdGgxIi8+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Im0gNjMwLjUxMTk5LDM4Ny45MzAxMiBoIC0xNTggdiAtNzYgaCAxNTgiIGlkPSJwYXRoMiIvPgo8L3N2Zz4K
<filename>icon-acer.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmc6c3ZnIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOnN2Zz0iaH
R0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgaWQ9ImFjZXIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iODMiIGhlaWdodD0iODMiIHZpZXdCb3g9IjAgMCA4MyA4MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc29kaXBvZGk6ZG9jbmFtZT0iaWNvbi1hY2VyLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c3ZnOmRlZnMgaWQ9ImRlZnMxIi8+PHNvZGlwb2RpOm5hbWVkdmlldyBpZD0ibmFtZWR2
aWV3MSIgcGFnZWNvbG9yPSIjZmZmZmZmIiBib3JkZXJjb2xvcj0iIzAwMDAwMCIgYm9yZGVyb3BhY2l0eT0iMC4yNSIgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgc2hvd2d1aWRlcz0idHJ1ZSIgaW5rc2NhcGU6em9vbT0iMTAuNDgzMDcxIiBpbmtzY2FwZTpjeD0iNzUuNzg4ODYiIGlua3NjYXBlOmN5PSIzNS
42NzY1NjgiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJhY2VyIj48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjQwLjMwNzkxOSw0MS4yMjAyMTQiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ3VpZGUxIiBpbmtzY2FwZTpsb2NrZWQ9
ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+Cjxzdmc6cGF0aCBpZD0iYWNlci1sb2dvIiBzdHlsZT0iZmlsbDojODBjMzQzIiBkPSJtIDgyLjg1LDMyLjc2MDg5MyBjIC0wLjI5LC0wLjQyIC0wLjYyLC0wLjcgLTIuMDQsLTAuODEgLTAuMzcsLTAuMDMgLTEuNiwtMC4wNyAtMy42NiwtMC4wNyAtNS40MiwwIC05LjEsMS42NSAtMTAuOTgsNC45MSAwLjUyLC0zLjI4IC0yLjY3LC00LjkyIC05LjU1LC00LjkyIC04LjA5LDAgLTEzLjE0LDMuMjcgLTE1LjE1LDkuOD
EgLTAuNzQsMS45MSAtMC44Miw0LjAyIC0wLjIzLDUuOTggbCAtMS45MSwwLjEzIGMgLTEuNDksMC4xMSAtMy40NiwwLjIyIC00LjY2LDAuMjIgLTIuOTYsMCAtNC44LC0wLjUgLTUuNTEsLTEuNSAtMC42NCwtMC45IC0wLjU3LC0yLjU2IDAuMTcsLTQuOTggMS4yMywtNC4wMiA0LjI5LC01LjgyIDkuMTgsLTUuODIgMi41MywwIDUsMC4yNyA1LDAuMjcgMC4zLC0wLjA1IDAuNTEsLTAuMzMgMC40NiwtMC42NCAwLC0wLjAxIDAsLTAuMDIgLTAuMDEsLTAuMDMgbCAtMC4w
NSwtMC4zOCAtMC4xNywtMS4zNSBjIC0wLjExLC0wLjg5IC0wLjc3LC0xLjQxIC0xLjk3LC0xLjU3IC0xLjEsLTAuMDcgLTEuOTEsLTAuMTMgLTMuMTIsLTAuMTMgaCAtMC4wNyBjIC02LjM5LDAuMDEgLTEwLjg0LDIuMTIgLTEzLjM2LDYuMzIgMC45MiwtNC4yMSAtMi4wNCwtNi4zMiAtOC44NywtNi4zMiAtMi43MywtMC4wNSAtNS40NiwwLjA2IC04LjE4LDAuMzMgLTEuMDMsLTAuMDMgLTEuOTYsMC42MSAtMi4zMywxLjU3IGwgLTAuNTQsMS43MyBjIC0wLjEsMC4zMi
AwLjA1LDAuNDggMC40NiwwLjQ4IGggMC4wMSBjIDAuMywtMC4wNCAxLjQ2LC0wLjE1IDMuNDQsLTAuMzEgMi42MiwtMC4yMSA0LjU1LC0wLjMyIDUuODMsLTAuMzIgMy43NywwIDUuMzUsMC45NSA0Ljc2LDIuODQgLTAuMTEsMC40IC0wLjQ0LDAuNzEgLTAuODUsMC43OCAtMy41NiwwLjU5IC02LjM5LDEuMDIgLTguNDgsMS4yOCAtNS44OSwwLjc1IC05LjI5LDIuNTkgLTEwLjIsNS41MiAtMS4yNSw0LjAzIDEuODksNi4wNCA5LjQ0LDYuMDQgMy4xNywwLjA0IDYuMzQs
LTAuMTggOS40OCwtMC42NSAxLjQ3LC0wLjI1IDIuMjIsLTAuNjMgMi41MSwtMS41OCBsIDEuNDEsLTQuNDkgYyAtMC4xNSw0LjQ5IDIuOTksNi43NSA5LjQxLDYuNzUgMi4yMywwLjA0IDQuNDUsLTAuMDYgNi42NiwtMC4zMSAxLjMyLC0wLjIzIDEuOTUsLTAuNTIgMi4yNCwtMS41MSBsIDAuMjgsLTEuNDEgYyAxLjM3LDIuMTQgNC4zNywzLjIxIDkuMDEsMy4yMSA0Ljg5LDAgNy43NCwtMC4xNCA4LjU1LC0wLjQxIDAuNTcsLTAuMTIgMS4wNCwtMC41MiAxLjI1LC0xLj
A2IDAuMDMsLTAuMDkgMC4wNSwtMC4xOSAwLjA2LC0wLjI4IGwgMC41OSwtMS45MSBjIDAuMSwtMC4zMyAtMC4wNSwtMC40OSAtMC40NSwtMC40OCBsIC0zLjEzLDAuMTUgYyAtMi4wOSwwLjEyIC0zLjcyLDAuMTggLTQuOSwwLjE3IC0xLjU0LDAuMDggLTMuMDgsLTAuMDcgLTQuNTgsLTAuNDYgLTEuMiwtMC40MSAtMS45NCwtMS42MSAtMS43NywtMi44NiBsIDkuOTEsLTEuMjcgYyA0LjQ0LC0wLjU3IDcuNDIsLTEuOTQgOC45MiwtNC4xMiBsIC0zLjM3LDExLjczIGMg
LTAuMDcsMC4xOCAtMC4wNCwwLjM4IDAuMDcsMC41MyAwLjE4LDAuMTcgMC40MSwwLjI1IDAuNjUsMC4yMiBoIDQuMSBjIDAuNDcsMC4wNyAwLjkzLC0wLjIyIDEuMDYsLTAuNjggbCAzLjYyLC0xMi42NyBjIDAuNDgsLTEuNjcgMiwtMi40OCA0LjY3LC0yLjQ4IDIuNDEsMCA0LjIyLDAuMDIgNS4zOCwwLjA3IDAuMDMsMCAwLjA2LDAgMC4wOSwwIDAuMzksMCAwLjc0LC0wLjI2IDAuODQsLTAuNjMgbCAwLjYzLC0xLjc0IGMgMC4xNSwtMC4zIDAuMTIsLTAuNjMgLTAuMD
UsLTAuODkgbSAtNjYuMTIsMTUuMjQgYyAtMS44MywwLjIzIC0zLjY4LDAuMzMgLTUuNTIsMC4zIC00LjE3LDAgLTUuOTksLTAuODQgLTUuNDYsLTIuNTMgMC4zOCwtMS4yMSAxLjQ3LC0xLjk0IDMuMjgsLTIuMTkgbCA5LjQ4LC0xLjI4IHogbSA0My44MywtMTAuMjcgYyAtMC40LDEuMyAtMi4yNSwyLjE5IC01LjU2LDIuNjcgbCAtNy45LDEuMTMgMC4yLC0wLjY1IGMgMC4zOSwtMS43NCAxLjM3LC0zLjI4IDIuNzksLTQuMzcgMS4yLC0wLjc3IDMuMTUsLTEuMTYgNS44NiwtMS4xNiAzLjU2LDAgNS4xLDAuOCA0LjYxLDIuMzgiLz4KPC9zdmc6c3ZnPgo=
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="2">
<Brand alias="Brand" id="2">
<name>Apple</name>
<logo>
<mimetype>image/svg+xml</mimetype>
@@ -27,7 +33,7 @@
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="3">
<Brand alias="Brand" id="3">
<name>Asus</name>
<logo>
<mimetype>image/svg+xml</mimetype>
@@ -51,7 +57,103 @@
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="4">
<Brand alias="Brand" id="10">
<name>Cisco</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icon-cisco.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d
3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiIHZpZXdCb3g9IjAgMCAxMDggMTA4IiByb2xlPSJpbWciIHZlcnNpb24
9IjEuMSIgaWQ9InN2ZzExIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWNpc2NvLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c29kaXBvZGk6bmFtZWR2aWV3IGlkPSJuYW1lZHZpZXcxMSIgcGFnZWNvbG9yPSIjZmZmZmZmIiBib3JkZXJjb2xvcj0iIzAwMDAwMCIgYm9yZGVyb3BhY2l0eT0iMC4yNSIgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiIGlua3NjYXBlO
nBhZ2VjaGVja2VyYm9hcmQ9IjAiIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgc2hvd2d1aWRlcz0idHJ1ZSIgaW5rc2NhcGU6em9vbT0iNi44MjI5NjAyIiBpbmtzY2FwZTpjeD0iNDguODc5MDc4IiBpbmtzY2FwZTpjeT0iNTEuNzM3MDc1IiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjAiIGlua3NjYXBlOndpbmRvdy14PSIwIiBpbmtzY2FwZTp3aW5kb3cteT0iMCIgaW5rc2NhcGU6d2luZG93LW1heGl
taXplZD0iMSIgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMTEiPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iMTYuOTM5NTg3LDUzLjM3NjMwMyIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTExIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PHRpdGxlIGlkPSJmdy1jLWhlYWRlcl9fbG9nby10aXRsZSI+Q2lzY28uY29tIEZyYW5jZTwvdGl0bGU+PGRlZnMgaWQ9ImRlZnMxIj48cGF0aCBkPSJtIDAsMjIuNzY5IGEgM
i4zNDgsMi4zNDggMCAwIDAgMy45MzUsMS41NDUgYyAwLjQzNCwtMC40MDMgMC43LC0wLjk1NSAwLjc0NCwtMS41NDUgdiAtNS4yIGEgMi4zNCwyLjM0IDAgMCAwIC00LjY3OSwwIHYgNS4yIiBpZD0iYmFyX3Nob3J0IiBjbGFzcz0iYmFyIi8+PHBhdGggZD0ibSAxMi45NSwyMi43NjkgYSAyLjM0OSwyLjM0OSAwIDAgMCAyLjM0LDIuMTcxIDIuMzQ2LDIuMzQ2IDAgMCAwIDIuMzM5LC0yLjE3MSBWIDExLjExMiBhIDIuMzQxLDIuMzQxIDAgMCAwIC00LjY3OSwwIFYgMjI
uNzciIGlkPSJiYXJfdGFsbCIgY2xhc3M9ImJhciIvPjxwYXRoIGQ9Im0gMjUuODMyLDI3LjQ2NCBhIDIuMzQ1LDIuMzQ1IDAgMCAwIDQuNjc4LDAgViAyLjI0OSBhIDIuMzQyLDIuMzQyIDAgMCAwIC00LjY3OCwwIHYgMjUuMjE1IiBpZD0iYmFyX2dyYW5kZSIgY2xhc3M9ImJhciIvPjxwYXRoIGQ9Im0gMjQuMDI2LDU2LjI3NyB2IC01LjAwMiBsIC0wLjA5OCwwLjA0MyBhIDkuMjUzLDkuMjUzIDAgMCAxIC0zLjYwNSwwLjkxNSA1LjMwMyw1LjMwMyAwIDAgMSAtMy42M
ywtMS4wNyA0LjY0NCw0LjY0NCAwIDAgMSAtMS41OCwtMi4yNDQgNS4zOTUsNS4zOTUgMCAwIDEgLTAuMTA2LC0zIDQuNiw0LjYgMCAwIDEgMS42MDksLTIuNTY2IDQuODIzLDQuODIzIDAgMCAxIDIuNTI4LC0xLjA5IDguMzMyLDguMzMyIDAgMCAxIDQuNzc0LDAuODk1IGwgMC4xMDgsMC4wNTYgdiAtNS4wMyBsIC0wLjIyOCwtMC4wNjEgYSAxMi43OCwxMi43OCAwIDAgMCAtNC41NTIsLTAuNTk2IDEwLjUzNCwxMC41MzQgMCAwIDAgLTQuMDY1LDAuOTMgOS4yOSw5LjI
5IDAgMCAwIC0zLjMyOSwyLjU3MiAxMC4wMTQsMTAuMDE0IDAgMCAwIC0wLjE4MiwxMi4xOCA5LjU0Niw5LjU0NiAwIDAgMCA1LjI5MiwzLjQwMyBjIDIuMjExLDAuNTM4IDQuNTI4LDAuNDU2IDYuNjk3LC0wLjIzNCBsIDAuMzY3LC0wLjEwMSIgaWQ9ImNpc2NvX2MiLz48L2RlZnM+PGcgZmlsbD0iIzAyYzhmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBpZD0iZzExIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC4wOTQ2Njg1OSwyNi4yMzQ5NDYpIj48dXNlIGhyZWY9IiNja
XNjb19jIiBpZD0idXNlMSIvPjx1c2UgaHJlZj0iI2Npc2NvX2MiIHg9IjQ5LjUiIGlkPSJ1c2UyIi8+PHBhdGggZD0ibSA0MS42OSw1Mi4xMjUgLTAuMDE5LDQuMzA4IDAuMzE1LDAuMDU0IGMgMC45ODksMC4xODUgMS45ODcsMC4zMTMgMi45OSwwLjM4NSBhIDE4LjEsMTguMSAwIDAgMCAyLjY0MiwwLjA1MSBjIDAuODQyLC0wLjA2IDEuNjc1LC0wLjIxOCAyLjQ4LC0wLjQ2OCBhIDYuODYyLDYuODYyIDAgMCAwIDIuNTczLC0xLjM3MSA1LjE5LDUuMTkgMCAwIDAgMS4
0OTgsLTIuMTQ4IDUuOTEyLDUuOTEyIDAgMCAwIC0wLjAzLC00LjMyNCA0Ljg1Miw0Ljg1MiAwIDAgMCAtMS4zNDMsLTEuODYyIDUuNTY4LDUuNTY4IDAgMCAwIC0xLjk3LC0xLjE0NyBsIC0zLjI1LC0xLjIwNiBhIDEuNzQyLDEuNzQyIDAgMCAxIC0wLjg4NywtMC44NDUgMS4xMDcsMS4xMDcgMCAwIDEgMC4wMzYsLTAuOTg2IDEuMjksMS4yOSAwIDAgMSAwLjIxNywtMC4yOTEgMS43NSwxLjc1IDAgMCAxIDAuNDgsLTAuMzQ3IGMgMC4zNjMsLTAuMTggMC43NTUsLTAuM
jkzIDEuMTU4LC0wLjMzNyBhIDYuNzYsNi43NiAwIDAgMSAyLjA3MiwwLjAyMiBjIDAuODEsMC4wODggMS42MTMsMC4yMzEgMi40MDIsMC40MyBsIDAuMTY4LDAuMDM3IHYgLTMuOTc0IGwgLTAuMzEsLTAuMDY3IGEgMjEuMTQsMjEuMTQgMCAwIDAgLTIuNDQ0LC0wLjQzNSAxMi41NDUsMTIuNTQ1IDAgMCAwIC0zLjIxMywtMC4wMTQgNi45NDUsNi45NDUgMCAwIDAgLTMuNjk5LDEuNDg4IDQuOTA4LDQuOTA4IDAgMCAwIC0xLjU4LDIuMTc4IDUuOTg0LDUuOTg0IDAgMCA
wIC0wLjAwMyw0LjA1IGMgMC4yNDIsMC42NSAwLjYzLDEuMjM3IDEuMTM2LDEuNzE0IDAuNDM3LDAuNDIyIDAuOTMyLDAuNzggMS40NywxLjA2NSAwLjcwOCwwLjM4IDEuNDU4LDAuNjc1IDIuMjM1LDAuODc4IDAuMjU3LDAuMDc3IDAuNTEyLDAuMTU4IDAuNzY2LDAuMjQzIGwgMC4zODUsMC4xNDEgMC4xMSwwLjA0NSBjIDAuMzgsMC4xMzYgMC43MjYsMC4zNSAxLjAxOCwwLjYyOCAwLjIwMiwwLjE5IDAuMzU4LDAuNDIzIDAuNDU1LDAuNjgzIDAuMDYsMC4yMzcgMC4wN
jEsMC40ODUgMC4wMDMsMC43MjMgYSAxLjUzNiwxLjUzNiAwIDAgMSAtMC43NDQsMC44OTIgMy42OTEsMy42OTEgMCAwIDEgLTEuMjM5LDAuMzg3IDksOSAwIDAgMSAtMS45MiwwLjA5NyAyMS45NzMsMjEuOTczIDAgMCAxIC0yLjUwNywtMC4zMzQgYyAtMC40MzMsLTAuMDkgLTAuODY0LC0wLjE5IC0xLjI5MSwtMC4zMDMgeiBtIC0xMS4xNDQsNC40ODIgaCA0LjczIFYgMzcuODQ2IGggLTQuNzMgeiBNIDg1LjMwNSw0My4zODYgYSA0LjkzNCw0LjkzNCAwIDEgMSA2LjE
1Nyw3LjcxMSA0LjkzNCw0LjkzNCAwIDAgMSAtNi4xNTcsLTcuNzEgbSAtNi44NjcsMy44NDggYSA5Ljg3LDkuODcgMCAwIDAgMTIuMDAyLDkuNDg1IDkuNjI5LDkuNjI5IDAgMCAwIDMuMTU3LC0xNy43MjkgOS45MzQsOS45MzQgMCAwIDAgLTE1LjE2LDguMjQ0IiBpZD0icGF0aDIiLz48dXNlIGhyZWY9IiNiYXJfc2hvcnQiIHg9IjAiIGlkPSJ1c2UzIi8+PHVzZSBocmVmPSIjYmFyX3RhbGwiIHg9IjAiIGlkPSJ1c2U0Ii8+PHVzZSBocmVmPSIjYmFyX2dyYW5kZSIge
D0iMCIgaWQ9InVzZTUiLz48dXNlIGhyZWY9IiNiYXJfdGFsbCIgeD0iMjUuODc1IiBpZD0idXNlNiIvPjx1c2UgaHJlZj0iI2Jhcl9zaG9ydCIgeD0iNTEuNzUiIGlkPSJ1c2U3Ii8+PHVzZSBocmVmPSIjYmFyX3RhbGwiIHg9IjUxLjc1IiBpZD0idXNlOCIvPjx1c2UgaHJlZj0iI2Jhcl9ncmFuZGUiIHg9IjUxLjc1IiBpZD0idXNlOSIvPjx1c2UgaHJlZj0iI2Jhcl90YWxsIiB4PSI3Ny42MjUiIGlkPSJ1c2UxMCIvPjx1c2UgaHJlZj0iI2Jhcl9zaG9ydCIgeD0iMTAzLjM3NSIgaWQ9InVzZTExIi8+PC9nPjxtZXRhZGF0YSBpZD0ibWV0YWRhdGExMSI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzp0aXRsZT5DaXNjby5jb20gRnJhbmNlPC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="5">
<name>Dell</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-dell.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiMwMjg4ZDEiIGQ9Ik0yNCw0QzEyLjk1Niw0LDQsMTIuOTU2LDQsMjRzOC45NTYsMjAsMjAsMjBzMjAtOC45NTYsMjAtMjBTMzUuMDQ0LDQsMjQs
NHogTTI0LDQxYy05LjM5MSwwLTE3LTcuNjA5LTE3LTE3UzE0LjYwOSw3LDI0LDdzMTcsNy42MDksMTcsMTdTMzMuMzkxLDQxLDI0LDQxeiIvPjxwYXRoIGZpbGw9IiMwMjg4ZDEiIGQ9Ik0zNS42NDEsMjUuNTYzbDIuODQsMC4wMDRsLTAuMDA0LDIuMzk1bC01LjY5MS0wLjAxMmwwLjAxMi04LjE3MmwyLjg1NSwwLjAwNEwzNS42NDEsMjUuNTYzeiBNMjYuMzQsMjUuMTAybC00LjY5OSwzLjY4NGwtNC4yODUtMy4zNzljLTAuNjIxLDEuNDg0LTIuMTA5LDIuNTItMy44Mz
YsMi41MTZsLTMuNjY0LTAuMDA0bDAuMDA4LTguMTcybDMuNjY4LDAuMDA0YzEuOTI2LDAuMDA0LDMuMzA5LDEuMjIzLDMuODI4LDIuNTMxbDQuMjk3LTMuMzY3bDEuNTg2LDEuMjVsLTMuOTM0LDMuMDg2bDAuNzU0LDAuNTk0bDMuOTM0LTMuMDg2bDEuNTksMS4yNTRsLTMuOTM0LDMuMDgybDAuNzUsMC41OTRsMy45NDEtMy4wODJsMC4wMDQtMi44MzZsMi44NTIsMC4wMDRsLTAuMDA4LDUuNzgxbDIuODQsMC4wMDRsLTAuMDA0LDIuMzkxbC01LjY5MS0wLjAwOEwyNi4zNCwyNS4xMDJ6IE0xNS4wMTIsMjMuODRjMC0xLjExMy0wLjczLTEuNzQyLTEuNzctMS43NDJoLTAuNjM3bC0wLjAwNCwzLjQ3N2gwLjYyMUMxNC4xODQsMjUuNTc0LDE1LjAxMiwyNS4wNTEsMTUuMDEyLDIzLjg0Ii8+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="7">
<name>HP Inc</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-hp.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yNCA0QTIwIDIwIDAgMSAwIDI0IDQ0QTIwIDIwIDAgMSAwIDI0IDRaIi8+PHBhdGggZmlsbD0iIzE5NzZkMiIgZD0iTTI0LDQzLj
k5N2MtMC4xOTksMC0wLjY1MiwwLjAwNi0wLjg1LDBsNC0xMC45OTloNS42MjVjMC45ODcsMCwyLjA3MS0wLjc1OSwyLjQwOS0xLjY4Nmw0Ljc0OC0xMi42ODdjMC43MjUtMS45OTUtMC40MTctMy42MjYtMi41MzktMy42MjZoLTcuODA0bC02LjUxOCwxOC4yNTdoLTAuMDAybC0zLjcxMiwxMC4xOThDMTAuNTUsNDEuMzYxLDQsMzMuNDQ1LDQsMjMuOTk5YzAtOS4xNzQsNi4xNzgtMTYuOTA1LDE0LjYtMTkuMjYxbC0zLjgzLDEwLjUyNmgtMC4wMDFMOC4xNSwzMi45OTho
NC4yMzlsNS41NzYtMTQuOTk5aDMuMTg1bC01LjU3NiwxNC45OTlsMy45MTksMC4wMDFsNS40MzgtMTQuMzc0YzAuNzI2LTEuOTk1LTAuNDE2LTMuNjI2LTIuNTM2LTMuNjI2SDE5LjE1bDMuOTUxLTEwLjk3OEMyMy4zOTksNC4wMDgsMjMuNjk5LDQsMjQsNGMxMS4wNDYsMCwyMCw4Ljk1MywyMCwxOS45OTlTMzUuMDQ2LDQzLjk5NywyNCw0My45OTd6IE0zNi4xNSwxNy45OTloLTMuMTg1bC00LjUwOSwxMS45OTloMy4xODVMMzYuMTUsMTcuOTk5eiIvPjwvc3ZnPgo=
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="1">
<name>HPE</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icon-hpe.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d3c
udzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIGlkPSJrYXRtYW5fMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2MzAgNjMwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWhwZS5zdmciIHdpZHRoPSI2MzAiIGhlaWdodD0iNjMwIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzM
iIvPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzIiIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiMwMDAwMDAiIGJvcmRlcm9wYWNpdHk9IjAuMjUiIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIiBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiIHNob3dndWlkZXM9InRydWUiIGlua3NjYXBlOnpvb209IjAuNjkwNTUxNSIgaW5rc2N
hcGU6Y3g9Ii0yMTcuOTQxNzUiIGlua3NjYXBlOmN5PSIyNzUuMTQyNCIgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIiBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzYwIiBpbmtzY2FwZTp3aW5kb3cteD0iMCIgaW5rc2NhcGU6d2luZG93LXk9IjAiIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImthdG1hbl8xIj48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjE5Ny42NjI0NCwzMTQuNDg4NDgiIG9yaWVudGF0a
W9uPSIwLC0xIiBpZD0iZ3VpZGUyIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9InN0eWxlMSI+Cgkuc3Qwe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MzY7fQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwM0E4ODM7c3Ryb2tlLXdpZHRoOjM2O30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0ibSAxOC41MTE5ODcsNDA1LjkzMDEyIHYgLTE4MCBtIDE
1NC4wMDAwMDMsMTgwIHYgLTE4MCBtIC0xNTQuMDAwMDAzLDg5IEggMTU1LjUxMTk5IG0gOTUsOTEgdiAtMTgwIG0gMCwxOCBoIDEwMiBjIDI3LjYsMCA1MCwyMi40IDUwLDUwIDAsMjcuNiAtMjIuNCw1MCAtNTAsNTAgaCAtMTAyIG0gMjIyLC02NyB2IC0zMyBoIDE1OCIgaWQ9InBhdGgxIi8+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Im0gNjMwLjUxMTk5LDM4Ny45MzAxMiBoIC0xNTggdiAtNzYgaCAxNTgiIGlkPSJwYXRoMiIvPgo8L3N2Zz4K
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="8">
<name>IBM</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-ibm.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiMzZjUxYjUiIGQ9Ik00OCAxNkw0OCAxNCA0MC40NjkgMTQgMzkuODA5IDE2ek0zMyAzMUwzMyAyOSAyOSAyOSAyNyAyOSAyNyAzMXpNMzkuNzY2I
DI4TDQwLjUxIDI2IDM0LjUxIDI2IDM1LjI2NiAyOHpNMjkgMjZIMzNWMjhIMjl6TTI5IDIzSDMzVjI1SDI5ek00MiAyOUw0MiAzMSA0OCAzMSA0OCAyOSA0NiAyOXpNMzYuMTgxIDE5TDM1LjUyMSAxNyAyNyAxNyAyNyAxOSAyOSAxOXpNMzcuMTcgMjJMMzYuNTEgMjAgMjkgMjAgMjkgMjJ6TTMzLjM3OCAyM0wzNC4xMzMgMjUgNDAuODgzIDI1IDQxLjYyOCAyM3pNNDIgMjNINDZWMjVINDJ6TTI3IDMySDMzVjM0SDI3ek0zNS4xOTEgMTZMMzQuNTMxIDE0IDI3IDE0IDI
3IDE2ek0zNi43NzYgMzJMMzcuNTMxIDM0IDM4LjI3NiAzMnpNNDIgMzJINDhWMzRINDJ6TTM5LjQ3OSAxN0wzOC44MTkgMTkgNDYgMTkgNDggMTkgNDggMTd6TTM5LjM5MyAyOUwzNS42NDMgMjkgMzYuMzk4IDMxIDM4LjY0OCAzMXpNNDIgMjZINDZWMjhINDJ6TTM4LjQ5IDIwTDM3LjgzIDIyIDQ2IDIyIDQ2IDIwek0wIDE0SDhWMTZIMHpNMCAxN0g4VjE5SDB6TTIgMjBINlYyMkgyek0yIDIzSDZWMjVIMnpNMiAyNkg2VjI4SDJ6TTAgMjlIOFYzMUgwek0wIDMySDhWM
zRIMHpNMTAgMTdIMThWMTlIMTB6TTI0Ljk3NyAxNmMtLjkxMy0xLjIwOC0yLjM0Ny0yLTMuOTc3LTJIMTB2Mmg3LjAyM0gyNC45Nzd6Ii8+PHBhdGggZmlsbD0iIzNmNTFiNSIgZD0iTTI1LjU3OCAxN2gtOS4xMzFDMTYuMTcxIDE3LjYxMyAxNiAxOC4yODMgMTYgMTloMTBDMjYgMTguMjg4IDI1Ljg0NiAxNy42MTMgMjUuNTc4IDE3ek0yMy45NzUgMjNIMTJ2MmgxMS45NzNjLS44MzMtLjYyLTEuODU0LTEtMi45NzMtMUMyMi4xMTkgMjQgMjMuMTQyIDIzLjYyMSAyMy4
5NzUgMjN6TTE3LjAyMyAzMkgxMHYyaDExYzEuNjMgMCAzLjA2NS0uNzkyIDMuOTc3LTJIMTcuMDIzek0xOCAyOWgtMi02djJoNi40NDdIMThoNy41NzhDMjUuODQ2IDMwLjM4NyAyNiAyOS43MTIgMjYgMjlIMTh6TTIxIDIwYzAgMCAwIC4wODMgMCAxcy0xIDEtMSAxaDQuOTc5Yy40NDEtLjU4NC43Ny0xLjI1Ny45MjEtMkgyMXpNMTIgMjBIMTdWMjJIMTJ6Ii8+PGc+PHBhdGggZmlsbD0iIzNmNTFiNSIgZD0iTTIxIDI4aDQuODg1Yy0uMTU2LS43MzgtLjQ2Ny0xLjQxOC0uOTA3LTJIMjBjMCAwIDEgLjE2NyAxIDFTMjEgMjggMjEgMjh6TTEyIDI2SDE3VjI4SDEyeiIvPjwvZz48L3N2Zz4K
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="9">
<name>Lenovo</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-lenovo.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIgeT0iMTYiIGZpbGw9IiNmZjE3NDQiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTEuOTM1LDI2LjA2MmMwLjM3LD
AuMzQxLDAuNzgyLDAuNDUsMS4yMjcsMC40NzhjMC42NDUsMC4wMzksMS4yMTctMC4xNTYsMS43MjQtMC41NDYgYzAuMTI0LTAuMDk2LDAuMTYzLTAuMTI2LDAuMTYzLTAuMTI2czAuNzc3LDAuNjA5LDEuMDk3LDAuODU1Yy0wLjI2MSwwLjMwOS0wLjU2NywwLjUyMS0wLjkwMSwwLjY5MiBjLTEuMTAzLDAuNTY1LTIuMjQ5LDAuNjg3LTMuNDI0LDAuMjY0Yy0xLjM0Ni0wLjQ4NS0yLjEzMS0xLjY5My0yLjA1OS0zLjExN2MwLjA3My0xLjQ0MSwxLjAwNS0yLjYwOCwyLjM5
Mi0yLjk0NCBjMS4wNjQtMC4yNTcsMi4wODQtMC4xNDMsMi45OCwwLjUzOWMwLjY1MSwwLjQ5NiwxLjAwMSwxLjI4LDEuMTQ3LDIuMDY4YzAsMC0yLjU5NSwxLjExLTMuNzk1LDEuNjA2IEMxMi4zMTMsMjUuOTAzLDEyLjE0MSwyNS45NzUsMTEuOTM1LDI2LjA2MnogTTExLjQ3MiwyNC45MjhjMC45NjktMC40MDEsMS45MzUtMC44MDEsMi45MDEtMS4yMDEgYy0wLjMzNC0wLjcyMi0xLjA5Ni0xLjAxNy0xLjg2Ni0wLjc0OEMxMS43NTgsMjMuMjQsMTEuMjgsMjQuMTI0LD
ExLjQ3MiwyNC45Mjh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI3LjA3NiwyNy45MzRjLTEuNjMyLTAuMDE3LTIuOTU2LTEuMDY4LTMuMjYxLTIuNmMtMC4zNy0xLjg1MiwwLjk2OS0zLjYzMywyLjg2LTMuODA4IGMxLjI4MS0wLjExOCwyLjM3MywwLjI1NCwzLjE1NSwxLjNjMS40NTEsMS45NDEsMC4yMiw0Ljc1Ny0yLjE5Myw1LjA1NUMyNy40NSwyNy45MDUsMjcuMjYzLDI3LjkxNywyNy4wNzYsMjcuOTM0eiBNMjcuMTEsMjYuNDM0IGMwLjkyOSwwLjAwMiwxLjYy
Mi0wLjcyMywxLjYyOC0xLjcwNGMwLjAwNi0wLjk3LTAuNzI0LTEuNzQyLTEuNjQ5LTEuNzQ1Yy0wLjkzNi0wLjAwMy0xLjYzMSwwLjczNC0xLjYyOCwxLjcyNiBDMjUuNDY1LDI1LjY3NSwyNi4xODksMjYuNDMyLDI3LjExLDI2LjQzNHoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDAuNjI0LDI3LjkzNGMtMS42MzItMC4wMTctMi45NTYtMS4wNjgtMy4yNjEtMi42Yy0wLjM3LTEuODUyLDAuOTY5LTMuNjMzLDIuODYtMy44MDggYzEuMjgxLTAuMTE4LDIuMzczLDAuMj
U0LDMuMTU1LDEuM2MxLjQ1MSwxLjk0MSwwLjIyLDQuNzU3LTIuMTkzLDUuMDU1QzQwLjk5OCwyNy45MDUsNDAuODExLDI3LjkxNyw0MC42MjQsMjcuOTM0eiBNNDAuNjU4LDI2LjQzNGMwLjkyOSwwLjAwMiwxLjYyMy0wLjcyMywxLjYyOC0xLjcwNGMwLjAwNi0wLjk3LTAuNzI0LTEuNzQyLTEuNjQ5LTEuNzQ1Yy0wLjkzNi0wLjAwMy0xLjYzMSwwLjczNC0xLjYyOCwxLjcyNiBDMzkuMDEzLDI1LjY3NSwzOS43MzcsMjYuNDMyLDQwLjY1OCwyNi40MzR6Ii8+PHBhdGgg
ZmlsbD0iI2ZmZiIgZD0iTTIxLjM3NywyNy45ODdjMC0wLjA5NSwwLjAwMS0yLjU4NywwLTMuNjYzYy0wLjAwMS0wLjc1OS0wLjYwNS0xLjMyNy0xLjQxNC0xLjMzMSBjLTAuNzk0LTAuMDA1LTEuMzgzLDAuNTYtMS4zODQsMS4zMzJjLTAuMDAxLDEuMDc2LDAsMy42NzksMCwzLjY3OWwtMS43NDEsMC4wMDJsMC4wMDctNi4zNzhjMCwwLDEuMTY4LTAuMDE4LDEuNzIyLTAuMDE4IGMwLDAuMjY0LTAuMDA2LDAuODMyLTAuMDA2LDAuODMyczAuMTM4LTAuMTI4LDAuMTgxLT
AuMTcxYzEuMTU3LTEuMTc0LDMuMjI2LTAuOTczLDQuMDMxLDAuMzkxIGMwLjIyMywwLjM3OCwwLjMzOCwwLjc4OSwwLjM0LDEuMjIzYzAuMDA4LDEuMjY0LDAuMDAzLDQuMTA0LDAuMDAzLDQuMTA0UzIxLjk2NCwyNy45ODcsMjEuMzc3LDI3Ljk4N3oiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMzAuMTY0LDIxLjYwOGMwLjY0MiwwLDEuOTY0LDAuMDE1LDEuOTY0LDAuMDE1czEuNDc4LDQuMDI0LDEuNTI2LDQuMTQ5IGMwLjExNS0wLjMxMSwxLjIwOC0zLjI5LDEuNTIx
LTQuMTc0YzAuNjQ2LDAuMDE4LDEuMjg4LDAuMDEsMS45NywwLjAxYy0wLjAyOSwwLjA4NC0yLjU2Miw2LjM5OC0yLjU2Miw2LjM5OGwtMS44NzYtMC4wMDMgQzMxLjkwNSwyNi4wNDIsMzAuMTkxLDIxLjY5MiwzMC4xNjQsMjEuNjA4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01Ljc2NywyNi4zOTNjMC4xMDQsMCwzLjg2OCwwLjAxMSwzLjg2OCwwLjAxMWwtMC4wMDIsMS41ODFMNCwyNy45ODl2LTguMDczaDEuNzcgQzUuNzcsMTkuOTE2LDUuNzY3LDI2LjI4NCw1Ljc2NywyNi4zOTN6Ii8+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="4">
<name>Razer</name>
<logo>
<mimetype>image/svg+xml</mimetype>
@@ -87,109 +189,7 @@
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="5">
<name>Dell</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-dell.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiMwMjg4ZDEiIGQ9Ik0yNCw0QzEyLjk1Niw0LDQsMTIuOTU2LDQsMjRzOC45NTYsMjAsMjAsMjBzMjAtOC45NTYsMjAtMjBTMzUuMDQ0LDQsMjQs
NHogTTI0LDQxYy05LjM5MSwwLTE3LTcuNjA5LTE3LTE3UzE0LjYwOSw3LDI0LDdzMTcsNy42MDksMTcsMTdTMzMuMzkxLDQxLDI0LDQxeiIvPjxwYXRoIGZpbGw9IiMwMjg4ZDEiIGQ9Ik0zNS42NDEsMjUuNTYzbDIuODQsMC4wMDRsLTAuMDA0LDIuMzk1bC01LjY5MS0wLjAxMmwwLjAxMi04LjE3MmwyLjg1NSwwLjAwNEwzNS42NDEsMjUuNTYzeiBNMjYuMzQsMjUuMTAybC00LjY5OSwzLjY4NGwtNC4yODUtMy4zNzljLTAuNjIxLDEuNDg0LTIuMTA5LDIuNTItMy44Mz
YsMi41MTZsLTMuNjY0LTAuMDA0bDAuMDA4LTguMTcybDMuNjY4LDAuMDA0YzEuOTI2LDAuMDA0LDMuMzA5LDEuMjIzLDMuODI4LDIuNTMxbDQuMjk3LTMuMzY3bDEuNTg2LDEuMjVsLTMuOTM0LDMuMDg2bDAuNzU0LDAuNTk0bDMuOTM0LTMuMDg2bDEuNTksMS4yNTRsLTMuOTM0LDMuMDgybDAuNzUsMC41OTRsMy45NDEtMy4wODJsMC4wMDQtMi44MzZsMi44NTIsMC4wMDRsLTAuMDA4LDUuNzgxbDIuODQsMC4wMDRsLTAuMDA0LDIuMzkxbC01LjY5MS0wLjAwOEwyNi4zNCwyNS4xMDJ6IE0xNS4wMTIsMjMuODRjMC0xLjExMy0wLjczLTEuNzQyLTEuNzctMS43NDJoLTAuNjM3bC0wLjAwNCwzLjQ3N2gwLjYyMUMxNC4xODQsMjUuNTc0LDE1LjAxMiwyNS4wNTEsMTUuMDEyLDIzLjg0Ii8+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="6">
<name>Acer</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icon-acer.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmc6c3ZnIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOnN2Zz0iaH
R0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgaWQ9ImFjZXIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iODMiIGhlaWdodD0iODMiIHZpZXdCb3g9IjAgMCA4MyA4MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc29kaXBvZGk6ZG9jbmFtZT0iaWNvbi1hY2VyLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c3ZnOmRlZnMgaWQ9ImRlZnMxIi8+PHNvZGlwb2RpOm5hbWVkdmlldyBpZD0ibmFtZWR2
aWV3MSIgcGFnZWNvbG9yPSIjZmZmZmZmIiBib3JkZXJjb2xvcj0iIzAwMDAwMCIgYm9yZGVyb3BhY2l0eT0iMC4yNSIgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgc2hvd2d1aWRlcz0idHJ1ZSIgaW5rc2NhcGU6em9vbT0iMTAuNDgzMDcxIiBpbmtzY2FwZTpjeD0iNzUuNzg4ODYiIGlua3NjYXBlOmN5PSIzNS
42NzY1NjgiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJhY2VyIj48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjQwLjMwNzkxOSw0MS4yMjAyMTQiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ3VpZGUxIiBpbmtzY2FwZTpsb2NrZWQ9
ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+Cjxzdmc6cGF0aCBpZD0iYWNlci1sb2dvIiBzdHlsZT0iZmlsbDojODBjMzQzIiBkPSJtIDgyLjg1LDMyLjc2MDg5MyBjIC0wLjI5LC0wLjQyIC0wLjYyLC0wLjcgLTIuMDQsLTAuODEgLTAuMzcsLTAuMDMgLTEuNiwtMC4wNyAtMy42NiwtMC4wNyAtNS40MiwwIC05LjEsMS42NSAtMTAuOTgsNC45MSAwLjUyLC0zLjI4IC0yLjY3LC00LjkyIC05LjU1LC00LjkyIC04LjA5LDAgLTEzLjE0LDMuMjcgLTE1LjE1LDkuOD
EgLTAuNzQsMS45MSAtMC44Miw0LjAyIC0wLjIzLDUuOTggbCAtMS45MSwwLjEzIGMgLTEuNDksMC4xMSAtMy40NiwwLjIyIC00LjY2LDAuMjIgLTIuOTYsMCAtNC44LC0wLjUgLTUuNTEsLTEuNSAtMC42NCwtMC45IC0wLjU3LC0yLjU2IDAuMTcsLTQuOTggMS4yMywtNC4wMiA0LjI5LC01LjgyIDkuMTgsLTUuODIgMi41MywwIDUsMC4yNyA1LDAuMjcgMC4zLC0wLjA1IDAuNTEsLTAuMzMgMC40NiwtMC42NCAwLC0wLjAxIDAsLTAuMDIgLTAuMDEsLTAuMDMgbCAtMC4w
NSwtMC4zOCAtMC4xNywtMS4zNSBjIC0wLjExLC0wLjg5IC0wLjc3LC0xLjQxIC0xLjk3LC0xLjU3IC0xLjEsLTAuMDcgLTEuOTEsLTAuMTMgLTMuMTIsLTAuMTMgaCAtMC4wNyBjIC02LjM5LDAuMDEgLTEwLjg0LDIuMTIgLTEzLjM2LDYuMzIgMC45MiwtNC4yMSAtMi4wNCwtNi4zMiAtOC44NywtNi4zMiAtMi43MywtMC4wNSAtNS40NiwwLjA2IC04LjE4LDAuMzMgLTEuMDMsLTAuMDMgLTEuOTYsMC42MSAtMi4zMywxLjU3IGwgLTAuNTQsMS43MyBjIC0wLjEsMC4zMi
AwLjA1LDAuNDggMC40NiwwLjQ4IGggMC4wMSBjIDAuMywtMC4wNCAxLjQ2LC0wLjE1IDMuNDQsLTAuMzEgMi42MiwtMC4yMSA0LjU1LC0wLjMyIDUuODMsLTAuMzIgMy43NywwIDUuMzUsMC45NSA0Ljc2LDIuODQgLTAuMTEsMC40IC0wLjQ0LDAuNzEgLTAuODUsMC43OCAtMy41NiwwLjU5IC02LjM5LDEuMDIgLTguNDgsMS4yOCAtNS44OSwwLjc1IC05LjI5LDIuNTkgLTEwLjIsNS41MiAtMS4yNSw0LjAzIDEuODksNi4wNCA5LjQ0LDYuMDQgMy4xNywwLjA0IDYuMzQs
LTAuMTggOS40OCwtMC42NSAxLjQ3LC0wLjI1IDIuMjIsLTAuNjMgMi41MSwtMS41OCBsIDEuNDEsLTQuNDkgYyAtMC4xNSw0LjQ5IDIuOTksNi43NSA5LjQxLDYuNzUgMi4yMywwLjA0IDQuNDUsLTAuMDYgNi42NiwtMC4zMSAxLjMyLC0wLjIzIDEuOTUsLTAuNTIgMi4yNCwtMS41MSBsIDAuMjgsLTEuNDEgYyAxLjM3LDIuMTQgNC4zNywzLjIxIDkuMDEsMy4yMSA0Ljg5LDAgNy43NCwtMC4xNCA4LjU1LC0wLjQxIDAuNTcsLTAuMTIgMS4wNCwtMC41MiAxLjI1LC0xLj
A2IDAuMDMsLTAuMDkgMC4wNSwtMC4xOSAwLjA2LC0wLjI4IGwgMC41OSwtMS45MSBjIDAuMSwtMC4zMyAtMC4wNSwtMC40OSAtMC40NSwtMC40OCBsIC0zLjEzLDAuMTUgYyAtMi4wOSwwLjEyIC0zLjcyLDAuMTggLTQuOSwwLjE3IC0xLjU0LDAuMDggLTMuMDgsLTAuMDcgLTQuNTgsLTAuNDYgLTEuMiwtMC40MSAtMS45NCwtMS42MSAtMS43NywtMi44NiBsIDkuOTEsLTEuMjcgYyA0LjQ0LC0wLjU3IDcuNDIsLTEuOTQgOC45MiwtNC4xMiBsIC0zLjM3LDExLjczIGMg
LTAuMDcsMC4xOCAtMC4wNCwwLjM4IDAuMDcsMC41MyAwLjE4LDAuMTcgMC40MSwwLjI1IDAuNjUsMC4yMiBoIDQuMSBjIDAuNDcsMC4wNyAwLjkzLC0wLjIyIDEuMDYsLTAuNjggbCAzLjYyLC0xMi42NyBjIDAuNDgsLTEuNjcgMiwtMi40OCA0LjY3LC0yLjQ4IDIuNDEsMCA0LjIyLDAuMDIgNS4zOCwwLjA3IDAuMDMsMCAwLjA2LDAgMC4wOSwwIDAuMzksMCAwLjc0LC0wLjI2IDAuODQsLTAuNjMgbCAwLjYzLC0xLjc0IGMgMC4xNSwtMC4zIDAuMTIsLTAuNjMgLTAuMD
UsLTAuODkgbSAtNjYuMTIsMTUuMjQgYyAtMS44MywwLjIzIC0zLjY4LDAuMzMgLTUuNTIsMC4zIC00LjE3LDAgLTUuOTksLTAuODQgLTUuNDYsLTIuNTMgMC4zOCwtMS4yMSAxLjQ3LC0xLjk0IDMuMjgsLTIuMTkgbCA5LjQ4LC0xLjI4IHogbSA0My44MywtMTAuMjcgYyAtMC40LDEuMyAtMi4yNSwyLjE5IC01LjU2LDIuNjcgbCAtNy45LDEuMTMgMC4yLC0wLjY1IGMgMC4zOSwtMS43NCAxLjM3LC0zLjI4IDIuNzksLTQuMzcgMS4yLC0wLjc3IDMuMTUsLTEuMTYgNS44NiwtMS4xNiAzLjU2LDAgNS4xLDAuOCA0LjYxLDIuMzgiLz4KPC9zdmc6c3ZnPgo=
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="7">
<name>HP Inc</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-hp.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yNCA0QTIwIDIwIDAgMSAwIDI0IDQ0QTIwIDIwIDAgMSAwIDI0IDRaIi8+PHBhdGggZmlsbD0iIzE5NzZkMiIgZD0iTTI0LDQzLj
k5N2MtMC4xOTksMC0wLjY1MiwwLjAwNi0wLjg1LDBsNC0xMC45OTloNS42MjVjMC45ODcsMCwyLjA3MS0wLjc1OSwyLjQwOS0xLjY4Nmw0Ljc0OC0xMi42ODdjMC43MjUtMS45OTUtMC40MTctMy42MjYtMi41MzktMy42MjZoLTcuODA0bC02LjUxOCwxOC4yNTdoLTAuMDAybC0zLjcxMiwxMC4xOThDMTAuNTUsNDEuMzYxLDQsMzMuNDQ1LDQsMjMuOTk5YzAtOS4xNzQsNi4xNzgtMTYuOTA1LDE0LjYtMTkuMjYxbC0zLjgzLDEwLjUyNmgtMC4wMDFMOC4xNSwzMi45OTho
NC4yMzlsNS41NzYtMTQuOTk5aDMuMTg1bC01LjU3NiwxNC45OTlsMy45MTksMC4wMDFsNS40MzgtMTQuMzc0YzAuNzI2LTEuOTk1LTAuNDE2LTMuNjI2LTIuNTM2LTMuNjI2SDE5LjE1bDMuOTUxLTEwLjk3OEMyMy4zOTksNC4wMDgsMjMuNjk5LDQsMjQsNGMxMS4wNDYsMCwyMCw4Ljk1MywyMCwxOS45OTlTMzUuMDQ2LDQzLjk5NywyNCw0My45OTd6IE0zNi4xNSwxNy45OTloLTMuMTg1bC00LjUwOSwxMS45OTloMy4xODVMMzYuMTUsMTcuOTk5eiIvPjwvc3ZnPgo=
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="8">
<name>IBM</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-ibm.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiMzZjUxYjUiIGQ9Ik00OCAxNkw0OCAxNCA0MC40NjkgMTQgMzkuODA5IDE2ek0zMyAzMUwzMyAyOSAyOSAyOSAyNyAyOSAyNyAzMXpNMzkuNzY2I
DI4TDQwLjUxIDI2IDM0LjUxIDI2IDM1LjI2NiAyOHpNMjkgMjZIMzNWMjhIMjl6TTI5IDIzSDMzVjI1SDI5ek00MiAyOUw0MiAzMSA0OCAzMSA0OCAyOSA0NiAyOXpNMzYuMTgxIDE5TDM1LjUyMSAxNyAyNyAxNyAyNyAxOSAyOSAxOXpNMzcuMTcgMjJMMzYuNTEgMjAgMjkgMjAgMjkgMjJ6TTMzLjM3OCAyM0wzNC4xMzMgMjUgNDAuODgzIDI1IDQxLjYyOCAyM3pNNDIgMjNINDZWMjVINDJ6TTI3IDMySDMzVjM0SDI3ek0zNS4xOTEgMTZMMzQuNTMxIDE0IDI3IDE0IDI
3IDE2ek0zNi43NzYgMzJMMzcuNTMxIDM0IDM4LjI3NiAzMnpNNDIgMzJINDhWMzRINDJ6TTM5LjQ3OSAxN0wzOC44MTkgMTkgNDYgMTkgNDggMTkgNDggMTd6TTM5LjM5MyAyOUwzNS42NDMgMjkgMzYuMzk4IDMxIDM4LjY0OCAzMXpNNDIgMjZINDZWMjhINDJ6TTM4LjQ5IDIwTDM3LjgzIDIyIDQ2IDIyIDQ2IDIwek0wIDE0SDhWMTZIMHpNMCAxN0g4VjE5SDB6TTIgMjBINlYyMkgyek0yIDIzSDZWMjVIMnpNMiAyNkg2VjI4SDJ6TTAgMjlIOFYzMUgwek0wIDMySDhWM
zRIMHpNMTAgMTdIMThWMTlIMTB6TTI0Ljk3NyAxNmMtLjkxMy0xLjIwOC0yLjM0Ny0yLTMuOTc3LTJIMTB2Mmg3LjAyM0gyNC45Nzd6Ii8+PHBhdGggZmlsbD0iIzNmNTFiNSIgZD0iTTI1LjU3OCAxN2gtOS4xMzFDMTYuMTcxIDE3LjYxMyAxNiAxOC4yODMgMTYgMTloMTBDMjYgMTguMjg4IDI1Ljg0NiAxNy42MTMgMjUuNTc4IDE3ek0yMy45NzUgMjNIMTJ2MmgxMS45NzNjLS44MzMtLjYyLTEuODU0LTEtMi45NzMtMUMyMi4xMTkgMjQgMjMuMTQyIDIzLjYyMSAyMy4
5NzUgMjN6TTE3LjAyMyAzMkgxMHYyaDExYzEuNjMgMCAzLjA2NS0uNzkyIDMuOTc3LTJIMTcuMDIzek0xOCAyOWgtMi02djJoNi40NDdIMThoNy41NzhDMjUuODQ2IDMwLjM4NyAyNiAyOS43MTIgMjYgMjlIMTh6TTIxIDIwYzAgMCAwIC4wODMgMCAxcy0xIDEtMSAxaDQuOTc5Yy40NDEtLjU4NC43Ny0xLjI1Ny45MjEtMkgyMXpNMTIgMjBIMTdWMjJIMTJ6Ii8+PGc+PHBhdGggZmlsbD0iIzNmNTFiNSIgZD0iTTIxIDI4aDQuODg1Yy0uMTU2LS43MzgtLjQ2Ny0xLjQxOC0uOTA3LTJIMjBjMCAwIDEgLjE2NyAxIDFTMjEgMjggMjEgMjh6TTEyIDI2SDE3VjI4SDEyeiIvPjwvZz48L3N2Zz4K
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="9">
<name>Lenovo</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icons8-lenovo.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIgeT0iMTYiIGZpbGw9IiNmZjE3NDQiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTEuOTM1LDI2LjA2MmMwLjM3LD
AuMzQxLDAuNzgyLDAuNDUsMS4yMjcsMC40NzhjMC42NDUsMC4wMzksMS4yMTctMC4xNTYsMS43MjQtMC41NDYgYzAuMTI0LTAuMDk2LDAuMTYzLTAuMTI2LDAuMTYzLTAuMTI2czAuNzc3LDAuNjA5LDEuMDk3LDAuODU1Yy0wLjI2MSwwLjMwOS0wLjU2NywwLjUyMS0wLjkwMSwwLjY5MiBjLTEuMTAzLDAuNTY1LTIuMjQ5LDAuNjg3LTMuNDI0LDAuMjY0Yy0xLjM0Ni0wLjQ4NS0yLjEzMS0xLjY5My0yLjA1OS0zLjExN2MwLjA3My0xLjQ0MSwxLjAwNS0yLjYwOCwyLjM5
Mi0yLjk0NCBjMS4wNjQtMC4yNTcsMi4wODQtMC4xNDMsMi45OCwwLjUzOWMwLjY1MSwwLjQ5NiwxLjAwMSwxLjI4LDEuMTQ3LDIuMDY4YzAsMC0yLjU5NSwxLjExLTMuNzk1LDEuNjA2IEMxMi4zMTMsMjUuOTAzLDEyLjE0MSwyNS45NzUsMTEuOTM1LDI2LjA2MnogTTExLjQ3MiwyNC45MjhjMC45NjktMC40MDEsMS45MzUtMC44MDEsMi45MDEtMS4yMDEgYy0wLjMzNC0wLjcyMi0xLjA5Ni0xLjAxNy0xLjg2Ni0wLjc0OEMxMS43NTgsMjMuMjQsMTEuMjgsMjQuMTI0LD
ExLjQ3MiwyNC45Mjh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI3LjA3NiwyNy45MzRjLTEuNjMyLTAuMDE3LTIuOTU2LTEuMDY4LTMuMjYxLTIuNmMtMC4zNy0xLjg1MiwwLjk2OS0zLjYzMywyLjg2LTMuODA4IGMxLjI4MS0wLjExOCwyLjM3MywwLjI1NCwzLjE1NSwxLjNjMS40NTEsMS45NDEsMC4yMiw0Ljc1Ny0yLjE5Myw1LjA1NUMyNy40NSwyNy45MDUsMjcuMjYzLDI3LjkxNywyNy4wNzYsMjcuOTM0eiBNMjcuMTEsMjYuNDM0IGMwLjkyOSwwLjAwMiwxLjYy
Mi0wLjcyMywxLjYyOC0xLjcwNGMwLjAwNi0wLjk3LTAuNzI0LTEuNzQyLTEuNjQ5LTEuNzQ1Yy0wLjkzNi0wLjAwMy0xLjYzMSwwLjczNC0xLjYyOCwxLjcyNiBDMjUuNDY1LDI1LjY3NSwyNi4xODksMjYuNDMyLDI3LjExLDI2LjQzNHoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNDAuNjI0LDI3LjkzNGMtMS42MzItMC4wMTctMi45NTYtMS4wNjgtMy4yNjEtMi42Yy0wLjM3LTEuODUyLDAuOTY5LTMuNjMzLDIuODYtMy44MDggYzEuMjgxLTAuMTE4LDIuMzczLDAuMj
U0LDMuMTU1LDEuM2MxLjQ1MSwxLjk0MSwwLjIyLDQuNzU3LTIuMTkzLDUuMDU1QzQwLjk5OCwyNy45MDUsNDAuODExLDI3LjkxNyw0MC42MjQsMjcuOTM0eiBNNDAuNjU4LDI2LjQzNGMwLjkyOSwwLjAwMiwxLjYyMy0wLjcyMywxLjYyOC0xLjcwNGMwLjAwNi0wLjk3LTAuNzI0LTEuNzQyLTEuNjQ5LTEuNzQ1Yy0wLjkzNi0wLjAwMy0xLjYzMSwwLjczNC0xLjYyOCwxLjcyNiBDMzkuMDEzLDI1LjY3NSwzOS43MzcsMjYuNDMyLDQwLjY1OCwyNi40MzR6Ii8+PHBhdGgg
ZmlsbD0iI2ZmZiIgZD0iTTIxLjM3NywyNy45ODdjMC0wLjA5NSwwLjAwMS0yLjU4NywwLTMuNjYzYy0wLjAwMS0wLjc1OS0wLjYwNS0xLjMyNy0xLjQxNC0xLjMzMSBjLTAuNzk0LTAuMDA1LTEuMzgzLDAuNTYtMS4zODQsMS4zMzJjLTAuMDAxLDEuMDc2LDAsMy42NzksMCwzLjY3OWwtMS43NDEsMC4wMDJsMC4wMDctNi4zNzhjMCwwLDEuMTY4LTAuMDE4LDEuNzIyLTAuMDE4IGMwLDAuMjY0LTAuMDA2LDAuODMyLTAuMDA2LDAuODMyczAuMTM4LTAuMTI4LDAuMTgxLT
AuMTcxYzEuMTU3LTEuMTc0LDMuMjI2LTAuOTczLDQuMDMxLDAuMzkxIGMwLjIyMywwLjM3OCwwLjMzOCwwLjc4OSwwLjM0LDEuMjIzYzAuMDA4LDEuMjY0LDAuMDAzLDQuMTA0LDAuMDAzLDQuMTA0UzIxLjk2NCwyNy45ODcsMjEuMzc3LDI3Ljk4N3oiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMzAuMTY0LDIxLjYwOGMwLjY0MiwwLDEuOTY0LDAuMDE1LDEuOTY0LDAuMDE1czEuNDc4LDQuMDI0LDEuNTI2LDQuMTQ5IGMwLjExNS0wLjMxMSwxLjIwOC0zLjI5LDEuNTIx
LTQuMTc0YzAuNjQ2LDAuMDE4LDEuMjg4LDAuMDEsMS45NywwLjAxYy0wLjAyOSwwLjA4NC0yLjU2Miw2LjM5OC0yLjU2Miw2LjM5OGwtMS44NzYtMC4wMDMgQzMxLjkwNSwyNi4wNDIsMzAuMTkxLDIxLjY5MiwzMC4xNjQsMjEuNjA4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01Ljc2NywyNi4zOTNjMC4xMDQsMCwzLjg2OCwwLjAxMSwzLjg2OCwwLjAxMWwtMC4wMDIsMS41ODFMNCwyNy45ODl2LTguMDczaDEuNzcgQzUuNzcsMTkuOTE2LDUuNzY3LDI2LjI4NCw1Ljc2NywyNi4zOTN6Ii8+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="10">
<name>Cisco</name>
<logo>
<mimetype>image/svg+xml</mimetype>
<filename>icon-cisco.svg</filename>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d
3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiIHZpZXdCb3g9IjAgMCAxMDggMTA4IiByb2xlPSJpbWciIHZlcnNpb24
9IjEuMSIgaWQ9InN2ZzExIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWNpc2NvLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c29kaXBvZGk6bmFtZWR2aWV3IGlkPSJuYW1lZHZpZXcxMSIgcGFnZWNvbG9yPSIjZmZmZmZmIiBib3JkZXJjb2xvcj0iIzAwMDAwMCIgYm9yZGVyb3BhY2l0eT0iMC4yNSIgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiIGlua3NjYXBlO
nBhZ2VjaGVja2VyYm9hcmQ9IjAiIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgc2hvd2d1aWRlcz0idHJ1ZSIgaW5rc2NhcGU6em9vbT0iNi44MjI5NjAyIiBpbmtzY2FwZTpjeD0iNDguODc5MDc4IiBpbmtzY2FwZTpjeT0iNTEuNzM3MDc1IiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjAiIGlua3NjYXBlOndpbmRvdy14PSIwIiBpbmtzY2FwZTp3aW5kb3cteT0iMCIgaW5rc2NhcGU6d2luZG93LW1heGl
taXplZD0iMSIgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMTEiPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iMTYuOTM5NTg3LDUzLjM3NjMwMyIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTExIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PHRpdGxlIGlkPSJmdy1jLWhlYWRlcl9fbG9nby10aXRsZSI+Q2lzY28uY29tIEZyYW5jZTwvdGl0bGU+PGRlZnMgaWQ9ImRlZnMxIj48cGF0aCBkPSJtIDAsMjIuNzY5IGEgM
i4zNDgsMi4zNDggMCAwIDAgMy45MzUsMS41NDUgYyAwLjQzNCwtMC40MDMgMC43LC0wLjk1NSAwLjc0NCwtMS41NDUgdiAtNS4yIGEgMi4zNCwyLjM0IDAgMCAwIC00LjY3OSwwIHYgNS4yIiBpZD0iYmFyX3Nob3J0IiBjbGFzcz0iYmFyIi8+PHBhdGggZD0ibSAxMi45NSwyMi43NjkgYSAyLjM0OSwyLjM0OSAwIDAgMCAyLjM0LDIuMTcxIDIuMzQ2LDIuMzQ2IDAgMCAwIDIuMzM5LC0yLjE3MSBWIDExLjExMiBhIDIuMzQxLDIuMzQxIDAgMCAwIC00LjY3OSwwIFYgMjI
uNzciIGlkPSJiYXJfdGFsbCIgY2xhc3M9ImJhciIvPjxwYXRoIGQ9Im0gMjUuODMyLDI3LjQ2NCBhIDIuMzQ1LDIuMzQ1IDAgMCAwIDQuNjc4LDAgViAyLjI0OSBhIDIuMzQyLDIuMzQyIDAgMCAwIC00LjY3OCwwIHYgMjUuMjE1IiBpZD0iYmFyX2dyYW5kZSIgY2xhc3M9ImJhciIvPjxwYXRoIGQ9Im0gMjQuMDI2LDU2LjI3NyB2IC01LjAwMiBsIC0wLjA5OCwwLjA0MyBhIDkuMjUzLDkuMjUzIDAgMCAxIC0zLjYwNSwwLjkxNSA1LjMwMyw1LjMwMyAwIDAgMSAtMy42M
ywtMS4wNyA0LjY0NCw0LjY0NCAwIDAgMSAtMS41OCwtMi4yNDQgNS4zOTUsNS4zOTUgMCAwIDEgLTAuMTA2LC0zIDQuNiw0LjYgMCAwIDEgMS42MDksLTIuNTY2IDQuODIzLDQuODIzIDAgMCAxIDIuNTI4LC0xLjA5IDguMzMyLDguMzMyIDAgMCAxIDQuNzc0LDAuODk1IGwgMC4xMDgsMC4wNTYgdiAtNS4wMyBsIC0wLjIyOCwtMC4wNjEgYSAxMi43OCwxMi43OCAwIDAgMCAtNC41NTIsLTAuNTk2IDEwLjUzNCwxMC41MzQgMCAwIDAgLTQuMDY1LDAuOTMgOS4yOSw5LjI
5IDAgMCAwIC0zLjMyOSwyLjU3MiAxMC4wMTQsMTAuMDE0IDAgMCAwIC0wLjE4MiwxMi4xOCA5LjU0Niw5LjU0NiAwIDAgMCA1LjI5MiwzLjQwMyBjIDIuMjExLDAuNTM4IDQuNTI4LDAuNDU2IDYuNjk3LC0wLjIzNCBsIDAuMzY3LC0wLjEwMSIgaWQ9ImNpc2NvX2MiLz48L2RlZnM+PGcgZmlsbD0iIzAyYzhmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBpZD0iZzExIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC4wOTQ2Njg1OSwyNi4yMzQ5NDYpIj48dXNlIGhyZWY9IiNja
XNjb19jIiBpZD0idXNlMSIvPjx1c2UgaHJlZj0iI2Npc2NvX2MiIHg9IjQ5LjUiIGlkPSJ1c2UyIi8+PHBhdGggZD0ibSA0MS42OSw1Mi4xMjUgLTAuMDE5LDQuMzA4IDAuMzE1LDAuMDU0IGMgMC45ODksMC4xODUgMS45ODcsMC4zMTMgMi45OSwwLjM4NSBhIDE4LjEsMTguMSAwIDAgMCAyLjY0MiwwLjA1MSBjIDAuODQyLC0wLjA2IDEuNjc1LC0wLjIxOCAyLjQ4LC0wLjQ2OCBhIDYuODYyLDYuODYyIDAgMCAwIDIuNTczLC0xLjM3MSA1LjE5LDUuMTkgMCAwIDAgMS4
0OTgsLTIuMTQ4IDUuOTEyLDUuOTEyIDAgMCAwIC0wLjAzLC00LjMyNCA0Ljg1Miw0Ljg1MiAwIDAgMCAtMS4zNDMsLTEuODYyIDUuNTY4LDUuNTY4IDAgMCAwIC0xLjk3LC0xLjE0NyBsIC0zLjI1LC0xLjIwNiBhIDEuNzQyLDEuNzQyIDAgMCAxIC0wLjg4NywtMC44NDUgMS4xMDcsMS4xMDcgMCAwIDEgMC4wMzYsLTAuOTg2IDEuMjksMS4yOSAwIDAgMSAwLjIxNywtMC4yOTEgMS43NSwxLjc1IDAgMCAxIDAuNDgsLTAuMzQ3IGMgMC4zNjMsLTAuMTggMC43NTUsLTAuM
jkzIDEuMTU4LC0wLjMzNyBhIDYuNzYsNi43NiAwIDAgMSAyLjA3MiwwLjAyMiBjIDAuODEsMC4wODggMS42MTMsMC4yMzEgMi40MDIsMC40MyBsIDAuMTY4LDAuMDM3IHYgLTMuOTc0IGwgLTAuMzEsLTAuMDY3IGEgMjEuMTQsMjEuMTQgMCAwIDAgLTIuNDQ0LC0wLjQzNSAxMi41NDUsMTIuNTQ1IDAgMCAwIC0zLjIxMywtMC4wMTQgNi45NDUsNi45NDUgMCAwIDAgLTMuNjk5LDEuNDg4IDQuOTA4LDQuOTA4IDAgMCAwIC0xLjU4LDIuMTc4IDUuOTg0LDUuOTg0IDAgMCA
wIC0wLjAwMyw0LjA1IGMgMC4yNDIsMC42NSAwLjYzLDEuMjM3IDEuMTM2LDEuNzE0IDAuNDM3LDAuNDIyIDAuOTMyLDAuNzggMS40NywxLjA2NSAwLjcwOCwwLjM4IDEuNDU4LDAuNjc1IDIuMjM1LDAuODc4IDAuMjU3LDAuMDc3IDAuNTEyLDAuMTU4IDAuNzY2LDAuMjQzIGwgMC4zODUsMC4xNDEgMC4xMSwwLjA0NSBjIDAuMzgsMC4xMzYgMC43MjYsMC4zNSAxLjAxOCwwLjYyOCAwLjIwMiwwLjE5IDAuMzU4LDAuNDIzIDAuNDU1LDAuNjgzIDAuMDYsMC4yMzcgMC4wN
jEsMC40ODUgMC4wMDMsMC43MjMgYSAxLjUzNiwxLjUzNiAwIDAgMSAtMC43NDQsMC44OTIgMy42OTEsMy42OTEgMCAwIDEgLTEuMjM5LDAuMzg3IDksOSAwIDAgMSAtMS45MiwwLjA5NyAyMS45NzMsMjEuOTczIDAgMCAxIC0yLjUwNywtMC4zMzQgYyAtMC40MzMsLTAuMDkgLTAuODY0LC0wLjE5IC0xLjI5MSwtMC4zMDMgeiBtIC0xMS4xNDQsNC40ODIgaCA0LjczIFYgMzcuODQ2IGggLTQuNzMgeiBNIDg1LjMwNSw0My4zODYgYSA0LjkzNCw0LjkzNCAwIDEgMSA2LjE
1Nyw3LjcxMSA0LjkzNCw0LjkzNCAwIDAgMSAtNi4xNTcsLTcuNzEgbSAtNi44NjcsMy44NDggYSA5Ljg3LDkuODcgMCAwIDAgMTIuMDAyLDkuNDg1IDkuNjI5LDkuNjI5IDAgMCAwIDMuMTU3LC0xNy43MjkgOS45MzQsOS45MzQgMCAwIDAgLTE1LjE2LDguMjQ0IiBpZD0icGF0aDIiLz48dXNlIGhyZWY9IiNiYXJfc2hvcnQiIHg9IjAiIGlkPSJ1c2UzIi8+PHVzZSBocmVmPSIjYmFyX3RhbGwiIHg9IjAiIGlkPSJ1c2U0Ii8+PHVzZSBocmVmPSIjYmFyX2dyYW5kZSIge
D0iMCIgaWQ9InVzZTUiLz48dXNlIGhyZWY9IiNiYXJfdGFsbCIgeD0iMjUuODc1IiBpZD0idXNlNiIvPjx1c2UgaHJlZj0iI2Jhcl9zaG9ydCIgeD0iNTEuNzUiIGlkPSJ1c2U3Ii8+PHVzZSBocmVmPSIjYmFyX3RhbGwiIHg9IjUxLjc1IiBpZD0idXNlOCIvPjx1c2UgaHJlZj0iI2Jhcl9ncmFuZGUiIHg9IjUxLjc1IiBpZD0idXNlOSIvPjx1c2UgaHJlZj0iI2Jhcl90YWxsIiB4PSI3Ny42MjUiIGlkPSJ1c2UxMCIvPjx1c2UgaHJlZj0iI2Jhcl9zaG9ydCIgeD0iMTAzLjM3NSIgaWQ9InVzZTExIi8+PC9nPjxtZXRhZGF0YSBpZD0ibWV0YWRhdGExMSI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzp0aXRsZT5DaXNjby5jb20gRnJhbmNlPC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PC9zdmc+Cg==
</data>
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="11">
<Brand alias="Brand" id="11">
<name>Samsung</name>
<logo>
<mimetype>image/svg+xml</mimetype>
@@ -210,7 +210,7 @@
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="12">
<Brand alias="Brand" id="12">
<name>Sony</name>
<logo>
<mimetype>image/svg+xml</mimetype>
@@ -238,7 +238,7 @@
<downloads_count>0</downloads_count>
</logo>
</Brand>
<Brand alias="Brand" id="13">
<Brand alias="Brand" id="13">
<name>Toshiba</name>
<logo>
<mimetype>image/svg+xml</mimetype>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<NetworkDeviceType alias="NetworkDeviceType" id="10">
<name>Router</name>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="11">
<name>Switch</name>
</NetworkDeviceType>
</Set>

View File

@@ -16,7 +16,7 @@
<end_of_warranty></end_of_warranty>
<rack_id>0</rack_id>
<enclosure_id>0</enclosure_id>
<nb_u>2</nb_u>
<nb_u></nb_u>
<managementip></managementip>
<powerA_id>0</powerA_id>
<powerB_id>0</powerB_id>
@@ -40,9 +40,9 @@
<asset_number></asset_number>
<purchase_date></purchase_date>
<end_of_warranty></end_of_warranty>
<rack_id></rack_id>
<rack_id>0</rack_id>
<enclosure_id>0</enclosure_id>
<nb_u>1</nb_u>
<nb_u></nb_u>
<managementip></managementip>
<powerA_id>0</powerA_id>
<powerB_id>0</powerB_id>
@@ -59,16 +59,16 @@
<business_criticity>low</business_criticity>
<move2production></move2production>
<serialnumber></serialnumber>
<location_id>2</location_id>
<location_id>0</location_id>
<status>production</status>
<brand_id>1</brand_id>
<model_id>4</model_id>
<asset_number></asset_number>
<purchase_date></purchase_date>
<end_of_warranty></end_of_warranty>
<rack_id></rack_id>
<rack_id>0</rack_id>
<enclosure_id>0</enclosure_id>
<nb_u>2</nb_u>
<nb_u></nb_u>
<managementip></managementip>
<powerA_id>0</powerA_id>
<powerB_id>0</powerB_id>
@@ -85,16 +85,16 @@
<business_criticity>low</business_criticity>
<move2production></move2production>
<serialnumber>US3215687014</serialnumber>
<location_id>2</location_id>
<location_id>0</location_id>
<status>production</status>
<brand_id>1</brand_id>
<model_id>4</model_id>
<asset_number></asset_number>
<purchase_date>2021-07-30</purchase_date>
<end_of_warranty>2025-07-29</end_of_warranty>
<rack_id></rack_id>
<rack_id>0</rack_id>
<enclosure_id>0</enclosure_id>
<nb_u>2</nb_u>
<nb_u></nb_u>
<managementip>10.10.24.2</managementip>
<powerA_id>0</powerA_id>
<powerB_id>0</powerB_id>

View File

@@ -68,7 +68,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkContactToFunctionalCI' => 'Verknüpfung Kontakt/FunctionalCI',
'Class:lnkContactToFunctionalCI+' => 'Verwaltet Kontakte, die mit funktionalen CIs verknüpft sind. Das kann ein Team sein, das für das Gerät verantwortlich ist und dem zugehörige Tickets zugewiesen werden, oder die Person, der ein einzelnes Gerät wie ein PC oder ein Telefon zugeordnet ist, um die Inventarisierung zu pflegen.',
'Class:lnkContactToFunctionalCI+' => '',
'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => 'FunctionalCI',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id+' => '',
@@ -86,7 +86,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:FunctionalCI' => 'Funktionales CI',
'Class:FunctionalCI+' => 'Abstrakte Klasse, die die meisten für die CMDB verwendeten Arten von Konfigurationselementen zusammenfasst.',
'Class:FunctionalCI+' => '',
'Class:FunctionalCI/Attribute:name' => 'Name',
'Class:FunctionalCI/Attribute:name+' => '',
'Class:FunctionalCI/Attribute:description' => 'Beschreibung',
@@ -106,7 +106,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:FunctionalCI/Attribute:move2production' => 'Go-Live-Datum',
'Class:FunctionalCI/Attribute:move2production+' => 'Datum, an dem in Produktivbetrieb gegangen wird/wurde',
'Class:FunctionalCI/Attribute:contacts_list' => 'Kontakte',
'Class:FunctionalCI/Attribute:contacts_list+' => 'Alle Kontakte zu diesem Konfigurationselement',
'Class:FunctionalCI/Attribute:contacts_list+' => 'Alle Kontakte dieses CIs',
'Class:FunctionalCI/Attribute:documents_list' => 'Dokumente',
'Class:FunctionalCI/Attribute:documents_list+' => 'Alle Dokumente, die mit diesem CI verknüpft sind',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Anwendungslösungen',
@@ -125,7 +125,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PhysicalDevice' => 'Physisches Gerät',
'Class:PhysicalDevice+' => 'Abstrakte Klasse, die die physischen Arten von Konfigurationselementen zusammenfasst. Ein physisches Gerät kann einem Standort zugeordnet werden und hat üblicherweise eine Marke und ein Modell.',
'Class:PhysicalDevice+' => '',
'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s',
'Class:PhysicalDevice/Attribute:serialnumber' => 'Seriennummer',
'Class:PhysicalDevice/Attribute:serialnumber+' => '',
@@ -136,7 +136,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PhysicalDevice/Attribute:status' => 'Status',
'Class:PhysicalDevice/Attribute:status+' => '',
'Class:PhysicalDevice/Attribute:status/Value:implementation' => 'Implementierung',
'Class:PhysicalDevice/Attribute:status/Value:implementation+' => 'Implementierung',
'Class:PhysicalDevice/Attribute:status/Value:implementation+' => '',
'Class:PhysicalDevice/Attribute:status/Value:obsolete' => 'Obsolet',
'Class:PhysicalDevice/Attribute:status/Value:obsolete+' => '',
'Class:PhysicalDevice/Attribute:status/Value:production' => 'Produktiv',
@@ -165,7 +165,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Rack' => 'Rack',
'Class:Rack+' => 'Ein physischer Schrank für Datacenter-Geräte und Enclosures.',
'Class:Rack+' => '',
'Class:Rack/ComplementaryName' => '%1$s - %2$s',
'Class:Rack/Attribute:nb_u' => 'Höheneinheiten',
'Class:Rack/Attribute:nb_u+' => '',
@@ -181,7 +181,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:TelephonyCI' => 'Telefonie-CI',
'Class:TelephonyCI+' => 'Abstrakte Klasse, die Telefoniegeräte zusammenfasst',
'Class:TelephonyCI+' => '',
'Class:TelephonyCI/Attribute:phonenumber' => 'Telefonnummer',
'Class:TelephonyCI/Attribute:phonenumber+' => '',
]);
@@ -192,7 +192,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Phone' => 'Telefon',
'Class:Phone+' => 'Endanwendergerät. Kabelgebundenes Telefon',
'Class:Phone+' => '',
]);
//
@@ -201,7 +201,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:MobilePhone' => 'Mobiltelefon',
'Class:MobilePhone+' => 'Endanwendergerät. Schnurloses Telefon',
'Class:MobilePhone+' => '',
'Class:MobilePhone/Attribute:imei' => 'IMEI',
'Class:MobilePhone/Attribute:imei+' => '',
'Class:MobilePhone/Attribute:hw_pin' => 'Hardware-PIN',
@@ -214,7 +214,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:IPPhone' => 'IP-Telefon',
'Class:IPPhone+' => 'Physisches Gerät für Telefonie, an ein Netzwerk angeschlossen',
'Class:IPPhone+' => '',
]);
//
@@ -223,7 +223,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => 'Endanwendergerät. Zum Beispiel iPad, Galaxy Note/Tab, Nexus, Kindle ...',
'Class:Tablet+' => '',
]);
//
@@ -232,7 +232,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ConnectableCI' => 'Verknüpfbares CI',
'Class:ConnectableCI+' => 'Physisches Gerät, das an ein Netzwerk angeschlossen werden kann.',
'Class:ConnectableCI+' => 'Physisches CI',
'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Netzwerkgeräte',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Alle Netzwerkgeräte, die mit diesem Gerät verbunden sind',
@@ -246,7 +246,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:DatacenterDevice' => 'Datacenter-Gerät',
'Class:DatacenterDevice+' => 'Ein physisches Gerät, das an das Netzwerk angeschlossen und in einem Rechenzentrum installiert ist, üblicherweise in einem Rack oder einem Enclosure. Dazu zählen Server, Netzwerk-Geräte, Storage-Systeme, SAN-Switches, Tape-Libraries, NAS-Geräte und Ähnliches.',
'Class:DatacenterDevice+' => '',
'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s',
'Class:DatacenterDevice/Attribute:rack_id' => 'Rack',
'Class:DatacenterDevice/Attribute:rack_id+' => '',
@@ -273,9 +273,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
'Class:DatacenterDevice/Attribute:san_list+' => 'Alle mit diesem Gerät verbundenen SAN-Switches',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundanz',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'Das Gerät %2$s läuft, wenn mindestens eine der Stromversorgungen (A oder B) läuft.',
'Class:DatacenterDevice/Attribute:redundancy/disabled' => 'Das Gerät %2$s läuft, wenn alle seine Stromversorgungen laufen.',
'Class:DatacenterDevice/Attribute:redundancy/percent' => 'Das Gerät %2$s läuft, wenn mindestens %1$s %% seiner Stromversorgungen laufen.',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'Das Gerät läuft, wenn mindestens eine der Stromversorgungen (A oder B) läuft.',
'Class:DatacenterDevice/Attribute:redundancy/disabled' => 'Das Gerät läuft, wenn alle seine Stromversorgungen laufen.',
'Class:DatacenterDevice/Attribute:redundancy/percent' => 'Das Gerät läuft, wenn mindestens %1$s %% seiner Stromversorgungen laufen.',
]);
//
@@ -284,7 +284,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NetworkDevice' => 'Netzwerk-Gerät',
'Class:NetworkDevice+' => 'Jede Art von Netzwerk-Gerät: Router, Switch, Hub, Load Balancer, Firewall ...',
'Class:NetworkDevice+' => '',
'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s',
'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Netzwerktyp',
'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '',
@@ -306,7 +306,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Server' => 'Server',
'Class:Server+' => 'Datacenter-Gerät, das den Zugriff auf zentrale Ressourcen oder Services steuert. Es enthält eine OS-Version, unter der Software-Instanzen laufen.',
'Class:Server+' => '',
'Class:Server/ComplementaryName' => '%1$s - %2$s',
'Class:Server/Attribute:osfamily_id' => 'OS Familie',
'Class:Server/Attribute:osfamily_id+' => '',
@@ -334,7 +334,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:StorageSystem' => 'Storage-System',
'Class:StorageSystem+' => 'Storage-System, das entweder an ein SAN oder an ein Ethernet-Netzwerk angebunden werden kann. Die logische Speichereinheit, die ein Storage-System verwaltet, ist ein logisches Volume.',
'Class:StorageSystem+' => '',
'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Logische Volumes',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Alle logischen Volumes in diesem Storage-System',
@@ -346,7 +346,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:SANSwitch' => 'SAN-Switch',
'Class:SANSwitch+' => 'Ein SAN-Switch ist ein Netzwerk-Switch, der das in Speichernetzwerken verwendete Fibre-Channel-Protokoll unterstützt. Er ist ein Datacenter-Gerät.',
'Class:SANSwitch+' => '',
'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Geräte',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Alle Geräte, die mit diesem SAN-Switche verbundenen sind',
@@ -358,7 +358,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:TapeLibrary' => 'Tape-Library',
'Class:TapeLibrary+' => 'Datacenter-Gerät, das mehrere Magnetbänder (Tapes oder Kassetten) aufnimmt. Tape-Libraries werden zur Datensicherung oder Archivierung eingesetzt.',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s',
'Class:TapeLibrary/Attribute:tapes_list' => 'Tapes',
'Class:TapeLibrary/Attribute:tapes_list+' => 'Alle Tapes in der Tape-Library',
@@ -370,7 +370,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NAS' => 'NAS',
'Class:NAS+' => 'Speichergerät mit hoher Kapazität, das in einem Rechenzentrum eingebaut und an ein Netzwerk angeschlossen ist. Ein NAS (Network Attached Storage) beherbergt NAS-Dateisysteme.',
'Class:NAS+' => '',
'Class:NAS/ComplementaryName' => '%1$s - %2$s',
'Class:NAS/Attribute:nasfilesystem_list' => 'Dateisysteme',
'Class:NAS/Attribute:nasfilesystem_list+' => 'Alle Dateisysteme in diesem NAS',
@@ -382,7 +382,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PC' => 'PC',
'Class:PC+' => 'Verknüpfbares CI. Ein PC ist ein physisches Gerät Desktop oder Laptop , auf dem ein Betriebssystem läuft und das zur Ausführung von Software-Instanzen vorgesehen ist.',
'Class:PC+' => '',
'Class:PC/ComplementaryName' => '%1$s - %2$s',
'Class:PC/Attribute:osfamily_id' => 'OS-Familie',
'Class:PC/Attribute:osfamily_id+' => '',
@@ -410,7 +410,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Printer' => 'Drucker',
'Class:Printer+' => 'Verknüpfbares CI. Physisches Gerät, das entweder an das Netzwerk oder an einen PC angeschlossen ist.',
'Class:Printer+' => '',
'Class:Printer/ComplementaryName' => '%1$s - %2$s',
]);
@@ -420,7 +420,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PowerConnection' => 'Stromverbindung',
'Class:PowerConnection+' => 'Abstrakte Klasse, die physische Geräte zur Stromversorgung zusammenfasst.',
'Class:PowerConnection+' => '',
'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s',
]);
@@ -430,7 +430,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PowerSource' => 'Stromquelle',
'Class:PowerSource+' => 'Physische Stromverbindung. Wird im Rechenzentrum verwendet, um jede Art von Stromquelle zu dokumentieren (Haupteinspeisung, Sicherung ...), die keine PDU ist.',
'Class:PowerSource+' => '',
'Class:PowerSource/ComplementaryName' => '%1$s - %2$s',
'Class:PowerSource/Attribute:pdus_list' => 'PDUs',
'Class:PowerSource/Attribute:pdus_list+' => 'Alle PDUs, die diese Stromquelle nutzen',
@@ -442,7 +442,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PDU' => 'PDU',
'Class:PDU+' => 'Stromverbindung. Eine PDU (Power Distribution Unit) ist ein Gerät mit mehreren Ausgängen zur Verteilung elektrischer Energie, insbesondere an Racks mit Rechnern und Netzwerktechnik in einem Rechenzentrum.',
'Class:PDU+' => '',
'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s',
'Class:PDU/Attribute:rack_id' => 'Rack',
'Class:PDU/Attribute:rack_id+' => '',
@@ -460,8 +460,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Peripheral' => 'Peripheriegerät',
'Class:Peripheral+' => 'Physisches Gerät zur Dokumentation beliebiger Computer-Peripherie.
Zum Beispiel: externe Festplatten, Scanner, Eingabegeräte (Trackballs, Barcode-Scanner) und Ähnliches ...',
'Class:Peripheral+' => '',
'Class:Peripheral/ComplementaryName' => '%1$s - %2$s',
]);
@@ -471,7 +470,7 @@ Zum Beispiel: externe Festplatten, Scanner, Eingabegeräte (Trackballs, Barcode-
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Enclosure' => 'Enclosure',
'Class:Enclosure+' => 'Ein offenes Chassis, das in ein Rack eingebaut wird und IT-Technik wie Blade-Server oder Netzwerk-Geräte aufnimmt.',
'Class:Enclosure+' => '',
'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s',
'Class:Enclosure/Attribute:rack_id' => 'Rack',
'Class:Enclosure/Attribute:rack_id+' => '',
@@ -489,13 +488,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ApplicationSolution' => 'Anwendungslösung',
'Class:ApplicationSolution+' => 'Anwendungslösungen beschreiben komplexe Anwendungen, die aus mehreren Basiskomponenten bestehen oder von ihnen abhängen. Die wesentliche Information einer Anwendungslösung ist die Liste ihrer Beziehungen.',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Alle CIs, aus denen diese Anwendungslösung besteht',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business-Prozesse',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Alle Geschäftsprozesse, die von dieser Anwendungslösung abhängen',
'Class:ApplicationSolution/Attribute:logo' => 'Logo',
'Class:ApplicationSolution/Attribute:logo+' => 'Wird als Objektsymbol verwendet, wenn das Objekt in Impact-Analyse-Graphen dargestellt wird',
'Class:ApplicationSolution/Attribute:logo' => 'Logo~~',
'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'aktiv',
@@ -514,11 +513,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:BusinessProcess' => 'Business-Prozess',
'Class:BusinessProcess+' => 'Ein Business-Prozess dokumentiert einen übergeordneten Prozess oder eine für den Betrieb wichtige Anwendung. Er ist einer Anwendungslösung sehr ähnlich, beschreibt jedoch Anwendungen höherer Ebene oder ganze Prozesse der Organisation.',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Anwendungslösungen',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Alle Anwendungslösungen, die sich auf diesen Geschäftsprozess auswirken',
'Class:BusinessProcess/Attribute:logo' => 'Logo',
'Class:BusinessProcess/Attribute:logo+' => 'Wird als Objektsymbol verwendet, wenn das Objekt in Impact-Analyse-Graphen dargestellt wird',
'Class:BusinessProcess/Attribute:logo' => 'Logo~~',
'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:BusinessProcess/Attribute:status' => 'Status',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'aktiv',
@@ -533,9 +532,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:SoftwareInstance' => 'Software-Instanz',
'Class:SoftwareInstance+' => 'Abstrakte Klasse, die das Deployment einer Software auf einem Gerät abbildet (Server, PC, virtuelle Maschine). Es gibt verschiedene Arten von Software-Instanzen: DB Server, Middleware, PC-Software, Web Server und Andere Software',
'Class:SoftwareInstance+' => '',
'Class:SoftwareInstance/Attribute:system_id' => 'System',
'Class:SoftwareInstance/Attribute:system_id+' => 'Das System kann ein Server, eine virtuelle Maschine, ein PC usw. sein',
'Class:SoftwareInstance/Attribute:system_id+' => '',
'Class:SoftwareInstance/Attribute:system_name' => 'Systemname',
'Class:SoftwareInstance/Attribute:system_name+' => '',
'Class:SoftwareInstance/Attribute:software_id' => 'Software',
@@ -562,7 +561,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Middleware' => 'Middleware',
'Class:Middleware+' => 'Software-Instanz, die anderer Software Dienste bereitstellt (etwa Tomcat, JBoss, Talend, Microsoft BizTalk, IBM WebSphere oder Lotus Domino) und auf einem bestimmten System installiert ist (PC, Server oder virtuelle Maschine).',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'Middleware-Instanzen',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'Alle Middleware-Instanzen, die von dieser Middleware bereitgestellt werden',
]);
@@ -573,7 +572,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:DBServer' => 'DB Server',
'Class:DBServer+' => 'Software-Instanz, die Datenbankdienste bereitstellt (MySQL 8.0, Oracle, SQL Server, DB2 ...) und auf einem bestimmten System installiert ist (PC, Server oder virtuelle Maschine).',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'DB Schemata',
'Class:DBServer/Attribute:dbschema_list+' => 'Alle Datenbankschemata für diesen DB-Server',
]);
@@ -584,7 +583,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:WebServer' => 'Web Server',
'Class:WebServer+' => 'Software-Instanz, die Web-Dienste bereitstellt (etwa Apache 2.4, Nginx 1.29.4, IIS 7.0) und auf einem bestimmten System installiert ist (PC, Server oder virtuelle Maschine).',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Webapplikationen',
'Class:WebServer/Attribute:webapp_list+' => 'Alle auf diesem Webserver verfügbaren Webanwendungen',
]);
@@ -595,7 +594,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PCSoftware' => 'PC-Software',
'Class:PCSoftware+' => 'Software-Instanz für Software (etwa MS Office, Adobe Photoshop oder FileZilla), die auf einem PC installiert ist.',
'Class:PCSoftware+' => '',
]);
//
@@ -604,7 +603,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:OtherSoftware' => 'Andere Software',
'Class:OtherSoftware+' => 'Jede Art von Software-Instanz, die in keine der anderen Kategorien passt: PC-Software, Middleware, DB Server oder Web Server.',
'Class:OtherSoftware+' => '',
]);
//
@@ -613,10 +612,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:MiddlewareInstance' => 'Middleware-Instanz',
'Class:MiddlewareInstance+' => 'Funktionales CI, das einen von einer Middleware bereitgestellten Dienst abbildet.',
'Class:MiddlewareInstance+' => '',
'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo',
'Class:MiddlewareInstance/Attribute:logo+' => 'Wird als Objektsymbol verwendet, wenn das Objekt in Impact-Analyse-Graphen dargestellt wird',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~',
'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware',
'Class:MiddlewareInstance/Attribute:middleware_id+' => '',
'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware-Name',
@@ -629,7 +628,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:DatabaseSchema' => 'Datenbank-Schema',
'Class:DatabaseSchema+' => 'Datenbank-Instanz, die auf einem bestimmten DB Server läuft.',
'Class:DatabaseSchema+' => '',
'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s',
'Class:DatabaseSchema/Attribute:dbserver_id' => 'DB-Server',
'Class:DatabaseSchema/Attribute:dbserver_id+' => '',
@@ -643,14 +642,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:WebApplication' => 'Webapplikation',
'Class:WebApplication+' => 'Instanz einer Anwendung, die über einen Webbrowser erreichbar ist und auf einer bestimmten Web-Server-Instanz läuft. Zum Beispiel dieses iTop, das Sie gerade vor sich haben.',
'Class:WebApplication+' => '',
'Class:WebApplication/ComplementaryName' => '%1$s - %2$s',
'Class:WebApplication/Attribute:webserver_id' => 'Webserver',
'Class:WebApplication/Attribute:webserver_id+' => '',
'Class:WebApplication/Attribute:webserver_name' => 'Webservername',
'Class:WebApplication/Attribute:webserver_name+' => '',
'Class:WebApplication/Attribute:logo' => 'Logo',
'Class:WebApplication/Attribute:logo+' => 'Wird als Objektsymbol verwendet, wenn das Objekt in Impact-Analyse-Graphen dargestellt wird',
'Class:WebApplication/Attribute:logo' => 'Logo~~',
'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:WebApplication/Attribute:url' => 'URL',
'Class:WebApplication/Attribute:url+' => '',
]);
@@ -661,11 +660,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:VirtualDevice' => 'Virtuelles Gerät',
'Class:VirtualDevice+' => 'Abstrakte Klasse für die Servervirtualisierung (virtueller Host und virtuelle Maschine).',
'Class:VirtualDevice+' => '',
'Class:VirtualDevice/Attribute:status' => 'Status',
'Class:VirtualDevice/Attribute:status+' => '',
'Class:VirtualDevice/Attribute:status/Value:implementation' => 'Implementierung',
'Class:VirtualDevice/Attribute:status/Value:implementation+' => 'Implementierung',
'Class:VirtualDevice/Attribute:status/Value:implementation+' => '',
'Class:VirtualDevice/Attribute:status/Value:obsolete' => 'Obsolet',
'Class:VirtualDevice/Attribute:status/Value:obsolete+' => '',
'Class:VirtualDevice/Attribute:status/Value:production' => 'Produktiv',
@@ -681,8 +680,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:VirtualHost' => 'Virtueller Host',
'Class:VirtualHost+' => 'Abstrakte Klasse für virtuelle Geräte (Hypervisor, Farm ...), die virtuelle Maschinen beherbergen.',
'Class:VirtualHost' => 'Host',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Virtuelle Maschinen',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Alle virtuellen Maschinen, die von diesem Host gehostet werden',
]);
@@ -693,7 +692,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Hypervisor' => 'Hypervisor',
'Class:Hypervisor+' => 'Virtueller Host. Virtualisierungssoftware (MS Hyper-V, VMware ESX, Xen usw.), die auf einem physischen Server läuft und das Anlegen virtueller Maschinen ermöglicht.',
'Class:Hypervisor+' => '',
'Class:Hypervisor/Attribute:farm_id' => 'Farm',
'Class:Hypervisor/Attribute:farm_id+' => '',
'Class:Hypervisor/Attribute:farm_name' => 'Farmname',
@@ -710,7 +709,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Farm' => 'Farm',
'Class:Farm+' => 'Virtueller Host. Eine Farm (oder ein Cluster) ist eine Gruppe von Hypervisoren, die zusammengefasst sind und Speicherressourcen gemeinsam nutzen, um insgesamt ein ausfalltolerantes System für den Betrieb virtueller Maschinen zu bilden.',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisoren',
'Class:Farm/Attribute:hypervisor_list+' => 'Alle Hypervisoren, aus denen diese Farm besteht',
'Class:Farm/Attribute:redundancy' => 'Hochverfügbarkeit',
@@ -725,11 +724,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:VirtualMachine' => 'Virtuelle Maschine',
'Class:VirtualMachine+' => 'Virtuelles Gerät, das einem Server entspricht und entweder auf einem Hypervisor oder auf einer Farm betrieben wird.',
'Class:VirtualMachine+' => '',
'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s',
'Class:VirtualMachine/Attribute:virtualhost_id' => 'Virtueller Host',
'Class:VirtualMachine/Attribute:virtualhost_id' => 'Host',
'Class:VirtualMachine/Attribute:virtualhost_id+' => '',
'Class:VirtualMachine/Attribute:virtualhost_name' => 'Name des virtuellen Hosts',
'Class:VirtualMachine/Attribute:virtualhost_name' => 'Hostname',
'Class:VirtualMachine/Attribute:virtualhost_name+' => '',
'Class:VirtualMachine/Attribute:osfamily_id' => 'OS-Familie',
'Class:VirtualMachine/Attribute:osfamily_id+' => '',
@@ -759,7 +758,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:LogicalVolume' => 'Logisches Volume',
'Class:LogicalVolume+' => 'Die Speichereinheit, die innerhalb eines Storage-Systems verwaltet wird. Sie kann von mehreren Servern und virtuellen Geräten genutzt werden.',
'Class:LogicalVolume+' => '',
'Class:LogicalVolume/Attribute:name' => 'Name',
'Class:LogicalVolume/Attribute:name+' => '',
'Class:LogicalVolume/Attribute:lun_id' => 'LUN ID',
@@ -786,7 +785,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkServerToVolume' => 'Verknüpfung Server/Volume',
'Class:lnkServerToVolume+' => 'Diese n:m-Verknüpfung gibt an, dass ein Server ein logisches Volume nutzt (eine innerhalb eines Storage-Systems verwaltete Speichereinheit). Mehrere Server können dasselbe logische Volume nutzen.',
'Class:lnkServerToVolume+' => '',
'Class:lnkServerToVolume/Name' => '%1$s / %2$s',
'Class:lnkServerToVolume/Attribute:volume_id' => 'Volume',
'Class:lnkServerToVolume/Attribute:volume_id+' => '',
@@ -806,7 +805,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkVirtualDeviceToVolume' => 'Verknüpfung Virtuelles Gerät/Volume',
'Class:lnkVirtualDeviceToVolume+' => 'Diese n:m-Verknüpfung gibt an, dass ein virtuelles Gerät ein logisches Volume nutzt (eine innerhalb eines Storage-Systems verwaltete Speichereinheit). Mehrere virtuelle Geräte können dasselbe logische Volume nutzen.',
'Class:lnkVirtualDeviceToVolume+' => '',
'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Volume',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => '',
@@ -826,7 +825,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkSanToDatacenterDevice' => 'Verknüpfung SAN/Datacenter-Gerät',
'Class:lnkSanToDatacenterDevice+' => 'Diese n:m-Verknüpfung bildet die Netzwerkverbindung zwischen einem SAN-Switch und einem Datacenter-Gerät ab (einem Server, einem Netzwerk-Gerät usw.).',
'Class:lnkSanToDatacenterDevice+' => '',
'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s',
'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'SAN-Switch',
'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => '',
@@ -848,7 +847,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Tape' => 'Tape',
'Class:Tape+' => 'Ein Tape (oder eine Kassette) ist in '.ITOP_APPLICATION_SHORT.' ein Wechselspeichermedium, das zu einer Tape-Library gehört',
'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~',
'Class:Tape/Attribute:name' => 'Name',
'Class:Tape/Attribute:name+' => '',
'Class:Tape/Attribute:description' => 'Beschreibung',
@@ -867,7 +866,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NASFileSystem' => 'NAS-Dateisystem',
'Class:NASFileSystem+' => 'Bildet ein freigegebenes Dateisystem ab, das in einem bestimmten NAS (Network Attached Storage) liegt.',
'Class:NASFileSystem+' => '',
'Class:NASFileSystem/Attribute:name' => 'Name',
'Class:NASFileSystem/Attribute:name+' => '',
'Class:NASFileSystem/Attribute:description' => 'Beschreibung',
@@ -888,7 +887,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Software' => 'Software',
'Class:Software+' => 'Software ist ein generischer Eintrag im Softwarekatalog. Sie hat eine bestimmte Version und gehört einer Kategorie an: DB Server, Middleware, PC-Software, Web Server oder Andere Software.',
'Class:Software+' => '',
'Class:Software/ComplementaryName' => '%1$s - %2$s',
'Class:Software/Attribute:name' => 'Name',
'Class:Software/Attribute:name+' => '',
@@ -898,8 +897,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Dokumente',
'Class:Software/Attribute:documents_list+' => 'Alle mit dieser Software verknüpften Dokumente',
'Class:Software/Attribute:logo' => 'Logo',
'Class:Software/Attribute:logo+' => 'Wird als Symbol für alle Software-Instanzen dieser Software verwendet, wenn sie in Impact-Analyse-Graphen dargestellt werden',
'Class:Software/Attribute:logo' => 'Logo~~',
'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~',
'Class:Software/Attribute:type' => 'Typ',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DB-Server',
@@ -907,7 +906,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Software/Attribute:type/Value:Middleware' => 'Middleware',
'Class:Software/Attribute:type/Value:Middleware+' => '',
'Class:Software/Attribute:type/Value:OtherSoftware' => 'Andere Software',
'Class:Software/Attribute:type/Value:OtherSoftware+' => 'Andere Software',
'Class:Software/Attribute:type/Value:OtherSoftware+' => '',
'Class:Software/Attribute:type/Value:PCSoftware' => 'PC-Software',
'Class:Software/Attribute:type/Value:PCSoftware+' => '',
'Class:Software/Attribute:type/Value:WebServer' => 'Webserver',
@@ -926,7 +925,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Patch' => 'Patch',
'Class:Patch+' => 'Abstrakte Klasse für Patches, Hotfixes, Sicherheitskorrekturen oder Service Packs für ein Betriebssystem oder eine Software.',
'Class:Patch+' => '',
'Class:Patch/Attribute:name' => 'Name',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Dokumente',
@@ -934,7 +933,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Patch/Attribute:description' => 'Beschreibung',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Typ',
'Class:Patch/Attribute:finalclass+' => 'Name der instanziierbaren Klasse',
'Class:Patch/Attribute:finalclass+' => '',
]);
//
@@ -943,12 +942,12 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:OSPatch' => 'OS-Patch',
'Class:OSPatch+' => 'Patch, Hotfix, Sicherheitskorrektur oder Service Pack für ein bestimmtes Betriebssystem.',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Geräte',
'Class:OSPatch/Attribute:functionalcis_list+' => 'Alle Systeme, auf denen dieser Patch installiert ist',
'Class:OSPatch/Attribute:osversion_id' => 'OS Version',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osfamily_id' => 'OS-Familie',
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSPatch/Attribute:osfamily_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'OS-Versionsname',
'Class:OSPatch/Attribute:osversion_name+' => '',
@@ -960,7 +959,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:SoftwarePatch' => 'Software-Patch',
'Class:SoftwarePatch+' => 'Patch, Hotfix, Sicherheitskorrektur oder Service Pack für eine bestimmte Software.',
'Class:SoftwarePatch+' => '',
'Class:SoftwarePatch/Attribute:software_id' => 'Software',
'Class:SoftwarePatch/Attribute:software_id+' => '',
'Class:SoftwarePatch/Attribute:software_name' => 'Software-Name',
@@ -975,7 +974,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Licence' => 'Lizenz',
'Class:Licence+' => 'Abstrakte Klasse. Ein Lizenzvertrag für eine bestimmte OS-Version oder Software',
'Class:Licence+' => '',
'Class:Licence/Attribute:name' => 'Name',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Dokumente',
@@ -1010,11 +1009,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:OSLicence' => 'OS-Lizenz',
'Class:OSLicence+' => 'Ein Lizenzvertrag für ein bestimmtes Betriebssystem. Die Lizenz bezieht sich auf ein Betriebssystem (zum Beispiel Windows 2008 R2) und kann mehreren Servern oder virtuellen Maschinen zugeordnet werden.',
'Class:OSLicence+' => '',
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
'Class:OSLicence/Attribute:osversion_id' => 'OS-Version',
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'OS-Familie',
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSLicence/Attribute:osfamily_id+' => '',
'Class:OSLicence/Attribute:osversion_name' => 'OS-Versionsname',
'Class:OSLicence/Attribute:osversion_name+' => '',
@@ -1030,7 +1029,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:SoftwareLicence' => 'Software-Lizenz',
'Class:SoftwareLicence+' => 'Ein Lizenzvertrag für eine bestimmte Software. Die Lizenz bezieht sich auf eine Software (zum Beispiel MS Office 2010) und kann mehreren Instanzen dieser Software zugeordnet werden.',
'Class:SoftwareLicence+' => '',
'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s',
'Class:SoftwareLicence/Attribute:software_id' => 'Software',
'Class:SoftwareLicence/Attribute:software_id+' => '',
@@ -1046,7 +1045,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkDocumentToLicence' => 'Verknüpfung Dokument/Lizenz',
'Class:lnkDocumentToLicence+' => 'Verknüpfung, die verwendet wird, wenn ein Dokument für eine Lizenz relevant ist.',
'Class:lnkDocumentToLicence+' => '',
'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s',
'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Lizenz',
'Class:lnkDocumentToLicence/Attribute:licence_id+' => '',
@@ -1064,13 +1063,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:OSVersion' => 'OS-Version',
'Class:OSVersion+' => 'Typologie. Liste der möglichen Werte für die OS-Version eines Rechners (Server, virtuelle Maschine oder PC). Die OS-Versionen sind nach OS-Familie gegliedert.',
'Class:OSVersion+' => '',
'Class:OSVersion/Attribute:osfamily_id' => 'OS-Familie',
'Class:OSVersion/Attribute:osfamily_id+' => '',
'Class:OSVersion/Attribute:osfamily_name' => 'OS-Familienname',
'Class:OSVersion/Attribute:osfamily_name+' => '',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Der Name muss innerhalb der OS-Familie eindeutig sein',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'Diese OS-Version existiert bereits innerhalb der OS-Familie',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~',
]);
//
@@ -1079,9 +1078,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:OSFamily' => 'OS-Familie',
'Class:OSFamily+' => 'Typologie. Liste der möglichen Werte für das Attribut OS-Familie von Servern, virtuellen Maschinen und PCs.',
'Class:OSFamily/UniquenessRule:name+' => 'Der Name muss eindeutig sein',
'Class:OSFamily/UniquenessRule:name' => 'Diese OS-Familie existiert bereits',
'Class:OSFamily+' => '',
'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~',
'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~',
]);
//
@@ -1090,9 +1089,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Brand' => 'Marke',
'Class:Brand+' => 'Typologie. Liste der möglichen Werte für das Attribut Marke eines physischen Geräts.',
'Class:Brand/Attribute:logo' => 'Logo',
'Class:Brand/Attribute:logo+' => '',
'Class:Brand+' => '',
'Class:Brand/Attribute:logo' => 'Logo~~',
'Class:Brand/Attribute:logo+' => '~~',
'Class:Brand/Attribute:physicaldevices_list' => 'Physische Geräte',
'Class:Brand/Attribute:physicaldevices_list+' => 'Alle physischen Geräte dieser Marke',
'Class:Brand/UniquenessRule:name+' => 'Der Name muss eindeutig sein',
@@ -1105,14 +1104,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Model' => 'Modell',
'Class:Model+' => 'Typologie. Listet die möglichen Werte für das Attribut Modell eines physischen Geräts auf. Jedes Modell gehört zu genau einer Marke und gilt üblicherweise für eine Art von physischem Gerät.',
'Class:Model+' => '',
'Class:Model/ComplementaryName' => '%1$s - %2$s',
'Class:Model/Attribute:brand_id' => 'Marke',
'Class:Model/Attribute:brand_id+' => '',
'Class:Model/Attribute:brand_name' => 'Markenname',
'Class:Model/Attribute:brand_name+' => '',
'Class:Model/Attribute:picture' => 'Bild',
'Class:Model/Attribute:picture+' => '',
'Class:Model/Attribute:picture' => 'Picture~~',
'Class:Model/Attribute:picture+' => '~~',
'Class:Model/Attribute:type' => 'Gerätetyp',
'Class:Model/Attribute:type+' => '',
'Class:Model/Attribute:type/Value:PowerSource' => 'Stromquelle',
@@ -1163,9 +1162,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NetworkDeviceType' => 'Netzwerkgerätetyp',
'Class:NetworkDeviceType+' => 'Typologie. Die möglichen Werte für den Typ eines Netzwerk-Geräts (etwa Router, Switch, Firewall).',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo',
'Class:NetworkDeviceType/Attribute:logo+' => 'Wird als Symbol für alle Netzwerkgeräte dieses Typs verwendet, wenn sie in der Konsole dargestellt werden (Details, Übersichtskarte und Impact-Analyse-Graphen)',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netzwerkgeräte',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle Netzwerkgeräte, die diesem Typ entsprechen',
]);
@@ -1176,13 +1175,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:IOSVersion' => 'IOS-Version',
'Class:IOSVersion+' => 'Typologie. Mögliche Werte für die Betriebssystemversionen von Netzwerk-Geräten (IOS von Ciscos Internetwork Operating System).',
'Class:IOSVersion+' => '',
'Class:IOSVersion/Attribute:brand_id' => 'Marke',
'Class:IOSVersion/Attribute:brand_id+' => '',
'Class:IOSVersion/Attribute:brand_name' => 'Markenname',
'Class:IOSVersion/Attribute:brand_name+' => '',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Der Name muss innerhalb der Marke eindeutig sein',
'Class:IOSVersion/UniquenessRule:name_brand' => 'Diese IOS-Version existiert bereits für diese Marke',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~',
]);
//
@@ -1191,7 +1190,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkDocumentToPatch' => 'Verknüpfung Dokument/Patch',
'Class:lnkDocumentToPatch+' => 'Verknüpfung, die verwendet wird, wenn ein Dokument für einen Patch relevant ist.',
'Class:lnkDocumentToPatch+' => '',
'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s',
'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Patch',
'Class:lnkDocumentToPatch/Attribute:patch_id+' => '',
@@ -1209,7 +1208,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Verknüpfung Software-Instanz/Softeware-Patch',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => 'Diese Verknüpfung gibt an, dass ein Software-Patch auf eine Software-Instanz angewendet wurde.',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => '',
'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Software-Patch',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '',
@@ -1227,7 +1226,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkFunctionalCIToOSPatch' => 'Verknüpfung FunctionalCI/OS-Patch',
'Class:lnkFunctionalCIToOSPatch+' => 'Bildet das Einspielen eines OS-Patches auf einem Gerät ab.',
'Class:lnkFunctionalCIToOSPatch+' => '',
'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'OS-Patch',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '',
@@ -1245,7 +1244,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkDocumentToSoftware' => 'Verknüpfung Dokument/Software',
'Class:lnkDocumentToSoftware+' => 'Verknüpfung, die verwendet wird, wenn ein Dokument für eine Software relevant ist.',
'Class:lnkDocumentToSoftware+' => '',
'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s',
'Class:lnkDocumentToSoftware/Attribute:software_id' => 'Software',
'Class:lnkDocumentToSoftware/Attribute:software_id+' => '',
@@ -1263,7 +1262,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Subnet' => 'Subnetz',
'Class:Subnet+' => 'Abschnitt eines IP-Netzwerks, definiert durch eine IP-Adresse und eine Maske',
'Class:Subnet+' => '',
'Class:Subnet/Name' => '%1$s/%2$s',
'Class:Subnet/ComplementaryName' => '%1$s - %2$s',
'Class:Subnet/Attribute:description' => 'Beschreibung',
@@ -1272,7 +1271,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Subnet/Attribute:subnet_name+' => '',
'Class:Subnet/Attribute:org_id' => 'Organisation',
'Class:Subnet/Attribute:org_id+' => '',
'Class:Subnet/Attribute:org_name' => 'Name der Organisation',
'Class:Subnet/Attribute:org_name' => 'Name',
'Class:Subnet/Attribute:org_name+' => '',
'Class:Subnet/Attribute:ip' => 'IP',
'Class:Subnet/Attribute:ip+' => '',
@@ -1288,7 +1287,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:VLAN' => 'VLAN',
'Class:VLAN+' => 'Ein virtuelles LAN fasst Subnetze und physische Interfaces, die zum selben VLAN gehören, logisch zusammen.',
'Class:VLAN+' => '',
'Class:VLAN/Attribute:vlan_tag' => 'VLAN-Tag',
'Class:VLAN/Attribute:vlan_tag+' => '',
'Class:VLAN/Attribute:description' => 'Beschreibung',
@@ -1309,7 +1308,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkSubnetToVLAN' => 'Verknüpfung Subnetz/VLAN',
'Class:lnkSubnetToVLAN+' => 'Diese n:m-Verknüpfung gibt an, dass ein VLAN in einem Subnetz vorhanden ist. In einem Subnetz können mehrere VLANs vorhanden sein, und ein VLAN kann sich über mehrere Subnetze erstrecken.',
'Class:lnkSubnetToVLAN+' => '',
'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s',
'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Subnetz',
'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => '',
@@ -1329,7 +1328,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NetworkInterface' => 'Netzwerk-Interface',
'Class:NetworkInterface+' => 'Abstrakte Klasse für alle Arten von Netzwerk-Interfaces.',
'Class:NetworkInterface+' => '',
'Class:NetworkInterface/Attribute:name' => 'Name',
'Class:NetworkInterface/Attribute:name+' => '',
'Class:NetworkInterface/Attribute:finalclass' => 'Typ',
@@ -1342,7 +1341,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:IPInterface' => 'IP-Interface',
'Class:IPInterface+' => 'Abstrakte Klasse. Eine Art von Netzwerk-Interface mit einer IP-Adresse',
'Class:IPInterface+' => '',
'Class:IPInterface/Attribute:ipaddress' => 'IP-Adresse',
'Class:IPInterface/Attribute:ipaddress+' => '',
'Class:IPInterface/Attribute:macaddress' => 'MAC-Adresse',
@@ -1363,7 +1362,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PhysicalInterface' => 'Physisches Interface',
'Class:PhysicalInterface+' => 'Eine Art von IP-Interface, die ein physisches Netzwerk-Interface abbildet (etwa eine Ethernet-Karte).',
'Class:PhysicalInterface+' => '',
'Class:PhysicalInterface/Name' => '%2$s %1$s',
'Class:PhysicalInterface/Attribute:connectableci_id' => 'Gerät',
'Class:PhysicalInterface/Attribute:connectableci_id+' => '',
@@ -1379,7 +1378,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkPhysicalInterfaceToVLAN' => 'Verknüpfung Physisches Interface / VLAN',
'Class:lnkPhysicalInterfaceToVLAN+' => 'Diese Verknüpfung gibt an, dass ein Netzwerk-Interface zu einem VLAN (Virtual Local Area Network) gehört.',
'Class:lnkPhysicalInterfaceToVLAN+' => '',
'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => 'Physisches Interface',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '',
@@ -1401,7 +1400,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:LogicalInterface' => 'Logisches Interface',
'Class:LogicalInterface+' => 'IP-Interface, das nicht dauerhaft einem bestimmten physischen Port zugeordnet ist; die Zuordnung erfolgt dynamisch. Kann für virtuelle Maschinen verwendet werden.',
'Class:LogicalInterface+' => '',
'Class:LogicalInterface/Attribute:virtualmachine_id' => 'Virtuelle Maschine',
'Class:LogicalInterface/Attribute:virtualmachine_id+' => '',
'Class:LogicalInterface/Attribute:virtualmachine_name' => 'Virtuelle Maschine-Name',
@@ -1414,7 +1413,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:FiberChannelInterface' => 'Fiber Channel Interface',
'Class:FiberChannelInterface+' => 'Netzwerk-Interface für eine Hochgeschwindigkeits-Netzwerktechnik, die vor allem zur Anbindung von Storage-Systemen eingesetzt wird.',
'Class:FiberChannelInterface+' => '',
'Class:FiberChannelInterface/Attribute:speed' => 'Geschwindigkeit',
'Class:FiberChannelInterface/Attribute:speed+' => '',
'Class:FiberChannelInterface/Attribute:topology' => 'Topologie',
@@ -1433,7 +1432,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkConnectableCIToNetworkDevice' => 'Verknüpfung ConnectableCI/NetworkDevice',
'Class:lnkConnectableCIToNetworkDevice+' => 'Legt fest, an welchem Netzwerkgerät ein Gerät angeschlossen ist.',
'Class:lnkConnectableCIToNetworkDevice+' => '',
'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => 'Netzwerkgerät',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '',
@@ -1461,7 +1460,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkApplicationSolutionToFunctionalCI' => 'Verknüpfung Anwendungslösung/FunctionalCI',
'Class:lnkApplicationSolutionToFunctionalCI+' => 'Bildet die Zugehörigkeit eines Geräts zu einer Anwendungslösung ab. Die Bedeutung dieser Beziehung hängt von der Art der Anwendungslösung ab.',
'Class:lnkApplicationSolutionToFunctionalCI+' => '',
'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => 'Anwendungslösung',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id+' => '',
@@ -1479,7 +1478,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkApplicationSolutionToBusinessProcess' => 'Verknüpfung Anwendungslösung/Business-Prozess',
'Class:lnkApplicationSolutionToBusinessProcess+' => 'Bildet die Beziehung zwischen einer Anwendungslösung und einem Business-Prozess ab.',
'Class:lnkApplicationSolutionToBusinessProcess+' => '',
'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => 'Business-Prozess',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id+' => '',
@@ -1497,7 +1496,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Group' => 'Gruppe',
'Class:Group+' => 'Eine Gruppe dient dazu, für einen beliebigen Projektzweck explizite Mengen von Konfigurationselementen zu bilden. Anders als eine Anwendungslösung wird eine Gruppe von keiner ihrer Komponenten beeinflusst und beeinflusst diese auch nicht. Bei einer OS-Migration kann eine Gruppe zum Beispiel praktisch sein, um die "zu migrierenden Server" zusammenzufassen; migrierte Server werden im Laufe der Migration aus der Gruppe entfernt.',
'Class:Group+' => '',
'Class:Group/ComplementaryName' => '%1$s - %2$s',
'Class:Group/Attribute:name' => 'Name',
'Class:Group/Attribute:name+' => '',
@@ -1532,8 +1531,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkGroupToCI' => 'Verknüpfung Gruppe/CI',
'Class:lnkGroupToCI+' => 'Diese Verknüpfung gibt an, dass ein funktionales CI zu einer Gruppe gehört.',
'Class:lnkGroupToCI' => 'Gruppe/CI',
'Class:lnkGroupToCI+' => '',
'Class:lnkGroupToCI/Name' => '%1$s / %2$s',
'Class:lnkGroupToCI/Attribute:group_id' => 'Gruppe',
'Class:lnkGroupToCI/Attribute:group_id+' => '',
@@ -1550,13 +1549,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
// Add translation for Fieldsets
Dict::Add('DE DE', 'German', 'Deutsch', [
'ConfigMgmt:baseinfo' => 'Allgemein',
'ConfigMgmt:moreinfo' => 'CI-spezifische Angaben',
'Storage:moreinfo' => 'Speicherspezifische Angaben',
'ConfigMgmt:otherinfo' => 'Beschreibung',
'ConfigMgmt:dates' => 'Daten',
'Software:moreinfo' => 'Softwarespezifische Angaben',
'Phone:moreinfo' => 'Telefonspezifische Angaben',
'ConfigMgmt:baseinfo' => 'General~~',
'ConfigMgmt:moreinfo' => 'CI specifics~~',
'Storage:moreinfo' => 'Storage specifics~~',
'ConfigMgmt:otherinfo' => 'Description~~',
'ConfigMgmt:dates' => 'Dates~~',
'Software:moreinfo' => 'Software specifics~~',
'Phone:moreinfo' => 'Phone specifics~~',
'Server:baseinfo' => 'Allgemeine Informationen',
'Server:Date' => 'Datum',
'Server:moreinfo' => 'Weitere Informationen',
@@ -1577,7 +1576,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkDocumentToFunctionalCI' => 'Verknüpfung Dokument/FunctionalCI',
'Class:lnkDocumentToFunctionalCI+' => 'Verknüpfung, die verwendet wird, wenn ein Dokument für ein funktionales CI relevant ist.',
'Class:lnkDocumentToFunctionalCI+' => '',
'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'FunctionalCI',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '',
@@ -1637,7 +1636,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:OSVersion' => 'OS-Versionen',
'Menu:OSVersion+' => '',
'Menu:Software' => 'Software-Katalog',
'Menu:Software+' => 'Softwarekatalog',
'Menu:Software+' => '',
]);
//
@@ -1645,40 +1644,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:PhysicalInterface/Attribute:org_id' => 'Organisation',
'Class:PhysicalInterface/Attribute:org_id+' => '',
'Class:PhysicalInterface/Attribute:location_id' => 'Standort',
'Class:PhysicalInterface/Attribute:location_id+' => '',
'Class:FunctionalCI/Attribute:groups_list' => 'Gruppen',
'Class:FunctionalCI/Attribute:groups_list+' => 'Gruppen können wie Schlagworte verwendet werden, um Umgebungen, Projekte (Migration, Upgrade, Sicherheit) usw. zu dokumentieren.',
'Class:PhysicalDevice/Attribute:model_end_of_support' => 'Supportende des Modells',
'Class:PhysicalDevice/Attribute:model_end_of_support+' => 'Zeitpunkt, ab dem das Hardwaremodell vom Hersteller nicht mehr unterstützt wird, sofern diese Information am Modell hinterlegt ist.',
'Class:NetworkDevice/Attribute:ios_end_of_support' => 'Supportende der IOS-Version',
'Class:NetworkDevice/Attribute:ios_end_of_support+' => 'Datum, ab dem der Hersteller keine Fehlerbehebungen mehr für diese IOS-Version bereitstellt.',
'Class:Server/Attribute:os_end_of_support' => 'Supportende des Betriebssystems',
'Class:Server/Attribute:os_end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese OS-Version bereitstellt.',
'Class:PC/Attribute:os_end_of_support' => 'Supportende des Betriebssystems',
'Class:PC/Attribute:os_end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese OS-Version bereitstellt.',
'Class:Software/Attribute:end_of_support' => 'Supportende',
'Class:Software/Attribute:end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese Softwareversion bereitstellt.',
'Class:SoftwareInstance/Attribute:software_end_of_support' => 'Supportende der Software',
'Class:SoftwareInstance/Attribute:software_end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese Softwareversion bereitstellt.',
'Class:VirtualMachine/Attribute:os_end_of_support' => 'Supportende des Betriebssystems',
'Class:VirtualMachine/Attribute:os_end_of_support+' => 'Zeitpunkt, ab dem die OS-Version vom Hersteller nicht mehr unterstützt wird, sofern diese Information an der OS-Version hinterlegt ist.',
'Class:OSVersion/Attribute:end_of_support' => 'Supportende',
'Class:OSVersion/Attribute:end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese OS-Version bereitstellt.',
'Class:OSVersion/Attribute:ospatches_list' => 'OS-Patches',
'Class:OSVersion/Attribute:ospatches_list+' => 'Alle OS-Patches für diese OS-Version',
'Class:OSFamily/Attribute:osversions_list' => 'OS-Versionen',
'Class:OSFamily/Attribute:osversions_list+' => 'Alle OS-Versionen dieser OS-Familie',
'Class:Brand/Attribute:iosversions_list' => 'IOS-Versionen',
'Class:Brand/Attribute:iosversions_list+' => 'Alle IOS-Versionen dieser Marke',
'Class:Brand/Attribute:models_list' => 'Modelle',
'Class:Brand/Attribute:models_list+' => 'Alle Modelle dieser Marke',
'Class:Model/Attribute:end_of_support' => 'Supportende',
'Class:Model/Attribute:end_of_support+' => 'Datum, ab dem der Hersteller keine Patches und keinen Support mehr für dieses Modell bereitstellt.',
'Class:IOSVersion/Attribute:end_of_support' => 'Supportende',
'Class:IOSVersion/Attribute:end_of_support+' => 'Datum, ab dem der Hersteller keine Patches mehr für diese IOS-Version bereitstellt.',
'Class:IOSVersion/Attribute:networkdevices_list' => 'Netzwerkgeräte',
'Class:IOSVersion/Attribute:networkdevices_list+' => 'Alle Netzwerkgeräte, auf denen diese IOS-Version läuft',
'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~',
'Class:PhysicalInterface/Attribute:org_id+' => '~~',
'Class:PhysicalInterface/Attribute:location_id' => 'Location~~',
'Class:PhysicalInterface/Attribute:location_id+' => '~~',
]);

View File

@@ -111,7 +111,7 @@ Dict::Add('EN US', 'English', 'English', [
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Application solutions',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item',
'Class:FunctionalCI/Attribute:finalclass' => 'CI sub-class',
'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class',

View File

@@ -108,7 +108,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Application solutions',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item',
'Class:FunctionalCI/Attribute:finalclass' => 'CI sub-class',
'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class',
@@ -491,8 +491,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business processes',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution',
'Class:ApplicationSolution/Attribute:logo' => 'Logo',
'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs',
'Class:ApplicationSolution/Attribute:logo' => 'Logo~~',
'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'active',
@@ -514,8 +514,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Application solutions',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process',
'Class:BusinessProcess/Attribute:logo' => 'Logo',
'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs',
'Class:BusinessProcess/Attribute:logo' => 'Logo~~',
'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:BusinessProcess/Attribute:status' => 'Status',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'active',
@@ -612,8 +612,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:MiddlewareInstance' => 'Middleware Instance',
'Class:MiddlewareInstance+' => '',
'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo',
'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~',
'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware',
'Class:MiddlewareInstance/Attribute:middleware_id+' => '',
'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware name',
@@ -646,8 +646,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:WebApplication/Attribute:webserver_id+' => '',
'Class:WebApplication/Attribute:webserver_name' => 'Web server name',
'Class:WebApplication/Attribute:webserver_name+' => '',
'Class:WebApplication/Attribute:logo' => 'Logo',
'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs',
'Class:WebApplication/Attribute:logo' => 'Logo~~',
'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:WebApplication/Attribute:url' => 'URL',
'Class:WebApplication/Attribute:url+' => '',
]);
@@ -845,7 +845,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'Class:Tape' => 'Tape',
'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library',
'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~',
'Class:Tape/Attribute:name' => 'Name',
'Class:Tape/Attribute:name+' => '',
'Class:Tape/Attribute:description' => 'Description',
@@ -895,8 +895,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Documents',
'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software',
'Class:Software/Attribute:logo' => 'Logo',
'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs',
'Class:Software/Attribute:logo' => 'Logo~~',
'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~',
'Class:Software/Attribute:type' => 'Type',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DB Server',
@@ -945,7 +945,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed',
'Class:OSPatch/Attribute:osversion_id' => 'OS version',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family',
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSPatch/Attribute:osfamily_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'OS version name',
'Class:OSPatch/Attribute:osversion_name+' => '',
@@ -1012,8 +1012,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
'Class:OSLicence/Attribute:osversion_id' => 'OS version',
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family',
'Class:OSLicence/Attribute:osfamily_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
'Class:OSLicence/Attribute:osversion_name' => 'OS version name',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtual machines',
@@ -1067,8 +1067,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:OSVersion/Attribute:osfamily_id+' => '',
'Class:OSVersion/Attribute:osfamily_name' => 'OS family name',
'Class:OSVersion/Attribute:osfamily_name+' => '',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~',
]);
//
@@ -1078,8 +1078,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'Class:OSFamily' => 'OS Family',
'Class:OSFamily+' => '',
'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique',
'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists',
'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~',
'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~',
]);
//
@@ -1162,8 +1162,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'Class:NetworkDeviceType' => 'Network Device Type',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Network devices',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type',
]);
@@ -1179,8 +1179,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:IOSVersion/Attribute:brand_id+' => '',
'Class:IOSVersion/Attribute:brand_name' => 'Brand name',
'Class:IOSVersion/Attribute:brand_name+' => '',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand',
'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~',
]);
//
@@ -1368,7 +1368,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:PhysicalInterface/Attribute:connectableci_id+' => '',
'Class:PhysicalInterface/Attribute:connectableci_name' => 'Device name',
'Class:PhysicalInterface/Attribute:connectableci_name+' => '',
'Class:PhysicalInterface/Attribute:org_id' => 'Organisation',
'Class:PhysicalInterface/Attribute:org_id' => 'Organization',
'Class:PhysicalInterface/Attribute:org_id+' => '',
'Class:PhysicalInterface/Attribute:location_id' => 'Location',
'Class:PhysicalInterface/Attribute:location_id+' => '',
@@ -1559,8 +1559,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
'ConfigMgmt:otherinfo' => 'Description',
'ConfigMgmt:dates' => 'Dates',
'Storage:moreinfo' => 'Storage specifics',
'Software:moreinfo' => 'Software specifics',
'Phone:moreinfo' => 'Phone specifics',
'Software:moreinfo' => 'Software specifics~~',
'Phone:moreinfo' => 'Phone specifics~~',
'Server:baseinfo' => 'General',
'Server:moreinfo' => 'Device specifics',
'Server:Date' => 'Dates',

View File

@@ -494,8 +494,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Alle configuratie-items die deze applicatie-oplossing tot stand brengen',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Bedrijfsprocessen',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Alle bedrijfsprocessen die afhankelijk zijn van deze applicatie-oplossing',
'Class:ApplicationSolution/Attribute:logo' => 'Logo',
'Class:ApplicationSolution/Attribute:logo+' => 'Wordt gebruikt als objectpictogram bij weergave in impactanalyse.',
'Class:ApplicationSolution/Attribute:logo' => 'Logo~~',
'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'Actief',
@@ -517,8 +517,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Applicatie-oplossing',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Alle applicatie-oplossingen die impact hebben op dit bedrijfsproces',
'Class:BusinessProcess/Attribute:logo' => 'Logo',
'Class:BusinessProcess/Attribute:logo+' => 'Wordt gebruikt als objectpictogram bij weergave in impactanalyse.',
'Class:BusinessProcess/Attribute:logo' => 'Logo~~',
'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:BusinessProcess/Attribute:status' => 'Status',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'Actief',
@@ -615,8 +615,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:MiddlewareInstance' => 'Middleware-instantie',
'Class:MiddlewareInstance+' => '',
'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo',
'Class:MiddlewareInstance/Attribute:logo+' => 'Wordt gebruikt als objectpictogram bij weergave in impactanalyse.',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~',
'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware',
'Class:MiddlewareInstance/Attribute:middleware_id+' => '',
'Class:MiddlewareInstance/Attribute:middleware_name' => 'Naam middleware',
@@ -649,8 +649,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:WebApplication/Attribute:webserver_id+' => '',
'Class:WebApplication/Attribute:webserver_name' => 'Naam webserver',
'Class:WebApplication/Attribute:webserver_name+' => '',
'Class:WebApplication/Attribute:logo' => 'Logo',
'Class:WebApplication/Attribute:logo+' => 'Wordt gebruikt als objectpictogram bij weergave in impactanalyse.',
'Class:WebApplication/Attribute:logo' => 'Logo~~',
'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:WebApplication/Attribute:url' => 'Link (URL)',
'Class:WebApplication/Attribute:url+' => '',
]);
@@ -848,7 +848,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:Tape' => 'Tape',
'Class:Tape+' => 'Een Tape (of cartridge) binnen '.ITOP_APPLICATION_SHORT.' is een verwijderbaar opslagonderdeel van een tapebibliotheek.',
'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~',
'Class:Tape/Attribute:name' => 'Naam',
'Class:Tape/Attribute:name+' => '',
'Class:Tape/Attribute:description' => 'Omschrijving',
@@ -898,8 +898,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Documenten',
'Class:Software/Attribute:documents_list+' => 'Alle documenten gelinkt aan deze software',
'Class:Software/Attribute:logo' => 'Logo',
'Class:Software/Attribute:logo+' => 'Wordt gebruikt als pictogram voor alle software-instanties die deze software gebruiken, wanneer deze worden weergegeven in impactanalyses.',
'Class:Software/Attribute:logo' => 'Logo~~',
'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~',
'Class:Software/Attribute:type' => 'Type',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'Databaseserver',
@@ -1015,7 +1015,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:OSLicence/Attribute:osversion_id' => 'Versie besturingssysteem',
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'Soort besturingssysteem',
'Class:OSLicence/Attribute:osfamily_id+' => '',
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
'Class:OSLicence/Attribute:osversion_name' => 'Naam versie bestandssysteem',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuele machines',
@@ -1069,8 +1069,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:OSVersion/Attribute:osfamily_id+' => '',
'Class:OSVersion/Attribute:osfamily_name' => 'Naam soort besturingssysteem',
'Class:OSVersion/Attribute:osfamily_name+' => '',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Naam moet uniek zijn binnen de soort besturingssysteem',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'Deze versie van het besturingssysteem bestaat al binnen de soort besturingssysteem',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~',
]);
//
@@ -1080,8 +1080,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:OSFamily' => 'Soort Besturingssysteem',
'Class:OSFamily+' => '',
'Class:OSFamily/UniquenessRule:name+' => 'Naam moet uniek zijn',
'Class:OSFamily/UniquenessRule:name' => 'Deze soort besturingssysteem bestaat al',
'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~',
'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~',
]);
//
@@ -1091,12 +1091,12 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:Brand' => 'Merk',
'Class:Brand+' => '',
'Class:Brand/Attribute:logo' => 'Logo',
'Class:Brand/Attribute:logo+' => '',
'Class:Brand/Attribute:logo' => 'Logo~~',
'Class:Brand/Attribute:logo+' => '~~',
'Class:Brand/Attribute:physicaldevices_list' => 'Fysieke apparaten',
'Class:Brand/Attribute:physicaldevices_list+' => 'Alle fysieke apparaten van dit merk',
'Class:Brand/UniquenessRule:name+' => 'De naam van het merk moet uniek zijn',
'Class:Brand/UniquenessRule:name' => 'Dit merk bestaat al',
'Class:Brand/UniquenessRule:name' => 'De naam van het merk bestaat al',
]);
//
@@ -1111,8 +1111,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:Model/Attribute:brand_id+' => '',
'Class:Model/Attribute:brand_name' => 'Naam merk',
'Class:Model/Attribute:brand_name+' => '',
'Class:Model/Attribute:picture' => 'Afbeelding',
'Class:Model/Attribute:picture+' => '',
'Class:Model/Attribute:picture' => 'Picture~~',
'Class:Model/Attribute:picture+' => '~~',
'Class:Model/Attribute:type' => 'Soort apparaat',
'Class:Model/Attribute:type+' => '',
'Class:Model/Attribute:type/Value:PowerSource' => 'Stroombron',
@@ -1164,8 +1164,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:NetworkDeviceType' => 'Soort netwerkapparaat',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo',
'Class:NetworkDeviceType/Attribute:logo+' => 'Wordt gebruikt als pictogram voor alle netwerkapparaten van dit type wanneer deze in de console worden weergegeven (details, overzichtskaart en impactanalyse).',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netwerkapparaten',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle netwerkapparaten van deze soort',
]);
@@ -1181,8 +1181,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:IOSVersion/Attribute:brand_id+' => '',
'Class:IOSVersion/Attribute:brand_name' => 'Naam merk',
'Class:IOSVersion/Attribute:brand_name+' => '',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Naam moet uniek zijn binnen het merk',
'Class:IOSVersion/UniquenessRule:name_brand' => 'Deze IOS versie bestaat al binnen dit merk',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~',
]);
//
@@ -1550,13 +1550,13 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
// Add translation for Fieldsets
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'ConfigMgmt:baseinfo' => 'Globale informatie',
'ConfigMgmt:moreinfo' => 'CI specifieke informatie',
'Storage:moreinfo' => 'Opslaginformatie',
'ConfigMgmt:otherinfo' => 'Andere informatie',
'ConfigMgmt:dates' => 'Datums',
'Software:moreinfo' => 'Software informatie',
'Phone:moreinfo' => 'Telefoon informatie',
'ConfigMgmt:baseinfo' => 'General~~',
'ConfigMgmt:moreinfo' => 'CI specifics~~',
'Storage:moreinfo' => 'Storage specifics~~',
'ConfigMgmt:otherinfo' => 'Description~~',
'ConfigMgmt:dates' => 'Dates~~',
'Software:moreinfo' => 'Software specifics~~',
'Phone:moreinfo' => 'Phone specifics~~',
'Server:baseinfo' => 'Globale informatie',
'Server:Date' => 'Datum',
'Server:moreinfo' => 'Meer informatie',
@@ -1645,8 +1645,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:PhysicalInterface/Attribute:org_id' => 'Organisatie',
'Class:PhysicalInterface/Attribute:org_id+' => '',
'Class:PhysicalInterface/Attribute:location_id' => 'Locatie',
'Class:PhysicalInterface/Attribute:location_id+' => '',
'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~',
'Class:PhysicalInterface/Attribute:org_id+' => '~~',
'Class:PhysicalInterface/Attribute:location_id' => 'Location~~',
'Class:PhysicalInterface/Attribute:location_id+' => '~~',
]);

View File

@@ -20,9 +20,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Relation:depends on/Description' => 'Элементы, от которых зависит',
'Relation:depends on/DownStream' => 'Зависит от...',
'Relation:depends on/UpStream' => 'Влияет на...',
'Relation:impacts/LoadData' => 'Загрузить данные',
'Relation:impacts/NoFilteredData' => 'выберите объекты и загрузите данные',
'Relation:impacts/FilteredData' => 'Отфильтрованные данные',
'Relation:impacts/LoadData' => 'Load data~~',
'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
'Relation:impacts/FilteredData' => 'Filtered data~~',
]);
// Dictionnay conventions
@@ -69,7 +69,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkContactToFunctionalCI' => 'Связь Контакт/Функциональная КЕ',
'Class:lnkContactToFunctionalCI+' => '',
'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => 'Функциональная КЕ',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_name' => 'Функциональная КЕ',
@@ -116,7 +116,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:FunctionalCI/Attribute:finalclass' => 'Тип',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Активные тикеты',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Активные тикеты, затрагивающие эту функциональную КЕ',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
]);
//
@@ -126,7 +126,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PhysicalDevice' => 'Физические устройства',
'Class:PhysicalDevice+' => '',
'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s',
'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s~~',
'Class:PhysicalDevice/Attribute:serialnumber' => 'Серийный номер',
'Class:PhysicalDevice/Attribute:serialnumber+' => '',
'Class:PhysicalDevice/Attribute:location_id' => 'Расположение',
@@ -166,7 +166,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Rack' => 'Стойка',
'Class:Rack+' => '',
'Class:Rack/ComplementaryName' => '%1$s - %2$s',
'Class:Rack/ComplementaryName' => '%1$s - %2$s~~',
'Class:Rack/Attribute:nb_u' => 'Высота (U)',
'Class:Rack/Attribute:nb_u+' => 'Количество юнитов',
'Class:Rack/Attribute:device_list' => 'Устройства',
@@ -233,7 +233,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ConnectableCI' => 'Подключаемые КЕ',
'Class:ConnectableCI+' => 'Подключаемые КЕ',
'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s',
'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s~~',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Сетевые устройства',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Связанные сетевые устройства',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Сетевые интерфейсы',
@@ -247,7 +247,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:DatacenterDevice' => 'Устройства дата-центра',
'Class:DatacenterDevice+' => 'Устройства дата-центра',
'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s',
'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s~~',
'Class:DatacenterDevice/Attribute:rack_id' => 'Стойка',
'Class:DatacenterDevice/Attribute:rack_id+' => '',
'Class:DatacenterDevice/Attribute:rack_name' => 'Стойка',
@@ -285,7 +285,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:NetworkDevice' => 'Сетевое устройство',
'Class:NetworkDevice+' => 'Сетевое устройство',
'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s',
'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s~~',
'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Тип устройства',
'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '',
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Тип устройства',
@@ -307,7 +307,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Server' => 'Сервер',
'Class:Server+' => 'Сервер',
'Class:Server/ComplementaryName' => '%1$s - %2$s',
'Class:Server/ComplementaryName' => '%1$s - %2$s~~',
'Class:Server/Attribute:osfamily_id' => 'Семейство ОС',
'Class:Server/Attribute:osfamily_id+' => 'Семейство операционной системы',
'Class:Server/Attribute:osfamily_name' => 'Семейство ОС',
@@ -335,7 +335,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:StorageSystem' => 'Система хранения',
'Class:StorageSystem+' => 'Система хранения',
'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s',
'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s~~',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Логические тома',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Логические тома',
]);
@@ -347,7 +347,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:SANSwitch' => 'SAN коммутатор',
'Class:SANSwitch+' => 'SAN коммутатор',
'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s',
'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s~~',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Устройства',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Подключенные устройства',
]);
@@ -359,7 +359,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:TapeLibrary' => 'Ленточная библиотека',
'Class:TapeLibrary+' => 'Ленточная библиотека',
'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s',
'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s~~',
'Class:TapeLibrary/Attribute:tapes_list' => 'Ленты',
'Class:TapeLibrary/Attribute:tapes_list+' => 'Ленты',
]);
@@ -371,7 +371,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:NAS' => 'Сетевое хранилище',
'Class:NAS+' => 'Сетевое хранилище',
'Class:NAS/ComplementaryName' => '%1$s - %2$s',
'Class:NAS/ComplementaryName' => '%1$s - %2$s~~',
'Class:NAS/Attribute:nasfilesystem_list' => 'Файловые системы',
'Class:NAS/Attribute:nasfilesystem_list+' => 'Файловые системы',
]);
@@ -383,7 +383,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PC' => 'Персональный компьютер',
'Class:PC+' => 'Персональный компьютер',
'Class:PC/ComplementaryName' => '%1$s - %2$s',
'Class:PC/ComplementaryName' => '%1$s - %2$s~~',
'Class:PC/Attribute:osfamily_id' => 'Семейство ОС',
'Class:PC/Attribute:osfamily_id+' => 'Семейство операционной системы',
'Class:PC/Attribute:osfamily_name' => 'Семейство ОС',
@@ -411,7 +411,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Printer' => 'Принтер',
'Class:Printer+' => 'Принтер',
'Class:Printer/ComplementaryName' => '%1$s - %2$s',
'Class:Printer/ComplementaryName' => '%1$s - %2$s~~',
]);
//
@@ -421,7 +421,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PowerConnection' => 'Электропитание',
'Class:PowerConnection+' => 'Подключения электропитания',
'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s',
'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s~~',
]);
//
@@ -431,7 +431,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PowerSource' => 'Источник электропитания',
'Class:PowerSource+' => 'Источник электропитания',
'Class:PowerSource/ComplementaryName' => '%1$s - %2$s',
'Class:PowerSource/ComplementaryName' => '%1$s - %2$s~~',
'Class:PowerSource/Attribute:pdus_list' => 'Распределители',
'Class:PowerSource/Attribute:pdus_list+' => 'Распределители электропитания (PDU)',
]);
@@ -443,7 +443,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PDU' => 'Распределитель ЭП',
'Class:PDU+' => 'Распределитель электропитания',
'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s',
'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s~~',
'Class:PDU/Attribute:rack_id' => 'Стойка',
'Class:PDU/Attribute:rack_id+' => '',
'Class:PDU/Attribute:rack_name' => 'Стойка',
@@ -461,7 +461,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Peripheral' => 'Периферийное устройство',
'Class:Peripheral+' => 'Периферийное устройство',
'Class:Peripheral/ComplementaryName' => '%1$s - %2$s',
'Class:Peripheral/ComplementaryName' => '%1$s - %2$s~~',
]);
//
@@ -471,7 +471,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Enclosure' => 'Крейт',
'Class:Enclosure+' => 'Крейт, шасси и т.п.',
'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s',
'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s~~',
'Class:Enclosure/Attribute:rack_id' => 'Стойка',
'Class:Enclosure/Attribute:rack_id+' => '',
'Class:Enclosure/Attribute:rack_name' => 'Стойка',
@@ -493,8 +493,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Конфигурационные единицы в составе прикладного решения',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Бизнес-процессы',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Бизнес-процессы, зависящие от прикладного решения',
'Class:ApplicationSolution/Attribute:logo' => 'Логотип',
'Class:ApplicationSolution/Attribute:logo+' => 'Используется как иконка объекта на графах анализа влияния',
'Class:ApplicationSolution/Attribute:logo' => 'Logo~~',
'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:ApplicationSolution/Attribute:status' => 'Статус',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'Активный',
@@ -516,8 +516,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Прикладные решения',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Прикладные решения, влияющие на бизнес-процесс',
'Class:BusinessProcess/Attribute:logo' => 'Логотип',
'Class:BusinessProcess/Attribute:logo+' => 'Используется как иконка объекта на графах анализа влияния',
'Class:BusinessProcess/Attribute:logo' => 'Logo~~',
'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:BusinessProcess/Attribute:status' => 'Статус',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'Активный',
@@ -613,9 +613,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:MiddlewareInstance' => 'Экземпляр промежуточного ПО',
'Class:MiddlewareInstance+' => 'Экземпляр промежуточного ПО',
'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s',
'Class:MiddlewareInstance/Attribute:logo' => 'Логотип',
'Class:MiddlewareInstance/Attribute:logo+' => 'Используется как иконка объекта на графах анализа влияния',
'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~',
'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~',
'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:MiddlewareInstance/Attribute:middleware_id' => 'Промежуточное ПО',
'Class:MiddlewareInstance/Attribute:middleware_id+' => '',
'Class:MiddlewareInstance/Attribute:middleware_name' => 'Промежуточное ПО',
@@ -629,7 +629,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:DatabaseSchema' => 'Схема базы данных',
'Class:DatabaseSchema+' => 'Схема базы данных',
'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s',
'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s~~',
'Class:DatabaseSchema/Attribute:dbserver_id' => 'Сервер БД',
'Class:DatabaseSchema/Attribute:dbserver_id+' => '',
'Class:DatabaseSchema/Attribute:dbserver_name' => 'Сервер БД',
@@ -643,13 +643,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:WebApplication' => 'Веб-приложение',
'Class:WebApplication+' => 'Веб-приложение',
'Class:WebApplication/ComplementaryName' => '%1$s - %2$s',
'Class:WebApplication/ComplementaryName' => '%1$s - %2$s~~',
'Class:WebApplication/Attribute:webserver_id' => 'Веб-сервер',
'Class:WebApplication/Attribute:webserver_id+' => '',
'Class:WebApplication/Attribute:webserver_name' => 'Веб-сервер',
'Class:WebApplication/Attribute:webserver_name+' => '',
'Class:WebApplication/Attribute:logo' => 'Логотип',
'Class:WebApplication/Attribute:logo+' => 'Используется как иконка объекта на графах анализа влияния',
'Class:WebApplication/Attribute:logo' => 'Logo~~',
'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~',
'Class:WebApplication/Attribute:url' => 'URL',
'Class:WebApplication/Attribute:url+' => '',
]);
@@ -725,7 +725,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:VirtualMachine' => 'Виртуальная машина',
'Class:VirtualMachine+' => 'Виртуальная машина',
'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s',
'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s~~',
'Class:VirtualMachine/Attribute:virtualhost_id' => 'Виртуальный хост',
'Class:VirtualMachine/Attribute:virtualhost_id+' => '',
'Class:VirtualMachine/Attribute:virtualhost_name' => 'Виртуальный хост',
@@ -786,7 +786,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkServerToVolume' => 'Связь Сервер/Том',
'Class:lnkServerToVolume+' => 'Связь Сервер/Том',
'Class:lnkServerToVolume/Name' => '%1$s / %2$s',
'Class:lnkServerToVolume/Name' => '%1$s / %2$s~~',
'Class:lnkServerToVolume/Attribute:volume_id' => 'Том',
'Class:lnkServerToVolume/Attribute:volume_id+' => '',
'Class:lnkServerToVolume/Attribute:volume_name' => 'Том',
@@ -806,7 +806,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkVirtualDeviceToVolume' => 'Связь Виртуальное устройство/Том',
'Class:lnkVirtualDeviceToVolume+' => 'Связь Виртуальное устройство/Том',
'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s',
'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s~~',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Том',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => '',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_name' => 'Том',
@@ -826,7 +826,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkSanToDatacenterDevice' => 'Связь SAN коммутатор/Устройство дата-центра',
'Class:lnkSanToDatacenterDevice+' => 'Связь SAN коммутатор/Устройство дата-центра',
'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s',
'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s~~',
'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'SAN коммутатор',
'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => '',
'Class:lnkSanToDatacenterDevice/Attribute:san_name' => 'SAN коммутатор',
@@ -847,7 +847,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Tape' => 'Лента',
'Class:Tape+' => 'Лента (или картридж) в '.ITOP_APPLICATION_SHORT.' — съёмный носитель, являющийся частью ленточной библиотеки',
'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~',
'Class:Tape/Attribute:name' => 'Название',
'Class:Tape/Attribute:name+' => '',
'Class:Tape/Attribute:description' => 'Описание',
@@ -888,7 +888,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Software' => 'Программное обеспечение',
'Class:Software+' => 'Программное обеспечение',
'Class:Software/ComplementaryName' => '%1$s - %2$s',
'Class:Software/ComplementaryName' => '%1$s - %2$s~~',
'Class:Software/Attribute:name' => 'Название',
'Class:Software/Attribute:name+' => '',
'Class:Software/Attribute:vendor' => 'Вендор',
@@ -897,8 +897,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Документы',
'Class:Software/Attribute:documents_list+' => 'Все документы, связанные с этим ПО',
'Class:Software/Attribute:logo' => 'Логотип',
'Class:Software/Attribute:logo+' => 'Используется как иконка для всех экземпляров ПО, использующих это ПО, на графах анализа влияния',
'Class:Software/Attribute:logo' => 'Logo~~',
'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~',
'Class:Software/Attribute:type' => 'Тип',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'Сервер БД',
@@ -947,7 +947,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:OSPatch/Attribute:functionalcis_list+' => 'Все системы, где установлен этот патч',
'Class:OSPatch/Attribute:osversion_id' => 'Версия ОС',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osfamily_id' => 'Семейство ОС',
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSPatch/Attribute:osfamily_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'Версия ОС',
'Class:OSPatch/Attribute:osversion_name+' => '',
@@ -1010,11 +1010,11 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:OSLicence' => 'Лицензия ОС',
'Class:OSLicence+' => 'Лицензия ОС',
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
'Class:OSLicence/Attribute:osversion_id' => 'Версия ОС',
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'Семейство ОС',
'Class:OSLicence/Attribute:osfamily_id+' => '',
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
'Class:OSLicence/Attribute:osversion_name' => 'Версия ОС',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Виртуальные машины',
@@ -1030,7 +1030,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:SoftwareLicence' => 'Лицензия ПО',
'Class:SoftwareLicence+' => 'Лицензия ПО',
'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s',
'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s~~',
'Class:SoftwareLicence/Attribute:software_id' => 'ПО',
'Class:SoftwareLicence/Attribute:software_id+' => '',
'Class:SoftwareLicence/Attribute:software_name' => 'ПО',
@@ -1046,7 +1046,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkDocumentToLicence' => 'Связь Документ/Лицензия',
'Class:lnkDocumentToLicence+' => '',
'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s',
'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Лицензия',
'Class:lnkDocumentToLicence/Attribute:licence_id+' => '',
'Class:lnkDocumentToLicence/Attribute:licence_name' => 'Лицензия',
@@ -1068,8 +1068,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:OSVersion/Attribute:osfamily_id+' => '',
'Class:OSVersion/Attribute:osfamily_name' => 'Семейство ОС',
'Class:OSVersion/Attribute:osfamily_name+' => '',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Название должно быть уникальным в рамках семейства ОС',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'такая версия ОС уже существует в этом семействе ОС',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~',
'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~',
]);
//
@@ -1079,8 +1079,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:OSFamily' => 'Семейство ОС',
'Class:OSFamily+' => '',
'Class:OSFamily/UniquenessRule:name+' => 'Название должно быть уникальным',
'Class:OSFamily/UniquenessRule:name' => 'такое семейство ОС уже существует',
'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~',
'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~',
]);
//
@@ -1090,8 +1090,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Brand' => 'Бренд',
'Class:Brand+' => '',
'Class:Brand/Attribute:logo' => 'Логотип',
'Class:Brand/Attribute:logo+' => '',
'Class:Brand/Attribute:logo' => 'Logo~~',
'Class:Brand/Attribute:logo+' => '~~',
'Class:Brand/Attribute:physicaldevices_list' => 'Устройства',
'Class:Brand/Attribute:physicaldevices_list+' => 'Все устройства этого бренда',
'Class:Brand/UniquenessRule:name+' => 'Название должно быть уникальным',
@@ -1105,13 +1105,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Model' => 'Модель',
'Class:Model+' => '',
'Class:Model/ComplementaryName' => '%1$s - %2$s',
'Class:Model/ComplementaryName' => '%1$s - %2$s~~',
'Class:Model/Attribute:brand_id' => 'Бренд',
'Class:Model/Attribute:brand_id+' => '',
'Class:Model/Attribute:brand_name' => 'Бренд',
'Class:Model/Attribute:brand_name+' => '',
'Class:Model/Attribute:picture' => 'Изображение',
'Class:Model/Attribute:picture+' => '',
'Class:Model/Attribute:picture' => 'Picture~~',
'Class:Model/Attribute:picture+' => '~~',
'Class:Model/Attribute:type' => 'Тип устройства',
'Class:Model/Attribute:type+' => '',
'Class:Model/Attribute:type/Value:PowerSource' => 'Источник электропитания',
@@ -1163,8 +1163,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:NetworkDeviceType' => 'Тип сетевого устройства',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Логотип',
'Class:NetworkDeviceType/Attribute:logo+' => 'Используется как иконка для всех сетевых устройств этого типа в консоли (детали, карточка сводки и графы анализа влияния)',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Устройства',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Все сетевые устройства этого типа',
]);
@@ -1180,8 +1180,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:IOSVersion/Attribute:brand_id+' => '',
'Class:IOSVersion/Attribute:brand_name' => 'Бренд',
'Class:IOSVersion/Attribute:brand_name+' => '',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Название должно быть уникальным в рамках бренда',
'Class:IOSVersion/UniquenessRule:name_brand' => 'такая версия IOS уже существует для этого бренда',
'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~',
]);
//
@@ -1191,7 +1191,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkDocumentToPatch' => 'Связь Документ/Патч',
'Class:lnkDocumentToPatch+' => '',
'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s',
'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Патч',
'Class:lnkDocumentToPatch/Attribute:patch_id+' => '',
'Class:lnkDocumentToPatch/Attribute:patch_name' => 'Патч',
@@ -1209,7 +1209,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Связь Экземпляр ПО/Патч ПО',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => '',
'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s',
'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s~~',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Патч ПО',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_name' => 'Патч ПО',
@@ -1227,7 +1227,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkFunctionalCIToOSPatch' => 'Связь Функциональная КЕ/Патч ОС',
'Class:lnkFunctionalCIToOSPatch+' => '',
'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s',
'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'Патч ОС',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name' => 'Патч ОС',
@@ -1245,7 +1245,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkDocumentToSoftware' => 'Связь Документ/ПО',
'Class:lnkDocumentToSoftware+' => '',
'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s',
'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToSoftware/Attribute:software_id' => 'ПО',
'Class:lnkDocumentToSoftware/Attribute:software_id+' => '',
'Class:lnkDocumentToSoftware/Attribute:software_name' => 'ПО',
@@ -1263,8 +1263,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Subnet' => 'Подсеть',
'Class:Subnet+' => '',
'Class:Subnet/Name' => '%1$s/%2$s',
'Class:Subnet/ComplementaryName' => '%1$s - %2$s',
'Class:Subnet/Name' => '%1$s/%2$s~~',
'Class:Subnet/ComplementaryName' => '%1$s - %2$s~~',
'Class:Subnet/Attribute:description' => 'Описание',
'Class:Subnet/Attribute:description+' => '',
'Class:Subnet/Attribute:subnet_name' => 'Имя подсети',
@@ -1309,7 +1309,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkSubnetToVLAN' => 'Связь Подсеть/VLAN',
'Class:lnkSubnetToVLAN+' => '',
'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s',
'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s~~',
'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Подсеть',
'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => '',
'Class:lnkSubnetToVLAN/Attribute:subnet_ip' => 'IP-адрес подсети',
@@ -1363,7 +1363,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PhysicalInterface' => 'Физический интерфейс',
'Class:PhysicalInterface+' => '',
'Class:PhysicalInterface/Name' => '%2$s %1$s',
'Class:PhysicalInterface/Name' => '%2$s %1$s~~',
'Class:PhysicalInterface/Attribute:connectableci_id' => 'Устройства',
'Class:PhysicalInterface/Attribute:connectableci_id+' => '',
'Class:PhysicalInterface/Attribute:connectableci_name' => 'Устройства',
@@ -1379,7 +1379,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkPhysicalInterfaceToVLAN' => 'Связь Физический интерфейс/VLAN',
'Class:lnkPhysicalInterfaceToVLAN+' => '',
'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s',
'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s~~',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => 'Физический интерфейс',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_name' => 'Физический интерфейс',
@@ -1433,7 +1433,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkConnectableCIToNetworkDevice' => 'Связь Подключаемая КЕ/Сетевое устройство',
'Class:lnkConnectableCIToNetworkDevice+' => '',
'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s',
'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s~~',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => 'Сетевое устройство',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_name' => 'Сетевое устройство',
@@ -1461,7 +1461,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkApplicationSolutionToFunctionalCI' => 'Связь Прикладное решение/Функциональная КЕ',
'Class:lnkApplicationSolutionToFunctionalCI+' => '',
'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => 'Прикладное решение',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id+' => '',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_name' => 'Прикладное решение',
@@ -1479,7 +1479,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkApplicationSolutionToBusinessProcess' => 'Связь Прикладное решение/Бизнес-процесс',
'Class:lnkApplicationSolutionToBusinessProcess+' => '',
'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s',
'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s~~',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => 'Бизнес-процесс',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id+' => '',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_name' => 'Бизнес-процесс',
@@ -1497,7 +1497,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Group' => 'Группа',
'Class:Group+' => '',
'Class:Group/ComplementaryName' => '%1$s - %2$s',
'Class:Group/ComplementaryName' => '%1$s - %2$s~~',
'Class:Group/Attribute:name' => 'Название',
'Class:Group/Attribute:name+' => '',
'Class:Group/Attribute:status' => 'Статус',
@@ -1533,7 +1533,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkGroupToCI' => 'Связь Группа/КЕ',
'Class:lnkGroupToCI+' => '',
'Class:lnkGroupToCI/Name' => '%1$s / %2$s',
'Class:lnkGroupToCI/Name' => '%1$s / %2$s~~',
'Class:lnkGroupToCI/Attribute:group_id' => 'Группа',
'Class:lnkGroupToCI/Attribute:group_id+' => '',
'Class:lnkGroupToCI/Attribute:group_name' => 'Группа',
@@ -1549,20 +1549,20 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
// Add translation for Fieldsets
Dict::Add('RU RU', 'Russian', 'Русский', [
'ConfigMgmt:baseinfo' => 'Общее',
'ConfigMgmt:moreinfo' => 'Особенности КЕ',
'Storage:moreinfo' => 'Особенности системы хранения',
'ConfigMgmt:otherinfo' => 'Описание',
'ConfigMgmt:dates' => 'Даты',
'Software:moreinfo' => 'Особенности ПО',
'Phone:moreinfo' => 'Особенности телефона',
'ConfigMgmt:baseinfo' => 'General~~',
'ConfigMgmt:moreinfo' => 'CI specifics~~',
'Storage:moreinfo' => 'Storage specifics~~',
'ConfigMgmt:otherinfo' => 'Description~~',
'ConfigMgmt:dates' => 'Dates~~',
'Software:moreinfo' => 'Software specifics~~',
'Phone:moreinfo' => 'Phone specifics~~',
'Server:baseinfo' => 'Основное',
'Server:Date' => 'Даты',
'Server:moreinfo' => 'Спецификация',
'Server:otherinfo' => 'Дополнительно',
'Server:power' => 'Электропитание',
'Class:Subnet/Tab:IPUsage' => 'Использование IP-адресов',
'Class:Subnet/Tab:IPUsage+' => 'Какие IP в этой подсети используются, а какие нет',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Интерфейсы с IP-адресом в диапазоне: <em>%1$s</em> - <em>%2$s</em>',
'Class:Subnet/Tab:FreeIPs' => 'Свободные IP-адреса',
'Class:Subnet/Tab:FreeIPs-count' => 'Свободных IP-адресов: %1$s',
@@ -1577,7 +1577,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkDocumentToFunctionalCI' => 'Связь Документ/Функциональная КЕ',
'Class:lnkDocumentToFunctionalCI+' => '',
'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'Функциональная КЕ',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_name' => 'Функциональная КЕ',
@@ -1644,8 +1644,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:PhysicalInterface/Attribute:org_id' => 'Организация',
'Class:PhysicalInterface/Attribute:org_id+' => '',
'Class:PhysicalInterface/Attribute:location_id' => 'Местоположение',
'Class:PhysicalInterface/Attribute:location_id+' => '',
'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~',
'Class:PhysicalInterface/Attribute:org_id+' => '~~',
'Class:PhysicalInterface/Attribute:location_id' => 'Location~~',
'Class:PhysicalInterface/Attribute:location_id+' => '~~',
]);

View File

@@ -30,11 +30,11 @@
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Relation:impacts/Description' => '被影响的元素',
'Relation:impacts/DownStream' => '影响...',
'Relation:impacts/DownStream+' => '影响的元素',
'Relation:impacts/DownStream+' => '影响的元素',
'Relation:impacts/UpStream' => '依赖于...',
'Relation:impacts/UpStream+' => '被影响的元素...',
'Relation:impacts/UpStream+' => '此元素依赖的元素...',
// Legacy entries
'Relation:depends on/Description' => '被影响的元素...',
'Relation:depends on/Description' => '此元素依赖的元素...',
'Relation:depends on/DownStream' => '依赖于...',
'Relation:depends on/UpStream' => '影响...',
'Relation:impacts/LoadData' => '加载数据',
@@ -129,7 +129,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s',
'Class:PhysicalDevice/Attribute:serialnumber' => '序列号',
'Class:PhysicalDevice/Attribute:serialnumber+' => '',
'Class:PhysicalDevice/Attribute:location_id' => '位置',
'Class:PhysicalDevice/Attribute:location_id' => '地点',
'Class:PhysicalDevice/Attribute:location_id+' => '',
'Class:PhysicalDevice/Attribute:location_name' => '名称',
'Class:PhysicalDevice/Attribute:location_name+' => '',
@@ -183,7 +183,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:TelephonyCI' => '通讯项',
'Class:TelephonyCI+' => '通信设备的抽象类',
'Class:TelephonyCI+' => '',
'Class:TelephonyCI/Attribute:phonenumber' => '电话号码',
'Class:TelephonyCI/Attribute:phonenumber+' => '',
]);
@@ -206,7 +206,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:MobilePhone+' => '终端用户设备.无线电话',
'Class:MobilePhone/Attribute:imei' => 'IMEI',
'Class:MobilePhone/Attribute:imei+' => '',
'Class:MobilePhone/Attribute:hw_pin' => '硬件PIN码',
'Class:MobilePhone/Attribute:hw_pin' => '硬件 PIN 码',
'Class:MobilePhone/Attribute:hw_pin+' => '',
]);
@@ -216,7 +216,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:IPPhone' => 'IP 电话',
'Class:IPPhone+' => '用于联网打电话的物理设备',
'Class:IPPhone+' => '用于电话的物理设备,连接到网络',
]);
//
@@ -262,13 +262,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:DatacenterDevice/Attribute:nb_u+' => '',
'Class:DatacenterDevice/Attribute:managementip' => '管理IP',
'Class:DatacenterDevice/Attribute:managementip+' => '',
'Class:DatacenterDevice/Attribute:powerA_id' => '电源A',
'Class:DatacenterDevice/Attribute:powerA_id' => '电源',
'Class:DatacenterDevice/Attribute:powerA_id+' => '',
'Class:DatacenterDevice/Attribute:powerA_name' => '电源A名称',
'Class:DatacenterDevice/Attribute:powerA_name' => '电源名称',
'Class:DatacenterDevice/Attribute:powerA_name+' => '',
'Class:DatacenterDevice/Attribute:powerB_id' => '电源B',
'Class:DatacenterDevice/Attribute:powerB_id' => '电源',
'Class:DatacenterDevice/Attribute:powerB_id+' => '',
'Class:DatacenterDevice/Attribute:powerB_name' => '电源B名称',
'Class:DatacenterDevice/Attribute:powerB_name' => '电源名称',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => '光口',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '此设备的所有光纤接口',
@@ -295,12 +295,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => '设备',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '连接到此网络设备的所有设备',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS 版本',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS版本',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS 版本名称',
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS版本名称',
'Class:NetworkDevice/Attribute:iosversion_name+' => '',
'Class:NetworkDevice/Attribute:ios_end_of_support' => 'IOS 过保日期',
'Class:NetworkDevice/Attribute:ios_end_of_support+' => '厂不再为该IOS版本提供修复的时间.',
'Class:NetworkDevice/Attribute:ios_end_of_support' => 'IOS过保时间',
'Class:NetworkDevice/Attribute:ios_end_of_support+' => '厂不再为该IOS版本提供修复的时间.',
'Class:NetworkDevice/Attribute:ram' => '内存',
'Class:NetworkDevice/Attribute:ram+' => '',
]);
@@ -321,8 +321,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:Server/Attribute:osversion_id+' => '',
'Class:Server/Attribute:osversion_name' => 'OS 版本名称',
'Class:Server/Attribute:osversion_name+' => '',
'Class:Server/Attribute:os_end_of_support' => 'OS 过保日期',
'Class:Server/Attribute:os_end_of_support+' => '厂商不再为该操作系统版本提供补丁的日期.',
'Class:Server/Attribute:os_end_of_support' => 'OS 过保时间',
'Class:Server/Attribute:os_end_of_support+' => '厂商不再为该操作系统版本提供补丁的时间.',
'Class:Server/Attribute:oslicence_id' => 'OS 许可证',
'Class:Server/Attribute:oslicence_id+' => '',
'Class:Server/Attribute:oslicence_name' => 'OS 许可证名称',
@@ -332,7 +332,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:Server/Attribute:ram' => '内存',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => '逻辑卷',
'Class:Server/Attribute:logicalvolumes_list+' => '连接到此物理机的所有逻辑卷',
'Class:Server/Attribute:logicalvolumes_list+' => '连接到此服务器的所有逻辑卷',
]);
//
@@ -341,7 +341,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:StorageSystem' => '存储系统',
'Class:StorageSystem+' => '存储系统通常使用光纤或以太网, 以逻辑卷为单位进行管理.',
'Class:StorageSystem+' => '存储系统可以使用光纤或以太网连接. 存储系统以逻辑卷为单位进行管理.',
'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s',
'Class:StorageSystem/Attribute:logicalvolume_list' => '逻辑卷',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '此存储系统包含的所有逻辑卷',
@@ -399,8 +399,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:PC/Attribute:osversion_id+' => '',
'Class:PC/Attribute:osversion_name' => 'OS 版本名称',
'Class:PC/Attribute:osversion_name+' => '',
'Class:PC/Attribute:os_end_of_support' => 'OS 过保日期',
'Class:PC/Attribute:os_end_of_support+' => '厂商不再为该操作系统版本提供补丁的日期.',
'Class:PC/Attribute:os_end_of_support' => 'OS 过保时间',
'Class:PC/Attribute:os_end_of_support+' => '厂商不再为该操作系统版本提供补丁的时间.',
'Class:PC/Attribute:cpu' => 'CPU',
'Class:PC/Attribute:cpu+' => '',
'Class:PC/Attribute:ram' => '内存',
@@ -439,7 +439,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:PowerSource' => '电源',
'Class:PowerSource+' => '物理电源连接. 用于描述数据中心的任何类型的电源 (主电源入口, 断路器…) ,但不是 PDU.',
'Class:PowerSource+' => '物理电源连接. 用于记录数据中心的任何类型的电源 (主电源入口, 断路器…) ,但不是 PDU.',
'Class:PowerSource/ComplementaryName' => '%1$s - %2$s',
'Class:PowerSource/Attribute:pdus_list' => 'PDU',
'Class:PowerSource/Attribute:pdus_list+' => '使用此电源的所有 PDU',
@@ -451,7 +451,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:PDU' => 'PDU',
'Class:PDU+' => '供电线路. PDU (Power Distribution Unit) 是一种配备了多个输出的电力分配设备,特别是为数据中心内的服务器机架和网络设备机架供电.',
'Class:PDU+' => '电力供应连接. PDU (Power Distribution Unit) 是一种配备了多个输出的电力分配设备,特别是为数据中心内的服务器机架和网络设备机架供电.',
'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s',
'Class:PDU/Attribute:rack_id' => '机架',
'Class:PDU/Attribute:rack_id+' => '',
@@ -498,7 +498,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:ApplicationSolution' => '应用方案',
'Class:ApplicationSolution+' => '应用方案描述了复杂应用是如何由多个基本组件组装的. 应用方案的主要信息是组件之间的依赖关系列表.',
'Class:ApplicationSolution+' => '应用方案描述了复杂应用是如何由多个基本组件之间组装(或依赖)的. 应用方案的主要信息是关系列表.',
'Class:ApplicationSolution/Attribute:functionalcis_list' => '配置项',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '此应用方案包含的所有配置项',
'Class:ApplicationSolution/Attribute:businessprocess_list' => '业务流程',
@@ -523,7 +523,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:BusinessProcess' => '业务流程',
'Class:BusinessProcess+' => '业务流程描述运营过程中的高级流程或重要应用. 它与应用方案非常类似, 但是用于描述更高层次的应用或整个组织的流程.',
'Class:BusinessProcess+' => '业务流程用于描述运营过程中的高级流程或重要应用. 它与应用方案非常类似, 但是为了描述更高层次的应用或整个组织的流程.',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => '应用方案',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '影响此业务流程的所有应用方案',
'Class:BusinessProcess/Attribute:logo' => 'Logo',
@@ -551,7 +551,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:Software/Attribute:version' => '版本',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:end_of_support' => '过保日期',
'Class:Software/Attribute:end_of_support+' => '厂提供的最后支持日期,此后不再提供此软件版本的补丁.',
'Class:Software/Attribute:end_of_support+' => '厂提供的最后一个支持日期,此后不再提供此软件版本的补丁.',
'Class:Software/Attribute:documents_list' => '文档',
'Class:Software/Attribute:documents_list+' => '此软件相关的所有文档',
'Class:Software/Attribute:logo' => 'Logo',
@@ -591,7 +591,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:SoftwareInstance/Attribute:software_id+' => '',
'Class:SoftwareInstance/Attribute:software_name' => '软件名称',
'Class:SoftwareInstance/Attribute:software_name+' => '',
'Class:SoftwareInstance/Attribute:software_end_of_support' => '软件过保日期',
'Class:SoftwareInstance/Attribute:software_end_of_support' => '软件过保时间',
'Class:SoftwareInstance/Attribute:software_end_of_support+' => '厂商为此软件版本提供补丁的最后日期.',
'Class:SoftwareInstance/Attribute:softwarelicence_id' => '软件许可证',
'Class:SoftwareInstance/Attribute:softwarelicence_id+' => '',
@@ -625,8 +625,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:DBServer' => 'DB 服务器',
'Class:DBServer+' => '提供数据库服务的软件实例 (例如: MySQL 8.0, Oracle, SQL Server, DB2…), 通常安装在特定系统(PC, 物理机或虚拟机)上.',
'Class:DBServer/Attribute:dbschema_list' => '数据库模式',
'Class:DBServer/Attribute:dbschema_list+' => '此数据库服务器上的所有数据库模式',
'Class:DBServer/Attribute:dbschema_list' => '数据库架构',
'Class:DBServer/Attribute:dbschema_list+' => '此数据库服务器上的所有数据库架构',
]);
//
@@ -679,7 +679,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:DatabaseSchema' => '数据库模式',
'Class:DatabaseSchema' => '数据库架构',
'Class:DatabaseSchema+' => 'DB 服务器上运行的逻辑数据库实例.',
'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s',
'Class:DatabaseSchema/Attribute:dbserver_id' => 'DB 服务器',
@@ -712,7 +712,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:VirtualDevice' => '虚拟设备',
'Class:VirtualDevice+' => '用于服务器虚拟化的抽象类 (虚拟化主机和虚拟机).',
'Class:VirtualDevice+' => '用于服务器虚拟化的抽象类 (宿主机和虚拟机).',
'Class:VirtualDevice/Attribute:status' => '状态',
'Class:VirtualDevice/Attribute:status+' => '',
'Class:VirtualDevice/Attribute:status/Value:implementation' => '生效',
@@ -732,10 +732,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
//
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:VirtualHost' => '虚拟化主机',
'Class:VirtualHost' => '宿主机',
'Class:VirtualHost+' => '对虚拟设备(虚拟机监视器, 集群,...)的抽象, 用于托管虚拟机.',
'Class:VirtualHost/Attribute:virtualmachine_list' => '虚拟机',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '此虚拟化主机托管的所有虚拟机',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '此宿主机托管的所有虚拟机',
]);
//
@@ -778,7 +778,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:VirtualMachine' => '虚拟机',
'Class:VirtualMachine+' => '与物理机类似的虚拟设备,它既可以托管在 Hypervisor 上,也可以托管在集群上.',
'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s',
'Class:VirtualMachine/Attribute:virtualhost_id' => '虚拟化主机',
'Class:VirtualMachine/Attribute:virtualhost_id' => '宿主机',
'Class:VirtualMachine/Attribute:virtualhost_id+' => '',
'Class:VirtualMachine/Attribute:virtualhost_name' => '名称',
'Class:VirtualMachine/Attribute:virtualhost_name+' => '',
@@ -1061,7 +1061,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkDocumentToLicence' => '链接 文档/许可证',
'Class:lnkDocumentToLicence+' => '此链接用于当某个文档适用于某个许可证时.',
'Class:lnkDocumentToLicence+' => 'Link used when a Document is applicable to a License.~~',
'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s',
'Class:lnkDocumentToLicence/Attribute:licence_id' => '许可证',
'Class:lnkDocumentToLicence/Attribute:licence_id+' => '',
@@ -1085,9 +1085,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:OSVersion/Attribute:osfamily_name' => '名称',
'Class:OSVersion/Attribute:osfamily_name+' => '',
'Class:OSVersion/Attribute:end_of_support' => '过保日期',
'Class:OSVersion/Attribute:end_of_support+' => '厂商停止为此 OS 版本提供补丁的截止日期.',
'Class:OSVersion/Attribute:end_of_support+' => 'The date after which the editor ceases to provide patches for this OS version.~~',
'Class:OSVersion/Attribute:ospatches_list' => 'OS 补丁',
'Class:OSVersion/Attribute:ospatches_list+' => '此 OS 版本的所有补丁',
'Class:OSVersion/Attribute:ospatches_list+' => 'All the OS patches for this OS version~~',
'Class:OSVersion/UniquenessRule:name_osfamily+' => 'OS 家族的名称必须唯一',
'Class:OSVersion/UniquenessRule:name_osfamily' => '此 OS 版本已在 OS 家族中存在',
]);
@@ -1222,7 +1222,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkDocumentToPatch' => '链接 文档/补丁',
'Class:lnkDocumentToPatch+' => '此链接用于当某个文档适用于某个补丁时.',
'Class:lnkDocumentToPatch+' => 'Link used when a Document is applicable to a Patch.~~',
'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s',
'Class:lnkDocumentToPatch/Attribute:patch_id' => '补丁',
'Class:lnkDocumentToPatch/Attribute:patch_id+' => '',
@@ -1240,7 +1240,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkSoftwareInstanceToSoftwarePatch' => '链接 软件实例/软件补丁',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => '此链接表示某个软件补丁已应用于软件实例.',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => 'This link indicates that a software patch has been applied to a software instance.~~',
'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => '软件补丁',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '',
@@ -1276,7 +1276,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkDocumentToSoftware' => '链接 文档/软件',
'Class:lnkDocumentToSoftware+' => '此链接用于当某个文档适用于某个软件时.',
'Class:lnkDocumentToSoftware+' => 'Link used when a Document is applicable to Software.~~',
'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s',
'Class:lnkDocumentToSoftware/Attribute:software_id' => '软件',
'Class:lnkDocumentToSoftware/Attribute:software_id+' => '',
@@ -1415,7 +1415,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkPhysicalInterfaceToVLAN' => '链接 物理网卡/VLAN',
'Class:lnkPhysicalInterfaceToVLAN+' => '此链接表示物理网卡是否属于某个VLAN (虚拟局域网).',
'Class:lnkPhysicalInterfaceToVLAN+' => 'This link indicates when a network interface is part of a VLAN (虚拟局域网).',
'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => '物理网卡',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '',
@@ -1450,7 +1450,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:FiberChannelInterface' => '光口',
'Class:FiberChannelInterface+' => '一种主要用于存储系统的高速网络接口.',
'Class:FiberChannelInterface+' => '主要用于存储系统的一种高速网络接口.',
'Class:FiberChannelInterface/Attribute:speed' => '速率',
'Class:FiberChannelInterface/Attribute:speed+' => '',
'Class:FiberChannelInterface/Attribute:topology' => '拓扑',
@@ -1469,7 +1469,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkConnectableCIToNetworkDevice' => '链接 可连接项/网络设备',
'Class:lnkConnectableCIToNetworkDevice+' => '定义设备连接到哪些网络设备.',
'Class:lnkConnectableCIToNetworkDevice+' => 'Defines on which network equipment a device is connected.~~',
'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => '网络设备',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '',
@@ -1569,7 +1569,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkGroupToCI' => '链接 配置组/配置项',
'Class:lnkGroupToCI+' => '此链接表示某个功能配置项属于某个配置组.',
'Class:lnkGroupToCI+' => 'This link indicates when a Functional CI is part of a Group.~~',
'Class:lnkGroupToCI/Name' => '%1$s / %2$s',
'Class:lnkGroupToCI/Attribute:group_id' => '组',
'Class:lnkGroupToCI/Attribute:group_id+' => '',
@@ -1589,7 +1589,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:lnkDocumentToFunctionalCI' => '链接 文档/功能配置项',
'Class:lnkDocumentToFunctionalCI+' => '此链接用于当某个文档适用于某个功能配置项时.',
'Class:lnkDocumentToFunctionalCI+' => 'Link used when a Document is applicable to a Functional CI.~~',
'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => '功能配置项',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '',

View File

@@ -32,6 +32,7 @@ SetupWebPage::AddModule(
],
'data.sample' => [
'data/data.sample.model.xml',
'data/data.sample.networkdevicetype.xml',
'data/data.sample.servers.xml',
'data/data.sample.nw-devices.xml',
'data/data.sample.software.xml',
@@ -105,7 +106,6 @@ if (!class_exists('ConfigMgmtInstaller')) {
*/
public static function AfterDatabaseCreation(Config $oConfiguration, $sPreviousVersion, $sCurrentVersion)
{
}
}
}

View File

@@ -12,7 +12,7 @@
*
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:ConfigFileEditor' => 'Texteditor',
'Menu:ConfigFileEditor' => 'Plain text editor~~',
'itop-config/Operation:Edit/Title' => 'Konfigurations-Editor',
'config-edit-intro' => 'Achtung: Eine falsche Konfiguration kann dazu führen, dass '.ITOP_APPLICATION_SHORT.' für alle Benutzer unbenutzbar ist!',
'Menu:ConfigEditor' => 'Konfiguration',

View File

@@ -12,7 +12,7 @@
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'Menu:ConfigFileEditor' => 'Текстовый редактор',
'Menu:ConfigFileEditor' => 'Plain text editor~~',
'itop-config/Operation:Edit/Title' => 'Редактор файла конфигурации',
'config-edit-intro' => 'Будьте очень осторожны при редактировании файла конфигурации. В частности, отредактированы могут быть только глобальная конфигурация и настройки модулей.',
'Menu:ConfigEditor' => 'Основные настройки',
@@ -26,8 +26,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'config-parse-error' => 'Строка %2$d: %1$s.<br/>Файл не был обновлен.',
'config-current-line' => 'Редактируемая строка: %1$s',
'config-saved-warning-db-password' => 'Изменения успешно сохранены, но резервная копия не будет работать из-за неподдерживаемых символов в пароле базы данных.',
'config-error-transaction' => 'Ошибка: недопустимый ID транзакции. Конфигурация <b>НЕ</b> была изменена.',
'config-error-file-changed' => 'Ошибка: файл конфигурации изменился с момента открытия, сохранение невозможно. Обновите страницу и примените изменения заново.',
'config-not-allowed-in-demo' => 'Извините, '.ITOP_APPLICATION_SHORT.' работает в <b>демонстрационном режиме</b>: файл конфигурации нельзя редактировать.',
'config-interactive-not-allowed' => ITOP_APPLICATION_SHORT.': интерактивное редактирование конфигурации отключено. См. <code>\'config_editor\' => \'disabled\'</code> в файле конфигурации.',
'config-error-transaction' => 'Error: invalid Transaction ID. The configuration was <b>NOT</b> modified.~~',
'config-error-file-changed' => 'Error: The Configuration file has changed since you opened it and cannot be saved. Refresh and apply your changes again.~~',
'config-not-allowed-in-demo' => 'Sorry, '.ITOP_APPLICATION_SHORT.' is in <b>demonstration mode</b>: the configuration file cannot be edited.~~',
'config-interactive-not-allowed' => ITOP_APPLICATION_SHORT.' interactive edition of the configuration as been disabled. See <code>\'config_editor\' => \'disabled\'</code> in the configuration file.~~',
]);

View File

@@ -1,173 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2013-2026 XXXXX
* @license http://opensource.org/licenses/AGPL-3.0
*/
//
// Fieldsets for Container classes
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Container:baseinfo' => 'Allgemein',
'Container:moreinfo' => 'Containerspezifische Angaben',
'Container:otherinfo' => 'Daten und Beschreibung',
]);
//
// Class Container Image
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerImage/Name' => '%1$s %2$s',
'Class:ContainerImage/ComplementaryName' => '%1$s - %2$s',
'Class:ContainerImage' => 'Container-Image',
'Class:ContainerImage+' => 'Das Image einer Software, die als Container gestartet werden kann',
'Class:ContainerImage/Attribute:name' => 'Name',
'Class:ContainerImage/Attribute:name+' => '',
'Class:ContainerImage/Attribute:version' => 'Version',
'Class:ContainerImage/Attribute:version+' => '',
'Class:ContainerImage/Attribute:description' => 'Beschreibung',
'Class:ContainerImage/Attribute:description+' => '',
'Class:ContainerImage/Attribute:publisher' => 'Herausgeber',
'Class:ContainerImage/Attribute:publisher+' => 'Herausgeber des Images, z. B. php, nginx, ...',
'Class:ContainerImage/Attribute:image' => 'Image',
'Class:ContainerImage/Attribute:image+' => 'Detailangaben, um das Image auf der jeweiligen Hosting-Plattform zu finden',
'Class:ContainerImage/Attribute:type_id' => 'Typ',
'Class:ContainerImage/Attribute:type_id+' => 'Typ des Images',
'Class:ContainerImage/Attribute:software_id' => 'Software',
'Class:ContainerImage/Attribute:software_id+' => '',
'Class:ContainerImage/Attribute:containerapplications_list' => 'Containerisierte Anwendungen',
'Class:ContainerImage/Attribute:containerapplications_list+' => 'Anwendungen, zu denen dieses Image beiträgt',
]);
//
// Class Container Application
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerApplication/Name' => '%1$s',
'Class:ContainerApplication/ComplementaryName' => '%1$s',
'Class:ContainerApplication' => 'Containerisierte Anwendung',
'Class:ContainerApplication+' => 'Eine Anwendung, die auf einer Container-Plattform betrieben wird',
'Class:ContainerApplication/Attribute:descriptor' => 'Deployment-Datei',
'Class:ContainerApplication/Attribute:descriptor+' => 'Datei, die beschreibt, wie die Anwendung auf der Container-Plattform ausgerollt wird (z. B. Docker Compose, Helm Chart usw.)',
'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Container-Host',
'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Container-Plattform, auf der die Anwendung läuft',
'Class:ContainerApplication/Attribute:logo' => 'Logo',
'Class:ContainerApplication/Attribute:logo+' => 'Wird als Objektsymbol verwendet, wenn diese containerisierte Anwendung in Impact-Analyse-Graphen dargestellt wird',
'Class:ContainerApplication/Attribute:containertype_id' => 'Container-Typ',
'Class:ContainerApplication/Attribute:containertype_id+' => 'Technologie, die für die Containerisierung eingesetzt wird',
'Class:ContainerApplication/Attribute:containerimages_list' => 'Container-Images',
'Class:ContainerApplication/Attribute:containerimages_list+' => 'Software-Images, aus denen die containerisierte Anwendung aufgebaut wird',
]);
//
// Class: lnkContainerApplicationToImage
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:lnkContainerApplicationToImage' => 'Verknüpfung Containerisierte Anwendung/Image',
'Class:lnkContainerApplicationToImage+' => '',
'Class:lnkContainerApplicationToImage/Name' => '%1$s / %2$s',
'Class:lnkContainerApplicationToImage/Name+' => '',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id' => 'Containerisierte Anwendung',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id+' => 'Anwendung, die dieses Image verwendet',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id' => 'Container-Image',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id+' => 'Software-Image, aus dem die containerisierte Anwendung aufgebaut wird',
]);
//
// Class Container Virtual Host
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerVirtualHost/Name' => '%1$s',
'Class:ContainerVirtualHost/ComplementaryName' => '',
'Class:ContainerVirtualHost' => 'Container-Plattform',
'Class:ContainerVirtualHost+' => 'Plattform, auf der Anwendungen als Container laufen',
'Class:ContainerVirtualHost/Attribute:containertype_id' => 'Container-Typ',
'Class:ContainerVirtualHost/Attribute:containertype_id+' => 'Technologie, mit der die Containerisierung bereitgestellt wird',
'Class:ContainerVirtualHost/Attribute:status' => 'Status',
'Class:ContainerVirtualHost/Attribute:status+' => 'Status der Container-Plattform',
'Class:ContainerVirtualHost/Attribute:containerapplications_list' => 'Anwendungen',
'Class:ContainerVirtualHost/Attribute:containerapplications_list+' => 'Anwendungen, die in dieser Container-Umgebung laufen',
]);
//
// Class Container Host
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerHost/Name' => '%1$s',
'Class:ContainerHost/ComplementaryName' => '%1$s-%2$s',
'Class:ContainerHost' => 'Container-Host',
'Class:ContainerHost+' => 'Host, der für Container vorgesehen ist. Er ist der Grundbaustein einer Container-Plattform',
'Class:ContainerHost/Attribute:containercluster_id' => 'Container-Cluster',
'Class:ContainerHost/Attribute:containercluster_id+' => '',
'Class:ContainerHost/Attribute:role' => 'Rolle',
'Class:ContainerHost/Attribute:role+' => 'Rolle des Hosts innerhalb seines Clusters: Master oder Worker. Standalone, wenn er zu keinem Cluster gehört.',
'Class:ContainerHost/Attribute:system_id' => 'System',
'Class:ContainerHost/Attribute:system_id+' => 'Das System kann ein Server, eine virtuelle Maschine, eine Cloud usw. sein',
'Class:ContainerHost/Attribute:role/Value:master' => 'Master',
'Class:ContainerHost/Attribute:role/Value:worker' => 'Worker',
'Class:ContainerHost/Attribute:role/Value:standalone' => 'Standalone',
]);
//
// Class Container Cluster
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerCluster/Name' => '%1$s',
'Class:ContainerCluster/ComplementaryName' => '',
'Class:ContainerCluster' => 'Container-Cluster',
'Class:ContainerCluster+' => 'Eine Container-Plattform, die aus einem Cluster von Container-Hosts besteht',
'Class:ContainerCluster/Attribute:redundancy' => 'Konfiguration der Redundanz',
'Class:ContainerCluster/Attribute:redundancy/disabled' => 'Das Cluster ist verfügbar, wenn alle seine Hosts verfügbar sind',
'Class:ContainerCluster/Attribute:redundancy/count' => 'Das Cluster ist verfügbar, wenn mindestens %1$s Hosts verfügbar sind',
'Class:ContainerCluster/Attribute:redundancy/percent' => 'Das Cluster ist verfügbar, wenn mindestens %1$s %% der Hosts verfügbar sind',
'Class:ContainerCluster/Attribute:containerhosts_list' => 'Container-Hosts',
'Class:ContainerCluster/Attribute:containerhosts_list+' => 'Hosts, die zu diesem Cluster gehören',
]);
//
// Class Container Type
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerType/Name' => '%1$s',
'Class:ContainerType/ComplementaryName' => '',
'Class:ContainerType' => 'Container-Typ',
'Class:ContainerType+' => 'Technologie, mit der die Containerisierung bereitgestellt wird',
]);
//
// Class Container Type
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:ContainerImageType/Name' => '%1$s',
'Class:ContainerImageType/ComplementaryName' => '',
'Class:ContainerImageType' => 'Container-Image-Typ',
'Class:ContainerImageType+' => 'Typologie von Container-Images',
]);
//
// Class Cloud, Server and Virtual Machine
//
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:Cloud/Attribute:containerhosts_list' => 'Container-Hosts',
'Class:Cloud/Attribute:containerhosts_list+' => 'Liste der Container-Hosts, die in dieser Cloud laufen',
'Class:Server/Attribute:containerhosts_list' => 'Container-Hosts',
'Class:Server/Attribute:containerhosts_list+' => 'Liste der Container-Hosts, die auf diesem Server laufen',
'Class:VirtualMachine/Attribute:containerhosts_list' => 'Container-Hosts',
'Class:VirtualMachine/Attribute:containerhosts_list+' => 'Liste der Container-Hosts, die auf dieser virtuellen Maschine laufen',
'Class:Software/Attribute:containerimages_list' => 'Container-Images',
'Class:Software/Attribute:containerimages_list+' => 'Liste der Container-Images, in denen diese Software läuft',
]);

View File

@@ -1,177 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2013 XXXXX
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* @author Vladimir Kunin <v.b.kunin@gmail.com>
*
*/
//
// Fieldsets for Container classes
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Container:baseinfo' => 'Общее',
'Container:moreinfo' => 'Особенности контейнеризации',
'Container:otherinfo' => 'Даты и описание',
]);
//
// Class Container Image
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerImage/Name' => '%1$s %2$s',
'Class:ContainerImage/ComplementaryName' => '%1$s - %2$s',
'Class:ContainerImage' => 'Образ контейнера',
'Class:ContainerImage+' => 'Образ ПО, готового к запуску в контейнере',
'Class:ContainerImage/Attribute:name' => 'Название',
'Class:ContainerImage/Attribute:name+' => '',
'Class:ContainerImage/Attribute:version' => 'Версия',
'Class:ContainerImage/Attribute:version+' => '',
'Class:ContainerImage/Attribute:description' => 'Описание',
'Class:ContainerImage/Attribute:description+' => '',
'Class:ContainerImage/Attribute:publisher' => 'Издатель',
'Class:ContainerImage/Attribute:publisher+' => 'Издатель образа, например php, nginx и т. д.',
'Class:ContainerImage/Attribute:image' => 'Образ',
'Class:ContainerImage/Attribute:image+' => 'Подробная информация для получения образа на соответствующей платформе хостинга',
'Class:ContainerImage/Attribute:type_id' => 'Тип',
'Class:ContainerImage/Attribute:type_id+' => 'Тип образа',
'Class:ContainerImage/Attribute:software_id' => 'ПО',
'Class:ContainerImage/Attribute:software_id+' => '',
'Class:ContainerImage/Attribute:containerapplications_list' => 'Контейнерные приложения',
'Class:ContainerImage/Attribute:containerapplications_list+' => 'Приложения, для которых используется этот образ',
]);
//
// Class Container Application
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerApplication/Name' => '%1$s',
'Class:ContainerApplication/ComplementaryName' => '%1$s',
'Class:ContainerApplication' => 'Контейнерное приложение',
'Class:ContainerApplication+' => 'Приложение, развёрнутое на платформе контейнеризации',
'Class:ContainerApplication/Attribute:descriptor' => 'Файл развёртывания',
'Class:ContainerApplication/Attribute:descriptor+' => 'Файл, описывающий развёртывание приложения на платформе контейнеризации (например, Docker Compose, Helm Chart и т. д.)',
'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Хост контейнеров',
'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Платформа контейнеризации, на которой выполняется приложение',
'Class:ContainerApplication/Attribute:logo' => 'Логотип',
'Class:ContainerApplication/Attribute:logo+' => 'Используется как иконка объекта на графах анализа влияния',
'Class:ContainerApplication/Attribute:containertype_id' => 'Тип контейнеризации',
'Class:ContainerApplication/Attribute:containertype_id+' => 'Технология, используемая для контейнеризации',
'Class:ContainerApplication/Attribute:containerimages_list' => 'Образы контейнеров',
'Class:ContainerApplication/Attribute:containerimages_list+' => 'Образы ПО, используемые для сборки контейнерного приложения',
]);
//
// Class: lnkContainerApplicationToImage
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:lnkContainerApplicationToImage' => 'Связь Контейнерное приложение / Образ',
'Class:lnkContainerApplicationToImage+' => '',
'Class:lnkContainerApplicationToImage/Name' => '%1$s / %2$s',
'Class:lnkContainerApplicationToImage/Name+' => '',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id' => 'Контейнерное приложение',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id+' => 'Приложение, использующее этот образ',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id' => 'Образ контейнера',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id+' => 'Образ ПО, используемый для сборки контейнерного приложения',
]);
//
// Class Container Virtual Host
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerVirtualHost/Name' => '%1$s',
'Class:ContainerVirtualHost/ComplementaryName' => '',
'Class:ContainerVirtualHost' => 'Платформа контейнеризации',
'Class:ContainerVirtualHost+' => 'Платформа, на которой приложения выполняются в виде контейнеров',
'Class:ContainerVirtualHost/Attribute:containertype_id' => 'Тип контейнеризации',
'Class:ContainerVirtualHost/Attribute:containertype_id+' => 'Технология, обеспечивающая контейнеризацию',
'Class:ContainerVirtualHost/Attribute:status' => 'Статус',
'Class:ContainerVirtualHost/Attribute:status+' => 'Статус платформы контейнеризации',
'Class:ContainerVirtualHost/Attribute:containerapplications_list' => 'Приложения',
'Class:ContainerVirtualHost/Attribute:containerapplications_list+' => 'Приложения, выполняющиеся в этом контейнерном окружении',
]);
//
// Class Container Host
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerHost/Name' => '%1$s',
'Class:ContainerHost/ComplementaryName' => '%1$s-%2$s',
'Class:ContainerHost' => 'Хост контейнеров',
'Class:ContainerHost+' => 'Хост, выделенный под контейнеры. Базовый элемент платформы контейнеризации',
'Class:ContainerHost/Attribute:containercluster_id' => 'Кластер контейнеров',
'Class:ContainerHost/Attribute:containercluster_id+' => '',
'Class:ContainerHost/Attribute:role' => 'Роль',
'Class:ContainerHost/Attribute:role+' => 'Роль хоста в кластере: master или worker. Standalone, если хост не входит в кластер.',
'Class:ContainerHost/Attribute:system_id' => 'Система',
'Class:ContainerHost/Attribute:system_id+' => 'Системой может быть сервер, виртуальная машина, облако и т. д.',
'Class:ContainerHost/Attribute:role/Value:master' => 'Мастер',
'Class:ContainerHost/Attribute:role/Value:worker' => 'Воркер',
'Class:ContainerHost/Attribute:role/Value:standalone' => 'Автономный',
]);
//
// Class Container Cluster
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerCluster/Name' => '%1$s',
'Class:ContainerCluster/ComplementaryName' => '',
'Class:ContainerCluster' => 'Кластер контейнеров',
'Class:ContainerCluster+' => 'Платформа контейнеризации, состоящая из кластера хостов контейнеров',
'Class:ContainerCluster/Attribute:redundancy' => 'Конфигурация резервирования',
'Class:ContainerCluster/Attribute:redundancy/disabled' => 'Кластер в работе, если все его хосты в работе',
'Class:ContainerCluster/Attribute:redundancy/count' => 'Кластер в работе, если по крайней мере %1$s хост(-ов) в работе',
'Class:ContainerCluster/Attribute:redundancy/percent' => 'Кластер в работе, если по крайней мере %1$s %% хостов в работе',
'Class:ContainerCluster/Attribute:containerhosts_list' => 'Хосты контейнеров',
'Class:ContainerCluster/Attribute:containerhosts_list+' => 'Хосты, входящие в этот кластер',
]);
//
// Class Container Type
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerType/Name' => '%1$s',
'Class:ContainerType/ComplementaryName' => '',
'Class:ContainerType' => 'Тип контейнеризации',
'Class:ContainerType+' => 'Технология, обеспечивающая контейнеризацию',
]);
//
// Class Container Type
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:ContainerImageType/Name' => '%1$s',
'Class:ContainerImageType/ComplementaryName' => '',
'Class:ContainerImageType' => 'Тип образа контейнера',
'Class:ContainerImageType+' => 'Типология образов контейнеров',
]);
//
// Class Cloud, Server and Virtual Machine
//
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Cloud/Attribute:containerhosts_list' => 'Хосты контейнеров',
'Class:Cloud/Attribute:containerhosts_list+' => 'Список хостов контейнеров, работающих в этом облаке',
'Class:Server/Attribute:containerhosts_list' => 'Хосты контейнеров',
'Class:Server/Attribute:containerhosts_list+' => 'Список хостов контейнеров, работающих на этом сервере',
'Class:VirtualMachine/Attribute:containerhosts_list' => 'Хосты контейнеров',
'Class:VirtualMachine/Attribute:containerhosts_list+' => 'Список хостов контейнеров, работающих на этой виртуальной машине',
'Class:Software/Attribute:containerimages_list' => 'Образы контейнеров',
'Class:Software/Attribute:containerimages_list+' => 'Список образов контейнеров, использующих это ПО',
]);

Some files were not shown because too many files have changed in this diff Show More