Compare commits

...

51 Commits
7.1.3 ... 7.1.5

Author SHA1 Message Date
Yuri Kuznetsov
f0d508be6f v 2022-05-13 15:15:33 +03:00
Yuri Kuznetsov
e2b0aa65f8 fix convert lead 2022-05-13 09:40:43 +03:00
Yuri Kuznetsov
930675672b duration fixes 2022-05-12 17:07:04 +03:00
Yuri Kuznetsov
b5ee03b142 fix all-day event duration 2022-05-12 14:33:08 +03:00
Yuri Kuznetsov
a0d4fa5b82 cs fix 2022-05-12 14:08:14 +03:00
Yuri Kuznetsov
317bbba8c9 cs fix 2022-05-12 13:54:57 +03:00
Yuri Kuznetsov
3da95cce76 cs fix 2022-05-12 10:53:05 +03:00
Yuri Kuznetsov
9a7cf5c35e duration 3h 2022-05-12 10:04:28 +03:00
Yuri Kuznetsov
b96ae74c14 cs fix 2022-05-10 17:57:54 +03:00
Yuri Kuznetsov
7a420fb6f9 fix clearAllStoredMainViews 2022-05-10 17:51:45 +03:00
Yuri Kuznetsov
58d161210d image silent exceptions 2022-05-10 17:42:14 +03:00
Yuri Kuznetsov
41c7cf115d clear stored main views on logout 2022-05-10 17:41:02 +03:00
Yuri Kuznetsov
ba3bbfc097 fix autocomplete search no full-text 2022-05-09 16:03:54 +03:00
Yuri Kuznetsov
7758e20224 v 2022-05-09 12:52:28 +03:00
Yuri Kuznetsov
a1cc2ee8c6 fix duplicate link multiple 2022-05-09 12:39:47 +03:00
Yuri Kuznetsov
bdf397ad0f lt lv lang 2022-05-09 10:13:57 +03:00
Yuri Kuznetsov
4dcae92ab7 fix label 2022-05-09 10:11:26 +03:00
Yuri Kuznetsov
1d4fedf7c7 fix mass delete 2022-05-08 16:23:17 +03:00
Yuri Kuznetsov
24e6f2469f record service factory 2022-05-08 15:50:14 +03:00
Arkadiy Asuratov
7b16d3541d fix entity type (#2308) 2022-05-06 22:05:31 +03:00
Yuri Kuznetsov
3c9c3c9c8c fix 2022-05-05 18:04:48 +03:00
Yuri Kuznetsov
f0413b7037 message partList and bounced recognizer 2022-05-05 17:39:36 +03:00
Yuri Kuznetsov
749f1a6a70 fix modal backdrop close on drag 2022-05-05 11:05:53 +03:00
Yuri Kuznetsov
512a23ef64 bg lang fixes 2022-05-05 10:19:47 +03:00
Yuri Kuznetsov
23729c5b89 scan barcode white background 2022-05-05 10:10:17 +03:00
Yuri Kuznetsov
f31ee10cf7 second step login autocomplete off 2022-05-05 10:09:58 +03:00
Yuri Kuznetsov
21d34b091b css label fix 2022-05-04 15:04:36 +03:00
Yuri Kuznetsov
fd19aa8b2e multi-enum max length 2022-05-04 14:36:24 +03:00
Arkadiy Asuratov
5af0b62e8e fix undeclared variable (#2304) 2022-05-04 14:00:51 +03:00
Yuri Kuznetsov
965cb33e34 layout set removal 2022-04-30 18:25:33 +03:00
Yuri Kuznetsov
aca19b3427 send button position 2022-04-30 11:08:02 +03:00
Yuri Kuznetsov
238baf89be spin color 2022-04-29 13:08:35 +03:00
Yuri Kuznetsov
50218a1146 fetch model on followers change 2022-04-29 12:21:35 +03:00
Yuri Kuznetsov
d1280a8797 cs fix 2022-04-29 12:16:57 +03:00
Yuri Kuznetsov
ca9358cf1a cs fix 2022-04-29 11:59:41 +03:00
Yuri Kuznetsov
c3fa8f3131 after relete link event 2022-04-29 11:51:10 +03:00
Yuri Kuznetsov
4af110cd69 followers fix 2022-04-29 11:34:55 +03:00
Yuri Kuznetsov
45d2d4306b cs fix 2022-04-29 11:31:00 +03:00
Yuri Kuznetsov
385f01da8b css text-gray 2022-04-29 10:23:34 +03:00
Yuri Kuznetsov
85da160957 menu button re-render fix 2022-04-28 22:17:36 +03:00
Yuri Kuznetsov
ff15f318c4 cs fix 2022-04-28 21:55:24 +03:00
Yuri Kuznetsov
5769e1b58f email address css fix 2022-04-28 14:43:37 +03:00
Yuri Kuznetsov
028a7c728a fix list extended empty cell 2022-04-28 13:37:16 +03:00
Yuri Kuznetsov
9ec3889f96 date-time none 2022-04-28 13:07:28 +03:00
Yuri Kuznetsov
3aa6502996 phone number css fix 2022-04-28 12:47:49 +03:00
Yuri Kuznetsov
847f8713c9 timeline gray axis color 2022-04-28 12:42:46 +03:00
Yuri Kuznetsov
7405476f61 none value gray 2022-04-28 12:34:23 +03:00
Yuri Kuznetsov
985903e99b loading-value class 2022-04-28 12:34:23 +03:00
Pavel Martínek
347f4e5566 Update Admin.json (#2302) 2022-04-28 11:55:52 +03:00
Yuri Kuznetsov
085964dc58 none-value class 2022-04-28 11:08:12 +03:00
Yuri Kuznetsov
6c0a1265ab global search, notifications panel spinner 2022-04-28 10:31:02 +03:00
259 changed files with 4666 additions and 3083 deletions

View File

@@ -71,7 +71,7 @@ class LinkMultiple implements FieldDuplicator
->getRelation($relationDefs->getForeignRelationName())
->getType();
if ($foreignRelationType !== Entity::HAS_MANY) {
if ($foreignRelationType !== Entity::MANY_MANY) {
$valueMap->{$field . 'Ids'} = [];
$valueMap->{$field . 'Names'} = (object) [];
$valueMap->{$field . 'Columns'} = (object) [];

View File

@@ -48,7 +48,7 @@ use Espo\Services\Stream as StreamService;
*/
class FollowersLoader implements LoaderInterface
{
private const FOLLOWERS_LIMIT = 5;
private const FOLLOWERS_LIMIT = 6;
private StreamService $streamService;

View File

@@ -0,0 +1,111 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Mail\Account\GroupAccount;
use Espo\Core\Mail\Message;
use Espo\Core\Mail\Message\Part;
class BouncedRecognizer
{
public function isBounced(Message $message): bool
{
$from = $message->getHeader('From');
$contentType = $message->getHeader('Content-Type');
if (preg_match('/MAILER-DAEMON|POSTMASTER/i', $from ?? '')) {
return true;
}
if (strpos($contentType ?? '', 'multipart/report') === 0) {
// @todo Check whether ever works.
$deliveryStatusPart = $this->getDeliveryStatusPart($message);
if ($deliveryStatusPart) {
return true;
}
$content = $message->getRawContent();
if (
strpos($content, 'message/delivery-status') !== false &&
strpos($content, 'Status: ') !== false
) {
return true;
}
}
return false;
}
public function isHard(Message $message): bool
{
$content = $message->getRawContent();
if (preg_match('/permanent[ ]*[error|failure]/', $content)) {
return true;
}
return false;
}
public function extractQueueItemId(Message $message): ?string
{
$content = $message->getRawContent();
if (preg_match('/X-Queue-Item-Id: [a-z0-9\-]*/', $content, $m)) {
/** @var array{string} */
$arr = preg_split('/X-Queue-Item-Id: /', $m[0], -1, \PREG_SPLIT_NO_EMPTY);
return $arr[0];
}
$to = $message->getHeader('to');
if (preg_match('/\+bounce-qid-[a-z0-9\-]*/', $to ?? '', $m)) {
/** @var array{string} */
$arr = preg_split('/\+bounce-qid-/', $m[0], -1, \PREG_SPLIT_NO_EMPTY);
return $arr[0];
}
return null;
}
private function getDeliveryStatusPart(Message $message): ?Part
{
foreach ($message->getPartList() as $part) {
if ($part->getContentType() === 'message/delivery-status') {
return $part;
}
}
return null;
}
}

View File

@@ -34,6 +34,7 @@ use Espo\Core\Mail\Account\Hook\BeforeFetchResult;
use Espo\Core\Mail\Account\Account;
use Espo\Core\Mail\Message;
use Espo\Core\Mail\Account\GroupAccount\BouncedRecognizer;
use Espo\Core\Utils\Log;
use Espo\Core\InjectableFactory;
@@ -55,21 +56,25 @@ class BeforeFetch implements BeforeFetchInterface
private InjectableFactory $injectableFactory;
private BouncedRecognizer $bouncedRecognizer;
private ?CampaignService $campaignService = null;
public function __construct(Log $log, EntityManager $entityManager, InjectableFactory $injectableFactory)
{
public function __construct(
Log $log,
EntityManager $entityManager,
InjectableFactory $injectableFactory,
BouncedRecognizer $bouncedRecognizer
) {
$this->log = $log;
$this->entityManager = $entityManager;
$this->injectableFactory = $injectableFactory;
$this->bouncedRecognizer = $bouncedRecognizer;
}
public function process(Account $account, Message $message): BeforeFetchResult
{
if (
$message->hasHeader('from') &&
preg_match('/MAILER-DAEMON|POSTMASTER/i', $message->getHeader('from') ?? '')
) {
if ($this->bouncedRecognizer->isBounced($message)) {
try {
$toSkip = $this->processBounced($message);
}
@@ -94,32 +99,8 @@ class BeforeFetch implements BeforeFetchInterface
private function processBounced(Message $message): bool
{
$content = $message->getRawContent();
$isHard = false;
if (preg_match('/permanent[ ]*[error|failure]/', $content)) {
$isHard = true;
}
$queueItemId = null;
if (preg_match('/X-Queue-Item-Id: [a-z0-9\-]*/', $content, $m)) {
/** @var array{string} */
$arr = preg_split('/X-Queue-Item-Id: /', $m[0], -1, \PREG_SPLIT_NO_EMPTY);
$queueItemId = $arr[0];
}
else {
$to = $message->getHeader('to');
if (preg_match('/\+bounce-qid-[a-z0-9\-]*/', $to ?? '', $m)) {
/** @var array{string} */
$arr = preg_split('/\+bounce-qid-/', $m[0], -1, \PREG_SPLIT_NO_EMPTY);
$queueItemId = $arr[0];
}
}
$isHard = $this->bouncedRecognizer->isHard($message);
$queueItemId = $this->bouncedRecognizer->extractQueueItemId($message);
if (!$queueItemId) {
return false;

View File

@@ -29,6 +29,8 @@
namespace Espo\Core\Mail;
use Espo\Core\Mail\Message\Part;
interface Message
{
/**
@@ -67,4 +69,9 @@ interface Message
* Whether contents is fetched.
*/
public function isFetched(): bool;
/**
* @return Part[]
*/
public function getPartList(): array;
}

View File

@@ -0,0 +1,79 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Mail\Message\MailMimeParser;
use Espo\Core\Mail\Message\Part as PartInterface;
use ZBateson\MailMimeParser\Message\Part\MessagePart;
class Part implements PartInterface
{
private MessagePart $part;
public function __construct(MessagePart $part)
{
$this->part = $part;
}
public function getContentType(): ?string
{
return $this->part->getContentType();
}
public function hasContent(): bool
{
return $this->part->hasContent();
}
public function getContent(): ?string
{
return $this->part->getContent();
}
public function getContentId(): ?string
{
return $this->part->getContentId();
}
public function getCharset(): ?string
{
return $this->part->getCharset();
}
public function getContentDisposition(): ?string
{
return $this->part->getContentDisposition();
}
public function getFilename(): ?string
{
return $this->part->getFilename();
}
}

View File

@@ -0,0 +1,47 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Mail\Message;
interface Part
{
public function getContentType(): ?string;
public function hasContent(): bool;
public function getContent(): ?string;
public function getContentId(): ?string;
public function getCharset(): ?string;
public function getContentDisposition(): ?string;
public function getFilename(): ?string;
}

View File

@@ -30,6 +30,7 @@
namespace Espo\Core\Mail;
use Espo\Core\Mail\Account\Storage;
use Espo\Core\Mail\Message\Part;
use RuntimeException;
@@ -69,6 +70,24 @@ class MessageWrapper implements Message
$this->storage = $storage;
$this->parser = $parser;
$this->fullRawContent = $fullRawContent;
if (
!$storage &&
$this->fullRawContent
) {
$rawHeader = null;
$rawBody = null;
if (strpos($this->fullRawContent, "\r\n\r\n") !== false) {
[$rawHeader, $rawBody] = explode("\r\n\r\n", $this->fullRawContent, 2);
}
else if (strpos($this->fullRawContent, "\n\n") !== false) {
[$rawHeader, $rawBody] = explode("\n\n", $this->fullRawContent, 2);
}
$this->rawHeader = $rawHeader;
$this->rawContent = $rawBody;
}
}
public function getRawHeader(): string
@@ -133,4 +152,16 @@ class MessageWrapper implements Message
{
return (bool) $this->rawHeader;
}
/**
* @return Part[]
*/
public function getPartList(): array
{
if (!$this->parser) {
throw new RuntimeException();
}
return $this->parser->getPartList($this);
}
}

View File

@@ -32,6 +32,7 @@ namespace Espo\Core\Mail;
use Espo\Entities\Email;
use Espo\Entities\Attachment;
use Espo\Core\Mail\Message;
use Espo\Core\Mail\Message\Part;
use stdClass;
@@ -56,4 +57,9 @@ interface Parser
* @return Attachment[] A list of inline attachments.
*/
public function getInlineAttachmentList(Message $message, Email $email): array;
/**
* @return Part[]
*/
public function getPartList(Message $message): array;
}

View File

@@ -36,6 +36,10 @@ use Espo\Entities\Attachment;
use Espo\Core\Mail\Message;
use Espo\Core\Mail\Parser;
use Espo\Core\Mail\Message\Part;
use Espo\Core\Mail\Message\MailMimeParser\Part as WrapperPart;
use Espo\ORM\EntityManager;
use ZBateson\MailMimeParser\MailMimeParser as WrappeeParser;
@@ -211,6 +215,22 @@ class MailMimeParser implements Parser
return $addressList;
}
/**
* @return Part[]
*/
public function getPartList(Message $message): array
{
$wrappeeList = $this->getMessage($message)->getChildParts();
$partList = [];
foreach ($wrappeeList as $wrappee) {
$partList[] = new WrapperPart($wrappee);
}
return $partList;
}
/**
* @return Attachment[]
*/

View File

@@ -38,7 +38,7 @@ use Espo\Core\{
MassAction\Data,
MassAction\MassAction,
Acl,
Record\ServiceContainer as RecordServiceContainer,
Record\ServiceFactory,
ORM\EntityManager,
Exceptions\Forbidden,
};
@@ -56,9 +56,9 @@ class MassDelete implements MassAction
protected $acl;
/**
* @var RecordServiceContainer
* @var ServiceFactory
*/
protected $recordServiceContainer;
protected $serviceFactory;
/**
* @var EntityManager
@@ -73,13 +73,13 @@ class MassDelete implements MassAction
public function __construct(
QueryBuilder $queryBuilder,
Acl $acl,
RecordServiceContainer $recordServiceContainer,
ServiceFactory $serviceFactory,
EntityManager $entityManager,
User $user
) {
$this->queryBuilder = $queryBuilder;
$this->acl = $acl;
$this->recordServiceContainer = $recordServiceContainer;
$this->serviceFactory = $serviceFactory;
$this->entityManager = $entityManager;
$this->user = $user;
}
@@ -96,7 +96,7 @@ class MassDelete implements MassAction
throw new Forbidden("No mass-update permission.");
}
$service = $this->recordServiceContainer->get($entityType);
$service = $this->serviceFactory->create($entityType);
$repository = $this->entityManager->getRDBRepository($entityType);

View File

@@ -40,7 +40,7 @@ use Espo\Core\{
MassAction\Data,
MassAction\MassAction,
Acl,
Record\ServiceContainer as RecordServiceContainer,
Record\ServiceFactory as RecordServiceFactory,
ORM\EntityManager,
Utils\FieldUtil,
Utils\ObjectUtil,
@@ -63,9 +63,9 @@ class MassUpdate implements MassAction
protected $acl;
/**
* @var RecordServiceContainer
* @var RecordServiceFactory
*/
protected $recordServiceContainer;
protected $recordServiceFactory;
/**
* @var EntityManager
@@ -85,14 +85,14 @@ class MassUpdate implements MassAction
public function __construct(
QueryBuilder $queryBuilder,
Acl $acl,
RecordServiceContainer $recordServiceContainer,
RecordServiceFactory $recordServiceFactory,
EntityManager $entityManager,
FieldUtil $fieldUtil,
User $user
) {
$this->queryBuilder = $queryBuilder;
$this->acl = $acl;
$this->recordServiceContainer = $recordServiceContainer;
$this->recordServiceFactory = $recordServiceFactory;
$this->entityManager = $entityManager;
$this->fieldUtil = $fieldUtil;
$this->user = $user;
@@ -112,7 +112,7 @@ class MassUpdate implements MassAction
$valueMap = $data->getRaw();
$service = $this->recordServiceContainer->get($entityType);
$service = $this->recordServiceFactory->create($entityType);
$repository = $this->entityManager->getRDBRepository($entityType);

View File

@@ -29,14 +29,14 @@
namespace Espo\Core\Record;
use Espo\Core\{
Exceptions\Forbidden,
Exceptions\BadRequest,
Utils\Config,
Api\Request,
Select\SearchParams,
Utils\Json,
};
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Utils\Config;
use Espo\Core\Api\Request;
use Espo\Core\Select\SearchParams;
use Espo\Core\Select\Text\MetadataProvider as TextMetadataProvider;
use Espo\Core\Utils\Json;
use JsonException;
@@ -46,9 +46,12 @@ class SearchParamsFetcher
private Config $config;
public function __construct(Config $config)
private TextMetadataProvider $textMetadataProvider;
public function __construct(Config $config, TextMetadataProvider $textMetadataProvider)
{
$this->config = $config;
$this->textMetadataProvider = $textMetadataProvider;
}
public function fetch(Request $request): SearchParams
@@ -67,7 +70,7 @@ class SearchParamsFetcher
$this->fetchRawJsonSearchParams($request):
$this->fetchRawMultipleParams($request);
$this->handleRawParams($params);
$this->handleRawParams($params, $request);
return $params;
}
@@ -164,7 +167,7 @@ class SearchParamsFetcher
/**
* @param array<string,mixed> $params
*/
private function handleRawParams(array &$params): void
private function handleRawParams(array &$params, Request $request): void
{
if (isset($params['maxSize']) && !is_int($params['maxSize'])) {
throw new BadRequest('maxSize must be integer.');
@@ -178,7 +181,8 @@ class SearchParamsFetcher
strpos($q, '*') === false &&
strpos($q, '"') === false &&
strpos($q, '+') === false &&
strpos($q, '-') === false
strpos($q, '-') === false &&
$this->hasFullTextSearch($request)
) {
$params['q'] = $q . '*';
}
@@ -186,6 +190,21 @@ class SearchParamsFetcher
$this->handleMaxSize($params);
}
private function hasFullTextSearch(Request $request): bool
{
$scope = $request->getRouteParam('controller');
if (!$scope) {
return false;
}
if ($request->getRouteParam('action') !== 'index') {
return false;
}
return $this->textMetadataProvider->hasFullTextSearch($scope);
}
/**
* @param array<string,mixed> $params
*/

View File

@@ -29,32 +29,18 @@
namespace Espo\Core\Record;
use Espo\Core\{
Exceptions\Error,
ServiceFactory,
Utils\Metadata,
};
use RuntimeException;
use Espo\Core\Exceptions\Error;
/**
* Container for record services. Lazy loading is used.
* Usually there's no need to have multiple record service instances of the same entity type.
* Use this container instead of serviceFactory to get record services.
*
* Important. Returns services for the current user.
* Use the service-factory to create services for a specific user.
*/
class ServiceContainer
{
private const RECORD_SERVICE_NAME = 'Record';
private const RECORD_TREE_SERVICE_NAME = 'RecordTree';
/**
* @var array<string,string>
*/
private $defaultTypeMap = [
'CategoryTree' => self::RECORD_TREE_SERVICE_NAME,
];
/**
* @var array<string,Service<\Espo\ORM\Entity>>
*/
@@ -62,16 +48,14 @@ class ServiceContainer
private ServiceFactory $serviceFactory;
private Metadata $metadata;
public function __construct(ServiceFactory $serviceFactory, Metadata $metadata)
public function __construct(ServiceFactory $serviceFactory)
{
$this->serviceFactory = $serviceFactory;
$this->metadata = $metadata;
}
/**
* @return Service<\Espo\ORM\Entity>
* @throws Error
*/
public function get(string $entityType): Service
{
@@ -84,45 +68,6 @@ class ServiceContainer
private function load(string $entityType): void
{
if (!$this->metadata->get(['scopes', $entityType, 'entity'])) {
throw new Error("Can't create record service '{$entityType}', there's no such entity type.");
}
if ($this->serviceFactory->checkExists($entityType)) {
$service = $this->serviceFactory->createWith($entityType, ['entityType' => $entityType]);
if (!$service instanceof Service) {
$this->loadDefault($entityType);
return;
}
$this->data[$entityType] = $service;
return;
}
$this->loadDefault($entityType);
}
private function loadDefault(string $entityType): void
{
$default = self::RECORD_SERVICE_NAME;
$type = $this->metadata->get(['scopes', $entityType, 'type']);
if ($type) {
$default = $this->defaultTypeMap[$type] ?? $default;
}
$obj = $this->serviceFactory->createWith($default, ['entityType' => $entityType]);
if (!$obj instanceof Service) {
throw new RuntimeException("Service class {$default} is not instance of Record.");
}
//$obj->setEntityType($entityType);
$this->data[$entityType] = $obj;
$this->data[$entityType] = $this->serviceFactory->create($entityType);
}
}

View File

@@ -0,0 +1,153 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Record;
use Espo\Core\Exceptions\Error;
use Espo\Core\ServiceFactory as Factory;
use Espo\Core\Utils\Metadata;
use Espo\Entities\User;
use Espo\Core\Acl;
use Espo\Core\AclManager;
use RuntimeException;
/**
* Create a service for a specific user.
*/
class ServiceFactory
{
private const RECORD_SERVICE_NAME = 'Record';
private const RECORD_TREE_SERVICE_NAME = 'RecordTree';
/**
* @var array<string,string>
*/
private $defaultTypeMap = [
'CategoryTree' => self::RECORD_TREE_SERVICE_NAME,
];
private Factory $serviceFactory;
private Metadata $metadata;
private User $user;
private Acl $acl;
private AclManager $aclManager;
public function __construct(
Factory $serviceFactory,
Metadata $metadata,
User $user,
Acl $acl,
AclManager $aclManager
) {
$this->serviceFactory = $serviceFactory;
$this->metadata = $metadata;
$this->user = $user;
$this->acl = $acl;
$this->aclManager = $aclManager;
}
/**
* @return Service<\Espo\ORM\Entity>
*/
public function create(string $entityType): Service
{
$obj = $this->createInternal($entityType);
$obj->setUser($this->user);
$obj->setAcl($this->acl);
return $obj;
}
/**
* @return Service<\Espo\ORM\Entity>
*/
public function createForUser(string $entityType, User $user): Service
{
$obj = $this->createInternal($entityType);
$acl = $this->aclManager->createUserAcl($user);
$obj->setUser($user);
$obj->setAcl($acl);
return $obj;
}
/**
* @return Service<\Espo\ORM\Entity>
*/
public function createInternal(string $entityType): Service
{
if (!$this->metadata->get(['scopes', $entityType, 'entity'])) {
throw new Error("Can't create record service '{$entityType}', there's no such entity type.");
}
if (!$this->serviceFactory->checkExists($entityType)) {
return $this->createDefault($entityType);
}
$service = $this->serviceFactory->createWith($entityType, ['entityType' => $entityType]);
if (!$service instanceof Service) {
return $this->createDefault($entityType);
}
return $service;
}
/**
* @return Service<\Espo\ORM\Entity>
*/
private function createDefault(string $entityType): Service
{
$default = self::RECORD_SERVICE_NAME;
$type = $this->metadata->get(['scopes', $entityType, 'type']);
if ($type) {
$default = $this->defaultTypeMap[$type] ?? $default;
}
$obj = $this->serviceFactory->createWith($default, ['entityType' => $entityType]);
if (!$obj instanceof Service) {
throw new RuntimeException("Service class {$default} is not instance of Record.");
}
return $obj;
}
}

View File

@@ -38,7 +38,7 @@
"type": "duration",
"start": "dateStart",
"end": "dateEnd",
"options": [300, 600, 900, 1800, 2700, 3600, 7200],
"options": [300, 600, 900, 1800, 2700, 3600, 7200, 10800],
"default": 300,
"notStorable": true,
"select": {

View File

@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Създаване {entityTypeTranslated}"
"Create {entityType}": "Създаване на {entityTypeTranslated}"
}
}

View File

@@ -1,10 +1,10 @@
{
"links": {
"meetings": "срещи",
"calls": "призовава",
"meetings": "Срещи",
"calls": "Разговори",
"tasks": "Задачи"
},
"labels": {
"Create {entityType}": "Създаване {entityTypeTranslated}"
"Create {entityType}": "Създаване на {entityTypeTranslated}"
}
}

View File

@@ -1,15 +1,15 @@
{
"fields": {
"billingAddress": "адрес на плащане",
"billingAddress": "Адрес за плащане",
"shippingAddress": "Адрес за доставка",
"website": "уебсайт"
"website": "Уебсайт"
},
"links": {
"meetings": "срещи",
"calls": "призовава",
"meetings": "Срещи",
"calls": "Обаждане",
"tasks": "Задачи"
},
"labels": {
"Create {entityType}": "Създаване {entityTypeTranslated}"
"Create {entityType}": "Създаване на {entityTypeTranslated}"
}
}

View File

@@ -1,39 +1,39 @@
{
"fields": {
"parent": "родител",
"dateStart": "Дата Старт",
"parent": "Родител",
"dateStart": "Начална дата",
"dateEnd": "Крайна дата",
"duration": "продължителност",
"duration": "Продължителност",
"status": "Статус",
"reminders": "Напомняния",
"dateStartDate": "Дата Start (цял ден)",
"dateStartDate": "Начална дата (цял ден)",
"dateEndDate": "Крайна дата (цял ден)",
"isAllDay": "Дали през целия ден"
"isAllDay": "Цял ден"
},
"links": {
"parent": "родител"
"parent": "Родител"
},
"options": {
"status": {
"Planned": "Планирано",
"Held": "Държани",
"Not Held": "Не държани"
"Held": "Състояло се",
"Not Held": "Несъстояло се"
}
},
"labels": {
"Create {entityType}": "Създаване {entityTypeTranslated}",
"Schedule {entityType}": "График {entityTypeTranslated}",
"Log {entityType}": "Вход {entityTypeTranslated}",
"Set Held": "Задайте държани",
"Set Not Held": "Задайте не се държат"
"Create {entityType}": "Създаване на {entityTypeTranslated}",
"Schedule {entityType}": "Насрочи {entityTypeTranslated}",
"Log {entityType}": "Регистрирай {entityTypeTranslated}",
"Set Held": "Задай като състояло се",
"Set Not Held": "Задай като несъстояло се"
},
"massActions": {
"setHeld": "Задайте държани",
"setNotHeld": "Задайте не се държат"
"setHeld": "Задай като състояло се",
"setNotHeld": "Задай като несъстояло се"
},
"presetFilters": {
"planned": "Планирано",
"held": "Държани",
"held": "Състояли се",
"todays": "Днешните"
}
}

View File

@@ -1,13 +1,13 @@
{
"fields": {
"address": "адрес"
"address": "Адрес"
},
"links": {
"meetings": "срещи",
"calls": "призовава",
"meetings": "Срещи",
"calls": "Разговори",
"tasks": "Задачи"
},
"labels": {
"Create {entityType}": "Създаване {entityTypeTranslated}"
"Create {entityType}": "Създаване на {entityTypeTranslated}"
}
}

View File

@@ -34,8 +34,8 @@ use Espo\Repositories\Attachment as AttachmentRepository;
use Espo\Core\{
Exceptions\NotFound,
Exceptions\NotFoundSilent,
Exceptions\Forbidden,
Exceptions\BadRequest,
Exceptions\ForbiddenSilent,
Exceptions\Error,
EntryPoint\EntryPoint,
Acl,
@@ -120,24 +120,24 @@ class Image implements EntryPoint
}
if (!$disableAccessCheck && !$this->acl->checkEntity($attachment)) {
throw new Forbidden();
throw new ForbiddenSilent("No access to attachment.");
}
$fileType = $attachment->get('type');
if (!in_array($fileType, $this->getAllowedFileTypeList())) {
throw new Forbidden("Not allowed file type '{$fileType}'.");
throw new ForbiddenSilent("Not allowed file type '{$fileType}'.");
}
if ($this->allowedRelatedTypeList) {
if (!in_array($attachment->get('relatedType'), $this->allowedRelatedTypeList)) {
throw new NotFound();
throw new NotFoundSilent();
}
}
if ($this->allowedFieldList) {
if (!in_array($attachment->get('field'), $this->allowedFieldList)) {
throw new NotFound();
throw new NotFoundSilent();
}
}

View File

@@ -0,0 +1,85 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Hooks\LayoutSet;
use Espo\ORM\Entity;
use Espo\ORM\EntityManager;
use Espo\Entities\LayoutSet;
use Espo\Entities\Team;
use Espo\Entities\Portal;
class Removal
{
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @param LayoutSet $entity
*/
public function afterRemove(Entity $entity): void
{
$updateQuery1 = $this->entityManager
->getQueryBuilder()
->update()
->in(Team::ENTITY_TYPE)
->set([
'layoutSetId' => null,
])
->where([
'layoutSetId' => $entity->getId(),
])
->build();
$this->entityManager
->getQueryExecutor()
->execute($updateQuery1);
$updateQuery2 = $this->entityManager
->getQueryBuilder()
->update()
->in(Portal::ENTITY_TYPE)
->set([
'layoutSetId' => null,
])
->where([
'layoutSetId' => $entity->getId(),
])
->build();
$this->entityManager
->getQueryExecutor()
->execute($updateQuery2);
}
}

View File

@@ -1,104 +1,107 @@
{
"fields": {
"name": "име",
"emailAddress": "електронна поща",
"website": "уебсайт",
"phoneNumber": "телефон",
"billingAddress": "адрес на плащане",
"name": "Име",
"emailAddress": "Електронна поща",
"website": "Уебсайт",
"phoneNumber": "Телефон",
"billingAddress": "Адрес за плащане",
"shippingAddress": "Адрес за доставка",
"description": "описание",
"sicCode": "Sic Код",
"industry": "промишленост",
"description": "Описание",
"sicCode": "SIC Код",
"industry": "Промишленост",
"type": "Тип",
"contactRole": "Заглавие",
"campaign": "кампания",
"campaign": "Кампания",
"targetLists": "Целеви списъци",
"targetList": "Целева Списък",
"originalLead": "Оригинален Lead",
"contactIsInactive": "неактивен"
"targetList": "Целеви списък",
"originalLead": "Оригинална потенциална продажба",
"contactIsInactive": "Неактивен"
},
"links": {
"contacts": "Контакти",
"opportunities": "възможности",
"cases": "случаи",
"opportunities": "Сделки",
"cases": "Тикети",
"documents": "Документи",
"meetingsPrimary": "Заседания (разширена)",
"callsPrimary": "Призовава (разширена)",
"tasksPrimary": "Задачи (разширена)",
"emailsPrimary": "Имейли (разширен)",
"meetingsPrimary": "Срещи (разширено)",
"callsPrimary": "Разговори (разширено)",
"tasksPrimary": "Задачи (разширено)",
"emailsPrimary": "Имейли (разширено)",
"targetLists": "Целеви списъци",
"campaignLogRecords": "кампания Вход",
"campaign": "кампания",
"portalUsers": "потребители на портала",
"originalLead": "Оригинален Lead"
"campaignLogRecords": "Логове на кампанията",
"campaign": "Кампания",
"portalUsers": "Потребители на портала",
"originalLead": "Оригинална потенциална продажба",
"contactsPrimary": "Контакти (основен)"
},
"options": {
"type": {
"Customer": "клиент",
"Investor": "инвеститор",
"Partner": "партньор"
"Customer": "Клиент",
"Investor": "Инвеститор",
"Partner": "Партньор",
"Reseller": "Реселър"
},
"industry": {
"Agriculture": "селско стопанство",
"Advertising": "реклама",
"Agriculture": "Селско стопанство",
"Advertising": "Реклама",
"Apparel & Accessories": "Облекло & Аксесоари",
"Automotive": "автомобилен",
"Banking": "банково дело",
"Biotechnology": "биотехнологии",
"Automotive": "Автомобилна индустрия",
"Banking": "Банково дело",
"Biotechnology": "Биотехнологии",
"Building Materials & Equipment": "Строителни материали и техника",
"Chemical": "химически",
"Computer": "компютър",
"Education": "образование",
"Electronics": "електроника",
"Chemical": "Химическа индустрия",
"Computer": "Компютърна индустрия",
"Education": "Образование",
"Electronics": "Електроника",
"Energy": "Енергия",
"Entertainment & Leisure": "Забавление и свободно време",
"Finance": "Финанси",
"Food & Beverage": "Храни и напитки",
"Grocery": "хранителни стоки",
"Grocery": "Хранителни стоки",
"Healthcare": "Здравеопазване",
"Insurance": "Застраховка",
"Legal": "правен",
"Manufacturing": "производство",
"Publishing": "издаване",
"Real Estate": "Недвижим имот",
"Legal": "Правна индустрия",
"Manufacturing": "Производство",
"Publishing": "Издателска дейност",
"Real Estate": "Недвижими имоти",
"Service": "Обслужване",
"Sports": "спортен",
"Sports": "Спортни дейности",
"Software": "Софтуер",
"Technology": "технология",
"Telecommunications": "телекомуникации",
"Television": "телевизия",
"Transportation": "транспорт",
"Venture Capital": "рисков капитал",
"Aerospace": "космически",
"Architecture": "архитектура",
"Construction": "строителство",
"Defense": "отбрана",
"Creative": "творчески",
"Culture": "култура",
"Technology": "Технологии",
"Telecommunications": "Телекомуникации",
"Television": "Телевизия",
"Transportation": "Транспорт",
"Venture Capital": "Рисков капитал",
"Aerospace": "Авиокосмически",
"Architecture": "Архитектура",
"Construction": "Строителство",
"Defense": "Отбрана",
"Creative": "Творчески",
"Culture": "Култура",
"Consulting": "Консултации",
"Electric Power": "Електрическа енергия",
"Hospitality": "гостоприемство",
"Mass Media": "Средства за масова информация",
"Mining": "Минен",
"Music": "музика",
"Marketing": "маркетинг",
"Petroleum": "петролен",
"Retail": "На дребно",
"Shipping": "Доставка",
"Support": "поддържа",
"Hospitality": "Болници",
"Mass Media": "Масови медии",
"Mining": "Минно дело",
"Music": "Музика",
"Marketing": "Маркетинг",
"Petroleum": "Петролен бизнес",
"Retail": "Търговия на дребно",
"Shipping": "Спедиция",
"Support": "Поддръжка",
"Testing, Inspection & Certification": "Тестване, контрол и сертификация",
"Wholesale": "на едро",
"Water": "вода",
"Travel": "пътуване"
"Wholesale": "Търговия на едро",
"Water": "Вода",
"Travel": "Пътуване"
}
},
"labels": {
"Create Account": "Създай акаунт",
"Copy Billing": "Копие за фактуриране",
"Set Primary": "Комплект Основно"
"Create Account": "Създаване на клиент",
"Copy Billing": "Пренасяне на данните",
"Set Primary": "Задай като основен"
},
"presetFilters": {
"customers": "Клиенти",
"partners": "Партньори",
"recentlyCreated": "Наскоро Създадени"
"recentlyCreated": "Наскоро създадени"
}
}

View File

@@ -1,11 +1,11 @@
{
"layouts": {
"detailConvert": "Конвертиране",
"listForAccount": "Списък (за сметка)",
"listForAccount": "Списък (за клиент)",
"listForContact": "Списък (за контакти)"
},
"templates": {
"invitation": "покана",
"reminder": "напомняне"
"invitation": "Покана",
"reminder": "Напомняне"
}
}

View File

@@ -1,21 +1,22 @@
{
"modes": {
"month": "месец",
"week": "седмица",
"agendaWeek": "седмица",
"day": "ден",
"agendaDay": "ден"
"month": "Месец",
"week": "Седмица",
"agendaWeek": "Седмица",
"day": "Ден",
"agendaDay": "Ден",
"timeline": "Хронология"
},
"labels": {
"Today": "днес",
"Create": "създавам",
"Shared": "Споделено",
"Today": "Днес",
"Create": "Създаване",
"Shared": "Споделено с други потребители",
"Add User": "Добавяне на потребител",
"current": "текущ",
"time": "път",
"current": "Текущ",
"time": "време",
"User List": "Списък с потребители",
"Manage Users": "Управление на потребителите",
"View Calendar": "Вижте Календар",
"Create Shared View": "Създаване на споделена View"
"View Calendar": "Вижте календара",
"Create Shared View": "Създаване на споделен изглед"
}
}

View File

@@ -1,50 +1,50 @@
{
"fields": {
"name": "име",
"parent": "родител",
"name": "Име",
"parent": "Родител",
"status": "Статус",
"dateStart": "Дата Старт",
"dateStart": "Начална дата",
"dateEnd": "Крайна дата",
"direction": "Посока",
"duration": "продължителност",
"description": "описание",
"duration": "Продължителност",
"description": "Описание",
"users": "Потребители",
"contacts": "Контакти",
"leads": "Потенциална Продажба",
"leads": "Потенциални продажби",
"reminders": "Напомняния",
"account": "Сметка",
"acceptanceStatus": "Приемане Статус"
"account": "Клиент",
"acceptanceStatus": "Статус за приемане"
},
"options": {
"status": {
"Planned": "Планирано",
"Held": "Държани",
"Not Held": "Не държани"
"Planned": "Планирани",
"Held": "Състояли се",
"Not Held": "Несъстояли се"
},
"direction": {
"Outbound": "Изходяща",
"Outbound": "Изходящ",
"Inbound": "Входящ"
},
"acceptanceStatus": {
"None": "Нито един",
"Accepted": "общоприет",
"Declined": "Отхвърлена",
"Tentative": "Експериментален"
"Accepted": "Прието",
"Declined": "Пропуснато",
"Tentative": "Колеблив"
}
},
"massActions": {
"setHeld": "Задайте държани",
"setNotHeld": "Задайте не се държат"
"setHeld": "Задай като състоял се",
"setNotHeld": "Задай като несъстоял се"
},
"labels": {
"Create Call": "Създаване на Call",
"Set Held": "Задайте държани",
"Set Not Held": "Задайте не се държат",
"Create Call": "Създаване на Разговор",
"Set Held": "Задай като състоял се",
"Set Not Held": "Задай като несъстоял се",
"Send Invitations": "Изпращането на покани"
},
"presetFilters": {
"planned": "Планирано",
"held": "Държани",
"planned": "Планирани",
"held": "Състояли се",
"todays": "Днешните"
}
}

View File

@@ -1,61 +1,62 @@
{
"fields": {
"name": "име",
"description": "описание",
"name": "Име",
"description": "Описание",
"status": "Статус",
"type": "Тип",
"startDate": "Начална дата",
"endDate": "Крайна дата",
"targetLists": "Целеви списъци",
"excludingTargetLists": "С изключение на целевите списъци",
"sentCount": "Изпратено",
"openedCount": "Отворен",
"clickedCount": "Кликване",
"optedOutCount": "Отказахте се",
"bouncedCount": "Върната",
"hardBouncedCount": "Hard Върната",
"softBouncedCount": "Мека Върната",
"leadCreatedCount": "Създадена Потенциална Продажба",
"revenue": "приход",
"revenueConverted": "Приходите (изчислена)",
"budget": "бюджет",
"budgetConverted": "Бюджет (изчислена)",
"contactsTemplate": "Контакти с шаблони",
"leadsTemplate": "Leads Шаблон",
"accountsTemplate": "сметки за шаблони",
"usersTemplate": "Потребителите на шаблона",
"mailMergeOnlyWithAddress": "Напред записи / М попълнено адрес",
"sentCount": "Изпратени",
"openedCount": "Отваряния",
"clickedCount": "Кликвания",
"optedOutCount": "Отписали се",
"bouncedCount": "Неуспешно получени",
"hardBouncedCount": "Неуспешно получени",
"softBouncedCount": "Неуспешно получени",
"leadCreatedCount": "Генерирани потенциални продажби",
"revenue": "Приход",
"revenueConverted": "Приходи (изчислени)",
"budget": "Бюджет",
"budgetConverted": "Бюджет (изчислен)",
"contactsTemplate": "Шаблон за контакти",
"leadsTemplate": "Шаблон за потенциална продажба",
"accountsTemplate": "Шаблон за Клиенти",
"usersTemplate": "Шаблон за потребители",
"mailMergeOnlyWithAddress": "Пропускане на записи без попълнен адрес",
"optedInCount": "Избрал участие",
"budgetCurrency": "Бюджет на валута"
"budgetCurrency": "Валута на бюджета"
},
"links": {
"targetLists": "Целеви списъци",
"excludingTargetLists": "С изключение на целевите списъци",
"accounts": "сметки",
"accounts": "Клиенти",
"contacts": "Контакти",
"leads": "Потенциална Продажба",
"opportunities": "възможности",
"leads": "Потенциални продажби",
"opportunities": "Сделки",
"campaignLogRecords": "Вход",
"massEmails": "Масови имейли",
"trackingUrls": "Проследяване на URL адреси",
"contactsTemplate": "Контакти с шаблони",
"leadsTemplate": "Leads Шаблон",
"accountsTemplate": "сметки за шаблони",
"contactsTemplate": "Шаблон за контакти",
"leadsTemplate": "Шаблон за потенциални продажби",
"accountsTemplate": "Шаблон за Клиенти",
"usersTemplate": "Потребителите на шаблона"
},
"options": {
"type": {
"Email": "електронна поща",
"Web": "мрежа",
"Television": "телевизия",
"Radio": "радио",
"Mail": "поща"
"Email": "Електронна поща",
"Web": "Интернет",
"Television": "Телевизия",
"Radio": "Радио",
"Newsletter": "Имейл бюлетин",
"Mail": "Електронна поща"
},
"status": {
"Planning": "планиране",
"Active": "Активен",
"Inactive": "неактивен",
"Complete": "пълен"
"Planning": "Планиране",
"Active": "Активна",
"Inactive": "Неактивна",
"Complete": "Завършена"
}
},
"labels": {
@@ -66,18 +67,19 @@
"soft": "мек",
"Unsubscribe": "Отписване",
"Mass Emails": "Масови имейли",
"Email Templates": "Шаблони за имейл",
"Email Templates": "Шаблони за имейли",
"Unsubscribe again": "Отписване отново",
"Subscribe again": "Абонирайте се отново",
"Create Target List": "Създаване на Target Списък",
"Generate Mail Merge PDF": "Генериране на циркулярни PDF"
"Create Target List": "Създаване на целеви списък",
"Mail Merge": "Сливане на имейли",
"Generate Mail Merge PDF": "Генериране на Mail Merge PDF"
},
"presetFilters": {
"active": "Активен"
},
"messages": {
"unsubscribed": "Отписахте се от нашия пощенски списък.",
"subscribedAgain": "Абонирани сте отново."
"unsubscribed": "Отписахте се от нашия имейл бюлетин",
"subscribedAgain": "Абонирахте се отново."
},
"tooltips": {
"targetLists": "Цели, които трябва да получават съобщения.",

View File

@@ -1,42 +1,44 @@
{
"fields": {
"action": "действие",
"action": "Действия",
"actionDate": "Дата",
"data": "Данни",
"campaign": "кампания",
"campaign": "Кампания",
"parent": "Цел",
"object": "обект",
"object": "Обект",
"application": "Приложение",
"queueItem": "опашка Точка",
"stringAdditionalData": "String Допълнителна данни"
"queueItem": "Елементи в опашката",
"stringData": "Низови данни",
"stringAdditionalData": "Допълнителни низови данни",
"isTest": "Е тестов"
},
"links": {
"queueItem": "опашка Точка",
"parent": "родител",
"object": "обект",
"campaign": "кампания"
"queueItem": "Елементи в опашката",
"parent": "Родител",
"object": "Обект",
"campaign": "Кампания"
},
"options": {
"action": {
"Sent": "Изпратено",
"Opened": "Отворен",
"Opted Out": "Отказахте се",
"Bounced": "Върната",
"Clicked": "Кликване",
"Lead Created": "Създадена Потенциална Продажба",
"Sent": "Изпратени",
"Opened": "Отворени",
"Opted Out": "Отписали се",
"Bounced": "Неуспешно получени",
"Clicked": "Кликнали",
"Lead Created": "Създадени потенциални продажби",
"Opted In": "Избрал участие"
}
},
"labels": {
"All": "всичко"
"All": "Всички"
},
"presetFilters": {
"sent": "Изпратено",
"opened": "Отворен",
"optedOut": "Отказахте се",
"bounced": "Върната",
"clicked": "Кликване",
"leadCreated": "Създадена Потенциална Продажба",
"sent": "Изпратени",
"opened": "Отворени",
"optedOut": "Отказали се",
"bounced": "Неуспешно получени",
"clicked": "Кликвани",
"leadCreated": "Създадени потенциални продажби",
"optedIn": "Избрал участие"
}
}

View File

@@ -1,12 +1,12 @@
{
"fields": {
"urlToUse": "Код за вмъкване вместо URL",
"campaign": "кампания",
"action": "действие",
"message": "съобщение"
"campaign": "Кампания",
"action": "Действие",
"message": "Съобщение"
},
"links": {
"campaign": "кампания"
"campaign": "Кампания"
},
"labels": {
"Create CampaignTrackingUrl": "Създаване на URL адрес за проследяване"
@@ -18,7 +18,7 @@
}
},
"tooltips": {
"url": "Получателят ще бъдат пренасочени към това място, след като следвайте връзката.",
"message": "Съобщението ще бъде показан на получателя, след като следвайте връзката. Markdown се поддържа."
"url": "Получателят ще бъде пренасочен към този URL, след като кликне на връзката.",
"message": "Съобщението ще бъде показано на получателя, след като кликне на връзката. Markdown се поддържа."
}
}

View File

@@ -1,60 +1,61 @@
{
"fields": {
"name": "име",
"number": "номер",
"name": "Име",
"number": "Номер",
"status": "Статус",
"account": "Сметка",
"contact": "контакт",
"contact": "Контакт",
"contacts": "Контакти",
"priority": "приоритет",
"priority": "Приоритет",
"type": "Тип",
"description": "описание",
"lead": "Потенциална Продажба",
"attachments": "Прикачени",
"inboundEmail": "Група имейл акаунт"
"description": "Описание",
"lead": "Потенциална продажба",
"attachments": "Прикачени файлове",
"inboundEmail": "Групов имейл акаунт"
},
"links": {
"account": "Сметка",
"contact": "Свържи (Основно)",
"account": "Клиент",
"contact": "Контакт (Основен)",
"Contacts": "Контакти",
"meetings": "срещи",
"calls": "призовава",
"meetings": "Срещи",
"calls": "Обаждания",
"tasks": "Задачи",
"emails": "имейли",
"emails": "Имейли",
"articles": "Статии от базата знания",
"lead": "Потенциална Продажба",
"attachments": "Прикачени",
"inboundEmail": "Група имейл акаунт"
"lead": "Потенциална продажба",
"attachments": "Прикачени файлове",
"inboundEmail": "Групов имейл акаунт"
},
"options": {
"status": {
"New": "нов",
"Assigned": "целеви",
"Pending": "Предстоящо",
"Closed": "Затворена",
"Rejected": "Отхвърлени"
"New": "Нов",
"Assigned": "Назначен",
"Pending": "Отворен",
"Closed": "Затворен",
"Rejected": "Отхвърлен",
"Duplicate": "Дублиран"
},
"priority": {
"Low": "ниско",
"Normal": "нормален",
"High": "Високо",
"Urgent": "спешно"
"Low": "Нисък",
"Normal": "Нормален",
"High": "Висок",
"Urgent": "Спешен"
},
"type": {
"Question": "въпрос",
"Question": "Въпрос",
"Incident": "Инцидент",
"Problem": "проблем"
"Problem": "Проблем"
}
},
"labels": {
"Create Case": "Създаване на дело",
"Close": "Близо",
"Create Case": "Създаване на тикет",
"Close": "Затваряне",
"Reject": "Отхвърляне",
"Closed": "Затворена",
"Rejected": "Отхвърлени"
"Closed": "Затворен",
"Rejected": "Отхвърлен"
},
"presetFilters": {
"open": "отворено",
"closed": "Затворена"
"open": "Отворени",
"closed": "Затворени"
}
}

View File

@@ -1,38 +1,39 @@
{
"fields": {
"name": "име",
"emailAddress": "електронна поща",
"name": "Име",
"emailAddress": "Електронна поща",
"accountRole": "Заглавие",
"account": "Сметка",
"accounts": "сметки",
"phoneNumber": "телефон",
"account": "Клиент",
"accounts": "Клиенти",
"phoneNumber": "Телефон",
"accountType": "Тип на профила",
"doNotCall": "Не звъни",
"address": "адрес",
"opportunityRole": "възможност Роля",
"description": "описание",
"campaign": "кампания",
"address": "Адрес",
"opportunityRole": "Роля в сделка",
"description": "Описание",
"campaign": "Кампания",
"targetLists": "Целеви списъци",
"targetList": "Целева Списък",
"portalUser": "портал за потребителя",
"originalLead": "Оригинален Lead",
"acceptanceStatus": "Приемане Статус",
"accountIsInactive": "неактивен акаунт",
"acceptanceStatusMeetings": "Приемане Статус (срещи)",
"acceptanceStatusCalls": "Приемане Статус (призовава)",
"title": "Основно заглавие на профила"
"portalUser": "Потребител на портал",
"originalLead": "Оригинална потенциална продажба",
"acceptanceStatus": "Статус за приемане",
"accountIsInactive": "Неактивен клиент",
"acceptanceStatusMeetings": "Статус на приемане (Срещи)",
"acceptanceStatusCalls": "Статус на приемане (Разговори)",
"title": "Роля при клиент",
"hasPortalUser": "Притежава акаунт в портала"
},
"links": {
"opportunities": "възможности",
"cases": "случаи",
"opportunities": "Сделки",
"cases": "Тикети",
"targetLists": "Целеви списъци",
"campaignLogRecords": "кампания Вход",
"campaign": "кампания",
"account": "Сметката (Основно)",
"accounts": "сметки",
"casesPrimary": "Случаи (Основно)",
"portalUser": "портал за потребителя",
"originalLead": "Оригинален Lead",
"campaignLogRecords": "Логове от кампания",
"campaign": "Кампания",
"account": "Клиент (Основен)",
"accounts": "Клиенти",
"casesPrimary": "Тикети (Основни)",
"portalUser": "Потребител в портал",
"originalLead": "Оригинална потенциална продажба",
"documents": "Документи",
"tasksPrimary": "Задачи (разширена)",
"opportunitiesPrimary": "Възможности (Основно)"
@@ -42,12 +43,13 @@
},
"options": {
"opportunityRole": {
"Decision Maker": "Решение Maker",
"Evaluator": "оценител"
"Decision Maker": "Вземащ решения",
"Evaluator": "Оценител",
"Influencer": "Инфлуенсър"
}
},
"presetFilters": {
"portalUsers": "потребители на портала",
"portalUsers": "Потребители на портала",
"notPortalUsers": "Не потребители на портала",
"accountActive": "Активен"
}

View File

@@ -1,6 +1,7 @@
{
"fields": {
"futureDays": "Следваща X Дни",
"useLastStage": "Група от миналата достигна етап"
"futureDays": "Следващите X Дни",
"useLastStage": "Групиране по последната фаза",
"team": "Отдел"
}
}

View File

@@ -1,41 +1,42 @@
{
"labels": {
"Create Document": "Създаване на документ",
"Details": "детайли"
"Details": "Детайли"
},
"fields": {
"name": "име",
"name": "Име",
"status": "Статус",
"file": "досие",
"file": "Файл",
"type": "Тип",
"publishDate": "Дата на публикуване",
"expirationDate": "Срок на годност",
"description": "описание",
"accounts": "сметки",
"folder": "папка"
"expirationDate": "Срок на валидност",
"description": "Описание",
"accounts": "Клиенти",
"folder": "Папка"
},
"links": {
"accounts": "сметки",
"opportunities": "възможности",
"folder": "папка",
"accounts": "Клиенти",
"opportunities": "Сделки",
"folder": "Папка",
"leads": "Потенциални продажби",
"contacts": "Контакти"
},
"options": {
"status": {
"Active": "Активен",
"Draft": "проект",
"Expired": "Просрочен",
"Draft": "Чернова",
"Expired": "Изтекъл",
"Canceled": "Отменен"
},
"type": {
"": "Нито един",
"Contract": "Договор",
"NDA": "ЕБК",
"NDA": "Споразумение за неразкриване на информация",
"License Agreement": "Лицензионно споразумение"
}
},
"presetFilters": {
"active": "Активен",
"draft": "проект"
"active": "Активни",
"draft": "Чернови"
}
}

View File

@@ -1,10 +1,13 @@
{
"labels": {
"Create Lead": "Създаване на олово",
"Create Lead": "Създаване на потенциална продажба",
"Create Contact": "Създаване на контакт",
"Create Task": "Създаване на Task",
"Create Case": "Създаване на дело",
"Add to Contact": "Добави към контакти",
"Add to Lead": "Добави в Lead"
"Create Task": "Създаване на задача",
"Create Case": "Създаване на тикет",
"Add to Contact": "Добави към контакт",
"Add to Lead": "Добави към потенциална продажба"
},
"fields": {
"tasks": "Задачи"
}
}

View File

@@ -1,28 +1,29 @@
{
"fields": {
"name": "име",
"name": "Име",
"status": "Статус",
"target": "Цел",
"sentAt": "Дата на изпращане",
"attemptCount": "Опити",
"emailAddress": "Имейл адрес",
"massEmail": "Маса Email"
"massEmail": "Масов имейл",
"isTest": "Е тестов"
},
"links": {
"target": "Цел",
"massEmail": "Маса Email"
"massEmail": "Масов имейл"
},
"options": {
"status": {
"Pending": "Предстоящо",
"Sent": "Изпратено",
"Failed": "Се провали",
"Pending": "Предстоящ",
"Sent": "Изпратен",
"Failed": "Провален",
"Sending": "Изпращане"
}
},
"presetFilters": {
"pending": "Предстоящо",
"sent": "Изпратено",
"failed": "Се провали"
"pending": "Предстоящ",
"sent": "Изпратен",
"failed": "Провален"
}
}

View File

@@ -1,103 +1,108 @@
{
"links": {
"parent": "родител",
"parent": "Родител",
"contacts": "Контакти",
"opportunities": "възможности",
"meetings": "срещи",
"calls": "призовава",
"opportunities": "Сделки",
"leads": "Потенциална продажба",
"meetings": "Срещи",
"calls": "Обаждане",
"tasks": "Задачи",
"emails": "имейли",
"accounts": "сметки",
"cases": "случаи",
"emails": "Имейли",
"accounts": "Клиенти",
"cases": "Тикети",
"documents": "Документи",
"account": "Сметка",
"contact": "контакт"
"account": "Клиент",
"opportunity": "Сделка",
"contact": "Контакт"
},
"scopeNames": {
"Account": "Сметка",
"Contact": "контакт",
"Lead": "Водя",
"Account": "Клиент",
"Contact": "Контакт",
"Lead": "Потенциална продажба",
"Target": "Цел",
"Opportunity": "Възможност",
"Meeting": "Среща",
"Calendar": "календар",
"Calendar": "Календар",
"Call": "Обадете се",
"Task": "задача",
"Case": "случай",
"Document": "документ",
"DocumentFolder": "Документ Папка",
"Campaign": "кампания",
"TargetList": "Целева Списък",
"MassEmail": "Маса Email",
"EmailQueueItem": "Email Queue Точка",
"CampaignTrackingUrl": "проследяване на URL",
"Activities": "дейности",
"KnowledgeBaseArticle": "Статия от Базата знания",
"KnowledgeBaseCategory": "Базата знания Категория",
"CampaignLogRecord": "Вход Запис на кампанията"
"Task": "Задача",
"Case": "Тикет",
"Document": "Документ",
"DocumentFolder": "Папка с документи",
"Campaign": "Кампания",
"TargetList": "Целеви списък",
"MassEmail": "Масов имейл",
"EmailQueueItem": "Имейл - елементи от опашката",
"CampaignTrackingUrl": "Проследяване на URL",
"Activities": "Активности",
"KnowledgeBaseArticle": "Статия от документацията",
"KnowledgeBaseCategory": "Категория от документацията",
"CampaignLogRecord": "Запис в дневника на кампанията"
},
"scopeNamesPlural": {
"Account": "сметки",
"Account": "Клиенти",
"Contact": "Контакти",
"Lead": "Потенциални продажби",
"Target": "Цели",
"Opportunity": "възможности",
"Meeting": "срещи",
"Calendar": "календар",
"Call": "призовава",
"Opportunity": "Сделки",
"Meeting": "Срещи",
"Calendar": "Календар",
"Call": "Обаждания",
"Task": "Задачи",
"Case": "случаи",
"Case": "Тикети",
"Document": "Документи",
"DocumentFolder": "Документ папки",
"DocumentFolder": "Папки за документи",
"Campaign": "Кампании",
"TargetList": "Целеви списъци",
"MassEmail": "Масови имейли",
"EmailQueueItem": "Изпратете елемента от опашка",
"CampaignTrackingUrl": "Проследяване на URL адреси",
"Activities": "дейности",
"KnowledgeBaseArticle": "Знание",
"KnowledgeBaseCategory": "Базата знания Категории",
"CampaignLogRecord": "Кампания Вход Records"
"Activities": "Активности",
"KnowledgeBaseArticle": "Документация",
"KnowledgeBaseCategory": "Категории за документация",
"CampaignLogRecord": "Записи в дневника на кампанията"
},
"dashlets": {
"Leads": "Моите Leads",
"Opportunities": "Моите възможности",
"Leads": "Моите потенциални продажби",
"Opportunities": "Моите сделки",
"Tasks": "Моите задачи",
"Cases": "Мои случаи",
"Calendar": "календар",
"Calls": "Моите призовава",
"Cases": "Моите тикети",
"Calendar": "Календар",
"Calls": "Моите oбаждания",
"Meetings": "Моите срещи",
"OpportunitiesByStage": "Възможности от Етап",
"OpportunitiesByLeadSource": "Възможности от преднината Източник",
"SalesByMonth": "Продажбите на месец",
"SalesPipeline": "процеса на продажбите",
"OpportunitiesByStage": "Сделки по статуси",
"OpportunitiesByLeadSource": "Сделки по източник",
"SalesByMonth": "Продажбите по месец",
"SalesPipeline": "Процеса на продажбите",
"Activities": "Моите дейности"
},
"labels": {
"Create InboundEmail": "Създаване Входящ Email",
"Activities": "дейности",
"History": "история",
"Attendees": "Присъстващите",
"Schedule Meeting": "График Среща",
"Schedule Call": "График Call",
"Compose Email": "Състави имейл",
"Log Meeting": "Вход Среща",
"Log Call": "Вход Call",
"Archive Email": "Архив Email",
"Create Task": "Създаване на Task",
"Tasks": "Задачи"
"Create InboundEmail": "Създаване на входящ имейл",
"Activities": "Активности",
"History": "История",
"Attendees": "Присъстващи",
"Schedule Meeting": "Насрочване на среща",
"Schedule Call": "Насрочване на разговор",
"Compose Email": "Създаване на имейл",
"Log Meeting": "Регистриране на среща",
"Log Call": "Регистриране на разговор",
"Archive Email": "Архивиране на имейл",
"Create Task": "Създаване на задача",
"Tasks": "Задачи",
"Scheduler": "График"
},
"fields": {
"billingAddressCity": "град",
"addressCity": "град",
"billingAddressCountry": "Страна",
"addressCountry": "Страна",
"billingAddressPostalCode": "пощенски код",
"addressPostalCode": "пощенски код",
"billingAddressState": "състояние",
"addressState": "състояние",
"billingAddressStreet": "улица",
"addressStreet": "улица",
"billingAddressMap": "карта",
"addressMap": "карта",
"billingAddressCity": "Град",
"addressCity": "Град",
"billingAddressCountry": "Държава",
"addressCountry": "Държава",
"billingAddressPostalCode": "Пощенски код",
"addressPostalCode": "Пощенски код",
"billingAddressState": "Състояние",
"addressState": "Състояние",
"billingAddressStreet": "Улица",
"addressStreet": "Улица",
"billingAddressMap": "Карта",
"addressMap": "Карта",
"shippingAddressCity": "Град (доставка)",
"shippingAddressStreet": "Улица (доставка)",
"shippingAddressCountry": "Държава (доставка)",
@@ -107,7 +112,8 @@
},
"options": {
"reminderTypes": {
"Email": "електронна поща"
"Popup": "Попъп",
"Email": "Електронна поща"
}
}
}

View File

@@ -1,47 +1,47 @@
{
"labels": {
"Create KnowledgeBaseArticle": "Създаване на член",
"Any": "който и да е",
"Send in Email": "Изпрати на Email",
"Create KnowledgeBaseArticle": "Създаване на статия",
"Any": "Всички",
"Send in Email": "Изпрати по имейл",
"Move Up": "Премести нагоре",
"Move Down": "Премести надолу",
"Move to Top": "Преминаване към Top",
"Move to Top": "Преместване най-отгоре",
"Move to Bottom": "Преместване най-долу"
},
"fields": {
"name": "име",
"name": "Име",
"status": "Статус",
"type": "Тип",
"attachments": "Прикачени",
"publishDate": "Дата на публикуване",
"expirationDate": "Срок на годност",
"description": "описание",
"body": "тяло",
"description": "Описание",
"body": "Съдържание",
"categories": "Категории",
"language": "език",
"language": "Език",
"portals": "Портали"
},
"links": {
"cases": "случаи",
"opportunities": "възможности",
"cases": "Тикети",
"opportunities": "Сделки",
"categories": "Категории",
"portals": "Портали"
},
"options": {
"status": {
"In Review": "В Преглед",
"Draft": "проект",
"In Review": "Чернова",
"Draft": "Чернова",
"Archived": "Архив",
"Published": "Публикуван"
"Published": "Публикувана"
},
"type": {
"Article": "статия"
"Article": "Статия"
}
},
"presetFilters": {
"published": "Публикуван"
},
"tooltips": {
"portals": "Член ще бъде достъпен само в определени портали."
"portals": "Статията ще бъде достъпна само в избраните портали."
}
}

View File

@@ -2,9 +2,9 @@
"labels": {
"Create KnowledgeBaseCategory": "Създаване на Категория",
"Manage Categories": "Управление на категории",
"Articles": "статии"
"Articles": "Статии"
},
"links": {
"articles": "статии"
"articles": "Статии"
}
}

View File

@@ -1,68 +1,70 @@
{
"labels": {
"Converted To": "превръща в",
"Create Lead": "Създаване на олово",
"Converted To": "Конвертирана в",
"Create Lead": "Създаване на Потенциална продажба",
"Convert": "Конвертиране",
"convert": "конвертиране"
},
"fields": {
"name": "име",
"emailAddress": "електронна поща",
"name": "Име",
"emailAddress": "Електронна поща",
"title": "Заглавие",
"website": "уебсайт",
"phoneNumber": "телефон",
"accountName": "Име на акаунта",
"website": "Уебсайт",
"phoneNumber": "Телефон",
"accountName": "Име на клиента",
"doNotCall": "Не звъни",
"address": "адрес",
"address": "Адрес",
"status": "Статус",
"source": "източник",
"opportunityAmount": "възможност сума",
"opportunityAmountConverted": "Възможност сума (изчислена)",
"description": "описание",
"createdAccount": "Сметка",
"createdContact": "контакт",
"campaign": "кампания",
"source": "Източник",
"opportunityAmount": "Сума на сделката",
"opportunityAmountConverted": "Сума на сделката (изчислена)",
"description": "Описание",
"createdAccount": "Клиент",
"createdContact": "Контакт",
"createdOpportunity": "Сделка",
"campaign": "Кампания",
"targetLists": "Целеви списъци",
"targetList": "Целева Списък",
"industry": "промишленост",
"acceptanceStatus": "Приемане Статус",
"opportunityAmountCurrency": "Възможност сума във валута",
"acceptanceStatusMeetings": "Приемане Статус (срещи)",
"acceptanceStatusCalls": "Приемане Статус (призовава)",
"convertedAt": "конвертирани по"
"targetList": "Целева списък",
"industry": "Промишленост",
"acceptanceStatus": "Статус за приемане",
"opportunityAmountCurrency": "Валута на сумата в сделката",
"acceptanceStatusMeetings": "Статус на приемане (Срещи)",
"acceptanceStatusCalls": "Статус на приемане (Разговори)",
"convertedAt": "Конвертирана на"
},
"links": {
"targetLists": "Целеви списъци",
"campaignLogRecords": "кампания Вход",
"campaign": "кампания",
"createdAccount": "Сметка",
"createdContact": "контакт",
"cases": "случаи",
"campaignLogRecords": "Логове на кампанията",
"campaign": "Кампания",
"createdAccount": "Клиент",
"createdContact": "Контакт",
"createdOpportunity": "Сделка",
"cases": "Тикети",
"documents": "Документи"
},
"options": {
"status": {
"New": "нов",
"Assigned": "целеви",
"New": "Нова",
"Assigned": "Назначена",
"In Process": "В процес",
"Converted": "покръстен",
"Converted": "Конвертирана",
"Recycled": "Рециклирана",
"Dead": "мъртъв"
"Dead": "Изоставена"
},
"source": {
"": "Нито един",
"Call": "Обадете се",
"Email": "електронна поща",
"Email": "Електронна поща",
"Existing Customer": "Съществуващ клиент",
"Partner": "партньор",
"Partner": "Партньор",
"Public Relations": "Връзки с обществеността",
"Web Site": "уеб сайт",
"Campaign": "кампания",
"Other": "друг"
"Web Site": "Уеб сайт",
"Campaign": "Кампания",
"Other": "Друг"
}
},
"presetFilters": {
"active": "Активен",
"actual": "действителен",
"converted": "покръстен"
"actual": "Актуален",
"converted": "Конвертиран"
}
}

View File

@@ -1,14 +1,14 @@
{
"fields": {
"name": "име",
"name": "Име",
"status": "Статус",
"storeSentEmails": "Магазин изпращат съобщения",
"startAt": "Дата Старт",
"fromAddress": "От Адрес",
"storeSentEmails": "Съхраняване на изпратените имейли",
"startAt": "Дата на стартиране",
"fromAddress": "От адрес",
"fromName": "От име",
"replyToAddress": "Адрес за отговор",
"replyToName": "Отговор до Наименование",
"campaign": "кампания",
"campaign": "Кампания",
"emailTemplate": "Шаблон за имейл",
"inboundEmail": "Имейл акаунт",
"targetLists": "Целеви списъци",
@@ -19,40 +19,40 @@
"links": {
"targetLists": "Целеви списъци",
"excludingTargetLists": "С изключение на целевите списъци",
"queueItems": "елемента от опашка",
"campaign": "кампания",
"queueItems": "Елементи от опашката",
"campaign": "Кампания",
"emailTemplate": "Шаблон за имейл",
"inboundEmail": "Имейл акаунт"
},
"options": {
"status": {
"Draft": "проект",
"Draft": "Чернова",
"Pending": "Предстоящо",
"In Process": "В процес",
"Complete": "пълен",
"Complete": "Завършен",
"Canceled": "Отменен",
"Failed": "Се провали"
"Failed": "Провален"
}
},
"labels": {
"Create MassEmail": "Създаване на Маса Email",
"Send Test": "Изпрати Test",
"System SMTP": "система за SMTP",
"Create MassEmail": "Създаване на масов имейл",
"Send Test": "Изпрати тестов имейл",
"System SMTP": "Системен SMTP",
"system": "система",
"group": "група"
},
"messages": {
"selectAtLeastOneTarget": "Изберете поне една мишена.",
"testSent": "Тест имейл (и) трябва да бъде изпратен"
"selectAtLeastOneTarget": "Изберете поне една цел.",
"testSent": "Тестовият имейл би трябвало да е изпратен"
},
"tooltips": {
"optOutEntirely": "Имейл адресите на получателите, които се отписали, ще бъдат маркирани като се отказали и те няма да получават никакви масови имейли вече.",
"optOutEntirely": "Имейл адресите на получателите, които са се отказали, ще бъдат маркирани като отписали се и те няма да получават повече имейли.",
"targetLists": "Цели, които трябва да получават съобщения.",
"excludingTargetLists": "Цели, които не трябва да получават съобщения.",
"storeSentEmails": "Имейлите ще бъдат съхранявани в CRM."
},
"presetFilters": {
"actual": "действителен",
"complete": "пълен"
"actual": "Актуални",
"complete": "Завършени"
}
}

View File

@@ -1,55 +1,57 @@
{
"fields": {
"name": "име",
"parent": "родител",
"name": "Име",
"parent": "Родител",
"status": "Статус",
"dateStart": "Дата Старт",
"dateStart": "Начална дата",
"dateEnd": "Крайна дата",
"duration": "продължителност",
"description": "описание",
"duration": "Продължителност",
"description": "Описание",
"users": "Потребители",
"contacts": "Контакти",
"leads": "Потенциални продажби",
"reminders": "Напомняния",
"account": "Сметка",
"acceptanceStatus": "Приемане Статус",
"dateStartDate": "Дата Start (цял ден)",
"account": "Клиент",
"acceptanceStatus": "Статус за приемане",
"dateStartDate": "Начална дата (цял ден)",
"dateEndDate": "Крайна дата (цял ден)",
"isAllDay": "Дали през целия ден",
"Acceptance": "приемане"
"isAllDay": "Цял ден",
"Acceptance": "Приемане",
"sourceEmail": "Източник на имейла"
},
"options": {
"status": {
"Planned": "Планирано",
"Held": "Държани",
"Not Held": "Не държани"
"Planned": "Планирана",
"Held": "Състояла се",
"Not Held": "Несъстояла се"
},
"acceptanceStatus": {
"None": "Нито един",
"Accepted": "общоприет",
"Accepted": "Приета",
"Declined": "Отхвърлена",
"Tentative": "Експериментален"
"Tentative": "Несигурна"
}
},
"massActions": {
"setHeld": "Задайте държани",
"setNotHeld": "Задайте не се държат"
"setHeld": "Задай като състояла се",
"setNotHeld": "Задай като несъстояла се"
},
"labels": {
"Create Meeting": "Създаване на среща",
"Set Held": "Задайте държани",
"Set Not Held": "Задайте не се държат",
"Set Held": "Задай като състояла се",
"Set Not Held": "Задай като състояла се",
"Send Invitations": "Изпращането на покани",
"on time": "на време",
"before": "преди",
"All-Day": "Цял ден"
},
"presetFilters": {
"planned": "Планирано",
"held": "Държани",
"planned": "Планирани",
"held": "Състояли се",
"todays": "Днешните"
},
"messages": {
"nothingHasBeenSent": "Нищо не бяха изпратени",
"selectAcceptanceStatus": "Задайте състоянието си приемане."
"nothingHasBeenSent": "Нищо не беше изпратено",
"selectAcceptanceStatus": "Задайте състоянието на приемане."
}
}

View File

@@ -1,52 +1,53 @@
{
"fields": {
"name": "име",
"account": "Сметка",
"stage": "сцена",
"amount": "Количество",
"probability": "Вероятност,%",
"leadSource": "Водещ Източник",
"name": "Име",
"account": "Клиент",
"stage": "Фаза",
"amount": "Сума",
"probability": "Вероятност (%)",
"leadSource": "Източник на потенциалната продажба",
"doNotCall": "Не звъни",
"closeDate": "Близо Дата",
"closeDate": "Дата на затваряне",
"contacts": "Контакти",
"description": "описание",
"amountConverted": "Количество (изчислена)",
"amountWeightedConverted": "сума Weighted",
"campaign": "кампания",
"originalLead": "Оригинален Lead",
"amountCurrency": "сума на валута",
"contactRole": "Свържи Роля",
"lastStage": "Последният етап",
"contact": "Свържи (Основно)"
"description": "Описание",
"amountConverted": "Сума (изчислена)",
"amountWeightedConverted": "Сума (изчислена)",
"campaign": "Кампания",
"originalLead": "Оригинална потенциална продажба",
"amountCurrency": "Валута на сумата",
"contactRole": "Роля на контакта",
"lastStage": "Последна фаза",
"contact": "Контакт (Основен)"
},
"links": {
"contacts": "Контакти",
"documents": "Документи",
"campaign": "кампания",
"originalLead": "Оригинален Lead",
"contact": "Свържи (Основно)"
"campaign": "Кампания",
"originalLead": "Оригинална потенциална продажба",
"contact": "Контакт (Основен)"
},
"options": {
"stage": {
"Qualification": "Квалификация",
"Needs Analysis": "Анализ на нуждите",
"Value Proposition": "Стойностно предложение",
"Id. Decision Makers": "Документ за самоличност. Хора, взимащи решения",
"Perception Analysis": "Схващането Анализ",
"Proposal/Price Quote": "Предложение / Цена цитат",
"Prospecting": "Проучване",
"Qualification": "Квалифициране",
"Needs Analysis": "Нужда от анализ",
"Value Proposition": "Предложение",
"Id. Decision Makers": "Вземане на решение",
"Perception Analysis": "Анализ",
"Proposal/Price Quote": "Изготвяне на оферта",
"Negotiation/Review": "Преговори / Преглед",
"Closed Won": "Приключена спечелена",
"Closed Lost": "затворен Изгубени",
"Proposal": "предложение",
"Negotiation": "договаряне"
"Closed Won": "Приключена - спечелена",
"Closed Lost": "Приключена - загубена",
"Proposal": "Предложение",
"Negotiation": "Договаряне"
}
},
"labels": {
"Create Opportunity": "Създаване на възможности"
"Create Opportunity": "Създаване на Сделка"
},
"presetFilters": {
"open": "отворено",
"open": "Отворени",
"won": "Спечелени",
"lost": "загубен"
"lost": "Загубени"
}
}

View File

@@ -1,5 +1,5 @@
{
"links": {
"articles": "Статии от базата знания"
"articles": "Статии от документацията"
}
}

View File

@@ -1,8 +1,8 @@
{
"options": {
"job": {
"ProcessMassEmail": "Изпрати Масови имейли",
"ControlKnowledgeBaseArticleStatus": "Контрол Статия от Базата знания Статус"
"ProcessMassEmail": "Изпращане на масови имейли",
"ControlKnowledgeBaseArticleStatus": "Управление на статуса на статиите от документацията"
}
}
}

View File

@@ -1,39 +1,41 @@
{
"fields": {
"name": "име",
"description": "описание",
"entryCount": "Влизане граф",
"name": "Име",
"description": "Описание",
"entryCount": "Брой записи",
"campaigns": "Кампании",
"endDate": "Крайна дата",
"targetLists": "Целеви списъци",
"includingActionList": "Включително",
"excludingActionList": "с изключение на",
"optedOutCount": "Отказахте се граф",
"targetStatus": "Целева Статус",
"isOptedOut": "Е изключена"
"excludingActionList": "С изключение на",
"optedOutCount": "Отписали се",
"targetStatus": "Целеви статус",
"isOptedOut": "Отписал се"
},
"links": {
"accounts": "сметки",
"accounts": "Клиенти",
"contacts": "Контакти",
"leads": "Потенциални продажба",
"campaigns": "Кампании",
"massEmails": "Масови имейли"
},
"options": {
"type": {
"Email": "електронна поща",
"Web": "мрежа",
"Television": "телевизия",
"Radio": "радио"
"Email": "Електронна поща",
"Web": "Интернет",
"Television": "Телевизия",
"Radio": "Радио",
"Newsletter": "Имейл бюлетин"
},
"targetStatus": {
"Opted Out": "Отказахте се",
"Opted Out": "Отписал се",
"Listed": "изброени"
}
},
"labels": {
"Create TargetList": "Създаване на Target Списък",
"Opted Out": "Отказахте се",
"Cancel Opt-Out": "Отказ за отказване",
"Opt-Out": "Отказване"
"Create TargetList": "Създаване на целеви списък",
"Opted Out": "Отказали се",
"Cancel Opt-Out": "Отмяна на отказване",
"Opt-Out": "Отписване"
}
}

View File

@@ -1,50 +1,55 @@
{
"fields": {
"name": "име",
"parent": "родител",
"name": "Име",
"parent": "Родител",
"status": "Статус",
"dateStart": "Дата Старт",
"dateStart": "Начална дата",
"dateEnd": "Дата до",
"dateStartDate": "Дата Start (цял ден)",
"dateStartDate": "Начална дата (цял ден)",
"dateEndDate": "Крайна дата (цял ден)",
"priority": "приоритет",
"description": "описание",
"isOverdue": "е просрочено",
"account": "Сметка",
"dateCompleted": "Дата Завършен",
"attachments": "Прикачени",
"priority": "Приоритет",
"description": "Описание",
"isOverdue": "Е просрочена",
"account": "Клиент",
"dateCompleted": "Дата на завършване",
"attachments": "Прикачени файлове",
"reminders": "Напомняния",
"contact": "контакт"
"contact": "Контакт"
},
"links": {
"attachments": "Прикачени",
"account": "Сметка",
"contact": "контакт"
"attachments": "Прикачени файлове",
"account": "Клиент",
"contact": "Контакт",
"email": "Имейл"
},
"options": {
"status": {
"Not Started": "Не е започнало",
"Not Started": "Не е стартирана",
"Started": "Започната",
"Completed": "завършен",
"Canceled": "Отменен",
"Deferred": "Разсрочено"
"Completed": "Завършен",
"Canceled": "Отменена",
"Deferred": "Отложена"
},
"priority": {
"Low": "ниско",
"Normal": "нормален",
"High": "Високо",
"Urgent": "спешно"
"Low": "Нисък",
"Normal": "Нормален",
"High": "Висок",
"Urgent": "Спешен"
}
},
"labels": {
"Create Task": "Създаване на Task",
"Complete": "пълен"
"Create Task": "Създаване на задача",
"Complete": "Завършване",
"overdue": "просрочена"
},
"presetFilters": {
"actual": "действителен",
"completed": "завършен",
"actual": "Актуални",
"completed": "Завършени",
"todays": "Днешните",
"overdue": "просрочен",
"overdue": "Просрочени",
"deferred": "Разсрочено"
},
"nameOptions": {
"replyToEmail": "Отговор до имейл"
}
}

View File

@@ -3,8 +3,8 @@
"targetLists": "Целеви списъци"
},
"fields": {
"acceptanceStatus": "Приемане Статус",
"acceptanceStatusMeetings": "Приемане Статус (срещи)",
"acceptanceStatusCalls": "Приемане Статус (призовава)"
"acceptanceStatus": "Статус за приемане",
"acceptanceStatusMeetings": "Статус на приемане (Срещи)",
"acceptanceStatusCalls": "Статус на приемане (Разговори)"
}
}

View File

@@ -41,7 +41,6 @@
"Dead": "Mrtvý"
},
"source": {
"": "-",
"Call": "Volání",
"Email": "Email",
"Existing Customer": "Existující zákazník",

View File

@@ -45,7 +45,6 @@
"Dead": "Død"
},
"source": {
"": "Ingen",
"Call": "Samtale",
"Existing Customer": "Eksisterende Kunde",
"Public Relations": "PR",

View File

@@ -50,7 +50,6 @@
"Dead": "'Gestorben'"
},
"source": {
"": "Kein(e)",
"Call": "Anruf",
"Email": "E-Mail",
"Existing Customer": "Bestandskunde",

View File

@@ -52,7 +52,6 @@
"Dead": "Dead"
},
"source": {
"": "None",
"Call": "Call",
"Email": "Email",
"Existing Customer": "Existing Customer",

View File

@@ -52,7 +52,6 @@
"Dead": "Muerto"
},
"source": {
"": "Ninguno",
"Call": "Llamada",
"Email": "Correo electrónico",
"Existing Customer": "Cliente Existente",

View File

@@ -51,7 +51,6 @@
"Dead": "Muerto"
},
"source": {
"": "Ninguno",
"Call": "Llamada",
"Email": "Correo electrónico",
"Existing Customer": "Cliente Existente",

View File

@@ -50,7 +50,6 @@
"Dead": "مرده"
},
"source": {
"": "هیچ کدام",
"Call": "تماس",
"Email": "ایمیل",
"Existing Customer": "مشتری موجود",

View File

@@ -39,7 +39,6 @@
"Recycled": "Recyclé"
},
"source": {
"": "Aucun",
"Call": "Appel",
"Existing Customer": "Client existant",
"Partner": "Partenaire",

View File

@@ -50,7 +50,6 @@
"Dead": "Mrtav"
},
"source": {
"": "Nema",
"Call": "Poziv",
"Email": "E-mail",
"Existing Customer": "Postojeći Klijent",

View File

@@ -50,7 +50,6 @@
"Dead": "Halott"
},
"source": {
"": "Egyik sem",
"Call": "Hívás",
"Existing Customer": "A meglévő ügyfelek",
"Public Relations": "Közkapcsolatok",

View File

@@ -43,7 +43,6 @@
"Dead": "Mati"
},
"source": {
"": "tak satupun",
"Call": "Panggilan",
"Email": "E-mail",
"Existing Customer": "Pelanggan yang ada",

View File

@@ -49,7 +49,6 @@
"Dead": "Fuori uso"
},
"source": {
"": "Nessuno",
"Call": "Chiamata",
"Existing Customer": "Cliente esistente",
"Public Relations": "Pubbliche relazioni",

View File

@@ -14,7 +14,7 @@
"campaign": "Kampanija",
"targetLists": "Adresatų sarašai",
"targetList": "Adresatų sarašas",
"originalLead": "Originalus švinas",
"originalLead": "Pirminis Potencialus klientas",
"contactIsInactive": "Neaktyvus"
},
"links": {
@@ -30,7 +30,8 @@
"campaignLogRecords": "Kampanijos žurnalas",
"campaign": "Kampanija",
"portalUsers": "Portalo vartotojai",
"originalLead": "Originalus švinas"
"originalLead": "Pirminis Potencialus klientas",
"contactsPrimary": "Kontaktai (pagrindiniai)"
},
"options": {
"type": {

View File

@@ -6,5 +6,8 @@
"Create Case": "Sukurti atvejį",
"Add to Contact": "Pridėti prie kontaktų",
"Add to Lead": "Pridėti prie švino"
},
"fields": {
"tasks": "Užduotys"
}
}

View File

@@ -6,12 +6,12 @@
"sentAt": "Išsiuntimo data",
"attemptCount": "Bandymai",
"emailAddress": "El. pašto adresas",
"massEmail": "Masinis el. Paštas",
"massEmail": "Masinis el. laiškas",
"isTest": "Testuojama"
},
"links": {
"target": "Adresatas",
"massEmail": "Masinis el. Paštas"
"massEmail": "Masinis el. laiškas"
},
"options": {
"status": {

View File

@@ -30,7 +30,7 @@
"DocumentFolder": "Dokumento aplankas",
"Campaign": "Kampanija",
"TargetList": "Adresatų sarašas",
"MassEmail": "Masinis el. Paštas",
"MassEmail": "Masinis el. laiškas",
"EmailQueueItem": "Siųsti eilės elementą",
"CampaignTrackingUrl": "Stebėjiimo URL",
"Activities": "Veikla",

View File

@@ -52,7 +52,6 @@
"Dead": "Numarintas"
},
"source": {
"": "Joks",
"Call": "Skambutis",
"Email": "El. paštas",
"Existing Customer": "Egzistuojantis klientas",

View File

@@ -16,7 +16,8 @@
"dateStartDate": "Data Pradžia (visą dieną)",
"dateEndDate": "Data Pabaiga (visą dieną)",
"isAllDay": "Ar visą dieną",
"Acceptance": "Priėmimas"
"Acceptance": "Priėmimas",
"sourceEmail": "Šaltinis El. paštas"
},
"options": {
"status": {

View File

@@ -13,7 +13,7 @@
"amountConverted": "Suma (konvertuota)",
"amountWeightedConverted": "Pasverta suma",
"campaign": "Kampanija",
"originalLead": "Originalus švinas",
"originalLead": "Pirminis Potencialus klientas",
"amountCurrency": "Valiutos suma",
"contactRole": "Kontakto vaidmuo",
"lastStage": "Paskutinis etapas",
@@ -23,7 +23,7 @@
"contacts": "Kontaktai",
"documents": "Dokumentai",
"campaign": "Kampanija",
"originalLead": "Originalus švinas",
"originalLead": "Pirminis Potencialus klientas",
"contact": "Kontaktinis asmuo (pagrindinis)"
},
"options": {

View File

@@ -19,7 +19,8 @@
"links": {
"attachments": "Prisegtukai",
"account": "Paskyra",
"contact": "Kontaktai"
"contact": "Kontaktai",
"email": "El. paštas"
},
"options": {
"status": {
@@ -47,5 +48,8 @@
"todays": "Šiandienos",
"overdue": "Vėluoja",
"deferred": "Atidėta"
},
"nameOptions": {
"replyToEmail": "Atsakyti į el. laišką"
}
}

View File

@@ -30,7 +30,8 @@
"campaignLogRecords": "Kampaņu reģistri",
"campaign": "Kampaņa",
"portalUsers": "Portāla lietotāji",
"originalLead": "Oriģinālais potenciālā klienta ieraksts"
"originalLead": "Oriģinālais potenciālā klienta ieraksts",
"contactsPrimary": "Kontakti (primārie)"
},
"options": {
"type": {

View File

@@ -7,13 +7,13 @@
"parent": "Mērķa adresāti",
"object": "Objekts",
"application": "Lietotnes",
"queueItem": "Ielikt vienumu rindā",
"queueItem": "Ielikt pozīciju rindā",
"stringData": "Virknes dati",
"stringAdditionalData": "Virknes papildu dati",
"isTest": "Ir tests"
},
"links": {
"queueItem": "Ielikt vienumu rindā",
"queueItem": "Ielikt pozīciju rindā",
"parent": "Primārais elements",
"object": "Objekts",
"campaign": "Kampaņa"

View File

@@ -6,5 +6,8 @@
"Create Case": "Izveidot lietu",
"Add to Contact": "Pievienot kontaktiem",
"Add to Lead": "Pievienot potenciālajiem klientiem"
},
"fields": {
"tasks": "Uzdevumi"
}
}

View File

@@ -1,6 +1,6 @@
{
"fields": {
"name": "Vārds",
"name": "Nosaukums",
"status": "Statuss",
"target": "Mērķa adresāts",
"sentAt": "Datums nosūtīts",

View File

@@ -31,7 +31,7 @@
"Campaign": "Kampaņa",
"TargetList": "Mērķa saraksts",
"MassEmail": "Masveida e-pasts",
"EmailQueueItem": "E-pasta rindas vienums",
"EmailQueueItem": "E-pasta rindas pozīcija",
"CampaignTrackingUrl": "Sekojamais vietrādis URL",
"Activities": "Aktivitātes",
"KnowledgeBaseArticle": "Zināšanu bāzes raksts",
@@ -54,7 +54,7 @@
"Campaign": "Kampaņas",
"TargetList": "Mērķa saraksts",
"MassEmail": "Masveida e-pasti",
"EmailQueueItem": "E-pasta rindu vienumi",
"EmailQueueItem": "E-pasta rindas pozīcijas",
"CampaignTrackingUrl": "Sekojamie vietrāži URL",
"Activities": "Aktivitātes",
"KnowledgeBaseArticle": "Zināšanu bāze",

View File

@@ -52,7 +52,6 @@
"Dead": "Norakstīts"
},
"source": {
"": "Nav",
"Call": "Zvanīt",
"Email": "E-pasts",
"Existing Customer": "Esošs klients",

View File

@@ -19,7 +19,7 @@
"links": {
"targetLists": "Mērķa adresātu saraksts",
"excludingTargetLists": "Neiekļaujamo mērķa adresātu saraksts",
"queueItems": "Likt vienumus rindā",
"queueItems": "Likt pozīciju rindā",
"campaign": "Kampaņa",
"emailTemplate": "E-pasta veidne",
"inboundEmail": "E-pasta konts"

View File

@@ -16,7 +16,8 @@
"dateStartDate": "Datums Sākums (visu dienu)",
"dateEndDate": "Beigu datums (visu dienu)",
"isAllDay": "Vai ir visas dienas",
"Acceptance": "Pieņemšana"
"Acceptance": "Pieņemšana",
"sourceEmail": "Avots E-pasts"
},
"options": {
"status": {

View File

@@ -19,7 +19,8 @@
"links": {
"attachments": "Pielikumi",
"account": "Konts",
"contact": "Kontakts"
"contact": "Kontakts",
"email": "E-pasts"
},
"options": {
"status": {
@@ -47,5 +48,8 @@
"todays": "Šīsdienas",
"overdue": "Nokavēts",
"deferred": "Atlikts"
},
"nameOptions": {
"replyToEmail": "Atbildēt uz e-pastu"
}
}

View File

@@ -46,7 +46,6 @@
"Dead": "Død"
},
"source": {
"": "Ingen",
"Call": "Samtale",
"Email": "Epost",
"Existing Customer": "Eksisterende kunde",

View File

@@ -48,7 +48,6 @@
"Dead": "Vervallen"
},
"source": {
"": "Geen",
"Call": "Gesprek",
"Email": "E-mail",
"Existing Customer": "Bestaande klant",

View File

@@ -51,7 +51,6 @@
"Dead": "Martwy"
},
"source": {
"": "Brak",
"Call": "Rozmowa",
"Email": "E-mail",
"Existing Customer": "Istniejący klient",

View File

@@ -48,7 +48,6 @@
"Dead": "Inactiv"
},
"source": {
"": "Nici unul",
"Call": "Apel",
"Existing Customer": "Client Existent",
"Partner": "Partener",

View File

@@ -52,7 +52,6 @@
"Dead": "Мертв"
},
"source": {
"": "Нет",
"Call": "Звонок",
"Email": "Эл. письмо",
"Existing Customer": "Существующий клиент",

View File

@@ -50,7 +50,6 @@
"Dead": "Mŕtvy"
},
"source": {
"": "Žiadny",
"Call": "Hovor",
"Existing Customer": "Existujúci zákazník",
"Public Relations": "Vzťahy s verejnosťou",

View File

@@ -50,7 +50,6 @@
"Dead": "Mrtav"
},
"source": {
"": "Nema",
"Call": "Poziv",
"Email": "E-mail",
"Existing Customer": "Postojeći kupac",

View File

@@ -51,7 +51,6 @@
"Dead": "Död"
},
"source": {
"": "Inga",
"Call": "Samtal",
"Email": "E-post",
"Existing Customer": "Existerande kund",

View File

@@ -52,7 +52,6 @@
"Dead": "ไม่เคลื่อนไหว"
},
"source": {
"": "ไม่มี",
"Call": "โทร",
"Email": "อีเมล์",
"Existing Customer": "ลูกค้าปัจจุบัน",

View File

@@ -48,7 +48,6 @@
"Dead": "Ölü"
},
"source": {
"": "Hiçbiri ",
"Call": "Arama",
"Email": "Eposta",
"Existing Customer": "Varolan Müşteri",

View File

@@ -52,7 +52,6 @@
"Dead": "Мертвий"
},
"source": {
"": "Немає",
"Call": "Дзвінок",
"Email": "Емейл",
"Existing Customer": "Існуючий замовник",

View File

@@ -42,7 +42,6 @@
"Dead": "Chết"
},
"source": {
"": "trống",
"Call": "Gọi",
"Existing Customer": "Khách hàng hiện có",
"Partner": "Đối tác",

View File

@@ -51,7 +51,6 @@
"Dead": "没机会"
},
"source": {
"": "无",
"Call": "通话",
"Email": "电子邮件",
"Existing Customer": "现有客户",

View File

@@ -52,7 +52,6 @@
"Dead": "無結果"
},
"source": {
"": "無結果",
"Call": "通話",
"Email": "電子郵件",
"Existing Customer": "現有客戶",

View File

@@ -171,7 +171,7 @@ class CaseObj extends Record
*/
protected function getLeadEmailAddress(CaseEntity $entity, array $dataList): ?stdClass
{
$lead = $this->entityManager->getEntity('Account', $entity->get('leadId'));
$lead = $this->entityManager->getEntity('Lead', $entity->get('leadId'));
if (!$lead || !$lead->get('emailAddress')) {
return null;

View File

@@ -252,6 +252,10 @@ class Lead extends Record implements
$skipSave = false;
$contact = null;
$account = null;
$opportunity = null;
if (!empty($recordsData->Account)) {
$account = $entityManager->getNewEntity('Account');
@@ -286,7 +290,7 @@ class Lead extends Record implements
$contact->set(get_object_vars($recordsData->Contact));
if (isset($account)) {
if ($account && $account->hasId()) {
$contact->set('accountId', $account->getId());
}
@@ -321,11 +325,11 @@ class Lead extends Record implements
$opportunity->set(get_object_vars($recordsData->Opportunity));
if (isset($account)) {
if ($account && $account->hasId()) {
$opportunity->set('accountId', $account->getId());
}
if (isset($contact)) {
if ($contact && $contact->hasId()) {
$opportunity->set('contactId', $contact->getId());
}
@@ -341,6 +345,7 @@ class Lead extends Record implements
$item = $e->getValueMap();
$item->_entityType = $e->getEntityType();
$duplicateList[] = $item;
$skipSave = true;
}
}
@@ -349,7 +354,7 @@ class Lead extends Record implements
if (!$skipSave) {
$entityManager->saveEntity($opportunity);
if (isset($contact)) {
if ($contact && $contact->hasId()) {
$entityManager->getRDBRepository('Contact')->relate($contact, 'opportunities', $opportunity);
}
@@ -378,17 +383,17 @@ class Lead extends Record implements
->find();
foreach ($meetings as $meeting) {
if (!empty($contact)) {
if ($contact && $contact->hasId()) {
$entityManager->getRDBRepository('Meeting')->relate($meeting, 'contacts', $contact);
}
if (!empty($opportunity)) {
if ($opportunity && $opportunity->hasId()) {
$meeting->set('parentId', $opportunity->getId());
$meeting->set('parentType', 'Opportunity');
$entityManager->saveEntity($meeting);
}
else if (!empty($account)) {
else if ($account && $account->hasId()) {
$meeting->set('parentId', $account->getId());
$meeting->set('parentType', 'Account');
@@ -402,18 +407,17 @@ class Lead extends Record implements
->find();
foreach ($calls as $call) {
if (!empty($contact)) {
$entityManager->getRDBRepository('Call')
->relate($call, 'contacts', $contact);
if ($contact && $contact->hasId()) {
$entityManager->getRDBRepository('Call')->relate($call, 'contacts', $contact);
}
if (!empty($opportunity)) {
if ($opportunity && $opportunity->hasId()) {
$call->set('parentId', $opportunity->getId());
$call->set('parentType', 'Opportunity');
$entityManager->saveEntity($call);
}
else if (!empty($account)) {
else if ($account && $account->hasId()) {
$call->set('parentId', $account->getId());
$call->set('parentType', 'Account');
@@ -427,13 +431,13 @@ class Lead extends Record implements
->find();
foreach ($emails as $email) {
if (!empty($opportunity)) {
if ($opportunity && $opportunity->hasId()) {
$email->set('parentId', $opportunity->getId());
$email->set('parentType', 'Opportunity');
$entityManager->saveEntity($email);
}
else if (!empty($account)) {
else if ($account && $account->hasId()) {
$email->set('parentId', $account->getId());
$email->set('parentType', 'Account');
@@ -447,11 +451,11 @@ class Lead extends Record implements
->find();
foreach ($documents as $document) {
if (!empty($account)) {
if ($account && $account->hasId()) {
$entityManager->getRDBRepository('Document')->relate($document, 'accounts', $account);
}
if (!empty($opportunity)) {
if ($opportunity && $opportunity->hasId()) {
$entityManager->getRDBRepository('Document')->relate($document, 'opportunities', $opportunity);
}
}
@@ -459,15 +463,15 @@ class Lead extends Record implements
$streamService = $this->getStreamService();
if ($streamService->checkIsFollowed($lead, $this->getUser()->getId())) {
if (!empty($opportunity)) {
if ($opportunity && $opportunity->hasId()) {
$streamService->followEntity($opportunity, $this->getUser()->getId());
}
if (!empty($account)) {
if ($account && $account->hasId()) {
$streamService->followEntity($account, $this->getUser()->getId());
}
if (!empty($contact)) {
if ($contact && $contact->hasId()) {
$streamService->followEntity($contact, $this->getUser()->getId());
}
}

View File

@@ -64,6 +64,8 @@ class LayoutSet extends \Espo\Core\Repositories\Database
protected function afterRemove(Entity $entity, array $options = [])
{
parent::afterRemove($entity);
$layoutList = $this->entityManager
->getRDBRepository('LayoutRecord')
->where([

View File

@@ -1,29 +1,30 @@
{
"fields": {
"user": "потребител",
"action": "действие",
"user": "Потребител",
"action": "Действие",
"createdAt": "Дата",
"target": "Цел",
"authToken": "Означението за удостоверяване",
"targetType": "Тип обект",
"authToken": "Токен за автентификация",
"ipAddress": "IP адрес",
"authLogRecord": "Упълномощаване Вход Record",
"authLogRecord": "История на влизанията",
"userType": "Тип потребител"
},
"links": {
"authToken": "Означението за удостоверяване",
"user": "потребител",
"authToken": "Токен за автентификация",
"user": "Потребител",
"target": "Цел",
"authLogRecord": "Упълномощаване Вход Record"
"authLogRecord": "История на влизанията"
},
"presetFilters": {
"onlyMy": "Само ми"
"onlyMy": "Само мои"
},
"options": {
"action": {
"read": "Прочети",
"update": "Актуализация",
"delete": "Изтрий",
"create": "създавам"
"read": "Прочете",
"update": "Редактира",
"delete": "Изтри",
"create": "Създаде"
}
}
}

View File

@@ -1,254 +1,271 @@
{
"labels": {
"Enabled": "Пуснато",
"Disabled": "Деактивиран",
"Enabled": "Активирано",
"Disabled": "Деактивирано",
"System": "Система",
"Users": "Потребители",
"Email": "Електронна поща",
"Data": "Данни",
"Customization": "Персонализиране",
"Available Fields": "Достъпни полета",
"Available Fields": "Налични полета",
"Layout": "Оформление",
"Entity Manager": "Управител на субекти\n",
"Entity Manager": "Мениджър на обекти",
"Add Panel": "Добавяне на панел",
"Add Field": "Добавяне на поле",
"Settings": "Настройки",
"Scheduled Jobs": "Планирани задачи",
"Upgrade": "Подобряване на",
"Clear Cache": "Изтрий кеш-памет",
"Teams": "Отдели ",
"Upgrade": "Обновяване",
"Clear Cache": "Изтрий кеша",
"Rebuild": "Оптимизиране",
"Teams": "Отдели",
"Roles": "Роли",
"Portal": "Портал",
"Portals": "Портали",
"Portal Roles": "Portal Роли",
"Portal Roles": "Роли в порталите",
"Outbound Emails": "Изходящи имейли",
"Group Email Accounts": "Групови имейл акаунти",
"Personal Email Accounts": "Лични имейл акаунти",
"Inbound Emails": "Входящи имейли",
"Email Templates": "Шаблони за имейли",
"Import": "Внасяне",
"Layout Manager": "Шаблон на Мениджъра",
"Import": "Импортиране",
"Layout Manager": "Управление на оформлението",
"User Interface": "Потребителски интерфейс",
"Auth Tokens": "Удостоверения за достоверност",
"Authentication": "заверка",
"Currency": "Валута",
"Auth Tokens": "Токени за удостоверяване",
"Authentication": "Аутентификация",
"Currency": "Валути",
"Integrations": "Интеграции",
"Extensions": "Разширения",
"Upload": "Качи ",
"Upload": "Качване",
"Installing...": "Инсталира се ...",
"Upgrading...": "Надгражда се ...",
"Upgraded successfully": "Надстройката е успешна",
"Upgrading...": "Обновява се ...",
"Upgraded successfully": "Обновяването е успешно",
"Installed successfully": "Инсталацията е успешна",
"Ready for upgrade": "Готови ли сте за надстройката?",
"Run Upgrade": "Изпълнение на надстройката",
"Install": "Инсталирай",
"Ready for upgrade": "Готови ли сте за обновяване?",
"Run Upgrade": "Обновяване",
"Install": "Инсталиране",
"Ready for installation": "Готов за инсталиране",
"Uninstalling...": "Деинсталира се ...",
"Uninstalled": "Деинсталиран",
"Create Entity": "Създаване на обект",
"Edit Entity": "Редактиране на обект",
"Create Link": "Създаване на връзка",
"Edit Link": "Редактиране на връзка ",
"Notifications": "Съобщения",
"Create Link": "Създаване на релация",
"Edit Link": "Редактиране на релация",
"Notifications": "Известия",
"Jobs": "Задачи",
"Reset to Default": "Възстанови до първоначалното",
"Email Filters": "Имайл филтри",
"Portal Users": "потребители на портала",
"Action History": "История за действие",
"Label Manager": "мениджър Label",
"Auth Log": "упълномощаване Вход",
"Lead Capture": "Водещ Capture",
"Attachments": "Прикачени",
"Reset to Default": "Възстановяване по подразбиране",
"Email Filters": "Имейл филтри",
"Portal Users": "Потребители на портала",
"Action History": "История за действия",
"Label Manager": "Управление на преводи",
"Auth Log": "История на влизанията",
"Lead Capture": "Форма за потенциални продажби",
"Attachments": "Прикачени файлове",
"API Users": "API Потребители",
"Template Manager": "Шаблон мениджър",
"Template Manager": "Управление на шаблони",
"System Requirements": "Системни изисквания",
"PHP Settings": "PHP настройки",
"Database Settings": "Настройки на бази данни",
"Permissions": "Разрешения",
"Success": "успех",
"is recommended": "се препоръчва",
"extension is missing": "разширение липсва",
"Permissions": "Права",
"Success": "Успешно",
"Fail": "Неуспешно",
"is recommended": "е препоръчително",
"extension is missing": "разширението липсва",
"PDF Templates": "PDF шаблони",
"Dashboard Templates": "Шаблони за начално табло",
"Email Addresses": "Имейл адреси",
"Phone Numbers": "Телефонни номера"
"Phone Numbers": "Телефонни номера",
"Layout Sets": "Сетове от оформления",
"Messaging": "Съобщения",
"Misc": "Разни",
"Job Settings": "Настройки на системни задачи",
"Configuration Instructions": "Инструкции за конфигуриране",
"Formula Sandbox": "Тестър за формули"
},
"layouts": {
"list": "Списък",
"list": "Лист",
"detail": "Детайли",
"listSmall": "Списък(Малък)",
"listSmall": "Лист(Малък)",
"detailSmall": "Детайли(Малък)",
"filters": "Търсене на филтри",
"massUpdate": "Актуализиране на всичко",
"relationships": "Връзка панели",
"sidePanelsDetail": "Страничните панели (подробности)",
"sidePanelsEdit": "Страничните панели (Редактиране)",
"sidePanelsDetailSmall": "Страничните панели (Подробности Small)",
"sidePanelsEditSmall": "Страничните панели (Edit Small)",
"detailPortal": "Подробности (портал)",
"detailSmallPortal": "Подробности (Small, портал)",
"listSmallPortal": "Списък (Small, портал)",
"listPortal": "Списък (Portal)",
"relationshipsPortal": "Връзка панели (Portal)"
"filters": "Филтри за търсене",
"massUpdate": "Масово обновяване",
"relationships": "Панели с релации",
"sidePanelsDetail": "Странични панели (Detail)",
"sidePanelsEdit": "Странични панели (Edit)",
"sidePanelsDetailSmall": "Странични панели (Detail small)",
"sidePanelsEditSmall": "Странични панели (Edit Small)",
"defaultSidePanel": "Полета в страничния панел",
"bottomPanelsDetail": "Долни панели",
"bottomPanelsEdit": "Долни панели (Edit)",
"bottomPanelsDetailSmall": "Долни панели (Detail Small)",
"bottomPanelsEditSmall": "Долни панели (Edit Small)"
},
"fieldTypes": {
"address": "Адрес",
"foreign": "Чуждестранен",
"duration": "продължителност",
"foreign": "Външно поле",
"duration": "Продължителност",
"password": "Парола",
"personName": "име на лицето",
"personName": "Име на лицето",
"autoincrement": "Автоматично увеличаване",
"bool": "Булева",
"currency": "Валута",
"date": "Дата",
"email": "електронна поща",
"float": "поплавък",
"link": "връзка",
"linkMultiple": "линк Множествена",
"linkParent": "линк майка",
"email": "Електронна поща",
"phone": "Телефон",
"text": "Текст",
"varchar": "VARCHAR",
"file": "Файл",
"image": "Снимка",
"attachmentMultiple": "Множествено Качване",
"rangeCurrency": "Range валути",
"attachmentMultiple": "Множество файлове",
"wysiwyg": "WYSIWYG",
"map": "карта",
"map": "Карта",
"currencyConverted": "Валута (изчислена)",
"colorpicker": "Средство за избиране на цвят",
"int": "цяло число",
"colorpicker": "Избиране на цвят",
"int": "Цяло число",
"number": "Номер (автоматично увеличение)",
"datetime": "Време за среща",
"datetimeOptional": "Дата / Date-Time",
"checklist": "списък за проверка",
"linkOne": "Връзка Един от",
"datetime": "Дата-час",
"datetimeOptional": "Дата / Дата-час",
"checklist": "Чеклист",
"barcode": "Баркод"
},
"fields": {
"type": "Тип",
"name": "име",
"label": "етикет",
"required": "длъжен",
"name": "Име",
"label": "Наименование",
"required": "Задължителен",
"default": "По подразбиране",
"maxLength": "Максимална дължина",
"options": "Настроики",
"options": "Опции за избиране",
"after": "След (поле)",
"before": "Преди (област)",
"link": "връзка",
"field": "поле",
"translation": "превод",
"previewSize": "Визуализация на размера",
"defaultType": "По подразбиране Вид",
"seeMoreDisabled": "Изключване Текст Cut",
"entityList": "Entity Списък",
"isSorted": "Се сортира (по азбучен ред)",
"audited": "одитирания",
"before": "Преди (поле)",
"link": "Релация",
"field": "Поле",
"min": "Минимум",
"max": "Максимум",
"translation": "Превод",
"previewSize": "Размер на preview",
"defaultType": "Тип по подразбиране",
"seeMoreDisabled": "Деактивиране на изрязването на текста",
"entityList": "Списък с обекти",
"isSorted": "Да се сортира (по азбучен ред)",
"audited": "Одитирано поле",
"trim": "Ограничаване",
"height": "Височина (пиксела)",
"minHeight": "Мин Височина (пиксела)",
"provider": "доставчик",
"minHeight": "Мин. височина (px)",
"provider": "Доставчик",
"typeList": "Вид Списък",
"rows": "Брой редове на текстово поле",
"lengthOfCut": "Дължина на рязане",
"lengthOfCut": "Дължина на ограничаване",
"sourceList": "Източник Списък",
"tooltipText": "Подсказка Текст",
"prefix": "префикс",
"nextNumber": "Следваща Номер",
"padLength": "Pad Дължина",
"tooltipText": "Текст на подсказка",
"prefix": "Префикс",
"nextNumber": "Следващ номер",
"padLength": "Дължина на числото (бр. символи)",
"disableFormatting": "Изключване на форматиране",
"dynamicLogicVisible": "Условия правят поле видима",
"dynamicLogicReadOnly": "Условия правят поле само за четене",
"dynamicLogicRequired": "Условия извършват необходимите поле",
"dynamicLogicVisible": "Условия, които правят полето видимо",
"dynamicLogicReadOnly": "Условия, които правят полето read-only",
"dynamicLogicRequired": "Условия, които правят полето задължително",
"dynamicLogicOptions": "Условни опции",
"probabilityMap": "Етап Вероятности (%)",
"probabilityMap": "Етапни вероятности (%)",
"readOnly": "Само за четене",
"noEmptyString": "Празен низ е позволено",
"noEmptyString": "Не се допуска празна стойност на полето",
"maxFileSize": "Максимален размер на файла (Mb)",
"isPersonalData": "Дали на личните данни",
"useIframe": "Използвайте Iframe",
"useNumericFormat": "Използвайте Цифров формат",
"strip": "Лента",
"cutHeight": "Cut Височина (пиксели)",
"minuteStep": "минути Стъпка",
"inlineEditDisabled": "Изключване Редови",
"displayAsLabel": "Показване като Label",
"allowCustomOptions": "Позволете опции за персонализирано",
"maxCount": "Макс т граф",
"displayRawText": "Дисплей суров текст (не евтино)",
"notActualOptions": "А не действителни Опции",
"accept": "приемам",
"displayAsList": "Посочете както Списък",
"viewMap": "Вижте Карта Button",
"codeType": "Код Вид",
"lastChar": "Последно Character"
"isPersonalData": "Това са лични данни",
"useIframe": "Използване на iframe",
"useNumericFormat": "Използване на числов формат",
"strip": "Съкращаване",
"cutHeight": "Височина на изрязане (px)",
"minuteStep": "Стъпки за минути",
"inlineEditDisabled": "Деактивиране на Inline редактиране",
"displayAsLabel": "Показване като етикет",
"allowCustomOptions": "Разрешаване на персонализирани опции",
"maxCount": "Максимален брой артикули",
"displayRawText": "Показване на суров текст (без форматиране)",
"notActualOptions": "Не са реални опции",
"accept": "Приемане",
"displayAsList": "Показване като списък",
"viewMap": "Показване на бутон за карта",
"lastChar": "Последен знак",
"listPreviewSize": "Размер за визуализация на изображението (preview)",
"onlyDefaultCurrency": "Само валута по подразбиране",
"dynamicLogicInvalid": "Условия, които правят полето невалидно",
"conversionDisabled": "Деактивирайте преобразуването",
"decimalPlaces": "Десетични знаци"
},
"messages": {
"selectEntityType": "Изберете вида субект в лявото меню.",
"selectUpgradePackage": "Изберете пакета за надстройване",
"selectLayout": "Изберете нужната оформление в лявото меню и да го редактирате.",
"selectExtensionPackage": "Изберете пакет удължаване",
"extensionInstalled": "Удължаване {име} {} версия е инсталирана.",
"installExtension": "Удължаване {име} {версия} е готова за монтаж.",
"upgradeBackup": "Ние препоръчваме да направите резервно копие на вашите файлове и данни EspoCRM преди надстройката.",
"thousandSeparatorEqualsDecimalMark": "Хилядите разделителни характер не може да бъде същата като знак след десетичната точка.",
"selectEntityType": "Изберете вида обект от лявото меню.",
"selectUpgradePackage": "Изберете архив, с който да направите обновяване",
"selectLayout": "Изберете нужното оформление от лявото меню и го редактирайте.",
"selectExtensionPackage": "Изберете архив, с който да качите разширението",
"extensionInstalled": "Разширението {name} {version} е успешно инсталирано.",
"installExtension": "Разширението {name} {version} е готово за инсталиране.",
"upgradeBackup": "Препоръчваме да направите резервно копие на вашите EspoCRM файлове и данни преди обновяване.",
"thousandSeparatorEqualsDecimalMark": "Знакът за разделител на хилядите не може да бъде същият като знака на десетичния знак.",
"userHasNoEmailAddress": "Потребителят няма имейл адрес.",
"uninstallConfirmation": "Сигурни ли сте, искате да деинсталирате разширението?",
"cronIsNotConfigured": "Планирани работни места не се показват. Следователно входящи имейли, уведомления и напомняния не работят. Моля, следвайте инструкциите [] (https://www.espocrm.com/documentation/administration/server-configuration/#user-content-setup-a-crontab) до настройка на Cron работни места.",
"newExtensionVersionIsAvailable": "New {extensionName} версия {latestVersion} е на разположение.",
"upgradeVersion": "EspoCRM ще бъде подобрена версия ** {версия} **. Моля, бъдете търпеливи, тъй като това може да отнеме известно време.",
"upgradeDone": "EspoCRM е подобрена версия ** {версия} **.",
"downloadUpgradePackage": "Изтегляне ъпгрейд пакет (и) [тук] ({URL}).",
"upgradeInfo": "Проверете [документация] ({URL}) за това как да обновите своя EspoCRM инстанция.",
"upgradeRecommendation": "Този начин на модернизация не се препоръчва. По-добре е за ъпгрейд от CLI.",
"newVersionIsAvailable": "New EspoCRM версия {latestVersion} е на разположение. Моля, следвайте инструкциите [] (https://www.espocrm.com/documentation/administration/upgrading/) за надграждане на вашата инстанция."
"uninstallConfirmation": "Наистина ли искате да деинсталирате разширението?",
"cronIsNotConfigured": "Планираните задачи не се изпълняват. Следователно входящите имейли, известията и напомнянията не работят. Моля, следвайте [инструкциите](https://www.espocrm.com/documentation/administration/server-configuration/#user-content-setup-a-crontab), за да настроите cron задача.",
"newExtensionVersionIsAvailable": "Налична е нова версия за {extensionName} - {latestVersion}.",
"upgradeVersion": "EspoCRM ще бъде надстроен до версия **{version}**. Моля, бъдете търпеливи, тъй като това може да отнеме известно време.",
"upgradeDone": "EspoCRM е обновен до версия **{version}**.",
"downloadUpgradePackage": "Изтегляне на обновления от [тук]({url}).",
"upgradeInfo": "Проверете [документацията]({url}) за това как да обновите своята инстанция на EspoCRM.",
"upgradeRecommendation": "Този начин на обновяване не се препоръчва. По-добре е да обновите от CLI.",
"newVersionIsAvailable": "Налична е нова версия на EspoCRM {latestVersion}. Моля, следвайте [инструкциите](https://www.espocrm.com/documentation/administration/upgrading/), за да обновите вашата инстанция.",
"formulaFunctions": "Още функции можете да намерите в [документацията]({documentationUrl}).",
"rebuildRequired": "Трябва да регенерирате кеша на системата от CLI."
},
"descriptions": {
"settings": "Системни настройки на приложение.",
"scheduledJob": "Работа които се изпълняват от Cron.",
"upgrade": "Подобрете EspoCRM.",
"clearCache": "Изчистете всички задния кеш.",
"rebuild": "Rebuild бекенд и ясно кеш.",
"users": "управление на потребители.",
"teams": "управление на екипи.",
"roles": "управление на роли.",
"portals": "управление портали.",
"portalRoles": "Роли за портал.",
"outboundEmails": "настройките на SMTP за изходящи писма.",
"groupEmailAccounts": "Група IMAP имейл акаунти. Email внос и-мейл до дело.",
"personalEmailAccounts": "Потребители имейл акаунти.",
"settings": "Системни настройки на платформата.",
"scheduledJob": "Задачи, които се изпълняват от Cronjob",
"upgrade": "Обновяване на EspoCRM.",
"clearCache": "Изчистване на целия back-end кеш.",
"rebuild": "Регенериране на back-end кеша на системата.",
"users": "Управление на потребители и акаунти в системата.",
"teams": "Управление на екипи и отдели.",
"roles": "Управление на роли на потребителите.",
"portals": "Управление на външни портали към системата.",
"portalRoles": "Роли за потребителите на външни портали към системата.",
"outboundEmails": "SMTP настройки за изходящи имейли.",
"groupEmailAccounts": "Групови IMAP имейл акаунти. Управление на хелпдеск и тикетинг функционалности.",
"personalEmailAccounts": "Потребителски имейл акаунти.",
"emailTemplates": "Шаблони за изходящи имейли.",
"import": "Импортиране на данни от CSV файл.",
"layoutManager": "Персонализиране на оформления (списък, детайлни, редактиране, търсене, актуализиране на маса).",
"layoutManager": "Персонализиране на оформления (лист, детайли, редактиране, филтри за търсене, масови обновявания).",
"userInterface": "Конфигуриране на UI.",
"authTokens": "Активни тентните сесии. IP адрес и дата на достъп.",
"authentication": "настройките за удостоверяване.",
"authTokens": "Активни сесии за удостоверяване. Информация за IP адрес и дата на последен достъп.",
"authentication": "Настройки за удостоверяване.",
"currency": "Настройки на валута и цени.",
"extensions": "Инсталирате или деинсталирате разширения.",
"integrations": "Интеграция с услуги на трети страни.",
"notifications": "В приложенията и настройките за известия по имейл.",
"inboundEmails": "Настройки за входяща поща.",
"portalUsers": "Потребителите на портала.",
"entityManager": "Създаване и редактиране на потребителски организации. Управление на полета и взаимоотношения.",
"emailFilters": "Имейл съобщенията, които съответстват на зададения филтър няма да се импортират.",
"actionHistory": "Влезте от действията на потребителите.",
"labelManager": "Персонализиране на етикети за кандидатстване.",
"authLog": "Вход история.",
"leadCapture": "входни точки API за уеб-към-клиент.",
"extensions": "Инсталиране и премахване на разширения/плъгини.",
"integrations": "Интеграция с външни услуги.",
"notifications": "Настройки за известия и автоматични имейли в системата.",
"inboundEmails": "Настройки за входящи имейли.",
"portalUsers": "Потребители на портала.",
"entityManager": "Създавайте и редактирайте персонализирани обекти. Управление на полета, релации, формули и оформление.",
"emailFilters": "Имейл съобщенията, които отговарят на посочения филтър, няма да бъдат импортирани.",
"actionHistory": "Логове от действията на потребителите.",
"labelManager": "Управление на езици и текстове на форми и обекти.",
"authLog": "История на влизане и удостоверяване",
"leadCapture": "API параметри за Web-to-Lead форма.",
"attachments": "Всички прикачени файлове, съхранявани в системата.",
"templateManager": "Персонализиране на шаблонни съобщения.",
"systemRequirements": "Системни изисквания за EspoCRM.",
"apiUsers": "Отделни потребители за целите на интеграция.",
"jobs": "Работа изпълняват задачи във фонов режим.",
"pdfTemplates": "Шаблони за отпечатване на PDF.",
"webhooks": "Управление webhooks.",
"dashboardTemplates": "Внедряване на табла за управление на потребители.",
"emailAddresses": "Всички emailes адреси, съхранявани в системата.",
"phoneNumbers": "Всички телефонни номера, съхранени в системата."
"apiUsers": "Отделяне на потребители за целите на интеграцията.",
"jobs": "Задачите изпълняват други задачи във фонов режим.",
"pdfTemplates": "Шаблони за генериране и отпечатване на PDF.",
"webhooks": "Управление на Webhooks.",
"dashboardTemplates": "Прилагане на шаблон върху потребители.",
"phoneNumbers": "Всички телефонни номера, съхранени в системата.",
"emailAddresses": "Всички имейл адреси, съхранявани в системата.",
"layoutSets": "Колекции от оформления, които могат да бъдат приложени на отдели, потребители или портали.",
"jobsSettings": "Настройки за обработка на системни задачи. Задачите изпълняват други действия във фонов режим.",
"sms": "SMS настройки.",
"formulaSandbox": "Може да пишете и тествате скриптове за формули, преди да ги приложите в системата."
},
"options": {
"previewSize": {
"x-small": "Много малък",
"small": "Малък",
"medium": "Среден",
"large": "Голям"
"large": "Голям",
"": "По подразбиране"
}
},
"logicalOperators": {
@@ -257,22 +274,29 @@
"not": "НЕ"
},
"systemRequirements": {
"requiredPhpVersion": "PHP версия",
"requiredMysqlVersion": "MySQL версия",
"host": "Сървър",
"dbname": "Име на базата данни",
"user": "потребителско име",
"writable": "писане",
"readable": "четлив",
"user": "Потребителско име",
"requiredMariadbVersion": "MariaDB версия"
},
"templates": {
"accessInfo": "Информация за достъп",
"accessInfoPortal": "Access Info за портали",
"assignment": "назначение",
"mention": "Споменавам",
"noteEmailReceived": "Забележка за което ще получи Email",
"notePost": "Забележка за публикация",
"notePostNoParent": "Забележка за публикация (без майка)",
"noteStatus": "Забележка за Актуализация на състоянието",
"passwordChangeLink": "Промяна на паролата за връзка"
"accessInfoPortal": "Информация за достъп до портали",
"assignment": "Назначение",
"mention": "Споменаване",
"notePost": "Бележка за публикация",
"notePostNoParent": "Бележка за публикация (без основен запис)",
"noteStatus": "Бележка за актуализация на статус",
"passwordChangeLink": "Връзка за промяна на паролата",
"noteEmailReceived": "Съобщение за получен имейл",
"twoFactorCode": "2FA код"
},
"strings": {
"rebuildRequired": "Нужно е регенериране на кеша на системата"
},
"keywords": {
"settings": "Система"
}
}

View File

@@ -1,5 +1,5 @@
{
"labels": {
"Create ApiUser": "Създаване на API на потребителя"
"Create ApiUser": "Създаване на потребител на API"
}
}

View File

@@ -1,27 +1,27 @@
{
"insertFromSourceLabels": {
"Document": "Поставете документа"
"Document": "Качете документа"
},
"fields": {
"role": "роля",
"role": "Роля",
"related": "Свързани",
"file": "досие",
"file": "Файл",
"type": "Тип",
"field": "поле",
"field": "Поле",
"sourceId": "Източник ID",
"storage": "съхранение",
"storage": "Съхранение",
"size": "Размер (байта)"
},
"options": {
"role": {
"Attachment": "Прикачен файл",
"Inline Attachment": "Inline Приложение",
"Import File": "внос на файла",
"Export File": "износ на файла",
"Mass Pdf": "Маса Pdf"
"Inline Attachment": "Прикачен файл",
"Import File": "Импортиране на файл",
"Export File": "Експортиране на файл",
"Mass Pdf": "Масово експортиране на PDf"
}
},
"presetFilters": {
"orphan": "сирак"
"orphan": "Изоставени файлове"
}
}

View File

@@ -2,35 +2,35 @@
"fields": {
"username": "Потребител",
"ipAddress": "IP адрес",
"requestTime": "Заявка за времето",
"createdAt": "поискано",
"isDenied": "е отказан",
"denialReason": "отказ Причина",
"portal": "портал",
"user": "потребител",
"authToken": "Означението за удостоверяване Създадена",
"requestTime": "Дата и време на заявката",
"createdAt": "Дата и време на заявката",
"isDenied": "Е неуспешно",
"denialReason": "Причина за отказ",
"portal": "Портал",
"user": "Потребител",
"authToken": "Създаден токън за автентификация",
"requestUrl": "URL адрес на заявката",
"requestMethod": "Заявка Метод",
"authTokenIsActive": "Означението за удостоверяване е активен",
"requestMethod": "Метод на заявката",
"authTokenIsActive": "Сесията е активна",
"authenticationMethod": "Метод за удостоверяване"
},
"links": {
"authToken": "Означението за удостоверяване Създадена",
"user": "потребител",
"portal": "портал",
"authToken": "Създаден токън за автентификация",
"user": "Потребител",
"portal": "Портал",
"actionHistoryRecords": "История за действие"
},
"presetFilters": {
"denied": "Отказан",
"accepted": "общоприет"
"denied": "Неуспешен",
"accepted": "Успешен"
},
"options": {
"denialReason": {
"CREDENTIALS": "Невалидни идентификационни данни",
"INACTIVE_USER": "Inactive потребител",
"IS_PORTAL_USER": "портал на потребителя",
"IS_NOT_PORTAL_USER": "Не портал на потребителя",
"USER_IS_NOT_IN_PORTAL": "Потребителят не е свързан с портала"
"INACTIVE_USER": "Деактивиран потребител",
"IS_PORTAL_USER": "Потребителят е към външен портал",
"IS_NOT_PORTAL_USER": "Потребителят не е към външен портал",
"USER_IS_NOT_IN_PORTAL": "Потребителят не е свързан с този портал"
}
}
}

View File

@@ -1,23 +1,23 @@
{
"fields": {
"user": "потребител",
"user": "Потребител",
"ipAddress": "IP адрес",
"lastAccess": "Дата Последен достъп",
"createdAt": "Вход Дата",
"isActive": "е активен",
"portal": "портал"
"lastAccess": "Дата на последен достъп",
"createdAt": "Дата на влизане",
"isActive": "Е активен",
"portal": "Портал"
},
"links": {
"actionHistoryRecords": "История за действие"
},
"presetFilters": {
"active": "Активен",
"inactive": "неактивен"
"inactive": "Неактивен"
},
"labels": {
"Set Inactive": "Комплект Inactive"
"Set Inactive": "Задай като неактивен"
},
"massActions": {
"setInactive": "Комплект Inactive"
"setInactive": "Задай като неактивен"
}
}

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