Compare commits

..

94 Commits

Author SHA1 Message Date
Yuri Kuznetsov 28356c6f13 9.1.9 2025-09-22 09:51:44 +03:00
Yuri Kuznetsov 58df349f43 move content type check to user 2025-09-20 13:13:03 +03:00
Yuri Kuznetsov 601d6a6743 content type check 2025-09-19 17:19:49 +03:00
Yuri Kuznetsov e350255bd7 fix null check 2025-09-09 14:57:44 +03:00
Yurii Kuznietsov cc1b864ab9 Merge pull request #3469 from AntonSlyzhko/htmlizer-translation-fix
Fix Htmlizer translation for enum fields
2025-09-09 14:51:58 +03:00
AntonSlyzhko 8ee66c2d08 Fix Htmlizer translation for enum fields 2025-09-09 14:23:56 +03:00
Yuri Kuznetsov 3608af3836 currency value object support int 2025-08-27 15:53:21 +03:00
Yuri Kuznetsov 97eb0614dc remove Uzhhorod timezone 2025-07-30 15:03:24 +03:00
Yuri Kuznetsov 7d0925de85 9.1.8 2025-07-25 14:02:42 +03:00
Yuri Kuznetsov 5d0350ef64 bool field web form 2025-07-25 11:33:15 +03:00
Yuri Kuznetsov d649181964 field loaders in the end 2025-07-25 09:47:10 +03:00
Yuri Kuznetsov 1c207e4445 fix avatar color 2025-07-24 11:51:06 +03:00
Yuri Kuznetsov dd8c584f6f jp_JP language 2025-07-24 08:49:20 +03:00
Yuri Kuznetsov 782f5e6b20 fix campaign stats query 2025-07-23 11:26:32 +03:00
Yuri Kuznetsov 4a890e777c campaign stats sql fix 2025-07-23 10:37:33 +03:00
Yuri Kuznetsov 370909de96 default side panel layout in layout set 2025-07-21 10:37:48 +03:00
Yuri Kuznetsov 7f8b299015 bg lang 2025-07-14 11:30:44 +03:00
Yuri Kuznetsov 9c1e52f3bf fix test 2025-07-10 16:41:06 +03:00
Yuri Kuznetsov 5b7a4ec8f0 email: skip html to markdown if no html 2025-07-10 16:05:21 +03:00
Yuri Kuznetsov 19a09cc6d1 sendbox ui impr 2025-07-10 15:53:50 +03:00
Yuri Kuznetsov 889a8bfc90 forbid access to system requirements 2025-07-10 15:37:00 +03:00
Yuri Kuznetsov 9e4e461fd0 fix css 2025-07-10 14:49:48 +03:00
Yuri Kuznetsov e3075abe4f selectize small fix 2025-07-10 13:37:40 +03:00
Yuri Kuznetsov 81ef42118a small multiselect css 2025-07-10 13:21:16 +03:00
Yuri Kuznetsov 72a069a1db ws reconnect impr 2025-07-05 12:09:28 +03:00
Yuri Kuznetsov 492d9abb25 document accounts allow direct access 2025-07-01 10:48:50 +03:00
Yuri Kuznetsov 4baab4dff4 9.1.7 2025-06-24 14:39:53 +03:00
Yuri Kuznetsov 9c9f35b33a fix type 2025-06-24 12:51:45 +03:00
Yuri Kuznetsov b31b71756b fix time zone list in import 2025-06-24 12:44:04 +03:00
Yuri Kuznetsov 285f0bc011 cleanup 2025-06-24 12:41:20 +03:00
Yuri Kuznetsov 4e08872f68 ref 2025-06-24 12:40:44 +03:00
Yuri Kuznetsov 929611f317 throw bad request on uri starting with double slash 2025-06-24 12:34:23 +03:00
Yuri Kuznetsov a2fce2d425 fr lang additions 2025-06-24 10:01:46 +03:00
Yuri Kuznetsov ca98fb39af fix import error access filter 2025-06-24 09:22:46 +03:00
Yuri Kuznetsov 97e5aa8f90 ref 2025-06-23 19:46:42 +03:00
Yuri Kuznetsov 8649f1ac0c fix ldap query 2025-06-23 19:41:34 +03:00
Yuri Kuznetsov c2f4afd520 entity factory create with additional attributes 2025-06-23 18:13:59 +03:00
Yuri Kuznetsov 4a38109d10 update cz 2025-06-22 14:12:11 +03:00
Yuri Kuznetsov cb6d806d89 update fr 2025-06-22 14:10:05 +03:00
Yuri Kuznetsov 709e5b7e62 fix list view with filter 2025-06-21 18:15:03 +03:00
Yuri Kuznetsov d00af77206 fix default currency 2025-06-20 09:32:47 +03:00
Yuri Kuznetsov d60a49a1bf css fix 2025-06-16 15:59:16 +03:00
Yuri Kuznetsov bd33d70365 fix list model removal recovery 2025-06-16 11:22:40 +03:00
Yuri Kuznetsov 26c2234ead docs 2025-06-16 11:22:10 +03:00
Yuri Kuznetsov 8cfc2321d1 composer email modal collapse not leave out 2025-06-16 10:44:16 +03:00
Yuri Kuznetsov 133d6144ad 9.1.6 2025-06-16 10:08:04 +03:00
Yuri Kuznetsov fe8bbb0d2e fix record grid shrink 2025-06-15 15:31:47 +03:00
Yuri Kuznetsov d406a7d78c collaborators own autocomplete 2025-06-15 13:34:18 +03:00
Yuri Kuznetsov fabbacdcc1 comment 2025-06-14 11:07:23 +03:00
Yuri Kuznetsov 809defb24a fix reduce usage 2025-06-14 10:16:27 +03:00
Yuri Kuznetsov 72f9ff1a4a fix multi-enum n^2 2025-06-13 21:13:23 +03:00
Yuri Kuznetsov 923bb27a93 fix pagination lost after full edit view 2025-06-13 13:38:14 +03:00
Yuri Kuznetsov 38f8fedec8 confirm cancel callback 2025-06-13 13:29:25 +03:00
Eymen Elkum a94fb01ceb fix: remove usage of non-existent 'hash' field (#3399) 2025-06-12 12:40:53 +03:00
Yuri Kuznetsov a90cd8a718 fix any of varchar 2025-06-11 16:55:38 +03:00
Yuri Kuznetsov e091db9063 reactions style change 2025-06-10 19:36:44 +03:00
Yuri Kuznetsov 4f9cfb487f cleanup 2025-06-10 19:26:42 +03:00
Yuri Kuznetsov 5f1a0f4f75 css likes fix 2025-06-10 19:26:05 +03:00
Yuri Kuznetsov dc18d5166f user default color 2025-06-10 18:53:54 +03:00
Yuri Kuznetsov 859f0c970b fix markdown list regexp 2025-06-10 11:18:05 +03:00
Yuri Kuznetsov 4f574abfe7 improve show password ui 2025-06-09 16:26:30 +03:00
Yuri Kuznetsov 042b15ae45 focus on toggle 2025-06-09 16:16:08 +03:00
Yuri Kuznetsov ccccc13662 fix id 2025-06-09 16:08:32 +03:00
Yuri Kuznetsov 3008f47620 login form view password 2025-06-09 16:07:11 +03:00
Yuri Kuznetsov 34df8c5f63 orm: support subquery in join on, ref 2025-06-09 13:46:00 +03:00
Yuri Kuznetsov 8feaadc162 calendar reRender date fix 2025-06-08 20:07:09 +03:00
Yuri Kuznetsov bf95f79775 distinct usage removal 2025-06-08 19:40:11 +03:00
Yuri Kuznetsov f2c4e0931d ref 2025-06-08 19:35:37 +03:00
Yuri Kuznetsov 9982ed0bef distinct usage rmoval 2025-06-08 19:21:27 +03:00
Yuri Kuznetsov cd860cb7d0 ref, getting rid of distinct 2025-06-08 19:09:00 +03:00
Yuri Kuznetsov 22f7d2a8b0 comment 2025-06-08 19:08:22 +03:00
Yuri Kuznetsov e37d35bc9b ref, comments 2025-06-08 10:58:44 +03:00
Yuri Kuznetsov 4ef5f24212 fix calendar link 2025-06-07 23:54:53 +03:00
Yuri Kuznetsov 6aebcaed97 lateral join 2025-06-07 20:34:31 +03:00
Yuri Kuznetsov d35f00b2cb orm: ANY_VALUE function 2025-06-07 13:33:05 +03:00
Yuri Kuznetsov 999f6f5593 status style 2025-06-06 20:44:36 +03:00
Yuri Kuznetsov f92e261ea8 fix inline attachment UUID compatibility 2025-06-05 22:09:08 +03:00
Yuri Kuznetsov ba03bfa6da schema 2025-06-04 15:17:21 +03:00
Yuri Kuznetsov bd3e06d403 syckBackWithModel param 2025-06-04 10:16:25 +03:00
Yuri Kuznetsov bf43ab05ff fix test 2025-06-02 19:04:18 +03:00
Yuri Kuznetsov 8d81ac3acb fix or helper 2025-06-02 18:49:02 +03:00
Yuri Kuznetsov 2d0255909e disable activities dashlet in portal 2025-06-02 10:08:25 +03:00
Yuri Kuznetsov 2634bb7208 add columnIsNull filter 2025-06-02 09:47:13 +03:00
Yuri Kuznetsov a4c80bf498 type 2025-06-01 12:19:10 +03:00
Yuri Kuznetsov eb19cd14b5 bundled extension support in developer mode 2025-05-31 11:37:34 +03:00
Yuri Kuznetsov c227fe7c34 pdf template default style 2025-05-29 18:54:58 +03:00
Yuri Kuznetsov 1fc92333dd autocomplete scroll fix 2025-05-29 13:51:03 +03:00
Yuri Kuznetsov 47c1a6fd05 dynamic logic field ref 2025-05-29 13:07:29 +03:00
Yuri Kuznetsov acf5c2984d 9.1.5 2025-05-29 10:00:56 +03:00
Yuri Kuznetsov 98eb304903 fix pgsql interval 2025-05-29 09:38:16 +03:00
Yuri Kuznetsov 1b385f987b js compress to support ios 2025-05-28 17:19:01 +03:00
Yuri Kuznetsov 34c1cdbe86 less js compress 2025-05-28 16:40:36 +03:00
Yuri Kuznetsov 8563945199 modal list without buttons sticky header fix 2025-05-28 12:26:17 +03:00
Yuri Kuznetsov 162e05449c field view: fromField handling 2025-05-28 12:00:59 +03:00
372 changed files with 10058 additions and 2763 deletions
+6 -2
View File
@@ -184,8 +184,12 @@ module.exports = grunt => {
comments: /^!/,
},
beautify: false,
mangle: true,
compress: true
compress: {
sequences: false,
collapse_vars: false,
keep_fargs: true,
webkit: true,
},
},
bundle: {
options: {
+7 -1
View File
@@ -54,7 +54,8 @@ class Admin
private Manager $adminNotificationManager,
private SystemRequirements $systemRequirements,
private ScheduledJob $scheduledJob,
private DataManager $dataManager
private DataManager $dataManager,
private Config\SystemConfig $systemConfig,
) {
if (!$this->user->isAdmin()) {
throw new Forbidden();
@@ -179,9 +180,14 @@ class Admin
* database: array<string, array<string, mixed>>,
* permission: array<string, array<string, mixed>>,
* }
* @throws Forbidden
*/
public function getActionSystemRequirementList(): object
{
if (!$this->user->isSuperAdmin() && $this->systemConfig->isRestrictedMode()) {
throw new Forbidden();
}
return (object) $this->systemRequirements->getAllRequiredList();
}
}
+12
View File
@@ -29,14 +29,26 @@
namespace Espo\Controllers;
use Espo\Core\Api\Response;
use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Api\Request;
use Espo\Core\Controllers\Record;
use Espo\Core\Select\SearchParams;
use Espo\Core\Select\Where\Item as WhereItem;
use stdClass;
class User extends Record
{
public function postActionCreate(Request $request, Response $response): stdClass
{
if ($request->getHeader('Content-Type') !== 'application/json') {
throw new BadRequest("Not supported content type.");
}
return parent::postActionCreate($request, $response);
}
public function postActionCreateLink(Request $request): bool
{
if (!$this->user->isAdmin()) {
@@ -58,6 +58,9 @@ class DataBuilder
public function __construct(private MetadataProvider $metadataProvider, private FieldUtil $fieldUtil)
{}
/**
* @return stdClass&object{table: stdClass, fieldTable: stdClass}
*/
public function build(Table $table): stdClass
{
$data = (object) [
+26 -1
View File
@@ -34,10 +34,11 @@ use Espo\Core\Utils\Config\SystemConfig;
use Espo\Core\Utils\Route as RouteUtil;
use Espo\Core\Utils\Log;
use Psr\Container\ContainerInterface;
use Slim\App as SlimApp;
use Slim\Exception\HttpBadRequestException;
use Slim\Factory\AppFactory as SlimAppFactory;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface as Psr7Response;
use Psr\Http\Message\ServerRequestInterface as Psr7Request;
@@ -64,6 +65,12 @@ class Starter
{
$slim = SlimAppFactory::create();
if (RouteUtil::isBadUri()) {
$this->processError($slim);
return;
}
if ($this->systemConfig->useCache()) {
$slim->getRouteCollector()->setCacheFile($this->routeCacheFile);
}
@@ -126,4 +133,22 @@ class Starter
$slimRoute->addMiddleware($middleware);
}
}
/**
* @param SlimApp<ContainerInterface|null> $slim
*/
private function processError(SlimApp $slim): void
{
$slim->add(function (Psr7Request $request): Psr7Response {
throw new HttpBadRequestException($request, 'Malformed request path.');
});
$slim->addErrorMiddleware(
displayErrorDetails: false,
logErrors: false,
logErrorDetails: false,
);
$slim->run();
}
}
@@ -29,10 +29,15 @@
namespace Espo\Core\Application;
use Espo\Core\Application\Exceptions\RunnerException;
/**
* Runs an application.
*/
interface Runner
{
/**
* @throws RunnerException
*/
public function run(): void;
}
@@ -345,11 +345,10 @@ class LdapLogin implements Login
private function createUser(array $userData, bool $isPortal = false): ?User
{
$this->log->info("LDAP: Creating new user.");
$this->log->debug("LDAP: user data: {userData}", ['userData' => print_r($userData, true)]);
$data = [];
$this->log->debug("LDAP: user data: {userData}", ['userData' => print_r($userData, true)]);
$ldapFields = $this->loadFields('ldap');
foreach ($ldapFields as $espo => $ldap) {
@@ -366,21 +365,20 @@ class LdapLogin implements Login
}
if ($isPortal) {
$userFields = $this->loadFields('portalUser');
$userAttributes = $this->loadFields('portalUser');
$userFields['type'] = 'portal';
$userAttributes['type'] = User::TYPE_PORTAL;
} else {
$userFields = $this->loadFields('user');
$userAttributes = $this->loadFields('user');
}
foreach ($userFields as $fieldName => $fieldValue) {
$data[$fieldName] = $fieldValue;
foreach ($userAttributes as $key => $value) {
$data[$key] = $value;
}
/** @var User $user */
$user = $this->entityManager->getNewEntity(User::ENTITY_TYPE);
$user = $this->entityManager->getRDBRepositoryByClass(User::class)->getNew();
$user->set($data);
$user->setMultiple($data);
$this->entityManager->saveEntity($user, [
// Prevent `user` service being loaded by hooks.
@@ -388,10 +386,7 @@ class LdapLogin implements Login
SaveOption::KEEP_NEW => true,
]);
$saverParams = SaverParams::create()
->withRawOptions([
'skipLinkMultipleHooks' => true,
]);
$saverParams = SaverParams::create()->withRawOptions(['skipLinkMultipleHooks' => true]);
$this->linkMultipleSaver->process($user, Field::TEAMS, $saverParams);
$this->linkMultipleSaver->process($user, 'portals', $saverParams);
@@ -402,31 +397,27 @@ class LdapLogin implements Login
$user->setAsNotNew();
$user->updateFetchedValues();
/** @var ?User */
return $this->entityManager->getEntityById(User::ENTITY_TYPE, $user->getId());
return $this->entityManager->getRDBRepositoryByClass(User::class)->getById($user->getId());
}
/**
* Find LDAP user DN by his username.
* Find LDAP user DN by their username.
*
* @throws LdapException
*/
private function findLdapUserDnByUsername(string $username): ?string
{
$ldapClient = $this->getLdapClient();
$options = $this->utils->getOptions();
$loginFilterString = '';
$filterString = !empty($options['userLoginFilter']) ?
$this->convertToFilterFormat($options['userLoginFilter']) : '';
if (!empty($options['userLoginFilter'])) {
$loginFilterString = $this->convertToFilterFormat($options['userLoginFilter']);
}
$objectClass = $options['userObjectClass'];
$attribute = $options['userNameAttribute'];
$usernameEscaped = $this->escapeUsernameFilter($username);
$searchString =
'(&(objectClass=' . $options['userObjectClass'] . ')' .
'(' . $options['userNameAttribute'] . '=' . $username . ')' .
$loginFilterString . ')';
$searchString = "(&(objectClass=$objectClass)($attribute=$usernameEscaped)$filterString)";
/** @var array<int, array{dn: string}> $result */
/** @noinspection PhpRedundantOptionalArgumentInspection */
@@ -435,12 +426,25 @@ class LdapLogin implements Login
$this->log->debug("LDAP: user search string: {string}.", ['string' => $searchString]);
foreach ($result as $item) {
return $item["dn"];
return $item['dn'];
}
return null;
}
private function escapeUsernameFilter(string $username): string
{
$map = [
'\\' => '\\5c',
'*' => '\\2a',
'(' => '\\28',
')' => '\\29',
"\x00" => '\\00',
];
return strtr($username, $map);
}
/**
* Check and convert filter item into LDAP format.
*/
+4 -4
View File
@@ -44,13 +44,13 @@ class Currency
private string $code;
/**
* @param numeric-string|float $amount An amount.
* @param numeric-string|float|int $amount An amount.
* @param string $code A currency code.
* @throws RuntimeException
*/
public function __construct($amount, string $code)
{
if (!is_string($amount) && !is_float($amount)) {
if (!is_string($amount) && !is_float($amount) && !is_int($amount)) {
throw new InvalidArgumentException();
}
@@ -58,7 +58,7 @@ class Currency
throw new RuntimeException("Bad currency code.");
}
if (is_float($amount)) {
if (is_float($amount) || is_int($amount)) {
$amount = (string) $amount;
}
@@ -197,7 +197,7 @@ class Currency
/**
* Create from an amount and code.
*
* @param numeric-string|float $amount An amount.
* @param numeric-string|float|int $amount An amount.
* @param string $code A currency code.
* @throws RuntimeException
*/
@@ -109,7 +109,7 @@ class ListLoadProcessor
$additionalList = $this->metadata
->get(['recordDefs', $entityType, 'listLoaderClassNameList']) ?? [];
$list = array_merge($entityLevelList, $list, $additionalList);
$list = array_merge($list, $additionalList, $entityLevelList);
return array_values(array_unique($list));
}
@@ -108,7 +108,7 @@ class ReadLoadProcessor
->get(['recordDefs', $entityType, 'readLoaderClassNameList']) ?? [];
/** @var class-string<Loader<Entity>>[] $list */
$list = array_merge($entityLevelList, $list, $additionalList);
$list = array_merge($list, $additionalList, $entityLevelList);
return array_values(array_unique($list));
}
+6 -4
View File
@@ -165,7 +165,7 @@ class Htmlizer
if (!$skipInlineAttachmentHandling) {
/** @var string $html */
$html = preg_replace_callback(
'/\?entryPoint=attachment&id=([A-Za-z0-9]*)/',
'/\?entryPoint=attachment&id=([A-Za-z0-9\-]*)/',
function ($matches) {
$id = $matches[1];
@@ -390,8 +390,10 @@ class Htmlizer
$translationPath = $this->metadata
->get(['entityDefs', $entity->getEntityType(), 'fields', $attribute, 'translation']);
if ($translationPath) {
$data[$attribute] = $this->language->get($translationPath . '.' . $attribute, $data[$attribute]);
if ($translationPath && $data[$keyRaw] !== null) {
$path = $translationPath . '.' . $data[$keyRaw];
$data[$attribute] = $this->language->get($path, $data[$keyRaw]);
}
}
@@ -550,7 +552,7 @@ class Htmlizer
for ($i = 0; $i < count($args) - 1; $i++) {
$arg = $args[$i];
if (!$arg) {
if ($arg) {
return true;
}
}
@@ -77,6 +77,14 @@ class EntityFactory implements EntityFactoryInterface
}
public function create(string $entityType): Entity
{
return $this->createInternal($entityType);
}
/**
* @param ?array<string, mixed> $attributeDefs
*/
private function createInternal(string $entityType, ?array $attributeDefs = null): Entity
{
$className = $this->getClassName($entityType);
@@ -90,6 +98,10 @@ class EntityFactory implements EntityFactoryInterface
throw new RuntimeException("Entity '$entityType' is not defined in metadata.");
}
if ($attributeDefs) {
$defs['attributes'] = array_merge($defs['attributes'] ?? [], $attributeDefs);
}
$relations = $this->injectableFactory->createWithBinding(
RDBRelations::class,
BindingContainerBuilder::create()
@@ -123,6 +135,16 @@ class EntityFactory implements EntityFactoryInterface
return $entity;
}
/**
* @param array<string, mixed> $attributeDefs
* @internal
* @noinspection PhpUnused
*/
public function createWithAdditionalAttributes(string $entityType, array $attributeDefs): Entity
{
return $this->createInternal($entityType, $attributeDefs);
}
/**
* @return class-string<Entity>
*/
@@ -148,8 +148,10 @@ class DefaultPopulator implements Populator
continue;
}
if ($entity->get($field) && !$entity->get($field . 'Currency')) {
$entity->set($field . 'Currency', $this->currencyConfig->getDefaultCurrency());
$currencyAttribute = $field . 'Currency';
if ($entity->get($field) !== null && !$entity->get($currencyAttribute)) {
$entity->set($currencyAttribute, $this->currencyConfig->getDefaultCurrency());
}
}
}
@@ -39,8 +39,11 @@ use Espo\ORM\Query\Part\Expression;
use Espo\ORM\Query\Part\Expression as Expr;
use Espo\ORM\Query\Part\WhereClause;
use Espo\ORM\Query\Part\WhereItem;
use Espo\ORM\Query\SelectBuilder;
use Espo\ORM\Query\SelectBuilder as QueryBuilder;
use Espo\ORM\Type\RelationType;
use LogicException;
use RuntimeException;
/**
* @since 9.0.0
@@ -109,6 +112,34 @@ class RelationQueryHelper
}
/**
* @param string|string[] $id
*
* @since 9.1.6
*/
public function prepareLinkWhereMany(string $entityType, string $link, string|array $id): WhereItem
{
$defs = $this->defs
->getEntity($entityType)
->getRelation($link);
if (!in_array($defs->getType(), [RelationType::HAS_MANY, RelationType::MANY_MANY])) {
throw new LogicException("Only many-many and has-many allowed.");
}
$builder = SelectBuilder::create()->from($entityType);
$whereItem = $this->prepareLinkWhere($defs, $entityType, $id, $builder);
if (!$whereItem) {
throw new RuntimeException("Not supported relationship.");
}
return $whereItem;
}
/**
* @internal Signature can be changed in future.
*
* @param string|string[] $id
*/
public function prepareLinkWhere(
@@ -128,6 +128,7 @@ class ItemGeneralConverter implements ItemConverter
case 'columnLike':
case 'columnIn':
case 'columnNotIn':
case 'columnIsNull':
case 'columnIsNotNull':
case 'columnEquals':
case 'columnNotEquals':
@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
@@ -1,5 +1,5 @@
{
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
"labels": {
"Create {entityType}": "Vytvořit {entityTypeTranslated}"
}
}
@@ -0,0 +1,5 @@
{
"labels": {
"Create {entityType}": "{entityTypeTranslated} を作成する"
}
}
@@ -0,0 +1,10 @@
{
"links": {
"meetings": "会議",
"calls": "通話",
"tasks": "タスク"
},
"labels": {
"Create {entityType}": "{entityTypeTranslated} を作成する"
}
}
@@ -0,0 +1,15 @@
{
"fields": {
"billingAddress": "請求先住所",
"shippingAddress": "お届け先の住所",
"website": " Webサイト"
},
"links": {
"meetings": "会議",
"calls": "通話",
"tasks": "タスク"
},
"labels": {
"Create {entityType}": "{entityTypeTranslated} を作成する"
}
}
@@ -0,0 +1,39 @@
{
"fields": {
"parent": "親",
"dateStart": "開始日",
"dateEnd": "終了日",
"duration": "間隔",
"status": "状態",
"reminders": "リマインダー",
"dateStartDate": "開始日(終日)",
"dateEndDate": "日付終了(終日)",
"isAllDay": "終日"
},
"links": {
"parent": "親"
},
"options": {
"status": {
"Planned": "計画済み",
"Held": "開催",
"Not Held": "開催されなかった"
}
},
"labels": {
"Create {entityType}": "{entityTypeTranslated} を作成する",
"Schedule {entityType}": "スケジュール {entityTypeTranslated}",
"Log {entityType}": "ログ {entityTypeTranslated}",
"Set Held": "セットホールド",
"Set Not Held": "セットは保持されません"
},
"massActions": {
"setHeld": "セットホールド",
"setNotHeld": "セットは保持されません"
},
"presetFilters": {
"planned": "計画済み",
"held": "開催",
"todays": "今日の"
}
}
@@ -0,0 +1,13 @@
{
"fields": {
"address": "住所"
},
"links": {
"meetings": "会議",
"calls": "通話",
"tasks": "タスク"
},
"labels": {
"Create {entityType}": "{entityTypeTranslated} を作成する"
}
}
@@ -0,0 +1,91 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM Open Source CRM application.
* Copyright (C) 2014-2025 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://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 Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Utils\Client;
use Espo\Core\Utils\Config;
use Espo\Core\Utils\File\Manager as FileManager;
use Espo\Core\Utils\Module;
use Espo\Core\Utils\Util;
/**
* Allows bundled extensions to work when the system is in the developer mode.
*/
class DevModeExtensionInitJsFileListProvider
{
public function __construct(
private Module $module,
private FileManager $fileManager,
private Config $config,
) {}
/**
* @return string[]
*/
public function get(): array
{
$developedModule = $this->config->get('developedModule');
if (!$developedModule) {
return [];
}
$output = [];
foreach ($this->getBundledModuleList() as $module) {
if ($module === $developedModule) {
continue;
}
$file = "client/custom/modules/$module/lib/init.js";
if ($this->fileManager->exists($file)) {
$output[] = $file;
}
}
return $output;
}
/**
* @return string[]
*/
private function getBundledModuleList(): array
{
$modules = array_values(array_filter(
$this->module->getList(),
fn ($item) => $this->module->get([$item, 'bundled'])
));
return array_map(
fn ($item) => Util::fromCamelCase($item, '-'),
$modules
);
}
}
@@ -31,6 +31,7 @@ namespace Espo\Core\Utils;
use Espo\Core\Api\Response;
use Espo\Core\Api\ResponseWrapper;
use Espo\Core\Utils\Client\DevModeExtensionInitJsFileListProvider;
use Espo\Core\Utils\Client\DevModeJsFileListProvider;
use Espo\Core\Utils\Client\LoaderParamsProvider;
use Espo\Core\Utils\Client\RenderParams;
@@ -67,6 +68,7 @@ class ClientManager
private Metadata $metadata,
private FileManager $fileManager,
private DevModeJsFileListProvider $devModeJsFileListProvider,
private DevModeExtensionInitJsFileListProvider $devModeExtensionInitJsFileListProvider,
private Module $module,
private LoaderParamsProvider $loaderParamsProvider,
private SystemConfig $systemConfig,
@@ -304,6 +306,7 @@ class ClientManager
return array_merge(
$this->metadata->get(['app', 'client', 'developerModeScriptList']) ?? [],
$this->getDeveloperModeBundleLibFileList(),
$this->devModeExtensionInitJsFileListProvider->get(),
);
}
@@ -50,4 +50,14 @@ class SystemConfig
{
return (string) $this->config->get('version');
}
/**
* Is restricted mode.
*
* @since 9.1.8
*/
public function isRestrictedMode(): bool
{
return (bool) $this->config->get('restrictedMode');
}
}
+17
View File
@@ -31,6 +31,7 @@ namespace Espo\Core\Utils;
use Espo\Core\Api\Action;
use Espo\Core\Api\Route as RouteItem;
use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Utils\Config\SystemConfig;
use Espo\Core\Utils\File\Manager as FileManager;
use Espo\Core\Utils\Resource\PathProvider;
@@ -187,6 +188,22 @@ class Route
return $pathFormatted;
}
/**
* @internal
* @since 9.1.7
*/
public static function isBadUri(): bool
{
/** @var string $serverRequestUri */
$serverRequestUri = $_SERVER['REQUEST_URI'];
if (str_starts_with($serverRequestUri, '//')) {
return true;
}
return false;
}
public static function detectBasePath(): string
{
/** @var string $serverScriptName */
+4
View File
@@ -230,6 +230,10 @@ class Email extends Entity
return $this->getFromContainer(self::ATTR_BODY_PLAIN);
}
if (!$this->isHtml()) {
return $this->getBody();
}
$body = $this->getBody() ?: '';
return EmailUtil::stripHtml($body) ?: null;
@@ -41,6 +41,9 @@ use Espo\Core\FieldProcessing\Loader;
use Espo\Core\FieldProcessing\Loader\Params;
use Espo\Core\ORM\EntityManager;
use Espo\ORM\Query\Part\Condition;
use Espo\ORM\Query\Part\Expression;
use Espo\ORM\Query\Part\Join;
use Espo\ORM\Query\SelectBuilder;
use PDO;
@@ -103,22 +106,40 @@ class StatsLoader implements Loader
$clickedCount = $this->entityManager
->getRDBRepository(CampaignLogRecord::ENTITY_TYPE)
->where([
'campaignId' => $entity->getId(),
'action' => CampaignLogRecord::ACTION_CLICKED,
'isTest' => false,
'id=s' => SelectBuilder::create()
->select('MIN:id')
->clone(
SelectBuilder::create()
->from(CampaignLogRecord::ENTITY_TYPE)
->leftJoin(
Join::createWithTableTarget(CampaignLogRecord::ENTITY_TYPE, 'b')
->withConditions(
Condition::and(
Condition::equal(
Expression::column('queueItemId'),
Expression::column('b.queueItemId'),
),
Condition::greater(
Expression::column('b.id'),
Expression::column('id'),
),
Condition::equal(
Expression::create('b.action'),
CampaignLogRecord::ACTION_CLICKED
),
Condition::equal(
Expression::create('b.isTest'),
false
)
)
)
)
->where([
'campaignId' => $entity->getId(),
'action' => CampaignLogRecord::ACTION_CLICKED,
'isTest' => false,
'campaignId' => $entity->getId(),
'b.id' => null,
])
->group('queueItemId')
->build()
->getRaw(),
])
)
->count();
$entity->set('clickedCount', $clickedCount);
@@ -15,8 +15,9 @@
"current": "Текущ",
"time": "време",
"User List": "Списък с потребители",
"Manage Users": "Управление на потребителите",
"View Calendar": "Вижте календара",
"Create Shared View": "Създаване на споделен изглед"
"Create Shared View": "Създаване на споделен изглед",
"Edit Shared View": "Редактиране на споделения изглед",
"Shared Mode Options": "Опции за споделен режим"
}
}
@@ -50,7 +50,8 @@
"Television": "Телевизия",
"Radio": "Радио",
"Newsletter": "Имейл бюлетин",
"Mail": "Електронна поща"
"Mail": "Електронна поща",
"Informational Email": "Информационен имейл"
},
"status": {
"Planning": "Планиране",
@@ -79,7 +80,8 @@
},
"messages": {
"unsubscribed": "Отписахте се от нашия имейл бюлетин",
"subscribedAgain": "Абонирахте се отново."
"subscribedAgain": "Абонирахте се отново.",
"cannotChangeType": "Не може да се промени типът."
},
"tooltips": {
"targetLists": "Цели, които трябва да получават съобщения.",
@@ -3,7 +3,7 @@
"name": "Име",
"number": "Номер",
"status": "Статус",
"account": "Сметка",
"account": "Клиент",
"contact": "Контакт",
"contacts": "Контакти",
"priority": "Приоритет",
@@ -2,6 +2,6 @@
"fields": {
"futureDays": "Следващите X Дни",
"useLastStage": "Групиране по последната фаза",
"team": "Отдел"
"team": "Екип"
}
}
@@ -36,7 +36,8 @@
"Activities": "Активности",
"KnowledgeBaseArticle": "Статия от документацията",
"KnowledgeBaseCategory": "Категория от документацията",
"CampaignLogRecord": "Запис в дневника на кампанията"
"CampaignLogRecord": "Запис в дневника на кампанията",
"TargetListCategory": "Категория на целевия списък"
},
"scopeNamesPlural": {
"Account": "Клиенти",
@@ -59,7 +60,8 @@
"Activities": "Активности",
"KnowledgeBaseArticle": "Документация",
"KnowledgeBaseCategory": "Категории за документация",
"CampaignLogRecord": "Записи в дневника на кампанията"
"CampaignLogRecord": "Записи в дневника на кампанията",
"TargetListCategory": "Категории на целевия списък"
},
"dashlets": {
"Leads": "Моите потенциални продажби",
@@ -19,7 +19,8 @@
"body": "Съдържание",
"categories": "Категории",
"language": "Език",
"portals": "Портали"
"portals": "Портали",
"bodyPlain": "Съдържание само с текст"
},
"links": {
"cases": "Тикети",
@@ -52,7 +52,6 @@
"storeSentEmails": "Имейлите ще бъдат съхранявани в CRM."
},
"presetFilters": {
"actual": "Актуални",
"complete": "Завършени"
}
}
@@ -16,7 +16,8 @@
"dateStartDate": "Начална дата (цял ден)",
"dateEndDate": "Крайна дата (цял ден)",
"isAllDay": "Цял ден",
"sourceEmail": "Източник на имейла"
"sourceEmail": "Източник на имейла",
"joinUrl": "URL адрес за присъединяване"
},
"options": {
"status": {
@@ -11,14 +11,16 @@
"optedOutCount": "Отписали се",
"targetStatus": "Целеви статус",
"isOptedOut": "Отписал се",
"sourceCampaign": "Източник на кампанията"
"sourceCampaign": "Източник на кампанията",
"category": "Категория"
},
"links": {
"accounts": "Клиенти",
"contacts": "Контакти",
"leads": "Потенциални продажба",
"campaigns": "Кампании",
"massEmails": "Масови имейли"
"massEmails": "Масови имейли",
"category": "Категория"
},
"options": {
"type": {
@@ -0,0 +1,8 @@
{
"labels": {
"Create TargetListCategory": "Създай категория"
},
"links": {
"targetLists": "Целеви списъци"
}
}
@@ -1,73 +1,67 @@
{
"fields": {
"name": "Název",
"emailAddress": "Email",
"website": "Web",
"phoneNumber": "Telefon",
"billingAddress": "Fakturační adresa",
"shippingAddress": "Doručovací adresa",
"description": "Popis",
"sicCode": "",
"industry": "Průmysl",
"type": "Typ",
"contactRole": "Pozice",
"campaign": "Kampaň"
"fields": {
"name": "Název",
"website": "Web",
"phoneNumber": "Telefon",
"billingAddress": "Fakturační adresa",
"shippingAddress": "Doručovací adresa",
"description": "Popis",
"sicCode": "",
"industry": "Průmysl",
"type": "Typ",
"contactRole": "Pozice",
"campaign": "Kampaň"
},
"links": {
"contacts": "Kontakty",
"opportunities": "Případy",
"cases": "Události",
"documents": "Dokumenty",
"meetingsPrimary": "Schůzky (rozšířené)",
"callsPrimary": "Volání (rozšířené)",
"tasksPrimary": "Úkoly (rozšířené)",
"emailsPrimary": "Emaily (rozšířené)",
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"options": {
"type": {
"Customer": "Zákazník",
"Reseller": "Prodejce"
},
"links": {
"contacts": "Kontakty",
"opportunities": "Případy",
"cases": "Události",
"documents": "Dokumenty",
"meetingsPrimary": "Schůzky (rozšířené)",
"callsPrimary": "Volání (rozšířené)",
"tasksPrimary": "Úkoly (rozšířené)",
"emailsPrimary": "Emaily (rozšířené)",
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"options": {
"type": {
"Customer": "Zákazník",
"Investor": "Investor",
"Partner": "Partner",
"Reseller": "Prodejce"
},
"industry": {
"Agriculture": "Zemědělství",
"Advertising": "Reklama",
"Apparel & Accessories": "Oblečení a doplňky",
"Automotive": "Automotive",
"Banking": "Bankovnictví",
"Biotechnology": "Biotechnologie",
"Chemical": "Chemie",
"Computer": "Počítače",
"Education": "Vzdělání",
"Electronics": "Elektronika",
"Entertainment & Leisure": "Zábava a volný čas",
"Finance": "Finance",
"Food & Beverage": "Stravování a nápoje",
"Grocery": "Potraviny",
"Insurance": "Pojištění",
"Legal": "Právo",
"Publishing": "Vydavatelství",
"Real Estate": "Nemovitosti",
"Service": "Služby",
"Sports": "Sport",
"Software": "Software",
"Technology": "Technologie",
"Telecommunications": "Telekomunikace",
"Television": "TV",
"Transportation": "Doprava",
"Venture Capital": "Rizikový kapitál"
}
},
"labels": {
"Create Account": "Vytvořit organizaci",
"Copy Billing": "Zkopírovat fakturační údaje"
},
"presetFilters": {
"customers": "Zákazníci",
"partners": "Partneři"
"industry": {
"Agriculture": "Zemědělství",
"Advertising": "Reklama",
"Apparel & Accessories": "Oblečení a doplňky",
"Banking": "Bankovnictví",
"Biotechnology": "Biotechnologie",
"Chemical": "Chemie",
"Computer": "Počítače",
"Education": "Vzdělání",
"Electronics": "Elektronika",
"Entertainment & Leisure": "Zábava a volný čas",
"Food & Beverage": "Stravování a nápoje",
"Grocery": "Potraviny",
"Insurance": "Pojištění",
"Legal": "Právo",
"Publishing": "Vydavatelství",
"Real Estate": "Nemovitosti",
"Service": "Služby",
"Sports": "Sport",
"Technology": "Technologie",
"Telecommunications": "Telekomunikace",
"Television": "TV",
"Transportation": "Doprava",
"Venture Capital": "Rizikový kapitál"
}
}
},
"labels": {
"Create Account": "Vytvořit organizaci",
"Copy Billing": "Zkopírovat fakturační údaje"
},
"presetFilters": {
"customers": "Zákazníci",
"partners": "Partneři"
}
}
@@ -1,6 +1,6 @@
{
"layouts": {
"detailConvert": "Konvertovat stopu",
"listForAccount": "Seznam (pro organizace)"
}
}
"layouts": {
"detailConvert": "Konvertovat stopu",
"listForAccount": "Seznam (pro organizace)"
}
}
@@ -1,13 +1,13 @@
{
"modes": {
"month": "Měsíc",
"week": "Týden",
"day": "Den",
"agendaWeek": "Týden",
"agendaDay": "Den"
},
"labels": {
"Today": "Dnes",
"Create": "Vytvořit"
}
}
"modes": {
"month": "Měsíc",
"week": "Týden",
"agendaWeek": "Týden",
"day": "Den",
"agendaDay": "Den"
},
"labels": {
"Today": "Dnes",
"Create": "Vytvořit"
}
}
@@ -1,51 +1,47 @@
{
"fields": {
"name": "Název",
"parent": "Rodič",
"status": "Status",
"dateStart": "Datum zahájení",
"dateEnd": "Datum ukončení",
"direction": "Směr",
"duration": "Trvání",
"description": "Popis",
"users": "Uživatelé",
"contacts": "Kontakty",
"leads": "Stopy",
"reminders": "Připomenutí",
"account": "Organizace"
"fields": {
"name": "Název",
"parent": "Rodič",
"dateStart": "Datum zahájení",
"dateEnd": "Datum ukončení",
"direction": "Směr",
"duration": "Trvání",
"description": "Popis",
"users": "Uživatelé",
"contacts": "Kontakty",
"leads": "Stopy",
"reminders": "Připomenutí",
"account": "Organizace"
},
"options": {
"status": {
"Planned": "Plánovaný",
"Held": "Uskutečněný",
"Not Held": "Neuskutečněný"
},
"links": {
"direction": {
"Outbound": "Odchozí",
"Inbound": "Příchozí"
},
"options": {
"status": {
"Planned": "Plánovaný",
"Held": "Uskutečněný",
"Not Held": "Neuskutečněný"
},
"direction": {
"Outbound": "Odchozí",
"Inbound": "Příchozí"
},
"acceptanceStatus": {
"None": "None",
"Accepted": "Přijatý",
"Declined": "Odmítnutý",
"Tentative": "Předběžný"
}
},
"massActions": {
"setHeld": "Nastavit jako uskutečněný",
"setNotHeld": "Nastavit jako neuskutečněný"
},
"labels": {
"Create Call": "Vytvořit volání",
"Set Held": "Nastavit jako uskutečněný",
"Set Not Held": "Nastavit jako neuskutečněný",
"Send Invitations": "Poslat pozvánky"
},
"presetFilters": {
"planned": "Plánovaný",
"held": "Uskutečněný",
"todays": "Dnešní"
"acceptanceStatus": {
"Accepted": "Přijatý",
"Declined": "Odmítnutý",
"Tentative": "Předběžný"
}
}
},
"massActions": {
"setHeld": "Nastavit jako uskutečněný",
"setNotHeld": "Nastavit jako neuskutečněný"
},
"labels": {
"Create Call": "Vytvořit volání",
"Set Held": "Nastavit jako uskutečněný",
"Set Not Held": "Nastavit jako neuskutečněný",
"Send Invitations": "Poslat pozvánky"
},
"presetFilters": {
"planned": "Plánovaný",
"held": "Uskutečněný",
"todays": "Dnešní"
}
}
@@ -1,55 +1,50 @@
{
"fields": {
"name": "Název",
"description": "Popis",
"status": "Status",
"type": "Typ",
"startDate": "Datum zahájení",
"endDate": "Datum ukončení",
"targetLists": "Cílové seznamy",
"sentCount": "Poslané",
"openedCount": "Otevřené",
"clickedCount": "Kliknuté",
"optedOutCount": "Odhlášené",
"bouncedCount": "Odmítnuté",
"hardBouncedCount": "Tvrdě odmítnuté",
"softBouncedCount": "Měkce odmítnuté",
"leadCreatedCount": "Vytvořených stop",
"revenue": "Příjem",
"revenueConverted": "příjem (konvertováno)"
"fields": {
"name": "Název",
"description": "Popis",
"type": "Typ",
"startDate": "Datum zahájení",
"endDate": "Datum ukončení",
"targetLists": "Cílové seznamy",
"sentCount": "Poslané",
"openedCount": "Otevřené",
"clickedCount": "Kliknuté",
"optedOutCount": "Odhlášené",
"bouncedCount": "Odmítnuté",
"hardBouncedCount": "Tvrdě odmítnuté",
"softBouncedCount": "Měkce odmítnuté",
"leadCreatedCount": "Vytvořených stop",
"revenue": "Příjem",
"revenueConverted": "příjem (konvertováno)"
},
"links": {
"targetLists": "Cílové seznamy",
"accounts": "Organizace",
"contacts": "Kontakty",
"leads": "Stopy",
"opportunities": "Případy"
},
"options": {
"type": {
"Television": "TV",
"Radio": "Rádio",
"Mail": "Email"
},
"links": {
"targetLists": "Cílové seznamy",
"accounts": "Organizace",
"contacts": "Kontakty",
"leads": "Stopy",
"opportunities": "Případy",
"campaignLogRecords": "Log"
},
"options": {
"type": {
"Email": "Email",
"Web": "Web",
"Television": "TV",
"Radio": "Rádio",
"Newsletter": "Newsletter",
"Mail": "Email"
},
"status": {
"Planning": "Plánované",
"Active": "Aktivní",
"Inactive": "Neaktivní",
"Complete": "Kompletní"
}
},
"labels": {
"Create Campaign": "Vytvořit kampaň",
"Target Lists": "Cílové seznamy",
"Statistics": "Statistiky",
"hard": "těžký",
"soft": "měkký"
},
"presetFilters": {
"active": "Aktivní"
"status": {
"Planning": "Plánované",
"Active": "Aktivní",
"Inactive": "Neaktivní",
"Complete": "Kompletní"
}
}
},
"labels": {
"Create Campaign": "Vytvořit kampaň",
"Target Lists": "Cílové seznamy",
"Statistics": "Statistiky",
"hard": "těžký",
"soft": "měkký"
},
"presetFilters": {
"active": "Aktivní"
}
}
@@ -1,24 +1,23 @@
{
"fields": {
"action": "Akce",
"actionDate": "Datum",
"data": "Data",
"campaign": "Kampaň",
"parent": "Cíl",
"object": "Objekt",
"application": "Aplikace"
},
"options": {
"action": {
"Sent": "Poslané",
"Opened": "Otevřené",
"Opted Out": "Odhlášené",
"Bounced": "Odmítnuté",
"Clicked": "Kliknuté",
"Lead Created": "Vytvořeno stop"
}
},
"labels": {
"All": "Vše"
"fields": {
"action": "Akce",
"actionDate": "Datum",
"campaign": "Kampaň",
"parent": "Cíl",
"object": "Objekt",
"application": "Aplikace"
},
"options": {
"action": {
"Sent": "Poslané",
"Opened": "Otevřené",
"Opted Out": "Odhlášené",
"Bounced": "Odmítnuté",
"Clicked": "Kliknuté",
"Lead Created": "Vytvořeno stop"
}
}
},
"labels": {
"All": "Vše"
}
}
@@ -1,42 +1,38 @@
{
"fields": {
"name": "Název",
"number": "Číslo",
"status": "Status",
"account": "Organizace",
"contact": "Kontakt",
"priority": "Priorita",
"type": "Typ",
"description": "Popis"
"fields": {
"name": "Název",
"number": "Číslo",
"account": "Organizace",
"contact": "Kontakt",
"priority": "Priorita",
"type": "Typ",
"description": "Popis"
},
"options": {
"status": {
"New": "Nový",
"Assigned": "Přiřazený",
"Pending": "Čekající",
"Closed": "Uzavřený",
"Rejected": "Odmítnutý",
"Duplicate": "Duplikovaný"
},
"links": {
"priority": {
"Low": "Malá",
"Normal": "Normální",
"High": "Vysoká",
"Urgent": "Urgentní"
},
"options": {
"status": {
"New": "Nový",
"Assigned": "Přiřazený",
"Pending": "Čekající",
"Closed": "Uzavřený",
"Rejected": "Odmítnutý",
"Duplicate": "Duplikovaný"
},
"priority" : {
"Low": "Malá",
"Normal": "Normální",
"High": "Vysoká",
"Urgent": "Urgentní"
},
"type": {
"Question": "Otázka",
"Incident": "Incident",
"Problem": "Problém"
}
},
"labels": {
"Create Case": "Vytvořit událost"
},
"presetFilters": {
"open": "Otevřený",
"closed": "Zavřený"
"type": {
"Question": "Otázka",
"Problem": "Problém"
}
}
},
"labels": {
"Create Case": "Vytvořit událost"
},
"presetFilters": {
"open": "Otevřený",
"closed": "Zavřený"
}
}
@@ -1,37 +1,35 @@
{
"fields": {
"name": "Název",
"emailAddress": "Email",
"title": "Pozice",
"account": "Organizace",
"accounts": "Organizace",
"phoneNumber": "Telefon",
"accountType": "Typ organizace",
"doNotCall": "Nevolat",
"address": "Adresa",
"opportunityRole": "Pozice vzhledem k případu",
"accountRole": "Pozice",
"description": "Popis",
"campaign": "Kampaň",
"targetLists": "Cílové seznamy",
"targetList": "Cílový seznam"
},
"links": {
"opportunities": "Případy",
"cases": "Události",
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"labels": {
"Create Contact": "Vytvořit kontakt"
},
"options": {
"opportunityRole": {
"": "",
"Decision Maker": "Rozhoduje",
"Evaluator": "Hodnotí",
"Influencer": "Má vliv"
}
"fields": {
"name": "Název",
"accountRole": "Pozice",
"account": "Organizace",
"accounts": "Organizace",
"phoneNumber": "Telefon",
"accountType": "Typ organizace",
"doNotCall": "Nevolat",
"address": "Adresa",
"opportunityRole": "Pozice vzhledem k případu",
"description": "Popis",
"campaign": "Kampaň",
"targetLists": "Cílové seznamy",
"targetList": "Cílový seznam",
"title": "Pozice"
},
"links": {
"opportunities": "Případy",
"cases": "Události",
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"labels": {
"Create Contact": "Vytvořit kontakt"
},
"options": {
"opportunityRole": {
"Decision Maker": "Rozhoduje",
"Evaluator": "Hodnotí",
"Influencer": "Má vliv"
}
}
}
}
@@ -1,42 +1,36 @@
{
"labels": {
"Create Document": "Vytvořit dokument",
"Details": "Detaily"
"labels": {
"Create Document": "Vytvořit dokument",
"Details": "Detaily"
},
"fields": {
"name": "Název",
"file": "Soubor",
"type": "Typ",
"publishDate": "Datum publikace",
"expirationDate": "Datum expirace",
"description": "Popis",
"accounts": "Organizace",
"folder": "Složka"
},
"links": {
"accounts": "Organizace",
"opportunities": "Případy",
"folder": "Složka"
},
"options": {
"status": {
"Active": "Aktivní",
"Expired": "Expirovaný",
"Canceled": "Zrušený"
},
"fields": {
"name": "Název",
"status": "Status",
"file": "Soubor",
"type": "Typ",
"source": "Zdroj",
"publishDate": "Datum publikace",
"expirationDate": "Datum expirace",
"description": "Popis",
"accounts": "Organizace",
"folder": "Složka"
},
"links": {
"accounts": "Organizace",
"opportunities": "Případy",
"folder": "Složka"
},
"options": {
"status": {
"Active": "Aktivní",
"Draft": "Draft",
"Expired": "Expirovaný",
"Canceled": "Zrušený"
},
"type": {
"": "-",
"Contract": "Kontrakt",
"NDA": "NDA",
"EULA": "EULA",
"License Agreement": "Licenční smlouva"
}
},
"presetFilters": {
"active": "Aktivní",
"draft": "Draft"
"type": {
"": "-",
"Contract": "Kontrakt",
"License Agreement": "Licenční smlouva"
}
}
},
"presetFilters": {
"active": "Aktivní"
}
}
@@ -1,10 +1,9 @@
{
"labels": {
"Create DocumentFolder": "Vytvořit složku",
"Manage Categories": "Spravovat složky",
"documents": "Dokumenty"
},
"links": {
"documents": "Dokumenty"
}
}
"labels": {
"Create DocumentFolder": "Vytvořit složku",
"Manage Categories": "Spravovat složky"
},
"links": {
"documents": "Dokumenty"
}
}
@@ -1,8 +1,8 @@
{
"labels": {
"Create Lead": "Vytvořit stopu",
"Create Contact": "Vytvořit kontakt",
"Create Task": "Vytvořit úkol",
"Create Case": "Vytvořit událost"
}
}
"labels": {
"Create Lead": "Vytvořit stopu",
"Create Contact": "Vytvořit kontakt",
"Create Task": "Vytvořit úkol",
"Create Case": "Vytvořit událost"
}
}
@@ -1,100 +1,99 @@
{
"scopeNames": {
"Account": "Organizace",
"Contact": "Kontakt",
"Lead": "Stopa",
"Target": "Cíl",
"Opportunity": "Případ",
"Meeting": "Schůzka",
"Calendar": "Kalendář",
"Call": "Volání",
"Task": "Úkol",
"Case": "Událost",
"Document": "Dokument",
"DocumentFolder": "Složka dokumentů",
"Campaign": "Kampaň",
"TargetList": "Cílový seznam"
},
"scopeNamesPlural": {
"Account": "Organizace",
"Contact": "Kontakty",
"Lead": "Stopy",
"Target": "Cíle",
"Opportunity": "Případy",
"Meeting": "Schůzky",
"Calendar": "Kalendáře",
"Call": "Volání",
"Task": "Úkoly",
"Case": "Události",
"Document": "Dokumenty",
"DocumentFolder": "Složky dokumentů",
"Campaign": "Kampa",
"TargetList": "Cílové seznamy"
},
"dashlets": {
"Leads": "Moje stopy",
"Opportunities": "Moje případy",
"Tasks": "Moje úkoly",
"Cases": "Moje události",
"Calendar": "Kalendář",
"Calls": "Moje volání",
"Meetings": "Moje schůzky",
"OpportunitiesByStage": "Případy podle stavu",
"OpportunitiesByLeadSource": "Případy podle zdroje",
"SalesByMonth": "Prodeje za měsíc",
"SalesPipeline": "Prodejní pipeline"
},
"labels": {
"Create InboundEmail": "Vytvořit příchodí email",
"Activities": "Aktivity",
"History": "Historie",
"Attendees": "Účastníci",
"Schedule Meeting": "Plánovaná schůzka",
"Schedule Call": "Plánované volání",
"Compose Email": "Sestavit email",
"Log Meeting": "Zapsat schůzku",
"Log Call": "Zapsat volání",
"Archive Email": "Archivovat email",
"Create Task": "Vytvořit úkol",
"Tasks": "Úkoly"
},
"fields": {
"billingAddressCity": "Město",
"billingAddressCountry": "Země",
"billingAddressPostalCode": "PSČ",
"billingAddressState": "Kraj",
"billingAddressStreet": "Ulice",
"addressCity": "Město",
"addressStreet": "Ulice",
"addressCountry": "Země",
"addressState": "Kraj",
"addressPostalCode": "PSČ",
"shippingAddressCity": "Město (doručovací)",
"shippingAddressStreet": "Ulice (doručovací)",
"shippingAddressCountry": "Země (doručovací)",
"shippingAddressState": "Kraj (doručovací)",
"shippingAddressPostalCode": "PSČ (doručovací)"
},
"links": {
"contacts": "Kontakty",
"opportunities": "Případy",
"leads": "Stopy",
"meetings": "Schůzky",
"calls": "Volání",
"tasks": "Úkoly",
"emails": "Emaily",
"accounts": "Organizace",
"cases": "Události",
"documents": "Dokumenty",
"account": "Organizace",
"opportunity": "Případ",
"contact": "Kontakt",
"parent": "Rodič"
},
"options": {
"reminderTypes": {
"Popup": "Vyskakovací",
"Email": "Email"
}
"links": {
"parent": "Rodič",
"contacts": "Kontakty",
"opportunities": "Případy",
"leads": "Stopy",
"meetings": "Schůzky",
"calls": "Volání",
"tasks": "Úkoly",
"emails": "Emaily",
"accounts": "Organizace",
"cases": "Události",
"documents": "Dokumenty",
"account": "Organizace",
"opportunity": "Případ",
"contact": "Kontakt"
},
"scopeNames": {
"Account": "Organizace",
"Contact": "Kontakt",
"Lead": "Stopa",
"Target": "Cíl",
"Opportunity": "Případ",
"Meeting": "Schůzka",
"Calendar": "Kalendář",
"Call": "Volání",
"Task": "Úkol",
"Case": "Událost",
"Document": "Dokument",
"DocumentFolder": "Složka dokumentů",
"Campaign": "Kampaň",
"TargetList": "Cílový seznam"
},
"scopeNamesPlural": {
"Account": "Organizace",
"Contact": "Kontakty",
"Lead": "Stopy",
"Target": "Cíle",
"Opportunity": "Případy",
"Meeting": "Schůzky",
"Calendar": "Kalendáře",
"Call": "Volání",
"Task": "Úkoly",
"Case": "Události",
"Document": "Dokumenty",
"DocumentFolder": "Složky dokumentů",
"Campaign": "Kampaně",
"TargetList": "Cílové seznamy"
},
"dashlets": {
"Leads": "Moje stopy",
"Opportunities": "Moje případy",
"Tasks": "Moje úkoly",
"Cases": "Moje události",
"Calendar": "Kalendář",
"Calls": "Moje volání",
"Meetings": "Moje schůzky",
"OpportunitiesByStage": "Případy podle stavu",
"OpportunitiesByLeadSource": "Případy podle zdroje",
"SalesByMonth": "Prodeje za měsíc",
"SalesPipeline": "Prodejní pipeline"
},
"labels": {
"Create InboundEmail": "Vytvořit příchodí email",
"Activities": "Aktivity",
"History": "Historie",
"Attendees": "Účastníci",
"Schedule Meeting": "Plánovaná schůzka",
"Schedule Call": "Plánované volání",
"Compose Email": "Sestavit email",
"Log Meeting": "Zapsat schůzku",
"Log Call": "Zapsat volání",
"Archive Email": "Archivovat email",
"Create Task": "Vytvořit úkol",
"Tasks": "Úkoly"
},
"fields": {
"billingAddressCity": "Město",
"addressCity": "Město",
"billingAddressCountry": "Země",
"addressCountry": "Země",
"billingAddressPostalCode": "PSČ",
"addressPostalCode": "PSČ",
"billingAddressState": "Kraj",
"addressState": "Kraj",
"billingAddressStreet": "Ulice",
"addressStreet": "Ulice",
"shippingAddressCity": "Město (doručovací)",
"shippingAddressStreet": "Ulice (doručovací)",
"shippingAddressCountry": "Země (doručovací)",
"shippingAddressState": "Kraj (doručovací)",
"shippingAddressPostalCode": "PSČ (doručovací)"
},
"options": {
"reminderTypes": {
"Popup": "Vyskakovací"
}
}
}
}
@@ -1,58 +1,54 @@
{
"labels": {
"Converted To": "Konvertováno do",
"Create Lead": "Vytvořit stopu",
"Convert": "Konvertovat",
"convert": "konvertovat"
"labels": {
"Converted To": "Konvertováno do",
"Create Lead": "Vytvořit stopu",
"Convert": "Konvertovat",
"convert": "konvertovat"
},
"fields": {
"name": "Název",
"title": "Pozice",
"website": "Web",
"phoneNumber": "Telefon",
"accountName": "Název organizace",
"doNotCall": "Nevolat",
"address": "Adresa",
"source": "Zdroj",
"opportunityAmount": "Částka případu",
"opportunityAmountConverted": "Částka případu (konvertováno)",
"description": "Popis",
"createdAccount": "Organizace",
"createdContact": "Kontakt",
"createdOpportunity": "Případ",
"campaign": "Kampaň",
"targetLists": "Cílové seznamy",
"targetList": "Cílový seznam"
},
"links": {
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"options": {
"status": {
"New": "Nový",
"Assigned": "Přiřazený",
"In Process": "V procesu",
"Converted": "Konvertovaný",
"Recycled": "Recyklovaný",
"Dead": "Mrtvý"
},
"fields": {
"name": "Název",
"emailAddress": "Email",
"title": "Pozice",
"website": "Web",
"phoneNumber": "Telefon",
"accountName": "Název organizace",
"doNotCall": "Nevolat",
"address": "Adresa",
"status": "Status",
"source": "Zdroj",
"opportunityAmount": "Částka případu",
"opportunityAmountConverted": "Částka případu (konvertováno)",
"description": "Popis",
"createdAccount": "Organizace",
"createdContact": "Kontakt",
"createdOpportunity": "Případ",
"campaign": "Kampaň",
"targetLists": "Cílové seznamy",
"targetList": "Cílový seznam"
},
"links": {
"targetLists": "Cílové seznamy",
"campaignLogRecords": "Log kampaně",
"campaign": "Kampaň"
},
"options": {
"status": {
"New": "Nový",
"Assigned": "Přiřazený",
"In Process": "V procesu",
"Converted": "Konvertovaný",
"Recycled": "Recyklovaný",
"Dead": "Mrtvý"
},
"source": {
"Call": "Volání",
"Email": "Email",
"Existing Customer": "Existující zákazník",
"Partner": "Partner",
"Public Relations": "Veřejné vztahy",
"Web Site": "Web",
"Campaign": "Kampaň",
"Other": "Ostatní"
}
},
"presetFilters": {
"active": "Aktivní",
"converted": "Konvertovaný"
"source": {
"Call": "Volání",
"Existing Customer": "Existující zákazník",
"Public Relations": "Veřejné vztahy",
"Web Site": "Web",
"Campaign": "Kampaň",
"Other": "Ostatní"
}
}
},
"presetFilters": {
"active": "Aktivní",
"converted": "Konvertovaný"
}
}
@@ -0,0 +1 @@
{}
@@ -1,48 +1,45 @@
{
"fields": {
"name": "Název",
"parent": "Rodič",
"status": "Status",
"dateStart": "Datum zahájení",
"dateEnd": "Datum ukončení",
"duration": "Trvání",
"description": "Popis",
"users": "Uživatelé",
"contacts": "Kontakty",
"leads": "Stopy",
"reminders": "Připomenutí",
"account": "Organizace"
"fields": {
"name": "Název",
"parent": "Rodič",
"dateStart": "Datum zahájení",
"dateEnd": "Datum ukončení",
"duration": "Trvání",
"description": "Popis",
"users": "Uživatelé",
"contacts": "Kontakty",
"leads": "Stopy",
"reminders": "Připomenutí",
"account": "Organizace"
},
"options": {
"status": {
"Planned": "Planovaný",
"Held": "Uskutečněný",
"Not Held": "Neuskutečněný"
},
"links": {
},
"options": {
"status": {
"Planned": "Planovaný",
"Held": "Uskutečněný",
"Not Held": "Neuskutečněný"
},
"acceptanceStatus": {
"None": "-",
"Accepted": "Přijatý",
"Declined": "Odmítnutý",
"Tentative": "Předběžný"
}
},
"massActions": {
"setHeld": "Nastavit jako uskutečněný",
"setNotHeld": "Nastavit jako neuskutečněný"
},
"labels": {
"Create Meeting": "Vytvořit schůzku",
"Set Held": "Nastavit jako uskutečněný",
"Set Not Held": "Nastavit jako neuskutečněný",
"Send Invitations": "Odeslat pozvánky",
"on time": "na čas",
"before": "před"
},
"presetFilters": {
"planned": "Plánovaný",
"held": "Uskutečněný",
"todays": "Dnešní"
"acceptanceStatus": {
"None": "-",
"Accepted": "Přijatý",
"Declined": "Odmítnutý",
"Tentative": "Předběžný"
}
}
},
"massActions": {
"setHeld": "Nastavit jako uskutečněný",
"setNotHeld": "Nastavit jako neuskutečněný"
},
"labels": {
"Create Meeting": "Vytvořit schůzku",
"Set Held": "Nastavit jako uskutečněný",
"Set Not Held": "Nastavit jako neuskutečněný",
"Send Invitations": "Odeslat pozvánky",
"on time": "na čas",
"before": "před"
},
"presetFilters": {
"planned": "Plánovaný",
"held": "Uskutečněný",
"todays": "Dnešní"
}
}
@@ -1,29 +1,35 @@
{
"fields": {
"name": "Název",
"account": "Organizace",
"stage": "Stav",
"amount": "Částka",
"probability": "Pravděpodobnost, %",
"leadSource": "Zdrojová stopa",
"doNotCall": "Nevolat",
"closeDate": "Deadline",
"contacts": "Kontakty",
"description": "Popis",
"amountConverted": "Částka (konvertováno)",
"amountWeightedConverted": "Vážená částka",
"campaign": "Kampaň"
},
"links": {
"contacts": "Kontakty",
"documents": "Dokumenty",
"campaign": "Kampaň"
},
"labels": {
"Create Opportunity": "Vytvořit případ"
},
"presetFilters": {
"open": "Otevřený",
"won": "Vyhraný"
"fields": {
"name": "Název",
"account": "Organizace",
"stage": "Stav",
"amount": "Částka",
"probability": "Pravděpodobnost, %",
"leadSource": "Zdrojová stopa",
"doNotCall": "Nevolat",
"closeDate": "Deadline",
"contacts": "Kontakty",
"description": "Popis",
"amountConverted": "Částka (konvertováno)",
"amountWeightedConverted": "Vážená částka",
"campaign": "Kampaň"
},
"links": {
"contacts": "Kontakty",
"documents": "Dokumenty",
"campaign": "Kampaň"
},
"options": {
"stage": {
"Closed Won": "VYFAKTUROVÁNO",
"Closed Lost": "ODMÍTNUTO"
}
}
},
"labels": {
"Create Opportunity": "Vytvořit případ"
},
"presetFilters": {
"open": "Otevřený",
"won": "Vyhraný"
}
}
@@ -0,0 +1 @@
{}
@@ -1,10 +1 @@
{
"options": {
"job": {
"CheckInboundEmails": "Zkontrolovat příchozí emaily",
"CheckEmailAccounts": "Zkontrolovat emaily",
"SendEmailReminders": "Připomenutí emaiů k poslání"
}
}
}
{}
@@ -1,29 +1,25 @@
{
"fields": {
"name": "Název",
"description": "Popis",
"entryCount": "Počet vstupů",
"campaigns": "Kampaně",
"endDate": "Datum ukončení",
"targetLists": "Cílové seznamy"
},
"links": {
"accounts": "Organizace",
"contacts": "Kontakty",
"leads": "Stopy",
"campaigns": "Kampaně"
},
"options": {
"type": {
"Email": "Email",
"Web": "Web",
"Television": "TV",
"Radio": "Radio",
"Newsletter": "Newsletter"
}
},
"labels": {
"Create TargetList": "Vytvořit cílový seznam",
"Opted Out": "Odhlášené"
"fields": {
"name": "Název",
"description": "Popis",
"entryCount": "Počet vstupů",
"campaigns": "Kampaně",
"endDate": "Datum ukončení",
"targetLists": "Cílové seznamy"
},
"links": {
"accounts": "Organizace",
"contacts": "Kontakty",
"leads": "Stopy",
"campaigns": "Kampaně"
},
"options": {
"type": {
"Television": "TV"
}
}
},
"labels": {
"Create TargetList": "Vytvořit cílový seznam",
"Opted Out": "Odhlášené"
}
}
@@ -1,45 +1,43 @@
{
"fields": {
"name": "Název",
"parent": "Rodič",
"status": "Status",
"dateStart": "Datum zahájení",
"dateEnd": "Datum dokončení",
"dateStartDate": "Datum zahájení (celý den)",
"dateEndDate": "Datum ukončení (celý den)",
"priority": "Priorita",
"description": "Popis",
"isOverdue": "Je zpozděné",
"account": "Organizace",
"dateCompleted": "Datum dokončení",
"attachments": "Přílohy"
"fields": {
"name": "Název",
"parent": "Rodič",
"dateStart": "Datum zahájení",
"dateEnd": "Datum dokončení",
"dateStartDate": "Datum zahájení (celý den)",
"dateEndDate": "Datum ukončení (celý den)",
"priority": "Priorita",
"description": "Popis",
"isOverdue": "Je zpozděné",
"account": "Organizace",
"dateCompleted": "Datum dokončení",
"attachments": "Přílohy"
},
"links": {
"attachments": "Přílohy"
},
"options": {
"status": {
"Not Started": "Nezahájeno",
"Started": "Zahájeno",
"Completed": "Dokončeno",
"Canceled": "Zrušeno",
"Deferred": "Odloženo"
},
"links": {
"attachments": "Přílohy"
},
"options": {
"status": {
"Not Started": "Nezahájeno",
"Started": "Zahájeno",
"Completed": "Dokončeno",
"Canceled": "Zrušeno",
"Deferred": "Odloženo"
},
"priority" : {
"Low": "Malá",
"Normal": "Normální",
"High": "Vysoká",
"Urgent": "Urgentní"
}
},
"labels": {
"Create Task": "Vytvořit úkol",
"Complete": "Dokončit"
},
"presetFilters": {
"actual": "Aktuální",
"completed": "Dokončené",
"todays": "Dnešní",
"overdue": "Zpožděné"
"priority": {
"Low": "Malá",
"Normal": "Normální",
"High": "Vysoká",
"Urgent": "Urgentní"
}
}
},
"labels": {
"Create Task": "Vytvořit úkol",
"Complete": "Dokončit"
},
"presetFilters": {
"completed": "Dokončené",
"todays": "Dnešní",
"overdue": "Zpožděné"
}
}
@@ -1,5 +1,5 @@
{
"links": {
"targetLists": "Cílové seznamy"
}
}
"links": {
"targetLists": "Cílové seznamy"
}
}
@@ -21,7 +21,8 @@
"targetLists": "Listes de cibles",
"campaignLogRecords": "Log de campagne",
"campaign": "Campagne",
"portalUsers": "Utilisateurs Portail"
"portalUsers": "Utilisateurs Portail",
"contactsPrimary": "Contacts (primaires)"
},
"options": {
"type": {
@@ -65,5 +66,8 @@
"presetFilters": {
"customers": "Clients",
"partners": "Partenaires"
},
"tabs": {
"Account": "Compte"
}
}
@@ -5,6 +5,7 @@
"listForContact": "Liste (pour contact)"
},
"templates": {
"reminder": "Rappel"
"reminder": "Rappel",
"cancellation": "Annulation"
}
}
@@ -15,7 +15,8 @@
"current": "actuel",
"time": "heure",
"User List": "Liste utilisateurs",
"Manage Users": "Gérer les utilisateurs",
"Create Shared View": "Créer une vue partagée"
"Create Shared View": "Créer une vue partagée",
"Edit Shared View": "Modifier la vue partagée",
"Shared Mode Options": "Options du mode partagé"
}
}
@@ -8,7 +8,8 @@
"users": "Utilisateurs",
"leads": "Prospects",
"reminders": "Notifications",
"account": "Compte"
"account": "Compte",
"acceptanceStatus": "Statut d'acceptation"
},
"options": {
"status": {
@@ -40,7 +40,8 @@
},
"options": {
"type": {
"Television": "Télévision"
"Television": "Télévision",
"Informational Email": "Email d'information"
},
"status": {
"Active": "Actif",
@@ -67,7 +68,8 @@
},
"messages": {
"unsubscribed": "Vous avez été désinscrit de notre liste d'envoi",
"subscribedAgain": "Vous vous êtes réinscrit."
"subscribedAgain": "Vous vous êtes réinscrit.",
"cannotChangeType": "Impossible de modifier le type."
},
"tooltips": {
"targetLists": "Cibles devant recevoir les messages",
@@ -7,7 +7,9 @@
"priority": "Priorité",
"lead": "Prospect",
"attachments": "Les pièces jointes",
"inboundEmail": "Compte de messagerie de groupe"
"inboundEmail": "Compte de messagerie de groupe",
"originalEmail": "\n",
"isInternal": "Caché du portail"
},
"links": {
"account": "Compte",
@@ -13,8 +13,12 @@
"targetLists": "Listes de cibles",
"targetList": "Liste de cibles",
"portalUser": "Utilisateur Portail",
"acceptanceStatus": "Statut d'acceptation",
"acceptanceStatusMeetings": "Statut d'acceptation (Rendez-vous)",
"acceptanceStatusCalls": "Statut d'acceptation (Appels)",
"title": "Titre du Compte",
"hasPortalUser": "Dispose d'un utilisateur de Portail"
"hasPortalUser": "Dispose d'un utilisateur de Portail",
"originalEmail": "Email original"
},
"links": {
"opportunities": "Opportunités",
@@ -3,6 +3,11 @@
"Create Lead": "Créer un Prospect",
"Create Contact": "Créer un Contact",
"Create Task": "Créer une tâche",
"Create Case": "Créer un Ticket"
"Create Case": "Créer un Ticket",
"Add to Contact": "Ajouter aux contacts",
"Add to Lead": "Ajouter aux prospects"
},
"fields": {
"tasks": "Tâche"
}
}
@@ -1 +1,14 @@
{}
{
"fields": {
"activityStatusList": "Statuts d'activité",
"historyStatusList": "Statuts de l'historique",
"completedStatusList": "Statuts terminés",
"canceledStatusList": "Statuts annulés"
},
"tooltips": {
"activityStatusList": "Les valeurs de statut déterminent si un enregistrement d'activité doit être affiché dans le panneau Activité et considéré comme courant.",
"historyStatusList": "Les valeurs de statut déterminant l'affichage d'un enregistrement d'activité dans le panneau Historique.",
"completedStatusList": "Valeurs de statut qui détermine quune activité est terminée.",
"canceledStatusList": "Les valeurs de statut déterminent qu'une activité est annulée et ne sera pas prise en compte dans les plages libres/occupées."
}
}
@@ -15,7 +15,8 @@
"MassEmail": "Emails groupé",
"Activities": "Activités",
"KnowledgeBaseArticle": "Article de la base de connaissance",
"KnowledgeBaseCategory": "Catégorie de la base de connaissance"
"KnowledgeBaseCategory": "Catégorie de la base de connaissance",
"TargetListCategory": "Catégorie de liste cible"
},
"scopeNamesPlural": {
"Account": "Comptes",
@@ -35,7 +36,8 @@
"Activities": "Activités",
"KnowledgeBaseArticle": "Base de connaissance",
"KnowledgeBaseCategory": "Catégories de la base de connaissance",
"CampaignLogRecord": "Logs"
"CampaignLogRecord": "Logs",
"TargetListCategory": "Catégories de liste cible"
},
"dashlets": {
"Leads": "Mes prospects",
@@ -64,7 +66,9 @@
"Archive Email": "Archiver l'Email",
"Create Task": "Créer une tâche",
"Tasks": "Tâches",
"Scheduler": "Emploi du temps"
"Scheduler": "Emploi du temps",
"Schedule": "Calendrier",
"Log": "Journal"
},
"fields": {
"billingAddressCity": "Ville",
@@ -97,7 +101,13 @@
"account": "Compte",
"opportunity": "Opportunité"
},
"notificationMessages": {
"eventAttendee": "{user} vous a ajouté à {entityType} {entity}"
},
"streamMessages": {
"eventConfirmationAccepted": "{invitee} a accepté de participer à {entityType} {entity}",
"eventConfirmationDeclined": "{invitee} a refusé de participer à {entityType} {entity}",
"eventConfirmationTentative": "{invitee} hésite à participer à {entityType} {entity}",
"eventConfirmationAcceptedThis": "{invitee} a accepté de participer",
"eventConfirmationDeclinedThis": "{invitee} a refusé de participer",
"eventConfirmationTentativeThis": "{invitee} est hésitant à participer"
@@ -12,7 +12,8 @@
"body": "Corps de texte",
"categories": "Catégories",
"language": "Langue",
"portals": "Portails"
"portals": "Portails",
"bodyPlain": "Corps Plaine"
},
"links": {
"cases": "Tickets",
@@ -2,7 +2,8 @@
"labels": {
"Converted To": "Converti en",
"Create Lead": "Créer un prospect",
"Convert": "Convertir"
"Convert": "Convertir",
"convert": "convertir"
},
"fields": {
"name": "Nom",
@@ -20,7 +21,12 @@
"campaign": "Campagne",
"targetLists": "Listes de cibles",
"targetList": "Liste de cibles",
"convertedAt": "Converti à"
"industry": "Industrie",
"acceptanceStatus": "Statut d'acceptation",
"acceptanceStatusMeetings": "Statut d'acceptation (Rendez-vous)",
"acceptanceStatusCalls": "Statut d'acceptation (Appels)",
"convertedAt": "Converti à",
"originalEmail": "Email original"
},
"links": {
"targetLists": "Listes de cibles",
@@ -36,7 +42,8 @@
"Assigned": "Assigné",
"In Process": "En cours",
"Converted": "Converti",
"Recycled": "Recyclé"
"Recycled": "Recyclé",
"Dead": "Mort"
},
"source": {
"Call": "Appel",
@@ -50,7 +57,7 @@
},
"presetFilters": {
"active": "Actif",
"actual": "En cours",
"converted": "Converti"
"converted": "Converti",
"actual": "Ouvert"
}
}
@@ -36,7 +36,7 @@
},
"labels": {
"Create MassEmail": "Créer un email groupé",
"Send Test": "Envoyer un message de test",
"Send Test": "Envoyer message test",
"System SMTP": "Système SMTP",
"system": "système",
"group": "groupe"
@@ -9,9 +9,12 @@
"leads": "Prospects",
"reminders": "Notifications",
"account": "Compte",
"acceptanceStatus": "Statut d'acceptation",
"dateStartDate": "Date de début (toute la journée)",
"dateEndDate": "Date de fin (toute la journée)",
"isAllDay": "Est toute la journée"
"isAllDay": "Est toute la journée",
"sourceEmail": "Source E-mail",
"joinUrl": "Rejoindre l'URL"
},
"options": {
"status": {
@@ -36,7 +39,9 @@
"Send Invitations": "Envoyer des Invitations",
"on time": "à l'heure",
"before": "en avance",
"All-Day": "Toute la journée"
"All-Day": "Toute la journée",
"Send Cancellation": "Envoyer l'annulation",
"Acceptance": "Acceptation"
},
"presetFilters": {
"planned": "Prévu",
@@ -45,6 +50,8 @@
},
"messages": {
"nothingHasBeenSent": "Aucun envoi effectué",
"selectAcceptanceStatus": "Définissez votre statut d'acceptation."
"selectAcceptanceStatus": "Définissez votre statut d'acceptation.",
"sendInvitationsToSelectedAttendees": "Des eMails d'invitation seront envoyés aux sélectionnés.",
"sendCancellationsToSelectedAttendees": "Des eMails d'annulation seront envoyés aux sélectionnés."
}
}
@@ -7,13 +7,16 @@
"targetLists": "Listes de cibles",
"optedOutCount": "Décompté",
"targetStatus": "Statut cible",
"isOptedOut": "Est exclu"
"isOptedOut": "Est exclu",
"sourceCampaign": "Campagne Source",
"category": "Catégorie"
},
"links": {
"accounts": "Comptes",
"leads": "Prospects",
"campaigns": "Campagnes",
"massEmails": "Emails groupés"
"massEmails": "Emails groupés",
"category": "Catégorie"
},
"options": {
"type": {
@@ -0,0 +1,8 @@
{
"labels": {
"Create TargetListCategory": "Créer une catégorie"
},
"links": {
"targetLists": "Listes Cibles"
}
}
@@ -10,11 +10,13 @@
"isOverdue": "En retard",
"account": "Compte",
"dateCompleted": "Date de Clôture",
"attachments": "Pièces jointes"
"attachments": "Pièces jointes",
"originalEmail": "E-mail Original"
},
"links": {
"attachments": "Pièces jointes",
"account": "Compte"
"account": "Compte",
"email": "eMail"
},
"options": {
"status": {
@@ -37,9 +39,12 @@
"overdue": "dépassé"
},
"presetFilters": {
"actual": "En cours",
"completed": "Terminés",
"todays": "Aujourd'hui",
"overdue": "En retard"
"overdue": "En retard",
"actual": "Ouvert"
},
"nameOptions": {
"replyToEmail": "Répondre à l'e-mail"
}
}
@@ -1,5 +1,10 @@
{
"links": {
"targetLists": "Listes de cibles"
},
"fields": {
"acceptanceStatus": "Statut d'acceptation",
"acceptanceStatusMeetings": "Statut d'acceptation (Rendez-vous)",
"acceptanceStatusCalls": "Statut d'acceptation (Appels)"
}
}
@@ -0,0 +1,111 @@
{
"fields": {
"name": "名前",
"emailAddress": "メール",
"website": " Webサイト",
"phoneNumber": "電話",
"billingAddress": "請求先住所",
"shippingAddress": "お届け先の住所",
"description": "説明",
"sicCode": "シックコード",
"industry": "業界",
"type": "タイプ",
"contactRole": "タイトル",
"campaign": "キャンペーン",
"targetLists": "ターゲットリスト",
"targetList": "ターゲットリスト",
"originalLead": "オリジナルリード",
"contactIsInactive": "非アクティブ"
},
"links": {
"contacts": "取引先担当者",
"opportunities": "機会",
"cases": "事例",
"documents": "文書",
"meetingsPrimary": "会議(拡大)",
"callsPrimary": "通話(拡張)",
"tasksPrimary": "タスク(拡張)",
"emailsPrimary": "メール(展開)",
"targetLists": "ターゲットリスト",
"campaignLogRecords": "キャンペーンログ",
"campaign": "キャンペーン",
"portalUsers": "ポータルユーザー",
"originalLead": "オリジナルリード",
"contactsPrimary": "連絡先(プライマリ)"
},
"options": {
"type": {
"Customer": "お客様",
"Investor": "投資家",
"Partner": "パートナー",
"Reseller": "リセラー"
},
"industry": {
"Agriculture": "農業",
"Advertising": "広告",
"Apparel & Accessories": "アパレル&アクセサリー",
"Automotive": "自動車",
"Banking": "銀行業務",
"Biotechnology": "バイオテクノロジー",
"Building Materials & Equipment": "建築資材・設備",
"Chemical": "化学薬品",
"Computer": "コンピューター",
"Education": "教育",
"Electronics": "エレクトロニクス",
"Energy": "エネルギー",
"Entertainment & Leisure": "エンターテイメントとレジャー",
"Finance": "ファイナンス",
"Food & Beverage": "食品・飲料",
"Grocery": "食料品",
"Healthcare": "健康管理",
"Insurance": "保険",
"Legal": "法律上の",
"Manufacturing": "製造業",
"Publishing": "出版",
"Real Estate": "不動産",
"Service": "サービス",
"Sports": "スポーツ",
"Software": "ソフトウェア",
"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": "サポート",
"Testing, Inspection & Certification": "試験、検査、認証",
"Wholesale": "卸売",
"Water": "水",
"Travel": "旅行"
}
},
"labels": {
"Create Account": "アカウントを作成する",
"Copy Billing": "請求書のコピー",
"Set Primary": "プライマリを設定"
},
"presetFilters": {
"customers": "顧客",
"partners": "パートナー",
"recentlyCreated": "最近作成されたもの"
},
"tabs": {
"Account": "アカウント",
"Support": "サポート"
}
}
@@ -0,0 +1,12 @@
{
"layouts": {
"detailConvert": "リードの変換",
"listForAccount": "リスト(アカウント用)",
"listForContact": "リスト(連絡先用)"
},
"templates": {
"invitation": "招待",
"reminder": "リマインダー",
"cancellation": "キャンセル"
}
}
@@ -0,0 +1,23 @@
{
"modes": {
"month": "月",
"week": "週",
"agendaWeek": "週",
"day": "日",
"agendaDay": "日",
"timeline": "タイムライン"
},
"labels": {
"Today": "今日",
"Create": "作成する",
"Shared": "共有",
"Add User": "ユーザーを追加",
"current": "現在",
"time": "時間",
"User List": "ユーザーリスト",
"View Calendar": "カレンダーを表示",
"Create Shared View": "共有ビューの作成",
"Edit Shared View": "共有ビューを編集",
"Shared Mode Options": "共有モードのオプション"
}
}
@@ -0,0 +1,51 @@
{
"fields": {
"name": "名前",
"parent": "親",
"status": "状態",
"dateStart": "開始日",
"dateEnd": "終了日",
"direction": "方向",
"duration": "間隔",
"description": "説明",
"users": "ユーザー",
"contacts": "取引先担当者",
"leads": "リード",
"reminders": "リマインダー",
"account": "アカウント",
"acceptanceStatus": "承認状況",
"uid": "ユーザID"
},
"options": {
"status": {
"Planned": "計画済み",
"Held": "開催",
"Not Held": "開催されなかった"
},
"direction": {
"Outbound": "アウトバウンド",
"Inbound": "インバウンド"
},
"acceptanceStatus": {
"None": "なし",
"Accepted": "承認済み",
"Declined": "拒否",
"Tentative": "仮の"
}
},
"massActions": {
"setHeld": "セットホールド",
"setNotHeld": "セットは保持されません"
},
"labels": {
"Create Call": "通話を作成",
"Set Held": "セットホールド",
"Set Not Held": "セットは保持されません",
"Send Invitations": "招待状を送る"
},
"presetFilters": {
"planned": "計画済み",
"held": "開催",
"todays": "今日の"
}
}
@@ -0,0 +1,90 @@
{
"fields": {
"name": "名前",
"description": "説明",
"status": "状態",
"type": "タイプ",
"startDate": "開始日",
"endDate": "終了日",
"targetLists": "ターゲットリスト",
"excludingTargetLists": "ターゲットリストの除外",
"sentCount": "送信済み",
"openedCount": "オープン",
"clickedCount": "クリックしました",
"optedOutCount": "オプトアウト",
"bouncedCount": "跳ね返った",
"hardBouncedCount": "ハードバウンス",
"softBouncedCount": "ソフトバウンス",
"leadCreatedCount": "作成されたリード",
"revenue": "収益",
"revenueConverted": "収益(換算)",
"budget": "予算",
"budgetConverted": "予算(換算)",
"contactsTemplate": "連絡先テンプレート",
"leadsTemplate": "リードテンプレート",
"accountsTemplate": "アカウントテンプレート",
"usersTemplate": "ユーザーテンプレート",
"mailMergeOnlyWithAddress": "住所が入力されていないレコードをスキップする",
"optedInCount": "オプトイン",
"budgetCurrency": "予算通貨"
},
"links": {
"targetLists": "ターゲットリスト",
"excludingTargetLists": "ターゲットリストの除外",
"accounts": "アカウント",
"contacts": "取引先担当者",
"leads": "リード",
"opportunities": "機会",
"campaignLogRecords": "ログ",
"massEmails": "大量メール",
"trackingUrls": "トラッキングURL",
"contactsTemplate": "連絡先テンプレート",
"leadsTemplate": "リードテンプレート",
"accountsTemplate": "アカウントテンプレート",
"usersTemplate": "ユーザーテンプレート"
},
"options": {
"type": {
"Email": "メール",
"Web": "ウェブ",
"Television": "テレビ",
"Radio": "無線",
"Newsletter": "ニュースレター",
"Mail": "郵便",
"Informational Email": "情報メール"
},
"status": {
"Planning": "計画",
"Active": "アクティブ",
"Inactive": "非アクティブ",
"Complete": "完了"
}
},
"labels": {
"Create Campaign": "キャンペーンを作成",
"Target Lists": "ターゲットリスト",
"Statistics": "統計",
"hard": "難しい",
"soft": "柔らかい",
"Unsubscribe": "購読解除",
"Mass Emails": "大量メール",
"Email Templates": "メールテンプレート",
"Unsubscribe again": "再度登録解除",
"Subscribe again": "再度購読する",
"Create Target List": "ターゲットリストを作成する",
"Mail Merge": "差し込み印刷",
"Generate Mail Merge PDF": "差し込み印刷PDFを生成"
},
"presetFilters": {
"active": "アクティブ"
},
"messages": {
"unsubscribed": "メーリングリストから登録解除されました。",
"subscribedAgain": "再度登録されました。",
"cannotChangeType": "タイプを変更できません。"
},
"tooltips": {
"targetLists": "メッセージを受信するターゲット。",
"excludingTargetLists": "メッセージを受信してはいけないターゲット。"
}
}
@@ -0,0 +1,44 @@
{
"fields": {
"action": "アクション",
"actionDate": "日付",
"data": "データ",
"campaign": "キャンペーン",
"parent": "ターゲット",
"object": "物体",
"application": "応用",
"queueItem": "キューアイテム",
"stringData": "文字列データ",
"stringAdditionalData": "文字列追加データ",
"isTest": "テスト"
},
"links": {
"queueItem": "キューアイテム",
"parent": "親",
"object": "物体",
"campaign": "キャンペーン"
},
"options": {
"action": {
"Sent": "送信済み",
"Opened": "オープン",
"Opted Out": "オプトアウト",
"Bounced": "跳ね返った",
"Clicked": "クリックしました",
"Lead Created": "リード作成",
"Opted In": "オプトイン"
}
},
"labels": {
"All": "全て"
},
"presetFilters": {
"sent": "送信済み",
"opened": "オープン",
"optedOut": "オプトアウト",
"bounced": "跳ね返った",
"clicked": "クリックしました",
"leadCreated": "リード作成",
"optedIn": "オプトイン"
}
}
@@ -0,0 +1,24 @@
{
"fields": {
"urlToUse": "URLの代わりに挿入するコード",
"campaign": "キャンペーン",
"action": "アクション",
"message": "メッセージ"
},
"links": {
"campaign": "キャンペーン"
},
"labels": {
"Create CampaignTrackingUrl": "トラッキングURLを作成する"
},
"options": {
"action": {
"Redirect": "リダイレクト",
"Show Message": "メッセージを表示"
}
},
"tooltips": {
"url": "受信者はリンクをクリックするとこの場所にリダイレクトされます。",
"message": "受信者がリンクをクリックするとメッセージが表示されます。Markdown がサポートされています。"
}
}
@@ -0,0 +1,63 @@
{
"fields": {
"name": "名前",
"number": "番号",
"status": "状態",
"account": "アカウント",
"contact": "取引先担当者",
"contacts": "取引先担当者",
"priority": "優先度",
"type": "タイプ",
"description": "説明",
"lead": "鉛",
"attachments": "添付ファイル",
"inboundEmail": "グループメールアカウント",
"originalEmail": "元のメール",
"isInternal": "ポータルから隠された"
},
"links": {
"account": "アカウント",
"contact": "取引先担当者(メイン)",
"Contacts": "取引先担当者",
"meetings": "会議",
"calls": "通話",
"tasks": "タスク",
"emails": "メール",
"articles": "ナレッジベースの記事",
"lead": "鉛",
"attachments": "添付ファイル",
"inboundEmail": "グループメールアカウント"
},
"options": {
"status": {
"New": "新しい",
"Assigned": "割り当て済み",
"Pending": "保留中",
"Closed": "閉鎖",
"Rejected": "拒否",
"Duplicate": "重複"
},
"priority": {
"Low": "低い",
"Normal": "普通",
"High": "高い",
"Urgent": "緊急"
},
"type": {
"Question": "質問",
"Incident": "事件",
"Problem": "問題"
}
},
"labels": {
"Create Case": "ケースを作成",
"Close": "近い",
"Reject": "拒否する",
"Closed": "閉鎖",
"Rejected": "拒否"
},
"presetFilters": {
"open": "開ける",
"closed": "閉鎖"
}
}
@@ -0,0 +1,57 @@
{
"fields": {
"name": "名前",
"emailAddress": "メール",
"accountRole": "役職",
"account": "取引先",
"accounts": "取引先",
"phoneNumber": "電話",
"accountType": "取引先の業種",
"doNotCall": "電話不可",
"address": "住所",
"opportunityRole": "商談に対する役割",
"description": "説明",
"campaign": "キャンペーン",
"targetLists": "ターゲットリスト",
"targetList": "ターゲットリスト",
"portalUser": "ポータルユーザー",
"originalLead": "オリジナルリード",
"acceptanceStatus": "承認状況",
"accountIsInactive": "アカウントが非アクティブ",
"acceptanceStatusMeetings": "承認状況(会議)",
"acceptanceStatusCalls": "受付状況(通話)",
"title": "アカウント名",
"hasPortalUser": "ポータルユーザーあり",
"originalEmail": "元のメール"
},
"links": {
"opportunities": "機会",
"cases": "事例",
"targetLists": "ターゲットリスト",
"campaignLogRecords": "キャンペーンログ",
"campaign": "キャンペーン",
"account": "アカウント(プライマリ)",
"accounts": "アカウント",
"casesPrimary": "症例(プライマリー)",
"portalUser": "ポータルユーザー",
"originalLead": "オリジナルリード",
"documents": "文書",
"tasksPrimary": "タスク(拡張)",
"opportunitiesPrimary": "機会(プライマリ)"
},
"labels": {
"Create Contact": "連絡先を作成"
},
"options": {
"opportunityRole": {
"Decision Maker": "意思決定者",
"Evaluator": "評価者",
"Influencer": "インフルエンサー"
}
},
"presetFilters": {
"portalUsers": "ポータルユーザー",
"notPortalUsers": "ポータルユーザーではない",
"accountActive": "アクティブ"
}
}
@@ -0,0 +1,7 @@
{
"fields": {
"futureDays": "次のX日",
"useLastStage": "最後に到達したステージでグループ化",
"team": "チーム"
}
}
@@ -0,0 +1,43 @@
{
"labels": {
"Create Document": "ドキュメントを作成",
"Details": "詳細"
},
"fields": {
"name": "名前",
"status": "状態",
"file": "ファイル",
"type": "タイプ",
"publishDate": "公開日",
"expirationDate": "有効期限",
"description": "説明",
"accounts": "アカウント",
"folder": "フォルダ"
},
"links": {
"accounts": "アカウント",
"opportunities": "機会",
"folder": "フォルダ",
"leads": "リード",
"contacts": "連絡先"
},
"options": {
"status": {
"Active": "アクティブ",
"Draft": "下書き",
"Expired": "期限切れ",
"Canceled": "キャンセル"
},
"type": {
"": "なし",
"Contract": "契約",
"NDA": "秘密保持契約",
"EULA": "エンドユーザー使用許諾契約書",
"License Agreement": "ライセンス契約"
}
},
"presetFilters": {
"active": "アクティブ",
"draft": "下書き"
}
}
@@ -0,0 +1,10 @@
{
"labels": {
"Create DocumentFolder": "ドキュメントフォルダを作成",
"Manage Categories": "フォルダの管理",
"Documents": "文書"
},
"links": {
"documents": "文書"
}
}
@@ -0,0 +1,13 @@
{
"labels": {
"Create Lead": "リードを作成",
"Create Contact": "連絡先を作成",
"Create Task": "タスクを作成",
"Create Case": "ケースを作成",
"Add to Contact": "連絡先に追加",
"Add to Lead": "リードに追加"
},
"fields": {
"tasks": "タスク"
}
}

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