diff --git a/bin/console b/bin/console index 5eb468cafe..134ac47bb4 100755 --- a/bin/console +++ b/bin/console @@ -23,14 +23,19 @@ use Alchemy\Phrasea\Command\SearchEngine\IndexPopulateCommand; use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; +use Alchemy\Phrasea\Command\Collection\UnPublishCollectionCommand; +use Alchemy\Phrasea\Command\Collection\PublishCollectionCommand; use Alchemy\Phrasea\Command\Collection\ListCollectionCommand; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; +use Alchemy\Phrasea\Command\Databox\UnMountDataboxCommand; +use Alchemy\Phrasea\Command\Databox\MountDataboxCommand; use Alchemy\Phrasea\Command\Databox\ListDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; use Alchemy\Phrasea\Command\RecordAdd; use Alchemy\Phrasea\Command\RescanTechnicalDatas; use Alchemy\Phrasea\CLI; +use Alchemy\Phrasea\Command\User\UserApplicationsCommand; use Alchemy\Phrasea\Command\Plugin\AddPlugin; use Alchemy\Phrasea\Command\Plugin\RemovePlugin; use Alchemy\Phrasea\Command\CheckConfig; @@ -112,11 +117,18 @@ $cli->command(new \module_console_fieldsDelete('fields:delete')); $cli->command(new \module_console_fieldsRename('fields:rename')); $cli->command(new \module_console_fieldsMerge('fields:merge')); +$cli->command(new UserApplicationsCommand('user:applications')); + $cli->command(new CreateCollection('collection:create')); +$cli->command(new UnPublishCollectionCommand('collection:unpublish')); +$cli->command(new PublishCollectionCommand('collection:publish')); $cli->command(new ListCollectionCommand('collection:list')); $cli->command(new ListDataboxCommand('databox:list')); $cli->command(new CreateDataboxCommand('databox:create')); +$cli->command(new UnMountDataboxCommand('databox:unmount')); +$cli->command(new MountDataboxCommand('databox:mount')); + $cli->command(new UserCreateCommand('user:create')); diff --git a/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php new file mode 100644 index 0000000000..6cfac3a388 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Publish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to publish but keep with existing right into present in application box.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really publish this collection? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->enable($this->container->getApplicationBox()); + $output->writeln('Publish collection successful'); + } catch (\Exception $e) { + $output->writeln('Publish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php new file mode 100644 index 0000000000..ef0fc9dae5 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Unpublish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to unpublish, the base_id is the same id used in API.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, sprintf(" Do you want really unpublish the collection %s? (y/N)", $collection->get_name()), 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->disable($this->container->getApplicationBox()); + $output->writeln('Unpublish collection successful'); + } catch (\Exception $e) { + $output->writeln('Unpublish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php index ce77c7dbb2..bcfe53ae4f 100644 --- a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php +++ b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php @@ -1,7 +1,16 @@ setName('databox:mount') - ->addArgument('databox', InputArgument::REQUIRED, 'Database name for the databox', null) - ->addArgument('owner', InputArgument::REQUIRED, 'Email of the databox admin user', null) - ->addOption('connection', 'c', InputOption::VALUE_NONE, 'Flag to set new database settings') - ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host', 'localhost') - ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port', 3306) - ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user', 'phrasea') - ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password', null); + parent::__construct('databox:mount'); + + $this->setDescription('Mount databox') + ->addArgument('databox', InputArgument::REQUIRED, 'Database name in Mysql', null) + ->addArgument('user_id', InputArgument::REQUIRED, 'The Id of user owner (this account became full admin on this databox)', null) + ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host') + ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port') + ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user') + ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password') + ; + + return $this; } protected function doExecute(InputInterface $input, OutputInterface $output) { - $databoxName = $input->getArgument('databox'); - $connectionSettings = $input->getOption('connection') == false ? null : new DataboxConnectionSettings( - $input->getOption('db-host'), - $input->getOption('db-port'), - $input->getOption('db-user'), - $input->getOption('db-password') - ); + try { - /** @var UserRepository $userRepository */ - $userRepository = $this->container['repo.users']; - /** @var DataboxService $databoxService */ - $databoxService = $this->container['databox.service']; + /** @var UserRepository $userRepository */ + $userRepository = $this->container['repo.users']; - $owner = $userRepository->findByEmail($input->getArgument('owner')); + $owner = $userRepository->find($input->getArgument('user_id')); - $databoxService->mountDatabox( - $databoxName, - $owner, - $connectionSettings - ); + if (empty($owner)) { + $output->writeln('User not found ! '); - $output->writeln('Databox mounted'); + return; + } + + if ($owner->isGuest() || !$this->container->getAclForUser($owner)->is_admin()) { + $output->writeln('Admin role is required for the owner ! '); + + return; + } + + $databoxName = $input->getArgument('databox'); + $dialog = $this->getHelperSet()->get('dialog'); + + $connectionSettings = new DataboxConnectionSettings( + $input->getOption('db-host')?:$this->container['conf']->get(['main', 'database', 'host']), + $input->getOption('db-port')?:$this->container['conf']->get(['main', 'database', 'port']), + $input->getOption('db-user')?:$this->container['conf']->get(['main', 'database', 'user']), + $input->getOption('db-password')?:$this->container['conf']->get(['main', 'database', 'password']) + ); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really mount this databox? (y/N)', 'N')); + } + while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + /** @var DataboxService $databoxService */ + $databoxService = $this->container['databox.service']; + + \phrasea::clear_sbas_params($this->container); + + $databox = $databoxService->mountDatabox( + $databoxName, + $owner, + $connectionSettings + ); + + $output->writeln("\n\tData-Box ID ".$databox->get_sbas_id()." mounted successful !\n"); + } catch (\Exception $e) { + $output->writeln('Mount databox failed :'.$e->getMessage().''); + } + + return 0; } + } diff --git a/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php new file mode 100644 index 0000000000..42199a519f --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php @@ -0,0 +1,60 @@ +setDescription('Unmount databox') + ->addArgument('databox_id', InputArgument::REQUIRED, 'The id of the databox to unmount', null) + ; + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + $databox = $this->container->findDataboxById($input->getArgument('databox_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really unmount this databox? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $databox->unmount_databox(); + $output->writeln('Unmount databox successful'); + } catch (\Exception $e) { + $output->writeln('Unmount databox failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php b/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php new file mode 100644 index 0000000000..cbef2cb103 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php @@ -0,0 +1,328 @@ +setDescription('List, Create, Edit, Delete application in Phraseanet (experimental)') + ->addOption('list', null, InputOption::VALUE_NONE, 'List all applications or user applications if --user_id is set') + ->addOption('create', null, InputOption::VALUE_NONE, 'Create application for user in Phraseanet') + ->addOption('edit', null, InputOption::VALUE_NONE, 'Edit application in Phraseanet work only if app_id is set') + ->addOption('delete', null, InputOption::VALUE_NONE, 'Delete application in Phraseanet, require an app_id') + ->addOption('user_id', 'u', InputOption::VALUE_REQUIRED, 'The Id of user owner of application (user_id), required to Create, Edit and Delete.') + ->addOption('app_id', 'a', InputOption::VALUE_REQUIRED, 'The application ID, required for Edit and Delete') + ->addOption('name', null, InputOption::VALUE_REQUIRED, 'The desired name for application, required for Create and Edit.') + ->addOption('type', 't', InputOption::VALUE_OPTIONAL, 'The kind of application, Desktop or Web.',ApiApplication::WEB_TYPE) + ->addOption('description', 'd', InputOption::VALUE_REQUIRED, 'The desired description for application.') + ->addOption('website', 'w', InputOption::VALUE_OPTIONAL, 'The desired url, eg: -w "https://www.alchemy.fr".') + ->addOption('callback', 'c', InputOption::VALUE_OPTIONAL, 'The desired endpoint for callback, required for web kind eg: -c "https://www.alchemy.fr/callback"') + ->addOption('webhook_url', null, InputOption::VALUE_REQUIRED, 'The webhook url') + ->addOption('active', null, InputOption::VALUE_OPTIONAL, 'Activate or deactivate the app, values true or false', 'true') + ->addOption('generate_token', null, InputOption::VALUE_NONE, 'Generate or regenerate the access token') + ->addOption('password_oauth2_gt', null, InputOption::VALUE_OPTIONAL, 'Activate or deactivate password OAuth2 grant type , values true or false', 'false') + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + $userId = $input->getOption('user_id'); + $appId = $input->getOption('app_id'); + $name = $input->getOption('name'); + $type = $input->getOption('type'); + $description = $input->getOption('description'); + $website = $input->getOption('website'); + $urlCallback = $input->getOption('callback'); + $webhookUrl = $input->getOption('webhook_url'); + $active = $input->getOption('active'); + $generateToken = $input->getOption('generate_token'); + $passwordOauth2Gt = $input->getOption('password_oauth2_gt'); + $create = $input->getOption('create'); + $edit = $input->getOption('edit'); + $delete = $input->getOption('delete'); + $list = $input->getOption('list'); + $jsonformat = $input->getOption('jsonformat'); + + $applicationManipulator = $this->container['manipulator.api-application']; + $apiOauthTokenManipulator = $this->container['manipulator.api-oauth-token']; + $accountRepository = $this->container['repo.api-accounts']; + $apiApllicationConverter = $this->container['converter.api-application']; + $userRepository = $this->container['repo.users']; + $apiOauthRepository = $this->container['repo.api-oauth-tokens']; + + if ($create) { + if (null === $user = $userRepository->find($userId)) { + $output->writeln('User not found'); + return 0; + } + + if (!$name) { + $output->writeln('Name of application must be provide with option --name.'); + return 0; + } + + if (!$description) { + $output->writeln('Desciption of application must be provide.'); + + return 0; + } + + try { + $application = $applicationManipulator + ->create( + $name, + $type, + $description, + $website, + $user, + $urlCallback + ); + + $apiAccountManipulator = $this->container['manipulator.api-account']; + $apiAccountManipulator->create($application, $user, V2::VERSION); + + $account = $accountRepository->findByUserAndApplication($user, $application); + + if ($generateToken) { + $apiOauthTokenManipulator->create($account); + } + + if ($passwordOauth2Gt) { + if (in_array($passwordOauth2Gt, ['true', 'false'])) { + $application->setGrantPassword(($passwordOauth2Gt == 'true') ? true : false); + $applicationManipulator->update($application); + } else { + $output->writeln(' Value of option --password_oauth2_gt should be "true" or "false"'); + + return 0; + } + } + + if ($webhookUrl) { + $applicationManipulator->setWebhookUrl($application, $webhookUrl); + $applicationManipulator->update($application); + } + + if ($active) { + if (in_array($active, ['true', 'false'])) { + $application->setActivated(($active == 'true') ? true : false); + $applicationManipulator->update($application); + } else { + $output->writeln('Value of option --active should be "true" or "false"'); + + return 0; + } + } else { + $application->setActivated(true); + $applicationManipulator->update($application); + } + + $this->showApllicationInformation($apiOauthRepository, $account, $application, $jsonformat, $output); + } catch (\Exception $e) { + $output->writeln('Create an application for user failed : '.$e->getMessage().''); + } + } elseif ($edit) { + if (!$appId) { + $output->writeln('ID of the application must be provided with option --app_id to edit the application.'); + + return 0; + } + + $application = $apiApllicationConverter->convert($appId); + $account = $accountRepository->findByUserAndApplication($application->getCreator(), $application); + + if (!$account) { + $output->writeln('ApiAccount not found!'); + + return 0; + } + + if ($name) { + $application->setName($name); + } + if ($type) { + $applicationManipulator->setType($application, $type); + if ($type == ApiApplication::DESKTOP_TYPE) { + $applicationManipulator->setRedirectUri($application, ApiApplication::NATIVE_APP_REDIRECT_URI); + } + } + if ($description) { + $application->setDescription($description); + } + if ($website) { + $applicationManipulator->setWebsiteUrl($application, $website); + } + if ($urlCallback) { + $applicationManipulator->setRedirectUri($application, $urlCallback); + } + if ($generateToken) { + if (null !== $devToken = $apiOauthRepository->findDeveloperToken($account)) { + $apiOauthTokenManipulator->renew($devToken); + } else { + $apiOauthTokenManipulator->create($account); + } + } + if ($passwordOauth2Gt) { + if (in_array($passwordOauth2Gt, ['true', 'false'])) { + $application->setGrantPassword(($passwordOauth2Gt == 'true') ? true : false); + } else { + $output->writeln(' Value of option --password_oauth2_gt should be "true" or "false"'); + + return 0; + } + } + if ($webhookUrl) { + $applicationManipulator->setWebhookUrl($application, $webhookUrl); + } + + if ($active) { + if (in_array($active, ['true', 'false'])) { + $application->setActivated(($active == 'true') ? true : false); + } else { + $output->writeln('Value of option --active should be "true" or "false"'); + + return 0; + } + } + + $applicationManipulator->update($application); + + $this->showApllicationInformation($apiOauthRepository, $account, $application, $jsonformat, $output); + } elseif ($list) { + if ($userId) { + if (null === $user = $userRepository->find($userId)) { + $output->writeln('User not found'); + + return 0; + } + + $accounts = $accountRepository->findByUser($user); + } else { + $accounts = $accountRepository->findAll(); + } + + $applicationList = []; + + foreach ($accounts as $account) { + $application = $account->getApplication(); + $token = $apiOauthRepository->findDeveloperToken($account); + + $applicationList[] = [ + $application->getId(), + $account->getUser()->getId(), + $application->getName(), + $application->getClientId(), + $application->getRedirectUri(), + ($token) ? $token->getOauthToken() : '-', + $application->isPasswordGranted() ? "true": "false" + ]; + } + + $applicationTable = $this->getHelperSet()->get('table'); + $headers = ['app_id', 'user_id', 'name', 'client_id', 'callback_url', 'generated token', 'grant_password status']; + + if ($jsonformat ) { + foreach ($applicationList as $appList) { + $appInfo[] = array_combine($headers, $appList); + } + + echo json_encode($appInfo); + } else { + $applicationTable = $this->getHelperSet()->get('table'); + $applicationTable + ->setHeaders($headers) + ->setRows($applicationList) + ->render($output) + ; + } + } elseif ($delete) { + if (!$appId) { + $output->writeln('ID of the application must be provided with option --app_id to delete the app.'); + + return 0; + } + + $application = $apiApllicationConverter->convert($appId); + + if (is_null($application->getCreator())) { + /** @var DialogHelper $dialog */ + $dialog = $this->getHelperSet()->get('dialog'); + + $continue = $dialog->askConfirmation($output, "It's a special phraseanet application, do you want really to delete it? (N/y)", false); + + if (!$continue) { + $output->writeln("See you later !"); + + return 0; + } + } + + $applicationManipulator->delete($application); + + $output->writeln("Application ID $appId deleted successfully !"); + } + + return 0; + } + + private function showApllicationInformation($apiOauthRepository, ApiAccount $account, ApiApplication $application, $jsonformat, $output) + { + $token = $account ? $apiOauthRepository->findDeveloperToken($account) : null; + + $applicationCreated = [ + $application->getClientSecret(), + $application->getClientId(), + $this->container["conf"]->get("servername") . "api/oauthv2/authorize", + $this->container["conf"]->get("servername") . "api/oauthv2/token", + ($token) ? $token->getOauthToken() : '-', + $application->isPasswordGranted() ? "true": "false" + ]; + + $headers = ['client secret', 'client ID', 'Authorize endpoint url', 'Access endpoint', 'generated token', 'grant_password status']; + if ($jsonformat ) { + $createdAppInfo = array_combine($headers, $applicationCreated); + echo json_encode($createdAppInfo); + } else { + $table = $this->getHelperSet()->get('table'); + $table + ->setHeaders($headers) + ->setRows([$applicationCreated]) + ->render($output) + ; + } + } +} diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 9b8f4ed04d..42339169d6 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -1573,9 +1573,9 @@ class V1Controller extends Controller $options->setFirstResult((int)($request->get('offset_start') ?: 0)); $options->setMaxResults((int)$request->get('per_page') ?: 10); - $this->getSearchEngine()->resetCache(); + $searchEngine = $this->getSearchEngine(); - $search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options); + $search_result = $searchEngine->query((string)$request->get('query'), $options); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getQueryText()); @@ -1583,12 +1583,12 @@ class V1Controller extends Controller $collectionsReferencesByDatabox = $options->getCollectionsReferencesByDatabox(); foreach ($collectionsReferencesByDatabox as $sbid => $references) { $databox = $this->findDataboxById($sbid); - $collectionsIds = array_map(function(CollectionReference $ref){return $ref->getCollectionId();}, $references); + $collectionsIds = array_map(function (CollectionReference $ref) { + return $ref->getCollectionId(); + }, $references); $this->getSearchEngineLogger()->log($databox, $search_result->getQueryText(), $search_result->getTotal(), $collectionsIds); } - $this->getSearchEngine()->clearCache(); - return $search_result; } diff --git a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php index 206efee9b2..8a463c2868 100644 --- a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php +++ b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php @@ -84,10 +84,14 @@ class DatabaseMetaProvider implements ServiceProviderInterface $service = $app['phraseanet.cache-service']; $config->setMetadataCacheImpl( - $service->factory('ORM_metadata', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/metadata', + )) ); $config->setQueryCacheImpl( - $service->factory('ORM_query', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/query', + )) ); $config->setResultCacheImpl( $service->factory('ORM_result', $app['orm.cache.driver'], $app['orm.cache.options']) diff --git a/package.json b/package.json index 8ac01be75a..d7d63b3742 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.139-d", + "phraseanet-production-client": "0.34.142-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index cb9c16cbbd..f50e2fbd6d 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -781,32 +781,32 @@ Affichage au demarrage beim Start anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive das beschriftliche Blatt anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre den Titel anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status die Status anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone eine Ikone anzeigen - web/prod/index.html.twig + web/prod/index.html.twig After metadata Nach Metadaten - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Hilfe - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -940,13 +940,13 @@ aufsteigender alphabetischer Reihenfolge web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc absteigender alphabetischer Reihenfolge web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1840,7 +1840,7 @@ Collection order Kollektionen Ordnung - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2022,7 +2022,7 @@ Couleur de selection Farbauswahl - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2352,7 +2352,7 @@ Defined by admin Von Administrator festgelegt - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Technische Informationen anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Nicht anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Grafiker (Voransicht mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Bildredakteur (Beschreibung mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3728,7 +3728,7 @@ In the answer grid In einem Tooltip - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3949,9 +3949,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Sprache + + Language selection + Language selection web/prod/index.html.twig @@ -4219,7 +4219,7 @@ Ma derniere question meine letzte Suchabfrage - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Anzeigemodus - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Allgemeine Benachrichtigungen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5161,12 +5161,12 @@ Presentation de vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Vorstellung der Voransichten des Sammelkorbes - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Veröffentlichungen - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6731,7 +6731,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6959,7 +6959,7 @@ Type de documents Dokumenttyp - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7082,7 +7082,7 @@ Une question personnelle eine persönliche Frage - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7992,7 +7992,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8019,7 +8019,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8049,7 +8049,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9464,7 +9464,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9585,12 +9585,12 @@ charger d'avantages de notifications Mehr Benachrichtigungen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir wählen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10029,12 +10029,12 @@ index::advance_search: disable-facet Facetten mit nur einem Ergebnis ausblenden (experimentell) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Einstellungen für Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10054,7 +10054,7 @@ index::advance_search: hidden-facet-values-order Versteckte Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits @@ -11097,17 +11097,17 @@ preview:: Description Beschreibung - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Beliebtheit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11827,17 +11827,17 @@ reponses:: images par pages : Suchergebnisse nach Seite - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11859,7 +11859,7 @@ reponses:: taille des images : Miniaturansichtengrösse - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 014648af36..1b7947bbde 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -782,32 +782,32 @@ Affichage au demarrage Display On startup - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Show Caption - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Show Title - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Show Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Display an Icon - web/prod/index.html.twig + web/prod/index.html.twig After metadata After captions - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -822,7 +822,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -941,13 +941,13 @@ Alphabetic asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1842,7 +1842,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2024,7 +2024,7 @@ Couleur de selection Selection color - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2355,7 +2355,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2533,7 +2533,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2543,7 +2543,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3551,7 +3551,7 @@ Graphiste (preview au rollover) Graphist (preview on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3660,7 +3660,7 @@ Iconographe (description au rollover) Iconograph (caption on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3731,7 +3731,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3952,9 +3952,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language + + Language selection + Language selection web/prod/index.html.twig @@ -4222,7 +4222,7 @@ Ma derniere question My last query - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4379,7 +4379,7 @@ Mode de presentation Display mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4709,7 +4709,7 @@ Notifications globales Global notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5164,12 +5164,12 @@ Presentation de vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Basket display setup - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5222,7 +5222,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6734,7 +6734,7 @@ Theme Skin - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6962,7 +6962,7 @@ Type de documents Document Type - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7085,7 +7085,7 @@ Une question personnelle The query - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7995,7 +7995,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8022,7 +8022,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8052,7 +8052,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9467,7 +9467,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ charger d'avantages de notifications Load more Notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Select - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10032,12 +10032,12 @@ index::advance_search: disable-facet Hide facets with 1 result (experimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Facets Preferences - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10057,14 +10057,14 @@ index::advance_search: hidden-facet-values-order Hidden Facets - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits By Hits web/prod/index.html.twig - + index::advance_search: order-by-hits-asc By Hits asc web/prod/index.html.twig @@ -10094,7 +10094,7 @@ June classes/module/report.php - + language Current Language login/include/language-block.html.twig @@ -11100,17 +11100,17 @@ preview:: Description Caption - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Timeline - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Statistics - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11680,7 +11680,7 @@ It is possible to place several search areas Delete Selection prod/actions/Push.html.twig - + prod:workzone:facetstab:search_and_facets_sort_options Option web/prod/index.html.twig @@ -11833,17 +11833,17 @@ It is possible to place several search areas reponses:: images par pages : Results per page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste List - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11865,7 +11865,7 @@ It is possible to place several search areas reponses:: taille des images : Thumbnails size - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index b26706cfd7..c9bfa96acf 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -781,32 +781,32 @@ Affichage au demarrage Afficher au démarrage - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Afficher la notice - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Afficher le titre - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Afficher les Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Afficher une icône - web/prod/index.html.twig + web/prod/index.html.twig After metadata Dans l'infobulle de description, après les métadonnées - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Aide - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -940,13 +940,13 @@ Alphabétique asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabétique desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1840,7 +1840,7 @@ Collection order Ordre des collections - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2022,7 +2022,7 @@ Couleur de selection Couleur de sélection - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2352,7 +2352,7 @@ Defined by admin Défini par l'admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Affichage des informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Masquer les informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Graphiste (prévisualisation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Iconographe (fiche d'indexation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3728,7 +3728,7 @@ In the answer grid Dans une infobulle séparée - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3949,9 +3949,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Langue + + Language selection + Language selection web/prod/index.html.twig @@ -4219,7 +4219,7 @@ Ma derniere question Ma dernière question - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Mode de présentation - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Notifications globales - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5161,12 +5161,12 @@ Presentation de vignettes Présentation de vignettes - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Présentation des vignettes de panier - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6733,7 +6733,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Theme Thème - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6961,7 +6961,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Type de documents Type de document - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7084,7 +7084,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Une question personnelle La question - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7994,7 +7994,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8021,7 +8021,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8051,7 +8051,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9467,7 +9467,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le charger d'avantages de notifications Charger davantage de notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Choisir - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10032,12 +10032,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: disable-facet Ne pas afficher les facettes contenant un seul résultat (expérimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Préférences sur les facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10057,14 +10057,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: hidden-facet-values-order Facettes masquées - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits Par occurrences web/prod/index.html.twig - + index::advance_search: order-by-hits-asc Par occurrences asc web/prod/index.html.twig @@ -10094,7 +10094,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le juin classes/module/report.php - + language Langue actuelle login/include/language-block.html.twig @@ -11100,17 +11100,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview:: Description Notice - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historique - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Popularité - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11836,17 +11836,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: images par pages : Résultats par page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11868,7 +11868,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: taille des images : Taille des vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index 54bdcdf01e..f9a2abee32 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -786,32 +786,32 @@ Affichage au demarrage Tonen bij opstart - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive De beschrijvingsfiche tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre De titel tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status De statussen tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Pictogram tonen - web/prod/index.html.twig + web/prod/index.html.twig After metadata After metadata - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -826,7 +826,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -945,13 +945,13 @@ Alphabetic asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1846,7 +1846,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2028,7 +2028,7 @@ Couleur de selection Kleur van de selectie - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2359,7 +2359,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2537,7 +2537,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2547,7 +2547,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3558,7 +3558,7 @@ Graphiste (preview au rollover) Graficus (preview au rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3667,7 +3667,7 @@ Iconographe (description au rollover) Iconographe (beschrijving bij de rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3738,7 +3738,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3959,9 +3959,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language + + Language selection + Language selection web/prod/index.html.twig @@ -4229,7 +4229,7 @@ Ma derniere question Mijn laatste vraag - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4386,7 +4386,7 @@ Mode de presentation Presentatie mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4716,7 +4716,7 @@ Notifications globales Algemene meldingen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5171,12 +5171,12 @@ Presentation de vignettes Presentatie van de thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Presentatie van de thumbnails in het mandje - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5229,7 +5229,7 @@ Publications Publicaties - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6741,7 +6741,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6969,7 +6969,7 @@ Type de documents Type van de documenten - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7092,7 +7092,7 @@ Une question personnelle Een persoonlijke vraag - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -8002,7 +8002,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8029,7 +8029,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8059,7 +8059,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9474,7 +9474,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9595,12 +9595,12 @@ charger d'avantages de notifications voordelen van meldingen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir kiezen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10039,12 +10039,12 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10064,7 +10064,7 @@ index::advance_search: hidden-facet-values-order index::advance_search: hidden-facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits @@ -11107,17 +11107,17 @@ preview:: Description Beschrijving - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Populariteit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11837,17 +11837,17 @@ reponses:: images par pages : Beelden per pagina : - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Lijst mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnail mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11869,7 +11869,7 @@ reponses:: taille des images : Grootte van de beelden : - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index a7c6c7ab7c..c0c3f2c8a1 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index b514c86069..0491c04b0d 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 52f5b99997..1ea17d4b6b 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index 218bcf559a..d1b2484c45 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index 11a2427908..c2d5465183 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -183,6 +183,9 @@ {% if GV_thesaurus %}
+ + +
@@ -733,11 +736,15 @@
-

{{ 'Language' | trans }} : {{ app['locale'] }}

+

{{ 'Language selection' | trans }}

diff --git a/yarn.lock b/yarn.lock index 8eae8692f5..66dfaf5868 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.139-d: - version "0.34.139-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.139-d.tgz#27edf283275c427ba226ff8b6c9461511dd6c827" - integrity sha512-8lOeLbUpa2qBi08d4Tr3FbtKf4TmSvTWhPtwCm7bZxls14TMXnYl7JRFZoYEMGEB1n1tbYozrl/Oz4qV7Pn6Sg== +phraseanet-production-client@0.34.142-d: + version "0.34.142-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.142-d.tgz#9b66d9722e316c9af0ec35c9f497932b70c28c2e" + integrity sha512-U4gholdgWgjas16yerS+XqfrTcAhOCMMwXSbj8sapCdHUxy1GnSSelKcx/OTp+IPU/0oWpjT0I6M27azxhA/Sw== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6"