N°2313 - Markup extensibility: Better display of success messages on form validation

This commit is contained in:
Molkobain
2020-01-16 11:29:52 +01:00
parent 53adb37f43
commit 60b6fcc783
22 changed files with 472 additions and 252 deletions

View File

@@ -126,6 +126,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Vyplňte prosím následující informace:',
'Brick:Portal:Object:Form:Message:Saved' => 'Uloženo',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s uloženo~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Vybrat %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Vybrat %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -125,6 +125,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -125,7 +125,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Brick:Portal:Object:Form:Edit:Title' => 'Wird aktualisiert %2$s (%1$s)',
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Bitte die folgendenen Informationen ausfüllen:',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -126,6 +126,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s: %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, complete the following information:',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s',

View File

@@ -126,6 +126,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Por favor, proporcione la siguiente información:',
'Brick:Portal:Object:Form:Message:Saved' => 'Guardado',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s guardado~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Selección %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selección %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -126,6 +126,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Veuillez compléter les informations suivantes :',
'Brick:Portal:Object:Form:Message:Saved' => 'Enregistré',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s enregistré(e)',
'Brick:Portal:Object:Search:Regular:Title' => 'Sélection de %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Sélection de %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s',

View File

@@ -125,6 +125,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -125,6 +125,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -125,6 +125,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -130,6 +130,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Vul de volgende informatie in:',
'Brick:Portal:Object:Form:Message:Saved' => 'Opgeslagen',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s opgeslagen~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Geselecteerd %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecteer %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -4222,7 +4222,8 @@ a.thumbnail.active {
.alert {
padding: 15px;
margin-bottom: 18px;
border: 1px solid transparent;
border: none;
border-left: 4px solid transparent;
border-radius: $border-radius-base
}
.alert h4 {
@@ -4246,13 +4247,14 @@ a.thumbnail.active {
.alert-dismissable .close,
.alert-dismissible .close {
position: relative;
top: -2px;
top: 2px;
right: -21px;
color: inherit
color: inherit;
font-size: 14px;
}
.alert-success {
background-color: $state-success-bg;
border-color: #d6e9c6;
border-color: $state-success-border;
color: $state-success-text
}
.alert-success hr {

View File

@@ -555,19 +555,19 @@ $jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default;
$state-success-text: #468847 !default;
$state-success-bg: #dff0d8 !default;
$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;
$state-success-border: lighten($state-success-text, 10%) !default;
$state-info-text: #3a87ad !default;
$state-info-bg: #d9edf7 !default;
$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;
$state-info-border: lighten($state-info-text, 10%) !default;
$state-warning-text: #c09853 !default;
$state-warning-bg: #fcf8e3 !default;
$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 3%) !default;
$state-warning-border: lighten($state-warning-text, 10%) !default;
$state-danger-text: #b94a48 !default;
$state-danger-bg: #f2dede !default;
$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 3%) !default;
$state-danger-border: lighten($state-danger-text, 10%) !default;
//== Tooltips

View File

@@ -32,6 +32,7 @@ use Combodo\iTop\Form\Field\LabelField;
use Combodo\iTop\Form\Form;
use Combodo\iTop\Form\FormManager;
use Combodo\iTop\Portal\Helper\ApplicationHelper;
use Combodo\iTop\Portal\Helper\SessionMessageHelper;
use CoreCannotSaveObjectException;
use DBObject;
use DBObjectSearch;
@@ -1169,7 +1170,9 @@ class ObjectFormManager extends FormManager
if ($bWasModified)
{
$aData['messages']['success'] += array('_main' => array(Dict::S('Brick:Portal:Object:Form:Message:Saved')));
/** @var \Combodo\iTop\Portal\Helper\SessionMessageHelper $oSessionMessageHelper */
$oSessionMessageHelper = $this->oContainer->get('session_message_helper');
$oSessionMessageHelper->AddMessage(uniqid(), Dict::Format('Brick:Portal:Object:Form:Message:ObjectSaved', $this->oObject->GetName()), SessionMessageHelper::ENUM_SEVERITY_OK);
}
}
catch (Exception $e)

View File

@@ -0,0 +1,174 @@
<?php
/**
* Copyright (C) 2013-2020 Combodo SARL
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
namespace Combodo\iTop\Portal\Helper;
use ArrayIterator;
use IteratorAggregate;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Class SessionMessageHelper
*
* @package Combodo\iTop\Portal\EventListener
* @since 2.7.0
*/
class SessionMessageHelper implements IteratorAggregate
{
/** @var string ENUM_SEVERITY_INFO */
const ENUM_SEVERITY_INFO = 'info';
/** @var string ENUM_SEVERITY_OK */
const ENUM_SEVERITY_OK = 'ok';
/** @var string ENUM_SEVERITY_WARNING */
const ENUM_SEVERITY_WARNING = 'warning';
/** @var string ENUM_SEVERITY_ERROR */
const ENUM_SEVERITY_ERROR = 'error';
/** @var string DEFAULT_SEVERITY */
const DEFAULT_SEVERITY = self::ENUM_SEVERITY_INFO;
/** @var \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */
private $oContainer;
/** @var array $aAllMessages */
private $aAllMessages = array();
/**
* SessionMessageHelper constructor.
*
* @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer
*/
public function __construct(ContainerInterface $oContainer)
{
$this->oContainer = $oContainer;
}
/**
* Add a message to the session messages to be fetch later.
* Will be for this portal only.
*
* @param string $sId
* @param string $sContent
* @param string $sSeverity
* @param int $iRank
*/
public function AddMessage($sId, $sContent, $sSeverity = self::DEFAULT_SEVERITY, $iRank = 1)
{
$sKey = $this->GetMessagesKey();
if(!isset($_SESSION['obj_messages'][$sKey]))
{
$_SESSION['obj_messages'][$sKey] = array();
}
$_SESSION['obj_messages'][$sKey][$sId] = array(
'severity' => $sSeverity,
'rank' => $iRank,
'message' => $sContent,
);
}
/**
* Remove the message identified by $sId (for this portal) from the session messages
*
* @param string $sId
*/
public function RemoveMessage($sId)
{
$sKey = $this->GetMessagesKey();
if(isset($_SESSION['obj_messages'][$sKey][$sId]))
{
unset($_SESSION['obj_messages'][$sKey][$sId]);
}
}
/**
* @return \ArrayIterator|\Traversable
*/
public function getIterator()
{
$this->FetchMessages();
return new ArrayIterator($this->aAllMessages);
}
/**
* Return the key under which the session messages of the portal are stored ("GUI:<PORTAL_ID>")
*
* @return string
*/
private function GetMessagesKey()
{
return 'GUI:' . $this->oContainer->getParameter('combodo.portal.instance.id');
}
/**
* Fetch session messages and delete them afterwards
* Note: We keep this system instead of following the Symfony system to make it simpler for extension developers to use them across the admin. console and the portal.
*
* @return void
*/
private function FetchMessages()
{
if (!empty($this->aAllMessages))
{
return;
}
$this->aAllMessages = array();
if ((array_key_exists('obj_messages', $_SESSION)) && (!empty($_SESSION['obj_messages'])))
{
foreach ($_SESSION['obj_messages'] as $sMessageKey => $aMessageObjectData)
{
$aObjectMessages = array();
$aRanks = array();
foreach ($aMessageObjectData as $sMessageId => $aMessageData)
{
$sMsgClass = 'alert alert-dismissible alert-';
switch ($aMessageData['severity'])
{
case static::ENUM_SEVERITY_INFO:
$sMsgClass .= 'info';
break;
case static::ENUM_SEVERITY_WARNING:
$sMsgClass .= 'warning';
break;
case static::ENUM_SEVERITY_ERROR:
$sMsgClass .= 'danger';
break;
case static::ENUM_SEVERITY_OK:
default:
$sMsgClass .= 'success';
break;
}
$aObjectMessages[] = array('css_classes' => $sMsgClass, 'message' => $aMessageData['message']);
$aRanks[] = $aMessageData['rank'];
}
unset($_SESSION['obj_messages'][$sMessageKey]);
array_multisort($aRanks, $aObjectMessages);
foreach ($aObjectMessages as $aObjectMessage)
{
$this->aAllMessages[] = $aObjectMessage;
}
}
}
}
}

View File

@@ -42,6 +42,7 @@ return array(
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => $baseDir . '/src/Controller/DefaultController.php',
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => $baseDir . '/src/Controller/ManageBrickController.php',
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => $baseDir . '/src/Controller/ObjectController.php',
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => $baseDir . '/src/Controller/SessionMessageController.php',
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => $baseDir . '/src/Controller/UserProfileBrickController.php',
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
@@ -49,6 +50,7 @@ return array(
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => $baseDir . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => $baseDir . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => $baseDir . '/src/EventListener/CssFromSassCompiler.php',
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => $baseDir . '/src/EventListener/UserProvider.php',
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => $baseDir . '/src/Form/ObjectFormManager.php',
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => $baseDir . '/src/Form/PasswordFormManager.php',
@@ -63,6 +65,7 @@ return array(
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => $baseDir . '/src/Helper/RequestManipulatorHelper.php',
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => $baseDir . '/src/Helper/ScopeValidatorHelper.php',
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => $baseDir . '/src/Helper/SecurityHelper.php',
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => $baseDir . '/src/Helper/SessionMessageHelper.php',
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => $baseDir . '/src/Helper/UIExtensionsHelper.php',
'Combodo\\iTop\\Portal\\Kernel' => $baseDir . '/src/Kernel.php',
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => $baseDir . '/src/Routing/ItopExtensionsExtraRoutes.php',

View File

@@ -62,6 +62,7 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => __DIR__ . '/../..' . '/src/Controller/DefaultController.php',
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => __DIR__ . '/../..' . '/src/Controller/ManageBrickController.php',
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => __DIR__ . '/../..' . '/src/Controller/ObjectController.php',
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => __DIR__ . '/../..' . '/src/Controller/SessionMessageController.php',
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => __DIR__ . '/../..' . '/src/Controller/UserProfileBrickController.php',
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
@@ -69,6 +70,7 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => __DIR__ . '/../..' . '/src/EventListener/CssFromSassCompiler.php',
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => __DIR__ . '/../..' . '/src/EventListener/UserProvider.php',
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => __DIR__ . '/../..' . '/src/Form/ObjectFormManager.php',
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => __DIR__ . '/../..' . '/src/Form/PasswordFormManager.php',
@@ -83,6 +85,7 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/RequestManipulatorHelper.php',
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/ScopeValidatorHelper.php',
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => __DIR__ . '/../..' . '/src/Helper/SecurityHelper.php',
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => __DIR__ . '/../..' . '/src/Helper/SessionMessageHelper.php',
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => __DIR__ . '/../..' . '/src/Helper/UIExtensionsHelper.php',
'Combodo\\iTop\\Portal\\Kernel' => __DIR__ . '/../..' . '/src/Kernel.php',
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => __DIR__ . '/../..' . '/src/Routing/ItopExtensionsExtraRoutes.php',

View File

@@ -126,6 +126,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Por favor, preencha as seguintes informações:',
'Brick:Portal:Object:Form:Message:Saved' => 'Salvo',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s salvo~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Selecionar %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecinar %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -1,4 +1,22 @@
<?php
/**
* Copyright (C) 2013-2020 Combodo SARL
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
/**
* Локализация интерфейса Combodo iTop подготовлена сообществом iTop по-русски http://community.itop-itsm.ru.
*
@@ -117,6 +135,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Пожалуйста, укажите следующую информацию:',
'Brick:Portal:Object:Form:Message:Saved' => 'Сохранено',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s cохранено~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Выбрать %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Выбрать %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s',

View File

@@ -125,6 +125,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -125,6 +125,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s~~',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:~~',
'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '%1$s saved~~',
'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',

View File

@@ -126,6 +126,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s',
'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, fill the following informations:',
'Brick:Portal:Object:Form:Message:Saved' => '已保存',
'Brick:Portal:Object:Form:Message:ObjectSaved' => '已保存 %1$s~~',
'Brick:Portal:Object:Search:Regular:Title' => '选择 %1$s (%2$s)',
'Brick:Portal:Object:Search:Hierarchy:Title' => '选择 %1$s (%2$s)',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',