mirror of
https://github.com/Combodo/iTop.git
synced 2026-03-22 17:34:14 +01:00
Compare commits
59 Commits
issue/7726
...
feature/73
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cac103e7d | ||
|
|
32ef639ce1 | ||
|
|
8647a76dbf | ||
|
|
47cd8bce31 | ||
|
|
86c677b2ca | ||
|
|
960129316d | ||
|
|
1fa50f695d | ||
|
|
692cf4f635 | ||
|
|
95aa444ee6 | ||
|
|
f5de808c7c | ||
|
|
fc388313d7 | ||
|
|
d544ee5498 | ||
|
|
ce187550f6 | ||
|
|
5d15a08824 | ||
|
|
8135316119 | ||
|
|
868c0ae836 | ||
|
|
d03d4fce5f | ||
|
|
aa55c2b30f | ||
|
|
9d3b46b919 | ||
|
|
01b4dbba71 | ||
|
|
72ac4096c1 | ||
|
|
19559b08a7 | ||
|
|
346564ca0e | ||
|
|
1bf53bae2a | ||
|
|
29ce042916 | ||
|
|
83539d6d4c | ||
|
|
e6a7b926f6 | ||
|
|
b30e053236 | ||
|
|
afd96a0f49 | ||
|
|
a77765ec7b | ||
|
|
64b4b03ea9 | ||
|
|
a797878b17 | ||
|
|
1fa0f7bdd9 | ||
|
|
f718b4173d | ||
|
|
e057c0f081 | ||
|
|
5a49fc7654 | ||
|
|
6fca659c9d | ||
|
|
eacd08f31e | ||
|
|
5f7d8f6cc0 | ||
|
|
cbb4281a37 | ||
|
|
d7a8d335d5 | ||
|
|
bd1d447677 | ||
|
|
bb405d5173 | ||
|
|
4723fc885c | ||
|
|
06dcae1dd1 | ||
|
|
e03033ce52 | ||
|
|
19eae916f0 | ||
|
|
596e26a96f | ||
|
|
ef42a49009 | ||
|
|
51e5f1e7de | ||
|
|
9cffd17e19 | ||
|
|
e9f16935b6 | ||
|
|
e7488b2c89 | ||
|
|
8ac4086e71 | ||
|
|
6b5273fa1c | ||
|
|
9b1e854bf7 | ||
|
|
926700856d | ||
|
|
ab93d59a77 | ||
|
|
c70d62a51e |
@@ -825,49 +825,38 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
{
|
||||
// We are protected by GetSelectFilter: the object set contains objects allowed or shared for reading
|
||||
// We have to answer NO for objects shared for reading purposes
|
||||
if (self::HasSharing())
|
||||
{
|
||||
$aClassProps = SharedObject::GetSharedClassProperties($sClass);
|
||||
if ($aClassProps)
|
||||
{
|
||||
// This class is shared, GetSelectFilter may allow some objects for read only
|
||||
// But currently we are checking wether the objects might be written...
|
||||
// Let's exclude the objects based on the relevant criteria
|
||||
if (self::HasSharing() && SharedObject::GetSharedClassProperties($sClass)) {
|
||||
// This class is shared, GetSelectFilter may allow some objects for read only
|
||||
// But currently we are checking whether the objects might be written...
|
||||
// Let's exclude the objects based on the relevant criteria
|
||||
|
||||
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass);
|
||||
if (!is_null($sOrgAttCode))
|
||||
{
|
||||
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
|
||||
if (!is_null($aUserOrgs) && count($aUserOrgs) > 0)
|
||||
{
|
||||
$iCountNO = 0;
|
||||
$iCountYES = 0;
|
||||
$oInstanceSet->Rewind();
|
||||
while($oObject = $oInstanceSet->Fetch())
|
||||
{
|
||||
$iOrg = $oObject->Get($sOrgAttCode);
|
||||
if (in_array($iOrg, $aUserOrgs))
|
||||
{
|
||||
$iCountYES++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$iCountNO++;
|
||||
}
|
||||
}
|
||||
if ($iCountNO == 0)
|
||||
{
|
||||
$iPermission = UR_ALLOWED_YES;
|
||||
}
|
||||
elseif ($iCountYES == 0)
|
||||
{
|
||||
$iPermission = UR_ALLOWED_NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
$iPermission = UR_ALLOWED_DEPENDS;
|
||||
// Use $oInstanceSet only if sClass is the main class
|
||||
if (!is_a($oInstanceSet->GetClass(), $sClass, true)) {
|
||||
/** @var \DBObjectSet $oInstanceSet */
|
||||
throw new CoreException(__FUNCTION__.': Expecting object set to be of class '.$sClass.' but it is of class '.$oInstanceSet->GetClass(), ['OQL_Query' => $oInstanceSet->GetFilter()->ToOQL(), 'classes' => $oInstanceSet->GetSelectedClasses()]);
|
||||
}
|
||||
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass);
|
||||
if (!is_null($sOrgAttCode)) {
|
||||
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
|
||||
if (!is_null($aUserOrgs) && count($aUserOrgs) > 0) {
|
||||
$iCountNO = 0;
|
||||
$iCountYES = 0;
|
||||
$oInstanceSet->Rewind();
|
||||
while ($oObject = $oInstanceSet->Fetch()) {
|
||||
$iOrg = $oObject->Get($sOrgAttCode);
|
||||
if (in_array($iOrg, $aUserOrgs)) {
|
||||
$iCountYES++;
|
||||
} else {
|
||||
$iCountNO++;
|
||||
}
|
||||
}
|
||||
if ($iCountNO == 0) {
|
||||
$iPermission = UR_ALLOWED_YES;
|
||||
} elseif ($iCountYES == 0) {
|
||||
$iPermission = UR_ALLOWED_NO;
|
||||
} else {
|
||||
$iPermission = UR_ALLOWED_DEPENDS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -982,4 +971,3 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
|
||||
UserRights::SelectModule('UserRightsProfile');
|
||||
|
||||
?>
|
||||
|
||||
@@ -5923,14 +5923,14 @@ JS
|
||||
*
|
||||
* @since 3.1.0
|
||||
*/
|
||||
final protected function FireEventCheckToWrite(): void
|
||||
final protected function FireEventCheckToWrite(?string $sStimulusBeingApplied): void
|
||||
{
|
||||
$this->FireEvent(EVENT_DB_CHECK_TO_WRITE, ['is_new' => $this->IsNew()]);
|
||||
$this->FireEvent(EVENT_DB_CHECK_TO_WRITE, ['is_new' => $this->IsNew(), 'stimulus_applied' => $sStimulusBeingApplied]);
|
||||
}
|
||||
|
||||
final protected function FireEventBeforeWrite()
|
||||
final protected function FireEventBeforeWrite(?string $sStimulusBeingApplied)
|
||||
{
|
||||
$this->FireEvent(EVENT_DB_BEFORE_WRITE, ['is_new' => $this->IsNew()]);
|
||||
$this->FireEvent(EVENT_DB_BEFORE_WRITE, ['is_new' => $this->IsNew(), 'stimulus_applied' => $sStimulusBeingApplied]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -5942,11 +5942,11 @@ JS
|
||||
* @throws \CoreException
|
||||
* @since 3.1.0
|
||||
*/
|
||||
final protected function FireEventAfterWrite(array $aChanges, bool $bIsNew): void
|
||||
final protected function FireEventAfterWrite(array $aChanges, bool $bIsNew, ?string $sStimulusBeingApplied): void
|
||||
{
|
||||
$this->NotifyAttachedObjectsOnLinkClassModification();
|
||||
$this->RemoveObjectAwaitingEventDbLinksChanged(get_class($this), $this->GetKey());
|
||||
$this->FireEvent(EVENT_DB_AFTER_WRITE, ['is_new' => $bIsNew, 'changes' => $aChanges]);
|
||||
$this->FireEvent(EVENT_DB_AFTER_WRITE, ['is_new' => $bIsNew, 'changes' => $aChanges, 'stimulus_applied' => $sStimulusBeingApplied]);
|
||||
}
|
||||
|
||||
//////////////
|
||||
@@ -6179,9 +6179,9 @@ JS
|
||||
* @inheritDoc
|
||||
* @throws \CoreException
|
||||
*/
|
||||
final protected function FireEventComputeValues(): void
|
||||
final protected function FireEventComputeValues(?string $sStimulusBeingApplied): void
|
||||
{
|
||||
$this->FireEvent(EVENT_DB_COMPUTE_VALUES);
|
||||
$this->FireEvent(EVENT_DB_COMPUTE_VALUES, ['is_new' => $this->IsNew(), 'stimulus_applied' => $sStimulusBeingApplied]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1266,13 +1266,12 @@ EOF
|
||||
$sOkButtonLabel = Dict::S('UI:Button:Save');
|
||||
$sCancelButtonLabel = Dict::S('UI:Button:Cancel');
|
||||
|
||||
$sId = utils::HtmlEntities($this->sId);
|
||||
$sLayoutClass = utils::HtmlEntities($this->sLayoutClass);
|
||||
$sId = json_encode($this->sId);
|
||||
$sLayoutClass = json_encode($this->sLayoutClass);
|
||||
$sAutoReload = $this->bAutoReload ? 'true' : 'false';
|
||||
$sAutoReloadSec = (string) $this->iAutoReloadSec;
|
||||
$sTitle = utils::HtmlEntities($this->sTitle);
|
||||
$sFile = utils::HtmlEntities($this->GetDefinitionFile());
|
||||
$sFileForJS = json_encode($this->GetDefinitionFile());
|
||||
$sTitle = json_encode($this->sTitle);
|
||||
$sFile = json_encode($this->GetDefinitionFile());
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php';
|
||||
$sReloadURL = $this->GetReloadURL();
|
||||
|
||||
@@ -1328,15 +1327,15 @@ $('#dashboard_editor').dialog({
|
||||
});
|
||||
|
||||
$('#dashboard_editor .ui-layout-center').runtimedashboard({
|
||||
dashboard_id: '$sId',
|
||||
layout_class: '$sLayoutClass',
|
||||
title: '$sTitle',
|
||||
dashboard_id: $sId,
|
||||
layout_class: $sLayoutClass,
|
||||
title: $sTitle,
|
||||
auto_reload: $sAutoReload,
|
||||
auto_reload_sec: $sAutoReloadSec,
|
||||
submit_to: '$sUrl',
|
||||
submit_parameters: {operation: 'save_dashboard', file: {$sFileForJS}, extra_params: $sJSExtraParams, reload_url: '$sReloadURL'},
|
||||
submit_parameters: {operation: 'save_dashboard', file: $sFile, extra_params: $sJSExtraParams, reload_url: '$sReloadURL'},
|
||||
render_to: '$sUrl',
|
||||
render_parameters: {operation: 'render_dashboard', file: {$sFileForJS}, extra_params: $sJSExtraParams, reload_url: '$sReloadURL'},
|
||||
render_parameters: {operation: 'render_dashboard', file: $sFile, extra_params: $sJSExtraParams, reload_url: '$sReloadURL'},
|
||||
new_dashlet_parameters: {operation: 'new_dashlet'}
|
||||
});
|
||||
|
||||
|
||||
@@ -238,6 +238,10 @@ The object can be modified.]]></description>
|
||||
<description>Creation flag</description>
|
||||
<type>boolean</type>
|
||||
</event_datum>
|
||||
<event_datum id="stimulus_applied">
|
||||
<description>Life cycle stimulus applied (null if not within a transition)</description>
|
||||
<type>string</type>
|
||||
</event_datum>
|
||||
<event_datum id="debug_info">
|
||||
<description>Debug string</description>
|
||||
<type>string</type>
|
||||
@@ -263,6 +267,10 @@ Call $this->AddCheckWarning($sWarningMessage) to display a warning.
|
||||
<description>Creation flag</description>
|
||||
<type>boolean</type>
|
||||
</event_datum>
|
||||
<event_datum id="stimulus_applied">
|
||||
<description>Life cycle stimulus applied (null if not within a transition)</description>
|
||||
<type>string</type>
|
||||
</event_datum>
|
||||
<event_datum id="debug_info">
|
||||
<description>Debug string</description>
|
||||
<type>string</type>
|
||||
@@ -290,6 +298,10 @@ The modifications can be propagated to other objects.]]></description>
|
||||
<description><![CDATA[For updates, the list of changes done during this operation]]></description>
|
||||
<type>array</type>
|
||||
</event_datum>
|
||||
<event_datum id="stimulus_applied">
|
||||
<description>Life cycle stimulus applied (null if not within a transition)</description>
|
||||
<type>string</type>
|
||||
</event_datum>
|
||||
<event_datum id="debug_info">
|
||||
<description>Debug string</description>
|
||||
<type>string</type>
|
||||
@@ -420,6 +432,14 @@ The only action allowed is to deny transitions with $this->DenyTransition($sTran
|
||||
<description>The object inserted</description>
|
||||
<type>DBObject</type>
|
||||
</event_datum>
|
||||
<event_datum id="is_new">
|
||||
<description>Creation flag</description>
|
||||
<type>boolean</type>
|
||||
</event_datum>
|
||||
<event_datum id="stimulus_applied">
|
||||
<description>Life cycle stimulus applied (null if not within a transition)</description>
|
||||
<type>string</type>
|
||||
</event_datum>
|
||||
<event_datum id="debug_info">
|
||||
<description>Debug string</description>
|
||||
<type>string</type>
|
||||
|
||||
@@ -2024,8 +2024,8 @@ class MenuBlock extends DisplayBlock
|
||||
$sSelectedClassName = MetaModel::GetName($sSelectedClass);
|
||||
|
||||
// Check rights on class
|
||||
$bIsBulkModifyAllowed = (!MetaModel::IsAbstract($sSelectedClass)) && UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_MODIFY, $oSet) && ($oReflectionClass->IsSubclassOf('cmdbAbstractObject'));
|
||||
$bIsBulkDeleteAllowed = (bool) UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_DELETE, $sSelectedClass);
|
||||
$bIsBulkModifyAllowed = (!MetaModel::IsAbstract($sSelectedClass)) && UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_MODIFY) && ($oReflectionClass->IsSubclassOf('cmdbAbstractObject'));
|
||||
$bIsBulkDeleteAllowed = (bool) UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_DELETE);
|
||||
|
||||
// Refine filter on selected class so bullk actions occur on the right class
|
||||
$oSelectedClassFilter = $this->GetFilter()->DeepClone();
|
||||
|
||||
@@ -1159,11 +1159,11 @@ class OQLMenuNode extends MenuNode
|
||||
{
|
||||
$sUsageId = utils::GetSafeId($sUsageId);
|
||||
$oSearch = DBObjectSearch::FromOQL($sOql);
|
||||
$sClass= $oSearch->GetClass();
|
||||
$sClass= $oSearch->GetClass();
|
||||
$sIcon = MetaModel::GetClassIcon($sClass, false);
|
||||
if ($bSearchPane) {
|
||||
$aParams = array_merge(['open' => $bSearchOpen, 'table_id' => $sUsageId, 'submit_on_load' => false], $aExtraParams);
|
||||
$oBlock = new DisplayBlock($oSearch, 'search', false /* Asynchronous */, $aParams);
|
||||
$oBlock = new DisplayBlock($oSearch, DisplayBlock::ENUM_STYLE_SEARCH, false /* Asynchronous */, $aParams);
|
||||
$oBlock->Display($oPage, 0);
|
||||
$oPage->add("<div class='sf_results_area ibo-add-margin-top-250' data-target='search_results'>");
|
||||
}
|
||||
|
||||
@@ -1451,9 +1451,12 @@ class utils
|
||||
* @return string A path to a folder into which any module can store cache data
|
||||
* The corresponding folder is created or cleaned upon code compilation
|
||||
*/
|
||||
public static function GetCachePath()
|
||||
public static function GetCachePath(string $sEnvironment = null): string
|
||||
{
|
||||
return static::GetDataPath().'cache-'.MetaModel::GetEnvironment().'/';
|
||||
if (is_null($sEnvironment)) {
|
||||
$sEnvironment = MetaModel::GetEnvironment();
|
||||
}
|
||||
return static::GetDataPath()."cache-$sEnvironment/";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
102
composer.lock
generated
102
composer.lock
generated
@@ -3929,6 +3929,82 @@
|
||||
],
|
||||
"time": "2023-01-26T09:26:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php81",
|
||||
"version": "v1.31.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php81.git",
|
||||
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
|
||||
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/polyfill",
|
||||
"name": "symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php81\\": ""
|
||||
},
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-09T11:45:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php83",
|
||||
"version": "v1.28.0",
|
||||
@@ -4976,30 +5052,38 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.8.0",
|
||||
"version": "v3.16.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
|
||||
"reference": "475ad2dc97d65d8631393e721e7e44fb544f0561"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
|
||||
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/475ad2dc97d65d8631393e721e7e44fb544f0561",
|
||||
"reference": "475ad2dc97d65d8631393e721e7e44fb544f0561",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"php": ">=8.0.2",
|
||||
"symfony/deprecation-contracts": "^2.5|^3",
|
||||
"symfony/polyfill-ctype": "^1.8",
|
||||
"symfony/polyfill-mbstring": "^1.3",
|
||||
"symfony/polyfill-php80": "^1.22"
|
||||
"symfony/polyfill-php81": "^1.29"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^2.0",
|
||||
"psr/container": "^1.0|^2.0",
|
||||
"symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
|
||||
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/Resources/core.php",
|
||||
"src/Resources/debug.php",
|
||||
"src/Resources/escaper.php",
|
||||
"src/Resources/string_loader.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Twig\\": "src/"
|
||||
}
|
||||
@@ -5032,7 +5116,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.8.0"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.16.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5044,7 +5128,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-21T18:54:41+00:00"
|
||||
"time": "2024-11-29T08:27:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
||||
@@ -181,7 +181,7 @@ abstract class Action extends cmdbAbstractObject
|
||||
{
|
||||
parent::DisplayBareRelations($oPage, false);
|
||||
|
||||
if ($oPage instanceof iTopWebPage) {
|
||||
if ($oPage instanceof iTopWebPage && !$this->IsNew()) {
|
||||
$this->GenerateLastExecutionsTab($oPage, $bEditMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1715,8 +1715,8 @@ class AttributeLinkedSet extends AttributeDefinition
|
||||
public function GetEditMode()
|
||||
{
|
||||
return $this->GetOptional('edit_mode', LINKSET_EDITMODE_ACTIONS);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int see LINKSET_EDITWHEN_* constants
|
||||
* @since 3.1.1 3.2.0 N°6385
|
||||
@@ -1758,7 +1758,7 @@ class AttributeLinkedSet extends AttributeDefinition
|
||||
{
|
||||
return $this->GetOptional('with_php_computation', false);
|
||||
}
|
||||
|
||||
|
||||
public function GetLinkedClass()
|
||||
{
|
||||
return $this->Get('linked_class');
|
||||
@@ -9433,8 +9433,13 @@ class AttributeStopWatch extends AttributeDefinition
|
||||
case 'deadline':
|
||||
if ($value)
|
||||
{
|
||||
$sDate = date(AttributeDateTime::GetInternalFormat(), $value);
|
||||
$sRet = AttributeDeadline::FormatDeadline($sDate);
|
||||
if (is_int($value))
|
||||
{
|
||||
$sDate = date(AttributeDateTime::GetInternalFormat(), $value);
|
||||
$sRet = AttributeDeadline::FormatDeadline($sDate);
|
||||
} else {
|
||||
$sRet = $value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -71,7 +71,7 @@ define('DEFAULT_MAX_DISPLAY_LIMIT', 30);
|
||||
define('DEFAULT_STANDARD_RELOAD_INTERVAL', 5 * 60);
|
||||
define('DEFAULT_FAST_RELOAD_INTERVAL', 1 * 60);
|
||||
define('DEFAULT_SECURE_CONNECTION_REQUIRED', false);
|
||||
define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic');
|
||||
define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic|token');
|
||||
define('DEFAULT_EXT_AUTH_VARIABLE', '$_SERVER[\'REMOTE_USER\']');
|
||||
define('DEFAULT_ENCRYPTION_KEY', '@iT0pEncr1pti0n!'); // We'll use a random generated key later (if possible)
|
||||
define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption available later
|
||||
|
||||
@@ -850,6 +850,18 @@
|
||||
<field id="language" xsi:type="AttributeApplicationLanguage"/>
|
||||
</fields>
|
||||
</class>
|
||||
<class id="Event" _delta="define">
|
||||
<!-- Generated by toolkit/export-class-to-meta.php -->
|
||||
<parent>DBObject</parent>
|
||||
<properties>
|
||||
<category>core/cmdb,view_in_gui</category>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="message" xsi:type="AttributeText"/>
|
||||
<field id="date" xsi:type="AttributeDateTime"/>
|
||||
<field id="userinfo" xsi:type="AttributeString"/>
|
||||
</fields>
|
||||
</class>
|
||||
<class id="EventNotification" _delta="define">
|
||||
<!-- Generated by toolkit/export-class-to-meta.php -->
|
||||
<parent>Event</parent>
|
||||
|
||||
@@ -212,6 +212,8 @@ abstract class DBObject implements iDisplay
|
||||
private $aEventListeners = [];
|
||||
private array $aAllowedTransitions = [];
|
||||
|
||||
private ?string $sStimulusBeingApplied = null;
|
||||
|
||||
/**
|
||||
* DBObject constructor.
|
||||
*
|
||||
@@ -1206,7 +1208,7 @@ abstract class DBObject implements iDisplay
|
||||
if ($aCallInfo["function"] != "ComputeValues") continue;
|
||||
return; //skip!
|
||||
}
|
||||
$this->FireEventComputeValues();
|
||||
$this->FireEventComputeValues($this->sStimulusBeingApplied);
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->ComputeValues();
|
||||
$oKPI->ComputeStatsForExtension($this, 'ComputeValues');
|
||||
@@ -2130,7 +2132,7 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
return "Bad type";
|
||||
}
|
||||
elseif (($oAtt instanceof AttributeClassAttCodeSet) || ($oAtt instanceof AttributeEnumSet))
|
||||
elseif ($oAtt instanceof AttributeSet)
|
||||
{
|
||||
if (is_string($toCheck))
|
||||
{
|
||||
@@ -2669,7 +2671,7 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
// Ultimate check - ensure DB integrity
|
||||
$this->SetReadOnly('No modification allowed during CheckToCreate');
|
||||
$this->FireEventCheckToWrite();
|
||||
$this->FireEventCheckToWrite($this->sStimulusBeingApplied);
|
||||
$this->SetReadWrite();
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
@@ -3398,7 +3400,7 @@ abstract class DBObject implements iDisplay
|
||||
$this->OnInsert();
|
||||
$oKPI->ComputeStatsForExtension($this, 'OnInsert');
|
||||
|
||||
$this->FireEventBeforeWrite();
|
||||
$this->FireEventBeforeWrite(null);
|
||||
|
||||
// If not automatically computed, then check that the key is given by the caller
|
||||
if (!MetaModel::IsAutoIncrementKey($sRootClass)) {
|
||||
@@ -3533,7 +3535,7 @@ abstract class DBObject implements iDisplay
|
||||
*/
|
||||
protected function PostInsertActions(): void
|
||||
{
|
||||
$this->FireEventAfterWrite([], true);
|
||||
$this->FireEventAfterWrite([], true, null);
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->AfterInsert();
|
||||
$oKPI->ComputeStatsForExtension($this, 'AfterInsert');
|
||||
@@ -3641,7 +3643,7 @@ abstract class DBObject implements iDisplay
|
||||
$this->OnUpdate();
|
||||
$oKPI->ComputeStatsForExtension($this, 'OnUpdate');
|
||||
|
||||
$this->FireEventBeforeWrite();
|
||||
$this->FireEventBeforeWrite($this->sStimulusBeingApplied);
|
||||
|
||||
// Freeze the changes at this point
|
||||
$this->InitPreviousValuesForUpdatedAttributes();
|
||||
@@ -3852,7 +3854,7 @@ abstract class DBObject implements iDisplay
|
||||
*/
|
||||
protected function PostUpdateActions(array $aChanges): void
|
||||
{
|
||||
$this->FireEventAfterWrite($aChanges, false);
|
||||
$this->FireEventAfterWrite($aChanges, false, $this->sStimulusBeingApplied);
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->AfterUpdate();
|
||||
$oKPI->ComputeStatsForExtension($this, 'AfterUpdate');
|
||||
@@ -3864,39 +3866,38 @@ abstract class DBObject implements iDisplay
|
||||
$this->ActivateOnObjectUpdateTriggersForTargetObjects();
|
||||
|
||||
$sClass = get_class($this);
|
||||
if (MetaModel::HasLifecycle($sClass))
|
||||
if (utils::IsNotNullOrEmptyString($this->sStimulusBeingApplied))
|
||||
{
|
||||
$this->sStimulusBeingApplied = null;
|
||||
$sStateAttCode = MetaModel::GetStateAttributeCode($sClass);
|
||||
if (isset($this->m_aPreviousValuesForUpdatedAttributes[$sStateAttCode])) {
|
||||
$sPreviousState = $this->m_aPreviousValuesForUpdatedAttributes[$sStateAttCode];
|
||||
// Change state triggers...
|
||||
$aParams = array(
|
||||
'class_list' => MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL),
|
||||
'previous_state' => $sPreviousState,
|
||||
'new_state' => $this->Get($sStateAttCode),
|
||||
);
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateLeave AS t WHERE t.target_class IN (:class_list) AND t.state=:previous_state'), array(), $aParams);
|
||||
while ($oTrigger = $oSet->Fetch()) {
|
||||
/** @var \TriggerOnStateLeave $oTrigger */
|
||||
try {
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$oTrigger->LogException($e, $this);
|
||||
utils::EnrichRaisedException($oTrigger, $e);
|
||||
}
|
||||
$sPreviousState = $this->m_aPreviousValuesForUpdatedAttributes[$sStateAttCode];
|
||||
// Change state triggers...
|
||||
$aParams = array(
|
||||
'class_list' => MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL),
|
||||
'previous_state' => $sPreviousState,
|
||||
'new_state' => $this->Get($sStateAttCode),
|
||||
);
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateLeave AS t WHERE t.target_class IN (:class_list) AND t.state=:previous_state'), array(), $aParams);
|
||||
while ($oTrigger = $oSet->Fetch()) {
|
||||
/** @var \TriggerOnStateLeave $oTrigger */
|
||||
try {
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$oTrigger->LogException($e, $this);
|
||||
utils::EnrichRaisedException($oTrigger, $e);
|
||||
}
|
||||
}
|
||||
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateEnter AS t WHERE t.target_class IN (:class_list) AND t.state=:new_state'), array(), $aParams);
|
||||
while ($oTrigger = $oSet->Fetch()) {
|
||||
/** @var \TriggerOnStateEnter $oTrigger */
|
||||
try {
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$oTrigger->LogException($e, $this);
|
||||
utils::EnrichRaisedException($oTrigger, $e);
|
||||
}
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateEnter AS t WHERE t.target_class IN (:class_list) AND t.state=:new_state'), array(), $aParams);
|
||||
while ($oTrigger = $oSet->Fetch()) {
|
||||
/** @var \TriggerOnStateEnter $oTrigger */
|
||||
try {
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$oTrigger->LogException($e, $this);
|
||||
utils::EnrichRaisedException($oTrigger, $e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4603,6 +4604,7 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
if ($bSuccess)
|
||||
{
|
||||
$this->sStimulusBeingApplied = $sStimulusCode;
|
||||
// Stop watches
|
||||
foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
|
||||
{
|
||||
@@ -6617,7 +6619,7 @@ abstract class DBObject implements iDisplay
|
||||
* @return void
|
||||
* @since 3.1.0
|
||||
*/
|
||||
protected function FireEventCheckToWrite(): void
|
||||
protected function FireEventCheckToWrite(?string $sStimulusBeingApplied): void
|
||||
{
|
||||
}
|
||||
|
||||
@@ -6625,7 +6627,7 @@ abstract class DBObject implements iDisplay
|
||||
* @return void
|
||||
* @since 3.1.0
|
||||
*/
|
||||
protected function FireEventBeforeWrite()
|
||||
protected function FireEventBeforeWrite(?string $sStimulusBeingApplied)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -6635,7 +6637,7 @@ abstract class DBObject implements iDisplay
|
||||
* @return void
|
||||
* @since 3.1.0
|
||||
*/
|
||||
protected function FireEventAfterWrite(array $aChanges, bool $bIsNew): void
|
||||
protected function FireEventAfterWrite(array $aChanges, bool $bIsNew, ?string $sStimulusBeingApplied): void
|
||||
{
|
||||
}
|
||||
|
||||
@@ -6673,7 +6675,7 @@ abstract class DBObject implements iDisplay
|
||||
* @return void
|
||||
* @since 3.1.0
|
||||
*/
|
||||
protected function FireEventComputeValues(): void
|
||||
protected function FireEventComputeValues(?string $sStimulusBeingApplied): void
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -7532,8 +7532,41 @@ abstract class MetaModel
|
||||
return $aEntries;
|
||||
}
|
||||
|
||||
public static function ResetAllCaches($sEnvironment = null)
|
||||
{
|
||||
if (is_null($sEnvironment)) {
|
||||
$sEnvironment = MetaModel::GetEnvironment();
|
||||
}
|
||||
|
||||
$sEnvironmentId = md5(APPROOT).'-'.$sEnvironment;
|
||||
$sAppIdentity = 'itop-'.$sEnvironmentId;
|
||||
require_once(APPROOT.'/core/dict.class.inc.php');
|
||||
Dict::ResetCache($sAppIdentity);
|
||||
|
||||
if (function_exists('apc_delete')) {
|
||||
foreach (self::GetCacheEntries($sEnvironmentId) as $sKey => $aAPCInfo) {
|
||||
$sAPCKey = $aAPCInfo['info'];
|
||||
apc_delete($sAPCKey);
|
||||
}
|
||||
}
|
||||
|
||||
require_once(APPROOT.'core/userrights.class.inc.php');
|
||||
UserRights::FlushPrivileges();
|
||||
|
||||
// Reset the opcache since otherwise the PHP "model" files may still be cached !!
|
||||
if (function_exists('opcache_reset')) {
|
||||
// Zend opcode cache
|
||||
opcache_reset();
|
||||
}
|
||||
|
||||
require_once(APPROOT.'setup/setuputils.class.inc.php');
|
||||
SetupUtils::rrmdir(utils::GetCachePath($sEnvironment));
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @param string $sEnvironmentId
|
||||
* @deprecated 3.2.1
|
||||
*/
|
||||
public static function ResetCache($sEnvironmentId = null)
|
||||
{
|
||||
@@ -7557,6 +7590,13 @@ abstract class MetaModel
|
||||
|
||||
require_once(APPROOT.'core/userrights.class.inc.php');
|
||||
UserRights::FlushPrivileges();
|
||||
|
||||
// Reset the opcache since otherwise the PHP "model" files may still be cached !!
|
||||
if (function_exists('opcache_reset'))
|
||||
{
|
||||
// Zend opcode cache
|
||||
opcache_reset();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -182,14 +182,14 @@ class PHP_LexerGenerator_Lexer
|
||||
$this->token = self::COMMENTEND;
|
||||
return true;
|
||||
}
|
||||
if (preg_match('/\G%([a-z]+)/', $this->data, $token, null, $this->N)) {
|
||||
if (preg_match('/\G%([a-z]+)/', $this->data, $token, 0, $this->N)) {
|
||||
$this->value = $token[1];
|
||||
$this->N += strlen($token[1]) + 1;
|
||||
$this->state = 'DeclarePI';
|
||||
$this->token = self::PI;
|
||||
return true;
|
||||
}
|
||||
if (preg_match('/\G[a-zA-Z_][a-zA-Z0-9_]*/', $this->data, $token, null, $this->N)) {
|
||||
if (preg_match('/\G[a-zA-Z_][a-zA-Z0-9_]*/', $this->data, $token, 0, $this->N)) {
|
||||
$this->value = $token[0];
|
||||
$this->token = self::PATTERN;
|
||||
$this->N += strlen($token[0]);
|
||||
@@ -216,7 +216,7 @@ class PHP_LexerGenerator_Lexer
|
||||
if ($this->data[$this->N] == '{') {
|
||||
return $this->lexCode();
|
||||
}
|
||||
if (!preg_match("/\G[^\n]+/", $this->data, $token, null, $this->N)) {
|
||||
if (!preg_match("/\G[^\n]+/", $this->data, $token, 0, $this->N)) {
|
||||
$this->error('Unexpected end of file');
|
||||
return false;
|
||||
}
|
||||
@@ -242,7 +242,7 @@ class PHP_LexerGenerator_Lexer
|
||||
if ($this->data[$this->N] == '{') {
|
||||
return $this->lexCode();
|
||||
}
|
||||
if (!preg_match("/\G[^\n]+/", $this->data, $token, null, $this->N)) {
|
||||
if (!preg_match("/\G[^\n]+/", $this->data, $token, 0, $this->N)) {
|
||||
$this->error('Unexpected end of file');
|
||||
return false;
|
||||
}
|
||||
@@ -406,7 +406,7 @@ class PHP_LexerGenerator_Lexer
|
||||
if ($this->data[$this->N] == '\'') {
|
||||
return $this->lexQuote('\'');
|
||||
}
|
||||
if (preg_match('/\G%([a-zA-Z_]+)/', $this->data, $token, null, $this->N)) {
|
||||
if (preg_match('/\G%([a-zA-Z_]+)/', $this->data, $token, 0, $this->N)) {
|
||||
$this->value = $token[1];
|
||||
$this->N += strlen($token[1]) + 1;
|
||||
$this->state = 'DeclarePIRule';
|
||||
@@ -419,7 +419,7 @@ class PHP_LexerGenerator_Lexer
|
||||
if ($this->data[$this->N] == '"') {
|
||||
return $this->lexQuote();
|
||||
}
|
||||
if (preg_match('/\G[a-zA-Z_][a-zA-Z0-9_]*/', $this->data, $token, null, $this->N)) {
|
||||
if (preg_match('/\G[a-zA-Z_][a-zA-Z0-9_]*/', $this->data, $token, 0, $this->N)) {
|
||||
$this->value = $token[0];
|
||||
$this->N += strlen($token[0]);
|
||||
$this->token = self::SUBPATTERN;
|
||||
|
||||
@@ -33,17 +33,19 @@ class PHP_LexerGenerator_ParseryyToken implements ArrayAccess
|
||||
return $this->_string;
|
||||
}
|
||||
|
||||
function offsetExists($offset)
|
||||
function offsetExists($offset): bool
|
||||
{
|
||||
return isset($this->metadata[$offset]);
|
||||
}
|
||||
|
||||
// Return type mixed is not supported by PHP 7.4, we can remove the following PHP attribute and add the return type once iTop min PHP version is PHP 8.0+
|
||||
#[\ReturnTypeWillChange]
|
||||
function offsetGet($offset)
|
||||
{
|
||||
return $this->metadata[$offset];
|
||||
}
|
||||
|
||||
function offsetSet($offset, $value)
|
||||
function offsetSet($offset, $value): void
|
||||
{
|
||||
if ($offset === null) {
|
||||
if (isset($value[0])) {
|
||||
@@ -66,7 +68,7 @@ class PHP_LexerGenerator_ParseryyToken implements ArrayAccess
|
||||
}
|
||||
}
|
||||
|
||||
function offsetUnset($offset)
|
||||
function offsetUnset($offset): void
|
||||
{
|
||||
unset($this->metadata[$offset]);
|
||||
}
|
||||
@@ -278,7 +280,7 @@ class PHP_LexerGenerator_Parser#line 171 "Parser.php"
|
||||
$match = false;
|
||||
foreach ($yy_yymore_patterns[' . $this->token . '] as $index => $rule) {
|
||||
if (preg_match(\'/\' . $rule . \'/' . $this->patternFlags . '\',
|
||||
' . $this->input . ', $yymatches, null, ' . $this->counter . ')) {
|
||||
' . $this->input . ', $yymatches, 0, ' . $this->counter . ')) {
|
||||
$yymatches = array_filter($yymatches, \'strlen\'); // remove empty sub-patterns
|
||||
if ($match) {
|
||||
if (strlen($yymatches[0]) > strlen($match[0][0])) {
|
||||
@@ -350,7 +352,7 @@ class PHP_LexerGenerator_Parser#line 171 "Parser.php"
|
||||
$pattern . '\';' . "\n");
|
||||
fwrite($this->out, '
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,' . $this->input . ', $yymatches, null, ' .
|
||||
if (preg_match($yy_global_pattern,' . $this->input . ', $yymatches, 0, ' .
|
||||
$this->counter .
|
||||
')) {
|
||||
$yysubmatches = $yymatches;
|
||||
@@ -408,7 +410,7 @@ class PHP_LexerGenerator_Parser#line 171 "Parser.php"
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match(\'/\' . $yy_yymore_patterns[' . $this->token . '][1] . \'/' . $this->patternFlags . '\',
|
||||
' . $this->input . ', $yymatches, null, ' . $this->counter .')) {
|
||||
' . $this->input . ', $yymatches, 0, ' . $this->counter .')) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, \'strlen\'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
|
||||
@@ -187,7 +187,7 @@ require_once 'PHP/LexerGenerator/Exception.php';
|
||||
$match = false;
|
||||
foreach ($yy_yymore_patterns[' . $this->token . '] as $index => $rule) {
|
||||
if (preg_match(\'/\' . $rule . \'/' . $this->patternFlags . '\',
|
||||
' . $this->input . ', $yymatches, null, ' . $this->counter . ')) {
|
||||
' . $this->input . ', $yymatches, 0, ' . $this->counter . ')) {
|
||||
$yymatches = array_filter($yymatches, \'strlen\'); // remove empty sub-patterns
|
||||
if ($match) {
|
||||
if (strlen($yymatches[0]) > strlen($match[0][0])) {
|
||||
@@ -259,7 +259,7 @@ require_once 'PHP/LexerGenerator/Exception.php';
|
||||
$pattern . '\';' . "\n");
|
||||
fwrite($this->out, '
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,' . $this->input . ', $yymatches, null, ' .
|
||||
if (preg_match($yy_global_pattern,' . $this->input . ', $yymatches, 0, ' .
|
||||
$this->counter .
|
||||
')) {
|
||||
$yysubmatches = $yymatches;
|
||||
@@ -317,7 +317,7 @@ require_once 'PHP/LexerGenerator/Exception.php';
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match(\'/\' . $yy_yymore_patterns[' . $this->token . '][1] . \'/' . $this->patternFlags . '\',
|
||||
' . $this->input . ', $yymatches, null, ' . $this->counter .')) {
|
||||
' . $this->input . ', $yymatches, 0, ' . $this->counter .')) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, \'strlen\'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
|
||||
@@ -110,7 +110,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
$yy_global_pattern = '/\G(\\\\\\\\)|\G([^[\\\\^$.|()?*+{}]+)|\G(\\\\[][{}*.^$|?()+])|\G(\\[)|\G(\\|)|\G(\\\\[frnt]|\\\\x[0-9a-fA-F][0-9a-fA-F]?|\\\\[0-7][0-7][0-7]|\\\\x\\{[0-9a-fA-F]+\\})|\G(\\\\[0-9][0-9])|\G(\\\\[abBGcedDsSwW0C]|\\\\c\\\\)|\G(\\^)|\G(\\\\A)|\G(\\))|\G(\\$)|\G(\\*\\?|\\+\\?|[*?+]|\\{[0-9]+\\}|\\{[0-9]+,\\}|\\{[0-9]+,[0-9]+\\})|\G(\\\\[zZ])|\G(\\(\\?)|\G(\\()|\G(\\.)|\G(\\\\[1-9])|\G(\\\\p\\{\\^?..?\\}|\\\\P\\{..?\\}|\\\\X)|\G(\\\\p\\{C[cfnos]?|L[lmotu]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?\\})|\G(\\\\p\\{\\^C[cfnos]?|L[lmotu]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?\\})|\G(\\\\p[CLMNPSZ])|\G(\\\\)/';
|
||||
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, null, $this->N)) {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if (!count($yymatches)) {
|
||||
@@ -180,7 +180,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/',
|
||||
$this->input, $yymatches, null, $this->N)) {
|
||||
$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
@@ -360,7 +360,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
$yy_global_pattern = '/\G(\\^)|\G(\\])|\G(.)/';
|
||||
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, null, $this->N)) {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if (!count($yymatches)) {
|
||||
@@ -410,7 +410,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/',
|
||||
$this->input, $yymatches, null, $this->N)) {
|
||||
$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
@@ -497,7 +497,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
$yy_global_pattern = '/\G(\\\\\\\\)|\G(\\])|\G(\\\\[frnt]|\\\\x[0-9a-fA-F][0-9a-fA-F]?|\\\\[0-7][0-7][0-7]|\\\\x\\{[0-9a-fA-F]+\\})|\G(\\\\[bacedDsSwW0C]|\\\\c\\\\|\\\\x\\{[0-9a-fA-F]+\\}|\\\\[0-7][0-7][0-7]|\\\\x[0-9a-fA-F][0-9a-fA-F]?)|\G(\\\\[0-9][0-9])|\G(\\\\[1-9])|\G(\\\\[]\.\-\^])|\G(-(?!]))|\G([^\-\\\\])|\G(\\\\)|\G(.)/';
|
||||
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, null, $this->N)) {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if (!count($yymatches)) {
|
||||
@@ -555,7 +555,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/',
|
||||
$this->input, $yymatches, null, $this->N)) {
|
||||
$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
@@ -678,7 +678,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
$yy_global_pattern = '/\G(\\\\\\\\)|\G(\\\\\\])|\G(\\\\[bacedDsSwW0C]|\\\\c\\\\|\\\\x\\{[0-9a-fA-F]+\\}|\\\\[0-7][0-7][0-7]|\\\\x[0-9a-fA-F][0-9a-fA-F]?)|\G(\\\\[0-9][0-9])|\G(\\\\[1-9])|\G([^\-\\\\])|\G(\\\\)/';
|
||||
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, null, $this->N)) {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if (!count($yymatches)) {
|
||||
@@ -732,7 +732,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/',
|
||||
$this->input, $yymatches, null, $this->N)) {
|
||||
$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
@@ -842,7 +842,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
$yy_global_pattern = '/\G([imsxUX]+-[imsxUX]+|[imsxUX]+|-[imsxUX]+)|\G(:)|\G(\\))|\G(P<[^>]+>)|\G(<=)|\G(<!)|\G(=)|\G(!)|\G(>)|\G(\\(\\?)|\G(#[^)]+)|\G(R)|\G(.)/';
|
||||
|
||||
do {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, null, $this->N)) {
|
||||
if (preg_match($yy_global_pattern,$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if (!count($yymatches)) {
|
||||
@@ -902,7 +902,7 @@ class PHP_LexerGenerator_Regex_Lexer
|
||||
}
|
||||
$yysubmatches = array();
|
||||
if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/',
|
||||
$this->input, $yymatches, null, $this->N)) {
|
||||
$this->input, $yymatches, 0, $this->N)) {
|
||||
$yysubmatches = $yymatches;
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
next($yymatches); // skip global match
|
||||
|
||||
@@ -33,17 +33,19 @@ class PHP_LexerGenerator_Regex_yyToken implements ArrayAccess
|
||||
return $this->_string;
|
||||
}
|
||||
|
||||
function offsetExists($offset)
|
||||
function offsetExists($offset): bool
|
||||
{
|
||||
return isset($this->metadata[$offset]);
|
||||
}
|
||||
|
||||
// Return type mixed is not supported by PHP 7.4, we can remove the following PHP attribute and add the return type once iTop min PHP version is PHP 8.0+
|
||||
#[\ReturnTypeWillChange]
|
||||
function offsetGet($offset)
|
||||
{
|
||||
return $this->metadata[$offset];
|
||||
}
|
||||
|
||||
function offsetSet($offset, $value)
|
||||
function offsetSet($offset, $value): void
|
||||
{
|
||||
if ($offset === null) {
|
||||
if (isset($value[0])) {
|
||||
@@ -66,7 +68,7 @@ class PHP_LexerGenerator_Regex_yyToken implements ArrayAccess
|
||||
}
|
||||
}
|
||||
|
||||
function offsetUnset($offset)
|
||||
function offsetUnset($offset): void
|
||||
{
|
||||
unset($this->metadata[$offset]);
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ class OQLLexerRaw
|
||||
$match = false;
|
||||
foreach ($yy_yymore_patterns[$this->token] as $index => $rule) {
|
||||
if (preg_match('/' . $rule . '/',
|
||||
$this->data, $yymatches, null, $this->count)) {
|
||||
$this->data, $yymatches, 0, $this->count)) {
|
||||
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
|
||||
if ($match) {
|
||||
if (strlen($yymatches[0]) > strlen($match[0][0])) {
|
||||
|
||||
@@ -36,7 +36,13 @@ class UnknownClassOqlException extends OqlNormalizeException
|
||||
{
|
||||
public function __construct($sInput, OqlName $oName, $aExpecting = null)
|
||||
{
|
||||
parent::__construct('Unknown class', $sInput, $oName, $aExpecting);
|
||||
$aAllowedClasses = [];
|
||||
foreach ($aExpecting as $sClass) {
|
||||
if (UserRights::IsActionAllowed($sClass, UR_ACTION_READ)) {
|
||||
$aAllowedClasses[] = $sClass;
|
||||
}
|
||||
}
|
||||
parent::__construct('Unknown class', $sInput, $oName, $aAllowedClasses);
|
||||
}
|
||||
|
||||
public function GetUserFriendlyDescription()
|
||||
|
||||
@@ -314,7 +314,7 @@ class ormDocument
|
||||
'document' => $oDocument,
|
||||
'content_disposition' => $sContentDisposition,
|
||||
);
|
||||
EventService::FireEvent(new EventData(EVENT_DOWNLOAD_DOCUMENT, $sClass, $aEventData));
|
||||
EventService::FireEvent(new EventData(\EVENT_DOWNLOAD_DOCUMENT, $sClass, $aEventData));
|
||||
$oPage->TrashUnexpectedOutput();
|
||||
$oPage->SetContentType($oDocument->GetMimeType());
|
||||
$oPage->SetContentDisposition($sContentDisposition,$oDocument->GetFileName());
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
2
css/backoffice/vendors/ckeditor/_all.scss
vendored
2
css/backoffice/vendors/ckeditor/_all.scss
vendored
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
|
||||
/* Semantic palettes */
|
||||
/* - Primary color of the brand */
|
||||
$common-color-primary-100: $common-color-blue-100 !default;
|
||||
$common-color-primary-200: $common-color-blue-200 !default;
|
||||
$common-color-primary-300: $common-color-blue-300 !default;
|
||||
$common-color-primary-400: $common-color-blue-400 !default;
|
||||
$common-color-primary-500: $common-color-blue-500 !default;
|
||||
$common-color-primary-600: $common-color-blue-600 !default;
|
||||
$common-color-primary-700: $common-color-blue-700 !default;
|
||||
$common-color-primary-800: $common-color-blue-800 !default;
|
||||
$common-color-primary-900: $common-color-blue-900 !default;
|
||||
$common-color-primary-950: $common-color-blue-950 !default;
|
||||
$common-color-primary-100: $common-color-orange-100 !default;
|
||||
$common-color-primary-200: $common-color-orange-200 !default;
|
||||
$common-color-primary-300: $common-color-orange-300 !default;
|
||||
$common-color-primary-400: $common-color-orange-400 !default;
|
||||
$common-color-primary-500: $common-color-orange-500 !default;
|
||||
$common-color-primary-600: $common-color-orange-600 !default;
|
||||
$common-color-primary-700: $common-color-orange-700 !default;
|
||||
$common-color-primary-800: $common-color-orange-800 !default;
|
||||
$common-color-primary-900: $common-color-orange-900 !default;
|
||||
$common-color-primary-950: $common-color-orange-950 !default;
|
||||
|
||||
/* - Secondary color of the brand */
|
||||
$common-color-secondary-100: $common-color-grey-100 !default;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'CAS:Error:UserNotAllowed' => 'User not allowed',
|
||||
'CAS:Login:SignIn' => 'Sign in with CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server',
|
||||
));
|
||||
@@ -4,11 +4,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登录',
|
||||
|
||||
@@ -160,8 +160,7 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
private static function InitCASClient()
|
||||
{
|
||||
$bCASDebug = Config::Get('cas_debug');
|
||||
if ($bCASDebug)
|
||||
{
|
||||
if ($bCASDebug) {
|
||||
phpCAS::setLogger(new CASLogger(APPROOT.'log/cas.log'));
|
||||
}
|
||||
|
||||
@@ -171,18 +170,17 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
$iCASPort = Config::Get('cas_port');
|
||||
$sCASContext = Config::Get('cas_context');
|
||||
$sServiceBaseURL = Config::Get('service_base_url', self::GetServiceBaseURL());
|
||||
phpCAS::client($sCASVersion, $sCASHost, $iCASPort, $sCASContext, $sServiceBaseURL, false /* session already started */);
|
||||
if (!phpCAS::isInitialized()) {
|
||||
phpCAS::client($sCASVersion, $sCASHost, $iCASPort, $sCASContext, $sServiceBaseURL, false /* session already started */);
|
||||
}
|
||||
$sCASCACertPath = Config::Get('cas_server_ca_cert_path');
|
||||
if (empty($sCASCACertPath))
|
||||
{
|
||||
if (empty($sCASCACertPath)) {
|
||||
// If no certificate authority is provided, do not attempt to validate
|
||||
// the server's certificate
|
||||
// THIS SETTING IS NOT RECOMMENDED FOR PRODUCTION.
|
||||
// VALIDATING THE CAS SERVER IS CRUCIAL TO THE SECURITY OF THE CAS PROTOCOL!
|
||||
phpCAS::setNoCasServerValidation();
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
phpCAS::setCasServerCACert($sCASCACertPath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserExternal
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:UserExternal' => 'External user',
|
||||
'Class:UserExternal+' => 'User authentified outside of '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -4,12 +4,39 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* @author Robert Deng <denglx@gmail.com>
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserExternal
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:UserExternal' => '外部用户',
|
||||
'Class:UserExternal+' => '用户在'.ITOP_APPLICATION_SHORT.'外部验证身份',
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserLDAP' => 'LDAP user',
|
||||
'Class:UserLDAP+' => 'User authentified by LDAP',
|
||||
'Class:UserLDAP+' => 'User authenticated by LDAP',
|
||||
'UserLDAP:server' => 'LDAP specifics',
|
||||
));
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserLDAP
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:UserLDAP' => 'LDAP user',
|
||||
'Class:UserLDAP+' => 'User authenticated by LDAP',
|
||||
'UserLDAP:server' => 'LDAP specifics',
|
||||
));
|
||||
@@ -11,6 +11,6 @@
|
||||
*/
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:UserLDAP' => 'LDAP užívateľ',
|
||||
'Class:UserLDAP+' => 'User authentified by LDAP~~',
|
||||
'Class:UserLDAP+' => 'User authenticated by LDAP~~',
|
||||
'UserLDAP:server' => 'LDAP specifics~~',
|
||||
]);
|
||||
|
||||
@@ -4,12 +4,38 @@
|
||||
*
|
||||
* @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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserLDAP
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:UserLDAP' => 'LDAP用户',
|
||||
'Class:UserLDAP+' => '用户身份由LDAP认证',
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserLocal
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' user',
|
||||
'Class:UserLocal+' => 'User authentified by '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Password',
|
||||
'Class:UserLocal/Attribute:password+' => 'User authentication string',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Password expiration',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Password expiration status (requires an extension to have an effect)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Can expire',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Never expire',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_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' => 'Password renewed on',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.',
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User',
|
||||
));
|
||||
@@ -4,15 +4,44 @@
|
||||
*
|
||||
* @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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// 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/Value:can_expire' => '允许过期',
|
||||
@@ -23,11 +52,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => '一次性密码',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '用户不允许修改密码.',
|
||||
'Class:UserLocal/Attribute:password' => '密码',
|
||||
'Class:UserLocal/Attribute:password+' => '用于验证用户身份的字符串',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => '密码更新',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => '上次修改密码的时间',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置 "一次性密码" 的失效期限',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少8个字符, 包含大小写, 数字和特殊字符.',
|
||||
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置 "一次性密码" 的失效期限',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'theme:darkmoon' => 'Dark moon',
|
||||
));
|
||||
@@ -4,11 +4,23 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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' => '暗月',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'theme:fullmoon-high-contrast' => 'Fullmoon (High contrast)',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopia & Deuteranopia)'
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopia)',
|
||||
));
|
||||
@@ -170,7 +170,7 @@ class DatabaseAnalyzer
|
||||
$this->CheckHK($sClass, $sAttCode, $aErrorsAndFixes);
|
||||
}
|
||||
}
|
||||
elseif ($oAttDef->IsDirectField() && !($oAttDef instanceof AttributeTagSet))
|
||||
elseif ($oAttDef->IsDirectField() && !($oAttDef instanceof AttributeSet))
|
||||
{
|
||||
$this->CheckAllowedValues($sClass, $sAttCode, $oAttDef, $sTable, $sKeyField, $aErrorsAndFixes);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBTools:Analyze' => 'Analyzuj',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
@@ -41,7 +41,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
|
||||
@@ -17,7 +17,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBTools:Analyze' => 'Analyze~~',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
@@ -41,7 +41,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
|
||||
@@ -59,7 +59,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'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 contains a valid class',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class',
|
||||
));
|
||||
|
||||
// Database Info
|
||||
@@ -72,7 +72,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
// Lost attachments
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'DBTools:LostAttachments' => 'Lost attachments',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.',
|
||||
|
||||
'DBTools:LostAttachments:Button:Analyze' => 'Analyze',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore',
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
// Database inconsistencies
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:DBToolsMenu' => 'Database integrity',
|
||||
'DBTools:Class' => 'Class',
|
||||
'DBTools:Title' => 'Database integrity check',
|
||||
'DBTools:ErrorsFound' => 'Errors Found',
|
||||
'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' => 'Error',
|
||||
'DBTools:Count' => 'Count',
|
||||
'DBTools:SQLquery' => 'SQL query',
|
||||
'DBTools:FixitSQLquery' => 'SQL query To Fix it (indication)',
|
||||
'DBTools:SQLresult' => 'SQL result',
|
||||
'DBTools:NoError' => 'The database is OK',
|
||||
'DBTools:HideIds' => 'Error List',
|
||||
'DBTools:ShowIds' => 'Detailed view',
|
||||
'DBTools:ShowReport' => 'Report',
|
||||
'DBTools:IntegrityCheck' => 'Integrity check',
|
||||
'DBTools:FetchCheck' => 'Fetch Check (long)',
|
||||
'DBTools:SelectAnalysisType' => 'Select analysis type',
|
||||
|
||||
'DBTools:Analyze' => 'Analyse',
|
||||
'DBTools:Details' => 'Show Details',
|
||||
'DBTools:ShowAll' => 'Show All Errors',
|
||||
|
||||
'DBTools:Inconsistencies' => 'Database inconsistencies',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s error(s) in class %1$s: %3$s',
|
||||
'DBTools:DetailedErrorLimit' => 'List limited to %1$s errors',
|
||||
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`',
|
||||
'DBAnalyzer-Integrity-InvalidExtKey' => 'Invalid external key %1$s (column: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all',
|
||||
'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
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'DBTools:DatabaseInfo' => 'Database Information',
|
||||
'DBTools:Base' => 'Base',
|
||||
'DBTools:Size' => 'Size',
|
||||
));
|
||||
|
||||
// Lost attachments
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'DBTools:LostAttachments' => 'Lost attachments',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.',
|
||||
|
||||
'DBTools:LostAttachments:Button:Analyze' => 'Analyse',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.',
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...',
|
||||
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analysing the database.',
|
||||
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyse results:',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Great! Every thing seems to be at the right place.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Some attachments (%1$d) seem to be misplaced. Take a look at the following list and check the ones you would like to move.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Filename',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Current location',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Move to...',
|
||||
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => 'Restore results:',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d attachments were restored.',
|
||||
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => 'Stored as inline image',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools'
|
||||
));
|
||||
@@ -17,7 +17,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBTools:Analyze' => 'Analyze~~',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
@@ -41,7 +41,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
|
||||
@@ -18,7 +18,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Недопустимое значение для %1$s (столбец: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Отсутствует внешний ключ %1$s (столбец: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Сиротская запись в `%1$s`, она должна иметь свой аналог в таблице `%2$s`',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Некоторые учетные записи пользователей не имеют профилей',
|
||||
'DBTools:Analyze' => 'Анализировать',
|
||||
'DBTools:Base' => 'База',
|
||||
|
||||
@@ -17,7 +17,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBTools:Analyze' => 'Analyze~~',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
@@ -41,7 +41,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
|
||||
@@ -17,7 +17,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBTools:Analyze' => 'Analyze~~',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
@@ -41,7 +41,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
|
||||
@@ -4,63 +4,93 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'DBAnalyzer-Fetch-Count-Error' => '读取计数出错于 `%1$s`, %2$d个记录已读取 / %3$d已',
|
||||
'DBAnalyzer-Integrity-FinalClass' => '字段 `%2$s`.`%1$s` 必须是相同的值, 而不是 `%3$s`.`%1$s`',
|
||||
'DBAnalyzer-Integrity-HKInvalid' => '损坏的层级链 `%1$s`',
|
||||
'DBAnalyzer-Integrity-InvalidExtKey' => '无效的外键%1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-InvalidValue' => '无效的值%1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => '外键丢失%1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => '孤立记录位于 `%1$s`, 其应该有副本位于表 `%2$s`',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => '字段 `%2$s`.`%1$s` 必须包含一个有效的类型',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => '一些用户账号没有角色',
|
||||
'DBTools:Analyze' => '分析',
|
||||
'DBTools:Base' => '数据库',
|
||||
|
||||
// Database inconsistencies
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:DBToolsMenu' => '数据库工具',
|
||||
'DBTools:Class' => '类型',
|
||||
'DBTools:Count' => '个数',
|
||||
'DBTools:DatabaseInfo' => '数据库信息',
|
||||
'DBTools:DetailedErrorLimit' => '列表限制为%1$s错误',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s个错误在类型%1$s: %3$s',
|
||||
'DBTools:Details' => '显示详情',
|
||||
'DBTools:Title' => '数据库维护工具',
|
||||
'DBTools:ErrorsFound' => '发现错误',
|
||||
'DBTools:Indication' => '重要: 修复数据库错误后, 可能会出现新的不一致, 您必须重新运行一次分析.',
|
||||
'DBTools:Disclaimer' => '免责申明: 在应用修复之前, 应先备份数据库',
|
||||
'DBTools:Error' => '错误',
|
||||
'DBTools:ErrorsFound' => '发现错误',
|
||||
'DBTools:FetchCheck' => '提取检查 (耗时长)',
|
||||
'DBTools:FixitSQLquery' => '修复问题的SQL查询 (指示)',
|
||||
'DBTools:HideIds' => '错误列表',
|
||||
'DBTools:Inconsistencies' => '数据库不一致',
|
||||
'DBTools:Indication' => '重要: 修复数据库错误后, 可能会出现新的不一致, 您必须重新运行一次分析.',
|
||||
'DBTools:IntegrityCheck' => '完整性检查',
|
||||
'DBTools:LostAttachments' => '附件缺失',
|
||||
'DBTools:LostAttachments:Button:Analyze' => '分析',
|
||||
'DBTools:LostAttachments:Button:Busy' => '请稍后...',
|
||||
'DBTools:LostAttachments:Button:Restore' => '还原',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => '此操作无法回退, 请确认是否继续还原.',
|
||||
'DBTools:LostAttachments:Disclaimer' => '可以在此搜索数据库中丢失或错放的附件. 这不是数据恢复工具, 其无法恢复已删除的数据.',
|
||||
'DBTools:LostAttachments:History' => '附件 "%1$s" 已使用数据库工具还原',
|
||||
'DBTools:LostAttachments:Step:Analyze' => '首先, 通过分析数据库来搜索丢失或误挪动的附件.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => '分析结果:',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => '当前位置',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => '文件名',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => '移动到...',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:None' => '非常好! 所有附件都是正常的.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => '某些附件 (%1$d) 看起来放错了位置. 请检查下面的列表并选择要挪动的文件.',
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => '还原结果:',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d的附件被还原.',
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => '存储为内嵌图像',
|
||||
'DBTools:NoError' => '数据库正确',
|
||||
'DBTools:Count' => '个数',
|
||||
'DBTools:SQLquery' => 'SQL查询',
|
||||
'DBTools:FixitSQLquery' => '修复问题的SQL查询 (指示)',
|
||||
'DBTools:SQLresult' => 'SQL结果',
|
||||
'DBTools:SelectAnalysisType' => '请选择分析类型',
|
||||
'DBTools:ShowAll' => '显示所有错误',
|
||||
'DBTools:NoError' => '数据库正确',
|
||||
'DBTools:HideIds' => '错误列表',
|
||||
'DBTools:ShowIds' => '详细视图',
|
||||
'DBTools:ShowReport' => '报告',
|
||||
'DBTools:IntegrityCheck' => '完整性检查',
|
||||
'DBTools:FetchCheck' => '提取检查 (耗时长)',
|
||||
'DBTools:SelectAnalysisType' => '请选择分析类型',
|
||||
|
||||
'DBTools:Analyze' => '分析',
|
||||
'DBTools:Details' => '显示详情',
|
||||
'DBTools:ShowAll' => '显示所有错误',
|
||||
|
||||
'DBTools:Inconsistencies' => '数据库不一致',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s个错误在类型%1$s: %3$s',
|
||||
'DBTools:DetailedErrorLimit' => '列表限制为%1$s错误',
|
||||
|
||||
'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` 必须包含一个有效的类型',
|
||||
));
|
||||
|
||||
// Database Info
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'DBTools:DatabaseInfo' => '数据库信息',
|
||||
'DBTools:Base' => '数据库',
|
||||
'DBTools:Size' => '大小',
|
||||
'DBTools:Title' => '数据库维护工具',
|
||||
'Menu:DBToolsMenu' => '数据库工具',
|
||||
]);
|
||||
));
|
||||
|
||||
// Lost attachments
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'DBTools:LostAttachments' => '附件缺失',
|
||||
'DBTools:LostAttachments:Disclaimer' => '可以在此搜索数据库中丢失或错放的附件. 这不是数据恢复工具, 其无法恢复已删除的数据.',
|
||||
|
||||
'DBTools:LostAttachments:Button:Analyze' => '分析',
|
||||
'DBTools:LostAttachments:Button:Restore' => '还原',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => '此操作无法回退, 请确认是否继续还原.',
|
||||
'DBTools:LostAttachments:Button:Busy' => '请稍候...',
|
||||
|
||||
'DBTools:LostAttachments:Step:Analyze' => '首先, 通过分析数据库来搜索丢失或误挪动的附件.',
|
||||
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => '分析结果:',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:None' => '非常好! 所有附件都是正常的.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => '某些附件 (%1$d) 看起来放错了位置. 请检查下面的列表并选择要挪动的文件.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => '文件名',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => '当前位置',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => '移动到...',
|
||||
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => '还原结果:',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d的附件被还原.',
|
||||
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => '存储为内嵌图像',
|
||||
'DBTools:LostAttachments:History' => '附件 "%1$s" 已使用数据库工具还原',
|
||||
));
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Attachments:TabTitle_Count' => 'Attachments (%1$d)',
|
||||
'Attachments:EmptyTabTitle' => 'Attachments',
|
||||
'Attachments:FieldsetTitle' => 'Attachments',
|
||||
'Attachments:DeleteBtn' => 'Delete',
|
||||
'Attachments:History_File_Added' => 'Attachment %1$s added.',
|
||||
'Attachments:History_File_Removed' => 'Attachment %1$s removed.',
|
||||
'Attachments:AddAttachment' => 'Add attachment: ',
|
||||
'Attachments:UploadNotAllowedOnThisSystem' => 'File upload in NOT allowed on this system.',
|
||||
'Attachment:Max_Go' => '(Maximum file size: %1$s GB)',
|
||||
'Attachment:Max_Mo' => '(Maximum file size: %1$s MB)',
|
||||
'Attachment:Max_Ko' => '(Maximum file size: %1$s KB)',
|
||||
'Attachments:NoAttachment' => 'No attachment.',
|
||||
'Attachments:PreviewNotAvailable' => 'Preview not available for this type of attachment.',
|
||||
'Attachments:Error:FileTooLarge' => 'File is too large to be uploaded. %1$s',
|
||||
'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',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Attachment
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Attachment' => 'Attachment',
|
||||
'Class:Attachment+' => '',
|
||||
'Class:Attachment/Attribute:expire' => 'Expire',
|
||||
'Class:Attachment/Attribute:expire+' => '',
|
||||
'Class:Attachment/Attribute:temp_id' => 'Temporary id',
|
||||
'Class:Attachment/Attribute:temp_id+' => '',
|
||||
'Class:Attachment/Attribute:item_class' => 'Item class',
|
||||
'Class:Attachment/Attribute:item_class+' => '',
|
||||
'Class:Attachment/Attribute:item_id' => 'Item',
|
||||
'Class:Attachment/Attribute:item_id+' => '',
|
||||
'Class:Attachment/Attribute:item_org_id' => 'Item organisation',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '',
|
||||
'Class:Attachment/Attribute:contents' => 'Contents',
|
||||
'Class:Attachment/Attribute:contents+' => '',
|
||||
));
|
||||
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Attachments:File:Thumbnail' => 'Icon',
|
||||
'Attachments:File:Name' => 'File name',
|
||||
'Attachments:File:Date' => 'Upload date',
|
||||
'Attachments:File:Uploader' => 'Uploaded by',
|
||||
'Attachments:File:Size' => 'Size',
|
||||
'Attachments:File:MimeType' => 'Type',
|
||||
'Attachments:File:DownloadsCount' => 'Downloads',
|
||||
));
|
||||
//
|
||||
// Class: Attachment
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Attachment/Attribute:creation_date' => 'Creation date',
|
||||
'Class:Attachment/Attribute:creation_date+' => '',
|
||||
'Class:Attachment/Attribute:user_id' => 'User id',
|
||||
'Class:Attachment/Attribute:user_id+' => '',
|
||||
'Class:Attachment/Attribute:contact_id' => 'Contact id',
|
||||
'Class:Attachment/Attribute:contact_id+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnAttachmentDownload
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:TriggerOnAttachmentDownload' => 'Trigger (on object\'s attachment download)',
|
||||
'Class:TriggerOnAttachmentDownload+' => 'Trigger on object\'s attachment download of [a child class of] the given class',
|
||||
));
|
||||
@@ -4,57 +4,83 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
*/
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Attachments:TabTitle_Count' => '附件 (%1$d)',
|
||||
'Attachments:EmptyTabTitle' => '附件',
|
||||
'Attachments:FieldsetTitle' => '附件',
|
||||
'Attachments:DeleteBtn' => '删除',
|
||||
'Attachments:History_File_Added' => '附件%1$s已添加.',
|
||||
'Attachments:History_File_Removed' => '附件%1$s已移除.',
|
||||
'Attachments:AddAttachment' => '添加附件: ',
|
||||
'Attachments:UploadNotAllowedOnThisSystem' => '本系统不支持文件上传.',
|
||||
'Attachment:Max_Go' => '(最大文件尺寸: %1$s GB)',
|
||||
'Attachment:Max_Ko' => '(最大文件尺寸: %1$s KB)',
|
||||
'Attachment:Max_Mo' => '(最大文件尺寸: %1$s MB)',
|
||||
'Attachments:AddAttachment' => '添加附件: ',
|
||||
'Attachments:DeleteBtn' => '删除',
|
||||
'Attachments:EmptyTabTitle' => '附件',
|
||||
'Attachments:Error:FileTooLarge' => '上传的文件过大. %1$s',
|
||||
'Attachments:Error:UploadedFileEmpty' => '收到的文件为空, 无法添加. 可能是因为您发送的是空文件,或者咨询'.ITOP_APPLICATION_SHORT.'管理员服务器磁盘是否已满.',
|
||||
'Attachments:FieldsetTitle' => '附件',
|
||||
'Attachments:File:Date' => '上传日期',
|
||||
'Attachments:File:DownloadsCount' => '下载',
|
||||
'Attachments:File:MimeType' => '类型',
|
||||
'Attachments:File:Name' => '文件名',
|
||||
'Attachments:File:Size' => '大小',
|
||||
'Attachments:File:Thumbnail' => '图标',
|
||||
'Attachments:File:Uploader' => '上传者',
|
||||
'Attachments:History_File_Added' => '附件%1$s已添加.',
|
||||
'Attachments:History_File_Removed' => '附件%1$s已移除.',
|
||||
'Attachments:NoAttachment' => '没有附件. ',
|
||||
'Attachments:PreviewNotAvailable' => '此附件类型不支持预览.',
|
||||
'Attachments:Error:FileTooLarge' => '上传的文件过大. %1$s',
|
||||
'Attachments:Error:UploadedFileEmpty' => '收到的文件为空, 无法添加.
|
||||
可能是因为您发送的是空文件,
|
||||
或者咨询 '.ITOP_APPLICATION_SHORT.' 管理员,检查 '.ITOP_APPLICATION_SHORT.' 服务器硬盘是否满了.',
|
||||
'Attachments:Render:Icons' => '显示为图标',
|
||||
'Attachments:Render:Table' => '显示为列表',
|
||||
'Attachments:TabTitle_Count' => '附件 (%1$d)',
|
||||
'Attachments:UploadNotAllowedOnThisSystem' => '本系统不支持文件上传.',
|
||||
'Class:Attachment' => '附件',
|
||||
'Class:Attachment+' => '',
|
||||
'Class:Attachment/Attribute:contact_id' => '联系人编号',
|
||||
'Class:Attachment/Attribute:contact_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contents' => '内容',
|
||||
'Class:Attachment/Attribute:contents+' => '',
|
||||
'Class:Attachment/Attribute:creation_date' => '创建日期',
|
||||
'Class:Attachment/Attribute:creation_date+' => '~~',
|
||||
'Class:Attachment/Attribute:expire' => '过期',
|
||||
'Class:Attachment/Attribute:expire+' => '~~',
|
||||
'Class:Attachment/Attribute:item_class' => '项目类型',
|
||||
'Class:Attachment/Attribute:item_class+' => '~~',
|
||||
'Class:Attachment/Attribute:item_id' => '项目',
|
||||
'Class:Attachment/Attribute:item_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_org_id' => '项目组织',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '',
|
||||
'Class:Attachment/Attribute:temp_id' => '临时编号',
|
||||
'Class:Attachment/Attribute:temp_id+' => '~~',
|
||||
'Class:Attachment/Attribute:user_id' => '用户编号',
|
||||
'Class:Attachment/Attribute:user_id+' => '~~',
|
||||
'Class:TriggerOnAttachmentDownload' => '触发器 (于对象附件下载时)',
|
||||
'Class:TriggerOnAttachmentDownload+' => '触发器于指定类型 [子类型] 对象附件下载时',
|
||||
'UI:Attachments:DropYourFileHint' => '将文件拖放到此区域的任意位置',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: Attachment
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:Attachment' => '附件',
|
||||
'Class:Attachment+' => '',
|
||||
'Class:Attachment/Attribute:expire' => '过期',
|
||||
'Class:Attachment/Attribute:expire+' => '',
|
||||
'Class:Attachment/Attribute:temp_id' => '临时编号',
|
||||
'Class:Attachment/Attribute:temp_id+' => '',
|
||||
'Class:Attachment/Attribute:item_class' => '项目类型',
|
||||
'Class:Attachment/Attribute:item_class+' => '',
|
||||
'Class:Attachment/Attribute:item_id' => '项目',
|
||||
'Class:Attachment/Attribute:item_id+' => '',
|
||||
'Class:Attachment/Attribute:item_org_id' => '项目组织',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '',
|
||||
'Class:Attachment/Attribute:contents' => '内容',
|
||||
'Class:Attachment/Attribute:contents+' => '',
|
||||
]);
|
||||
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Attachments:File:Thumbnail' => '图标',
|
||||
'Attachments:File:Name' => '文件名',
|
||||
'Attachments:File:Date' => '上传日期',
|
||||
'Attachments:File:Uploader' => '上传者',
|
||||
'Attachments:File:Size' => '大小',
|
||||
'Attachments:File:MimeType' => '类型',
|
||||
'Attachments:File:DownloadsCount' => '下载',
|
||||
]);
|
||||
//
|
||||
// Class: Attachment
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:Attachment/Attribute:creation_date' => '创建日期',
|
||||
'Class:Attachment/Attribute:creation_date+' => '~~',
|
||||
'Class:Attachment/Attribute:user_id' => '用户编号',
|
||||
'Class:Attachment/Attribute:user_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contact_id' => '联系人编号',
|
||||
'Class:Attachment/Attribute:contact_id+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: TriggerOnAttachmentDownload
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:TriggerOnAttachmentDownload' => '触发器 (于对象附件下载时)',
|
||||
'Class:TriggerOnAttachmentDownload+' => '触发器于指定类型 [子类型] 对象附件下载时',
|
||||
]);
|
||||
|
||||
@@ -33,7 +33,7 @@ class EventListener implements iEventServiceSetup
|
||||
public function RegisterEventsAndListeners()
|
||||
{
|
||||
EventService::RegisterListener(
|
||||
EVENT_DOWNLOAD_DOCUMENT,
|
||||
\EVENT_DOWNLOAD_DOCUMENT,
|
||||
[$this, 'OnAttachmentDownloadActivateTriggers'],
|
||||
'Attachment'
|
||||
);
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
|
||||
'bkp-backup-running' => 'A backup is running. Please wait...',
|
||||
'bkp-restore-running' => 'A restore is running. Please wait...',
|
||||
|
||||
'Menu:BackupStatus' => 'Backups',
|
||||
'bkp-status-title' => 'Backups',
|
||||
'bkp-status-checks' => 'Settings and checks',
|
||||
'bkp-mysqldump-ok' => 'mysqldump is present: %1$s',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump could not be found: %1$s - Please make sure it is installed and in the path, or edit the configuration file to tune mysql_bindir.',
|
||||
'bkp-mysqldump-issue' => 'mysqldump could not be executed (retcode=%1$d): Please make sure it is installed and in the path, or edit the configuration file to tune mysql_bindir',
|
||||
'bkp-missing-dir' => 'The target directory <code>%1$s</code> could not be found',
|
||||
'bkp-free-disk-space' => '<b>%1$s free</b> in <code>%2$s</code>',
|
||||
'bkp-dir-not-writeable' => '%1$s is not writable',
|
||||
'bkp-wrong-format-spec' => 'The current specification to format the file names is wrong (%1$s). A default specification will apply: %2$s',
|
||||
'bkp-name-sample' => 'Backup files are named depending on DB identifiers, date and time. Example: %1$s',
|
||||
'bkp-week-days' => 'Backups will occur <b>every %1$s at %2$s</b>',
|
||||
'bkp-retention' => 'At most <b>%1$d backup files will be kept</b> in the target directory.',
|
||||
'bkp-next-to-delete' => 'Will be deleted when the next backup occurs (see the setting "retention_count")',
|
||||
'bkp-table-file' => 'File',
|
||||
'bkp-table-file+' => 'Only files having the extension .zip are considered as being backup files',
|
||||
'bkp-table-size' => 'Size',
|
||||
'bkp-table-size+' => '',
|
||||
'bkp-table-actions' => 'Actions',
|
||||
'bkp-table-actions+' => '',
|
||||
'bkp-status-backups-auto' => 'Scheduled backups',
|
||||
'bkp-status-backups-manual' => 'Manual backups',
|
||||
'bkp-status-backups-none' => 'No backup yet',
|
||||
'bkp-next-backup' => 'The next backup will occur on <b>%1$s</b> (%2$s) at %3$s.',
|
||||
'bkp-next-backup-unknown' => 'The next backup is <b>not scheduled</b> yet.',
|
||||
'bkp-button-backup-now' => 'Backup now!',
|
||||
'bkp-button-restore-now' => 'Restore!',
|
||||
'bkp-confirm-backup' => 'Please confirm that you do request the backup to occur right now.',
|
||||
'bkp-confirm-restore' => 'Please confirm that you do want to restore the backup %1$s.',
|
||||
'bkp-wait-backup' => 'Please wait for the backup to complete...',
|
||||
'bkp-wait-restore' => 'Please wait for the restore to complete...',
|
||||
'bkp-success-restore' => 'Restore successfully completed.',
|
||||
));
|
||||
@@ -4,44 +4,58 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'Menu:BackupStatus' => '定时备份',
|
||||
'bkp-backup-running' => '备份正在进行, 请稍后...',
|
||||
'bkp-button-backup-now' => '立即备份!',
|
||||
'bkp-button-restore-now' => '还原!',
|
||||
'bkp-confirm-backup' => '请确认是否立即开始备份.',
|
||||
'bkp-confirm-restore' => '请确认要还原的备份文件是 %1$s.',
|
||||
'bkp-dir-not-writeable' => '%1$s没有写入权限',
|
||||
'bkp-free-disk-space' => '<b>%1$s可用空间</b>位于<code>%2$s</code>',
|
||||
'bkp-missing-dir' => '目标目录<code>%1$s</code>找不到',
|
||||
'bkp-mysqldump-issue' => 'mysqldump无法运行 (retcode=%1$d): 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.'配置文件的参数mysql_bindir',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump找不到: %1$s - 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.'配置文件的参数mysql_bindir.',
|
||||
'bkp-mysqldump-ok' => '已找到mysqldump : %1$s',
|
||||
'bkp-name-sample' => '备份文件将以数据库名, 日期和时间进行命名. 例如: %1$s',
|
||||
'bkp-next-backup' => '下一次备份将发生在<b>%1$s</b> (%2$s) 的%3$s',
|
||||
'bkp-next-backup-unknown' => '下一次备份<b>尚未被计划</b>.',
|
||||
'bkp-next-to-delete' => '当下一次备份时将被删除 (参阅设置 "retention_count")',
|
||||
|
||||
'bkp-backup-running' => '备份正在进行, 请稍候...',
|
||||
'bkp-restore-running' => '还原正在进行, 请稍等...',
|
||||
'bkp-retention' => '最多<b>%1$d份备份文件</b>在目标目录.',
|
||||
'bkp-status-backups-auto' => '定时备份',
|
||||
'bkp-status-backups-manual' => '手动备份',
|
||||
'bkp-status-backups-none' => '尚未开始备份',
|
||||
'bkp-status-checks' => '设置与检查',
|
||||
|
||||
'Menu:BackupStatus' => '定时备份',
|
||||
'bkp-status-title' => '定时备份',
|
||||
'bkp-success-restore' => '还原成功.',
|
||||
'bkp-table-actions' => '操作',
|
||||
'bkp-table-actions+' => '',
|
||||
'bkp-status-checks' => '设置与检查',
|
||||
'bkp-mysqldump-ok' => '已找到 mysqldump : %1$s',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump找不到: %1$s - 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.'配置文件的参数mysql_bindir.',
|
||||
'bkp-mysqldump-issue' => 'mysqldump无法运行 (retcode=%1$d): 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.'配置文件的参数mysql_bindir',
|
||||
'bkp-missing-dir' => '目标目录<code>%1$s</code>找不到',
|
||||
'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',
|
||||
'bkp-name-sample' => '备份文件将以数据库名, 日期和时间进行命名. 例如: %1$s',
|
||||
'bkp-week-days' => '在每个<b>%1$s的%2$s</b>进行备份',
|
||||
'bkp-retention' => '最多<b>%1$d份备份文件</b>在目标目录.',
|
||||
'bkp-next-to-delete' => '当下一次备份时将被删除 (参阅设置 "retention_count")',
|
||||
'bkp-table-file' => '文件',
|
||||
'bkp-table-file+' => '只有扩展名是.zip的文件才被认为是备份文件',
|
||||
'bkp-table-size' => '大小',
|
||||
'bkp-table-size+' => '',
|
||||
'bkp-table-actions' => '操作',
|
||||
'bkp-table-actions+' => '',
|
||||
'bkp-status-backups-auto' => '定时备份',
|
||||
'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-button-backup-now' => '立即备份!',
|
||||
'bkp-button-restore-now' => '还原!',
|
||||
'bkp-confirm-backup' => '请确认是否立即开始备份.',
|
||||
'bkp-confirm-restore' => '请确认要还原的备份文件是 %1$s.',
|
||||
'bkp-wait-backup' => '请等待备份完成...',
|
||||
'bkp-wait-restore' => '请等待还原完成...',
|
||||
'bkp-week-days' => '在每个<b>%1$s的%2$s</b>进行备份',
|
||||
'bkp-wrong-format-spec' => '当前文件名格式错误 (%1$s). 默认格式应该是: %2$s',
|
||||
'bkp-success-restore' => '还原成功.',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Note: The classes have been grouped by categories: bizmodel
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
// Class: lnkFunctionalCIToProviderContract
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:lnkFunctionalCIToProviderContract' => 'Link FunctionalCI / ProviderContract',
|
||||
'Class:lnkFunctionalCIToProviderContract+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Provider contract',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => 'Provider contract Name',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => 'CI Name',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: lnkFunctionalCIToService
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:lnkFunctionalCIToService' => 'Link FunctionalCI / Service',
|
||||
'Class:lnkFunctionalCIToService+' => '',
|
||||
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Service',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name' => 'Service Name',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name' => 'CI Name',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: FunctionalCI
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Provider contracts',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item',
|
||||
'Class:FunctionalCI/Attribute:services_list' => 'Services',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Document
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Document/Attribute:contracts_list' => 'Contracts',
|
||||
'Class:Document/Attribute:contracts_list+' => 'All the contracts linked to this document',
|
||||
'Class:Document/Attribute:services_list' => 'Services',
|
||||
'Class:Document/Attribute:services_list+' => 'All the services linked to this document',
|
||||
));
|
||||
@@ -1,44 +1,86 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// 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
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// iTop is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* @author Benjamin Planque <benjamin.planque@combodo.com>
|
||||
*
|
||||
*/
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Note: The classes have been grouped by categories: bizmodel
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
// Class: lnkFunctionalCIToProviderContract
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:lnkFunctionalCIToProviderContract' => '关联功能配置项/供应商合同',
|
||||
'Class:lnkFunctionalCIToProviderContract+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => '供应商合同',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => '供应商合同名称',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => '配置项',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => '配置项名称',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: lnkFunctionalCIToService
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:lnkFunctionalCIToService' => '关联 功能配置项/服务',
|
||||
'Class:lnkFunctionalCIToService+' => '',
|
||||
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id' => '服务',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name' => '服务名称',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id' => '配置项',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name' => '配置项名称',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: FunctionalCI
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => '供应商合同',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => '此配置项的所有供应商合同',
|
||||
'Class:FunctionalCI/Attribute:services_list' => '服务',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => '此配置项影响的所有服务',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: Document
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:Document/Attribute:contracts_list' => '合同',
|
||||
'Class:Document/Attribute:contracts_list+' => '此文档关联的所有合同',
|
||||
'Class:Document/Attribute:services_list' => '服务',
|
||||
'Class:Document/Attribute:services_list+' => '此文档关联的所有服务',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => '供应商合同',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => '此配置项的所有供应商合同',
|
||||
'Class:FunctionalCI/Attribute:services_list' => '服务',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => '此配置项影响的所有服务',
|
||||
'Class:lnkFunctionalCIToProviderContract' => '关联功能配置项/供应商合同',
|
||||
'Class:lnkFunctionalCIToProviderContract+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => '配置项',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => '配置项名称',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => '供应商合同',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => '供应商合同名称',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '',
|
||||
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s~~',
|
||||
'Class:lnkFunctionalCIToService' => '关联功能配置项/服务',
|
||||
'Class:lnkFunctionalCIToService+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id' => '配置项',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name' => '配置项名称',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id' => '服务',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name' => '服务名称',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name+' => '',
|
||||
'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
// Copyright (C) 2024 Combodo SAS
|
||||
//
|
||||
// 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
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// iTop is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Benjamin Planque <benjamin.planque@combodo.com>
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Note: The classes have been grouped by categories: bizmodel
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: lnkFunctionalCIToTicket
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:lnkFunctionalCIToTicket' => 'Link FunctionalCI / Ticket',
|
||||
'Class:lnkFunctionalCIToTicket+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => 'Ref',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title' => 'Ticket title',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => 'CI Name',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact (text)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Impact',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Added manually',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Computed',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Not impacted',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: FunctionalCI
|
||||
//
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickets',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item',
|
||||
));
|
||||
@@ -1,20 +1,48 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// 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
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// iTop is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* @author Benjamin Planque <benjamin.planque@combodo.com>
|
||||
*
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Note: The classes have been grouped by categories: bizmodel
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: lnkFunctionalCIToTicket
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => '工单',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => '此配置项包含的所有工单',
|
||||
'Class:lnkFunctionalCIToTicket' => '关联功能配置项/工单',
|
||||
'Class:lnkFunctionalCIToTicket' => '关联 功能配置项/工单',
|
||||
'Class:lnkFunctionalCIToTicket+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => '工单',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => '工单编号',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title' => '工单标题',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id' => '配置项',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => '配置项名称',
|
||||
@@ -22,14 +50,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => '影响 (文本)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => '影响',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => '自动添加',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => '手动添加',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => '自动添加',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => '不通知',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => '工单',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => '工单编号',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title' => '工单标题',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: FunctionalCI
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => '工单',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => '此配置项包含的所有工单',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,294 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'Menu:ChangeManagement' => 'Change management',
|
||||
'Menu:Change:Overview' => 'Overview',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:NewChange' => 'New change',
|
||||
'Menu:NewChange+' => 'Create a new change ticket',
|
||||
'Menu:SearchChanges' => 'Search for changes',
|
||||
'Menu:SearchChanges+' => 'Search for change tickets',
|
||||
'Menu:Change:Shortcuts' => 'Shortcuts',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => 'Changes awaiting approval',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'Menu:Changes' => 'Open changes',
|
||||
'Menu:Changes+' => 'All open changes',
|
||||
'Menu:MyChanges' => 'Changes assigned to me',
|
||||
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes by status for the last 7 days',
|
||||
'Tickets:Related:OpenChanges' => 'Open changes',
|
||||
'Tickets:Related:RecentChanges' => 'Recent changes (72h)',
|
||||
));
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
|
||||
//
|
||||
// Class: Change
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Change' => 'Change',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:status' => 'Status',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => 'New',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:validated' => 'Validated',
|
||||
'Class:Change/Attribute:status/Value:validated+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planned and scheduled',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Approved',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:notapproved' => 'Not approved',
|
||||
'Class:Change/Attribute:status/Value:notapproved+' => '',
|
||||
'Class:Change/Attribute:status/Value:implemented' => 'Implemented',
|
||||
'Class:Change/Attribute:status/Value:implemented+' => '',
|
||||
'Class:Change/Attribute:status/Value:monitored' => 'Monitored',
|
||||
'Class:Change/Attribute:status/Value:monitored+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Closed',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:reason' => 'Reject reason',
|
||||
'Class:Change/Attribute:reason+' => '',
|
||||
'Class:Change/Attribute:requestor_id' => 'Requestor',
|
||||
'Class:Change/Attribute:requestor_id+' => '',
|
||||
'Class:Change/Attribute:requestor_email' => 'Requestor email',
|
||||
'Class:Change/Attribute:requestor_email+' => '',
|
||||
'Class:Change/Attribute:creation_date' => 'Creation date',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:impact' => 'Impact',
|
||||
'Class:Change/Attribute:impact+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_id' => 'Supervisor team',
|
||||
'Class:Change/Attribute:supervisor_group_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_name' => 'Supervisor team name',
|
||||
'Class:Change/Attribute:supervisor_group_name+' => '',
|
||||
'Class:Change/Attribute:supervisor_id' => 'Supervisor',
|
||||
'Class:Change/Attribute:supervisor_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_email' => 'Supervisor email',
|
||||
'Class:Change/Attribute:supervisor_email+' => '',
|
||||
'Class:Change/Attribute:manager_group_id' => 'Manager team',
|
||||
'Class:Change/Attribute:manager_group_id+' => '',
|
||||
'Class:Change/Attribute:manager_group_name' => 'Manager team name',
|
||||
'Class:Change/Attribute:manager_group_name+' => '',
|
||||
'Class:Change/Attribute:manager_id' => 'Manager',
|
||||
'Class:Change/Attribute:manager_id+' => '',
|
||||
'Class:Change/Attribute:manager_email' => 'Manager email',
|
||||
'Class:Change/Attribute:manager_email+' => '',
|
||||
'Class:Change/Attribute:outage' => 'Outage',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'No',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Yes',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:fallback' => 'Fallback plan',
|
||||
'Class:Change/Attribute:fallback+' => '',
|
||||
'Class:Change/Attribute:parent_id' => 'Parent change',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_name' => 'Parent change Ref',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => 'Related requests',
|
||||
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Related problems',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Related incidents',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Child changes',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent friendly name',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Change type',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall+' => '',
|
||||
'Class:Change/Stimulus:ev_validate' => 'Validate',
|
||||
'Class:Change/Stimulus:ev_validate+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
'Class:Change/Stimulus:ev_monitor' => 'Monitor',
|
||||
'Class:Change/Stimulus:ev_monitor+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Finish',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: RoutineChange
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:RoutineChange' => 'Routine Change',
|
||||
'Class:RoutineChange+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_validate' => 'Validate',
|
||||
'Class:RoutineChange/Stimulus:ev_validate+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:RoutineChange/Stimulus:ev_reject+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:RoutineChange/Stimulus:ev_assign+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:RoutineChange/Stimulus:ev_plan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:RoutineChange/Stimulus:ev_approve+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:RoutineChange/Stimulus:ev_replan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove' => 'Do Not Approve',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:RoutineChange/Stimulus:ev_implement+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor' => 'Monitor',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_finish' => 'Finish',
|
||||
'Class:RoutineChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ApprovedChange
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:ApprovedChange' => 'Approved Changes',
|
||||
'Class:ApprovedChange+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_date' => 'Approval Date',
|
||||
'Class:ApprovedChange/Attribute:approval_date+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_comment' => 'Approval comment',
|
||||
'Class:ApprovedChange/Attribute:approval_comment+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate' => 'Validate',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove' => 'Reject approval',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor' => 'Monitor',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish' => 'Finish',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: NormalChange
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:NormalChange' => 'Normal Change',
|
||||
'Class:NormalChange+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_date' => 'Acceptance date',
|
||||
'Class:NormalChange/Attribute:acceptance_date+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_comment' => 'Acceptance comment',
|
||||
'Class:NormalChange/Attribute:acceptance_comment+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_validate' => 'Validate',
|
||||
'Class:NormalChange/Stimulus:ev_validate+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:NormalChange/Stimulus:ev_reject+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:NormalChange/Stimulus:ev_assign+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:NormalChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:NormalChange/Stimulus:ev_plan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:NormalChange/Stimulus:ev_approve+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:NormalChange/Stimulus:ev_replan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove' => 'Reject approval',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:NormalChange/Stimulus:ev_implement+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_monitor' => 'Monitor',
|
||||
'Class:NormalChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_finish' => 'Finish',
|
||||
'Class:NormalChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EmergencyChange
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:EmergencyChange' => 'Emergency Change',
|
||||
'Class:EmergencyChange+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate' => 'Validate',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove' => 'Reject approval',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor' => 'Monitor',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish' => 'Finish',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
@@ -4,233 +4,291 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'Menu:ChangeManagement' => '变更管理',
|
||||
'Menu:Change:Overview' => '概况',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:NewChange' => '新建变更',
|
||||
'Menu:NewChange+' => '新建变更',
|
||||
'Menu:SearchChanges' => '搜索变更',
|
||||
'Menu:SearchChanges+' => '搜索变更',
|
||||
'Menu:Change:Shortcuts' => '快捷方式',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:WaitingAcceptance' => '等待审核的变更',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => '等待批准的变更',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'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:RecentChanges' => '最近的变更 (72小时)',
|
||||
]);
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
|
||||
//
|
||||
// Class: Change
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:ApprovedChange' => '已批准的变更',
|
||||
'Class:ApprovedChange+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_comment' => '批准说明',
|
||||
'Class:ApprovedChange/Attribute:approval_comment+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_date' => '批准日期',
|
||||
'Class:ApprovedChange/Attribute:approval_date+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
|
||||
'Class:Change' => '变更',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:child_changes_list' => '子变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '此变更相关的字变更',
|
||||
'Class:Change/Attribute:creation_date' => '创建时间',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:fallback' => '回滚计划',
|
||||
'Class:Change/Attribute:fallback+' => '',
|
||||
'Class:Change/Attribute:impact' => '影响',
|
||||
'Class:Change/Attribute:impact+' => '',
|
||||
'Class:Change/Attribute:manager_email' => '邮箱',
|
||||
'Class:Change/Attribute:manager_email+' => '',
|
||||
'Class:Change/Attribute:manager_group_id' => '管理团队',
|
||||
'Class:Change/Attribute:manager_group_id+' => '',
|
||||
'Class:Change/Attribute:manager_group_name' => '管理团队名称',
|
||||
'Class:Change/Attribute:manager_group_name+' => '',
|
||||
'Class:Change/Attribute:manager_id' => '经理',
|
||||
'Class:Change/Attribute:manager_id+' => '',
|
||||
'Class:Change/Attribute:outage' => '停机',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => '否',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => '是',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:parent_id' => '父级变更',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall' => '变更类型',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall+' => '',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => '父级变更昵称',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_name' => '变更编号',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:reason' => '驳回原因',
|
||||
'Class:Change/Attribute:reason+' => '',
|
||||
'Class:Change/Attribute:related_incident_list' => '相关事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '此变更相关的所有事件',
|
||||
'Class:Change/Attribute:related_problems_list' => '相关问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '此变更相关的所有问题',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:requestor_email' => '邮箱',
|
||||
'Class:Change/Attribute:requestor_email+' => '',
|
||||
'Class:Change/Attribute:requestor_id' => '发起人',
|
||||
'Class:Change/Attribute:requestor_id+' => '',
|
||||
'Class:Change/Attribute:status' => '状态',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => '已批准',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => '新建',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:validated' => '已确认',
|
||||
'Class:Change/Attribute:status/Value:validated+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => '已驳回',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => '已分配',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => '已关闭',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled' => '已计划和安排',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => '已批准',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:notapproved' => '未批准',
|
||||
'Class:Change/Attribute:status/Value:notapproved+' => '',
|
||||
'Class:Change/Attribute:status/Value:implemented' => '已实施',
|
||||
'Class:Change/Attribute:status/Value:implemented+' => '',
|
||||
'Class:Change/Attribute:status/Value:monitored' => '已验收',
|
||||
'Class:Change/Attribute:status/Value:monitored+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => '新建',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:notapproved' => '未批准',
|
||||
'Class:Change/Attribute:status/Value:notapproved+' => '',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled' => '已计划和安排',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => '已驳回',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:validated' => '已确认',
|
||||
'Class:Change/Attribute:status/Value:validated+' => '',
|
||||
'Class:Change/Attribute:supervisor_email' => '邮箱',
|
||||
'Class:Change/Attribute:supervisor_email+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => '已关闭',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:reason' => '驳回原因',
|
||||
'Class:Change/Attribute:reason+' => '',
|
||||
'Class:Change/Attribute:requestor_id' => '发起人',
|
||||
'Class:Change/Attribute:requestor_id+' => '',
|
||||
'Class:Change/Attribute:requestor_email' => '邮箱',
|
||||
'Class:Change/Attribute:requestor_email+' => '',
|
||||
'Class:Change/Attribute:creation_date' => '创建时间',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:impact' => '影响',
|
||||
'Class:Change/Attribute:impact+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_id' => '监督团队',
|
||||
'Class:Change/Attribute:supervisor_group_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_name' => '监督团队名称',
|
||||
'Class:Change/Attribute:supervisor_group_name+' => '',
|
||||
'Class:Change/Attribute:supervisor_id' => '监督人',
|
||||
'Class:Change/Attribute:supervisor_id+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => '批准',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Attribute:supervisor_email' => '邮箱',
|
||||
'Class:Change/Attribute:supervisor_email+' => '',
|
||||
'Class:Change/Attribute:manager_group_id' => '管理团队',
|
||||
'Class:Change/Attribute:manager_group_id+' => '',
|
||||
'Class:Change/Attribute:manager_group_name' => '管理团队名称',
|
||||
'Class:Change/Attribute:manager_group_name+' => '',
|
||||
'Class:Change/Attribute:manager_id' => '经理',
|
||||
'Class:Change/Attribute:manager_id+' => '',
|
||||
'Class:Change/Attribute:manager_email' => '邮箱',
|
||||
'Class:Change/Attribute:manager_email+' => '',
|
||||
'Class:Change/Attribute:outage' => '停机',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => '否',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => '是',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:fallback' => '回滚计划',
|
||||
'Class:Change/Attribute:fallback+' => '',
|
||||
'Class:Change/Attribute:parent_id' => '父级变更',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_name' => '变更编号',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_problems_list' => '相关问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '此变更相关的所有问题',
|
||||
'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:parent_id_friendlyname' => '父级变更昵称',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall' => '变更类型',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall+' => '',
|
||||
'Class:Change/Stimulus:ev_validate' => '同意',
|
||||
'Class:Change/Stimulus:ev_validate+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => '驳回',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => '分配',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => '完成',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => '计划',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => '批准',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => '实施',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
'Class:Change/Stimulus:ev_monitor' => '验收',
|
||||
'Class:Change/Stimulus:ev_monitor+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => '计划',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => '驳回',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_validate' => '同意',
|
||||
'Class:Change/Stimulus:ev_validate+' => '',
|
||||
'Class:EmergencyChange' => '紧急变更',
|
||||
'Class:EmergencyChange+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
|
||||
'Class:NormalChange' => '正常变更',
|
||||
'Class:NormalChange+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_comment' => '审核说明',
|
||||
'Class:NormalChange/Attribute:acceptance_comment+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_date' => '审核日期',
|
||||
'Class:NormalChange/Attribute:acceptance_date+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:NormalChange/Stimulus:ev_approve+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:NormalChange/Stimulus:ev_assign+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:NormalChange/Stimulus:ev_finish+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:NormalChange/Stimulus:ev_implement+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:NormalChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:NormalChange/Stimulus:ev_plan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:NormalChange/Stimulus:ev_reject+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:NormalChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:NormalChange/Stimulus:ev_replan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:NormalChange/Stimulus:ev_validate+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => '完成',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: RoutineChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:RoutineChange' => '例行变更',
|
||||
'Class:RoutineChange+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:RoutineChange/Stimulus:ev_approve+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:RoutineChange/Stimulus:ev_validate+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:RoutineChange/Stimulus:ev_reject+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:RoutineChange/Stimulus:ev_assign+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:RoutineChange/Stimulus:ev_finish+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:RoutineChange/Stimulus:ev_plan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:RoutineChange/Stimulus:ev_approve+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:RoutineChange/Stimulus:ev_replan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:RoutineChange/Stimulus:ev_implement+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:RoutineChange/Stimulus:ev_plan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:RoutineChange/Stimulus:ev_reject+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:RoutineChange/Stimulus:ev_replan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:RoutineChange/Stimulus:ev_validate+' => '',
|
||||
'Menu:Change:Overview' => '概况',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:Change:Shortcuts' => '快捷方式',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:ChangeManagement' => '变更管理',
|
||||
'Menu:Changes' => '所有打开的变更',
|
||||
'Menu:Changes+' => '所有打开的变更',
|
||||
'Menu:MyChanges' => '分配给我的变更',
|
||||
'Menu:MyChanges+' => '分配给我的变更 (作为办理人)',
|
||||
'Menu:NewChange' => '新建变更',
|
||||
'Menu:NewChange+' => '新建变更',
|
||||
'Menu:SearchChanges' => '搜索变更',
|
||||
'Menu:SearchChanges+' => '搜索变更',
|
||||
'Menu:WaitingAcceptance' => '等待审核的变更',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => '等待批准的变更',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'Tickets:Related:OpenChanges' => '打开的变更',
|
||||
'Tickets:Related:RecentChanges' => '最近的变更 (72小时)',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => '最近一周的变更 (按类型)',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => '最近一周的变更 (按范围)',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => '最近一周的变更 (按状态)',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => '最近一周的变更 (按数量)',
|
||||
'Class:RoutineChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:RoutineChange/Stimulus:ev_finish+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: ApprovedChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:ApprovedChange' => '已批准的变更',
|
||||
'Class:ApprovedChange+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_date' => '批准日期',
|
||||
'Class:ApprovedChange/Attribute:approval_date+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_comment' => '批准说明',
|
||||
'Class:ApprovedChange/Attribute:approval_comment+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: NormalChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:NormalChange' => '正常变更',
|
||||
'Class:NormalChange+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_date' => '审核日期',
|
||||
'Class:NormalChange/Attribute:acceptance_date+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_comment' => '审核说明',
|
||||
'Class:NormalChange/Attribute:acceptance_comment+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:NormalChange/Stimulus:ev_validate+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:NormalChange/Stimulus:ev_reject+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:NormalChange/Stimulus:ev_assign+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:NormalChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:NormalChange/Stimulus:ev_plan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:NormalChange/Stimulus:ev_approve+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:NormalChange/Stimulus:ev_replan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:NormalChange/Stimulus:ev_implement+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:NormalChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:NormalChange/Stimulus:ev_finish+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: EmergencyChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:EmergencyChange' => '紧急变更',
|
||||
'Class:EmergencyChange+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate' => '同意',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject' => '驳回',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign' => '分配',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan' => '计划',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve' => '批准',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan' => '重新计划',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove' => '不批准',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement' => '实施',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor' => '验收',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish' => '完成',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'Menu:ChangeManagement' => 'Change management',
|
||||
'Menu:Change:Overview' => 'Overview',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:NewChange' => 'New change',
|
||||
'Menu:NewChange+' => 'Create a new change ticket',
|
||||
'Menu:SearchChanges' => 'Search for changes',
|
||||
'Menu:SearchChanges+' => 'Search for change tickets',
|
||||
'Menu:Change:Shortcuts' => 'Shortcuts',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => 'Changes awaiting approval',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'Menu:Changes' => 'Open changes',
|
||||
'Menu:Changes+' => 'All open changes',
|
||||
'Menu:MyChanges' => 'Changes assigned to me',
|
||||
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes by status for the last 7 days',
|
||||
'Tickets:Related:OpenChanges' => 'Open changes',
|
||||
'Tickets:Related:RecentChanges' => 'Recent changes (72h)',
|
||||
));
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
|
||||
//
|
||||
// Class: Change
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Change' => 'Change',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:status' => 'Status',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => 'New',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:planned' => 'Planned',
|
||||
'Class:Change/Attribute:status/Value:planned+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Approved',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Closed',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:category' => 'Category',
|
||||
'Class:Change/Attribute:category+' => '',
|
||||
'Class:Change/Attribute:category/Value:application' => 'application',
|
||||
'Class:Change/Attribute:category/Value:application+' => 'application',
|
||||
'Class:Change/Attribute:category/Value:hardware' => 'hardware',
|
||||
'Class:Change/Attribute:category/Value:hardware+' => 'hardware',
|
||||
'Class:Change/Attribute:category/Value:network' => 'network',
|
||||
'Class:Change/Attribute:category/Value:network+' => 'network',
|
||||
'Class:Change/Attribute:category/Value:other' => 'other',
|
||||
'Class:Change/Attribute:category/Value:other+' => 'other',
|
||||
'Class:Change/Attribute:category/Value:software' => 'software',
|
||||
'Class:Change/Attribute:category/Value:software+' => 'software',
|
||||
'Class:Change/Attribute:category/Value:system' => 'system',
|
||||
'Class:Change/Attribute:category/Value:system+' => 'system',
|
||||
'Class:Change/Attribute:reject_reason' => 'Reject reason',
|
||||
'Class:Change/Attribute:reject_reason+' => '',
|
||||
'Class:Change/Attribute:changemanager_id' => 'Change manager',
|
||||
'Class:Change/Attribute:changemanager_id+' => '',
|
||||
'Class:Change/Attribute:changemanager_email' => 'Change manager email',
|
||||
'Class:Change/Attribute:changemanager_email+' => '',
|
||||
'Class:Change/Attribute:parent_id' => 'Parent change',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_name' => 'Parent change ref',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:creation_date' => 'Creation date',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:approval_date' => 'Approval date',
|
||||
'Class:Change/Attribute:approval_date+' => '',
|
||||
'Class:Change/Attribute:fallback_plan' => 'Fallback plan',
|
||||
'Class:Change/Attribute:fallback_plan+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => 'Related requests',
|
||||
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Related incidents',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Related problems',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Child changes',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent change friendly name',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Assign',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Plan',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Reject',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Reopen',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Approve',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Close',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
'Class:Change/Attribute:outage' => 'Outage',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'No',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Yes',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
));
|
||||
@@ -4,16 +4,81 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'Menu:ChangeManagement' => '变更管理',
|
||||
'Menu:Change:Overview' => '概况',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:NewChange' => '新建变更',
|
||||
'Menu:NewChange+' => '新建变更',
|
||||
'Menu:SearchChanges' => '搜索变更',
|
||||
'Menu:SearchChanges+' => '搜索变更',
|
||||
'Menu:Change:Shortcuts' => '快捷方式',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:WaitingAcceptance' => '等待审核的变更',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => '等待批准的变更',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'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:RecentChanges' => '最近的变更 (72小时)',
|
||||
]);
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
|
||||
//
|
||||
// Class: Change
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:Change' => '变更',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:approval_date' => '审批日期',
|
||||
'Class:Change/Attribute:approval_date+' => '',
|
||||
'Class:Change/Attribute:status' => '状态',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => '新建',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => '已分配',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:planned' => '已计划',
|
||||
'Class:Change/Attribute:status/Value:planned+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => '已驳回',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => '已批准',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => '已关闭',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:category' => '类型',
|
||||
'Class:Change/Attribute:category+' => '',
|
||||
'Class:Change/Attribute:category/Value:application' => '应用',
|
||||
@@ -28,83 +93,48 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:Change/Attribute:category/Value:software+' => '软件',
|
||||
'Class:Change/Attribute:category/Value:system' => '系统',
|
||||
'Class:Change/Attribute:category/Value:system+' => '系统',
|
||||
'Class:Change/Attribute:changemanager_email' => '邮箱',
|
||||
'Class:Change/Attribute:changemanager_email+' => '',
|
||||
'Class:Change/Attribute:changemanager_id' => '变更经理',
|
||||
'Class:Change/Attribute:changemanager_id+' => '',
|
||||
'Class:Change/Attribute:child_changes_list' => '子变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '此变更相关的所有子变更',
|
||||
'Class:Change/Attribute:creation_date' => '创建日期',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:fallback_plan' => '回滚计划',
|
||||
'Class:Change/Attribute:fallback_plan+' => '',
|
||||
'Class:Change/Attribute:outage' => '停机',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => '否',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => '是',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:parent_id' => '父级变更',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => '父级变更昵称',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_name' => '变更编号',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:reject_reason' => '驳回原因',
|
||||
'Class:Change/Attribute:reject_reason+' => '',
|
||||
'Class:Change/Attribute:changemanager_id' => '变更经理',
|
||||
'Class:Change/Attribute:changemanager_id+' => '',
|
||||
'Class:Change/Attribute:changemanager_email' => '邮箱',
|
||||
'Class:Change/Attribute:changemanager_email+' => '',
|
||||
'Class:Change/Attribute:parent_id' => '父级变更',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_name' => '变更编号',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:creation_date' => '创建日期',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:approval_date' => '审批日期',
|
||||
'Class:Change/Attribute:approval_date+' => '',
|
||||
'Class:Change/Attribute:fallback_plan' => '回滚计划',
|
||||
'Class:Change/Attribute:fallback_plan+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_incident_list' => '相关事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '此变更相关的所有事件',
|
||||
'Class:Change/Attribute:related_problems_list' => '相关问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '此变更相关的所有问题',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:status' => '状态',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => '已批准',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => '已分配',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => '已关闭',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => '新建',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:planned' => '已计划',
|
||||
'Class:Change/Attribute:status/Value:planned+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => '已驳回',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => '批准',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'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/Stimulus:ev_assign' => '分配',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => '关闭',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => '计划',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => '驳回',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => '重新打开',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Menu:Change:Overview' => '概况',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:Change:Shortcuts' => '快捷方式',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:ChangeManagement' => '变更管理',
|
||||
'Menu:Changes' => '所有打开的变更',
|
||||
'Menu:Changes+' => '所有打开的变更',
|
||||
'Menu:MyChanges' => '分配给我的变更',
|
||||
'Menu:MyChanges+' => '分配给我的变更 (作为办理人)',
|
||||
'Menu:NewChange' => '新建变更',
|
||||
'Menu:NewChange+' => '新建变更',
|
||||
'Menu:SearchChanges' => '搜索变更',
|
||||
'Menu:SearchChanges+' => '搜索变更',
|
||||
'Menu:WaitingAcceptance' => '等待审核的变更',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => '等待批准的变更',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'Tickets:Related:OpenChanges' => '打开的变更',
|
||||
'Tickets:Related:RecentChanges' => '最近的变更 (72小时)',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => '最近一周的变更 (按类型)',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => '最近一周的变更 (按范围)',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => '最近一周的变更 (按状态)',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => '最近一周的变更 (按数量)',
|
||||
'Class:Change/Stimulus:ev_approve' => '批准',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => '关闭',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
'Class:Change/Attribute:outage' => '停机',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => '否',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => '是',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
]);
|
||||
|
||||
@@ -643,7 +643,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Počet volných adres: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Tady je výčet volných IP adres (10)',
|
||||
'Class:Subnet/Tab:IPUsage' => 'Využití IP',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhraní, která mají IP adresu v rozsahu: <em>%1$s</em>-<em>%2$s</em>',
|
||||
'Class:Tablet' => 'Tablet',
|
||||
'Class:Tablet+' => '',
|
||||
|
||||
@@ -153,7 +153,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:FunctionalCI/Attribute:organization_name' => 'Organisationsnavn',
|
||||
'Class:FunctionalCI/Attribute:organization_name+' => '',
|
||||
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
|
||||
'Class:Group' => 'Gruppe',
|
||||
@@ -642,7 +642,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Ledige IP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Her er et udtræk af 10 ledige IP adresser',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP Brug',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces der har en IP i området: <em>%1$s</em> til <em>%2$s</em>',
|
||||
'Class:Tablet' => 'Tablet',
|
||||
'Class:Tablet+' => '',
|
||||
|
||||
@@ -129,7 +129,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'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' => 'Softwares',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item',
|
||||
'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',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets',
|
||||
@@ -1557,7 +1557,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Server:otherinfo' => 'Other information',
|
||||
'Server:power' => 'Power supply',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP Usage',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces having an IP in the range: <em>%1$s</em> to <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => 'Free IPs',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Free IPs: %1$s',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -641,7 +641,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Szabad IP címek: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => '10 szabad IP cím kivonata',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP felhasználás',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'A hálózati csatolók a következő tartományba esnek: <em>%1$s</em> - <em>%2$s</em>',
|
||||
'Class:Tablet' => 'Táblagép',
|
||||
'Class:Tablet+' => '~~',
|
||||
|
||||
@@ -152,7 +152,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:FunctionalCI/Attribute:organization_name' => '組織名',
|
||||
'Class:FunctionalCI/Attribute:organization_name+' => '共通名',
|
||||
'Class:FunctionalCI/Attribute:softwares_list' => 'ソフトウエア',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
|
||||
'Class:Group' => 'グループ',
|
||||
@@ -641,7 +641,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'フリーIP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => '10個のフリーなIPアドレス',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP 利用',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'インターフェースは、レンジ: <em>%1$s</em> から <em>%2$s</em>の中のIPを持っています。',
|
||||
'Class:Tablet' => 'タブレット',
|
||||
'Class:Tablet+' => '',
|
||||
|
||||
@@ -641,7 +641,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'IPs livres: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Aqui uma faixa de 10 endereços IPs livres',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP usado',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Placas de rede contendo IP na faixa: <em>%1$s</em> para <em>%2$s</em>',
|
||||
'Class:Tablet' => 'Tablet',
|
||||
'Class:Tablet+' => '',
|
||||
|
||||
@@ -642,7 +642,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Свободных IP-адресов: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Вот выборка из 10 свободных IP-адресов',
|
||||
'Class:Subnet/Tab:IPUsage' => 'Использование IP-адресов',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'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:Tablet' => 'Планшет',
|
||||
'Class:Tablet+' => '',
|
||||
|
||||
@@ -152,7 +152,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:FunctionalCI/Attribute:organization_name' => 'Názov Organizácie',
|
||||
'Class:FunctionalCI/Attribute:organization_name+' => 'Common name~~',
|
||||
'Class:FunctionalCI/Attribute:softwares_list' => 'Softvér',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
|
||||
'Class:Group' => 'Skupina',
|
||||
@@ -641,7 +641,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Voľných IP adries: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Tu je extrakt 10 voľných IP adries',
|
||||
'Class:Subnet/Tab:IPUsage' => 'Využívanosť IP adries',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhrania majúce IP adresu v rozsahu: <em>%1$s</em> do <em>%2$s</em>',
|
||||
'Class:Tablet' => 'Tablet',
|
||||
'Class:Tablet+' => '~~',
|
||||
|
||||
@@ -642,7 +642,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Boş IPler: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Boş IP adresleri',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP Kullanımı',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => '<em>%1$s</em> - <em>%2$s</em> aralığındaki IPye sahip arayüzler',
|
||||
'Class:Tablet' => 'Tablet',
|
||||
'Class:Tablet+' => '~~',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
|
||||
'Menu:ConfigFileEditor' => 'Plain text editor',
|
||||
'config-edit-title' => 'Configuration File Editor',
|
||||
'config-edit-intro' => 'Be very cautious when editing the configuration file.',
|
||||
'config-apply' => 'Apply',
|
||||
'config-apply-title' => 'Apply (Ctrl+S)',
|
||||
'config-cancel' => 'Reset',
|
||||
'config-saved' => 'Successfully recorded.',
|
||||
'config-confirm-cancel' => 'Your changes will be lost.',
|
||||
'config-no-change' => 'No change: the file has been left unchanged.',
|
||||
'config-reverted' => 'The configuration has been reverted.',
|
||||
'config-parse-error' => 'Line %2$d: %1$s.<br/>The file has NOT been updated.',
|
||||
'config-current-line' => 'Editing line: %1$s',
|
||||
'config-saved-warning-db-password' => 'Successfully recorded, but the backup won\'t work due to unsupported characters in the database password.',
|
||||
'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.",
|
||||
));
|
||||
@@ -4,27 +4,40 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
|
||||
'Menu:ConfigEditor' => '编辑配置文件',
|
||||
'config-edit-title' => '配置文件编辑器',
|
||||
'config-edit-intro' => '编辑配置文件时请务必格外小心.',
|
||||
'config-apply' => '应用',
|
||||
'config-apply-title' => '应用 (Ctrl+S)',
|
||||
'config-cancel' => '重置',
|
||||
'config-confirm-cancel' => '您的修改将被丢弃.',
|
||||
'config-current-line' => '正在编辑第%1$s行',
|
||||
'config-edit-intro' => '编辑配置文件时请务必格外小心.',
|
||||
'config-edit-title' => '配置文件编辑器',
|
||||
'config-error-file-changed' => '错误: 配置文件在您打开以后已被更改, 无法保存. 请刷新并再次保存.',
|
||||
'config-error-transaction' => '错误: 无效的事务编号. 配置<b>没有</b>被更新.',
|
||||
'config-interactive-not-allowed' => ITOP_APPLICATION_SHORT.'交互式配置编辑器已禁用. 请在配置文件中查看 <code>\'config_editor\' => \'disabled\'</code>.',
|
||||
'config-no-change' => '没有变化: 配置文件将保持不变.',
|
||||
'config-not-allowed-in-demo' => '抱歉, '.ITOP_APPLICATION_SHORT.'处于<b>演示模式</b>: 不能编辑配置文件.',
|
||||
'config-parse-error' => '第%2$d行: %1$s.<br/>配置文件尚未更新.',
|
||||
'config-reverted' => '配置文件已恢复.',
|
||||
'config-saved' => '保存成功.',
|
||||
'config-confirm-cancel' => '您的修改将被丢弃.',
|
||||
'config-no-change' => '没有变化: 配置文件将保持不变.',
|
||||
'config-reverted' => '配置文件已恢复.',
|
||||
'config-parse-error' => '第%2$d行: %1$s.<br/>配置文件尚未更新.',
|
||||
'config-current-line' => '正在编辑第%1$s行',
|
||||
'config-saved-warning-db-password' => '保存成功, 但因为数据库密码中包含不支持的字符, 配置文件备份不会成功.',
|
||||
'config-error-transaction' => '错误: 无效的事务编号. 配置<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>.',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
'iTopUpdate:UI:PageTitle' => 'Application Upgrade',
|
||||
'itop-core-update:UI:SelectUpdateFile' => 'Application Upgrade',
|
||||
'itop-core-update:UI:ConfirmUpdate' => 'Confirm Application Upgrade',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => 'Application Upgrading',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => 'The application is currently under maintenance in read-only mode. You have to run a setup to return to normal mode.',
|
||||
'itop-core-update:UI:UpdateDone' => 'Application Upgrade',
|
||||
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => 'Application Upgrade',
|
||||
'itop-core-update/Operation:ConfirmUpdate/Title' => 'Confirm Application Upgrade',
|
||||
'itop-core-update/Operation:UpdateCoreFiles/Title' => 'Application Upgrading',
|
||||
'itop-core-update/Operation:UpdateDone/Title' => 'Application Upgrade Done',
|
||||
|
||||
'iTopUpdate:UI:SelectUpdateFile' => 'Select an upgrade file to upload',
|
||||
'iTopUpdate:UI:CheckUpdate' => 'Verify upgrade file',
|
||||
'iTopUpdate:UI:ConfirmInstallFile' => 'You are about to install %1$s',
|
||||
'iTopUpdate:UI:DoUpdate' => 'Upgrade',
|
||||
'iTopUpdate:UI:CurrentVersion' => 'Current installed version',
|
||||
'iTopUpdate:UI:NewVersion' => 'Newly installed version',
|
||||
'iTopUpdate:UI:Back' => 'Back',
|
||||
'iTopUpdate:UI:Cancel' => 'Cancel',
|
||||
'iTopUpdate:UI:Continue' => 'Continue',
|
||||
'iTopUpdate:UI:RunSetup' => 'Run Setup',
|
||||
'iTopUpdate:UI:WithDBBackup' => 'Database backup',
|
||||
'iTopUpdate:UI:WithFilesBackup' => 'Application files backup',
|
||||
'iTopUpdate:UI:WithoutBackup' => 'No backup is planned',
|
||||
'iTopUpdate:UI:Backup' => 'Backup generated before update',
|
||||
'iTopUpdate:UI:DoFilesArchive' => 'Archive application files',
|
||||
'iTopUpdate:UI:UploadArchive' => 'Select a package to upload',
|
||||
'iTopUpdate:UI:ServerFile' => 'Path of a package already on the server',
|
||||
'iTopUpdate:UI:WarningReadOnlyDuringUpdate' => 'During the upgrade, the application will be read-only.',
|
||||
|
||||
'iTopUpdate:UI:Status' => 'Status',
|
||||
'iTopUpdate:UI:Action' => 'Update',
|
||||
'iTopUpdate:UI:Setup' => ITOP_APPLICATION_SHORT.' Setup',
|
||||
'iTopUpdate:UI:History' => 'Versions History',
|
||||
'iTopUpdate:UI:Progress' => 'Progress of the upgrade',
|
||||
|
||||
'iTopUpdate:UI:DoBackup:Label' => 'Backup files and database',
|
||||
'iTopUpdate:UI:DoBackup:Warning' => 'Backup is not recommended due to limited available disk space',
|
||||
|
||||
'iTopUpdate:UI:DiskFreeSpace' => 'Disk free space',
|
||||
'iTopUpdate:UI:ItopDiskSpace' => ITOP_APPLICATION_SHORT.' disk space',
|
||||
'iTopUpdate:UI:DBDiskSpace' => 'Database disk space',
|
||||
'iTopUpdate:UI:FileUploadMaxSize' => 'File upload max size',
|
||||
|
||||
'iTopUpdate:UI:PostMaxSize' => 'PHP ini value post_max_size: %1$s',
|
||||
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini value upload_max_filesize: %1$s',
|
||||
|
||||
'iTopUpdate:UI:CanCoreUpdate:Loading' => 'Checking files',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Error' => 'Checking files failed (%1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:ErrorFileNotExist' => 'Checking files failed (File not exist %1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Failed' => 'Checking files failed',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated',
|
||||
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s',
|
||||
'iTopUpdate:UI:CannotUpdateUseSetup' => '<b>Some modified files were detected</b>, a partial update cannot be executed.</br>Follow the <a target="_blank" href="%2$s"> procedure</a> in order to manually upgrade your iTop. You must use the <a href="%1$s">setup</a> to update the application.',
|
||||
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check',
|
||||
|
||||
|
||||
|
||||
'iTopUpdate:UI:SetupLaunch' => 'Launch '.ITOP_APPLICATION_SHORT.' Setup',
|
||||
'iTopUpdate:UI:SetupLaunchConfirm' => 'This will launch '.ITOP_APPLICATION_SHORT.' setup, are you sure?',
|
||||
'iTopUpdate:UI:FastSetupLaunch' => 'Fast Setup',
|
||||
|
||||
// Setup Messages
|
||||
'iTopUpdate:UI:SetupMessage:Ready' => 'Ready to start',
|
||||
'iTopUpdate:UI:SetupMessage:EnterMaintenance' => 'Entering maintenance mode',
|
||||
'iTopUpdate:UI:SetupMessage:Backup' => 'Database backup',
|
||||
'iTopUpdate:UI:SetupMessage:FilesArchive' => 'Archive application files',
|
||||
'iTopUpdate:UI:SetupMessage:CopyFiles' => 'Copy new version files',
|
||||
'iTopUpdate:UI:SetupMessage:CheckCompile' => 'Check application upgrade',
|
||||
'iTopUpdate:UI:SetupMessage:Compile' => 'Upgrade application',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => 'Upgrade database',
|
||||
'iTopUpdate:UI:SetupMessage:ExitMaintenance' => 'Exiting maintenance mode',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDone' => 'Upgrade completed',
|
||||
|
||||
// Errors
|
||||
'iTopUpdate:Error:MissingFunction' => 'Impossible to start upgrade, missing function',
|
||||
'iTopUpdate:Error:MissingFile' => 'Missing file: %1$s',
|
||||
'iTopUpdate:Error:CorruptedFile' => 'File %1$s is corrupted',
|
||||
'iTopUpdate:Error:BadFileFormat' => 'Upgrade file is not a zip file',
|
||||
'iTopUpdate:Error:BadFileContent' => 'Upgrade file is not an application archive',
|
||||
'iTopUpdate:Error:BadItopProduct' => 'Upgrade file is not compatible with your application',
|
||||
'iTopUpdate:Error:Copy' => 'Error, cannot copy \'%1$s\' to \'%2$s\'',
|
||||
'iTopUpdate:Error:FileNotFound' => 'File not found',
|
||||
'iTopUpdate:Error:NoFile' => 'No file provided',
|
||||
'iTopUpdate:Error:InvalidToken' => 'Invalid token',
|
||||
'iTopUpdate:Error:UpdateFailed' => 'Upgrade failed',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => 'The upload max size seems too small for update. Please change the PHP configuration.',
|
||||
|
||||
'iTopUpdate:UI:RestoreArchive' => 'You can restore your application from the archive \'%1$s\'',
|
||||
'iTopUpdate:UI:RestoreBackup' => 'You can restore the database from \'%1$s\'',
|
||||
'iTopUpdate:UI:UpdateDone' => 'Upgrade successful',
|
||||
'Menu:iTopUpdate' => 'Application upgrade',
|
||||
'Menu:iTopUpdate+' => 'Application upgrade',
|
||||
|
||||
// Missing itop entries
|
||||
'Class:ModuleInstallation/Attribute:installed' => 'Installed on',
|
||||
'Class:ModuleInstallation/Attribute:name' => 'Name',
|
||||
'Class:ModuleInstallation/Attribute:version' => 'Version',
|
||||
'Class:ModuleInstallation/Attribute:comment' => 'Comment',
|
||||
));
|
||||
|
||||
|
||||
@@ -4,94 +4,123 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'Class:ModuleInstallation/Attribute:comment' => '备注',
|
||||
'Class:ModuleInstallation/Attribute:installed' => '安装时间',
|
||||
'Class:ModuleInstallation/Attribute:name' => '名称',
|
||||
'Class:ModuleInstallation/Attribute:version' => '版本',
|
||||
'Menu:iTopUpdate' => '应用升级',
|
||||
'Menu:iTopUpdate+' => '应用升级',
|
||||
'iTopUpdate:Error:BadFileContent' => '升级文件不是程序升级包',
|
||||
'iTopUpdate:Error:BadFileFormat' => '上传的不是zip格式的文件',
|
||||
'iTopUpdate:Error:BadItopProduct' => '升级文件与您的系统不兼容',
|
||||
'iTopUpdate:Error:Copy' => '错误, 无法复制 \'%1$s\' 到 \'%2$s\'',
|
||||
'iTopUpdate:Error:CorruptedFile' => '文件%1$s已损坏',
|
||||
'iTopUpdate:Error:FileNotFound' => '文件找不到',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => '上传上限太小. 请调整PHP配置.',
|
||||
'iTopUpdate:Error:InvalidToken' => '无效的token',
|
||||
'iTopUpdate:Error:MissingFile' => '缺少文件: %1$s',
|
||||
'iTopUpdate:Error:MissingFunction' => '无法开始升级, 功能缺失',
|
||||
'iTopUpdate:Error:NoFile' => '没有提供文件',
|
||||
'iTopUpdate:Error:UpdateFailed' => '升级失败',
|
||||
'iTopUpdate:UI:Action' => '升级',
|
||||
'iTopUpdate:UI:Back' => '返回',
|
||||
'iTopUpdate:UI:Backup' => '升级之前执行备份',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Error' => '文件系统检查失败 (%1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:ErrorFileNotExist' => '文件系统检查失败 (%1$s文件不存在)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Failed' => '文件系统检查失败',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Loading' => '正在文件系统',
|
||||
'iTopUpdate:UI:CanCoreUpdate:No' => '应用无法升级: %1$s',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Warning' => '警告: 应用升级可能失败: %1$s',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Yes' => '应用无法升级',
|
||||
'iTopUpdate:UI:Cancel' => '取消',
|
||||
'iTopUpdate:UI:CannotUpdateUseSetup' => '<b>检测到一些文件被修改</b>, 无法进行局部升级.</br>请按照<a target="_blank" href="%2$s">指南</a>一步步操作以手动升级系统. 您必须使用<a href="%1$s">安装</a>已升级应用.',
|
||||
'iTopUpdate:UI:CheckInProgress' => '完整性检查中, 请稍后',
|
||||
'iTopUpdate:UI:CheckUpdate' => '校验升级文件',
|
||||
'iTopUpdate:UI:ConfirmInstallFile' => '即将安装%1$s',
|
||||
'iTopUpdate:UI:Continue' => '继续',
|
||||
'iTopUpdate:UI:CurrentVersion' => '当前版本',
|
||||
'iTopUpdate:UI:DBDiskSpace' => '数据库的磁盘空间',
|
||||
'iTopUpdate:UI:DiskFreeSpace' => '磁盘剩余空间',
|
||||
'iTopUpdate:UI:DoBackup:Label' => '备份文件和数据库',
|
||||
'iTopUpdate:UI:DoBackup:Warning' => '由于磁盘空间不足, 不建议备份',
|
||||
'iTopUpdate:UI:DoFilesArchive' => '打包应用文件',
|
||||
'iTopUpdate:UI:DoUpdate' => '升级',
|
||||
'iTopUpdate:UI:FileUploadMaxSize' => '文件上传大小上限',
|
||||
'iTopUpdate:UI:History' => '版本历史',
|
||||
'iTopUpdate:UI:ItopDiskSpace' => ITOP_APPLICATION_SHORT.'的磁盘空间',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => '此应用当前维护中, 不允许任何用户访问. 必须运行安装或恢复归档来使其处于正常模式.',
|
||||
'iTopUpdate:UI:NewVersion' => '新安装的版本',
|
||||
'iTopUpdate:UI:PageTitle' => '应用升级',
|
||||
'iTopUpdate:UI:PostMaxSize' => 'PHP ini值post_max_size: %1$s',
|
||||
'iTopUpdate:UI:Progress' => '升级进度',
|
||||
'iTopUpdate:UI:RestoreArchive' => '您可以从归档文件 \'%1$s\' 还原应用程序',
|
||||
'iTopUpdate:UI:RestoreBackup' => '您可以从 \'%1$s\' 还原数据库',
|
||||
'iTopUpdate:UI:RunSetup' => '运行向导',
|
||||
'itop-core-update:UI:SelectUpdateFile' => '应用升级',
|
||||
'itop-core-update:UI:ConfirmUpdate' => ' 升级',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => '应用升级',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => '此应用当前维护中, 不允许任何用户访问. 必须运行安装或恢复归档来使其处于正常模式.',
|
||||
'itop-core-update:UI:UpdateDone' => '应用升级',
|
||||
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => '应用升级',
|
||||
'itop-core-update/Operation:ConfirmUpdate/Title' => '请确认升级应用',
|
||||
'itop-core-update/Operation:UpdateCoreFiles/Title' => '应用正在升级',
|
||||
'itop-core-update/Operation:UpdateDone/Title' => '应用升级完毕',
|
||||
|
||||
'iTopUpdate:UI:SelectUpdateFile' => '请选择要上传的升级文件',
|
||||
'iTopUpdate:UI:ServerFile' => '服务器上的软件包路径已存在',
|
||||
'iTopUpdate:UI:Setup' => ITOP_APPLICATION_SHORT.'安装',
|
||||
'iTopUpdate:UI:SetupLaunch' => '启动'.ITOP_APPLICATION_SHORT.'安装',
|
||||
'iTopUpdate:UI:SetupLaunchConfirm' => '将启动'.ITOP_APPLICATION_SHORT.'安装, 确定吗?',
|
||||
'iTopUpdate:UI:FastSetupLaunch' => 'Fast Setup~~',
|
||||
'iTopUpdate:UI:SetupMessage:Backup' => '数据库备份',
|
||||
'iTopUpdate:UI:SetupMessage:CheckCompile' => '检查更新',
|
||||
'iTopUpdate:UI:SetupMessage:Compile' => '升级应用程序和数据库',
|
||||
'iTopUpdate:UI:SetupMessage:CopyFiles' => '复制新文件',
|
||||
'iTopUpdate:UI:SetupMessage:EnterMaintenance' => '正在进入维护模式',
|
||||
'iTopUpdate:UI:SetupMessage:ExitMaintenance' => '正在退出维护模式',
|
||||
'iTopUpdate:UI:SetupMessage:FilesArchive' => '打包应用文件',
|
||||
'iTopUpdate:UI:SetupMessage:Ready' => '准备开始',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => '升级数据库',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDone' => '升级完成',
|
||||
'iTopUpdate:UI:Status' => '状态',
|
||||
'iTopUpdate:UI:UpdateDone' => '升级成功',
|
||||
'iTopUpdate:UI:UploadArchive' => '请选择要上传的软件包',
|
||||
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini值upload_max_filesize: %1$s',
|
||||
'iTopUpdate:UI:WarningReadOnlyDuringUpdate' => '升级期间, 应用会变成只读状态.',
|
||||
'iTopUpdate:UI:CheckUpdate' => '校验升级文件',
|
||||
'iTopUpdate:UI:ConfirmInstallFile' => '即将安装 %1$s',
|
||||
'iTopUpdate:UI:DoUpdate' => '升级',
|
||||
'iTopUpdate:UI:CurrentVersion' => '当前版本',
|
||||
'iTopUpdate:UI:NewVersion' => '新安装的版本',
|
||||
'iTopUpdate:UI:Back' => '返回',
|
||||
'iTopUpdate:UI:Cancel' => '取消',
|
||||
'iTopUpdate:UI:Continue' => '继续',
|
||||
'iTopUpdate:UI:RunSetup' => '运行向导',
|
||||
'iTopUpdate:UI:WithDBBackup' => '数据库备份',
|
||||
'iTopUpdate:UI:WithFilesBackup' => '应用文件备份',
|
||||
'iTopUpdate:UI:WithoutBackup' => '无需备份',
|
||||
'itop-core-update/Operation:ConfirmUpdate/Title' => '请确认升级应用',
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => '应用升级',
|
||||
'itop-core-update/Operation:UpdateCoreFiles/Title' => '应用正在升级',
|
||||
'itop-core-update/Operation:UpdateDone/Title' => '应用升级完毕',
|
||||
'itop-core-update:UI:ConfirmUpdate' => ' 升级',
|
||||
'itop-core-update:UI:SelectUpdateFile' => '应用升级',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => '应用升级',
|
||||
'itop-core-update:UI:UpdateDone' => '应用升级',
|
||||
'iTopUpdate:UI:Backup' => '升级之前执行备份',
|
||||
'iTopUpdate:UI:DoFilesArchive' => '打包应用文件',
|
||||
'iTopUpdate:UI:UploadArchive' => '请选择要上传的软件包',
|
||||
'iTopUpdate:UI:ServerFile' => '服务器上的软件包路径已存在',
|
||||
'iTopUpdate:UI:WarningReadOnlyDuringUpdate' => '升级期间, 应用会变成只读状态.',
|
||||
|
||||
'iTopUpdate:UI:Status' => '状态',
|
||||
'iTopUpdate:UI:Action' => '升级',
|
||||
'iTopUpdate:UI:Setup' => ITOP_APPLICATION_SHORT.'安装',
|
||||
'iTopUpdate:UI:History' => '版本历史',
|
||||
'iTopUpdate:UI:Progress' => '升级进度',
|
||||
|
||||
'iTopUpdate:UI:DoBackup:Label' => '备份文件和数据库',
|
||||
'iTopUpdate:UI:DoBackup:Warning' => '由于磁盘空间不足, 不建议备份',
|
||||
|
||||
'iTopUpdate:UI:DiskFreeSpace' => '磁盘剩余空间',
|
||||
'iTopUpdate:UI:ItopDiskSpace' => ITOP_APPLICATION_SHORT.'的磁盘空间',
|
||||
'iTopUpdate:UI:DBDiskSpace' => '数据库的磁盘空间',
|
||||
'iTopUpdate:UI:FileUploadMaxSize' => '文件上传大小上限',
|
||||
|
||||
'iTopUpdate:UI:PostMaxSize' => 'PHP ini值post_max_size: %1$s',
|
||||
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini 值 upload_max_filesize: %1$s',
|
||||
|
||||
'iTopUpdate:UI:CanCoreUpdate:Loading' => '正在检查文件',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Error' => '文件检查失败 (%1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:ErrorFileNotExist' => '文件检查失败 (%1$s 文件不存在)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Failed' => '文件检查失败',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Yes' => '应用可以升级',
|
||||
'iTopUpdate:UI:CanCoreUpdate:No' => '应用无法升级: %1$s',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Warning' => '警告: 应用升级可能失败: %1$s',
|
||||
'iTopUpdate:UI:CannotUpdateUseSetup' => '<b>检测到一些文件被修改</b>, 无法进行局部升级.</br>请按照<a target="_blank" href="%2$s">指南</a>一步步操作以手动升级系统. 您必须使用<a href="%1$s">安装</a>已升级应用.',
|
||||
'iTopUpdate:UI:CheckInProgress' => '完整性检查中, 请稍候',
|
||||
|
||||
|
||||
|
||||
'iTopUpdate:UI:SetupLaunch' => '启动'.ITOP_APPLICATION_SHORT.'安装',
|
||||
'iTopUpdate:UI:SetupLaunchConfirm' => '将启动'.ITOP_APPLICATION_SHORT.'安装, 确定吗?',
|
||||
|
||||
// Setup Messages
|
||||
'iTopUpdate:UI:SetupMessage:Ready' => '准备开始',
|
||||
'iTopUpdate:UI:SetupMessage:EnterMaintenance' => '正在进入维护模式',
|
||||
'iTopUpdate:UI:SetupMessage:Backup' => '数据库备份',
|
||||
'iTopUpdate:UI:SetupMessage:FilesArchive' => '打包应用文件',
|
||||
'iTopUpdate:UI:SetupMessage:CopyFiles' => '复制新文件',
|
||||
'iTopUpdate:UI:SetupMessage:CheckCompile' => '检查更新',
|
||||
'iTopUpdate:UI:SetupMessage:Compile' => '升级应用程序和数据库',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => '升级数据库',
|
||||
'iTopUpdate:UI:SetupMessage:ExitMaintenance' => '正在退出维护模式',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDone' => '升级完成',
|
||||
|
||||
// Errors
|
||||
'iTopUpdate:Error:MissingFunction' => '无法开始升级, 功能缺失',
|
||||
'iTopUpdate:Error:MissingFile' => '缺少文件: %1$s',
|
||||
'iTopUpdate:Error:CorruptedFile' => '文件 %1$s 已损坏',
|
||||
'iTopUpdate:Error:BadFileFormat' => '升级包不是 zip 格式',
|
||||
'iTopUpdate:Error:BadFileContent' => '文件不是程序升级包',
|
||||
'iTopUpdate:Error:BadItopProduct' => '升级包与您的系统不兼容',
|
||||
'iTopUpdate:Error:Copy' => '错误, 无法复制 \'%1$s\' 到 \'%2$s\'',
|
||||
'iTopUpdate:Error:FileNotFound' => '文件找不到',
|
||||
'iTopUpdate:Error:NoFile' => '没有提供文件',
|
||||
'iTopUpdate:Error:InvalidToken' => '无效的 token',
|
||||
'iTopUpdate:Error:UpdateFailed' => '升级失败',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => '上传上限太小. 请调整 PHP 配置.',
|
||||
|
||||
'iTopUpdate:UI:RestoreArchive' => '您可以从归档文件 \'%1$s\' 还原应用程序',
|
||||
'iTopUpdate:UI:RestoreBackup' => '您可以从 \'%1$s\' 还原数据库',
|
||||
'iTopUpdate:UI:UpdateDone' => '升级成功',
|
||||
'Menu:iTopUpdate' => '应用升级',
|
||||
'Menu:iTopUpdate+' => '应用升级',
|
||||
|
||||
// Missing itop entries
|
||||
'Class:ModuleInstallation/Attribute:installed' => '安装时间',
|
||||
'Class:ModuleInstallation/Attribute:name' => '名称',
|
||||
'Class:ModuleInstallation/Attribute:version' => '版本',
|
||||
'Class:ModuleInstallation/Attribute:comment' => '备注',
|
||||
]);
|
||||
|
||||
|
||||
|
||||
@@ -120,6 +120,8 @@ $("#launch-fast-setup").on("click", function(e) {
|
||||
var oMessage = $("#fast-setup-alert");
|
||||
var oContent = $("#fast-setup-content");
|
||||
oMessage.removeClass("ibo-is-hidden");
|
||||
oMessage.removeClass("ibo-is-failure");
|
||||
oMessage.removeClass("ibo-is-success");
|
||||
oMessage.addClass("ibo-is-information");
|
||||
oContent.html("{{ 'iTopUpdate:UI:SetupMessage:Compile'|dict_s }}");
|
||||
|
||||
@@ -134,20 +136,29 @@ $("#launch-fast-setup").on("click", function(e) {
|
||||
route: "core_update_ajax.rebuild_toolkit_environment"
|
||||
},
|
||||
dataType: "json",
|
||||
complete: function(jqXHR, textStatus) {
|
||||
$("#fast-setup-wait").addClass("ibo-is-hidden");
|
||||
$("#launch-fast-setup").prop("disabled", false);
|
||||
fast_setup_wait.addClass("ibo-is-hidden");
|
||||
},
|
||||
success: function (data) {
|
||||
oMessage.removeClass("ibo-is-information");
|
||||
|
||||
if (data.bStatus) {
|
||||
oMessage.removeClass("ibo-is-failure");
|
||||
oMessage.addClass("ibo-is-success");
|
||||
oContent.html("{{ 'iTopUpdate:UI:SetupMessage:UpdateDone'|dict_s }}");
|
||||
} else {
|
||||
oMessage.removeClass("ibo-is-success");
|
||||
oMessage.addClass("ibo-is-failure");
|
||||
oContent.html(data.sError);
|
||||
}
|
||||
|
||||
$("#fast-setup-wait").addClass("ibo-is-hidden");
|
||||
$("#launch-fast-setup").prop("disabled", false);
|
||||
fast_setup_wait.addClass("ibo-is-hidden");
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
oMessage.removeClass("ibo-is-information");
|
||||
oMessage.removeClass("ibo-is-success");
|
||||
oMessage.addClass("ibo-is-failure");
|
||||
oContent.html(textStatus + ' ' + errorThrown);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
// Dictionary entries go here
|
||||
));
|
||||
@@ -20,6 +20,7 @@
|
||||
* 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', '简体中文', array(
|
||||
// Dictionary entries go here
|
||||
));
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
// Dictionary entries go here
|
||||
));
|
||||
@@ -20,6 +20,7 @@
|
||||
* 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', '简体中文', array(
|
||||
// Dictionary entries go here
|
||||
));
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: FAQ
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:FAQ' => 'FAQ',
|
||||
'Class:FAQ+' => 'Frequently asked questions',
|
||||
'Class:FAQ/Attribute:title' => 'Title',
|
||||
'Class:FAQ/Attribute:title+' => '',
|
||||
'Class:FAQ/Attribute:summary' => 'Summary',
|
||||
'Class:FAQ/Attribute:summary+' => '',
|
||||
'Class:FAQ/Attribute:description' => 'Description',
|
||||
'Class:FAQ/Attribute:description+' => '',
|
||||
'Class:FAQ/Attribute:category_id' => 'Category',
|
||||
'Class:FAQ/Attribute:category_id+' => '',
|
||||
'Class:FAQ/Attribute:category_name' => 'Category name',
|
||||
'Class:FAQ/Attribute:category_name+' => '',
|
||||
'Class:FAQ/Attribute:error_code' => 'Error code',
|
||||
'Class:FAQ/Attribute:error_code+' => '',
|
||||
'Class:FAQ/Attribute:key_words' => 'Key words',
|
||||
'Class:FAQ/Attribute:key_words+' => '',
|
||||
'Class:FAQ/Attribute:domains' => 'Domains',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: FAQCategory
|
||||
//
|
||||
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:FAQCategory' => 'FAQ Category',
|
||||
'Class:FAQCategory+' => 'Category for FAQ',
|
||||
'Class:FAQCategory/Attribute:name' => 'Name',
|
||||
'Class:FAQCategory/Attribute:name+' => '',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => 'All the frequently asked questions related to this category',
|
||||
));
|
||||
Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Menu:ProblemManagement' => 'Problem management',
|
||||
'Menu:ProblemManagement+' => 'Problem management',
|
||||
'Menu:Problem:Shortcuts' => 'Shortcuts',
|
||||
'Menu:FAQCategory' => 'FAQ categories',
|
||||
'Menu:FAQCategory+' => 'All FAQ categories',
|
||||
'Menu:FAQ' => 'FAQs',
|
||||
'Menu:FAQ+' => 'All FAQs',
|
||||
'Brick:Portal:FAQ:Menu' => 'FAQ',
|
||||
'Brick:Portal:FAQ:Title' => 'Frequently Asked Questions',
|
||||
'Brick:Portal:FAQ:Title+' => '<p>In a hurry?</p><p>Check out the list of most common questions and (maybe) find the expected answer right away.</p>',
|
||||
));
|
||||
@@ -4,43 +4,93 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: FAQ
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Brick:Portal:FAQ:Menu' => 'FAQ',
|
||||
'Brick:Portal:FAQ:Title' => 'FAQ',
|
||||
'Brick:Portal:FAQ:Title+' => '<p>需要帮助?</p><p>查阅列表中的常见问题, 或许可以立即找到令您满意的答案.</p>',
|
||||
'Class:FAQ' => 'FAQ',
|
||||
'Class:FAQ+' => 'FAQ',
|
||||
'Class:FAQ+' => '常见问题',
|
||||
'Class:FAQ/Attribute:title' => '标题',
|
||||
'Class:FAQ/Attribute:title+' => '',
|
||||
'Class:FAQ/Attribute:summary' => '概要',
|
||||
'Class:FAQ/Attribute:summary+' => '',
|
||||
'Class:FAQ/Attribute:description' => '描述',
|
||||
'Class:FAQ/Attribute:description+' => '',
|
||||
'Class:FAQ/Attribute:category_id' => '类别',
|
||||
'Class:FAQ/Attribute:category_id+' => '',
|
||||
'Class:FAQ/Attribute:category_name' => '类别名称',
|
||||
'Class:FAQ/Attribute:category_name+' => '',
|
||||
'Class:FAQ/Attribute:description' => '描述',
|
||||
'Class:FAQ/Attribute:description+' => '',
|
||||
'Class:FAQ/Attribute:domains' => '范围',
|
||||
'Class:FAQ/Attribute:error_code' => '错误编码',
|
||||
'Class:FAQ/Attribute:error_code+' => '',
|
||||
'Class:FAQ/Attribute:key_words' => '关键字',
|
||||
'Class:FAQ/Attribute:key_words+' => '',
|
||||
'Class:FAQ/Attribute:summary' => '概要',
|
||||
'Class:FAQ/Attribute:summary+' => '',
|
||||
'Class:FAQ/Attribute:title' => '标题',
|
||||
'Class:FAQ/Attribute:title+' => '',
|
||||
'Class:FAQCategory' => 'FAQ类别',
|
||||
'Class:FAQCategory+' => 'FAQ类别',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'FAQ',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => '此类别FAQ相关的所有常见问题',
|
||||
'Class:FAQ/Attribute:domains' => '范围',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: FAQCategory
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:FAQCategory' => 'FAQ 类别',
|
||||
'Class:FAQCategory+' => 'FAQ 类别',
|
||||
'Class:FAQCategory/Attribute:name' => '名称',
|
||||
'Class:FAQCategory/Attribute:name+' => '',
|
||||
'Menu:FAQ' => 'FAQ',
|
||||
'Menu:FAQ+' => '所有FAQ',
|
||||
'Menu:FAQCategory' => 'FAQ类别',
|
||||
'Menu:FAQCategory+' => '所有FAQ类别',
|
||||
'Menu:Problem:Shortcuts' => '快捷方式',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'FAQ',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => '此类别 FAQ 相关的所有常见问题',
|
||||
]);
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Menu:ProblemManagement' => '问题管理',
|
||||
'Menu:ProblemManagement+' => '问题管理',
|
||||
'Menu:Problem:Shortcuts' => '快捷方式',
|
||||
'Menu:FAQCategory' => 'FAQ 类别',
|
||||
'Menu:FAQCategory+' => '所有 FAQ 类别',
|
||||
'Menu:FAQ' => 'FAQ',
|
||||
'Menu:FAQ+' => '所有 FAQ',
|
||||
'Brick:Portal:FAQ:Menu' => 'FAQ',
|
||||
'Brick:Portal:FAQ:Title' => '常见问题',
|
||||
'Brick:Portal:FAQ:Title+' => '<p>需要帮助?</p><p>查阅列表中的常见问题, 或许可以立即找到令您满意的答案.</p>',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
// Errors
|
||||
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s',
|
||||
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted',
|
||||
'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s',
|
||||
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s',
|
||||
));
|
||||
|
||||
|
||||
@@ -4,14 +4,29 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
'FilesInformation:Error:CantWriteToFile' => '文件%1$s无法写入',
|
||||
'FilesInformation:Error:CorruptedFile' => '文件%1$s已损坏',
|
||||
'FilesInformation:Error:ListCorruptedFile' => '已损坏的文件: %1$s',
|
||||
// Errors
|
||||
'FilesInformation:Error:MissingFile' => '文件丢失: %1$s',
|
||||
'FilesInformation:Error:CorruptedFile' => '文件 %1$s 已损坏',
|
||||
'FilesInformation:Error:ListCorruptedFile' => '已损坏的文件: %1$s',
|
||||
'FilesInformation:Error:CantWriteToFile' => '文件 %1$s 无法写入',
|
||||
]);
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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('EN GB', 'British English', 'British English', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:iTopHub' => 'iTop Hub',
|
||||
'Menu:iTopHub:Register' => 'Connect to iTop Hub',
|
||||
'Menu:iTopHub:Register+' => 'Go to iTop Hub to update your '.ITOP_APPLICATION_SHORT.' instance',
|
||||
'Menu:iTopHub:Register:Description' => '<p>Get access to your community platform iTop Hub!<br>Find all the content and information you need, manage your instances through personalized tools & install more extensions.<br><br>By connecting to the Hub from this page, you will push information about this '.ITOP_APPLICATION_SHORT.' instance into the Hub.</p>',
|
||||
'Menu:iTopHub:MyExtensions' => 'Deployed extensions',
|
||||
'Menu:iTopHub:MyExtensions+' => 'See the list of extensions deployed on this instance of '.ITOP_APPLICATION_SHORT,
|
||||
'Menu:iTopHub:BrowseExtensions' => 'Get extensions from iTop Hub',
|
||||
'Menu:iTopHub:BrowseExtensions+' => 'Browse for more extensions on iTop Hub',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>Look into iTop Hub’s store, your one stop place to find wonderful iTop extensions !<br>Find the ones that will help you customize and adapt '.ITOP_APPLICATION_SHORT.' to your processes.<br><br>By connecting to the Hub from this page, you will push information about this '.ITOP_APPLICATION_SHORT.' instance into the Hub.</p>',
|
||||
'iTopHub:GoBtn' => 'Go To iTop Hub',
|
||||
'iTopHub:CloseBtn' => 'Close',
|
||||
'iTopHub:GoBtn:Tooltip' => 'Jump to www.itophub.io',
|
||||
'iTopHub:OpenInNewWindow' => 'Open iTop Hub in a new window',
|
||||
'iTopHub:AutoSubmit' => 'Don\'t ask me again. Next time, go to iTop Hub automatically.',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:Explanation' => 'By clicking this button you will be redirected to iTop Hub.',
|
||||
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s free disk space in %2$s.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => 'Failed to check free disk space.',
|
||||
'iTopHub:BackupOk' => 'Backup Ok.',
|
||||
'iTopHub:BackupFailed' => 'Backup failed!',
|
||||
'iTopHub:Landing:Status' => 'Deployment status',
|
||||
'iTopHub:Landing:Install' => 'Deploying extensions...',
|
||||
'iTopHub:CompiledOK' => 'Compilation successful.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => 'Error detected during deployment!<br>'.ITOP_APPLICATION_SHORT.' configuration has NOT been modified.',
|
||||
'iTopHub:FailAuthent' => 'Authentication failed for this action.',
|
||||
|
||||
'iTopHub:InstalledExtensions' => 'Extensions deployed on this instance',
|
||||
'iTopHub:ExtensionCategory:Manual' => 'Extensions deployed manually',
|
||||
'iTopHub:ExtensionCategory:Manual+' => 'The following extensions have been deployed by copying them manually in the %1$s directory of '.ITOP_APPLICATION_SHORT.':',
|
||||
'iTopHub:ExtensionCategory:Remote' => 'Extensions deployed from iTop Hub',
|
||||
'iTopHub:ExtensionCategory:Remote+' => 'The following extensions have been deployed from iTop Hub:',
|
||||
'iTopHub:NoExtensionInThisCategory' => 'There is no extension in this category',
|
||||
'iTopHub:NoExtensionInThisCategory+' => 'Browse iTop Hub to find the extensions that will help you customize and adapt '.ITOP_APPLICATION_SHORT.' to your processes !',
|
||||
'iTopHub:ExtensionNotInstalled' => 'Not installed',
|
||||
'iTopHub:GetMoreExtensions' => 'Get extensions from iTop Hub...',
|
||||
|
||||
'iTopHub:LandingWelcome' => 'Congratulations! The following extensions were downloaded from iTop Hub and deployed into your '.ITOP_APPLICATION_SHORT.'.',
|
||||
'iTopHub:GoBackToITopBtn' => 'Go Back to '.ITOP_APPLICATION_SHORT,
|
||||
'iTopHub:Uncompressing' => 'Uncompressing extensions...',
|
||||
'iTopHub:InstallationWelcome' => 'Installation of the extensions downloaded from iTop Hub',
|
||||
'iTopHub:DBBackupLabel' => 'Instance backup',
|
||||
'iTopHub:DBBackupSentence' => 'Do a backup of the database and '.ITOP_APPLICATION_SHORT.' configuration before updating',
|
||||
'iTopHub:DeployBtn' => 'Deploy !',
|
||||
'iTopHub:DatabaseBackupProgress' => 'Instance backup...',
|
||||
|
||||
'iTopHub:InstallationEffect:Install' => 'Version: %1$s will be installed.',
|
||||
'iTopHub:InstallationEffect:NoChange' => 'Version: %1$s already installed. Nothing will change.',
|
||||
'iTopHub:InstallationEffect:Upgrade' => 'Will be <b>upgraded</b> from version %1$s to version %2$s.',
|
||||
'iTopHub:InstallationEffect:Downgrade' => 'Will be <b>DOWNGRADED</b> from version %1$s to version %2$s.',
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.' Instance backup...',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => 'Installation of the extensions',
|
||||
'iTopHub:InstallationEffect:MissingDependencies' => 'This extension cannot be installed because of unmet dependencies.',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => 'The extension requires the module(s): %1$s',
|
||||
'iTopHub:InstallationProgress:InstallationSuccessful' => 'Installation successful!',
|
||||
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s version: %2$s.',
|
||||
'iTopHub:InstallationStatus:Installed' => 'Installed',
|
||||
'iTopHub:InstallationStatus:Version_NotInstalled' => 'Version %1$s <b>NOT</b> installed.',
|
||||
));
|
||||
|
||||
|
||||
@@ -4,64 +4,84 @@
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license https://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* 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', '简体中文', [
|
||||
// Dictionary entries go here
|
||||
'Menu:iTopHub' => 'iTop Hub',
|
||||
'Menu:iTopHub:Register' => '进入iTop Hub',
|
||||
'Menu:iTopHub:Register+' => '进入iTop Hub 更新您的组件',
|
||||
'Menu:iTopHub:Register:Description' => '<p>进入iTop Hub社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到iTop Hub上.</p>',
|
||||
'Menu:iTopHub:MyExtensions' => '已安装的扩展',
|
||||
'Menu:iTopHub:MyExtensions+' => '查看本机已安装的扩展',
|
||||
'Menu:iTopHub:BrowseExtensions' => '从iTop Hub获取扩展',
|
||||
'Menu:iTopHub:BrowseExtensions+' => '去iTop Hub浏览更多的扩展',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>进入iTop Hub商店, 一站式查找各种iTop扩展的地方 !</br>寻找符合您要求的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到iTop Hub上.</p>',
|
||||
'Menu:iTopHub:MyExtensions' => '已安装的扩展',
|
||||
'Menu:iTopHub:MyExtensions+' => '查看本机已安装的扩展',
|
||||
'Menu:iTopHub:Register' => '进入iTop Hub',
|
||||
'Menu:iTopHub:Register+' => '进入iTop Hub更新您的组件',
|
||||
'Menu:iTopHub:Register:Description' => '<p>进入iTop Hub社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到iTop Hub上.</p>',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入iTop Hub.',
|
||||
'iTopHub:BackupFailed' => '备份失败!',
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s可用磁盘空间位于%2$s.',
|
||||
'iTopHub:BackupOk' => '备份成功.',
|
||||
'iTopHub:GoBtn' => '进入 iTop Hub',
|
||||
'iTopHub:CloseBtn' => '关闭',
|
||||
'iTopHub:GoBtn:Tooltip' => '跳到 www.itophub.io',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入iTop Hub.',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至iTop Hub.',
|
||||
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s 可用磁盘空间位于 %2$s.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => '检查可用磁盘空间失败.',
|
||||
'iTopHub:BackupOk' => '备份成功.',
|
||||
'iTopHub:BackupFailed' => '备份失败!',
|
||||
'iTopHub:Landing:Status' => '部署状态',
|
||||
'iTopHub:Landing:Install' => '扩展安装进行中...',
|
||||
'iTopHub:CompiledOK' => '编译成功.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => '安装时发生错误!<br/>系统配置将不会改变.',
|
||||
'iTopHub:FailAuthent' => '认证失败.',
|
||||
|
||||
'iTopHub:InstalledExtensions' => '本机已安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual' => '手动安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual+' => '下列已安装的扩展是手动将文件放置到 %1$s 目录的:',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从 iTop Hub 安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自 iTop Hub:',
|
||||
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展',
|
||||
'iTopHub:NoExtensionInThisCategory+' => '浏览 iTop Hub, 去寻找符合您喜欢的扩展吧.',
|
||||
'iTopHub:ExtensionNotInstalled' => '未安装',
|
||||
'iTopHub:GetMoreExtensions' => '从 iTop Hub 获取扩展...',
|
||||
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自 iTop Hub 的扩展已被下载并安装到本机.',
|
||||
'iTopHub:GoBackToITopBtn' => '返回'.ITOP_APPLICATION_SHORT,
|
||||
'iTopHub:Uncompressing' => '扩展解压中...',
|
||||
'iTopHub:InstallationWelcome' => '安装来自 iTop Hub 的扩展',
|
||||
'iTopHub:DBBackupLabel' => '本机备份',
|
||||
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和'.ITOP_APPLICATION_SHORT.'配置文件',
|
||||
'iTopHub:DatabaseBackupProgress' => '本机备份...',
|
||||
'iTopHub:DeployBtn' => '安装!',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至iTop Hub.',
|
||||
'iTopHub:ExtensionCategory:Manual' => '手动安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual+' => '下列已安装的扩展是手动将文件放置到%1$s目录的:',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从iTop Hub安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自iTop Hub:',
|
||||
'iTopHub:ExtensionNotInstalled' => '未安装',
|
||||
'iTopHub:FailAuthent' => '认证失败.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => '检查可用磁盘空间失败.',
|
||||
'iTopHub:GetMoreExtensions' => '从iTop Hub获取扩展...',
|
||||
'iTopHub:GoBackToITopBtn' => '返回'.ITOP_APPLICATION_SHORT,
|
||||
'iTopHub:GoBtn' => '进入iTop Hub',
|
||||
'iTopHub:GoBtn:Tooltip' => '跳到www.itophub.io',
|
||||
'iTopHub:InstallationEffect:Downgrade' => '将从版本%1$s<b>降级</b>到版本%2$s.',
|
||||
'iTopHub:InstallationEffect:Install' => '版本: %1$s将被安装.',
|
||||
'iTopHub:DatabaseBackupProgress' => '实例备份...',
|
||||
|
||||
'iTopHub:InstallationEffect:Install' => '版本: %1$s 将被安装.',
|
||||
'iTopHub:InstallationEffect:NoChange' => '版本: %1$s 已安装. 保持不变.',
|
||||
'iTopHub:InstallationEffect:Upgrade' => '将从版本 %1$s <b>升级</b>到版本 %2$s.',
|
||||
'iTopHub:InstallationEffect:Downgrade' => '将从版本 %1$s <b>降级</b>到版本 %2$s.',
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.'实例备份...',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => '安装扩展',
|
||||
'iTopHub:InstallationEffect:MissingDependencies' => '扩展无法安装, 因为未知的依赖.',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => '此扩展依赖模块: %1$s',
|
||||
'iTopHub:InstallationEffect:NoChange' => '版本: %1$s已安装. 保持不变.',
|
||||
'iTopHub:InstallationEffect:Upgrade' => '将从版本%1$s<b>升级</b>到版本%2$s.',
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.'本机备份...',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => '安装扩展',
|
||||
'iTopHub:InstallationProgress:InstallationSuccessful' => '安装成功!',
|
||||
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s 版本: %2$s.',
|
||||
'iTopHub:InstallationStatus:Installed' => '已安装',
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s版本: %2$s.',
|
||||
'iTopHub:InstallationStatus:Version_NotInstalled' => '版本%1$s<b>未</b>安装.',
|
||||
'iTopHub:InstallationWelcome' => '安装来自iTop Hub的扩展',
|
||||
'iTopHub:InstalledExtensions' => '本机已安装的扩展',
|
||||
'iTopHub:Landing:Install' => '扩展安装进行中...',
|
||||
'iTopHub:Landing:Status' => '安装状态',
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自iTop Hub的扩展已被下载并安装到本机.',
|
||||
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展',
|
||||
'iTopHub:NoExtensionInThisCategory+' => '浏览iTop Hub, 去寻找符合您喜欢的扩展吧.',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开iTop Hub',
|
||||
'iTopHub:Uncompressing' => '扩展解压中...',
|
||||
'iTopHub:InstallationStatus:Version_NotInstalled' => '版本 %1$s <b>未被</b> 安装.',
|
||||
]);
|
||||
|
||||
|
||||
|
||||
@@ -207,9 +207,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Incident/Attribute:user_satisfaction+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Very satisfied',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user