mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 23:44:11 +01:00
Compare commits
58 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b403bace6c | ||
|
|
0b751a9dd6 | ||
|
|
8f434cad08 | ||
|
|
f83292fccc | ||
|
|
90e128f951 | ||
|
|
8efc372a68 | ||
|
|
257fb4d036 | ||
|
|
97261820f6 | ||
|
|
2f83a2168c | ||
|
|
c0275eec21 | ||
|
|
2bd7a7b5f8 | ||
|
|
0aab80917a | ||
|
|
31a2b634cc | ||
|
|
dc7bafa41c | ||
|
|
505aad1e89 | ||
|
|
4508b9d7d5 | ||
|
|
888aa5f958 | ||
|
|
4051524b5c | ||
|
|
c8c4b072b1 | ||
|
|
08543287e8 | ||
|
|
21e5eee31f | ||
|
|
ed3fd851f1 | ||
|
|
dfe81f6272 | ||
|
|
00c59b7f2c | ||
|
|
dbcde14f5e | ||
|
|
a6f4adfed8 | ||
|
|
effaba42d0 | ||
|
|
340cacc691 | ||
|
|
0bce9c78ea | ||
|
|
48c920f848 | ||
|
|
a85bedd31c | ||
|
|
23269eab77 | ||
|
|
05bcfbe4c3 | ||
|
|
27ad2e2169 | ||
|
|
da76fc70bb | ||
|
|
ad36011fc8 | ||
|
|
b82b095f58 | ||
|
|
2f5c810276 | ||
|
|
d90e094d4d | ||
|
|
4eb416d407 | ||
|
|
636a3940cd | ||
|
|
352f8cee10 | ||
|
|
523e19528e | ||
|
|
9f3332b2f2 | ||
|
|
2b71621628 | ||
|
|
5349fc6f4b | ||
|
|
1665b12b86 | ||
|
|
1bbed99636 | ||
|
|
778db225a8 | ||
|
|
ca48e8ff92 | ||
|
|
75d5630164 | ||
|
|
bb6bd61c37 | ||
|
|
b51b5582a0 | ||
|
|
bc5643707e | ||
|
|
27b1b1f8a8 | ||
|
|
a45e543eac | ||
|
|
50235bbb04 | ||
|
|
d31a4047f6 |
@@ -12,13 +12,13 @@ You are welcome to create pull requests on any of those subjects:
|
||||
|
||||
* 🐛 `:bug:` bug fix
|
||||
* 🔒 `:lock:` security
|
||||
* 🌐 `:globe_with_meridians:` translation
|
||||
* 🌐 `:globe_with_meridians:` translation / i18n / l10n
|
||||
|
||||
If you want to implement a **new feature**, please [create a corresponding ticket](https://sourceforge.net/p/itop/tickets/new/) for review.
|
||||
If you ever want to begin implementation, do so in a fork, and add a link to the corresponding commits in the ticket.
|
||||
If you ever want to begin implementation, do so in a fork, and add a link to the corresponding commits in the ticket.
|
||||
|
||||
### License
|
||||
iTop is distributed under the AGPL-3.0 license (see the [license.txt] file),
|
||||
iTop is distributed under the AGPL-3.0 license (see the [license.txt] file),
|
||||
your code must comply with this license.
|
||||
|
||||
If you want to use another license, you may [create an extension][wiki new ext].
|
||||
@@ -33,28 +33,29 @@ TL;DR:
|
||||
> **create a fork from iTop main repository,
|
||||
> create a branch based on either release branch if present, or develop otherwise**
|
||||
|
||||
We are using the [GitFlow](https://nvie.com/posts/a-successful-git-branching-model/) branch model. That means we have in our repo those
|
||||
We are using the [GitFlow](https://nvie.com/posts/a-successful-git-branching-model/) branch model. That means we have in our repo those
|
||||
main branches:
|
||||
|
||||
- develop: ongoing development version
|
||||
- release/*: if present, that means we are working on a beta version
|
||||
- release/\*: if present, that means we are working on a beta version
|
||||
- master: previous stable version
|
||||
|
||||
For example, if no beta version is currently ongoing we could have:
|
||||
|
||||
- develop containing 2.8 version
|
||||
- master containing 2.7 version
|
||||
- develop containing future 2.8.0 version
|
||||
- master containing 2.7.x maintenance version
|
||||
|
||||
In this example, when 2.8 beta is shipped that will become:
|
||||
In this example, when 2.8.0-beta is shipped that will become:
|
||||
|
||||
- develop: 2.9 version
|
||||
- release/2.8: 2.8 beta
|
||||
- master: 2.7 version
|
||||
- develop: future 2.9.0 version
|
||||
- release/2.8: 2.8.0-beta
|
||||
- master: 2.7.x maintenance version
|
||||
|
||||
And when 2.8 final will be out:
|
||||
And when 2.8.0 final will be out:
|
||||
|
||||
- develop: 2.9 version
|
||||
- master: 2.8 version
|
||||
- develop: future 2.9.0 version
|
||||
- master: 2.8.x maintenance version
|
||||
- support/2.7 : 2.7.x maintenance version
|
||||
|
||||
|
||||
## Coding
|
||||
@@ -63,6 +64,10 @@ And when 2.8 final will be out:
|
||||
|
||||
Please follow [our guidelines](https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Acoding_standards).
|
||||
|
||||
### 🌐 Translations
|
||||
|
||||
A [dedicated page](https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Atranslation) is available in the official wiki.
|
||||
|
||||
### Tests
|
||||
|
||||
Please create tests that covers as much as possible the code you're submitting.
|
||||
@@ -75,7 +80,7 @@ Our tests are located in the `test/` directory, containing a PHPUnit config file
|
||||
* Use the present tense ("Add feature" not "Added feature")
|
||||
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
|
||||
* Limit the first line to 72 characters or less
|
||||
* Please start the commit message with an applicable emoji (following the [Gitmoji guide](https://gitmoji.carloscuesta.me/).). For example :
|
||||
* Please start the commit message with an applicable emoji code (following the [Gitmoji guide](https://gitmoji.carloscuesta.me/)). For example :
|
||||
* 🌐 `:globe_with_meridians:` for translations
|
||||
* 🎨 `:art:` when improving the format/structure of the code
|
||||
* ⚡️ `:zap:` when improving performance
|
||||
|
||||
11
README.md
11
README.md
@@ -35,14 +35,14 @@ iTop also offers mass import tools and web services to integrate with your IT
|
||||
- [Changes since the previous version][58]
|
||||
- [New features][59]
|
||||
- [Migration notes][60]
|
||||
- [Download iTop 2.6.0-beta][61]
|
||||
- [Download iTop 2.6.0][61]
|
||||
|
||||
|
||||
### Version 2.5
|
||||
- [Changes since the previous version][54]
|
||||
- [New features][55]
|
||||
- [Migration notes][56]
|
||||
- [Download iTop 2.5.0][57]
|
||||
- [Download iTop 2.5.1][57]
|
||||
|
||||
|
||||
### Version 2.4
|
||||
@@ -88,7 +88,6 @@ We would like to give a special thank you to the people from the community who c
|
||||
#### Aliases
|
||||
- chifu1234
|
||||
- cprobst
|
||||
- jbostoen
|
||||
- Karkoff1212
|
||||
- larhip
|
||||
- Laura
|
||||
@@ -128,14 +127,14 @@ We would like to give a special thank you to the people from the community who c
|
||||
[50]: https://www.itophub.io/wiki/page?id=2_4_0:release:change_log
|
||||
[51]: https://www.itophub.io/wiki/page?id=2_4_0:release:2_4_whats_new
|
||||
[52]: https://www.itophub.io/wiki/page?id=2_4_0:install:230_to_240_migration_notes
|
||||
[53]: https://sourceforge.net/projects/itop/files/itop/2.4.1/iTop-2.4.1-3714.zip/download
|
||||
[53]: https://sourceforge.net/projects/itop/files/itop/2.4.1
|
||||
|
||||
[54]: https://www.itophub.io/wiki/page?id=2_5_0:release:change_log
|
||||
[55]: https://www.itophub.io/wiki/page?id=2_5_0:release:2_5_whats_new
|
||||
[56]: https://www.itophub.io/wiki/page?id=2_5_0:install:240_to_250_migration_notes
|
||||
[57]: https://sourceforge.net/projects/itop/files/itop/2.5.0/iTop-2.5.0-3935.zip/download
|
||||
[57]: https://sourceforge.net/projects/itop/files/itop/2.5.1
|
||||
|
||||
[58]: https://www.itophub.io/wiki/page?id=2_6_0:release:change_log
|
||||
[59]: https://www.itophub.io/wiki/page?id=2_6_0:release:2_6_whats_new
|
||||
[60]: https://www.itophub.io/wiki/page?id=2_6_0:install:250_to_260_migration_notes
|
||||
[61]: https://sourceforge.net/projects/itop/files/itop/2.6.0-beta/iTop-2.6-beta-4146.zip/download
|
||||
[61]: https://sourceforge.net/projects/itop/files/itop/2.6.0
|
||||
|
||||
@@ -3288,7 +3288,7 @@ EOF
|
||||
$aDurationData = $value;
|
||||
if (!is_array($aDurationData))
|
||||
{
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
$iValue = (((24 * $aDurationData['d']) + $aDurationData['h']) * 60 + $aDurationData['m']) * 60 + $aDurationData['s'];
|
||||
@@ -3690,6 +3690,9 @@ EOF
|
||||
return $aErrors;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function DBInsertNoReload()
|
||||
{
|
||||
$res = parent::DBInsertNoReload();
|
||||
@@ -3707,6 +3710,7 @@ EOF
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* Attaches InlineImages to the current object
|
||||
*/
|
||||
protected function OnObjectKeyReady()
|
||||
@@ -3831,6 +3835,12 @@ EOF
|
||||
$this->bAllowWrite = $bAllow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*/
|
||||
public function DoCheckToWrite()
|
||||
{
|
||||
parent::DoCheckToWrite();
|
||||
|
||||
@@ -444,44 +444,40 @@ EOF
|
||||
$sClass = $oQuery->GetClass();
|
||||
foreach($this->oModelReflection->ListAttributes($sClass) as $sAttCode => $sAttType)
|
||||
{
|
||||
if ($sAttType == 'AttributeLinkedSet')
|
||||
if (is_a($sAttType, 'AttributeLinkedSet', true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (is_subclass_of($sAttType, 'AttributeLinkedSet'))
|
||||
if (is_a($sAttType, 'AttributeFriendlyName', true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ($sAttType == 'AttributeFriendlyName')
|
||||
if (is_a($sAttType, 'AttributeOneWayPassword', true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (is_subclass_of($sAttType, 'AttributeFriendlyName'))
|
||||
// For external fields, find the real type of the target
|
||||
while (is_a($sAttType, 'AttributeExternalField', true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ($sAttType == 'AttributeExternalField')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (is_subclass_of($sAttType, 'AttributeExternalField'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ($sAttType == 'AttributeOneWayPassword')
|
||||
{
|
||||
continue;
|
||||
$sExtKeyAttCode = $this->oModelReflection->GetAttributeProperty($sClass, $sAttCode, 'extkey_attcode');
|
||||
$sTargetClass = $this->oModelReflection->GetAttributeProperty($sClass, $sExtKeyAttCode, 'targetclass');
|
||||
$sTargetAttCode = $this->oModelReflection->GetAttributeProperty($sClass, $sAttCode, 'target_attcode');
|
||||
$aTargetAttCodes = $this->oModelReflection->ListAttributes($sTargetClass);
|
||||
$sAttType = $aTargetAttCodes[$sTargetAttCode];
|
||||
}
|
||||
|
||||
$sLabel = $this->oModelReflection->GetLabel($sClass, $sAttCode);
|
||||
$aGroupBy[$sAttCode] = $sLabel;
|
||||
|
||||
if (is_subclass_of($sAttType, 'AttributeDateTime') || $sAttType == 'AttributeDateTime')
|
||||
if (!in_array($sLabel, $aGroupBy))
|
||||
{
|
||||
$aGroupBy[$sAttCode.':hour'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Hour', $sLabel);
|
||||
$aGroupBy[$sAttCode.':month'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Month', $sLabel);
|
||||
$aGroupBy[$sAttCode.':day_of_week'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-DayOfWeek', $sLabel);
|
||||
$aGroupBy[$sAttCode.':day_of_month'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-DayOfMonth', $sLabel);
|
||||
$aGroupBy[$sAttCode] = $sLabel;
|
||||
|
||||
if (is_a($sAttType, 'AttributeDateTime', true))
|
||||
{
|
||||
$aGroupBy[$sAttCode.':hour'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Hour', $sLabel);
|
||||
$aGroupBy[$sAttCode.':month'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-Month', $sLabel);
|
||||
$aGroupBy[$sAttCode.':day_of_week'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-DayOfWeek', $sLabel);
|
||||
$aGroupBy[$sAttCode.':day_of_month'] = Dict::Format('UI:DashletGroupBy:Prop-GroupBy:Select-DayOfMonth', $sLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
asort($aGroupBy);
|
||||
@@ -619,7 +615,7 @@ class DashletUnknown extends Dashlet
|
||||
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
|
||||
$oPage->add('<div class="dashlet-ukn-image"><img src="'.$sIconUrl.'" /></div>');
|
||||
$oPage->add('<div class="dashlet-ukn-image"><img src="'.utils::HtmlEntities($sIconUrl).'" /></div>');
|
||||
$oPage->add('<div class="dashlet-ukn-text">'.$sExplainText.'</div>');
|
||||
|
||||
$oPage->add('</div>');
|
||||
@@ -639,7 +635,7 @@ class DashletUnknown extends Dashlet
|
||||
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
|
||||
$oPage->add('<div class="dashlet-ukn-image"><img src="'.$sIconUrl.'" /></div>');
|
||||
$oPage->add('<div class="dashlet-ukn-image"><img src="'.utils::HtmlEntities($sIconUrl).'" /></div>');
|
||||
$oPage->add('<div class="dashlet-ukn-text">'.$sExplainText.'</div>');
|
||||
|
||||
$oPage->add('</div>');
|
||||
@@ -780,7 +776,7 @@ class DashletProxy extends DashletUnknown
|
||||
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
|
||||
$oPage->add('<div class="dashlet-pxy-image"><img src="'.$sIconUrl.'" /></div>');
|
||||
$oPage->add('<div class="dashlet-pxy-image"><img src="'.utils::HtmlEntities($sIconUrl).'" /></div>');
|
||||
$oPage->add('<div class="dashlet-pxy-text">'.$sExplainText.'</div>');
|
||||
|
||||
$oPage->add('</div>');
|
||||
@@ -1272,6 +1268,10 @@ abstract class DashletGroupBy extends Dashlet
|
||||
$sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occuring in the same DOM)
|
||||
$oBlock = new DisplayBlock($oFilter, $sType);
|
||||
$oBlock->Display($oPage, $sBlockId, array_merge($aExtraParams, $aParams));
|
||||
if($bEditMode)
|
||||
{
|
||||
$oPage->add('<div class="dashlet-blocker"></div>');
|
||||
}
|
||||
$oPage->add('</div>');
|
||||
}
|
||||
}
|
||||
@@ -1913,7 +1913,7 @@ class DashletHeaderStatic extends Dashlet
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
$oPage->add('<div class="main_header">');
|
||||
|
||||
$oPage->add('<img src="'.$sIconPath.'">');
|
||||
$oPage->add('<img src="'.utils::HtmlEntities($sIconPath).'">');
|
||||
$oPage->add('<h1>'.$this->oModelReflection->DictString($sTitle).'</h1>');
|
||||
|
||||
$oPage->add('</div>');
|
||||
@@ -2069,7 +2069,7 @@ class DashletHeaderDynamic extends Dashlet
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
$oPage->add('<div class="main_header">');
|
||||
|
||||
$oPage->add('<img src="'.$sIconPath.'">');
|
||||
$oPage->add('<img src="'.utils::HtmlEntities($sIconPath).'">');
|
||||
|
||||
if (isset($aExtraParams['query_params']))
|
||||
{
|
||||
@@ -2113,7 +2113,7 @@ class DashletHeaderDynamic extends Dashlet
|
||||
$oPage->add('<div class="dashlet-content">');
|
||||
$oPage->add('<div class="main_header">');
|
||||
|
||||
$oPage->add('<img src="'.$sIconPath.'">');
|
||||
$oPage->add('<img src="'.utils::HtmlEntities($sIconPath).'">');
|
||||
|
||||
$sBlockId = 'block_fake_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occuring in the same DOM)
|
||||
|
||||
@@ -2332,7 +2332,7 @@ class DashletBadge extends Dashlet
|
||||
|
||||
$oPage->add('<div id="block_fake_'.$this->sId.'" class="display_block">');
|
||||
$oPage->add('<p>');
|
||||
$oPage->add(' <a class="actions"><img src="'.$sIconUrl.'" style="vertical-align:middle;float;left;margin-right:10px;border:0;">'.$sClassLabel.': 947</a>');
|
||||
$oPage->add(' <a class="actions"><img src="'.utils::HtmlEntities($sIconUrl).'" style="vertical-align:middle;float;left;margin-right:10px;border:0;">'.$sClassLabel.': 947</a>');
|
||||
$oPage->add('</p>');
|
||||
$oPage->add('<p>');
|
||||
$oPage->add(' <a>'.Dict::Format('UI:ClickToCreateNew', $sClassLabel).'</a>');
|
||||
|
||||
@@ -62,11 +62,11 @@ class utils
|
||||
{
|
||||
if (!file_exists($sParamFile))
|
||||
{
|
||||
throw new Exception("Could not find the parameter file: '$sParamFile'");
|
||||
throw new Exception("Could not find the parameter file: '".utils::HtmlEntities($sParamFile)."'");
|
||||
}
|
||||
if (!is_readable($sParamFile))
|
||||
{
|
||||
throw new Exception("Could not load parameter file: '$sParamFile'");
|
||||
throw new Exception("Could not load parameter file: '".utils::HtmlEntities($sParamFile)."'");
|
||||
}
|
||||
$sParams = file_get_contents($sParamFile);
|
||||
|
||||
@@ -1171,7 +1171,7 @@ class utils
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Get target configuration file name (including full path)
|
||||
* @return string target configuration file name (including full path)
|
||||
*/
|
||||
public static function GetConfigFilePath($sEnvironment = null)
|
||||
{
|
||||
@@ -1181,6 +1181,17 @@ class utils
|
||||
}
|
||||
return APPCONF.$sEnvironment.'/'.ITOP_CONFIG_FILE;
|
||||
}
|
||||
/**
|
||||
* @return string target configuration file name (including relative path)
|
||||
*/
|
||||
public static function GetConfigFilePathRelative($sEnvironment = null)
|
||||
{
|
||||
if (is_null($sEnvironment))
|
||||
{
|
||||
$sEnvironment = self::GetCurrentEnvironment();
|
||||
}
|
||||
return "conf/".$sEnvironment.'/'.ITOP_CONFIG_FILE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string the absolute URL to the modules root path
|
||||
|
||||
@@ -332,6 +332,18 @@ class BulkChange
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DBObject $oTargetObj
|
||||
* @param array $aRowData
|
||||
* @param array $aErrors
|
||||
*
|
||||
* @return array
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \MissingQueryArgument
|
||||
* @throws \MySQLException
|
||||
* @throws \MySQLHasGoneAwayException
|
||||
*/
|
||||
protected function PrepareObject(&$oTargetObj, $aRowData, &$aErrors)
|
||||
{
|
||||
$aResults = array();
|
||||
@@ -477,7 +489,9 @@ class BulkChange
|
||||
if (!$oAttDef->IsWritable() && in_array($sAttCode, $this->m_aReconcilKeys)){ continue; }
|
||||
|
||||
$aReasons = array();
|
||||
$iFlags = $oTargetObj->GetAttributeFlags($sAttCode, $aReasons);
|
||||
$iFlags = ($oTargetObj->IsNew())
|
||||
? $oTargetObj->GetInitialStateAttributeFlags($sAttCode, $aReasons)
|
||||
: $oTargetObj->GetAttributeFlags($sAttCode, $aReasons);
|
||||
if ( (($iFlags & OPT_ATT_READONLY) == OPT_ATT_READONLY) && ( $oTargetObj->Get($sAttCode) != $aRowData[$iCol]) )
|
||||
{
|
||||
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-Readonly', $sAttCode, $oTargetObj->Get($sAttCode), $aRowData[$iCol]);
|
||||
|
||||
@@ -188,6 +188,16 @@ abstract class CMDBObject extends DBObject
|
||||
self::$m_oCurrChange->DBInsert();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreCannotSaveObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
*/
|
||||
protected function RecordObjCreation()
|
||||
{
|
||||
// Delete any existing change tracking about the current object (IDs can be reused due to InnoDb bug; see TRAC #886)
|
||||
@@ -206,6 +216,7 @@ abstract class CMDBObject extends DBObject
|
||||
MetaModel::PurgeData($oFilter);
|
||||
|
||||
parent::RecordObjCreation();
|
||||
|
||||
$oMyChangeOp = MetaModel::NewObject("CMDBChangeOpCreate");
|
||||
$oMyChangeOp->Set("objclass", get_class($this));
|
||||
$oMyChangeOp->Set("objkey", $this->GetKey());
|
||||
@@ -232,9 +243,17 @@ abstract class CMDBObject extends DBObject
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sAttCode
|
||||
* @param string $sAttCode
|
||||
* @param $original Original value
|
||||
* @param $value Current value
|
||||
*
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreCannotSaveObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
*/
|
||||
protected function RecordAttChange($sAttCode, $original, $value)
|
||||
{
|
||||
@@ -438,6 +457,14 @@ abstract class CMDBObject extends DBObject
|
||||
/**
|
||||
* @param array $aValues
|
||||
* @param array $aOrigValues
|
||||
*
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreCannotSaveObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
*/
|
||||
protected function RecordAttChanges(array $aValues, array $aOrigValues)
|
||||
{
|
||||
|
||||
@@ -72,6 +72,9 @@ define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption
|
||||
* configuration data (this class cannot not be localized, because it is responsible for loading the dictionaries)
|
||||
*
|
||||
* @package iTopORM
|
||||
*
|
||||
* @see \MetaModel::GetConfig() to get the config, if the metamodel was already loaded
|
||||
* @see utils::GetConfig() to load config from the current env, if metamodel is not loaded
|
||||
*/
|
||||
class Config
|
||||
{
|
||||
|
||||
@@ -151,7 +151,8 @@ class CoreCannotSaveObjectException extends CoreException
|
||||
|
||||
if (count($this->aIssues) == 1)
|
||||
{
|
||||
$sContent .= " <span>{$this->aIssues[0]}</span>";
|
||||
$sIssue = reset($this->aIssues);
|
||||
$sContent .= " <span>{$sIssue}</span>";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -70,11 +70,14 @@ abstract class DBObject implements iDisplay
|
||||
{
|
||||
private static $m_aMemoryObjectsByClass = array();
|
||||
|
||||
private static $m_aBulkInsertItems = array(); // class => array of ('table' => array of (array of <sql_value>))
|
||||
private static $m_aBulkInsertCols = array(); // class => array of ('table' => array of <sql_column>)
|
||||
/** @var array class => array of ('table' => array of (array of <sql_value>)) */
|
||||
private static $m_aBulkInsertItems = array();
|
||||
/** @var array class => array of ('table' => array of <sql_column>) */
|
||||
private static $m_aBulkInsertCols = array();
|
||||
private static $m_bBulkInsert = false;
|
||||
|
||||
protected $m_bIsInDB = false; // true IIF the object is mapped to a DB record
|
||||
/** @var bool true IIF the object is mapped to a DB record */
|
||||
protected $m_bIsInDB = false;
|
||||
protected $m_iKey = null;
|
||||
private $m_aCurrValues = array();
|
||||
protected $m_aOrigValues = array();
|
||||
@@ -148,6 +151,31 @@ abstract class DBObject implements iDisplay
|
||||
$this->m_aLoadedAtt[$sAttCode] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->UpdateMetaAttributes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update meta-attributes depending on the given attribute list
|
||||
*
|
||||
* @param array|null $aAttCodes List of att codes
|
||||
*
|
||||
* @throws \CoreException
|
||||
*/
|
||||
protected function UpdateMetaAttributes($aAttCodes = null)
|
||||
{
|
||||
if (is_null($aAttCodes))
|
||||
{
|
||||
$aAttCodes = MetaModel::GetAttributesList(get_class($this));
|
||||
}
|
||||
foreach ($aAttCodes as $sAttCode)
|
||||
{
|
||||
foreach (MetaModel::ListMetaAttributes(get_class($this), $sAttCode) as $sMetaAttCode => $oMetaAttDef)
|
||||
{
|
||||
/** @var \AttributeMetaEnum $oMetaAttDef */
|
||||
$this->_Set($sMetaAttCode, $oMetaAttDef->MapValue($this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Read-only <=> Written once (archive)
|
||||
@@ -207,7 +235,9 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
/**
|
||||
* @param bool $bAllowAllData DEPRECATED: the reload must never fail!
|
||||
*
|
||||
* @throws CoreException
|
||||
* @internal
|
||||
*/
|
||||
public function Reload($bAllowAllData = false)
|
||||
{
|
||||
@@ -432,11 +462,7 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
$this->_Set($sAttCode, $realvalue);
|
||||
|
||||
foreach (MetaModel::ListMetaAttributes(get_class($this), $sAttCode) as $sMetaAttCode => $oMetaAttDef)
|
||||
{
|
||||
/** @var \AttributeMetaEnum $oMetaAttDef */
|
||||
$this->_Set($sMetaAttCode, $oMetaAttDef->MapValue($this));
|
||||
}
|
||||
$this->UpdateMetaAttributes(array($sAttCode));
|
||||
|
||||
// The object has changed, reset caches
|
||||
$this->m_bCheckStatus = null;
|
||||
@@ -727,12 +753,24 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridable callback, called by \DBObject::DoComputeValues
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function ComputeValues()
|
||||
{
|
||||
}
|
||||
|
||||
// Compute scalar attributes that depend on any other type of attribute
|
||||
/**
|
||||
* Compute scalar attributes that depend on any other type of attribute
|
||||
*
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final public function DoComputeValues()
|
||||
{
|
||||
// TODO - use a flag rather than checking the call stack -> this will certainly accelerate things
|
||||
@@ -1054,7 +1092,9 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
/**
|
||||
* Gets the name of an object in a safe manner for displaying inside a web page
|
||||
*
|
||||
* @return string
|
||||
* @throws \CoreException
|
||||
*/
|
||||
public function GetName()
|
||||
{
|
||||
@@ -1066,13 +1106,20 @@ abstract class DBObject implements iDisplay
|
||||
* since the " < > characters are not escaped and the name may contain some XSS script
|
||||
* instructions.
|
||||
* Use this function only for internal computations or for an output to a non-HTML destination
|
||||
*
|
||||
* @return string
|
||||
* @throws \CoreException
|
||||
*/
|
||||
public function GetRawName()
|
||||
{
|
||||
return $this->Get('friendlyname');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed|string '' if no state attribute, object representing its value otherwise
|
||||
* @throws \CoreException
|
||||
* @internal
|
||||
*/
|
||||
public function GetState()
|
||||
{
|
||||
$sStateAttCode = MetaModel::GetStateAttributeCode(get_class($this));
|
||||
@@ -1137,15 +1184,18 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $sAttCode $sAttCode The code of the attribute
|
||||
* @param array $aReasons To store the reasons why the attribute is read-only (info about the synchro replicas)
|
||||
* @param string $sTargetState The target state in which to evalutate the flags, if empty the current state will be
|
||||
* used
|
||||
*
|
||||
* @return integer the binary combination of flags (OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY...) for the
|
||||
* given attribute in the given state of the object
|
||||
* @return integer the binary combination of flags for the given attribute in the given state of the object<br>
|
||||
* Values can be one of the OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY, ... (see define in metamodel.class.php)
|
||||
* @throws \CoreException
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @see GetInitialStateAttributeFlags for creation
|
||||
*/
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
|
||||
{
|
||||
@@ -1253,11 +1303,18 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the set of flags (OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY...)
|
||||
* for the given attribute for the current state of the object considered as an INITIAL state
|
||||
* @param string $sAttCode The code of the attribute
|
||||
* @return integer Flags: the binary combination of the flags applicable to this attribute
|
||||
*/
|
||||
* @param array $aReasons
|
||||
*
|
||||
* @return integer The binary combination of the flags for the given attribute for the current state of the object
|
||||
* considered as an INITIAL state.<br>
|
||||
* Values can be one of the OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY, ... (see define in metamodel.class.php)
|
||||
* @throws \CoreException
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @see GetAttributeFlags when modifying the object
|
||||
*/
|
||||
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
|
||||
{
|
||||
$iFlags = 0;
|
||||
@@ -1269,17 +1326,18 @@ abstract class DBObject implements iDisplay
|
||||
return $iFlags; // No need to care about the synchro flags since we'll be creating a new object anyway
|
||||
}
|
||||
|
||||
// check if the given (or current) value is suitable for the attribute
|
||||
// return true if successfull
|
||||
// return the error desciption otherwise
|
||||
/**
|
||||
* Check if the given (or current) value is suitable for the attribute
|
||||
*
|
||||
* @param $sAttCode
|
||||
* @param null $value
|
||||
* @param boolean|string $value true if successfull, the error desciption otherwise
|
||||
*
|
||||
* @return bool|string
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function CheckValue($sAttCode, $value = null)
|
||||
{
|
||||
@@ -1410,8 +1468,13 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// check attributes together
|
||||
|
||||
/**
|
||||
* check attributes together
|
||||
*
|
||||
* @return bool
|
||||
* @api
|
||||
*/
|
||||
public function CheckConsistency()
|
||||
{
|
||||
return true;
|
||||
@@ -1537,12 +1600,15 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
* check integrity rules (before inserting or updating the object)
|
||||
* a displayable error is returned
|
||||
* Check integrity rules (before inserting or updating the object)
|
||||
*
|
||||
* Errors should be inserted in {@link $m_aCheckIssues} and {@link $m_aCheckWarnings} arrays
|
||||
*
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function DoCheckToWrite()
|
||||
{
|
||||
@@ -1607,6 +1673,8 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*
|
||||
* @internal do not overwrite ! Use {@link DoCheckToWrite} instead
|
||||
*/
|
||||
final public function CheckToWrite()
|
||||
{
|
||||
@@ -1636,6 +1704,10 @@ abstract class DBObject implements iDisplay
|
||||
// check if it is allowed to delete the existing object from the database
|
||||
// a displayable error is returned
|
||||
/**
|
||||
* check if it is allowed to delete the existing object from the database
|
||||
*
|
||||
* a displayable error is added in {@link $m_aDeleteIssues}
|
||||
*
|
||||
* @param \DeletionPlan $oDeletionPlan
|
||||
*
|
||||
* @throws \CoreException
|
||||
@@ -1757,10 +1829,14 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
}
|
||||
return $aDelta;
|
||||
}
|
||||
}
|
||||
|
||||
// List the attributes that have been changed
|
||||
// Returns an array of attname => currentvalue
|
||||
/**
|
||||
* List the attributes that have been changed
|
||||
*
|
||||
* @return array attname => currentvalue
|
||||
* @internal
|
||||
*/
|
||||
public function ListChanges()
|
||||
{
|
||||
if ($this->m_bIsInDB)
|
||||
@@ -1820,13 +1896,21 @@ abstract class DBObject implements iDisplay
|
||||
return true;
|
||||
}
|
||||
|
||||
// used only by insert
|
||||
/**
|
||||
* Used only by insert, Meant to be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function OnObjectKeyReady()
|
||||
{
|
||||
// Meant to be overloaded
|
||||
}
|
||||
|
||||
// used both by insert/update
|
||||
/**
|
||||
* used both by insert/update
|
||||
*
|
||||
* @throws \CoreException
|
||||
* @internal
|
||||
*/
|
||||
private function DBWriteLinks()
|
||||
{
|
||||
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
|
||||
@@ -1835,12 +1919,18 @@ abstract class DBObject implements iDisplay
|
||||
if (!array_key_exists($sAttCode, $this->m_aTouchedAtt)) continue;
|
||||
if (array_key_exists($sAttCode, $this->m_aModifiedAtt) && ($this->m_aModifiedAtt[$sAttCode] == false)) continue;
|
||||
|
||||
/** @var \ormLinkSet $oLinkSet */
|
||||
$oLinkSet = $this->m_aCurrValues[$sAttCode];
|
||||
$oLinkSet->DBWrite($this);
|
||||
}
|
||||
}
|
||||
|
||||
// used both by insert/update
|
||||
/**
|
||||
* Used both by insert/update
|
||||
*
|
||||
* @throws \CoreException
|
||||
* @internal
|
||||
*/
|
||||
private function WriteExternalAttributes()
|
||||
{
|
||||
foreach (MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
|
||||
@@ -1881,8 +1971,18 @@ abstract class DBObject implements iDisplay
|
||||
self::$m_aBulkInsertItems = array();
|
||||
self::$m_aBulkInsertCols = array();
|
||||
self::$m_bBulkInsert = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Persists new object in the DB
|
||||
*
|
||||
* @param $sTableClass
|
||||
*
|
||||
* @return bool|int false if nothing to persist (no change), new key value otherwise
|
||||
* @throws \CoreException
|
||||
* @throws \MySQLException
|
||||
* @internal
|
||||
*/
|
||||
private function DBInsertSingleTable($sTableClass)
|
||||
{
|
||||
$sTable = MetaModel::DBGetTable($sTableClass);
|
||||
@@ -1965,7 +2065,7 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert of record for the new object into the database
|
||||
* Persists object to new records in the DB
|
||||
*
|
||||
* @return int key of the newly created object
|
||||
* @throws \ArchivedObjectException
|
||||
@@ -1975,6 +2075,8 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function DBInsertNoReload()
|
||||
{
|
||||
@@ -2023,6 +2125,7 @@ abstract class DBObject implements iDisplay
|
||||
if (in_array($sState, $oAttDef->GetStates()))
|
||||
{
|
||||
// Start the stop watch and compute the deadlines
|
||||
/** @var \ormStopWatch $oSW */
|
||||
$oSW = $this->Get($sAttCode);
|
||||
$oSW->Start($this, $oAttDef);
|
||||
$oSW->ComputeDeadlines($this, $oAttDef);
|
||||
@@ -2178,6 +2281,17 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null inserted object key
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreCannotSaveObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
* @internal
|
||||
*/
|
||||
public function DBInsert()
|
||||
{
|
||||
$this->DBInsertNoReload();
|
||||
@@ -2993,32 +3107,56 @@ abstract class DBObject implements iDisplay
|
||||
self::$aPortalToURLMaker[$sPortalId] = $sUrlMakerClass;
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function OnInsert()
|
||||
{
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function AfterInsert()
|
||||
{
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function OnUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function AfterUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function OnDelete()
|
||||
{
|
||||
}
|
||||
|
||||
// To be optionaly overloaded
|
||||
/**
|
||||
* Can be overloaded
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
protected function AfterDelete()
|
||||
{
|
||||
}
|
||||
@@ -3100,8 +3238,10 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
* This object has been created/deleted, record that as a change in link sets pointing to this (if any)
|
||||
*/
|
||||
* This object has been created/deleted, record that as a change in link sets pointing to this (if any)
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
private function RecordLinkSetListChange($bAdd = true)
|
||||
{
|
||||
foreach(MetaModel::GetTrackForwardExternalKeys(get_class($this)) as $sExtKeyAttCode => $oLinkSet)
|
||||
@@ -3126,6 +3266,9 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
protected function RecordObjCreation()
|
||||
{
|
||||
$this->RecordLinkSetListChange(true);
|
||||
@@ -3499,6 +3642,15 @@ abstract class DBObject implements iDisplay
|
||||
return $iFlags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool true if this object is used in a data synchro
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
* @internal
|
||||
* @see \SynchroDataSource
|
||||
*/
|
||||
public function InSyncScope()
|
||||
{
|
||||
//
|
||||
|
||||
@@ -1270,6 +1270,7 @@ class DisplayableGraph extends SimpleGraph
|
||||
|
||||
$oPdf->SetAutoPageBreak(true, $fBreakMargin);
|
||||
$oPdf->SetAlpha(1);
|
||||
$oPdf->SetTextColor(0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -234,19 +234,28 @@ class EMail
|
||||
$oDOMDoc = new DOMDocument();
|
||||
$oDOMDoc->preserveWhitespace = true;
|
||||
@$oDOMDoc->loadHTML('<?xml encoding="UTF-8"?>'.$this->m_aData['body']['body']); // For loading HTML chunks where the character set is not specified
|
||||
|
||||
|
||||
$oXPath = new DOMXPath($oDOMDoc);
|
||||
$sXPath = "//img[@data-img-id]";
|
||||
$sXPath = '//img[@'.InlineImage::DOM_ATTR_ID.']';
|
||||
$oImagesList = $oXPath->query($sXPath);
|
||||
|
||||
|
||||
if ($oImagesList->length != 0)
|
||||
{
|
||||
foreach($oImagesList as $oImg)
|
||||
{
|
||||
$iAttId = $oImg->getAttribute('data-img-id');
|
||||
$iAttId = $oImg->getAttribute(InlineImage::DOM_ATTR_ID);
|
||||
$oAttachment = MetaModel::GetObject('InlineImage', $iAttId, false, true /* Allow All Data */);
|
||||
if ($oAttachment)
|
||||
{
|
||||
$sImageSecret = $oImg->getAttribute('data-img-secret');
|
||||
$sAttachmentSecret = $oAttachment->Get('secret');
|
||||
if ($sImageSecret !== $sAttachmentSecret)
|
||||
{
|
||||
// @see N°1921
|
||||
// If copying from another iTop we could get an IMG pointing to an InlineImage with wrong secret
|
||||
continue;
|
||||
}
|
||||
|
||||
$oDoc = $oAttachment->Get('contents');
|
||||
$oSwiftImage = new Swift_Image($oDoc->GetData(), $oDoc->GetFileName(), $oDoc->GetMimeType());
|
||||
$sCid = $this->m_oMessage->embed($oSwiftImage);
|
||||
|
||||
@@ -348,7 +348,7 @@ class HTMLDOMSanitizer extends HTMLSanitizer
|
||||
$this->CleanNode($oNode);
|
||||
if (($oNode instanceof DOMElement) && (strtolower($oNode->tagName) == 'img'))
|
||||
{
|
||||
$this->ProcessImage($oNode);
|
||||
InlineImage::ProcessImageTag($oNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -359,24 +359,7 @@ class HTMLDOMSanitizer extends HTMLSanitizer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an extra attribute data-img-id for images which are based on an actual InlineImage
|
||||
* so that we can later reconstruct the full "src" URL when needed
|
||||
* @param DOMNode $oElement
|
||||
*/
|
||||
protected function ProcessImage(DOMNode $oElement)
|
||||
{
|
||||
$sSrc = $oElement->getAttribute('src');
|
||||
$sDownloadUrl = str_replace(array('.', '?'), array('\.', '\?'), INLINEIMAGE_DOWNLOAD_URL); // Escape . and ?
|
||||
$sUrlPattern = '|'.$sDownloadUrl.'([0-9]+)&s=([0-9a-f]+)|';
|
||||
if (preg_match($sUrlPattern, $sSrc, $aMatches))
|
||||
{
|
||||
$oElement->setAttribute('data-img-id', $aMatches[1]);
|
||||
$oElement->setAttribute('data-img-secret', $aMatches[2]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function CleanStyle($sStyle)
|
||||
{
|
||||
$aAllowedStyles = array();
|
||||
|
||||
@@ -27,6 +27,11 @@ define('INLINEIMAGE_DOWNLOAD_URL', 'pages/ajax.document.php?operation=download_i
|
||||
|
||||
class InlineImage extends DBObject
|
||||
{
|
||||
/** @var string attribute to be added to IMG tags to contain ID */
|
||||
const DOM_ATTR_ID = 'data-img-id';
|
||||
/** @var string attribute to be added to IMG tags to contain secret */
|
||||
const DOM_ATTR_SECRET = 'data-img-secret';
|
||||
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
@@ -221,7 +226,8 @@ class InlineImage extends DBObject
|
||||
$aNeedles = array();
|
||||
$aReplacements = array();
|
||||
// Find img tags with an attribute data-img-id
|
||||
if (preg_match_all('/<img ([^>]*)data-img-id="([0-9]+)"([^>]*)>/i', $sHtml, $aMatches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
|
||||
if (preg_match_all('/<img ([^>]*)'.self::DOM_ATTR_ID.'="([0-9]+)"([^>]*)>/i',
|
||||
$sHtml, $aMatches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
|
||||
{
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().INLINEIMAGE_DOWNLOAD_URL;
|
||||
foreach($aMatches as $aImgInfo)
|
||||
@@ -243,6 +249,42 @@ class InlineImage extends DBObject
|
||||
return $sHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an extra attribute data-img-id for images which are based on an actual InlineImage
|
||||
* so that we can later reconstruct the full "src" URL when needed
|
||||
*
|
||||
* @param \DOMElement $oElement
|
||||
*/
|
||||
public static function ProcessImageTag(DOMElement $oElement)
|
||||
{
|
||||
$sSrc = $oElement->getAttribute('src');
|
||||
$sDownloadUrl = str_replace(array('.', '?'), array('\.', '\?'), INLINEIMAGE_DOWNLOAD_URL); // Escape . and ?
|
||||
$sUrlPattern = '|'.$sDownloadUrl.'([0-9]+)&s=([0-9a-f]+)|';
|
||||
$bIsInlineImage = preg_match($sUrlPattern, $sSrc, $aMatches);
|
||||
if (!$bIsInlineImage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
$iInlineImageId = $aMatches[1];
|
||||
$sInlineIMageSecret = $aMatches[2];
|
||||
|
||||
$sAppRoot = utils::GetAbsoluteUrlAppRoot();
|
||||
$sAppRootPattern = '/^'.preg_quote($sAppRoot, '/').'/';
|
||||
$bIsSameItop = preg_match($sAppRootPattern, $sSrc);
|
||||
if (!$bIsSameItop)
|
||||
{
|
||||
// @see N°1921
|
||||
// image from another iTop should be treated as external images
|
||||
$oElement->removeAttribute(self::DOM_ATTR_ID);
|
||||
$oElement->removeAttribute(self::DOM_ATTR_SECRET);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$oElement->setAttribute(self::DOM_ATTR_ID, $iInlineImageId);
|
||||
$oElement->setAttribute(self::DOM_ATTR_SECRET, $sInlineIMageSecret);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the javascript fragment - to be added to "on document ready" - to adjust (on the fly) the width on Inline Images
|
||||
*/
|
||||
|
||||
@@ -2134,6 +2134,17 @@ select#org_id {
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
}
|
||||
/* Prevent cursor clicking on the calendar (eg. While editing dashlet) */
|
||||
.dashlet-blocker {
|
||||
position: absolute;
|
||||
z-index: 9;
|
||||
/* To be above calendar links & all, but below .close-box (9) */
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
td.layout_cell {
|
||||
height: 50px;
|
||||
/* min-height does not work */
|
||||
|
||||
@@ -2478,6 +2478,16 @@ select#org_id {
|
||||
padding: 5px;
|
||||
margin:0;
|
||||
}
|
||||
/* Prevent cursor clicking on the calendar (eg. While editing dashlet) */
|
||||
.dashlet-blocker {
|
||||
position: absolute;
|
||||
z-index: 9; /* To be above calendar links & all, but below .close-box (9) */
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
td.layout_cell {
|
||||
height: 50px; /* min-height does not work */
|
||||
vertical-align: top;
|
||||
|
||||
@@ -184,7 +184,15 @@ EOF
|
||||
$sFile = utils::ReadParam('file', '', false, 'raw_data');
|
||||
$oBackup = new DBBackupScheduled();
|
||||
$sBackupDir = APPROOT.'data/backups/';
|
||||
$oBackup->DownloadBackup($sBackupDir.$sFile);
|
||||
$sPathNoDotDotPattern = "/^((?![\/\\\\]\.\.[\/\\\\]).)*$/";
|
||||
if(preg_match($sPathNoDotDotPattern, $sBackupDir.$sFile) == 1)
|
||||
{
|
||||
$oBackup->DownloadBackup($sBackupDir.$sFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidParameterException('Invalid file path');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'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 %1$s count not be found',
|
||||
'bkp-missing-dir' => 'The target directory %1$s could not be found',
|
||||
'bkp-free-disk-space' => '<b>%1$s free</b> in %2$s',
|
||||
'bkp-dir-not-writeable' => '%1$s is not writeable',
|
||||
'bkp-wrong-format-spec' => 'The current specification to format the file names is wrong (%1$s). A default specification will apply: %2$s',
|
||||
|
||||
@@ -1798,88 +1798,88 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Menu:DataAdministration' => 'Data Management',
|
||||
'Menu:DataAdministration+' => 'Data Management',
|
||||
'Menu:Catalogs' => 'Kataloge',
|
||||
'Menu:Catalogs+' => 'Datentypen',
|
||||
'Menu:Audit' => 'Audit',
|
||||
'Menu:Audit+' => 'Audit',
|
||||
'Menu:CSVImport' => 'CSV-Import',
|
||||
'Menu:CSVImport+' => 'Massenerstellung oder -aktualisierung',
|
||||
'Menu:Organization' => 'Organisationen',
|
||||
'Menu:Organization+' => 'Alle Organisationen',
|
||||
'Menu:Application' => 'Anwendungen',
|
||||
'Menu:Application+' => 'Alle Anwendungen',
|
||||
'Menu:DBServer' => 'Datenbank-Server',
|
||||
'Menu:DBServer+' => 'Datenbank-Server',
|
||||
'Menu:ConfigManagement' => 'Configuration Management',
|
||||
'Menu:ConfigManagement+' => 'Configuration Management',
|
||||
'Menu:ConfigManagementOverview' => 'Übersicht',
|
||||
'Menu:ConfigManagementOverview+' => 'Übersicht',
|
||||
'Menu:Contact' => 'Kontakte',
|
||||
'Menu:Contact+' => 'Kontakte',
|
||||
'Menu:Contact:Count' => '%1$d kontakten',
|
||||
'Menu:Person' => 'Personen',
|
||||
'Menu:Person+' => 'Alle Personen',
|
||||
'Menu:Team' => 'Teams',
|
||||
'Menu:Team+' => 'Alle Teams',
|
||||
'Menu:Document' => 'Dokumente',
|
||||
'Menu:Document+' => 'Alle Dokumente',
|
||||
'Menu:Location' => 'Standorte',
|
||||
'Menu:DataAdministration' => 'Data Management',
|
||||
'Menu:DataAdministration+' => 'Data Management',
|
||||
'Menu:Catalogs' => 'Kataloge',
|
||||
'Menu:Catalogs+' => 'Datentypen',
|
||||
'Menu:Audit' => 'Audit',
|
||||
'Menu:Audit+' => 'Audit',
|
||||
'Menu:CSVImport' => 'CSV-Import',
|
||||
'Menu:CSVImport+' => 'Massenerstellung oder -aktualisierung',
|
||||
'Menu:Organization' => 'Organisationen',
|
||||
'Menu:Organization+' => 'Alle Organisationen',
|
||||
'Menu:Application' => 'Anwendungen',
|
||||
'Menu:Application+' => 'Alle Anwendungen',
|
||||
'Menu:DBServer' => 'Datenbank-Server',
|
||||
'Menu:DBServer+' => 'Datenbank-Server',
|
||||
'Menu:ConfigManagement' => 'Configuration Management',
|
||||
'Menu:ConfigManagement+' => 'Configuration Management',
|
||||
'Menu:ConfigManagementOverview' => 'Übersicht',
|
||||
'Menu:ConfigManagementOverview+' => 'Übersicht',
|
||||
'Menu:Contact' => 'Kontakte',
|
||||
'Menu:Contact+' => 'Kontakte',
|
||||
'Menu:Contact:Count' => '%1$d Kontakte',
|
||||
'Menu:Person' => 'Personen',
|
||||
'Menu:Person+' => 'Alle Personen',
|
||||
'Menu:Team' => 'Teams',
|
||||
'Menu:Team+' => 'Alle Teams',
|
||||
'Menu:Document' => 'Dokumente',
|
||||
'Menu:Document+' => 'Alle Dokumente',
|
||||
'Menu:Location' => 'Standorte',
|
||||
|
||||
'Menu:Location+' => 'Alle Standorte',
|
||||
'Menu:ConfigManagementCI' => 'Configuration Items',
|
||||
'Menu:ConfigManagementCI+' => 'Configuration Items',
|
||||
'Menu:BusinessProcess' => 'Business-Prozesse',
|
||||
'Menu:BusinessProcess+' => 'Alle Business-Prozesse',
|
||||
'Menu:ApplicationSolution' => 'Anwendungslösungen',
|
||||
'Menu:ApplicationSolution+' => 'Alle Anwendungslösungen',
|
||||
'Menu:ConfigManagementSoftware' => 'Anwendungs-Management',
|
||||
'Menu:Licence' => 'Lizenzen',
|
||||
'Menu:Licence+' => 'Alle Lizenzen',
|
||||
'Menu:Patch' => 'Patches',
|
||||
'Menu:Patch+' => 'Alle Patches',
|
||||
'Menu:ApplicationInstance' => 'Installierte Software',
|
||||
'Menu:ApplicationInstance+' => 'Anwendungen und Datenbank-Server',
|
||||
'Menu:ConfigManagementHardware' => 'Infrastruktur-Management',
|
||||
'Menu:Subnet' => 'Subnetze',
|
||||
'Menu:Subnet+' => 'Alle Subnetze',
|
||||
'Menu:NetworkDevice' => 'Netzwerkgeräte',
|
||||
'Menu:NetworkDevice+' => 'Alle Netzwerkgeräte',
|
||||
'Menu:Server' => 'Server',
|
||||
'Menu:Server+' => 'Alle Server',
|
||||
'Menu:Printer' => 'Drucker',
|
||||
'Menu:Printer+' => 'Alle Drucker',
|
||||
'Menu:MobilePhone' => 'Mobiltelefone',
|
||||
'Menu:MobilePhone+' => 'Alle Mobiltelefone',
|
||||
'Menu:PC' => 'Rechner (PC)',
|
||||
'Menu:PC+' => 'Alle Rechner (PC)',
|
||||
'Menu:NewContact' => 'Neuer Kontakt',
|
||||
'Menu:NewContact+' => 'Neuer Kontakt',
|
||||
'Menu:SearchContacts' => 'Nach Kontakten suchen',
|
||||
'Menu:SearchContacts+' => 'Nach Kontakten suchen',
|
||||
'Menu:NewCI' => 'Neues CI',
|
||||
'Menu:NewCI+' => 'Neues CI',
|
||||
'Menu:SearchCIs' => 'Nach CIs suchen',
|
||||
'Menu:SearchCIs+' => 'Nach CIs suchen',
|
||||
'Menu:ConfigManagement:Devices' => 'Geräte',
|
||||
'Menu:ConfigManagement:AllDevices' => 'Infrastruktur',
|
||||
'Menu:ConfigManagement:virtualization' => 'Virtualisierung',
|
||||
'Menu:ConfigManagement:EndUsers' => 'Endbenutzer-Geräte',
|
||||
'Menu:ConfigManagement:SWAndApps' => 'Software und Anwendungen',
|
||||
'Menu:ConfigManagement:Misc' => 'Diverses',
|
||||
'Menu:Group' => 'Gruppen von CIs',
|
||||
'Menu:Group+' => 'Gruppen von CIs',
|
||||
'Menu:ConfigManagement:Shortcuts' => 'Shortcuts',
|
||||
'Menu:ConfigManagement:AllContacts' => 'Alle Kontakte: %1$d',
|
||||
'Menu:Typology' => 'Typologie-Konfiguration',
|
||||
'Menu:Typology+' => '',
|
||||
'Menu:OSVersion' => 'OS-Versionen',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => 'Software-Katalog',
|
||||
'Menu:Software+' => '',
|
||||
'UI_WelcomeMenu_AllConfigItems' => 'Zusammenfassung',
|
||||
'Menu:ConfigManagement:Typology' => 'Typologie-Konfiguration',
|
||||
'Menu:Location+' => 'Alle Standorte',
|
||||
'Menu:ConfigManagementCI' => 'Configuration Items',
|
||||
'Menu:ConfigManagementCI+' => 'Configuration Items',
|
||||
'Menu:BusinessProcess' => 'Business-Prozesse',
|
||||
'Menu:BusinessProcess+' => 'Alle Business-Prozesse',
|
||||
'Menu:ApplicationSolution' => 'Anwendungslösungen',
|
||||
'Menu:ApplicationSolution+' => 'Alle Anwendungslösungen',
|
||||
'Menu:ConfigManagementSoftware' => 'Anwendungs-Management',
|
||||
'Menu:Licence' => 'Lizenzen',
|
||||
'Menu:Licence+' => 'Alle Lizenzen',
|
||||
'Menu:Patch' => 'Patches',
|
||||
'Menu:Patch+' => 'Alle Patches',
|
||||
'Menu:ApplicationInstance' => 'Installierte Software',
|
||||
'Menu:ApplicationInstance+' => 'Anwendungen und Datenbank-Server',
|
||||
'Menu:ConfigManagementHardware' => 'Infrastruktur-Management',
|
||||
'Menu:Subnet' => 'Subnetze',
|
||||
'Menu:Subnet+' => 'Alle Subnetze',
|
||||
'Menu:NetworkDevice' => 'Netzwerkgeräte',
|
||||
'Menu:NetworkDevice+' => 'Alle Netzwerkgeräte',
|
||||
'Menu:Server' => 'Server',
|
||||
'Menu:Server+' => 'Alle Server',
|
||||
'Menu:Printer' => 'Drucker',
|
||||
'Menu:Printer+' => 'Alle Drucker',
|
||||
'Menu:MobilePhone' => 'Mobiltelefone',
|
||||
'Menu:MobilePhone+' => 'Alle Mobiltelefone',
|
||||
'Menu:PC' => 'Rechner (PC)',
|
||||
'Menu:PC+' => 'Alle Rechner (PC)',
|
||||
'Menu:NewContact' => 'Neuer Kontakt',
|
||||
'Menu:NewContact+' => 'Neuer Kontakt',
|
||||
'Menu:SearchContacts' => 'Nach Kontakten suchen',
|
||||
'Menu:SearchContacts+' => 'Nach Kontakten suchen',
|
||||
'Menu:NewCI' => 'Neues CI',
|
||||
'Menu:NewCI+' => 'Neues CI',
|
||||
'Menu:SearchCIs' => 'Nach CIs suchen',
|
||||
'Menu:SearchCIs+' => 'Nach CIs suchen',
|
||||
'Menu:ConfigManagement:Devices' => 'Geräte',
|
||||
'Menu:ConfigManagement:AllDevices' => 'Infrastruktur',
|
||||
'Menu:ConfigManagement:virtualization' => 'Virtualisierung',
|
||||
'Menu:ConfigManagement:EndUsers' => 'Endbenutzer-Geräte',
|
||||
'Menu:ConfigManagement:SWAndApps' => 'Software und Anwendungen',
|
||||
'Menu:ConfigManagement:Misc' => 'Diverses',
|
||||
'Menu:Group' => 'Gruppen von CIs',
|
||||
'Menu:Group+' => 'Gruppen von CIs',
|
||||
'Menu:ConfigManagement:Shortcuts' => 'Shortcuts',
|
||||
'Menu:ConfigManagement:AllContacts' => 'Alle Kontakte: %1$d',
|
||||
'Menu:Typology' => 'Typologie-Konfiguration',
|
||||
'Menu:Typology+' => '',
|
||||
'Menu:OSVersion' => 'OS-Versionen',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => 'Software-Katalog',
|
||||
'Menu:Software+' => '',
|
||||
'UI_WelcomeMenu_AllConfigItems' => 'Zusammenfassung',
|
||||
'Menu:ConfigManagement:Typology' => 'Typologie-Konfiguration',
|
||||
|
||||
));
|
||||
|
||||
@@ -1887,18 +1887,18 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
// Add translation for Fieldsets
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Server:baseinfo' => 'Allgemeine Informationen',
|
||||
'Server:Date' => 'Datum',
|
||||
'Server:moreinfo' => 'Weitere Informationen',
|
||||
'Server:otherinfo' => 'Sonstige Informationen',
|
||||
'Server:power' => 'Stromversorgung',
|
||||
'Person:info' => 'Allgemeine Informationen',
|
||||
'Person:personal_info' => 'Persönliche Informationen',
|
||||
'Person:notifiy' => 'Benachrichtigungen',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP-Nutzung',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces mit einer IP in der Range: <em>%1$s</em> bis <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => 'Freie IPs',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Freie IPs: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Hier ist eine Aufstellung von 10 freien IP Adressen',
|
||||
'Class:Document:PreviewTab' => 'Vorschau',
|
||||
));
|
||||
'Server:baseinfo' => 'Allgemeine Informationen',
|
||||
'Server:Date' => 'Datum',
|
||||
'Server:moreinfo' => 'Weitere Informationen',
|
||||
'Server:otherinfo' => 'Sonstige Informationen',
|
||||
'Server:power' => 'Stromversorgung',
|
||||
'Person:info' => 'Allgemeine Informationen',
|
||||
'Person:personal_info' => 'Persönliche Informationen',
|
||||
'Person:notifiy' => 'Benachrichtigungen',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP-Nutzung',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces mit einer IP in der Range: <em>%1$s</em> bis <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => 'Freie IPs',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => 'Freie IPs: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Hier ist eine Aufstellung von 10 freien IP Adressen',
|
||||
'Class:Document:PreviewTab' => 'Vorschau',
|
||||
));
|
||||
@@ -538,9 +538,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Server/Attribute:osversion_id+' => '',
|
||||
'Class:Server/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:Server/Attribute:osversion_name+' => '',
|
||||
'Class:Server/Attribute:oslicence_id' => 'OS licence',
|
||||
'Class:Server/Attribute:oslicence_id' => 'OS license',
|
||||
'Class:Server/Attribute:oslicence_id+' => '',
|
||||
'Class:Server/Attribute:oslicence_name' => 'OS licence name',
|
||||
'Class:Server/Attribute:oslicence_name' => 'OS license name',
|
||||
'Class:Server/Attribute:oslicence_name+' => '',
|
||||
'Class:Server/Attribute:cpu' => 'CPU',
|
||||
'Class:Server/Attribute:cpu+' => '',
|
||||
@@ -748,9 +748,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:SoftwareInstance/Attribute:software_id+' => '',
|
||||
'Class:SoftwareInstance/Attribute:software_name' => 'Software name',
|
||||
'Class:SoftwareInstance/Attribute:software_name+' => '',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_id' => 'Software licence',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_id' => 'Software license',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_id+' => '',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_name' => 'Software licence name',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_name' => 'Software license name',
|
||||
'Class:SoftwareInstance/Attribute:softwarelicence_name+' => '',
|
||||
'Class:SoftwareInstance/Attribute:path' => 'Path',
|
||||
'Class:SoftwareInstance/Attribute:path+' => '',
|
||||
@@ -938,9 +938,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:VirtualMachine/Attribute:osversion_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:VirtualMachine/Attribute:osversion_name+' => '',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id' => 'OS licence',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id' => 'OS license',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:oslicence_name' => 'OS licence name',
|
||||
'Class:VirtualMachine/Attribute:oslicence_name' => 'OS license name',
|
||||
'Class:VirtualMachine/Attribute:oslicence_name+' => '',
|
||||
'Class:VirtualMachine/Attribute:cpu' => 'CPU',
|
||||
'Class:VirtualMachine/Attribute:cpu+' => '',
|
||||
@@ -1109,8 +1109,8 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software',
|
||||
'Class:Software/Attribute:softwarepatch_list' => 'Software Patches',
|
||||
'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software',
|
||||
'Class:Software/Attribute:softwarelicence_list' => 'Software Licences',
|
||||
'Class:Software/Attribute:softwarelicence_list+' => 'All the licences for this software',
|
||||
'Class:Software/Attribute:softwarelicence_list' => 'Software Licenses',
|
||||
'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1170,7 +1170,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Licence/Attribute:name' => 'Name',
|
||||
'Class:Licence/Attribute:name+' => '',
|
||||
'Class:Licence/Attribute:documents_list' => 'Documents',
|
||||
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this licence',
|
||||
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this license',
|
||||
'Class:Licence/Attribute:org_id' => 'Organization',
|
||||
'Class:Licence/Attribute:org_id+' => '',
|
||||
'Class:Licence/Attribute:organization_name' => 'Organization name',
|
||||
@@ -1191,7 +1191,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Licence/Attribute:perpetual/Value:no+' => 'no',
|
||||
'Class:Licence/Attribute:perpetual/Value:yes' => 'yes',
|
||||
'Class:Licence/Attribute:perpetual/Value:yes+' => 'yes',
|
||||
'Class:Licence/Attribute:finalclass' => 'Licence sub-class',
|
||||
'Class:Licence/Attribute:finalclass' => 'License sub-class',
|
||||
'Class:Licence/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -1200,16 +1200,16 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:OSLicence' => 'OS Licence',
|
||||
'Class:OSLicence' => 'OS License',
|
||||
'Class:OSLicence+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS version',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtual machines',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this licence is used',
|
||||
'Class:OSLicence/Attribute:servers_list' => 'servers',
|
||||
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this licence is used',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this license is used',
|
||||
'Class:OSLicence/Attribute:servers_list' => 'Servers',
|
||||
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this license is used',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1217,14 +1217,14 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:SoftwareLicence' => 'Software Licence',
|
||||
'Class:SoftwareLicence' => 'Software License',
|
||||
'Class:SoftwareLicence+' => '',
|
||||
'Class:SoftwareLicence/Attribute:software_id' => 'Software',
|
||||
'Class:SoftwareLicence/Attribute:software_id+' => '',
|
||||
'Class:SoftwareLicence/Attribute:software_name' => 'Software name',
|
||||
'Class:SoftwareLicence/Attribute:software_name+' => '',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Software instances',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this licence is used',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this license is used',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1232,11 +1232,11 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:lnkDocumentToLicence' => 'Link Document / Licence',
|
||||
'Class:lnkDocumentToLicence' => 'Link Document / License',
|
||||
'Class:lnkDocumentToLicence+' => '',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Licence',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_id' => 'License',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_id+' => '',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_name' => 'Licence name',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_name' => 'License name',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_name+' => '',
|
||||
'Class:lnkDocumentToLicence/Attribute:document_id' => 'Document',
|
||||
'Class:lnkDocumentToLicence/Attribute:document_id+' => '',
|
||||
@@ -1802,88 +1802,88 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Menu:DataAdministration' => 'Data administration',
|
||||
'Menu:DataAdministration+' => 'Data administration',
|
||||
'Menu:Catalogs' => 'Catalogs',
|
||||
'Menu:Catalogs+' => 'Data types',
|
||||
'Menu:Audit' => 'Audit',
|
||||
'Menu:Audit+' => 'Audit',
|
||||
'Menu:CSVImport' => 'CSV import',
|
||||
'Menu:CSVImport+' => 'Bulk creation or update',
|
||||
'Menu:Organization' => 'Organizations',
|
||||
'Menu:Organization+' => 'All organizations',
|
||||
'Menu:Application' => 'Applications',
|
||||
'Menu:Application+' => 'All applications',
|
||||
'Menu:DBServer' => 'Database servers',
|
||||
'Menu:DBServer+' => 'Database servers',
|
||||
'Menu:ConfigManagement' => 'Configuration Management',
|
||||
'Menu:ConfigManagement+' => 'Configuration Management',
|
||||
'Menu:ConfigManagementOverview' => 'Overview',
|
||||
'Menu:ConfigManagementOverview+' => 'Overview',
|
||||
'Menu:Contact' => 'Contacts',
|
||||
'Menu:Contact+' => 'Contacts',
|
||||
'Menu:Contact:Count' => '%1$d contacts',
|
||||
'Menu:Person' => 'Persons',
|
||||
'Menu:Person+' => 'All persons',
|
||||
'Menu:Team' => 'Teams',
|
||||
'Menu:Team+' => 'All teams',
|
||||
'Menu:Document' => 'Documents',
|
||||
'Menu:Document+' => 'All documents',
|
||||
'Menu:Location' => 'Locations',
|
||||
'Menu:DataAdministration' => 'Data administration',
|
||||
'Menu:DataAdministration+' => 'Data administration',
|
||||
'Menu:Catalogs' => 'Catalogs',
|
||||
'Menu:Catalogs+' => 'Data types',
|
||||
'Menu:Audit' => 'Audit',
|
||||
'Menu:Audit+' => 'Audit',
|
||||
'Menu:CSVImport' => 'CSV import',
|
||||
'Menu:CSVImport+' => 'Bulk creation or update',
|
||||
'Menu:Organization' => 'Organizations',
|
||||
'Menu:Organization+' => 'All organizations',
|
||||
'Menu:Application' => 'Applications',
|
||||
'Menu:Application+' => 'All applications',
|
||||
'Menu:DBServer' => 'Database servers',
|
||||
'Menu:DBServer+' => 'Database servers',
|
||||
'Menu:ConfigManagement' => 'Configuration Management',
|
||||
'Menu:ConfigManagement+' => 'Configuration Management',
|
||||
'Menu:ConfigManagementOverview' => 'Overview',
|
||||
'Menu:ConfigManagementOverview+' => 'Overview',
|
||||
'Menu:Contact' => 'Contacts',
|
||||
'Menu:Contact+' => 'Contacts',
|
||||
'Menu:Contact:Count' => '%1$d contacts',
|
||||
'Menu:Person' => 'Persons',
|
||||
'Menu:Person+' => 'All persons',
|
||||
'Menu:Team' => 'Teams',
|
||||
'Menu:Team+' => 'All teams',
|
||||
'Menu:Document' => 'Documents',
|
||||
'Menu:Document+' => 'All documents',
|
||||
'Menu:Location' => 'Locations',
|
||||
|
||||
'Menu:Location+' => 'All locations',
|
||||
'Menu:ConfigManagementCI' => 'Configuration items',
|
||||
'Menu:ConfigManagementCI+' => 'Configuration items',
|
||||
'Menu:BusinessProcess' => 'Business processes',
|
||||
'Menu:BusinessProcess+' => 'All business processes',
|
||||
'Menu:ApplicationSolution' => 'Application solutions',
|
||||
'Menu:ApplicationSolution+' => 'All application solutions',
|
||||
'Menu:ConfigManagementSoftware' => 'Application management',
|
||||
'Menu:Licence' => 'Licences',
|
||||
'Menu:Licence+' => 'All licences',
|
||||
'Menu:Patch' => 'Patches',
|
||||
'Menu:Patch+' => 'All patches',
|
||||
'Menu:ApplicationInstance' => 'Installed software',
|
||||
'Menu:ApplicationInstance+' => 'Applications and database servers',
|
||||
'Menu:ConfigManagementHardware' => 'Infrastructure management',
|
||||
'Menu:Subnet' => 'Subnets',
|
||||
'Menu:Subnet+' => 'All subnets',
|
||||
'Menu:NetworkDevice' => 'Network devices',
|
||||
'Menu:NetworkDevice+' => 'All network devices',
|
||||
'Menu:Server' => 'Servers',
|
||||
'Menu:Server+' => 'All servers',
|
||||
'Menu:Printer' => 'Printers',
|
||||
'Menu:Printer+' => 'All printers',
|
||||
'Menu:MobilePhone' => 'Mobile phones',
|
||||
'Menu:MobilePhone+' => 'All mobile phones',
|
||||
'Menu:PC' => 'Personal computers',
|
||||
'Menu:PC+' => 'All Personal computers',
|
||||
'Menu:NewContact' => 'New contact',
|
||||
'Menu:NewContact+' => 'New contact',
|
||||
'Menu:SearchContacts' => 'Search for contacts',
|
||||
'Menu:SearchContacts+' => 'Search for contacts',
|
||||
'Menu:NewCI' => 'New CI',
|
||||
'Menu:NewCI+' => 'New CI',
|
||||
'Menu:SearchCIs' => 'Search for CIs',
|
||||
'Menu:SearchCIs+' => 'Search for CIs',
|
||||
'Menu:ConfigManagement:Devices' => 'Devices',
|
||||
'Menu:ConfigManagement:AllDevices' => 'Infrastructure',
|
||||
'Menu:ConfigManagement:virtualization' => 'Virtualization',
|
||||
'Menu:ConfigManagement:EndUsers' => 'End user devices',
|
||||
'Menu:ConfigManagement:SWAndApps' => 'Software and applications',
|
||||
'Menu:ConfigManagement:Misc' => 'Miscellaneous',
|
||||
'Menu:Group' => 'Groups of CIs',
|
||||
'Menu:Group+' => 'Groups of CIs',
|
||||
'Menu:ConfigManagement:Shortcuts' => 'Shortcuts',
|
||||
'Menu:ConfigManagement:AllContacts' => 'All contacts: %1$d',
|
||||
'Menu:Typology' => 'Typology configuration',
|
||||
'Menu:Typology+' => 'Typology configuration',
|
||||
'Menu:OSVersion' => 'OS versions',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => 'Software catalog',
|
||||
'Menu:Software+' => 'Software catalog',
|
||||
'UI_WelcomeMenu_AllConfigItems' => 'Summary',
|
||||
'Menu:ConfigManagement:Typology' => 'Typology configuration',
|
||||
'Menu:Location+' => 'All locations',
|
||||
'Menu:ConfigManagementCI' => 'Configuration items',
|
||||
'Menu:ConfigManagementCI+' => 'Configuration items',
|
||||
'Menu:BusinessProcess' => 'Business processes',
|
||||
'Menu:BusinessProcess+' => 'All business processes',
|
||||
'Menu:ApplicationSolution' => 'Application solutions',
|
||||
'Menu:ApplicationSolution+' => 'All application solutions',
|
||||
'Menu:ConfigManagementSoftware' => 'Application management',
|
||||
'Menu:Licence' => 'Licenses',
|
||||
'Menu:Licence+' => 'All licenses',
|
||||
'Menu:Patch' => 'Patches',
|
||||
'Menu:Patch+' => 'All patches',
|
||||
'Menu:ApplicationInstance' => 'Installed software',
|
||||
'Menu:ApplicationInstance+' => 'Applications and database servers',
|
||||
'Menu:ConfigManagementHardware' => 'Infrastructure management',
|
||||
'Menu:Subnet' => 'Subnets',
|
||||
'Menu:Subnet+' => 'All subnets',
|
||||
'Menu:NetworkDevice' => 'Network devices',
|
||||
'Menu:NetworkDevice+' => 'All network devices',
|
||||
'Menu:Server' => 'Servers',
|
||||
'Menu:Server+' => 'All servers',
|
||||
'Menu:Printer' => 'Printers',
|
||||
'Menu:Printer+' => 'All printers',
|
||||
'Menu:MobilePhone' => 'Mobile phones',
|
||||
'Menu:MobilePhone+' => 'All mobile phones',
|
||||
'Menu:PC' => 'Personal computers',
|
||||
'Menu:PC+' => 'All Personal computers',
|
||||
'Menu:NewContact' => 'New contact',
|
||||
'Menu:NewContact+' => 'New contact',
|
||||
'Menu:SearchContacts' => 'Search for contacts',
|
||||
'Menu:SearchContacts+' => 'Search for contacts',
|
||||
'Menu:NewCI' => 'New CI',
|
||||
'Menu:NewCI+' => 'New CI',
|
||||
'Menu:SearchCIs' => 'Search for CIs',
|
||||
'Menu:SearchCIs+' => 'Search for CIs',
|
||||
'Menu:ConfigManagement:Devices' => 'Devices',
|
||||
'Menu:ConfigManagement:AllDevices' => 'Infrastructure',
|
||||
'Menu:ConfigManagement:virtualization' => 'Virtualization',
|
||||
'Menu:ConfigManagement:EndUsers' => 'End user devices',
|
||||
'Menu:ConfigManagement:SWAndApps' => 'Software and applications',
|
||||
'Menu:ConfigManagement:Misc' => 'Miscellaneous',
|
||||
'Menu:Group' => 'Groups of CIs',
|
||||
'Menu:Group+' => 'Groups of CIs',
|
||||
'Menu:ConfigManagement:Shortcuts' => 'Shortcuts',
|
||||
'Menu:ConfigManagement:AllContacts' => 'All contacts: %1$d',
|
||||
'Menu:Typology' => 'Typology configuration',
|
||||
'Menu:Typology+' => 'Typology configuration',
|
||||
'Menu:OSVersion' => 'OS versions',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => 'Software catalog',
|
||||
'Menu:Software+' => 'Software catalog',
|
||||
'UI_WelcomeMenu_AllConfigItems' => 'Summary',
|
||||
'Menu:ConfigManagement:Typology' => 'Typology configuration',
|
||||
|
||||
));
|
||||
|
||||
@@ -1891,18 +1891,18 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
// Add translation for Fieldsets
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Server:baseinfo' => 'General information',
|
||||
'Server:Date' => 'Dates',
|
||||
'Server:moreinfo' => 'More information',
|
||||
'Server:otherinfo' => 'Other information',
|
||||
'Server:power' => 'Power supply',
|
||||
'Person:info' => 'General information',
|
||||
'Person:personal_info' => 'Personal information',
|
||||
'Person:notifiy' => 'Notification',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP Usage',
|
||||
'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',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Here is an extract of 10 free IP addresses',
|
||||
'Class:Document:PreviewTab' => 'Preview',
|
||||
'Server:baseinfo' => 'General information',
|
||||
'Server:Date' => 'Dates',
|
||||
'Server:moreinfo' => 'More information',
|
||||
'Server:otherinfo' => 'Other information',
|
||||
'Server:power' => 'Power supply',
|
||||
'Person:info' => 'General information',
|
||||
'Person:personal_info' => 'Personal information',
|
||||
'Person:notifiy' => 'Notification',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP Usage',
|
||||
'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',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => 'Here is an extract of 10 free IP addresses',
|
||||
'Class:Document:PreviewTab' => 'Preview',
|
||||
));
|
||||
|
||||
@@ -104,10 +104,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Organization/Attribute:deliverymodel_name+' => '',
|
||||
'Class:Organization/Attribute:parent_id_friendlyname' => '上级组织',
|
||||
'Class:Organization/Attribute:parent_id_friendlyname+' => '上级组织',
|
||||
'Class:Organization/Attribute:overview' => 'Overview~~',
|
||||
'Organization:Overview:FunctionalCIs' => 'Configuration items of this organization~~',
|
||||
'Organization:Overview:FunctionalCIs:subtitle' => 'by type~~',
|
||||
'Organization:Overview:Users' => 'iTop Users within this organization~~',
|
||||
'Class:Organization/Attribute:overview' => '概览',
|
||||
'Organization:Overview:FunctionalCIs' => '该组织的所有配置项',
|
||||
'Organization:Overview:FunctionalCIs:subtitle' => '按类型',
|
||||
'Organization:Overview:Users' => '该组织里所有的iTop 用户',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -175,8 +175,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Contact/Attribute:function' => '职责',
|
||||
'Class:Contact/Attribute:function+' => '',
|
||||
'Class:Contact/Attribute:cis_list' => '配置项',
|
||||
'Class:Contact/Attribute:cis_list+' => 'All the configuration items linked to this contact',
|
||||
'Class:Contact/Attribute:finalclass' => 'Contact sub-class',
|
||||
'Class:Contact/Attribute:cis_list+' => '该联系人关联的所有配置项',
|
||||
'Class:Contact/Attribute:finalclass' => '联系人子类别',
|
||||
'Class:Contact/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -207,7 +207,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Person/Attribute:team_list+' => '这个人归属的所有团队',
|
||||
'Class:Person/Attribute:tickets_list' => '工单',
|
||||
'Class:Person/Attribute:tickets_list+' => '这个人发起的所有工单',
|
||||
'Class:Person/Attribute:manager_id_friendlyname' => 'Manager friendly name',
|
||||
'Class:Person/Attribute:manager_id_friendlyname' => '经理姓名',
|
||||
'Class:Person/Attribute:manager_id_friendlyname+' => '',
|
||||
'Class:Person/Attribute:picture' => '头像',
|
||||
'Class:Person/Attribute:picture+' => '',
|
||||
@@ -245,7 +245,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Document/Attribute:org_name+' => '',
|
||||
'Class:Document/Attribute:documenttype_id' => '文档类型',
|
||||
'Class:Document/Attribute:documenttype_id+' => '',
|
||||
'Class:Document/Attribute:documenttype_name' => 'Document type name',
|
||||
'Class:Document/Attribute:documenttype_name' => '文档类型名称',
|
||||
'Class:Document/Attribute:documenttype_name+' => '',
|
||||
'Class:Document/Attribute:version' => '版本',
|
||||
'Class:Document/Attribute:version+' => '',
|
||||
@@ -259,13 +259,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Document/Attribute:status/Value:obsolete+' => '',
|
||||
'Class:Document/Attribute:status/Value:published' => '已发布',
|
||||
'Class:Document/Attribute:status/Value:published+' => '',
|
||||
'Class:Document/Attribute:cis_list' => 'CIs~~',
|
||||
'Class:Document/Attribute:cis_list+' => 'All the configuration items linked to this document~~',
|
||||
'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~~',
|
||||
'Class:Document/Attribute:finalclass' => 'Document sub-class',
|
||||
'Class:Document/Attribute:cis_list' => '配置项',
|
||||
'Class:Document/Attribute:cis_list+' => '该文档关联的所有配置项',
|
||||
'Class:Document/Attribute:contracts_list' => '合同',
|
||||
'Class:Document/Attribute:contracts_list+' => '该文档关联的所有合同',
|
||||
'Class:Document/Attribute:services_list' => '服务',
|
||||
'Class:Document/Attribute:services_list+' => '该文档关联的所有服务',
|
||||
'Class:Document/Attribute:finalclass' => '文档子类别',
|
||||
'Class:Document/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -530,17 +530,17 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Server' => '服务器',
|
||||
'Class:Server+' => '',
|
||||
'Class:Server/Attribute:osfamily_id' => 'OS家族',
|
||||
'Class:Server/Attribute:osfamily_id' => '操作系统家族',
|
||||
'Class:Server/Attribute:osfamily_id+' => '',
|
||||
'Class:Server/Attribute:osfamily_name' => 'OS家族名称',
|
||||
'Class:Server/Attribute:osfamily_name' => '操作系统家族名称',
|
||||
'Class:Server/Attribute:osfamily_name+' => '',
|
||||
'Class:Server/Attribute:osversion_id' => 'OS版本',
|
||||
'Class:Server/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:Server/Attribute:osversion_id+' => '',
|
||||
'Class:Server/Attribute:osversion_name' => 'OS版本名称',
|
||||
'Class:Server/Attribute:osversion_name' => '操作系统版本名称',
|
||||
'Class:Server/Attribute:osversion_name+' => '',
|
||||
'Class:Server/Attribute:oslicence_id' => 'OS许可证',
|
||||
'Class:Server/Attribute:oslicence_id' => '操作系统许可证',
|
||||
'Class:Server/Attribute:oslicence_id+' => '',
|
||||
'Class:Server/Attribute:oslicence_name' => 'OS许可证名称',
|
||||
'Class:Server/Attribute:oslicence_name' => '操作系统许可证名称',
|
||||
'Class:Server/Attribute:oslicence_name+' => '',
|
||||
'Class:Server/Attribute:cpu' => 'CPU',
|
||||
'Class:Server/Attribute:cpu+' => '',
|
||||
@@ -601,13 +601,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:PC' => 'PC',
|
||||
'Class:PC+' => '',
|
||||
'Class:PC/Attribute:osfamily_id' => 'OS家族',
|
||||
'Class:PC/Attribute:osfamily_id' => '操作系统家族',
|
||||
'Class:PC/Attribute:osfamily_id+' => '',
|
||||
'Class:PC/Attribute:osfamily_name' => 'OS 家族名称',
|
||||
'Class:PC/Attribute:osfamily_name' => '操作系统家族名称',
|
||||
'Class:PC/Attribute:osfamily_name+' => '',
|
||||
'Class:PC/Attribute:osversion_id' => 'OS版本',
|
||||
'Class:PC/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:PC/Attribute:osversion_id+' => '',
|
||||
'Class:PC/Attribute:osversion_name' => 'OS 版本名称',
|
||||
'Class:PC/Attribute:osversion_name' => '操作系统版本名称',
|
||||
'Class:PC/Attribute:osversion_name+' => '',
|
||||
'Class:PC/Attribute:cpu' => 'CPU',
|
||||
'Class:PC/Attribute:cpu+' => '',
|
||||
@@ -701,9 +701,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ApplicationSolution' => '应用方案',
|
||||
'Class:ApplicationSolution+' => '',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list' => '配置项',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '该应用方案包含的所有配置项',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list' => '业务流程',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '所有依赖该应用方案的业务流程',
|
||||
'Class:ApplicationSolution/Attribute:status' => '状态',
|
||||
'Class:ApplicationSolution/Attribute:status+' => '',
|
||||
'Class:ApplicationSolution/Attribute:status/Value:active' => '启用',
|
||||
@@ -724,7 +724,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:BusinessProcess' => '业务流程',
|
||||
'Class:BusinessProcess+' => '',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list' => '应用方案',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '所有影响该业务流程的应用方案',
|
||||
'Class:BusinessProcess/Attribute:status' => '状态',
|
||||
'Class:BusinessProcess/Attribute:status+' => '',
|
||||
'Class:BusinessProcess/Attribute:status/Value:active' => '启用',
|
||||
@@ -912,11 +912,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Farm' => '集群',
|
||||
'Class:Farm+' => '',
|
||||
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisor',
|
||||
'Class:Farm/Attribute:hypervisor_list+' => '集群由哪些 Hypervisor 组成',
|
||||
'Class:Farm/Attribute:hypervisor_list+' => '集群由哪些Hypervisor 组成',
|
||||
'Class:Farm/Attribute:redundancy' => '高可用性',
|
||||
'Class:Farm/Attribute:redundancy/disabled' => '所有 Hypervisor 正常,集群才正常',
|
||||
'Class:Farm/Attribute:redundancy/count' => '至少 %1$s 个 Hypervisor 是正常的,集群才是正常的',
|
||||
'Class:Farm/Attribute:redundancy/percent' => '至少 %1$s %% 的 Hypervisor 是正常的,集群才正常',
|
||||
'Class:Farm/Attribute:redundancy/disabled' => '所有Hypervisor 正常,集群才正常',
|
||||
'Class:Farm/Attribute:redundancy/count' => '至少 %1$s 个Hypervisor 是正常的,集群才是正常的',
|
||||
'Class:Farm/Attribute:redundancy/percent' => '至少 %1$s %% 的Hypervisor 是正常的,集群才正常',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -930,15 +930,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:VirtualMachine/Attribute:virtualhost_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:virtualhost_name' => '名称',
|
||||
'Class:VirtualMachine/Attribute:virtualhost_name+' => '',
|
||||
'Class:VirtualMachine/Attribute:osfamily_id' => 'OS家族',
|
||||
'Class:VirtualMachine/Attribute:osfamily_id' => '操作系统家族',
|
||||
'Class:VirtualMachine/Attribute:osfamily_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:osfamily_name' => '名称',
|
||||
'Class:VirtualMachine/Attribute:osfamily_name+' => '',
|
||||
'Class:VirtualMachine/Attribute:osversion_id' => 'OS版本',
|
||||
'Class:VirtualMachine/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:VirtualMachine/Attribute:osversion_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:osversion_name' => '名称',
|
||||
'Class:VirtualMachine/Attribute:osversion_name+' => '',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id' => 'OS许可证',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id' => '操作系统许可证',
|
||||
'Class:VirtualMachine/Attribute:oslicence_id+' => '',
|
||||
'Class:VirtualMachine/Attribute:oslicence_name' => '名称',
|
||||
'Class:VirtualMachine/Attribute:oslicence_name+' => '',
|
||||
@@ -1098,7 +1098,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Software/Attribute:type/Value:DBServer' => '数据库服务器',
|
||||
'Class:Software/Attribute:type/Value:DBServer+' => 'DB Server',
|
||||
'Class:Software/Attribute:type/Value:Middleware' => '中间件',
|
||||
'Class:Software/Attribute:type/Value:Middleware+' => 'Middleware',
|
||||
'Class:Software/Attribute:type/Value:Middleware+' => '中间件',
|
||||
'Class:Software/Attribute:type/Value:OtherSoftware' => '其它软件',
|
||||
'Class:Software/Attribute:type/Value:OtherSoftware+' => '其它软件',
|
||||
'Class:Software/Attribute:type/Value:PCSoftware' => 'PC 软件',
|
||||
@@ -1126,7 +1126,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Patch/Attribute:documents_list+' => '该补丁关联的所有文档',
|
||||
'Class:Patch/Attribute:description' => '描述',
|
||||
'Class:Patch/Attribute:description+' => '',
|
||||
'Class:Patch/Attribute:finalclass' => 'Patch sub-class',
|
||||
'Class:Patch/Attribute:finalclass' => '补丁子类别',
|
||||
'Class:Patch/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -1135,11 +1135,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSPatch' => 'OS 补丁',
|
||||
'Class:OSPatch' => '操作系统补丁',
|
||||
'Class:OSPatch+' => '',
|
||||
'Class:OSPatch/Attribute:functionalcis_list' => '设备',
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => '已安装该补丁的所有系统',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS 版本',
|
||||
'Class:OSPatch/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => '名称',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
@@ -1188,10 +1188,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Licence/Attribute:perpetual' => '永久有效',
|
||||
'Class:Licence/Attribute:perpetual+' => '',
|
||||
'Class:Licence/Attribute:perpetual/Value:no' => '否',
|
||||
'Class:Licence/Attribute:perpetual/Value:no+' => 'no',
|
||||
'Class:Licence/Attribute:perpetual/Value:no+' => '否',
|
||||
'Class:Licence/Attribute:perpetual/Value:yes' => '是',
|
||||
'Class:Licence/Attribute:perpetual/Value:yes+' => 'yes',
|
||||
'Class:Licence/Attribute:finalclass' => 'Licence sub-class',
|
||||
'Class:Licence/Attribute:perpetual/Value:yes+' => '是',
|
||||
'Class:Licence/Attribute:finalclass' => '许可证子类别',
|
||||
'Class:Licence/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -1200,9 +1200,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSLicence' => 'OS 许可证',
|
||||
'Class:OSLicence' => '操作系统许可证',
|
||||
'Class:OSLicence+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS 版本',
|
||||
'Class:OSLicence/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => '名称',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
@@ -1217,7 +1217,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SoftwareLicence' => 'Software Licence',
|
||||
'Class:SoftwareLicence' => '软件许可证',
|
||||
'Class:SoftwareLicence+' => '',
|
||||
'Class:SoftwareLicence/Attribute:software_id' => '软件',
|
||||
'Class:SoftwareLicence/Attribute:software_id+' => '',
|
||||
@@ -1253,7 +1253,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Typology+' => '',
|
||||
'Class:Typology/Attribute:name' => '名称',
|
||||
'Class:Typology/Attribute:name+' => '',
|
||||
'Class:Typology/Attribute:finalclass' => 'Typology sub-class',
|
||||
'Class:Typology/Attribute:finalclass' => '拓扑子类别',
|
||||
'Class:Typology/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -1262,9 +1262,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSVersion' => 'OS 版本',
|
||||
'Class:OSVersion' => '操作系统版本',
|
||||
'Class:OSVersion+' => '',
|
||||
'Class:OSVersion/Attribute:osfamily_id' => 'OS家族',
|
||||
'Class:OSVersion/Attribute:osfamily_id' => '操作系统家族',
|
||||
'Class:OSVersion/Attribute:osfamily_id+' => '',
|
||||
'Class:OSVersion/Attribute:osfamily_name' => '名称',
|
||||
'Class:OSVersion/Attribute:osfamily_name+' => '',
|
||||
@@ -1275,7 +1275,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSFamily' => 'OS家族',
|
||||
'Class:OSFamily' => '操作系统家族',
|
||||
'Class:OSFamily+' => '',
|
||||
));
|
||||
|
||||
@@ -1293,7 +1293,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ContactType' => '合同类型',
|
||||
'Class:ContactType' => '联系人类型',
|
||||
'Class:ContactType+' => '',
|
||||
));
|
||||
|
||||
@@ -1306,8 +1306,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Brand+' => '',
|
||||
'Class:Brand/Attribute:physicaldevices_list' => '物理设备',
|
||||
'Class:Brand/Attribute:physicaldevices_list+' => '该品牌的所有物理设备',
|
||||
'Class:Brand/UniquenessRule:name+' => 'The name must be unique~~',
|
||||
'Class:Brand/UniquenessRule:name' => 'This brand already exists~~',
|
||||
'Class:Brand/UniquenessRule:name+' => '名称必须唯一',
|
||||
'Class:Brand/UniquenessRule:name' => '该品牌已存在',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1361,8 +1361,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Model/Attribute:type/Value:Phone+' => '电话',
|
||||
'Class:Model/Attribute:physicaldevices_list' => '物理设备',
|
||||
'Class:Model/Attribute:physicaldevices_list+' => '该型号的所有物理设备',
|
||||
'Class:Model/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
|
||||
'Class:Model/UniquenessRule:name_brand' => 'this model already exists for this brand~~',
|
||||
'Class:Model/UniquenessRule:name_brand+' => '名称必须唯一',
|
||||
'Class:Model/UniquenessRule:name_brand' => '该型号已存在',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1428,11 +1428,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkFunctionalCIToOSPatch' => '链接 功能项 / OS 补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch' => '链接 功能项 / 操作系统补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch+' => '',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'OS 补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => '操作系统补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name' => 'OS 补丁名称',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name' => '操作系统补丁名称',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name+' => '',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:functionalci_id' => '功能项',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:functionalci_id+' => '',
|
||||
@@ -1505,10 +1505,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Subnet/Attribute:org_id' => '所属组织',
|
||||
'Class:Subnet/Attribute:org_id+' => '',
|
||||
'Class:Subnet/Attribute:org_name' => '名称',
|
||||
'Class:Subnet/Attribute:org_name+' => 'Common name',
|
||||
'Class:Subnet/Attribute:org_name+' => '名称',
|
||||
'Class:Subnet/Attribute:ip' => 'IP',
|
||||
'Class:Subnet/Attribute:ip+' => '',
|
||||
'Class:Subnet/Attribute:ip_mask' => 'IP 掩码',
|
||||
'Class:Subnet/Attribute:ip_mask' => '掩码',
|
||||
'Class:Subnet/Attribute:ip_mask+' => '',
|
||||
'Class:Subnet/Attribute:vlans_list' => 'VLAN',
|
||||
'Class:Subnet/Attribute:vlans_list+' => '',
|
||||
@@ -1563,7 +1563,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:NetworkInterface+' => '',
|
||||
'Class:NetworkInterface/Attribute:name' => '名称',
|
||||
'Class:NetworkInterface/Attribute:name+' => '',
|
||||
'Class:NetworkInterface/Attribute:finalclass' => 'NetworkInterface sub-class',
|
||||
'Class:NetworkInterface/Attribute:finalclass' => '网卡子类别',
|
||||
'Class:NetworkInterface/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -1681,9 +1681,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => '连接类型',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type+' => '',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink' => '下联',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => 'down link',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => '下联',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink' => '上联',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink+' => 'up link',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink+' => '上联',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1802,88 +1802,88 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:DataAdministration' => '数据管理',
|
||||
'Menu:DataAdministration+' => '数据管理',
|
||||
'Menu:Catalogs' => '类别',
|
||||
'Menu:Catalogs+' => '数据类型',
|
||||
'Menu:Audit' => '审计',
|
||||
'Menu:Audit+' => '审计',
|
||||
'Menu:CSVImport' => 'CSV 导入',
|
||||
'Menu:CSVImport+' => '批量创建或更新',
|
||||
'Menu:Organization' => '组织',
|
||||
'Menu:Organization+' => '所有组织',
|
||||
'Menu:Application' => '应用',
|
||||
'Menu:Application+' => '所有应用',
|
||||
'Menu:DBServer' => '数据库服务器',
|
||||
'Menu:DBServer+' => '数据库服务器',
|
||||
'Menu:ConfigManagement' => '配置管理',
|
||||
'Menu:ConfigManagement+' => '配置管理',
|
||||
'Menu:ConfigManagementOverview' => '概览',
|
||||
'Menu:ConfigManagementOverview+' => '概览',
|
||||
'Menu:Contact' => '联系人',
|
||||
'Menu:Contact+' => '联系人',
|
||||
'Menu:Contact:Count' => '%1$d 个联系人',
|
||||
'Menu:Person' => '个体',
|
||||
'Menu:Person+' => '所有个体',
|
||||
'Menu:Team' => '团队',
|
||||
'Menu:Team+' => '所有团队',
|
||||
'Menu:Document' => '文档',
|
||||
'Menu:Document+' => '所有文档',
|
||||
'Menu:Location' => '地理位置',
|
||||
'Menu:DataAdministration' => '数据管理',
|
||||
'Menu:DataAdministration+' => '数据管理',
|
||||
'Menu:Catalogs' => '类别',
|
||||
'Menu:Catalogs+' => '数据类型',
|
||||
'Menu:Audit' => '审计',
|
||||
'Menu:Audit+' => '审计',
|
||||
'Menu:CSVImport' => 'CSV 导入',
|
||||
'Menu:CSVImport+' => '批量创建或更新',
|
||||
'Menu:Organization' => '组织',
|
||||
'Menu:Organization+' => '所有组织',
|
||||
'Menu:Application' => '应用',
|
||||
'Menu:Application+' => '所有应用',
|
||||
'Menu:DBServer' => '数据库服务器',
|
||||
'Menu:DBServer+' => '数据库服务器',
|
||||
'Menu:ConfigManagement' => '配置管理',
|
||||
'Menu:ConfigManagement+' => '配置管理',
|
||||
'Menu:ConfigManagementOverview' => '概览',
|
||||
'Menu:ConfigManagementOverview+' => '概览',
|
||||
'Menu:Contact' => '联系人',
|
||||
'Menu:Contact+' => '联系人',
|
||||
'Menu:Contact:Count' => '%1$d 个联系人',
|
||||
'Menu:Person' => '个体',
|
||||
'Menu:Person+' => '所有个体',
|
||||
'Menu:Team' => '团队',
|
||||
'Menu:Team+' => '所有团队',
|
||||
'Menu:Document' => '文档',
|
||||
'Menu:Document+' => '所有文档',
|
||||
'Menu:Location' => '地理位置',
|
||||
|
||||
'Menu:Location+' => '所有位置',
|
||||
'Menu:ConfigManagementCI' => '配置项',
|
||||
'Menu:ConfigManagementCI+' => '配置项',
|
||||
'Menu:BusinessProcess' => '业务流程',
|
||||
'Menu:BusinessProcess+' => '所有业务流程',
|
||||
'Menu:ApplicationSolution' => '应用方案',
|
||||
'Menu:ApplicationSolution+' => '所有应用方案',
|
||||
'Menu:ConfigManagementSoftware' => '应用管理',
|
||||
'Menu:Licence' => '许可证',
|
||||
'Menu:Licence+' => '所有许可证',
|
||||
'Menu:Patch' => '补丁',
|
||||
'Menu:Patch+' => '所有补丁',
|
||||
'Menu:ApplicationInstance' => '已安装的软件',
|
||||
'Menu:ApplicationInstance+' => '应用和数据库服务器',
|
||||
'Menu:ConfigManagementHardware' => '基础设施管理',
|
||||
'Menu:Subnet' => '子网',
|
||||
'Menu:Subnet+' => '所有子网',
|
||||
'Menu:NetworkDevice' => '网络设备',
|
||||
'Menu:NetworkDevice+' => '所有网络设备',
|
||||
'Menu:Server' => '服务器',
|
||||
'Menu:Server+' => '所有服务器',
|
||||
'Menu:Printer' => '打印机',
|
||||
'Menu:Printer+' => '所有打印机',
|
||||
'Menu:MobilePhone' => '移动电话',
|
||||
'Menu:MobilePhone+' => '所有移动电话',
|
||||
'Menu:PC' => '个人电脑',
|
||||
'Menu:PC+' => '所有个人电脑',
|
||||
'Menu:NewContact' => '新建联系人',
|
||||
'Menu:NewContact+' => '新建联系人',
|
||||
'Menu:SearchContacts' => '搜索联系人',
|
||||
'Menu:SearchContacts+' => '搜索联系人',
|
||||
'Menu:NewCI' => '新建配置项',
|
||||
'Menu:NewCI+' => 'New CI',
|
||||
'Menu:SearchCIs' => '搜索配置项',
|
||||
'Menu:SearchCIs+' => '搜索配置项',
|
||||
'Menu:ConfigManagement:Devices' => '设备',
|
||||
'Menu:ConfigManagement:AllDevices' => '基础设施',
|
||||
'Menu:ConfigManagement:virtualization' => '虚拟化',
|
||||
'Menu:ConfigManagement:EndUsers' => '终端设备',
|
||||
'Menu:ConfigManagement:SWAndApps' => '软件和应用',
|
||||
'Menu:ConfigManagement:Misc' => '杂项',
|
||||
'Menu:Group' => '配置组',
|
||||
'Menu:Group+' => '配置组',
|
||||
'Menu:ConfigManagement:Shortcuts' => '快捷方式',
|
||||
'Menu:ConfigManagement:AllContacts' => '所有联系人: %1$d',
|
||||
'Menu:Typology' => '配置管理',
|
||||
'Menu:Typology+' => '配置管理',
|
||||
'Menu:OSVersion' => 'OS 版本',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => '软件清单',
|
||||
'Menu:Software+' => '软件清单',
|
||||
'UI_WelcomeMenu_AllConfigItems' => '摘要',
|
||||
'Menu:ConfigManagement:Typology' => '配置管理',
|
||||
'Menu:Location+' => '所有位置',
|
||||
'Menu:ConfigManagementCI' => '配置项',
|
||||
'Menu:ConfigManagementCI+' => '配置项',
|
||||
'Menu:BusinessProcess' => '业务流程',
|
||||
'Menu:BusinessProcess+' => '所有业务流程',
|
||||
'Menu:ApplicationSolution' => '应用方案',
|
||||
'Menu:ApplicationSolution+' => '所有应用方案',
|
||||
'Menu:ConfigManagementSoftware' => '应用管理',
|
||||
'Menu:Licence' => '许可证',
|
||||
'Menu:Licence+' => '所有许可证',
|
||||
'Menu:Patch' => '补丁',
|
||||
'Menu:Patch+' => '所有补丁',
|
||||
'Menu:ApplicationInstance' => '已安装的软件',
|
||||
'Menu:ApplicationInstance+' => '应用和数据库服务器',
|
||||
'Menu:ConfigManagementHardware' => '基础设施管理',
|
||||
'Menu:Subnet' => '子网',
|
||||
'Menu:Subnet+' => '所有子网',
|
||||
'Menu:NetworkDevice' => '网络设备',
|
||||
'Menu:NetworkDevice+' => '所有网络设备',
|
||||
'Menu:Server' => '服务器',
|
||||
'Menu:Server+' => '所有服务器',
|
||||
'Menu:Printer' => '打印机',
|
||||
'Menu:Printer+' => '所有打印机',
|
||||
'Menu:MobilePhone' => '移动电话',
|
||||
'Menu:MobilePhone+' => '所有移动电话',
|
||||
'Menu:PC' => '个人电脑',
|
||||
'Menu:PC+' => '所有个人电脑',
|
||||
'Menu:NewContact' => '新建联系人',
|
||||
'Menu:NewContact+' => '新建联系人',
|
||||
'Menu:SearchContacts' => '搜索联系人',
|
||||
'Menu:SearchContacts+' => '搜索联系人',
|
||||
'Menu:NewCI' => '新建配置项',
|
||||
'Menu:NewCI+' => '新建配置项',
|
||||
'Menu:SearchCIs' => '搜索配置项',
|
||||
'Menu:SearchCIs+' => '搜索配置项',
|
||||
'Menu:ConfigManagement:Devices' => '设备',
|
||||
'Menu:ConfigManagement:AllDevices' => '基础设施',
|
||||
'Menu:ConfigManagement:virtualization' => '虚拟化',
|
||||
'Menu:ConfigManagement:EndUsers' => '终端设备',
|
||||
'Menu:ConfigManagement:SWAndApps' => '软件和应用',
|
||||
'Menu:ConfigManagement:Misc' => '杂项',
|
||||
'Menu:Group' => '配置组',
|
||||
'Menu:Group+' => '配置组',
|
||||
'Menu:ConfigManagement:Shortcuts' => '快捷方式',
|
||||
'Menu:ConfigManagement:AllContacts' => '所有联系人: %1$d',
|
||||
'Menu:Typology' => '配置管理',
|
||||
'Menu:Typology+' => '配置管理',
|
||||
'Menu:OSVersion' => 'OS 版本',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => '软件清单',
|
||||
'Menu:Software+' => '软件清单',
|
||||
'UI_WelcomeMenu_AllConfigItems' => '摘要',
|
||||
'Menu:ConfigManagement:Typology' => '配置管理',
|
||||
|
||||
));
|
||||
|
||||
@@ -1891,18 +1891,18 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Add translation for Fieldsets
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Server:baseinfo' => '基本信息',
|
||||
'Server:Date' => '日期',
|
||||
'Server:moreinfo' => '更多信息',
|
||||
'Server:otherinfo' => '其它信息',
|
||||
'Server:power' => '电力供应',
|
||||
'Person:info' => '基本信息',
|
||||
'Person:personal_info' => '个人信息',
|
||||
'Person:notifiy' => '通知',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP 使用率',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => '网卡IP范围: <em>%1$s</em> 到 <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => '空闲 IP',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => '空闲 IP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => '以下是抽取的10个空闲IP',
|
||||
'Class:Document:PreviewTab' => '预览',
|
||||
'Server:baseinfo' => '基本信息',
|
||||
'Server:Date' => '日期',
|
||||
'Server:moreinfo' => '更多信息',
|
||||
'Server:otherinfo' => '其它信息',
|
||||
'Server:power' => '电力供应',
|
||||
'Person:info' => '基本信息',
|
||||
'Person:personal_info' => '个人信息',
|
||||
'Person:notifiy' => '通知',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP 使用率',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => '网卡IP范围: <em>%1$s</em> 到 <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => '空闲 IP',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => '空闲 IP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => '以下是抽取的10个空闲IP',
|
||||
'Class:Document:PreviewTab' => '预览',
|
||||
));
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
'Menu:ConfigEditor' => '配置文件编辑',
|
||||
'Menu:ConfigEditor' => '编辑配置文件',
|
||||
'config-edit-title' => '配置文件编辑器',
|
||||
'config-edit-intro' => '编辑配置文件时请格外小心.',
|
||||
'config-edit-intro' => '编辑配置文件时请务必格外小心.',
|
||||
'config-apply' => '应用',
|
||||
'config-apply-title' => '应用 (Ctrl+S)',
|
||||
'config-cancel' => '重置',
|
||||
|
||||
@@ -256,7 +256,11 @@ try
|
||||
|
||||
case 'compile':
|
||||
SetupPage::log_info('Deployment starts...');
|
||||
|
||||
$sAuthent = utils::ReadParam('authent', '', false, 'raw_data');
|
||||
if (!file_exists(APPROOT.'data/hub/compile_authent') || $sAuthent !== file_get_contents(APPROOT.'data/hub/compile_authent'))
|
||||
{
|
||||
throw new SecurityException(Dict::S('iTopHub:FailAuthent'));
|
||||
}
|
||||
// First step: prepare the datamodel, if it fails, roll-back
|
||||
$aSelectedExtensionCodes = utils::ReadParam('extension_codes', array());
|
||||
$aSelectedExtensionDirs = utils::ReadParam('extension_dirs', array());
|
||||
@@ -295,7 +299,13 @@ try
|
||||
try
|
||||
{
|
||||
SetupPage::log_info('Move to production starts...');
|
||||
// Load the "production" config file to clone & update it
|
||||
$sAuthent = utils::ReadParam('authent', '', false, 'raw_data');
|
||||
if (!file_exists(APPROOT.'data/hub/compile_authent') || $sAuthent !== file_get_contents(APPROOT.'data/hub/compile_authent'))
|
||||
{
|
||||
throw new SecurityException(Dict::S('iTopHub:FailAuthent'));
|
||||
}
|
||||
unlink(APPROOT.'data/hub/compile_authent');
|
||||
// Load the "production" config file to clone & update it
|
||||
$oConfig = new Config(APPCONF.'production/'.ITOP_CONFIG_FILE);
|
||||
|
||||
$oRuntimeEnv->InitDataModel($oConfig, true /* model only */);
|
||||
@@ -357,6 +367,10 @@ try
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
if(file_exists(APPROOT.'data/hub/compile_authent'))
|
||||
{
|
||||
unlink(APPROOT.'data/hub/compile_authent');
|
||||
}
|
||||
// Note: at this point, the dictionnary is not necessarily loaded
|
||||
SetupPage::log_error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted')."\n".$e->getMessage());
|
||||
SetupPage::log_error('Debug trace: '.$e->getTraceAsString());
|
||||
|
||||
@@ -48,7 +48,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'iTopHub:Landing:Install' => 'Deploying extensions...',
|
||||
'iTopHub:CompiledOK' => 'Compilation successful.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => 'Error detected during deployment!<br/>iTop 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:',
|
||||
|
||||
@@ -32,6 +32,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'iTopHub:Landing:Install' => 'Déploiement des extensions...',
|
||||
'iTopHub:CompiledOK' => 'Compilation réussie.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => 'Une erreur a été détectée durant le déploiement!<br/>La configuration d\'iTop n\'a PAS été modifiée.',
|
||||
'iTopHub:FailAuthent' => 'Échec d\'authentification pour cette action',
|
||||
|
||||
'iTopHub:InstalledExtensions' => 'Extensions déployées sur cette instance',
|
||||
'iTopHub:ExtensionCategory:Manual' => 'Extensions déployées manuellement',
|
||||
|
||||
@@ -18,7 +18,8 @@ $(function()
|
||||
extensions_installation: 'Installation of the extensions...',
|
||||
installation_successful: 'Installation successful!',
|
||||
rollback: 'iTop configuration has NOT been modified.'
|
||||
}
|
||||
},
|
||||
authent : ''
|
||||
},
|
||||
|
||||
// the constructor
|
||||
@@ -106,7 +107,7 @@ $(function()
|
||||
var aExtensionCodes = [];
|
||||
var aExtensionDirs = [];
|
||||
$('.choice :input:checked').each(function() { aExtensionCodes.push($(this).attr('data-extension-code')); aExtensionDirs.push($(this).attr('data-extension-dir')); });
|
||||
$.post(this.options.self_url, {operation: 'compile', extension_codes: aExtensionCodes, extension_dirs: aExtensionDirs}, function(data) { me._on_compile(data) }, 'json');
|
||||
$.post(this.options.self_url, {operation: 'compile', extension_codes: aExtensionCodes, extension_dirs: aExtensionDirs, authent: this.options.authent}, function(data) { me._on_compile(data) }, 'json');
|
||||
},
|
||||
_on_compile: function(data)
|
||||
{
|
||||
@@ -125,7 +126,7 @@ $(function()
|
||||
{
|
||||
$('#hub-installation-progress-text').html('<i class="fa fa-cogs"></i> '+this.options.labels.extensions_installation);
|
||||
var me = this;
|
||||
$.post(this.options.self_url, {operation: 'move_to_production'}, function(data) { me._on_move_to_prod(data) }, 'json');
|
||||
$.post(this.options.self_url, {operation: 'move_to_production', authent: this.options.authent}, function(data) { me._on_move_to_prod(data) }, 'json');
|
||||
},
|
||||
_on_move_to_prod: function(data)
|
||||
{
|
||||
|
||||
@@ -107,7 +107,7 @@ function DoLanding(WebPage $oPage)
|
||||
$sPath = APPROOT.'data/downloaded-extensions/';
|
||||
if (!is_dir($sPath))
|
||||
{
|
||||
if (!mkdir($sPath)) throw new Exception("ERROR: Unable to create the directory '$sPath'. Cannot download any extension. Check the access rights on '".dirname($sPath)."'");
|
||||
if (!mkdir($sPath)) throw new Exception("ERROR: Unable to create the directory '$sPath'. Cannot download any extension. Check the access rights on '".dirname('data/downloaded-extensions/')."'");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -126,7 +126,7 @@ function DoLanding(WebPage $oPage)
|
||||
$oZip = new ZipArchive();
|
||||
if (!$oZip->open($sZipArchiveFile))
|
||||
{
|
||||
throw new Exception('Unable to open "'.$sZipArchiveFile.'" for extraction. Make sure that the directory "'.$sPath.'" is writable for the web server.');
|
||||
throw new Exception('Unable to open "'.$sZipArchiveFile.'" for extraction. Make sure that the directory "'.'data/downloaded-extensions/'.'" is writable for the web server.');
|
||||
}
|
||||
for($idx = 0; $idx < $oZip->numFiles; $idx++)
|
||||
{
|
||||
@@ -146,6 +146,9 @@ function DoLanding(WebPage $oPage)
|
||||
|
||||
function DoInstall(WebPage $oPage)
|
||||
{
|
||||
$sUID = hash('sha256', rand());
|
||||
file_put_contents(APPROOT.'data/hub/compile_authent', $sUID);
|
||||
|
||||
$oPage->add_linked_stylesheet(utils::GetAbsoluteUrlModulesRoot().'itop-hub-connector/css/hub.css');
|
||||
$oPage->add('<table class="module-selection-banner"><tr>');
|
||||
$sBannerUrl = utils::GetAbsoluteUrlModulesRoot().'/itop-hub-connector/images/landing-extension.png';
|
||||
@@ -259,6 +262,7 @@ function DoInstall(WebPage $oPage)
|
||||
'installation_successful' => Dict::S('iTopHub:InstallationProgress:InstallationSuccessful'),
|
||||
'rollback' => Dict::S('iTopHub:ConfigurationSafelyReverted'),
|
||||
),
|
||||
'authent' => $sUID,
|
||||
);
|
||||
|
||||
$sWidgetParams = json_encode($aWidgetParams);
|
||||
@@ -301,6 +305,10 @@ try
|
||||
break;
|
||||
|
||||
case 'install':
|
||||
if (!file_exists(APPROOT.'data/hub'))
|
||||
{
|
||||
mkdir(APPROOT.'data/hub');
|
||||
}
|
||||
DoInstall($oPage);
|
||||
break;
|
||||
|
||||
|
||||
@@ -24,21 +24,21 @@
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// 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: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>',
|
||||
'iTopHub:GoBtn' => '进入 iTop Hub',
|
||||
'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>',
|
||||
'iTopHub:GoBtn' => '进入iTop Hub',
|
||||
'iTopHub:CloseBtn' => '关闭',
|
||||
'iTopHub:GoBtn:Tooltip' => '跳到 www.itophub.io',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开 iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入 iTop Hub .',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入iTop Hub .',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至 iTop Hub.',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至iTop Hub.',
|
||||
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s free disk space in %2$s.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => '检查空闲的磁盘空间失败.',
|
||||
@@ -46,24 +46,25 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'iTopHub:BackupFailed' => '备份失败!',
|
||||
'iTopHub:Landing:Status' => '安装状态',
|
||||
'iTopHub:Landing:Install' => '扩展安装进行中...',
|
||||
'iTopHub:CompiledOK' => 'Compilation successful.',
|
||||
'iTopHub:CompiledOK' => '编译成功.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => '安装时发生错误!<br/>iTop 配置将不会改变.',
|
||||
|
||||
'iTopHub:FailAuthent' => 'Authentication failed for this action.~~',
|
||||
|
||||
'iTopHub:InstalledExtensions' => '本机已安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual' => '手动安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual+' => '下列已安装的扩展是手动将文件放置到 %1$s 目录的:',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从 iTop Hub 安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自 iTop Hub:',
|
||||
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展.<br/><br/>浏览 iTop Hub ,去寻找符合您要求的扩展.',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从iTop Hub 安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自iTop Hub:',
|
||||
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展.<br/><br/>浏览iTop Hub ,去寻找符合您要求的扩展.',
|
||||
'iTopHub:ExtensionNotInstalled' => '未安装',
|
||||
'iTopHub:GetMoreExtensions' => '从 iTop Hub 获取扩展...',
|
||||
'iTopHub:GetMoreExtensions' => '从iTop Hub 获取扩展...',
|
||||
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自 iTop Hub 的扩展已被下载并安装到本机.',
|
||||
'iTopHub:GoBackToITopBtn' => '返回 iTop',
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自iTop Hub 的扩展已被下载并安装到本机.',
|
||||
'iTopHub:GoBackToITopBtn' => '返回iTop',
|
||||
'iTopHub:Uncompressing' => '扩展解压中...',
|
||||
'iTopHub:InstallationWelcome' => '安装来自 iTop Hub 的扩展',
|
||||
'iTopHub:InstallationWelcome' => '安装来自iTop Hub 的扩展',
|
||||
'iTopHub:DBBackupLabel' => '本机备份',
|
||||
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和 iTop 配置文件',
|
||||
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和iTop 配置文件',
|
||||
'iTopHub:DeployBtn' => '安装 !',
|
||||
'iTopHub:DatabaseBackupProgress' => '本机备份...',
|
||||
|
||||
|
||||
@@ -1163,7 +1163,7 @@ class ObjectFormManager extends FormManager
|
||||
}
|
||||
elseif ($oAttDef->GetEditClass() === 'CustomFields')
|
||||
{
|
||||
if (isset($value['template_data']) && $value['template_data'] !== '')
|
||||
if (!empty($value['template_data']) && !empty($value['user_data']))
|
||||
{
|
||||
$this->oObject->Set($sAttCode, $value);
|
||||
}
|
||||
|
||||
@@ -223,12 +223,12 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserRequest/Attribute:user_satisfaction+' => '',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:1' => 'Very satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => 'Very satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => 'Fairly statisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => 'Rather Dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => 'Very Dissatisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => 'Fairly satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => 'Rather dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => 'Very dissatified',
|
||||
'Class:UserRequest/Attribute:user_comment' => 'User comment',
|
||||
'Class:UserRequest/Attribute:user_comment+' => '',
|
||||
'Class:UserRequest/Attribute:parent_request_id_friendlyname' => 'parent_request_id_friendlyname',
|
||||
|
||||
@@ -227,12 +227,12 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserRequest/Attribute:user_satisfaction+' => '',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:1' => 'Very satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => 'Very satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => 'Fairly statisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => 'Rather Dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => 'Very Dissatisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => 'Fairly satisfied',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => 'Rather dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified',
|
||||
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => 'Very dissatified',
|
||||
'Class:UserRequest/Attribute:user_comment' => 'User comment',
|
||||
'Class:UserRequest/Attribute:user_comment+' => '',
|
||||
'Class:UserRequest/Attribute:parent_request_id_friendlyname' => 'parent_request_id_friendlyname',
|
||||
@@ -277,7 +277,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Portal:TitleDetailsFor_Service' => 'Details for Service',
|
||||
'Portal:Button:CreateRequestFromService' => 'Create a Request for this service',
|
||||
'Portal:ListOpenRequests' => 'List open requests',
|
||||
'Portal:UserRequest:MoreInfo' => 'More information',
|
||||
'Portal:UserRequest:MoreInfo' => 'More information',
|
||||
'Portal:Details-Service-Element' => 'Service elements',
|
||||
'Portal:NoClosedTicket' => 'No closed request',
|
||||
'Portal:NoService' => '',
|
||||
|
||||
@@ -9,34 +9,34 @@
|
||||
*
|
||||
*/
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Menu:ServiceManagement' => 'Управление услугами',
|
||||
'Menu:ServiceManagement+' => 'Управление услугами',
|
||||
'Menu:Service:Overview' => 'Обзор',
|
||||
'Menu:Service:Overview+' => 'Управление услугами - Обзор',
|
||||
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Договоры по уровню услуг',
|
||||
'UI-ServiceManagementMenu-ContractsByStatus' => 'Договоры по статусу',
|
||||
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Договоры, оканчивающиеся в течение 30-ти дней',
|
||||
'Menu:ServiceManagement' => 'Управление услугами',
|
||||
'Menu:ServiceManagement+' => 'Управление услугами',
|
||||
'Menu:Service:Overview' => 'Обзор',
|
||||
'Menu:Service:Overview+' => 'Управление услугами - Обзор',
|
||||
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Договоры по уровню услуг',
|
||||
'UI-ServiceManagementMenu-ContractsByStatus' => 'Договоры по статусу',
|
||||
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Договоры, оканчивающиеся в течение 30-ти дней',
|
||||
|
||||
'Menu:ProviderContract' => 'Договоры с поставщиками',
|
||||
'Menu:ProviderContract+' => 'Договоры с поставщиками',
|
||||
'Menu:CustomerContract' => 'Договоры с заказчиками',
|
||||
'Menu:CustomerContract+' => 'Договоры с заказчиками',
|
||||
'Menu:ServiceSubcategory' => 'Подкатегории услуг',
|
||||
'Menu:ServiceSubcategory+' => 'Подкатегории услуг',
|
||||
'Menu:Service' => 'Услуги',
|
||||
'Menu:Service+' => 'Услуги',
|
||||
'Menu:ServiceElement' => 'Элементы услуг',
|
||||
'Menu:ServiceElement+' => 'Элементы услуг',
|
||||
'Menu:SLA' => 'SLA',
|
||||
'Menu:SLA+' => 'Соглашения об уровне услуг',
|
||||
'Menu:SLT' => 'SLT',
|
||||
'Menu:SLT+' => 'Целевые показатели уровня услуг',
|
||||
'Menu:DeliveryModel' => 'Модели предоставления услуг',
|
||||
'Menu:DeliveryModel+' => 'Модели предоставления услуг (Delivery Models)',
|
||||
'Menu:ServiceFamily' => 'Пакеты услуг',
|
||||
'Menu:ServiceFamily+' => 'Пакеты услуг',
|
||||
'Menu:Procedure' => 'Каталог процедур',
|
||||
'Menu:Procedure+' => 'Каталог процедур',
|
||||
'Menu:ProviderContract' => 'Договоры с поставщиками',
|
||||
'Menu:ProviderContract+' => 'Договоры с поставщиками',
|
||||
'Menu:CustomerContract' => 'Договоры с заказчиками',
|
||||
'Menu:CustomerContract+' => 'Договоры с заказчиками',
|
||||
'Menu:ServiceSubcategory' => 'Подкатегории услуг',
|
||||
'Menu:ServiceSubcategory+' => 'Подкатегории услуг',
|
||||
'Menu:Service' => 'Услуги',
|
||||
'Menu:Service+' => 'Услуги',
|
||||
'Menu:ServiceElement' => 'Элементы услуг',
|
||||
'Menu:ServiceElement+' => 'Элементы услуг',
|
||||
'Menu:SLA' => 'SLA',
|
||||
'Menu:SLA+' => 'Соглашения об уровне услуг',
|
||||
'Menu:SLT' => 'SLT',
|
||||
'Menu:SLT+' => 'Целевые показатели уровня услуг',
|
||||
'Menu:DeliveryModel' => 'Модели предоставления услуг',
|
||||
'Menu:DeliveryModel+' => 'Модели предоставления услуг (Delivery Models)',
|
||||
'Menu:ServiceFamily' => 'Пакеты услуг',
|
||||
'Menu:ServiceFamily+' => 'Пакеты услуг',
|
||||
'Menu:Procedure' => 'Каталог процедур',
|
||||
'Menu:Procedure+' => 'Каталог процедур',
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -170,50 +170,50 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'WorkOrder:Moreinfo' => 'Дополнительная информация',
|
||||
'Tickets:ResolvedFrom' => 'Автоматическое решение из %1$s',
|
||||
|
||||
'Class:cmdbAbstractObject/Method:Set' => 'Set~~',
|
||||
'Class:cmdbAbstractObject/Method:Set+' => 'Set a field with a static value~~',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:1+' => 'The field to set, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:2' => 'Value~~',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:2+' => 'The value to set~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate' => 'SetCurrentDate~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate+' => 'Set a field with the current date and time~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1+' => 'The field to set, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser' => 'SetCurrentUser~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser+' => 'Set a field with the currently logged in user~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1+' => 'The field to set, in the current object. If the field is a string then the friendly name will be used, otherwise the identifier will be used. That friendly name is the name of the person if any is attached to the user, otherwise it is the login.~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson' => 'SetCurrentPerson~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson+' => 'Set a field with the currently logged in person (the "person" attached to the logged in "user").~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1+' => 'The field to set, in the current object. If the field is a string then the friendly name will be used, otherwise the identifier will be used.~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime' => 'SetElapsedTime~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime+' => 'Set a field with the time (seconds) elapsed since a date given by another field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:1+' => 'The field to set, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:2' => 'Reference Field~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:2+' => 'The field from which to get the reference date~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3' => 'Working Hours~~',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3+' => 'Leave empty to rely on the standard working hours scheme, or set to "DefaultWorkingTimeComputer" to force a 24x7 scheme~~',
|
||||
'Class:cmdbAbstractObject/Method:Reset' => 'Reset~~',
|
||||
'Class:cmdbAbstractObject/Method:Reset+' => 'Reset a field to its default value~~',
|
||||
'Class:cmdbAbstractObject/Method:Reset/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:Reset/Param:1+' => 'The field to reset, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy' => 'Copy~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy+' => 'Copy the value of a field to another field~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:1' => 'Target Field~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:1+' => 'The field to set, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:2' => 'Source Field~~',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:2+' => 'The field to get the value from, in the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:Set' => 'Установить',
|
||||
'Class:cmdbAbstractObject/Method:Set+' => 'Установить поле со статичным значением',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:1+' => 'Установить поле, в текущем объекте ',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:2' => 'Значение',
|
||||
'Class:cmdbAbstractObject/Method:Set/Param:2+' => 'Установить значение',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate' => 'Установить текущую дату',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate+' => 'Установить поле с текущей датой и временем',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1+' => 'Установить поле, в текущем объекте',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser' => 'Установитьтекущегопользователя',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser+' => 'Установить поле с текущим вошедшим пользователем',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1+' => 'Установить поле, в текущем объекте. Если поле является строкой, тогда будет использоваться псевдоним, в противном случае будет использоваться идентификатор. Псевдонимом является имя человека, если оно связано с пользователем, в иных случаях - это логин.',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson' => 'Установитьтекущуюперсону',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson+' => ' Установить поле с текущим вошедшим человеком ("человек" связан с "пользователь").',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1+' => 'Установить поле, в текущем объекте. Если поле является строкой, тогда будет использоваться псевдоним, в противном случае будет использоваться идентификатор. Псевдонимом является имя человека, если оно связано с пользователем, в иных случаях - это логин.',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime' => 'Установитьистекшеевремя',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime+' => 'Установить поле с временем (секунды), истекающее с даты, задданой ',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:1+' => 'Установить поле, в текущем объекте ',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:2' => 'Ссылочное поле',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:2+' => 'Поле, откуда берется референсная дата',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3' => 'Рабочие часы',
|
||||
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3+' => 'Оставьте пустым, чтобы полагаться на стандартную схему рабочих часов, или установите значение «DefaultWorkingTimeComputer», чтобы принудительно настроить схему 24x7',
|
||||
'Class:cmdbAbstractObject/Method:Reset' => 'Сброс',
|
||||
'Class:cmdbAbstractObject/Method:Reset+' => 'Сбросить поле до его стандартного значения ',
|
||||
'Class:cmdbAbstractObject/Method:Reset/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:Reset/Param:1+' => 'Сбросить поле, в текущем объекте',
|
||||
'Class:cmdbAbstractObject/Method:Copy' => 'Копировать',
|
||||
'Class:cmdbAbstractObject/Method:Copy+' => 'Скопировать значение с поля на другое поле',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:1' => 'Целевое поле',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:1+' => 'Установить поле, в текущем объекте ',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:2' => 'Исходное поле ',
|
||||
'Class:cmdbAbstractObject/Method:Copy/Param:2+' => 'Присвоить значение поля, в текущем объекте',
|
||||
'Class:cmdbAbstractObject/Method:ApplyStimulus' => 'ApplyStimulus~~',
|
||||
'Class:cmdbAbstractObject/Method:ApplyStimulus+' => 'Apply the specified stimulus to the current object~~',
|
||||
'Class:cmdbAbstractObject/Method:ApplyStimulus/Param:1' => 'Stimulus code~~',
|
||||
'Class:cmdbAbstractObject/Method:ApplyStimulus/Param:1+' => 'A valid stimulus code for the current class~~',
|
||||
'Class:ResponseTicketTTO/Interface:iMetricComputer' => 'Time To Own~~',
|
||||
'Class:ResponseTicketTTO/Interface:iMetricComputer+' => 'Goal based on a SLT of type TTO~~',
|
||||
'Class:ResponseTicketTTR/Interface:iMetricComputer' => 'Time To Resolve~~',
|
||||
'Class:ResponseTicketTTR/Interface:iMetricComputer+' => 'Goal based on a SLT of type TTR~~',
|
||||
'Class:ResponseTicketTTO/Interface:iMetricComputer' => 'Время создания тикета до его назначения',
|
||||
'Class:ResponseTicketTTO/Interface:iMetricComputer+' => 'TTO Цель, основанная на SLT типа ТТО',
|
||||
'Class:ResponseTicketTTR/Interface:iMetricComputer' => 'Время решения',
|
||||
'Class:ResponseTicketTTR/Interface:iMetricComputer+' => 'Цель основанная на SLT типа TTR',
|
||||
|
||||
'portal:itop-portal' => 'Пользовательский портал', // This is the portal name that will be displayed in portal dispatcher (eg. URL in menus)
|
||||
'Page:DefaultTitle' => '%1$s - Пользовательский портал',
|
||||
|
||||
@@ -110,7 +110,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => 'Выражение языка запроса объекта (Object Query Language)',
|
||||
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum' => 'Тип-перечисление',
|
||||
'Core:AttributeEnum+' => 'Список предопределенных тестовых строк',
|
||||
|
||||
'Core:AttributeTemplateString' => 'Шаблон строки',
|
||||
@@ -432,13 +432,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:EventLoginUsage' => 'Статистика авторизаций~~',
|
||||
'Class:EventLoginUsage' => 'Статистика авторизаций',
|
||||
'Class:EventLoginUsage+' => 'Connection to the application',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Логин~~',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Логин',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => 'Login',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Имя пользователя~~',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Имя пользователя',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => 'Имя пользователя',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Email пользователя~~',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Email пользователя',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => 'Email Address of the User',
|
||||
));
|
||||
|
||||
@@ -678,17 +678,17 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'SynchroDataSource:Reconciliation' => 'Поиск и сопоставление',
|
||||
'SynchroDataSource:Deletion' => 'Устаревание и удаление',
|
||||
'SynchroDataSource:Status' => 'Статус',
|
||||
'SynchroDataSource:Information' => 'Инфо~~',
|
||||
'SynchroDataSource:Definition' => 'Определение~~',
|
||||
'SynchroDataSource:Information' => 'Инфо',
|
||||
'SynchroDataSource:Definition' => 'Определение',
|
||||
'Core:SynchroAttributes' => 'Атрибуты',
|
||||
'Core:SynchroStatus' => 'Свойства~~',
|
||||
'Core:Synchro:ErrorsLabel' => 'Ошибки~~',
|
||||
'Core:Synchro:CreatedLabel' => 'Создан~~',
|
||||
'Core:Synchro:ModifiedLabel' => 'Изменен~~',
|
||||
'Core:Synchro:UnchangedLabel' => 'Неизменен~~',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Ошибки~~',
|
||||
'Core:Synchro:ReconciledLabel' => 'Согласован~~',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Создан~~',
|
||||
'Core:SynchroStatus' => 'Свойства',
|
||||
'Core:Synchro:ErrorsLabel' => 'Ошибки',
|
||||
'Core:Synchro:CreatedLabel' => 'Создан',
|
||||
'Core:Synchro:ModifiedLabel' => 'Изменен',
|
||||
'Core:Synchro:UnchangedLabel' => 'Неизменен',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Ошибки',
|
||||
'Core:Synchro:ReconciledLabel' => 'Согласован',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Создан',
|
||||
'Core:SynchroReconcile:Yes' => 'Да',
|
||||
'Core:SynchroReconcile:No' => 'Нет',
|
||||
'Core:SynchroUpdate:Yes' => 'Да',
|
||||
@@ -697,70 +697,70 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Core:Synchro:History' => 'История синхронизаций',
|
||||
'Core:Synchro:NeverRun' => 'Синхронизация не запускалась. Логи отсутсвуют.',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'Синхронизация была закончена в %1$s.',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'Синхронизация запущена в %1$s, сейчас в процессе...',
|
||||
'Menu:DataSources' => 'Synchronization Data Sources~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:DataSources+' => 'All Synchronization Data Sources~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Core:Synchro:label_repl_ignored' => 'Игнор. (%1$s)~~',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Невид. (%1$s)~~',
|
||||
'Core:Synchro:label_repl_existing' => 'Existing (%1$s)~~',
|
||||
'Core:Synchro:label_repl_new' => 'Новый (%1$s)~~',
|
||||
'Core:Synchro:label_obj_deleted' => 'Удаленный (%1$s)~~',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Obsoleted (%1$s)~~',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Ошибки (%1$s)~~',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'No Action (%1$s)~~',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Unchanged (%1$s)~~',
|
||||
'Core:Synchro:label_obj_updated' => 'Обновлен (%1$s)~~',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Ошибки (%1$s)~~',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Unchanged (%1$s)~~',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Обновлен (%1$s)~~',
|
||||
'Core:Synchro:label_obj_created' => 'Создан (%1$s)~~',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Ошибки (%1$s)~~',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s~~',
|
||||
'Core:Synchro:Nb_Replica' => 'Replica processed: %1$s~~',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s~~',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'Синхронизация запущена в %1$s сейчас в процессе...',
|
||||
'Menu:DataSources' => 'Источники данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:DataSources+' => 'Источники синхронизируемых данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Core:Synchro:label_repl_ignored' => 'Игнор. (%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Невид. (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Существует (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'Новый (%1$s)',
|
||||
'Core:Synchro:label_obj_deleted' => 'Удаленный (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Устарел (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Ошибки (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'Нет действий (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Неизменен (%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Обновлен (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Ошибки (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Неизменен (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Обновлен (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Создан (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Ошибки (%1$s)',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s',
|
||||
'Core:Synchro:Nb_Replica' => 'Репликация в обработке: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Как минимум один атрибут должен быть выбран для поиска и сопоставления объектов, либо используйте политику сопоставления по primary_key.',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'Срок хранения должен быть указан, поскольку объекты должны быть удалены после того, помечены как устаревшие.',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Устаревшие объекты должны быть обновлены, но способ обновления не указан.',
|
||||
'Class:SynchroDataSource/Error:DataTableAlreadyExists' => 'Таблица %1$s уже существует в базе данных. Пожалуйста, используйте другое имя для таблицы данных из этого источника.',
|
||||
'Core:SynchroReplica:PublicData' => 'Public Data~~',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Private Details~~',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Go Back to the Synchro Data Source: %1$s~~',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'List of Replica~~',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Primary Key)~~',
|
||||
'Core:SynchroReplica:PublicData' => 'ОбщедоступныеДанные',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'ЧастныеДетали',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Возвратиться к источнику синхроданных: %1$s',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'Список репликаций',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Первичныйключ)',
|
||||
'Core:SynchroAtt:attcode' => 'Атрибут',
|
||||
'Core:SynchroAtt:attcode+' => 'Field of the object',
|
||||
'Core:SynchroAtt:reconciliation' => 'Reconciliation ?~~',
|
||||
'Core:SynchroAtt:reconciliation' => 'Реконсиляция ?',
|
||||
'Core:SynchroAtt:reconciliation+' => 'Used for searching',
|
||||
'Core:SynchroAtt:update' => 'Обновить?',
|
||||
'Core:SynchroAtt:update+' => 'Used to update the object',
|
||||
'Core:SynchroAtt:update_policy' => 'Политика обновлений~~',
|
||||
'Core:SynchroAtt:update_policy' => 'Политика обновлений',
|
||||
'Core:SynchroAtt:update_policy+' => 'Behavior of the updated field',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Reconciliation Key~~',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Ключ реконсиляции',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => 'Attribute Code for the External Key Reconciliation',
|
||||
'Core:SyncDataExchangeComment' => '(Data Synchro)~~',
|
||||
'Core:Synchro:ListOfDataSources' => 'Список данных:~~',
|
||||
'Core:SyncDataExchangeComment' => '( Синхроданные)',
|
||||
'Core:Synchro:ListOfDataSources' => 'Список данных:',
|
||||
'Core:Synchro:LastSynchro' => 'Последняя синхронизация:',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'This object is synchronized with an external data source~~',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'The object was <b>created</b> by the external data source %1$s~~',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'The object <b>can be deleted</b> by the external data source %1$s~~',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'You <b>cannot delete the object</b> because it is owned by the external data source %1$s~~',
|
||||
'TitleSynchroExecution' => 'Запуск синхронизаций.~~',
|
||||
'Class:SynchroDataSource:DataTable' => 'Таблица: %1$s~~',
|
||||
'Core:SyncDataSourceObsolete' => 'The data source is marked as obsolete. Operation cancelled.~~',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Могут запускать только администраторы и определенные пользователи. Операция отменена.~~',
|
||||
'Core:SyncTooManyMissingReplicas' => 'All records have been untouched for some time (all of the objects could be deleted). Please check that the process that writes into the synchronization table is still running. Operation cancelled.~~',
|
||||
'Core:SyncSplitModeCLIOnly' => 'The synchronization can be executed in chunks only if run in mode CLI~~',
|
||||
'Core:Synchro:ListReplicas_AllReplicas_Errors_Warnings' => '%1$s replicas, Ошибок %2$s, Предупреждений %3$s.~~',
|
||||
'Core:SynchroReplica:TargetObject' => 'Синхронизировано объектов: %1$s~~',
|
||||
'Class:AsyncSendEmail' => 'Email (asynchronous)~~',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'Кому~~',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Получатель~~',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Тело~~',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Заголовок~~',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'Этот объект синхронизирован с внешним источником данных',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'Объект был <b>создан</b> внешним источником данных %1$s',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'Объект<b>может быть удален</b> внешним источником данных %1$s',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'Вы <b>не можете удалить объект</b> потому что он принадлежит внешнему источнику данных %1$s',
|
||||
'TitleSynchroExecution' => 'Запуск синхронизаций.',
|
||||
'Class:SynchroDataSource:DataTable' => 'Таблица: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'Данный источник данных отмечен как устаревший. Операция отменена.',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Могут запускать только администраторы и определенные пользователи. Операция отменена.',
|
||||
'Core:SyncTooManyMissingReplicas' => ' Все записи не обрабатывались некоторое время(все объекты могли быть удалены). Убедитесь, что процесс записи в таблицу Синхронизации все еще выполняется. Операция отменена.',
|
||||
'Core:SyncSplitModeCLIOnly' => 'Синхронизация может выполняться в чанках только при запуске в режиме CLI ',
|
||||
'Core:Synchro:ListReplicas_AllReplicas_Errors_Warnings' => '%1$s replicas, Ошибок %2$s, Предупреждений %3$s.',
|
||||
'Core:SynchroReplica:TargetObject' => 'Синхронизировано объектов: %1$s',
|
||||
'Class:AsyncSendEmail' => 'Email (несинхронизированный)',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'Кому',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Получатель',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Тело',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Заголовок',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Шифрованный пароль',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Предыдущее значение~~',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Encrypted Field~~',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Предыдущее значение~~',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Предыдущее значение',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Зашифрованное поле',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Предыдущее значение',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Лог',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Посл.значение',
|
||||
'Class:SynchroDataSource' => 'Источник синхронизации данных',
|
||||
@@ -786,7 +786,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Только администраторы',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Пользователи с правами на удаление',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Никто',
|
||||
'Class:SynchroAttribute' => 'Синх.характеристики~~',
|
||||
'Class:SynchroAttribute' => 'Синх.характеристики',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Синхронизация данных',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Код атрибута',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Обновить',
|
||||
@@ -795,13 +795,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Заблокирован',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Разблокирован',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Инициализация если пусто',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Класс~~',
|
||||
'Class:SynchroAttExtKey' => 'Synchro Attribute (ExtKey)~~',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Класс',
|
||||
'Class:SynchroAttExtKey' => 'Синхро Атрибут (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Атрибут согласования',
|
||||
'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)~~',
|
||||
'Class:SynchroAttLinkSet' => 'Синхро Атрибут (Linkset)',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Разделитель строк',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Разделитель атрибутов',
|
||||
'Class:SynchroLog' => 'Synchr Log~~',
|
||||
'Class:SynchroLog' => 'Synchr Журнал',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Синх.исходные данные',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Стартовать в',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'Закончить в',
|
||||
@@ -809,28 +809,28 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Завершен',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Ошибка',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Запущен',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replica seen~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replica total~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb objects deleted~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb of errors while deleting~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb objects obsoleted~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb of errors while obsoleting~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb objects created~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb or errors while creating~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb objects updated~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb errors while updating~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb of errors during reconciliation~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb replica disappeared~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb objects updated~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb objects unchanged~~',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Кол-во обнаруженных репликаций ',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Кол-во общих репликаций',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Кол-во удаленных объектов',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Кол-во ошибок во время удаления',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Кол-во устаревших объектов',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Кол-во ошибок при устаревании',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Кол-во созданных объектов',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Кол-во ошибок во время создания',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Кол-во обновленных объектов',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Кол-во ошибок во время обновления',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Кол-во ошибок во время реконсиляции ',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Кол-во исчезнувших репликаций',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Кол-во обновленных объектов',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Кол-во неизмененных объектов',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Посл.ошибка',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Слежения',
|
||||
'Class:SynchroReplica' => 'Synchro Replica~~',
|
||||
'Class:SynchroReplica' => 'Синхро Репликация',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Синх.исходные данные',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Назначение объекта',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Назначение типа',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Был виден',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Статус~~',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Статус',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Изменен',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'Новый',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Устаревший',
|
||||
@@ -845,7 +845,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:appUserPreferences/Attribute:userid' => 'Пользователь',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Предпочтения',
|
||||
'Core:ExecProcess:Code1' => 'Неверная команда или команда завершена с ошибкой (возможно, неверное имя скрипта)',
|
||||
'Core:ExecProcess:Code255' => 'Ошибка PHP (parsing, or runtime)~~',
|
||||
'Core:ExecProcess:Code255' => 'Ошибка PHP (синтаксический разбор, или время выполнения)',
|
||||
|
||||
// Attribute Duration
|
||||
'Core:Duration_Seconds' => '%1$d с',
|
||||
|
||||
@@ -442,20 +442,20 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:History:LastModified_On_By' => 'Последнее изменение %1$s by %2$s.',
|
||||
'UI:HistoryTab' => 'История',
|
||||
'UI:NotificationsTab' => 'Оповещения',
|
||||
'UI:History:BulkImports' => 'История~~',
|
||||
'UI:History:BulkImports' => 'История',
|
||||
'UI:History:BulkImports+' => 'List of CSV imports (latest import first)',
|
||||
'UI:History:BulkImportDetails' => 'Changes resulting from the CSV import performed on %1$s (by %2$s)~~',
|
||||
'UI:History:BulkImportDetails' => 'Изменения, в результате импорта CSV, выполненого на %1$s (by %2$s)',
|
||||
'UI:History:Date' => 'Дата',
|
||||
'UI:History:Date+' => 'Дата изменения',
|
||||
'UI:History:User' => 'Пользователь',
|
||||
'UI:History:User+' => 'Пользователь сделавший изменение',
|
||||
'UI:History:Changes' => 'Изменения',
|
||||
'UI:History:Changes+' => 'Изменения, внесенные в объект',
|
||||
'UI:History:StatsCreations' => 'Создан~~',
|
||||
'UI:History:StatsCreations' => 'Создан',
|
||||
'UI:History:StatsCreations+' => 'Count of objects created',
|
||||
'UI:History:StatsModifs' => 'Изменен~~',
|
||||
'UI:History:StatsModifs' => 'Изменен',
|
||||
'UI:History:StatsModifs+' => 'Count of objects modified',
|
||||
'UI:History:StatsDeletes' => 'Удален~~',
|
||||
'UI:History:StatsDeletes' => 'Удален',
|
||||
'UI:History:StatsDeletes+' => 'Count of objects deleted',
|
||||
'UI:Loading' => 'Загрузка...',
|
||||
'UI:Menu:Actions' => 'Действия',
|
||||
@@ -470,8 +470,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Menu:BulkDelete' => 'Удалить...',
|
||||
'UI:UndefinedObject' => 'неопределённый',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Открыть в новом окне: %1$s, Загрузка: %2$s',
|
||||
'UI:SplitDateTime-Date' => 'дата~~',
|
||||
'UI:SplitDateTime-Time' => 'время~~',
|
||||
'UI:SplitDateTime-Date' => 'дата',
|
||||
'UI:SplitDateTime-Time' => 'время',
|
||||
'UI:TruncatedResults' => '%1$d объектов отображено из %2$d',
|
||||
'UI:DisplayAll' => 'Показать всё',
|
||||
'UI:CollapseList' => 'Свернуть',
|
||||
@@ -528,9 +528,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Нажмите здесь, чтобы снова войти...',
|
||||
'UI:ChangePwdMenu' => 'Изменить пароль...',
|
||||
'UI:Login:PasswordChanged' => 'Пароль успешно изменён!',
|
||||
'UI:AccessRO-All' => 'Только чтение~~',
|
||||
'UI:AccessRO-Users' => 'Только чтение для конечных пользователей~~',
|
||||
'UI:ApplicationEnvironment' => 'Application environment: %1$s~~',
|
||||
'UI:AccessRO-All' => 'Только чтение',
|
||||
'UI:AccessRO-Users' => 'Только чтение для конечных пользователей',
|
||||
'UI:ApplicationEnvironment' => 'Среда применения: %1$s',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Пароли не совпадают',
|
||||
'UI:Button:Login' => 'Войти',
|
||||
'UI:Login:Error:AccessRestricted' => 'Доступ к iTop ограничен. Пожалуйста, свяжитесь с администратором iTop.',
|
||||
@@ -546,7 +546,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:CSVImport:idField' => 'id (Первичный ключ)',
|
||||
'UI:Title:BulkImport' => 'iTop - Пакетный импорт',
|
||||
'UI:Title:BulkImport+' => 'Мастер импорта CSV',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronization of %1$d objects of class %2$s~~',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Синхронизация %1$d объектов класса %2$s',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- выбрать один --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Внутренняя ошибка: "%1$s" некорректный код потому, что "%2$s" НЕ являеться внешним ключом класса "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d объект(ы) останеться неизменным.',
|
||||
@@ -592,36 +592,36 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Необходимо выбрать распределение для каждой ячейки.',
|
||||
'UI:CSVImport:AlertMultipleMapping' => 'Please make sure that a target field is mapped only once.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Необходимо выбрать, по крайней мере один критерий',
|
||||
'UI:CSVImport:Encoding' => 'Кодировка символов',
|
||||
'UI:CSVImport:Encoding' => 'Кодировка символов',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Универсальный поиск',
|
||||
'UI:UniversalSearch:Error' => 'Ошибка: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Выбор класса для поиска: ',
|
||||
|
||||
'UI:CSVReport-Value-Modified' => 'Изменен~~',
|
||||
'UI:CSVReport-Value-SetIssue' => 'Не может быть изменен - причина: %1$s~~',
|
||||
'UI:CSVReport-Value-ChangeIssue' => 'Не может быть изменен %1$s - причина: %2$s~~',
|
||||
'UI:CSVReport-Value-Modified' => 'Изменен',
|
||||
'UI:CSVReport-Value-SetIssue' => 'Не может быть изменен - причина: %1$s',
|
||||
'UI:CSVReport-Value-ChangeIssue' => 'Не может быть изменен %1$s - причина: %2$s',
|
||||
'UI:CSVReport-Value-NoMatch' => 'Нет совпадений',
|
||||
'UI:CSVReport-Value-Missing' => 'Отсутствует обязательное значение',
|
||||
'UI:CSVReport-Value-Ambiguous' => 'Ambiguous: найдено %1$s объектов~~',
|
||||
'UI:CSVReport-Value-Ambiguous' => 'Неопределенный: найдено %1$s объектов',
|
||||
'UI:CSVReport-Row-Unchanged' => 'без изменений',
|
||||
'UI:CSVReport-Row-Created' => 'созданный',
|
||||
'UI:CSVReport-Row-Updated' => 'updated %1$d cols~~',
|
||||
'UI:CSVReport-Row-Disappeared' => 'disappeared, changed %1$d cols~~',
|
||||
'UI:CSVReport-Row-Issue' => 'Issue: %1$s~~',
|
||||
'UI:CSVReport-Value-Issue-Null' => 'Поле не должно быть пустым~~',
|
||||
'UI:CSVReport-Value-Issue-NotFound' => 'Не найден~~',
|
||||
'UI:CSVReport-Value-Issue-FoundMany' => 'Найдено %1$d значений~~',
|
||||
'UI:CSVReport-Value-Issue-Readonly' => 'Аттрибут \'%1$s\' доступен только для чтения и не может быть изменен (ткущее значение: %2$s, предложенное значение: %3$s)~~',
|
||||
'UI:CSVReport-Value-Issue-Format' => 'Не удалось обработать запрос: %1$s~~',
|
||||
'UI:CSVReport-Row-Updated' => 'обновлено %1$d cols',
|
||||
'UI:CSVReport-Row-Disappeared' => 'исчез, заменен %1$d cols',
|
||||
'UI:CSVReport-Row-Issue' => 'Проблема: %1$s',
|
||||
'UI:CSVReport-Value-Issue-Null' => 'Поле не должно быть пустым',
|
||||
'UI:CSVReport-Value-Issue-NotFound' => 'Не найден',
|
||||
'UI:CSVReport-Value-Issue-FoundMany' => 'Найдено %1$d значений',
|
||||
'UI:CSVReport-Value-Issue-Readonly' => 'Аттрибут \'%1$s\' доступен только для чтения и не может быть изменен (ткущее значение: %2$s, предложенное значение: %3$s)',
|
||||
'UI:CSVReport-Value-Issue-Format' => 'Не удалось обработать запрос: %1$s',
|
||||
'UI:CSVReport-Value-Issue-NoMatch' => 'Неизвестное значение атрибута \'%1$s\': ничего не найдено, проверьте правильность ввода',
|
||||
'UI:CSVReport-Value-Issue-Unknown' => 'Неизвестное значение атрибута \'%1$s\': %2$s~~',
|
||||
'UI:CSVReport-Row-Issue-Inconsistent' => 'Несоответствие атрибутов: %1$s~~',
|
||||
'UI:CSVReport-Row-Issue-Attribute' => 'Неизвестное значение(я) атрибута~~',
|
||||
'UI:CSVReport-Row-Issue-MissingExtKey' => 'Не может быть создан так как отсутсвует внешний ключ(и): %1$s~~',
|
||||
'UI:CSVReport-Row-Issue-DateFormat' => 'Формат даты неверен~~',
|
||||
'UI:CSVReport-Value-Issue-Unknown' => 'Неизвестное значение атрибута \'%1$s\': %2$s',
|
||||
'UI:CSVReport-Row-Issue-Inconsistent' => 'Несоответствие атрибутов: %1$s',
|
||||
'UI:CSVReport-Row-Issue-Attribute' => 'Неизвестное значение(я) атрибута',
|
||||
'UI:CSVReport-Row-Issue-MissingExtKey' => 'Не может быть создан так как отсутсвует внешний ключ(и): %1$s',
|
||||
'UI:CSVReport-Row-Issue-DateFormat' => 'Формат даты неверен',
|
||||
'UI:CSVReport-Row-Issue-Reconciliation' => 'Невозможно согласовать',
|
||||
'UI:CSVReport-Row-Issue-Ambiguous' => 'Согласование спорное',
|
||||
'UI:CSVReport-Row-Issue-Internal' => 'Внутренняя ошибка: %1$s, %2$s~~',
|
||||
'UI:CSVReport-Row-Issue-Internal' => 'Внутренняя ошибка: %1$s, %2$s',
|
||||
|
||||
'UI:CSVReport-Icon-Unchanged' => 'Неизмен.',
|
||||
'UI:CSVReport-Icon-Modified' => 'Измен.',
|
||||
@@ -629,11 +629,11 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:CSVReport-Object-MissingToUpdate' => 'Отсутствующий объект: будет обновлен',
|
||||
'UI:CSVReport-Object-MissingUpdated' => 'Отсутствующий объект: обновлен',
|
||||
'UI:CSVReport-Icon-Created' => 'Создан',
|
||||
'UI:CSVReport-Object-ToCreate' => 'Был создан объект~~',
|
||||
'UI:CSVReport-Object-Created' => 'Объект создан~~',
|
||||
'UI:CSVReport-Icon-Error' => 'Ошибка~~',
|
||||
'UI:CSVReport-Object-Error' => 'ОШИБКА: %1$s~~',
|
||||
'UI:CSVReport-Object-Ambiguous' => 'Двусмыслен.: %1$s~~',
|
||||
'UI:CSVReport-Object-ToCreate' => 'Был создан объект',
|
||||
'UI:CSVReport-Object-Created' => 'Объект создан',
|
||||
'UI:CSVReport-Icon-Error' => 'Ошибка',
|
||||
'UI:CSVReport-Object-Error' => 'ОШИБКА: %1$s',
|
||||
'UI:CSVReport-Object-Ambiguous' => 'Двусмыслен.: %1$s',
|
||||
'UI:CSVReport-Stats-Errors' => '%1$.0f %% загруженных объектов имеют ошибки. Проигнорированы.',
|
||||
'UI:CSVReport-Stats-Created' => '%1$.0f %% загруженных объектов были созданы.',
|
||||
'UI:CSVReport-Stats-Modified' => '%1$.0f %% загруженных объектов были изменены.',
|
||||
@@ -649,8 +649,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Audit:HeaderNbObjects' => '# Объекты',
|
||||
'UI:Audit:HeaderNbErrors' => '# Ошибки',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
'UI:Audit:ErrorIn_Rule_Reason' => 'OQL ошибка в правиле %1$s: %2$s.~~',
|
||||
'UI:Audit:ErrorIn_Category_Reason' => 'OQL ошибка в категории %1$s: %2$s.~~',
|
||||
'UI:Audit:ErrorIn_Rule_Reason' => 'OQL ошибка в правиле %1$s: %2$s.',
|
||||
'UI:Audit:ErrorIn_Category_Reason' => 'OQL ошибка в категории %1$s: %2$s.',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - Оценка запросов OQL',
|
||||
'UI:RunQuery:QueryExamples' => 'Примеры запросов',
|
||||
@@ -663,7 +663,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:RunQuery:DevelopedQuery' => 'Переработанное выражение запроса: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Сериализованные фильты: ',
|
||||
'UI:RunQuery:Error' => 'Ошибка при выполнении запроса: %1$s',
|
||||
'UI:Query:UrlForExcel' => 'URL to use for MS-Excel web queries~~',
|
||||
'UI:Query:UrlForExcel' => 'URL использовать для веб-запросов MS-Excel ',
|
||||
'UI:Query:UrlV1' => 'The list of fields has been left unspecified. The page <em>export-V2.php</em> cannot be invoked without this information. Therefore, the URL suggested here below points to the legacy page: <em>export.php</em>. This legacy version of the export has the following limitation: the list of exported fields may vary depending on the output format and the data model of iTop. <br/>Should you want to garantee that the list of exported columns will remain stable on the long run, then you must specify a value for the attribute "Fields" and use the page <em>export-V2.php</em>.',
|
||||
'UI:Schema:Title' => 'iTop схема объектов',
|
||||
'UI:Schema:CategoryMenuItem' => 'Категория <b>%1$s</b>',
|
||||
@@ -683,7 +683,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Schema:Label' => 'Метка',
|
||||
'UI:Schema:Label+' => 'Метка атрибута',
|
||||
'UI:Schema:Type' => 'Тип',
|
||||
|
||||
|
||||
'UI:Schema:Type+' => 'Тип данных атрибута',
|
||||
'UI:Schema:Origin' => 'Происхождение',
|
||||
'UI:Schema:Origin+' => 'Базовый класс, в котором этот атрибут определен',
|
||||
@@ -753,9 +753,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Этот объект не может быть удален, потому что текущий пользователь не имеет достаточных прав',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Этот объект не может быть удален, потому что некоторые ручные операции должны быть выполнены до этого',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'This object could not be deleted because some manual operations must be performed prior to that~~',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'Объект невозможно удалить, необходимо применить действия вручную перед удалением',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s от имени %2$s',
|
||||
'UI:Delete:Deleted' => 'удален~~',
|
||||
'UI:Delete:Deleted' => 'удален',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'автоматически удалён',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'автоматически сброшено поле(я): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Очищенны все ссылки(связи?) на %1$s...',
|
||||
@@ -764,9 +764,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s удалено.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Удаление %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Удаление %1$d объектов класса %2$s',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Could not be deleted: %1$s~~',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Should be automaticaly deleted, but this is not feasible: %1$s~~',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Must be deleted manually, but this is not feasible: %1$s~~',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Не смог удалить: %1$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Должно удаляться автоматически, но это неполнимо: %1$s',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Должно удаляться вручную, но это невыполнимо: %1$s',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Будет удалено автоматически',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Необходимо удалить вручную',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Должно быть автоматически обновлено, но: %1$s',
|
||||
@@ -879,28 +879,28 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Объекты инфраструктуры по типу',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Объекты инфраструктуры по статусу',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Панель управления конфигурациями',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Элементы конфигурации по статусу',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Элементы конфигурации по типу',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Панель управления конфигурациями',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Элементы конфигурации по статусу',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Элементы конфигурации по типу',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Панель управления запросами',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Пользовательские запросы по сервису',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Пользовательские запросы по приоритету',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Пользовательские запросы не назначенные не на один агент',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Панель управления запросами',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Пользовательские запросы по сервису',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Пользовательские запросы по приоритету',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Пользовательские запросы не назначенные не на один агент',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Панель управления инцидентами',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Инциденты по сервису',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Инциденты по приоритету',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Инциденты не назначенные не на один агент',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Панель управления инцидентами',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Инциденты по сервису',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Инциденты по приоритету',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Инциденты не назначенные не на один агент',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Панель управления изменениями',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Изменения по типу',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Изменения не назначенные не на один агент',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Отключения в связи с изменениями',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Панель управления изменениями',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Изменения по типу',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Изменения не назначенные не на один агент',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Отключения в связи с изменениями',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Панель управления сервисами',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Договоры с клиентами, которые будут обновлены в течении 30 дней',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Договоры с провайдерами, которые будут обновлены в течении 30 дней',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Панель управления сервисами',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Договоры с клиентами, которые будут обновлены в течении 30 дней',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Договоры с провайдерами, которые будут обновлены в течении 30 дней',
|
||||
|
||||
'UI:ContactsMenu' => 'Договора',
|
||||
'UI:ContactsMenu+' => 'Договора',
|
||||
@@ -911,23 +911,23 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
|
||||
'Menu:CSVImportMenu' => 'Импорт CSV', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:CSVImportMenu+' => 'Пакетное создание или обновление', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
|
||||
'Menu:DataModelMenu' => 'Модель данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:DataModelMenu+' => 'Обзор модели данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
|
||||
'Menu:ExportMenu' => 'Экспорт', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:ExportMenu+' => 'Экспорт результатов любого запроса в HTML, CSV или XML', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
|
||||
'Menu:NotificationsMenu' => 'Уведомления', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:NotificationsMenu+' => 'Конфигурация уведомлений', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'UI:NotificationsMenu:Title' => 'Конфигурация <span class="hilite">Уведомлений</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Помощь',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>В iTop уведомления полностью настраиваемые. Они основаны на двух наборах объектов: <i>триггеры</i> и <i>действия</i>.</p>
|
||||
<p><i><b>Triggers</b></i> define when a notification will be executed. There are different triggers as part of iTop core, but others can be brought by extensions:
|
||||
<p><i><b>Триггеры</b></i> оперделяют когда уведомление будет выполнено. Есть 3 типа триггеров обробатывающих 3 разных фазы жизненного цикла объекта:
|
||||
<ol>
|
||||
<li>Some triggers are executed when an object of the specified class is <b>created</b>, <b>updated</b> or <b>deleted</b>.</li>
|
||||
<li>Some triggers are executed when an object of a given class <b>enter</b> or <b>leave</b> a specified </b>state</b>.</li>
|
||||
<li>Some triggers are executed when a <b>threshold on TTO or TTR</b> has been <b>reached</b>.</li>
|
||||
<li>"OnCreate" триггеры сработают когда объект заданного класса будет создан</li>
|
||||
<li>"OnStateEnter" триггеры сработают перед тем как объект заданного класса войдёт в заданное состояние (выйдет из другого состояния)</li>
|
||||
<li>"OnStateLeave" триггеры сработают когда объекты заданного класса выйдут из заданного состояния</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
@@ -936,7 +936,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
</p>
|
||||
<p>Специальная страница: <a href="../setup/email.test.php" target="_blank">email.test.php</a> доступна для тестирования и устранения неполадок в настройках почты.</p>
|
||||
<p>Чтобы быть выполненными, действия необходимо ассоциировать с триггерами.
|
||||
При ассоциации с триггером, каждое действие получает "порядковый" номер, который определяет порядок выполнения действий.</p>~~',
|
||||
При ассоциации с триггером, каждое действие получает "порядковый" номер, который определяет порядок выполнения действий.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Триггеры',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Доступные триггеры',
|
||||
'UI:NotificationsMenu:OnCreate' => 'При создании объекта',
|
||||
@@ -951,32 +951,32 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:TagAdminMenu:NoTags' => 'Не настроены поля тегов',
|
||||
'UI:TagSetFieldData:Error' => 'Ошибка: %1$s',
|
||||
|
||||
'Menu:AuditCategories' => 'Audit Categories~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:AuditCategories+' => 'Audit Categories~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:Notifications:Title' => 'Audit Categories~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:RunQueriesMenu' => 'Run Queries~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:RunQueriesMenu+' => 'Run any query~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:QueryMenu' => 'Query phrasebook~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:QueryMenu+' => 'Query phrasebook~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:DataAdministration' => 'Data administration~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:DataAdministration+' => 'Data administration~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UniversalSearchMenu' => 'Universal Search~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UniversalSearchMenu+' => 'Search for anything...~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UserManagementMenu' => 'User Management~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserManagementMenu+' => 'User management~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:AuditCategories' => 'Категории аудита', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:AuditCategories+' => 'Категории аудита', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:Notifications:Title' => 'Категории аудита', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:ProfilesMenu' => 'Profiles~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:ProfilesMenu+' => 'Profiles~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:ProfilesMenu:Title' => 'Profiles~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:RunQueriesMenu' => 'Выполнение запросов', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:RunQueriesMenu+' => 'Выполнение любых запросов', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UserAccountsMenu' => 'User Accounts~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserAccountsMenu+' => 'User Accounts~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserAccountsMenu:Title' => 'User Accounts~~', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:QueryMenu' => 'Книга запросов', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:QueryMenu+' => 'Книга запросов', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:DataAdministration' => 'Администрирование данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:DataAdministration+' => 'Администрирование данных', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UniversalSearchMenu' => 'Универсальный поиск', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UniversalSearchMenu+' => 'Поиск чего угодно...', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UserManagementMenu' => 'Управление пользователями', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserManagementMenu+' => 'Управление пользователями', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:ProfilesMenu' => 'Профили пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:ProfilesMenu+' => 'Профили пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:ProfilesMenu:Title' => 'Профили пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'Menu:UserAccountsMenu' => 'Учетные записи пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserAccountsMenu+' => 'Учетные записи пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserAccountsMenu:Title' => 'Учетные записи пользователей', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'UI:iTopVersion:Short' => '%1$s версия %2$s',
|
||||
'UI:iTopVersion:Long' => '%1$s версия %2$s-%3$s основан на %4$s',
|
||||
@@ -985,12 +985,12 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:OpenDocumentInNewWindow_' => 'Открыть этот документ в новом окне: %1$s',
|
||||
'UI:DownloadDocument_' => 'Скачать этот документ: %1$s',
|
||||
'UI:Document:NoPreview' => 'Предварительный просмотр недоступен для документов данного типа',
|
||||
'UI:Download-CSV' => 'Загрузка %1$s~~',
|
||||
'UI:Download-CSV' => 'Загрузка %1$s',
|
||||
|
||||
'UI:DeadlineMissedBy_duration' => 'Пропущен %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 мин',
|
||||
'UI:Deadline_Minutes' => '%1$d мин',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$d ч %2$d мин',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 мин',
|
||||
'UI:Deadline_Minutes' => '%1$d мин',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$d ч %2$d мин',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$d д %2$d ч %3$d мин',
|
||||
'UI:Help' => 'Помощь',
|
||||
'UI:PasswordConfirm' => '(Подтвердить)',
|
||||
@@ -1060,13 +1060,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Portal:Attachments' => 'Вложения',
|
||||
'Portal:AddAttachment' => 'Добавить вложения',
|
||||
'Portal:RemoveAttachment' => ' Удалить вложения',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Вложение #%1$d to %2$s (%3$s)~~',
|
||||
'Portal:SelectRequestTemplate' => 'Select a template for %1$s~~',
|
||||
'Enum:Undefined' => 'Неопределён',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Вложение #%1$d to %2$s (%3$s)',
|
||||
'Portal:SelectRequestTemplate' => 'Выберите шаблон для %1$s',
|
||||
'Enum:Undefined' => 'Неопределён',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s д %2$s ч %3$s мин %4$s с',
|
||||
'UI:ModifyAllPageTitle' => 'Изменить все',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Изменение %1$d объектов класса %2$s~~',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Изменение %1$d объектов класса %2$s из %3$d~~',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Изменение %1$d объектов класса %2$s',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Изменение %1$d объектов класса %2$s из %3$d',
|
||||
'UI:Menu:ModifyAll' => 'Изменить...',
|
||||
'UI:Button:ModifyAll' => 'Изменить все',
|
||||
'UI:Button:PreviewModifications' => 'Предпросмотр изменений >>',
|
||||
@@ -1079,30 +1079,30 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:BulkModifyStatusError' => 'Ошибка',
|
||||
'UI:BulkModifyStatusModified' => 'Изменен',
|
||||
'UI:BulkModifyStatusSkipped' => 'Пропущен',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d distinct values:~~',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d time(s)~~',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d more values...~~',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Attempting to set the read-only field: %1$s~~',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d Различные значения:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d время(s)',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d больше значений...',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Попытка установить поле только для чтения: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'Операция не может быть выполнена.',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Modifying %2$d objects of class %3$s~~',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Модификация %2$d объектов класса %3$s',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Введите свой текст:',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:~~',
|
||||
'UI:CaseLog:InitialValue' => 'Initial value:~~',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'The field %1$s is not writable because it is mastered by the data synchronization. Value not set.~~',
|
||||
'UI:ActionNotAllowed' => 'You are not allowed to perform this action on these objects.~~',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Please select at least one object to perform this operation~~',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'The field %1$s is not writable because it is mastered by the data synchronization. Value remains unchanged.~~',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:',
|
||||
'UI:CaseLog:InitialValue' => 'Первоначальное значение:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'Поле %1$s недоступно для записи, поскольку оно контролируется синхронизацией данных. Значение не установлено.',
|
||||
'UI:ActionNotAllowed' => 'Вы не можете выполнять это действие на этих объектах.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Пожалуйста, выберите хотя бы один объект для выполнения этой операции',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'Поле %1$s недоступно для записи, поскольку оно контролируется синхронизацией данных. Значение остается неизменным.',
|
||||
'UI:Pagination:HeaderSelection' => 'Всего: %1$s элементов (%2$s элементов выделено).',
|
||||
'UI:Pagination:HeaderNoSelection' => 'Всего: %1$s элементов',
|
||||
'UI:Pagination:PageSize' => '%1$s объектов на страницу',
|
||||
'UI:Pagination:PagesLabel' => 'Страницы:~~',
|
||||
'UI:Pagination:PagesLabel' => 'Страницы:',
|
||||
'UI:Pagination:All' => 'Все',
|
||||
'UI:HierarchyOf_Class' => 'Иерархия по: %1$s~~',
|
||||
'UI:Preferences' => 'Предпочтения...',
|
||||
'UI:ArchiveModeOn' => 'Activate archive mode~~',
|
||||
'UI:ArchiveModeOff' => 'Deactivate archive mode~~',
|
||||
'UI:ArchiveMode:Banner' => 'Archive mode~~',
|
||||
'UI:ArchiveMode:Banner+' => 'Archived objects are visible, and no modification is allowed~~',
|
||||
'UI:HierarchyOf_Class' => 'Иерархия по: %1$s',
|
||||
'UI:Preferences' => 'Дополнительно...',
|
||||
'UI:ArchiveModeOn' => 'Активировать архивный режим ',
|
||||
'UI:ArchiveModeOff' => 'Деактивировать архивный режим ',
|
||||
'UI:ArchiveMode:Banner' => 'Архивный режим',
|
||||
'UI:ArchiveMode:Banner+' => 'Архивные объекты видны, и не разрешены никакие изменения ',
|
||||
'UI:FavoriteOrganizations' => 'Избранные организации',
|
||||
'UI:FavoriteOrganizations+' => 'Отметьте в списке ниже организации, которые вы хотите видеть в раскрывающемся списке бокового меню для быстрого доступа. Обратите внимание, что это не параметр безопасности, объекты из любой организации по-прежнему видны и могут быть доступны, выбрав "Все организации" в раскрывающемся списке.',
|
||||
'UI:FavoriteLanguage' => 'Язык пользовательского интерфейса',
|
||||
@@ -1114,8 +1114,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:NavigateAwayConfirmationMessage' => 'Все изменения будут отменены.',
|
||||
'UI:CancelConfirmationMessage' => 'Настройки НЕ будут сохранены. Продолжить?',
|
||||
'UI:AutoApplyConfirmationMessage' => 'Некоторые изменения не вступили в силу. Применить их немедленно?',
|
||||
'UI:Create_Class_InState' => 'Create the %1$s in state: ~~',
|
||||
'UI:OrderByHint_Values' => 'Sort order: %1$s~~',
|
||||
'UI:Create_Class_InState' => 'Создайте %1$s в состоянии: ',
|
||||
'UI:OrderByHint_Values' => 'Порядок сортировки: %1$s',
|
||||
'UI:Menu:AddToDashboard' => 'Добавить на дашборд...',
|
||||
'UI:Button:Refresh' => 'Обновить',
|
||||
'UI:Button:GoPrint' => 'Печать...',
|
||||
@@ -1143,8 +1143,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:Button:MoveUp' => 'Вверх',
|
||||
'UI:Button:MoveDown' => 'Вниз',
|
||||
|
||||
'UI:OQL:UnknownClassAndFix' => 'Unknown class "%1$s". You may try "%2$s" instead.~~',
|
||||
'UI:OQL:UnknownClassNoFix' => 'Unknown class "%1$s"~~',
|
||||
'UI:OQL:UnknownClassAndFix' => 'Неизвестный класс"%1$s". You may try "%2$s" instead.',
|
||||
'UI:OQL:UnknownClassNoFix' => 'Неизвестный класс "%1$s"',
|
||||
|
||||
'UI:Dashboard:Edit' => 'Редактировать дашборд...',
|
||||
'UI:Dashboard:Revert' => 'Вернуть оригинальную версию...',
|
||||
@@ -1168,8 +1168,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
|
||||
'UI:DashboardEdit:Layout' => 'Макет',
|
||||
'UI:DashboardEdit:Properties' => 'Свойства дашборда',
|
||||
'UI:DashboardEdit:Dashlets' => 'Доступные дашлеты',
|
||||
'UI:DashboardEdit:DashletProperties' => 'Свойства дашлета',
|
||||
'UI:DashboardEdit:Dashlets' => 'Доступные дашлеты',
|
||||
'UI:DashboardEdit:DashletProperties' => 'Свойства дашлета',
|
||||
|
||||
'UI:Form:Property' => 'Свойство',
|
||||
'UI:Form:Value' => 'Значение',
|
||||
@@ -1201,14 +1201,14 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:DashletGroupBy:Prop-Query' => 'Запрос',
|
||||
'UI:DashletGroupBy:Prop-Style' => 'Стиль',
|
||||
'UI:DashletGroupBy:Prop-GroupBy' => 'Группировка',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Hour' => 'Hour of %1$s (0-23)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Month' => 'Month of %1$s (1 - 12)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:DayOfWeek' => 'Day of week for %1$s~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:DayOfMonth' => 'Day of month for %1$s~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-Hour' => '%1$s (hour)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-Month' => '%1$s (month)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-DayOfWeek' => '%1$s (day of week)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-DayOfMonth' => '%1$s (day of month)~~',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Hour' => 'Час %1$s (0-23)',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Month' => 'Месяц %1$s (1 - 12)',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:DayOfWeek' => 'День недели для%1$s',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:DayOfMonth' => 'День месяца для %1$s',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-Hour' => '%1$s (час)',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-Month' => '%1$s (месяц)',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-DayOfWeek' => '%1$s (день недели)',
|
||||
'UI:DashletGroupBy:Prop-GroupBy:Select-DayOfMonth' => '%1$s (день месяца)',
|
||||
'UI:DashletGroupBy:MissingGroupBy' => 'Пожалуйста, выберите поле по которому объекты будут сгруппированы',
|
||||
|
||||
'UI:DashletGroupByPie:Label' => 'Круговая диаграмма',
|
||||
@@ -1241,7 +1241,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
// ---
|
||||
|
||||
'UI:DashletHeaderStatic:Label' => 'Заголовок',
|
||||
'UI:DashletHeaderStatic:Description' => 'Displays an horizontal separator~~',
|
||||
'UI:DashletHeaderStatic:Description' => 'Отображает горизонтальный разделитель',
|
||||
'UI:DashletHeaderStatic:Prop-Title' => 'Заголовок',
|
||||
'UI:DashletHeaderStatic:Prop-Title:Default' => 'Контакты',
|
||||
'UI:DashletHeaderStatic:Prop-Icon' => 'Иконка',
|
||||
@@ -1280,7 +1280,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Month-10' => 'Октябрь',
|
||||
'Month-11' => 'Ноябрь',
|
||||
'Month-12' => 'Декабрь',
|
||||
|
||||
|
||||
// Short version for the DatePicker
|
||||
'DayOfWeek-Sunday-Min' => 'Вс',
|
||||
'DayOfWeek-Monday-Min' => 'Пн',
|
||||
@@ -1302,7 +1302,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Month-11-Short' => 'Ноя.',
|
||||
'Month-12-Short' => 'Дек.',
|
||||
'Calendar-FirstDayOfWeek' => '1', // 0 = Sunday, 1 = Monday, etc...
|
||||
|
||||
|
||||
'UI:Menu:ShortcutList' => 'Добавить в избранное...',
|
||||
'UI:ShortcutRenameDlg:Title' => 'Переименовать ссылку',
|
||||
'UI:ShortcutListDlg:Title' => 'Добавить в избранное ссылку на список',
|
||||
@@ -1312,7 +1312,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:Shortcut+' => '',
|
||||
'Class:Shortcut/Attribute:name' => 'Название',
|
||||
'Class:Shortcut/Attribute:name+' => 'Используется в меню и заголовке страницы',
|
||||
'Class:ShortcutOQL' => 'Search result shortcut~~',
|
||||
'Class:ShortcutOQL' => 'Ярлык результата поиска',
|
||||
'Class:ShortcutOQL+' => '',
|
||||
'Class:ShortcutOQL/Attribute:oql' => 'Запрос',
|
||||
'Class:ShortcutOQL/Attribute:oql+' => 'OQL defining the list of objects to search for',
|
||||
@@ -1352,7 +1352,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
<tr><td>i</td><td>minutes (2 digits, e.g. 00..59)</td></tr>
|
||||
<tr><td>s</td><td>seconds (2 digits, e.g. 00..59)</td></tr>
|
||||
</table>',
|
||||
|
||||
|
||||
'UI:Button:Remove' => 'Удалить',
|
||||
'UI:AddAnExisting_Class' => 'Добавить объекты класса %1$s...',
|
||||
'UI:SelectionOf_Class' => 'Выбор объектов класса %1$s',
|
||||
@@ -1365,13 +1365,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:About:InstallationOptions' => 'Installation options~~',
|
||||
'UI:About:ManualExtensionSource' => 'Extension~~',
|
||||
'UI:About:Extension_Version' => 'Version: %1$s~~',
|
||||
'UI:About:RemoteExtensionSource' => 'Data~~',
|
||||
|
||||
'UI:About:RemoteExtensionSource' => 'Data~~',
|
||||
|
||||
'UI:DisconnectedDlgMessage' => 'Вы отключены. Вы должны идентифицировать себя для продолжения использования приложения.',
|
||||
'UI:DisconnectedDlgTitle' => 'Внимание!',
|
||||
'UI:LoginAgain' => 'Войти снова',
|
||||
'UI:StayOnThePage' => 'Остаться на этой странице',
|
||||
|
||||
|
||||
'ExcelExporter:ExportMenu' => 'Экспорт в Excel...',
|
||||
'ExcelExporter:ExportDialogTitle' => 'Экспорт в Excel',
|
||||
'ExcelExporter:ExportButton' => 'Экспорт',
|
||||
@@ -1391,16 +1391,16 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'UI:CurrentObjectLockExpired_Explanation' => 'Срок блокировки для предотвращения одновременного изменения объекта истек. Вы больше не можете сохранить свои изменения, поскольку другим пользователям теперь разрешено изменять данный объект.',
|
||||
'UI:ConcurrentLockKilled' => 'Блокировка для предотвращения изменений текущего объекта снята.',
|
||||
'UI:Menu:KillConcurrentLock' => 'Снять блокировку одноврем. измен.!',
|
||||
|
||||
|
||||
'UI:Menu:ExportPDF' => 'Экспорт в PDF...',
|
||||
'UI:Menu:PrintableVersion' => 'Версия для печати',
|
||||
|
||||
|
||||
'UI:BrowseInlineImages' => 'Обзор...',
|
||||
'UI:UploadInlineImageLegend' => 'Загрузить новое изображение',
|
||||
'UI:SelectInlineImageToUpload' => 'Выберите изображение для загрузки',
|
||||
'UI:AvailableInlineImagesLegend' => 'Доступные изображения',
|
||||
'UI:NoInlineImage' => 'На сервере нет доступных изображений. С помощью кнопки "Обзор..." выше выберите изображение на вашем компьютере, чтобы загрузить его на сервер.',
|
||||
|
||||
|
||||
'UI:ToggleFullScreen' => 'Развернуть / Свернуть',
|
||||
'UI:Button:ResetImage' => 'Восстановить предыдущее изображение',
|
||||
'UI:Button:RemoveImage' => 'Удалить изображение',
|
||||
|
||||
@@ -33,46 +33,46 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Core:AttributeLinkedSet' => '对象数组',
|
||||
'Core:AttributeLinkedSet+' => 'Any kind of objects of the same class or subclass',
|
||||
|
||||
'Core:AttributeDashboard' => 'Dashboard~~',
|
||||
'Core:AttributeDashboard' => '面板',
|
||||
'Core:AttributeDashboard+' => '~~',
|
||||
|
||||
'Core:AttributePhoneNumber' => 'Phone number~~',
|
||||
'Core:AttributePhoneNumber' => '电话号码',
|
||||
'Core:AttributePhoneNumber+' => '~~',
|
||||
|
||||
'Core:AttributeObsolescenceDate' => 'Obsolescence date~~',
|
||||
'Core:AttributeObsolescenceDate' => '报废日期',
|
||||
'Core:AttributeObsolescenceDate+' => '~~',
|
||||
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
'Core:AttributeTagSet' => '清单',
|
||||
'Core:AttributeTagSet+' => '',
|
||||
'Core:AttributeSet:placeholder' => '请点击这里添加',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
'Core:AttributeCaseLog' => '日志',
|
||||
'Core:AttributeCaseLog+' => '',
|
||||
|
||||
'Core:AttributeMetaEnum' => 'Computed enum~~',
|
||||
'Core:AttributeMetaEnum+' => '~~',
|
||||
'Core:AttributeMetaEnum' => 'Computed enum~~',
|
||||
'Core:AttributeMetaEnum+' => '~~',
|
||||
|
||||
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect' => '对象数组(N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeInteger' => '整数',
|
||||
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
|
||||
'Core:AttributeInteger+' => '整数值(可以为负)',
|
||||
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
|
||||
'Core:AttributeDecimal' => '小数',
|
||||
'Core:AttributeDecimal+' => '小数(可以为负)',
|
||||
|
||||
'Core:AttributeBoolean' => '布尔',
|
||||
'Core:AttributeBoolean+' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => '布尔',
|
||||
'Core:AttributeBoolean/Value:null' => '',
|
||||
'Core:AttributeBoolean/Value:yes' => '是',
|
||||
'Core:AttributeBoolean/Value:no' => '否',
|
||||
|
||||
'Core:AttributeArchiveFlag' => '是否归档',
|
||||
'Core:AttributeArchiveFlag/Value:yes' => '是',
|
||||
'Core:AttributeArchiveFlag/Value:yes+' => 'This object is visible only in archive mode',
|
||||
'Core:AttributeArchiveFlag/Value:yes+' => '该对象仅在归档模式可见',
|
||||
'Core:AttributeArchiveFlag/Value:no' => '否',
|
||||
'Core:AttributeArchiveFlag/Label' => '已归档',
|
||||
'Core:AttributeArchiveFlag/Label+' => '',
|
||||
@@ -89,13 +89,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Core:AttributeObsolescenceDate/Label+' => 'Approximative date at which the object has been considered obsolete',
|
||||
|
||||
'Core:AttributeString' => '字符串',
|
||||
'Core:AttributeString+' => 'Alphanumeric string',
|
||||
'Core:AttributeString+' => '字符串',
|
||||
|
||||
'Core:AttributeClass' => '类',
|
||||
'Core:AttributeClass+' => 'Class',
|
||||
'Core:AttributeClass+' => '类别',
|
||||
|
||||
'Core:AttributeApplicationLanguage' => '用户语言',
|
||||
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
|
||||
'Core:AttributeApplicationLanguage+' => '语言和国家地区(EN US)',
|
||||
|
||||
'Core:AttributeFinalClass' => '类 (auto)',
|
||||
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
|
||||
@@ -126,11 +126,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
|
||||
|
||||
'Core:AttributeTemplateString' => 'Template string',
|
||||
'Core:AttributeTemplateString+' => 'String containing placeholders',
|
||||
'Core:AttributeTemplateString' => '字符模板',
|
||||
'Core:AttributeTemplateString+' => '包含占位符的字符串',
|
||||
|
||||
'Core:AttributeTemplateText' => '文字模板',
|
||||
'Core:AttributeTemplateText+' => 'Text containing placeholders',
|
||||
'Core:AttributeTemplateText+' => '包含占位符的文本',
|
||||
|
||||
'Core:AttributeTemplateHTML' => 'HTML 模板',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
|
||||
@@ -169,7 +169,7 @@ Operators:<br/>
|
||||
</p>',
|
||||
|
||||
'Core:AttributeDeadline' => '截止日期',
|
||||
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
|
||||
'Core:AttributeDeadline+' => '日期, 显示与当前的相对时间',
|
||||
|
||||
'Core:AttributeExternalKey' => '外键',
|
||||
'Core:AttributeExternalKey+' => 'External (or foreign) key',
|
||||
@@ -184,10 +184,10 @@ Operators:<br/>
|
||||
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
|
||||
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Any binary content (document)',
|
||||
'Core:AttributeBlob+' => '任何二进制内容(文档)',
|
||||
|
||||
'Core:AttributeOneWayPassword' => 'One way password',
|
||||
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
|
||||
'Core:AttributeOneWayPassword' => '单向密码',
|
||||
'Core:AttributeOneWayPassword+' => '单向加密(或哈希) 的密码',
|
||||
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => 'Indexed array having two dimensions',
|
||||
@@ -199,10 +199,10 @@ Operators:<br/>
|
||||
'Core:AttributeFriendlyName+' => 'Attribute created automatically ; the friendly name is computed after several attributes',
|
||||
|
||||
'Core:FriendlyName-Label' => '全称',
|
||||
'Core:FriendlyName-Description' => 'Full name',
|
||||
'Core:FriendlyName-Description' => '全称',
|
||||
|
||||
'Core:AttributeTag' => 'Tags~~',
|
||||
'Core:AttributeTag+' => 'Tags~~',
|
||||
'Core:AttributeTag' => '标签',
|
||||
'Core:AttributeTag+' => '标签',
|
||||
));
|
||||
|
||||
|
||||
@@ -279,12 +279,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => '属性变更',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => 'Object scalar properties change tracking',
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => '属性更改跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => '对象属性更改跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => '旧值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'previous value of the attribute',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '以前该属性的值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => '新值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'new value of the attribute',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '属性的新值',
|
||||
));
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
@@ -307,10 +307,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => '数据修改',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => 'data change tracking',
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => '数据变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => '数据变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => '之前的值',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'previous contents of the attribute',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '该数据之前的内容',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -318,10 +318,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeText' => '文本修改',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '跟踪文本修改',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Previous data',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'previous contents of the attribute',
|
||||
'Class:CMDBChangeOpSetAttributeText' => '文本变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '文本变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => '旧值',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '该文本之前的内容',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -330,14 +330,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Event' => '日志事件',
|
||||
'Class:Event+' => 'An application internal event',
|
||||
'Class:Event+' => '应用程序的内部事件',
|
||||
'Class:Event/Attribute:message' => '消息',
|
||||
'Class:Event/Attribute:message+' => 'short description of the event',
|
||||
'Class:Event/Attribute:date' => '日期',
|
||||
'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded',
|
||||
'Class:Event/Attribute:date+' => '记录的日期和时间',
|
||||
'Class:Event/Attribute:userinfo' => '用户信息',
|
||||
'Class:Event/Attribute:userinfo+' => 'identification of the user that was doing the action that triggered this event',
|
||||
'Class:Event/Attribute:finalclass' => 'Event sub-class',
|
||||
'Class:Event/Attribute:finalclass' => '事件子类别',
|
||||
'Class:Event/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -496,7 +496,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ActionEmail' => '邮件通知',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Test recipient',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => '测试收件人',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => 'Detination in case status is set to "Test"',
|
||||
'Class:ActionEmail/Attribute:from' => '发件人',
|
||||
'Class:ActionEmail/Attribute:from+' => 'Will be sent into the email header',
|
||||
@@ -505,15 +505,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ActionEmail/Attribute:to' => '收件人',
|
||||
'Class:ActionEmail/Attribute:to+' => 'Destination of the email',
|
||||
'Class:ActionEmail/Attribute:cc' => '抄送',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:cc+' => '明文抄送',
|
||||
'Class:ActionEmail/Attribute:bcc' => '密抄',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:bcc+' => '加密抄送',
|
||||
'Class:ActionEmail/Attribute:subject' => '主题',
|
||||
'Class:ActionEmail/Attribute:subject+' => 'Title of the email',
|
||||
'Class:ActionEmail/Attribute:subject+' => '邮件主题',
|
||||
'Class:ActionEmail/Attribute:body' => '正文',
|
||||
'Class:ActionEmail/Attribute:body+' => 'Contents of the email',
|
||||
'Class:ActionEmail/Attribute:body+' => '邮件内容',
|
||||
'Class:ActionEmail/Attribute:importance' => '重要性',
|
||||
'Class:ActionEmail/Attribute:importance+' => 'Importance flag',
|
||||
'Class:ActionEmail/Attribute:importance+' => '重要性标记',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => '低',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => '低',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => '普通',
|
||||
@@ -530,10 +530,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Trigger' => '触发器',
|
||||
'Class:Trigger+' => 'Custom event handler',
|
||||
'Class:Trigger/Attribute:description' => '描述',
|
||||
'Class:Trigger/Attribute:description+' => 'one line description',
|
||||
'Class:Trigger/Attribute:description+' => '一行描述',
|
||||
'Class:Trigger/Attribute:action_list' => '触发的行为',
|
||||
'Class:Trigger/Attribute:action_list+' => 'Actions performed when the trigger is activated',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Trigger sub-class',
|
||||
'Class:Trigger/Attribute:finalclass' => '触发器子类别',
|
||||
'Class:Trigger/Attribute:finalclass+' => 'Name of the final class',
|
||||
));
|
||||
|
||||
@@ -604,7 +604,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnObjectDelete' => 'Trigger (on object deletion)~~',
|
||||
'Class:TriggerOnObjectDelete' => '触发器 (对象删除时)',
|
||||
'Class:TriggerOnObjectDelete+' => 'Trigger on object deletion of [a child class of] the given class~~',
|
||||
));
|
||||
|
||||
@@ -613,7 +613,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnObjectUpdate' => 'Trigger (on object update)~~',
|
||||
'Class:TriggerOnObjectUpdate' => '触发器 (对象更新时)',
|
||||
'Class:TriggerOnObjectUpdate+' => 'Trigger on object update of [a child class of] the given class~~',
|
||||
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes' => 'Target fields~~',
|
||||
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes+' => '~~',
|
||||
@@ -626,7 +626,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnThresholdReached' => '触发器 (基于阀值)',
|
||||
'Class:TriggerOnThresholdReached+' => '当达到某个阀值时触发',
|
||||
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code' => 'Stop watch',
|
||||
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code' => '秒表',
|
||||
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code+' => '',
|
||||
'Class:TriggerOnThresholdReached/Attribute:threshold_index' => '阀值',
|
||||
'Class:TriggerOnThresholdReached/Attribute:threshold_index+' => '',
|
||||
@@ -660,7 +660,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SynchroDataSource/Attribute:description' => '描述',
|
||||
'Class:SynchroDataSource/Attribute:status' => '状态',
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => '目标类',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'User',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => '用户',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id' => '要通知的人',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id+' => 'Contact to notify in case of error',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => '图标的超链接',
|
||||
@@ -777,7 +777,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Case Log',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Last Entry',
|
||||
'Class:SynchroDataSource' => '同步数据源',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implementation',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => '上线',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => '废弃',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => '生产',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => '范围限制',
|
||||
@@ -801,13 +801,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Nobody',
|
||||
'Class:SynchroAttribute' => '同步属性',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => '同步数据源',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Attribute Code',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => '属性代码',
|
||||
'Class:SynchroAttribute/Attribute:update' => '更新',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Reconcile',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => '更新策略',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => '加锁',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => '解锁',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Initialize if empty',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => '如果为空则初始化',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Class',
|
||||
'Class:SynchroAttExtKey' => 'Synchro Attribute (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Reconciliation Attribute',
|
||||
@@ -952,15 +952,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
'Class:TagSetFieldData/Attribute:code' => 'Code~~',
|
||||
'Class:TagSetFieldData/Attribute:code+' => 'Internal code. Must contain at least 3 alphanumeric characters~~',
|
||||
'Class:TagSetFieldData/Attribute:label' => 'Label~~',
|
||||
'Class:TagSetFieldData/Attribute:label+' => 'Displayed label~~',
|
||||
'Class:TagSetFieldData/Attribute:description' => 'Description~~',
|
||||
'Class:TagSetFieldData/Attribute:description+' => 'Description~~',
|
||||
'Class:TagSetFieldData/Attribute:label' => '标签',
|
||||
'Class:TagSetFieldData/Attribute:label+' => '显示的标签',
|
||||
'Class:TagSetFieldData/Attribute:description' => '描述',
|
||||
'Class:TagSetFieldData/Attribute:description+' => '描述',
|
||||
'Class:TagSetFieldData/Attribute:finalclass' => 'Tag class~~~~',
|
||||
'Class:TagSetFieldData/Attribute:obj_class' => 'Object class~~~~',
|
||||
'Class:TagSetFieldData/Attribute:obj_attcode' => 'Field code~~~~',
|
||||
|
||||
'Core:TagSetFieldData:ErrorDeleteUsedTag' => 'Used tags cannot be deleted~~',
|
||||
'Core:TagSetFieldData:ErrorDeleteUsedTag' => '已使用的标签无法删除',
|
||||
'Core:TagSetFieldData:ErrorDuplicateTagCodeOrLabel' => 'Tags codes or labels must be unique~~',
|
||||
'Core:TagSetFieldData:ErrorTagCodeSyntax' => 'Tags code must contain between 3 and %1$d alphanumeric characters, starting with a letter.~~',
|
||||
'Core:TagSetFieldData:ErrorTagCodeReservedWord' => 'The chosen tag code is a reserved word~~',
|
||||
@@ -976,63 +976,63 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Class: DBProperty
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:DBProperty' => 'DB property~~',
|
||||
'Class:DBProperty' => 'DB 属性',
|
||||
'Class:DBProperty+' => '~~',
|
||||
'Class:DBProperty/Attribute:name' => 'Name~~',
|
||||
'Class:DBProperty/Attribute:name+' => '~~',
|
||||
'Class:DBProperty/Attribute:description' => 'Description~~',
|
||||
'Class:DBProperty/Attribute:description+' => '~~',
|
||||
'Class:DBProperty/Attribute:value' => 'Value~~',
|
||||
'Class:DBProperty/Attribute:value+' => '~~',
|
||||
'Class:DBProperty/Attribute:change_date' => 'Change date~~',
|
||||
'Class:DBProperty/Attribute:change_date+' => '~~',
|
||||
'Class:DBProperty/Attribute:change_comment' => 'Change comment~~',
|
||||
'Class:DBProperty/Attribute:change_comment+' => '~~',
|
||||
'Class:DBProperty/Attribute:name' => '名称',
|
||||
'Class:DBProperty/Attribute:name+' => '',
|
||||
'Class:DBProperty/Attribute:description' => '描述',
|
||||
'Class:DBProperty/Attribute:description+' => '',
|
||||
'Class:DBProperty/Attribute:value' => '值',
|
||||
'Class:DBProperty/Attribute:value+' => '',
|
||||
'Class:DBProperty/Attribute:change_date' => '修改日期',
|
||||
'Class:DBProperty/Attribute:change_date+' => '',
|
||||
'Class:DBProperty/Attribute:change_comment' => '备注',
|
||||
'Class:DBProperty/Attribute:change_comment+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: BackgroundTask
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:BackgroundTask' => 'Background task~~',
|
||||
'Class:BackgroundTask' => '后台任务',
|
||||
'Class:BackgroundTask+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:class_name' => 'Class name~~',
|
||||
'Class:BackgroundTask/Attribute:class_name+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:first_run_date' => 'First run date~~',
|
||||
'Class:BackgroundTask/Attribute:first_run_date' => '首次运行时间',
|
||||
'Class:BackgroundTask/Attribute:first_run_date+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:latest_run_date' => 'Latest run date~~',
|
||||
'Class:BackgroundTask/Attribute:latest_run_date' => '最近运行时间',
|
||||
'Class:BackgroundTask/Attribute:latest_run_date+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:next_run_date' => 'Next run date~~',
|
||||
'Class:BackgroundTask/Attribute:next_run_date' => '下次运行时间',
|
||||
'Class:BackgroundTask/Attribute:next_run_date+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:total_exec_count' => 'Total exec. count~~',
|
||||
'Class:BackgroundTask/Attribute:total_exec_count' => '一共执行的次数',
|
||||
'Class:BackgroundTask/Attribute:total_exec_count+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:latest_run_duration' => 'Latest run duration~~',
|
||||
'Class:BackgroundTask/Attribute:latest_run_duration' => '最近运行时长',
|
||||
'Class:BackgroundTask/Attribute:latest_run_duration+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:min_run_duration' => 'Min. run duration~~',
|
||||
'Class:BackgroundTask/Attribute:min_run_duration' => '最少运行时长',
|
||||
'Class:BackgroundTask/Attribute:min_run_duration+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:max_run_duration' => 'Max. run duration~~',
|
||||
'Class:BackgroundTask/Attribute:max_run_duration' => '最多运行时长',
|
||||
'Class:BackgroundTask/Attribute:max_run_duration+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:average_run_duration' => 'Average run duration~~',
|
||||
'Class:BackgroundTask/Attribute:average_run_duration' => '平均运行时长',
|
||||
'Class:BackgroundTask/Attribute:average_run_duration+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:running' => 'Running~~',
|
||||
'Class:BackgroundTask/Attribute:running+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:status' => 'Status~~',
|
||||
'Class:BackgroundTask/Attribute:status+' => '~~',
|
||||
'Class:BackgroundTask/Attribute:running' => '运行中',
|
||||
'Class:BackgroundTask/Attribute:running+' => '',
|
||||
'Class:BackgroundTask/Attribute:status' => '状态',
|
||||
'Class:BackgroundTask/Attribute:status+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: AsyncTask
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:AsyncTask' => 'Async. task~~',
|
||||
'Class:AsyncTask+' => '~~',
|
||||
'Class:AsyncTask/Attribute:created' => 'Created~~',
|
||||
'Class:AsyncTask/Attribute:created+' => '~~',
|
||||
'Class:AsyncTask/Attribute:started' => 'Started~~',
|
||||
'Class:AsyncTask/Attribute:started+' => '~~',
|
||||
'Class:AsyncTask/Attribute:planned' => 'Planned~~',
|
||||
'Class:AsyncTask/Attribute:planned+' => '~~',
|
||||
'Class:AsyncTask/Attribute:event_id' => 'Event~~',
|
||||
'Class:AsyncTask' => '异步任务',
|
||||
'Class:AsyncTask+' => '',
|
||||
'Class:AsyncTask/Attribute:created' => '已创建',
|
||||
'Class:AsyncTask/Attribute:created+' => '',
|
||||
'Class:AsyncTask/Attribute:started' => '已开始',
|
||||
'Class:AsyncTask/Attribute:started+' => '',
|
||||
'Class:AsyncTask/Attribute:planned' => '已计划',
|
||||
'Class:AsyncTask/Attribute:planned+' => '',
|
||||
'Class:AsyncTask/Attribute:event_id' => '事件',
|
||||
'Class:AsyncTask/Attribute:event_id+' => '~~',
|
||||
'Class:AsyncTask/Attribute:finalclass' => 'Final class~~',
|
||||
'Class:AsyncTask/Attribute:finalclass+' => '~~',
|
||||
|
||||
@@ -64,7 +64,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TagSetFieldData/Attribute:obj_class' => 'Object class~~',
|
||||
'Class:TagSetFieldData/Attribute:obj_attcode' => 'Field code~~',
|
||||
'Class:AuditRule/Attribute:query' => '要运行的查询',
|
||||
'Class:AuditRule/Attribute:query+' => '要运行的OQL表达式',
|
||||
'Class:AuditRule/Attribute:query+' => '要运行的OQL 表达式',
|
||||
'Class:AuditRule/Attribute:valid_flag' => '是否有效?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => '若规则返回有效对象则True,否则False',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'true',
|
||||
@@ -83,13 +83,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Query' => '查询',
|
||||
'Class:Query+' => 'A query is a data set defined in a dynamic way',
|
||||
'Class:Query+' => '查询是一种动态的数据集',
|
||||
'Class:Query/Attribute:name' => '名称',
|
||||
'Class:Query/Attribute:name+' => 'Identifies the query',
|
||||
'Class:Query/Attribute:name+' => '查询的名称',
|
||||
'Class:Query/Attribute:description' => '描述',
|
||||
'Class:Query/Attribute:description+' => 'Long description for the query (purpose, usage, etc.)',
|
||||
'Class:QueryOQL/Attribute:fields' => 'Fields~~',
|
||||
'Class:QueryOQL/Attribute:fields+' => 'Coma separated list of attributes (or alias.attribute) to export~~',
|
||||
'Class:Query/Attribute:description+' => '请描述本查询 (目的、用法等等.)',
|
||||
'Class:QueryOQL/Attribute:fields' => '区域',
|
||||
'Class:QueryOQL/Attribute:fields+' => '属性之间使用逗号分隔 (or alias.attribute) to export~~',
|
||||
'Class:QueryOQL' => 'OQL 查询',
|
||||
'Class:QueryOQL+' => 'A query based on the Object Query Language',
|
||||
'Class:QueryOQL/Attribute:oql' => '表达式',
|
||||
@@ -137,12 +137,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
'Class:User/Error:LoginMustBeUnique' => '登录名必须唯一 - "%1s" 已经被使用.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => '必须指定至少一个角色给该用户.',
|
||||
'Class:User/Error:AtLeastOneOrganizationIsNeeded' => 'At least one organization must be assigned to this user.',
|
||||
'Class:User/Error:OrganizationNotAllowed' => 'Organization not allowed.',
|
||||
'Class:User/Error:UserOrganizationNotAllowed' => 'The user account does not belong to your allowed organizations.',
|
||||
'Class:User/Error:PersonIsMandatory' => 'The Contact is mandatory.~~',
|
||||
'Class:User/Error:AtLeastOneOrganizationIsNeeded' => '必须为该用户指定一个组织.',
|
||||
'Class:User/Error:OrganizationNotAllowed' => '该组织不被允许.',
|
||||
'Class:User/Error:UserOrganizationNotAllowed' => '该用户账户不属于那个组织.',
|
||||
'Class:User/Error:PersonIsMandatory' => '联系人必填.',
|
||||
'Class:UserInternal' => '内部用户',
|
||||
'Class:UserInternal+' => 'User defined within iTop',
|
||||
'Class:UserInternal+' => 'iTop 内部定义的用户',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -317,14 +317,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Class: UserDashboard
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserDashboard' => 'User dashboard~~',
|
||||
'Class:UserDashboard+' => '~~',
|
||||
'Class:UserDashboard/Attribute:user_id' => 'User~~',
|
||||
'Class:UserDashboard/Attribute:user_id+' => '~~',
|
||||
'Class:UserDashboard/Attribute:menu_code' => 'Menu code~~',
|
||||
'Class:UserDashboard/Attribute:menu_code+' => '~~',
|
||||
'Class:UserDashboard/Attribute:contents' => 'Contents~~',
|
||||
'Class:UserDashboard/Attribute:contents+' => '~~',
|
||||
'Class:UserDashboard' => '用户面板',
|
||||
'Class:UserDashboard+' => '',
|
||||
'Class:UserDashboard/Attribute:user_id' => '用户',
|
||||
'Class:UserDashboard/Attribute:user_id+' => '',
|
||||
'Class:UserDashboard/Attribute:menu_code' => '菜单代码',
|
||||
'Class:UserDashboard/Attribute:menu_code+' => '',
|
||||
'Class:UserDashboard/Attribute:contents' => '内容',
|
||||
'Class:UserDashboard/Attribute:contents+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -352,30 +352,30 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:WelcomeMenuPage+' => '欢迎使用iTop', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'UI:WelcomeMenu:Title' => '欢迎使用iTop',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop是完全开源的IT操作门户.</p>
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop 是完全开源的IT 操作门户.</p>
|
||||
<ul>它包括:
|
||||
<li>完整的CMDB(Configuration management database),用于登记和管理您的IT资产.</li>
|
||||
<li>事件管理模块用于跟踪和传递所有发生在IT系统中的事件.</li>
|
||||
<li>变更管理模块用于规划和跟踪IT环境中发生的变化.</li>
|
||||
<li>完整的CMDB(Configuration management database),用于登记和管理您的IT 资产.</li>
|
||||
<li>事件管理模块用于跟踪和传递所有发生在IT 系统中的事件.</li>
|
||||
<li>变更管理模块用于规划和跟踪IT 环境中发生的变化.</li>
|
||||
<li>已知错误数据库可加速事件的处理.</li>
|
||||
<li>停机模块记录所有计划内的停机并通知对应的联系人.</li>
|
||||
<li>通过仪表盘迅速获得IT状态的概况.</li>
|
||||
<li>通过仪表盘迅速获得IT 状态的概况.</li>
|
||||
</ul>
|
||||
<p>所有模块可以各自独立地、一步步地部署.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop是面向服务供应商的, 它使得IT工程师能够更方便地管理多客户和多组织.
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop 是面向服务供应商的, 它使得IT 工程师能够更方便地管理多客户和多组织.
|
||||
<ul>iTop 提供功能丰富的业务处理流程:
|
||||
<li>提高IT管理效率</li>
|
||||
<li>提升IT可操作能力</li>
|
||||
<li>提高IT 管理效率</li>
|
||||
<li>提升IT 可操作能力</li>
|
||||
<li>提高用户满意度,提升业务能力.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop是完全开放的,可被集成到现有的IT管理架构之中.</p>
|
||||
<p>iTop 是完全开放的,可被集成到现有的IT 管理架构之中.</p>
|
||||
<p>
|
||||
<ul>利用这个新一代的IT操作门户, 可以帮助您:
|
||||
<li>更好地管理越来越复杂的IT环境.</li>
|
||||
<li>逐步实现ITIL流程.</li>
|
||||
<li>管理IT中最重要的资产: 文档.</li>
|
||||
<ul>利用这个新一代的IT 操作门户, 可以帮助您:
|
||||
<li>更好地管理越来越复杂的IT 环境.</li>
|
||||
<li>逐步实现ITIL 流程.</li>
|
||||
<li>管理IT 中最重要的资产: 文档.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => '所有打开的需求: %1$d',
|
||||
@@ -516,7 +516,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:SelectOne' => '-- 请选择 --',
|
||||
'UI:Login:Welcome' => '欢迎使用iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => '用户名或密码错误, 请重试.',
|
||||
'UI:Login:IdentifyYourself' => '在登录之前,请完成身份认证',
|
||||
'UI:Login:IdentifyYourself' => '请完成身份认证',
|
||||
'UI:Login:UserNamePrompt' => '用户名',
|
||||
'UI:Login:PasswordPrompt' => '密码',
|
||||
'UI:Login:ForgotPwd' => '忘记密码?',
|
||||
@@ -609,13 +609,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:CSVImport:CommentsAndHeader' => '注释和头',
|
||||
'UI:CSVImport:SelectClass' => '选择要导入的类别:',
|
||||
'UI:CSVImport:AdvancedMode' => '高级模式',
|
||||
'UI:CSVImport:AdvancedMode+' => '在高级模式中,对象的"id" (主键) 可以被用来修改和重命名对象.不管怎样,列 "id" (如果存在) 只能被用做一个搜索条件,不能与其它搜索条件混用.',
|
||||
'UI:CSVImport:SelectAClassFirst' => '首先选择一个类以配置映射.',
|
||||
'UI:CSVImport:AdvancedMode+' => 'In advanced mode the "id" (primary key) of the objects can be used to update and rename objects.' .
|
||||
'However the column "id" (if present) can only be used as a search criteria and can not be combined with any other search criteria.',
|
||||
'UI:CSVImport:SelectAClassFirst' => '要配置映射,请先选择一个类.',
|
||||
'UI:CSVImport:HeaderFields' => '栏目',
|
||||
'UI:CSVImport:HeaderMappings' => '映射',
|
||||
'UI:CSVImport:HeaderSearch' => '搜索?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => '请为每个栏选择一个映射.',
|
||||
'UI:CSVImport:AlertMultipleMapping' => 'Please make sure that a target field is mapped only once.',
|
||||
'UI:CSVImport:AlertMultipleMapping' => '请确保目标区域仅被映射一次.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => '请选择至少一个搜索条件',
|
||||
'UI:CSVImport:Encoding' => '字符编码',
|
||||
'UI:UniversalSearchTitle' => 'iTop - 全局搜索',
|
||||
@@ -904,28 +905,28 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => '按类别划分基础架构对象',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => '按状态划分基础架构对象',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表盘',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表盘',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => '需求管理仪表盘',
|
||||
'UI-RequestManagementOverview-RequestByService' => '按服务划分用户需求',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => '按优先级划分用户需求',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => '尚未分配给办理人的用户需求',
|
||||
'UI:RequestMgmtMenuOverview:Title' => '需求管理仪表盘',
|
||||
'UI-RequestManagementOverview-RequestByService' => '按服务划分用户需求',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => '按优先级划分用户需求',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => '尚未分配给办理人的用户需求',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => '事件管理仪表盘',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => '按服务级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => '按优先级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => '尚未分配给办理人的事件',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => '事件管理仪表盘',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => '按服务级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => '按优先级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => '尚未分配给办理人的事件',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => '变更管理仪表盘',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未分配给办理人的变更',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => '变更管理仪表盘',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未分配给办理人的变更',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表盘',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户合同需在30日内更新',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商合同需在30日内更新',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表盘',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户合同需在30日内更新',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商合同需在30日内更新',
|
||||
|
||||
'UI:ContactsMenu' => '联系人',
|
||||
'UI:ContactsMenu+' => '联系人',
|
||||
@@ -948,13 +949,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:NotificationsMenu:Title' => '配置 <span class="hilite">通知</span>',
|
||||
'UI:NotificationsMenu:Help' => '帮助',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>在iTop 中, 通知可以被自定义. 它们是基于两个对象集: <i>触发器和操作</i>.</p>
|
||||
<p><i><b>触发器</b></i> 定义了什么时候通知将被发送. 有3种触发器, 覆盖了对象生命周期的3个阶段:
|
||||
<p><i><b>触发器</b></i> 定义了什么时候发送通知. iTop core 自带一些触发器, 另一些触发器可由扩展提供:
|
||||
<ol>
|
||||
<li> "当对象创建时" ,即对象创建时会触发的操作.</li>
|
||||
<li> "进入指定状态时" ,即对象变为指定状态之前触发的操作(状态从一个变为另一个)</li>
|
||||
<li> "离开指定状态时" ,即对象的指定状态转变成其它状态时触发的操作</li>
|
||||
<li> "基于阀值" ,即对象的TTR 或 TTO 达到某个阀值时</li>
|
||||
<li> "当对象更新时" ,即工单发生变化时触发的操作</li>
|
||||
<li>Some triggers are executed when an object of the specified class is <b>created</b>, <b>updated</b> or <b>deleted</b>.</li>
|
||||
<li>Some triggers are executed when an object of a given class <b>enter</b> or <b>leave</b> a specified </b>state</b>.</li>
|
||||
<li>Some triggers are executed when a <b>threshold on TTO or TTR</b> has been <b>reached</b>.</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
@@ -972,11 +971,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:NotificationsMenu:Actions' => '操作',
|
||||
'UI:NotificationsMenu:AvailableActions' => '有效的操作',
|
||||
|
||||
'Menu:TagAdminMenu' => 'Tags configuration~~',
|
||||
'Menu:TagAdminMenu+' => 'Tags values management~~',
|
||||
'UI:TagAdminMenu:Title' => 'Tags configuration~~',
|
||||
'UI:TagAdminMenu:NoTags' => 'No Tag field configured~~',
|
||||
'UI:TagSetFieldData:Error' => 'Error: %1$s~~',
|
||||
'Menu:TagAdminMenu' => '标签配置',
|
||||
'Menu:TagAdminMenu+' => '标签值管理',
|
||||
'UI:TagAdminMenu:Title' => '标签配置',
|
||||
'UI:TagAdminMenu:NoTags' => '未配置标签',
|
||||
'UI:TagSetFieldData:Error' => '错误: %1$s',
|
||||
|
||||
'Menu:AuditCategories' => '审计类别', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:AuditCategories+' => '审计类别', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
@@ -1005,8 +1004,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:UserAccountsMenu+' => '用户帐户', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
'Menu:UserAccountsMenu:Title' => '用户帐户', // Duplicated into itop-welcome-itil (will be removed from here...)
|
||||
|
||||
'UI:iTopVersion:Short' => 'iTop-CN version %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop-CN version %1$s-%2$s built on %3$s by Purple_Grape',
|
||||
'UI:iTopVersion:Short' => '%1$s version %2$s',
|
||||
'UI:iTopVersion:Long' => '%1$s version %2$s-%3$s built on %4$s',
|
||||
'UI:PropertiesTab' => '属性',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => '在新窗口打开文档: %1$s',
|
||||
@@ -1015,7 +1014,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Download-CSV' => '下载 %1$s',
|
||||
|
||||
'UI:DeadlineMissedBy_duration' => '超过 %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 分钟',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
|
||||
@@ -1131,7 +1130,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:ArchiveMode:Banner' => '归档模式',
|
||||
'UI:ArchiveMode:Banner+' => '已归档的对象可见但不允许修改',
|
||||
'UI:FavoriteOrganizations' => '快速访问',
|
||||
'UI:FavoriteOrganizations+' => '为了能够通过首页左侧菜单快速访问,请检查下面的组织列表. 请注意,这并不是一个安全设置, 其他组织的对象依然可以通过选择 "所有组织" 下拉列表看到.',
|
||||
'UI:FavoriteOrganizations+' => '进入组织下的列表,可实现通过下拉菜单快速访问.'.
|
||||
'请注意,这并不是一个安全设置, 其他组织的对象依然可以通过选择 "所有组织" 下拉列表看到.',
|
||||
'UI:FavoriteLanguage' => '用户界面',
|
||||
'UI:Favorites:SelectYourLanguage' => '选择语言',
|
||||
'UI:FavoriteOtherSettings' => '其他设置',
|
||||
@@ -1147,13 +1147,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Button:Refresh' => '刷新',
|
||||
'UI:Button:GoPrint' => '打印...',
|
||||
'UI:ExplainPrintable' => '点击 %1$s 图标可隐藏打印内容.<br/>在打印之前可使用浏览器的 "打印预览" 功能.<br/>注: 这个页首和其他控制面板不会被打印.',
|
||||
'UI:PrintResolution:FullSize' => 'Full size~~',
|
||||
'UI:PrintResolution:A4Portrait' => 'A4 Portrait~~',
|
||||
'UI:PrintResolution:A4Landscape' => 'A4 Landscape~~',
|
||||
'UI:PrintResolution:FullSize' => '全尺寸',
|
||||
'UI:PrintResolution:A4Portrait' => 'A4 纵向',
|
||||
'UI:PrintResolution:A4Landscape' => 'A4 横向',
|
||||
'UI:PrintResolution:LetterPortrait' => 'Letter Portrait~~',
|
||||
'UI:PrintResolution:LetterLandscape' => 'Letter Landscape~~',
|
||||
'UI:Toggle:StandardDashboard' => 'Standard~~',
|
||||
'UI:Toggle:CustomDashboard' => 'Custom~~',
|
||||
'UI:Toggle:StandardDashboard' => '标准',
|
||||
'UI:Toggle:CustomDashboard' => '自定义',
|
||||
|
||||
'UI:ConfigureThisList' => '配置这个列表...',
|
||||
'UI:ListConfigurationTitle' => '列表配置',
|
||||
@@ -1201,16 +1201,16 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Form:Property' => '属性',
|
||||
'UI:Form:Value' => '值',
|
||||
|
||||
'UI:DashletUnknown:Label' => 'Unknown',
|
||||
'UI:DashletUnknown:Label' => '未知',
|
||||
'UI:DashletUnknown:Description' => 'Unknown dashlet (might have been uninstalled)',
|
||||
'UI:DashletUnknown:RenderText:View' => 'Unable to render this dashlet.',
|
||||
'UI:DashletUnknown:RenderText:Edit' => 'Unable to render this dashlet (class "%1$s"). Check with your administrator if it is still available.',
|
||||
'UI:DashletUnknown:RenderNoDataText:Edit' => 'No preview available for this dashlet (class "%1$s").',
|
||||
'UI:DashletUnknown:Prop-XMLConfiguration' => '配置 (显示为纯 XML)',
|
||||
|
||||
'UI:DashletProxy:Label' => 'Proxy',
|
||||
'UI:DashletProxy:Label' => '代理',
|
||||
'UI:DashletProxy:Description' => 'Proxy dashlet',
|
||||
'UI:DashletProxy:RenderNoDataText:Edit' => 'No preview available for this third-party dashlet (class "%1$s").',
|
||||
'UI:DashletProxy:RenderNoDataText:Edit' => '第三方组件无法预览(class "%1$s").',
|
||||
'UI:DashletProxy:Prop-XMLConfiguration' => '配置 (显示为纯 XML)',
|
||||
|
||||
'UI:DashletPlainText:Label' => '文本',
|
||||
@@ -1243,12 +1243,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:DashletGroupByBars:Label' => '柱状图',
|
||||
'UI:DashletGroupByBars:Description' => '柱状图',
|
||||
'UI:DashletGroupByTable:Label' => '分组 (表)',
|
||||
'UI:DashletGroupByTable:Description' => 'List (Grouped by a field)',
|
||||
'UI:DashletGroupByTable:Description' => '列表 (Grouped by a field)',
|
||||
|
||||
// New in 2.5
|
||||
'UI:DashletGroupBy:Prop-Function' => 'Aggregation function',
|
||||
'UI:DashletGroupBy:Prop-FunctionAttribute' => 'Function attribute',
|
||||
'UI:DashletGroupBy:Prop-OrderDirection' => 'Direction',
|
||||
'UI:DashletGroupBy:Prop-Function' => '聚合函数',
|
||||
'UI:DashletGroupBy:Prop-FunctionAttribute' => '函数属性',
|
||||
'UI:DashletGroupBy:Prop-OrderDirection' => '方向',
|
||||
'UI:DashletGroupBy:Prop-OrderField' => '排序',
|
||||
'UI:DashletGroupBy:Prop-Limit' => 'Limit',
|
||||
|
||||
@@ -1256,7 +1256,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:DashletGroupBy:Order:desc' => '降序',
|
||||
|
||||
'UI:GroupBy:count' => '个数',
|
||||
'UI:GroupBy:count+' => 'Number of elements',
|
||||
'UI:GroupBy:count+' => '元件的个数',
|
||||
'UI:GroupBy:sum' => '总数',
|
||||
'UI:GroupBy:sum+' => 'Sum of %1$s',
|
||||
'UI:GroupBy:avg' => '平均',
|
||||
@@ -1268,7 +1268,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// ---
|
||||
|
||||
'UI:DashletHeaderStatic:Label' => 'Header',
|
||||
'UI:DashletHeaderStatic:Description' => 'Displays an horizontal separator',
|
||||
'UI:DashletHeaderStatic:Description' => '显示水平分隔符',
|
||||
'UI:DashletHeaderStatic:Prop-Title' => '标题',
|
||||
'UI:DashletHeaderStatic:Prop-Title:Default' => '联系人',
|
||||
'UI:DashletHeaderStatic:Prop-Icon' => '图标',
|
||||
@@ -1278,7 +1278,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:DashletHeaderDynamic:Prop-Title' => '标题',
|
||||
'UI:DashletHeaderDynamic:Prop-Title:Default' => '联系人',
|
||||
'UI:DashletHeaderDynamic:Prop-Icon' => '图标',
|
||||
'UI:DashletHeaderDynamic:Prop-Subtitle' => 'Subtitle',
|
||||
'UI:DashletHeaderDynamic:Prop-Subtitle' => '副标题',
|
||||
'UI:DashletHeaderDynamic:Prop-Subtitle:Default' => '联系人',
|
||||
'UI:DashletHeaderDynamic:Prop-Query' => '查询',
|
||||
'UI:DashletHeaderDynamic:Prop-GroupBy' => 'Group by',
|
||||
@@ -1419,7 +1419,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:ConcurrentLockKilled' => '阻止并发修改当前对象的锁已被删除.',
|
||||
'UI:Menu:KillConcurrentLock' => '消除并发修改锁定!',
|
||||
|
||||
'UI:Menu:ExportPDF' => '导出 PDF...',
|
||||
'UI:Menu:ExportPDF' => '导出PDF...',
|
||||
'UI:Menu:PrintableVersion' => '打印',
|
||||
|
||||
'UI:BrowseInlineImages' => '浏览图片...',
|
||||
@@ -1440,7 +1440,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Search:Criterion:MoreMenu:AddCriteria' => '添加条件',
|
||||
// - Add new criteria button
|
||||
'UI:Search:AddCriteria:List:RecentlyUsed:Title' => '最近使用',
|
||||
'UI:Search:AddCriteria:List:MostPopular:Title' => '最热门',
|
||||
'UI:Search:AddCriteria:List:MostPopular:Title' => '最常用',
|
||||
'UI:Search:AddCriteria:List:Others:Title' => '其它',
|
||||
'UI:Search:AddCriteria:List:RecentlyUsed:Placeholder' => '还没有.',
|
||||
|
||||
@@ -1477,20 +1477,20 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Search:Criteria:Title:Enum:In:All' => '%1$s: 任何',
|
||||
// - TagSet widget
|
||||
'UI:Search:Criteria:Title:TagSet:Matches' => '%1$s: %2$s~~',
|
||||
// - External key widget
|
||||
'UI:Search:Criteria:Title:ExternalKey:Empty' => '%1$s 已定义',
|
||||
'UI:Search:Criteria:Title:ExternalKey:NotEmpty' => '%1$s 未被定义',
|
||||
'UI:Search:Criteria:Title:ExternalKey:Equals' => '%1$s %2$s',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In' => '%1$s: %2$s',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In:All' => '%1$s: 任何',
|
||||
// - Hierarchical key widget
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:Empty' => '%1$s 已定义',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:NotEmpty' => '%1$s 未被定义',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:Equals' => '%1$s %2$s',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In' => '%1$s: %2$s',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In:All' => '%1$s: 任何',
|
||||
// - External key widget
|
||||
'UI:Search:Criteria:Title:ExternalKey:Empty' => '%1$s 已定义',
|
||||
'UI:Search:Criteria:Title:ExternalKey:NotEmpty' => '%1$s 未被定义',
|
||||
'UI:Search:Criteria:Title:ExternalKey:Equals' => '%1$s %2$s',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In' => '%1$s: %2$s',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
|
||||
'UI:Search:Criteria:Title:ExternalKey:In:All' => '%1$s: 任何',
|
||||
// - Hierarchical key widget
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:Empty' => '%1$s 已定义',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:NotEmpty' => '%1$s 未被定义',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:Equals' => '%1$s %2$s',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In' => '%1$s: %2$s',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
|
||||
'UI:Search:Criteria:Title:HierarchicalKey:In:All' => '%1$s: 任何',
|
||||
|
||||
// - Criteria operators
|
||||
// - Default widget
|
||||
@@ -1559,19 +1559,19 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Expression:Unit:Long:MINUTE' => '分钟',
|
||||
|
||||
'Expression:Verb:NOW' => '现在',
|
||||
'Expression:Verb:ISNULL' => ': undefined~~',
|
||||
'Expression:Verb:ISNULL' => ': 未定义',
|
||||
));
|
||||
|
||||
//
|
||||
// iTop Newsroom menu
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'UI:Newsroom:NoNewMessage' => 'No new message~~',
|
||||
'UI:Newsroom:MarkAllAsRead' => 'Mark all messages as read~~',
|
||||
'UI:Newsroom:ViewAllMessages' => 'View all messages~~',
|
||||
'UI:Newsroom:Preferences' => 'Newsroom preferences~~',
|
||||
'UI:Newsroom:ConfigurationLink' => 'Configuration~~',
|
||||
'UI:Newsroom:ResetCache' => 'Reset cache~~',
|
||||
'UI:Newsroom:DisplayMessagesFor_Provider' => 'Display messages from %1$s~~',
|
||||
'UI:Newsroom:DisplayAtMost_X_Messages' => 'Display up to %1$s messages in the %2$s menu.~~',
|
||||
'UI:Newsroom:NoNewMessage' => '没有新消息',
|
||||
'UI:Newsroom:MarkAllAsRead' => '标记所有消息为已读',
|
||||
'UI:Newsroom:ViewAllMessages' => '查看全部消息',
|
||||
'UI:Newsroom:Preferences' => '消息选项',
|
||||
'UI:Newsroom:ConfigurationLink' => '配置',
|
||||
'UI:Newsroom:ResetCache' => '重置缓存',
|
||||
'UI:Newsroom:DisplayMessagesFor_Provider' => '显示来自 %1$s 的消息',
|
||||
'UI:Newsroom:DisplayAtMost_X_Messages' => '在 %2$s 菜单中最多显示 %1$s 条消息.',
|
||||
));
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
success(term,parsed);
|
||||
}
|
||||
// if an AJAX url has been supplied, try loading the data now
|
||||
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
|
||||
} else if( (typeof options.url == "string") && (options.url.length > 0) && (term.length > 0) ){
|
||||
|
||||
var extraParams = {
|
||||
timestamp: +new Date()
|
||||
@@ -479,7 +479,7 @@
|
||||
minChars: 1,
|
||||
delay: 400,
|
||||
matchCase: false,
|
||||
matchSubset: true,
|
||||
matchSubset: false,
|
||||
matchContains: false,
|
||||
cacheLength: 100,
|
||||
max: 1000,
|
||||
@@ -640,7 +640,10 @@
|
||||
});
|
||||
}
|
||||
}
|
||||
return csub;
|
||||
if ( csub.length > 0 ) {
|
||||
return csub;
|
||||
}
|
||||
return null;
|
||||
} else
|
||||
// if the exact item exists, use it
|
||||
if (data[q]){
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
Unreleased
|
||||
- fix Undesired mouseover effect on links in PDF on Chrome Pdf Viewer
|
||||
6.2.25
|
||||
- Fix support for image URLs.
|
||||
|
||||
6.2.24
|
||||
- Support remote urls when checking if file exists.
|
||||
|
||||
6.2.23
|
||||
- Simplify file_exists function.
|
||||
|
||||
6.2.22
|
||||
- Fix for security vulnerability: Using the phar:// wrapper it was possible to trigger the unserialization of user provided data.
|
||||
|
||||
6.2.19
|
||||
- Merge various fixes for PHP 7.3 compatibility and security.
|
||||
|
||||
6.2.13 (2016-06-10)
|
||||
- IMPORTANT: A new version of this library is under development at https://github.com/tecnickcom/tc-lib-pdf and as a consequence this version will not receive any additional development or support. This version should be considered obsolete, new projects should use the new version as soon it will become stable.
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
TCPDF - README
|
||||
============================================================
|
||||
|
||||
I WISH TO IMPROVE AND EXPAND TCPDF BUT I NEED YOUR SUPPORT.
|
||||
PLEASE MAKE A DONATION:
|
||||
http://sourceforge.net/donate/index.php?group_id=128076
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
Name: TCPDF
|
||||
Version: 6.2.6
|
||||
Release date: 2015-01-28
|
||||
Author: Nicola Asuni
|
||||
|
||||
Copyright (c) 2002-2015:
|
||||
Nicola Asuni
|
||||
Tecnick.com LTD
|
||||
www.tecnick.com
|
||||
|
||||
URLs:
|
||||
http://www.tcpdf.org
|
||||
http://www.sourceforge.net/projects/tcpdf
|
||||
|
||||
Description:
|
||||
TCPDF is a PHP class for generating PDF files on-the-fly without requiring external extensions.
|
||||
This library includes also a class to extract data from existing PDF documents and
|
||||
classes to generate 1D and 2D barcodes in various formats.
|
||||
|
||||
Main Features:
|
||||
* no external libraries are required for the basic functions;
|
||||
* all standard page formats, custom page formats, custom margins and units of measure;
|
||||
* UTF-8 Unicode and Right-To-Left languages;
|
||||
* TrueTypeUnicode, OpenTypeUnicode v1, TrueType, OpenType v1, Type1 and CID-0 fonts;
|
||||
* font subsetting;
|
||||
* methods to publish some XHTML + CSS code, Javascript and Forms;
|
||||
* images, graphic (geometric figures) and transformation methods;
|
||||
* supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http: www.imagemagick.org/www/formats.html)
|
||||
* 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
|
||||
* JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
||||
* automatic page header and footer management;
|
||||
* document encryption up to 256 bit and digital signature certifications;
|
||||
* transactions to UNDO commands;
|
||||
* PDF annotations, including links, text and file attachments;
|
||||
* text rendering modes (fill, stroke and clipping);
|
||||
* multiple columns mode;
|
||||
* no-write page regions;
|
||||
* bookmarks, named destinations and table of content;
|
||||
* text hyphenation;
|
||||
* text stretching and spacing (tracking);
|
||||
* automatic page break, line break and text alignments including justification;
|
||||
* automatic page numbering and page groups;
|
||||
* move and delete pages;
|
||||
* page compression (requires php-zlib extension);
|
||||
* XOBject Templates;
|
||||
* Layers and object visibility.
|
||||
* PDF/A-1b support.
|
||||
|
||||
Installation (full instructions on http: www.tcpdf.org):
|
||||
1. copy the folder on your Web server
|
||||
2. set your installation path and other parameters on the config/tcpdf_config.php
|
||||
3. call the examples/example_001.php page with your browser to see an example
|
||||
|
||||
Source Code Documentation:
|
||||
http://www.tcpdf.org
|
||||
|
||||
Additional Documentation:
|
||||
http://www.tcpdf.org
|
||||
|
||||
License:
|
||||
Copyright (C) 2002-2014 Nicola Asuni - Tecnick.com LTD
|
||||
|
||||
TCPDF is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
TCPDF 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the License
|
||||
along with TCPDF. If not, see
|
||||
<http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>.
|
||||
|
||||
See LICENSE.TXT file for more information.
|
||||
|
||||
Third party fonts:
|
||||
|
||||
This library may include third party font files released with different licenses.
|
||||
|
||||
All the PHP files on the fonts directory are subject to the general TCPDF license (GNU-LGPLv3),
|
||||
they do not contain any binary data but just a description of the general properties of a particular font.
|
||||
These files can be also generated on the fly using the font utilities and TCPDF methods.
|
||||
|
||||
All the original binary TTF font files have been renamed for compatibility with TCPDF and compressed using the gzcompress PHP function that uses the ZLIB data format (.z files).
|
||||
|
||||
The binary files (.z) that begins with the prefix "free" have been extracted from the GNU FreeFont collection (GNU-GPLv3).
|
||||
The binary files (.z) that begins with the prefix "pdfa" have been derived from the GNU FreeFont, so they are subject to the same license.
|
||||
For the details of Copyright, License and other information, please check the files inside the directory fonts/freefont-20120503
|
||||
Link : http://www.gnu.org/software/freefont/
|
||||
|
||||
The binary files (.z) that begins with the prefix "dejavu" have been extracted from the DejaVu fonts 2.33 (Bitstream) collection.
|
||||
For the details of Copyright, License and other information, please check the files inside the directory fonts/dejavu-fonts-ttf-2.33
|
||||
Link : http://dejavu-fonts.org
|
||||
|
||||
The binary files (.z) that begins with the prefix "ae" have been extracted from the Arabeyes.org collection (GNU-GPLv2).
|
||||
Link : http://projects.arabeyes.org/
|
||||
|
||||
ICC profile:
|
||||
TCPDF includes the sRGB.icc profile from the icc-profiles-free Debian package:
|
||||
https://packages.debian.org/source/stable/icc-profiles-free
|
||||
|
||||
|
||||
============================================================
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"version": "6.2.17",
|
||||
"version": "6.2.26",
|
||||
"homepage": "http://www.tcpdf.org/",
|
||||
"type": "library",
|
||||
"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
|
||||
|
||||
@@ -70,7 +70,7 @@ class TCPDF_FONTS {
|
||||
* @public static
|
||||
*/
|
||||
public static function addTTFfont($fontfile, $fonttype='', $enc='', $flags=32, $outpath='', $platid=3, $encid=1, $addcbbox=false, $link=false) {
|
||||
if (!file_exists($fontfile)) {
|
||||
if (!TCPDF_STATIC::file_exists($fontfile)) {
|
||||
// Could not find file
|
||||
return false;
|
||||
}
|
||||
@@ -95,7 +95,7 @@ class TCPDF_FONTS {
|
||||
$outpath = self::_getfontpath();
|
||||
}
|
||||
// check if this font already exist
|
||||
if (@file_exists($outpath.$font_name.'.php')) {
|
||||
if (@TCPDF_STATIC::file_exists($outpath.$font_name.'.php')) {
|
||||
// this font already exist (delete it from fonts folder to rebuild it)
|
||||
return $font_name;
|
||||
}
|
||||
@@ -1543,11 +1543,11 @@ class TCPDF_FONTS {
|
||||
public static function getFontFullPath($file, $fontdir=false) {
|
||||
$fontfile = '';
|
||||
// search files on various directories
|
||||
if (($fontdir !== false) AND @file_exists($fontdir.$file)) {
|
||||
if (($fontdir !== false) AND @TCPDF_STATIC::file_exists($fontdir.$file)) {
|
||||
$fontfile = $fontdir.$file;
|
||||
} elseif (@file_exists(self::_getfontpath().$file)) {
|
||||
} elseif (@TCPDF_STATIC::file_exists(self::_getfontpath().$file)) {
|
||||
$fontfile = self::_getfontpath().$file;
|
||||
} elseif (@file_exists($file)) {
|
||||
} elseif (@TCPDF_STATIC::file_exists($file)) {
|
||||
$fontfile = $file;
|
||||
}
|
||||
return $fontfile;
|
||||
@@ -2003,7 +2003,11 @@ class TCPDF_FONTS {
|
||||
$chars = str_split($str);
|
||||
$carr = array_map('ord', $chars);
|
||||
}
|
||||
$currentfont['subsetchars'] += array_fill_keys($carr, true);
|
||||
if (is_array($currentfont['subsetchars']) && is_array($carr)) {
|
||||
$currentfont['subsetchars'] += array_fill_keys($carr, true);
|
||||
} else {
|
||||
$currentfont['subsetchars'] = array_merge($currentfont['subsetchars'], $carr);
|
||||
}
|
||||
return $carr;
|
||||
}
|
||||
|
||||
|
||||
@@ -161,12 +161,8 @@ class TCPDF_IMAGES {
|
||||
*/
|
||||
public static function _parsejpeg($file) {
|
||||
// check if is a local file
|
||||
if (!@file_exists($file)) {
|
||||
// try to encode spaces on filename
|
||||
$tfile = str_replace(' ', '%20', $file);
|
||||
if (@file_exists($tfile)) {
|
||||
$file = $tfile;
|
||||
}
|
||||
if (!@TCPDF_STATIC::file_exists($file)) {
|
||||
return false;
|
||||
}
|
||||
$a = getimagesize($file);
|
||||
if (empty($a)) {
|
||||
|
||||
@@ -55,7 +55,7 @@ class TCPDF_STATIC {
|
||||
* Current TCPDF version.
|
||||
* @private static
|
||||
*/
|
||||
private static $tcpdf_version = '6.2.17';
|
||||
private static $tcpdf_version = '6.2.26';
|
||||
|
||||
/**
|
||||
* String alias for total number of pages.
|
||||
@@ -1774,39 +1774,6 @@ class TCPDF_STATIC {
|
||||
return $angle;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ====================================================================================================================
|
||||
// REIMPLEMENTED
|
||||
// ====================================================================================================================
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Split string by a regular expression.
|
||||
* This is a wrapper for the preg_split function to avoid the bug: https://bugs.php.net/bug.php?id=45850
|
||||
@@ -1854,6 +1821,49 @@ class TCPDF_STATIC {
|
||||
return fopen($filename, $mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the URL exist.
|
||||
* @param url (string) URL to check.
|
||||
* @return Returns TRUE if the URL exists; FALSE otherwise.
|
||||
* @public static
|
||||
*/
|
||||
public static function url_exists($url) {
|
||||
$crs = curl_init();
|
||||
curl_setopt($crs, CURLOPT_URL, $url);
|
||||
curl_setopt($crs, CURLOPT_NOBODY, true);
|
||||
curl_setopt($crs, CURLOPT_FAILONERROR, true);
|
||||
if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) {
|
||||
curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true);
|
||||
}
|
||||
curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5);
|
||||
curl_setopt($crs, CURLOPT_TIMEOUT, 30);
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file');
|
||||
curl_exec($crs);
|
||||
$code = curl_getinfo($crs, CURLINFO_HTTP_CODE);
|
||||
curl_close($crs);
|
||||
return ($code == 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for file_exists.
|
||||
* Checks whether a file or directory exists.
|
||||
* Only allows some protocols and local files.
|
||||
* @param filename (string) Path to the file or directory.
|
||||
* @return Returns TRUE if the file or directory specified by filename exists; FALSE otherwise.
|
||||
* @public static
|
||||
*/
|
||||
public static function file_exists($filename) {
|
||||
if (preg_match('|^https?://|', $filename) == 1) {
|
||||
return self::url_exists($filename);
|
||||
}
|
||||
if (strpos($filename, '://')) {
|
||||
return false; // only support http and https wrappers for security reasons
|
||||
}
|
||||
return @file_exists($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads entire file into a string.
|
||||
* The file can be also an URL.
|
||||
@@ -1914,8 +1924,10 @@ class TCPDF_STATIC {
|
||||
}
|
||||
//
|
||||
$alt = array_unique($alt);
|
||||
//var_dump($alt);exit;//DEBUG
|
||||
foreach ($alt as $path) {
|
||||
if (!self::file_exists($path)) {
|
||||
return false;
|
||||
}
|
||||
$ret = @file_get_contents($path);
|
||||
if ($ret !== false) {
|
||||
return $ret;
|
||||
@@ -1949,8 +1961,6 @@ class TCPDF_STATIC {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get ULONG from string (Big Endian 32-bit unsigned integer).
|
||||
* @param $str (string) string from where to extract value
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?php
|
||||
//============================================================+
|
||||
// File name : tcpdf.php
|
||||
// Version : 6.2.13
|
||||
// Version : 6.2.26
|
||||
// Begin : 2002-08-03
|
||||
// Last Update : 2015-06-18
|
||||
// Last Update : 2018-09-14
|
||||
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
|
||||
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
|
||||
// -------------------------------------------------------------------
|
||||
// Copyright (C) 2002-2015 Nicola Asuni - Tecnick.com LTD
|
||||
// Copyright (C) 2002-2018 Nicola Asuni - Tecnick.com LTD
|
||||
//
|
||||
// This file is part of TCPDF software library.
|
||||
//
|
||||
@@ -104,7 +104,7 @@
|
||||
* Tools to encode your unicode fonts are on fonts/utils directory.</p>
|
||||
* @package com.tecnick.tcpdf
|
||||
* @author Nicola Asuni
|
||||
* @version 6.2.8
|
||||
* @version 6.2.26
|
||||
*/
|
||||
|
||||
// TCPDF configuration
|
||||
@@ -128,8 +128,11 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php');
|
||||
* TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
|
||||
* @package com.tecnick.tcpdf
|
||||
* @brief PHP class for generating PDF documents without requiring external extensions.
|
||||
* @version 6.2.8
|
||||
* @version 6.2.26
|
||||
* @author Nicola Asuni - info@tecnick.com
|
||||
* @IgnoreAnnotation("protected")
|
||||
* @IgnoreAnnotation("public")
|
||||
* @IgnoreAnnotation("pre")
|
||||
*/
|
||||
class TCPDF {
|
||||
|
||||
@@ -1994,10 +1997,6 @@ class TCPDF {
|
||||
* @since 1.53.0.TC016
|
||||
*/
|
||||
public function __destruct() {
|
||||
// restore internal encoding
|
||||
if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
|
||||
mb_internal_encoding($this->internal_encoding);
|
||||
}
|
||||
// cleanup
|
||||
$this->_destroy(true);
|
||||
}
|
||||
@@ -4257,7 +4256,7 @@ class TCPDF {
|
||||
// true when the font style variation is missing
|
||||
$missing_style = false;
|
||||
// search and include font file
|
||||
if (TCPDF_STATIC::empty_string($fontfile) OR (!@file_exists($fontfile))) {
|
||||
if (TCPDF_STATIC::empty_string($fontfile) OR (!@TCPDF_STATIC::file_exists($fontfile))) {
|
||||
// build a standard filenames for specified font
|
||||
$tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php';
|
||||
$fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir);
|
||||
@@ -4269,7 +4268,7 @@ class TCPDF {
|
||||
}
|
||||
}
|
||||
// include font file
|
||||
if (!TCPDF_STATIC::empty_string($fontfile) AND (@file_exists($fontfile))) {
|
||||
if (!TCPDF_STATIC::empty_string($fontfile) AND (@TCPDF_STATIC::file_exists($fontfile))) {
|
||||
include($fontfile);
|
||||
} else {
|
||||
$this->Error('Could not include font definition file: '.$family.'');
|
||||
@@ -4453,6 +4452,7 @@ class TCPDF {
|
||||
* @see SetFont()
|
||||
*/
|
||||
public function SetFontSize($size, $out=true) {
|
||||
$size = (float)$size;
|
||||
// font size in points
|
||||
$this->FontSizePt = $size;
|
||||
// font size in user units
|
||||
@@ -4809,19 +4809,19 @@ class TCPDF {
|
||||
$this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
|
||||
if (!$this->pdfa_mode) {
|
||||
if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS']))
|
||||
AND (@file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS']))
|
||||
AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS']))
|
||||
AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
|
||||
$this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']);
|
||||
}
|
||||
}
|
||||
// Add widgets annotation's icons
|
||||
if (isset($opt['mk']['i']) AND @file_exists($opt['mk']['i'])) {
|
||||
if (isset($opt['mk']['i']) AND @TCPDF_STATIC::file_exists($opt['mk']['i'])) {
|
||||
$this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true);
|
||||
}
|
||||
if (isset($opt['mk']['ri']) AND @file_exists($opt['mk']['ri'])) {
|
||||
if (isset($opt['mk']['ri']) AND @TCPDF_STATIC::file_exists($opt['mk']['ri'])) {
|
||||
$this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
|
||||
}
|
||||
if (isset($opt['mk']['ix']) AND @file_exists($opt['mk']['ix'])) {
|
||||
if (isset($opt['mk']['ix']) AND @TCPDF_STATIC::file_exists($opt['mk']['ix'])) {
|
||||
$this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
|
||||
}
|
||||
}
|
||||
@@ -5769,10 +5769,9 @@ class TCPDF {
|
||||
$this->resetLastH();
|
||||
}
|
||||
if (!TCPDF_STATIC::empty_string($y)) {
|
||||
$this->SetY($y);
|
||||
} else {
|
||||
$y = $this->GetY();
|
||||
$this->SetY($y); // set y in order to convert negative y values to positive ones
|
||||
}
|
||||
$y = $this->GetY();
|
||||
$resth = 0;
|
||||
if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) {
|
||||
// spit cell in more pages/columns
|
||||
@@ -6845,13 +6844,9 @@ class TCPDF {
|
||||
$file = substr($file, 1);
|
||||
$exurl = $file;
|
||||
}
|
||||
// check if is a local file
|
||||
if (!@file_exists($file)) {
|
||||
// try to encode spaces on filename
|
||||
$tfile = str_replace(' ', '%20', $file);
|
||||
if (@file_exists($tfile)) {
|
||||
$file = $tfile;
|
||||
}
|
||||
// check if file exist and it is valid
|
||||
if (!@TCPDF_STATIC::file_exists($file)) {
|
||||
return false;
|
||||
}
|
||||
if (($imsize = @getimagesize($file)) === FALSE) {
|
||||
if (in_array($file, $this->imagekeys)) {
|
||||
@@ -7750,6 +7745,10 @@ class TCPDF {
|
||||
* @since 4.5.016 (2009-02-24)
|
||||
*/
|
||||
public function _destroy($destroyall=false, $preserve_objcopy=false) {
|
||||
// restore internal encoding
|
||||
if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
|
||||
mb_internal_encoding($this->internal_encoding);
|
||||
}
|
||||
if ($destroyall AND !$preserve_objcopy) {
|
||||
// remove all temporary files
|
||||
$tmpfiles = glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*');
|
||||
@@ -9648,7 +9647,7 @@ class TCPDF {
|
||||
protected function _putcatalog() {
|
||||
// put XMP
|
||||
$xmpobj = $this->_putXMP();
|
||||
// if required, add standard sRGB_IEC61966-2.1 blackscaled ICC colour profile
|
||||
// if required, add standard sRGB ICC colour profile
|
||||
if ($this->pdfa_mode OR $this->force_srgb) {
|
||||
$iccobj = $this->_newobj();
|
||||
$icc = file_get_contents(dirname(__FILE__).'/include/sRGB.icc');
|
||||
@@ -17783,7 +17782,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
// justify block
|
||||
if (!TCPDF_STATIC::empty_string($this->lispacer)) {
|
||||
$this->lispacer = '';
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches);
|
||||
if (!isset($xmatches[1])) {
|
||||
@@ -18318,7 +18317,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
}
|
||||
// text
|
||||
$this->htmlvspace = 0;
|
||||
if ((!$this->premode) AND $this->isRTLTextDir()) {
|
||||
$isRTLString = preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $dom[$key]['value']) || preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $dom[$key]['value']);
|
||||
if ((!$this->premode) AND $this->isRTLTextDir() AND !$isRTLString) {
|
||||
// reverse spaces order
|
||||
$lsp = ''; // left spaces
|
||||
$rsp = ''; // right spaces
|
||||
@@ -18333,7 +18333,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
if ($newline) {
|
||||
if (!$this->premode) {
|
||||
$prelen = strlen($dom[$key]['value']);
|
||||
if ($this->isRTLTextDir()) {
|
||||
if ($this->isRTLTextDir() AND !$isRTLString) {
|
||||
// right trim except non-breaking space
|
||||
$dom[$key]['value'] = $this->stringRightTrim($dom[$key]['value']);
|
||||
} else {
|
||||
@@ -18817,102 +18817,124 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
break;
|
||||
}
|
||||
case 'img': {
|
||||
if (!empty($tag['attribute']['src'])) {
|
||||
if ($tag['attribute']['src'][0] === '@') {
|
||||
// data stream
|
||||
$tag['attribute']['src'] = '@'.base64_decode(substr($tag['attribute']['src'], 1));
|
||||
$type = '';
|
||||
} else {
|
||||
// get image type
|
||||
$type = TCPDF_IMAGES::getImageFileType($tag['attribute']['src']);
|
||||
}
|
||||
if (!isset($tag['width'])) {
|
||||
$tag['width'] = 0;
|
||||
}
|
||||
if (!isset($tag['height'])) {
|
||||
$tag['height'] = 0;
|
||||
}
|
||||
//if (!isset($tag['attribute']['align'])) {
|
||||
// the only alignment supported is "bottom"
|
||||
// further development is required for other modes.
|
||||
$tag['attribute']['align'] = 'bottom';
|
||||
//}
|
||||
switch($tag['attribute']['align']) {
|
||||
case 'top': {
|
||||
$align = 'T';
|
||||
break;
|
||||
}
|
||||
case 'middle': {
|
||||
$align = 'M';
|
||||
break;
|
||||
}
|
||||
case 'bottom': {
|
||||
$align = 'B';
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
$align = 'B';
|
||||
break;
|
||||
}
|
||||
}
|
||||
$prevy = $this->y;
|
||||
$xpos = $this->x;
|
||||
$imglink = '';
|
||||
if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) {
|
||||
$imglink = $this->HREF['url'];
|
||||
if ($imglink[0] == '#') {
|
||||
// convert url to internal link
|
||||
$lnkdata = explode(',', $imglink);
|
||||
if (isset($lnkdata[0])) {
|
||||
$page = intval(substr($lnkdata[0], 1));
|
||||
if (empty($page) OR ($page <= 0)) {
|
||||
$page = $this->page;
|
||||
}
|
||||
if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
|
||||
$lnky = floatval($lnkdata[1]);
|
||||
} else {
|
||||
$lnky = 0;
|
||||
}
|
||||
$imglink = $this->AddLink();
|
||||
$this->SetLink($imglink, $lnky, $page);
|
||||
if (empty($tag['attribute']['src'])) {
|
||||
break;
|
||||
}
|
||||
$imgsrc = $tag['attribute']['src'];
|
||||
if ($imgsrc[0] === '@') {
|
||||
// data stream
|
||||
$imgsrc = '@'.base64_decode(substr($imgsrc, 1));
|
||||
$type = '';
|
||||
} else {
|
||||
if (($imgsrc[0] === '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) {
|
||||
// fix image path
|
||||
$findroot = strpos($imgsrc, $_SERVER['DOCUMENT_ROOT']);
|
||||
if (($findroot === false) OR ($findroot > 1)) {
|
||||
if (substr($_SERVER['DOCUMENT_ROOT'], -1) == '/') {
|
||||
$imgsrc = substr($_SERVER['DOCUMENT_ROOT'], 0, -1).$imgsrc;
|
||||
} else {
|
||||
$imgsrc = $_SERVER['DOCUMENT_ROOT'].$imgsrc;
|
||||
}
|
||||
}
|
||||
}
|
||||
$border = 0;
|
||||
if (isset($tag['border']) AND !empty($tag['border'])) {
|
||||
// currently only support 1 (frame) or a combination of 'LTRB'
|
||||
$border = $tag['border'];
|
||||
}
|
||||
$iw = '';
|
||||
if (isset($tag['width'])) {
|
||||
$iw = $this->getHTMLUnitToUnits($tag['width'], ($tag['fontsize'] / $this->k), 'px', false);
|
||||
}
|
||||
$ih = '';
|
||||
if (isset($tag['height'])) {
|
||||
$ih = $this->getHTMLUnitToUnits($tag['height'], ($tag['fontsize'] / $this->k), 'px', false);
|
||||
}
|
||||
if (($type == 'eps') OR ($type == 'ai')) {
|
||||
$this->ImageEps($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true);
|
||||
} elseif ($type == 'svg') {
|
||||
$this->ImageSVG($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true);
|
||||
} else {
|
||||
$this->Image($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true);
|
||||
}
|
||||
switch($align) {
|
||||
case 'T': {
|
||||
$this->y = $prevy;
|
||||
break;
|
||||
$imgsrc = urldecode($imgsrc);
|
||||
$testscrtype = @parse_url($imgsrc);
|
||||
if (empty($testscrtype['query'])) {
|
||||
// convert URL to server path
|
||||
$imgsrc = str_replace(K_PATH_URL, K_PATH_MAIN, $imgsrc);
|
||||
} elseif (preg_match('|^https?://|', $imgsrc) !== 1) {
|
||||
// convert URL to server path
|
||||
$imgsrc = str_replace(K_PATH_MAIN, K_PATH_URL, $imgsrc);
|
||||
}
|
||||
case 'M': {
|
||||
$this->y = (($this->img_rb_y + $prevy - ($this->getCellHeight($tag['fontsize'] / $this->k))) / 2);
|
||||
break;
|
||||
}
|
||||
case 'B': {
|
||||
$this->y = $this->img_rb_y - ($this->getCellHeight($tag['fontsize'] / $this->k) - ($this->getFontDescent($tag['fontname'], $tag['fontstyle'], $tag['fontsize']) * $this->cell_height_ratio));
|
||||
break;
|
||||
}
|
||||
// get image type
|
||||
$type = TCPDF_IMAGES::getImageFileType($imgsrc);
|
||||
}
|
||||
if (!isset($tag['width'])) {
|
||||
$tag['width'] = 0;
|
||||
}
|
||||
if (!isset($tag['height'])) {
|
||||
$tag['height'] = 0;
|
||||
}
|
||||
//if (!isset($tag['attribute']['align'])) {
|
||||
// the only alignment supported is "bottom"
|
||||
// further development is required for other modes.
|
||||
$tag['attribute']['align'] = 'bottom';
|
||||
//}
|
||||
switch($tag['attribute']['align']) {
|
||||
case 'top': {
|
||||
$align = 'T';
|
||||
break;
|
||||
}
|
||||
case 'middle': {
|
||||
$align = 'M';
|
||||
break;
|
||||
}
|
||||
case 'bottom': {
|
||||
$align = 'B';
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
$align = 'B';
|
||||
break;
|
||||
}
|
||||
}
|
||||
$prevy = $this->y;
|
||||
$xpos = $this->x;
|
||||
$imglink = '';
|
||||
if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) {
|
||||
$imglink = $this->HREF['url'];
|
||||
if ($imglink[0] == '#') {
|
||||
// convert url to internal link
|
||||
$lnkdata = explode(',', $imglink);
|
||||
if (isset($lnkdata[0])) {
|
||||
$page = intval(substr($lnkdata[0], 1));
|
||||
if (empty($page) OR ($page <= 0)) {
|
||||
$page = $this->page;
|
||||
}
|
||||
if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
|
||||
$lnky = floatval($lnkdata[1]);
|
||||
} else {
|
||||
$lnky = 0;
|
||||
}
|
||||
$imglink = $this->AddLink();
|
||||
$this->SetLink($imglink, $lnky, $page);
|
||||
}
|
||||
}
|
||||
}
|
||||
$border = 0;
|
||||
if (isset($tag['border']) AND !empty($tag['border'])) {
|
||||
// currently only support 1 (frame) or a combination of 'LTRB'
|
||||
$border = $tag['border'];
|
||||
}
|
||||
$iw = '';
|
||||
if (isset($tag['width'])) {
|
||||
$iw = $this->getHTMLUnitToUnits($tag['width'], ($tag['fontsize'] / $this->k), 'px', false);
|
||||
}
|
||||
$ih = '';
|
||||
if (isset($tag['height'])) {
|
||||
$ih = $this->getHTMLUnitToUnits($tag['height'], ($tag['fontsize'] / $this->k), 'px', false);
|
||||
}
|
||||
if (($type == 'eps') OR ($type == 'ai')) {
|
||||
$this->ImageEps($imgsrc, $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true);
|
||||
} elseif ($type == 'svg') {
|
||||
$this->ImageSVG($imgsrc, $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true);
|
||||
} else {
|
||||
$this->Image($imgsrc, $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true);
|
||||
}
|
||||
switch($align) {
|
||||
case 'T': {
|
||||
$this->y = $prevy;
|
||||
break;
|
||||
}
|
||||
case 'M': {
|
||||
$this->y = (($this->img_rb_y + $prevy - ($this->getCellHeight($tag['fontsize'] / $this->k))) / 2);
|
||||
break;
|
||||
}
|
||||
case 'B': {
|
||||
$this->y = $this->img_rb_y - ($this->getCellHeight($tag['fontsize'] / $this->k) - ($this->getFontDescent($tag['fontname'], $tag['fontstyle'], $tag['fontsize']) * $this->cell_height_ratio));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'dl': {
|
||||
@@ -24206,9 +24228,12 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
}
|
||||
$img = urldecode($img);
|
||||
$testscrtype = @parse_url($img);
|
||||
if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) {
|
||||
if (empty($testscrtype['query'])) {
|
||||
// convert URL to server path
|
||||
$img = str_replace(K_PATH_URL, K_PATH_MAIN, $img);
|
||||
} elseif (preg_match('|^https?://|', $img) !== 1) {
|
||||
// convert server path to URL
|
||||
$img = str_replace(K_PATH_MAIN, K_PATH_URL, $img);
|
||||
}
|
||||
}
|
||||
// get image type
|
||||
|
||||
@@ -58,7 +58,7 @@ try
|
||||
|
||||
|
||||
$operation = utils::ReadParam('operation', '');
|
||||
$sFilter = stripslashes(utils::ReadParam('filter', '', false, 'raw_data'));
|
||||
$sFilter = utils::ReadParam('filter', '', false, 'raw_data');
|
||||
$sEncoding = utils::ReadParam('encoding', 'serialize');
|
||||
$sClass = utils::ReadParam('class', 'MissingAjaxParam', false, 'class');
|
||||
$sStyle = utils::ReadParam('style', 'list');
|
||||
|
||||
@@ -176,8 +176,9 @@ try
|
||||
$sConfigFile = utils::GetConfigFilePath();
|
||||
if (file_exists($sConfigFile) && !is_writable($sConfigFile) && $oStep->RequiresWritableConfig())
|
||||
{
|
||||
$oPage->error("<b>Error:</b> the configuration file '".$sConfigFile."' already exists and cannot be overwritten.");
|
||||
$oPage->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".realpath($sConfigFile)."</b>' can be modified by the web server.");
|
||||
$sRelativePath = utils::GetConfigFilePathRelative();
|
||||
$oPage->error("<b>Error:</b> the configuration file '".$sRelativePath."' already exists and cannot be overwritten.");
|
||||
$oPage->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".$sRelativePath."</b>' can be modified by the web server.");
|
||||
$oPage->output();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -528,14 +528,21 @@ if (class_exists('ZipArchive')) // The setup must be able to start even if the "
|
||||
*/
|
||||
public function DownloadBackup($sFile)
|
||||
{
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: multipart/x-zip');
|
||||
header('Content-Disposition: inline; filename="'.basename($sFile).'"');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: '.filesize($sFile));
|
||||
readfile($sFile);
|
||||
if (file_exists($sFile))
|
||||
{
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: multipart/x-zip');
|
||||
header('Content-Disposition: inline; filename="'.basename($sFile).'"');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: '.filesize($sFile));
|
||||
readfile($sFile) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidParameterException('Invalid file path');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -124,7 +124,7 @@ function CheckEmailSetting($oP)
|
||||
$oP->info("SMTP configuration (from config-itop.php): host: $sHost, port: $sPort, user: $sDisplayUserName, password: $sDisplayPassword, encryption: $sDisplayEncryption.");
|
||||
if (($sHost == 'localhost') && ($sPort == '25') && ($sUserName == '') && ($sPassword == '') )
|
||||
{
|
||||
$oP->warning("The default settings may not be suitable for your environment. You may want to ajust these values by editing iTop's configuration file (".APPROOT."conf/production/config-itop.php).");
|
||||
$oP->warning("The default settings may not be suitable for your environment. You may want to adjust these values by editing iTop's configuration file (".utils::GetConfigFilePathRelative().").");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -134,7 +134,7 @@ function CheckEmailSetting($oP)
|
||||
break;
|
||||
|
||||
case 'LogFile':
|
||||
$oP->warning("iTop is configured to use the <b>LogFile</b> transport: emails will <em>not</em> be sent but logged to the file: '".APPROOT."/log/mail.log'.");
|
||||
$oP->warning("iTop is configured to use the <b>LogFile</b> transport: emails will <em>not</em> be sent but logged to the file: 'log/mail.log'.");
|
||||
$bRet = true;
|
||||
break;
|
||||
|
||||
|
||||
2
setup/phpcheck.php
Normal file
2
setup/phpcheck.php
Normal file
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
echo '<h1>PHP works!</h1>';
|
||||
@@ -1,3 +1,9 @@
|
||||
<?php
|
||||
require_once('../approot.inc.php');
|
||||
|
||||
require_once(APPROOT.'/application/startup.inc.php');
|
||||
|
||||
require_once(APPROOT.'/application/loginwebpage.class.inc.php');
|
||||
LoginWebPage::DoLogin(true); // Check user rights and prompt if needed
|
||||
phpinfo();
|
||||
?>
|
||||
|
||||
@@ -173,10 +173,11 @@ class WizardController
|
||||
// The configuration file already exists
|
||||
if (!is_writable($sConfigFile))
|
||||
{
|
||||
$sRelativePath = utils::GetConfigFilePathRelative();
|
||||
$oP = new SetupPage('Installation Cannot Continue');
|
||||
$oP->add("<h2>Fatal error</h2>\n");
|
||||
$oP->error("<b>Error:</b> the configuration file '".$sConfigFile."' already exists and cannot be overwritten.");
|
||||
$oP->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".realpath($sConfigFile)."</b>' can be modified by the web server.");
|
||||
$oP->error("<b>Error:</b> the configuration file '".$sRelativePath."' already exists and cannot be overwritten.");
|
||||
$oP->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".$sRelativePath."</b>' can be modified by the web server.");
|
||||
$oP->p('<button type="button" onclick="window.location.reload()">Reload</button>');
|
||||
$oP->output();
|
||||
return;
|
||||
|
||||
@@ -77,7 +77,7 @@ class WizStepWelcome extends WizardStep
|
||||
EOF
|
||||
);
|
||||
$oPage->add('<h1>'.ITOP_APPLICATION.' Installation Wizard</h1>');
|
||||
$aResults = SetupUtils::CheckPhpAndExtensions($oPage);
|
||||
$aResults = SetupUtils::CheckPhpAndExtensions();
|
||||
$this->bCanMoveForward = true;
|
||||
$aInfo = array();
|
||||
$aWarnings = array();
|
||||
|
||||
@@ -554,9 +554,15 @@ class SearchForm
|
||||
|
||||
if ($bIsEmptyExpression)
|
||||
{
|
||||
// Add default criterion
|
||||
$aOrCriterion = $this->GetDefaultCriterion($oSearch, $aContextParams);
|
||||
$aOrCriterion = array(array('and' => array()));
|
||||
}
|
||||
$aTempCriteria = array();
|
||||
foreach ($aOrCriterion as $aExistingCriteria)
|
||||
{
|
||||
// Add default criteria to all the OR criteria
|
||||
$aTempCriteria[] = $this->GetDefaultCriteria($oSearch, $aExistingCriteria, $aContextParams);
|
||||
}
|
||||
$aOrCriterion = $aTempCriteria;
|
||||
|
||||
if ($bUseApplicationContext)
|
||||
{
|
||||
@@ -720,17 +726,18 @@ class SearchForm
|
||||
return $aFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DBObjectSearch $oSearch
|
||||
* @param array $aContextParams
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @throws \CoreException
|
||||
*/
|
||||
protected function GetDefaultCriterion($oSearch, &$aContextParams = array())
|
||||
/**
|
||||
* @param \DBObjectSearch $oSearch
|
||||
* @param array $aExistingCriteria
|
||||
* @param array $aContextParams
|
||||
*
|
||||
* @return array Current AND criteria list
|
||||
*
|
||||
* @throws \CoreException
|
||||
* @throws \MissingQueryArgument
|
||||
*/
|
||||
protected function GetDefaultCriteria($oSearch, $aExistingCriteria, &$aContextParams = array())
|
||||
{
|
||||
$aAndCriterion = array();
|
||||
$sClass = $oSearch->GetClass();
|
||||
$aList = MetaModel::GetZListItems($sClass, 'default_search');
|
||||
while (empty($aList))
|
||||
@@ -739,12 +746,12 @@ class SearchForm
|
||||
$sClass = MetaModel::GetParentClass($sClass);
|
||||
if (is_null($sClass))
|
||||
{
|
||||
$aOrCriterion = array(array('and' => $aAndCriterion));
|
||||
return $aOrCriterion;
|
||||
return $aExistingCriteria;
|
||||
}
|
||||
$aList = MetaModel::GetZListItems($sClass, 'default_search');
|
||||
}
|
||||
$sAlias = $oSearch->GetClassAlias();
|
||||
$aAndCriteria = $aExistingCriteria['and'];
|
||||
foreach($aList as $sAttCode)
|
||||
{
|
||||
$oExpression = new FieldExpression($sAttCode, $sAlias);
|
||||
@@ -761,14 +768,38 @@ class SearchForm
|
||||
}
|
||||
$aCriterion = $oExpression->GetCriterion($oSearch);
|
||||
$aCriterion['is_removable'] = $bIsRemovable;
|
||||
if (isset($aCriterion['widget']) && ($aCriterion['widget'] != AttributeDefinition::SEARCH_WIDGET_TYPE_RAW))
|
||||
{
|
||||
$aAndCriterion[] = $aCriterion;
|
||||
}
|
||||
$this->AddCriterion($aCriterion, $aAndCriteria);
|
||||
}
|
||||
// Overwrite with default criterion
|
||||
$aOrCriterion = array(array('and' => $aAndCriterion));
|
||||
return $aOrCriterion;
|
||||
$aCriteria = array('and' => $aAndCriteria);
|
||||
return $aCriteria;
|
||||
}
|
||||
|
||||
/** Add the criterion to the existing list of criteria avoiding duplicates
|
||||
* @param array $aCriterion
|
||||
* @param array $aAndCriterion
|
||||
*
|
||||
*/
|
||||
private function AddCriterion($aCriterion, &$aAndCriterion)
|
||||
{
|
||||
if ($aCriterion['is_removable'])
|
||||
{
|
||||
// Check if the criterion is already present
|
||||
// Non-removable criteria are mandatory
|
||||
$ref = $aCriterion['ref'];
|
||||
foreach ($aAndCriterion as $aExistingCriterion)
|
||||
{
|
||||
if (isset($aExistingCriterion['ref']) && ($ref === $aExistingCriterion['ref']))
|
||||
{
|
||||
// Already present do nothing
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($aCriterion['widget']) && ($aCriterion['widget'] != AttributeDefinition::SEARCH_WIDGET_TYPE_RAW))
|
||||
{
|
||||
$aAndCriterion[] = $aCriterion;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ foreach(explode(',', $sDataSourcesList) as $iSDS)
|
||||
$oSynchroDataSource = MetaModel::GetObject('SynchroDataSource', $iSDS, false);
|
||||
if ($oSynchroDataSource == null)
|
||||
{
|
||||
$oP->p("ERROR: The data source (id=$iSDS) does not exist. Exiting...");
|
||||
$oP->p("ERROR: The data source (id=".utils::HtmlEntities($iSDS).") does not exist. Exiting...");
|
||||
$oP->output();
|
||||
exit -3;
|
||||
}
|
||||
|
||||
@@ -164,6 +164,7 @@ if (!empty($sExpression))
|
||||
}
|
||||
else if($oAttDef instanceof AttributeExternalField && $oAttDef->IsFriendlyName())
|
||||
{
|
||||
$sKeyAttCode = $oAttDef->GetKeyAttCode();
|
||||
$aAliasToFields[$sClassAlias][] = $sKeyAttCode;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user