diff options
Diffstat (limited to 'app')
255 files changed, 12331 insertions, 6624 deletions
diff --git a/app/Action/TaskAssignColorOnDueDate.php b/app/Action/TaskAssignColorOnDueDate.php index 06b70a18..791f0cff 100644 --- a/app/Action/TaskAssignColorOnDueDate.php +++ b/app/Action/TaskAssignColorOnDueDate.php @@ -74,7 +74,7 @@ class TaskAssignColorOnDueDate extends Base $results = array(); foreach ($data['tasks'] as $task) { - if ($task['date_due'] <= time() && $task['date_due'] > 0) { + if ($task['date_due'] <= time() && $task['date_due'] > 0 && $task['color_id'] != $this->getParam('color_id')) { $values = array( 'id' => $task['id'], 'color_id' => $this->getParam('color_id'), diff --git a/app/Action/TaskAssignCreator.php b/app/Action/TaskAssignCreator.php new file mode 100644 index 00000000..ce10b35f --- /dev/null +++ b/app/Action/TaskAssignCreator.php @@ -0,0 +1,98 @@ +<?php + +namespace Kanboard\Action; + +use Kanboard\Model\TaskModel; + +/** + * Assign a task to the creator + * + * @package Kanboard\Action + * @author Frederic Guillot + */ +class TaskAssignCreator extends Base +{ + /** + * Get automatic action description + * + * @access public + * @return string + */ + public function getDescription() + { + return t('Assign the task to its creator'); + } + + /** + * Get the list of compatible events + * + * @access public + * @return array + */ + public function getCompatibleEvents() + { + return array( + TaskModel::EVENT_MOVE_COLUMN, + ); + } + + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ + public function getActionRequiredParameters() + { + return array( + 'column_id' => t('Column'), + ); + } + + /** + * Get the required parameter for the event + * + * @access public + * @return string[] + */ + public function getEventRequiredParameters() + { + return array( + 'task_id', + 'task' => array( + 'project_id', + 'column_id', + 'creator_id', + ), + ); + } + + /** + * Execute the action + * + * @access public + * @param array $data Event data dictionary + * @return bool True if the action was executed or false when not executed + */ + public function doAction(array $data) + { + $values = array( + 'id' => $data['task_id'], + 'owner_id' => $data['task']['creator_id'], + ); + + return $this->taskModificationModel->update($values); + } + + /** + * Check if the event data meet the action condition + * + * @access public + * @param array $data Event data dictionary + * @return bool + */ + public function hasRequiredCondition(array $data) + { + return $data['task']['column_id'] == $this->getParam('column_id'); + } +} diff --git a/app/Api/Middleware/AuthenticationMiddleware.php b/app/Api/Middleware/AuthenticationMiddleware.php index 174dc467..d2910589 100644 --- a/app/Api/Middleware/AuthenticationMiddleware.php +++ b/app/Api/Middleware/AuthenticationMiddleware.php @@ -78,6 +78,10 @@ class AuthenticationMiddleware extends Base implements MiddlewareInterface return API_AUTHENTICATION_TOKEN; } + if (getenv('API_AUTHENTICATION_TOKEN')) { + return getenv('API_AUTHENTICATION_TOKEN'); + } + return $this->configModel->get('api_token'); } } diff --git a/app/Api/Procedure/BaseProcedure.php b/app/Api/Procedure/BaseProcedure.php index e31b3027..16ef5e05 100644 --- a/app/Api/Procedure/BaseProcedure.php +++ b/app/Api/Procedure/BaseProcedure.php @@ -21,51 +21,6 @@ abstract class BaseProcedure extends Base UserAuthorization::getInstance($this->container)->check($this->getClassName(), $procedure); } - protected function formatTask($task) - { - if (! empty($task)) { - $task['url'] = $this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), '', true); - $task['color'] = $this->colorModel->getColorProperties($task['color_id']); - } - - return $task; - } - - protected function formatTasks($tasks) - { - if (! empty($tasks)) { - foreach ($tasks as &$task) { - $task = $this->formatTask($task); - } - } - - return $tasks; - } - - protected function formatProject($project) - { - if (! empty($project)) { - $project['url'] = array( - 'board' => $this->helper->url->to('BoardViewController', 'show', array('project_id' => $project['id']), '', true), - 'calendar' => $this->helper->url->to('CalendarController', 'show', array('project_id' => $project['id']), '', true), - 'list' => $this->helper->url->to('TaskListController', 'show', array('project_id' => $project['id']), '', true), - ); - } - - return $project; - } - - protected function formatProjects($projects) - { - if (! empty($projects)) { - foreach ($projects as &$project) { - $project = $this->formatProject($project); - } - } - - return $projects; - } - protected function filterValues(array $values) { foreach ($values as $key => $value) { diff --git a/app/Api/Procedure/MeProcedure.php b/app/Api/Procedure/MeProcedure.php index 71d5555b..5a64cdb3 100644 --- a/app/Api/Procedure/MeProcedure.php +++ b/app/Api/Procedure/MeProcedure.php @@ -2,8 +2,6 @@ namespace Kanboard\Api\Procedure; -use Kanboard\Model\SubtaskModel; - /** * Me API controller * @@ -19,15 +17,12 @@ class MeProcedure extends BaseProcedure public function getMyDashboard() { - $user_id = $this->userSession->getId(); - $projects = $this->projectModel->getQueryColumnStats($this->projectPermissionModel->getActiveProjectIds($user_id))->findAll(); - $tasks = $this->taskFinderModel->getUserQuery($user_id)->findAll(); + $userId = $this->userSession->getId(); - return array( - 'projects' => $this->formatProjects($projects), - 'tasks' => $this->formatTasks($tasks), - 'subtasks' => $this->subtaskModel->getUserQuery($user_id, array(SubtaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS))->findAll(), - ); + return $this->taskListSubtaskAssigneeFormatter + ->withQuery($this->taskFinderModel->getUserQuery($userId)) + ->withUserId($userId) + ->format(); } public function getMyActivityStream() @@ -67,6 +62,6 @@ class MeProcedure extends BaseProcedure $project_ids = $this->projectPermissionModel->getActiveProjectIds($this->userSession->getId()); $projects = $this->projectModel->getAllByIds($project_ids); - return $this->formatProjects($projects); + return $this->projectsApiFormatter->withProjects($projects)->format(); } } diff --git a/app/Api/Procedure/ProjectProcedure.php b/app/Api/Procedure/ProjectProcedure.php index e8a34cd3..c9ac0ae6 100644 --- a/app/Api/Procedure/ProjectProcedure.php +++ b/app/Api/Procedure/ProjectProcedure.php @@ -15,33 +15,34 @@ class ProjectProcedure extends BaseProcedure public function getProjectById($project_id) { ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectById', $project_id); - return $this->formatProject($this->projectModel->getById($project_id)); + $project = $this->projectModel->getById($project_id); + return $this->projectApiFormatter->withProject($project)->format(); } public function getProjectByName($name) { $project = $this->projectModel->getByName($name); ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByName', $project['id']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } public function getProjectByIdentifier($identifier) { - $project = $this->formatProject($this->projectModel->getByIdentifier($identifier)); + $project = $this->projectModel->getByIdentifier($identifier); ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByIdentifier', $project['id']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } public function getProjectByEmail($email) { - $project = $this->formatProject($this->projectModel->getByEmail($email)); + $project = $this->projectModel->getByEmail($email); ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByEmail', $project['id']); - return $this->formatProject($project); + return $this->projectApiFormatter->withProject($project)->format(); } public function getAllProjects() { - return $this->formatProjects($this->projectModel->getAll()); + return $this->projectsApiFormatter->withProjects($this->projectModel->getAll())->format(); } public function removeProject($project_id) diff --git a/app/Api/Procedure/TaskProcedure.php b/app/Api/Procedure/TaskProcedure.php index 847d336f..b1ea0516 100644 --- a/app/Api/Procedure/TaskProcedure.php +++ b/app/Api/Procedure/TaskProcedure.php @@ -24,19 +24,22 @@ class TaskProcedure extends BaseProcedure public function getTask($task_id) { TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTask', $task_id); - return $this->formatTask($this->taskFinderModel->getById($task_id)); + $task = $this->taskFinderModel->getById($task_id); + return $this->taskApiFormatter->withTask($task)->format(); } public function getTaskByReference($project_id, $reference) { ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTaskByReference', $project_id); - return $this->formatTask($this->taskFinderModel->getByReference($project_id, $reference)); + $task = $this->taskFinderModel->getByReference($project_id, $reference); + return $this->taskApiFormatter->withTask($task)->format(); } public function getAllTasks($project_id, $status_id = TaskModel::STATUS_OPEN) { ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getAllTasks', $project_id); - return $this->formatTasks($this->taskFinderModel->getAll($project_id, $status_id)); + $tasks = $this->taskFinderModel->getAll($project_id, $status_id); + return $this->tasksApiFormatter->withTasks($tasks)->format(); } public function getOverdueTasks() diff --git a/app/Console/TaskOverdueNotificationCommand.php b/app/Console/TaskOverdueNotificationCommand.php index 36276615..1ef88cf5 100644 --- a/app/Console/TaskOverdueNotificationCommand.php +++ b/app/Console/TaskOverdueNotificationCommand.php @@ -2,6 +2,7 @@ namespace Kanboard\Console; +use Kanboard\Model\ProjectModel; use Kanboard\Model\TaskModel; use Kanboard\Core\Security\Role; use Symfony\Component\Console\Helper\Table; @@ -18,17 +19,30 @@ class TaskOverdueNotificationCommand extends BaseCommand ->setDescription('Send notifications for overdue tasks') ->addOption('show', null, InputOption::VALUE_NONE, 'Show sent overdue tasks') ->addOption('group', null, InputOption::VALUE_NONE, 'Group all overdue tasks for one user (from all projects) in one email') - ->addOption('manager', null, InputOption::VALUE_NONE, 'Send all overdue tasks to project manager(s) in one email'); + ->addOption('manager', null, InputOption::VALUE_NONE, 'Send all overdue tasks to project manager(s) in one email') + ->addOption('project', 'p', InputOption::VALUE_REQUIRED, 'Send notifications only the given project') + ; } protected function execute(InputInterface $input, OutputInterface $output) { + if ($input->getOption('project')) { + $tasks = $this->taskFinderModel->getOverdueTasksQuery() + ->beginOr() + ->eq(TaskModel::TABLE.'.project_id', $input->getOption('project')) + ->eq(ProjectModel::TABLE.'.identifier', $input->getOption('project')) + ->closeOr() + ->findAll(); + } else { + $tasks = $this->taskFinderModel->getOverdueTasks(); + } + if ($input->getOption('group')) { - $tasks = $this->sendGroupOverdueTaskNotifications(); + $tasks = $this->sendGroupOverdueTaskNotifications($tasks); } elseif ($input->getOption('manager')) { - $tasks = $this->sendOverdueTaskNotificationsToManagers(); + $tasks = $this->sendOverdueTaskNotificationsToManagers($tasks); } else { - $tasks = $this->sendOverdueTaskNotifications(); + $tasks = $this->sendOverdueTaskNotifications($tasks); } if ($input->getOption('show')) { @@ -44,7 +58,7 @@ class TaskOverdueNotificationCommand extends BaseCommand $rows[] = array( $task['id'], $task['title'], - date('Y-m-d', $task['date_due']), + date('Y-m-d H:i', $task['date_due']), $task['project_id'], $task['project_name'], $task['assignee_name'] ?: $task['assignee_username'], @@ -62,11 +76,11 @@ class TaskOverdueNotificationCommand extends BaseCommand * Send all overdue tasks for one user in one email * * @access public + * @param array $tasks + * @return array */ - public function sendGroupOverdueTaskNotifications() + public function sendGroupOverdueTaskNotifications(array $tasks) { - $tasks = $this->taskFinderModel->getOverdueTasks(); - foreach ($this->groupByColumn($tasks, 'owner_id') as $user_tasks) { $users = $this->userNotificationModel->getUsersWithNotificationEnabled($user_tasks[0]['project_id']); @@ -82,18 +96,18 @@ class TaskOverdueNotificationCommand extends BaseCommand * Send all overdue tasks in one email to project manager(s) * * @access public + * @param array $tasks + * @return array */ - public function sendOverdueTaskNotificationsToManagers() + public function sendOverdueTaskNotificationsToManagers(array $tasks) { - $tasks = $this->taskFinderModel->getOverdueTasks(); - foreach ($this->groupByColumn($tasks, 'project_id') as $project_id => $project_tasks) { $users = $this->userNotificationModel->getUsersWithNotificationEnabled($project_id); $managers = array(); foreach ($users as $user) { $role = $this->projectUserRoleModel->getUserRole($project_id, $user['id']); - if($role == Role::PROJECT_MANAGER) { + if ($role == Role::PROJECT_MANAGER) { $managers[] = $user; } } @@ -110,11 +124,11 @@ class TaskOverdueNotificationCommand extends BaseCommand * Send overdue tasks * * @access public + * @param array $tasks + * @return array */ - public function sendOverdueTaskNotifications() + public function sendOverdueTaskNotifications(array $tasks) { - $tasks = $this->taskFinderModel->getOverdueTasks(); - foreach ($this->groupByColumn($tasks, 'project_id') as $project_id => $project_tasks) { $users = $this->userNotificationModel->getUsersWithNotificationEnabled($project_id); diff --git a/app/Controller/ActionController.php b/app/Controller/ActionController.php index c935125a..43acf590 100644 --- a/app/Controller/ActionController.php +++ b/app/Controller/ActionController.php @@ -46,9 +46,10 @@ class ActionController extends BaseController public function confirm() { $project = $this->getProject(); + $action = $this->getAction($project); $this->response->html($this->helper->layout->project('action/remove', array( - 'action' => $this->actionModel->getById($this->request->getIntegerParam('action_id')), + 'action' => $action, 'available_events' => $this->eventManager->getAll(), 'available_actions' => $this->actionManager->getAvailableActions(), 'project' => $project, @@ -65,7 +66,7 @@ class ActionController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $action = $this->actionModel->getById($this->request->getIntegerParam('action_id')); + $action = $this->getAction($project); if (! empty($action) && $this->actionModel->remove($action['id'])) { $this->flash->success(t('Action removed successfully.')); diff --git a/app/Controller/ActionCreationController.php b/app/Controller/ActionCreationController.php index 7fee58d1..abb214e6 100644 --- a/app/Controller/ActionCreationController.php +++ b/app/Controller/ActionCreationController.php @@ -35,8 +35,9 @@ class ActionCreationController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; - if (empty($values['action_name']) || empty($values['project_id'])) { + if (empty($values['action_name'])) { return $this->create(); } @@ -57,8 +58,9 @@ class ActionCreationController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; - if (empty($values['action_name']) || empty($values['project_id']) || empty($values['event_name'])) { + if (empty($values['action_name']) || empty($values['event_name'])) { $this->create(); return; } @@ -109,6 +111,7 @@ class ActionCreationController extends BaseController */ private function doCreation(array $project, array $values) { + $values['project_id'] = $project['id']; list($valid, ) = $this->actionValidator->validateCreation($values); if ($valid) { diff --git a/app/Controller/ActivityController.php b/app/Controller/ActivityController.php index a1734af1..7a58e670 100644 --- a/app/Controller/ActivityController.php +++ b/app/Controller/ActivityController.php @@ -19,7 +19,7 @@ class ActivityController extends BaseController { $user = $this->getUser(); - $this->response->html($this->helper->layout->dashboard('activity/user', array( + $this->response->html($this->template->render('activity/user', array( 'title' => t('Activity stream for %s', $this->helper->user->getFullname($user)), 'events' => $this->helper->projectActivity->getProjectsEvents($this->projectPermissionModel->getActiveProjectIds($user['id']), 100), 'user' => $user, diff --git a/app/Controller/AppController.php b/app/Controller/AppController.php index 34b9c8cc..645cae7f 100644 --- a/app/Controller/AppController.php +++ b/app/Controller/AppController.php @@ -27,7 +27,7 @@ class AppController extends Base $this->response->html($this->helper->layout->app('app/forbidden', array( 'title' => t('Access Forbidden'), 'no_layout' => $withoutLayout, - ))); + )), 403); } } diff --git a/app/Controller/BaseController.php b/app/Controller/BaseController.php index 5233e27f..43ecfaab 100644 --- a/app/Controller/BaseController.php +++ b/app/Controller/BaseController.php @@ -74,13 +74,14 @@ abstract class BaseController extends Base { $task_id = $this->request->getIntegerParam('task_id'); $file_id = $this->request->getIntegerParam('file_id'); + $project_id = $this->request->getIntegerParam('project_id'); $model = 'projectFileModel'; if ($task_id > 0) { $model = 'taskFileModel'; - $project_id = $this->taskFinderModel->getProjectId($task_id); + $task_project_id = $this->taskFinderModel->getProjectId($task_id); - if ($project_id !== $this->request->getIntegerParam('project_id')) { + if ($project_id != $task_project_id) { throw new AccessForbiddenException(); } } @@ -91,6 +92,12 @@ abstract class BaseController extends Base throw new PageNotFoundException(); } + if (isset($file['task_id']) && $file['task_id'] != $task_id) { + throw new AccessForbiddenException(); + } else if (isset($file['project_id']) && $file['project_id'] != $project_id) { + throw new AccessForbiddenException(); + } + $file['model'] = $model; return $file; } @@ -138,14 +145,7 @@ abstract class BaseController extends Base return $user; } - /** - * Get the current subtask - * - * @access protected - * @return array - * @throws PageNotFoundException - */ - protected function getSubtask() + protected function getSubtask(array $task) { $subtask = $this->subtaskModel->getById($this->request->getIntegerParam('subtask_id')); @@ -153,6 +153,149 @@ abstract class BaseController extends Base throw new PageNotFoundException(); } + if ($subtask['task_id'] != $task['id']) { + throw new AccessForbiddenException(); + } + return $subtask; } + + protected function getComment(array $task) + { + $comment = $this->commentModel->getById($this->request->getIntegerParam('comment_id')); + + if (empty($comment)) { + throw new PageNotFoundException(); + } + + if (! $this->userSession->isAdmin() && $comment['user_id'] != $this->userSession->getId()) { + throw new AccessForbiddenException(); + } + + if ($comment['task_id'] != $task['id']) { + throw new AccessForbiddenException(); + } + + return $comment; + } + + protected function getExternalTaskLink(array $task) + { + $link = $this->taskExternalLinkModel->getById($this->request->getIntegerParam('link_id')); + + if (empty($link)) { + throw new PageNotFoundException(); + } + + if ($link['task_id'] != $task['id']) { + throw new AccessForbiddenException(); + } + + return $link; + } + + protected function getInternalTaskLink(array $task) + { + $link = $this->taskLinkModel->getById($this->request->getIntegerParam('link_id')); + + if (empty($link)) { + throw new PageNotFoundException(); + } + + if ($link['task_id'] != $task['id']) { + throw new AccessForbiddenException(); + } + + return $link; + } + + protected function getColumn(array $project) + { + $column = $this->columnModel->getById($this->request->getIntegerParam('column_id')); + + if (empty($column)) { + throw new PageNotFoundException(); + } + + if ($column['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $column; + } + + protected function getSwimlane(array $project) + { + $swimlane = $this->swimlaneModel->getById($this->request->getIntegerParam('swimlane_id')); + + if (empty($swimlane)) { + throw new PageNotFoundException(); + } + + if ($swimlane['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $swimlane; + } + + protected function getCategory(array $project) + { + $category = $this->categoryModel->getById($this->request->getIntegerParam('category_id')); + + if (empty($category)) { + throw new PageNotFoundException(); + } + + if ($category['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $category; + } + + protected function getProjectTag(array $project) + { + $tag = $this->tagModel->getById($this->request->getIntegerParam('tag_id')); + + if (empty($tag)) { + throw new PageNotFoundException(); + } + + if ($tag['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $tag; + } + + protected function getAction(array $project) + { + $action = $this->actionModel->getById($this->request->getIntegerParam('action_id')); + + if (empty($action)) { + throw new PageNotFoundException(); + } + + if ($action['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $action; + } + + protected function getCustomFilter(array $project) + { + $filter = $this->customFilterModel->getById($this->request->getIntegerParam('filter_id')); + + if (empty($filter)) { + throw new PageNotFoundException(); + } + + if ($filter['project_id'] != $project['id']) { + throw new AccessForbiddenException(); + } + + return $filter; + } } diff --git a/app/Controller/CalendarController.php b/app/Controller/CalendarController.php deleted file mode 100644 index e764549d..00000000 --- a/app/Controller/CalendarController.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php - -namespace Kanboard\Controller; - -use Kanboard\Filter\TaskAssigneeFilter; -use Kanboard\Filter\TaskProjectFilter; -use Kanboard\Filter\TaskStatusFilter; -use Kanboard\Model\TaskModel; - -/** - * Calendar Controller - * - * @package Kanboard\Controller - * @author Frederic Guillot - * @author Timo Litzbarski - */ -class CalendarController extends BaseController -{ - /** - * Show calendar view for a user - * - * @access public - */ - public function user() - { - $user = $this->getUser(); - - $this->response->html($this->helper->layout->app('calendar/user', array( - 'user' => $user, - ))); - } - - /** - * Show calendar view for a project - * - * @access public - */ - public function project() - { - $project = $this->getProject(); - - $this->response->html($this->helper->layout->app('calendar/project', array( - 'project' => $project, - 'title' => $project['name'], - 'description' => $this->helper->projectHeader->getDescription($project), - ))); - } - - /** - * Get tasks to display on the calendar (project view) - * - * @access public - */ - public function projectEvents() - { - $project_id = $this->request->getIntegerParam('project_id'); - $start = $this->request->getStringParam('start'); - $end = $this->request->getStringParam('end'); - $search = $this->userSession->getFilters($project_id); - $queryBuilder = $this->taskLexer->build($search)->withFilter(new TaskProjectFilter($project_id)); - - $events = $this->helper->calendar->getTaskDateDueEvents(clone($queryBuilder), $start, $end); - $events = array_merge($events, $this->helper->calendar->getTaskEvents(clone($queryBuilder), $start, $end)); - - $events = $this->hook->merge('controller:calendar:project:events', $events, array( - 'project_id' => $project_id, - 'start' => $start, - 'end' => $end, - )); - - $this->response->json($events); - } - - /** - * Get tasks to display on the calendar (user view) - * - * @access public - */ - public function userEvents() - { - $user_id = $this->request->getIntegerParam('user_id'); - $start = $this->request->getStringParam('start'); - $end = $this->request->getStringParam('end'); - $queryBuilder = $this->taskQuery - ->withFilter(new TaskAssigneeFilter($user_id)) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)); - - $events = $this->helper->calendar->getTaskDateDueEvents(clone($queryBuilder), $start, $end); - $events = array_merge($events, $this->helper->calendar->getTaskEvents(clone($queryBuilder), $start, $end)); - - if ($this->configModel->get('calendar_user_subtasks_time_tracking') == 1) { - $events = array_merge($events, $this->helper->calendar->getSubtaskTimeTrackingEvents($user_id, $start, $end)); - } - - $events = $this->hook->merge('controller:calendar:user:events', $events, array( - 'user_id' => $user_id, - 'start' => $start, - 'end' => $end, - )); - - $this->response->json($events); - } - - /** - * Update task due date - * - * @access public - */ - public function save() - { - if ($this->request->isAjax() && $this->request->isPost()) { - $values = $this->request->getJson(); - - $this->taskModificationModel->update(array( - 'id' => $values['task_id'], - 'date_due' => substr($values['date_due'], 0, 10), - )); - } - } -} diff --git a/app/Controller/CategoryController.php b/app/Controller/CategoryController.php index 69bbad5a..e3f2406b 100644 --- a/app/Controller/CategoryController.php +++ b/app/Controller/CategoryController.php @@ -13,24 +13,6 @@ use Kanboard\Core\Controller\PageNotFoundException; class CategoryController extends BaseController { /** - * Get the category (common method between actions) - * - * @access private - * @return array - * @throws PageNotFoundException - */ - private function getCategory() - { - $category = $this->categoryModel->getById($this->request->getIntegerParam('category_id')); - - if (empty($category)) { - throw new PageNotFoundException(); - } - - return $category; - } - - /** * List of categories for a given project * * @access public @@ -72,8 +54,9 @@ class CategoryController extends BaseController public function save() { $project = $this->getProject(); - $values = $this->request->getValues(); + $values['project_id'] = $project['id']; + list($valid, $errors) = $this->categoryValidator->validateCreation($values); if ($valid) { @@ -100,7 +83,7 @@ class CategoryController extends BaseController public function edit(array $values = array(), array $errors = array()) { $project = $this->getProject(); - $category = $this->getCategory(); + $category = $this->getCategory($project); $this->response->html($this->template->render('category/edit', array( 'values' => empty($values) ? $category : $values, @@ -117,8 +100,12 @@ class CategoryController extends BaseController public function update() { $project = $this->getProject(); + $category = $this->getCategory($project); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; + $values['id'] = $category['id']; + list($valid, $errors) = $this->categoryValidator->validateModification($values); if ($valid) { @@ -141,7 +128,7 @@ class CategoryController extends BaseController public function confirm() { $project = $this->getProject(); - $category = $this->getCategory(); + $category = $this->getCategory($project); $this->response->html($this->helper->layout->project('category/remove', array( 'project' => $project, @@ -158,7 +145,7 @@ class CategoryController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $category = $this->getCategory(); + $category = $this->getCategory($project); if ($this->categoryModel->remove($category['id'])) { $this->flash->success(t('Category removed successfully.')); diff --git a/app/Controller/ColumnController.php b/app/Controller/ColumnController.php index 7047d30e..8e4712d9 100644 --- a/app/Controller/ColumnController.php +++ b/app/Controller/ColumnController.php @@ -61,6 +61,7 @@ class ColumnController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues() + array('hide_in_dashboard' => 0); + $values['project_id'] = $project['id']; list($valid, $errors) = $this->columnValidator->validateCreation($values); @@ -95,7 +96,7 @@ class ColumnController extends BaseController public function edit(array $values = array(), array $errors = array()) { $project = $this->getProject(); - $column = $this->columnModel->getById($this->request->getIntegerParam('column_id')); + $column = $this->getColumn($project); $this->response->html($this->helper->layout->project('column/edit', array( 'errors' => $errors, @@ -113,7 +114,11 @@ class ColumnController extends BaseController public function update() { $project = $this->getProject(); + $column = $this->getColumn($project); + $values = $this->request->getValues() + array('hide_in_dashboard' => 0); + $values['project_id'] = $project['id']; + $values['id'] = $column['id']; list($valid, $errors) = $this->columnValidator->validateModification($values); @@ -164,9 +169,10 @@ class ColumnController extends BaseController public function confirm() { $project = $this->getProject(); + $column = $this->getColumn($project); $this->response->html($this->helper->layout->project('column/remove', array( - 'column' => $this->columnModel->getById($this->request->getIntegerParam('column_id')), + 'column' => $column, 'project' => $project, ))); } @@ -178,11 +184,11 @@ class ColumnController extends BaseController */ public function remove() { - $project = $this->getProject(); $this->checkCSRFParam(); - $column_id = $this->request->getIntegerParam('column_id'); + $project = $this->getProject(); + $column = $this->getColumn($project); - if ($this->columnModel->remove($column_id)) { + if ($this->columnModel->remove($column['id'])) { $this->flash->success(t('Column removed successfully.')); } else { $this->flash->failure(t('Unable to remove this column.')); diff --git a/app/Controller/ColumnMoveRestrictionController.php b/app/Controller/ColumnMoveRestrictionController.php index b12f6b77..9a75bf75 100644 --- a/app/Controller/ColumnMoveRestrictionController.php +++ b/app/Controller/ColumnMoveRestrictionController.php @@ -49,7 +49,8 @@ class ColumnMoveRestrictionController extends BaseController $project['id'], $values['role_id'], $values['src_column_id'], - $values['dst_column_id'] + $values['dst_column_id'], + isset($values['only_assigned']) && $values['only_assigned'] == 1 ); if ($restriction_id !== false) { diff --git a/app/Controller/CommentController.php b/app/Controller/CommentController.php index 9a89103e..a29491a3 100644 --- a/app/Controller/CommentController.php +++ b/app/Controller/CommentController.php @@ -14,29 +14,6 @@ use Kanboard\Core\Controller\PageNotFoundException; class CommentController extends BaseController { /** - * Get the current comment - * - * @access protected - * @return array - * @throws PageNotFoundException - * @throws AccessForbiddenException - */ - protected function getComment() - { - $comment = $this->commentModel->getById($this->request->getIntegerParam('comment_id')); - - if (empty($comment)) { - throw new PageNotFoundException(); - } - - if (! $this->userSession->isAdmin() && $comment['user_id'] != $this->userSession->getId()) { - throw new AccessForbiddenException(); - } - - return $comment; - } - - /** * Add comment form * * @access public @@ -49,14 +26,6 @@ class CommentController extends BaseController { $project = $this->getProject(); $task = $this->getTask(); - - if (empty($values)) { - $values = array( - 'user_id' => $this->userSession->getId(), - 'task_id' => $task['id'], - ); - } - $values['project_id'] = $task['project_id']; $this->response->html($this->helper->layout->task('comment/create', array( @@ -106,7 +75,7 @@ class CommentController extends BaseController public function edit(array $values = array(), array $errors = array()) { $task = $this->getTask(); - $comment = $this->getComment(); + $comment = $this->getComment($task); if (empty($values)) { $values = $comment; @@ -130,9 +99,13 @@ class CommentController extends BaseController public function update() { $task = $this->getTask(); - $this->getComment(); + $comment = $this->getComment($task); $values = $this->request->getValues(); + $values['id'] = $comment['id']; + $values['task_id'] = $task['id']; + $values['user_id'] = $comment['user_id']; + list($valid, $errors) = $this->commentValidator->validateModification($values); if ($valid) { @@ -157,7 +130,7 @@ class CommentController extends BaseController public function confirm() { $task = $this->getTask(); - $comment = $this->getComment(); + $comment = $this->getComment($task); $this->response->html($this->template->render('comment/remove', array( 'comment' => $comment, @@ -175,7 +148,7 @@ class CommentController extends BaseController { $this->checkCSRFParam(); $task = $this->getTask(); - $comment = $this->getComment(); + $comment = $this->getComment($task); if ($this->commentModel->remove($comment['id'])) { $this->flash->success(t('Comment removed successfully.')); diff --git a/app/Controller/CommentMailController.php b/app/Controller/CommentMailController.php index e30d6a55..144c9a13 100644 --- a/app/Controller/CommentMailController.php +++ b/app/Controller/CommentMailController.php @@ -20,6 +20,7 @@ class CommentMailController extends BaseController 'errors' => $errors, 'task' => $task, 'project' => $project, + 'members' => $this->projectPermissionModel->getMembersWithEmail($project['id']), ))); } diff --git a/app/Controller/ConfigController.php b/app/Controller/ConfigController.php index 6b85d1f9..2ea04b35 100644 --- a/app/Controller/ConfigController.php +++ b/app/Controller/ConfigController.php @@ -46,12 +46,6 @@ class ConfigController extends BaseController 'disable_private_project' => 0, ); break; - case 'integrations': - $values += array('integration_gravatar' => 0); - break; - case 'calendar': - $values += array('calendar_user_subtasks_time_tracking' => 0); - break; } if ($this->configModel->save($values)) { @@ -128,18 +122,6 @@ class ConfigController extends BaseController } /** - * Display the calendar settings page - * - * @access public - */ - public function calendar() - { - $this->response->html($this->helper->layout->config('config/calendar', array( - 'title' => t('Settings').' > '.t('Calendar settings'), - ))); - } - - /** * Display the integration settings page * * @access public diff --git a/app/Controller/CustomFilterController.php b/app/Controller/CustomFilterController.php index dfe1ffc4..1bf1617e 100644 --- a/app/Controller/CustomFilterController.php +++ b/app/Controller/CustomFilterController.php @@ -59,6 +59,7 @@ class CustomFilterController extends BaseController $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; $values['user_id'] = $this->userSession->getId(); list($valid, $errors) = $this->customFilterValidator->validateCreation($values); @@ -84,7 +85,7 @@ class CustomFilterController extends BaseController public function confirm() { $project = $this->getProject(); - $filter = $this->customFilterModel->getById($this->request->getIntegerParam('filter_id')); + $filter = $this->getCustomFilter($project); $this->response->html($this->helper->layout->project('custom_filter/remove', array( 'project' => $project, @@ -102,7 +103,7 @@ class CustomFilterController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $filter = $this->customFilterModel->getById($this->request->getIntegerParam('filter_id')); + $filter = $this->getCustomFilter($project); $this->checkPermission($project, $filter); @@ -153,6 +154,8 @@ class CustomFilterController extends BaseController $this->checkPermission($project, $filter); $values = $this->request->getValues(); + $values['id'] = $filter['id']; + $values['project_id'] = $project['id']; if (! isset($values['is_shared'])) { $values += array('is_shared' => 0); diff --git a/app/Controller/DashboardController.php b/app/Controller/DashboardController.php index 7fdc53ff..6758381e 100644 --- a/app/Controller/DashboardController.php +++ b/app/Controller/DashboardController.php @@ -19,12 +19,11 @@ class DashboardController extends BaseController { $user = $this->getUser(); - $this->response->html($this->helper->layout->dashboard('dashboard/show', array( - 'title' => t('Dashboard for %s', $this->helper->user->getFullname($user)), - 'project_paginator' => $this->projectPagination->getDashboardPaginator($user['id'], 'show', 10), - 'task_paginator' => $this->taskPagination->getDashboardPaginator($user['id'], 'show', 10), - 'subtask_paginator' => $this->subtaskPagination->getDashboardPaginator($user['id'], 'show', 10), - 'user' => $user, + $this->response->html($this->helper->layout->dashboard('dashboard/overview', array( + 'title' => t('Dashboard for %s', $this->helper->user->getFullname($user)), + 'user' => $user, + 'overview_paginator' => $this->dashboardPagination->getOverview($user['id']), + 'project_paginator' => $this->projectPagination->getDashboardPaginator($user['id'], 'show', 10), ))); } @@ -55,8 +54,9 @@ class DashboardController extends BaseController $this->response->html($this->helper->layout->dashboard('dashboard/subtasks', array( 'title' => t('Subtasks overview for %s', $this->helper->user->getFullname($user)), - 'paginator' => $this->subtaskPagination->getDashboardPaginator($user['id'], 'subtasks', 50), + 'paginator' => $this->subtaskPagination->getDashboardPaginator($user['id']), 'user' => $user, + 'nb_subtasks' => $this->subtaskModel->countByAssigneeAndTaskStatus($user['id']), ))); } diff --git a/app/Controller/ICalendarController.php b/app/Controller/ICalendarController.php index 4fe8b78a..38475a32 100644 --- a/app/Controller/ICalendarController.php +++ b/app/Controller/ICalendarController.php @@ -5,6 +5,7 @@ namespace Kanboard\Controller; use Kanboard\Core\Controller\AccessForbiddenException; use Kanboard\Core\Filter\QueryBuilder; use Kanboard\Filter\TaskAssigneeFilter; +use Kanboard\Filter\TaskDueDateRangeFilter; use Kanboard\Filter\TaskProjectFilter; use Kanboard\Filter\TaskStatusFilter; use Kanboard\Model\TaskModel; @@ -18,81 +19,97 @@ use Eluceo\iCal\Component\Calendar as iCalendar; */ class ICalendarController extends BaseController { - /** - * Get user iCalendar - * - * @access public - */ public function user() { $token = $this->request->getStringParam('token'); $user = $this->userModel->getByToken($token); - // Token verification if (empty($user)) { throw AccessForbiddenException::getInstance()->withoutLayout(); } - // Common filter - $queryBuilder = new QueryBuilder(); - $queryBuilder - ->withQuery($this->taskFinderModel->getICalQuery()) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) - ->withFilter(new TaskAssigneeFilter($user['id'])); + $startRange = strtotime('-2 months'); + $endRange = strtotime('+6 months'); + + $startColumn = $this->configModel->get('calendar_project_tasks', 'date_started'); - // Calendar properties $calendar = new iCalendar('Kanboard'); $calendar->setName($user['name'] ?: $user['username']); $calendar->setDescription($user['name'] ?: $user['username']); $calendar->setPublishedTTL('PT1H'); - $this->renderCalendar($queryBuilder, $calendar); + $queryDueDateOnly = QueryBuilder::create() + ->withQuery($this->taskFinderModel->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskDueDateRangeFilter(array($startRange, $endRange))) + ->withFilter(new TaskAssigneeFilter($user['id'])) + ->getQuery(); + + $queryStartAndDueDate = QueryBuilder::create() + ->withQuery($this->taskFinderModel->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskAssigneeFilter($user['id'])) + ->getQuery() + ->addCondition($this->getConditionForTasksWithStartAndDueDate($startRange, $endRange, $startColumn, 'date_due')); + + $this->response->ical($this->taskICalFormatter + ->setCalendar($calendar) + ->addTasksWithDueDateOnly($queryDueDateOnly) + ->addTasksWithStartAndDueDate($queryStartAndDueDate, $startColumn, 'date_due') + ->format()); } - /** - * Get project iCalendar - * - * @access public - */ public function project() { $token = $this->request->getStringParam('token'); $project = $this->projectModel->getByToken($token); - // Token verification if (empty($project)) { throw AccessForbiddenException::getInstance()->withoutLayout(); } - // Common filter - $queryBuilder = new QueryBuilder(); - $queryBuilder - ->withQuery($this->taskFinderModel->getICalQuery()) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) - ->withFilter(new TaskProjectFilter($project['id'])); + $startRange = strtotime('-2 months'); + $endRange = strtotime('+6 months'); + + $startColumn = $this->configModel->get('calendar_project_tasks', 'date_started'); - // Calendar properties $calendar = new iCalendar('Kanboard'); $calendar->setName($project['name']); $calendar->setDescription($project['name']); $calendar->setPublishedTTL('PT1H'); - $this->renderCalendar($queryBuilder, $calendar); + $queryDueDateOnly = QueryBuilder::create() + ->withQuery($this->taskFinderModel->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskProjectFilter($project['id'])) + ->withFilter(new TaskDueDateRangeFilter(array($startRange, $endRange))) + ->getQuery(); + + $queryStartAndDueDate = QueryBuilder::create() + ->withQuery($this->taskFinderModel->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskProjectFilter($project['id'])) + ->getQuery() + ->addCondition($this->getConditionForTasksWithStartAndDueDate($startRange, $endRange, $startColumn, 'date_due')); + + $this->response->ical($this->taskICalFormatter + ->setCalendar($calendar) + ->addTasksWithDueDateOnly($queryDueDateOnly) + ->addTasksWithStartAndDueDate($queryStartAndDueDate, $startColumn, 'date_due') + ->format()); } - /** - * Common method to render iCal events - * - * @access private - * @param QueryBuilder $queryBuilder - * @param iCalendar $calendar - */ - private function renderCalendar(QueryBuilder $queryBuilder, iCalendar $calendar) + protected function getConditionForTasksWithStartAndDueDate($start_time, $end_time, $start_column, $end_column) { - $start = $this->request->getStringParam('start', strtotime('-2 month')); - $end = $this->request->getStringParam('end', strtotime('+6 months')); + $start_column = $this->db->escapeIdentifier($start_column); + $end_column = $this->db->escapeIdentifier($end_column); + + $conditions = array( + "($start_column >= '$start_time' AND $start_column <= '$end_time')", + "($start_column <= '$start_time' AND $end_column >= '$start_time')", + "($start_column <= '$start_time' AND ($end_column = '0' OR $end_column IS NULL))", + ); - $this->helper->ical->addTaskDateDueEvents($queryBuilder, $calendar, $start, $end); - $this->response->ical($this->taskICalFormatter->setCalendar($calendar)->format()); + return $start_column.' IS NOT NULL AND '.$start_column.' > 0 AND ('.implode(' OR ', $conditions).')'; } } diff --git a/app/Controller/PredefinedTaskDescriptionController.php b/app/Controller/PredefinedTaskDescriptionController.php new file mode 100644 index 00000000..1b7eca12 --- /dev/null +++ b/app/Controller/PredefinedTaskDescriptionController.php @@ -0,0 +1,116 @@ +<?php + +namespace Kanboard\Controller; + +use Kanboard\Core\Controller\PageNotFoundException; + +/** + * Predefined Task Description Controller + * + * @package Kanboard\Controller + * @author Frederic Guillot + */ +class PredefinedTaskDescriptionController extends BaseController +{ + public function create(array $values = array(), array $errors = array()) + { + $project = $this->getProject(); + + $this->response->html($this->template->render('predefined_task_description/create', array( + 'values' => $values, + 'errors' => $errors, + 'project' => $project, + ))); + } + + public function save() + { + $project = $this->getProject(); + $values = $this->request->getValues(); + + list($valid, $errors) = $this->predefinedTaskDescriptionValidator->validate($values); + + if ($valid) { + if ($this->predefinedTaskDescriptionModel->create($project['id'], $values['title'], $values['description']) !== false) { + $this->flash->success(t('Template created successfully.')); + } else { + $this->flash->failure(t('Unable to create this template.')); + } + + $this->response->redirect($this->helper->url->to('ProjectPredefinedContentController', 'show', array('project_id' => $project['id'])), true); + } else { + $this->create($values, $errors); + } + } + + public function edit(array $values = array(), array $errors = array()) + { + $project = $this->getProject(); + $template = $this->predefinedTaskDescriptionModel->getById($project['id'], $this->request->getIntegerParam('id')); + + $this->response->html($this->template->render('predefined_task_description/edit', array( + 'values' => empty($values) ? $template : $values, + 'template' => $template, + 'errors' => $errors, + 'project' => $project, + ))); + } + + public function update() + { + $project = $this->getProject(); + $template = $this->getTemplate($project); + $values = $this->request->getValues(); + + list($valid, $errors) = $this->predefinedTaskDescriptionValidator->validate($values); + + if ($valid) { + if ($this->predefinedTaskDescriptionModel->update($project['id'], $template['id'], $values['title'], $values['description']) !== false) { + $this->flash->success(t('Template updated successfully.')); + } else { + $this->flash->failure(t('Unable to update this template.')); + } + + $this->response->redirect($this->helper->url->to('ProjectPredefinedContentController', 'show', array('project_id' => $project['id'])), true); + } else { + $this->edit($values, $errors); + } + } + + public function confirm() + { + $project = $this->getProject(); + $template = $this->getTemplate($project); + + $this->response->html($this->template->render('predefined_task_description/remove', array( + 'template' => $template, + 'project' => $project, + ))); + } + + public function remove() + { + $this->checkCSRFParam(); + $project = $this->getProject(); + $template = $this->getTemplate($project); + + if ($this->predefinedTaskDescriptionModel->remove($project['id'], $template['id'])) { + $this->flash->success(t('Template removed successfully.')); + } else { + $this->flash->failure(t('Unable to remove this template.')); + } + + $this->response->redirect($this->helper->url->to('ProjectPredefinedContentController', 'show', array('project_id' => $project['id'])), true); + } + + protected function getTemplate(array $project) + { + $template = $this->predefinedTaskDescriptionModel->getById($project['id'], $this->request->getIntegerParam('id')); + + if (empty($template)) { + throw new PageNotFoundException(); + } + + return $template; + } +}
\ No newline at end of file diff --git a/app/Controller/ProjectEditController.php b/app/Controller/ProjectEditController.php index ae39fdf3..dd534508 100644 --- a/app/Controller/ProjectEditController.php +++ b/app/Controller/ProjectEditController.php @@ -65,6 +65,8 @@ class ProjectEditController extends BaseController */ private function prepareValues(array $project, array $values) { + $values['id'] = $project['id']; + if (isset($values['is_private'])) { if (! $this->helper->user->hasProjectAccess('ProjectCreationController', 'create', $project['id'])) { unset($values['is_private']); diff --git a/app/Controller/ProjectGanttController.php b/app/Controller/ProjectGanttController.php deleted file mode 100644 index 8239005e..00000000 --- a/app/Controller/ProjectGanttController.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php - -namespace Kanboard\Controller; - -use Kanboard\Filter\ProjectIdsFilter; -use Kanboard\Filter\ProjectStatusFilter; -use Kanboard\Filter\ProjectTypeFilter; -use Kanboard\Model\ProjectModel; - -/** - * Projects Gantt Controller - * - * @package Kanboard\Controller - * @author Frederic Guillot - */ -class ProjectGanttController extends BaseController -{ - /** - * Show Gantt chart for all projects - */ - public function show() - { - $project_ids = $this->projectPermissionModel->getActiveProjectIds($this->userSession->getId()); - $filter = $this->projectQuery - ->withFilter(new ProjectTypeFilter(ProjectModel::TYPE_TEAM)) - ->withFilter(new ProjectStatusFilter(ProjectModel::ACTIVE)) - ->withFilter(new ProjectIdsFilter($project_ids)); - - $filter->getQuery()->asc(ProjectModel::TABLE.'.start_date'); - - $this->response->html($this->helper->layout->app('project_gantt/show', array( - 'projects' => $filter->format($this->projectGanttFormatter), - 'title' => t('Gantt chart for all projects'), - ))); - } - - /** - * Save new project start date and end date - */ - public function save() - { - $values = $this->request->getJson(); - - $result = $this->projectModel->update(array( - 'id' => $values['id'], - 'start_date' => $this->dateParser->getIsoDate(strtotime($values['start'])), - 'end_date' => $this->dateParser->getIsoDate(strtotime($values['end'])), - )); - - if (! $result) { - $this->response->json(array('message' => 'Unable to save project'), 400); - } else { - $this->response->json(array('message' => 'OK'), 201); - } - } -} diff --git a/app/Controller/ProjectPermissionController.php b/app/Controller/ProjectPermissionController.php index 56777b25..3fb6c090 100644 --- a/app/Controller/ProjectPermissionController.php +++ b/app/Controller/ProjectPermissionController.php @@ -60,25 +60,6 @@ class ProjectPermissionController extends BaseController } /** - * Allow everybody - * - * @access public - */ - public function allowEverybody() - { - $project = $this->getProject(); - $values = $this->request->getValues() + array('is_everybody_allowed' => 0); - - if ($this->projectModel->update($values)) { - $this->flash->success(t('Project updated successfully.')); - } else { - $this->flash->failure(t('Unable to update this project.')); - } - - $this->response->redirect($this->helper->url->to('ProjectPermissionController', 'index', array('project_id' => $project['id']))); - } - - /** * Add user to the project * * @access public @@ -88,6 +69,10 @@ class ProjectPermissionController extends BaseController $project = $this->getProject(); $values = $this->request->getValues(); + if (empty($values['user_id']) && ! empty($values['external_id']) && ! empty($values['external_id_column'])) { + $values['user_id'] = $this->userModel->getOrCreateExternalUserId($values['username'], $values['name'], $values['external_id_column'], $values['external_id']); + } + if (empty($values['user_id'])) { $this->flash->failure(t('User not found.')); } elseif ($this->projectUserRoleModel->addUser($values['project_id'], $values['user_id'], $values['role'])) { diff --git a/app/Controller/ProjectPredefinedContentController.php b/app/Controller/ProjectPredefinedContentController.php new file mode 100644 index 00000000..709d6b79 --- /dev/null +++ b/app/Controller/ProjectPredefinedContentController.php @@ -0,0 +1,50 @@ +<?php + +namespace Kanboard\Controller; + +/** + * Project Predefined Content Controller + * + * @package Kanboard\Controller + * @author Frederic Guillot + */ +class ProjectPredefinedContentController extends BaseController +{ + public function show(array $values = array(), array $errors = array()) + { + $project = $this->getProject(); + + $this->response->html($this->helper->layout->project('project_predefined_content/show', array( + 'values' => empty($values) ? $project : $values, + 'errors' => $errors, + 'project' => $project, + 'predefined_task_descriptions' => $this->predefinedTaskDescriptionModel->getAll($project['id']), + 'title' => t('Predefined Contents'), + ))); + } + + public function update() + { + $project = $this->getProject(); + $values = $this->request->getValues(); + + $values = array( + 'id' => $project['id'], + 'name' => $project['name'], + 'predefined_email_subjects' => isset($values['predefined_email_subjects']) ? $values['predefined_email_subjects'] : '', + ); + + list($valid, $errors) = $this->projectValidator->validateModification($values); + + if ($valid) { + if ($this->projectModel->update($values)) { + $this->flash->success(t('Project updated successfully.')); + return $this->response->redirect($this->helper->url->to('ProjectPredefinedContentController', 'show', array('project_id' => $project['id'])), true); + } else { + $this->flash->failure(t('Unable to update this project.')); + } + } + + return $this->show($values, $errors); + } +} diff --git a/app/Controller/ProjectStatusController.php b/app/Controller/ProjectStatusController.php index 5bc445be..4fdbb6ea 100644 --- a/app/Controller/ProjectStatusController.php +++ b/app/Controller/ProjectStatusController.php @@ -95,6 +95,6 @@ class ProjectStatusController extends BaseController $this->flash->failure(t('Unable to remove this project.')); } - $this->response->redirect($this->helper->url->to('ProjectListController', 'show'), true); + $this->response->redirect($this->helper->url->to('ProjectListController', 'show')); } } diff --git a/app/Controller/ProjectTagController.php b/app/Controller/ProjectTagController.php index d225f0ca..c45e71e1 100644 --- a/app/Controller/ProjectTagController.php +++ b/app/Controller/ProjectTagController.php @@ -2,8 +2,6 @@ namespace Kanboard\Controller; -use Kanboard\Core\Controller\AccessForbiddenException; - /** * Class ProjectTagController * @@ -27,10 +25,6 @@ class ProjectTagController extends BaseController { $project = $this->getProject(); - if (empty($values)) { - $values['project_id'] = $project['id']; - } - $this->response->html($this->template->render('project_tag/create', array( 'project' => $project, 'values' => $values, @@ -42,6 +36,8 @@ class ProjectTagController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; + list($valid, $errors) = $this->tagValidator->validateCreation($values); if ($valid) { @@ -60,8 +56,7 @@ class ProjectTagController extends BaseController public function edit(array $values = array(), array $errors = array()) { $project = $this->getProject(); - $tag_id = $this->request->getIntegerParam('tag_id'); - $tag = $this->tagModel->getById($tag_id); + $tag = $this->getProjectTag($project); if (empty($values)) { $values = $tag; @@ -78,14 +73,12 @@ class ProjectTagController extends BaseController public function update() { $project = $this->getProject(); - $tag_id = $this->request->getIntegerParam('tag_id'); - $tag = $this->tagModel->getById($tag_id); + $tag = $this->getProjectTag($project); $values = $this->request->getValues(); - list($valid, $errors) = $this->tagValidator->validateModification($values); + $values['project_id'] = $project['id']; + $values['id'] = $tag['id']; - if ($tag['project_id'] != $project['id']) { - throw new AccessForbiddenException(); - } + list($valid, $errors) = $this->tagValidator->validateModification($values); if ($valid) { if ($this->tagModel->update($values['id'], $values['name'])) { @@ -103,8 +96,7 @@ class ProjectTagController extends BaseController public function confirm() { $project = $this->getProject(); - $tag_id = $this->request->getIntegerParam('tag_id'); - $tag = $this->tagModel->getById($tag_id); + $tag = $this->getProjectTag($project); $this->response->html($this->template->render('project_tag/remove', array( 'tag' => $tag, @@ -116,14 +108,9 @@ class ProjectTagController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $tag_id = $this->request->getIntegerParam('tag_id'); - $tag = $this->tagModel->getById($tag_id); - - if ($tag['project_id'] != $project['id']) { - throw new AccessForbiddenException(); - } + $tag = $this->getProjectTag($project); - if ($this->tagModel->remove($tag_id)) { + if ($this->tagModel->remove($tag['id'])) { $this->flash->success(t('Tag removed successfully.')); } else { $this->flash->failure(t('Unable to remove this tag.')); diff --git a/app/Controller/SubtaskController.php b/app/Controller/SubtaskController.php index 5fa55f6b..d5db9b2e 100644 --- a/app/Controller/SubtaskController.php +++ b/app/Controller/SubtaskController.php @@ -66,29 +66,51 @@ class SubtaskController extends BaseController { $task = $this->getTask(); $values = $this->request->getValues(); + $values['task_id'] = $task['id']; + $subtasks = explode("\r\n", isset($values['title']) ? $values['title'] : ''); + $subtasksAdded = 0; - list($valid, $errors) = $this->subtaskValidator->validateCreation($values); + foreach ($subtasks as $subtask) { + $subtask = trim($subtask); - if ($valid) { - if ($this->subtaskModel->create($values) !== false) { - $this->flash->success(t('Sub-task added successfully.')); - } else { - $this->flash->failure(t('Unable to create your sub-task.')); - } + if (! empty($subtask)) { + $subtaskValues = $values; + $subtaskValues['title'] = $subtask; + + list($valid, $errors) = $this->subtaskValidator->validateCreation($subtaskValues); + + if (! $valid) { + $this->create($values, $errors); + return false; + } - if (isset($values['another_subtask']) && $values['another_subtask'] == 1) { - return $this->create(array( - 'project_id' => $task['project_id'], - 'task_id' => $task['id'], - 'user_id' => $values['user_id'], - 'another_subtask' => 1 - )); + if (! $this->subtaskModel->create($subtaskValues)) { + $this->flash->failure(t('Unable to create your sub-task.')); + $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id']), 'subtasks'), true); + return false; + } + + $subtasksAdded++; } + } - return $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id']), 'subtasks'), true); + if (isset($values['another_subtask']) && $values['another_subtask'] == 1) { + return $this->create(array( + 'project_id' => $task['project_id'], + 'task_id' => $task['id'], + 'user_id' => $values['user_id'], + 'another_subtask' => 1, + 'subtasks_added' => $subtasksAdded, + )); + } else if ($subtasksAdded > 0) { + if ($subtasksAdded === 1) { + $this->flash->success(t('Subtask added successfully.')); + } else { + $this->flash->success(t('%d subtasks added successfully.', $subtasksAdded)); + } } - return $this->create($values, $errors); + $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id']), 'subtasks'), true); } /** @@ -103,7 +125,7 @@ class SubtaskController extends BaseController public function edit(array $values = array(), array $errors = array()) { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); $this->response->html($this->template->render('subtask/edit', array( 'values' => empty($values) ? $subtask : $values, @@ -123,9 +145,12 @@ class SubtaskController extends BaseController public function update() { $task = $this->getTask(); - $this->getSubtask(); + $subtask = $this->getSubtask($task); $values = $this->request->getValues(); + $values['id'] = $subtask['id']; + $values['task_id'] = $task['id']; + list($valid, $errors) = $this->subtaskValidator->validateModification($values); if ($valid) { @@ -149,7 +174,7 @@ class SubtaskController extends BaseController public function confirm() { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); $this->response->html($this->template->render('subtask/remove', array( 'subtask' => $subtask, @@ -166,7 +191,7 @@ class SubtaskController extends BaseController { $this->checkCSRFParam(); $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); if ($this->subtaskModel->remove($subtask['id'])) { $this->flash->success(t('Sub-task removed successfully.')); diff --git a/app/Controller/SubtaskConverterController.php b/app/Controller/SubtaskConverterController.php index 404c50d0..dafbb7e0 100644 --- a/app/Controller/SubtaskConverterController.php +++ b/app/Controller/SubtaskConverterController.php @@ -13,7 +13,7 @@ class SubtaskConverterController extends BaseController public function show() { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); $this->response->html($this->template->render('subtask_converter/show', array( 'subtask' => $subtask, @@ -24,7 +24,8 @@ class SubtaskConverterController extends BaseController public function save() { $project = $this->getProject(); - $subtask = $this->getSubtask(); + $task = $this->getTask(); + $subtask = $this->getSubtask($task); $task_id = $this->subtaskTaskConversionModel->convertToTask($project['id'], $subtask['id']); diff --git a/app/Controller/SubtaskRestrictionController.php b/app/Controller/SubtaskRestrictionController.php index 0e207674..315b023d 100644 --- a/app/Controller/SubtaskRestrictionController.php +++ b/app/Controller/SubtaskRestrictionController.php @@ -20,7 +20,7 @@ class SubtaskRestrictionController extends BaseController public function show() { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); $this->response->html($this->template->render('subtask_restriction/show', array( 'status_list' => array( @@ -41,21 +41,19 @@ class SubtaskRestrictionController extends BaseController public function save() { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); $values = $this->request->getValues(); // Change status of the previous "in progress" subtask $this->subtaskModel->update(array( 'id' => $values['id'], 'status' => $values['status'], - 'task_id' => $task['id'], )); // Set the current subtask to "in progress" $this->subtaskModel->update(array( 'id' => $subtask['id'], 'status' => SubtaskModel::STATUS_INPROGRESS, - 'task_id' => $task['id'], )); $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id'])), true); diff --git a/app/Controller/SubtaskStatusController.php b/app/Controller/SubtaskStatusController.php index 72feb685..c912848e 100644 --- a/app/Controller/SubtaskStatusController.php +++ b/app/Controller/SubtaskStatusController.php @@ -18,12 +18,21 @@ class SubtaskStatusController extends BaseController public function change() { $task = $this->getTask(); - $subtask = $this->getSubtask(); + $subtask = $this->getSubtask($task); + $fragment = $this->request->getStringParam('fragment'); $status = $this->subtaskStatusModel->toggleStatus($subtask['id']); $subtask['status'] = $status; - $this->response->html($this->helper->subtask->renderToggleStatus($task, $subtask)); + if ($fragment === 'table') { + $html = $this->renderTable($task); + } elseif ($fragment === 'rows') { + $html = $this->renderRows($task); + } else { + $html = $this->helper->subtask->renderToggleStatus($task, $subtask); + } + + $this->response->html($html); } /** @@ -34,19 +43,58 @@ class SubtaskStatusController extends BaseController public function timer() { $task = $this->getTask(); - $subtaskId = $this->request->getIntegerParam('subtask_id'); + $subtask = $this->getSubtask($task); $timer = $this->request->getStringParam('timer'); if ($timer === 'start') { - $this->subtaskTimeTrackingModel->logStartTime($subtaskId, $this->userSession->getId()); + $this->subtaskTimeTrackingModel->logStartTime($subtask['id'], $this->userSession->getId()); } elseif ($timer === 'stop') { - $this->subtaskTimeTrackingModel->logEndTime($subtaskId, $this->userSession->getId()); + $this->subtaskTimeTrackingModel->logEndTime($subtask['id'], $this->userSession->getId()); $this->subtaskTimeTrackingModel->updateTaskTimeTracking($task['id']); } $this->response->html($this->template->render('subtask/timer', array( 'task' => $task, - 'subtask' => $this->subtaskModel->getByIdWithDetails($subtaskId), + 'subtask' => $this->subtaskModel->getByIdWithDetails($subtask['id']), ))); } + + /** + * Render table + * + * @access protected + * @param array $task + * @return string + */ + protected function renderTable(array $task) + { + return $this->template->render('subtask/table', array( + 'task' => $task, + 'subtasks' => $this->subtaskModel->getAll($task['id']), + 'editable' => true, + )); + } + + /** + * Render task list rows + * + * @access protected + * @param array $task + * @return string + */ + protected function renderRows(array $task) + { + $userId = $this->request->getIntegerParam('user_id'); + + if ($userId > 0) { + $task['subtasks'] = $this->subtaskModel->getAllByTaskIdsAndAssignee(array($task['id']), $userId); + } else { + $task['subtasks'] = $this->subtaskModel->getAll($task['id']); + } + + return $this->template->render('task_list/task_subtasks', array( + 'task' => $task, + 'user_id' => $userId, + )); + } } diff --git a/app/Controller/SwimlaneController.php b/app/Controller/SwimlaneController.php index 0d81d83c..e6368b24 100644 --- a/app/Controller/SwimlaneController.php +++ b/app/Controller/SwimlaneController.php @@ -3,8 +3,6 @@ namespace Kanboard\Controller; use Kanboard\Core\Controller\AccessForbiddenException; -use Kanboard\Core\Controller\PageNotFoundException; -use Kanboard\Model\SwimlaneModel; /** * Swimlanes Controller @@ -15,24 +13,6 @@ use Kanboard\Model\SwimlaneModel; class SwimlaneController extends BaseController { /** - * Get the swimlane (common method between actions) - * - * @access private - * @return array - * @throws PageNotFoundException - */ - private function getSwimlane() - { - $swimlane = $this->swimlaneModel->getById($this->request->getIntegerParam('swimlane_id')); - - if (empty($swimlane)) { - throw new PageNotFoundException(); - } - - return $swimlane; - } - - /** * List of swimlanes for a given project * * @access public @@ -78,6 +58,8 @@ class SwimlaneController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; + list($valid, $errors) = $this->swimlaneValidator->validateCreation($values); if ($valid) { @@ -104,7 +86,7 @@ class SwimlaneController extends BaseController public function edit(array $values = array(), array $errors = array()) { $project = $this->getProject(); - $swimlane = $this->getSwimlane(); + $swimlane = $this->getSwimlane($project); $this->response->html($this->helper->layout->project('swimlane/edit', array( 'values' => empty($values) ? $swimlane : $values, @@ -121,8 +103,11 @@ class SwimlaneController extends BaseController public function update() { $project = $this->getProject(); - + $swimlane = $this->getSwimlane($project); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; + $values['id'] = $swimlane['id']; + list($valid, $errors) = $this->swimlaneValidator->validateModification($values); if ($valid) { @@ -145,7 +130,7 @@ class SwimlaneController extends BaseController public function confirm() { $project = $this->getProject(); - $swimlane = $this->getSwimlane(); + $swimlane = $this->getSwimlane($project); $this->response->html($this->helper->layout->project('swimlane/remove', array( 'project' => $project, @@ -162,9 +147,9 @@ class SwimlaneController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + $swimlane = $this->getSwimlane($project); - if ($this->swimlaneModel->remove($project['id'], $swimlane_id)) { + if ($this->swimlaneModel->remove($project['id'], $swimlane['id'])) { $this->flash->success(t('Swimlane removed successfully.')); } else { $this->flash->failure(t('Unable to remove this swimlane.')); @@ -182,9 +167,9 @@ class SwimlaneController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + $swimlane = $this->getSwimlane($project); - if ($this->swimlaneModel->disable($project['id'], $swimlane_id)) { + if ($this->swimlaneModel->disable($project['id'], $swimlane['id'])) { $this->flash->success(t('Swimlane updated successfully.')); } else { $this->flash->failure(t('Unable to update this swimlane.')); @@ -202,9 +187,9 @@ class SwimlaneController extends BaseController { $this->checkCSRFParam(); $project = $this->getProject(); - $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + $swimlane = $this->getSwimlane($project); - if ($this->swimlaneModel->enable($project['id'], $swimlane_id)) { + if ($this->swimlaneModel->enable($project['id'], $swimlane['id'])) { $this->flash->success(t('Swimlane updated successfully.')); } else { $this->flash->failure(t('Unable to update this swimlane.')); diff --git a/app/Controller/TaskBulkController.php b/app/Controller/TaskBulkController.php index 4345a68f..0f49fb76 100644 --- a/app/Controller/TaskBulkController.php +++ b/app/Controller/TaskBulkController.php @@ -35,6 +35,7 @@ class TaskBulkController extends BaseController 'users_list' => $this->projectUserRoleModel->getAssignableUsersList($project['id'], true, false, $project['is_private'] == 1), 'colors_list' => $this->colorModel->getList(), 'categories_list' => $this->categoryModel->getList($project['id']), + 'task_description_templates' => $this->predefinedTaskDescriptionModel->getList($project['id']), ))); } @@ -85,8 +86,18 @@ class TaskBulkController extends BaseController 'owner_id' => empty($values['owner_id']) ? 0 : $values['owner_id'], 'color_id' => $values['color_id'], 'project_id' => $project['id'], + 'description' => $this->getTaskDescription($project, $values), )); } } } + + protected function getTaskDescription(array $project, array $values) + { + if (empty($values['task_description_template_id'])) { + return ''; + } + + return $this->predefinedTaskDescriptionModel->getDescriptionById($project['id'], $values['task_description_template_id']); + } } diff --git a/app/Controller/TaskCreationController.php b/app/Controller/TaskCreationController.php index 0d808c54..d050a60d 100644 --- a/app/Controller/TaskCreationController.php +++ b/app/Controller/TaskCreationController.php @@ -49,6 +49,7 @@ class TaskCreationController extends BaseController { $project = $this->getProject(); $values = $this->request->getValues(); + $values['project_id'] = $project['id']; list($valid, $errors) = $this->taskValidator->validateCreation($values); diff --git a/app/Controller/TaskExternalLinkController.php b/app/Controller/TaskExternalLinkController.php index df23f87b..946451fc 100644 --- a/app/Controller/TaskExternalLinkController.php +++ b/app/Controller/TaskExternalLinkController.php @@ -74,6 +74,8 @@ class TaskExternalLinkController extends BaseController { $task = $this->getTask(); $values = $this->request->getValues(); + $values['task_id'] = $task['id']; + list($valid, $errors) = $this->externalLinkValidator->validateCreation($values); if ($valid) { @@ -108,22 +110,14 @@ class TaskExternalLinkController extends BaseController public function edit(array $values = array(), array $errors = array()) { $task = $this->getTask(); - $link_id = $this->request->getIntegerParam('link_id'); - - if ($link_id > 0) { - $values = $this->taskExternalLinkModel->getById($link_id); - } - - if (empty($values)) { - throw new PageNotFoundException(); - } - - $provider = $this->externalLinkManager->getProvider($values['link_type']); + $link = $this->getExternalTaskLink($task); + $provider = $this->externalLinkManager->getProvider($link['link_type']); $this->response->html($this->template->render('task_external_link/edit', array( - 'values' => $values, - 'errors' => $errors, - 'task' => $task, + 'values' => empty($values) ? $link : $values, + 'errors' => $errors, + 'task' => $task, + 'link' => $link, 'dependencies' => $provider->getDependencies(), ))); } @@ -136,7 +130,12 @@ class TaskExternalLinkController extends BaseController public function update() { $task = $this->getTask(); + $link = $this->getExternalTaskLink($task); + $values = $this->request->getValues(); + $values['id'] = $link['id']; + $values['task_id'] = $link['task_id']; + list($valid, $errors) = $this->externalLinkValidator->validateModification($values); if ($valid && $this->taskExternalLinkModel->update($values)) { @@ -155,12 +154,7 @@ class TaskExternalLinkController extends BaseController public function confirm() { $task = $this->getTask(); - $link_id = $this->request->getIntegerParam('link_id'); - $link = $this->taskExternalLinkModel->getById($link_id); - - if (empty($link)) { - throw new PageNotFoundException(); - } + $link = $this->getExternalTaskLink($task); $this->response->html($this->template->render('task_external_link/remove', array( 'link' => $link, @@ -177,8 +171,9 @@ class TaskExternalLinkController extends BaseController { $this->checkCSRFParam(); $task = $this->getTask(); + $link = $this->getExternalTaskLink($task); - if ($this->taskExternalLinkModel->remove($this->request->getIntegerParam('link_id'))) { + if ($this->taskExternalLinkModel->remove($link['id'])) { $this->flash->success(t('Link removed successfully.')); } else { $this->flash->failure(t('Unable to remove this link.')); diff --git a/app/Controller/TaskGanttController.php b/app/Controller/TaskGanttController.php deleted file mode 100644 index b03b9d00..00000000 --- a/app/Controller/TaskGanttController.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php - -namespace Kanboard\Controller; - -use Kanboard\Filter\TaskProjectFilter; -use Kanboard\Model\TaskModel; - -/** - * Tasks Gantt Controller - * - * @package Kanboard\Controller - * @author Frederic Guillot - */ -class TaskGanttController extends BaseController -{ - /** - * Show Gantt chart for one project - */ - public function show() - { - $project = $this->getProject(); - $search = $this->helper->projectHeader->getSearchQuery($project); - $sorting = $this->request->getStringParam('sorting', 'board'); - $filter = $this->taskLexer->build($search)->withFilter(new TaskProjectFilter($project['id'])); - - if ($sorting === 'date') { - $filter->getQuery()->asc(TaskModel::TABLE.'.date_started')->asc(TaskModel::TABLE.'.date_creation'); - } else { - $filter->getQuery()->asc('column_position')->asc(TaskModel::TABLE.'.position'); - } - - $this->response->html($this->helper->layout->app('task_gantt/show', array( - 'project' => $project, - 'title' => $project['name'], - 'description' => $this->helper->projectHeader->getDescription($project), - 'sorting' => $sorting, - 'tasks' => $filter->format($this->taskGanttFormatter), - ))); - } - - /** - * Save new task start date and due date - */ - public function save() - { - $this->getProject(); - $values = $this->request->getJson(); - - $result = $this->taskModificationModel->update(array( - 'id' => $values['id'], - 'date_started' => strtotime($values['start']), - 'date_due' => strtotime($values['end']), - )); - - if (! $result) { - $this->response->json(array('message' => 'Unable to save task'), 400); - } else { - $this->response->json(array('message' => 'OK'), 201); - } - } -} diff --git a/app/Controller/TaskImportController.php b/app/Controller/TaskImportController.php index 2e323979..d6506880 100644 --- a/app/Controller/TaskImportController.php +++ b/app/Controller/TaskImportController.php @@ -3,6 +3,7 @@ namespace Kanboard\Controller; use Kanboard\Core\Csv; +use Kanboard\Import\TaskImport; /** * Task Import controller @@ -45,14 +46,15 @@ class TaskImportController extends BaseController if (! file_exists($filename)) { $this->show($values, array('file' => array(t('Unable to read your file')))); } else { - $this->taskImport->projectId = $project['id']; + $taskImport = new TaskImport($this->container); + $taskImport->setProjectId($project['id']); $csv = new Csv($values['delimiter'], $values['enclosure']); - $csv->setColumnMapping($this->taskImport->getColumnMapping()); - $csv->read($filename, array($this->taskImport, 'import')); + $csv->setColumnMapping($taskImport->getColumnMapping()); + $csv->read($filename, array($taskImport, 'importTask')); - if ($this->taskImport->counter > 0) { - $this->flash->success(t('%d task(s) have been imported successfully.', $this->taskImport->counter)); + if ($taskImport->getNumberOfImportedTasks() > 0) { + $this->flash->success(t('%d task(s) have been imported successfully.', $taskImport->getNumberOfImportedTasks())); } else { $this->flash->failure(t('Nothing have been imported!')); } @@ -67,7 +69,8 @@ class TaskImportController extends BaseController */ public function template() { + $taskImport = new TaskImport($this->container); $this->response->withFileDownload('tasks.csv'); - $this->response->csv(array($this->taskImport->getColumnMapping())); + $this->response->csv(array($taskImport->getColumnMapping())); } } diff --git a/app/Controller/TaskInternalLinkController.php b/app/Controller/TaskInternalLinkController.php index a140f1ff..02cc15c4 100644 --- a/app/Controller/TaskInternalLinkController.php +++ b/app/Controller/TaskInternalLinkController.php @@ -14,24 +14,6 @@ use Kanboard\Core\Controller\PageNotFoundException; class TaskInternalLinkController extends BaseController { /** - * Get the current link - * - * @access private - * @return array - * @throws PageNotFoundException - */ - private function getTaskLink() - { - $link = $this->taskLinkModel->getById($this->request->getIntegerParam('link_id')); - - if (empty($link)) { - throw new PageNotFoundException(); - } - - return $link; - } - - /** * Creation form * * @access public @@ -44,6 +26,11 @@ class TaskInternalLinkController extends BaseController { $task = $this->getTask(); + if (empty($values)) { + $values['another_tasklink'] = $this->request->getIntegerParam('another_tasklink', 0); + $values = $this->hook->merge('controller:tasklink:form:default', $values, array('default_values' => $values)); + } + $this->response->html($this->template->render('task_internal_link/create', array( 'values' => $values, 'errors' => $errors, @@ -61,12 +48,23 @@ class TaskInternalLinkController extends BaseController { $task = $this->getTask(); $values = $this->request->getValues(); + $values['task_id'] = $task['id']; list($valid, $errors) = $this->taskLinkValidator->validateCreation($values); if ($valid) { - if ($this->taskLinkModel->create($values['task_id'], $values['opposite_task_id'], $values['link_id'])) { + if ($this->taskLinkModel->create($values['task_id'], $values['opposite_task_id'], $values['link_id']) !== false) { $this->flash->success(t('Link added successfully.')); + + if (isset($values['another_tasklink']) && $values['another_tasklink'] == 1) { + return $this->create(array( + 'project_id' => $task['project_id'], + 'task_id' => $task['id'], + 'link_id' => $values['link_id'], + 'another_tasklink' => 1 + )); + } + return $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])), true); } @@ -89,7 +87,7 @@ class TaskInternalLinkController extends BaseController public function edit(array $values = array(), array $errors = array()) { $task = $this->getTask(); - $task_link = $this->getTaskLink(); + $task_link = $this->getInternalTaskLink($task); if (empty($values)) { $opposite_task = $this->taskFinderModel->getById($task_link['opposite_task_id']); @@ -114,7 +112,11 @@ class TaskInternalLinkController extends BaseController public function update() { $task = $this->getTask(); + $task_link = $this->getInternalTaskLink($task); + $values = $this->request->getValues(); + $values['task_id'] = $task['id']; + $values['id'] = $task_link['id']; list($valid, $errors) = $this->taskLinkValidator->validateModification($values); @@ -138,7 +140,7 @@ class TaskInternalLinkController extends BaseController public function confirm() { $task = $this->getTask(); - $link = $this->getTaskLink(); + $link = $this->getInternalTaskLink($task); $this->response->html($this->template->render('task_internal_link/remove', array( 'link' => $link, @@ -155,8 +157,9 @@ class TaskInternalLinkController extends BaseController { $this->checkCSRFParam(); $task = $this->getTask(); + $link = $this->getInternalTaskLink($task); - if ($this->taskLinkModel->remove($this->request->getIntegerParam('link_id'))) { + if ($this->taskLinkModel->remove($link['id'])) { $this->flash->success(t('Link removed successfully.')); } else { $this->flash->failure(t('Unable to remove this link.')); diff --git a/app/Controller/TaskMailController.php b/app/Controller/TaskMailController.php index e95ddf03..feb96a68 100644 --- a/app/Controller/TaskMailController.php +++ b/app/Controller/TaskMailController.php @@ -20,6 +20,7 @@ class TaskMailController extends BaseController 'errors' => $errors, 'task' => $task, 'project' => $project, + 'members' => $this->projectPermissionModel->getMembersWithEmail($project['id']), ))); } @@ -33,6 +34,13 @@ class TaskMailController extends BaseController if ($valid) { $this->sendByEmail($values, $task); $this->flash->success(t('Task sent by email successfully.')); + + $this->commentModel->create(array( + 'comment' => t('This task was sent by email to "%s" with subject "%s".', $values['email'], $values['subject']), + 'user_id' => $this->userSession->getId(), + 'task_id' => $task['id'], + )); + $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), 'comments'), true); } else { $this->create($values, $errors); diff --git a/app/Controller/TaskModificationController.php b/app/Controller/TaskModificationController.php index 520bf70e..338ed540 100644 --- a/app/Controller/TaskModificationController.php +++ b/app/Controller/TaskModificationController.php @@ -22,7 +22,11 @@ class TaskModificationController extends BaseController public function start() { $task = $this->getTask(); - $this->taskModificationModel->update(array('id' => $task['id'], 'date_started' => time())); + $values = array('id' => $task['id'], 'date_started' => time()); + if (! $this->helper->projectRole->canUpdateTask($task)) { + throw new AccessForbiddenException(t('You are not allowed to update tasks assigned to someone else.')); + } + $this->taskModificationModel->update($values); $this->response->redirect($this->helper->url->to('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id']))); } @@ -38,6 +42,11 @@ class TaskModificationController extends BaseController public function edit(array $values = array(), array $errors = array()) { $task = $this->getTask(); + + if (! $this->helper->projectRole->canUpdateTask($task)) { + throw new AccessForbiddenException(t('You are not allowed to update tasks assigned to someone else.')); + } + $project = $this->projectModel->getById($task['project_id']); if (empty($values)) { @@ -89,6 +98,8 @@ class TaskModificationController extends BaseController { $task = $this->getTask(); $values = $this->request->getValues(); + $values['id'] = $task['id']; + $values['project_id'] = $task['project_id']; list($valid, $errors) = $this->taskValidator->validateModification($values); @@ -103,6 +114,14 @@ class TaskModificationController extends BaseController protected function updateTask(array &$task, array &$values, array &$errors) { + if (isset($values['owner_id']) && $values['owner_id'] != $task['owner_id'] && !$this->helper->projectRole->canChangeAssignee($task)) { + throw new AccessForbiddenException(t('You are not allowed to change the assignee.')); + } + + if (! $this->helper->projectRole->canUpdateTask($task)) { + throw new AccessForbiddenException(t('You are not allowed to update tasks assigned to someone else.')); + } + $result = $this->taskModificationModel->update($values); if ($result && ! empty($task['external_uri'])) { diff --git a/app/Controller/TaskRecurrenceController.php b/app/Controller/TaskRecurrenceController.php index c6fdfa37..7f14cb53 100644 --- a/app/Controller/TaskRecurrenceController.php +++ b/app/Controller/TaskRecurrenceController.php @@ -47,6 +47,7 @@ class TaskRecurrenceController extends BaseController { $task = $this->getTask(); $values = $this->request->getValues(); + $values['id'] = $task['id']; list($valid, $errors) = $this->taskValidator->validateEditRecurrence($values); diff --git a/app/Controller/UserAjaxController.php b/app/Controller/UserAjaxController.php index 17567a00..57596202 100644 --- a/app/Controller/UserAjaxController.php +++ b/app/Controller/UserAjaxController.php @@ -2,9 +2,6 @@ namespace Kanboard\Controller; -use Kanboard\Filter\UserNameFilter; -use Kanboard\Model\UserModel; - /** * User Ajax Controller * @@ -21,9 +18,8 @@ class UserAjaxController extends BaseController public function autocomplete() { $search = $this->request->getStringParam('term'); - $filter = $this->userQuery->withFilter(new UserNameFilter($search)); - $filter->getQuery()->asc(UserModel::TABLE.'.name')->asc(UserModel::TABLE.'.username'); - $this->response->json($filter->format($this->userAutoCompleteFormatter)); + $users = $this->userManager->find($search); + $this->response->json($this->userAutoCompleteFormatter->withUsers($users)->format()); } /** diff --git a/app/Controller/UserApiAccessController.php b/app/Controller/UserApiAccessController.php index 0f1c891e..f9628ae6 100644 --- a/app/Controller/UserApiAccessController.php +++ b/app/Controller/UserApiAccessController.php @@ -32,7 +32,7 @@ class UserApiAccessController extends BaseController 'api_access_token' => Token::getToken(), )); - $this->renderResponse(); + $this->renderResponse($user); } public function remove() @@ -45,10 +45,10 @@ class UserApiAccessController extends BaseController 'api_access_token' => null, )); - $this->renderResponse(); + $this->renderResponse($user); } - protected function renderResponse() + protected function renderResponse(array $user) { if ($this->request->isAjax()) { $this->show(); diff --git a/app/Controller/UserCredentialController.php b/app/Controller/UserCredentialController.php index 23e7edba..a8b90b7b 100644 --- a/app/Controller/UserCredentialController.php +++ b/app/Controller/UserCredentialController.php @@ -43,6 +43,14 @@ class UserCredentialController extends BaseController list($valid, $errors) = $this->userValidator->validatePasswordModification($values); + if (! $this->userSession->isAdmin()) { + $values = array( + 'id' => $this->userSession->getId(), + 'password' => isset($values['password']) ? $values['password'] : '', + 'confirmation' => isset($values['confirmation']) ? $values['confirmation'] : '', + ); + } + if ($valid) { if ($this->userModel->update($values)) { $this->flash->success(t('Password modified successfully.')); diff --git a/app/Controller/UserModificationController.php b/app/Controller/UserModificationController.php index ed145921..f4916f6f 100644 --- a/app/Controller/UserModificationController.php +++ b/app/Controller/UserModificationController.php @@ -47,9 +47,14 @@ class UserModificationController extends BaseController $values = $this->request->getValues(); if (! $this->userSession->isAdmin()) { - if (isset($values['role'])) { - unset($values['role']); - } + $values = array( + 'id' => $this->userSession->getId(), + 'username' => isset($values['username']) ? $values['username'] : '', + 'name' => isset($values['name']) ? $values['name'] : '', + 'email' => isset($values['email']) ? $values['email'] : '', + 'timezone' => isset($values['timezone']) ? $values['timezone'] : '', + 'language' => isset($values['language']) ? $values['language'] : '', + ); } list($valid, $errors) = $this->userValidator->validateModification($values); diff --git a/app/Core/Base.php b/app/Core/Base.php index 28bbd534..a36828c4 100644 --- a/app/Core/Base.php +++ b/app/Core/Base.php @@ -7,7 +7,7 @@ use Pimple\Container; /** * Base Class * - * @package core + * @package Kanboard\Core * @author Frederic Guillot * * @property \Kanboard\Analytic\TaskDistributionAnalytic $taskDistributionAnalytic @@ -22,6 +22,7 @@ use Pimple\Container; * @property \Kanboard\Core\Cache\BaseCache $cacheDriver * @property \Kanboard\Core\Event\EventManager $eventManager * @property \Kanboard\Core\Group\GroupManager $groupManager + * @property \Kanboard\Core\User\UserManager $userManager * @property \Kanboard\Core\Http\Client $httpClient * @property \Kanboard\Core\Http\OAuth2 $oauth * @property \Kanboard\Core\Http\RememberMeCookie $rememberMeCookie @@ -68,15 +69,17 @@ use Pimple\Container; * @property \Kanboard\Formatter\BoardTaskFormatter $boardTaskFormatter * @property \Kanboard\Formatter\GroupAutoCompleteFormatter $groupAutoCompleteFormatter * @property \Kanboard\Formatter\ProjectActivityEventFormatter $projectActivityEventFormatter - * @property \Kanboard\Formatter\ProjectGanttFormatter $projectGanttFormatter + * @property \Kanboard\Formatter\ProjectApiFormatter $projectApiFormatter + * @property \Kanboard\Formatter\ProjectsApiFormatter $projectsApiFormatter * @property \Kanboard\Formatter\SubtaskListFormatter $subtaskListFormatter * @property \Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter $subtaskTimeTrackingCalendarFormatter + * @property \Kanboard\Formatter\TaskApiFormatter $taskApiFormatter + * @property \Kanboard\Formatter\TasksApiFormatter $tasksApiFormatter * @property \Kanboard\Formatter\TaskAutoCompleteFormatter $taskAutoCompleteFormatter - * @property \Kanboard\Formatter\TaskCalendarFormatter $taskCalendarFormatter - * @property \Kanboard\Formatter\TaskGanttFormatter $taskGanttFormatter * @property \Kanboard\Formatter\TaskICalFormatter $taskICalFormatter * @property \Kanboard\Formatter\TaskListFormatter $taskListFormatter * @property \Kanboard\Formatter\TaskListSubtaskFormatter $taskListSubtaskFormatter + * @property \Kanboard\Formatter\TaskListSubtaskAssigneeFormatter $taskListSubtaskAssigneeFormatter * @property \Kanboard\Formatter\TaskSuggestMenuFormatter $taskSuggestMenuFormatter * @property \Kanboard\Formatter\UserAutoCompleteFormatter $userAutoCompleteFormatter * @property \Kanboard\Formatter\UserMentionFormatter $userMentionFormatter @@ -103,6 +106,7 @@ use Pimple\Container; * @property \Kanboard\Model\LinkModel $linkModel * @property \Kanboard\Model\NotificationModel $notificationModel * @property \Kanboard\Model\PasswordResetModel $passwordResetModel + * @property \Kanboard\Model\PredefinedTaskDescriptionModel $predefinedTaskDescriptionModel * @property \Kanboard\Model\ProjectModel $projectModel * @property \Kanboard\Model\ProjectActivityModel $projectActivityModel * @property \Kanboard\Model\ProjectDuplicationModel $projectDuplicationModel @@ -151,9 +155,10 @@ use Pimple\Container; * @property \Kanboard\Model\UserNotificationFilterModel $userNotificationFilterModel * @property \Kanboard\Model\UserUnreadNotificationModel $userUnreadNotificationModel * @property \Kanboard\Model\UserMetadataModel $userMetadataModel + * @property \Kanboard\Pagination\DashboardPagination $dashboardPagination + * @property \Kanboard\Pagination\ProjectPagination $projectPagination * @property \Kanboard\Pagination\TaskPagination $taskPagination * @property \Kanboard\Pagination\SubtaskPagination $subtaskPagination - * @property \Kanboard\Pagination\ProjectPagination $projectPagination * @property \Kanboard\Pagination\UserPagination $userPagination * @property \Kanboard\Validator\ActionValidator $actionValidator * @property \Kanboard\Validator\AuthValidator $authValidator @@ -176,7 +181,7 @@ use Pimple\Container; * @property \Kanboard\Validator\TaskLinkValidator $taskLinkValidator * @property \Kanboard\Validator\TaskValidator $taskValidator * @property \Kanboard\Validator\UserValidator $userValidator - * @property \Kanboard\Import\TaskImport $taskImport + * @property \Kanboard\Validator\PredefinedTaskDescriptionValidator $predefinedTaskDescriptionValidator * @property \Kanboard\Import\UserImport $userImport * @property \Kanboard\Export\SubtaskExport $subtaskExport * @property \Kanboard\Export\TaskExport $taskExport diff --git a/app/Core/ExternalTask/ExternalTaskManager.php b/app/Core/ExternalTask/ExternalTaskManager.php index 102ec459..87a46b71 100644 --- a/app/Core/ExternalTask/ExternalTaskManager.php +++ b/app/Core/ExternalTask/ExternalTaskManager.php @@ -55,4 +55,14 @@ class ExternalTaskManager return array(); } + + /** + * Get all providers + * + * @return ExternalTaskProviderInterface[] + */ + public function getProviders() + { + return $this->providers; + } } diff --git a/app/Core/ExternalTask/ExternalTaskProviderInterface.php b/app/Core/ExternalTask/ExternalTaskProviderInterface.php index f67f7552..5678efb8 100644 --- a/app/Core/ExternalTask/ExternalTaskProviderInterface.php +++ b/app/Core/ExternalTask/ExternalTaskProviderInterface.php @@ -19,6 +19,22 @@ interface ExternalTaskProviderInterface public function getName(); /** + * Get provider icon + * + * @access public + * @return string + */ + public function getIcon(); + + /** + * Get label for adding a new task + * + * @access public + * @return string + */ + public function getMenuAddLabel(); + + /** * Retrieve task from external system or cache * * @access public diff --git a/app/Core/Filter/QueryBuilder.php b/app/Core/Filter/QueryBuilder.php index 3de82b63..bdd6b940 100644 --- a/app/Core/Filter/QueryBuilder.php +++ b/app/Core/Filter/QueryBuilder.php @@ -21,6 +21,18 @@ class QueryBuilder protected $query; /** + * Create a new class instance + * + * @static + * @access public + * @return static + */ + public static function create() + { + return new static(); + } + + /** * Set the query * * @access public diff --git a/app/Core/Group/GroupBackendProviderInterface.php b/app/Core/Group/GroupBackendProviderInterface.php index 74c5cb03..0b6e2985 100644 --- a/app/Core/Group/GroupBackendProviderInterface.php +++ b/app/Core/Group/GroupBackendProviderInterface.php @@ -5,7 +5,7 @@ namespace Kanboard\Core\Group; /** * Group Backend Provider Interface * - * @package group + * @package Kanboard\Core\Group * @author Frederic Guillot */ interface GroupBackendProviderInterface diff --git a/app/Core/Group/GroupManager.php b/app/Core/Group/GroupManager.php index 48b6c4f8..a0559139 100644 --- a/app/Core/Group/GroupManager.php +++ b/app/Core/Group/GroupManager.php @@ -5,7 +5,7 @@ namespace Kanboard\Core\Group; /** * Group Manager * - * @package group + * @package Kanboard\Core\Group * @author Frederic Guillot */ class GroupManager @@ -13,10 +13,10 @@ class GroupManager /** * List of backend providers * - * @access private + * @access protected * @var array */ - private $providers = array(); + protected $providers = array(); /** * Register a new group backend provider @@ -52,11 +52,11 @@ class GroupManager /** * Remove duplicated groups * - * @access private + * @access protected * @param array $groups * @return GroupProviderInterface[] */ - private function removeDuplicates(array $groups) + protected function removeDuplicates(array $groups) { $result = array(); diff --git a/app/Core/Group/GroupProviderInterface.php b/app/Core/Group/GroupProviderInterface.php index 4c7c16ec..f312f89b 100644 --- a/app/Core/Group/GroupProviderInterface.php +++ b/app/Core/Group/GroupProviderInterface.php @@ -5,7 +5,7 @@ namespace Kanboard\Core\Group; /** * Group Provider Interface * - * @package group + * @package Kanboard\Core\Group * @author Frederic Guillot */ interface GroupProviderInterface diff --git a/app/Core/Helper.php b/app/Core/Helper.php index 1b53ae2b..5f4772d5 100644 --- a/app/Core/Helper.php +++ b/app/Core/Helper.php @@ -14,13 +14,11 @@ use Pimple\Container; * @property \Kanboard\Helper\AssetHelper $asset * @property \Kanboard\Helper\AvatarHelper $avatar * @property \Kanboard\Helper\BoardHelper $board - * @property \Kanboard\Helper\CalendarHelper $calendar * @property \Kanboard\Helper\CommentHelper $comment * @property \Kanboard\Helper\DateHelper $dt * @property \Kanboard\Helper\FileHelper $file * @property \Kanboard\Helper\FormHelper $form * @property \Kanboard\Helper\HookHelper $hook - * @property \Kanboard\Helper\ICalHelper $ical * @property \Kanboard\Helper\ModalHelper $modal * @property \Kanboard\Helper\ModelHelper $model * @property \Kanboard\Helper\SubtaskHelper $subtask diff --git a/app/Core/Ldap/Query.php b/app/Core/Ldap/Query.php index 0f9abb5c..0fe7f2d3 100644 --- a/app/Core/Ldap/Query.php +++ b/app/Core/Ldap/Query.php @@ -44,9 +44,10 @@ class Query * @param string $baseDn * @param string $filter * @param array $attributes - * @return Query + * @param integer $limit + * @return $this */ - public function execute($baseDn, $filter, array $attributes) + public function execute($baseDn, $filter, array $attributes, $limit = 0) { if (DEBUG && $this->client->hasLogger()) { $this->client->getLogger()->debug('BaseDN='.$baseDn); @@ -54,7 +55,7 @@ class Query $this->client->getLogger()->debug('Attributes='.implode(', ', $attributes)); } - $sr = ldap_search($this->client->getConnection(), $baseDn, $filter, $attributes); + $sr = @ldap_search($this->client->getConnection(), $baseDn, $filter, $attributes, null, $limit); if ($sr === false) { return $this; } diff --git a/app/Core/Plugin/Installer.php b/app/Core/Plugin/Installer.php index b3618aeb..057ded94 100644 --- a/app/Core/Plugin/Installer.php +++ b/app/Core/Plugin/Installer.php @@ -100,7 +100,7 @@ class Installer extends \Kanboard\Core\Base { $zip = new ZipArchive(); $archiveData = $this->httpClient->get($archiveUrl); - $archiveFile = tempnam(sys_get_temp_dir(), 'kb_plugin'); + $archiveFile = tempnam(ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(), 'kb_plugin'); if (empty($archiveData)) { unlink($archiveFile); diff --git a/app/Core/User/UserBackendProviderInterface.php b/app/Core/User/UserBackendProviderInterface.php new file mode 100644 index 00000000..5f8cab47 --- /dev/null +++ b/app/Core/User/UserBackendProviderInterface.php @@ -0,0 +1,21 @@ +<?php + +namespace Kanboard\Core\User; + +/** + * User Backend Provider Interface + * + * @package Kanboard\Core\User + * @author Frederic Guillot + */ +interface UserBackendProviderInterface +{ + /** + * Find a user from a search query + * + * @access public + * @param string $input + * @return UserProviderInterface[] + */ + public function find($input); +} diff --git a/app/Core/User/UserManager.php b/app/Core/User/UserManager.php new file mode 100644 index 00000000..e1692480 --- /dev/null +++ b/app/Core/User/UserManager.php @@ -0,0 +1,71 @@ +<?php + +namespace Kanboard\Core\User; + +/** + * User Manager + * + * @package Kanboard\Core\User + * @author Frederic Guillot + */ +class UserManager +{ + /** + * List of backend providers + * + * @access protected + * @var array + */ + protected $providers = array(); + + /** + * Register a new group backend provider + * + * @access public + * @param UserBackendProviderInterface $provider + * @return $this + */ + public function register(UserBackendProviderInterface $provider) + { + $this->providers[] = $provider; + return $this; + } + + /** + * Find a group from a search query + * + * @access public + * @param string $input + * @return UserProviderInterface[] + */ + public function find($input) + { + $groups = array(); + + foreach ($this->providers as $provider) { + $groups = array_merge($groups, $provider->find($input)); + } + + return $this->removeDuplicates($groups); + } + + /** + * Remove duplicated users + * + * @access protected + * @param array $users + * @return UserProviderInterface[] + */ + protected function removeDuplicates(array $users) + { + $result = array(); + + foreach ($users as $user) { + if (! isset($result[$user->getUsername()])) { + $result[$user->getUsername()] = $user; + } + } + + return array_values($result); + } +} diff --git a/app/Export/TaskExport.php b/app/Export/TaskExport.php index f47cd082..f0685576 100644 --- a/app/Export/TaskExport.php +++ b/app/Export/TaskExport.php @@ -30,11 +30,13 @@ class TaskExport extends Base public function export($project_id, $from, $to) { $tasks = $this->getTasks($project_id, $from, $to); + $taskIds = array_column($tasks, 'id'); + $tags = $this->taskTagModel->getTagsByTaskIds($taskIds); $colors = $this->colorModel->getList(); $results = array($this->getColumns()); foreach ($tasks as &$task) { - $task = $this->format($task, $colors); + $task = $this->format($task, $colors, $tags); $results[] = array_values($task); } @@ -83,7 +85,8 @@ class TaskExport extends Base TaskModel::TABLE . '.date_completed', TaskModel::TABLE . '.date_started', TaskModel::TABLE . '.time_estimated', - TaskModel::TABLE . '.time_spent' + TaskModel::TABLE . '.time_spent', + TaskModel::TABLE . '.priority' ) ->join(UserModel::TABLE, 'id', 'owner_id', TaskModel::TABLE) ->left(UserModel::TABLE, 'uc', 'id', TaskModel::TABLE, 'creator_id') @@ -103,14 +106,16 @@ class TaskExport extends Base * * @access protected * @param array $task - * @param array $colors + * @param array $colors + * @param array $tags * @return array */ - protected function format(array &$task, array $colors) + protected function format(array &$task, array $colors, array &$tags) { $task['is_active'] = $task['is_active'] == TaskModel::STATUS_OPEN ? e('Open') : e('Closed'); $task['color_id'] = $colors[$task['color_id']]; $task['score'] = $task['score'] ?: 0; + $task['tags'] = ''; $task = $this->dateParser->format( $task, @@ -118,6 +123,11 @@ class TaskExport extends Base $this->dateParser->getUserDateTimeFormat() ); + if (isset($tags[$task['id']])) { + $taskTags = array_column($tags[$task['id']], 'name'); + $task['tags'] = implode(', ', $taskTags); + } + return $task; } @@ -152,6 +162,8 @@ class TaskExport extends Base e('Start date'), e('Time estimated'), e('Time spent'), + e('Priority'), + e('Tags'), ); } } diff --git a/app/Filter/BaseComparisonFilter.php b/app/Filter/BaseComparisonFilter.php new file mode 100644 index 00000000..ba0c9c5e --- /dev/null +++ b/app/Filter/BaseComparisonFilter.php @@ -0,0 +1,48 @@ +<?php + +namespace Kanboard\Filter; + +/** + * Base comparison filter class + * + * @package filter + */ +abstract class BaseComparisonFilter extends BaseFilter +{ + /** + * Parse operator in the input string + * + * @access protected + * @return string + */ + protected function parseOperator() + { + $operators = array( + '<=' => 'lte', + '>=' => 'gte', + '<' => 'lt', + '>' => 'gt', + ); + + foreach ($operators as $operator => $method) { + if (strpos($this->value, $operator) === 0) { + $this->value = substr($this->value, strlen($operator)); + return $method; + } + } + + return 'eq'; + } + + /** + * Apply a comparison filter + * + * @access protected + * @param string $field + */ + protected function applyComparisonFilter($field) + { + $method = $this->parseOperator(); + $this->query->$method($field, $this->value); + } +} diff --git a/app/Filter/BaseFilter.php b/app/Filter/BaseFilter.php index e029f4e1..2687d903 100644 --- a/app/Filter/BaseFilter.php +++ b/app/Filter/BaseFilter.php @@ -51,7 +51,7 @@ abstract class BaseFilter * * @access public * @param Table $query - * @return \Kanboard\Core\Filter\FilterInterface + * @return $this */ public function withQuery(Table $query) { @@ -64,7 +64,7 @@ abstract class BaseFilter * * @access public * @param string $value - * @return \Kanboard\Core\Filter\FilterInterface + * @return $this */ public function withValue($value) { diff --git a/app/Filter/TaskDueDateRangeFilter.php b/app/Filter/TaskDueDateRangeFilter.php index a6aefbe2..a4250f80 100644 --- a/app/Filter/TaskDueDateRangeFilter.php +++ b/app/Filter/TaskDueDateRangeFilter.php @@ -32,6 +32,11 @@ class TaskDueDateRangeFilter extends BaseFilter implements FilterInterface */ public function apply() { + $this->query->beginOr(); + $this->query->isNull(TaskModel::TABLE.'.date_started'); + $this->query->eq(TaskModel::TABLE.'.date_started', 0); + $this->query->closeOr(); + $this->query->gte(TaskModel::TABLE.'.date_due', is_numeric($this->value[0]) ? $this->value[0] : strtotime($this->value[0])); $this->query->lte(TaskModel::TABLE.'.date_due', is_numeric($this->value[1]) ? $this->value[1] : strtotime($this->value[1])); return $this; diff --git a/app/Filter/TaskReferenceFilter.php b/app/Filter/TaskReferenceFilter.php index 27c838f8..d843b777 100644 --- a/app/Filter/TaskReferenceFilter.php +++ b/app/Filter/TaskReferenceFilter.php @@ -32,6 +32,11 @@ class TaskReferenceFilter extends BaseFilter implements FilterInterface */ public function apply() { + if (strpos($this->value, '*') >= 0) { + $this->query->like(TaskModel::TABLE.'.reference', str_replace('*', '%', $this->value)); + return $this; + } + $this->query->eq(TaskModel::TABLE.'.reference', $this->value); return $this; } diff --git a/app/Filter/TaskScoreFilter.php b/app/Filter/TaskScoreFilter.php new file mode 100644 index 00000000..2c4067f1 --- /dev/null +++ b/app/Filter/TaskScoreFilter.php @@ -0,0 +1,37 @@ +<?php + +namespace Kanboard\Filter; + +use Kanboard\Core\Filter\FilterInterface; +use Kanboard\Model\TaskModel; + +/** + * Class TaskScoreFilter + * + * @package Kanboard\Filter + */ +class TaskScoreFilter extends BaseComparisonFilter implements FilterInterface +{ + /** + * Get search attribute + * + * @access public + * @return string[] + */ + public function getAttributes() + { + return array('score', 'complexity'); + } + + /** + * Apply filter + * + * @access public + * @return FilterInterface + */ + public function apply() + { + $this->applyComparisonFilter(TaskModel::TABLE.'.score'); + return $this; + } +} diff --git a/app/Formatter/BaseTaskCalendarFormatter.php b/app/Formatter/BaseTaskCalendarFormatter.php deleted file mode 100644 index 3d9ead4d..00000000 --- a/app/Formatter/BaseTaskCalendarFormatter.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -namespace Kanboard\Formatter; - -/** - * Common class to handle calendar events - * - * @package formatter - * @author Frederic Guillot - */ -abstract class BaseTaskCalendarFormatter extends BaseFormatter -{ - /** - * Column used for event start date - * - * @access protected - * @var string - */ - protected $startColumn = 'date_started'; - - /** - * Column used for event end date - * - * @access protected - * @var string - */ - protected $endColumn = 'date_completed'; - - /** - * Transform results to calendar events - * - * @access public - * @param string $start_column Column name for the start date - * @param string $end_column Column name for the end date - * @return $this - */ - public function setColumns($start_column, $end_column = '') - { - $this->startColumn = $start_column; - $this->endColumn = $end_column ?: $start_column; - return $this; - } -} diff --git a/app/Formatter/GroupAutoCompleteFormatter.php b/app/Formatter/GroupAutoCompleteFormatter.php index d811de7f..9d740b7f 100644 --- a/app/Formatter/GroupAutoCompleteFormatter.php +++ b/app/Formatter/GroupAutoCompleteFormatter.php @@ -4,12 +4,11 @@ namespace Kanboard\Formatter; use Kanboard\Core\Filter\FormatterInterface; use Kanboard\Core\Group\GroupProviderInterface; -use PicoDb\Table; /** * Auto-complete formatter for groups * - * @package formatter + * @package Kanboard\Formatter * @author Frederic Guillot */ class GroupAutoCompleteFormatter extends BaseFormatter implements FormatterInterface diff --git a/app/Formatter/ProjectApiFormatter.php b/app/Formatter/ProjectApiFormatter.php new file mode 100644 index 00000000..5521d57c --- /dev/null +++ b/app/Formatter/ProjectApiFormatter.php @@ -0,0 +1,39 @@ +<?php + +namespace Kanboard\Formatter; + +use Kanboard\Core\Filter\FormatterInterface; + +/** + * Class ProjectApiFormatter + * + * @package Kanboard\Formatter + */ +class ProjectApiFormatter extends BaseFormatter implements FormatterInterface +{ + protected $project = null; + + public function withProject($project) + { + $this->project = $project; + return $this; + } + + /** + * Apply formatter + * + * @access public + * @return mixed + */ + public function format() + { + if (! empty($this->project)) { + $this->project['url'] = array( + 'board' => $this->helper->url->to('BoardViewController', 'show', array('project_id' => $this->project['id']), '', true), + 'list' => $this->helper->url->to('TaskListController', 'show', array('project_id' => $this->project['id']), '', true), + ); + } + + return $this->project; + } +} diff --git a/app/Formatter/ProjectGanttFormatter.php b/app/Formatter/ProjectGanttFormatter.php deleted file mode 100644 index af04f498..00000000 --- a/app/Formatter/ProjectGanttFormatter.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -namespace Kanboard\Formatter; - -use Kanboard\Core\Filter\FormatterInterface; - -/** - * Gantt chart formatter for projects - * - * @package formatter - * @author Frederic Guillot - */ -class ProjectGanttFormatter extends BaseFormatter implements FormatterInterface -{ - /** - * Format projects to be displayed in the Gantt chart - * - * @access public - * @return array - */ - public function format() - { - $projects = $this->query->findAll(); - $colors = $this->colorModel->getDefaultColors(); - $bars = array(); - - foreach ($projects as $project) { - $start = empty($project['start_date']) ? time() : strtotime($project['start_date']); - $end = empty($project['end_date']) ? $start : strtotime($project['end_date']); - $color = next($colors) ?: reset($colors); - - $bars[] = array( - 'type' => 'project', - 'id' => $project['id'], - 'title' => $project['name'], - 'start' => array( - (int) date('Y', $start), - (int) date('n', $start), - (int) date('j', $start), - ), - 'end' => array( - (int) date('Y', $end), - (int) date('n', $end), - (int) date('j', $end), - ), - 'link' => $this->helper->url->href('ProjectViewController', 'show', array('project_id' => $project['id'])), - 'board_link' => $this->helper->url->href('BoardViewController', 'show', array('project_id' => $project['id'])), - 'gantt_link' => $this->helper->url->href('TaskGanttController', 'show', array('project_id' => $project['id'])), - 'color' => $color, - 'not_defined' => empty($project['start_date']) || empty($project['end_date']), - 'users' => $this->projectUserRoleModel->getAllUsersGroupedByRole($project['id']), - ); - } - - return $bars; - } -} diff --git a/app/Formatter/ProjectsApiFormatter.php b/app/Formatter/ProjectsApiFormatter.php new file mode 100644 index 00000000..0bf97da4 --- /dev/null +++ b/app/Formatter/ProjectsApiFormatter.php @@ -0,0 +1,38 @@ +<?php + +namespace Kanboard\Formatter; + +use Kanboard\Core\Filter\FormatterInterface; + +/** + * Class ProjectsApiFormatter + * + * @package Kanboard\Formatter + */ +class ProjectsApiFormatter extends BaseFormatter implements FormatterInterface +{ + protected $projects = array(); + + public function withProjects($projects) + { + $this->projects = $projects; + return $this; + } + + /** + * Apply formatter + * + * @access public + * @return mixed + */ + public function format() + { + if (! empty($this->projects)) { + foreach ($this->projects as &$project) { + $project = $this->projectApiFormatter->withProject($project)->format(); + } + } + + return $this->projects; + } +} diff --git a/app/Formatter/TaskApiFormatter.php b/app/Formatter/TaskApiFormatter.php new file mode 100644 index 00000000..60840beb --- /dev/null +++ b/app/Formatter/TaskApiFormatter.php @@ -0,0 +1,37 @@ +<?php + +namespace Kanboard\Formatter; + +use Kanboard\Core\Filter\FormatterInterface; + +/** + * Class TaskApiFormatter + * + * @package Kanboard\Formatter + */ +class TaskApiFormatter extends BaseFormatter implements FormatterInterface +{ + protected $task = null; + + public function withTask($task) + { + $this->task = $task; + return $this; + } + + /** + * Apply formatter + * + * @access public + * @return mixed + */ + public function format() + { + if (! empty($this->task)) { + $this->task['url'] = $this->helper->url->to('TaskViewController', 'show', array('task_id' => $this->task['id'], 'project_id' => $this->task['project_id']), '', true); + $this->task['color'] = $this->colorModel->getColorProperties($this->task['color_id']); + } + + return $this->task; + } +} diff --git a/app/Formatter/TaskCalendarFormatter.php b/app/Formatter/TaskCalendarFormatter.php deleted file mode 100644 index 75d2a83e..00000000 --- a/app/Formatter/TaskCalendarFormatter.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php - -namespace Kanboard\Formatter; - -use Kanboard\Core\Filter\FormatterInterface; - -/** - * Calendar event formatter for task filter - * - * @package formatter - * @author Frederic Guillot - */ -class TaskCalendarFormatter extends BaseTaskCalendarFormatter implements FormatterInterface -{ - /** - * Full day event flag - * - * @access private - * @var boolean - */ - private $fullDay = false; - - /** - * When called calendar events will be full day - * - * @access public - * @return FormatterInterface - */ - public function setFullDay() - { - $this->fullDay = true; - return $this; - } - - /** - * Transform tasks to calendar events - * - * @access public - * @return array - */ - public function format() - { - $events = array(); - - foreach ($this->query->findAll() as $task) { - $events[] = array( - 'timezoneParam' => $this->timezoneModel->getCurrentTimezone(), - 'id' => $task['id'], - 'title' => t('#%d', $task['id']).' '.$task['title'], - 'backgroundColor' => $this->colorModel->getBackgroundColor($task['color_id']), - 'borderColor' => $this->colorModel->getBorderColor($task['color_id']), - 'textColor' => 'black', - 'url' => $this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])), - 'start' => date($this->getDateTimeFormat(), $task[$this->startColumn]), - 'end' => date($this->getDateTimeFormat(), $task[$this->endColumn] ?: time()), - 'editable' => $this->fullDay, - 'allday' => $this->fullDay, - ); - } - - return $events; - } - - /** - * Get DateTime format for event - * - * @access private - * @return string - */ - private function getDateTimeFormat() - { - return $this->fullDay ? 'Y-m-d' : 'Y-m-d\TH:i:s'; - } -} diff --git a/app/Formatter/TaskGanttFormatter.php b/app/Formatter/TaskGanttFormatter.php deleted file mode 100644 index ddb3f93a..00000000 --- a/app/Formatter/TaskGanttFormatter.php +++ /dev/null @@ -1,78 +0,0 @@ -<?php - -namespace Kanboard\Formatter; - -use Kanboard\Core\Filter\FormatterInterface; - -/** - * Task Gantt Formatter - * - * @package formatter - * @author Frederic Guillot - */ -class TaskGanttFormatter extends BaseFormatter implements FormatterInterface -{ - /** - * Local cache for project columns - * - * @access private - * @var array - */ - private $columns = array(); - - /** - * Apply formatter - * - * @access public - * @return array - */ - public function format() - { - $bars = array(); - - foreach ($this->query->findAll() as $task) { - $bars[] = $this->formatTask($task); - } - - return $bars; - } - - /** - * Format a single task - * - * @access private - * @param array $task - * @return array - */ - private function formatTask(array $task) - { - if (! isset($this->columns[$task['project_id']])) { - $this->columns[$task['project_id']] = $this->columnModel->getList($task['project_id']); - } - - $start = $task['date_started'] ?: time(); - $end = $task['date_due'] ?: $start; - - return array( - 'type' => 'task', - 'id' => $task['id'], - 'title' => $task['title'], - 'start' => array( - (int) date('Y', $start), - (int) date('n', $start), - (int) date('j', $start), - ), - 'end' => array( - (int) date('Y', $end), - (int) date('n', $end), - (int) date('j', $end), - ), - 'column_title' => $task['column_name'], - 'assignee' => $task['assignee_name'] ?: $task['assignee_username'], - 'progress' => $this->taskModel->getProgress($task, $this->columns[$task['project_id']]).'%', - 'link' => $this->helper->url->href('TaskViewController', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id'])), - 'color' => $this->colorModel->getColorProperties($task['color_id']), - 'not_defined' => empty($task['date_due']) || empty($task['date_started']), - ); - } -} diff --git a/app/Formatter/TaskICalFormatter.php b/app/Formatter/TaskICalFormatter.php index ad2a4449..387074e5 100644 --- a/app/Formatter/TaskICalFormatter.php +++ b/app/Formatter/TaskICalFormatter.php @@ -8,6 +8,7 @@ use Eluceo\iCal\Component\Event; use Eluceo\iCal\Property\Event\Attendees; use Eluceo\iCal\Property\Event\Organizer; use Kanboard\Core\Filter\FormatterInterface; +use PicoDb\Table; /** * iCal event formatter for tasks @@ -15,15 +16,15 @@ use Kanboard\Core\Filter\FormatterInterface; * @package formatter * @author Frederic Guillot */ -class TaskICalFormatter extends BaseTaskCalendarFormatter implements FormatterInterface +class TaskICalFormatter extends BaseFormatter implements FormatterInterface { /** * Calendar object * - * @access private + * @access protected * @var \Eluceo\iCal\Component\Calendar */ - private $vCalendar; + protected $vCalendar; /** * Get Ical events @@ -41,7 +42,7 @@ class TaskICalFormatter extends BaseTaskCalendarFormatter implements FormatterIn * * @access public * @param \Eluceo\iCal\Component\Calendar $vCalendar - * @return FormatterInterface + * @return $this */ public function setCalendar(Calendar $vCalendar) { @@ -53,18 +54,21 @@ class TaskICalFormatter extends BaseTaskCalendarFormatter implements FormatterIn * Transform results to iCal events * * @access public - * @return FormatterInterface + * @param Table $query + * @param string $startColumn + * @param string $endColumn + * @return $this */ - public function addDateTimeEvents() + public function addTasksWithStartAndDueDate(Table $query, $startColumn, $endColumn) { - foreach ($this->query->findAll() as $task) { + foreach ($query->findAll() as $task) { $start = new DateTime; - $start->setTimestamp($task[$this->startColumn]); + $start->setTimestamp($task[$startColumn]); $end = new DateTime; - $end->setTimestamp($task[$this->endColumn] ?: time()); + $end->setTimestamp($task[$endColumn] ?: time()); - $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-'.$this->startColumn.'-'.$this->endColumn); + $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-'.$startColumn.'-'.$endColumn); $vEvent->setDtStart($start); $vEvent->setDtEnd($end); @@ -78,18 +82,22 @@ class TaskICalFormatter extends BaseTaskCalendarFormatter implements FormatterIn * Transform results to all day iCal events * * @access public - * @return FormatterInterface + * @param Table $query + * @return $this */ - public function addFullDayEvents() + public function addTasksWithDueDateOnly(Table $query) { - foreach ($this->query->findAll() as $task) { + foreach ($query->findAll() as $task) { $date = new DateTime; - $date->setTimestamp($task[$this->startColumn]); + $date->setTimestamp($task['date_due']); - $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-'.$this->startColumn); + $vEvent = $this->getTaskIcalEvent($task, 'task-#'.$task['id'].'-date_due'); $vEvent->setDtStart($date); $vEvent->setDtEnd($date); - $vEvent->setNoTime(true); + + if ($date->format('Hi') === '0000') { + $vEvent->setNoTime(true); + } $this->vCalendar->addComponent($vEvent); } diff --git a/app/Formatter/TaskListSubtaskAssigneeFormatter.php b/app/Formatter/TaskListSubtaskAssigneeFormatter.php new file mode 100644 index 00000000..73391766 --- /dev/null +++ b/app/Formatter/TaskListSubtaskAssigneeFormatter.php @@ -0,0 +1,56 @@ +<?php + +namespace Kanboard\Formatter; + +/** + * Class TaskListSubtaskAssigneeFormatter + * + * @package Kanboard\Formatter + * @author Frederic Guillot + */ +class TaskListSubtaskAssigneeFormatter extends TaskListFormatter +{ + protected $userId = 0; + protected $withoutEmptyTasks = false; + + /** + * Set assignee + * + * @param integer $userId + * @return $this + */ + public function withUserId($userId) + { + $this->userId = $userId; + return $this; + } + + public function withoutEmptyTasks() + { + $this->withoutEmptyTasks = true; + return $this; + } + + /** + * Apply formatter + * + * @access public + * @return array + */ + public function format() + { + $tasks = parent::format(); + $taskIds = array_column($tasks, 'id'); + $subtasks = $this->subtaskModel->getAllByTaskIdsAndAssignee($taskIds, $this->userId); + $subtasks = array_column_index($subtasks, 'task_id'); + array_merge_relation($tasks, $subtasks, 'subtasks', 'id'); + + if ($this->withoutEmptyTasks) { + $tasks = array_filter($tasks, function (array $task) { + return count($task['subtasks']) > 0; + }); + } + + return $tasks; + } +} diff --git a/app/Formatter/TasksApiFormatter.php b/app/Formatter/TasksApiFormatter.php new file mode 100644 index 00000000..95b14095 --- /dev/null +++ b/app/Formatter/TasksApiFormatter.php @@ -0,0 +1,38 @@ +<?php + +namespace Kanboard\Formatter; + +use Kanboard\Core\Filter\FormatterInterface; + +/** + * Class TasksApiFormatter + * + * @package Kanboard\Formatter + */ +class TasksApiFormatter extends BaseFormatter implements FormatterInterface +{ + protected $tasks = array(); + + public function withTasks($tasks) + { + $this->tasks = $tasks; + return $this; + } + + /** + * Apply formatter + * + * @access public + * @return mixed + */ + public function format() + { + if (! empty($this->tasks)) { + foreach ($this->tasks as &$task) { + $task = $this->taskApiFormatter->withTask($task)->format(); + } + } + + return $this->tasks; + } +} diff --git a/app/Formatter/UserAutoCompleteFormatter.php b/app/Formatter/UserAutoCompleteFormatter.php index c81af00a..aa02cd22 100644 --- a/app/Formatter/UserAutoCompleteFormatter.php +++ b/app/Formatter/UserAutoCompleteFormatter.php @@ -2,37 +2,59 @@ namespace Kanboard\Formatter; -use Kanboard\Model\UserModel; +use Kanboard\Core\User\UserProviderInterface; use Kanboard\Core\Filter\FormatterInterface; /** - * Auto-complete formatter for user filter + * Auto-complete formatter for users * - * @package formatter + * @package Kanboard\Formatter * @author Frederic Guillot */ class UserAutoCompleteFormatter extends BaseFormatter implements FormatterInterface { /** - * Format the tasks for the ajax auto-completion + * Users found + * + * @access protected + * @var UserProviderInterface[] + */ + protected $users; + + /** + * Set users + * + * @access public + * @param UserProviderInterface[] $users + * @return $this + */ + public function withUsers(array $users) + { + $this->users = $users; + return $this; + } + + /** + * Format the users for the ajax auto-completion * * @access public * @return array */ public function format() { - $users = $this->query->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name')->findAll(); + $result = array(); - foreach ($users as &$user) { - if (empty($user['name'])) { - $user['value'] = $user['username'].' (#'.$user['id'].')'; - $user['label'] = $user['username']; - } else { - $user['value'] = $user['name'].' (#'.$user['id'].')'; - $user['label'] = $user['name'].' ('.$user['username'].')'; - } + foreach ($this->users as $user) { + $result[] = array( + 'id' => $user->getInternalId(), + 'username' => $user->getUsername(), + 'external_id' => $user->getExternalId(), + 'external_id_column' => $user->getExternalIdColumn(), + 'value' => $user->getName() === '' ? $user->getUsername() : $user->getName(), + 'label' => $user->getName() === '' ? $user->getUsername() : $user->getName().' ('.$user->getUsername().')', + ); } - return $users; + return $result; } } diff --git a/app/Formatter/UserMentionFormatter.php b/app/Formatter/UserMentionFormatter.php index 395fc463..9ea76881 100644 --- a/app/Formatter/UserMentionFormatter.php +++ b/app/Formatter/UserMentionFormatter.php @@ -2,13 +2,15 @@ namespace Kanboard\Formatter; +use Kanboard\Core\Filter\FormatterInterface; + /** * Class UserMentionFormatter * * @package Kanboard\Formatter * @author Frederic Guillot */ -class UserMentionFormatter extends BaseFormatter +class UserMentionFormatter extends BaseFormatter implements FormatterInterface { protected $users = array(); diff --git a/app/Helper/CalendarHelper.php b/app/Helper/CalendarHelper.php deleted file mode 100644 index 0942177d..00000000 --- a/app/Helper/CalendarHelper.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php - -namespace Kanboard\Helper; - -use Kanboard\Core\Base; -use Kanboard\Core\Filter\QueryBuilder; -use Kanboard\Filter\TaskDueDateRangeFilter; - -/** - * Calendar Helper - * - * @package helper - * @author Frederic Guillot - */ -class CalendarHelper extends Base -{ - /** - * Render calendar component - * - * @param string $checkUrl - * @param string $saveUrl - * @return string - */ - public function render($checkUrl, $saveUrl) - { - $params = array( - 'checkUrl' => $checkUrl, - 'saveUrl' => $saveUrl, - ); - - return '<div class="js-calendar" data-params=\''.json_encode($params, JSON_HEX_APOS).'\'></div>'; - } - - /** - * Get formatted calendar task due events - * - * @access public - * @param QueryBuilder $queryBuilder - * @param string $start - * @param string $end - * @return array - */ - public function getTaskDateDueEvents(QueryBuilder $queryBuilder, $start, $end) - { - $formatter = $this->taskCalendarFormatter; - $formatter->setFullDay(); - $formatter->setColumns('date_due'); - - return $queryBuilder - ->withFilter(new TaskDueDateRangeFilter(array($start, $end))) - ->format($formatter); - } - - /** - * Get formatted calendar task events - * - * @access public - * @param QueryBuilder $queryBuilder - * @param string $start - * @param string $end - * @return array - */ - public function getTaskEvents(QueryBuilder $queryBuilder, $start, $end) - { - $startColumn = $this->configModel->get('calendar_project_tasks', 'date_started'); - - $queryBuilder->getQuery()->addCondition($this->getCalendarCondition( - $this->dateParser->getTimestampFromIsoFormat($start), - $this->dateParser->getTimestampFromIsoFormat($end), - $startColumn, - 'date_due' - )); - - $formatter = $this->taskCalendarFormatter; - $formatter->setColumns($startColumn, 'date_due'); - - return $queryBuilder->format($formatter); - } - - /** - * Get formatted calendar subtask time tracking events - * - * @access public - * @param integer $user_id - * @param string $start - * @param string $end - * @return array - */ - public function getSubtaskTimeTrackingEvents($user_id, $start, $end) - { - return $this->subtaskTimeTrackingCalendarFormatter - ->withQuery($this->subtaskTimeTrackingModel->getUserQuery($user_id) - ->addCondition($this->getCalendarCondition( - $this->dateParser->getTimestampFromIsoFormat($start), - $this->dateParser->getTimestampFromIsoFormat($end), - 'start', - 'end' - )) - ) - ->format(); - } - - /** - * Build SQL condition for a given time range - * - * @access public - * @param string $start_time Start timestamp - * @param string $end_time End timestamp - * @param string $start_column Start column name - * @param string $end_column End column name - * @return string - */ - public function getCalendarCondition($start_time, $end_time, $start_column, $end_column) - { - $start_column = $this->db->escapeIdentifier($start_column); - $end_column = $this->db->escapeIdentifier($end_column); - - $conditions = array( - "($start_column >= '$start_time' AND $start_column <= '$end_time')", - "($start_column <= '$start_time' AND $end_column >= '$start_time')", - "($start_column <= '$start_time' AND ($end_column = '0' OR $end_column IS NULL))", - ); - - return $start_column.' IS NOT NULL AND '.$start_column.' > 0 AND ('.implode(' OR ', $conditions).')'; - } -} diff --git a/app/Helper/ICalHelper.php b/app/Helper/ICalHelper.php deleted file mode 100644 index 95723417..00000000 --- a/app/Helper/ICalHelper.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -namespace Kanboard\Helper; - -use Kanboard\Core\Base; -use Kanboard\Core\Filter\QueryBuilder; -use Kanboard\Filter\TaskDueDateRangeFilter; -use Eluceo\iCal\Component\Calendar as iCalendar; - -/** - * ICal Helper - * - * @package helper - * @author Frederic Guillot - */ -class ICalHelper extends Base -{ - /** - * Get formatted calendar task due events - * - * @access public - * @param QueryBuilder $queryBuilder - * @param iCalendar $calendar - * @param string $start - * @param string $end - */ - public function addTaskDateDueEvents(QueryBuilder $queryBuilder, iCalendar $calendar, $start, $end) - { - $queryBuilder->withFilter(new TaskDueDateRangeFilter(array($start, $end))); - - $this->taskICalFormatter - ->setColumns('date_due') - ->setCalendar($calendar) - ->withQuery($queryBuilder->getQuery()) - ->addFullDayEvents(); - } -} diff --git a/app/Helper/ProjectHeaderHelper.php b/app/Helper/ProjectHeaderHelper.php index 9514f4f2..e4f96107 100644 --- a/app/Helper/ProjectHeaderHelper.php +++ b/app/Helper/ProjectHeaderHelper.php @@ -34,15 +34,17 @@ class ProjectHeaderHelper extends Base * @param string $controller * @param string $action * @param bool $boardView + * @param string $plugin * @return string */ - public function render(array $project, $controller, $action, $boardView = false) + public function render(array $project, $controller, $action, $boardView = false, $plugin = '') { $filters = array( 'controller' => $controller, 'action' => $action, 'project_id' => $project['id'], 'search' => $this->getSearchQuery($project), + 'plugin' => $plugin, ); return $this->template->render('project_header/header', array( diff --git a/app/Helper/ProjectRoleHelper.php b/app/Helper/ProjectRoleHelper.php index 6f9cf10c..a9f0596a 100644 --- a/app/Helper/ProjectRoleHelper.php +++ b/app/Helper/ProjectRoleHelper.php @@ -19,12 +19,12 @@ class ProjectRoleHelper extends Base * Get project role for the current user * * @access public - * @param integer $project_id + * @param integer $projectId * @return string */ - public function getProjectUserRole($project_id) + public function getProjectUserRole($projectId) { - return $this->memoryCache->proxy($this->projectUserRoleModel, 'getUserRole', $project_id, $this->userSession->getId()); + return $this->memoryCache->proxy($this->projectUserRoleModel, 'getUserRole', $projectId, $this->userSession->getId()); } /** @@ -36,7 +36,7 @@ class ProjectRoleHelper extends Base public function isDraggable(array &$task) { if ($task['is_active'] == 1 && $this->helper->user->hasProjectAccess('BoardAjaxController', 'save', $task['project_id'])) { - return $this->isSortableColumn($task['project_id'], $task['column_id']); + return $this->isSortableColumn($task['project_id'], $task['column_id'], $task['owner_id']); } return false; @@ -45,24 +45,29 @@ class ProjectRoleHelper extends Base /** * Return true is the column is sortable * - * @param int $project_id - * @param int $column_id + * @param int $projectId + * @param int $columnId + * @param int $assigneeId * @return bool */ - public function isSortableColumn($project_id, $column_id) + public function isSortableColumn($projectId, $columnId, $assigneeId = null) { - $role = $this->getProjectUserRole($project_id); + $role = $this->getProjectUserRole($projectId); if ($this->role->isCustomProjectRole($role)) { - $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($project_id, $role); + $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($projectId, $role); foreach ($sortableColumns as $column) { - if ($column['src_column_id'] == $column_id || $column['dst_column_id'] == $column_id) { + if ($column['src_column_id'] == $columnId || $column['dst_column_id'] == $columnId) { + if ($column['only_assigned'] == 1 && $assigneeId !== null && $assigneeId != $this->userSession->getId()) { + return false; + } + return true; } } - return empty($sortableColumns) && $this->isAllowedToMoveTask($project_id, $role); + return empty($sortableColumns) && $this->isAllowedToMoveTask($projectId, $role); } return true; @@ -71,33 +76,33 @@ class ProjectRoleHelper extends Base /** * Check if the user can move a task * - * @param int $project_id - * @param int $src_column_id - * @param int $dst_column_id + * @param int $projectId + * @param int $srcColumnId + * @param int $dstColumnId * @return bool|int */ - public function canMoveTask($project_id, $src_column_id, $dst_column_id) + public function canMoveTask($projectId, $srcColumnId, $dstColumnId) { - $role = $this->getProjectUserRole($project_id); + $role = $this->getProjectUserRole($projectId); if ($this->role->isCustomProjectRole($role)) { - if ($src_column_id == $dst_column_id) { + if ($srcColumnId == $dstColumnId) { return true; } - $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($project_id, $role); + $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($projectId, $role); foreach ($sortableColumns as $column) { - if ($column['src_column_id'] == $src_column_id && $column['dst_column_id'] == $dst_column_id) { + if ($column['src_column_id'] == $srcColumnId && $column['dst_column_id'] == $dstColumnId) { return true; } - if ($column['dst_column_id'] == $src_column_id && $column['src_column_id'] == $dst_column_id) { + if ($column['dst_column_id'] == $srcColumnId && $column['src_column_id'] == $dstColumnId) { return true; } } - return empty($sortableColumns) && $this->isAllowedToMoveTask($project_id, $role); + return empty($sortableColumns) && $this->isAllowedToMoveTask($projectId, $role); } return true; @@ -106,41 +111,41 @@ class ProjectRoleHelper extends Base /** * Return true if the user can create a task for the given column * - * @param int $project_id - * @param int $column_id + * @param int $projectId + * @param int $columnId * @return bool */ - public function canCreateTaskInColumn($project_id, $column_id) + public function canCreateTaskInColumn($projectId, $columnId) { - $role = $this->getProjectUserRole($project_id); + $role = $this->getProjectUserRole($projectId); if ($this->role->isCustomProjectRole($role)) { - if (! $this->isAllowedToCreateTask($project_id, $column_id, $role)) { + if (! $this->isAllowedToCreateTask($projectId, $columnId, $role)) { return false; } } - return $this->helper->user->hasProjectAccess('TaskCreationController', 'show', $project_id); + return $this->helper->user->hasProjectAccess('TaskCreationController', 'show', $projectId); } /** * Return true if the user can create a task for the given column * - * @param int $project_id - * @param int $column_id + * @param int $projectId + * @param int $columnId * @return bool */ - public function canChangeTaskStatusInColumn($project_id, $column_id) + public function canChangeTaskStatusInColumn($projectId, $columnId) { - $role = $this->getProjectUserRole($project_id); + $role = $this->getProjectUserRole($projectId); if ($this->role->isCustomProjectRole($role)) { - if (! $this->isAllowedToChangeTaskStatus($project_id, $column_id, $role)) { + if (! $this->isAllowedToChangeTaskStatus($projectId, $columnId, $role)) { return false; } } - return $this->helper->user->hasProjectAccess('TaskStatusController', 'close', $project_id); + return $this->helper->user->hasProjectAccess('TaskStatusController', 'close', $projectId); } /** @@ -154,6 +159,12 @@ class ProjectRoleHelper extends Base */ public function canRemoveTask(array $task) { + $role = $this->getProjectUserRole($task['project_id']); + + if ($this->hasRestriction($task['project_id'], $role, ProjectRoleRestrictionModel::RULE_TASK_SUPPRESSION)) { + return false; + } + if (isset($task['creator_id']) && $task['creator_id'] == $this->userSession->getId()) { return true; } @@ -166,14 +177,50 @@ class ProjectRoleHelper extends Base } /** + * Return true if the user can change assignee + * + * @public + * @param array $task + * @return bool + */ + public function canChangeAssignee(array $task) + { + $role = $this->getProjectUserRole($task['project_id']); + + if ($this->role->isCustomProjectRole($role) && $this->hasRestriction($task['project_id'], $role, ProjectRoleRestrictionModel::RULE_TASK_CHANGE_ASSIGNEE)) { + return false; + } + + return true; + } + + /** + * Return true if the user can update a task + * + * @public + * @param array $task + * @return bool + */ + public function canUpdateTask(array $task) + { + $role = $this->getProjectUserRole($task['project_id']); + + if ($this->role->isCustomProjectRole($role) && $task['owner_id'] != $this->userSession->getId() && $this->hasRestriction($task['project_id'], $role, ProjectRoleRestrictionModel::RULE_TASK_UPDATE_ASSIGNED)) { + return false; + } + + return true; + } + + /** * Check project access * * @param string $controller * @param string $action - * @param integer $project_id + * @param integer $projectId * @return bool */ - public function checkProjectAccess($controller, $action, $project_id) + public function checkProjectAccess($controller, $action, $projectId) { if (! $this->userSession->isLogged()) { return false; @@ -187,7 +234,7 @@ class ProjectRoleHelper extends Base return false; } - $role = $this->getProjectUserRole($project_id); + $role = $this->getProjectUserRole($projectId); if ($this->role->isCustomProjectRole($role)) { $result = $this->projectAuthorization->isAllowed($controller, $action, Role::PROJECT_MEMBER); @@ -201,17 +248,17 @@ class ProjectRoleHelper extends Base /** * Check authorization for a custom project role to change the task status * - * @param int $project_id - * @param int $column_id + * @param int $projectId + * @param int $columnId * @param string $role * @return bool */ - protected function isAllowedToChangeTaskStatus($project_id, $column_id, $role) + protected function isAllowedToChangeTaskStatus($projectId, $columnId, $role) { - $columnRestrictions = $this->columnRestrictionCacheDecorator->getAllByRole($project_id, $role); + $columnRestrictions = $this->columnRestrictionCacheDecorator->getAllByRole($projectId, $role); foreach ($columnRestrictions as $restriction) { - if ($restriction['column_id'] == $column_id) { + if ($restriction['column_id'] == $columnId) { if ($restriction['rule'] == ColumnRestrictionModel::RULE_ALLOW_TASK_OPEN_CLOSE) { return true; } else if ($restriction['rule'] == ColumnRestrictionModel::RULE_BLOCK_TASK_OPEN_CLOSE) { @@ -220,31 +267,23 @@ class ProjectRoleHelper extends Base } } - $projectRestrictions = $this->projectRoleRestrictionCacheDecorator->getAllByRole($project_id, $role); - - foreach ($projectRestrictions as $restriction) { - if ($restriction['rule'] == ProjectRoleRestrictionModel::RULE_TASK_OPEN_CLOSE) { - return false; - } - } - - return true; + return ! $this->hasRestriction($projectId, $role, ProjectRoleRestrictionModel::RULE_TASK_OPEN_CLOSE); } /** * Check authorization for a custom project role to create a task * - * @param int $project_id - * @param int $column_id + * @param int $projectId + * @param int $columnId * @param string $role * @return bool */ - protected function isAllowedToCreateTask($project_id, $column_id, $role) + protected function isAllowedToCreateTask($projectId, $columnId, $role) { - $columnRestrictions = $this->columnRestrictionCacheDecorator->getAllByRole($project_id, $role); + $columnRestrictions = $this->columnRestrictionCacheDecorator->getAllByRole($projectId, $role); foreach ($columnRestrictions as $restriction) { - if ($restriction['column_id'] == $column_id) { + if ($restriction['column_id'] == $columnId) { if ($restriction['rule'] == ColumnRestrictionModel::RULE_ALLOW_TASK_CREATION) { return true; } else if ($restriction['rule'] == ColumnRestrictionModel::RULE_BLOCK_TASK_CREATION) { @@ -253,10 +292,22 @@ class ProjectRoleHelper extends Base } } - $projectRestrictions = $this->projectRoleRestrictionCacheDecorator->getAllByRole($project_id, $role); + return ! $this->hasRestriction($projectId, $role, ProjectRoleRestrictionModel::RULE_TASK_CREATION); + } + + /** + * Check if the role can move task in the given project + * + * @param int $projectId + * @param string $role + * @return bool + */ + protected function isAllowedToMoveTask($projectId, $role) + { + $projectRestrictions = $this->projectRoleRestrictionCacheDecorator->getAllByRole($projectId, $role); foreach ($projectRestrictions as $restriction) { - if ($restriction['rule'] == ProjectRoleRestrictionModel::RULE_TASK_CREATION) { + if ($restriction['rule'] == ProjectRoleRestrictionModel::RULE_TASK_MOVE) { return false; } } @@ -265,22 +316,23 @@ class ProjectRoleHelper extends Base } /** - * Check if the role can move task in the given project + * Check if given role has a restriction * - * @param int $project_id + * @param integer $projectId * @param string $role + * @param string $rule * @return bool */ - protected function isAllowedToMoveTask($project_id, $role) + protected function hasRestriction($projectId, $role, $rule) { - $projectRestrictions = $this->projectRoleRestrictionCacheDecorator->getAllByRole($project_id, $role); + $projectRestrictions = $this->projectRoleRestrictionCacheDecorator->getAllByRole($projectId, $role); foreach ($projectRestrictions as $restriction) { - if ($restriction['rule'] == ProjectRoleRestrictionModel::RULE_TASK_MOVE) { - return false; + if ($restriction['rule'] == $rule) { + return true; } } - return true; + return false; } } diff --git a/app/Helper/SubtaskHelper.php b/app/Helper/SubtaskHelper.php index eea1ed63..67875a63 100644 --- a/app/Helper/SubtaskHelper.php +++ b/app/Helper/SubtaskHelper.php @@ -3,6 +3,7 @@ namespace Kanboard\Helper; use Kanboard\Core\Base; +use Kanboard\Model\SubtaskModel; /** * Subtask helpers @@ -45,26 +46,30 @@ class SubtaskHelper extends Base * Get the link to toggle subtask status * * @access public - * @param array $task - * @param array $subtask + * @param array $task + * @param array $subtask + * @param string $fragment + * @param int $userId * @return string */ - public function renderToggleStatus(array $task, array $subtask) + public function renderToggleStatus(array $task, array $subtask, $fragment = '', $userId = 0) { if (! $this->helper->user->hasProjectAccess('SubtaskController', 'edit', $task['project_id'])) { $html = $this->renderTitle($subtask); } else { $title = $this->renderTitle($subtask); $params = array( - 'project_id' => $task['project_id'], - 'task_id' => $subtask['task_id'], - 'subtask_id' => $subtask['id'], + 'project_id' => $task['project_id'], + 'task_id' => $subtask['task_id'], + 'subtask_id' => $subtask['id'], + 'user_id' => $userId, + 'fragment' => $fragment, ); if ($subtask['status'] == 0 && $this->hasSubtaskInProgress()) { - $html = $this->helper->url->link($title, 'SubtaskRestrictionController', 'show', $params, false, 'js-modal-confirm'); + $html = $this->helper->url->link($title, 'SubtaskRestrictionController', 'show', $params, false, 'js-modal-confirm', $this->getSubtaskTooltip($subtask)); } else { - $html = $this->helper->url->link($title, 'SubtaskStatusController', 'change', $params, false, 'js-subtask-toggle-status'); + $html = $this->helper->url->link($title, 'SubtaskStatusController', 'change', $params, false, 'js-subtask-toggle-status', $this->getSubtaskTooltip($subtask)); } } @@ -87,6 +92,17 @@ class SubtaskHelper extends Base return $html; } + public function renderBulkTitleField(array $values, array $errors = array(), array $attributes = array()) + { + $attributes = array_merge(array('tabindex="1"', 'required'), $attributes); + + $html = $this->helper->form->label(t('Title'), 'title'); + $html .= $this->helper->form->textarea('title', $values, $errors, $attributes); + $html .= '<p class="form-help">'.t('Enter one subtask by line.').'</p>'; + + return $html; + } + public function renderTitleField(array $values, array $errors = array(), array $attributes = array()) { $attributes = array_merge(array('tabindex="1"', 'required', 'maxlength="255"'), $attributes); @@ -132,4 +148,18 @@ class SubtaskHelper extends Base return $html; } + + public function getSubtaskTooltip(array $subtask) + { + switch ($subtask['status']) { + case SubtaskModel::STATUS_TODO: + return t('Subtask not started'); + case SubtaskModel::STATUS_INPROGRESS: + return t('Subtask currently in progress'); + case SubtaskModel::STATUS_DONE: + return t('Subtask completed'); + } + + return ''; + } } diff --git a/app/Helper/TaskHelper.php b/app/Helper/TaskHelper.php index 69520c03..cc164ce0 100644 --- a/app/Helper/TaskHelper.php +++ b/app/Helper/TaskHelper.php @@ -61,6 +61,30 @@ class TaskHelper extends Base return $this->helper->form->textEditor('description', $values, $errors, array('tabindex' => 2)); } + public function renderDescriptionTemplateDropdown($projectId) + { + $templates = $this->predefinedTaskDescriptionModel->getAll($projectId); + + if (! empty($templates)) { + $html = '<div class="dropdown dropdown-smaller">'; + $html .= '<a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-floppy-o fa-fw" aria-hidden="true"></i>'.t('Template for the task description').' <i class="fa fa-caret-down" aria-hidden="true"></i></a>'; + $html .= '<ul>'; + + foreach ($templates as $template) { + $html .= '<li>'; + $html .= '<a href="#" data-template-target="textarea[name=description]" data-template="'.$this->helper->text->e($template['description']).'" class="js-template">'; + $html .= $this->helper->text->e($template['title']); + $html .= '</a>'; + $html .= '</li>'; + } + + $html .= '</ul></div>'; + return $html; + } + + return ''; + } + public function renderTagField(array $project, array $tags = array()) { $options = $this->tagModel->getAssignableList($project['id']); @@ -93,6 +117,10 @@ class TaskHelper extends Base public function renderAssigneeField(array $users, array $values, array $errors = array(), array $attributes = array()) { + if (isset($values['project_id']) && ! $this->helper->projectRole->canChangeAssignee($values)) { + return ''; + } + $attributes = array_merge(array('tabindex="3"'), $attributes); $html = $this->helper->form->label(t('Assignee'), 'owner_id'); @@ -204,7 +232,7 @@ class TaskHelper extends Base public function renderDueDateField(array $values, array $errors = array(), array $attributes = array()) { $attributes = array_merge(array('tabindex="9"'), $attributes); - return $this->helper->form->date(t('Due Date'), 'date_due', $values, $errors, $attributes); + return $this->helper->form->datetime(t('Due Date'), 'date_due', $values, $errors, $attributes); } public function renderPriority($priority) @@ -216,6 +244,21 @@ class TaskHelper extends Base return $html; } + public function renderReference(array $task) + { + if (! empty($task['reference'])) { + $reference = $this->helper->text->e($task['reference']); + + if (filter_var($task['reference'], FILTER_VALIDATE_URL) !== false) { + return sprintf('<a href="%s" target=_blank">%s</a>', $reference, $reference); + } + + return $reference; + } + + return ''; + } + public function getProgress($task) { if (! isset($this->columns[$task['project_id']])) { @@ -225,31 +268,57 @@ class TaskHelper extends Base return $this->taskModel->getProgress($task, $this->columns[$task['project_id']]); } - public function getNewTaskDropdown($projectId, $swimlaneId, $columnId) + public function getNewBoardTaskButton(array $swimlane, array $column) { - $providers = $this->externalTaskManager->getProvidersList(); + $html = '<div class="board-add-icon">'; + $providers = $this->externalTaskManager->getProviders(); if (empty($providers)) { - return ''; - } - - $html = '<small class="pull-right"><div class="dropdown">'; - $html .= '<a href="#" class="dropdown-menu"><i class="fa fa-cloud-download" aria-hidden="true"></i> <i class="fa fa-caret-down"></i></a><ul>'; - - foreach ($providers as $providerName) { - $link = $this->helper->url->link( - t('New External Task: %s', $providerName), - 'ExternalTaskCreationController', - 'step1', - array('project_id' => $projectId, 'swimlane_id' => $swimlaneId, 'column_id' => $columnId, 'provider_name' => $providerName), - false, - 'js-modal-replace' + $html .= $this->helper->modal->largeIcon( + 'plus', + t('Add a new task'), + 'TaskCreationController', + 'show', array( + 'project_id' => $column['project_id'], + 'column_id' => $column['id'], + 'swimlane_id' => $swimlane['id'], + ) ); + } else { + $html .= '<div class="dropdown">'; + $html .= '<a href="#" class="dropdown-menu"><i class="fa fa-plus" aria-hidden="true"></i></a><ul>'; + + $link = $this->helper->modal->large( + 'plus', + t('Add a new Kanboard task'), + 'TaskCreationController', + 'show', array( + 'project_id' => $column['project_id'], + 'column_id' => $column['id'], + 'swimlane_id' => $swimlane['id'], + ) + ); + + $html .= '<li>'.$link.'</li>'; + + foreach ($providers as $provider) { + $link = $this->helper->url->link( + $provider->getMenuAddLabel(), + 'ExternalTaskCreationController', + 'step1', + array('project_id' => $column['project_id'], 'swimlane_id' => $swimlane['id'], 'column_id' => $column['id'], 'provider_name' => $provider->getName()), + false, + 'js-modal-large' + ); - $html .= '<li><i class="fa fa-fw fa-plus-square" aria-hidden="true"></i> '.$link.'</li>'; + $html .= '<li>'.$provider->getIcon().' '.$link.'</li>'; + } + + $html .= '</ul></div>'; } - $html .= '</ul></div></small>'; + $html .= '</div>'; + return $html; } } diff --git a/app/Helper/TextHelper.php b/app/Helper/TextHelper.php index 89c1a8f3..698bef6d 100644 --- a/app/Helper/TextHelper.php +++ b/app/Helper/TextHelper.php @@ -90,19 +90,19 @@ class TextHelper extends Base */ public function phpToBytes($val) { - $val = trim($val); - $last = strtolower($val[strlen($val)-1]); + $size = (int) substr($val, 0, -1); + $last = strtolower(substr($val, -1)); switch ($last) { case 'g': - $val *= 1024; + $size *= 1024; case 'm': - $val *= 1024; + $size *= 1024; case 'k': - $val *= 1024; + $size *= 1024; } - return $val; + return $size; } /** diff --git a/app/Import/TaskImport.php b/app/Import/TaskImport.php index f5ca9b0e..4f89962b 100644 --- a/app/Import/TaskImport.php +++ b/app/Import/TaskImport.php @@ -4,90 +4,86 @@ namespace Kanboard\Import; use Kanboard\Core\Base; use Kanboard\Core\Csv; +use Kanboard\Core\ExternalLink\ExternalLinkManager; +use Kanboard\Core\ExternalLink\ExternalLinkProviderNotFound; use SimpleValidator\Validator; use SimpleValidator\Validators; /** - * Task Import + * Task CSV Import * - * @package import + * @package Kanboard\Import * @author Frederic Guillot */ class TaskImport extends Base { - /** - * Number of successful import - * - * @access public - * @var integer - */ - public $counter = 0; - - /** - * Project id to import tasks - * - * @access public - * @var integer - */ - public $projectId; - - /** - * Get mapping between CSV header and SQL columns - * - * @access public - * @return array - */ + protected $nbImportedTasks = 0; + protected $projectId = 0; + + public function setProjectId($projectId) + { + $this->projectId = $projectId; + return $this; + } + + public function getNumberOfImportedTasks() + { + return $this->nbImportedTasks; + } + public function getColumnMapping() { return array( - 'reference' => 'Reference', - 'title' => 'Title', - 'description' => 'Description', - 'assignee' => 'Assignee Username', - 'creator' => 'Creator Username', - 'color' => 'Color Name', - 'column' => 'Column Name', - 'category' => 'Category Name', - 'swimlane' => 'Swimlane Name', - 'score' => 'Complexity', - 'time_estimated' => 'Time Estimated', - 'time_spent' => 'Time Spent', - 'date_due' => 'Due Date', - 'is_active' => 'Closed', + 'reference' => e('Reference'), + 'title' => e('Title'), + 'description' => e('Description'), + 'assignee' => e('Assignee Username'), + 'creator' => e('Creator Username'), + 'color' => e('Color Name'), + 'column' => e('Column Name'), + 'category' => e('Category Name'), + 'swimlane' => e('Swimlane Name'), + 'score' => e('Complexity'), + 'time_estimated' => e('Time Estimated'), + 'time_spent' => e('Time Spent'), + 'date_started' => e('Start Date'), + 'date_due' => e('Due Date'), + 'priority' => e('Priority'), + 'is_active' => e('Status'), + 'tags' => e('Tags'), + 'external_link' => e('External Link'), ); } - /** - * Import a single row - * - * @access public - * @param array $row - * @param integer $line_number - */ - public function import(array $row, $line_number) + public function importTask(array $row, $lineNumber) { - $row = $this->prepare($row); + $task = $this->prepareTask($row); + + if ($this->validateCreation($task)) { + $taskId = $this->taskCreationModel->create($task); + + if ($taskId > 0) { + $this->logger->debug(__METHOD__.': imported successfully line '.$lineNumber); + $this->nbImportedTasks++; - if ($this->validateCreation($row)) { - if ($this->taskCreationModel->create($row) > 0) { - $this->logger->debug('TaskImport: imported successfully line '.$line_number); - $this->counter++; + if (! empty($row['tags'])) { + $tagsList = explode(',', $row['tags']); + array_walk($tagsList, function (&$value) { $value = trim($value); }); + $this->taskTagModel->save($this->projectId, $taskId, $tagsList); + } + + if (! empty($row['external_link'])) { + $this->createExternalLink($taskId, $row['external_link']); + } } else { - $this->logger->error('TaskImport: creation error at line '.$line_number); + $this->logger->error(__METHOD__.': creation error at line '.$lineNumber); } } else { - $this->logger->error('TaskImport: validation error at line '.$line_number); + $this->logger->error(__METHOD__.': validation error at line '.$lineNumber); } } - /** - * Format row before validation - * - * @access public - * @param array $row - * @return array - */ - public function prepare(array $row) + public function prepareTask(array $row) { $values = array(); $values['project_id'] = $this->projectId; @@ -96,6 +92,7 @@ class TaskImport extends Base $values['description'] = $row['description']; $values['is_active'] = Csv::getBooleanValue($row['is_active']) == 1 ? 0 : 1; $values['score'] = (int) $row['score']; + $values['priority'] = (int) $row['priority']; $values['time_estimated'] = (float) $row['time_estimated']; $values['time_spent'] = (float) $row['time_spent']; @@ -124,25 +121,22 @@ class TaskImport extends Base } if (! empty($row['date_due'])) { - $values['date_due'] = $this->dateParser->getTimestampFromIsoFormat($row['date_due']); + $values['date_due'] = $this->dateParser->getTimestamp($row['date_due']); + } + + if (! empty($row['date_started'])) { + $values['date_started'] = $this->dateParser->getTimestamp($row['date_started']); } $this->helper->model->removeEmptyFields( $values, - array('owner_id', 'creator_id', 'color_id', 'column_id', 'category_id', 'swimlane_id', 'date_due') + array('owner_id', 'creator_id', 'color_id', 'column_id', 'category_id', 'swimlane_id', 'date_due', 'date_started', 'priority') ); return $values; } - /** - * Validate user creation - * - * @access public - * @param array $values - * @return boolean - */ - public function validateCreation(array $values) + protected function validateCreation(array $values) { $v = new Validator($values, array( new Validators\Integer('project_id', t('This value must be an integer')), @@ -154,4 +148,34 @@ class TaskImport extends Base return $v->execute(); } + + protected function createExternalLink($taskId, $externalLink) + { + try { + $provider = $this->externalLinkManager + ->setUserInputText($externalLink) + ->setUserInputType(ExternalLinkManager::TYPE_AUTO) + ->find(); + + $link = $provider->getLink(); + $dependencies = $provider->getDependencies(); + $values = array( + 'task_id' => $taskId, + 'title' => $link->getTitle() ?: $link->getUrl(), + 'url' => $link->getUrl(), + 'link_type' => $provider->getType(), + 'dependency' => key($dependencies), + ); + + list($valid, $errors) = $this->externalLinkValidator->validateCreation($values); + + if ($valid) { + $this->taskExternalLinkModel->create($values); + } else { + $this->logger->error(__METHOD__.': '.var_export($errors, true)); + } + } catch (ExternalLinkProviderNotFound $e) { + $this->logger->error(__METHOD__.': '.$e->getMessage()); + } + } } diff --git a/app/Job/HttpAsyncJob.php b/app/Job/HttpAsyncJob.php index 9e5cf107..f2e9b3f5 100644 --- a/app/Job/HttpAsyncJob.php +++ b/app/Job/HttpAsyncJob.php @@ -34,7 +34,6 @@ class HttpAsyncJob extends BaseJob * @param string $url * @param string $content * @param array $headers - * @return $this */ public function execute($method, $url, $content, array $headers) { diff --git a/app/Job/ProjectFileEventJob.php b/app/Job/ProjectFileEventJob.php index 45e6ece3..7c0fd695 100644 --- a/app/Job/ProjectFileEventJob.php +++ b/app/Job/ProjectFileEventJob.php @@ -30,7 +30,6 @@ class ProjectFileEventJob extends BaseJob * * @param int $fileId * @param string $eventName - * @return $this */ public function execute($fileId, $eventName) { diff --git a/app/Job/SubtaskEventJob.php b/app/Job/SubtaskEventJob.php index 85c4d73e..36d268dd 100644 --- a/app/Job/SubtaskEventJob.php +++ b/app/Job/SubtaskEventJob.php @@ -32,7 +32,6 @@ class SubtaskEventJob extends BaseJob * @param int $subtaskId * @param string $eventName * @param array $values - * @return $this */ public function execute($subtaskId, $eventName, array $values = array()) { diff --git a/app/Job/TaskEventJob.php b/app/Job/TaskEventJob.php index acc7fca3..4626999c 100644 --- a/app/Job/TaskEventJob.php +++ b/app/Job/TaskEventJob.php @@ -38,7 +38,6 @@ class TaskEventJob extends BaseJob * @param array $changes * @param array $values * @param array $task - * @return $this */ public function execute($taskId, array $eventNames, array $changes = array(), array $values = array(), array $task = array()) { diff --git a/app/Job/TaskFileEventJob.php b/app/Job/TaskFileEventJob.php index 293dbf27..b9f1cd58 100644 --- a/app/Job/TaskFileEventJob.php +++ b/app/Job/TaskFileEventJob.php @@ -30,7 +30,6 @@ class TaskFileEventJob extends BaseJob * * @param int $fileId * @param string $eventName - * @return $this */ public function execute($fileId, $eventName) { diff --git a/app/Job/TaskLinkEventJob.php b/app/Job/TaskLinkEventJob.php index 31f62f07..4498bea3 100644 --- a/app/Job/TaskLinkEventJob.php +++ b/app/Job/TaskLinkEventJob.php @@ -30,7 +30,6 @@ class TaskLinkEventJob extends BaseJob * * @param int $taskLinkId * @param string $eventName - * @return $this */ public function execute($taskLinkId, $eventName) { diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php index d1314ef3..62aaea64 100644 --- a/app/Locale/bs_BA/translations.php +++ b/app/Locale/bs_BA/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Prijava', 'Users' => 'Korisnici', - 'No user' => 'Nema korisnika', 'Forbidden' => 'Zabranjeno', 'Access Forbidden' => 'Pristup zabranjen', 'Edit user' => 'Uredi korisnika', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Pod-zadatak uspješno ažuriran.', 'Unable to update your sub-task.' => 'Nemoguće ažurirati pod-zadatak.', 'Unable to create your sub-task.' => 'Nemoguće dodati pod-zadatak.', - 'Sub-task added successfully.' => 'Pod-zadatak uspješno dodan.', 'Maximum size: ' => 'Maksimalna veličina: ', 'Display another project' => 'Prikaži drugi projekat', 'Created by %s' => 'Kreirao %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Spisak aktivnosti', 'Dashboard' => 'Panel', 'Confirmation' => 'Potvrda', - 'Allow everybody to access to this project' => 'Dozvoli svima pristup ovom projektu', - 'Everybody have access to this project.' => 'Svima je dozvoljen pristup ovom projektu.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Napravi komentar preko vanjskog posrednika', 'Project management' => 'Upravljanje projektima', - 'My projects' => 'Moji projekti', 'Columns' => 'Kolone', 'Task' => 'Zadatak', - 'Your are not member of any project.' => 'Nisi član ni jednog projekta', 'Percentage' => 'Procenat', 'Number of tasks' => 'Broj zadataka', 'Task distribution' => 'Podjela zadataka', 'Analytics' => 'Analiza', 'Subtask' => 'Pod-zadatak', - 'My subtasks' => 'Moji pod-zadaci', 'User repartition' => 'Zaduženja korisnika', 'Clone this project' => 'Kloniraj ovaj projekat', 'Column removed successfully.' => 'Kolona uspješno uklonjena.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Sve kolone', - 'Calendar' => 'Kalendar', 'Next' => 'Slijedeći', '#%d' => '#%d', 'All swimlanes' => 'Sve swimlane trake', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Nemoguće dodati stopu valute.', 'Webhook URL' => 'Webhook URL', '%s removed the assignee of the task %s' => '%s je uklonio izvršioca zadatka %s', - 'Enable Gravatar images' => 'Omogući Gravatar slike', 'Information' => 'Informacije', 'Check two factor authentication code' => 'Provjera "Dva faktora" autentifikacionog koda', 'The two factor authentication code is not valid.' => '"Dva faktora" autentifikacionog koda nije validan.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Kada je zadatak premješten iz prve kolone', 'When task is moved to last column' => 'Kada je zadatak premješten u posljednju kolonu', 'Year(s)' => 'Godina/e', - 'Calendar settings' => 'Postavke kalendara', - 'Project calendar view' => 'Pregled kalendara projekta', 'Project settings' => 'Postavke projekta', - 'Show subtasks based on the time tracking' => 'Prikaži pod-zadatke bazirano na vremenskom praćenju', - 'Show tasks based on the creation date' => 'Prikaži zadatke bazirano na vremenu otvaranja', - 'Show tasks based on the start date' => 'Prikaži zadatke bazirano na vremenu početka rada', - 'Subtasks time tracking' => 'Vremensko praćenje pod-zadataka', - 'User calendar view' => 'Pregled korisničkog kalendara', 'Automatically update the start date' => 'Automatski ažuriraj početni datum', 'iCal feed' => 'iCal kanal', 'Preferences' => 'Postavke', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Obavještenja', '%s moved the task #%d to the first swimlane' => '%s je premjestio zadatak #%d u prvu swimlane traku', 'Swimlane' => 'Swimlane traka', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s je premjestio zadatak %s u prvi swimlane traku', '%s moved the task %s to the swimlane "%s"' => '%s je premjestio zadatak %s u swimlane traku "%s"', 'This report contains all subtasks information for the given date range.' => 'Ovaj izvještaj sadržava sve informacije o pod-zadacima za dati period', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Zaustavi tajmer', 'Start timer' => 'Pokreni tajmer', 'My activity stream' => 'Tok mojih aktivnosti', - 'My calendar' => 'Moj kalendar', 'Search tasks' => 'Pretraga zadataka', 'Reset filters' => 'Vrati filtere na početno', 'My tasks due tomorrow' => 'Moji zadaci koje treba završiti sutra', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Opšti pregled', 'Board/Calendar/List view' => 'Pregled Ploče/Kalendara/Liste', 'Switch to the board view' => 'Promijeni da vidim ploču', - 'Switch to the calendar view' => 'Promijeni da vidim kalendar', 'Switch to the list view' => 'Promijeni da vidim listu', 'Go to the search/filter box' => 'Idi na kutiju s pretragom/filterima', 'There is no activity yet.' => 'Još uvijek nema aktivnosti.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Licenca:', 'License' => 'Licenca', 'Enter the text below' => 'Unesi tekst ispod', - 'Sort by position' => 'Sortiraj po poziciji', - 'Sort by date' => 'Sortiraj po datumu', - 'Add task' => 'Dodaj zadatak', 'Start date:' => 'Početno vrijeme:', 'Due date:' => 'Vrijeme do kada treba završiti:', - 'There is no start date or due date for this task.' => 'Nema početnog datuma ili datuma do kada treba završiti ovaj zadatak.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Premještanje ili promjena veličine zadatka će promijeniti datum početka i datum do kada treba završiti zadatak.', - 'There is no task in your project.' => 'Nema zadataka u projektu.', - 'Gantt chart' => 'Gantogram', 'People who are project managers' => 'Osobe koji su menadžeri projekta', 'People who are project members' => 'Osobe koje su članovi projekta', 'NOK - Norwegian Krone' => 'NOK - Norveška kruna', @@ -763,22 +737,15 @@ return array( 'Members' => 'Članovi', 'Shared project' => 'Dijeljeni projekti', 'Project managers' => 'Menadžeri projekta', - 'Gantt chart for all projects' => 'Gantogram za sve projekte', 'Projects list' => 'Lista projekata', - 'Gantt chart for this project' => 'Gantogram za ovaj projekat', - 'Project board' => 'Ploča projekta', 'End date:' => 'Datum završetka:', - 'There is no start date or end date for this project.' => 'Nema početnog ili krajnjeg datuma za ovaj projekat.', - 'Projects Gantt chart' => 'Gantogram projekata', 'Change task color when using a specific task link' => 'Promijeni boju zadatka kada se koristi određena veza na zadatku', 'Task link creation or modification' => 'Veza na zadatku je napravljena ili izmijenjena', 'Milestone' => 'Prekretnica', 'Documentation: %s' => 'Dokumentacija: %s', - 'Switch to the Gantt chart view' => 'Promijeni u gantogram pregled', 'Reset the search/filter box' => 'Vrati na početno pretragu/filtere', 'Documentation' => 'Dokumentacija', 'Table of contents' => 'Sadržaj', - 'Gantt' => 'Gantogram', 'Author' => 'Autor', 'Version' => 'Verzija', 'Plugins' => 'Dodaci', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Trenutno nema dostupnih korisnika.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Da li zaista želiš ukloniti korisnika "%s" iz grupe "%s"?', 'There is no group.' => 'Trenutno nema grupa.', - 'External Id' => 'Vanjski Id', 'Add group member' => 'Dodaj člana grupe', 'Do you really want to remove this group: "%s"?' => 'Da li zaista želiš ukloniti ovu grupu: "%s"?', 'There is no user in this group.' => 'Trenutno nema korisnika u grupi.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Podrazumijevani prioritet', 'Lowest priority' => 'Najmanji prioritet', 'Highest priority' => 'Najveći prioritet', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Ako upišeš nulu za najmanji i najveći prioritet, ova opcija će biti onemogućena.', 'Close a task when there is no activity' => 'Zatvori zadatak kada nema aktivnosti', 'Duration in days' => 'Dužina trajanja u danima', 'Send email when there is no activity on a task' => 'Pošalji email kada nema aktivnosti na zadatku', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Pregled pod-zadataka za %s', 'Projects overview for %s' => 'Pregled projekata za %s', 'Activity stream for %s' => 'Tok aktivnosti za %s', - 'Calendar for %s' => 'Kalendar za %s', - 'Notifications for %s' => 'Obavijesti za %s', 'Assign a color when the task is moved to a specific swimlane' => 'Dodijeli boju kada je zadatak pomjeren u određenu swimlane traku', 'Assign a priority when the task is moved to a specific swimlane' => 'Dodijeli prioritet kada je zadatak pomjeren u određenu swimlane traku', 'User unlocked successfully.' => 'Korisnik je uspješno otključan.', @@ -1241,7 +1204,6 @@ return array( 'Preview' => 'Pregled', 'Write' => 'Piši', 'Write your text in Markdown' => 'Upiši tekst u Markdown', - 'New External Task: %s' => 'Novi vanjski zadatak: %s', 'No personal API access token registered.' => 'Nema registrovanog ličnog pristupnog API tokena', 'Your personal API access token is "%s"' => 'Tvoj lični pristupni API token je: "%s"', 'Remove your token' => 'Ukloni svoj token', @@ -1316,7 +1278,6 @@ return array( 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Možeš priložiti prethodno preuzetu Sqlite bazu podataka (Gzip format).', 'Database file' => 'Datoteka baze podataka', 'Upload' => 'Priloži', - 'Remove this user from group' => 'Ukloni ovog korisnika iz grupe', 'Your project must have at least one active swimlane.' => 'Projekat mora imati barem jednu aktivnu swimlane traku.', 'Project: %s' => 'Projekat: %s', 'Automatic action not found: "%s"' => 'Automatska akcija nije pronađena: "%s"', @@ -1334,4 +1295,75 @@ return array( 'Assign automatically a color when due date is expired' => 'Automatski dodaj boju kada je krajnje vrijeme izvršenja isteklo', 'Total score in this column across all swimlanes' => 'Ukupni rezultat u ovoj koloni za sve swimlane trake', 'HRK - Kuna' => 'HRK - Hrvatska Kuna', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/ca_ES/translations.php b/app/Locale/ca_ES/translations.php new file mode 100644 index 00000000..1240d560 --- /dev/null +++ b/app/Locale/ca_ES/translations.php @@ -0,0 +1,1369 @@ +<?php + +return array( + 'number.decimals_separator' => ',', + 'number.thousands_separator' => ' ', + 'None' => 'Cap', + 'Edit' => 'Edita', + 'Remove' => 'Elimina', + 'Yes' => 'Si', + 'No' => 'No', + 'cancel' => 'cancel·la', + 'or' => 'o', + 'Yellow' => 'Groc', + 'Blue' => 'Blau', + 'Green' => 'Verd', + 'Purple' => 'Lil·la', + 'Red' => 'Vermell', + 'Orange' => 'Taronja', + 'Grey' => 'Gris', + 'Brown' => 'Marró', + 'Deep Orange' => 'Taronja fosc', + 'Dark Grey' => 'Gris fosc', + 'Pink' => 'Rosa', + 'Teal' => 'Turquessa', + 'Cyan' => 'Cian', + 'Lime' => 'Lima', + 'Light Green' => 'Verd clar', + 'Amber' => 'Ambre', + 'Save' => 'Desa', + 'Login' => 'Inicia la sessió', + 'Official website:' => 'Pàgina web oficial:', + 'Unassigned' => 'Sense assignar', + 'View this task' => 'Veure aquesta tasca', + 'Remove user' => 'Eliminar usuari', + 'Do you really want to remove this user: "%s"?' => 'Vols eliminar aquest usuari: "%s"?', + 'All users' => 'Tots els usuaris', + 'Username' => 'Nom d\'usuari', + 'Password' => 'Contrasenya', + 'Administrator' => 'Administrador', + 'Sign in' => 'Accedeix', + 'Users' => 'Usuaris', + 'Forbidden' => 'Prohibit', + 'Access Forbidden' => 'Accés prohibit', + 'Edit user' => 'Edita usuaris', + 'Logout' => 'Tanca sessió', + 'Bad username or password' => 'Usuari o contrasenya no existeix', + 'Edit project' => 'Edita el projecte', + 'Name' => 'Nom', + 'Projects' => 'Projectes', + 'No project' => 'Cap projecte', + 'Project' => 'Projecte', + 'Status' => 'Estat', + 'Tasks' => 'Tasques', + 'Board' => 'Tauler', + 'Actions' => 'Accions', + 'Inactive' => 'Inactiu', + 'Active' => 'Actiu', + 'Unable to update this board.' => 'No es pot actualitzar aquest tauler.', + 'Disable' => 'Desactivar', + 'Enable' => 'Habilita', + 'New project' => 'Nou projecte', + 'Do you really want to remove this project: "%s"?' => 'Vols eliminar aquest projecte: "%s"?', + 'Remove project' => 'Elimina projecte', + 'Edit the board for "%s"' => 'Edita el tauler de "%s"', + 'Add a new column' => 'Afegeix una nova columna', + 'Title' => 'Títol', + 'Assigned to %s' => 'Assignat a %s', + 'Remove a column' => 'Eliminar una columna', + 'Unable to remove this column.' => 'No es pot eliminar aquesta columna.', + 'Do you really want to remove this column: "%s"?' => 'Vols eliminar aquesta columna: "%s"?', + 'Settings' => 'Configuració', + 'Application settings' => 'Configuració de l\'aplicació', + 'Language' => 'Idioma', + 'Webhook token:' => 'Web hook token:', + 'API token:' => 'Token de l\'API:', + 'Database size:' => 'Mida de la base de dades:', + 'Download the database' => 'Descarregar la base de dades', + 'Optimize the database' => 'Optimitzar la base de dades', + '(VACUUM command)' => '(Comanda VACUUM)', + '(Gzip compressed Sqlite file)' => '(Arxiu comprimit gzip SQLite)', + 'Close a task' => 'Tancar una tasca', + 'Column' => 'Columna', + 'Color' => 'Color', + 'Assignee' => 'Assignat a', + 'Create another task' => 'Crear una altra tasca', + 'New task' => 'Nova tasca', + 'Open a task' => 'Obrir una tasca', + 'Do you really want to open this task: "%s"?' => 'Vols obrir aquesta tasca: "%s"?', + 'Back to the board' => 'Torna al tauler', + 'There is nobody assigned' => 'No hi ha ningú assignat', + 'Column on the board:' => 'Columna al tauler:', + 'Close this task' => 'Tanca aquesta tasca', + 'Open this task' => 'Obre aquesta tasca', + 'There is no description.' => 'No hi ha cap descripció.', + 'Add a new task' => 'Afegeix una nova tasca', + 'The username is required' => 'Es requereix el nom d\'usuari', + 'The maximum length is %d characters' => 'La longitud màxima és de %d caràcters', + 'The minimum length is %d characters' => 'La longitud mínima és %d caràcters', + 'The password is required' => 'La contrasenya és necessària', + 'This value must be an integer' => 'Aquest valor ha de ser un nombre enter', + 'The username must be unique' => 'El nom d\'usuari ha de ser únic', + 'The user id is required' => 'Es requereix que l\'ID d\'usuari', + 'Passwords don\'t match' => 'Les contrasenyes no coincideixen', + 'The confirmation is required' => 'Es requereix la confirmació', + 'The project is required' => 'Es requereix el projecte', + 'The id is required' => 'Es requereix que l\'ID', + 'The project id is required' => 'Es requereix que l\'identificador del projecte', + 'The project name is required' => 'Es requereix el nom del projecte', + 'The title is required' => 'Es requereix el títol', + 'Settings saved successfully.' => 'La configuració es va guardar amb èxit.', + 'Unable to save your settings.' => 'No es pot desar la configuració.', + 'Database optimization done.' => 'Optimització de bases de dades realitza.', + 'Your project have been created successfully.' => 'El seu projecte s\'han creat amb èxit.', + 'Unable to create your project.' => 'No es pot crear el projecte.', + 'Project updated successfully.' => 'Projecte actualitzat correctament.', + 'Unable to update this project.' => 'No es pot actualitzar aquest projecte.', + 'Unable to remove this project.' => 'No es pot eliminar aquest projecte.', + 'Project removed successfully.' => 'Projecte eliminat correctament.', + 'Project activated successfully.' => 'Projecte activat correctament.', + 'Unable to activate this project.' => 'No es pot activar aquest projecte.', + 'Project disabled successfully.' => 'Projecte deshabilitat amb èxit.', + 'Unable to disable this project.' => 'No és possible desactivar aquest projecte.', + 'Unable to open this task.' => 'No es pot obrir aquesta tasca.', + 'Task opened successfully.' => 'Tasca oberta amb èxit.', + 'Unable to close this task.' => 'No es pot tancar aquesta tasca.', + 'Task closed successfully.' => 'Tasca tancada amb èxit.', + 'Unable to update your task.' => 'No es pot actualitzar la seva tasca.', + 'Task updated successfully.' => 'Tasca actualitzada correctament.', + 'Unable to create your task.' => 'No es pot crear la tasca.', + 'Task created successfully.' => 'Tasca creada correctament.', + 'User created successfully.' => 'L\'usuari ha creat correctament.', + 'Unable to create your user.' => 'No es pot crear l\'usuari.', + 'User updated successfully.' => 'Usuari actualitzat correctament.', + 'User removed successfully.' => 'Usuari eliminat correctament.', + 'Unable to remove this user.' => 'No es pot eliminar aquest usuari.', + 'Board updated successfully.' => 'Tauler actualitzat correctament.', + 'Ready' => 'Preparat', + 'Backlog' => 'Pendent', + 'Work in progress' => 'En curs', + 'Done' => 'Fet', + 'Application version:' => 'Versió de l\'aplicació:', + 'Id' => 'Identificació', + 'Public link' => 'Enllaç públic', + 'Timezone' => 'Zona horària', + 'Sorry, I didn\'t find this information in my database!' => 'No s\'ha trobat la informació a la base de dades!', + 'Page not found' => 'Pàgina no trobada', + 'Complexity' => 'Dificultat', + 'Task limit' => 'Límit de tasques', + 'Task count' => 'Recompte de tasques', + 'User' => 'Usuari', + 'Comments' => 'Comentaris', + 'Comment is required' => 'Es requereix comentari', + 'Comment added successfully.' => 'Comentari afegit amb èxit.', + 'Unable to create your comment.' => 'No es pot crear el seu comentari.', + 'Due Date' => 'Data de venciment', + 'Invalid date' => 'Data no vàlida', + 'Automatic actions' => 'Accions automàtiques', + 'Your automatic action have been created successfully.' => 'La seva acció automàtica s\'han creat amb èxit.', + 'Unable to create your automatic action.' => 'No es pot crear la seva acció automàtica.', + 'Remove an action' => 'Eliminar una acció', + 'Unable to remove this action.' => 'No es pot eliminar aquesta acció.', + 'Action removed successfully.' => 'Acció eliminat correctament.', + 'Automatic actions for the project "%s"' => 'Accions automàtiques per al projecte "%s"', + 'Add an action' => 'Afegeix una acció', + 'Event name' => 'Nom de l\'esdeveniment', + 'Action' => 'Acció', + 'Event' => 'Esdeveniment', + 'When the selected event occurs execute the corresponding action.' => 'Quan es produeix l\'esdeveniment seleccionat executar l\'acció corresponent.', + 'Next step' => 'Següent pas', + 'Define action parameters' => 'Definir paràmetres d\'acció', + 'Do you really want to remove this action: "%s"?' => 'Vols eliminar aquesta acció: "%s"?', + 'Remove an automatic action' => 'Eliminar una acció automàtica', + 'Assign the task to a specific user' => 'Assignar la tasca a un usuari específic', + 'Assign the task to the person who does the action' => 'Assignar la tasca a la persona que fa l\'acció', + 'Duplicate the task to another project' => 'Duplica la tasca a un altre projecte', + 'Move a task to another column' => 'Mou una tasca a una altra columna', + 'Task modification' => 'Modificació de tasques', + 'Task creation' => 'Creació de tasques', + 'Closing a task' => 'El tancament d\'una tasca', + 'Assign a color to a specific user' => 'Assignar un color a un usuari específic', + 'Position' => 'Posició', + 'Duplicate to another project' => 'Duplica a un altre projecte', + 'Duplicate' => 'Duplica', + 'Link' => 'Enllaç', + 'Comment updated successfully.' => 'Comentari actualitzat correctament.', + 'Unable to update your comment.' => 'No es pot actualitzar el seu comentari.', + 'Remove a comment' => 'Retirar un comentari', + 'Comment removed successfully.' => 'Comentari eliminat correctament.', + 'Unable to remove this comment.' => 'No es pot eliminar aquest comentari.', + 'Do you really want to remove this comment?' => 'Vols eliminar aquest comentari?', + 'Current password for the user "%s"' => 'Contrasenya actual per a l\'usuari "%s"', + 'The current password is required' => 'Es requereix la contrasenya actual', + 'Wrong password' => 'Contrasenya incorrecta', + 'Unknown' => 'Desconegut', + 'Last logins' => 'Últims inicis de sessió', + 'Login date' => 'Data d\'inici de sessió', + 'Authentication method' => 'Mètode d\'autenticació', + 'IP address' => 'Adreça IP', + 'User agent' => 'Agent d\'usuari', + 'Persistent connections' => 'Les connexions persistents', + 'No session.' => 'Cap sessió.', + 'Expiration date' => 'Data de caducitat', + 'Remember Me' => 'Recorda\'m', + 'Creation date' => 'Data de creació', + 'Everybody' => 'Tothom', + 'Open' => 'Obert', + 'Closed' => 'Tancat', + 'Search' => 'Cerca', + 'Nothing found.' => 'No s\'ha trobat res.', + 'Due date' => 'Data de venciment', + 'Description' => 'Descripció', + '%d comments' => '%d comentaris', + '%d comment' => '%d comentari', + 'Email address invalid' => 'Adreça de correu electrònic no vàlida', + 'Your external account is not linked anymore to your profile.' => 'El seu compte extern no està vinculada més al seu perfil.', + 'Unable to unlink your external account.' => 'No és possible desvincular el compte extern.', + 'External authentication failed' => 'L\'autenticació externa va fallar', + 'Your external account is linked to your profile successfully.' => 'El seu compte extern està vinculada al seu perfil correctament.', + 'Email' => 'E-mail', + 'Task removed successfully.' => 'Tasca eliminat correctament.', + 'Unable to remove this task.' => 'No es pot eliminar aquesta tasca.', + 'Remove a task' => 'Treure una tasca', + 'Do you really want to remove this task: "%s"?' => 'Vols eliminar aquesta tasca: "%s"?', + 'Assign automatically a color based on a category' => 'Assignar automàticament un color basat en una categoria', + 'Assign automatically a category based on a color' => 'Assignar automàticament una categoria basada en un color', + 'Task creation or modification' => 'Creació o modificació de tasques', + 'Category' => 'Categoria', + 'Category:' => 'Categoria:', + 'Categories' => 'Categories', + 'Your category have been created successfully.' => 'La seva categoria s\'han creat amb èxit.', + 'This category has been updated successfully.' => 'Aquesta categoria s\'ha actualitzat correctament.', + 'Unable to update this category.' => 'No es pot actualitzar aquesta categoria.', + 'Remove a category' => 'Eliminar una categoria', + 'Category removed successfully.' => 'Categoria eliminat correctament.', + 'Unable to remove this category.' => 'No es pot eliminar aquesta categoria.', + 'Category modification for the project "%s"' => 'Modificació de la categoria pel projecte "%s"', + 'Category Name' => 'Nom de categoria', + 'Add a new category' => 'Afegeix una nova categoria', + 'Do you really want to remove this category: "%s"?' => 'Vols eliminar aquesta categoria: "%s"?', + 'All categories' => 'Totes les categories', + 'No category' => 'sense categoria', + 'The name is required' => 'Es requereix el nom', + 'Remove a file' => 'Suprimir un fitxer', + 'Unable to remove this file.' => 'No es pot eliminar aquest arxiu.', + 'File removed successfully.' => 'Arxiu eliminat amb èxit.', + 'Attach a document' => 'Adjunta un document', + 'Do you really want to remove this file: "%s"?' => 'Vols eliminar aquesta imatge: "%s"?', + 'Attachments' => 'Adjunts', + 'Edit the task' => 'Edita la tasca', + 'Add a comment' => 'Afegeix un comentari', + 'Edit a comment' => 'Edita un comentari', + 'Summary' => 'Resum', + 'Time tracking' => 'Control d\'hores', + 'Estimate:' => 'Estimació:', + 'Spent:' => 'Utilitzat:', + 'Do you really want to remove this sub-task?' => 'Realment voleu eliminar aquesta sub-tasca?', + 'Remaining:' => 'Restant:', + 'hours' => 'hores', + 'spent' => 'gastat', + 'estimated' => 'estimat', + 'Sub-Tasks' => 'Subtasques', + 'Add a sub-task' => 'Afegeix una subtasca', + 'Original estimate' => 'Estimació original', + 'Create another sub-task' => 'Crear una altra subtasca', + 'Time spent' => 'El temps dedicat', + 'Edit a sub-task' => 'Editar una subtasca', + 'Remove a sub-task' => 'Suprimir una subtasca', + 'The time must be a numeric value' => 'El temps ha de ser un valor numèric', + 'Todo' => 'Fer', + 'In progress' => 'En progrés', + 'Sub-task removed successfully.' => 'Subtasca eliminat correctament.', + 'Unable to remove this sub-task.' => 'No es pot eliminar aquesta sub-tasques.', + 'Sub-task updated successfully.' => 'Subtasca actualitzat correctament.', + 'Unable to update your sub-task.' => 'No es pot actualitzar el seu sub-tasques.', + 'Unable to create your sub-task.' => 'No es pot crear el sub-tasques.', + 'Maximum size: ' => 'Mida màxima: ', + 'Display another project' => 'Mostra un altre projecte', + 'Created by %s' => 'Creat per %s', + 'Tasks Export' => 'Exportació de tasques', + 'Start Date' => 'Data d\'inici', + 'Execute' => 'Executar', + 'Task Id' => 'ID de tasca', + 'Creator' => 'Creador', + 'Modification date' => 'Data de modificació', + 'Completion date' => 'Data de finalització', + 'Clone' => 'Clon', + 'Project cloned successfully.' => 'Projecte clonat amb èxit.', + 'Unable to clone this project.' => 'No és possible clonar aquest projecte.', + 'Enable email notifications' => 'Activa notificacions per correu electrònic', + 'Task position:' => 'Posició de la tasca:', + 'The task #%d have been opened.' => 'La tasca #%d s\'ha obert.', + 'The task #%d have been closed.' => 'La tasca #%d s\'ha tancat.', + 'Sub-task updated' => 'Subtasca actualitza', + 'Title:' => 'Títol:', + 'Status:' => 'Estat:', + 'Assignee:' => 'Assignat a:', + 'Time tracking:' => 'Control d\'hores:', + 'New sub-task' => 'Nova subtasca', + 'New attachment added "%s"' => 'Nou adjunt afegit "%s"', + 'New comment posted by %s' => 'Nou comentari Publicat per %s', + 'New comment' => 'Nou comentari', + 'Comment updated' => 'Comentari actualitzat', + 'New subtask' => 'Nova subtasca', + 'I want to receive notifications only for those projects:' => 'Vull rebre notificacions només per a aquells projectes:', + 'view the task on Kanboard' => 'Veure la tasca en Kanboard', + 'Public access' => 'Accés públic', + 'Disable public access' => 'Deshabilitar l\'accés del públic', + 'Enable public access' => 'Permetre l\'accés del públic', + 'Public access disabled' => 'L\'accés públic deshabilitat', + 'Move the task to another project' => 'Mou la tasca a un altre projecte', + 'Move to another project' => 'Mou a un altre projecte', + 'Do you really want to duplicate this task?' => 'És el que realment desitja duplicar aquesta tasca?', + 'Duplicate a task' => 'Duplica una tasca', + 'External accounts' => 'Els comptes externes', + 'Account type' => 'Tipus de compte', + 'Local' => 'Local', + 'Remote' => 'Remot', + 'Enabled' => 'Habilitat', + 'Disabled' => 'Inhabilitat', + 'Login:' => 'Iniciar Sessió:', + 'Full Name:' => 'Nom complet:', + 'Email:' => 'E-mail:', + 'Notifications:' => 'Notificacions:', + 'Notifications' => 'Notificacions', + 'Account type:' => 'Tipus de compte:', + 'Edit profile' => 'Editar el perfil', + 'Change password' => 'Canvia la contrasenya', + 'Password modification' => 'Modificació de la contrasenya', + 'External authentications' => 'Autenticacions externes', + 'Never connected.' => 'Mai connectada.', + 'No external authentication enabled.' => 'No s\'habilita l\'autenticació externa.', + 'Password modified successfully.' => 'Contrasenya modificat correctament.', + 'Unable to change the password.' => 'No es pot canviar la contrasenya.', + 'Change category' => 'Canvia la categoria', + '%s updated the task %s' => '%s ha actualitzat la tasca %s', + '%s opened the task %s' => '%s ha obert la tasca %s', + '%s moved the task %s to the position #%d in the column "%s"' => '%s ha mogut la tasca %s a la posició #%d de la columna "%s"', + '%s moved the task %s to the column "%s"' => '%s ha mogut la tasca %s a la columna "%s"', + '%s created the task %s' => '%s creat la tasca %s', + '%s closed the task %s' => '%s tancada la tasca %s', + '%s created a subtask for the task %s' => '%s creat una subtasca de la tasca %s', + '%s updated a subtask for the task %s' => '%s actualitzada una subtasca de la tasca %s', + 'Assigned to %s with an estimate of %s/%sh' => 'Assignat a %s amb un temps estimat de %s/%sh', + 'Not assigned, estimate of %sh' => 'No assignat, estimat de %sh', + '%s updated a comment on the task %s' => '%s ha actualitzat un comentari a la tasca %s', + '%s commented the task %s' => '%s ha comentat la tasca %s', + '%s\'s activity' => 'L\'activitat de %s', + 'RSS feed' => 'RSS feed', + '%s updated a comment on the task #%d' => '%s s\'actualitzen un comentari a la tasca #%d', + '%s commented on the task #%d' => '%s comentat a la tasca #%d', + '%s updated a subtask for the task #%d' => '%s s\'actualitzen un subtasca de la tasca #%d', + '%s created a subtask for the task #%d' => '%s creat una subtasca de la tasca #%d', + '%s updated the task #%d' => '%s actualitzada la tasca #%d', + '%s created the task #%d' => '%s creat la tasca #%d', + '%s closed the task #%d' => '%s van tancar la tasca #%d', + '%s opened the task #%d' => '%s va obrir la tasca #%d', + 'Activity' => 'Activitat', + 'Default values are "%s"' => 'Els valors per defecte son "%s"', + 'Default columns for new projects (Comma-separated)' => 'Columnes predeterminades per a nous projectes (separats per comes)', + 'Task assignee change' => 'Tasca de canvi del assignat', + '%s changed the assignee of the task #%d to %s' => '%s va canviar el assignat de la tasca #%d de %s', + '%s changed the assignee of the task %s to %s' => '%s va canviar el assignat de la tasca %s %s', + 'New password for the user "%s"' => 'Nova contrasenya per a l\'usuari "%s"', + 'Choose an event' => 'Tria un esdeveniment', + 'Create a task from an external provider' => 'Crear una tasca d\'un proveïdor extern', + 'Change the assignee based on an external username' => 'Canviar el assignat basat en un nom d\'usuari extern', + 'Change the category based on an external label' => 'Canviar la categoria en funció d\'una etiqueta externa', + 'Reference' => 'Referència', + 'Label' => 'Etiqueta', + 'Database' => 'Base de dades', + 'About' => 'Quant a', + 'Database driver:' => 'Controlador de base de dades:', + 'Board settings' => 'Paràmetres del tauler', + 'Webhook settings' => 'Configuració web hook', + 'Reset token' => 'Reinicia el token', + 'API endpoint:' => 'API de punt final:', + 'Refresh interval for private board' => 'Interval d\'actualització per al tauler privada', + 'Refresh interval for public board' => 'Interval d\'actualització per al tauler pública', + 'Task highlight period' => 'Període culminant de tasques', + 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Període (en segons) per considerar una tasca es va modificar recentment (0 per desactivar, 2 dies de defecte)', + 'Frequency in second (60 seconds by default)' => 'Freqüència en segons (60 segons per defecte)', + 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Freqüència en segons (0 per desactivar aquesta característica, 10 segons per defecte)', + 'Application URL' => 'URL de l\'aplicació', + 'Token regenerated.' => 'Token regenerat.', + 'Date format' => 'Format de dates', + 'ISO format is always accepted, example: "%s" and "%s"' => 'Sempre s\'accepta el format ISO, exemple "%s" i "%s"', + 'New private project' => 'Nou projecte privat', + 'This project is private' => 'Aquest projecte és privat', + 'Add' => 'Afegeix', + 'Start date' => 'Data d\'inici', + 'Time estimated' => 'Temps estimat', + 'There is nothing assigned to you.' => 'No tens res assignat.', + 'My tasks' => 'Les meves tasques', + 'Activity stream' => 'Fluxe d\'activitat', + 'Dashboard' => 'Panell', + 'Confirmation' => 'Confirmació', + 'Webhooks' => 'WebHooks', + 'API' => 'API', + 'Create a comment from an external provider' => 'Crear un comentari d\'un proveïdor extern', + 'Project management' => 'Gestió de projectes', + 'Columns' => 'Columnes', + 'Task' => 'Tasca', + 'Percentage' => 'Percentatge', + 'Number of tasks' => 'Nombre de tasques', + 'Task distribution' => 'Distribució de tasques', + 'Analytics' => 'Analítica', + 'Subtask' => 'Subtasca', + 'User repartition' => 'Repartiment d\'usuari', + 'Clone this project' => 'Clonar aquest projecte', + 'Column removed successfully.' => 'Columna eliminat correctament.', + 'Not enough data to show the graph.' => 'No hi ha dades suficients per mostrar el gràfic.', + 'Previous' => 'Anterior', + 'The id must be an integer' => 'L\'identificador ha de ser un nombre enter', + 'The project id must be an integer' => 'L\'identificador de projecte ha de ser un enter', + 'The status must be an integer' => 'L\'estat ha de ser un enter', + 'The subtask id is required' => 'Es requereix que l\'ID subtasca', + 'The subtask id must be an integer' => 'L\'identificador de subtasca ha de ser un enter', + 'The task id is required' => 'Es requereix que l\'ID de tasca', + 'The task id must be an integer' => 'L\'identificador de tasca ha de ser un enter', + 'The user id must be an integer' => 'L\'identificador d\'usuari ha de ser un nombre enter', + 'This value is required' => 'Aquest valor és necessari', + 'This value must be numeric' => 'Aquest valor ha de ser numèric', + 'Unable to create this task.' => 'No es pot crear aquesta tasca.', + 'Cumulative flow diagram' => 'Diagrama de flux acumulat', + 'Daily project summary' => 'Resum diari projecte', + 'Daily project summary export' => 'Exportació del resum diari del projecte', + 'Exports' => 'Exportacions', + 'This export contains the number of tasks per column grouped per day.' => 'Aquesta exportació conté el nombre de tasques per columna agrupada per dia.', + 'Active swimlanes' => 'Swimlanes actius', + 'Add a new swimlane' => 'Afegeix un nou swimlane', + 'Default swimlane' => 'Swimlane per defecte', + 'Do you really want to remove this swimlane: "%s"?' => 'Segur que vols eliminar la swimlane: "%s"', + 'Inactive swimlanes' => 'Swimlanes inactius', + 'Remove a swimlane' => 'Traieu un carril', + 'Swimlane modification for the project "%s"' => 'Modificació del swimlane pel projecte "%s"', + 'Swimlane removed successfully.' => 'Swimlane eliminat correctament.', + 'Swimlanes' => 'Swimlanes', + 'Swimlane updated successfully.' => 'Swimlane actualitzat correctament.', + 'Unable to remove this swimlane.' => 'No es pot eliminar aquest swimlane.', + 'Unable to update this swimlane.' => 'No es pot actualitzar aquest swimlane.', + 'Your swimlane have been created successfully.' => 'La seva swimlane s\'han creat amb èxit.', + 'Example: "Bug, Feature Request, Improvement"' => 'Exemple: "Bug, Comanda de funcions, Millora"', + 'Default categories for new projects (Comma-separated)' => 'Categories per defecte per a nous projectes (separats per comes)', + 'Integrations' => 'Integracions', + 'Integration with third-party services' => 'Integració amb els serveis de tercers', + 'Subtask Id' => 'ID de subtasca', + 'Subtasks' => 'Subtasques', + 'Subtasks Export' => 'Exportació de subtasques', + 'Task Title' => 'Títol de la tasca', + 'Untitled' => 'Sense títol', + 'Application default' => 'Per defecte de l\'aplicació', + 'Language:' => 'Llengua:', + 'Timezone:' => 'Zona horària:', + 'All columns' => 'Totes les columnes', + 'Next' => 'Pròxim', + '#%d' => '#%d', + 'All swimlanes' => 'Tots swimlanes', + 'All colors' => 'Tots els colors', + 'Moved to column %s' => 'Traslladat a la columna %s', + 'User dashboard' => 'Tauler d\'usuari', + 'Allow only one subtask in progress at the same time for a user' => 'Permetre només una subtasca en curs al mateix temps per a un usuari', + 'Edit column "%s"' => 'Modifica la columna "%s"', + 'Select the new status of the subtask: "%s"' => 'Sel·lecciona el nou estat per la subtasca: "%s"', + 'Subtask timesheet' => 'Part d\'hores de subtasca', + 'There is nothing to show.' => 'Res per mostrar.', + 'Time Tracking' => 'Control d\'hores', + 'You already have one subtask in progress' => 'Ja tens una subtasca en curs', + 'Which parts of the project do you want to duplicate?' => 'Quines parts del projecte vols duplicar?', + 'Disallow login form' => 'No permetre formulari d\'accés', + 'Start' => 'Començar', + 'End' => 'Final', + 'Task age in days' => 'L\'edat de tasques en dies', + 'Days in this column' => 'Dies en aquesta columna', + '%dd' => '%dd', + 'Add a new link' => 'Afegeix un nou enllaç', + 'Do you really want to remove this link: "%s"?' => 'Segur que vols eliminar aquest enllaç: "%s"?', + 'Do you really want to remove this link with task #%d?' => 'Segur que vols eliminar aquest enllaç amb la tasca #%d?', + 'Field required' => 'Camp requerit', + 'Link added successfully.' => 'Enllaç afegit correctament.', + 'Link updated successfully.' => 'Enllaç actualitzat correctament.', + 'Link removed successfully.' => 'Enllaç eliminat amb èxit.', + 'Link labels' => 'Etiquetes d\'enllaç', + 'Link modification' => 'Modificació d\'enllaç', + 'Links' => 'Enllaços', + 'Opposite label' => 'Etiqueta oposada', + 'Remove a link' => 'Suprimir un enllaç', + 'The labels must be different' => 'Les etiquetes han de ser diferents', + 'There is no link.' => 'No hi ha cap relació.', + 'This label must be unique' => 'Aquest avís ha de ser únic', + 'Unable to create your link.' => 'No es pot crear l\'enllaç.', + 'Unable to update your link.' => 'No es pot actualitzar el seu enllaç.', + 'Unable to remove this link.' => 'No es pot eliminar aquest enllaç.', + 'relates to' => 'es refereix a', + 'blocks' => 'bloqueja', + 'is blocked by' => 'està bloquejada per', + 'duplicates' => 'duplica', + 'is duplicated by' => 'es duplica per', + 'is a child of' => 'és fill de', + 'is a parent of' => 'és pare de', + 'targets milestone' => 'objectiu de la fita', + 'is a milestone of' => 'és una fita de', + 'fixes' => 'corregeix', + 'is fixed by' => 'corregit per', + 'This task' => 'Aquesta tasca', + '<1h' => '<1h', + // '%dh' => '', + 'Expand tasks' => 'Amplia les tasques', + 'Collapse tasks' => 'Col·lapsa les tasques', + 'Expand/collapse tasks' => 'Amplia les tasques / col·lapsa', + 'Close dialog box' => 'Quadre de diàleg tancar', + 'Submit a form' => 'Envia un formulari', + 'Board view' => 'Mostra el tauler', + 'Keyboard shortcuts' => 'Dreceres de teclat', + 'Open board switcher' => 'Obre commutador de tauler', + 'Application' => 'Aplicació', + 'Compact view' => 'Vista compacta', + 'Horizontal scrolling' => 'Desplaçament horitzontal', + 'Compact/wide view' => 'Vista compacta / ample', + 'Currency' => 'Moneda', + 'Private project' => 'Projecte privat', + 'AUD - Australian Dollar' => 'MXN - Dòlar australià', + 'CAD - Canadian Dollar' => 'CAD - Dòlar canadenc', + 'CHF - Swiss Francs' => 'CHF - Franc suís', + 'Custom Stylesheet' => 'Estil personalitzat', + 'download' => 'descarrega', + 'EUR - Euro' => 'EUR - Euro', + 'GBP - British Pound' => 'GBP - Lliura britànica', + 'INR - Indian Rupee' => 'INR - Rupia índia', + 'JPY - Japanese Yen' => 'JPY - El ien japonès', + 'NZD - New Zealand Dollar' => 'NZD - Dòlar de Nova Zelanda', + 'RSD - Serbian dinar' => 'RSD - Dinar serbi', + 'CNY - Chinese Yuan' => 'CNY - Yuan xinès', + 'USD - US Dollar' => 'USD - El dòlar dels EUA', + 'Destination column' => 'Columna de destinació', + 'Move the task to another column when assigned to a user' => 'Mou la tasca a una altra columna quan s\'assigna a un usuari', + 'Move the task to another column when assignee is cleared' => 'Mou la tasca a una altra columna quan s\'esborra assignat', + 'Source column' => 'Columna d\'origen', + 'Transitions' => 'Transicions', + 'Executer' => 'Executor', + 'Time spent in the column' => 'El temps emprat a la columna', + 'Task transitions' => 'transicions de tasques', + 'Task transitions export' => 'Tasca transicions d\'exportació', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Aquest informe conté tots els moviments de columna per a cada tasca amb la data, l\'usuari i el temps per a cada transició.', + 'Currency rates' => 'Monedes', + 'Rate' => 'Preu', + 'Change reference currency' => 'Moneda de canvi de referència', + 'Reference currency' => 'Moneda de referència', + 'The currency rate have been added successfully.' => 'El tipus de canvi s\'ha afegit amb èxit.', + 'Unable to add this currency rate.' => 'No es pot afegeix aquest tipus de moneda.', + 'Webhook URL' => 'URL web hook', + '%s removed the assignee of the task %s' => '%s ha eliminat l\'assignat de la tasca %s', + 'Information' => 'Informació', + 'Check two factor authentication code' => 'Comprovar el codi d\'autenticació de dos factors', + 'The two factor authentication code is not valid.' => 'El codi d\'autenticació de dos factors no és vàlid.', + 'The two factor authentication code is valid.' => 'El codi d\'autenticació de dos factors és vàlid.', + 'Code' => 'Codi', + 'Two factor authentication' => 'Autenticació de dos factors', + // 'This QR code contains the key URI: ' => '', + 'Check my code' => 'Comprovar el meu codi', + // 'Secret key: ' => '', + 'Test your device' => 'Prova el teu dispositiu', + 'Assign a color when the task is moved to a specific column' => 'Assignar un color quan la tasca es mou a una columna específica', + '%s via Kanboard' => '%s a través del Kanboard', + 'Burndown chart' => 'Burndown chart', + 'This chart show the task complexity over the time (Work Remaining).' => 'Aquesta gràfica mostra la dificultat de la tasca en el temps (Treball restant).', + 'Screenshot taken %s' => 'Imatge presa %s', + 'Add a screenshot' => 'Afegeix una captura de pantalla', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Prengui una captura de pantalla i premeu CTRL + V o ⌘ + V per enganxar aquí.', + 'Screenshot uploaded successfully.' => 'Captura carregat correctament.', + 'SEK - Swedish Krona' => 'SEK - Corona sueca', + 'Identifier' => 'Identificador', + 'Disable two factor authentication' => 'Desactiva l\'autenticació de dos factors', + // 'Do you really want to disable the two factor authentication for this user: "%s"?' => '', + 'Edit link' => 'Edita enllaç', + 'Start to type task title...' => 'Comenceu a títol de la tasca de tipus ...', + 'A task cannot be linked to itself' => 'Una tasca no pot vincular-se a si mateix', + 'The exact same link already exists' => 'La mateixa relació exacta ja existeix', + 'Recurrent task is scheduled to be generated' => 'La tasca recurrent està programada per ser generada', + 'Score' => 'Puntuació', + 'The identifier must be unique' => 'L\'identificador ha de ser únic', + // 'This linked task id doesn\'t exists' => '', + 'This value must be alphanumeric' => 'Aquest valor ha de ser alfanumèric', + 'Edit recurrence' => 'Edita recurrència', + 'Generate recurrent task' => 'Generar tasca recurrent', + 'Trigger to generate recurrent task' => 'Desencadenar per generar tasca recurrent', + 'Factor to calculate new due date' => 'Factor per calcular la nova data de venciment', + 'Timeframe to calculate new due date' => 'Marc de temps per calcular la nova data de venciment', + 'Base date to calculate new due date' => 'Data de referència per al càlcul de la nova data de venciment', + 'Action date' => 'data d\'acció', + 'Base date to calculate new due date: ' => 'Data base per a calcular nova data de venciment: ', + 'This task has created this child task: ' => 'Aquesta tasca ha creat aquesta tasca filla: ', + 'Day(s)' => 'Dia (Dies)', + 'Existing due date' => 'Data de venciment existent', + // 'Factor to calculate new due date: ' => '', + 'Month(s)' => 'Mes (Mesos)', + 'Recurrence' => 'Recurrència', + 'This task has been created by: ' => 'Tasca creada per: ', + 'Recurrent task has been generated:' => 'La tasca recurrent s\'ha generat:', + // 'Timeframe to calculate new due date: ' => '', + // 'Trigger to generate recurrent task: ' => '', + 'When task is closed' => 'Quan la tasca està tancada', + 'When task is moved from first column' => 'Quan la tasca es mou de la primera columna', + 'When task is moved to last column' => 'Quan la tasca es mou a última columna', + 'Year(s)' => 'Any (s)', + 'Project settings' => 'Configuració del projecte', + 'Automatically update the start date' => 'Actualitzar automàticament la data d\'inici', + 'iCal feed' => 'Origen iCal', + 'Preferences' => 'Configuració', + 'Security' => 'Seguretat', + 'Two factor authentication disabled' => 'L\'autenticació de dos factors deshabilitat', + 'Two factor authentication enabled' => 'Autenticació de dos factors activada', + 'Unable to update this user.' => 'No es pot actualitzar aquest usuari.', + 'There is no user management for private projects.' => 'No hi ha una gestió d\'usuaris per a projectes privats.', + 'User that will receive the email' => 'L\'usuari que rebrà el correu electrònic', + 'Email subject' => 'assumpte del correu electrònic', + 'Date' => 'Data', + 'Add a comment log when moving the task between columns' => 'Afegeix un registre comentari en moure la tasca entre les columnes', + 'Move the task to another column when the category is changed' => 'Mou la tasca a una altra columna quan es canvia la categoria', + 'Send a task by email to someone' => 'Envia una tasca per correu electrònic a algú', + 'Reopen a task' => 'Torneu a obrir una tasca', + 'Notification' => 'Notificació', + '%s moved the task #%d to the first swimlane' => '%s van moure la tasca #%d per al primer swimlane', + 'Swimlane' => 'Swimlane', + '%s moved the task %s to the first swimlane' => '%s es va traslladar la tasca %s per al primer swimlane', + // '%s moved the task %s to the swimlane "%s"' => '', + 'This report contains all subtasks information for the given date range.' => 'Aquest informe conté tota la informació subtasques per al període de temps.', + 'This report contains all tasks information for the given date range.' => 'Aquest informe conté tota la informació de tasques per al període de temps.', + 'Project activities for %s' => 'Les activitats del projecte per a %s', + 'view the board on Kanboard' => 'Veure el tauler en Kanboard', + 'The task have been moved to the first swimlane' => 'La tasca ha estat mogut a la primera swimlane', + 'The task have been moved to another swimlane:' => 'La tasca s\'han traslladat a un altre swimlane:', + 'New title: %s' => 'Nou títol: %s', + 'The task is not assigned anymore' => 'La tasca no s\'ha assignat més', + 'New assignee: %s' => 'Nova assignat:%s', + 'There is no category now' => 'No hi ha una categoria ara', + 'New category: %s' => 'Nova categoria:%s', + 'New color: %s' => 'Nou color: %s', + 'New complexity: %d' => 'Nova dificultat: %d', + 'The due date have been removed' => 'La data de venciment s\'han eliminat', + 'There is no description anymore' => 'No hi ha una descripció més', + 'Recurrence settings have been modified' => 'ajustos de recurrència s\'han modificat', + // 'Time spent changed: %sh' => '', + // 'Time estimated changed: %sh' => '', + // 'The field "%s" have been updated' => '', + 'The description has been modified:' => 'La descripció s\'ha modificat:', + 'Do you really want to close the task "%s" as well as all subtasks?' => 'Vols tancar la tasca "%s", així com totes les subtasques?', + 'I want to receive notifications for:' => 'Vull rebre notificacions per:', + 'All tasks' => 'totes les tasques', + 'Only for tasks assigned to me' => 'Només per a les tasques que se m\'ha s\'assignin', + 'Only for tasks created by me' => 'Només per a les tasques creades per mi', + 'Only for tasks created by me and assigned to me' => 'Només per a tasques creades per mi i em assignin', + // '%%Y-%%m-%%d' => '', + 'Total for all columns' => 'Total per a totes les columnes', + 'You need at least 2 days of data to show the chart.' => 'Es necessita com a mínim 2 dies de dades per mostrar el gràfic.', + '<15m' => '<15m', + '<30m' => '<30m', + 'Stop timer' => 'Atura el temporitzador', + 'Start timer' => 'Inicia el temporitzador', + 'My activity stream' => 'El meu fluxe d\'activitat', + 'Search tasks' => 'Cerca de tasques', + 'Reset filters' => 'Restableix filtres', + 'My tasks due tomorrow' => 'Les meves tasques per demà', + 'Tasks due today' => 'Tasques que vencen avui', + 'Tasks due tomorrow' => 'Tasques per demà', + 'Tasks due yesterday' => 'Tasques a causa ahir', + 'Closed tasks' => 'Tasques tancades', + 'Open tasks' => 'Tasques obertes', + 'Not assigned' => 'No assignat', + 'View advanced search syntax' => 'Veure sintaxi de cerca avançada', + 'Overview' => 'Visió de conjunt', + 'Board/Calendar/List view' => 'Tauler / Calendari / Vista de llista', + 'Switch to the board view' => 'Canviar a la vista de tauler', + 'Switch to the list view' => 'Canviar a la vista de llista', + 'Go to the search/filter box' => 'Anar al quadre de cerca / filtre', + 'There is no activity yet.' => 'No hi ha cap activitat encara.', + 'No tasks found.' => 'No s\'han trobat tasques.', + 'Keyboard shortcut: "%s"' => 'Drecera de teclat: "%s"', + 'List' => 'Llista', + 'Filter' => 'Filtre', + 'Advanced search' => 'Cerca avançada', + 'Example of query: ' => 'Exemple de consulta: ', + 'Search by project: ' => 'Cerca per projecte: ', + 'Search by column: ' => 'Cerca per columna: ', + 'Search by assignee: ' => 'Cerca per assignat: ', + 'Search by color: ' => 'Cerca per color: ', + 'Search by category: ' => 'Cerca per categoria: ', + 'Search by description: ' => 'Cerca per descripció: ', + 'Search by due date: ' => 'Cerca per data de venciment: ', + 'Average time spent into each column' => 'Temps mitjà de permanència en cada columna', + 'Average time spent' => 'Temps mitjà de permanència', + 'This chart show the average time spent into each column for the last %d tasks.' => 'Aquest gràfic mostra el temps mitjà de permanència en cada columna per a les últimes %d tasques.', + 'Average Lead and Cycle time' => 'El plom i la mitjana del temps de cicle', + 'Average lead time: ' => 'Mitjana de temps de lliurament: ', + 'Average cycle time: ' => 'Mitjana de temps de cicle: ', + 'Cycle Time' => 'Temps de cicle', + 'Lead Time' => 'Temps de lliurament', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Aquesta taula mostra la mitjana de plom i el temps de cicle per a les últimes tasques %d respecte al temps.', + 'Average time into each column' => 'Temps mitjà en cada columna', + 'Lead and cycle time' => 'Temps de lliurament i cicle', + 'Lead time: ' => 'Temps de lliurament: ', + 'Cycle time: ' => 'Temps del cicle: ', + 'Time spent into each column' => 'El temps invertit en cada columna', + 'The lead time is the duration between the task creation and the completion.' => 'El termini d\'execució és la durada entre la creació de la tasca i la finalització.', + 'The cycle time is the duration between the start date and the completion.' => 'El temps de cicle és la durada entre la data d\'inici i la finalització.', + 'If the task is not closed the current time is used instead of the completion date.' => 'Si la tasca no està tancat el moment actual s\'utilitza en lloc de la data de finalització.', + 'Set automatically the start date' => 'S\'ajusta automàticament la data d\'inici', + 'Edit Authentication' => 'Edita autenticació', + 'Remote user' => 'Usuari remot', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Els usuaris remots no emmagatzemen la contrasenya a la base de dades Kanboard, exemples: els comptes LDAP, Google i Github.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Si marca la casella "No permetre formulari d\'accés", s\'ignoraran les credencials introduïdes al formulari d\'inici de sessió.', + 'Default task color' => 'Color per defecte de les tasques', + 'This feature does not work with all browsers.' => 'Aquesta característica no funciona amb tots els navegadors.', + 'There is no destination project available.' => 'No hi ha cap projecte de destinació disponibles.', + 'Trigger automatically subtask time tracking' => 'Desencadenar automàticament control d\'hores de subtasca', + 'Include closed tasks in the cumulative flow diagram' => 'Incloure tasques tancades en el diagrama de flux acumulat', + 'Current swimlane: %s' => 'Swimlane actual: %s', + 'Current column: %s' => 'Columna actual: %s', + 'Current category: %s' => 'Categoria actual: %s', + 'no category' => 'cap categoria', + 'Current assignee: %s' => 'Assignat actual: %s', + 'not assigned' => 'no assignat', + 'Author:' => 'Autor:', + 'contributors' => 'contribuents', + 'License:' => 'Llicència:', + 'License' => 'Llicència', + 'Enter the text below' => 'Introduïu el text a continuació', + 'Start date:' => 'Data d\'inici:', + 'Due date:' => 'Data de venciment:', + 'People who are project managers' => 'Les persones que són caps de projecte', + 'People who are project members' => 'Les persones que són membres del projecte', + 'NOK - Norwegian Krone' => 'NOK - Corona noruega', + 'Show this column' => 'Mostra aquesta columna', + 'Hide this column' => 'Amaga aquesta columna', + 'open file' => 'Arxiu obert', + 'End date' => 'Data de finalització', + 'Users overview' => 'Visió general dels usuaris', + 'Members' => 'Membres', + 'Shared project' => 'Projecte compartit', + 'Project managers' => 'Els gerents de projecte', + 'Projects list' => 'Llista de projectes', + 'End date:' => 'Data de finalització:', + 'Change task color when using a specific task link' => 'Canviar de color quan la tasca utilitzant un enllaç tasca específica', + 'Task link creation or modification' => 'La creació o modificació de l\'enllaç de tasques', + 'Milestone' => 'Fita', + 'Documentation: %s' => 'Documentació: %s', + 'Reset the search/filter box' => 'Restablir el quadre de cerca / filtre', + 'Documentation' => 'Documentació', + 'Table of contents' => 'Taula de continguts', + 'Author' => 'Autor', + 'Version' => 'Versió', + 'Plugins' => 'Connectors', + 'There is no plugin loaded.' => 'No hi ha cap complement carregat.', + 'My notifications' => 'Les meves notificacions', + 'Custom filters' => 'Filtres personalitzats', + 'Your custom filter have been created successfully.' => 'El seu filtre a mida s\'han creat amb èxit.', + 'Unable to create your custom filter.' => 'No es pot crear el filtre personalitzat.', + 'Custom filter removed successfully.' => 'Filtre a mida eliminat correctament.', + 'Unable to remove this custom filter.' => 'No es pot eliminar aquest filtre personalitzat.', + 'Edit custom filter' => 'Edita filtre a mida', + 'Your custom filter have been updated successfully.' => 'El seu filtre a mida s\'han actualitzat correctament.', + 'Unable to update custom filter.' => 'No es pot actualitzar filtre a mida.', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Nou adjunt a la tasca #%d: %s', + 'New comment on task #%d' => 'Nou comentari a la tasca #%d', + 'Comment updated on task #%d' => 'Comentari actualitzat a la tasca #%d', + 'New subtask on task #%d' => 'Nova subtasca a la tasca #%d', + 'Subtask updated on task #%d' => 'Subtasca s\'actualitza a la tasca #%d', + 'New task #%d: %s' => 'Nova tasca #%d: %s', + 'Task updated #%d' => 'Tasca actualitzada #%d', + 'Task #%d closed' => 'Tasca #%d tancada', + 'Task #%d opened' => 'Tasca #%d obrir', + 'Column changed for task #%d' => 'Columna canviada per la tasca #%d', + 'New position for task #%d' => 'Nova posició per la tasca #%d', + 'Swimlane changed for task #%d' => 'El swimlane va canviat per la tasca #%d', + 'Assignee changed on task #%d' => 'L\'assignat va canviar a la tasca #%d', + '%d overdue tasks' => '%d tasques endarrerides', + 'Task #%d is overdue' => 'La tasca #%d està vençuda', + 'No notification.' => 'Sense notificacions.', + 'Mark all as read' => 'Marca totes com llegides', + 'Mark as read' => 'Marca com llegida', + 'Total number of tasks in this column across all swimlanes' => 'Nombre total de tasques en aquesta columna a través de tots swimlanes', + 'Collapse swimlane' => 'Col·lapsa swimlane', + 'Expand swimlane' => 'Ampliar swimlane', + 'Add a new filter' => 'Afegeix un nou filtre', + 'Share with all project members' => 'Compartir amb tots els membres del projecte', + 'Shared' => 'Compartit', + 'Owner' => 'Propietari', + 'Unread notifications' => 'Notificacions no llegides', + 'Notification methods:' => 'Els mètodes de notificació:', + 'Unable to read your file' => 'No es pot llegir el fitxer', + '%d task(s) have been imported successfully.' => '%d tasca(s) s\'han importat correctament.', + 'Nothing have been imported!' => 'Res s\'han importat!', + 'Import users from CSV file' => 'Importa usuaris des d\'arxiu CSV', + '%d user(s) have been imported successfully.' => '%d usuari(s) s\'han importat correctament.', + 'Comma' => 'Coma', + 'Semi-colon' => 'Punt i coma', + 'Tab' => 'Llengüeta', + 'Vertical bar' => 'Barra vertical', + 'Double Quote' => 'Cometes dobles', + 'Single Quote' => 'Cometes simples', + '%s attached a file to the task #%d' => '%s ha adjuntat un arxiu a la tasca #%d', + 'There is no column or swimlane activated in your project!' => 'No hi ha cap columna o swimlane activat en el seu projecte!', + 'Append filter (instead of replacement)' => 'Annexar filtre (en lloc de reemplaçament)', + 'Append/Replace' => 'Annexar / Reemplaçar', + 'Append' => 'Annexar', + 'Replace' => 'Reemplaçar', + 'Import' => 'Importació', + 'Change sorting' => 'Canvia la ordenació', + 'Tasks Importation' => 'Importació de tasques', + 'Delimiter' => 'Delimitador', + 'Enclosure' => 'Recinte', + 'CSV File' => 'Fitxer CSV', + 'Instructions' => 'Instruccions', + 'Your file must use the predefined CSV format' => 'El seu arxiu ha d\'utilitzar el format CSV predefinit', + 'Your file must be encoded in UTF-8' => 'El seu arxiu ha d\'estar codificat en UTF-8', + 'The first row must be the header' => 'La primera fila ha de ser la capçalera', + 'Duplicates are not verified for you' => 'Els duplicats no es verifiquen per a vostè', + 'The due date must use the ISO format: YYYY-MM-DD' => 'La data de venciment ha d\'utilitzar el format ISO: AAAA-MM-DD', + 'Download CSV template' => 'Descarregar plantilla CSV', + 'No external integration registered.' => 'No es va registrar la integració externa.', + 'Duplicates are not imported' => 'Els duplicats no s\'importen', + 'Usernames must be lowercase and unique' => 'Els noms d\'usuari han d\'estar en minúscules i únic', + 'Passwords will be encrypted if present' => 'Les contrasenyes es xifraran si està present', + '%s attached a new file to the task %s' => '%s adjunta un arxiu nou a la tasca %s', + 'Link type' => 'Tipus d\'enllaç', + 'Assign automatically a category based on a link' => 'Assignar automàticament una categoria basada en un enllaç', + 'BAM - Konvertible Mark' => 'BAM - Konvertible Mark', + 'Assignee Username' => 'Nom d\'usuari assignat', + 'Assignee Name' => 'Nom assignat', + 'Groups' => 'Grups', + 'Members of %s' => 'Els membres de %s', + 'New group' => 'Nou grup', + 'Group created successfully.' => 'Grup creat correctament.', + 'Unable to create your group.' => 'No es pot crear el grup.', + 'Edit group' => 'Edita grup', + 'Group updated successfully.' => 'Grup actualitzat correctament.', + 'Unable to update your group.' => 'No es pot actualitzar el seu grup.', + // 'Add group member to "%s"' => '', + 'Group member added successfully.' => 'Membre del grup afegit correctament.', + 'Unable to add group member.' => 'No es pot afegeix membre del grup.', + // 'Remove user from group "%s"' => '', + 'User removed successfully from this group.' => 'Usuari eliminat amb èxit d\'aquest grup.', + 'Unable to remove this user from the group.' => 'No es pot eliminar aquest usuari del grup.', + 'Remove group' => 'Elimina el grup', + 'Group removed successfully.' => 'Grup eliminat correctament.', + 'Unable to remove this group.' => 'No es pot eliminar aquest grup.', + 'Project Permissions' => 'Permisos de projectes', + 'Manager' => 'Gerent', + 'Project Manager' => 'Gerent de projectes', + 'Project Member' => 'Membres del projecte', + 'Project Viewer' => 'Visor de projectes', + 'Your account is locked for %d minutes' => 'El seu compte està bloquejada per %d minuts', + 'Invalid captcha' => 'codi d\'imatge no vàlida', + 'The name must be unique' => 'El nom ha de ser únic', + 'View all groups' => 'Veure tots els grups', + 'There is no user available.' => 'No hi ha cap usuari disponible.', + // 'Do you really want to remove the user "%s" from the group "%s"?' => '', + 'There is no group.' => 'No hi ha cap grup.', + 'Add group member' => 'Afegeix membre del grup', + // 'Do you really want to remove this group: "%s"?' => '', + 'There is no user in this group.' => 'No hi ha cap usuari en aquest grup.', + 'Permissions' => 'Permisos', + 'Allowed Users' => 'Els usuaris autoritzats', + 'No user have been allowed specifically.' => 'Cap usuari s\'hagi establert.', + 'Role' => 'Rol', + 'Enter user name...' => 'Introdueix el nom d\'usuari ...', + 'Allowed Groups' => 'Grups permesos', + 'No group have been allowed specifically.' => 'Cap grup s\'hagi establert.', + 'Group' => 'Grup', + 'Group Name' => 'Nom del grup', + 'Enter group name...' => 'Introduïu el nom del grup ...', + 'Role:' => 'Rol:', + 'Project members' => 'Els membres del projecte', + '%s mentioned you in the task #%d' => '%s t\'ha esmentat a la tasca #%d', + '%s mentioned you in a comment on the task #%d' => '%s t\'ha mencionat en un comentari a la tasca #%d', + 'You were mentioned in the task #%d' => 'Se t\'ha esmentat a la tasca #%d', + 'You were mentioned in a comment on the task #%d' => 'Se t\'ha mencionat en un comentari sobre la tasca #%d', + // 'Estimated hours: ' => '', + // 'Actual hours: ' => '', + 'Hours Spent' => 'Les hores invertides', + 'Hours Estimated' => 'hores estimat', + 'Estimated Time' => 'Temps estimat', + 'Actual Time' => 'temps real', + 'Estimated vs actual time' => 'Estimat en funció del temps real', + 'RUB - Russian Ruble' => 'RUB - Russia rus', + 'Assign the task to the person who does the action when the column is changed' => 'Assignar la tasca a la persona que fa l\'acció quan es canvia la columna', + 'Close a task in a specific column' => 'Tancar una tasca en una columna específica', + 'Time-based One-time Password Algorithm' => 'Algoritme de contrasenya basat en el temps d\'una sola vegada', + // 'Two-Factor Provider: ' => '', + 'Disable two-factor authentication' => 'Deshabilita l\'autenticació de dos factors', + 'Enable two-factor authentication' => 'Habilitar l\'autenticació de dos factors', + 'There is no integration registered at the moment.' => 'No hi ha integració registrada en el moment.', + 'Password Reset for Kanboard' => 'Restableix contrasenya per Kanboard', + 'Forgot password?' => 'Has oblidat la contrasenya?', + 'Enable "Forget Password"' => 'Habilita "he oblidat la contrasenya"', + 'Password Reset' => 'Restablir contrasenya', + 'New password' => 'Nova contrasenya', + 'Change Password' => 'Canvia la contrasenya', + 'To reset your password click on this link:' => 'Per restablir la contrasenya, feu clic en aquest enllaç:', + 'Last Password Reset' => 'Darrer restabliment de contrasenya', + 'The password has never been reinitialized.' => 'La contrasenya mai ha estat reiniciada.', + 'Creation' => 'Creació', + 'Expiration' => 'Caducitat', + 'Password reset history' => 'Històric de restabliment de contrasenya', + // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', + 'Do you really want to close all tasks of this column?' => 'Vols tancar totes les tasques d\'aquesta columna?', + // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', + 'Close all tasks of this column' => 'Tanqueu totes les tasques d\'aquesta columna', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'No s\'ha registrat plugin d\'un mètode de notificació del projecte. Encara es pot configurar les notificacions individuals en el seu perfil d\'usuari.', + 'My dashboard' => 'El meu tauler', + 'My profile' => 'El meu perfil', + 'Project owner: ' => 'Propietari del projecte: ', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'L\'identificador de projecte és opcional i ha de ser alfanumèric, exemple: MYPROJECT.', + 'Project owner' => 'Propietari del projecte', + 'Private projects do not have users and groups management.' => 'projectes privats no tenen els usuaris i grups de gestió.', + 'There is no project member.' => 'No hi ha cap membre del projecte.', + 'Priority' => 'Prioritat', + 'Task priority' => 'Prioritat de la tasca', + 'General' => 'General', + 'Dates' => 'Dates', + 'Default priority' => 'Prioritat per defecte', + 'Lowest priority' => 'La prioritat més baixa', + 'Highest priority' => 'La prioritat més alta', + 'Close a task when there is no activity' => 'Tancar una tasca quan no hi ha activitat', + 'Duration in days' => 'Durada en dies', + 'Send email when there is no activity on a task' => 'Envia correu electrònic quan no hi ha activitat en una tasca', + 'Unable to fetch link information.' => 'No és possible obtenir informació d\'enllaç.', + 'Daily background job for tasks' => 'Feina en segon pla diaria per a les tasques', + 'Auto' => 'Auto', + 'Related' => 'Relacionat', + 'Attachment' => 'Adjunt', + 'Title not found' => 'Títol no trobat', + 'Web Link' => 'Enllaç web', + 'External links' => 'Enllaços externs', + 'Add external link' => 'Afegeix un enllaç extern', + 'Type' => 'Tipus', + 'Dependency' => 'Dependència', + 'Add internal link' => 'Afegeix un enllaç intern', + 'Add a new external link' => 'Afegeix un nou enllaç extern', + 'Edit external link' => 'Edita enllaç extern', + 'External link' => 'URL', + 'Copy and paste your link here...' => 'Copia i enganxa l\'enllaç aquí ...', + 'URL' => 'URL', + 'Internal links' => 'Els enllaços interns', + 'Assign to me' => 'Assignar a mi', + 'Me' => 'jo', + 'Do not duplicate anything' => 'No dupliquis res', + 'Projects management' => 'Gestió de projectes', + 'Users management' => 'Gestió d\'usuaris', + 'Groups management' => 'Gestió de grups', + 'Create from another project' => 'Crea a partir d\'un altre projecte', + 'open' => 'obert', + 'closed' => 'tancat', + 'Priority:' => 'Prioritat:', + 'Reference:' => 'Referència:', + 'Complexity:' => 'Dificultat:', + 'Swimlane:' => 'Swimlane:', + 'Column:' => 'Columna:', + 'Position:' => 'Posició:', + 'Creator:' => 'Creador:', + 'Time estimated:' => 'Temps estimat:', + '%s hours' => '%s hora', + 'Time spent:' => 'El temps passat:', + 'Created:' => 'Creat:', + 'Modified:' => 'Modificat:', + 'Completed:' => 'Completat:', + 'Started:' => 'Començat:', + 'Moved:' => 'Mogut:', + 'Task #%d' => 'Tasca #%d', + 'Time format' => 'Format d\'hora', + 'Start date: ' => 'Data d\'inici: ', + 'End date: ' => 'Data de fi: ', + 'New due date: ' => 'Nova data de venciment: ', + 'Start date changed: ' => 'Data d\'inici canviada: ', + 'Disable private projects' => 'Desactivar els projectes privats', + // 'Do you really want to remove this custom filter: "%s"?' => '', + 'Remove a custom filter' => 'Treure un filtre a mida', + 'User activated successfully.' => 'L\'usuari ha activat correctament.', + 'Unable to enable this user.' => 'No és possible permetre que aquest usuari.', + 'User disabled successfully.' => 'L\'usuari deshabilitat amb èxit.', + 'Unable to disable this user.' => 'No és possible desactivar aquest usuari.', + 'All files have been uploaded successfully.' => 'Tots els arxius s\'hagin carregat correctament.', + // 'The maximum allowed file size is %sB.' => '', + 'Drag and drop your files here' => 'Arrossegar i deixar anar els arxius aquí', + 'choose files' => 'triar els arxius', + 'View profile' => 'Veure el perfil', + 'Two Factor' => 'dos factors', + 'Disable user' => 'desactivar usuari', + // 'Do you really want to disable this user: "%s"?' => '', + 'Enable user' => 'Permetre a l\'usuari', + // 'Do you really want to enable this user: "%s"?' => '', + 'Download' => 'Descarregar', + 'Uploaded: %s' => 'Pujat: %s', + 'Size: %s' => 'Mida: %s', + 'Uploaded by %s' => 'Pujada per %s', + 'Filename' => 'Nom de l\'arxiu', + 'Size' => 'Mida', + 'Column created successfully.' => 'Columna creat correctament.', + 'Another column with the same name exists in the project' => 'Una altra columna amb el mateix nom existeix en el projecte', + 'Default filters' => 'filtres predeterminats', + // 'Your board doesn\'t have any columns!' => '', + 'Change column position' => 'Canvi de posició de columna', + 'Switch to the project overview' => 'Canviar a la visió general del projecte', + 'User filters' => 'Els filtres d\'usuari', + 'Category filters' => 'filtres de categories', + 'Upload a file' => 'Pujar un arxiu', + 'View file' => 'Veure arxiu', + 'Last activity' => 'Última activitat', + 'Change subtask position' => 'Subtasca posició de canvi', + 'This value must be greater than %d' => 'Aquest valor ha de ser més gran que %d', + 'Another swimlane with the same name exists in the project' => 'Una altra swimlane amb el mateix nom existeix en el projecte', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Exemple: http://example.kanboard.net/ (utilitzat per generar URL absoluta)', + 'Actions duplicated successfully.' => 'Accions dupliquen amb èxit.', + 'Unable to duplicate actions.' => 'No s\'ha pogut duplicar accions.', + 'Add a new action' => 'Afegeix una nova acció', + 'Import from another project' => 'Importa d\'un altre projecte', + 'There is no action at the moment.' => 'No hi ha cap acció en aquest moment.', + 'Import actions from another project' => 'accions d\'importació d\'un altre projecte', + 'There is no available project.' => 'No hi ha un projecte disponible.', + 'Local File' => 'Fitxer local', + 'Configuration' => 'Configuració', + 'PHP version:' => 'Versió de PHP:', + 'PHP SAPI:' => 'PHP SAPI:', + 'OS version:' => 'Versió del sistema operatiu:', + 'Database version:' => 'Versió de la base de dades:', + 'Browser:' => 'Navegador:', + 'Task view' => 'Vista de tasques', + 'Edit task' => 'Edició de tasques', + 'Edit description' => 'Modifica la descripció', + 'New internal link' => 'Nou enllaç intern', + 'Display list of keyboard shortcuts' => 'Visualització de la llista de dreceres de teclat', + 'Menu' => 'Menú', + 'Set start date' => 'Comença', + 'Avatar' => 'Avatar', + 'Upload my avatar image' => 'Puja la imatge meu avatar', + 'Remove my image' => 'Traieu la meva imatge', + 'The OAuth2 state parameter is invalid' => 'El paràmetre d\'estat OAuth2 no és vàlid', + 'User not found.' => 'Usuari no trobat.', + 'Search in activity stream' => 'Buscar en el Tràfic d\'activitat', + 'My activities' => 'Les meves activitats', + 'Activity until yesterday' => 'Activitat fins ahir', + 'Activity until today' => 'Activitat fins avui', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + 'Activity stream search' => 'Cerca al fluxe d\'activitat', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', + 'Assign automatically a color based on a priority' => 'Assignar automàticament un color basat en una prioritat', + // 'Overdue tasks for the project(s) "%s"' => '', + 'Upload files' => 'Pujar arxius', + 'Installed Plugins' => 'Els connectors instal·lats', + 'Plugin Directory' => 'Directori de complements', + 'Plugin installed successfully.' => 'Plug-in instal·lat correctament.', + 'Plugin updated successfully.' => 'Plugin actualitzat correctament.', + 'Plugin removed successfully.' => 'Plugin eliminat correctament.', + 'Subtask converted to task successfully.' => 'Subtasca converteix en tasca amb èxit.', + 'Unable to convert the subtask.' => 'No es pot convertir la subtasca.', + 'Unable to extract plugin archive.' => 'No es pot extreure arxiu connector.', + 'Plugin not found.' => 'Plugin no trobat.', + // 'You don\'t have the permission to remove this plugin.' => '', + 'Unable to download plugin archive.' => 'No es pot descarregar arxiu connector.', + 'Unable to write temporary file for plugin.' => 'No es pot escriure el fitxer temporal per al connector.', + 'Unable to open plugin archive.' => 'No es pot obrir arxiu de plugin.', + 'There is no file in the plugin archive.' => 'No hi ha cap arxiu a l\'arxiu connector.', + 'Create tasks in bulk' => 'Crear tasques a granel', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'La instància Kanboard no està configurat per a instal·lar plugins des de la interfície d\'usuari.', + 'There is no plugin available.' => 'No hi ha cap complement disponible.', + 'Install' => 'Instal·la', + 'Update' => 'Actualitza', + 'Up to date' => 'Actualitzat', + 'Not available' => 'No disponible', + 'Remove plugin' => 'Eliminar connector', + // 'Do you really want to remove this plugin: "%s"?' => '', + 'Uninstall' => 'Suprimeix', + 'Listing' => 'Llistat', + 'Metadata' => 'Metadades', + 'Manage projects' => 'Gestió de projectes', + 'Convert to task' => 'Convertir la tasca', + 'Convert sub-task to task' => 'Converteix sub-tasca a una altra', + 'Do you really want to convert this sub-task to a task?' => 'Vols convertir aquesta sub-tasca a una tasca?', + 'My task title' => 'Títol de la tasca', + 'Enter one task by line.' => 'Introduïu una tasca per línia.', + 'Number of failed login:' => 'Nombre d\'inici de sessió fallit:', + 'Account locked until:' => 'Compte bloquejada fins que:', + 'Email settings' => 'Configuració de correu electrònic', + 'Email sender address' => 'Adreça de correu electrònic del remitent', + 'Email transport' => 'Transport de correu electrònic', + 'Webhook token' => 'Símbol web hook', + 'Project tags management' => 'Gestió de projectes etiquetes', + 'Tag created successfully.' => 'Tag creat correctament.', + 'Unable to create this tag.' => 'No es pot crear aquesta etiqueta.', + 'Tag updated successfully.' => 'Tag actualitzat correctament.', + 'Unable to update this tag.' => 'No es pot actualitzar aquesta etiqueta.', + 'Tag removed successfully.' => 'Tag eliminat correctament.', + 'Unable to remove this tag.' => 'No es pot eliminar aquesta etiqueta.', + 'Global tags management' => 'Gestió global d\'etiquetes', + 'Tags' => 'Etiquetes', + 'Tags management' => 'Gestió d\'etiquetes', + 'Add new tag' => 'Afegeix nova etiqueta', + 'Edit a tag' => 'Edita una etiqueta', + 'Project tags' => 'Variables del projecte', + 'There is no specific tag for this project at the moment.' => 'No hi ha una etiqueta específica per a aquest projecte en aquest moment.', + 'Tag' => 'Etiqueta', + 'Remove a tag' => 'Elimina una etiqueta', + // 'Do you really want to remove this tag: "%s"?' => '', + 'Global tags' => 'etiquetes globals', + 'There is no global tag at the moment.' => 'No hi ha cap variable global en el moment.', + 'This field cannot be empty' => 'Aquest camp no pot estar buit', + 'Close a task when there is no activity in an specific column' => 'Tancar una tasca quan no hi ha activitat en una columna específica', + '%s removed a subtask for the task #%d' => '%s extret una subtasca per a la tasca #%d', + '%s removed a comment on the task #%d' => '%s remogut un comentari a la tasca #%d', + 'Comment removed on task #%d' => 'Comentari eliminat a la tasca #%d', + 'Subtask removed on task #%d' => 'Subtasca eliminat a la tasca #%d', + 'Hide tasks in this column in the dashboard' => 'Amaga tasques en aquesta columna al tauler d\'instruments', + '%s removed a comment on the task %s' => '%s remogut un comentari a la tasca %s', + '%s removed a subtask for the task %s' => '%s extret una subtasca per a la tasca %s', + 'Comment removed' => 'Es va eliminar el comentari', + 'Subtask removed' => 'subtasca retira', + '%s set a new internal link for the task #%d' => '%s va establir un nou enllaç intern per a la tasca #%d', + '%s removed an internal link for the task #%d' => '%s eliminat un enllaç intern per a la tasca #%d', + 'A new internal link for the task #%d have been defined' => 'Un nou enllaç intern per a la tasca #%d s\'han definit', + 'Internal link removed for the task #%d' => 'Enllaç intern eliminat la tasca #%d', + '%s set a new internal link for the task %s' => '%s va establir un nou enllaç intern per a la tasca %s', + '%s removed an internal link for the task %s' => '%s eliminat un enllaç intern per a la tasca %s', + 'Automatically set the due date on task creation' => 'S\'ajusta automàticament la data de venciment a la creació de tasques', + 'Move the task to another column when closed' => 'Mou la tasca a una altra columna quan es tanca', + 'Move the task to another column when not moved during a given period' => 'Mou la tasca a una altra columna quan no es va moure durant un període determinat', + 'Dashboard for %s' => 'Tauler de %s', + 'Tasks overview for %s' => 'Resum de tasques de %s', + 'Subtasks overview for %s' => 'Visió general de subtasques de %s', + 'Projects overview for %s' => 'Visió general del projecte de %s', + 'Activity stream for %s' => 'Fluxe d\'activitat per a %s', + 'Assign a color when the task is moved to a specific swimlane' => 'Assignar un color quan la tasca es mou a un carril específic', + 'Assign a priority when the task is moved to a specific swimlane' => 'Assignar una prioritat quan la tasca es mou a un carril específic', + 'User unlocked successfully.' => 'Usuari desbloquejat amb èxit.', + 'Unable to unlock the user.' => 'No és possible desbloquejar l\'usuari.', + 'Move a task to another swimlane' => 'Mou una tasca a una altra swimlane', + 'Creator Name' => 'nom creador', + 'Time spent and estimated' => 'El temps dedicat i estima', + 'Move position' => 'Mou la posició', + 'Move task to another position on the board' => 'Mou tasca a una altra posició al tauler', + 'Insert before this task' => 'Insereix abans aquesta tasca', + 'Insert after this task' => 'Inserir, després d\'aquesta tasca', + 'Unlock this user' => 'Desbloquejar aquest usuari', + 'Custom Project Roles' => 'Rols d\'encàrrec del projecte', + 'Add a new custom role' => 'Afegeix un nou rol', + // 'Restrictions for the role "%s"' => '', + 'Add a new project restriction' => 'Afegeix una nova restricció projecte', + 'Add a new drag and drop restriction' => 'Afegeix un nou arrossegar i deixar anar restricció', + 'Add a new column restriction' => 'Afegeix una nova restricció de columna', + 'Edit this role' => 'Edita aquest rol', + 'Remove this role' => 'Elimina aquest rol', + 'There is no restriction for this role.' => 'No hi ha cap restricció per a aquest rol.', + 'Only moving task between those columns is permitted' => 'Només es mou tasques entre aquestes columnes es permet', + 'Close a task in a specific column when not moved during a given period' => 'Tancar una tasca en una columna específica quan no es va moure durant un període determinat', + 'Edit columns' => 'Edita columnes', + 'The column restriction has been created successfully.' => 'La restricció de la columna s\'ha creat correctament.', + 'Unable to create this column restriction.' => 'No es pot crear aquesta restricció columna.', + 'Column restriction removed successfully.' => 'restricció Columna eliminat correctament.', + 'Unable to remove this restriction.' => 'No es pot eliminar aquesta restricció.', + 'Your custom project role has been created successfully.' => 'El seu rol projecte personalitzat s\'ha creat correctament.', + 'Unable to create custom project role.' => 'No es pot crear el rol de projecte personalitzat.', + 'Your custom project role has been updated successfully.' => 'El seu rol projecte personalitzat s\'ha actualitzat correctament.', + 'Unable to update custom project role.' => 'No es pot actualitzar rol projecte personalitzat.', + 'Custom project role removed successfully.' => 'rol projecte personalitzat eliminat correctament.', + 'Unable to remove this project role.' => 'No es pot treure aquest rol projecte.', + 'The project restriction has been created successfully.' => 'La restricció projecte ha estat creat amb èxit.', + 'Unable to create this project restriction.' => 'No es pot crear aquesta restricció projecte.', + 'Project restriction removed successfully.' => 'Projecte restricció eliminat correctament.', + 'You cannot create tasks in this column.' => 'No es poden crear tasques en aquesta columna.', + 'Task creation is permitted for this column' => 'Es permet la creació de tasques per a aquesta columna', + 'Closing or opening a task is permitted for this column' => 'Tancant o obrint una tasca està permesa per a aquesta columna', + 'Task creation is blocked for this column' => 'creació de la tasca està bloquejat per a aquesta columna', + 'Closing or opening a task is blocked for this column' => 'Tancant o obrint una tasca està bloquejat per a aquesta columna', + 'Task creation is not permitted' => 'No es permet la creació de tasques', + 'Closing or opening a task is not permitted' => 'No es permet tancar o obrir una tasca', + // 'New drag and drop restriction for the role "%s"' => '', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Les persones que pertanyen a aquest rol seran capaços de moure les tasques només entre la font i la columna de destinació.', + 'Remove a column restriction' => 'Eliminar una restricció columna', + // 'Do you really want to remove this column restriction: "%s" to "%s"?' => '', + // 'New column restriction for the role "%s"' => '', + 'Rule' => 'regla', + 'Do you really want to remove this column restriction?' => 'Vols eliminar aquest criteri de la columna?', + 'Custom roles' => 'Rols personalitzats', + 'New custom project role' => 'Nou rol projecte personalitzat', + 'Edit custom project role' => 'Edita rol projecte personalitzat', + 'Remove a custom role' => 'Eliminar una funció personalitzada', + // 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '', + 'There is no custom role for this project.' => 'No hi ha una funció personalitzada per a aquest projecte.', + // 'New project restriction for the role "%s"' => '', + 'Restriction' => 'Restricció', + 'Remove a project restriction' => 'Eliminar una restricció projecte', + // 'Do you really want to remove this project restriction: "%s"?' => '', + 'Duplicate to multiple projects' => 'Duplica a múltiples projectes', + 'This field is required' => 'Aquest camp és obligatori', + 'Moving a task is not permitted' => 'No està permès moure una tasca', + 'This value must be in the range %d to %d' => 'Aquest valor ha d\'estar en el rang %d a %d', + 'You are not allowed to move this task.' => 'No se li permet moure a aquesta tasca.', + 'API User Access' => 'L\'accés d\'usuari d\'API', + 'Preview' => 'Vista prèvia', + 'Write' => 'escriure', + 'Write your text in Markdown' => 'Escriure el text en Markdown', + 'No personal API access token registered.' => 'Sense accés a l\'API personals símbol registrat.', + // 'Your personal API access token is "%s"' => '', + 'Remove your token' => 'Traieu el testimoni', + 'Generate a new token' => 'Generar un nou token', + // 'Showing %d-%d of %d' => '', + 'Outgoing Emails' => 'Els correus electrònics sortints', + 'Add or change currency rate' => 'Afegeix o canviar el valor de moneda', + 'Reference currency: %s' => 'moneda de referència: %s', + 'Add custom filters' => 'Afegeix filtres personalitzats', + 'Export' => 'exportació', + 'Add link label' => 'Afegeix etiqueta d\'enllaç', + 'Incompatible Plugins' => 'Connectors incompatibles', + 'Compatibility' => 'Compatibilitat', + 'Permissions and ownership' => 'Permisos i propietat', + 'Priorities' => 'Prioritats', + 'Close this window' => 'Tanca aquesta finestra', + 'Unable to upload this file.' => 'No es pot carregar aquest arxiu.', + 'Import tasks' => 'Importació de tasques', + 'Choose a project' => 'Tria un projecte', + 'Profile' => 'Perfil', + 'Application role' => 'Rol d\'aplicació', + '%d invitations were sent.' => 'S\'han enviat %d invitacions.', + '%d invitation was sent.' => 'S\'han enviat %d invitacions.', + 'Unable to create this user.' => 'No es pot crear aquest usuari.', + 'Kanboard Invitation' => 'Invitació Kanboard', + 'Visible on dashboard' => 'Visible al tauler', + 'Created at:' => 'Creat el:', + 'Updated at:' => 'Actualitzat a:', + 'There is no custom filter.' => 'No hi ha cap filtre personal.', + 'New User' => 'Nou usuari', + 'Authentication' => 'Autenticació', + 'If checked, this user will use a third-party system for authentication.' => 'Si s\'activa, aquest usuari utilitzarà un sistema de tercers per a l\'autenticació.', + 'The password is necessary only for local users.' => 'La contrasenya és necessària només per als usuaris locals.', + 'You have been invited to register on Kanboard.' => 'T\'han convidat a inscriure\'t al Kanboard.', + 'Click here to join your team' => 'Fes clic aquí per unir-te a l\'equip', + 'Invite people' => 'Convidar a més gent', + 'Emails' => 'Correus electrònics', + 'Enter one email address by line.' => 'Introdueix una adreça de correu electrònic per línia.', + 'Add these people to this project' => 'Afegeix a aquestes persones a aquest projecte', + 'Add this person to this project' => 'Afegeix aquesta persona a aquest projecte', + 'Sign-up' => 'Registra\'t', + 'Credentials' => 'Credencials', + 'New user' => 'Nou usuari', + 'This username is already taken' => 'Aquest nom d\'usuari ja està en ús', + 'A link to reset your password has been sent by email.' => 'S\'ha enviat per correu eletrònic un enllaç per restablir la contrasenya.', + 'Your profile must have a valid email address.' => 'El teu perfil ha de tenir una adreça de correu electrònic vàlida.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Per desgràcia, no som capaços de restablir la contrasenya. ¿S\'ha introduït un nom d\'usuari vàlid? Té una adreça de correu electrònic en el seu perfil?', + 'TRL - Turkish Lira' => 'TRL - Lira turca', + 'The project email is optional and could be used by several plugins.' => 'El correu electrònic del projecte és opcional i pot ser utilitzat per diversos connectors.', + 'The project email must be unique across all projects' => 'El correu electrònic del projecte ha de ser únic en tots els projectes', + 'The email configuration has been disabled by the administrator.' => 'La configuració de correu electrònic ha estat desactivat per l\'administrador.', + 'Close this project' => 'Tanca aquest projecte', + 'Open this project' => 'Obre aquest projecte', + 'Close a project' => 'Tanca un projecte', + // 'Do you really want to close this project: "%s"?' => '', + 'Reopen a project' => 'Torna a obrir un projecte', + // 'Do you really want to reopen this project: "%s"?' => '', + 'This project is open' => 'Aquest projecte està obert', + 'This project is closed' => 'Aquest projecte està tancat', + 'Unable to upload files, check the permissions of your data folder.' => 'No es pot pujar arxius, comprovar els permisos de la carpeta de dades.', + 'Another category with the same name exists in this project' => 'Una altra categoria amb el mateix nom existeix en aquest projecte', + 'Comment sent by email successfully.' => 'Comentar enviat per correu electrònic amb èxit.', + // 'Sent by email to [%s](mailto:%s) (%s)' => '', + 'Unable to read uploaded file.' => 'No es pot llegir el fitxer pujat.', + 'Database uploaded successfully.' => 'Base de dades carregat correctament.', + 'Task sent by email successfully.' => 'Tasca enviat per correu electrònic amb èxit.', + 'There is no category in this project.' => 'No hi ha una categoria en aquest projecte.', + 'Send by email' => 'Envia per correu electrònic', + 'Create and send a comment by email' => 'Per crear i enviar un comentari per correu electrònic', + 'Subject' => 'Tema', + 'Upload the database' => 'Puja la base de dades', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Es podia pujar la base de dades SQLite prèviament descarregat (format gzip).', + 'Database file' => 'arxiu de base', + 'Upload' => 'Pujar', + 'Your project must have at least one active swimlane.' => 'El seu projecte ha de tenir com a mínim un swimlane actiu.', + 'Project: %s' => 'Projecte: %s', + // 'Automatic action not found: "%s"' => '', + '%d projects' => '%d projectes', + '%d project' => '%d projecte', + 'There is no project.' => 'No hi ha cap projecte.', + 'Sort' => 'Ordena', + 'Project ID' => 'identificació del projecte', + 'Project name' => 'Nom del projecte', + 'Public' => 'Públic', + 'Private' => 'Privat', + '%d tasks' => '%d tasques', + '%d task' => '%d tasca', + 'Task ID' => 'ID de tasca', + 'Assign automatically a color when due date is expired' => 'Assignar automàticament un color quan ha caducat la data de venciment', + 'Total score in this column across all swimlanes' => 'Puntuació total d\'aquesta columna a través de tots swimlanes', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Pes Argentí', + 'COP - Colombian Peso' => 'COP - Pes colombià', + '%d groups' => '%d grups', + '%d group' => '%d grup', + 'Group ID' => 'ID de grup', + 'External ID' => 'Identificació externa', + '%d users' => '%d usuaris', + '%d user' => '%d usuari', + 'Hide subtasks' => 'Amaga subtasques', + 'Show subtasks' => 'Mostra subtasques', + 'Authentication Parameters' => 'Paràmetres d\'autenticació', + 'API Access' => 'Accés API', + 'No users found.' => 'No es van trobar usuaris.', + 'User ID' => 'ID d\'usuari', + 'Notifications are activated' => 'Notificacions habilitades', + 'Notifications are disabled' => 'Notificacions inhabilitades', + 'User disabled' => 'Usuari deshabilitat', + '%d notifications' => '%d notificacions', + '%d notification' => '%d notificació', + 'There is no external integration installed.' => 'No hi ha integració externa instal·lada.', + 'You are not allowed to update tasks assigned to someone else.' => 'No se li permet posar al dia les tasques assignades a una altra persona.', + 'You are not allowed to change the assignee.' => 'No se li permet canviar el assignat.', + 'Task suppression is not permitted' => 'No es permet la supressió de tasques', + 'Changing assignee is not permitted' => 'No es permet el canvi de assignatari', + 'Update only assigned tasks is permitted' => 'Actualitzar les tasques assignades només es permet', + 'Only for tasks assigned to the current user' => 'Només per a les tasques assignades a l\'usuari actual', + 'My projects' => 'Els meus projectes', + 'Your are not member of any project.' => 'No és membre de cap projecte.', + 'My subtasks' => 'Les meves subtasques', + '%d subtasks' => '%d subtasques', + '%d subtask' => '%d subtasca', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Only moving task between those columns is permitted for tasks assigned to the current user', + '[DUPLICATE]' => '[DUPLICATE]', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', +); diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php index f32453a1..dce15afe 100644 --- a/app/Locale/cs_CZ/translations.php +++ b/app/Locale/cs_CZ/translations.php @@ -3,7 +3,7 @@ return array( 'number.decimals_separator' => ',', 'number.thousands_separator' => '.', - 'None' => 'žádné', + 'None' => 'Žádné', 'Edit' => 'Editovat', 'Remove' => 'Odstranit', 'Yes' => 'Ano', @@ -17,15 +17,15 @@ return array( 'Red' => 'Červená', 'Orange' => 'Oranžová', 'Grey' => 'Šedá', - // 'Brown' => '', - // 'Deep Orange' => '', - // 'Dark Grey' => '', - // 'Pink' => '', - // 'Teal' => '', - // 'Cyan' => '', - // 'Lime' => '', - // 'Light Green' => '', - // 'Amber' => '', + 'Brown' => 'Hnědá', + 'Deep Orange' => 'Tmavě oranžová', + 'Dark Grey' => 'Tmavě šedá', + 'Pink' => 'Růžová', + 'Teal' => 'Modrozelená', + 'Cyan' => 'Tyrkysová', + 'Lime' => 'Limetková', + 'Light Green' => 'Světle zelená', + 'Amber' => 'Jantarová', 'Save' => 'Uložit', 'Login' => 'Přihlásit se', 'Official website:' => 'Oficiální stránky:', @@ -37,9 +37,8 @@ return array( 'Username' => 'Uživatelské jméno', 'Password' => 'Heslo', 'Administrator' => 'Administrátor', - 'Sign in' => 'Registrace', + 'Sign in' => 'Přihlásit', 'Users' => 'Uživatelé', - 'No user' => 'Žádný uživatel', 'Forbidden' => 'Zakázat projekt', 'Access Forbidden' => 'Přístup zakázán', 'Edit user' => 'Upravit uživatele', @@ -182,7 +181,7 @@ return array( 'Position' => 'Pozice', 'Duplicate to another project' => 'Vytvořit kopii v jiném projektu', 'Duplicate' => 'Vytvořit kopii', - 'Link' => 'Link', + 'Link' => 'Odkaz', 'Comment updated successfully.' => 'Komentář byl úspěšně aktualizován.', 'Unable to update your comment.' => 'Nelze upravit Váš komentář.', 'Remove a comment' => 'Odebrat komentář', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Dílčí úkol byl aktualizován.', 'Unable to update your sub-task.' => 'Nelze aktualizovat dílčí úkol.', 'Unable to create your sub-task.' => 'Nelze vytvořit dílčí úkol.', - 'Sub-task added successfully.' => 'Dílčí úkol byl úspěšně přidán.', 'Maximum size: ' => 'Maximální velikost: ', 'Display another project' => 'Zobrazit jiný projekt', 'Created by %s' => 'Vytvořeno uživatelem %s', @@ -293,8 +291,8 @@ return array( 'The task #%d have been opened.' => 'Úkol #%d byl znovu otevřen.', 'The task #%d have been closed.' => 'Úkol #%d byl uzavřen.', 'Sub-task updated' => 'Dílčí úkol byl aktualizován', - 'Title:' => 'Nadpis', - 'Status:' => 'Stav', + 'Title:' => 'Nadpis:', + 'Status:' => 'Stav:', 'Assignee:' => 'Přiřazeno:', 'Time tracking:' => 'Sledování času:', 'New sub-task' => 'Nový dílčí úkol', @@ -368,10 +366,10 @@ return array( 'Change the assignee based on an external username' => 'Změna přiřazení uživatele závislá na externím uživateli', 'Change the category based on an external label' => 'Změna kategorie závislá na externím popisku', 'Reference' => 'Reference', - // 'Label' => '', - 'Database' => 'Datenbank', + 'Label' => 'Značka', + 'Database' => 'Databáze', 'About' => 'O projektu', - 'Database driver:' => 'Databáze', + 'Database driver:' => 'Databázový ovladač', 'Board settings' => 'Nastavení nástěnky', 'Webhook settings' => 'Webhook nastavení', 'Reset token' => 'Token reset', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Přehled aktivit', 'Dashboard' => 'Nástěnka', 'Confirmation' => 'Potvrzení', - 'Allow everybody to access to this project' => 'Umožní přístup komukoliv k tomuto projektu', - 'Everybody have access to this project.' => 'Přístup k tomuto projektu má kdokoliv.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Vytvořit komentář pomocí externího poskytovatele', 'Project management' => 'Správa projektů', - 'My projects' => 'Moje projekty', 'Columns' => 'Sloupce', 'Task' => 'Úkol', - 'Your are not member of any project.' => 'V žádném projektu nejste členem.', 'Percentage' => 'Procenta', 'Number of tasks' => 'Počet úkolů', 'Task distribution' => 'Rozdělení úkolů', 'Analytics' => 'Analýza', 'Subtask' => 'Dílčí úkoly', - 'My subtasks' => 'Moje dílčí úkoly', 'User repartition' => 'Rozdělení podle uživatelů', 'Clone this project' => 'Duplokovat projekt', 'Column removed successfully.' => 'Sloupec byl odstraněn.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Jazyk:', 'Timezone:' => 'Časová zóna:', 'All columns' => 'Všechny sloupce', - 'Calendar' => 'Kalendář', 'Next' => 'Další', // '#%d' => '', 'All swimlanes' => 'Alle Swimlanes', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Nelze přidat tento směnný kurz', 'Webhook URL' => 'Webhook URL', '%s removed the assignee of the task %s' => '%s odstranil přiřazení úkolu %s ', - 'Enable Gravatar images' => 'Aktiviere Gravatar Bilder', 'Information' => 'Informace', 'Check two factor authentication code' => 'Zkontrolujte dvouúrovňový autentifikační klíč', 'The two factor authentication code is not valid.' => 'Dvouúrovňový autentifikační klíč není platný.', @@ -572,7 +563,7 @@ return array( '%s via Kanboard' => '%s via Kanboard', 'Burndown chart' => 'Burndown-Chart', 'This chart show the task complexity over the time (Work Remaining).' => 'Graf zobrazuje složitost úkolů v čase (Zbývající práce).', - 'Screenshot taken %s' => 'Screenshot aufgenommen %s ', + 'Screenshot taken %s' => 'Snímek obrazovky pořízen %s ', 'Add a screenshot' => 'Přidat snímek obrazovky', 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Pořiďte snímek obrazovky a v tomto poli stiskněte Ctrl+V nebo ⌘+V ', 'Screenshot uploaded successfully.' => 'Snímek obrazovky byl úspěšně nahrán.', @@ -580,45 +571,38 @@ return array( 'Identifier' => 'Identifikátor', 'Disable two factor authentication' => 'Zrušit dvouúrovňovou autorizaci', 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Opravdu chcete vypnout dvouúrovňovou autentifikaci pro uživatele: "%s"?', - // 'Edit link' => '', + 'Edit link' => 'Upravit odkaz', // 'Start to type task title...' => '', // 'A task cannot be linked to itself' => '', - // 'The exact same link already exists' => '', + 'The exact same link already exists' => 'Stejný odkaz již existuje', // 'Recurrent task is scheduled to be generated' => '', - // 'Score' => '', - // 'The identifier must be unique' => '', - // 'This linked task id doesn\'t exists' => '', - // 'This value must be alphanumeric' => '', + 'Score' => 'Skóre', + 'The identifier must be unique' => 'Identifikátor musí být unikátní', + 'This linked task id doesn\'t exists' => 'Tento odkazovaný úkol neexistuje', + 'This value must be alphanumeric' => 'Tato hodnota musí být alfanumerická', 'Edit recurrence' => 'Upravit opakování', - // 'Generate recurrent task' => '', - // 'Trigger to generate recurrent task' => '', - // 'Factor to calculate new due date' => '', - // 'Timeframe to calculate new due date' => '', - // 'Base date to calculate new due date' => '', - // 'Action date' => '', - // 'Base date to calculate new due date: ' => '', - // 'This task has created this child task: ' => '', - // 'Day(s)' => '', - // 'Existing due date' => '', - // 'Factor to calculate new due date: ' => '', - // 'Month(s)' => '', - // 'Recurrence' => '', - // 'This task has been created by: ' => '', - // 'Recurrent task has been generated:' => '', - // 'Timeframe to calculate new due date: ' => '', - // 'Trigger to generate recurrent task: ' => '', - // 'When task is closed' => '', - // 'When task is moved from first column' => '', - // 'When task is moved to last column' => '', - // 'Year(s)' => '', - 'Calendar settings' => 'Nastavení kalendáře', - // 'Project calendar view' => '', + 'Generate recurrent task' => 'Generovat opakující se úkol', + 'Trigger to generate recurrent task' => 'Spouštěč pro generování opakujícího se úkolu', + 'Factor to calculate new due date' => 'Faktor pro výpočet nového data splnění', + 'Timeframe to calculate new due date' => 'Časové okno pro výpočet nového data splnění', + 'Base date to calculate new due date' => 'Výchozí datum pro výpočet nového data splnění', + 'Action date' => 'Datum akce', + 'Base date to calculate new due date: ' => 'Výchozí datum pro výpočet nového data splnění: ', + 'This task has created this child task: ' => 'Tento úkol vygeneroval následující podúkol: ', + 'Day(s)' => 'Dny', + 'Existing due date' => 'Existující datum splnění', + 'Factor to calculate new due date: ' => 'Faktor pro výpočet nového data splnění: ', + 'Month(s)' => 'Měsíce', + 'Recurrence' => 'Opakování', + 'This task has been created by: ' => 'Tento úkol vytvořil: ', + 'Recurrent task has been generated:' => 'Opakující se úkol vygeneroval: ', + 'Timeframe to calculate new due date: ' => 'Časové okno pro výpočet nového data splnění: ', + 'Trigger to generate recurrent task: ' => 'Spouštěč pro generování opakujícího se úkolu: ', + 'When task is closed' => 'Když je úkol uzavřen', + 'When task is moved from first column' => 'Když je úkol přesunut z prvního sloupce', + 'When task is moved to last column' => 'Když je úkol přesunut do posleního sloupce', + 'Year(s)' => 'Roky', 'Project settings' => 'Nastavení projektu', - 'Show subtasks based on the time tracking' => 'Zobrazit dílčí úkoly závislé na sledování času', - 'Show tasks based on the creation date' => 'Zobrazit úkoly podle datumu vytvoření', - 'Show tasks based on the start date' => 'Zobrazit úkoly podle datumu zahájení', - 'Subtasks time tracking' => 'Dílčí úkoly s časovačem', - 'User calendar view' => 'Zobrazení kalendáře uživatele', 'Automatically update the start date' => 'Automaticky aktualizovat počáteční datum', // 'iCal feed' => '', 'Preferences' => 'Předvolby', @@ -636,8 +620,7 @@ return array( 'Reopen a task' => 'Znovu otevřít úkol', 'Notification' => 'Upozornění', '%s moved the task #%d to the first swimlane' => '%s přesunul úkol #%d do první dráhy', - // 'Swimlane' => '', - // 'Gravatar' => '', + 'Swimlane' => 'Dráha', '%s moved the task %s to the first swimlane' => '%s přesunul úkol %s do první dráhy', '%s moved the task %s to the swimlane "%s"' => '%s přesunul úkol %s do dráhy "%s"', 'This report contains all subtasks information for the given date range.' => 'Report obsahuje všechny informace o dílčích úkolech pro daný časový úsek', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Zastavit časovač', 'Start timer' => 'Spustit časovač', 'My activity stream' => 'Přehled mých aktivit', - 'My calendar' => 'Můj kalendář', 'Search tasks' => 'Hledání úkolů', 'Reset filters' => 'Resetovat filtry', 'My tasks due tomorrow' => 'Moje zítřejší úkoly', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Přehled', 'Board/Calendar/List view' => 'Nástěnka/Kalendář/Zobrazení seznamu', 'Switch to the board view' => 'Přepnout na nástěnku', - 'Switch to the calendar view' => 'Přepnout na kalendář', 'Switch to the list view' => 'Přepnout na seznam zobrazení', 'Go to the search/filter box' => 'Zobrazit vyhledávání/filtrování', 'There is no activity yet.' => 'Doposud nejsou žádné aktivity.', @@ -743,47 +724,33 @@ return array( 'License:' => 'Licence:', 'License' => 'Licence', 'Enter the text below' => 'Zadejte text níže', - 'Sort by position' => 'Třídit podle pozice', - 'Sort by date' => 'Třídit podle datumu', - 'Add task' => 'Přidat úkol', 'Start date:' => 'Termín zahájení:', 'Due date:' => 'Termín dokončení:', - 'There is no start date or due date for this task.' => 'Úkol nemá nastaven termín zahájení a dokončení.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Posunutím nebo prodloužením úkolu se změní počáteční a konečné datum úkolu. ', - 'There is no task in your project.' => 'Projekt neobsahuje žádné úkoly.', - 'Gantt chart' => 'Gantt graf', - // 'People who are project managers' => '', - // 'People who are project members' => '', + 'People who are project managers' => 'Lidé, kteří jsou správci projektu', + 'People who are project members' => 'Lidé, kteří jsou členové projektu', // 'NOK - Norwegian Krone' => '', - // 'Show this column' => '', - // 'Hide this column' => '', - // 'open file' => '', - // 'End date' => '', - // 'Users overview' => '', - // 'Members' => '', - // 'Shared project' => '', - // 'Project managers' => '', - // 'Gantt chart for all projects' => '', - // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', - // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', - // 'Change task color when using a specific task link' => '', - // 'Task link creation or modification' => '', - // 'Milestone' => '', - // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', - // 'Reset the search/filter box' => '', - // 'Documentation' => '', - // 'Table of contents' => '', - // 'Gantt' => '', + 'Show this column' => 'Zobrazit tento sloupec', + 'Hide this column' => 'Skrýt tento sloupec', + 'open file' => 'otevřít soubor', + 'End date' => 'Datum konce', + 'Users overview' => 'Přehled uživatelů', + 'Members' => 'Členové', + 'Shared project' => 'Sdílený projekt', + 'Project managers' => 'Správci projektu', + 'Projects list' => 'Seznam projektů', + 'End date:' => 'Datum konce: ', + 'Change task color when using a specific task link' => 'Změnit barvu úkolu při použití konkrétního odkazu na úkol', + 'Task link creation or modification' => 'Vytvoření, nebo změna odkazu na úkol', + 'Milestone' => 'Milník', + 'Documentation: %s' => 'Dokumentace %s', + 'Reset the search/filter box' => 'Vyresetovat pole pro vyhledávání/filtrování', + 'Documentation' => 'Dokumentace', + 'Table of contents' => 'Obsah', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', // 'There is no plugin loaded.' => '', - // 'My notifications' => '', + 'My notifications' => 'Moje oznámení', // 'Custom filters' => '', // 'Your custom filter have been created successfully.' => '', // 'Unable to create your custom filter.' => '', @@ -793,34 +760,34 @@ return array( // 'Your custom filter have been updated successfully.' => '', // 'Unable to update custom filter.' => '', // 'Web' => '', - // 'New attachment on task #%d: %s' => '', - // 'New comment on task #%d' => '', - // 'Comment updated on task #%d' => '', - // 'New subtask on task #%d' => '', - // 'Subtask updated on task #%d' => '', - // 'New task #%d: %s' => '', - // 'Task updated #%d' => '', - // 'Task #%d closed' => '', - // 'Task #%d opened' => '', - // 'Column changed for task #%d' => '', - // 'New position for task #%d' => '', - // 'Swimlane changed for task #%d' => '', - // 'Assignee changed on task #%d' => '', - // '%d overdue tasks' => '', - // 'Task #%d is overdue' => '', - // 'No notification.' => '', - // 'Mark all as read' => '', - // 'Mark as read' => '', - // 'Total number of tasks in this column across all swimlanes' => '', - // 'Collapse swimlane' => '', - // 'Expand swimlane' => '', - // 'Add a new filter' => '', - // 'Share with all project members' => '', - // 'Shared' => '', - // 'Owner' => '', - // 'Unread notifications' => '', - // 'Notification methods:' => '', - // 'Unable to read your file' => '', + 'New attachment on task #%d: %s' => 'Nová příloha u úkolu #%d: %s', + 'New comment on task #%d' => 'Nový komentář u úkolu #%d', + 'Comment updated on task #%d' => 'Komentář u úkolu #%d byl aktualizován', + 'New subtask on task #%d' => 'Nový dílčí úkol u úkolu #%d', + 'Subtask updated on task #%d' => 'Dílčí úkol u úkolu #%d byl aktualizován', + 'New task #%d: %s' => 'Nový úkol #%d: %s', + 'Task updated #%d' => 'Úkol #%d byl aktualizován', + 'Task #%d closed' => 'Úkol #%d byl uzavřen', + 'Task #%d opened' => 'Úkol #%d byl otevřen', + 'Column changed for task #%d' => 'Sloupec úkolu #%d byl změněn', + 'New position for task #%d' => 'Nová pozice úkolu #%d', + 'Swimlane changed for task #%d' => 'Dráha úkolu #%d byla změněna', + 'Assignee changed on task #%d' => 'Vlastník úkolu #%d byl změněn', + '%d overdue tasks' => '%d úkolů po datu splnění', + 'Task #%d is overdue' => 'Úkol #%d je po datu splnění', + 'No notification.' => 'Žádná notifikace.', + 'Mark all as read' => 'Označit vše jako přečtené', + 'Mark as read' => 'Označit jako přečtené', + 'Total number of tasks in this column across all swimlanes' => 'Celkový počet úkolů v tomto sloupci napříč všemi dráhami', + 'Collapse swimlane' => 'Zabalit dráhu', + 'Expand swimlane' => 'Rozbalit dráhu', + 'Add a new filter' => 'Přidat nový filtr', + 'Share with all project members' => 'Sdílet se všemi členy projektu', + 'Shared' => 'Sdíleno', + 'Owner' => 'Vlastník', + 'Unread notifications' => 'Nepřečtené notifikace', + 'Notification methods:' => 'Způsoby notifikací:', + 'Unable to read your file' => 'Nelze přečíst soubor', // '%d task(s) have been imported successfully.' => '', // 'Nothing have been imported!' => '', // 'Import users from CSV file' => '', @@ -877,45 +844,44 @@ return array( // 'Remove group' => '', // 'Group removed successfully.' => '', // 'Unable to remove this group.' => '', - // 'Project Permissions' => '', - // 'Manager' => '', - // 'Project Manager' => '', - // 'Project Member' => '', - // 'Project Viewer' => '', + 'Project Permissions' => 'Oprávnění projektu', + 'Manager' => 'Správce', + 'Project Manager' => 'Správce projektu', + 'Project Member' => 'Člen projektu', + 'Project Viewer' => 'Čtenář projektu', // 'Your account is locked for %d minutes' => '', // 'Invalid captcha' => '', // 'The name must be unique' => '', - // 'View all groups' => '', + 'View all groups' => 'Zobrazit všechny skupiny', // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', - // 'Permissions' => '', - // 'Allowed Users' => '', + 'Permissions' => 'Oprávnění', + 'Allowed Users' => 'Povolení uživatelé', // 'No user have been allowed specifically.' => '', - // 'Role' => '', - // 'Enter user name...' => '', - // 'Allowed Groups' => '', + 'Role' => 'Role', + 'Enter user name...' => 'Zadejte uživatelské jméno...', + 'Allowed Groups' => 'Povolené skupiny', // 'No group have been allowed specifically.' => '', - // 'Group' => '', - // 'Group Name' => '', + 'Group' => 'Skupina', + 'Group Name' => 'Jméno skupiny', // 'Enter group name...' => '', // 'Role:' => '', - // 'Project members' => '', + 'Project members' => 'Členové projektu', // '%s mentioned you in the task #%d' => '', // '%s mentioned you in a comment on the task #%d' => '', // 'You were mentioned in the task #%d' => '', // 'You were mentioned in a comment on the task #%d' => '', // 'Estimated hours: ' => '', // 'Actual hours: ' => '', - // 'Hours Spent' => '', - // 'Hours Estimated' => '', - // 'Estimated Time' => '', - // 'Actual Time' => '', - // 'Estimated vs actual time' => '', + 'Hours Spent' => 'Hodin stráveno', + 'Hours Estimated' => 'Hodin odhadováno', + 'Estimated Time' => 'Odhadovaný čas', + 'Actual Time' => 'Aktuální čas', + 'Estimated vs actual time' => 'Rozdíl mezi odhadovaným a aktuálním časem', // 'RUB - Russian Ruble' => '', // 'Assign the task to the person who does the action when the column is changed' => '', // 'Close a task in a specific column' => '', @@ -925,7 +891,7 @@ return array( // 'Enable two-factor authentication' => '', // 'There is no integration registered at the moment.' => '', // 'Password Reset for Kanboard' => '', - // 'Forgot password?' => '', + 'Forgot password?' => 'Zapomenuté heslo?', // 'Enable "Forget Password"' => '', // 'Password Reset' => '', // 'New password' => '', @@ -933,81 +899,80 @@ return array( // 'To reset your password click on this link:' => '', // 'Last Password Reset' => '', // 'The password has never been reinitialized.' => '', - // 'Creation' => '', + 'Creation' => 'Vytvoření', // 'Expiration' => '', // 'Password reset history' => '', // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', // 'Do you really want to close all tasks of this column?' => '', // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', - // 'Close all tasks of this column' => '', + 'Close all tasks of this column' => 'Uzavřít všechny úkoly v tomto sloupci', // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', - // 'My dashboard' => '', - // 'My profile' => '', - // 'Project owner: ' => '', + 'My dashboard' => 'Moje nástěnka', + 'My profile' => 'Můj profil', + 'Project owner: ' => 'Vlastník projektu: ', // 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => '', - // 'Project owner' => '', - // 'Private projects do not have users and groups management.' => '', - // 'There is no project member.' => '', - // 'Priority' => '', - // 'Task priority' => '', - // 'General' => '', - // 'Dates' => '', - // 'Default priority' => '', - // 'Lowest priority' => '', - // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', - // 'Close a task when there is no activity' => '', - // 'Duration in days' => '', - // 'Send email when there is no activity on a task' => '', + 'Project owner' => 'Vlastník projektu', + 'Private projects do not have users and groups management.' => 'Soukromé projekty nemají správu uživatelů a skupin', + 'There is no project member.' => 'Projekt nemá žádného člena', + 'Priority' => 'Priorita', + 'Task priority' => 'Priorita úkolu', + 'General' => 'Všeobecné', + 'Dates' => 'Termíny', + 'Default priority' => 'Výchozí priorita', + 'Lowest priority' => 'Nejnižší priorita', + 'Highest priority' => 'Nejvyžší priorita', + 'Close a task when there is no activity' => 'Uzavřít úkol pokud není žádná aktivita', + 'Duration in days' => 'Trvání ve dnech', + 'Send email when there is no activity on a task' => 'Odeslat mail pokud není žádná aktivita u úkolu', // 'Unable to fetch link information.' => '', // 'Daily background job for tasks' => '', // 'Auto' => '', - // 'Related' => '', - // 'Attachment' => '', - // 'Title not found' => '', - // 'Web Link' => '', - // 'External links' => '', - // 'Add external link' => '', - // 'Type' => '', - // 'Dependency' => '', - // 'Add internal link' => '', - // 'Add a new external link' => '', - // 'Edit external link' => '', - // 'External link' => '', - // 'Copy and paste your link here...' => '', + 'Related' => 'Související', + 'Attachment' => 'Příloha', + 'Title not found' => 'Název nenalezen', + 'Web Link' => 'Webový odkaz', + 'External links' => 'Externí odkazy', + 'Add external link' => 'Přidat externí odkaz', + 'Type' => 'Typ', + 'Dependency' => 'Závislost', + 'Add internal link' => 'Přidat interní odkaz', + 'Add a new external link' => 'Přidat nový externí odkaz', + 'Edit external link' => 'Upravit externí odkaz', + 'External link' => 'Externí odkaz', + 'Copy and paste your link here...' => 'Zde vložte váš odkaz...', // 'URL' => '', - // 'Internal links' => '', + 'Internal links' => 'Interní odkazy', // 'Assign to me' => '', // 'Me' => '', // 'Do not duplicate anything' => '', - // 'Projects management' => '', - // 'Users management' => '', - // 'Groups management' => '', - // 'Create from another project' => '', - // 'open' => '', - // 'closed' => '', - // 'Priority:' => '', + 'Projects management' => 'Správa projektů', + 'Users management' => 'Správa uživatelů', + 'Groups management' => 'Správa skupin', + 'Create from another project' => 'Vytvořit z jiného projektu', + 'open' => 'otevřeno', + 'closed' => 'uzavřeno', + 'Priority:' => 'Priorita:', // 'Reference:' => '', - // 'Complexity:' => '', - // 'Swimlane:' => '', - // 'Column:' => '', - // 'Position:' => '', - // 'Creator:' => '', - // 'Time estimated:' => '', - // '%s hours' => '', - // 'Time spent:' => '', - // 'Created:' => '', - // 'Modified:' => '', - // 'Completed:' => '', - // 'Started:' => '', - // 'Moved:' => '', - // 'Task #%d' => '', - // 'Time format' => '', - // 'Start date: ' => '', - // 'End date: ' => '', - // 'New due date: ' => '', - // 'Start date changed: ' => '', - // 'Disable private projects' => '', + 'Complexity:' => 'Složitost:', + 'Swimlane:' => 'Dráha:', + 'Column:' => 'Sloupec:', + 'Position:' => 'Pozice:', + 'Creator:' => 'Autor:', + 'Time estimated:' => 'Odhadovaný čas:', + '%s hours' => '%s hodin', + 'Time spent:' => 'Strávený čas:', + 'Created:' => 'Vytvořeno:', + 'Modified:' => 'Změněno:', + 'Completed:' => 'Dokončeno:', + 'Started:' => 'Započato:', + 'Moved:' => 'Přesunuto', + 'Task #%d' => 'Úkol #%d', + 'Time format' => 'Časový formát', + 'Start date: ' => 'Počáteční datum', + 'End date: ' => 'Koncové datum', + 'New due date: ' => 'Nové datum splnění', + 'Start date changed: ' => 'Počáteční datum změněno: ', + 'Disable private projects' => 'Zakázat soukromé projekty', // 'Do you really want to remove this custom filter: "%s"?' => '', // 'Remove a custom filter' => '', // 'User activated successfully.' => '', @@ -1133,13 +1098,13 @@ return array( // 'Tag removed successfully.' => '', // 'Unable to remove this tag.' => '', // 'Global tags management' => '', - // 'Tags' => '', - // 'Tags management' => '', - // 'Add new tag' => '', - // 'Edit a tag' => '', - // 'Project tags' => '', + 'Tags' => 'Štítky', + 'Tags management' => 'Správa štítků', + 'Add new tag' => 'Přidat nový štítek', + 'Edit a tag' => 'Upravit štítek', + 'Project tags' => 'Štítky projektu', // 'There is no specific tag for this project at the moment.' => '', - // 'Tag' => '', + 'Tag' => 'Štítek', // 'Remove a tag' => '', // 'Do you really want to remove this tag: "%s"?' => '', // 'Global tags' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1293,9 +1255,9 @@ return array( // 'The project email is optional and could be used by several plugins.' => '', // 'The project email must be unique across all projects' => '', // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', + 'Close this project' => 'Uzavřít tento projekt', + 'Open this project' => 'Otevřít tento projekt', + 'Close a project' => 'Uzavřít projekt', // 'Do you really want to close this project: "%s"?' => '', // 'Reopen a project' => '', // 'Do you really want to reopen this project: "%s"?' => '', @@ -1316,14 +1278,13 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', // '%d projects' => '', // '%d project' => '', // 'There is no project.' => '', - // 'Sort' => '', + 'Sort' => 'Seřadit', // 'Project ID' => '', // 'Project name' => '', // 'Public' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + 'My projects' => 'Moje projekty', + // 'Your are not member of any project.' => '', + 'My subtasks' => 'Moje dílčí úkoly', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + '[DUPLICATE]' => '[KOPIE]', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index fd4a7ecb..2149920d 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Log ind', 'Users' => 'Brugere', - 'No user' => 'Ingen bruger', 'Forbidden' => 'Forbudt', 'Access Forbidden' => 'Adgang nægtet', 'Edit user' => 'Rediger bruger', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Under-opgaven er opdateret.', 'Unable to update your sub-task.' => 'Under-opgaven kunne ikke opdateres.', 'Unable to create your sub-task.' => 'Under-opgaven kunne ikke oprettes.', - 'Sub-task added successfully.' => 'Under-opgaven er tilføjet.', 'Maximum size: ' => 'Maksimum størrelse: ', 'Display another project' => 'Vis et andet projekt...', 'Created by %s' => 'Oprettet af %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Aktivitets strøm', 'Dashboard' => 'Dashboard', 'Confirmation' => 'Bekræftelse', - 'Allow everybody to access to this project' => 'Tillad adgang for alle til dette projekt', - 'Everybody have access to this project.' => 'Alle har adgang til dette projekt', // 'Webhooks' => '', // 'API' => '', // 'Create a comment from an external provider' => '', 'Project management' => 'Projektstyrring', - 'My projects' => 'Mine projekter', 'Columns' => 'Kolonner', 'Task' => 'Opgave', - 'Your are not member of any project.' => 'Du er ikke medlem af nogen projekter.', 'Percentage' => 'Procent', // 'Number of tasks' => '', 'Task distribution' => 'Opgave distribution', 'Analytics' => 'Analyse', 'Subtask' => 'Under-opgave', - 'My subtasks' => 'Mine under-opgaver', // 'User repartition' => '', 'Clone this project' => 'Kopier dette projekt', // 'Column removed successfully.' => '', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Sprog', 'Timezone:' => 'Tidszone', 'All columns' => 'Alle kolonner', - 'Calendar' => 'Kalender', 'Next' => 'Næste', // '#%d' => '', 'All swimlanes' => 'Alle spor', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', // 'Webhook URL' => '', // '%s removed the assignee of the task %s' => '', - // 'Enable Gravatar images' => '', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -611,14 +602,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', 'Year(s)' => 'År', - 'Calendar settings' => 'Kalender indstillinger', - 'Project calendar view' => 'Projekt kalender visning', 'Project settings' => 'Projekt indstillinger', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - 'User calendar view' => 'Bruger kalender visning', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Præferencer', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Notifikation', // '%s moved the task #%d to the first swimlane' => '', 'Swimlane' => 'Spor', - // 'Gravatar' => '', // '%s moved the task %s to the first swimlane' => '', // '%s moved the task %s to the swimlane "%s"' => '', // 'This report contains all subtasks information for the given date range.' => '', @@ -674,7 +657,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', 'My activity stream' => 'Min aktivitets strøm', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Søg opgaver', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Overblik', 'Board/Calendar/List view' => 'Tavle/Kalender/Liste visning', 'Switch to the board view' => 'Skift til tavle visning', - 'Switch to the calendar view' => 'Skift til kalender visning', 'Switch to the list view' => 'Skift til liste visning', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', @@ -743,15 +724,8 @@ return array( // 'License:' => '', // 'License' => '', // 'Enter the text below' => '', - 'Sort by position' => 'Sorter udfra position', - 'Sort by date' => 'Sorter ud fra dato', - 'Add task' => 'Tilføj opgave', 'Start date:' => 'Start dato:', 'Due date:' => 'Forfaldsdato:', - // 'There is no start date or due date for this task.' => '', - 'Moving or resizing a task will change the start and due date of the task.' => 'Hvis du flytter eller trækker i en opgave vil det ændre start -og forfaldsdato', - 'There is no task in your project.' => 'Der er ikke nogle opgaver i dette projekt', - // 'Gantt chart' => '', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( 'Members' => 'Medlemmer', 'Shared project' => 'Delt projekt', 'Project managers' => 'Projekt managers', - 'Gantt chart for all projects' => 'Gantt chart for alle projekter', 'Projects list' => 'Projekt liste', - 'Gantt chart for this project' => 'Gantt chart for dette projekt', - 'Project board' => 'Projekt tavle', 'End date:' => 'Slut dato:', - 'There is no start date or end date for this project.' => 'Der er ikke nogen start eller slut dato for dette projekt.', - 'Projects Gantt chart' => 'Gantt chart på Projekter', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', 'Milestone' => 'Milepæl', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', // 'Documentation' => '', // 'Table of contents' => '', - // 'Gantt' => '', 'Author' => 'Forfatter', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', 'Add group member' => 'Tilføj gruppe medlem', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Standard prioritet', 'Lowest priority' => 'Laveste prioritet', 'Highest priority' => 'Højeste prioritet', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Hvis du sætter et nul i både højelse og laveste prioritet, vil denne funktion blive deaktiveret', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( 'Preview' => 'Forhåndsvisning', 'Write' => 'Skriv', 'Write your text in Markdown' => 'Skriv din tekst i Markdown', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 2b554c9d..1499fcdc 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Anmelden', 'Users' => 'Benutzer', - 'No user' => 'Kein Benutzer', 'Forbidden' => 'Verboten', 'Access Forbidden' => 'Zugriff verboten', 'Edit user' => 'Benutzer bearbeiten', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Teilaufgabe erfolgreich aktualisiert.', 'Unable to update your sub-task.' => 'Aktualisieren der Teilaufgabe nicht möglich.', 'Unable to create your sub-task.' => 'Erstellen der Teilaufgabe nicht möglich.', - 'Sub-task added successfully.' => 'Teilaufgabe erfolgreich angelegt.', 'Maximum size: ' => 'Maximalgröße: ', 'Display another project' => 'Zu Projekt wechseln', 'Created by %s' => 'Erstellt durch %s', @@ -360,8 +358,8 @@ return array( 'Default values are "%s"' => 'Die Standardwerte sind "%s"', 'Default columns for new projects (Comma-separated)' => 'Standardspalten für neue Projekte (komma-getrennt)', 'Task assignee change' => 'Zuständigkeit geändert', - '%s changed the assignee of the task #%d to %s' => '%s hat die Zusständigkeit der Aufgabe #%d geändert um %s', - '%s changed the assignee of the task %s to %s' => '%s hat die Zuständigkeit der Aufgabe %s geändert um %s', + '%s changed the assignee of the task #%d to %s' => '%s hat die Zuständigkeit der Aufgabe #%d geändert zu %s', + '%s changed the assignee of the task %s to %s' => '%s hat die Zuständigkeit der Aufgabe %s geändert zu %s', 'New password for the user "%s"' => 'Neues Passwort des Benutzers "%s"', 'Choose an event' => 'Aktion wählen', 'Create a task from an external provider' => 'Eine Aufgabe durch einen externen Provider hinzufügen', @@ -396,35 +394,30 @@ return array( 'Activity stream' => 'Letzte Aktivitäten', 'Dashboard' => 'Dashboard', 'Confirmation' => 'Wiederholung', - 'Allow everybody to access to this project' => 'Jedem Zugriff zu diesem Projekt gewähren', - 'Everybody have access to this project.' => 'Jeder hat Zugriff zu diesem Projekt', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Kommentar eines externen Providers hinzufügen', 'Project management' => 'Projektmanagement', - 'My projects' => 'Meine Projekte', 'Columns' => 'Spalten', 'Task' => 'Aufgabe', - 'Your are not member of any project.' => 'Sie sind nicht Mitglied eines Projekts.', 'Percentage' => 'Prozentsatz', 'Number of tasks' => 'Anzahl an Aufgaben', 'Task distribution' => 'Aufgabenverteilung', 'Analytics' => 'Analyse', 'Subtask' => 'Teilaufgabe', - 'My subtasks' => 'Meine Teilaufgaben', 'User repartition' => 'Benutzerverteilung', 'Clone this project' => 'Projekt kopieren', 'Column removed successfully.' => 'Spalte erfolgreich entfernt.', 'Not enough data to show the graph.' => 'Nicht genügend Daten, um die Grafik zu zeigen.', 'Previous' => 'Vorherige', - 'The id must be an integer' => 'Die Id muss eine ganze Zahl sein', + 'The id must be an integer' => 'Die ID muss eine ganze Zahl sein', 'The project id must be an integer' => 'Der Projekt-ID muss eine ganze Zahl sein', 'The status must be an integer' => 'Der Status muss eine ganze Zahl sein', 'The subtask id is required' => 'Die Teilaufgaben-ID ist benötigt', 'The subtask id must be an integer' => 'Die Teilaufgaben-ID muss eine ganze Zahl sein', 'The task id is required' => 'Die Aufgaben-ID ist benötigt', - 'The task id must be an integer' => 'Die Aufgaben-ID muss eine ganze Zahl sein', - 'The user id must be an integer' => 'Die User-ID muss eine ganze Zahl sein', + 'The task id must be an integer' => 'Die Aufgaben ID muss eine ganze Zahl sein', + 'The user id must be an integer' => 'Die Benutzer ID muss eine ganze Zahl sein', 'This value is required' => 'Dieser Wert ist erforderlich', 'This value must be numeric' => 'Dieser Wert muss nummerisch sein', 'Unable to create this task.' => 'Diese Aufgabe kann nicht erstellt werden', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Sprache:', 'Timezone:' => 'Zeitzone:', 'All columns' => 'Alle Spalten', - 'Calendar' => 'Kalender', 'Next' => 'Nächste', '#%d' => 'Nr %d', 'All swimlanes' => 'Alle Swimlanes', @@ -540,7 +532,7 @@ return array( // 'CNY - Chinese Yuan' => '', 'USD - US Dollar' => 'USD - US-Dollar', 'Destination column' => 'Zielspalte', - 'Move the task to another column when assigned to a user' => 'Aufgabe in eine andere Spalte verschieben, wenn ein User zugeordnet wurde.', + 'Move the task to another column when assigned to a user' => 'Aufgabe in eine andere Spalte verschieben, wenn ein Benutzer zugeordnet wurde.', 'Move the task to another column when assignee is cleared' => 'Aufgabe in eine andere Spalte verschieben, wenn die Zuordnung gelöscht wurde.', 'Source column' => 'Quellspalte', 'Transitions' => 'Übergänge', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Währungskurs konnte nicht hinzugefügt werden', 'Webhook URL' => 'Webhook-URL', '%s removed the assignee of the task %s' => '%s Zuordnung für die Aufgabe %s entfernen', - 'Enable Gravatar images' => 'Aktiviere Gravatar-Bilder', 'Information' => 'Information', 'Check two factor authentication code' => 'Prüfe Zwei-Faktor-Authentifizierungscode', 'The two factor authentication code is not valid.' => 'Der Zwei-Faktor-Authentifizierungscode ist ungültig.', @@ -572,14 +563,14 @@ return array( '%s via Kanboard' => '%s via Kanboard', 'Burndown chart' => 'Burndown-Diagramm', 'This chart show the task complexity over the time (Work Remaining).' => 'Dieses Diagramm zeigt die Aufgabenkomplexität über den Faktor Zeit (Verbleibende Arbeit).', - 'Screenshot taken %s' => 'Screenshot aufgenommen %s ', + 'Screenshot taken %s' => 'Screenshot aufgenommen %s', 'Add a screenshot' => 'Screenshot hinzufügen', 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Nimm einen Screenshot auf und drücke STRG+V oder ⌘+V um ihn hier einzufügen.', 'Screenshot uploaded successfully.' => 'Screenshot erfolgreich hochgeladen.', 'SEK - Swedish Krona' => 'SEK - Schwedische Kronen', 'Identifier' => 'Identifikator', 'Disable two factor authentication' => 'Deaktiviere Zwei-Faktor-Authentifizierung', - 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Willst du wirklich für folgenden Nutzer die Zwei-Faktor-Authentifizierung deaktivieren: "%s"?', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Willst du wirklich für folgenden Benutzer die Zwei-Faktor-Authentifizierung deaktivieren: "%s"?', 'Edit link' => 'Verbindung bearbeiten', 'Start to type task title...' => 'Beginne mit der Titeleingabe...', 'A task cannot be linked to itself' => 'Eine Aufgabe kann nicht mit sich selber verbunden werden', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Wenn Aufgabe von erster Spalte verschoben wird', 'When task is moved to last column' => 'Wenn Aufgabe in letzte Spalte verschoben wird', 'Year(s)' => 'Jahr(e)', - 'Calendar settings' => 'Kalender-Einstellungen', - 'Project calendar view' => 'Projekt-Kalendarsicht', 'Project settings' => 'Projekteinstellungen', - 'Show subtasks based on the time tracking' => 'Zeige Teilaufgaben basierend auf Zeiterfassung', - 'Show tasks based on the creation date' => 'Zeige Aufgaben basierend auf Erstelldatum', - 'Show tasks based on the start date' => 'Zeige Aufgaben basierend auf Beginndatum', - 'Subtasks time tracking' => 'Teilaufgaben-Zeiterfassung', - 'User calendar view' => 'Benutzer-Kalendersicht', 'Automatically update the start date' => 'Beginndatum automatisch aktualisieren', 'iCal feed' => 'iCal Feed', 'Preferences' => 'Einstellungen', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Benachrichtigungen', '%s moved the task #%d to the first swimlane' => '%s hat die Aufgabe #%d in die erste Swimlane verschoben', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s hat die Aufgabe %s in die erste Swimlane verschoben', '%s moved the task %s to the swimlane "%s"' => '%s hat die Aufgaben %s in die Swimlane "%s" verschoben', 'This report contains all subtasks information for the given date range.' => 'Der Bericht beinhaltet alle Teilaufgaben im gewählten Zeitraum', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Stoppe Timer', 'Start timer' => 'Starte Timer', 'My activity stream' => 'Aktivitätsstream', - 'My calendar' => 'Mein Kalender', 'Search tasks' => 'Suche nach Aufgaben', 'Reset filters' => 'Filter zurücksetzen', 'My tasks due tomorrow' => 'Meine morgen fälligen Aufgaben', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Überblick', 'Board/Calendar/List view' => 'Board-/Kalender-/Listen-Ansicht', 'Switch to the board view' => 'Zur Board-Ansicht', - 'Switch to the calendar view' => 'Zur Kalender-Ansicht', 'Switch to the list view' => 'Zur Listen-Ansicht', 'Go to the search/filter box' => 'Zum Such- und Filterfeld', 'There is no activity yet.' => 'Es gibt bislang keine Aktivitäten.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Lizenz:', 'License' => 'Lizenz', 'Enter the text below' => 'Text unten eingeben', - 'Sort by position' => 'Nach Position sortieren', - 'Sort by date' => 'Nach Datum sortieren', - 'Add task' => 'Aufgabe hinzufügen', 'Start date:' => 'Startdatum:', 'Due date:' => 'Ablaufdatum:', - 'There is no start date or due date for this task.' => 'Diese Aufgabe hat kein Start oder Ablaufdatum.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Aufgabe verschieben/ändern, ändert auch Start- und Ablaufdatum der Aufgabe.', - 'There is no task in your project.' => 'Es gibt keine Aufgabe in deinem Projekt', - 'Gantt chart' => 'Gantt Diagramm', 'People who are project managers' => 'Benutzer die Projektmanager sind', 'People who are project members' => 'Benutzer die Projektmitglieder sind', 'NOK - Norwegian Krone' => 'NOK - Norwegische Kronen', @@ -763,22 +737,15 @@ return array( 'Members' => 'Mitglieder', 'Shared project' => 'Geteiltes Projekt', 'Project managers' => 'Projektmanager', - 'Gantt chart for all projects' => 'Gantt Diagramm für alle Projekte', 'Projects list' => 'Projektliste', - 'Gantt chart for this project' => 'Gantt Diagramm für dieses Projekt', - 'Project board' => 'Projekt Pinnwand', 'End date:' => 'Endedatum:', - 'There is no start date or end date for this project.' => 'Es gibt kein Startdatum oder Endedatum für dieses Projekt', - 'Projects Gantt chart' => 'Projekt Gantt Diagramm', 'Change task color when using a specific task link' => 'Aufgabefarbe ändern bei bestimmter Aufgabenverbindung', 'Task link creation or modification' => 'Aufgabenverbindung erstellen oder bearbeiten', 'Milestone' => 'Meilenstein', 'Documentation: %s' => 'Dokumentation: %s', - 'Switch to the Gantt chart view' => 'Zur Gantt-Diagramm Ansicht wechseln', 'Reset the search/filter box' => 'Suche/Filter-Box zurücksetzen', 'Documentation' => 'Dokumentation', 'Table of contents' => 'Inhaltsverzeichnis', - 'Gantt' => 'Gantt', 'Author' => 'Autor', 'Version' => 'Version', 'Plugins' => 'Plugins', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Es ist kein Benutzer verfügbar.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Wollen Sie den Benutzer "%s" wirklich aus der Gruppe "%s" löschen?', 'There is no group.' => 'Es gibt keine Gruppe.', - 'External Id' => 'Externe ID', 'Add group member' => 'Gruppenmitglied hinzufügen', 'Do you really want to remove this group: "%s"?' => 'Wollen Sie die Gruppe "%s" wirklich löschen?', 'There is no user in this group.' => 'Es gibt keinen Benutzer in dieser Gruppe.', @@ -910,8 +876,8 @@ return array( 'You were mentioned in the task #%d' => 'Sie wurden in der Aufgabe #%d erwähnt', 'You were mentioned in a comment on the task #%d' => 'Sie wurden in einem Kommentar zur Aufgabe #%d erwähnt', 'Estimated hours: ' => 'Erwarteter Zeitaufwand (Stunden): ', - 'Actual hours: ' => 'Tatsächlich aufgewändete Stunden: ', - 'Hours Spent' => 'Stunden aufgewändet', + 'Actual hours: ' => 'Tatsächlich aufgewendete Stunden: ', + 'Hours Spent' => 'Stunden aufgewendet', 'Hours Estimated' => 'Stunden erwartet', 'Estimated Time' => 'Erwartete Zeit', 'Actual Time' => 'Aktuelle Zeit', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Standard-Priorität', 'Lowest priority' => 'Niedrigste Priorität', 'Highest priority' => 'Höchste Priorität', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Wenn Sie Null bei höchster und niedrigster Priorität eintragen, wird diese Funktion deaktiviert.', 'Close a task when there is no activity' => 'Schliesse eine Aufgabe, wenn keine Aktivitäten vorhanden sind', 'Duration in days' => 'Dauer in Tagen', 'Send email when there is no activity on a task' => 'Versende eine Email, wenn keine Aktivitäten an einer Aufgabe vorhanden sind', @@ -1041,7 +1006,7 @@ return array( 'Upload a file' => 'Eine Datei hochladen', 'View file' => 'Datei ansehen', 'Last activity' => 'Letzte Aktivität', - 'Change subtask position' => 'Position der Unteraufgabe ändern', + 'Change subtask position' => 'Position der Teilaufgabe ändern', 'This value must be greater than %d' => 'Dieser Wert muss größer als %d sein', 'Another swimlane with the same name exists in the project' => 'Es gibt bereits eine Swimlane mit diesem Namen im Projekt', 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Beispiel: http://example.kanboard.net (wird zum Erstellen absoluter URLs genutzt)', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Teilaufgaben-Übersicht für %s', 'Projects overview for %s' => 'Projekt-Übersicht für %s', 'Activity stream for %s' => 'Aktivitätenstrom für %s', - 'Calendar for %s' => 'Kalender für %s', - 'Notifications for %s' => 'Benachrichtigungen für %s', 'Assign a color when the task is moved to a specific swimlane' => 'Einer Aufgabe eine Farbe zuweisen, wenn diese in eine bestimmte Swimlane verschoben wird', 'Assign a priority when the task is moved to a specific swimlane' => 'Einer Aufgabe eine Priorität zuweisen, wenn diese in eine bestimmte Swimlane verschoben wird', 'User unlocked successfully.' => 'Benutzer erfolgreich entsperrt.', @@ -1240,8 +1203,7 @@ return array( 'API User Access' => 'API Benutzerzugriff', 'Preview' => 'Vorschau', 'Write' => 'Schreiben', - 'Write your text in Markdown' => 'Schreiben Sie iHren Text in Markdown', - 'New External Task: %s' => 'Neue externe Aufgabe: %s', + 'Write your text in Markdown' => 'Schreiben Sie Ihren Text in Markdown', 'No personal API access token registered.' => 'Keine persönlichen API-Zugriffsinformationen registriert', 'Your personal API access token is "%s"' => 'Ihre persönlichen API-Zugriffsinformationen: "%s"', 'Remove your token' => 'Ihre Zugriffsinformationen entfernen', @@ -1309,29 +1271,99 @@ return array( 'Database uploaded successfully.' => 'Die Datenbank wurde erfolgreich hochgeladen.', 'Task sent by email successfully.' => 'Aufgabe wurde erfolgreich per E-Mail gesendet.', 'There is no category in this project.' => 'Es gibt keine Kategorie in diesem Projekt', - 'Send by email' => 'Per E-Mail gesendet', + 'Send by email' => 'Per E-Mail senden', 'Create and send a comment by email' => 'Erstellen und senden Sie einen Kommentar per E-Mail', 'Subject' => 'Betreff', 'Upload the database' => 'Datenbank hochladen', 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Sie können die zuvor heruntergeladene Sqlite-Datenbank (Gzip-Format) hochladen.', 'Database file' => 'Datenbankdatei', 'Upload' => 'Hochladen', - 'Remove this user from group' => 'Diesen Benutzer aus der Gruppe entfernen', 'Your project must have at least one active swimlane.' => 'Ihr Projekt muss mindestens eine aktive Swimlane haben.', 'Project: %s' => 'Projekt: %s', 'Automatic action not found: "%s"' => 'Automatische Aktion nicht gefunden: "%s"', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + '%d projects' => '%d Projekte', + '%d project' => '%d Projekt', + 'There is no project.' => 'Es gibt kein Projekt.', + 'Sort' => 'Sortieren', + 'Project ID' => 'Projekt ID', + 'Project name' => 'Projekt Name', + 'Public' => 'Öffentlich', + 'Private' => 'Privat', + '%d tasks' => '%d Aufgaben', + '%d task' => '%d Aufgabe', + 'Task ID' => 'Aufgaben ID', + 'Assign automatically a color when due date is expired' => 'Automatisch eine Farbe zuweisen, wenn das Fälligkeitsdatum abgelaufen ist', + 'Total score in this column across all swimlanes' => 'Gesamtpunktzahl in dieser Spalte über alle Swimlanes', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Argentinische Peso', + 'COP - Colombian Peso' => 'COP - Kolumbianische Peso', + '%d groups' => '%d Gruppen', + '%d group' => '%d Gruppe', + 'Group ID' => 'Gruppen ID', + 'External ID' => 'Externe ID', + '%d users' => '%d Benutzer', + '%d user' => '%d Benutzer', + 'Hide subtasks' => 'Teilaufgaben verstecken', + 'Show subtasks' => 'Teilaufgaben anzeigen', + 'Authentication Parameters' => 'Authentifizierungsparameter', + 'API Access' => 'API-Zugriff', + 'No users found.' => 'Keine Benutzer gefunden.', + 'User ID' => 'Benutzer ID', + 'Notifications are activated' => 'Benachrichtigungen sind aktiviert', + 'Notifications are disabled' => 'Benachrichtigungen sind deaktiviert', + 'User disabled' => 'Benutzer deaktiviert', + '%d notifications' => '%d Benachrichtigungen', + '%d notification' => '%d Benachrichtigung', + 'There is no external integration installed.' => 'Es ist keine externe Integration installiert.', + 'You are not allowed to update tasks assigned to someone else.' => 'Sie sind nicht berechtigt, Aufgaben zu aktualisieren, die jemand anderem zugewiesen wurden.', + 'You are not allowed to change the assignee.' => 'Sie dürfen den Zuständigen nicht ändern.', + 'Task suppression is not permitted' => 'Taskausblendung ist nicht zulässig', + 'Changing assignee is not permitted' => 'Änderung des Zuständigen ist nicht zulässig', + 'Update only assigned tasks is permitted' => 'Nur zugeordnete Aufgaben dürfen aktualisiert werden', + 'Only for tasks assigned to the current user' => 'Nur für Aufgaben, die dem aktuellen Benutzer zugeordnet sind', + 'My projects' => 'Meine Projekte', + 'Your are not member of any project.' => 'Sie sind nicht Mitglied eines Projektes.', + 'My subtasks' => 'Meine Teilaufgaben', + '%d subtasks' => '%d Teilaufgaben', + '%d subtask' => '%d Teilaufgabe', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Das Bewegen einer Aufgabe zwischen diesen Spalten ist nur für Aufgaben zulässig, die dem aktuellen Benutzer zugewiesen sind', + '[DUPLICATE]' => '[DUPLIKAT]', + 'DKK - Danish Krona' => 'DKK - Dänische Krone', + 'Remove user from group' => 'Benutzer aus Gruppe löschen', + 'Assign the task to its creator' => 'Aufgabe dem Ersteller zuordnen', + 'This task was sent by email to "%s" with subject "%s".' => 'Diese Aufgabe wurde per Mail an "%s" mit dem Betreff "%s" gesendet.', + 'Predefined Email Subjects' => 'Vordefinierte E-Mail Betreffzeilen', + 'Write one subject by line.' => 'Schreibe ein Betreff pro Zeile.', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php index bad43233..c0e1e4e1 100644 --- a/app/Locale/el_GR/translations.php +++ b/app/Locale/el_GR/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Διαχειριστής', 'Sign in' => 'Είσοδος', 'Users' => 'Χρήστες', - 'No user' => 'Δεν υπάρχει χρήστης', 'Forbidden' => 'Δεν επιτρέπεται η πρόσβαση', 'Access Forbidden' => 'Δεν επιτρέπεται η πρόσβαση', 'Edit user' => 'Διόρθωση χρήστη', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Η υπο-εργασία ενημερώθηκε με επιτυχία.', 'Unable to update your sub-task.' => 'Αδύνατο να ενημερωθεί η υπο-εργασία.', 'Unable to create your sub-task.' => 'Αδύνατο να δημιουργηθεί η υπο-εργασία.', - 'Sub-task added successfully.' => 'Η υπο-εργασία προστέθηκε με επιτυχία.', 'Maximum size: ' => 'Μέγιστο μέγεθος : ', 'Display another project' => 'Εμφάνιση άλλου έργου', 'Created by %s' => 'Δημιουργήθηκε από %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Ροή δραστηριότητας', 'Dashboard' => 'Κεντρικό ταμπλό', 'Confirmation' => 'Επιβεβαίωση', - 'Allow everybody to access to this project' => 'Να επιτρέπετε σε όλους να έχουν πρόσβαση σε αυτό το έργο', - 'Everybody have access to this project.' => 'Όλοι έχουν πρόσβαση σε αυτό το έργο.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Δημιουργήστε ένα σχόλιο από έναν εξωτερικό πάροχο', 'Project management' => 'Διαχείριση έργων', - 'My projects' => 'Τα έργα μου', 'Columns' => 'Στήλες', 'Task' => 'Εργασία', - 'Your are not member of any project.' => 'Δεν είστε μέλος κάποιου έργου.', 'Percentage' => 'Ποσοστό', 'Number of tasks' => 'Αριθμός εργασιών', 'Task distribution' => 'Κατανομή εργασιών', 'Analytics' => 'Αναλύσεις', 'Subtask' => 'Υπο-Εργασία', - 'My subtasks' => 'Οι υπο-εργασίες μου', 'User repartition' => 'Επαναλήψεις χρηστών', 'Clone this project' => 'Κλωνοποίηση έργου', 'Column removed successfully.' => 'Η στήλη αφαιρέθηκε με επιτυχία.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Γλώσσα:', 'Timezone:' => 'Timezone:', 'All columns' => 'Όλες οι στήλες', - 'Calendar' => 'Ημερολόγιο', 'Next' => 'Επόμενο', '#%d' => 'n˚%d', 'All swimlanes' => 'Όλες οι λωρίδες', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Αδύνατο να προστεθεί αυτή η ισοτιμία.', 'Webhook URL' => 'Webhook URL', '%s removed the assignee of the task %s' => '%s αφαίρεσε τον εκδοχέα της εργασίας %s', - 'Enable Gravatar images' => 'Ενεργοποίηση εικόνων Gravatar', 'Information' => 'Πληροφορίες', 'Check two factor authentication code' => 'Ελέγξτε δύο παράγοντες ελέγχου ταυτότητας κωδικού', 'The two factor authentication code is not valid.' => 'Ο κωδικός ελέγχου ταυτότητας δύο παραγόντων δεν είναι σωστός.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Όταν το έργο έχει μετακινηθεί στην 1η στήλη', 'When task is moved to last column' => 'Όταν το έργο έχει μετακινηθεί στην τελευταία στήλη', 'Year(s)' => 'Χρόνος(οι)', - 'Calendar settings' => 'Ρυθμίσεις ημερολογίου', - 'Project calendar view' => 'Προβολή ημερολογίου έργων', 'Project settings' => 'Ρυθμίσεις έργου', - 'Show subtasks based on the time tracking' => 'Εμφάνιση υπο-εργασίων με βάση την παρακολούθηση του χρόνου', - 'Show tasks based on the creation date' => 'Εμφάνιση έργων με βάση την ημερομηνία δημιουργίας', - 'Show tasks based on the start date' => 'Εμφάνιση έργων με βάση την ημερομηνία δημιουργίας ', - 'Subtasks time tracking' => 'Παρακολούθηση χρόνου υπο-εργασίων', - 'User calendar view' => 'Προβολή του ημερολογίου του χρήστη', 'Automatically update the start date' => 'Αυτόματη ενημέρωση της ημερομηνίας έναρξης', 'iCal feed' => 'iCal feed', 'Preferences' => 'Προτιμήσεις', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Κοινοποίηση', '%s moved the task #%d to the first swimlane' => '%s μετέφερε την εργασία n°%d στην 1η λωρίδα', 'Swimlane' => 'Λωρίδα', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s μετέφερε την εργασία %s στην 1η λωρίδα', '%s moved the task %s to the swimlane "%s"' => '%s μετέφερε την εργασία %s στη λωρίδα « %s »', 'This report contains all subtasks information for the given date range.' => 'Η έκθεση αυτή περιέχει όλες τις υπο-εργασίες για το συγκεκριμένο εύρος ημερομηνιών.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Διακοπή ρολογιού', 'Start timer' => 'Έναρξη ρολογιού', 'My activity stream' => 'Η ροή δραστηριοτήτων μου', - 'My calendar' => 'Το ημερολόγιο μου', 'Search tasks' => 'Αναζήτηση εργασιών', 'Reset filters' => 'Επαναφορά φίλτρων', 'My tasks due tomorrow' => 'Οι εργασίες καθηκόντων μου αύριο', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Επισκόπηση', 'Board/Calendar/List view' => 'Πίνακας / Ημερολόγιο / Προβολή λίστας', 'Switch to the board view' => 'Εναλλαγή στην προβολή του πίνακα', - 'Switch to the calendar view' => 'Εναλλαγή στην προβολή ημερολογίου', 'Switch to the list view' => 'Εναλλαγή στην προβολή λίστας', 'Go to the search/filter box' => 'Μετάβαση στο πλαίσιο αναζήτησης / φίλτρο', 'There is no activity yet.' => 'Δεν υπάρχει καμία δραστηριότητα ακόμα.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Άδεια:', 'License' => 'Άδεια', 'Enter the text below' => 'Πληκτρολογήστε το παρακάτω κείμενο', - 'Sort by position' => 'Ταξινόμηση κατά Θέση', - 'Sort by date' => 'Ταξινόμηση κατά ημέρα', - 'Add task' => 'Προσθήκη εργασίας', 'Start date:' => 'Ημερομηνία εκκίνησης :', 'Due date:' => 'Ημερομηνία λήξης:', - 'There is no start date or due date for this task.' => 'Δεν υπάρχει ημερομηνία έναρξης ή ημερομηνία λήξης καθηκόντων για το έργο αυτό.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Μετακίνηση ή αλλαγή μεγέθους μιας εργασίας θα αλλάξει την ώρα έναρξης και ημερομηνία λήξης της εργασίας.', - 'There is no task in your project.' => 'Δεν υπάρχει καμία εργασία στο έργο σας.', - 'Gantt chart' => 'Διαγράμματα Gantt', 'People who are project managers' => 'Οι άνθρωποι που είναι οι διευθυντές έργων', 'People who are project members' => 'Οι άνθρωποι που είναι μέλη των έργων', 'NOK - Norwegian Krone' => 'NOK - Norwegian Krone', @@ -763,22 +737,15 @@ return array( 'Members' => 'Μέλη', 'Shared project' => 'Κοινόχρηστο έργο', 'Project managers' => 'Διευθυντές έργου', - 'Gantt chart for all projects' => 'Διάγραμμα Gantt για όλα τα έργα', 'Projects list' => 'Λίστα έργων', - 'Gantt chart for this project' => 'Διάγραμμα Gantt για το έργο', - 'Project board' => 'Κεντρικός πίνακας έργου', 'End date:' => 'Ημερομηνία λήξης :', - 'There is no start date or end date for this project.' => 'Δεν υπάρχει ημερομηνία έναρξης ή λήξης για το έργο αυτό.', - 'Projects Gantt chart' => 'Διάγραμμα Gantt έργων', 'Change task color when using a specific task link' => 'Αλλαγή χρώματος εργασίας χρησιμοποιώντας συγκεκριμένο σύνδεσμο εργασίας', 'Task link creation or modification' => 'Σύνδεσμος δημιουργίας ή τροποποίησης εργασίας', 'Milestone' => 'Ορόσημο', 'Documentation: %s' => 'Τεκμηρίωση: %s', - 'Switch to the Gantt chart view' => 'Μεταφορά σε προβολή διαγράμματος Gantt', 'Reset the search/filter box' => 'Αρχικοποίηση του πεδίου αναζήτησης/φιλτραρίσματος', 'Documentation' => 'Τεκμηρίωση', 'Table of contents' => 'Πίνακας περιεχομένων', - 'Gantt' => 'Gantt', 'Author' => 'Δημιουργός', 'Version' => 'Έκδοση', 'Plugins' => 'Πρόσθετα', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Δεν υπάρχει διαθέσιμος χρήστης', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Αφαίρεση του χρήστη « %s » από την ομάδα « %s » ?', 'There is no group.' => 'Δεν υπάρχει ομάδα.', - 'External Id' => 'Εξωτερικό αναγνωριστικό', 'Add group member' => 'Προσθήκη μέλους ομάδας', 'Do you really want to remove this group: "%s"?' => 'Αφαίρεση της ομάδας: « %s » ?', 'There is no user in this group.' => 'Δεν υπάρχει χρήστης σε αυτήν την ομάδα', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Εξ ορισμού προτεραιότητα', 'Lowest priority' => 'η χαμηλότερη προτεραιότητα', 'Highest priority' => 'η υψηλότερη προτεραιότητα', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Αν βάλετε μηδέν στη χαμηλή και στην υψηλή προτεραιότητα, το χαρακτηριστικό αυτό απενεργοποιείται.', 'Close a task when there is no activity' => 'Κλείσιμο εργασίας όταν δεν υπάρχει δραστηριότητα', 'Duration in days' => 'Διάρκεια σε ημέρες', 'Send email when there is no activity on a task' => 'Αποστολή email όταν δεν υπάρχει δραστηριότητα σε εργασία', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 8f76d92c..0d01ee7a 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -1,8 +1,8 @@ <?php return array( - // 'number.decimals_separator' => '', - // 'number.thousands_separator' => '', + 'number.decimals_separator' => ',', + 'number.thousands_separator' => '.', 'None' => 'Ninguno', 'Edit' => 'Modificar', 'Remove' => 'Suprimir', @@ -17,15 +17,15 @@ return array( 'Red' => 'Rojo', 'Orange' => 'Naranja', 'Grey' => 'Gris', - // 'Brown' => '', - // 'Deep Orange' => '', - // 'Dark Grey' => '', - // 'Pink' => '', - // 'Teal' => '', - // 'Cyan' => '', - // 'Lime' => '', - // 'Light Green' => '', - // 'Amber' => '', + 'Brown' => 'Marron', + 'Deep Orange' => 'Naranja', + 'Dark Grey' => 'Gris Oscuro', + 'Pink' => 'Rosado', + 'Teal' => 'Verde Azulado', + 'Cyan' => 'Azul Claro', + 'Lime' => 'Lima', + 'Light Green' => 'Verde Claro', + 'Amber' => 'Ambar', 'Save' => 'Guardar', 'Login' => 'Iniciar sesión (Ingresar)', 'Official website:' => 'Página web oficial :', @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrador', 'Sign in' => 'Iniciar sesión', 'Users' => 'Usuarios', - 'No user' => 'Ningún usuario', 'Forbidden' => 'Acceso denegado', 'Access Forbidden' => 'Acceso denegado', 'Edit user' => 'Editar un usuario', @@ -153,7 +152,7 @@ return array( 'Comment is required' => 'El comentario es obligatorio', 'Comment added successfully.' => 'El comentario ha sido añadido correctamente.', 'Unable to create your comment.' => 'No se puede crear este comentario.', - 'Due Date' => 'Fecha límite', + 'Due Date' => 'Fecha Límite', 'Invalid date' => 'Fecha no válida', 'Automatic actions' => 'Acciones automatizadas', 'Your automatic action have been created successfully.' => 'La acción automatizada ha sido creada correctamente.', @@ -182,7 +181,7 @@ return array( 'Position' => 'Posición', 'Duplicate to another project' => 'Duplicar a otro proyecto', 'Duplicate' => 'Duplicar', - // 'Link' => '', + 'Link' => 'Enlace', 'Comment updated successfully.' => 'El comentario ha sido actualizado correctamente.', 'Unable to update your comment.' => 'No se puede actualizar este comentario.', 'Remove a comment' => 'Suprimir un comentario', @@ -208,15 +207,15 @@ return array( 'Closed' => 'Cerrado', 'Search' => 'Buscar', 'Nothing found.' => 'Nada hallado.', - 'Due date' => 'Fecha límite', + 'Due date' => 'Fecha Límite', 'Description' => 'Descripción', '%d comments' => '%d comentarios', '%d comment' => '%d comentario', 'Email address invalid' => 'Dirección de correo inválida', - // 'Your external account is not linked anymore to your profile.' => '', - // 'Unable to unlink your external account.' => '', - // 'External authentication failed' => '', - // 'Your external account is linked to your profile successfully.' => '', + 'Your external account is not linked anymore to your profile.' => 'Tu cuenta externa no está vinculada a tu perfil.', + 'Unable to unlink your external account.' => 'No se puede desvincular su cuenta externa.', + 'External authentication failed' => 'Error de autenticación externa', + 'Your external account is linked to your profile successfully.' => 'Su cuenta externa está vinculada a su perfil correctamente.', 'Email' => 'Correo', 'Task removed successfully.' => 'Tarea suprimida correctamente.', 'Unable to remove this task.' => 'No pude suprimir esta tarea.', @@ -229,8 +228,8 @@ return array( 'Category:' => 'Categoría:', 'Categories' => 'Categorías', 'Your category have been created successfully.' => 'Se ha creado tu categoría correctamente.', - // 'This category has been updated successfully.' => '', - // 'Unable to update this category.' => '', + 'This category has been updated successfully.' => 'Esta categoría se ha actualizado correctamente.', + 'Unable to update this category.' => 'No se puede actualizar esta categoría.', 'Remove a category' => 'Suprimir una categoría', 'Category removed successfully.' => 'Categoría suprimida correctamente.', 'Unable to remove this category.' => 'No pude suprimir esta categoría.', @@ -254,37 +253,36 @@ return array( 'Time tracking' => 'Control de tiempo', 'Estimate:' => 'Estimado:', 'Spent:' => 'Transcurrido:', - 'Do you really want to remove this sub-task?' => '¿Realmente quiere suprimir esta sub-tarea?', + 'Do you really want to remove this sub-task?' => '¿Realmente quiere suprimir esta subtarea?', 'Remaining:' => 'Quedando', 'hours' => 'horas', 'spent' => 'transcurrido', 'estimated' => 'estimado', 'Sub-Tasks' => 'Sub-Tareas', - 'Add a sub-task' => 'Añadir una sub-tarea', - 'Original estimate' => 'Estimado Original', - 'Create another sub-task' => 'Crear otra sub-tarea', - 'Time spent' => 'Tiempo Transcurrido', - 'Edit a sub-task' => 'Editar una sub-tarea', - 'Remove a sub-task' => 'Suprimir una sub-tarea', + 'Add a sub-task' => 'Añadir una subtarea', + 'Original estimate' => 'Horas Presupuestadas', + 'Create another sub-task' => 'Crear otra subtarea', + 'Time spent' => 'Horas Ejecutadas', + 'Edit a sub-task' => 'Editar una subtarea', + 'Remove a sub-task' => 'Suprimir una subtarea', 'The time must be a numeric value' => 'El tiempo debe de ser un valor numérico', 'Todo' => 'Por hacer', 'In progress' => 'En progreso', 'Sub-task removed successfully.' => 'Sub-tarea suprimida correctamente.', - 'Unable to remove this sub-task.' => 'No pude suprimir esta sub-tarea.', + 'Unable to remove this sub-task.' => 'No pude suprimir esta subtarea.', 'Sub-task updated successfully.' => 'Sub-tarea actualizada correctamente.', - 'Unable to update your sub-task.' => 'No pude actualizar tu sub-tarea.', - 'Unable to create your sub-task.' => 'No pude crear tu sub-tarea.', - 'Sub-task added successfully.' => 'Sub-tarea añadida correctamente.', + 'Unable to update your sub-task.' => 'No pude actualizar tu subtarea.', + 'Unable to create your sub-task.' => 'No pude crear tu subtarea.', 'Maximum size: ' => 'Tamaño máximo', 'Display another project' => 'Mostrar otro proyecto', 'Created by %s' => 'Creado por %s', 'Tasks Export' => 'Exportar tareas', - 'Start Date' => 'Fecha de inicio', + 'Start Date' => 'Fecha de Inicio', 'Execute' => 'Ejecutar', 'Task Id' => 'ID de tarea', 'Creator' => 'Creador', 'Modification date' => 'Fecha de modificación', - 'Completion date' => 'Fecha de terminación', + 'Completion date' => 'Fecha de Fin', 'Clone' => 'Clonar', 'Project cloned successfully.' => 'Proyecto clonado correctamente', 'Unable to clone this project.' => 'Impsible clonar proyecto', @@ -319,8 +317,8 @@ return array( 'Remote' => 'Remota', 'Enabled' => 'Activada', 'Disabled' => 'Deactivada', - // 'Login:' => '', - // 'Full Name:' => '', + 'Login:' => 'Login:', + 'Full Name:' => 'Nombre completo:', 'Email:' => 'Correo electrónico:', 'Notifications:' => 'Notificaciones:', 'Notifications' => 'Notificaciones', @@ -355,12 +353,12 @@ return array( '%s updated the task #%d' => '%s actualizó la tarea #%d', '%s created the task #%d' => '%s creó la tarea #%d', '%s closed the task #%d' => '%s cerró la tarea #%d', - // '%s opened the task #%d' => '', + '%s opened the task #%d' => '%s abrió la tarea #%d', 'Activity' => 'Actividad', 'Default values are "%s"' => 'Los valores por defecto son "%s"', 'Default columns for new projects (Comma-separated)' => 'Columnas por defecto de los nuevos proyectos (Separadas mediante comas)', 'Task assignee change' => 'Cambiar persona asignada a la tarea', - // '%s changed the assignee of the task #%d to %s' => '', + '%s changed the assignee of the task #%d to %s' => '%s cambió al asignado de la tarea #%d a %s', '%s changed the assignee of the task %s to %s' => '%s cambió la persona asignada de la tarea de %s a %s', 'New password for the user "%s"' => 'Nueva contraseña para el usuario "%s"', 'Choose an event' => 'Escoja un evento', @@ -390,28 +388,23 @@ return array( 'This project is private' => 'Este proyecto es privado', 'Add' => 'Añadir', 'Start date' => 'Fecha de inicio', - 'Time estimated' => 'Tiempo estimado', + 'Time estimated' => 'Horas Presupuestadas', 'There is nothing assigned to you.' => 'Esto no le está asignado', 'My tasks' => 'Mis tareas', 'Activity stream' => 'Flujo de actividad', 'Dashboard' => 'Tablero', 'Confirmation' => 'Confirmación', - 'Allow everybody to access to this project' => 'Permitir a cualquier acceder a este proyecto', - 'Everybody have access to this project.' => 'Cualquier tiene acceso a este proyecto', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Crear un comentario a partir de un proveedor externo', - 'Project management' => 'Administración del proyecto', - 'My projects' => 'Mis proyectos', + 'Project management' => 'Gestión de proyectos', 'Columns' => 'Columnas', 'Task' => 'Tarea', - 'Your are not member of any project.' => 'No es miembro de ningún proyecto', 'Percentage' => 'Porcentaje', 'Number of tasks' => 'Número de tareas', 'Task distribution' => 'Distribución de tareas', 'Analytics' => 'Analítica', 'Subtask' => 'Subtarea', - 'My subtasks' => 'Mis subtareas', 'User repartition' => 'Repartición de usuarios', 'Clone this project' => 'Clonar este proyecto', 'Column removed successfully.' => 'Columna removida correctamente', @@ -429,7 +422,7 @@ return array( 'This value must be numeric' => 'Este valor debe ser numérico', 'Unable to create this task.' => 'Imposible crear esta tarea', 'Cumulative flow diagram' => 'Diagrama de flujo acumulativo', - 'Daily project summary' => 'Sumario diario del proyecto', + 'Daily project summary' => 'Resumen diario del proyecto', 'Daily project summary export' => 'Exportar sumario diario del proyecto', 'Exports' => 'Exportar', 'This export contains the number of tasks per column grouped per day.' => 'Esta exportación contiene el número de tereas por columna agrupada por día', @@ -446,7 +439,7 @@ return array( 'Unable to remove this swimlane.' => 'Imposible remover este carril', 'Unable to update this swimlane.' => 'Imposible actualizar este carril', 'Your swimlane have been created successfully.' => 'Su carril ha sido creado correctamente', - 'Example: "Bug, Feature Request, Improvement"' => 'Ejemplo: "Error, Solicitud de característica, Mejora', + 'Example: "Bug, Feature Request, Improvement"' => 'Ejemplo: "Error, Solicitud de característica, Mejora"', 'Default categories for new projects (Comma-separated)' => 'Categorías por defecto de los nuevos proyectos (Separadas mediante comas)', 'Integrations' => 'Integraciones', 'Integration with third-party services' => 'Integraciones para servicios de terceros', @@ -459,9 +452,8 @@ return array( 'Language:' => 'Idioma', 'Timezone:' => 'Zona horaria', 'All columns' => 'Todas las columnas', - 'Calendar' => 'Calendario', 'Next' => 'Siguiente', - // '#%d' => '', + '#%d' => '#%d', 'All swimlanes' => 'Todos los carriles', 'All colors' => 'Todos los colores', 'Moved to column %s' => 'Movido a columna %s', @@ -474,12 +466,12 @@ return array( 'Time Tracking' => 'Control de Tiempo', 'You already have one subtask in progress' => 'Ya tiene una subtarea en progreso', 'Which parts of the project do you want to duplicate?' => '¿Que partes del proyecto quiere duplicar?', - // 'Disallow login form' => '', + 'Disallow login form' => 'Deshabilitar el formulario de inicio de sesión', 'Start' => 'Inicio', 'End' => 'Fin', 'Task age in days' => 'Edad de la tarea en días', 'Days in this column' => 'Días en esta columna', - // '%dd' => '', + '%dd' => '%dd', 'Add a new link' => 'Añadir nuevo vínculo', 'Do you really want to remove this link: "%s"?' => '¿Realmente quiere suprimir este vínculo: "%s"?', 'Do you really want to remove this link with task #%d?' => '¿Realmente quiere suprimir este vínculo con la tarea #%d?', @@ -510,8 +502,8 @@ return array( 'fixes' => 'arregla', 'is fixed by' => 'arreglado por', 'This task' => 'Esta tarea', - // '<1h' => '', - // '%dh' => '', + '<1h' => '<1h', + '%dh' => '%dh', 'Expand tasks' => 'Expandir tareas', 'Collapse tasks' => 'Colapsar tareas', 'Expand/collapse tasks' => 'Expandir/colapsar tareas', @@ -519,7 +511,7 @@ return array( 'Submit a form' => 'Enviar un formulario', 'Board view' => 'Vista de tablero', 'Keyboard shortcuts' => 'Atajos del teclado', - // 'Open board switcher' => '', + 'Open board switcher' => 'Conmutador de tablero abierto', 'Application' => 'Aplicación', 'Compact view' => 'Vista compacta', 'Horizontal scrolling' => 'Desplazamiento horizontal', @@ -531,21 +523,21 @@ return array( 'CHF - Swiss Francs' => 'CHF - Franco suizo', 'Custom Stylesheet' => 'Hoja de estilo personalizada', 'download' => 'descargar', - // 'EUR - Euro' => '', + 'EUR - Euro' => 'EUR - Euro', 'GBP - British Pound' => 'GBP - Libra británica', 'INR - Indian Rupee' => 'INR - Rupia india', 'JPY - Japanese Yen' => 'JPY - Yen japonés', 'NZD - New Zealand Dollar' => 'NZD - Dólar de Nueva Zelanda', 'RSD - Serbian dinar' => 'RSD - Dinar serbio', - // 'CNY - Chinese Yuan' => '', + 'CNY - Chinese Yuan' => 'CNY - Yuan Chino', 'USD - US Dollar' => 'USD - Dólar estadounidense', 'Destination column' => 'Columna destino', - 'Move the task to another column when assigned to a user' => 'Mover la tarea a otra columan cuando sea asignada a un usuario', + 'Move the task to another column when assigned to a user' => 'Mover la tarea a otra columna cuando sea asignada a un usuario', 'Move the task to another column when assignee is cleared' => 'Mover la tarea a otra columna cuando se elimine la persona asignada', 'Source column' => 'Columna de origen', 'Transitions' => 'Transiciones', 'Executer' => 'Ejecutor', - 'Time spent in the column' => 'Tiempo transcurrido en la columna', + 'Time spent in the column' => 'Horas Ejecutadas en la columna', 'Task transitions' => 'Transiciones de las tareas', 'Task transitions export' => 'Exportar transiciones de las tareas', 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Este reporte contiene todos los movimientos de columna por cada tarea con la fecha, el usuario y el tiempo transcurrido para cada transición', @@ -556,8 +548,7 @@ return array( 'The currency rate have been added successfully.' => 'El tipo de cambio ha sido añadido correctamente.', 'Unable to add this currency rate.' => 'No se puede añadir este tipo de cambio.', 'Webhook URL' => 'URL del Webhook', - // '%s removed the assignee of the task %s' => '', - 'Enable Gravatar images' => 'Activar imágenes Gravatar', + '%s removed the assignee of the task %s' => '%s eliminó al asignado de la tarea %s', 'Information' => 'Información', 'Check two factor authentication code' => 'Verificar el código de autenticación de dos factores', 'The two factor authentication code is not valid.' => 'El código de autenticación de dos factores no es válido', @@ -570,768 +561,809 @@ return array( 'Test your device' => 'Pruebe su dispositivo', 'Assign a color when the task is moved to a specific column' => 'Asignar un color cuando la tarea se mueve a una columna específica', '%s via Kanboard' => '%s vía Kanboard', - // 'Burndown chart' => '', - // 'This chart show the task complexity over the time (Work Remaining).' => '', + 'Burndown chart' => 'Gráfico de Tareas Pendientes', + 'This chart show the task complexity over the time (Work Remaining).' => 'Este gráfico muestra la complejidad de la tarea durante el tiempo (Trabajo restante)', 'Screenshot taken %s' => 'Captura de pantalla tomada %s', 'Add a screenshot' => 'Añadir una captura de pantalla', 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Tomar una captura de pantalla y presione CTRL+V o ⌘+V para pegar aquí.', 'Screenshot uploaded successfully.' => 'Captura de pantalla subida correctamente', 'SEK - Swedish Krona' => 'SEK - Corona sueca', - // 'Identifier' => '', - // 'Disable two factor authentication' => '', - // 'Do you really want to disable the two factor authentication for this user: "%s"?' => '', - // 'Edit link' => '', - // 'Start to type task title...' => '', - // 'A task cannot be linked to itself' => '', - // 'The exact same link already exists' => '', - // 'Recurrent task is scheduled to be generated' => '', - // 'Score' => '', - // 'The identifier must be unique' => '', - // 'This linked task id doesn\'t exists' => '', - // 'This value must be alphanumeric' => '', - // 'Edit recurrence' => '', - // 'Generate recurrent task' => '', - // 'Trigger to generate recurrent task' => '', - // 'Factor to calculate new due date' => '', - // 'Timeframe to calculate new due date' => '', - // 'Base date to calculate new due date' => '', - // 'Action date' => '', - // 'Base date to calculate new due date: ' => '', - // 'This task has created this child task: ' => '', - // 'Day(s)' => '', - // 'Existing due date' => '', - // 'Factor to calculate new due date: ' => '', - // 'Month(s)' => '', - // 'Recurrence' => '', - // 'This task has been created by: ' => '', - // 'Recurrent task has been generated:' => '', - // 'Timeframe to calculate new due date: ' => '', - // 'Trigger to generate recurrent task: ' => '', - // 'When task is closed' => '', - // 'When task is moved from first column' => '', - // 'When task is moved to last column' => '', - // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', - // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', - // 'Automatically update the start date' => '', - // 'iCal feed' => '', - // 'Preferences' => '', - // 'Security' => '', - // 'Two factor authentication disabled' => '', - // 'Two factor authentication enabled' => '', - // 'Unable to update this user.' => '', - // 'There is no user management for private projects.' => '', - // 'User that will receive the email' => '', - // 'Email subject' => '', - // 'Date' => '', - // 'Add a comment log when moving the task between columns' => '', - // 'Move the task to another column when the category is changed' => '', - // 'Send a task by email to someone' => '', - // 'Reopen a task' => '', - // 'Notification' => '', - // '%s moved the task #%d to the first swimlane' => '', - // 'Swimlane' => '', - // 'Gravatar' => '', - // '%s moved the task %s to the first swimlane' => '', - // '%s moved the task %s to the swimlane "%s"' => '', - // 'This report contains all subtasks information for the given date range.' => '', - // 'This report contains all tasks information for the given date range.' => '', - // 'Project activities for %s' => '', - // 'view the board on Kanboard' => '', - // 'The task have been moved to the first swimlane' => '', - // 'The task have been moved to another swimlane:' => '', - // 'New title: %s' => '', - // 'The task is not assigned anymore' => '', - // 'New assignee: %s' => '', - // 'There is no category now' => '', - // 'New category: %s' => '', - // 'New color: %s' => '', - // 'New complexity: %d' => '', - // 'The due date have been removed' => '', - // 'There is no description anymore' => '', - // 'Recurrence settings have been modified' => '', - // 'Time spent changed: %sh' => '', - // 'Time estimated changed: %sh' => '', - // 'The field "%s" have been updated' => '', - // 'The description has been modified:' => '', - // 'Do you really want to close the task "%s" as well as all subtasks?' => '', - // 'I want to receive notifications for:' => '', - // 'All tasks' => '', - // 'Only for tasks assigned to me' => '', - // 'Only for tasks created by me' => '', - // 'Only for tasks created by me and assigned to me' => '', - // '%%Y-%%m-%%d' => '', - // 'Total for all columns' => '', - // 'You need at least 2 days of data to show the chart.' => '', - // '<15m' => '', - // '<30m' => '', - // 'Stop timer' => '', - // 'Start timer' => '', - // 'My activity stream' => '', - // 'My calendar' => '', - // 'Search tasks' => '', - // 'Reset filters' => '', - // 'My tasks due tomorrow' => '', - // 'Tasks due today' => '', - // 'Tasks due tomorrow' => '', - // 'Tasks due yesterday' => '', - // 'Closed tasks' => '', - // 'Open tasks' => '', - // 'Not assigned' => '', - // 'View advanced search syntax' => '', - // 'Overview' => '', - // 'Board/Calendar/List view' => '', - // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', - // 'Switch to the list view' => '', - // 'Go to the search/filter box' => '', - // 'There is no activity yet.' => '', - // 'No tasks found.' => '', - // 'Keyboard shortcut: "%s"' => '', - // 'List' => '', - // 'Filter' => '', - // 'Advanced search' => '', - // 'Example of query: ' => '', - // 'Search by project: ' => '', - // 'Search by column: ' => '', - // 'Search by assignee: ' => '', - // 'Search by color: ' => '', - // 'Search by category: ' => '', - // 'Search by description: ' => '', - // 'Search by due date: ' => '', - // 'Average time spent into each column' => '', - // 'Average time spent' => '', - // 'This chart show the average time spent into each column for the last %d tasks.' => '', - // 'Average Lead and Cycle time' => '', - // 'Average lead time: ' => '', - // 'Average cycle time: ' => '', - // 'Cycle Time' => '', - // 'Lead Time' => '', - // 'This chart show the average lead and cycle time for the last %d tasks over the time.' => '', - // 'Average time into each column' => '', - // 'Lead and cycle time' => '', - // 'Lead time: ' => '', - // 'Cycle time: ' => '', - // 'Time spent into each column' => '', - // 'The lead time is the duration between the task creation and the completion.' => '', - // 'The cycle time is the duration between the start date and the completion.' => '', - // 'If the task is not closed the current time is used instead of the completion date.' => '', - // 'Set automatically the start date' => '', - // 'Edit Authentication' => '', - // 'Remote user' => '', - // 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => '', - // 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => '', - // 'Default task color' => '', - // 'This feature does not work with all browsers.' => '', - // 'There is no destination project available.' => '', - // 'Trigger automatically subtask time tracking' => '', - // 'Include closed tasks in the cumulative flow diagram' => '', - // 'Current swimlane: %s' => '', - // 'Current column: %s' => '', - // 'Current category: %s' => '', - // 'no category' => '', - // 'Current assignee: %s' => '', - // 'not assigned' => '', - // 'Author:' => '', - // 'contributors' => '', - // 'License:' => '', - // 'License' => '', - // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', - // 'Start date:' => '', - // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', - // 'People who are project managers' => '', - // 'People who are project members' => '', - // 'NOK - Norwegian Krone' => '', - // 'Show this column' => '', - // 'Hide this column' => '', - // 'open file' => '', - // 'End date' => '', - // 'Users overview' => '', - // 'Members' => '', - // 'Shared project' => '', - // 'Project managers' => '', - // 'Gantt chart for all projects' => '', - // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', - // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', - // 'Change task color when using a specific task link' => '', - // 'Task link creation or modification' => '', - // 'Milestone' => '', - // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', - // 'Reset the search/filter box' => '', - // 'Documentation' => '', - // 'Table of contents' => '', - // 'Gantt' => '', - // 'Author' => '', - // 'Version' => '', - // 'Plugins' => '', - // 'There is no plugin loaded.' => '', - // 'My notifications' => '', - // 'Custom filters' => '', - // 'Your custom filter have been created successfully.' => '', - // 'Unable to create your custom filter.' => '', - // 'Custom filter removed successfully.' => '', - // 'Unable to remove this custom filter.' => '', - // 'Edit custom filter' => '', - // 'Your custom filter have been updated successfully.' => '', - // 'Unable to update custom filter.' => '', - // 'Web' => '', - // 'New attachment on task #%d: %s' => '', - // 'New comment on task #%d' => '', - // 'Comment updated on task #%d' => '', - // 'New subtask on task #%d' => '', - // 'Subtask updated on task #%d' => '', - // 'New task #%d: %s' => '', - // 'Task updated #%d' => '', - // 'Task #%d closed' => '', - // 'Task #%d opened' => '', - // 'Column changed for task #%d' => '', - // 'New position for task #%d' => '', - // 'Swimlane changed for task #%d' => '', - // 'Assignee changed on task #%d' => '', - // '%d overdue tasks' => '', - // 'Task #%d is overdue' => '', - // 'No notification.' => '', - // 'Mark all as read' => '', - // 'Mark as read' => '', - // 'Total number of tasks in this column across all swimlanes' => '', - // 'Collapse swimlane' => '', - // 'Expand swimlane' => '', - // 'Add a new filter' => '', - // 'Share with all project members' => '', - // 'Shared' => '', - // 'Owner' => '', - // 'Unread notifications' => '', - // 'Notification methods:' => '', - // 'Unable to read your file' => '', - // '%d task(s) have been imported successfully.' => '', - // 'Nothing have been imported!' => '', - // 'Import users from CSV file' => '', - // '%d user(s) have been imported successfully.' => '', - // 'Comma' => '', - // 'Semi-colon' => '', - // 'Tab' => '', - // 'Vertical bar' => '', - // 'Double Quote' => '', - // 'Single Quote' => '', - // '%s attached a file to the task #%d' => '', - // 'There is no column or swimlane activated in your project!' => '', - // 'Append filter (instead of replacement)' => '', - // 'Append/Replace' => '', - // 'Append' => '', - // 'Replace' => '', - // 'Import' => '', - // 'Change sorting' => '', - // 'Tasks Importation' => '', - // 'Delimiter' => '', - // 'Enclosure' => '', - // 'CSV File' => '', - // 'Instructions' => '', - // 'Your file must use the predefined CSV format' => '', - // 'Your file must be encoded in UTF-8' => '', - // 'The first row must be the header' => '', - // 'Duplicates are not verified for you' => '', - // 'The due date must use the ISO format: YYYY-MM-DD' => '', - // 'Download CSV template' => '', - // 'No external integration registered.' => '', - // 'Duplicates are not imported' => '', - // 'Usernames must be lowercase and unique' => '', - // 'Passwords will be encrypted if present' => '', - // '%s attached a new file to the task %s' => '', - // 'Link type' => '', - // 'Assign automatically a category based on a link' => '', - // 'BAM - Konvertible Mark' => '', - // 'Assignee Username' => '', - // 'Assignee Name' => '', - // 'Groups' => '', - // 'Members of %s' => '', - // 'New group' => '', - // 'Group created successfully.' => '', - // 'Unable to create your group.' => '', - // 'Edit group' => '', - // 'Group updated successfully.' => '', - // 'Unable to update your group.' => '', - // 'Add group member to "%s"' => '', - // 'Group member added successfully.' => '', - // 'Unable to add group member.' => '', - // 'Remove user from group "%s"' => '', - // 'User removed successfully from this group.' => '', - // 'Unable to remove this user from the group.' => '', - // 'Remove group' => '', - // 'Group removed successfully.' => '', - // 'Unable to remove this group.' => '', - // 'Project Permissions' => '', - // 'Manager' => '', - // 'Project Manager' => '', - // 'Project Member' => '', - // 'Project Viewer' => '', - // 'Your account is locked for %d minutes' => '', - // 'Invalid captcha' => '', - // 'The name must be unique' => '', - // 'View all groups' => '', - // 'There is no user available.' => '', - // 'Do you really want to remove the user "%s" from the group "%s"?' => '', - // 'There is no group.' => '', - // 'External Id' => '', - // 'Add group member' => '', - // 'Do you really want to remove this group: "%s"?' => '', - // 'There is no user in this group.' => '', - // 'Permissions' => '', - // 'Allowed Users' => '', - // 'No user have been allowed specifically.' => '', - // 'Role' => '', - // 'Enter user name...' => '', - // 'Allowed Groups' => '', - // 'No group have been allowed specifically.' => '', - // 'Group' => '', - // 'Group Name' => '', - // 'Enter group name...' => '', - // 'Role:' => '', - // 'Project members' => '', - // '%s mentioned you in the task #%d' => '', - // '%s mentioned you in a comment on the task #%d' => '', - // 'You were mentioned in the task #%d' => '', - // 'You were mentioned in a comment on the task #%d' => '', - // 'Estimated hours: ' => '', - // 'Actual hours: ' => '', - // 'Hours Spent' => '', - // 'Hours Estimated' => '', - // 'Estimated Time' => '', - // 'Actual Time' => '', - // 'Estimated vs actual time' => '', - // 'RUB - Russian Ruble' => '', - // 'Assign the task to the person who does the action when the column is changed' => '', - // 'Close a task in a specific column' => '', - // 'Time-based One-time Password Algorithm' => '', - // 'Two-Factor Provider: ' => '', - // 'Disable two-factor authentication' => '', - // 'Enable two-factor authentication' => '', - // 'There is no integration registered at the moment.' => '', - // 'Password Reset for Kanboard' => '', - // 'Forgot password?' => '', - // 'Enable "Forget Password"' => '', - // 'Password Reset' => '', - // 'New password' => '', - // 'Change Password' => '', - // 'To reset your password click on this link:' => '', - // 'Last Password Reset' => '', - // 'The password has never been reinitialized.' => '', - // 'Creation' => '', - // 'Expiration' => '', - // 'Password reset history' => '', - // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', - // 'Do you really want to close all tasks of this column?' => '', - // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', - // 'Close all tasks of this column' => '', - // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', - // 'My dashboard' => '', - // 'My profile' => '', - // 'Project owner: ' => '', - // 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => '', - // 'Project owner' => '', - // 'Private projects do not have users and groups management.' => '', - // 'There is no project member.' => '', - // 'Priority' => '', - // 'Task priority' => '', - // 'General' => '', - // 'Dates' => '', - // 'Default priority' => '', - // 'Lowest priority' => '', - // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', - // 'Close a task when there is no activity' => '', - // 'Duration in days' => '', - // 'Send email when there is no activity on a task' => '', - // 'Unable to fetch link information.' => '', - // 'Daily background job for tasks' => '', - // 'Auto' => '', - // 'Related' => '', - // 'Attachment' => '', - // 'Title not found' => '', - // 'Web Link' => '', - // 'External links' => '', - // 'Add external link' => '', - // 'Type' => '', - // 'Dependency' => '', - // 'Add internal link' => '', - // 'Add a new external link' => '', - // 'Edit external link' => '', - // 'External link' => '', - // 'Copy and paste your link here...' => '', - // 'URL' => '', - // 'Internal links' => '', - // 'Assign to me' => '', - // 'Me' => '', - // 'Do not duplicate anything' => '', - // 'Projects management' => '', - // 'Users management' => '', - // 'Groups management' => '', - // 'Create from another project' => '', - 'open' => 'abrir', - // 'closed' => '', - // 'Priority:' => '', - // 'Reference:' => '', - // 'Complexity:' => '', - // 'Swimlane:' => '', - // 'Column:' => '', - // 'Position:' => '', - // 'Creator:' => '', - // 'Time estimated:' => '', - // '%s hours' => '', - // 'Time spent:' => '', - // 'Created:' => '', - // 'Modified:' => '', - // 'Completed:' => '', - // 'Started:' => '', - // 'Moved:' => '', + 'Identifier' => 'Identificador', + 'Disable two factor authentication' => 'Deshabilitar la autenticación de dos factores', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => '¿Realmente desea desactivar la autenticación de dos factores para este usuario: "%s"?', + 'Edit link' => 'Editar enlace', + 'Start to type task title...' => 'Comenzar a escribir el título de la tarea ...', + 'A task cannot be linked to itself' => 'Una tarea no se puede vincular a sí misma', + 'The exact same link already exists' => 'Ya existe un enlace idéntico', + 'Recurrent task is scheduled to be generated' => 'La tarea periódica está programada para ser generada', + 'Score' => 'Puntuación', + 'The identifier must be unique' => 'El identificador debe ser único', + 'This linked task id doesn\'t exists' => 'Este ID de la tarea enlazada no existe', + 'This value must be alphanumeric' => 'Este valor debe ser alfanumérico', + 'Edit recurrence' => 'Editar recurrencia', + 'Generate recurrent task' => 'Generar tarea recurrente', + 'Trigger to generate recurrent task' => 'Disparador para generar tarea recurrente', + 'Factor to calculate new due date' => 'Factor para calcular la nueva fecha de vencimiento', + 'Timeframe to calculate new due date' => 'Plazo para calcular la nueva fecha de vencimiento', + 'Base date to calculate new due date' => 'Fecha base para calcular la nueva fecha de vencimiento', + 'Action date' => 'Fecha de acción', + 'Base date to calculate new due date: ' => 'Fecha base para calcular la nueva fecha de vencimiento: ', + 'This task has created this child task: ' => 'Esta tarea ha creado esta tarea hija: ', + 'Day(s)' => 'Día(s)', + 'Existing due date' => 'Fecha de vencimiento existente', + 'Factor to calculate new due date: ' => 'Factor para calcular la nueva fecha de vencimiento: ', + 'Month(s)' => 'Mes(es)', + 'Recurrence' => 'Recurrencia', + 'This task has been created by: ' => 'Esta tarea ha sido creada por: ', + 'Recurrent task has been generated:' => 'Se ha generado una tarea recurrente:', + 'Timeframe to calculate new due date: ' => 'Plazo para calcular la nueva fecha de vencimiento: ', + 'Trigger to generate recurrent task: ' => 'Disparador para generar la tarea recurrente: ', + 'When task is closed' => 'Cuando la tarea está cerrada', + 'When task is moved from first column' => 'Cuando se mueve la tarea desde la primera columna', + 'When task is moved to last column' => 'Cuando la tarea se mueve a la última columna', + 'Year(s)' => 'Año(s)', + 'Project settings' => 'Configuración del proyecto', + 'Automatically update the start date' => 'Actualizar automáticamente la fecha de inicio', + 'iCal feed' => 'Alimentador de iCal', + 'Preferences' => 'Preferencias', + 'Security' => 'Seguridad', + 'Two factor authentication disabled' => 'Se ha inhabilitado la autenticación de dos factores.', + 'Two factor authentication enabled' => 'Autenticación de dos factores habilitada', + 'Unable to update this user.' => 'No se puede actualizar este usuario.', + 'There is no user management for private projects.' => 'No hay gestión de usuarios para proyectos privados.', + 'User that will receive the email' => 'Usuario que recibirá el correo electrónico', + 'Email subject' => 'Asunto del email', + 'Date' => 'Fecha', + 'Add a comment log when moving the task between columns' => 'Añadir un registro en los comentarios al mover la tarea entre columnas', + 'Move the task to another column when the category is changed' => 'Mover la tarea a otra columna cuando se cambia la categoría', + 'Send a task by email to someone' => 'Enviar una tarea por correo electrónico a alguien', + 'Reopen a task' => 'Reabrir una tarea', + 'Notification' => 'Notificación', + '%s moved the task #%d to the first swimlane' => '%s movió la tarea #%d al primer carril', + 'Swimlane' => 'Carril', + '%s moved the task %s to the first swimlane' => '%s movió la tarea %s al primer carril', + '%s moved the task %s to the swimlane "%s"' => '%s trasladó la tarea %s al carril "%s"', + 'This report contains all subtasks information for the given date range.' => 'Este informe contiene toda la información de las subtareas para el intervalo de fechas especificado.', + 'This report contains all tasks information for the given date range.' => 'Este informe contiene la información de todas las tareas para el intervalo de fechas dado.', + 'Project activities for %s' => 'Actividades del proyecto para %s', + 'view the board on Kanboard' => 'ver el tablero en Kanboard', + 'The task have been moved to the first swimlane' => 'La tarea se ha movido al primer carril', + 'The task have been moved to another swimlane:' => 'La tarea se ha trasladado a otro carril:', + 'New title: %s' => 'Nuevo título: %s', + 'The task is not assigned anymore' => 'La tarea ya no está asignada', + 'New assignee: %s' => 'Nuevo asignado: %s', + 'There is no category now' => 'No hay categoría ahora', + 'New category: %s' => 'Nueva categoría: %s', + 'New color: %s' => 'Nuevo color: %s', + 'New complexity: %d' => 'Nueva complejidad: %d', + 'The due date have been removed' => 'Se ha eliminado la fecha de vencimiento', + 'There is no description anymore' => 'Ya no hay ninguna descripción', + 'Recurrence settings have been modified' => 'Los parámetros de recurrencia se han modificado', + 'Time spent changed: %sh' => 'Tiempo ejecutado cambiado: %sh', + 'Time estimated changed: %sh' => 'Horas Presupuestadas cambiado: %sh', + 'The field "%s" have been updated' => 'Se ha actualizado el campo "%s"', + 'The description has been modified:' => 'La descripción ha sido modificada:', + 'Do you really want to close the task "%s" as well as all subtasks?' => '¿Realmente desea cerrar la tarea "%s", así como todas sus subtareas?', + 'I want to receive notifications for:' => 'Quiero recibir notificaciones para:', + 'All tasks' => 'Todas las tareas', + 'Only for tasks assigned to me' => 'Sólo para tareas asignadas a mí', + 'Only for tasks created by me' => 'Sólo para tareas creadas por mí', + 'Only for tasks created by me and assigned to me' => 'Sólo para las tareas creadas por mí y asignadas a mí', + '%%Y-%%m-%%d' => '%%Y-%%m-%%d', + 'Total for all columns' => 'Total para todas las columnas', + 'You need at least 2 days of data to show the chart.' => 'Necesita al menos 2 días de datos para mostrar el gráfico.', + '<15m' => '<15m', + '<30m' => '<30m', + 'Stop timer' => 'Detener temporizador', + 'Start timer' => 'Iniciar el temporizador', + 'My activity stream' => 'Mi flujo de actividad', + 'Search tasks' => 'Buscar tareas', + 'Reset filters' => 'Restablecer filtros', + 'My tasks due tomorrow' => 'Mis tareas para mañana', + 'Tasks due today' => 'Tareas pendientes hoy', + 'Tasks due tomorrow' => 'Tareas para mañana', + 'Tasks due yesterday' => 'Tareas vencidas ayer', + 'Closed tasks' => 'Tareas cerradas', + 'Open tasks' => 'Tareas abiertas', + 'Not assigned' => 'No asignado', + 'View advanced search syntax' => 'Ver sintaxis de búsqueda avanzada', + 'Overview' => 'Visión general', + 'Board/Calendar/List view' => 'Vista de Tablero/Calendario/Lista', + 'Switch to the board view' => 'Cambiar a la vista de tablero', + 'Switch to the list view' => 'Cambiar a la vista de lista', + 'Go to the search/filter box' => 'Ir a la caja de búsqueda/filtro', + 'There is no activity yet.' => 'No hay actividad todavía.', + 'No tasks found.' => 'No se han encontrado tareas.', + 'Keyboard shortcut: "%s"' => 'Atajo de teclado: "%s"', + 'List' => 'Lista', + 'Filter' => 'Filtrar', + 'Advanced search' => 'Búsqueda Avanzada', + 'Example of query: ' => 'Ejemplo de consulta: ', + 'Search by project: ' => 'Buscar por proyecto: ', + 'Search by column: ' => 'Buscar por columna: ', + 'Search by assignee: ' => 'Buscar por asignado:', + 'Search by color: ' => 'Buscar por color: ', + 'Search by category: ' => 'Buscar por categoría: ', + 'Search by description: ' => 'Buscar por descripción: ', + 'Search by due date: ' => 'Buscar por fecha de vencimiento: ', + 'Average time spent into each column' => 'Tiempo de permanencia promedio en cada columna', + 'Average time spent' => 'Tiempo ejecutado promedio', + 'This chart show the average time spent into each column for the last %d tasks.' => 'Este gráfico muestra el tiempo promedio invertido en cada columna para las últimas %d tareas.', + 'Average Lead and Cycle time' => 'Tiempo de Espera y de Ciclo promedio', + 'Average lead time: ' => 'Tiempo de espera promedio: ', + 'Average cycle time: ' => 'Tiempo del ciclo promedio: ', + 'Cycle Time' => 'Tiempo del Ciclo', + 'Lead Time' => 'Tiempo de Espera', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Este gráfico muestra el tiempo promedio de espera y de ciclo para las últimas %d tareas.', + 'Average time into each column' => 'Tiempo promedio en cada columna', + 'Lead and cycle time' => 'Tiempo de espera y de ciclo', + 'Lead time: ' => 'Tiempo de Espera: ', + 'Cycle time: ' => 'Tiempo del Ciclo: ', + 'Time spent into each column' => 'Tiempo empleado en cada columna', + 'The lead time is the duration between the task creation and the completion.' => 'El tiempo de espera es la duración entre la creación de la tarea y la finalización.', + 'The cycle time is the duration between the start date and the completion.' => 'El tiempo de ciclo es la duración entre la fecha de inicio y la finalización.', + 'If the task is not closed the current time is used instead of the completion date.' => 'Si la tarea no está cerrada, se utiliza la hora actual en lugar de la fecha de finalización.', + 'Set automatically the start date' => 'Establecer automáticamente la fecha de inicio', + 'Edit Authentication' => 'Editar autenticación', + 'Remote user' => 'Usuario remoto', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Los usuarios remotos no almacenan su contraseña en la base de datos Kanboard, ejemplos: cuentas LDAP, Google y Github.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Si marca la casilla "Deshabilitar el formulario de inicio de sesión", las credenciales ingresadas en el formulario de inicio de sesión serán ignoradas.', + 'Default task color' => 'Color predeterminado de la tarea', + 'This feature does not work with all browsers.' => 'Esta función no funciona con todos los navegadores.', + 'There is no destination project available.' => 'No hay proyecto de destino disponible.', + 'Trigger automatically subtask time tracking' => 'Activar automáticamente el seguimiento de tiempo de la subtarea', + 'Include closed tasks in the cumulative flow diagram' => 'Incluir tareas cerradas en el diagrama de flujo acumulativo', + 'Current swimlane: %s' => 'Carril actual: %s', + 'Current column: %s' => 'Columna actual: %s', + 'Current category: %s' => 'Categoría actual: %s', + 'no category' => 'sin categoria', + 'Current assignee: %s' => 'Asignado actual: %s', + 'not assigned' => 'no asignado', + 'Author:' => 'Autor:', + 'contributors' => 'colaboradores', + 'License:' => 'Licencia:', + 'License' => 'Licencia', + 'Enter the text below' => 'Introduzca el texto a continuación', + 'Start date:' => 'Fecha de inicio:', + 'Due date:' => 'Fecha de vencimiento:', + 'People who are project managers' => 'Personas que son gerentes de proyecto', + 'People who are project members' => 'Personas que son miembros del proyecto', + 'NOK - Norwegian Krone' => 'NOK - Corona Noruega', + 'Show this column' => 'Mostrar esta columna', + 'Hide this column' => 'Ocultar esta columna', + 'open file' => 'abrir archivo', + 'End date' => 'Fecha final', + 'Users overview' => 'Visión general de los usuarios', + 'Members' => 'Miembros', + 'Shared project' => 'Proyecto compartido', + 'Project managers' => 'Gerentes de Proyecto', + 'Projects list' => 'Lista de proyectos', + 'End date:' => 'Fecha final:', + 'Change task color when using a specific task link' => 'Cambiar el color de la tarea cuando se utiliza un enlace de tarea específico', + 'Task link creation or modification' => 'Creación o modificación de enlaces de tareas', + 'Milestone' => 'Hito', + 'Documentation: %s' => 'Documentación: %s', + 'Reset the search/filter box' => 'Restablecer la caja de búsqueda/filtro', + 'Documentation' => 'Documentación', + 'Table of contents' => 'Tabla de contenido', + 'Author' => 'Autor', + 'Version' => 'Versión', + 'Plugins' => 'Plugins', + 'There is no plugin loaded.' => 'No hay ningún plugin cargado.', + 'My notifications' => 'Mis Notificaciones', + 'Custom filters' => 'Filtros personalizados', + 'Your custom filter have been created successfully.' => 'Su filtro personalizado se ha creado correctamente.', + 'Unable to create your custom filter.' => 'No se puede crear el filtro personalizado.', + 'Custom filter removed successfully.' => 'Filtro personalizado eliminado correctamente.', + 'Unable to remove this custom filter.' => 'No se puede quitar este filtro personalizado.', + 'Edit custom filter' => 'Editar filtro personalizado', + 'Your custom filter have been updated successfully.' => 'Su filtro personalizado se ha actualizado correctamente.', + 'Unable to update custom filter.' => 'No se puede actualizar el filtro personalizado.', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Nuevo archivo adjunto en la tarea #%d: %s', + 'New comment on task #%d' => 'Nuevo comentario sobre la tarea #%d', + 'Comment updated on task #%d' => 'Comentario actualizado en la tarea #%d', + 'New subtask on task #%d' => 'Nueva subtarea en la tarea #%d', + 'Subtask updated on task #%d' => 'Subtarea actualizada en la tarea #%d', + 'New task #%d: %s' => 'Nueva tarea #%d: %s', + 'Task updated #%d' => 'Tarea actualizada #%d', + 'Task #%d closed' => 'Tarea #%d cerrada', + 'Task #%d opened' => 'Tarea #%d abierta', + 'Column changed for task #%d' => 'Columna modificada para la tarea #%d', + 'New position for task #%d' => 'Nueva posición para la tarea #%d', + 'Swimlane changed for task #%d' => 'Carril cambiado para la tarea #%d', + 'Assignee changed on task #%d' => 'Asignado cambiado en la tarea #%d', + '%d overdue tasks' => '%d tareas pendientes', + 'Task #%d is overdue' => 'La tarea #%d está atrasada', + 'No notification.' => 'Sin notificación.', + 'Mark all as read' => 'marcar todo como leido', + 'Mark as read' => 'Marcar como leído', + 'Total number of tasks in this column across all swimlanes' => 'Número total de tareas en esta columna contando todos los carriles', + 'Collapse swimlane' => 'Colapsar el carril', + 'Expand swimlane' => 'Expandir el carril', + 'Add a new filter' => 'Añadir un nuevo filtro', + 'Share with all project members' => 'Compartir con todos los miembros del proyecto', + 'Shared' => 'Compartido', + 'Owner' => 'Propietario', + 'Unread notifications' => 'Notificaciones no leídas', + 'Notification methods:' => 'Métodos de notificación:', + 'Unable to read your file' => 'No se puede leer el archivo', + '%d task(s) have been imported successfully.' => '%d tarea(s) se han importado correctamente.', + 'Nothing have been imported!' => '¡Nada se ha importado!', + 'Import users from CSV file' => 'Importar usuarios del archivo CSV', + '%d user(s) have been imported successfully.' => '%d usuario(s) se han importado correctamente.', + 'Comma' => 'Coma', + 'Semi-colon' => 'Punto y coma', + 'Tab' => 'Tabulación', + 'Vertical bar' => 'Barra vertical', + 'Double Quote' => 'Comillas dobles', + 'Single Quote' => 'Comillas simples', + '%s attached a file to the task #%d' => '%s adjuntó un archivo a la tarea #%d', + 'There is no column or swimlane activated in your project!' => '¡No hay columna ni carril activado en tu proyecto!', + 'Append filter (instead of replacement)' => 'Agregar el filtro (en lugar del reemplazo)', + 'Append/Replace' => 'Añadir/Reemplazar', + 'Append' => 'Adjuntar', + 'Replace' => 'Reemplazar', + 'Import' => 'Importar', + 'Change sorting' => 'Cambio de orden', + 'Tasks Importation' => 'Importación de Tareas', + 'Delimiter' => 'Delimitador', + 'Enclosure' => 'Contenedor', + 'CSV File' => 'Archivo CSV', + 'Instructions' => 'Instrucciones', + 'Your file must use the predefined CSV format' => 'Su archivo debe utilizar el formato CSV predefinido', + 'Your file must be encoded in UTF-8' => 'Su archivo debe estar codificado en UTF-8', + 'The first row must be the header' => 'La primera fila debe ser el encabezado', + 'Duplicates are not verified for you' => 'Los duplicados no se verifican', + 'The due date must use the ISO format: YYYY-MM-DD' => 'La fecha de vencimiento debe utilizar el formato ISO: AAAA-MM-DD', + 'Download CSV template' => 'Descargar plantilla CSV', + 'No external integration registered.' => 'No se ha registrado ninguna integración externa.', + 'Duplicates are not imported' => 'Los duplicados no se importan', + 'Usernames must be lowercase and unique' => 'Los nombres de usuario deben estar en minúsculas y ser únicos', + 'Passwords will be encrypted if present' => 'Las contraseñas se cifrarán si están presentes', + '%s attached a new file to the task %s' => '%s adjunto un nuevo archivo a la tarea %s', + 'Link type' => 'Tipo de enlace', + 'Assign automatically a category based on a link' => 'Asignar automáticamente una categoría basada en un enlace', + 'BAM - Konvertible Mark' => 'BAM - Marco Convertible', + 'Assignee Username' => 'Usuario asignado', + 'Assignee Name' => 'Nombre del asignado', + 'Groups' => 'Grupos', + 'Members of %s' => 'Miembros de %s', + 'New group' => 'Nuevo grupo', + 'Group created successfully.' => 'Grupo creado correctamente.', + 'Unable to create your group.' => 'No se puede crear su grupo.', + 'Edit group' => 'Editar grupo', + 'Group updated successfully.' => 'Grupo actualizado correctamente.', + 'Unable to update your group.' => 'No se puede actualizar su grupo.', + 'Add group member to "%s"' => 'Agregue el miembro del grupo a "%s"', + 'Group member added successfully.' => 'Miembro del grupo agregado correctamente.', + 'Unable to add group member.' => 'No se puede agregar el miembro del grupo.', + 'Remove user from group "%s"' => 'Quitar usuario del grupo "%s"', + 'User removed successfully from this group.' => 'Usuario eliminado correctamente de este grupo.', + 'Unable to remove this user from the group.' => 'No se puede eliminar este usuario del grupo.', + 'Remove group' => 'Eliminar grupo', + 'Group removed successfully.' => 'Grupo eliminado correctamente.', + 'Unable to remove this group.' => 'No se pudo eliminar este grupo.', + 'Project Permissions' => 'Permisos del proyecto', + 'Manager' => 'Gerente', + 'Project Manager' => 'Gerente de proyecto', + 'Project Member' => 'Miembro del proyecto', + 'Project Viewer' => 'Visor de proyectos', + 'Your account is locked for %d minutes' => 'Tu cuenta está bloqueada durante %d minutos', + 'Invalid captcha' => 'Captcha inválido', + 'The name must be unique' => 'El nombre debe ser único', + 'View all groups' => 'Ver todos los grupos', + 'There is no user available.' => 'No hay usuarios disponibles.', + 'Do you really want to remove the user "%s" from the group "%s"?' => '¿Realmente desea eliminar el usuario "%s" del grupo "%s"?', + 'There is no group.' => 'No hay grupo.', + 'Add group member' => 'Agregar miembro del grupo', + 'Do you really want to remove this group: "%s"?' => '¿Desea realmente eliminar este grupo: "%s"?', + 'There is no user in this group.' => 'No hay ningún usuario en este grupo.', + 'Permissions' => 'Permisos', + 'Allowed Users' => 'Usuarios permitidos', + 'No user have been allowed specifically.' => 'Ningún usuario ha sido autorizado específicamente.', + 'Role' => 'Rol', + 'Enter user name...' => 'Introduzca su nombre de usuario...', + 'Allowed Groups' => 'Grupos permitidos', + 'No group have been allowed specifically.' => 'Ningún grupo se ha permitido específicamente.', + 'Group' => 'Grupo', + 'Group Name' => 'Nombre del grupo', + 'Enter group name...' => 'Introduzca el nombre del grupo ...', + 'Role:' => 'Rol:', + 'Project members' => 'Miembros del proyecto', + '%s mentioned you in the task #%d' => '%s te mencionó en la tarea #%d', + '%s mentioned you in a comment on the task #%d' => '%s te ha mencionado en un comentario sobre la tarea #%d', + 'You were mentioned in the task #%d' => 'Te mencionaron en la tarea #%d', + 'You were mentioned in a comment on the task #%d' => 'Usted fue mencionado en un comentario en la tarea #%d', + 'Estimated hours: ' => 'Horas estimadas: ', + 'Actual hours: ' => 'Horas reales: ', + 'Hours Spent' => 'Horas Gastadas', + 'Hours Estimated' => 'Horas Estimadas', + 'Estimated Time' => 'Tiempo Estimado', + 'Actual Time' => 'Tiempo Real', + 'Estimated vs actual time' => 'Horas Presupuestadas vs. tiempo real', + 'RUB - Russian Ruble' => 'RUB - Rublo Ruso', + 'Assign the task to the person who does the action when the column is changed' => 'Asigne la tarea a la persona que realiza la acción cuando se cambia la columna', + 'Close a task in a specific column' => 'Cerrar una tarea en una columna específica', + 'Time-based One-time Password Algorithm' => 'Algoritmo de contraseña de una sola vez basado en el tiempo', + 'Two-Factor Provider: ' => 'Proveedor de dos factores: ', + 'Disable two-factor authentication' => 'Deshabilitar la autenticación de dos factores', + 'Enable two-factor authentication' => 'Habilitar la autenticación de dos factores', + 'There is no integration registered at the moment.' => 'No hay ninguna integración registrada en este momento.', + 'Password Reset for Kanboard' => 'Restablecer contraseña para Kanboard', + 'Forgot password?' => '¿Olvidó su contraseña?', + 'Enable "Forget Password"' => 'Habilitar "Olvidar contraseña"', + 'Password Reset' => 'Restablecimiento de contraseña', + 'New password' => 'Nueva contraseña', + 'Change Password' => 'Cambiar la contraseña', + 'To reset your password click on this link:' => 'Para restablecer su contraseña, haga clic en este enlace:', + 'Last Password Reset' => 'Restablecer la última contraseña', + 'The password has never been reinitialized.' => 'La contraseña nunca ha sido reinicializada.', + 'Creation' => 'Creación', + 'Expiration' => 'Vencimiento', + 'Password reset history' => 'Historial de restablecimiento de contraseñas', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Todas las tareas de la columna "%s" y el carril "%s" han sido cerradas con éxito.', + 'Do you really want to close all tasks of this column?' => '¿Realmente desea cerrar todas las tareas de esta columna?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d tarea(s) en la columna "%s" y el carril "%s" se cerrará.', + 'Close all tasks of this column' => 'Cierre todas las tareas de esta columna', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Ningún plugin ha registrado un método de notificación de proyecto. Todavía puede configurar notificaciones individuales en su perfil de usuario.', + 'My dashboard' => 'Mi tablero', + 'My profile' => 'Mi perfil', + 'Project owner: ' => 'Propietario del proyecto: ', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'El identificador del proyecto es opcional y debe ser alfanumérico, por ejemplo: MIPROYECTO.', + 'Project owner' => 'Propietario del proyecto', + 'Private projects do not have users and groups management.' => 'Los proyectos privados no tienen gestión de usuarios y grupos.', + 'There is no project member.' => 'No hay ningún miembro del proyecto.', + 'Priority' => 'Prioridad', + 'Task priority' => 'Prioridad de la tarea', + 'General' => 'General', + 'Dates' => 'Fechas', + 'Default priority' => 'Prioridad predeterminada', + 'Lowest priority' => 'Menor prioridad', + 'Highest priority' => 'Mayor prioridad', + 'Close a task when there is no activity' => 'Cierra una tarea cuando no hay actividad', + 'Duration in days' => 'Duración en días', + 'Send email when there is no activity on a task' => 'Enviar correo electrónico cuando no hay actividad en una tarea', + 'Unable to fetch link information.' => 'No es posible obtener información de enlace.', + 'Daily background job for tasks' => 'Trabajo en segundo plano diario para las tareas', + 'Auto' => 'Auto', + 'Related' => 'Relacionado', + 'Attachment' => 'Archivo adjunto', + 'Title not found' => 'Título no encontrado', + 'Web Link' => 'Enlace web', + 'External links' => 'Enlaces externos', + 'Add external link' => 'Añadir enlace externo', + 'Type' => 'Tipo', + 'Dependency' => 'Dependencia', + 'Add internal link' => 'Añadir enlace interno', + 'Add a new external link' => 'Añadir un nuevo enlace externo', + 'Edit external link' => 'Editar enlace externo', + 'External link' => 'Enlace externo', + 'Copy and paste your link here...' => 'Copia y pega el enlace aquí ...', + 'URL' => 'URL', + 'Internal links' => 'Enlaces internos', + 'Assign to me' => 'Asignármelo', + 'Me' => 'Yo', + 'Do not duplicate anything' => 'No duplique nada', + 'Projects management' => 'Gestión de proyectos', + 'Users management' => 'Gestión de usuarios', + 'Groups management' => 'Gestión de grupos', + 'Create from another project' => 'Crear desde otro proyecto', + 'open' => 'abierto', + 'closed' => 'cerrado', + 'Priority:' => 'Prioridad:', + 'Reference:' => 'Referencia:', + 'Complexity:' => 'Complejidad:', + 'Swimlane:' => 'Carril:', + 'Column:' => 'Columna:', + 'Position:' => 'Posición:', + 'Creator:' => 'Creador:', + 'Time estimated:' => 'Horas Presupuestadas:', + '%s hours' => '%s horas', + 'Time spent:' => 'Tiempo usado:', + 'Created:' => 'Creado:', + 'Modified:' => 'Modificado:', + 'Completed:' => 'Terminado:', + 'Started:' => 'Empezado:', + 'Moved:' => 'Movido:', 'Task #%d' => 'Tarea número %d', - // 'Time format' => '', - // 'Start date: ' => '', - // 'End date: ' => '', - // 'New due date: ' => '', - // 'Start date changed: ' => '', - // 'Disable private projects' => '', - // 'Do you really want to remove this custom filter: "%s"?' => '', - // 'Remove a custom filter' => '', - // 'User activated successfully.' => '', - // 'Unable to enable this user.' => '', - // 'User disabled successfully.' => '', - // 'Unable to disable this user.' => '', - // 'All files have been uploaded successfully.' => '', - // 'The maximum allowed file size is %sB.' => '', - // 'Drag and drop your files here' => '', - // 'choose files' => '', - // 'View profile' => '', - // 'Two Factor' => '', - // 'Disable user' => '', - // 'Do you really want to disable this user: "%s"?' => '', - // 'Enable user' => '', - // 'Do you really want to enable this user: "%s"?' => '', - // 'Download' => '', - // 'Uploaded: %s' => '', - // 'Size: %s' => '', - // 'Uploaded by %s' => '', - // 'Filename' => '', - // 'Size' => '', - // 'Column created successfully.' => '', - // 'Another column with the same name exists in the project' => '', - // 'Default filters' => '', - // 'Your board doesn\'t have any columns!' => '', - // 'Change column position' => '', - // 'Switch to the project overview' => '', - // 'User filters' => '', - // 'Category filters' => '', - // 'Upload a file' => '', - // 'View file' => '', - // 'Last activity' => '', - // 'Change subtask position' => '', + 'Time format' => 'Formato de tiempo', + 'Start date: ' => 'Fecha de inicio: ', + 'End date: ' => 'Fecha final: ', + 'New due date: ' => 'Nueva fecha de vencimiento: ', + 'Start date changed: ' => 'Fecha de inicio cambiada: ', + 'Disable private projects' => 'Inhabilitar proyectos privados', + 'Do you really want to remove this custom filter: "%s"?' => '¿Desea realmente eliminar este filtro personalizado: "%s"?', + 'Remove a custom filter' => 'Eliminar un filtro personalizado', + 'User activated successfully.' => 'Usuario activado correctamente.', + 'Unable to enable this user.' => 'No se puede habilitar este usuario.', + 'User disabled successfully.' => 'El usuario ha sido desactivado correctamente.', + 'Unable to disable this user.' => 'No se puede deshabilitar este usuario.', + 'All files have been uploaded successfully.' => 'Todos los archivos se han cargado correctamente.', + 'The maximum allowed file size is %sB.' => 'El tamaño máximo de archivo permitido es %sB.', + 'Drag and drop your files here' => 'Arrastra y suelta tus archivos aquí', + 'choose files' => 'Elija el archivo', + 'View profile' => 'Ver perfil', + 'Two Factor' => 'Dos factores', + 'Disable user' => 'Deshabilitar usuario', + 'Do you really want to disable this user: "%s"?' => '¿Desea realmente desactivar este usuario: "%s"?', + 'Enable user' => 'Habilitar usuario', + 'Do you really want to enable this user: "%s"?' => '¿De verdad quieres habilitar a este usuario: "%s"?', + 'Download' => 'Descargar', + 'Uploaded: %s' => 'Subido: %s', + 'Size: %s' => 'Tamaño: %s', + 'Uploaded by %s' => 'Subido por %s', + 'Filename' => 'Nombre del archivo', + 'Size' => 'Tamaño', + 'Column created successfully.' => 'Columna creada correctamente.', + 'Another column with the same name exists in the project' => 'Otra columna con el mismo nombre existe en el proyecto', + 'Default filters' => 'Filtros predeterminados', + 'Your board doesn\'t have any columns!' => '¡Su tablero no tiene columnas!', + 'Change column position' => 'Cambiar la posición de la columna', + 'Switch to the project overview' => 'Cambiar a la vista general del proyecto', + 'User filters' => 'Filtros de usuario', + 'Category filters' => 'Filtros de categorías', + 'Upload a file' => 'Cargar un archivo', + 'View file' => 'Ver archivo', + 'Last activity' => 'Última actividad', + 'Change subtask position' => 'Cambiar la posición de la subtarea', 'This value must be greater than %d' => 'Este valor no debe de ser más grande que %d', - // 'Another swimlane with the same name exists in the project' => '', - // 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => '', - // 'Actions duplicated successfully.' => '', - // 'Unable to duplicate actions.' => '', - // 'Add a new action' => '', - // 'Import from another project' => '', - // 'There is no action at the moment.' => '', - // 'Import actions from another project' => '', - // 'There is no available project.' => '', - // 'Local File' => '', - // 'Configuration' => '', - // 'PHP version:' => '', - // 'PHP SAPI:' => '', - // 'OS version:' => '', - // 'Database version:' => '', - // 'Browser:' => '', - // 'Task view' => '', - // 'Edit task' => '', - // 'Edit description' => '', - // 'New internal link' => '', - // 'Display list of keyboard shortcuts' => '', - // 'Menu' => '', - // 'Set start date' => '', - // 'Avatar' => '', - // 'Upload my avatar image' => '', - // 'Remove my image' => '', - // 'The OAuth2 state parameter is invalid' => '', - // 'User not found.' => '', - // 'Search in activity stream' => '', - // 'My activities' => '', - // 'Activity until yesterday' => '', - // 'Activity until today' => '', - // 'Search by creator: ' => '', - // 'Search by creation date: ' => '', - // 'Search by task status: ' => '', - // 'Search by task title: ' => '', - // 'Activity stream search' => '', - // 'Projects where "%s" is manager' => '', - // 'Projects where "%s" is member' => '', - // 'Open tasks assigned to "%s"' => '', - // 'Closed tasks assigned to "%s"' => '', - // 'Assign automatically a color based on a priority' => '', - // 'Overdue tasks for the project(s) "%s"' => '', - // 'Upload files' => '', - // 'Installed Plugins' => '', - // 'Plugin Directory' => '', - // 'Plugin installed successfully.' => '', - // 'Plugin updated successfully.' => '', - // 'Plugin removed successfully.' => '', - // 'Subtask converted to task successfully.' => '', - // 'Unable to convert the subtask.' => '', - // 'Unable to extract plugin archive.' => '', - // 'Plugin not found.' => '', - // 'You don\'t have the permission to remove this plugin.' => '', - // 'Unable to download plugin archive.' => '', - // 'Unable to write temporary file for plugin.' => '', - // 'Unable to open plugin archive.' => '', - // 'There is no file in the plugin archive.' => '', - // 'Create tasks in bulk' => '', - // 'Your Kanboard instance is not configured to install plugins from the user interface.' => '', - // 'There is no plugin available.' => '', - // 'Install' => '', + 'Another swimlane with the same name exists in the project' => 'En el proyecto existe otro carril con el mismo nombre', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Ejemplo: http://example.kanboard.net/ (utilizado para generar URLs absolutas)', + 'Actions duplicated successfully.' => 'Acciones duplicadas correctamente.', + 'Unable to duplicate actions.' => 'No se pueden duplicar acciones.', + 'Add a new action' => 'Añadir una acción nueva', + 'Import from another project' => 'Importar desde otro proyecto', + 'There is no action at the moment.' => 'No hay acción en este momento.', + 'Import actions from another project' => 'Importar acciones de otro proyecto', + 'There is no available project.' => 'No hay proyecto disponible.', + 'Local File' => 'Archivo local', + 'Configuration' => 'Configuración', + 'PHP version:' => 'Versión de PHP:', + 'PHP SAPI:' => 'PHP SAPI:', + 'OS version:' => 'Versión del sistema operativo:', + 'Database version:' => 'Versión de base de datos:', + 'Browser:' => 'Navegador:', + 'Task view' => 'Vista de la tarea', + 'Edit task' => 'Editar tarea', + 'Edit description' => 'Editar Descripción', + 'New internal link' => 'Nuevo enlace interno', + 'Display list of keyboard shortcuts' => 'Mostrar lista de atajos de teclado', + 'Menu' => 'Menú', + 'Set start date' => 'Establecer fecha de inicio', + 'Avatar' => 'Avatar', + 'Upload my avatar image' => 'Subir mi imagen de avatar', + 'Remove my image' => 'Eliminar mi imagen', + 'The OAuth2 state parameter is invalid' => 'El parámetro de estado OAuth2 no es válido', + 'User not found.' => 'Usuario no encontrado.', + 'Search in activity stream' => 'Buscar en el flujo de actividades', + 'My activities' => 'Mis actividades', + 'Activity until yesterday' => 'Actividad hasta ayer', + 'Activity until today' => 'Actividad hasta hoy', + 'Search by creator: ' => 'Búsqueda por creador: ', + 'Search by creation date: ' => 'Búsqueda por fecha de creación: ', + 'Search by task status: ' => 'Búsqueda por estado de la tarea: ', + 'Search by task title: ' => 'Buscar por título de tarea: ', + 'Activity stream search' => 'Búsqueda de flujo de actividad', + 'Projects where "%s" is manager' => 'Proyectos donde "%s" es gerente', + 'Projects where "%s" is member' => 'Proyectos donde "%s" es miembro', + 'Open tasks assigned to "%s"' => 'Tareas abiertas asignadas a "%s"', + 'Closed tasks assigned to "%s"' => 'Tareas cerradas asignadas a "%s"', + 'Assign automatically a color based on a priority' => 'Asignar automáticamente un color basado en una prioridad', + 'Overdue tasks for the project(s) "%s"' => 'Tareas vencidas para el (los) proyecto(s) "%s"', + 'Upload files' => 'Subir archivos', + 'Installed Plugins' => 'Plugins instalados', + 'Plugin Directory' => 'Directorio de Plugins', + 'Plugin installed successfully.' => 'Plugin instalado correctamente.', + 'Plugin updated successfully.' => 'Plugin actualizado correctamente.', + 'Plugin removed successfully.' => 'Plugin eliminado correctamente.', + 'Subtask converted to task successfully.' => 'Subtarea convertida a la tarea con éxito.', + 'Unable to convert the subtask.' => 'No se puede convertir la subtarea.', + 'Unable to extract plugin archive.' => 'No se puede extraer archivo plugin.', + 'Plugin not found.' => 'No se ha encontrado el plugin.', + 'You don\'t have the permission to remove this plugin.' => 'No tienes permiso para eliminar este plugin.', + 'Unable to download plugin archive.' => 'No es posible descargar archivos plugin.', + 'Unable to write temporary file for plugin.' => 'No se puede escribir el archivo temporal para el plugin.', + 'Unable to open plugin archive.' => 'No se puede abrir el archivo de plugin', + 'There is no file in the plugin archive.' => 'No hay ningún archivo en el archivo de plugins.', + 'Create tasks in bulk' => 'Crear tareas en lote', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Tu instancia de Kanboard no está configurada para instalar complementos desde la interfaz de usuario.', + 'There is no plugin available.' => 'No hay un plugin disponible.', + 'Install' => 'Instalar', 'Update' => 'Actualizar', - // 'Up to date' => '', - // 'Not available' => '', - // 'Remove plugin' => '', - // 'Do you really want to remove this plugin: "%s"?' => '', - // 'Uninstall' => '', - // 'Listing' => '', - // 'Metadata' => '', - // 'Manage projects' => '', - // 'Convert to task' => '', - // 'Convert sub-task to task' => '', - // 'Do you really want to convert this sub-task to a task?' => '', - // 'My task title' => '', - // 'Enter one task by line.' => '', - // 'Number of failed login:' => '', - // 'Account locked until:' => '', - // 'Email settings' => '', - // 'Email sender address' => '', - // 'Email transport' => '', - // 'Webhook token' => '', - // 'Project tags management' => '', - // 'Tag created successfully.' => '', - // 'Unable to create this tag.' => '', - // 'Tag updated successfully.' => '', - // 'Unable to update this tag.' => '', - // 'Tag removed successfully.' => '', - // 'Unable to remove this tag.' => '', - // 'Global tags management' => '', - // 'Tags' => '', - // 'Tags management' => '', - // 'Add new tag' => '', - // 'Edit a tag' => '', - // 'Project tags' => '', - // 'There is no specific tag for this project at the moment.' => '', - // 'Tag' => '', - // 'Remove a tag' => '', - // 'Do you really want to remove this tag: "%s"?' => '', - // 'Global tags' => '', - // 'There is no global tag at the moment.' => '', - // 'This field cannot be empty' => '', - // 'Close a task when there is no activity in an specific column' => '', - // '%s removed a subtask for the task #%d' => '', - // '%s removed a comment on the task #%d' => '', - // 'Comment removed on task #%d' => '', - // 'Subtask removed on task #%d' => '', - // 'Hide tasks in this column in the dashboard' => '', - // '%s removed a comment on the task %s' => '', - // '%s removed a subtask for the task %s' => '', - // 'Comment removed' => '', - // 'Subtask removed' => '', - // '%s set a new internal link for the task #%d' => '', - // '%s removed an internal link for the task #%d' => '', - // 'A new internal link for the task #%d have been defined' => '', - // 'Internal link removed for the task #%d' => '', - // '%s set a new internal link for the task %s' => '', - // '%s removed an internal link for the task %s' => '', - // 'Automatically set the due date on task creation' => '', - // 'Move the task to another column when closed' => '', - // 'Move the task to another column when not moved during a given period' => '', - // 'Dashboard for %s' => '', - // 'Tasks overview for %s' => '', - // 'Subtasks overview for %s' => '', - // 'Projects overview for %s' => '', - // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', - // 'Assign a color when the task is moved to a specific swimlane' => '', - // 'Assign a priority when the task is moved to a specific swimlane' => '', - // 'User unlocked successfully.' => '', - // 'Unable to unlock the user.' => '', - // 'Move a task to another swimlane' => '', - // 'Creator Name' => '', - // 'Time spent and estimated' => '', - // 'Move position' => '', - // 'Move task to another position on the board' => '', - // 'Insert before this task' => '', - // 'Insert after this task' => '', - // 'Unlock this user' => '', - // 'Custom Project Roles' => '', - // 'Add a new custom role' => '', - // 'Restrictions for the role "%s"' => '', - // 'Add a new project restriction' => '', - // 'Add a new drag and drop restriction' => '', - // 'Add a new column restriction' => '', - // 'Edit this role' => '', - // 'Remove this role' => '', - // 'There is no restriction for this role.' => '', - // 'Only moving task between those columns is permitted' => '', - // 'Close a task in a specific column when not moved during a given period' => '', - // 'Edit columns' => '', - // 'The column restriction has been created successfully.' => '', - // 'Unable to create this column restriction.' => '', - // 'Column restriction removed successfully.' => '', - // 'Unable to remove this restriction.' => '', - // 'Your custom project role has been created successfully.' => '', - // 'Unable to create custom project role.' => '', - // 'Your custom project role has been updated successfully.' => '', - // 'Unable to update custom project role.' => '', - // 'Custom project role removed successfully.' => '', - // 'Unable to remove this project role.' => '', - // 'The project restriction has been created successfully.' => '', - // 'Unable to create this project restriction.' => '', - // 'Project restriction removed successfully.' => '', - // 'You cannot create tasks in this column.' => '', - // 'Task creation is permitted for this column' => '', - // 'Closing or opening a task is permitted for this column' => '', - // 'Task creation is blocked for this column' => '', - // 'Closing or opening a task is blocked for this column' => '', - // 'Task creation is not permitted' => '', - // 'Closing or opening a task is not permitted' => '', - // 'New drag and drop restriction for the role "%s"' => '', - // 'People belonging to this role will be able to move tasks only between the source and the destination column.' => '', - // 'Remove a column restriction' => '', - // 'Do you really want to remove this column restriction: "%s" to "%s"?' => '', - // 'New column restriction for the role "%s"' => '', - // 'Rule' => '', - // 'Do you really want to remove this column restriction?' => '', - // 'Custom roles' => '', - // 'New custom project role' => '', - // 'Edit custom project role' => '', - // 'Remove a custom role' => '', - // 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '', - // 'There is no custom role for this project.' => '', - // 'New project restriction for the role "%s"' => '', - // 'Restriction' => '', - // 'Remove a project restriction' => '', - // 'Do you really want to remove this project restriction: "%s"?' => '', - // 'Duplicate to multiple projects' => '', - // 'This field is required' => '', - // 'Moving a task is not permitted' => '', - // 'This value must be in the range %d to %d' => '', - // 'You are not allowed to move this task.' => '', - // 'API User Access' => '', + 'Up to date' => 'Hasta la fecha', + 'Not available' => 'No disponible', + 'Remove plugin' => 'Eliminar plugin', + 'Do you really want to remove this plugin: "%s"?' => '¿Realmente desea eliminar este plugin: "%s"?', + 'Uninstall' => 'Desinstalar', + 'Listing' => 'Listado', + 'Metadata' => 'Metadata', + 'Manage projects' => 'Gestionar proyectos', + 'Convert to task' => 'Convertir en tarea', + 'Convert sub-task to task' => 'Convertir subtarea en tarea', + 'Do you really want to convert this sub-task to a task?' => '¿Realmente desea convertir esta subtarea a una tarea?', + 'My task title' => 'Título de mi tarea', + 'Enter one task by line.' => 'Ingrese una tarea por línea.', + 'Number of failed login:' => 'Número de inicio de sesión fallido:', + 'Account locked until:' => 'Cuenta bloqueada hasta:', + 'Email settings' => 'Ajustes de correo electrónico', + 'Email sender address' => 'Dirección del remitente del correo electrónico', + 'Email transport' => 'Transporte por correo electrónico', + 'Webhook token' => 'Token Webhook', + 'Project tags management' => 'Gestión de etiquetas de proyecto', + 'Tag created successfully.' => 'Etiqueta creada correctamente.', + 'Unable to create this tag.' => 'No se puede crear esta etiqueta.', + 'Tag updated successfully.' => 'Etiqueta actualizada correctamente.', + 'Unable to update this tag.' => 'No se puede actualizar esta etiqueta.', + 'Tag removed successfully.' => 'Etiqueta eliminada correctamente.', + 'Unable to remove this tag.' => 'No se ha podido eliminar esta etiqueta.', + 'Global tags management' => 'Gestión de etiquetas globales', + 'Tags' => 'Etiquetas', + 'Tags management' => 'Gestión de etiquetas', + 'Add new tag' => 'Añadir nueva etiqueta', + 'Edit a tag' => 'Modificar una etiqueta', + 'Project tags' => 'Etiquetas del proyecto', + 'There is no specific tag for this project at the moment.' => 'No hay una etiqueta específica para este proyecto en este momento.', + 'Tag' => 'Etiqueta', + 'Remove a tag' => 'Eliminar una etiqueta', + 'Do you really want to remove this tag: "%s"?' => '¿Desea realmente eliminar esta etiqueta: "%s"?', + 'Global tags' => 'Etiquetas globales', + 'There is no global tag at the moment.' => 'No hay una etiqueta global en este momento.', + 'This field cannot be empty' => 'Este campo no puede estar vacío', + 'Close a task when there is no activity in an specific column' => 'Cierra una tarea cuando no hay actividad en una columna específica', + '%s removed a subtask for the task #%d' => '%s eliminó una subtarea para la tarea %d', + '%s removed a comment on the task #%d' => '%s eliminó un comentario para la tarea %d', + 'Comment removed on task #%d' => 'Comentario eliminado en la tarea #%d', + 'Subtask removed on task #%d' => 'Subtarea eliminada en la tarea #%d', + 'Hide tasks in this column in the dashboard' => 'Ocultar tareas en esta columna en el tablero', + '%s removed a comment on the task %s' => '%s eliminó un comentario para la tarea %s', + '%s removed a subtask for the task %s' => '%s eliminó una subtarea para la tarea %s', + 'Comment removed' => 'Comentario eliminado', + 'Subtask removed' => 'Sub-tarea eliminada', + '%s set a new internal link for the task #%d' => '%s estableció un nuevo enlace interno para la tarea %d', + '%s removed an internal link for the task #%d' => '%s eliminó un nuevo enlace interno para la tarea %d', + 'A new internal link for the task #%d have been defined' => 'Se ha definido un nuevo enlace interno para la tarea #%d', + 'Internal link removed for the task #%d' => 'Enlace interno eliminado para la tarea #%d', + '%s set a new internal link for the task %s' => '%s estableció un nuevo enlace interno para la tarea %s', + '%s removed an internal link for the task %s' => '%s eliminó un enlace interno para la tarea %s', + 'Automatically set the due date on task creation' => 'Establecer automáticamente la fecha de vencimiento en la creación de tareas', + 'Move the task to another column when closed' => 'Mover la tarea a otra columna cuando esté cerrada', + 'Move the task to another column when not moved during a given period' => 'Mover la tarea a otra columna cuando no se mueve durante un período determinado', + 'Dashboard for %s' => 'Tablero para %s', + 'Tasks overview for %s' => 'Visión general de tareas para %s', + 'Subtasks overview for %s' => 'Visión general de subtareas para %s', + 'Projects overview for %s' => 'Visión general de proyectos para %s', + 'Activity stream for %s' => 'Flujo de actividad para %s', + 'Assign a color when the task is moved to a specific swimlane' => 'Asignar un color cuando la tarea se mueve a un carril específico', + 'Assign a priority when the task is moved to a specific swimlane' => 'Asignar una prioridad cuando la tarea se mueve a un carril específico', + 'User unlocked successfully.' => 'Usuario desbloqueado correctamente.', + 'Unable to unlock the user.' => 'No se puede desbloquear el usuario.', + 'Move a task to another swimlane' => 'Mueve una tarea a otro carril', + 'Creator Name' => 'Nombre del Creador', + 'Time spent and estimated' => 'Tiempo empleado y estimado', + 'Move position' => 'Mover la posición', + 'Move task to another position on the board' => 'Mover la tarea a otra posición en el tablero', + 'Insert before this task' => 'Insertar antes de esta tarea', + 'Insert after this task' => 'Insertar después de esta tarea', + 'Unlock this user' => 'Desbloquear este usuario', + 'Custom Project Roles' => 'Roles de proyecto personalizados', + 'Add a new custom role' => 'Agregar un nuevo rol personalizado', + 'Restrictions for the role "%s"' => 'Restricciones para el rol "%s"', + 'Add a new project restriction' => 'Añadir una nueva restricción de proyecto', + 'Add a new drag and drop restriction' => 'Añadir una nueva restricción de arrastrar y soltar', + 'Add a new column restriction' => 'Agregar una nueva restricción de columna', + 'Edit this role' => 'Editar este rol', + 'Remove this role' => 'Eliminar este rol', + 'There is no restriction for this role.' => 'No hay restricción para este rol.', + 'Only moving task between those columns is permitted' => 'Sólo se permite el movimiento de una tarea entre esas columnas', + 'Close a task in a specific column when not moved during a given period' => 'Cierra una tarea en una columna específica cuando no se mueve durante un período determinado', + 'Edit columns' => 'Editar columnas', + 'The column restriction has been created successfully.' => 'La restricción de columna se ha creado correctamente.', + 'Unable to create this column restriction.' => 'No se puede crear esta restricción de columna.', + 'Column restriction removed successfully.' => 'Se ha eliminado correctamente la restricción de columna.', + 'Unable to remove this restriction.' => 'No se puede eliminar esta restricción.', + 'Your custom project role has been created successfully.' => 'El rol de proyecto personalizado se ha creado correctamente.', + 'Unable to create custom project role.' => 'No se puede crear un rol de proyecto personalizado.', + 'Your custom project role has been updated successfully.' => 'Su rol de proyecto personalizado se ha actualizado correctamente.', + 'Unable to update custom project role.' => 'No se puede actualizar el rol de proyecto personalizado.', + 'Custom project role removed successfully.' => 'El rol de proyecto personalizado se eliminó correctamente.', + 'Unable to remove this project role.' => 'No se pudo eliminar esta función del proyecto.', + 'The project restriction has been created successfully.' => 'La restricción del proyecto se ha creado con éxito.', + 'Unable to create this project restriction.' => 'No se puede crear esta restricción de proyecto.', + 'Project restriction removed successfully.' => 'Se ha eliminado correctamente la restricción de proyecto.', + 'You cannot create tasks in this column.' => 'No puede crear tareas en esta columna.', + 'Task creation is permitted for this column' => 'La creación de tareas está permitida para esta columna', + 'Closing or opening a task is permitted for this column' => 'El cierre o apertura de una tarea está permitido para esta columna', + 'Task creation is blocked for this column' => 'La creación de tareas está bloqueada para esta columna', + 'Closing or opening a task is blocked for this column' => 'El cierre o apertura de una tarea está bloqueado para esta columna', + 'Task creation is not permitted' => 'No se permite la creación de tareas', + 'Closing or opening a task is not permitted' => 'No se permite cerrar ni abrir una tarea', + 'New drag and drop restriction for the role "%s"' => 'Nueva restricción de arrastrar y soltar para el rol "%s"', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Las personas pertenecientes a este rol sólo podrán mover las tareas entre la columna de origen y la de destino.', + 'Remove a column restriction' => 'Eliminar una restricción de columna', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => '¿Realmente desea eliminar esta restricción de columna: "%s" a "%s"?', + 'New column restriction for the role "%s"' => 'Nueva restricción de columna para el rol "%s"', + 'Rule' => 'Regla', + 'Do you really want to remove this column restriction?' => '¿Realmente desea eliminar esta restricción de columna?', + 'Custom roles' => 'Roles personalizados', + 'New custom project role' => 'Nuevo rol de proyecto personalizado', + 'Edit custom project role' => 'Editar un rol de proyecto personalizado', + 'Remove a custom role' => 'Eliminar un rol personalizado', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '¿Realmente desea eliminar este rol personalizado: "%s"? Todas las personas asignadas a este rol se convertirán en miembros del proyecto.', + 'There is no custom role for this project.' => 'No hay ningun rol personalizado para este proyecto.', + 'New project restriction for the role "%s"' => 'Nueva restricción de proyecto para el rol "%s"', + 'Restriction' => 'Restricción', + 'Remove a project restriction' => 'Eliminar una restricción de proyecto', + 'Do you really want to remove this project restriction: "%s"?' => '¿Realmente desea eliminar esta restricción de proyecto: "%s"?', + 'Duplicate to multiple projects' => 'Duplicar en varios proyectos', + 'This field is required' => 'Este campo es requerido', + 'Moving a task is not permitted' => 'No se permite mover una tarea', + 'This value must be in the range %d to %d' => 'Este valor debe estar en el rango %d a %d', + 'You are not allowed to move this task.' => 'No se le permite mover esta tarea.', + 'API User Access' => 'Acceso de usuario de API', 'Preview' => 'Previsualizar', 'Write' => 'Escribir', 'Write your text in Markdown' => 'Redacta el texto en Markdown', - // 'New External Task: %s' => '', - // 'No personal API access token registered.' => '', - // 'Your personal API access token is "%s"' => '', - // 'Remove your token' => '', - // 'Generate a new token' => '', - // 'Showing %d-%d of %d' => '', - // 'Outgoing Emails' => '', - // 'Add or change currency rate' => '', - // 'Reference currency: %s' => '', - // 'Add custom filters' => '', - // 'Export' => '', - // 'Add link label' => '', - // 'Incompatible Plugins' => '', - // 'Compatibility' => '', - // 'Permissions and ownership' => '', - // 'Priorities' => '', - // 'Close this window' => '', - // 'Unable to upload this file.' => '', - // 'Import tasks' => '', - // 'Choose a project' => '', - // 'Profile' => '', - // 'Application role' => '', - // '%d invitations were sent.' => '', - // '%d invitation was sent.' => '', - // 'Unable to create this user.' => '', - // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', - // 'Created at:' => '', - // 'Updated at:' => '', - // 'There is no custom filter.' => '', - // 'New User' => '', - // 'Authentication' => '', - // 'If checked, this user will use a third-party system for authentication.' => '', - // 'The password is necessary only for local users.' => '', - // 'You have been invited to register on Kanboard.' => '', - // 'Click here to join your team' => '', - // 'Invite people' => '', - // 'Emails' => '', - // 'Enter one email address by line.' => '', - // 'Add these people to this project' => '', - // 'Add this person to this project' => '', - // 'Sign-up' => '', - // 'Credentials' => '', + 'No personal API access token registered.' => 'No se ha registrado ningún token de acceso a API personal.', + 'Your personal API access token is "%s"' => 'Su token de acceso a la API personal es "%s"', + 'Remove your token' => 'Elimine su token', + 'Generate a new token' => 'Generar un nuevo token', + 'Showing %d-%d of %d' => 'Mostrando %d-%d de %d', + 'Outgoing Emails' => 'Correo electrónico saliente', + 'Add or change currency rate' => 'Añadir o cambiar el tipo de cambio', + 'Reference currency: %s' => 'Divisa de referencia: %s', + 'Add custom filters' => 'Añadir filtros personalizados', + 'Export' => 'Exportar', + 'Add link label' => 'Añadir etiqueta de enlace', + 'Incompatible Plugins' => 'Plugins incompatibles', + 'Compatibility' => 'Compatibilidad', + 'Permissions and ownership' => 'Permisos y propiedad', + 'Priorities' => 'Prioridades', + 'Close this window' => 'Cierra esta ventana', + 'Unable to upload this file.' => 'No se puede subir este archivo.', + 'Import tasks' => 'Importar tareas', + 'Choose a project' => 'Elija un proyecto', + 'Profile' => 'Perfil', + 'Application role' => 'Rol de la aplicación', + '%d invitations were sent.' => '%d invitaciones enviadas.', + '%d invitation was sent.' => '%d invitación fue enviada.', + 'Unable to create this user.' => 'No se puede crear este usuario.', + 'Kanboard Invitation' => 'Invitación de Kanboard', + 'Visible on dashboard' => 'Visible en el tablero', + 'Created at:' => 'Creado en:', + 'Updated at:' => 'Actualizado en:', + 'There is no custom filter.' => 'No hay un filtro personalizado.', + 'New User' => 'Nuevo usuario', + 'Authentication' => 'Autenticación', + 'If checked, this user will use a third-party system for authentication.' => 'Si está marcado, este usuario utilizará un sistema de terceros para la autenticación.', + 'The password is necessary only for local users.' => 'La contraseña sólo es necesaria para los usuarios locales.', + 'You have been invited to register on Kanboard.' => 'Te han invitado a registrarte en Kanboard.', + 'Click here to join your team' => 'Haz clic aquí para unirte a tu equipo', + 'Invite people' => 'Invitar personas', + 'Emails' => 'Emails', + 'Enter one email address by line.' => 'Ingrese una dirección de correo electrónico por línea.', + 'Add these people to this project' => 'Añadir a estas personas a este proyecto', + 'Add this person to this project' => 'Añadir a esta persona a este proyecto', + 'Sign-up' => 'Regístrate', + 'Credentials' => 'Credenciales', 'New user' => 'Añadir un usuario', - // 'This username is already taken' => '', - // 'A link to reset your password has been sent by email.' => '', - // 'Your profile must have a valid email address.' => '', - // 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '', - // 'TRL - Turkish Lira' => '', - // 'The project email is optional and could be used by several plugins.' => '', - // 'The project email must be unique across all projects' => '', - // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', - // 'Unable to upload files, check the permissions of your data folder.' => '', - // 'Another category with the same name exists in this project' => '', - // 'Comment sent by email successfully.' => '', - // 'Sent by email to [%s](mailto:%s) (%s)' => '', - // 'Unable to read uploaded file.' => '', - // 'Database uploaded successfully.' => '', - // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', - // 'Upload the database' => '', - // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', - // 'Database file' => '', - // 'Upload' => '', - // 'Remove this user from group' => '', - // 'Your project must have at least one active swimlane.' => '', - // 'Project: %s' => '', - // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'This username is already taken' => 'Este nombre de usuario ya está en uso', + 'A link to reset your password has been sent by email.' => 'Se ha enviado por correo electrónico un enlace para restablecer su contraseña.', + 'Your profile must have a valid email address.' => 'Su perfil debe tener una dirección de email válido.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Desafortunadamente, no nos es posible reiniciar su contraseña. ¿Usted introdujo un usuario válido?, ¿Usted tiene una dirección de email válida en su perfil?', + 'TRL - Turkish Lira' => 'TRL - Lira Turca', + 'The project email is optional and could be used by several plugins.' => 'El email del proyecto es opcional y podría ser usado por varios plugins', + 'The project email must be unique across all projects' => 'El email del proyecto debe ser único entre todos los proyectos', + 'The email configuration has been disabled by the administrator.' => 'La configuración de email se ha deshabilitado por el administrador', + 'Close this project' => 'Cerrar este proyecto', + 'Open this project' => 'Abrir este proyecto', + 'Close a project' => 'Cerrar un proyecto', + 'Do you really want to close this project: "%s"?' => '¿Realmente quiere cerrar este proyecto: "%s"?', + 'Reopen a project' => 'Reabrir un proyecto', + 'Do you really want to reopen this project: "%s"?' => '¿Realmente quiere reabrir este proyecto: "%s"?', + 'This project is open' => 'Este proyecto está abierdo', + 'This project is closed' => 'Este proyecto está cerrado', + 'Unable to upload files, check the permissions of your data folder.' => 'No se pueden cargar archivos, verifique los permisos de su carpeta de datos (data)', + 'Another category with the same name exists in this project' => 'Ya existe otra categoría con el mismo nombre en este proyecto', + 'Comment sent by email successfully.' => 'Comentario enviado exitosamente por email', + 'Sent by email to [%s](mailto:%s) (%s)' => 'Enviado por email a [%s](mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'No se pudo leer el archivo cargado', + 'Database uploaded successfully.' => 'Base de datos cargada exitosamente', + 'Task sent by email successfully.' => 'Tarea enviada exitosamente por email', + 'There is no category in this project.' => 'No hay categorías en este proyecto', + 'Send by email' => 'Enviar por email', + 'Create and send a comment by email' => 'Crear y enviar un comentario por email', + 'Subject' => 'Asunto', + 'Upload the database' => 'Cargar la base de datos', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Podría cargar la base de datos Sqlite descargada previamente (formato Gzip)', + 'Database file' => 'Archivo de Base de Datos', + 'Upload' => 'Cargar', + 'Your project must have at least one active swimlane.' => 'Su proyecto debe tener al menos un carril activo', + 'Project: %s' => 'Proyecto: %s', + 'Automatic action not found: "%s"' => 'No se encontró la acción automática: "%s"', + '%d projects' => '%d proyectos', + '%d project' => '%d proyecto', + 'There is no project.' => 'No hay proyecto', + 'Sort' => 'Ordenar', + 'Project ID' => 'ID Proyecto', + 'Project name' => 'Nombre del Proyecto', + 'Public' => 'Público', + 'Private' => 'Privado', + '%d tasks' => '%d tareas', + '%d task' => '%d tarea', + 'Task ID' => 'ID Tarea', + 'Assign automatically a color when due date is expired' => 'Asignar un color automáticamente cuando la fecha de vencimiento haya expirado', + 'Total score in this column across all swimlanes' => 'Puntaje Total en esta columna para todos los carriles', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Peso Argentino', + 'COP - Colombian Peso' => 'COP - Peso Colombiano', + '%d groups' => '%d grupos', + '%d group' => '%d grupo', + 'Group ID' => 'ID Grupo', + 'External ID' => 'ID Externa', + '%d users' => '%d usuarios', + '%d user' => '%d usuario', + 'Hide subtasks' => 'Ocultar subtareas', + 'Show subtasks' => 'Mostrar subtareas', + 'Authentication Parameters' => 'Parámetros de Autenticación', + 'API Access' => 'Acceso API', + 'No users found.' => 'No se encontraron usuarios', + 'User ID' => 'ID del Usuario', + 'Notifications are activated' => 'Las notificaciones están activadas', + 'Notifications are disabled' => 'Las notificaciones están deshabilitadas', + 'User disabled' => 'Usuario deshabilitado', + '%d notifications' => '%d notificaciones', + '%d notification' => '%d notificación', + 'There is no external integration installed.' => 'No se ha instalado ninguna integración externa.', + 'You are not allowed to update tasks assigned to someone else.' => 'No se le permite actualizar tareas asignadas a alguien más.', + 'You are not allowed to change the assignee.' => 'No se le permite cambiar la persona asignada.', + 'Task suppression is not permitted' => 'No está permitido la eliminación de tarea', + 'Changing assignee is not permitted' => 'No está permitido cambiar la persona asignada', + 'Update only assigned tasks is permitted' => 'Está permitido actualizar solo las tareas asignadas', + 'Only for tasks assigned to the current user' => 'Solo para las tareas asignadas al usuario actual', + 'My projects' => 'Mis proyectos', + 'Your are not member of any project.' => 'No eres miembro de ningún proyecto.', + 'My subtasks' => 'Mis subtareas', + '%d subtasks' => '%d subtareas', + '%d subtask' => '%d subtarea', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Mover tareas entre esas columnas solo está permitido para las tareas asignadas al usuario actual.', + '[DUPLICATE]' => '[DUPLICAR]', + 'DKK - Danish Krona' => 'DKK - Corona Danesa', + 'Remove user from group' => 'Eliminar usuario del grupo', + 'Assign the task to its creator' => 'Asignar la tarea a su creador', + 'This task was sent by email to "%s" with subject "%s".' => 'Esta tarea fue enviada por correo a "%s" con el asunto "%s".', + 'Predefined Email Subjects' => 'Asuntos de correo predefinidos', + 'Write one subject by line.' => 'Escriba un asunto por línea.', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index ee7165c8..3c4915a6 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Ylläpitäjä', 'Sign in' => 'Kirjaudu sisään', 'Users' => 'Käyttäjät', - 'No user' => 'Ei käyttäjää', 'Forbidden' => 'Estetty', 'Access Forbidden' => 'Pääsy estetty', 'Edit user' => 'Muokkaa käyttäjää', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Alitehtävä päivitettiin onnistuneesti.', 'Unable to update your sub-task.' => 'Alitehtävän päivitys epäonnistui.', 'Unable to create your sub-task.' => 'Alitehtävän luonti epäonnistui.', - 'Sub-task added successfully.' => 'Alitehtävä luotiin onnistuneesti.', 'Maximum size: ' => 'Maksimikoko: ', 'Display another project' => 'Näytä toinen projekti', 'Created by %s' => 'Luonut: %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Toiminta', 'Dashboard' => 'Työpöytä', 'Confirmation' => 'Vahvistus', - 'Allow everybody to access to this project' => 'Anna kaikille käyttöoikeus tähän projektiin', - 'Everybody have access to this project.' => 'Kaikilla on käyttöoikeus projektiin.', // 'Webhooks' => '', // 'API' => '', // 'Create a comment from an external provider' => '', 'Project management' => 'Projektin hallinta', - 'My projects' => 'Minun projektini', 'Columns' => 'Sarakkeet', 'Task' => 'Tehtävät', - 'Your are not member of any project.' => 'Et ole minkään projektin jäsen.', 'Percentage' => 'Prosentti', 'Number of tasks' => 'Tehtävien määrä', 'Task distribution' => 'Tehtävien jakauma', 'Analytics' => 'Analytiikka', 'Subtask' => 'Alitehtävä', - 'My subtasks' => 'Minun alitehtäväni', // 'User repartition' => '', 'Clone this project' => 'Kahdenna projekti', 'Column removed successfully.' => 'Sarake poistettu onnstuneesti.', @@ -459,7 +452,6 @@ return array( // 'Language:' => '', // 'Timezone:' => '', // 'All columns' => '', - // 'Calendar' => '', // 'Next' => '', // '#%d' => '', // 'All swimlanes' => '', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', // 'Webhook URL' => '', // '%s removed the assignee of the task %s' => '', - // 'Enable Gravatar images' => '', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -611,14 +602,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -637,7 +621,6 @@ return array( // 'Notification' => '', // '%s moved the task #%d to the first swimlane' => '', // 'Swimlane' => '', - // 'Gravatar' => '', // '%s moved the task %s to the first swimlane' => '', // '%s moved the task %s to the swimlane "%s"' => '', // 'This report contains all subtasks information for the given date range.' => '', @@ -674,7 +657,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -688,7 +670,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', @@ -743,15 +724,8 @@ return array( // 'License:' => '', // 'License' => '', // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', // 'Start date:' => '', // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( // 'Members' => '', // 'Shared project' => '', // 'Project managers' => '', - // 'Gantt chart for all projects' => '', // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', // 'Milestone' => '', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', // 'Documentation' => '', // 'Table of contents' => '', - // 'Gantt' => '', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index 4a34d7f3..c86aa18e 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -28,18 +28,17 @@ return array( 'Amber' => 'Ambre', 'Save' => 'Enregistrer', 'Login' => 'Connexion', - 'Official website:' => 'Site web officiel :', + 'Official website:' => 'Site web officiel :', 'Unassigned' => 'Non assigné', 'View this task' => 'Voir cette tâche', 'Remove user' => 'Supprimer un utilisateur', - 'Do you really want to remove this user: "%s"?' => 'Voulez-vous vraiment supprimer cet utilisateur : « %s » ?', + 'Do you really want to remove this user: "%s"?' => 'Voulez-vous vraiment supprimer cet utilisateur : « %s » ?', 'All users' => 'Tous les utilisateurs', 'Username' => 'Identifiant', 'Password' => 'Mot de passe', 'Administrator' => 'Administrateur', 'Sign in' => 'Connexion', 'Users' => 'Utilisateurs', - 'No user' => 'Aucun utilisateur', 'Forbidden' => 'Accès interdit', 'Access Forbidden' => 'Accès interdit', 'Edit user' => 'Modifier un utilisateur', @@ -60,25 +59,25 @@ return array( 'Disable' => 'Désactiver', 'Enable' => 'Activer', 'New project' => 'Nouveau projet', - 'Do you really want to remove this project: "%s"?' => 'Voulez-vous vraiment supprimer ce projet : « %s » ?', + 'Do you really want to remove this project: "%s"?' => 'Voulez-vous vraiment supprimer ce projet : « %s » ?', 'Remove project' => 'Supprimer le projet', - 'Edit the board for "%s"' => 'Modifier le tableau pour « %s »', + 'Edit the board for "%s"' => 'Modifier le tableau pour « %s »', 'Add a new column' => 'Ajouter une nouvelle colonne', 'Title' => 'Titre', 'Assigned to %s' => 'Assigné à %s', 'Remove a column' => 'Supprimer une colonne', 'Unable to remove this column.' => 'Impossible de supprimer cette colonne.', - 'Do you really want to remove this column: "%s"?' => 'Voulez vraiment supprimer cette colonne : « %s » ?', + 'Do you really want to remove this column: "%s"?' => 'Voulez vraiment supprimer cette colonne : « %s » ?', 'Settings' => 'Préférences', 'Application settings' => 'Paramètres de l\'application', 'Language' => 'Langue', - 'Webhook token:' => 'Jeton de securité pour les webhooks :', - 'API token:' => 'Jeton de securité pour l\'API :', + 'Webhook token:' => 'Jeton de sécurité pour les webhooks :', + 'API token:' => 'Jeton de sécurité pour l\'API :', 'Database size:' => 'Taille de la base de données :', 'Download the database' => 'Télécharger la base de données', 'Optimize the database' => 'Optimiser la base de données', '(VACUUM command)' => '(Commande VACUUM)', - '(Gzip compressed Sqlite file)' => '(Fichier Sqlite compressé en Gzip)', + '(Gzip compressed Sqlite file)' => '(Fichier SQLite compressé en Gzip)', 'Close a task' => 'Fermer une tâche', 'Column' => 'Colonne', 'Color' => 'Couleur', @@ -86,7 +85,7 @@ return array( 'Create another task' => 'Créer une autre tâche', 'New task' => 'Nouvelle tâche', 'Open a task' => 'Ouvrir une tâche', - 'Do you really want to open this task: "%s"?' => 'Voulez-vous vraiment ouvrir cette tâche : « %s » ?', + 'Do you really want to open this task: "%s"?' => 'Voulez-vous vraiment ouvrir cette tâche : « %s » ?', 'Back to the board' => 'Retour au tableau', 'There is nobody assigned' => 'Il n\'y a personne d\'assigné à cette tâche', 'Column on the board:' => 'Colonne sur le tableau : ', @@ -102,7 +101,7 @@ return array( 'The username must be unique' => 'Le nom d\'utilisateur doit être unique', 'The user id is required' => 'L\'id de l\'utilisateur est obligatoire', 'Passwords don\'t match' => 'Les mots de passe ne correspondent pas', - 'The confirmation is required' => 'Le confirmation est requise', + 'The confirmation is required' => 'La confirmation est requise', 'The project is required' => 'Le projet est obligatoire', 'The id is required' => 'L\'identifiant est obligatoire', 'The project id is required' => 'L\'identifiant du projet est obligatoire', @@ -110,7 +109,7 @@ return array( 'The title is required' => 'Le titre est obligatoire', 'Settings saved successfully.' => 'Paramètres sauvegardés avec succès.', 'Unable to save your settings.' => 'Impossible de sauvegarder vos réglages.', - 'Database optimization done.' => 'Optmisation de la base de données terminée.', + 'Database optimization done.' => 'Optimisation de la base de données terminée.', 'Your project have been created successfully.' => 'Votre projet a été créé avec succès.', 'Unable to create your project.' => 'Impossible de créer un projet.', 'Project updated successfully.' => 'Votre projet a été mis à jour avec succès.', @@ -139,11 +138,11 @@ return array( 'Backlog' => 'En attente', 'Work in progress' => 'En cours', 'Done' => 'Terminé', - 'Application version:' => 'Version de l\'application :', + 'Application version:' => 'Version de l\'application :', 'Id' => 'Id.', 'Public link' => 'Lien public', 'Timezone' => 'Fuseau horaire', - 'Sorry, I didn\'t find this information in my database!' => 'Désolé, je n\'ai pas trouvé cette information dans ma base de données !', + 'Sorry, I didn\'t find this information in my database!' => 'Désolé, je n\'ai pas trouvé cette information dans ma base de données !', 'Page not found' => 'Page introuvable', 'Complexity' => 'Complexité', 'Task limit' => 'Tâches Max.', @@ -161,15 +160,15 @@ return array( 'Remove an action' => 'Supprimer une action', 'Unable to remove this action.' => 'Impossible de supprimer cette action', 'Action removed successfully.' => 'Action supprimée avec succès.', - 'Automatic actions for the project "%s"' => 'Actions automatisées pour le projet « %s »', + 'Automatic actions for the project "%s"' => 'Actions automatisées pour le projet « %s »', 'Add an action' => 'Ajouter une action', - 'Event name' => 'Nom de l\'événement', + 'Event name' => 'Nom de l\'évènement', 'Action' => 'Action', - 'Event' => 'Événement', - 'When the selected event occurs execute the corresponding action.' => 'Lorsque l\'événement sélectionné se déclenche, exécuter l\'action correspondante.', + 'Event' => 'Évènement', + 'When the selected event occurs execute the corresponding action.' => 'Lorsque l\'évènement sélectionné se déclenche, exécuter l\'action correspondante.', 'Next step' => 'Étape suivante', 'Define action parameters' => 'Définition des paramètres de l\'action', - 'Do you really want to remove this action: "%s"?' => 'Voulez-vous vraiment supprimer cette action « %s » ?', + 'Do you really want to remove this action: "%s"?' => 'Voulez-vous vraiment supprimer cette action « %s » ?', 'Remove an automatic action' => 'Supprimer une action automatisée', 'Assign the task to a specific user' => 'Assigner la tâche à un utilisateur spécifique', 'Assign the task to the person who does the action' => 'Assigner la tâche à la personne qui fait l\'action', @@ -188,8 +187,8 @@ return array( 'Remove a comment' => 'Supprimer un commentaire', 'Comment removed successfully.' => 'Commentaire supprimé avec succès.', 'Unable to remove this comment.' => 'Impossible de supprimer ce commentaire.', - 'Do you really want to remove this comment?' => 'Voulez-vous vraiment supprimer ce commentaire ?', - 'Current password for the user "%s"' => 'Mot de passe actuel pour l\'utilisateur « %s »', + 'Do you really want to remove this comment?' => 'Voulez-vous vraiment supprimer ce commentaire ?', + 'Current password for the user "%s"' => 'Mot de passe actuel pour l\'utilisateur « %s »', 'The current password is required' => 'Le mot de passe actuel est obligatoire', 'Wrong password' => 'Mot de passe invalide', 'Unknown' => 'Inconnu', @@ -221,12 +220,12 @@ return array( 'Task removed successfully.' => 'Tâche supprimée avec succès.', 'Unable to remove this task.' => 'Impossible de supprimer cette tâche.', 'Remove a task' => 'Supprimer une tâche', - 'Do you really want to remove this task: "%s"?' => 'Voulez-vous vraiment supprimer cette tâche « %s » ?', + 'Do you really want to remove this task: "%s"?' => 'Voulez-vous vraiment supprimer cette tâche « %s » ?', 'Assign automatically a color based on a category' => 'Assigner automatiquement une couleur par rapport à une catégorie définie', 'Assign automatically a category based on a color' => 'Assigner automatiquement une catégorie par rapport à une couleur définie', 'Task creation or modification' => 'Création ou modification d\'une tâche', 'Category' => 'Catégorie', - 'Category:' => 'Catégorie :', + 'Category:' => 'Catégorie :', 'Categories' => 'Catégories', 'Your category have been created successfully.' => 'Votre catégorie a été créée avec succès.', 'This category has been updated successfully.' => 'Cette catégorie a été mise à jour avec succès.', @@ -234,10 +233,10 @@ return array( 'Remove a category' => 'Supprimer une catégorie', 'Category removed successfully.' => 'Catégorie supprimée avec succès.', 'Unable to remove this category.' => 'Impossible de supprimer cette catégorie.', - 'Category modification for the project "%s"' => 'Modification d\'une catégorie pour le projet « %s »', + 'Category modification for the project "%s"' => 'Modification d\'une catégorie pour le projet « %s »', 'Category Name' => 'Nom de la catégorie', 'Add a new category' => 'Ajouter une nouvelle catégorie', - 'Do you really want to remove this category: "%s"?' => 'Voulez-vous vraiment supprimer cette catégorie « %s » ?', + 'Do you really want to remove this category: "%s"?' => 'Voulez-vous vraiment supprimer cette catégorie « %s » ?', 'All categories' => 'Toutes les catégories', 'No category' => 'Aucune catégorie', 'The name is required' => 'Le nom est requis', @@ -245,16 +244,16 @@ return array( 'Unable to remove this file.' => 'Impossible de supprimer ce fichier.', 'File removed successfully.' => 'Fichier supprimé avec succès.', 'Attach a document' => 'Joindre un document', - 'Do you really want to remove this file: "%s"?' => 'Voulez-vous vraiment supprimer ce fichier « %s » ?', + 'Do you really want to remove this file: "%s"?' => 'Voulez-vous vraiment supprimer ce fichier « %s » ?', 'Attachments' => 'Pièces-jointes', 'Edit the task' => 'Modifier la tâche', 'Add a comment' => 'Ajouter un commentaire', 'Edit a comment' => 'Modifier un commentaire', 'Summary' => 'Résumé', 'Time tracking' => 'Suivi du temps', - 'Estimate:' => 'Estimation :', + 'Estimate:' => 'Estimation :', 'Spent:' => 'Passé :', - 'Do you really want to remove this sub-task?' => 'Voulez-vous vraiment supprimer cette sous-tâche ?', + 'Do you really want to remove this sub-task?' => 'Voulez-vous vraiment supprimer cette sous-tâche ?', 'Remaining:' => 'Restant :', 'hours' => 'heures', 'spent' => 'passé', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Sous-tâche mise à jour avec succès.', 'Unable to update your sub-task.' => 'Impossible de mettre à jour votre sous-tâche.', 'Unable to create your sub-task.' => 'Impossible de créer votre sous-tâche.', - 'Sub-task added successfully.' => 'Sous-tâche ajoutée avec succès.', 'Maximum size: ' => 'Taille maximum : ', 'Display another project' => 'Afficher un autre projet', 'Created by %s' => 'Créé par %s', @@ -288,22 +286,22 @@ return array( 'Clone' => 'Clone', 'Project cloned successfully.' => 'Projet cloné avec succès.', 'Unable to clone this project.' => 'Impossible de cloner ce projet.', - 'Enable email notifications' => 'Activer les notifications par emails', - 'Task position:' => 'Position de la tâche :', + 'Enable email notifications' => 'Activer les notifications par email', + 'Task position:' => 'Position de la tâche :', 'The task #%d have been opened.' => 'La tâche #%d a été ouverte.', 'The task #%d have been closed.' => 'La tâche #%d a été fermée.', 'Sub-task updated' => 'Sous-tâche mise à jour', - 'Title:' => 'Titre :', - 'Status:' => 'État :', - 'Assignee:' => 'Assigné :', - 'Time tracking:' => 'Gestion du temps :', + 'Title:' => 'Titre :', + 'Status:' => 'État :', + 'Assignee:' => 'Assigné :', + 'Time tracking:' => 'Gestion du temps :', 'New sub-task' => 'Nouvelle sous-tâche', - 'New attachment added "%s"' => 'Nouvelle pièce-jointe ajoutée « %s »', - 'New comment posted by %s' => 'Nouveau commentaire ajouté par « %s »', + 'New attachment added "%s"' => 'Nouvelle pièce-jointe ajoutée « %s »', + 'New comment posted by %s' => 'Nouveau commentaire ajouté par « %s »', 'New comment' => 'Nouveau commentaire', 'Comment updated' => 'Commentaire mis à jour', 'New subtask' => 'Nouvelle sous-tâche', - 'I want to receive notifications only for those projects:' => 'Je souhaite reçevoir les notifications uniquement pour les projets sélectionnés :', + 'I want to receive notifications only for those projects:' => 'Je souhaite reçevoir les notifications uniquement pour les projets sélectionnés :', 'view the task on Kanboard' => 'voir la tâche sur Kanboard', 'Public access' => 'Accès public', 'Disable public access' => 'Désactiver l\'accès public', @@ -311,7 +309,7 @@ return array( 'Public access disabled' => 'Accès public désactivé', 'Move the task to another project' => 'Déplacer la tâche vers un autre projet', 'Move to another project' => 'Déplacer vers un autre projet', - 'Do you really want to duplicate this task?' => 'Voulez-vous vraiment dupliquer cette tâche ?', + 'Do you really want to duplicate this task?' => 'Voulez-vous vraiment dupliquer cette tâche ?', 'Duplicate a task' => 'Dupliquer une tâche', 'External accounts' => 'Comptes externes', 'Account type' => 'Type de compte', @@ -319,12 +317,12 @@ return array( 'Remote' => 'Distant', 'Enabled' => 'Activé', 'Disabled' => 'Désactivé', - 'Login:' => 'Nom d\'utilisateur :', - 'Full Name:' => 'Nom :', - 'Email:' => 'Email :', - 'Notifications:' => 'Notifications :', + 'Login:' => 'Nom d\'utilisateur :', + 'Full Name:' => 'Nom :', + 'Email:' => 'Email :', + 'Notifications:' => 'Notifications :', 'Notifications' => 'Notifications', - 'Account type:' => 'Type de compte :', + 'Account type:' => 'Type de compte :', 'Edit profile' => 'Modifier le profil', 'Change password' => 'Changer le mot de passe', 'Password modification' => 'Changement de mot de passe', @@ -336,14 +334,14 @@ return array( 'Change category' => 'Changer de catégorie', '%s updated the task %s' => '%s a mis à jour la tâche %s', '%s opened the task %s' => '%s a ouvert la tâche %s', - '%s moved the task %s to the position #%d in the column "%s"' => '%s a déplacé la tâche %s à la position n°%d dans la colonne « %s »', - '%s moved the task %s to the column "%s"' => '%s a déplacé la tâche %s dans la colonne « %s »', + '%s moved the task %s to the position #%d in the column "%s"' => '%s a déplacé la tâche %s à la position n°%d dans la colonne « %s »', + '%s moved the task %s to the column "%s"' => '%s a déplacé la tâche %s dans la colonne « %s »', '%s created the task %s' => '%s a créé la tâche %s', '%s closed the task %s' => '%s a fermé la tâche %s', '%s created a subtask for the task %s' => '%s a créé une sous-tâche pour la tâche %s', '%s updated a subtask for the task %s' => '%s a mis à jour une sous-tâche appartenant à la tâche %s', - 'Assigned to %s with an estimate of %s/%sh' => 'Assigné à %s avec un estimé de %s/%sh', - 'Not assigned, estimate of %sh' => 'Personne assigné, estimé de %sh', + 'Assigned to %s with an estimate of %s/%sh' => 'Assigné à %s avec un estimé de %s/%s h', + 'Not assigned, estimate of %sh' => 'Personne assigné, estimé de %s h', '%s updated a comment on the task %s' => '%s a mis à jour un commentaire appartenant à la tâche %s', '%s commented the task %s' => '%s a ajouté un commentaire sur la tâche %s', '%s\'s activity' => 'Activité du projet %s', @@ -357,13 +355,13 @@ return array( '%s closed the task #%d' => '%s a fermé la tâche n°%d', '%s opened the task #%d' => '%s a ouvert la tâche n°%d', 'Activity' => 'Activité', - 'Default values are "%s"' => 'Les valeurs par défaut sont « %s »', + 'Default values are "%s"' => 'Les valeurs par défaut sont « %s »', 'Default columns for new projects (Comma-separated)' => 'Colonnes par défaut pour les nouveaux projets (séparation par des virgules)', 'Task assignee change' => 'Modification de la personne assignée à une tâche', '%s changed the assignee of the task #%d to %s' => '%s a changé la personne assignée à la tâche n˚%d pour %s', '%s changed the assignee of the task %s to %s' => '%s a changé la personne assignée à la tâche %s pour %s', - 'New password for the user "%s"' => 'Nouveau mot de passe pour l\'utilisateur « %s »', - 'Choose an event' => 'Choisir un événement', + 'New password for the user "%s"' => 'Nouveau mot de passe pour l\'utilisateur « %s »', + 'Choose an event' => 'Choisir un évènement', 'Create a task from an external provider' => 'Créer une tâche depuis un fournisseur externe', 'Change the assignee based on an external username' => 'Changer l\'assigné en fonction d\'un utilisateur externe', 'Change the category based on an external label' => 'Changer la catégorie en fonction d\'un libellé externe', @@ -371,13 +369,13 @@ return array( 'Label' => 'Libellé', 'Database' => 'Base de données', 'About' => 'À propos', - 'Database driver:' => 'Type de base de données :', + 'Database driver:' => 'Type de base de données :', 'Board settings' => 'Paramètres du tableau', 'Webhook settings' => 'Paramètres pour les webhooks', 'Reset token' => 'Regénérer le jeton de sécurité', - 'API endpoint:' => 'URL de l\'API :', - 'Refresh interval for private board' => 'Intervalle pour rafraîchir un tableau privé', - 'Refresh interval for public board' => 'Intervalle pour rafraîchir un tableau public', + 'API endpoint:' => 'URL de l\'API :', + 'Refresh interval for private board' => 'Intervalle pour rafraichir un tableau privé', + 'Refresh interval for public board' => 'Intervalle pour rafraichir un tableau public', 'Task highlight period' => 'Durée pour mettre une tâche en évidence', 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Durée en seconde pour considérer une tâche comme récemment modifiée (0 pour désactiver, 2 jours par défaut)', 'Frequency in second (60 seconds by default)' => 'Fréquence en seconde (60 secondes par défaut)', @@ -385,7 +383,7 @@ return array( 'Application URL' => 'URL de l\'application', 'Token regenerated.' => 'Jeton de sécurité regénéré.', 'Date format' => 'Format des dates', - 'ISO format is always accepted, example: "%s" and "%s"' => 'Le format ISO est toujours accepté, exemple : « %s » et « %s »', + 'ISO format is always accepted, example: "%s" and "%s"' => 'Le format ISO est toujours accepté, exemple : « %s » et « %s »', 'New private project' => 'Nouveau projet privé', 'This project is private' => 'Ce projet est privé', 'Add' => 'Ajouter', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Flux d\'activité', 'Dashboard' => 'Tableau de bord', 'Confirmation' => 'Confirmation', - 'Allow everybody to access to this project' => 'Autoriser tout le monde à accéder à ce projet', - 'Everybody have access to this project.' => 'Tout le monde a accès à ce projet.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Créer un commentaire depuis un fournisseur externe', 'Project management' => 'Gestion des projets', - 'My projects' => 'Mes projets', 'Columns' => 'Colonnes', 'Task' => 'Tâche', - 'Your are not member of any project.' => 'Vous n\'êtes membre d\'aucun projet.', 'Percentage' => 'Pourcentage', 'Number of tasks' => 'Nombre de tâches', 'Task distribution' => 'Répartition des tâches', 'Analytics' => 'Analytique', 'Subtask' => 'Sous-tâche', - 'My subtasks' => 'Mes sous-tâches', 'User repartition' => 'Répartition des utilisateurs', 'Clone this project' => 'Cloner ce projet', 'Column removed successfully.' => 'Colonne supprimée avec succès.', @@ -439,14 +432,14 @@ return array( 'Do you really want to remove this swimlane: "%s"?' => 'Voulez-vous vraiment supprimer cette swimlane : « %s » ?', 'Inactive swimlanes' => 'Swimlanes inactives', 'Remove a swimlane' => 'Supprimer une swimlane', - 'Swimlane modification for the project "%s"' => 'Modification d\'une swimlane pour le projet « %s »', + 'Swimlane modification for the project "%s"' => 'Modification d\'une swimlane pour le projet « %s »', 'Swimlane removed successfully.' => 'Swimlane supprimée avec succès.', 'Swimlanes' => 'Swimlanes', 'Swimlane updated successfully.' => 'Swimlane mise à jour avec succès.', 'Unable to remove this swimlane.' => 'Impossible de supprimer cette swimlane.', 'Unable to update this swimlane.' => 'Impossible de mettre à jour cette swimlane.', 'Your swimlane have been created successfully.' => 'Votre swimlane a été créée avec succès.', - 'Example: "Bug, Feature Request, Improvement"' => 'Exemple: « Incident, Demande de fonctionnalité, Amélioration »', + 'Example: "Bug, Feature Request, Improvement"' => 'Exemple: « Incident, Demande de fonctionnalité, Amélioration »', 'Default categories for new projects (Comma-separated)' => 'Catégories par défaut pour les nouveaux projets (séparation par des virgules)', 'Integrations' => 'Intégrations', 'Integration with third-party services' => 'Intégration avec des services externes', @@ -456,10 +449,9 @@ return array( 'Task Title' => 'Titre de la tâche', 'Untitled' => 'Sans nom', 'Application default' => 'Valeur par défaut de l\'application', - 'Language:' => 'Langue :', - 'Timezone:' => 'Fuseau horaire :', + 'Language:' => 'Langue :', + 'Timezone:' => 'Fuseau horaire :', 'All columns' => 'Toutes les colonnes', - 'Calendar' => 'Agenda', 'Next' => 'Suivant', '#%d' => 'n˚%d', 'All swimlanes' => 'Toutes les swimlanes', @@ -467,8 +459,8 @@ return array( 'Moved to column %s' => 'Tâche déplacée à la colonne %s', 'User dashboard' => 'Tableau de bord de l\'utilisateur', 'Allow only one subtask in progress at the same time for a user' => 'Autoriser une seule sous-tâche en progrès en même temps pour un utilisateur', - 'Edit column "%s"' => 'Modifier la colonne « %s »', - 'Select the new status of the subtask: "%s"' => 'Selectionnez le nouveau statut de la sous-tâche : « %s »', + 'Edit column "%s"' => 'Modifier la colonne « %s »', + 'Select the new status of the subtask: "%s"' => 'Sélectionnez le nouveau statut de la sous-tâche : « %s »', 'Subtask timesheet' => 'Feuille de temps des sous-tâches', 'There is nothing to show.' => 'Il n\'y a rien à montrer.', 'Time Tracking' => 'Feuille de temps', @@ -479,7 +471,7 @@ return array( 'End' => 'Fin', 'Task age in days' => 'Âge de la tâche en jours', 'Days in this column' => 'Jours dans cette colonne', - '%dd' => '%dj', + '%dd' => '%d j', 'Add a new link' => 'Ajouter un nouveau lien', 'Do you really want to remove this link: "%s"?' => 'Voulez-vous vraiment supprimer ce lien : « %s » ?', 'Do you really want to remove this link with task #%d?' => 'Voulez-vous vraiment supprimer ce lien avec la tâche n°%d ?', @@ -510,12 +502,12 @@ return array( 'fixes' => 'corrige', 'is fixed by' => 'est corrigée par', 'This task' => 'Cette tâche', - '<1h' => '<1h', - '%dh' => '%dh', + '<1h' => '< 1 h', + '%dh' => '%d h', 'Expand tasks' => 'Déplier les tâches', 'Collapse tasks' => 'Replier les tâches', 'Expand/collapse tasks' => 'Plier/déplier les tâches', - 'Close dialog box' => 'Fermer une boîte de dialogue', + 'Close dialog box' => 'Fermer une boite de dialogue', 'Submit a form' => 'Enregistrer un formulaire', 'Board view' => 'Page du tableau', 'Keyboard shortcuts' => 'Raccourcis clavier', @@ -529,7 +521,7 @@ return array( 'AUD - Australian Dollar' => 'AUD - Dollar australien', 'CAD - Canadian Dollar' => 'CAD - Dollar canadien', 'CHF - Swiss Francs' => 'CHF - Franc suisse', - 'Custom Stylesheet' => 'Feuille de style personalisée', + 'Custom Stylesheet' => 'Feuille de style personnalisée', 'download' => 'télécharger', 'EUR - Euro' => 'EUR - Euro', 'GBP - British Pound' => 'GBP - Livre sterling', @@ -557,16 +549,15 @@ return array( 'Unable to add this currency rate.' => 'Impossible d\'ajouter ce taux de change', 'Webhook URL' => 'URL du webhook', '%s removed the assignee of the task %s' => '%s a enlevé la personne assignée à la tâche %s', - 'Enable Gravatar images' => 'Activer les images Gravatar', 'Information' => 'Informations', 'Check two factor authentication code' => 'Vérification du code pour l\'authentification à deux-facteurs', 'The two factor authentication code is not valid.' => 'Le code pour l\'authentification à deux-facteurs n\'est pas valide.', 'The two factor authentication code is valid.' => 'Le code pour l\'authentification à deux-facteurs est valide.', 'Code' => 'Code', 'Two factor authentication' => 'Authentification à deux-facteurs', - 'This QR code contains the key URI: ' => 'Ce code QR contient l\'url de la clé : ', + 'This QR code contains the key URI: ' => 'Ce code QR contient l\'URL de la clé : ', 'Check my code' => 'Vérifier mon code', - 'Secret key: ' => 'Clé secrète : ', + 'Secret key: ' => 'Clé secrète : ', 'Test your device' => 'Testez votre appareil', 'Assign a color when the task is moved to a specific column' => 'Assigner une couleur lorsque la tâche est déplacée dans une colonne spécifique', '%s via Kanboard' => '%s via Kanboard', @@ -581,13 +572,13 @@ return array( 'Disable two factor authentication' => 'Désactiver l\'authentification à deux facteurs', 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Voulez-vous vraiment désactiver l\'authentification à deux facteurs pour cet utilisateur : « %s » ?', 'Edit link' => 'Modifier un lien', - 'Start to type task title...' => 'Entrez le titre de la tâche...', + 'Start to type task title...' => 'Entrez le titre de la tâche…', 'A task cannot be linked to itself' => 'Une tâche ne peut être liée à elle-même', 'The exact same link already exists' => 'Un lien identique existe déjà', 'Recurrent task is scheduled to be generated' => 'La tâche récurrente est programmée pour être créée', 'Score' => 'Complexité', 'The identifier must be unique' => 'L\'identifiant doit être unique', - 'This linked task id doesn\'t exists' => 'L\'identifiant de la task liée n\'existe pas', + 'This linked task id doesn\'t exists' => 'L\'identifiant de la tâche liée n\'existe pas', 'This value must be alphanumeric' => 'Cette valeur doit être alphanumérique', 'Edit recurrence' => 'Modifier la récurrence', 'Generate recurrent task' => 'Générer une tâche récurrente', @@ -597,7 +588,7 @@ return array( 'Base date to calculate new due date' => 'Date à utiliser pour calculer la nouvelle date d\'échéance', 'Action date' => 'Date de l\'action', 'Base date to calculate new due date: ' => 'Date utilisée pour calculer la nouvelle date d\'échéance : ', - 'This task has created this child task: ' => 'Cette tâche a créée la tâche enfant : ', + 'This task has created this child task: ' => 'Cette tâche a créé la tâche enfant : ', 'Day(s)' => 'Jour(s)', 'Existing due date' => 'Date d\'échéance existante', 'Factor to calculate new due date: ' => 'Facteur pour calculer la nouvelle date d\'échéance : ', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Lorsque la tâche est déplacée en dehors de la première colonne', 'When task is moved to last column' => 'Lorsque la tâche est déplacée dans la dernière colonne', 'Year(s)' => 'Année(s)', - 'Calendar settings' => 'Paramètres du calendrier', - 'Project calendar view' => 'Vue en mode projet du calendrier', 'Project settings' => 'Paramètres du projet', - 'Show subtasks based on the time tracking' => 'Afficher les sous-tâches basé sur le suivi du temps', - 'Show tasks based on the creation date' => 'Afficher les tâches en fonction de la date de création', - 'Show tasks based on the start date' => 'Afficher les tâches en fonction de la date de début', - 'Subtasks time tracking' => 'Suivi du temps par rapport aux sous-tâches', - 'User calendar view' => 'Vue en mode utilisateur du calendrier', 'Automatically update the start date' => 'Mettre à jour automatiquement la date de début', 'iCal feed' => 'Abonnement iCal', 'Preferences' => 'Préférences', @@ -627,7 +611,7 @@ return array( 'Two factor authentication enabled' => 'Authentification à deux facteurs activée', 'Unable to update this user.' => 'Impossible de mettre à jour cet utilisateur.', 'There is no user management for private projects.' => 'Il n\'y a pas de gestion d\'utilisateurs pour les projets privés.', - 'User that will receive the email' => 'Utilisateur qui va reçevoir l\'email', + 'User that will receive the email' => 'Utilisateur qui va recevoir l\'email', 'Email subject' => 'Sujet de l\'email', 'Date' => 'Date', 'Add a comment log when moving the task between columns' => 'Ajouter un commentaire d\'information lorsque une tâche est déplacée dans une autre colonne', @@ -637,31 +621,30 @@ return array( 'Notification' => 'Notification', '%s moved the task #%d to the first swimlane' => '%s a déplacé la tâche n°%d dans la première swimlane', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s a déplacé la tâche %s dans la première swimlane', '%s moved the task %s to the swimlane "%s"' => '%s a déplacé la tâche %s dans la swimlane « %s »', 'This report contains all subtasks information for the given date range.' => 'Ce rapport contient les informations de toutes les sous-tâches pour la période sélectionnée.', 'This report contains all tasks information for the given date range.' => 'Ce rapport contient les informations de toutes les tâches pour la période sélectionnée.', - 'Project activities for %s' => 'Activité des projets pour « %s »', + 'Project activities for %s' => 'Activité des projets pour « %s »', 'view the board on Kanboard' => 'voir le tableau sur Kanboard', 'The task have been moved to the first swimlane' => 'La tâche a été déplacée dans la première swimlane', - 'The task have been moved to another swimlane:' => 'La tâche a été déplacée dans une autre swimlane :', - 'New title: %s' => 'Nouveau titre : %s', + 'The task have been moved to another swimlane:' => 'La tâche a été déplacée dans une autre swimlane :', + 'New title: %s' => 'Nouveau titre : %s', 'The task is not assigned anymore' => 'La tâche n\'est plus assignée maintenant', - 'New assignee: %s' => 'Nouvel assigné : %s', + 'New assignee: %s' => 'Nouvel assigné : %s', 'There is no category now' => 'Il n\'y a plus de catégorie maintenant', - 'New category: %s' => 'Nouvelle catégorie : %s', - 'New color: %s' => 'Nouvelle couleur : %s', - 'New complexity: %d' => 'Nouvelle complexité : %d', + 'New category: %s' => 'Nouvelle catégorie : %s', + 'New color: %s' => 'Nouvelle couleur : %s', + 'New complexity: %d' => 'Nouvelle complexité : %d', 'The due date have been removed' => 'La date d\'échéance a été enlevée', 'There is no description anymore' => 'Il n\'y a plus de description maintenant', 'Recurrence settings have been modified' => 'Les réglages de la récurrence ont été modifiés', - 'Time spent changed: %sh' => 'Le temps passé a été changé : %sh', - 'Time estimated changed: %sh' => 'Le temps estimé a été changé : %sh', + 'Time spent changed: %sh' => 'Le temps passé a été changé : %s h', + 'Time estimated changed: %sh' => 'Le temps estimé a été changé : %s h', 'The field "%s" have been updated' => 'Le champ « %s » a été mis à jour', 'The description has been modified:' => 'La description a été modifiée', 'Do you really want to close the task "%s" as well as all subtasks?' => 'Voulez-vous vraiment fermer la tâche « %s » ainsi que toutes ses sous-tâches ?', - 'I want to receive notifications for:' => 'Je veux reçevoir les notifications pour :', + 'I want to receive notifications for:' => 'Je veux recevoir les notifications pour :', 'All tasks' => 'Toutes les Tâches', 'Only for tasks assigned to me' => 'Seulement les tâches qui me sont assignées', 'Only for tasks created by me' => 'Seulement les tâches que j\'ai créées', @@ -669,12 +652,11 @@ return array( '%%Y-%%m-%%d' => '%%d/%%m/%%Y', 'Total for all columns' => 'Total pour toutes les colonnes', 'You need at least 2 days of data to show the chart.' => 'Vous avez besoin d\'au minimum 2 jours de données pour afficher le graphique.', - '<15m' => '<15m', - '<30m' => '<30m', + '<15m' => '< 15 min', + '<30m' => '< 30 min', 'Stop timer' => 'Stopper le chrono', 'Start timer' => 'Démarrer le chrono', 'My activity stream' => 'Mon flux d\'activité', - 'My calendar' => 'Mon agenda', 'Search tasks' => 'Rechercher des tâches', 'Reset filters' => 'Réinitialiser les filtres', 'My tasks due tomorrow' => 'Mes tâches qui arrivent à échéance demain', @@ -688,36 +670,35 @@ return array( 'Overview' => 'Vue d\'ensemble', 'Board/Calendar/List view' => 'Vue Tableau/Calendrier/Liste', 'Switch to the board view' => 'Basculer vers le tableau', - 'Switch to the calendar view' => 'Basculer vers le calendrier', 'Switch to the list view' => 'Basculer vers la vue en liste', 'Go to the search/filter box' => 'Aller au champ de recherche', 'There is no activity yet.' => 'Il n\'y a pas encore d\'activité.', 'No tasks found.' => 'Aucune tâche trouvée.', - 'Keyboard shortcut: "%s"' => 'Raccourci clavier : « %s »', + 'Keyboard shortcut: "%s"' => 'Raccourci clavier : « %s »', 'List' => 'Liste', 'Filter' => 'Filtre', 'Advanced search' => 'Recherche avancée', - 'Example of query: ' => 'Exemple de requête : ', - 'Search by project: ' => 'Rechercher par projet : ', - 'Search by column: ' => 'Rechercher par colonne : ', - 'Search by assignee: ' => 'Rechercher par assigné : ', - 'Search by color: ' => 'Rechercher par couleur : ', - 'Search by category: ' => 'Rechercher par catégorie : ', - 'Search by description: ' => 'Rechercher par description : ', - 'Search by due date: ' => 'Rechercher par date d\'échéance : ', + 'Example of query: ' => 'Exemple de requête : ', + 'Search by project: ' => 'Rechercher par projet : ', + 'Search by column: ' => 'Rechercher par colonne : ', + 'Search by assignee: ' => 'Rechercher par assigné : ', + 'Search by color: ' => 'Rechercher par couleur : ', + 'Search by category: ' => 'Rechercher par catégorie : ', + 'Search by description: ' => 'Rechercher par description : ', + 'Search by due date: ' => 'Rechercher par date d\'échéance : ', 'Average time spent into each column' => 'Temps moyen passé dans chaque colonne', 'Average time spent' => 'Temps moyen passé', 'This chart show the average time spent into each column for the last %d tasks.' => 'Ce graphique montre le temps passé moyen dans chaque colonne pour les %d dernières tâches.', 'Average Lead and Cycle time' => 'Durée moyenne du lead et cycle time', - 'Average lead time: ' => 'Lead time moyen : ', - 'Average cycle time: ' => 'Cycle time moyen : ', + 'Average lead time: ' => 'Lead time moyen : ', + 'Average cycle time: ' => 'Cycle time moyen : ', 'Cycle Time' => 'Cycle time', 'Lead Time' => 'Lead time', 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Ce graphique montre la durée moyenne du lead et cycle time pour les %d dernières tâches.', 'Average time into each column' => 'Temps moyen dans chaque colonne', 'Lead and cycle time' => 'Lead et cycle time', - 'Lead time: ' => 'Lead time : ', - 'Cycle time: ' => 'Temps de cycle : ', + 'Lead time: ' => 'Lead time : ', + 'Cycle time: ' => 'Temps de cycle : ', 'Time spent into each column' => 'Temps passé dans chaque colonne', 'The lead time is the duration between the task creation and the completion.' => 'Le lead time est la durée entre la création de la tâche et sa complétion.', 'The cycle time is the duration between the start date and the completion.' => 'Le cycle time est la durée entre la date de début et la complétion.', @@ -725,33 +706,26 @@ return array( 'Set automatically the start date' => 'Définir automatiquement la date de début', 'Edit Authentication' => 'Modifier l\'authentification', 'Remote user' => 'Utilisateur distant', - 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Les utilisateurs distants ne stockent pas leur mot de passe dans la base de données de Kanboard, exemples : comptes LDAP, Github ou Google.', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Les utilisateurs distants ne stockent pas leur mot de passe dans la base de données de Kanboard, exemples : comptes LDAP, GitHub ou Google.', 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Si vous cochez la case « Interdire le formulaire d\'authentification », les identifiants entrés dans le formulaire d\'authentification seront ignorés.', 'Default task color' => 'Couleur par défaut des tâches', 'This feature does not work with all browsers.' => 'Cette fonctionnalité n\'est pas compatible avec tous les navigateurs', 'There is no destination project available.' => 'Il n\'y a pas de projet de destination disponible.', 'Trigger automatically subtask time tracking' => 'Déclencher automatiquement le suivi du temps pour les sous-tâches', 'Include closed tasks in the cumulative flow diagram' => 'Inclure les tâches fermées dans le diagramme de flux cumulé', - 'Current swimlane: %s' => 'Swimlane actuelle : %s', - 'Current column: %s' => 'Colonne actuelle : %s', - 'Current category: %s' => 'Catégorie actuelle : %s', + 'Current swimlane: %s' => 'Swimlane actuelle : %s', + 'Current column: %s' => 'Colonne actuelle : %s', + 'Current category: %s' => 'Catégorie actuelle : %s', 'no category' => 'aucune catégorie', - 'Current assignee: %s' => 'Assigné actuel : %s', + 'Current assignee: %s' => 'Assigné actuel : %s', 'not assigned' => 'non assigné', - 'Author:' => 'Auteur :', + 'Author:' => 'Auteur :', 'contributors' => 'contributeurs', - 'License:' => 'Licence :', + 'License:' => 'Licence :', 'License' => 'Licence', 'Enter the text below' => 'Entrez le texte ci-dessous', - 'Sort by position' => 'Trier par position', - 'Sort by date' => 'Trier par date', - 'Add task' => 'Ajouter une tâche', 'Start date:' => 'Date de début :', 'Due date:' => 'Date d\'échéance :', - 'There is no start date or due date for this task.' => 'Il n\'y a pas de date de début ou de date de fin pour cette tâche.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Déplacer ou redimensionner une tâche va changer la date de début et la date de fin de la tâche.', - 'There is no task in your project.' => 'Il n\'y a aucune tâche dans votre projet.', - 'Gantt chart' => 'Diagramme de Gantt', 'People who are project managers' => 'Personnes qui sont gestionnaires de projet', 'People who are project members' => 'Personnes qui sont membres de projet', 'NOK - Norwegian Krone' => 'NOK - Couronne norvégienne', @@ -763,42 +737,35 @@ return array( 'Members' => 'Membres', 'Shared project' => 'Projet partagé', 'Project managers' => 'Gestionnaires de projet', - 'Gantt chart for all projects' => 'Diagramme de Gantt pour tous les projets', 'Projects list' => 'Liste des projets', - 'Gantt chart for this project' => 'Diagramme de Gantt pour ce projet', - 'Project board' => 'Tableau du projet', 'End date:' => 'Date de fin :', - 'There is no start date or end date for this project.' => 'Il n\'y a pas de date de début ou de date de fin pour ce projet.', - 'Projects Gantt chart' => 'Diagramme de Gantt des projets', 'Change task color when using a specific task link' => 'Changer la couleur de la tâche lorsqu\'un lien spécifique est utilisé', 'Task link creation or modification' => 'Création ou modification d\'un lien sur une tâche', 'Milestone' => 'Étape importante', - 'Documentation: %s' => 'Documentation : %s', - 'Switch to the Gantt chart view' => 'Passer à la vue en diagramme de Gantt', + 'Documentation: %s' => 'Documentation : %s', 'Reset the search/filter box' => 'Réinitialiser le champ de recherche', 'Documentation' => 'Documentation', 'Table of contents' => 'Table des matières', - 'Gantt' => 'Gantt', 'Author' => 'Auteur', 'Version' => 'Version', 'Plugins' => 'Extensions', 'There is no plugin loaded.' => 'Il n\'y a aucune extension chargée.', 'My notifications' => 'Mes notifications', - 'Custom filters' => 'Filtres personalisés', - 'Your custom filter have been created successfully.' => 'Votre filter personalisé a été créé avec succès.', - 'Unable to create your custom filter.' => 'Impossible de créer votre filter personalisé.', - 'Custom filter removed successfully.' => 'Filtre personalisé supprimé avec succès.', - 'Unable to remove this custom filter.' => 'Impossible de supprimer ce filter personalisé.', - 'Edit custom filter' => 'Modification d\'un filtre personalisé', - 'Your custom filter have been updated successfully.' => 'Votre filtre personalisé a été mis à jour avec succès.', - 'Unable to update custom filter.' => 'Impossible de mettre à jour votre filtre personalisé.', + 'Custom filters' => 'Filtres personnalisés', + 'Your custom filter have been created successfully.' => 'Votre filtre personnalisé a été créé avec succès.', + 'Unable to create your custom filter.' => 'Impossible de créer votre filtre personnalisé.', + 'Custom filter removed successfully.' => 'Filtre personnalisé supprimé avec succès.', + 'Unable to remove this custom filter.' => 'Impossible de supprimer ce filtre personnalisé.', + 'Edit custom filter' => 'Modification d\'un filtre personnalisé', + 'Your custom filter have been updated successfully.' => 'Votre filtre personnalisé a été mis à jour avec succès.', + 'Unable to update custom filter.' => 'Impossible de mettre à jour votre filtre personnalisé.', 'Web' => 'Web', - 'New attachment on task #%d: %s' => 'Nouveau fichier joint sur la tâche n°%d : %s', + 'New attachment on task #%d: %s' => 'Nouveau fichier joint sur la tâche n°%d : %s', 'New comment on task #%d' => 'Nouveau commentaire sur la tâche n°%d', 'Comment updated on task #%d' => 'Commentaire mis à jour sur la tâche n°%d', 'New subtask on task #%d' => 'Nouvelle sous-tâche sur la tâche n°%d', 'Subtask updated on task #%d' => 'Sous-tâche mise à jour sur la tâche n°%d', - 'New task #%d: %s' => 'Nouvelle tâche n°%d : %s', + 'New task #%d: %s' => 'Nouvelle tâche n°%d : %s', 'Task updated #%d' => 'Tâche n°%d mise à jour', 'Task #%d closed' => 'Tâche n°%d fermée', 'Task #%d opened' => 'Tâche n°%d ouverte', @@ -819,7 +786,7 @@ return array( 'Shared' => 'Partagé', 'Owner' => 'Propriétaire', 'Unread notifications' => 'Notifications non lus', - 'Notification methods:' => 'Méthodes de notifications :', + 'Notification methods:' => 'Méthodes de notifications :', 'Unable to read your file' => 'Impossible de lire votre fichier', '%d task(s) have been imported successfully.' => '%d tâche(s) ont été importées avec succès.', 'Nothing have been imported!' => 'Rien n\'a été importé', @@ -830,15 +797,15 @@ return array( 'Tab' => 'Tabulation', 'Vertical bar' => 'Barre verticale', 'Double Quote' => 'Guillemet double', - 'Single Quote' => 'Guillement simple', + 'Single Quote' => 'Guillemet simple', '%s attached a file to the task #%d' => '%s a attaché un fichier sur la tâche n°%d', 'There is no column or swimlane activated in your project!' => 'Il n\'y a aucune colonne ou swimlane dans votre projet !', - 'Append filter (instead of replacement)' => 'Ajouter le filtre au lieu de le remplaçer', - 'Append/Replace' => 'Ajouter/Remplaçer', + 'Append filter (instead of replacement)' => 'Ajouter le filtre au lieu de le remplacer', + 'Append/Replace' => 'Ajouter/Remplacer', 'Append' => 'Ajouter', - 'Replace' => 'Remplaçer', + 'Replace' => 'Remplacer', 'Import' => 'Importation', - 'Change sorting' => 'changer l\'ordre', + 'Change sorting' => 'Changer l\'ordre', 'Tasks Importation' => 'Importation des tâches', 'Delimiter' => 'Délimiteur', 'Enclosure' => 'Caractère d\'encadrement', @@ -848,7 +815,7 @@ return array( 'Your file must be encoded in UTF-8' => 'Votre fichier doit être encodé en UTF-8', 'The first row must be the header' => 'La première ligne doit être le titre des colonnes', 'Duplicates are not verified for you' => 'Les doublons ne sont pas vérifiés pour vous', - 'The due date must use the ISO format: YYYY-MM-DD' => 'La date d\'échéance doit utiliser le format ISO : AAAA-MM-JJ', + 'The due date must use the ISO format: YYYY-MM-DD' => 'La date d\'échéance doit utiliser le format ISO : AAAA-MM-JJ', 'Download CSV template' => 'Télécharger le modèle CSV', 'No external integration registered.' => 'Aucune intégration externe enregistrée.', 'Duplicates are not imported' => 'Les doublons ne sont pas importés', @@ -864,14 +831,14 @@ return array( 'Members of %s' => 'Membres de %s', 'New group' => 'Nouveau groupe', 'Group created successfully.' => 'Groupe créé avec succès.', - 'Unable to create your group.' => 'Impossible de créé votre groupe.', + 'Unable to create your group.' => 'Impossible de créer votre groupe.', 'Edit group' => 'Modifier le groupe', 'Group updated successfully.' => 'Groupe mis à jour avec succès.', 'Unable to update your group.' => 'Impossible de mettre à jour votre groupe.', - 'Add group member to "%s"' => 'Ajouter un membre au groupe « %s »', + 'Add group member to "%s"' => 'Ajouter un membre au groupe « %s »', 'Group member added successfully.' => 'Membre ajouté avec succès au groupe.', 'Unable to add group member.' => 'Impossible d\'ajouter ce membre au groupe.', - 'Remove user from group "%s"' => 'Supprimer un utilisateur d\'un groupe « %s »', + 'Remove user from group "%s"' => 'Supprimer un utilisateur d\'un groupe « %s »', 'User removed successfully from this group.' => 'Utilisateur supprimé avec succès de ce groupe.', 'Unable to remove this user from the group.' => 'Impossible de supprimer cet utilisateur du groupe.', 'Remove group' => 'Supprimer le groupe', @@ -883,67 +850,66 @@ return array( 'Project Member' => 'Membre du projet', 'Project Viewer' => 'Visualiseur de projet', 'Your account is locked for %d minutes' => 'Votre compte est verrouillé pour %d minutes', - 'Invalid captcha' => 'Captcha invalid', + 'Invalid captcha' => 'Captcha invalide', 'The name must be unique' => 'Le nom doit être unique', 'View all groups' => 'Voir tous les groupes', 'There is no user available.' => 'Il n\'y a aucun utilisateur disponible', - 'Do you really want to remove the user "%s" from the group "%s"?' => 'Voulez-vous vraiment supprimer l\'utilisateur « %s » du groupe « %s » ?', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'Voulez-vous vraiment supprimer l\'utilisateur « %s » du groupe « %s » ?', 'There is no group.' => 'Il n\'y a aucun groupe.', - 'External Id' => 'Identifiant externe', 'Add group member' => 'Ajouter un membre au groupe', - 'Do you really want to remove this group: "%s"?' => 'Voulez-vous vraiment supprimer ce groupe : « %s » ?', + 'Do you really want to remove this group: "%s"?' => 'Voulez-vous vraiment supprimer ce groupe : « %s » ?', 'There is no user in this group.' => 'Il n\'y a aucun utilisateur dans ce groupe', 'Permissions' => 'Permissions', 'Allowed Users' => 'Utilisateurs autorisés', 'No user have been allowed specifically.' => 'Aucun utilisateur a été autorisé spécifiquement.', 'Role' => 'Rôle', - 'Enter user name...' => 'Entrez le nom de l\'utilisateur...', + 'Enter user name...' => 'Entrez le nom de l\'utilisateur…', 'Allowed Groups' => 'Groupes autorisés', 'No group have been allowed specifically.' => 'Aucun groupe a été autorisé spécifiquement.', 'Group' => 'Groupe', 'Group Name' => 'Nom du groupe', - 'Enter group name...' => 'Entrez le nom du groupe...', - 'Role:' => 'Rôle :', + 'Enter group name...' => 'Entrez le nom du groupe…', + 'Role:' => 'Rôle :', 'Project members' => 'Membres du projet', '%s mentioned you in the task #%d' => '%s vous a mentionné dans la tâche n°%d', '%s mentioned you in a comment on the task #%d' => '%s vous a mentionné dans un commentaire de la tâche n°%d', 'You were mentioned in the task #%d' => 'Vous avez été mentionné dans la tâche n°%d', 'You were mentioned in a comment on the task #%d' => 'Vous avez été mentionné dans un commentaire de la tâche n°%d', - 'Estimated hours: ' => 'Heures estimées : ', - 'Actual hours: ' => 'Heures actuelles : ', + 'Estimated hours: ' => 'Heures estimées : ', + 'Actual hours: ' => 'Heures actuelles : ', 'Hours Spent' => 'Heures passées', 'Hours Estimated' => 'Heures estimées', 'Estimated Time' => 'Temps estimé', 'Actual Time' => 'Temps actuel', - 'Estimated vs actual time' => 'Temps estimé vs actuel', + 'Estimated vs actual time' => 'Temps estimé vs réel', 'RUB - Russian Ruble' => 'RUB - Rouble russe', 'Assign the task to the person who does the action when the column is changed' => 'Assigner la tâche à la personne qui fait l\'action lorsque la colonne est changée', 'Close a task in a specific column' => 'Fermer une tâche dans une colonne specifique', 'Time-based One-time Password Algorithm' => 'Mot de passe à usage unique basé sur le temps', - 'Two-Factor Provider: ' => 'Fournisseur d\'authentification à deux facteurs : ', + 'Two-Factor Provider: ' => 'Fournisseur d\'authentification à deux facteurs : ', 'Disable two-factor authentication' => 'Désactiver l\'authentification à deux-facteurs', 'Enable two-factor authentication' => 'Activer l\'authentification à deux-facteurs', 'There is no integration registered at the moment.' => 'Il n\'y a aucune intégration enregistrée pour le moment.', 'Password Reset for Kanboard' => 'Réinitialisation du mot de passe pour Kanboard', - 'Forgot password?' => 'Mot de passe oublié ?', - 'Enable "Forget Password"' => 'Activer la fonctionnalité « Mot de passe oublié »', + 'Forgot password?' => 'Mot de passe oublié ?', + 'Enable "Forget Password"' => 'Activer la fonctionnalité « Mot de passe oublié »', 'Password Reset' => 'Réinitialisation du mot de passe', 'New password' => 'Nouveau mot de passe', 'Change Password' => 'Changer de mot de passe', - 'To reset your password click on this link:' => 'Pour réinitialiser votre mot de passe cliquer sur ce lien :', - 'Last Password Reset' => 'Dernières réinitialisation de mot de passe', + 'To reset your password click on this link:' => 'Pour réinitialiser votre mot de passe cliquer sur ce lien :', + 'Last Password Reset' => 'Dernières réinitialisations de mot de passe', 'The password has never been reinitialized.' => 'Le mot de passe n\'a jamais été réinitialisé.', 'Creation' => 'Création', 'Expiration' => 'Expiration', 'Password reset history' => 'Historique de la réinitialisation du mot de passe', - 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Toutes les tâches de la colonne « %s » et de la swimlane « %s » ont été fermées avec succès.', - 'Do you really want to close all tasks of this column?' => 'Voulez-vous vraiment fermer toutes les tâches de cette colonne ?', - '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d tâche(s) dans la colonne « %s » et la swimlane « %s » seront fermées.', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Toutes les tâches de la colonne « %s » et de la swimlane « %s » ont été fermées avec succès.', + 'Do you really want to close all tasks of this column?' => 'Voulez-vous vraiment fermer toutes les tâches de cette colonne ?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d tâche(s) dans la colonne « %s » et la swimlane « %s » seront fermées.', 'Close all tasks of this column' => 'Fermer toutes les tâches de cette colonne', 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Aucun plugin n\'a enregistré une méthode de notification de projet. Vous pouvez toujours configurer les notifications individuelles dans votre profil utilisateur.', 'My dashboard' => 'Mon tableau de bord', 'My profile' => 'Mon profil', - 'Project owner: ' => 'Responsable du projet : ', + 'Project owner: ' => 'Responsable du projet : ', 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'L\'identifiant du projet est optionnel et doit être alphanumérique, example: MONPROJET.', 'Project owner' => 'Responsable du projet', 'Private projects do not have users and groups management.' => 'Les projets privés n\'ont pas de gestion d\'utilisateurs et de groupes.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Priorité par défaut', 'Lowest priority' => 'Priorité basse', 'Highest priority' => 'Priorité haute', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Si vous mettez zéro pour la priorité basse et haute, cette fonctionnalité sera désactivée.', 'Close a task when there is no activity' => 'Fermer une tâche sans activité', 'Duration in days' => 'Durée en jours', 'Send email when there is no activity on a task' => 'Envoyer un email lorsqu\'il n\'y a pas d\'activité sur une tâche', @@ -974,7 +939,7 @@ return array( 'Add a new external link' => 'Ajouter un nouveau lien externe', 'Edit external link' => 'Modifier un lien externe', 'External link' => 'Lien externe', - 'Copy and paste your link here...' => 'Copier-coller vôtre lien ici...', + 'Copy and paste your link here...' => 'Copier-coller votre lien ici…', 'URL' => 'URL', 'Internal links' => 'Liens internes', 'Assign to me' => 'Assigner à moi', @@ -986,48 +951,48 @@ return array( 'Create from another project' => 'Créer depuis un autre projet', 'open' => 'ouvert', 'closed' => 'fermé', - 'Priority:' => 'Priorité :', - 'Reference:' => 'Référence :', - 'Complexity:' => 'Complexité :', - 'Swimlane:' => 'Swimlane :', - 'Column:' => 'Colonne :', - 'Position:' => 'Position :', - 'Creator:' => 'Créateur :', - 'Time estimated:' => 'Temps estimé :', + 'Priority:' => 'Priorité :', + 'Reference:' => 'Référence :', + 'Complexity:' => 'Complexité :', + 'Swimlane:' => 'Swimlane :', + 'Column:' => 'Colonne :', + 'Position:' => 'Position :', + 'Creator:' => 'Créateur :', + 'Time estimated:' => 'Temps estimé :', '%s hours' => '%s heures', - 'Time spent:' => 'Temps passé :', - 'Created:' => 'Créé le :', - 'Modified:' => 'Modifié le :', - 'Completed:' => 'Terminé le :', - 'Started:' => 'Commençé le :', - 'Moved:' => 'Déplacé le : ', + 'Time spent:' => 'Temps passé :', + 'Created:' => 'Créé le :', + 'Modified:' => 'Modifié le :', + 'Completed:' => 'Terminé le :', + 'Started:' => 'Commencé le :', + 'Moved:' => 'Déplacé le : ', 'Task #%d' => 'Tâche n°%d', 'Time format' => 'Format de l\'heure', - 'Start date: ' => 'Date de début : ', - 'End date: ' => 'Date de fin : ', - 'New due date: ' => 'Nouvelle date d\'échéance : ', - 'Start date changed: ' => 'Date de début modifiée : ', + 'Start date: ' => 'Date de début : ', + 'End date: ' => 'Date de fin : ', + 'New due date: ' => 'Nouvelle date d\'échéance : ', + 'Start date changed: ' => 'Date de début modifiée : ', 'Disable private projects' => 'Désactiver les projets privés', - 'Do you really want to remove this custom filter: "%s"?' => 'Voulez-vous vraiment supprimer ce filtre personnalisé : « %s » ?', + 'Do you really want to remove this custom filter: "%s"?' => 'Voulez-vous vraiment supprimer ce filtre personnalisé : « %s » ?', 'Remove a custom filter' => 'Supprimer un filtre personnalisé', 'User activated successfully.' => 'Utilisateur activé avec succès.', 'Unable to enable this user.' => 'Impossible d\'activer cet utilisateur.', 'User disabled successfully.' => 'Utilisateur désactivé avec succès.', 'Unable to disable this user.' => 'Impossible de désactiver cet utilisateur.', - 'All files have been uploaded successfully.' => 'Tous les fichiers ont été uploadés avec succès.', - 'The maximum allowed file size is %sB.' => 'La taille maximale autorisée pour les fichiers est de %so.', + 'All files have been uploaded successfully.' => 'Tous les fichiers ont été envoyés avec succès.', + 'The maximum allowed file size is %sB.' => 'La taille maximale autorisée pour les fichiers est de %s o.', 'Drag and drop your files here' => 'Glissez-déposez vos fichiers ici', 'choose files' => 'choisissez des fichiers', 'View profile' => 'Voir le profil', 'Two Factor' => 'Deux-Facteurs', 'Disable user' => 'Désactiver l\'utilisateur', - 'Do you really want to disable this user: "%s"?' => 'Voulez-vous vraiment désactiver cet utilisateur : « %s » ?', + 'Do you really want to disable this user: "%s"?' => 'Voulez-vous vraiment désactiver cet utilisateur : « %s » ?', 'Enable user' => 'Activer un utilisateur', - 'Do you really want to enable this user: "%s"?' => 'Voulez-vous vraiment activer cet utilisateur : « %s » ?', + 'Do you really want to enable this user: "%s"?' => 'Voulez-vous vraiment activer cet utilisateur : « %s » ?', 'Download' => 'Télécharger', - 'Uploaded: %s' => 'Uploadé : %s', - 'Size: %s' => 'Taille : %s', - 'Uploaded by %s' => 'Uploadé par %s', + 'Uploaded: %s' => 'Envoyé : %s', + 'Size: %s' => 'Taille : %s', + 'Uploaded by %s' => 'Envoyé par %s', 'Filename' => 'Nom du fichier', 'Size' => 'Taille', 'Column created successfully.' => 'La colonne a été créée avec succès.', @@ -1044,7 +1009,7 @@ return array( 'Change subtask position' => 'Changer la position de la sous-tâche', 'This value must be greater than %d' => 'Cette valeur doit être plus grande que %d', 'Another swimlane with the same name exists in the project' => 'Une autre swimlane existe avec le même nom dans le projet', - 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Exemple : http://exemple.kanboard.net/ (utilisé pour générer les URLs absolues)', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Exemple : http://exemple.kanboard.net/ (utilisé pour générer les URL absolues)', 'Actions duplicated successfully.' => 'Actions dupliquées avec succès.', 'Unable to duplicate actions.' => 'Impossible de dupliquer les actions.', 'Add a new action' => 'Ajouter une nouvelle action', @@ -1054,11 +1019,11 @@ return array( 'There is no available project.' => 'Il n\'y a pas de projet disponible.', 'Local File' => 'Fichier local', 'Configuration' => 'Configuration', - 'PHP version:' => 'Version de PHP :', - 'PHP SAPI:' => 'PHP SAPI :', - 'OS version:' => 'Version du système d\'exploitation :', - 'Database version:' => 'Version de la base de donnée :', - 'Browser:' => 'Navigateur web :', + 'PHP version:' => 'Version de PHP :', + 'PHP SAPI:' => 'PHP SAPI :', + 'OS version:' => 'Version du système d\'exploitation :', + 'Database version:' => 'Version de la base de donnée :', + 'Browser:' => 'Navigateur web :', 'Task view' => 'Vue détaillée d\'une tâche', 'Edit task' => 'Modifier la tâche', 'Edit description' => 'Modifier la description', @@ -1069,24 +1034,24 @@ return array( 'Avatar' => 'Avatar', 'Upload my avatar image' => 'Uploader mon image d\'avatar', 'Remove my image' => 'Supprimer mon image', - 'The OAuth2 state parameter is invalid' => 'Le paramètre "state" de OAuth2 est invalide', + 'The OAuth2 state parameter is invalid' => 'Le paramètre « state » de OAuth2 est invalide', 'User not found.' => 'Utilisateur introuvable.', 'Search in activity stream' => 'Chercher dans le flux d\'activité', 'My activities' => 'Mes activités', 'Activity until yesterday' => 'Activités jusqu\'à hier', 'Activity until today' => 'Activités jusqu\'à aujourd\'hui', - 'Search by creator: ' => 'Rechercher par créateur : ', - 'Search by creation date: ' => 'Rechercher par date de création : ', - 'Search by task status: ' => 'Rechercher par le statut des tâches : ', - 'Search by task title: ' => 'Rechercher par le titre des tâches : ', + 'Search by creator: ' => 'Rechercher par créateur : ', + 'Search by creation date: ' => 'Rechercher par date de création : ', + 'Search by task status: ' => 'Rechercher par le statut des tâches : ', + 'Search by task title: ' => 'Rechercher par le titre des tâches : ', 'Activity stream search' => 'Recherche dans le flux d\'activité', - 'Projects where "%s" is manager' => 'Projets où « %s » est gestionnaire', - 'Projects where "%s" is member' => 'Projets où « %s » est membre du projet', - 'Open tasks assigned to "%s"' => 'Tâches ouvertes assignées à « %s »', - 'Closed tasks assigned to "%s"' => 'Tâches fermées assignées à « %s »', + 'Projects where "%s" is manager' => 'Projets où « %s » est gestionnaire', + 'Projects where "%s" is member' => 'Projets où « %s » est membre du projet', + 'Open tasks assigned to "%s"' => 'Tâches ouvertes assignées à « %s »', + 'Closed tasks assigned to "%s"' => 'Tâches fermées assignées à « %s »', 'Assign automatically a color based on a priority' => 'Assigner automatiquement une couleur par rapport à une priorité', - 'Overdue tasks for the project(s) "%s"' => 'Tâches en retard pour le projet(s) « %s »', - 'Upload files' => 'Uploader les fichiers', + 'Overdue tasks for the project(s) "%s"' => 'Tâches en retard pour le projet(s) « %s »', + 'Upload files' => 'Envoyer les fichiers', 'Installed Plugins' => 'Extensions installées', 'Plugin Directory' => 'Liste des extensions', 'Plugin installed successfully.' => 'Extension installée avec succès.', @@ -1102,32 +1067,32 @@ return array( 'Unable to open plugin archive.' => 'Impossible d\'ouvrir l\'archive du plugin.', 'There is no file in the plugin archive.' => 'Il n\'y a aucun fichier dans l\'archive du plugin.', 'Create tasks in bulk' => 'Créer plusieurs tâches en même temps', - 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Votre instance de Kanboard n\'est pas configurée pour installer des extension depuis l\'interface utilisateur.', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Votre instance de Kanboard n\'est pas configurée pour installer des extensions depuis l\'interface utilisateur.', 'There is no plugin available.' => 'Il n\'a aucune extension disponible.', 'Install' => 'Installer', 'Update' => 'Mettre à jour', 'Up to date' => 'À jour', 'Not available' => 'Non disponible', 'Remove plugin' => 'Supprimer l\'extension', - 'Do you really want to remove this plugin: "%s"?' => 'Voulez-vous vraiment supprimer cette extension : « %s » ?', + 'Do you really want to remove this plugin: "%s"?' => 'Voulez-vous vraiment supprimer cette extension : « %s » ?', 'Uninstall' => 'Désinstaller', 'Listing' => 'Listing', 'Metadata' => 'Metadonnées', 'Manage projects' => 'Gérer les projets', 'Convert to task' => 'Convertir en tâche', 'Convert sub-task to task' => 'Convertir une sous-tâche en tâche', - 'Do you really want to convert this sub-task to a task?' => 'Voulez-vous vraiment convertir cette sous-tâche en tâche ?', + 'Do you really want to convert this sub-task to a task?' => 'Voulez-vous vraiment convertir cette sous-tâche en tâche ?', 'My task title' => 'Mon titre pour la tâche', 'Enter one task by line.' => 'Entrez une tâche par ligne.', - 'Number of failed login:' => 'Nombre de connexion échouées :', - 'Account locked until:' => 'Compte bloqué jusqu\'au :', + 'Number of failed login:' => 'Nombre de connexions échouées :', + 'Account locked until:' => 'Compte bloqué jusqu\'au :', 'Email settings' => 'Paramètres des emails', 'Email sender address' => 'Adresse email de l\'expéditeur', 'Email transport' => 'Transport des emails', 'Webhook token' => 'Jeton de sécurité des webhooks', 'Project tags management' => 'Gestion des libellés pour le projet', 'Tag created successfully.' => 'Libellé créé avec succès.', - 'Unable to create this tag.' => 'Imposssible de créer ce libellé.', + 'Unable to create this tag.' => 'Impossible de créer ce libellé.', 'Tag updated successfully.' => 'Libellé mis à jour avec succès.', 'Unable to update this tag.' => 'Impossible de mettre à jour ce libellé.', 'Tag removed successfully.' => 'Libellé supprimé avec succès.', @@ -1141,7 +1106,7 @@ return array( 'There is no specific tag for this project at the moment.' => 'Il n\'y a aucun libellé spécifique pour ce projet pour le moment.', 'Tag' => 'Libellé', 'Remove a tag' => 'Supprimer un libellé', - 'Do you really want to remove this tag: "%s"?' => 'Voulez-vous vraiment supprimer ce libellé : « %s » ?', + 'Do you really want to remove this tag: "%s"?' => 'Voulez-vous vraiment supprimer ce libellé : « %s » ?', 'Global tags' => 'Libellés globaux', 'There is no global tag at the moment.' => 'Il n\'y a aucun libellé global pour le moment.', 'This field cannot be empty' => 'Ce champ ne peut être vide', @@ -1169,23 +1134,21 @@ return array( 'Subtasks overview for %s' => 'Aperçu des sous-tâches pour %s', 'Projects overview for %s' => 'Aperçu des projets pour %s', 'Activity stream for %s' => 'Flux d\'activité pour %s', - 'Calendar for %s' => 'Calendrier pour %s', - 'Notifications for %s' => 'Notifications pour %s', - 'Assign a color when the task is moved to a specific swimlane' => 'Assigner une couleur lorsque une tâche est déplaçée dans une swimlane spécifique', - 'Assign a priority when the task is moved to a specific swimlane' => 'Assigner une priorité lorsque une tâche est déplaçée dans une swimlane spécifique', + 'Assign a color when the task is moved to a specific swimlane' => 'Assigner une couleur lorsque une tâche est déplacée dans une swimlane spécifique', + 'Assign a priority when the task is moved to a specific swimlane' => 'Assigner une priorité lorsque une tâche est déplacée dans une swimlane spécifique', 'User unlocked successfully.' => 'Utilisateur débloqué avec succès.', 'Unable to unlock the user.' => 'Impossible de débloquer cet utilisateur.', - 'Move a task to another swimlane' => 'Déplaçer une tâche dans une autre swimlane', + 'Move a task to another swimlane' => 'Déplacer une tâche dans une autre swimlane', 'Creator Name' => 'Nom du créateur', 'Time spent and estimated' => 'Temps passé et estimé', 'Move position' => 'Changer la position', - 'Move task to another position on the board' => 'Déplaçer la tâche vers une autre position sur le tableau', + 'Move task to another position on the board' => 'Déplacer la tâche vers une autre position sur le tableau', 'Insert before this task' => 'Insérer avant cette tâche', 'Insert after this task' => 'Insérer après cette tâche', 'Unlock this user' => 'Débloquer cet utilisateur', 'Custom Project Roles' => 'Rôles personnalisés du projet', 'Add a new custom role' => 'Ajouter un nouveau rôle personnalisé', - 'Restrictions for the role "%s"' => 'Restrictions pour le rôle « %s »', + 'Restrictions for the role "%s"' => 'Restrictions pour le rôle « %s »', 'Add a new project restriction' => 'Ajouter une nouvelle restriction pour ce projet', 'Add a new drag and drop restriction' => 'Ajouter une nouvelle restriction pour le glisser-déposer', 'Add a new column restriction' => 'Ajouter une nouvelle restriction basé sur les colonnes', @@ -1213,43 +1176,42 @@ return array( 'Closing or opening a task is permitted for this column' => 'Fermer ou ouvrir une tâche est permis pour cette colonne', 'Task creation is blocked for this column' => 'La création de tâche est bloquée pour cette colonne', 'Closing or opening a task is blocked for this column' => 'Fermer ou ouvrir une tâche est interdit pour cette colonne', - 'Task creation is not permitted' => 'La création de tâche ne pas permise', + 'Task creation is not permitted' => 'La création de tâche n\'est pas permise', 'Closing or opening a task is not permitted' => 'Fermer ou ouvrir une tâche n\'est pas autorisé', - 'New drag and drop restriction for the role "%s"' => 'Nouvelle restriction de glisser-déposer pour le rôle « %s »', - 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Les gens qui font partis de ce rôle pourrons seulement déplaçer des tâches entre la colonne source et de destination.', + 'New drag and drop restriction for the role "%s"' => 'Nouvelle restriction de glisser-déposer pour le rôle « %s »', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Les gens qui font partie de ce rôle pourront seulement déplacer des tâches entre la colonne source et de destination.', 'Remove a column restriction' => 'Supprimer une restriction de colonne', - 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Voulez-vous vraiment supprimer cette restriction de colonne : « %s » vers « %s » ?', - 'New column restriction for the role "%s"' => 'Nouvelle restriction de colonne pour le rôle « %s »', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Voulez-vous vraiment supprimer cette restriction de colonne : « %s » vers « %s » ?', + 'New column restriction for the role "%s"' => 'Nouvelle restriction de colonne pour le rôle « %s »', 'Rule' => 'Règle', - 'Do you really want to remove this column restriction?' => 'Voulez-vous vraiment supprimer cette restriction de colonne ?', + 'Do you really want to remove this column restriction?' => 'Voulez-vous vraiment supprimer cette restriction de colonne ?', 'Custom roles' => 'Rôles personnalisés', 'New custom project role' => 'Nouveau rôle de projet personnalisé', 'Edit custom project role' => 'Modifier un rôle de projet personnalisé', 'Remove a custom role' => 'Supprimer un rôle personnalisé', - 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => 'Voulez-vous vraiment supprimer ce rôle personnalisé « %s » ? Tous les gens assignés à ce rôle deviendrons membre du projet.', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => 'Voulez-vous vraiment supprimer ce rôle personnalisé « %s » ? Tous les gens assignés à ce rôle deviendront membre du projet.', 'There is no custom role for this project.' => 'Il n\'y a aucun rôle personnalisé pour ce projet.', - 'New project restriction for the role "%s"' => 'Nouvelle restriction de projet pour le rôle « %s »', + 'New project restriction for the role "%s"' => 'Nouvelle restriction de projet pour le rôle « %s »', 'Restriction' => 'Restriction', - 'Remove a project restriction' => 'Supprimer une restriction de project', - 'Do you really want to remove this project restriction: "%s"?' => 'Voulez-vous vraiment supprimer cette restriction de projet : « %s » ?', + 'Remove a project restriction' => 'Supprimer une restriction de projet', + 'Do you really want to remove this project restriction: "%s"?' => 'Voulez-vous vraiment supprimer cette restriction de projet : « %s » ?', 'Duplicate to multiple projects' => 'Dupliquer vers plusieurs projets', 'This field is required' => 'Ce champ est requis', - 'Moving a task is not permitted' => 'Déplaçer une tâche n\'est pas autorisé', + 'Moving a task is not permitted' => 'Déplacer une tâche n\'est pas autorisé', 'This value must be in the range %d to %d' => 'Cette valeur doit être définie entre %d et %d', 'You are not allowed to move this task.' => 'Vous n\'êtes pas autorisé à déplacer cette tâche.', 'API User Access' => 'Accès utilisateur de l\'API', 'Preview' => 'Aperçu', 'Write' => 'Écrire', 'Write your text in Markdown' => 'Écrivez votre texte en Markdown', - 'New External Task: %s' => 'Nouvelle tâche externe : %s', 'No personal API access token registered.' => 'Aucun jeton d\'accès personnel à l\'API enregistré.', - 'Your personal API access token is "%s"' => 'Votre jeton d\'accès personnel à l\'API est « %s »', + 'Your personal API access token is "%s"' => 'Votre jeton d\'accès personnel à l\'API est « %s »', 'Remove your token' => 'Supprimer votre jeton', 'Generate a new token' => 'Générer un nouveau jeton', 'Showing %d-%d of %d' => 'Éléments %d à %d sur %d', 'Outgoing Emails' => 'Emails sortants', 'Add or change currency rate' => 'Ajouter ou changer le taux de change', - 'Reference currency: %s' => 'Monnaie de référence : %s', + 'Reference currency: %s' => 'Monnaie de référence : %s', 'Add custom filters' => 'Ajouter un filtre personnalisé', 'Export' => 'Exporter', 'Add link label' => 'Ajouter un libellé de lien', @@ -1268,8 +1230,8 @@ return array( 'Unable to create this user.' => 'Impossible de créer cet utilisateur.', 'Kanboard Invitation' => 'Invitation pour Kanboard', 'Visible on dashboard' => 'Visible sur le tableau de bord', - 'Created at:' => 'Créé le :', - 'Updated at:' => 'Mis à jour le :', + 'Created at:' => 'Créé le :', + 'Updated at:' => 'Mis à jour le :', 'There is no custom filter.' => 'Il n\'y a aucun filtre personnalisé.', 'New User' => 'Nouvel utilisateur', 'Authentication' => 'Authentification', @@ -1288,7 +1250,7 @@ return array( 'This username is already taken' => 'Ce nom d\'utilisateur est déjà pris', 'A link to reset your password has been sent by email.' => 'Un lien pour réinitialiser votre mot de passe a été envoyé par email.', 'Your profile must have a valid email address.' => 'Votre profil doit avoir une adresse e-mail valide.', - 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Malheureusement, nous ne pouvons pas réinitialiser votre mot de passe. Avez-vous saisi un nom d\'utilisateur valide ? Avez-vous une adresse e-mail dans votre profil ?', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Malheureusement, nous ne pouvons pas réinitialiser votre mot de passe. Avez-vous saisi un nom d\'utilisateur valide ? Avez-vous une adresse e-mail dans votre profil ?', 'TRL - Turkish Lira' => 'TRL - Livre turque', 'The project email is optional and could be used by several plugins.' => 'L\'adresse email d\'un projet est optionnel et pourrait être utilisé par plusieurs extensions.', 'The project email must be unique across all projects' => 'L\'adresse email d\'un projet doit être unique pour tous les projets', @@ -1296,9 +1258,9 @@ return array( 'Close this project' => 'Fermer ce projet', 'Open this project' => 'Ouvrir ce projet', 'Close a project' => 'Fermer un projet', - 'Do you really want to close this project: "%s"?' => 'Voulez-vous vraiment fermer ce projet : « %s » ?', - 'Reopen a project' => 'Réouvrir un projet', - 'Do you really want to reopen this project: "%s"?' => 'Voulez-vous vraiment réouvrir ce projet : « %s » ?', + 'Do you really want to close this project: "%s"?' => 'Voulez-vous vraiment fermer ce projet : « %s » ?', + 'Reopen a project' => 'Rouvrir un projet', + 'Do you really want to reopen this project: "%s"?' => 'Voulez-vous vraiment rouvrir ce projet : « %s » ?', 'This project is open' => 'Ce projet est actif', 'This project is closed' => 'Ce projet est fermé', 'Unable to upload files, check the permissions of your data folder.' => 'Impossible de transférer le ou les fichiers, vérifiez les permissions du répertoire de données.', @@ -1313,13 +1275,12 @@ return array( 'Create and send a comment by email' => 'Créer et envoyer un commentaire par email', 'Subject' => 'Sujet', 'Upload the database' => 'Téléverser la base de données', - 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Vous pouvez téléverser la base de données Sqlite précédemment téléchargée au format Gzip.', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Vous pouvez téléverser la base de données SQLite précédemment téléchargée au format Gzip.', 'Database file' => 'Fichier de la base de données', 'Upload' => 'Téléverser', - 'Remove this user from group' => 'Enlever cet utilisateur du groupe', 'Your project must have at least one active swimlane.' => 'Votre projet doit avoir au moins une swimlane active.', - 'Project: %s' => 'Projet : %s', - 'Automatic action not found: "%s"' => 'Action automatique introuvable : « %s »', + 'Project: %s' => 'Projet : %s', + 'Automatic action not found: "%s"' => 'Action automatique introuvable : « %s »', '%d projects' => '%d projets', '%d project' => '%d projet', 'There is no project.' => 'Il n\'y a pas de projet.', @@ -1334,4 +1295,75 @@ return array( 'Assign automatically a color when due date is expired' => 'Assigner automatiquement une couleur lorsque la date d\'échéance expire', 'Total score in this column across all swimlanes' => 'Score total dans cette colonne à travers toutes les swimlanes', 'HRK - Kuna' => 'HRK - Kuna croate', + 'ARS - Argentine Peso' => 'ARS - Peso argentin', + 'COP - Colombian Peso' => 'COP - Peso colombien', + '%d groups' => '%d groupes', + '%d group' => '%d groupe', + 'Group ID' => 'ID du groupe', + 'External ID' => 'Identifiant externe', + '%d users' => '%d utilisateurs', + '%d user' => '%d utilisateur', + 'Hide subtasks' => 'Cacher les sous-tâches', + 'Show subtasks' => 'Montrer les sous-tâches', + 'Authentication Parameters' => 'Paramètres d\'authentification', + 'API Access' => 'Accès à l\'API', + 'No users found.' => 'Aucun utilisateur trouvé.', + 'User ID' => 'ID de l\'utilisateur', + 'Notifications are activated' => 'Notifications activées', + 'Notifications are disabled' => 'Notifications désactivées', + 'User disabled' => 'Utilisateur désactivé', + '%d notifications' => '%d notifications', + '%d notification' => '%d notification', + 'There is no external integration installed.' => 'Il n\'y a aucune intégration externe installée.', + 'You are not allowed to update tasks assigned to someone else.' => 'Vous n\'êtes pas autorisé à mettre à jour une tâche assignée à quelqu\'un d\'autre.', + 'You are not allowed to change the assignee.' => 'Vous n\'êtes pas autorisé à changer l\'assigné', + 'Task suppression is not permitted' => 'La suppression des tâches n\'est pas autorisée', + 'Changing assignee is not permitted' => 'Changement d\'assigné non autorisé', + 'Update only assigned tasks is permitted' => 'Seulement la mise à jour des tâches assignées est autorisé', + 'Only for tasks assigned to the current user' => 'Seulement pour les tâches assignées à l\'utilisateur courant', + 'My projects' => 'Mes projets', + 'Your are not member of any project.' => 'Vous n\'êtes membre d\'aucun projet', + 'My subtasks' => 'Mes sous-tâches', + '%d subtasks' => '%d sous-tâches', + '%d subtask' => '%d sous-tâche', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Seulement le déplacement des tâches entre ces colonnes est autorisé pour l\'utilisateur courant', + '[DUPLICATE]' => '[COPIE]', + 'DKK - Danish Krona' => 'DKK - Couronne danoise', + 'Remove user from group' => 'Supprimer cet utilisateur du groupe', + 'Assign the task to its creator' => 'Assigner une tâche à son créateur', + 'This task was sent by email to "%s" with subject "%s".' => 'Cette tâche a été envoyée par courrier électronique à « %s » avec le sujet « %s ».', + 'Predefined Email Subjects' => 'Sujets de courrier électronique prédéfinis', + 'Write one subject by line.' => 'Écrivez un sujet par ligne.', + 'Create another link' => 'Créer un autre lien', + 'BRL - Brazilian Real' => 'BRL - Real brésilien', + 'Add a new Kanboard task' => 'Ajouter une nouvelle tâche Kanboard', + 'Subtask not started' => 'Sous-tâche pas encore commencé', + 'Subtask currently in progress' => 'Sous-tâche actuellement en progrès', + 'Subtask completed' => 'Sous-tâche terminée', + 'Subtask added successfully.' => 'Sous-tâche ajoutée avec succès.', + '%d subtasks added successfully.' => '%d sous-tâches ajoutées avec succès.', + 'Enter one subtask by line.' => 'Entrez une sous-tâche par ligne.', + 'Predefined Contents' => 'Contenus prédéfini', + 'Predefined contents' => 'Contenus prédéfini', + 'Predefined Task Description' => 'Modèles de description de tâches', + 'Do you really want to remove this template? "%s"' => 'Voulez-vous vraiment supprimer ce modèle ? « %s »', + 'Add predefined task description' => 'Ajouter un modèle de description de tâche', + 'Predefined Task Descriptions' => 'Modèles de description de tâches', + 'Template created successfully.' => 'Modèle créé avec succès.', + 'Unable to create this template.' => 'Impossible de créer ce modèle.', + 'Template updated successfully.' => 'Modèle mis à jour avec succès.', + 'Unable to update this template.' => 'Impossible de mettre à jour ce modèle.', + 'Template removed successfully.' => 'Modèle supprimé avec succès.', + 'Unable to remove this template.' => 'Impossible de supprimer ce modèle.', + 'Template for the task description' => 'Modèle pour la description des tâches', + 'The start date is greater than the end date' => 'La date de début est plus grande que la date d\'échéance', + 'Tags must be separated by a comma' => 'Les labels doivent être séparé par une virgule', + 'Only the task title is required' => 'Seulement le titre est obligatoire', + 'Creator Username' => 'Identifiant du créateur', + 'Color Name' => 'Nom de la couleur', + 'Column Name' => 'Nom de la colonne', + 'Swimlane Name' => 'Nom de la swimlane', + 'Time Estimated' => 'Durée estimée', + 'Time Spent' => 'Temps passé', + 'External Link' => 'Lien externe', ); diff --git a/app/Locale/hr_HR/translations.php b/app/Locale/hr_HR/translations.php index 28474da6..b57dc3b9 100644 --- a/app/Locale/hr_HR/translations.php +++ b/app/Locale/hr_HR/translations.php @@ -37,9 +37,8 @@ return array( 'Username' => 'Korisnik', 'Password' => 'Lozinka', 'Administrator' => 'Administrator', - 'Sign in' => 'Odjava', + 'Sign in' => 'Prijava', 'Users' => 'Korisnik', - 'No user' => 'Ne', 'Forbidden' => 'Zabranjeno', 'Access Forbidden' => 'Zabranjen prostup', 'Edit user' => 'Promjeni korisnika', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Pod-zadatak je uspješno dopunjen.', 'Unable to update your sub-task.' => 'Nije moguće dopuniti ovaj pod-zadatak.', 'Unable to create your sub-task.' => 'Nije moguće krerati ovaj pod-zadatak.', - 'Sub-task added successfully.' => 'Pod-zadatak uspješno dodan', 'Maximum size: ' => 'Maksimalna veličina: ', 'Display another project' => 'Prikaži drugi projekt', 'Created by %s' => 'Kreirao %s', @@ -341,7 +339,7 @@ return array( '%s created the task %s' => '%s je kreirao zadatak %s', '%s closed the task %s' => '%s je zatvorio zadatak %s', '%s created a subtask for the task %s' => '%s je kreirao pod-zadatak zadatka %s', - '%s updated a subtask for the task %s' => '%s je dopunjen pod-zadatak zadatka %s', + '%s updated a subtask for the task %s' => '%s je dopunio pod-zadatak zadatka %s', 'Assigned to %s with an estimate of %s/%sh' => 'Dodijeljen korisniku %s uz procjenu vremena %s/%sh', 'Not assigned, estimate of %sh' => 'Nije dodijeljen, procijenjeno vrijeme %sh', '%s updated a comment on the task %s' => '%s je dopunio komentar zadatka %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Popis aktivnosti', 'Dashboard' => 'Nadzorna ploča', 'Confirmation' => 'Potvrda', - 'Allow everybody to access to this project' => 'Dozvoli svima pristup projektu', - 'Everybody have access to this project.' => 'Svima je dozvoljen pristup.', // 'Webhooks' => '', // 'API' => '', // 'Create a comment from an external provider' => '', 'Project management' => 'Uređivanje projekata', - 'My projects' => 'Moji projekti', 'Columns' => 'Stupci', 'Task' => 'Zadaci', - 'Your are not member of any project.' => 'Nisi član niti jednog projekta', 'Percentage' => 'Postotak', 'Number of tasks' => 'Broj zadataka', 'Task distribution' => 'Podjela zadataka', 'Analytics' => 'Analiza', 'Subtask' => 'Pod-zadatak', - 'My subtasks' => 'Moji pod-zadaci', 'User repartition' => 'Zaduženja korisnika', 'Clone this project' => 'Kopiraj projekt', 'Column removed successfully.' => 'Stupac je uspješno maknut.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Svi stupci', - 'Calendar' => 'Kalendar', 'Next' => 'Idući', // '#%d' => '', 'All swimlanes' => 'Sve staze', @@ -543,10 +535,10 @@ return array( // 'Move the task to another column when assigned to a user' => '', // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', - // 'Transitions' => '', + 'Transitions' => 'Pomicanja', // 'Executer' => '', - // 'Time spent in the column' => '', - // 'Task transitions' => '', + 'Time spent in the column' => 'Vrijeme provedeno u stupcu', + 'Task transitions' => 'Pomicanja zadatka', // 'Task transitions export' => '', // 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => '', // 'Currency rates' => '', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', // 'Webhook URL' => '', // '%s removed the assignee of the task %s' => '', - 'Enable Gravatar images' => 'Omogući Gravatar slike', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -569,7 +560,7 @@ return array( // 'Secret key: ' => '', // 'Test your device' => '', // 'Assign a color when the task is moved to a specific column' => '', - // '%s via Kanboard' => '', + '%s via Kanboard' => '%s pomoću Kanboard', // 'Burndown chart' => '', // 'This chart show the task complexity over the time (Work Remaining).' => '', // 'Screenshot taken %s' => '', @@ -589,7 +580,7 @@ return array( // 'The identifier must be unique' => '', // 'This linked task id doesn\'t exists' => '', // 'This value must be alphanumeric' => '', - // 'Edit recurrence' => '', + 'Edit recurrence' => 'Promjena ponavljanja', // 'Generate recurrent task' => '', // 'Trigger to generate recurrent task' => '', // 'Factor to calculate new due date' => '', @@ -611,14 +602,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - 'Calendar settings' => 'Postavke kalendara', - 'Project calendar view' => 'Projektni kalendar', 'Project settings' => 'Postavke projekta', - 'Show subtasks based on the time tracking' => 'Prikaz pod-zadataka po evidenciji vremena', - 'Show tasks based on the creation date' => 'Prikaz zadataka po datumu kreiranja', - 'Show tasks based on the start date' => 'Prikaz zadataka po datumu početka', - 'Subtasks time tracking' => 'Evidencija vremena pod-zadataka', - 'User calendar view' => 'Korisnički kalendar', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Postavke', @@ -636,14 +620,13 @@ return array( // 'Reopen a task' => '', // 'Notification' => '', // '%s moved the task #%d to the first swimlane' => '', - // 'Swimlane' => '', - // 'Gravatar' => '', + 'Swimlane' => 'Staza', // '%s moved the task %s to the first swimlane' => '', // '%s moved the task %s to the swimlane "%s"' => '', // 'This report contains all subtasks information for the given date range.' => '', // 'This report contains all tasks information for the given date range.' => '', // 'Project activities for %s' => '', - // 'view the board on Kanboard' => '', + 'view the board on Kanboard' => 'Pregledaj ploču', // 'The task have been moved to the first swimlane' => '', // 'The task have been moved to another swimlane:' => '', // 'New title: %s' => '', @@ -674,7 +657,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', 'My activity stream' => 'Moje aktivnosti', - 'My calendar' => 'Moj kalendar', 'Search tasks' => 'Pretraživanje zadataka', 'Reset filters' => 'Obriši filtere', 'My tasks due tomorrow' => 'Moji zadaci sa rokom sutra', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Pregled', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', @@ -737,21 +718,14 @@ return array( // 'Current category: %s' => '', // 'no category' => '', // 'Current assignee: %s' => '', - // 'not assigned' => '', + 'not assigned' => 'nije dodjeljeno', // 'Author:' => '', // 'contributors' => '', // 'License:' => '', // 'License' => '', // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', // 'Start date:' => '', - // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', + 'Due date:' => 'Rok:', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( 'Members' => 'Članovi', // 'Shared project' => '', // 'Project managers' => '', - // 'Gantt chart for all projects' => '', // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', // 'Milestone' => '', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', 'Documentation' => 'Dokumentacija', // 'Table of contents' => '', - // 'Gantt' => '', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -804,7 +771,7 @@ return array( // 'Task #%d opened' => '', // 'Column changed for task #%d' => '', // 'New position for task #%d' => '', - // 'Swimlane changed for task #%d' => '', + 'Swimlane changed for task #%d' => 'Staza izmjenjena za zadatak #%d', // 'Assignee changed on task #%d' => '', // '%d overdue tasks' => '', // 'Task #%d is overdue' => '', @@ -854,7 +821,7 @@ return array( // 'Duplicates are not imported' => '', // 'Usernames must be lowercase and unique' => '', // 'Passwords will be encrypted if present' => '', - // '%s attached a new file to the task %s' => '', + '%s attached a new file to the task %s' => '%s je dodao datoteku za zadatak %s', // 'Link type' => '', // 'Assign automatically a category based on a link' => '', // 'BAM - Konvertible Mark' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -907,8 +873,8 @@ return array( // 'Project members' => '', // '%s mentioned you in the task #%d' => '', // '%s mentioned you in a comment on the task #%d' => '', - // 'You were mentioned in the task #%d' => '', - // 'You were mentioned in a comment on the task #%d' => '', + 'You were mentioned in the task #%d' => 'Spomenuti ste u zadatku #%d', + 'You were mentioned in a comment on the task #%d' => 'Spomenuti ste u komntaru od zadatka #%d', // 'Estimated hours: ' => '', // 'Actual hours: ' => '', // 'Hours Spent' => '', @@ -925,7 +891,7 @@ return array( // 'Enable two-factor authentication' => '', // 'There is no integration registered at the moment.' => '', // 'Password Reset for Kanboard' => '', - // 'Forgot password?' => '', + 'Forgot password?' => 'Zaboravili ste lozinku?', 'Enable "Forget Password"' => 'Omogući opciju "Zaboravljena lozinka"', // 'Password Reset' => '', // 'New password' => '', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Inicijalni prioritet', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -967,7 +932,7 @@ return array( // 'Title not found' => '', // 'Web Link' => '', // 'External links' => '', - // 'Add external link' => '', + 'Add external link' => 'Dodaj vanjski link', // 'Type' => '', // 'Dependency' => '', // 'Add internal link' => '', @@ -977,8 +942,8 @@ return array( // 'Copy and paste your link here...' => '', // 'URL' => '', // 'Internal links' => '', - // 'Assign to me' => '', - // 'Me' => '', + 'Assign to me' => 'Dodjeli meni', + 'Me' => 'Ja', // 'Do not duplicate anything' => '', 'Projects management' => 'Uređivanje projekata', // 'Users management' => '', @@ -987,9 +952,9 @@ return array( 'open' => 'otvoren', 'closed' => 'zatvoren', 'Priority:' => 'Prioritet:', - // 'Reference:' => '', - // 'Complexity:' => '', - // 'Swimlane:' => '', + 'Reference:' => 'Referenca:', + 'Complexity:' => 'Kompleksnost:', + 'Swimlane:' => 'Staza:', 'Column:' => 'Stupac:', 'Position:' => 'Pozicija:', 'Creator:' => 'Napravio:', @@ -1146,13 +1111,13 @@ return array( 'There is no global tag at the moment.' => 'Trenutno nema globalno definiranih oznaka.', // 'This field cannot be empty' => '', // 'Close a task when there is no activity in an specific column' => '', - // '%s removed a subtask for the task #%d' => '', + '%s removed a subtask for the task #%d' => '%s je uklonio pod-zadatak od zadataka #%d', // '%s removed a comment on the task #%d' => '', // 'Comment removed on task #%d' => '', // 'Subtask removed on task #%d' => '', // 'Hide tasks in this column in the dashboard' => '', // '%s removed a comment on the task %s' => '', - // '%s removed a subtask for the task %s' => '', + '%s removed a subtask for the task %s' => '%s je uklonio pod-zadatak od zadataka #%s', // 'Comment removed' => '', // 'Subtask removed' => '', // '%s set a new internal link for the task #%d' => '', @@ -1166,11 +1131,9 @@ return array( // 'Move the task to another column when not moved during a given period' => '', 'Dashboard for %s' => 'Nadzorna ploča za %s', 'Tasks overview for %s' => 'Pregled zadataka za %s', - // 'Subtasks overview for %s' => '', - // 'Projects overview for %s' => '', + 'Subtasks overview for %s' => 'Pregled podzadataka za %s', + 'Projects overview for %s' => 'Pregled projekata za %s', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', 'No personal API access token registered.' => 'Nije zabilježen niti jedan pristupni token.', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1309,19 +1271,18 @@ return array( // 'Database uploaded successfully.' => '', // 'Task sent by email successfully.' => '', // 'There is no category in this project.' => '', - // 'Send by email' => '', + 'Send by email' => 'Pošalji emailom', // 'Create and send a comment by email' => '', // 'Subject' => '', // 'Upload the database' => '', // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', + '%d projects' => '%d projekta', + '%d project' => '%d projekt', // 'There is no project.' => '', // 'Sort' => '', // 'Project ID' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + 'My projects' => 'Moji projekti', + // 'Your are not member of any project.' => '', + 'My subtasks' => 'Moji podzadaci', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index 2d02f07e..eac0761e 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -5,44 +5,43 @@ return array( 'number.thousands_separator' => ' ', 'None' => 'Nincs', 'Edit' => 'Szerkesztés', - 'Remove' => 'Törlés', + 'Remove' => 'Eltávolítás', 'Yes' => 'Igen', 'No' => 'Nem', - 'cancel' => 'Mégsem', + 'cancel' => 'mégse', 'or' => 'vagy', 'Yellow' => 'Sárga', 'Blue' => 'Kék', 'Green' => 'Zöld', 'Purple' => 'Lila', 'Red' => 'Piros', - 'Orange' => 'Narancs', + 'Orange' => 'Narancssárga', 'Grey' => 'Szürke', 'Brown' => 'Barna', 'Deep Orange' => 'Sötét narancs', 'Dark Grey' => 'Sötét szürke', 'Pink' => 'Rózsaszín', - 'Teal' => 'Pávakék', + 'Teal' => 'Kékeszöld', 'Cyan' => 'Ciánkék', - 'Lime' => 'Lime', + 'Lime' => 'Citrus', 'Light Green' => 'Világos zöld', 'Amber' => 'Borostyán', 'Save' => 'Mentés', 'Login' => 'Bejelentkezés', - 'Official website:' => 'Hivatalos honlap:', + 'Official website:' => 'Hivatalos weboldal:', 'Unassigned' => 'Nincs felelős', 'View this task' => 'Feladat megtekintése', - 'Remove user' => 'Felhasználó törlése', - 'Do you really want to remove this user: "%s"?' => 'Valóban törölni akarja ezt a felhasználót: "%s"?', - 'All users' => 'Minden felhasználó', + 'Remove user' => 'Felhasználó eltávolítása', + 'Do you really want to remove this user: "%s"?' => 'Valóban el szeretné távolítani ezt a felhasználót: „%s”?', + 'All users' => 'Összes felhasználó', 'Username' => 'Felhasználónév', 'Password' => 'Jelszó', - 'Administrator' => 'Rendszergazda', - 'Sign in' => 'Jelentkezzen be', + 'Administrator' => 'Adminisztrátor', + 'Sign in' => 'Bejelentkezés', 'Users' => 'Felhasználók', - 'No user' => 'Nincs felhasználó', - 'Forbidden' => 'tiltott', + 'Forbidden' => 'Tiltott', 'Access Forbidden' => 'Hozzáférés megtagadva', - 'Edit user' => 'Felhasználó módosítása', + 'Edit user' => 'Felhasználó szerkesztése', 'Logout' => 'Kilépés', 'Bad username or password' => 'Rossz felhasználónév vagy jelszó', 'Edit project' => 'Projekt szerkesztése', @@ -51,159 +50,159 @@ return array( 'No project' => 'Nincs projekt', 'Project' => 'Projekt', 'Status' => 'Állapot', - 'Tasks' => 'Feladat', + 'Tasks' => 'Feladatok', 'Board' => 'Tábla', 'Actions' => 'Műveletek', 'Inactive' => 'Inaktív', 'Active' => 'Aktív', - 'Unable to update this board.' => 'Nem lehet frissíteni a táblát.', + 'Unable to update this board.' => 'Nem lehet frissíteni ezt a táblát.', 'Disable' => 'Letiltás', 'Enable' => 'Engedélyezés', 'New project' => 'Új projekt', - 'Do you really want to remove this project: "%s"?' => 'Valóban törölni akarja ezt a projektet: "%s"?', - 'Remove project' => 'Projekt törlése', - 'Edit the board for "%s"' => 'Tábla szerkesztése: "%s"', - 'Add a new column' => 'Új oszlop', + 'Do you really want to remove this project: "%s"?' => 'Valóban el szeretné távolítani ezt a projektet: „%s”?', + 'Remove project' => 'Projekt eltávolítása', + 'Edit the board for "%s"' => 'Tábla szerkesztése: „%s”', + 'Add a new column' => 'Új oszlop hozzáadása', 'Title' => 'Cím', 'Assigned to %s' => 'Felelős: %s', - 'Remove a column' => 'Oszlop törlése', - 'Unable to remove this column.' => 'Az oszlop törlése nem lehetséges.', - 'Do you really want to remove this column: "%s"?' => 'Valóban törölni akarja ezt az oszlopot: "%s"?', + 'Remove a column' => 'Oszlop eltávolítása', + 'Unable to remove this column.' => 'Nem lehet eltávolítani ezt az oszlopot.', + 'Do you really want to remove this column: "%s"?' => 'Valóban el szeretné távolítani ezt az oszlopot: „%s”?', 'Settings' => 'Beállítások', - 'Application settings' => 'Alkalmazás beállítások', + 'Application settings' => 'Alkalmazás beállításai', 'Language' => 'Nyelv', - 'Webhook token:' => 'Webhook token:', + 'Webhook token:' => 'Webhurok token:', 'API token:' => 'API token:', - 'Database size:' => 'Adatbázis méret:', + 'Database size:' => 'Adatbázis mérete:', 'Download the database' => 'Adatbázis letöltése', 'Optimize the database' => 'Adatbázis optimalizálása', '(VACUUM command)' => '(VACUUM parancs)', - '(Gzip compressed Sqlite file)' => '(Gzip tömörített SQLite fájl)', + '(Gzip compressed Sqlite file)' => '(Gzip-pel tömörített SQLite fájl)', 'Close a task' => 'Feladat lezárása', 'Column' => 'Oszlop', 'Color' => 'Szín', 'Assignee' => 'Felelős', - 'Create another task' => 'Új feladat létrehozása', + 'Create another task' => 'Másik feladat létrehozása', 'New task' => 'Új feladat', - 'Open a task' => 'Feladat felnyitás', - 'Do you really want to open this task: "%s"?' => 'Valóban meg akarja nyitni ezt a feladatot: "%s"?', + 'Open a task' => 'Feladat megnyitása', + 'Do you really want to open this task: "%s"?' => 'Valóban meg szeretné nyitni ezt a feladatot: „%s”?', 'Back to the board' => 'Vissza a táblához', - 'There is nobody assigned' => 'Nincs felelős', - 'Column on the board:' => 'Tábla oszlopa: ', + 'There is nobody assigned' => 'Nincs senki se hozzárendelve', + 'Column on the board:' => 'Oszlop a táblán:', 'Close this task' => 'Feladat lezárása', - 'Open this task' => 'Feladat felnyitása', - 'There is no description.' => 'Nincs elérhető leírás.', + 'Open this task' => 'Feladat megnyitása', + 'There is no description.' => 'Nincs leírás.', 'Add a new task' => 'Új feladat hozzáadása', - 'The username is required' => 'Felhasználói név szükséges', - 'The maximum length is %d characters' => 'A maximális hossz %d karakter', - 'The minimum length is %d characters' => 'A minimális hossza %d karakter', - 'The password is required' => 'Jelszó szükséges', + 'The username is required' => 'A felhasználónév kötelező', + 'The maximum length is %d characters' => 'A legnagyobb hossz %d karakter', + 'The minimum length is %d characters' => 'A legkisebb hossz %d karakter', + 'The password is required' => 'A jelszó kötelező', 'This value must be an integer' => 'Ez az érték csak egész szám lehet', - 'The username must be unique' => 'A felhasználó nevének egyedinek kell lennie', - 'The user id is required' => 'A felhasználói azonosítót meg kell adni', + 'The username must be unique' => 'A felhasználónévnek egyedinek kell lennie', + 'The user id is required' => 'A felhasználó-azonosító kötelező', 'Passwords don\'t match' => 'A jelszavak nem egyeznek', - 'The confirmation is required' => 'Megerősítés szükséges', - 'The project is required' => 'A projektet meg kell adni', - 'The id is required' => 'Az ID-t (azonosítót) meg kell adni', - 'The project id is required' => 'A projekt ID-t (azonosítót) meg kell adni', - 'The project name is required' => 'A projekt nevét meg kell adni', - 'The title is required' => 'A címet meg kell adni', + 'The confirmation is required' => 'A megerősítés kötelező', + 'The project is required' => 'A projekt kötelező', + 'The id is required' => 'Az azonosító kötelező', + 'The project id is required' => 'A projekt-azonosító kötelező', + 'The project name is required' => 'A projektnév kötelező', + 'The title is required' => 'A cím kötelező', 'Settings saved successfully.' => 'A beállítások sikeresen mentve.', - 'Unable to save your settings.' => 'A beállítások mentése sikertelen.', - 'Database optimization done.' => 'Adatbázis optimalizálás kész.', - 'Your project have been created successfully.' => 'Projekt sikeresen létrehozva', - 'Unable to create your project.' => 'Projekt létrehozása sikertelen.', - 'Project updated successfully.' => 'Projekt sikeresen frissítve.', - 'Unable to update this project.' => 'Projekt frissítése sikertelen.', - 'Unable to remove this project.' => 'Projekt törlése sikertelen.', - 'Project removed successfully.' => 'Projekt sikeresen törölve.', - 'Project activated successfully.' => 'Projekt sikeresen aktiválva.', - 'Unable to activate this project.' => 'Projekt aktiválása sikertelen.', - 'Project disabled successfully.' => 'Projekt sikeresen letiltva.', - 'Unable to disable this project.' => 'Projekt letiltása sikertelen.', - 'Unable to open this task.' => 'A feladat felnyitása sikertelen.', - 'Task opened successfully.' => 'Feladat sikeresen megnyitva .', - 'Unable to close this task.' => 'A feladat lezárása sikertelen.', - 'Task closed successfully.' => 'Feladat sikeresen lezárva.', - 'Unable to update your task.' => 'Feladat frissítése sikertelen.', - 'Task updated successfully.' => 'Feladat sikeresen frissítve.', - 'Unable to create your task.' => 'Feladat létrehozása sikertelen.', - 'Task created successfully.' => 'Feladat sikeresen létrehozva.', - 'User created successfully.' => 'Felhasználó létrehozva.', - 'Unable to create your user.' => 'Felhasználó létrehozása sikertelen.', - 'User updated successfully.' => 'Felhasználó sikeresen frissítve.', - 'User removed successfully.' => 'Felhasználó sikeresen törölve.', - 'Unable to remove this user.' => 'Felhasználó törlése sikertelen.', - 'Board updated successfully.' => 'Tábla sikeresen frissítve.', - 'Ready' => 'Előkészítés', - 'Backlog' => 'Napló', + 'Unable to save your settings.' => 'Nem lehet elmenteni a beállításokat.', + 'Database optimization done.' => 'Az adatbázis optimalizálása kész.', + 'Your project have been created successfully.' => 'A projekt sikeresen létrehozva.', + 'Unable to create your project.' => 'Nem lehet létrehozni a projektet.', + 'Project updated successfully.' => 'A projekt sikeresen frissítve.', + 'Unable to update this project.' => 'Nem lehet frissíteni ezt a projektet.', + 'Unable to remove this project.' => 'Nem lehet eltávolítani ezt a projektet.', + 'Project removed successfully.' => 'A projekt sikeresen eltávolítva.', + 'Project activated successfully.' => 'A projekt sikeresen aktiválva.', + 'Unable to activate this project.' => 'Nem lehet aktiválni ezt a projektet.', + 'Project disabled successfully.' => 'A projekt sikeresen letiltva.', + 'Unable to disable this project.' => 'Nem lehet letiltani ezt a projektet.', + 'Unable to open this task.' => 'Nem lehet megnyitni ezt a feladatot.', + 'Task opened successfully.' => 'A feladat sikeresen megnyitva.', + 'Unable to close this task.' => 'Nem lehet lezárni ezt a feladatot.', + 'Task closed successfully.' => 'A feladat sikeresen lezárva.', + 'Unable to update your task.' => 'Nem lehet frissíteni a feladatot.', + 'Task updated successfully.' => 'A feladat sikeresen frissítve.', + 'Unable to create your task.' => 'Nem lehet létrehozni a feladatot.', + 'Task created successfully.' => 'A feladat sikeresen létrehozva.', + 'User created successfully.' => 'A felhasználó sikeresen létrehozva.', + 'Unable to create your user.' => 'Nem lehet létrehozni a felhasználót.', + 'User updated successfully.' => 'A felhasználó sikeresen frissítve.', + 'User removed successfully.' => 'A felhasználó sikeresen eltávolítva.', + 'Unable to remove this user.' => 'Nem lehet eltávolítani ezt a felhasználót.', + 'Board updated successfully.' => 'A tábla sikeresen frissítve.', + 'Ready' => 'Felkészülés', + 'Backlog' => 'Elintézendő', 'Work in progress' => 'Folyamatban', 'Done' => 'Kész', - 'Application version:' => 'Alkalmazás verzió:', - 'Id' => 'ID', + 'Application version:' => 'Alkalmazás verziója:', + 'Id' => 'Azonosító', 'Public link' => 'Nyilvános hivatkozás', 'Timezone' => 'Időzóna', - 'Sorry, I didn\'t find this information in my database!' => 'Ez az információ nem található az adatbázisban!', + 'Sorry, I didn\'t find this information in my database!' => 'Elnézést, ez az információ nem található az adatbázisban!', 'Page not found' => 'Az oldal nem található', 'Complexity' => 'Bonyolultság', - 'Task limit' => 'Maximális számú feladat', + 'Task limit' => 'Feladatkorlát', 'Task count' => 'Feladatok száma', 'User' => 'Felhasználó', 'Comments' => 'Hozzászólások', - 'Comment is required' => 'A hozzászólás mező kötelező', - 'Comment added successfully.' => 'Hozzászólás sikeresen elküldve.', - 'Unable to create your comment.' => 'Hozzászólás létrehozása nem lehetséges.', + 'Comment is required' => 'A hozzászólás kötelező', + 'Comment added successfully.' => 'A hozzászólás sikeresen hozzáadva.', + 'Unable to create your comment.' => 'Nem lehet létrehozni a hozzászólást.', 'Due Date' => 'Határidő', 'Invalid date' => 'Érvénytelen dátum', - 'Automatic actions' => 'Automatikus intézkedések', - 'Your automatic action have been created successfully.' => 'Az automatikus intézkedés sikeresen elkészült.', - 'Unable to create your automatic action.' => 'Automatikus intézkedés létrehozása nem lehetséges.', - 'Remove an action' => 'Intézkedés törlése', - 'Unable to remove this action.' => 'Intézkedés törlése nem lehetséges.', - 'Action removed successfully.' => 'Intézkedés sikeresen törölve.', - 'Automatic actions for the project "%s"' => 'Automatikus intézkedések a projektben: "%s"', - 'Add an action' => 'Intézkedés létrehozása', + 'Automatic actions' => 'Automatikus műveletek', + 'Your automatic action have been created successfully.' => 'Az automatikus művelet sikeresen létrehozva.', + 'Unable to create your automatic action.' => 'Nem lehet létrehozni az automatikus műveletet.', + 'Remove an action' => 'Művelet eltávolítása', + 'Unable to remove this action.' => 'Nem lehet eltávolítani ezt a műveletet.', + 'Action removed successfully.' => 'A művelet sikeresen eltávolítva.', + 'Automatic actions for the project "%s"' => 'Automatikus műveletek a projekthez: „%s”', + 'Add an action' => 'Művelet hozzáadása', 'Event name' => 'Esemény neve', - 'Action' => 'Intézkedés', + 'Action' => 'Művelet', 'Event' => 'Esemény', - 'When the selected event occurs execute the corresponding action.' => 'Ha a kiválasztott esemény bekövetkezik, hajtsa végre a megfelelő intézkedéseket.', + 'When the selected event occurs execute the corresponding action.' => 'Ha a kiválasztott esemény bekövetkezik, hajtsa végre a megfelelő műveletet.', 'Next step' => 'Következő lépés', - 'Define action parameters' => 'Határozza meg az intézkedés paramétereit', - 'Do you really want to remove this action: "%s"?' => 'Valóban törölni akarja ezt az intézkedést: "%s"?', - 'Remove an automatic action' => 'Automatikus intézkedés törlése', - 'Assign the task to a specific user' => 'Feladat kiosztása megadott felhasználónak', - 'Assign the task to the person who does the action' => 'Feladat kiosztása az intézkedő személynek', - 'Duplicate the task to another project' => 'Feladat másolása másik projektbe', - 'Move a task to another column' => 'Feladat mozgatása másik oszlopba', + 'Define action parameters' => 'Művelet paramétereinek meghatározása', + 'Do you really want to remove this action: "%s"?' => 'Valóban el szeretné távolítani ezt a műveletet: „%s”?', + 'Remove an automatic action' => 'Automatikus művelet eltávolítása', + 'Assign the task to a specific user' => 'Feladat kiosztása egy adott felhasználónak', + 'Assign the task to the person who does the action' => 'Feladat kiosztása a műveletet elvégző személynek', + 'Duplicate the task to another project' => 'Feladat másolása egy másik projektbe', + 'Move a task to another column' => 'Feladat áthelyezése egy másik oszlopba', 'Task modification' => 'Feladat módosítása', 'Task creation' => 'Feladat létrehozása', 'Closing a task' => 'Feladat lezárása', - 'Assign a color to a specific user' => 'Szín hozzárendelése a felhasználóhoz', + 'Assign a color to a specific user' => 'Szín hozzárendelése egy adott felhasználóhoz', 'Position' => 'Pozíció', - 'Duplicate to another project' => 'Másolás másik projektbe', + 'Duplicate to another project' => 'Másolás egy másik projektbe', 'Duplicate' => 'Másolás', - 'Link' => 'hivatkozás', - 'Comment updated successfully.' => 'Megjegyzés sikeresen frissítve.', - 'Unable to update your comment.' => 'Megjegyzés frissítése sikertelen.', - 'Remove a comment' => 'Megjegyzés törlése', - 'Comment removed successfully.' => 'Megjegyzés sikeresen törölve.', - 'Unable to remove this comment.' => 'Megjegyzés törölése nem lehetséges.', - 'Do you really want to remove this comment?' => 'Valóban törölni szeretné ezt a megjegyzést?', - 'Current password for the user "%s"' => 'Felhasználó jelenlegi jelszava: "%s"', - 'The current password is required' => 'A jelenlegi jelszót meg kell adni', + 'Link' => 'Hivatkozás', + 'Comment updated successfully.' => 'A megjegyzés sikeresen frissítve.', + 'Unable to update your comment.' => 'Nem lehet frissíteni a megjegyzést.', + 'Remove a comment' => 'Megjegyzés eltávolítása', + 'Comment removed successfully.' => 'A megjegyzés sikeresen eltávolítva.', + 'Unable to remove this comment.' => 'Nem lehet eltávolítani a megjegyzést.', + 'Do you really want to remove this comment?' => 'Valóban el szeretné távolítani ezt a megjegyzést?', + 'Current password for the user "%s"' => '„%s” felhasználó jelenlegi jelszava', + 'The current password is required' => 'A jelenlegi jelszó kötelező', 'Wrong password' => 'Hibás jelszó', 'Unknown' => 'Ismeretlen', 'Last logins' => 'Legutóbbi bejelentkezések', 'Login date' => 'Bejelentkezés dátuma', - 'Authentication method' => 'Azonosítási módszer', + 'Authentication method' => 'Hitelesítési módszer', 'IP address' => 'IP-cím', - 'User agent' => 'User Agent', - 'Persistent connections' => 'Tartós (perzisztens) kapcsolatok', - 'No session.' => 'Nincs session.', - 'Expiration date' => 'Lejárati dátum', - 'Remember Me' => 'Emlékezz rám', + 'User agent' => 'Felhasználói ügynök', + 'Persistent connections' => 'Tartós kapcsolatok', + 'No session.' => 'Nincs munkamenet.', + 'Expiration date' => 'Lejárat dátuma', + 'Remember Me' => 'Emlékezzen rám', 'Creation date' => 'Létrehozás dátuma', - 'Everybody' => 'Minden felhasználó', + 'Everybody' => 'Mindenki', 'Open' => 'Nyitott', 'Closed' => 'Lezárt', 'Search' => 'Keresés', @@ -213,97 +212,96 @@ return array( '%d comments' => '%d megjegyzés', '%d comment' => '%d megjegyzés', 'Email address invalid' => 'Érvénytelen e-mail cím', - 'Your external account is not linked anymore to your profile.' => 'Az ön külső számlája és az ön profilja közötti kapcsolat megszűnt.', - 'Unable to unlink your external account.' => 'Nem sikerült megszüntetni a kapcsolatot az ön külső számlájával.', - 'External authentication failed' => 'A külső jelszó ellenőrzés nem sikerült', - 'Your external account is linked to your profile successfully.' => 'Az ön külső számlája sikeresen össze lett kapcsolva az ön profiljával.', + 'Your external account is not linked anymore to your profile.' => 'A külső fiókja többé nincs hozzákapcsolva a profiljához.', + 'Unable to unlink your external account.' => 'Nem lehet megszüntetni a kapcsolatot a külső fiókjával.', + 'External authentication failed' => 'A külső hitelesítés sikertelen', + 'Your external account is linked to your profile successfully.' => 'A külső fiókja sikeresen össze lett kapcsolva a profiljával.', 'Email' => 'E-mail', - 'Task removed successfully.' => 'Feladat sikeresen törölve.', - 'Unable to remove this task.' => 'A feladatot nem lehet törölni.', - 'Remove a task' => 'Feladat törlése', - 'Do you really want to remove this task: "%s"?' => 'Valóban törölni akarja ezt a feladatot: "%s"?', - 'Assign automatically a color based on a category' => 'Szín hozzárendelése automatikusan kategória alapján', - 'Assign automatically a category based on a color' => 'Kategória hozzárendelése automatikusan szín alapján', + 'Task removed successfully.' => 'A feladat sikeresen eltávolítva.', + 'Unable to remove this task.' => 'Nem lehet eltávolítani a feladatot.', + 'Remove a task' => 'Feladat eltávolítása', + 'Do you really want to remove this task: "%s"?' => 'Valóban el szeretné távolítani ezt a feladatot: „%s”?', + 'Assign automatically a color based on a category' => 'Szín automatikus hozzárendelése egy kategória alapján', + 'Assign automatically a category based on a color' => 'Kategória automatikus hozzárendelése egy szín alapján', 'Task creation or modification' => 'Feladat létrehozása vagy módosítása', 'Category' => 'Kategória', 'Category:' => 'Kategória:', 'Categories' => 'Kategóriák', - 'Your category have been created successfully.' => 'Kategória sikeresen létrehozva.', - 'This category has been updated successfully.' => 'Kategória sikeresen frissítve.', - 'Unable to update this category.' => 'Kategória frissítése nem lehetséges.', - 'Remove a category' => 'Kategória törlése', - 'Category removed successfully.' => 'Kategória törlése megtörtént.', - 'Unable to remove this category.' => 'A kategória törlése nem lehetséges.', - 'Category modification for the project "%s"' => 'Kategória módosítása a projektben "%s"', + 'Your category have been created successfully.' => 'A kategória sikeresen létrehozva.', + 'This category has been updated successfully.' => 'A kategória sikeresen frissítve.', + 'Unable to update this category.' => 'Nem lehet frissíteni ezt a kategóriát.', + 'Remove a category' => 'Kategória eltávolítása', + 'Category removed successfully.' => 'A kategória sikeresen eltávolítva.', + 'Unable to remove this category.' => 'Nem lehet eltávolítani ezt a kategóriát.', + 'Category modification for the project "%s"' => 'Kategória módosítása a projektnél: „%s”', 'Category Name' => 'Kategória neve', - 'Add a new category' => 'Új kategória', - 'Do you really want to remove this category: "%s"?' => 'Valóban törölni akarja ezt a kategóriát: "%s"?', - 'All categories' => 'Minden kategória', + 'Add a new category' => 'Új kategória hozzáadása', + 'Do you really want to remove this category: "%s"?' => 'Valóban el szeretné távolítani ezt a kategóriát: „%s”?', + 'All categories' => 'Összes kategória', 'No category' => 'Nincs kategória', - 'The name is required' => 'A név megadása kötelező', - 'Remove a file' => 'Fájl törlése', - 'Unable to remove this file.' => 'Fájl törlése nem lehetséges.', - 'File removed successfully.' => 'Fájl sikeresen törölve.', - 'Attach a document' => 'Fájl csatolása', - 'Do you really want to remove this file: "%s"?' => 'Valóban törölni akarja ezt a fájlt: "%s"?', + 'The name is required' => 'A név kötelező', + 'Remove a file' => 'Fájl eltávolítása', + 'Unable to remove this file.' => 'Nem lehet eltávolítani ezt a fájlt.', + 'File removed successfully.' => 'A fájl sikeresen eltávolítva.', + 'Attach a document' => 'Dokumentum csatolása', + 'Do you really want to remove this file: "%s"?' => 'Valóban el szeretné távolítani ezt a fájlt: „%s”?', 'Attachments' => 'Mellékletek', - 'Edit the task' => 'Feladat módosítása', - 'Add a comment' => 'Új megjegyzés', + 'Edit the task' => 'Feladat szerkesztése', + 'Add a comment' => 'Megjegyzés hozzáadása', 'Edit a comment' => 'Megjegyzés szerkesztése', 'Summary' => 'Összegzés', 'Time tracking' => 'Idő követés', 'Estimate:' => 'Becsült:', 'Spent:' => 'Eltöltött:', - 'Do you really want to remove this sub-task?' => 'Valóban törölni akarja ezt a részfeladatot?', + 'Do you really want to remove this sub-task?' => 'Valóban el szeretné távolítani ezt a részfeladatot?', 'Remaining:' => 'Hátralévő:', 'hours' => 'óra', 'spent' => 'eltöltött', 'estimated' => 'becsült', 'Sub-Tasks' => 'Részfeladatok', - 'Add a sub-task' => 'Részfeladat létrehozása', + 'Add a sub-task' => 'Részfeladat hozzáadása', 'Original estimate' => 'Eredeti időbecslés', 'Create another sub-task' => 'További részfeladat létrehozása', 'Time spent' => 'Eltöltött idő', 'Edit a sub-task' => 'Részfeladat szerkesztése', - 'Remove a sub-task' => 'Részfeladat törlése', - 'The time must be a numeric value' => 'Idő csak számérték lehet', + 'Remove a sub-task' => 'Részfeladat eltávolítása', + 'The time must be a numeric value' => 'Az idő csak számérték lehet', 'Todo' => 'Teendő', 'In progress' => 'Folyamatban', - 'Sub-task removed successfully.' => 'Részfeladat sikeresen törölve.', - 'Unable to remove this sub-task.' => 'Részfeladat törlése nem lehetséges.', - 'Sub-task updated successfully.' => 'Részfeladat sikeresen frissítve.', - 'Unable to update your sub-task.' => 'Részfeladat frissítése nem lehetséges.', - 'Unable to create your sub-task.' => 'Részfeladat létrehozása nem lehetséges.', - 'Sub-task added successfully.' => 'Részfeladat sikeresen létrehozva.', - 'Maximum size: ' => 'Maximális méret: ', + 'Sub-task removed successfully.' => 'A részfeladat sikeresen eltávolítva.', + 'Unable to remove this sub-task.' => 'Nem lehet eltávolítani a részfeladatot.', + 'Sub-task updated successfully.' => 'A részfeladat sikeresen frissítve.', + 'Unable to update your sub-task.' => 'Nem lehet frissíteni a részfeladatot.', + 'Unable to create your sub-task.' => 'Nem lehet létrehozni a részfeladatot.', + 'Maximum size: ' => 'Legnagyobb méret: ', 'Display another project' => 'Másik projekt megjelenítése', - 'Created by %s' => 'Készítette: %s', + 'Created by %s' => 'Létrehozta: %s', 'Tasks Export' => 'Feladatok exportálása', 'Start Date' => 'Kezdés dátuma', - 'Execute' => 'Végrehajt', - 'Task Id' => 'Feladat ID', - 'Creator' => 'Készítette', + 'Execute' => 'Végrehajtás', + 'Task Id' => 'Feladatazonosító', + 'Creator' => 'Létrehozó', 'Modification date' => 'Módosítás dátuma', - 'Completion date' => 'Befejezés határideje', - 'Clone' => 'Másolat', - 'Project cloned successfully.' => 'A projekt sikeresen másolva.', - 'Unable to clone this project.' => 'A projekt másolása sikertelen.', + 'Completion date' => 'Befejezés dátuma', + 'Clone' => 'Klónozás', + 'Project cloned successfully.' => 'A projekt sikeresen lemásolva.', + 'Unable to clone this project.' => 'Nem lehet lemásolni a projektet.', 'Enable email notifications' => 'E-mail értesítések engedélyezése', 'Task position:' => 'Feladat helye:', - 'The task #%d have been opened.' => 'Feladat #%d megnyitva.', - 'The task #%d have been closed.' => 'Feladat #%d lezárva.', + 'The task #%d have been opened.' => '#%d. feladat megnyitva.', + 'The task #%d have been closed.' => '#%d. feladat lezárva.', 'Sub-task updated' => 'Részfeladat frissítve', 'Title:' => 'Cím', 'Status:' => 'Állapot:', 'Assignee:' => 'Felelős:', 'Time tracking:' => 'Idő követés:', 'New sub-task' => 'Új részfeladat', - 'New attachment added "%s"' => 'Új melléklet "%s" hozzáadva.', - 'New comment posted by %s' => 'Új megjegyzés %s', + 'New attachment added "%s"' => 'Új melléklet hozzáadva: „%s”.', + 'New comment posted by %s' => 'Új megjegyzést adott hozzá: %s', 'New comment' => 'Új megjegyzés', 'Comment updated' => 'Megjegyzés frissítve', 'New subtask' => 'Új részfeladat', - 'I want to receive notifications only for those projects:' => 'Csak ezekről a projektekről kérek értesítést:', + 'I want to receive notifications only for those projects:' => 'Csak ezekről a projektekről szeretnék értesítést kapni:', 'view the task on Kanboard' => 'feladat megtekintése a Kanboardon', 'Public access' => 'Nyilvános hozzáférés', 'Disable public access' => 'Nyilvános hozzáférés letiltása', @@ -311,7 +309,7 @@ return array( 'Public access disabled' => 'Nyilvános hozzáférés letiltva', 'Move the task to another project' => 'Feladat áthelyezése másik projektbe', 'Move to another project' => 'Áthelyezés másik projektbe', - 'Do you really want to duplicate this task?' => 'Tényleg szeretné megkettőzni ezt a feladatot?', + 'Do you really want to duplicate this task?' => 'Valóban le szeretné másolni ezt a feladatot?', 'Duplicate a task' => 'Feladat másolása', 'External accounts' => 'Külső fiókok', 'Account type' => 'Fiók típusa', @@ -320,383 +318,366 @@ return array( 'Enabled' => 'Engedélyezve', 'Disabled' => 'Letiltva', 'Login:' => 'Felhasználónév:', - 'Full Name:' => 'Név:', + 'Full Name:' => 'Teljes név:', 'Email:' => 'E-mail:', 'Notifications:' => 'Értesítések:', 'Notifications' => 'Értesítések', 'Account type:' => 'Fiók típusa:', 'Edit profile' => 'Profil szerkesztése', - 'Change password' => 'Jelszó módosítása', + 'Change password' => 'Jelszó megváltoztatása', 'Password modification' => 'Jelszó módosítása', - 'External authentications' => 'Külső azonosítás', - 'Never connected.' => 'Sosem csatlakozva.', - 'No external authentication enabled.' => 'A külső azonosítás nincs engedélyezve.', + 'External authentications' => 'Külső hitelesítések', + 'Never connected.' => 'Sosem csatlakoztatott.', + 'No external authentication enabled.' => 'Nincs külső hitelesítés engedélyezve.', 'Password modified successfully.' => 'A jelszó sikeresen módosítva.', - 'Unable to change the password.' => 'A jelszó módosítása sikertelen.', - 'Change category' => 'Kategória módosítása', - '%s updated the task %s' => '%s frissítette a feladatot %s', - '%s opened the task %s' => '%s megnyitott a feladatot %s', - '%s moved the task %s to the position #%d in the column "%s"' => '%s átmozgatta a feladatot %s #%d pozícióba a "%s" oszlopban', - '%s moved the task %s to the column "%s"' => '%s átmozgatta a feladatot %s "%s" oszlopba', - '%s created the task %s' => '%s létrehozta a feladatot %s', - '%s closed the task %s' => '%s lezárta a feladatot %s', - '%s created a subtask for the task %s' => '%s létrehozott egy részfeladat a feladathoz %s', - '%s updated a subtask for the task %s' => '%s frissített egy részfeladatot a feladathoz %s', - 'Assigned to %s with an estimate of %s/%sh' => '%s-nek kiosztva %s/%s óra becsült idő mellett', + 'Unable to change the password.' => 'Nem lehet megváltoztatni a jelszót.', + 'Change category' => 'Kategória megváltoztatása', + '%s updated the task %s' => '%s frissítette a(z) %s feladatot', + '%s opened the task %s' => '%s megnyitott a(z) %s feladatot', + '%s moved the task %s to the position #%d in the column "%s"' => '%s áthelyezte a(z) %s feladatot a(z) #%d. pozícióba a(z) „%s” oszlopban', + '%s moved the task %s to the column "%s"' => '%s áthelyezte a(z) %s feladatot a(z) „%s” oszlopba', + '%s created the task %s' => '%s létrehozta a(z) %s feladatot', + '%s closed the task %s' => '%s lezárta a(z) %s feladatot', + '%s created a subtask for the task %s' => '%s létrehozott egy részfeladat a(z) %s feladathoz', + '%s updated a subtask for the task %s' => '%s frissített egy részfeladatot a(z) %s feladatnál', + 'Assigned to %s with an estimate of %s/%sh' => 'Hozzárendelve a(z) %s feladathoz %s/%s óra becsült idővel', 'Not assigned, estimate of %sh' => 'Nincs kiosztva, becsült idő: %s óra', - '%s updated a comment on the task %s' => '%s frissítette a megjegyzését a feladatban %s', - '%s commented the task %s' => '%s megjegyzést fűzött a feladathoz %s', - '%s\'s activity' => 'Tevékenységek: %s', - 'RSS feed' => 'RSS feed', - '%s updated a comment on the task #%d' => '%s frissített egy megjegyzést a feladatban #%d', - '%s commented on the task #%d' => '%s megjegyzést tett a feladathoz #%d', - '%s updated a subtask for the task #%d' => '%s frissített egy részfeladatot a feladatban #%d', - '%s created a subtask for the task #%d' => '%s létrehozott egy részfeladatot a feladatban #%d', - '%s updated the task #%d' => '%s frissítette a feladatot #%d', - '%s created the task #%d' => '%s létrehozta a feladatot #%d', - '%s closed the task #%d' => '%s lezárta a feladatot #%d', - '%s opened the task #%d' => '%s megnyitotta a feladatot #%d', - 'Activity' => 'Tevékenységek', - 'Default values are "%s"' => 'Az alapértelmezett értékek: %s', - 'Default columns for new projects (Comma-separated)' => 'Alapértelmezett oszlopok az új projektekben (vesszővel elválasztva)', - 'Task assignee change' => 'Felelős módosítása', - '%s changed the assignee of the task #%d to %s' => '%s a felelőst módosította #%d %s', - '%s changed the assignee of the task %s to %s' => '%s a felelőst %s módosította: %s', - 'New password for the user "%s"' => 'Felhasználó új jelszava: %s', - 'Choose an event' => 'Válasszon eseményt', - 'Create a task from an external provider' => 'Feladat létrehozása külsős számára', - 'Change the assignee based on an external username' => 'Felelős módosítása külső felhasználónév alapján', - 'Change the category based on an external label' => 'Kategória módosítása külső címke alapján', + '%s updated a comment on the task %s' => '%s frissített egy megjegyzését a(z) %s feladatban', + '%s commented the task %s' => '%s megjegyzést írt a(z) %s feladathoz', + '%s\'s activity' => '%s tevékenységei', + 'RSS feed' => 'RSS hírforrás', + '%s updated a comment on the task #%d' => '%s frissített egy megjegyzést a(z) #%d. feladatban', + '%s commented on the task #%d' => '%s megjegyzést írt a(z) #%d. feladathoz', + '%s updated a subtask for the task #%d' => '%s frissített egy részfeladatot a(z) #%d. feladatnál', + '%s created a subtask for the task #%d' => '%s létrehozott egy részfeladatot a(z) #%d. feladatnál', + '%s updated the task #%d' => '%s frissítette a(z) #%d. feladatot', + '%s created the task #%d' => '%s létrehozta a(z) #%d. feladatot', + '%s closed the task #%d' => '%s lezárta a(z) #%d feladatot', + '%s opened the task #%d' => '%s megnyitotta a(z) #%d. feladatot', + 'Activity' => 'Tevékenység', + 'Default values are "%s"' => 'Az alapértelmezett értékek: „%s”', + 'Default columns for new projects (Comma-separated)' => 'Alapértelmezett oszlopok az új projekteknél (vesszővel elválasztva)', + 'Task assignee change' => 'A feladat felelősének megváltoztatása', + '%s changed the assignee of the task #%d to %s' => '%s megváltoztatta a(z) #%d. feladat felelősét erre: %s', + '%s changed the assignee of the task %s to %s' => '%s megváltoztatta a(z) %s feladat felelősét erre: %s', + 'New password for the user "%s"' => '„%s” felhasználó új jelszava', + 'Choose an event' => 'Esemény választása', + 'Create a task from an external provider' => 'Feladat létrehozása egy külsős szolgáltatóból', + 'Change the assignee based on an external username' => 'Felelős megváltoztatása egy külső felhasználónév alapján', + 'Change the category based on an external label' => 'Kategória megváltoztatása egy külső címke alapján', 'Reference' => 'Hivatkozás', 'Label' => 'Címke', 'Database' => 'Adatbázis', - 'About' => 'Kanboard információ', - 'Database driver:' => 'Adatbázis motor:', - 'Board settings' => 'Tábla beállítások', - 'Webhook settings' => 'Webhook beállítások', - 'Reset token' => 'Token újragenerálása', + 'About' => 'Névjegy', + 'Database driver:' => 'Adatbázis-meghajtó:', + 'Board settings' => 'Tábla beállításai', + 'Webhook settings' => 'Webhurok beállításai', + 'Reset token' => 'Token visszaállítása', 'API endpoint:' => 'API végpont:', - 'Refresh interval for private board' => 'Privát táblák frissítési intervalluma', - 'Refresh interval for public board' => 'Nyilvános táblák frissítési intervalluma', - 'Task highlight period' => 'Feladat kiemelés időtartama', - 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Mennyi ideig tekintendő egy feladat "mostanában" módosítottnak (másodpercben) (0: funkció letiltva, alapértelmezés szerint 2 nap)', + 'Refresh interval for private board' => 'Frissítési időköz a személyes táblánál', + 'Refresh interval for public board' => 'Frissítési időköz a nyilvános táblánál', + 'Task highlight period' => 'Feladat kiemelésének időtartama', + 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Az időszak (másodpercben), amíg a feladatot legutóbb módosítottnak kell tekinteni (0: letiltás, alapértelmezetten 2 nap)', 'Frequency in second (60 seconds by default)' => 'Gyakoriság másodpercben (alapértelmezetten 60 másodperc)', - 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Gyakoriság másodpercben (0 funkció letiltva, alapértelmezetten 10 másodperc)', + 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Gyakoriság másodpercben (0: a funkció letiltása, alapértelmezetten 10 másodperc)', 'Application URL' => 'Alkalmazás URL', - 'Token regenerated.' => 'Token újragenerálva.', - 'Date format' => 'Dátum formátum', - 'ISO format is always accepted, example: "%s" and "%s"' => 'ISO formátum mindig elfogadott, pl: "%s" és "%s"', - 'New private project' => 'Új privát projekt', - 'This project is private' => 'Ez egy privát projekt', + 'Token regenerated.' => 'A token újra létrehozva.', + 'Date format' => 'Dátumformátum', + 'ISO format is always accepted, example: "%s" and "%s"' => 'Az ISO formátum mindig elfogadott, például „%s” és „%s”', + 'New private project' => 'Új személyes projekt', + 'This project is private' => 'Ez a projekt személyes', 'Add' => 'Hozzáadás', 'Start date' => 'Kezdés dátuma', 'Time estimated' => 'Becsült időtartam', - 'There is nothing assigned to you.' => 'Nincs kiosztott feladat.', - 'My tasks' => 'Feladataim', - 'Activity stream' => 'Legutóbbi tevékenységek', + 'There is nothing assigned to you.' => 'Nincs semmi sem Önhöz rendelve.', + 'My tasks' => 'Saját feladatok', + 'Activity stream' => 'Tevékenységfolyam', 'Dashboard' => 'Vezérlőpult', 'Confirmation' => 'Megerősítés', - 'Allow everybody to access to this project' => 'A projekt elérése mindenkinek engedélyezett', - 'Everybody have access to this project.' => 'Mindenki elérheti a projektet', - 'Webhooks' => 'Webhook', + 'Webhooks' => 'Webhurkok', 'API' => 'API', - 'Create a comment from an external provider' => 'Megjegyzés létrehozása külső felhasználótól', - 'Project management' => 'Projekt menedzsment', - 'My projects' => 'Projektjeim', + 'Create a comment from an external provider' => 'Megjegyzés létrehozása egy külső szolgáltatótól', + 'Project management' => 'Projektmenedzsment', 'Columns' => 'Oszlopok', 'Task' => 'Feladat', - 'Your are not member of any project.' => 'Ön nem tagja projektnek.', 'Percentage' => 'Százalék', - 'Number of tasks' => 'A feladatok száma', + 'Number of tasks' => 'Feladatok száma', 'Task distribution' => 'Feladatelosztás', - 'Analytics' => 'Analitika', + 'Analytics' => 'Elemzések', 'Subtask' => 'Részfeladat', - 'My subtasks' => 'Részfeladataim', - 'User repartition' => 'Felhasználó újrafelosztás', + 'User repartition' => 'Felhasználónkénti megoszlás', 'Clone this project' => 'Projekt másolása', - 'Column removed successfully.' => 'Oszlop sikeresen törölve.', - 'Not enough data to show the graph.' => 'Nincs elég adat a grafikonhoz.', + 'Column removed successfully.' => 'Az oszlop sikeresen eltávolítva.', + 'Not enough data to show the graph.' => 'Nincs elég adat a grafikon megjelenítéséhez.', 'Previous' => 'Előző', - 'The id must be an integer' => 'Az ID csak egész szám lehet', - 'The project id must be an integer' => 'A projekt ID csak egész szám lehet', + 'The id must be an integer' => 'Az azonosító csak egész szám lehet', + 'The project id must be an integer' => 'A projektazonosító csak egész szám lehet', 'The status must be an integer' => 'Az állapot csak egész szám lehet', - 'The subtask id is required' => 'A részfeladat ID-t meg kell adni', - 'The subtask id must be an integer' => 'A részfeladat ID csak egész szám lehet', - 'The task id is required' => 'A feladat ID-t meg kell adni', - 'The task id must be an integer' => 'A feladat ID csak egész szám lehet', - 'The user id must be an integer' => 'A felhasználói ID csak egész szám lehet', - 'This value is required' => 'Ez a mező kötelező', - 'This value must be numeric' => 'Ez a mező csak szám lehet', - 'Unable to create this task.' => 'A feladat nem hozható létre,', - 'Cumulative flow diagram' => 'Kumulatív folyamatábra', + 'The subtask id is required' => 'A részfeladat-azonosító kötelező', + 'The subtask id must be an integer' => 'A részfeladat-azonosító csak egész szám lehet', + 'The task id is required' => 'A feladatazonosító kötelező', + 'The task id must be an integer' => 'A feladatazonosító csak egész szám lehet', + 'The user id must be an integer' => 'A felhasználó-azonosító csak egész szám lehet', + 'This value is required' => 'Ez az érték kötelező', + 'This value must be numeric' => 'Ez az érték csak szám lehet', + 'Unable to create this task.' => 'Nem lehet létrehozni a feladatot.', + 'Cumulative flow diagram' => 'Halmozott folyamatdiagram', 'Daily project summary' => 'Napi projektösszefoglaló', 'Daily project summary export' => 'Napi projektösszefoglaló exportálása', 'Exports' => 'Exportálások', - 'This export contains the number of tasks per column grouped per day.' => 'Ez az export tartalmazza a feladatok számát oszloponként összesítve, napokra lebontva.', + 'This export contains the number of tasks per column grouped per day.' => 'Ez az export tartalmazza a feladatok számát oszloponként csoportosítva, napokra lebontva.', 'Active swimlanes' => 'Aktív sávok', - 'Add a new swimlane' => 'Új sáv', - 'Default swimlane' => 'Alapértelmezett folyamat', - 'Do you really want to remove this swimlane: "%s"?' => 'Valóban törölni akarja ezt a sávot: %s ?', + 'Add a new swimlane' => 'Új sáv hozzáadása', + 'Default swimlane' => 'Alapértelmezett sáv', + 'Do you really want to remove this swimlane: "%s"?' => 'Valóban el szeretné távolítani ezt a sávot: „%s”?', 'Inactive swimlanes' => 'Inaktív sávok', - 'Remove a swimlane' => 'Sáv törlés', - 'Swimlane modification for the project "%s"' => '%s projekt sávjainak módosítása', - 'Swimlane removed successfully.' => 'Sáv sikeresen törölve.', + 'Remove a swimlane' => 'Sáv eltávolítása', + 'Swimlane modification for the project "%s"' => 'Sávmódosítás a(z) „%s” projektnél', + 'Swimlane removed successfully.' => 'A sáv sikeresen eltávolítva.', 'Swimlanes' => 'Sávok', - 'Swimlane updated successfully.' => 'Sáv sikeresen frissítve', - 'Unable to remove this swimlane.' => 'A sáv törlése sikertelen.', - 'Unable to update this swimlane.' => 'A sáv frissítése sikertelen.', + 'Swimlane updated successfully.' => 'A sáv sikeresen frissítve.', + 'Unable to remove this swimlane.' => 'Nem lehet eltávolítani ezt a sávot.', + 'Unable to update this swimlane.' => 'Nem lehet frissíteni ezt a sávot.', 'Your swimlane have been created successfully.' => 'A sáv sikeresen létrehozva.', - 'Example: "Bug, Feature Request, Improvement"' => 'Például: Hiba, Új funkció, Fejlesztés', - 'Default categories for new projects (Comma-separated)' => 'Alapértelmezett kategóriák az új projektekben (Vesszővel elválasztva)', - 'Integrations' => 'Integráció', - 'Integration with third-party services' => 'Integráció harmadik féllel', - 'Subtask Id' => 'Részfeladat id', + 'Example: "Bug, Feature Request, Improvement"' => 'Például: Hiba, Funkciókérés, Fejlesztés', + 'Default categories for new projects (Comma-separated)' => 'Alapértelmezett kategóriák az új projekteknél (vesszővel elválasztva)', + 'Integrations' => 'Integrációk', + 'Integration with third-party services' => 'Integráció harmadik féltől származó szolgáltatásokkal', + 'Subtask Id' => 'Részfeladat-azonosító', 'Subtasks' => 'Részfeladatok', - 'Subtasks Export' => 'Részfeladat exportálás', + 'Subtasks Export' => 'Részfeladat exportálása', 'Task Title' => 'Feladat címe', 'Untitled' => 'Névtelen', - 'Application default' => 'Alkalmazás alapértelmezett', + 'Application default' => 'Alkalmazás alapértelmezettje', 'Language:' => 'Nyelv:', 'Timezone:' => 'Időzóna:', - 'All columns' => 'Minden oszlop', - 'Calendar' => 'Naptár', + 'All columns' => 'Összes oszlop', 'Next' => 'Következő', '#%d' => '#%d', - 'All swimlanes' => 'Minden sáv', - 'All colors' => 'Minden szín', + 'All swimlanes' => 'Összes sáv', + 'All colors' => 'Összes szín', 'Moved to column %s' => '%s oszlopba áthelyezve', - 'User dashboard' => 'Felhasználói vezérlőpult', - 'Allow only one subtask in progress at the same time for a user' => 'Egyszerre csak egy folyamatban levő részfeladat engedélyezése a felhasználóknak', - 'Edit column "%s"' => 'Oszlop szerkesztés: %s', - 'Select the new status of the subtask: "%s"' => 'Részfeladat állapot változtatás: %s', - 'Subtask timesheet' => 'Részfeladat idővonal', - 'There is nothing to show.' => 'Nincs megjelenítendő adat.', + 'User dashboard' => 'Felhasználó vezérlőpultja', + 'Allow only one subtask in progress at the same time for a user' => 'Egyszerre csak egy folyamatban levő részfeladat engedélyezése egy felhasználónak', + 'Edit column "%s"' => '„%s” oszlop szerkesztése', + 'Select the new status of the subtask: "%s"' => 'A részfeladat új állapotának kiválasztása: „%s”', + 'Subtask timesheet' => 'Részfeladat időbeosztása', + 'There is nothing to show.' => 'Nincs mit megjeleníteni.', 'Time Tracking' => 'Idő követés', 'You already have one subtask in progress' => 'Már van egy folyamatban levő részfeladata', 'Which parts of the project do you want to duplicate?' => 'A projekt mely részeit szeretné másolni?', - 'Disallow login form' => 'A login ablak letiltása', + 'Disallow login form' => 'Bejelentkezési űrlap letiltása', 'Start' => 'Kezdet', 'End' => 'Vég', 'Task age in days' => 'Feladat életkora napokban', 'Days in this column' => 'Napok ebben az oszlopban', - '%dd' => '%dd', + '%dd' => '%dn', 'Add a new link' => 'Új hivatkozás hozzáadása', - 'Do you really want to remove this link: "%s"?' => 'Biztos törölni akarja a hivatkozást: "%s"?', - 'Do you really want to remove this link with task #%d?' => 'Biztos törölni akarja a(z) #%d. feladatra mutató hivatkozást?', - 'Field required' => 'Kötelező mező', - 'Link added successfully.' => 'Hivatkozás sikeresen létrehozva.', - 'Link updated successfully.' => 'Hivatkozás sikeresen frissítve.', - 'Link removed successfully.' => 'Hivatkozás sikeresen törölve.', + 'Do you really want to remove this link: "%s"?' => 'Valóban el szeretné távolítani ezt a hivatkozást: „%s”?', + 'Do you really want to remove this link with task #%d?' => 'Valóban el szeretné távolítani a(z) #%d. feladatra mutató hivatkozást?', + 'Field required' => 'A mező kötelező', + 'Link added successfully.' => 'A hivatkozás sikeresen hozzáadva.', + 'Link updated successfully.' => 'A hivatkozás sikeresen frissítve.', + 'Link removed successfully.' => 'A hivatkozás sikeresen eltávolítva.', 'Link labels' => 'Hivatkozás címkék', - 'Link modification' => 'Hivatkozás módosítás', + 'Link modification' => 'Hivatkozás módosítása', 'Links' => 'Hivatkozások', 'Opposite label' => 'Ellenkező címke', - 'Remove a link' => 'Hivatkozás törlése', + 'Remove a link' => 'Hivatkozás eltávolítása', 'The labels must be different' => 'A címkék nem lehetnek azonosak', 'There is no link.' => 'Nincs hivatkozás.', 'This label must be unique' => 'A címkének egyedinek kell lennie.', - 'Unable to create your link.' => 'Hivatkozás létrehozása sikertelen.', - 'Unable to update your link.' => 'Hivatkozás frissítése sikertelen.', - 'Unable to remove this link.' => 'Hivatkozás törlése sikertelen.', - 'relates to' => 'hozzá tartozik:', - 'blocks' => 'letiltva:', - 'is blocked by' => 'letitoltta:', + 'Unable to create your link.' => 'Nem lehet létrehozni a hivatkozást.', + 'Unable to update your link.' => 'Nem lehet frissíteni a hivatkozást.', + 'Unable to remove this link.' => 'Nem lehet eltávolítani a hivatkozást.', + 'relates to' => 'ehhez tartozik:', + 'blocks' => 'blokkolja:', + 'is blocked by' => 'blokkolva van:', 'duplicates' => 'eredeti:', - 'is duplicated by' => 'másolat:', - 'is a child of' => 'szülője:', - 'is a parent of' => 'gyermeke:', + 'is duplicated by' => 'másolata:', + 'is a child of' => 'gyermeke:', + 'is a parent of' => 'szülője:', 'targets milestone' => 'megcélzott mérföldkő:', - 'is a milestone of' => 'ehhez a mérföldkőhöz tartozik:', + 'is a milestone of' => 'mérföldköve:', 'fixes' => 'javítás:', 'is fixed by' => 'javította:', 'This task' => 'Ez a feladat', '<1h' => '<1ó', '%dh' => '%dó', - 'Expand tasks' => 'Feladatok lenyitása', + 'Expand tasks' => 'Feladatok kinyitása', 'Collapse tasks' => 'Feladatok összecsukása', - 'Expand/collapse tasks' => 'Feladatok lenyitása/összecsukása', - 'Close dialog box' => 'Ablak bezárása', - 'Submit a form' => 'Űrlap beküldése', + 'Expand/collapse tasks' => 'Feladatok kinyitása/összecsukása', + 'Close dialog box' => 'Párbeszédablak bezárása', + 'Submit a form' => 'Űrlap elküldése', 'Board view' => 'Tábla nézet', - 'Keyboard shortcuts' => 'Billentyű kombinációk', - 'Open board switcher' => 'Tábla választó lenyitása', + 'Keyboard shortcuts' => 'Gyorsbillentyűk', + 'Open board switcher' => 'Táblaválasztó megnyitása', 'Application' => 'Alkalmazás', - 'Compact view' => 'Kompakt nézet', + 'Compact view' => 'Tömör nézet', 'Horizontal scrolling' => 'Vízszintes görgetés', - 'Compact/wide view' => 'Kompakt/széles nézet', + 'Compact/wide view' => 'Tömör/széles nézet', 'Currency' => 'Pénznem', - 'Private project' => 'Privát projekt', - 'AUD - Australian Dollar' => 'AUD - Ausztrál dollár', - 'CAD - Canadian Dollar' => 'CAD - Kanadai dollár', - 'CHF - Swiss Francs' => 'CHF - Svájci frank', + 'Private project' => 'Személyes projekt', + 'AUD - Australian Dollar' => 'AUD - ausztrál dollár', + 'CAD - Canadian Dollar' => 'CAD - kanadai dollár', + 'CHF - Swiss Francs' => 'CHF - svájci frank', 'Custom Stylesheet' => 'Egyéni stíluslap', 'download' => 'letöltés', - 'EUR - Euro' => 'EUR - Euro', - 'GBP - British Pound' => 'GBP - Angol font', - 'INR - Indian Rupee' => 'INR - Indiai rúpia', - 'JPY - Japanese Yen' => 'JPY - Japán Yen', - 'NZD - New Zealand Dollar' => 'NZD - Új-Zélandi dollár', - 'RSD - Serbian dinar' => 'RSD - Szerb dínár', - // 'CNY - Chinese Yuan' => '', - 'USD - US Dollar' => 'USD - Amerikai dollár', - 'Destination column' => 'Cél oszlop', - 'Move the task to another column when assigned to a user' => 'Feladat másik oszlopba helyezése felhasználóhoz rendélés után', - 'Move the task to another column when assignee is cleared' => 'Feladat másik oszlopba helyezése felhasználóhoz rendélés törlésekor', - 'Source column' => 'Forrás oszlop', - 'Transitions' => 'Állapot-átmenetek', + 'EUR - Euro' => 'EUR - euro', + 'GBP - British Pound' => 'GBP - angol font', + 'INR - Indian Rupee' => 'INR - indiai rúpia', + 'JPY - Japanese Yen' => 'JPY - japán jen', + 'NZD - New Zealand Dollar' => 'NZD - új-zélandi dollár', + 'RSD - Serbian dinar' => 'RSD - szerb dinár', + 'CNY - Chinese Yuan' => 'CNY - kínai jüan', + 'USD - US Dollar' => 'USD - amerikai dollár', + 'Destination column' => 'Céloszlop', + 'Move the task to another column when assigned to a user' => 'Feladat áthelyezése másik oszlopba, amikor egy felhasználóhoz rendelik', + 'Move the task to another column when assignee is cleared' => 'Feladat áthelyezése másik oszlopba, amikor a felelőst törlik', + 'Source column' => 'Forrásoszlop', + 'Transitions' => 'Átmenetek', 'Executer' => 'Végrehajtó', - 'Time spent in the column' => 'Az oszlopban töltött idő', - 'Task transitions' => 'Feladat állapot-átmenetek', - 'Task transitions export' => 'Feladat állapot-átmenetek exportálása', - 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Ez a riport az összes feladatra vonatkozóan tartalmazza az oszlop mozgatásokat. Szerepel benne a dátum, a felhasználó neve, és az egyes állapot-átemenetekkel eltöltött idő.', - 'Currency rates' => 'Árfolyamok', + 'Time spent in the column' => 'Az oszlopban eltöltött idő', + 'Task transitions' => 'Feladatátmenetek', + 'Task transitions export' => 'Feladatátmenetek exportálása', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Ez a jelentés az egyes feladatok összes oszlopáthelyezését tartalmazza dátummal, felhasználóval és az egyes átmenetekben eltöltött idővel.', + 'Currency rates' => 'Devizaárfolyamok', 'Rate' => 'Árfolyam', - 'Change reference currency' => 'A bázis pénznem megváltoztatása', + 'Change reference currency' => 'Bázis pénznem megváltoztatása', 'Reference currency' => 'Bázis pénznem', - 'The currency rate have been added successfully.' => 'Az átváltási árfolyammal történő bővítés sikerült', - 'Unable to add this currency rate.' => 'Nem sikerült az átváltási árfolyam felvétele', - 'Webhook URL' => 'Webhook URL', - '%s removed the assignee of the task %s' => '%s eltávolította a %s feladathoz rendelt személyt', - 'Enable Gravatar images' => 'Gravatár képek engedélyezése', + 'The currency rate have been added successfully.' => 'A devizaárfolyam sikeresen hozzáadva.', + 'Unable to add this currency rate.' => 'Nem lehet hozzáadni ezt a devizaárfolyamot.', + 'Webhook URL' => 'Webhurok URL', + '%s removed the assignee of the task %s' => '%s eltávolította a(z) %s feladat felelősét', 'Information' => 'Információ', - 'Check two factor authentication code' => 'Két fázisú beléptető kód ellenőrzése', - 'The two factor authentication code is not valid.' => 'A két fázisú beléptető kód érvénytelen', - 'The two factor authentication code is valid.' => 'A két fázisú beléptető kód érvényes', + 'Check two factor authentication code' => 'A kétlépcsős hitelesítés kódjának ellenőrzése', + 'The two factor authentication code is not valid.' => 'A kétlépcsős hitelesítés kódja nem érvényes.', + 'The two factor authentication code is valid.' => 'A kétlépcsős hitelesítés kódja érvényes.', 'Code' => 'Kód', - 'Two factor authentication' => 'Két fázisú beléptetés', - 'This QR code contains the key URI: ' => 'Ez a QR kód a következő kulcs URI-t tartalmazza: ', + 'Two factor authentication' => 'Kétlépcsős hitelesítés', + 'This QR code contains the key URI: ' => 'Ez a QR-kód tartalmazza a kulcs URI-t: ', 'Check my code' => 'A kódom ellenőrzése', 'Secret key: ' => 'Titkos kulcs', 'Test your device' => 'Az eszköz ellenőrzése', - 'Assign a color when the task is moved to a specific column' => 'Szín hozzárendelése, ha a feladatot egy adott oszlopba mozgatták', - '%s via Kanboard' => '%s a Kanboard-on keresztül', - // 'Burndown chart' => '', + 'Assign a color when the task is moved to a specific column' => 'Szín hozzárendelése, ha a feladatot egy adott oszlopba helyezték át', + '%s via Kanboard' => '%s a Kanboardon keresztül', + 'Burndown chart' => 'Burndown diagram', 'This chart show the task complexity over the time (Work Remaining).' => 'Ez a diagram a feladat időbeli bonyolultságát ábrázolja (mennyi munka van hátra)', - 'Screenshot taken %s' => 'A képernyőmentés megtörtént, %s', - 'Add a screenshot' => 'Képernyőmentés hozzáadása', - 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Végezzen képernyőmentést, majd a CTRL+V vagy ⌘+V megnyomásával másolja be ide.', - 'Screenshot uploaded successfully.' => 'A képernyőmentés feltöltése sikeresen megtörtént.', - 'SEK - Swedish Krona' => 'SEK - Svéd korona', + 'Screenshot taken %s' => 'Képernyőkép készült: %s', + 'Add a screenshot' => 'Képernyőkép hozzáadása', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Készítsen képernyőképet, majd a CTRL+V vagy ⌘+V megnyomásával illessze be ide.', + 'Screenshot uploaded successfully.' => 'A képernyőkép sikeresen feltöltése.', + 'SEK - Swedish Krona' => 'SEK - svéd korona', 'Identifier' => 'Azonosító', - 'Disable two factor authentication' => 'A kétfázisú beléptetés letiltása', - 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Valóban le akarja tiltani a kétfázisú beléptetést ennél a felhasználónál: "%s"?', + 'Disable two factor authentication' => 'A kétlépcsős hitelesítés letiltása', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Valóban le szeretné tiltani a kétlépcsős hitelesítést ennél a felhasználónál: „%s”?', 'Edit link' => 'Hivatkozás szerkesztése', - 'Start to type task title...' => 'Kezdje el begépelni a feladat címét... ', + 'Start to type task title...' => 'Kezdje el gépelni a feladat címét…', 'A task cannot be linked to itself' => 'Egy feladatot nem lehet önmagához kapcsolni', 'The exact same link already exists' => 'Már létezik pontosan ugyanez a hivatkozás', 'Recurrent task is scheduled to be generated' => 'Az ismétlődő feladat előállítása ütemezve lett', 'Score' => 'Pontszám', - 'The identifier must be unique' => 'Egyedi azonosító szükséges', - 'This linked task id doesn\'t exists' => 'Ez a hivatkozott feladat nem létezik', - 'This value must be alphanumeric' => 'Alfanumerikus érték szükséges', + 'The identifier must be unique' => 'Az azonosítónak egyedinek kell lennie', + 'This linked task id doesn\'t exists' => 'Ez a hivatkozott feladatazonosító nem létezik', + 'This value must be alphanumeric' => 'Ez az érték csak betűket és számokat tartalmazhat', 'Edit recurrence' => 'Ismétlődés szerkesztése', 'Generate recurrent task' => 'Ismétlődő feladat előállítása', - 'Trigger to generate recurrent task' => 'Az ismétlődő feladatot előállító trigger', - 'Factor to calculate new due date' => 'Az új határidő kiszámításához használt tényező', - 'Timeframe to calculate new due date' => 'Az új határidő kiszámításához használt időablak', - 'Base date to calculate new due date' => 'A határidő kiszámításához használt kezdő dátum', - 'Action date' => 'Intézkedés dátuma', - 'Base date to calculate new due date: ' => 'Az új határidő kiszámításához használt kezdő dátum: ', - 'This task has created this child task: ' => 'Ez a feladat a következő leszármazott feladatot hozta létre: ', - 'Day(s)' => 'Nap(ok)', - 'Existing due date' => 'A jelenlegi határidő', - 'Factor to calculate new due date: ' => 'Az új határidő kiszámításához használt tényező: ', - 'Month(s)' => 'Hónap(ok)', + 'Trigger to generate recurrent task' => 'Aktiváló az ismétlődő feladat előállításához', + 'Factor to calculate new due date' => 'Tényező az új határidő kiszámításához', + 'Timeframe to calculate new due date' => 'Időablak az új határidő kiszámításához', + 'Base date to calculate new due date' => 'Alapdátum az új határidő kiszámításához', + 'Action date' => 'Tevékenység dátuma', + 'Base date to calculate new due date: ' => 'Alapdátum az új határidő kiszámításához: ', + 'This task has created this child task: ' => 'Ez a feladat ezt a gyermekfeladatot hozta létre: ', + 'Day(s)' => 'Nap', + 'Existing due date' => 'Meglévő határidő', + 'Factor to calculate new due date: ' => 'Tényező az új határidő kiszámításához: ', + 'Month(s)' => 'Hónap', 'Recurrence' => 'Ismétlődés', 'This task has been created by: ' => 'Ezt a feladatot a következő személy hozta létre: ', - 'Recurrent task has been generated:' => 'Ismétlődő feladat lett létrehozva: ', - 'Timeframe to calculate new due date: ' => 'Az új határidő kiszámításához használt időablak: ', - 'Trigger to generate recurrent task: ' => 'Az ismétlődő feladatot előállító trigger: ', - 'When task is closed' => 'Mikor a feladat be lett zárva', - 'When task is moved from first column' => 'Mikor a feladat az első oszlopból el lett mozgatva', - 'When task is moved to last column' => 'Mikor a feladat az utolsó oszlopba lett elmozgatva', - 'Year(s)' => 'Év(ek)', - 'Calendar settings' => 'Naptár beállítások', - 'Project calendar view' => 'A projekt megjelenítése naptári formában', - 'Project settings' => 'Projekt beállítások', - 'Show subtasks based on the time tracking' => 'A részfeladatok megjelenítése az idő nyomkövetés alapján', - 'Show tasks based on the creation date' => 'A feladatok megjelenítése a létrehozás dátuma alapján', - 'Show tasks based on the start date' => 'A feladatok megjelenítése a kezdő dátum alapján', - 'Subtasks time tracking' => 'A részfeladatok idejének megjelenítése', - 'User calendar view' => 'A felhasználó naptárának megjelenítése', - 'Automatically update the start date' => 'A kezdő dátum automatikus módosítása', - // 'iCal feed' => '', - 'Preferences' => 'Preferenciák', + 'Recurrent task has been generated:' => 'Ismétlődő feladat lett előállítva: ', + 'Timeframe to calculate new due date: ' => 'Időablak az új határidő kiszámításához: ', + 'Trigger to generate recurrent task: ' => 'Aktiváló az ismétlődő feladat előállításához: ', + 'When task is closed' => 'Amikor a feladatok lezárták', + 'When task is moved from first column' => 'Amikor a feladatot áthelyezték az első oszlopból', + 'When task is moved to last column' => 'Amikor a feladatot áthelyezték az utolsó oszlopba', + 'Year(s)' => 'Év', + 'Project settings' => 'Projekt beállításai', + 'Automatically update the start date' => 'A kezdési dátum automatikus frissítése', + 'iCal feed' => 'iCal hírforrás', + 'Preferences' => 'Beállítások', 'Security' => 'Biztonság', - 'Two factor authentication disabled' => 'A két fázisú beléptetés tiltva van', - 'Two factor authentication enabled' => 'A két fázisú beléptetés engedélyezve van', - 'Unable to update this user.' => 'A felhasználó {adatainak} módosítása nem sikerült.', - 'There is no user management for private projects.' => 'A privát projektek esetén nincs felhasználó kezelés', - 'User that will receive the email' => 'Az email-t a következő felhaszáló fogja megkapni', - 'Email subject' => 'Email tárgy', + 'Two factor authentication disabled' => 'A kétlépcsős hitelesítés letiltva', + 'Two factor authentication enabled' => 'A kétlépcsős hitelesítés engedélyezve', + 'Unable to update this user.' => 'Nem lehet frissíteni a felhasználót.', + 'There is no user management for private projects.' => 'Nincs felhasználókezelés a személyes projekteknél.', + 'User that will receive the email' => 'A felhasználó, aki megkapja az e-mailt', + 'Email subject' => 'E-mail tárgya', 'Date' => 'Dátum', - 'Add a comment log when moving the task between columns' => 'Egy napló megjegyzés létrehozása a feladat oszlopok közötti mozgatásakor', - 'Move the task to another column when the category is changed' => 'A feladat átmozgatása egy másik oszlopba, ha megváltozik a kategória', - 'Send a task by email to someone' => 'Email-en egy feladat küldése valakinek', - 'Reopen a task' => 'Egy feladat újbóli megnyitása', + 'Add a comment log when moving the task between columns' => 'Megjegyzésnapló hozzáadása, ha a feladatot az oszlopok között mozgatják', + 'Move the task to another column when the category is changed' => 'A feladat áthelyezése egy másik oszlopba, ha megváltozik a kategória', + 'Send a task by email to someone' => 'Feladat elküldése e-mailben valakinek', + 'Reopen a task' => 'Feladat ismételt megnyitása', 'Notification' => 'Értesítés', - '%s moved the task #%d to the first swimlane' => '%s a #%d feladatot az első sávba mozgatta', + '%s moved the task #%d to the first swimlane' => '%s áthelyezte a(z) #%d. feladatot az első sávba', 'Swimlane' => 'Sáv', - 'Gravatar' => 'Gravatár', - '%s moved the task %s to the first swimlane' => '%s a %s feladatot az első sávba mozgatta', - '%s moved the task %s to the swimlane "%s"' => '%s a %s feladatot a "%s" sávba mozgatta', - 'This report contains all subtasks information for the given date range.' => 'Ez a riport az adott dátumtartományra vonatkozón az összes részfeladatot tartalmazza', - 'This report contains all tasks information for the given date range.' => 'Ez a riport az adott dátumtartományra vonatkozóan az összes feladatot tartalmazza', - 'Project activities for %s' => '%s projekt tevékenységei', - 'view the board on Kanboard' => 'a tábla megjelenítése a Kanboard-on', - 'The task have been moved to the first swimlane' => 'A feladat ez első sávba lett elmozgatva', - 'The task have been moved to another swimlane:' => 'A feladat egy másik sávba lett elmozgatva', + '%s moved the task %s to the first swimlane' => '%s áthelyezte a(z) %s feladatot az első sávba', + '%s moved the task %s to the swimlane "%s"' => '%s áthelyezte a(z) %s feladatot a(z) „%s” sávba', + 'This report contains all subtasks information for the given date range.' => 'Ez a jelentés az összes részfeladat-információt tartalmazza az adott dátumtartományban', + 'This report contains all tasks information for the given date range.' => 'Ez a jelentés az összes feladatinformációt tartalmazza az adott dátumtartományban', + 'Project activities for %s' => '%s projekttevékenységei', + 'view the board on Kanboard' => 'a tábla megjelenítése a Kanboardon', + 'The task have been moved to the first swimlane' => 'A feladat át lett helyezve az első sávba', + 'The task have been moved to another swimlane:' => 'A feladat át lett helyezve egy másik sávba:', 'New title: %s' => 'Új cím: %s', - 'The task is not assigned anymore' => 'A feladatnak már nincs felelőse', - 'New assignee: %s' => 'Az új felelős: %s', + 'The task is not assigned anymore' => 'A feladatnak többé már nincs felelőse', + 'New assignee: %s' => 'Új felelős: %s', 'There is no category now' => 'Jelenleg nincs kategória', - 'New category: %s' => 'Az új kategória: %s', - 'New color: %s' => 'Az új szín: %s', - 'New complexity: %d' => 'Az új bonyolultság: %d', - 'The due date have been removed' => 'A határidő törölve lett', + 'New category: %s' => 'Új kategória: %s', + 'New color: %s' => 'Új szín: %s', + 'New complexity: %d' => 'Új bonyolultság: %d', + 'The due date have been removed' => 'A határidő eltávolításra került', 'There is no description anymore' => 'Többé már nincs leírás', - 'Recurrence settings have been modified' => 'Az ismétlődés beállításai módosultak', - 'Time spent changed: %sh' => 'Módosult a ráfordított idő: %s óra', - 'Time estimated changed: %sh' => 'Módosult az időbecslés: %s óra', - 'The field "%s" have been updated' => 'A "%s" mező módosítva lett', + 'Recurrence settings have been modified' => 'Az ismétlődés beállításai módosítva lettek', + 'Time spent changed: %sh' => 'Az eltöltött idő megváltozott: %s óra', + 'Time estimated changed: %sh' => 'A becsült idő megváltozott: %s óra', + 'The field "%s" have been updated' => 'A(z) „%s” mező frissítve lett', 'The description has been modified:' => 'A leírás módosítva lett:', - 'Do you really want to close the task "%s" as well as all subtasks?' => 'Valóban be akarja zárni a "%s" feladatot, valamint a hozzá tartozó részfeladatokat?', + 'Do you really want to close the task "%s" as well as all subtasks?' => 'Valóban le szeretné zárni a(z) „%s” feladatot, valamint az összes részfeladatot?', 'I want to receive notifications for:' => 'Értesítéseket szeretnék kapni a következőkről:', - 'All tasks' => 'Az összes feladat', + 'All tasks' => 'Összes feladat', 'Only for tasks assigned to me' => 'Csak a hozzám rendelt feladatok', 'Only for tasks created by me' => 'Csak az általam létrehozott feladatok', - 'Only for tasks created by me and assigned to me' => 'Csak az általam lérehozott és a hozzám rendelt feladatok', + 'Only for tasks created by me and assigned to me' => 'Csak az általam létrehozott és a hozzám rendelt feladatok', '%%Y-%%m-%%d' => '%%Y-%%m-%%d', 'Total for all columns' => 'Az összes oszlop összege', - 'You need at least 2 days of data to show the chart.' => 'Legalább 2 nap adatára van szükség az ábra megjelenítéséshez', - '<15m' => '15p', - '<30m' => '30p', + 'You need at least 2 days of data to show the chart.' => 'Legalább 2 nap adatára van szükség a diagram megjelenítéséhez.', + '<15m' => '<15p', + '<30m' => '<30p', 'Stop timer' => 'Időmérő leállítása', 'Start timer' => 'Időmérő elindítása', - 'My activity stream' => 'Tevékenységem', - 'My calendar' => 'Naptáram', - 'Search tasks' => 'Feladatok közötti keresés', - 'Reset filters' => 'Szűrő alaphelyzetbe állítás', + 'My activity stream' => 'Saját tevékenységfolyamom', + 'Search tasks' => 'Feladatok keresése', + 'Reset filters' => 'Szűrők visszaállítása', 'My tasks due tomorrow' => 'Holnapi határidejű feladataim', 'Tasks due today' => 'Mai határidejű feladatok', 'Tasks due tomorrow' => 'Holnapi határidejű feladatok', 'Tasks due yesterday' => 'Tegnapi határidejű feladatok', 'Closed tasks' => 'Lezárt feladatok', 'Open tasks' => 'Nyitott feladatok', - 'Not assigned' => 'Nincs felelős', - 'View advanced search syntax' => 'Részletes keresés megjelenítése', + 'Not assigned' => 'Nincs hozzárendelve', + 'View advanced search syntax' => 'Speciális keresés szintaxis megtekintése', 'Overview' => 'Áttekintés', 'Board/Calendar/List view' => 'Tábla/Naptár/Lista nézet', - 'Switch to the board view' => 'Átkapcsolás tábla nézetbe', - 'Switch to the calendar view' => 'Átkapcsolás naptár nézetbe', - 'Switch to the list view' => 'Átkapcsolás lista nézetbe', + 'Switch to the board view' => 'Átváltás tábla nézetre', + 'Switch to the list view' => 'Átváltás lista nézetre', 'Go to the search/filter box' => 'Ugrás a keresés/szűrés dobozhoz', - 'There is no activity yet.' => 'Még nincs tevékenység', - 'No tasks found.' => 'Nincs feladat.', - 'Keyboard shortcut: "%s"' => 'Billentyű parancsok: "%s"', + 'There is no activity yet.' => 'Még nincs tevékenység.', + 'No tasks found.' => 'Nem található feladat.', + 'Keyboard shortcut: "%s"' => 'Gyorsbillentyű: „%s”', 'List' => 'Lista', 'Filter' => 'Szűrő', - 'Advanced search' => 'Keresés haladóknak', + 'Advanced search' => 'Speciális keresés', 'Example of query: ' => 'Lekérdezési példa: ', 'Search by project: ' => 'Keresés projekt alapján: ', 'Search by column: ' => 'Keresés oszlop alapján: ', @@ -705,267 +686,251 @@ return array( 'Search by category: ' => 'Keresés kategória alapján: ', 'Search by description: ' => 'Keresés leírás alapján: ', 'Search by due date: ' => 'Keresés határidő alapján: ', - 'Average time spent into each column' => 'Az egyes oszlopokban töltött átlagos idő', - 'Average time spent' => 'Az eltöltött átlagos idő', - 'This chart show the average time spent into each column for the last %d tasks.' => 'Ez az ábra az utolsó %d feladatra vonatkozóan mutatja az egyes oszlopkban eltöltött átlagos időt.', - 'Average Lead and Cycle time' => 'Átlagos átfutási idő és ciklusidő', + 'Average time spent into each column' => 'Átlagosan eltöltött idő az egyes oszlopokban', + 'Average time spent' => 'Átlagosan eltöltött idő', + 'This chart show the average time spent into each column for the last %d tasks.' => 'Ez a diagram az egyes oszlopokban átlagosan eltöltött időt jeleníti meg az utolsó %d feladatnál.', + 'Average Lead and Cycle time' => 'Átlagos átfutási és ciklusidő', 'Average lead time: ' => 'Átlagos átfutási idő: ', 'Average cycle time: ' => 'Átlagos ciklusidő: ', 'Cycle Time' => 'Ciklusidő', 'Lead Time' => 'Átfutási idő', - 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Ez az ábra az utolsó %d feladatra vonatkozóan mutatja az átlagos átfutási időt és ciklusidőt az idő függvényében.', - 'Average time into each column' => 'Az egyes oszlopokban töltött átlagos idő', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Ez a diagram az átlagos átfutási és ciklusidőt jeleníti meg az utolsó %d feladatnál az idő függvényében.', + 'Average time into each column' => 'Átlagos idő az egyes oszlopokban', 'Lead and cycle time' => 'Átfutási és ciklusidő', 'Lead time: ' => 'Átfutási idő: ', 'Cycle time: ' => 'Ciklusidő: ', - 'Time spent into each column' => 'Az egyes oszlopokban töltött idő', - 'The lead time is the duration between the task creation and the completion.' => 'Az átfutási idő a feladat létrehozása és befejezése között eltelt idő.', - 'The cycle time is the duration between the start date and the completion.' => 'A ciklusidő a feladat elkezdése és befejezése közötti eltelt idő.', - 'If the task is not closed the current time is used instead of the completion date.' => 'Ha a feladat még nincs lezárva, akkor befejezés ideje helyett az aktuális idő lesz használva.', + 'Time spent into each column' => 'Az egyes oszlopokban eltöltött idő', + 'The lead time is the duration between the task creation and the completion.' => 'Az átfutási idő a feladat létrehozása és befejezése közötti időtartam.', + 'The cycle time is the duration between the start date and the completion.' => 'A ciklusidő a kezdési dátum és a befejezés közötti időtartam.', + 'If the task is not closed the current time is used instead of the completion date.' => 'Ha a feladat nincs lezárva, akkor az aktuális idő lesz használva a befejezés dátuma helyett.', 'Set automatically the start date' => 'A kezdési idő automatikus beállítása', - 'Edit Authentication' => 'A beléptetés szerkesztése', + 'Edit Authentication' => 'Hitelesítés szerkesztése', 'Remote user' => 'Távoli felhasználó', - 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'A távoli felhasználók jelszava nem a Kanboard adatbázisban van tárolva. Példák: LDAP, Google és GitHub számlák.', - 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Ha bekattintja a "Bejelentkezési ablak tiltása" jelölőnégyzetet, akkor a login ablakban megadott jelszó nem lesz figyelembe véve.', - 'Default task color' => 'A feladathoz rendelt alapszín', - 'This feature does not work with all browsers.' => 'Ez a jellemző nem minden böngészőben működik.', - 'There is no destination project available.' => 'Nincs ilyen cél projekt.', - 'Trigger automatically subtask time tracking' => 'A részfeladatok időfelhasználas-követésének automatikus indítása', - 'Include closed tasks in the cumulative flow diagram' => 'A lezárt feladatok szerepeltetáse az összesített folyamatábrán', - 'Current swimlane: %s' => 'Aktuális sáv: %s', - 'Current column: %s' => 'Aktuális oszlop: %s', - 'Current category: %s' => 'Aktuális kategória: %s', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'A távoli felhasználók jelszava nem a Kanboard adatbázisban van tárolva. Példák: LDAP, Google és GitHub fiókok.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Ha bejelöli a „Bejelentkezési űrlap letiltása” jelölőnégyzetet, akkor a bejelentkezési űrlapon megadott hitelesítési adatok figyelmen kívül lesznek hagyva.', + 'Default task color' => 'Alapértelmezett feladatszín', + 'This feature does not work with all browsers.' => 'Ez a funkció nem működik minden böngészőben.', + 'There is no destination project available.' => 'Nem érhető el célprojekt.', + 'Trigger automatically subtask time tracking' => 'A részfeladatok időkövetésének automatikus aktiválása', + 'Include closed tasks in the cumulative flow diagram' => 'A lezárt feladatok is legyenek benne a halmozott folyamdiagramban', + 'Current swimlane: %s' => 'Jelenlegi sáv: %s', + 'Current column: %s' => 'Jelenlegi oszlop: %s', + 'Current category: %s' => 'Jelenlegi kategória: %s', 'no category' => 'nincs kategória', - 'Current assignee: %s' => 'Aktuális felelős: %s', + 'Current assignee: %s' => 'Jelenlegi felelős: %s', 'not assigned' => 'nincs kijelölt felelős', 'Author:' => 'Szerző:', - 'contributors' => 'bedolgozók', - 'License:' => 'Engedély:', - 'License' => 'Engedély', - 'Enter the text below' => 'Adja be a lenti szöveget', - 'Sort by position' => 'Rendezés hely szerint', - 'Sort by date' => 'Rendezés idő szerint', - 'Add task' => 'Feladat hozzáadása', - 'Start date:' => 'Kezdés ideje: ', + 'contributors' => 'közreműködők', + 'License:' => 'Licenc:', + 'License' => 'Licenc', + 'Enter the text below' => 'Adja meg a lenti szöveget', + 'Start date:' => 'Kezdés dátuma: ', 'Due date:' => 'Határidő: ', - 'There is no start date or due date for this task.' => 'Ehhez a feladathoz nem adtak meg kezdési időt vagy határidőt.', - 'Moving or resizing a task will change the start and due date of the task.' => 'A feladat elmozgatása vagy méretének megváltoztatása meg fogja változtatni a feladat kezdési idejét és határidejét.', - 'There is no task in your project.' => 'Az ön projektjében nincsenek feladatok.', - 'Gantt chart' => 'Gantt diagram', - 'People who are project managers' => 'Projekt vezetők', - 'People who are project members' => 'Projekt tagok', - 'NOK - Norwegian Krone' => 'NOK - Norvég korona', - 'Show this column' => 'Oszlop mutatása', + 'People who are project managers' => 'Emberek, akik projektvezetők', + 'People who are project members' => 'Emberek, akik projekttagok', + 'NOK - Norwegian Krone' => 'NOK - norvég korona', + 'Show this column' => 'Oszlop megjelenítése', 'Hide this column' => 'Oszlop elrejtése', - 'open file' => 'fájl megnyitás', - 'End date' => 'Végdátum', + 'open file' => 'fájl megnyitása', + 'End date' => 'Befejezési dátum', 'Users overview' => 'Felhasználók áttekintése', 'Members' => 'Tagok', - 'Shared project' => 'Közös projekt', + 'Shared project' => 'Megosztott projekt', 'Project managers' => 'Projektvezetők', - 'Gantt chart for all projects' => 'Gantt diagram az összes projektre vonatkozóan', - 'Projects list' => 'Projekt lista', - 'Gantt chart for this project' => 'Gantt diagram erre a projektre vonatkozóan', - 'Project board' => 'Projekt tábla', - 'End date:' => 'Befejezés dátuma: ', - 'There is no start date or end date for this project.' => 'Ennél a projektnél nem adták meg a kezdés és a befejezés dátumát.', - 'Projects Gantt chart' => 'A projektek Gantt diagramja', - 'Change task color when using a specific task link' => 'Az egyes specifikus feladat hivatkozások használatakor a feladat színének megváltoztatása', - 'Task link creation or modification' => 'Feladat hivatkozás létrehozása vagy módosítása', + 'Projects list' => 'Projektek listája', + 'End date:' => 'Befejezési dátum: ', + 'Change task color when using a specific task link' => 'Feladatszín megváltoztatása, ha egy adott feladathivatkozást használnak', + 'Task link creation or modification' => 'Feladathivatkozás létrehozása vagy módosítása', 'Milestone' => 'Mérföldkő', 'Documentation: %s' => 'Dokumentáció: %s', - 'Switch to the Gantt chart view' => 'Átkapcsolás a Gantt diagram nézetre', - 'Reset the search/filter box' => 'A keresés/szűrés doboz alaphelyzetbe állítása', + 'Reset the search/filter box' => 'A keresés/szűrés doboz visszaállítása', 'Documentation' => 'Dokumentáció', 'Table of contents' => 'Tartalomjegyzék', - 'Gantt' => 'Gantt', 'Author' => 'Szerző', 'Version' => 'Verzió', - 'Plugins' => 'Plugin-ek', - 'There is no plugin loaded.' => 'Nincs betöltött plugin.', - 'My notifications' => 'Emlékeztetőim', - 'Custom filters' => 'Egyedi szűrők', - 'Your custom filter have been created successfully.' => 'Az ön egyedi szűrője sikeresen létrejött.', - 'Unable to create your custom filter.' => 'Nem sikerült létrehozni az ön egyedi szűrőjét.', - 'Custom filter removed successfully.' => 'Az egyedi szűrő sikeresen törölve lett.', - 'Unable to remove this custom filter.' => 'Nem sikerült egy egyedi szűrő törlése.', - 'Edit custom filter' => 'Egyedi szűrő szerkesztése', - 'Your custom filter have been updated successfully.' => 'Az ön egyedi szűrője sikeresen módosult.', - 'Unable to update custom filter.' => 'Nem sikerült az egyedi szűrő módosítása', - 'Web' => 'Web (háló)', - 'New attachment on task #%d: %s' => 'A #%d számú feladatnak új melléklete van: %s', - 'New comment on task #%d' => 'A #%d számú feladatnak új megjegyzése van', - 'Comment updated on task #%d' => 'A #%d szűmú feladathoz tartozó megjegyzés módosult', - 'New subtask on task #%d' => 'A #%d számú feladatnak új részfeladata van', - 'Subtask updated on task #%d' => 'A #%d számú feladat részfeladata módosult', + 'Plugins' => 'Bővítmények', + 'There is no plugin loaded.' => 'Nincsenek betöltött bővítmények.', + 'My notifications' => 'Saját emlékeztetők', + 'Custom filters' => 'Egyéni szűrők', + 'Your custom filter have been created successfully.' => 'Az egyéni szűrője sikeresen létrehozva.', + 'Unable to create your custom filter.' => 'Nem lehet létrehozni az egyéni szűrőjét.', + 'Custom filter removed successfully.' => 'Az egyéni szűrő sikeresen eltávolítva.', + 'Unable to remove this custom filter.' => 'Nem lehet eltávolítani az egyéni szűrőt.', + 'Edit custom filter' => 'Egyéni szűrő szerkesztése', + 'Your custom filter have been updated successfully.' => 'Az egyéni szűrője sikeresen frissítve.', + 'Unable to update custom filter.' => 'Nem lehet frissíteni az egyéni szűrőt.', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Új melléklet a(z) #%d. feladatnál: %s', + 'New comment on task #%d' => 'Új megjegyzés a(z) #%d. feladatnál', + 'Comment updated on task #%d' => 'A megjegyzés frissítve lett a(z) #%d. feladatnál', + 'New subtask on task #%d' => 'Új részfeladat a(z) #%d. feladatnál', + 'Subtask updated on task #%d' => 'A részfeladat frissítve lett a(z) #%d. feladatnál', 'New task #%d: %s' => 'Új #%d számú feladat: %s', - 'Task updated #%d' => 'A #%d számú feladat módosult', - 'Task #%d closed' => 'A #%d számú feladat le lett zárva', - 'Task #%d opened' => 'A #%d számú feladat meg lett nyitva', - 'Column changed for task #%d' => 'A #%d számú feladat oszlopa módosult', - 'New position for task #%d' => 'A #%d számú feladat új helyre került', - 'Swimlane changed for task #%d' => 'A #%d számú feladat új sávba került', - 'Assignee changed on task #%d' => 'A #%d számú feladat felelőse megváltozott', - '%d overdue tasks' => '%d db feladatnál van határidő túllépés', - 'Task #%d is overdue' => 'A #%d számú feladat határideje lejárt', - 'No notification.' => 'Nincs új emlékeztető.', + 'Task updated #%d' => 'A(z) #%d. feladat frissült', + 'Task #%d closed' => 'A(z) #%d. feladat le lett zárva', + 'Task #%d opened' => 'A(z) #%d. feladat meg lett nyitva', + 'Column changed for task #%d' => 'Az oszlop megváltozott a(z) #%d. feladatnál', + 'New position for task #%d' => 'Új pozíció a(z) #%d. feladatnál', + 'Swimlane changed for task #%d' => 'A sáv megváltozott a(z) #%d. feladatnál', + 'Assignee changed on task #%d' => 'A felelős megváltozott a(z) #%d. feladatnál', + '%d overdue tasks' => '%d lejárt feladat', + 'Task #%d is overdue' => 'A(z) #%d. feladat határideje lejárt', + 'No notification.' => 'Nincs értesítés.', 'Mark all as read' => 'Az összes megjelölése olvasottként', 'Mark as read' => 'Megjelölés olvasottként', 'Total number of tasks in this column across all swimlanes' => 'Az ebben az oszlopban, az összes sávban lévő feladatok száma', 'Collapse swimlane' => 'Sáv összecsukása', - 'Expand swimlane' => 'Sáv lenyitása', + 'Expand swimlane' => 'Sáv kinyitása', 'Add a new filter' => 'Új szűrő hozzáadása', - 'Share with all project members' => 'Megosztás minden projekt taggal', + 'Share with all project members' => 'Megosztás az összes projekttaggal', 'Shared' => 'Megosztva', 'Owner' => 'Tulajdonos', 'Unread notifications' => 'Olvasatlan értesítések', 'Notification methods:' => 'Értesítési módszerek:', - 'Unable to read your file' => 'A fájl nem olvasható', - '%d task(s) have been imported successfully.' => '%d feladat sikeresen feldolgozva.', - 'Nothing have been imported!' => 'Nem történt beolvasás!', - 'Import users from CSV file' => 'Felhasználók importálása CSV fájlból', + 'Unable to read your file' => 'Nem lehet beolvasni a fájlt', + '%d task(s) have been imported successfully.' => '%d feladat sikeresen importálva.', + 'Nothing have been imported!' => 'Semmi sem lett importálva!', + 'Import users from CSV file' => 'Felhasználók importálása CSV-fájlból', '%d user(s) have been imported successfully.' => '%d felhasználó sikeresen importálva.', - // 'Comma' => '', - // 'Semi-colon' => '', - // 'Tab' => '', - // 'Vertical bar' => '', - // 'Double Quote' => '', - // 'Single Quote' => '', - '%s attached a file to the task #%d' => '%s hozzákapcsolt a #%d feladathoz egy fájlt', - 'There is no column or swimlane activated in your project!' => 'Az ön projektjében nincs aktív oszlop vagy sáv!', - 'Append filter (instead of replacement)' => 'Szűrő hozzáfűzése (a helyettesítés helyett)', - 'Append/Replace' => 'Hozzáfűzés/Helyettesítés', - 'Append' => 'Hozzáfűz', - 'Replace' => 'Helyettesít', - 'Import' => 'Importál', - 'Change sorting' => 'rendezési sorrend megváltoztatása', - 'Tasks Importation' => 'Feladat importálás', - // 'Delimiter' => '', - // 'Enclosure' => '', - 'CSV File' => 'CSV fájl', + 'Comma' => 'Vessző', + 'Semi-colon' => 'Pontosvessző', + 'Tab' => 'Tabulátor', + 'Vertical bar' => 'Függőleges vonal', + 'Double Quote' => 'Idézőjel', + 'Single Quote' => 'Aposztróf', + '%s attached a file to the task #%d' => '%s mellékelt egy fájlt a(z) #%d. feladathoz', + 'There is no column or swimlane activated in your project!' => 'Nincs aktivált oszlop vagy sáv a projektjében!', + 'Append filter (instead of replacement)' => 'Szűrő hozzáfűzése (kicserélés helyett)', + 'Append/Replace' => 'Hozzáfűzés/csere', + 'Append' => 'Hozzáfűzés', + 'Replace' => 'Csere', + 'Import' => 'Importálás', + 'Change sorting' => 'Rendezés megváltoztatása', + 'Tasks Importation' => 'Feladat importálása', + 'Delimiter' => 'Elválasztó', + 'Enclosure' => 'Határoló', + 'CSV File' => 'CSV-fájl', 'Instructions' => 'Utasítások', - 'Your file must use the predefined CSV format' => 'A fájlnak az előre definiált CSV formátumot kell használnia', - 'Your file must be encoded in UTF-8' => 'A fájlnak UTF-8 karakterkódolást kell használnia', - 'The first row must be the header' => 'Az első sor kötelezően a fejléc', - 'Duplicates are not verified for you' => 'Az ismétlődések nincsenek ellenőrizve.', - 'The due date must use the ISO format: YYYY-MM-DD' => 'A határidőt ISO formátumban kell megadni: YYYY-MM-DD', - 'Download CSV template' => 'A CSV minta (template) letöltése', + 'Your file must use the predefined CSV format' => 'A fájlnak az előre meghatározott CSV-formátumot kell használnia', + 'Your file must be encoded in UTF-8' => 'A fájlnak UTF-8 kódolásúnak kell lennie', + 'The first row must be the header' => 'Az első sornak fejlécnek kell lennie', + 'Duplicates are not verified for you' => 'Az ismétlődések nincsenek ellenőrizve', + 'The due date must use the ISO format: YYYY-MM-DD' => 'A határidőnek ISO formátumot kell használnia: YYYY-MM-DD', + 'Download CSV template' => 'CSV-sablon letöltése', 'No external integration registered.' => 'Nincs külső integráció regisztrálva.', - 'Duplicates are not imported' => 'Az ismétlődő értékek nem lesznek beimportálva', - 'Usernames must be lowercase and unique' => 'A felhasználói nevekre kötelező, hogy kisbetűsek és egyediek legyenek', - 'Passwords will be encrypted if present' => 'A jelszavak titkosítva lesznek', - '%s attached a new file to the task %s' => '%s a %s feladathoz egy új fájlt kapcsolt hozzá', - 'Link type' => 'Hivatkozás típus', - 'Assign automatically a category based on a link' => 'A hivatkozás alapján kategória automatikus hozzárendelése', - 'BAM - Konvertible Mark' => 'BAM - Konvertibilis márka', - 'Assignee Username' => 'A felelős felhasználói neve', - 'Assignee Name' => 'A felelős neve', + 'Duplicates are not imported' => 'Az ismétlődések nincsenek importálva', + 'Usernames must be lowercase and unique' => 'A felhasználóneveknek kisbetűsnek és egyedinek kell lenniük', + 'Passwords will be encrypted if present' => 'A jelszavak titkosítva lesznek, ha meg vannak adva', + '%s attached a new file to the task %s' => '%s mellékelt egy új fájlt a(z) %s feladathoz', + 'Link type' => 'Hivatkozás típusa', + 'Assign automatically a category based on a link' => 'Kategória automatikus hozzárendelése egy hivatkozás alapján', + 'BAM - Konvertible Mark' => 'BAM - konvertibilis márka', + 'Assignee Username' => 'Felelős felhasználóneve', + 'Assignee Name' => 'Felelős neve', 'Groups' => 'Csoportok', - 'Members of %s' => 'A %s tagjai', + 'Members of %s' => '%s tagjai', 'New group' => 'Új csoport', - 'Group created successfully.' => 'A csoport sikeresen létrejött.', - 'Unable to create your group.' => 'Nem sikerült a csoport létrehozása.', + 'Group created successfully.' => 'A csoport sikeresen létrehozva.', + 'Unable to create your group.' => 'Nem lehet létrehozni a csoportot.', 'Edit group' => 'Csoport szerkesztése', - 'Group updated successfully.' => 'A csoport módosítása sikeresen megtörtént', - 'Unable to update your group.' => 'Nem sikerült a csoport módosítása', - 'Add group member to "%s"' => 'Csoport tag hozzáadáasa "%s"-hez', - 'Group member added successfully.' => 'Tag hozzáadás sikeresen megtörtént', - 'Unable to add group member.' => 'Nem sikerült a tagot hozzáadni a csoporthoz.', - 'Remove user from group "%s"' => 'Felhasználó eltávolítása a "%s" csoportból', + 'Group updated successfully.' => 'A csoport sikeresen frissítve.', + 'Unable to update your group.' => 'Nem lehet frissíteni a csoportot.', + 'Add group member to "%s"' => 'Csoporttag hozzáadása ehhez: „%s”', + 'Group member added successfully.' => 'A csoporttag sikeresen hozzáadva.', + 'Unable to add group member.' => 'Nem lehet hozzáadni a csoporttagot.', + 'Remove user from group "%s"' => 'Felhasználó eltávolítása a(z) „%s” csoportból', 'User removed successfully from this group.' => 'A felhasználó sikeresen el lett távolítva a csoportból.', - 'Unable to remove this user from the group.' => 'Nem sikerült a felhasználó eltávolítása a csoportból', - 'Remove group' => 'Csoport törlése', - 'Group removed successfully.' => 'A csoport törlése sikeresen megtörtént.', - 'Unable to remove this group.' => 'Nem sikerült a csoport törlése.', - 'Project Permissions' => 'Projekt engedélyek', + 'Unable to remove this user from the group.' => 'Nem lehet eltávolítani a felhasználót a csoportból.', + 'Remove group' => 'Csoport eltávolítása', + 'Group removed successfully.' => 'A csoport sikeresen eltávolítva.', + 'Unable to remove this group.' => 'Nem lehet eltávolítani a csoportot.', + 'Project Permissions' => 'Projektjogosultságok', 'Manager' => 'Vezető', - 'Project Manager' => 'Projekt vezető', - 'Project Member' => 'Projekt tag', - 'Project Viewer' => 'Projekt megtekintés', - 'Your account is locked for %d minutes' => 'Az ön számlája %d percre zárolva lett.', + 'Project Manager' => 'Projektvezető', + 'Project Member' => 'Projekttag', + 'Project Viewer' => 'Projektmegtekintő', + 'Your account is locked for %d minutes' => 'A fiókja zárolva lett %d percre', 'Invalid captcha' => 'Érvénytelen captcha', 'The name must be unique' => 'A névnek egyedinek kell lennie', 'View all groups' => 'Az összes csoport megtekintése', - 'There is no user available.' => 'Nincs ilyen felhasználó.', - 'Do you really want to remove the user "%s" from the group "%s"?' => 'Valóban el kívánja távolítani a "%s" felhasználót a "%s" csoportból?', - 'There is no group.' => 'Nincs ilyen csoport.', - 'External Id' => 'Külső azonosító', + 'There is no user available.' => 'Nincs elérhető felhasználó.', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'Valóban el szeretné távolítani „%s” felhasználót a(z) „%s” csoportból?', + 'There is no group.' => 'Nincs csoport.', 'Add group member' => 'Csoporttag hozzáadása', - 'Do you really want to remove this group: "%s"?' => 'Valóban törölni kívánja ezt a csoportot: "%s"?', - 'There is no user in this group.' => 'Nincs egy felhasználó sem ebben a csoportban.', - 'Permissions' => 'Engedélyek', - 'Allowed Users' => 'Megengedett felhasználók', - 'No user have been allowed specifically.' => 'Egyedileg semelyik felhasználó sem lett engedélyezve.', - 'Role' => 'Szerepkör', - 'Enter user name...' => 'Adja be a felhasználó nevét...', - 'Allowed Groups' => 'Megengedett csoportok', - 'No group have been allowed specifically.' => 'Egyedileg semelyik csoport sem lett engedélyezve.', + 'Do you really want to remove this group: "%s"?' => 'Valóban el szeretné távolítani ezt a csoportot: „%s”?', + 'There is no user in this group.' => 'Nincs felhasználó ebben a csoportban.', + 'Permissions' => 'Jogosultságok', + 'Allowed Users' => 'Engedélyezett felhasználók', + 'No user have been allowed specifically.' => 'Egyedileg egyetlen felhasználó sem lett engedélyezve.', + 'Role' => 'Szerep', + 'Enter user name...' => 'Adja meg a felhasználó nevét…', + 'Allowed Groups' => 'Engedélyezett csoportok', + 'No group have been allowed specifically.' => 'Egyedileg egyetlen csoport sem lett engedélyezve.', 'Group' => 'Csoport', - 'Group Name' => 'Csoport név', - 'Enter group name...' => 'Adja meg a csoport nevét...', - 'Role:' => 'Szerepkör:', - 'Project members' => 'Projekt tagok', - '%s mentioned you in the task #%d' => '%s megemlítette önt a #%d feladatban', - '%s mentioned you in a comment on the task #%d' => '%s megemlítette önt a #%d feladathoz fűzött megjegyzésben', - 'You were mentioned in the task #%d' => 'Ön meg lett említve a #%d feladatban', - 'You were mentioned in a comment on the task #%d' => 'Ön meg lett említve a #%d feladathoz fűzött megjegyzésben', + 'Group Name' => 'Csoport neve', + 'Enter group name...' => 'Adja meg a csoport nevét…', + 'Role:' => 'Szerep:', + 'Project members' => 'Projekttagok', + '%s mentioned you in the task #%d' => '%s megemlítette Önt a(z) #%d. feladatban', + '%s mentioned you in a comment on the task #%d' => '%s megemlítette Önt a(z) #%d. feladathoz fűzött megjegyzésben', + 'You were mentioned in the task #%d' => 'Megemlítették Önt a(z) #%d. feladatban', + 'You were mentioned in a comment on the task #%d' => 'Megemlítették Önt a(z) #%d. feladathoz fűzött megjegyzésben', 'Estimated hours: ' => 'Becsült órák: ', 'Actual hours: ' => 'Tényleges órák: ', - 'Hours Spent' => 'Ráfordítás órákban', - 'Hours Estimated' => 'Becsült idő órákban', + 'Hours Spent' => 'Eltöltött órák', + 'Hours Estimated' => 'Becsült órák', 'Estimated Time' => 'Becsült idő', 'Actual Time' => 'Tényleges idő', - 'Estimated vs actual time' => 'Becsült idő ill. tényleges idő', - 'RUB - Russian Ruble' => 'RUB - Orosz rubel', - 'Assign the task to the person who does the action when the column is changed' => 'A feladat hozzárendelése ahhoz a személyhez, aki az oszlop megváltoztatásakor intézkedik', - 'Close a task in a specific column' => 'A megadott oszlopban lévő feladat lezárása', - 'Time-based One-time Password Algorithm' => 'Idő alapú, egyszer használható jelszó algoritmus', - 'Two-Factor Provider: ' => 'Két tényezős bejelentkezés szolgáltatója', - 'Disable two-factor authentication' => 'Két tényezős bejelentkezés tiltása', - 'Enable two-factor authentication' => 'Két tényezős bejelentkezés engedélyezése', - 'There is no integration registered at the moment.' => 'Jelenleg nincs regisztrált integráció.', - 'Password Reset for Kanboard' => 'Jelszó alaphelyzetbe állítása', - 'Forgot password?' => 'Elfelejtett jelszó?', - 'Enable "Forget Password"' => '"Elfelejtett jelszó" engedélyezése', - 'Password Reset' => 'Jelszó alaphelyzetbe állíása', + 'Estimated vs actual time' => 'Becsült ↔ tényleges idő', + 'RUB - Russian Ruble' => 'RUB - orosz rubel', + 'Assign the task to the person who does the action when the column is changed' => 'A feladat hozzárendelése ahhoz a személyhez, aki elvégzi a műveletet az oszlop megváltoztatásakor', + 'Close a task in a specific column' => 'Feladat lezárása egy adott oszlopban', + 'Time-based One-time Password Algorithm' => 'Időalapú, egyszer használható jelszó algoritmus', + 'Two-Factor Provider: ' => 'Kétlépcsős hitelesítés szolgáltatója: ', + 'Disable two-factor authentication' => 'Kétlépcsős hitelesítés letiltása', + 'Enable two-factor authentication' => 'Kétlépcsős hitelesítés engedélyezése', + 'There is no integration registered at the moment.' => 'Jelenleg nincs integráció regisztrálva.', + 'Password Reset for Kanboard' => 'Kanboard jelszó visszaállítása', + 'Forgot password?' => 'Elfelejtette a jelszavát?', + 'Enable "Forget Password"' => '„Elfelejtett jelszó” engedélyezése', + 'Password Reset' => 'Jelszó visszaállítása', 'New password' => 'Új jelszó', 'Change Password' => 'Jelszó megváltoztatása', - 'To reset your password click on this link:' => 'A jelszó megváltoztatásáshoz kattintson erre a hivatkozásra', + 'To reset your password click on this link:' => 'A jelszó visszaállításához kattintson erre a hivatkozásra:', 'Last Password Reset' => 'Jelszó alaphelyzetbe állítás utoljára ekkor', - 'The password has never been reinitialized.' => 'A jelszó soha sem lett alaphelyzetbe állítva.', + 'The password has never been reinitialized.' => 'A jelszó soha sem volt visszaállítva.', 'Creation' => 'Létrehozás', 'Expiration' => 'Lejárat', - 'Password reset history' => 'A jelszó alaphelyzetbe állítás története', - 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'A "%s" oszlophoz és a "%s" sávhoz tartozó összes feladat sikeresen le lett zárva.', - 'Do you really want to close all tasks of this column?' => 'Valóban le kívánja zárni az oszlophoz tartozó összes feladatot?', - '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d feladat lesz lezárva, ezek a "%s" oszlopban és a "%s" sávban vannak.', - 'Close all tasks of this column' => 'Az oszlophoz tartozó összes feladat lezárása', - 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Egy plugin sem regisztrált projekt értesítési módszert. Egyedi értesítések még mindig beállíthatók a felhasználói profilban.', - 'My dashboard' => 'Az én dashboard-om', - 'My profile' => 'Az én profilom', - 'Project owner: ' => 'A projekt tulajdonosa: ', - 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'A projekt azonosító opcionális, és kötelezően alfanumerikus karakterekből áll, pl: MYPROJECT.', - 'Project owner' => 'Projekt tulajdonos', - 'Private projects do not have users and groups management.' => 'A privát projektekhez nem tartozik felhasználó kezelés és csoport kezelés.', - 'There is no project member.' => 'A projektnek nincs tagja.', + 'Password reset history' => 'Jelszó visszaállításának előzményei ', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'A(z) „%s” oszlop és a(z) „%s” sáv összes feladata sikeresen lezárva.', + 'Do you really want to close all tasks of this column?' => 'Valóban le szeretné zárni az oszlop összes feladatát?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d feladat lesz lezárva a(z) „%s” oszlopban és a(z) „%s” sávban.', + 'Close all tasks of this column' => 'Az oszlop összes feladatának lezárása', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Egyetlen bővítmény sem regisztrált projekt értesítési módszert. Egyedi értesítéseket továbbra is beállíthat a felhasználói profiljában.', + 'My dashboard' => 'Saját vezérlőpult', + 'My profile' => 'Saját profil', + 'Project owner: ' => 'Projekttulajdonos: ', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'A projektazonosító elhagyható, és csak betűk és számok lehetnek, például: MYPROJECT.', + 'Project owner' => 'Projekttulajdonos', + 'Private projects do not have users and groups management.' => 'A személyes projekteknek nincs felhasználó- és csoportkezelése.', + 'There is no project member.' => 'Nincs projekttag.', 'Priority' => 'Prioritás', - 'Task priority' => 'Feladat prioritás', + 'Task priority' => 'Feladat prioritása', 'General' => 'Általános', 'Dates' => 'Dátumok', - 'Default priority' => 'Alap prioritás', + 'Default priority' => 'Alapértelmezett prioritás', 'Lowest priority' => 'Legalacsonyabb prioritás', 'Highest priority' => 'Legmagasabb prioritás', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Ha nullát ad meg a legalacsonyabb és legmagasabb prioritásként, akkor ez a jellemző letiltásra kerül.', - 'Close a task when there is no activity' => 'A feladat lezárása, ha nincs tevékenység', - 'Duration in days' => 'Hossz napokban', - 'Send email when there is no activity on a task' => 'email küldése, ha egy feladathoz nincs tevékenység', - 'Unable to fetch link information.' => 'A hivatkozás adatainak sikertelen beolvasása', - 'Daily background job for tasks' => 'A feladatokhoz tartozó napi háttér munkák', + 'Close a task when there is no activity' => 'Feladat lezárása, ha nincs tevékenység', + 'Duration in days' => 'Időtartam napokban', + 'Send email when there is no activity on a task' => 'E-mail küldése, ha nincs tevékenység egy feladatban', + 'Unable to fetch link information.' => 'Nem lehet lekérni a hivatkozás információit.', + 'Daily background job for tasks' => 'Napi háttérmunka a feladatoknál', 'Auto' => 'Automatikus', 'Related' => 'Kapcsolódó', - 'Attachment' => 'Csatolmány', - 'Title not found' => 'Nincs ilyen cím', - 'Web Link' => 'Web hivatkozás', + 'Attachment' => 'Melléklet', + 'Title not found' => 'A cím nem található', + 'Web Link' => 'Webes hivatkozás', 'External links' => 'Külső hivatkozások', 'Add external link' => 'Külső hivatkozás hozzáadása', 'Type' => 'Típus', @@ -974,364 +939,431 @@ return array( 'Add a new external link' => 'Új külső hivatkozás hozzáadása', 'Edit external link' => 'Külső hivatkozás szerkesztése', 'External link' => 'Külső hivatkozás', - 'Copy and paste your link here...' => 'Másold be a hivatkozást ide...', + 'Copy and paste your link here...' => 'Másolja ki és illessze be a hivatkozást ide…', 'URL' => 'URL', 'Internal links' => 'Belső hivatkozások', - 'Assign to me' => 'Rendeld hozzám', + 'Assign to me' => 'Rendelje hozzám', 'Me' => 'Hozzám', - 'Do not duplicate anything' => 'Semmit se duplázz meg', - 'Projects management' => 'Projekt kezelés', + 'Do not duplicate anything' => 'Ne kettőzzön semmit sem', + 'Projects management' => 'Projektek kezelése', 'Users management' => 'Felhasználók kezelése', 'Groups management' => 'Csoportok kezelése', 'Create from another project' => 'Létrehozás egy másik projektből', - 'open' => 'nyitva', - 'closed' => 'zárva', + 'open' => 'nyitott', + 'closed' => 'lezárt', 'Priority:' => 'Prioritás:', 'Reference:' => 'Hivatkozás:', - 'Complexity:' => 'Komplexitás:', + 'Complexity:' => 'Bonyolultság:', 'Swimlane:' => 'Sáv:', 'Column:' => 'Oszlop:', 'Position:' => 'Pozíció:', 'Creator:' => 'Létrehozó:', 'Time estimated:' => 'Becsült idő:', '%s hours' => '%s óra', - 'Time spent:' => 'Eltelt idő:', + 'Time spent:' => 'Eltöltött idő:', 'Created:' => 'Létrehozva:', 'Modified:' => 'Módosítva:', 'Completed:' => 'Elkészült:', 'Started:' => 'Elindult:', - 'Moved:' => 'Elmozgatva:', + 'Moved:' => 'Áthelyezve:', 'Task #%d' => '#%d. feladat', - 'Time format' => 'Idő formátum', - 'Start date: ' => 'Kezdő datum: ', - 'End date: ' => 'Vég dátum: ', + 'Time format' => 'Időformátum', + 'Start date: ' => 'Kezdési dátum: ', + 'End date: ' => 'Befejezési dátum: ', 'New due date: ' => 'Új határidő: ', - 'Start date changed: ' => 'Kezdő dátum megváltozott: ', - 'Disable private projects' => 'Privát projektek tiltása', - 'Do you really want to remove this custom filter: "%s"?' => 'Valóban el kívánja távolítani ezt az egyedi szűrőt: "%s"?', - 'Remove a custom filter' => 'Egyedi szűrő eltávolítása', - 'User activated successfully.' => 'A felhasználó sikeresen aktiválva lett.', - 'Unable to enable this user.' => 'Nem sikerült a felhasználó engedélyezése.', - 'User disabled successfully.' => 'A felhaszáló sikeresen le lett tiltva.', - 'Unable to disable this user.' => 'Nem sikerült a felhasználó letiltása.', - 'All files have been uploaded successfully.' => 'Az összes fájl sikeresen feltöltődött.', - 'The maximum allowed file size is %sB.' => 'A fájl max. megengedett mérete %s bájt', - 'Drag and drop your files here' => 'Fogdd-és-vidd módszerrel dobja ide a fájlt', - 'choose files' => 'válasszon fájlt', - 'View profile' => 'Profil megtekintés', - 'Two Factor' => 'Két tényezős', - 'Disable user' => 'Felhasználó tiltása', - 'Do you really want to disable this user: "%s"?' => 'Valóban le akarja tiltani ezt a felhasználót: "%s"?', + 'Start date changed: ' => 'A kezdési dátum megváltozott: ', + 'Disable private projects' => 'Személyes projektek letiltása', + 'Do you really want to remove this custom filter: "%s"?' => 'Valóban el szeretné távolítani ezt az egyéni szűrőt: „%s”?', + 'Remove a custom filter' => 'Egyéni szűrő eltávolítása', + 'User activated successfully.' => 'A felhasználó sikeresen aktiválva.', + 'Unable to enable this user.' => 'Nem lehet engedélyezni a felhasználót.', + 'User disabled successfully.' => 'A felhasználó sikeresen letiltva.', + 'Unable to disable this user.' => 'Nem lehet letiltani a felhasználót.', + 'All files have been uploaded successfully.' => 'Az összes fájl sikeresen feltöltve.', + 'The maximum allowed file size is %sB.' => 'A legnagyobb megengedett fájlméret %s bájt.', + 'Drag and drop your files here' => 'Fogd-és-vidd módszerrel húzza ide a fájlokat', + 'choose files' => 'fájlok kiválasztása', + 'View profile' => 'Profil megtekintése', + 'Two Factor' => 'Kétlépcsős', + 'Disable user' => 'Felhasználó letiltása', + 'Do you really want to disable this user: "%s"?' => 'Valóban le szeretné tiltani ezt a felhasználót: „%s”?', 'Enable user' => 'Felhasználó engedélyezése', - 'Do you really want to enable this user: "%s"?' => 'Valóban engedélyezni akarja ezt a felhasználót: "%s"?', + 'Do you really want to enable this user: "%s"?' => 'Valóban engedélyezni szeretné ezt a felhasználót: „%s”?', 'Download' => 'Letöltés', 'Uploaded: %s' => 'Feltöltve: %s', - 'Size: %s' => 'méret %s', - 'Uploaded by %s' => 'Feltöltve %s által', + 'Size: %s' => 'Méret: %s', + 'Uploaded by %s' => 'Feltöltötte: %s', 'Filename' => 'Fájlnév', 'Size' => 'Méret', - 'Column created successfully.' => 'Az oszlop sikeresen létrejött', - 'Another column with the same name exists in the project' => 'A projektben már létezik egy ugyanilyen nevű oszlop', - 'Default filters' => 'Alap szűrők', - 'Your board doesn\'t have any columns!' => 'A táblának nincsenek oszlopai!', + 'Column created successfully.' => 'Az oszlop sikeresen létrehozva.', + 'Another column with the same name exists in the project' => 'Létezik egy ugyanilyen nevű oszlop a projektben', + 'Default filters' => 'Alapértelmezett szűrők', + 'Your board doesn\'t have any columns!' => 'A táblának nincs egyetlen oszlopa sem!', 'Change column position' => 'Oszlop helyzetének megváltoztatása', - 'Switch to the project overview' => 'Projektek áttekintése', - 'User filters' => 'Felhasználók szűrése', - 'Category filters' => 'Kategóriák szűrése', + 'Switch to the project overview' => 'Átváltás a projekt áttekintőre', + 'User filters' => 'Felhasználók szűrői', + 'Category filters' => 'Kategóriák szűrői', 'Upload a file' => 'Fájl feltöltése', 'View file' => 'Fájl megtekintése', - 'Last activity' => 'Utolsó aktivitás', + 'Last activity' => 'Utolsó tevékenység', 'Change subtask position' => 'Részfeladat helyzetének megváltoztatása', - 'This value must be greater than %d' => 'Ennek az értéknek nagyobbnak kell lennie, mint %d', - 'Another swimlane with the same name exists in the project' => 'A projektben létezik egy ugyanilyen nevű másik sáv', - 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Példa: http://example.kanboard.net/ (ez abszolút URL-ek előállítására használható)', - 'Actions duplicated successfully.' => 'A tevékenység sikeresen meg lett duplázva.', - 'Unable to duplicate actions.' => 'A tevékenység megduplázása nem sikerült.', - 'Add a new action' => 'Új tevékenység létrehozása', + 'This value must be greater than %d' => 'Ennek az értéknek nagyobbnak kell lennie mint %d', + 'Another swimlane with the same name exists in the project' => 'Létezik egy ugyanilyen nevű sáv a projektben', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Példa: http://example.kanboard.net/ (abszolút URL-ek előállításához használható)', + 'Actions duplicated successfully.' => 'A műveletek sikeresen megkettőzve.', + 'Unable to duplicate actions.' => 'Nem lehet megkettőzni a műveleteket.', + 'Add a new action' => 'Új művelet hozzáadása', 'Import from another project' => 'Importálás egy másik projektből', - 'There is no action at the moment.' => 'Jelenleg nincs egy tevkenység sem.', - 'Import actions from another project' => 'Tevékenységek importálása egy másik projektből', - 'There is no available project.' => 'Nincs rendelkezésre álló projekt.', + 'There is no action at the moment.' => 'Jelenleg nincs egyetlen művelet sem.', + 'Import actions from another project' => 'Műveletek importálása egy másik projektből', + 'There is no available project.' => 'Nincs elérhető projekt.', 'Local File' => 'Helyi fájl', 'Configuration' => 'Konfiguráció', - 'PHP version:' => 'PHP verzió:', + 'PHP version:' => 'PHP verziója:', 'PHP SAPI:' => 'PHP SAPI:', - 'OS version:' => 'Operációs rendszer verzió:', - 'Database version:' => 'Adatbázis verzió:', + 'OS version:' => 'Operációs rendszer verziója:', + 'Database version:' => 'Adatbázis verziója:', 'Browser:' => 'Böngésző:', 'Task view' => 'Feladat nézet', 'Edit task' => 'Feladat szerkesztése', 'Edit description' => 'Leírás szerkesztése', 'New internal link' => 'Új belső hivatkozás', - 'Display list of keyboard shortcuts' => 'Billentyű parancsok megjelenítése', + 'Display list of keyboard shortcuts' => 'Gyorsbillentyűk listájának megjelenítése', 'Menu' => 'Menü', - 'Set start date' => 'Kezdő időpont beállítása', + 'Set start date' => 'Kezdési dátum beállítása', 'Avatar' => 'Avatár', - 'Upload my avatar image' => 'Kép feltöltése', - 'Remove my image' => 'Kép törése', - 'The OAuth2 state parameter is invalid' => 'Az OAuth2 állapot paraméter érvénytelen', - 'User not found.' => 'Nincs ilyen felhasználó.', - 'Search in activity stream' => 'Keresés a tevékenységek között', - 'My activities' => 'Tevékenységeim', + 'Upload my avatar image' => 'Saját avatárkép feltöltése', + 'Remove my image' => 'Saját kép eltávolítása', + 'The OAuth2 state parameter is invalid' => 'Az OAuth2 állapotparaméter érvénytelen', + 'User not found.' => 'A felhasználó nem található.', + 'Search in activity stream' => 'Keresés a tevékenységfolyamban', + 'My activities' => 'Saját tevékenységek', 'Activity until yesterday' => 'Tevékenységek tegnapig', 'Activity until today' => 'Tevékenységek a mai napig', 'Search by creator: ' => 'Keresés a létrehozó szerint: ', - 'Search by creation date: ' => 'Keresés a létrehozás ideje szerint: ', + 'Search by creation date: ' => 'Keresés a létrehozás dátuma szerint: ', 'Search by task status: ' => 'Keresés a feladat állapota szerint: ', 'Search by task title: ' => 'Keresés a feladat címe szerint: ', - 'Activity stream search' => 'Tevékenységi láncban történő keresés', - 'Projects where "%s" is manager' => 'Azok a projektek, amelyekben "%s" vezető', - 'Projects where "%s" is member' => 'Azok a projektek, amelyekben "%s" tag', - 'Open tasks assigned to "%s"' => '"%s" -hez rendelt nyitott feladatok', - 'Closed tasks assigned to "%s"' => '"%s" -hez rendelt lezárt feladatok', - 'Assign automatically a color based on a priority' => 'A prioritás alapján szín automatikus hozzárendelése', - 'Overdue tasks for the project(s) "%s"' => 'A "%s" projekt(ek)hez tartozó, határidőt túllépő feladatok', + 'Activity stream search' => 'Tevékenységfolyam keresés', + 'Projects where "%s" is manager' => 'Azok a projektek, ahol „%s” vezető', + 'Projects where "%s" is member' => 'Azok a projektek, ahol „%s” tag', + 'Open tasks assigned to "%s"' => '„%s” felhasználóhoz rendelt nyitott feladatok', + 'Closed tasks assigned to "%s"' => '„%s” felhasználóhoz rendelt lezárt feladatok', + 'Assign automatically a color based on a priority' => 'Szín automatikus hozzárendelése prioritás alapján', + 'Overdue tasks for the project(s) "%s"' => 'Lejárt feladatok a(z) „%s” projektnél', 'Upload files' => 'Fájlok feltöltése', - 'Installed Plugins' => 'Installált plugin-ek', - 'Plugin Directory' => 'Plugin könyvtár', - 'Plugin installed successfully.' => 'A plugin installálása sikerült.', - 'Plugin updated successfully.' => 'A plugin módosítása sikerült.', - 'Plugin removed successfully.' => 'A plugin törlése sikerült.', - 'Subtask converted to task successfully.' => 'Az alfeladat feladattá történő átalakítása sikerült.', - 'Unable to convert the subtask.' => 'Az alfeladat átalakítása nem sikerült.', - 'Unable to extract plugin archive.' => 'A plugin archívum kibontása nem sikerült.', - 'Plugin not found.' => 'A plugin nem található.', - 'You don\'t have the permission to remove this plugin.' => 'Nincs joga ennek a plugin-nek az eltávolításához.', - 'Unable to download plugin archive.' => 'A plugin archívum letöltése nem sikerült.', - 'Unable to write temporary file for plugin.' => 'A plugin-hez nem sikerült egy átmeneti fájl létrehozása.', - 'Unable to open plugin archive.' => 'Nem sikerült a plugin archívum megnyitása.', - 'There is no file in the plugin archive.' => 'A plugin archívumban nincs egyetelen egy fájl sem.', + 'Installed Plugins' => 'Telepített bővítmények', + 'Plugin Directory' => 'Bővítmény könyvtár', + 'Plugin installed successfully.' => 'A bővítmény sikeresen telepítve.', + 'Plugin updated successfully.' => 'A bővítmény sikeresen frissítve.', + 'Plugin removed successfully.' => 'A bővítmény sikeresen eltávolítva.', + 'Subtask converted to task successfully.' => 'A részfeladat sikeresen átalakítva feladattá.', + 'Unable to convert the subtask.' => 'Nem lehet átalakítani a részfeladatot.', + 'Unable to extract plugin archive.' => 'Nem lehet kibontani a bővítmény archívumot.', + 'Plugin not found.' => 'A bővítmény nem található.', + 'You don\'t have the permission to remove this plugin.' => 'Nincs jogosultsága eltávolítani ezt a bővítményt.', + 'Unable to download plugin archive.' => 'Nem lehet letölteni a bővítmény archívumot.', + 'Unable to write temporary file for plugin.' => 'Nem lehet írni az átmeneti fájlt a bővítményhez.', + 'Unable to open plugin archive.' => 'Nem lehet megnyitni a bővítmény archívumot.', + 'There is no file in the plugin archive.' => 'Nincs fájl a bővítmény archívumban.', 'Create tasks in bulk' => 'Feladatok tömeges létrehozása', - 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Az Ön Kanboard példánya úgy lett konfigurálva, hogy ne lehessen plugin-eket installálni a felhasználói felületről.', - 'There is no plugin available.' => 'Nem áll plugin rendelkezésre.', - 'Install' => 'Installálás', - 'Update' => 'Módosítás', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'A Kanboard példánya úgy lett beállítva, hogy ne lehessen bővítményeket telepíteni a felhasználói felületről.', + 'There is no plugin available.' => 'Nincs elérhető bővítmény.', + 'Install' => 'Telepítés', + 'Update' => 'Frissítés', 'Up to date' => 'Naprakész', - 'Not available' => 'Nem áll rendelkezésre', - 'Remove plugin' => 'Plugin eltávolítása', - 'Do you really want to remove this plugin: "%s"?' => 'Valóban el kívánja távolítani ezt a plugin-t: "%s"?', - // 'Uninstall' => '', + 'Not available' => 'Nem érhető el', + 'Remove plugin' => 'Bővítmény eltávolítása', + 'Do you really want to remove this plugin: "%s"?' => 'Valóban el szeretné távolítani ezt a bővítményt: „%s”?', + 'Uninstall' => 'Eltávolítás', 'Listing' => 'Listázás', 'Metadata' => 'Metaadat', 'Manage projects' => 'Projektek kezelése', - 'Convert to task' => 'Feladattá történő átalakítás', - 'Convert sub-task to task' => 'Alfeladat feladattá történő átalakítása', - 'Do you really want to convert this sub-task to a task?' => 'Valóban feladattá akarja átalakítani ezt az alfeladatot?', - 'My task title' => 'A feladat címe', - 'Enter one task by line.' => 'Minden sorban egy feladatot adjon meg.', - 'Number of failed login:' => 'A sikertelen bejelentkezések száma:', - 'Account locked until:' => 'A számla zárolva a következő időpontig:', - // 'Email settings' => '', - // 'Email sender address' => '', - // 'Email transport' => '', - // 'Webhook token' => '', - // 'Project tags management' => '', - // 'Tag created successfully.' => '', - // 'Unable to create this tag.' => '', - // 'Tag updated successfully.' => '', - // 'Unable to update this tag.' => '', - // 'Tag removed successfully.' => '', - // 'Unable to remove this tag.' => '', - // 'Global tags management' => '', - // 'Tags' => '', - // 'Tags management' => '', - // 'Add new tag' => '', - // 'Edit a tag' => '', - // 'Project tags' => '', - // 'There is no specific tag for this project at the moment.' => '', - // 'Tag' => '', - // 'Remove a tag' => '', - // 'Do you really want to remove this tag: "%s"?' => '', - // 'Global tags' => '', - // 'There is no global tag at the moment.' => '', - // 'This field cannot be empty' => '', - // 'Close a task when there is no activity in an specific column' => '', - // '%s removed a subtask for the task #%d' => '', - // '%s removed a comment on the task #%d' => '', - // 'Comment removed on task #%d' => '', - // 'Subtask removed on task #%d' => '', - // 'Hide tasks in this column in the dashboard' => '', - // '%s removed a comment on the task %s' => '', - // '%s removed a subtask for the task %s' => '', - // 'Comment removed' => '', - // 'Subtask removed' => '', - // '%s set a new internal link for the task #%d' => '', - // '%s removed an internal link for the task #%d' => '', - // 'A new internal link for the task #%d have been defined' => '', - // 'Internal link removed for the task #%d' => '', - // '%s set a new internal link for the task %s' => '', - // '%s removed an internal link for the task %s' => '', - // 'Automatically set the due date on task creation' => '', - // 'Move the task to another column when closed' => '', - // 'Move the task to another column when not moved during a given period' => '', - // 'Dashboard for %s' => '', - // 'Tasks overview for %s' => '', - // 'Subtasks overview for %s' => '', - // 'Projects overview for %s' => '', - // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', - // 'Assign a color when the task is moved to a specific swimlane' => '', - // 'Assign a priority when the task is moved to a specific swimlane' => '', - // 'User unlocked successfully.' => '', - // 'Unable to unlock the user.' => '', - // 'Move a task to another swimlane' => '', - // 'Creator Name' => '', - // 'Time spent and estimated' => '', - // 'Move position' => '', - // 'Move task to another position on the board' => '', - // 'Insert before this task' => '', - // 'Insert after this task' => '', - // 'Unlock this user' => '', - // 'Custom Project Roles' => '', - // 'Add a new custom role' => '', - // 'Restrictions for the role "%s"' => '', - // 'Add a new project restriction' => '', - // 'Add a new drag and drop restriction' => '', - // 'Add a new column restriction' => '', - // 'Edit this role' => '', - // 'Remove this role' => '', - // 'There is no restriction for this role.' => '', - // 'Only moving task between those columns is permitted' => '', - // 'Close a task in a specific column when not moved during a given period' => '', - // 'Edit columns' => '', - // 'The column restriction has been created successfully.' => '', - // 'Unable to create this column restriction.' => '', - // 'Column restriction removed successfully.' => '', - // 'Unable to remove this restriction.' => '', - // 'Your custom project role has been created successfully.' => '', - // 'Unable to create custom project role.' => '', - // 'Your custom project role has been updated successfully.' => '', - // 'Unable to update custom project role.' => '', - // 'Custom project role removed successfully.' => '', - // 'Unable to remove this project role.' => '', - // 'The project restriction has been created successfully.' => '', - // 'Unable to create this project restriction.' => '', - // 'Project restriction removed successfully.' => '', - // 'You cannot create tasks in this column.' => '', - // 'Task creation is permitted for this column' => '', - // 'Closing or opening a task is permitted for this column' => '', - // 'Task creation is blocked for this column' => '', - // 'Closing or opening a task is blocked for this column' => '', - // 'Task creation is not permitted' => '', - // 'Closing or opening a task is not permitted' => '', - // 'New drag and drop restriction for the role "%s"' => '', - // 'People belonging to this role will be able to move tasks only between the source and the destination column.' => '', - // 'Remove a column restriction' => '', - // 'Do you really want to remove this column restriction: "%s" to "%s"?' => '', - // 'New column restriction for the role "%s"' => '', - // 'Rule' => '', - // 'Do you really want to remove this column restriction?' => '', - // 'Custom roles' => '', - // 'New custom project role' => '', - // 'Edit custom project role' => '', - // 'Remove a custom role' => '', - // 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '', - // 'There is no custom role for this project.' => '', - // 'New project restriction for the role "%s"' => '', - // 'Restriction' => '', - // 'Remove a project restriction' => '', - // 'Do you really want to remove this project restriction: "%s"?' => '', - // 'Duplicate to multiple projects' => '', - // 'This field is required' => '', - // 'Moving a task is not permitted' => '', - // 'This value must be in the range %d to %d' => '', - // 'You are not allowed to move this task.' => '', - // 'API User Access' => '', - // 'Preview' => '', - // 'Write' => '', - // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', - // 'No personal API access token registered.' => '', - // 'Your personal API access token is "%s"' => '', - // 'Remove your token' => '', - // 'Generate a new token' => '', - // 'Showing %d-%d of %d' => '', - // 'Outgoing Emails' => '', - // 'Add or change currency rate' => '', - // 'Reference currency: %s' => '', - // 'Add custom filters' => '', - // 'Export' => '', - // 'Add link label' => '', - // 'Incompatible Plugins' => '', - // 'Compatibility' => '', - // 'Permissions and ownership' => '', - // 'Priorities' => '', - // 'Close this window' => '', - // 'Unable to upload this file.' => '', - // 'Import tasks' => '', - // 'Choose a project' => '', - // 'Profile' => '', - // 'Application role' => '', - // '%d invitations were sent.' => '', - // '%d invitation was sent.' => '', - // 'Unable to create this user.' => '', - // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', - // 'Created at:' => '', - // 'Updated at:' => '', - // 'There is no custom filter.' => '', - // 'New User' => '', - // 'Authentication' => '', - // 'If checked, this user will use a third-party system for authentication.' => '', - // 'The password is necessary only for local users.' => '', - // 'You have been invited to register on Kanboard.' => '', - // 'Click here to join your team' => '', - // 'Invite people' => '', - // 'Emails' => '', - // 'Enter one email address by line.' => '', - // 'Add these people to this project' => '', - // 'Add this person to this project' => '', - // 'Sign-up' => '', - // 'Credentials' => '', - // 'New user' => '', - // 'This username is already taken' => '', - // 'A link to reset your password has been sent by email.' => '', - // 'Your profile must have a valid email address.' => '', - // 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '', - // 'TRL - Turkish Lira' => '', - // 'The project email is optional and could be used by several plugins.' => '', - // 'The project email must be unique across all projects' => '', - // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', - // 'Unable to upload files, check the permissions of your data folder.' => '', - // 'Another category with the same name exists in this project' => '', - // 'Comment sent by email successfully.' => '', - // 'Sent by email to [%s](mailto:%s) (%s)' => '', - // 'Unable to read uploaded file.' => '', - // 'Database uploaded successfully.' => '', - // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', - // 'Upload the database' => '', - // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', - // 'Database file' => '', - // 'Upload' => '', - // 'Remove this user from group' => '', - // 'Your project must have at least one active swimlane.' => '', - // 'Project: %s' => '', - // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'Convert to task' => 'Átalakítás feladattá', + 'Convert sub-task to task' => 'Részfeladat átalakítása feladattá', + 'Do you really want to convert this sub-task to a task?' => 'Valóban át szeretné alakítani ezt a részfeladatot feladattá?', + 'My task title' => 'Saját feladatcím', + 'Enter one task by line.' => 'Adjon meg soronként egy feladatot.', + 'Number of failed login:' => 'Sikertelen bejelentkezések száma:', + 'Account locked until:' => 'A fiók zárolva eddig:', + 'Email settings' => 'E-mail beállítások', + 'Email sender address' => 'E-mail küldőcíme', + 'Email transport' => 'E-mail átviteli módja', + 'Webhook token' => 'Webhurok token', + 'Project tags management' => 'Projektcímkék kezelése', + 'Tag created successfully.' => 'A címke sikeresen létrehozva.', + 'Unable to create this tag.' => 'Nem lehet létrehozni a címkét.', + 'Tag updated successfully.' => 'A címke sikeresen frissítve.', + 'Unable to update this tag.' => 'Nem lehet frissíteni a címkét.', + 'Tag removed successfully.' => 'A címke sikeresen eltávolítva.', + 'Unable to remove this tag.' => 'Nem lehet eltávolítani a címkét.', + 'Global tags management' => 'Globális címkék kezelése', + 'Tags' => 'Címkék', + 'Tags management' => 'Címkék kezelése', + 'Add new tag' => 'Új címke hozzáadása', + 'Edit a tag' => 'Címke szerkesztése', + 'Project tags' => 'Projektcímkék', + 'There is no specific tag for this project at the moment.' => 'Jelenleg nincs címke megadva ehhez a projekthez.', + 'Tag' => 'Címke', + 'Remove a tag' => 'Címke eltávolítása', + 'Do you really want to remove this tag: "%s"?' => 'Valóban el szeretné távolítani ezt a címkét: „%s”?', + 'Global tags' => 'Globális címkék', + 'There is no global tag at the moment.' => 'Jelenleg nincs globális címke.', + 'This field cannot be empty' => 'Ez a mező nem lehet üres', + 'Close a task when there is no activity in an specific column' => 'Feladat lezárása, ha nincs tevékenység egy adott oszlopban', + '%s removed a subtask for the task #%d' => '%s eltávolított egy részfeladatot a(z) #%d. feladatból', + '%s removed a comment on the task #%d' => '%s eltávolított egy megjegyzést a(z) #%d. feladatból', + 'Comment removed on task #%d' => 'Megjegyzés eltávolítva a(z) #%d. feladatból', + 'Subtask removed on task #%d' => 'Részfeladat eltávolítva a(z) #%d. feladatból', + 'Hide tasks in this column in the dashboard' => 'Feladatok elrejtése ebben az oszlopban a vezérlőpulton', + '%s removed a comment on the task %s' => '%s eltávolított egy megjegyzést a(z) %s feladatból', + '%s removed a subtask for the task %s' => '%s eltávolított egy részfeladatot a(z) %s feladatból', + 'Comment removed' => 'Megjegyzés eltávolítva', + 'Subtask removed' => 'Részfeladat eltávolítva', + '%s set a new internal link for the task #%d' => '%s beállított egy új belső hivatkozást a(z) #%d. feladathoz', + '%s removed an internal link for the task #%d' => '%s eltávolított egy belső hivatkozást a(z) #%d. feladatból', + 'A new internal link for the task #%d have been defined' => 'Új belső hivatkozás lett meghatározva a(z) #%d. feladathoz', + 'Internal link removed for the task #%d' => 'Belső hivatkozás eltávolítva a(z) #%d. feladatból', + '%s set a new internal link for the task %s' => '%s beállított egy új belső hivatkozást a(z) %s feladathoz', + '%s removed an internal link for the task %s' => '%s eltávolított egy belső hivatkozást a(z) %s feladatból', + 'Automatically set the due date on task creation' => 'A határidő automatikus beállítása a feladat létrehozásakor', + 'Move the task to another column when closed' => 'Feladat áthelyezése egy másik oszlopba, ha lezárják', + 'Move the task to another column when not moved during a given period' => 'Feladat áthelyezése egy másik oszlopba, ha nincs áthelyezve egy adott ideig', + 'Dashboard for %s' => '%s vezérlőpultja', + 'Tasks overview for %s' => 'Feladatok áttekintése: %s', + 'Subtasks overview for %s' => 'Részfeladatok áttekintése: %s', + 'Projects overview for %s' => 'Projektek áttekintése: %s', + 'Activity stream for %s' => '%s tevékenységfolyama', + 'Assign a color when the task is moved to a specific swimlane' => 'Szín hozzárendelése, ha a feladatot áthelyezik egy adott sávba', + 'Assign a priority when the task is moved to a specific swimlane' => 'Prioritás hozzárendelése, ha a feladatot áthelyezik egy adott sávba', + 'User unlocked successfully.' => 'A felhasználó sikeresen feloldva.', + 'Unable to unlock the user.' => 'Nem lehet feloldani a felhasználót.', + 'Move a task to another swimlane' => 'Feladat áthelyezése egy másik sávba', + 'Creator Name' => 'Létrehozó neve', + 'Time spent and estimated' => 'Eltöltött és becsült idő', + 'Move position' => 'Pozíció áthelyezése', + 'Move task to another position on the board' => 'Feladat áthelyezése egy másik helyre a táblán', + 'Insert before this task' => 'Beszúrás a feladat elé', + 'Insert after this task' => 'Beszúrás a feladat után', + 'Unlock this user' => 'Felhasználó feloldása', + 'Custom Project Roles' => 'Egyéni projektszerepek', + 'Add a new custom role' => 'Új egyéni szerep hozzáadása', + 'Restrictions for the role "%s"' => 'Korlátozások a(z) „%s” szerepnél', + 'Add a new project restriction' => 'Új projektkorlátozás hozzáadása', + 'Add a new drag and drop restriction' => 'Új fogd-és-vidd korlátozás hozzáadása', + 'Add a new column restriction' => 'Új oszlopkorlátozás hozzáadása', + 'Edit this role' => 'Szerep szerkesztése', + 'Remove this role' => 'Szerep eltávolítása', + 'There is no restriction for this role.' => 'Nincs korlátozás ennél a szerepnél.', + 'Only moving task between those columns is permitted' => 'Az oszlopok között csak áthelyezés megengedett', + 'Close a task in a specific column when not moved during a given period' => 'Feladat lezárása egy adott oszlopban, ha nem helyezték át egy adott ideig', + 'Edit columns' => 'Oszlopok szerkesztése', + 'The column restriction has been created successfully.' => 'Az oszlopkorlátozás sikeresen létrehozva.', + 'Unable to create this column restriction.' => 'Nem lehet létrehozni az oszlopkorlátozást.', + 'Column restriction removed successfully.' => 'Az oszlopkorlátozás sikeresen eltávolítva.', + 'Unable to remove this restriction.' => 'Nem lehet eltávolítani a korlátozást.', + 'Your custom project role has been created successfully.' => 'Az egyéni projektszerep sikeresen létrehozva.', + 'Unable to create custom project role.' => 'Nem lehet létrehozni az egyéni projektszerepet.', + 'Your custom project role has been updated successfully.' => 'Az egyéni projektszerep sikeresen frissítve.', + 'Unable to update custom project role.' => 'Nem lehet frissíteni az egyéni projektszerepet.', + 'Custom project role removed successfully.' => 'Az egyéni projektszerep sikeresen eltávolítva.', + 'Unable to remove this project role.' => 'Nem lehet eltávolítani a projektszerepet.', + 'The project restriction has been created successfully.' => 'A projektkorlátozás sikeresen létrehozva.', + 'Unable to create this project restriction.' => 'Nem lehet létrehozni a projektkorlátozást.', + 'Project restriction removed successfully.' => 'A projektkorlátozás sikeresen eltávolítva.', + 'You cannot create tasks in this column.' => 'Nem lehet feladatokat létrehozni ebben az oszlopban.', + 'Task creation is permitted for this column' => 'A feladat létrehozása engedélyezett ennél az oszlopnál', + 'Closing or opening a task is permitted for this column' => 'A feladat lezárása vagy megnyitása engedélyezett ennél az oszlopnál', + 'Task creation is blocked for this column' => 'A feladat létrehozása blokkolva van ennél az oszlopnál', + 'Closing or opening a task is blocked for this column' => 'A feladat lezárása vagy megnyitása blokkolva van ennél az oszlopnál', + 'Task creation is not permitted' => 'A feladat létrehozása nem engedélyezett', + 'Closing or opening a task is not permitted' => 'Feladat lezárása vagy megnyitása nem engedélyezett', + 'New drag and drop restriction for the role "%s"' => 'Új fogd-és-vidd korlátozás a(z) „%s” szerephez', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Az ehhez a szerephez tartozó emberek csak a forrás- és a céloszlopok között helyezhetnek át feladatokat.', + 'Remove a column restriction' => 'Oszlopkorlátozás eltávolítása', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Valóban el szeretné távolítani ezt az oszlopkorlátozást: „%s” erre: „%s”?', + 'New column restriction for the role "%s"' => 'Új oszlopkorlátozás a(z) „%s” szerephez', + 'Rule' => 'Szabály', + 'Do you really want to remove this column restriction?' => 'Valóban el szeretné távolítani ezt az oszlopkorlátozást?', + 'Custom roles' => 'Egyéni szerepek', + 'New custom project role' => 'Új egyéni projektszerep', + 'Edit custom project role' => 'Egyéni projektszerep szerkesztése', + 'Remove a custom role' => 'Egyéni szerep eltávolítása', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => 'Valóban el szeretné távolítani ezt az egyéni szerepet: „%s”? A szerephez rendelt összes ember projekttaggá válik.', + 'There is no custom role for this project.' => 'Nincs egyéni szerep ennél a projektnél.', + 'New project restriction for the role "%s"' => 'Új projektkorlátozás a(z) „%s” szerephez', + 'Restriction' => 'Korlátozás', + 'Remove a project restriction' => 'Projektkorlátozás eltávolítása', + 'Do you really want to remove this project restriction: "%s"?' => 'Valóban el szeretné távolítani ezt a projektkorlátozást: „%s”?', + 'Duplicate to multiple projects' => 'Másolás több projektbe', + 'This field is required' => 'Ez a mező kötelező', + 'Moving a task is not permitted' => 'A feladat áthelyezése nem engedélyezett', + 'This value must be in the range %d to %d' => 'Ennek az értéknek %d és %d közötti tartományban kell lennie', + 'You are not allowed to move this task.' => 'A feladat áthelyezése nem engedélyezett.', + 'API User Access' => 'API felhasználói hozzáférés', + 'Preview' => 'Előnézet', + 'Write' => 'Írás', + 'Write your text in Markdown' => 'Írja be a szöveget Markdown formátumban', + 'No personal API access token registered.' => 'Nincs személyes API hozzáférési token regisztrálva.', + 'Your personal API access token is "%s"' => 'A személyes API hozzáférési token: „%s”', + 'Remove your token' => 'Token eltávolítása', + 'Generate a new token' => 'Új token előállítása', + 'Showing %d-%d of %d' => '%d-%d / %d megjelenítése', + 'Outgoing Emails' => 'Kimenő e-mailek', + 'Add or change currency rate' => 'Devizaárfolyam hozzáadása vagy megváltoztatása', + 'Reference currency: %s' => 'Bázis pénznem: %s', + 'Add custom filters' => 'Egyéni szűrők hozzáadása', + 'Export' => 'Exportálás', + 'Add link label' => 'Hivatkozási címke hozzáadása', + 'Incompatible Plugins' => 'Összeférhetetlen bővítmények', + 'Compatibility' => 'Összeférhetőség', + 'Permissions and ownership' => 'Jogosultságok és tulajdonjog', + 'Priorities' => 'Prioritások', + 'Close this window' => 'Ablak bezárása', + 'Unable to upload this file.' => 'Nem lehet feltölteni a fájlt.', + 'Import tasks' => 'Feladatok importálása', + 'Choose a project' => 'Projekt kiválasztása', + 'Profile' => 'Profil', + 'Application role' => 'Alkalmazás szerep', + '%d invitations were sent.' => '%d meghívás elküldve.', + '%d invitation was sent.' => '%d meghívás elküldve.', + 'Unable to create this user.' => 'Nem lehet létrehozni a felhasználót.', + 'Kanboard Invitation' => 'Kanboard meghívás', + 'Visible on dashboard' => 'Látható a vezérlőpulton', + 'Created at:' => 'Létrehozva:', + 'Updated at:' => 'Frissítve:', + 'There is no custom filter.' => 'Nincs egyéni szűrő.', + 'New User' => 'Új felhasználó', + 'Authentication' => 'Hitelesítés', + 'If checked, this user will use a third-party system for authentication.' => 'Ha be van jelölve, akkor ez a felhasználó harmadik fél rendszerét fogja használni a hitelesítéshez.', + 'The password is necessary only for local users.' => 'A jelszó csak helyi felhasználóknak szükséges.', + 'You have been invited to register on Kanboard.' => 'Meghívták, hogy regisztráljon a Kanboardra.', + 'Click here to join your team' => 'Kattintson ide a csapathoz való csatlakozáshoz', + 'Invite people' => 'Emberek meghívása', + 'Emails' => 'E-mailek', + 'Enter one email address by line.' => 'Adjon meg soronként egy e-mail címet.', + 'Add these people to this project' => 'Az emberek hozzáadása a projekthez', + 'Add this person to this project' => 'A személy hozzáadása a projekthez', + 'Sign-up' => 'Regisztráció', + 'Credentials' => 'Hitelesítési adatok', + 'New user' => 'Új felhasználó', + 'This username is already taken' => 'Ez a felhasználónév már foglalt', + 'A link to reset your password has been sent by email.' => 'A jelszó visszaállításához szükséges hivatkozás elküldésre került e-mailben.', + 'Your profile must have a valid email address.' => 'A profiljának érvényes e-mail címmel kell rendelkeznie.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Sajnálatos módon nem tudjuk visszaállítani a jelszavát. Érvényes felhasználónevet adott meg? Van e-mail cím a profiljában?', + 'TRL - Turkish Lira' => 'TRL - török líra', + 'The project email is optional and could be used by several plugins.' => 'A projekt e-mail elhagyható, és több bővítmény is használhatja.', + 'The project email must be unique across all projects' => 'A projekt e-mailnek egyedinek kell lennie a projektek között', + 'The email configuration has been disabled by the administrator.' => 'Az e-mail beállításait letiltotta az adminisztrátor.', + 'Close this project' => 'Projekt bezárása', + 'Open this project' => 'Projekt megnyitása', + 'Close a project' => 'Projekt bezárása', + 'Do you really want to close this project: "%s"?' => 'Valóban le szeretné zárni ezt a projektet: „%s”?', + 'Reopen a project' => 'Projekt újranyitása', + 'Do you really want to reopen this project: "%s"?' => 'Valóban újra szeretné nyitni ezt a projektet: „%s”?', + 'This project is open' => 'A projekt nyitva van', + 'This project is closed' => 'A projekt le van zárva', + 'Unable to upload files, check the permissions of your data folder.' => 'Nem lehet feltölteni fájlokat. Ellenőrizze az adatkönyvtár jogosultságait.', + 'Another category with the same name exists in this project' => 'Már létezik egy ugyanilyen nevű kategória ebben a projektben', + 'Comment sent by email successfully.' => 'A megjegyzés sikeresen elküldve e-mailben.', + 'Sent by email to [%s](mailto:%s) (%s)' => 'E-mail küldve neki: [%s](mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'Nem lehet beolvasni a feltöltött fájlt.', + 'Database uploaded successfully.' => 'Az adatbázis sikeresen feltöltve.', + 'Task sent by email successfully.' => 'A feladat sikeresen elküldve e-mailben.', + 'There is no category in this project.' => 'Nincs kategória ebben a projektben.', + 'Send by email' => 'Küldés e-mailben', + 'Create and send a comment by email' => 'Megjegyzés létrehozása és küldése e-mailben', + 'Subject' => 'Tárgy', + 'Upload the database' => 'Az adatbázis feltöltése', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Feltöltheti az előzőleg letöltött Sqlite adatbázist (Gzip formátumban).', + 'Database file' => 'Adatbázisfájl', + 'Upload' => 'Feltöltés', + 'Your project must have at least one active swimlane.' => 'A projektnek legalább egy aktív sávval kell rendelkeznie.', + 'Project: %s' => 'Projekt: %s', + 'Automatic action not found: "%s"' => 'Az automatikus művelet nem található: „%s”', + '%d projects' => '%d projekt', + '%d project' => '%d projekt', + 'There is no project.' => 'Nincs projekt.', + 'Sort' => 'Rendezés', + 'Project ID' => 'Projektazonosító', + 'Project name' => 'Projektnév', + 'Public' => 'Nyilvános', + 'Private' => 'Személyes', + '%d tasks' => '%d feladat', + '%d task' => '%d feladat', + 'Task ID' => 'Feladatazonosító', + 'Assign automatically a color when due date is expired' => 'Szín automatikus hozzárendelése, ha a határidő lejárt', + 'Total score in this column across all swimlanes' => 'Összes pontszám ebben az oszlopban minden sávból', + 'HRK - Kuna' => 'HRK - horvát kuna', + 'ARS - Argentine Peso' => 'ARS - argentin peso', + 'COP - Colombian Peso' => 'COP - kolumbiai peso', + '%d groups' => '%d csoport', + '%d group' => '%d csoport', + 'Group ID' => 'Csoportazonosító', + 'External ID' => 'Külső azonosító', + '%d users' => '%d felhasználó', + '%d user' => '%d felhasználó', + 'Hide subtasks' => 'Részfeladatok elrejtése', + 'Show subtasks' => 'Részfeladatok megjelenítése', + 'Authentication Parameters' => 'Hitelesítési paraméterek', + 'API Access' => 'API hozzáférés', + 'No users found.' => 'Nem találhatók felhasználók.', + 'User ID' => 'Felhasználó-azonosító', + 'Notifications are activated' => 'Értesítések aktiválva', + 'Notifications are disabled' => 'Értesítések letiltva', + 'User disabled' => 'Felhasználó letiltva', + '%d notifications' => '%d értesítés', + '%d notification' => '%d értesítés', + 'There is no external integration installed.' => 'Nincs külső integráció telepítve.', + 'You are not allowed to update tasks assigned to someone else.' => 'Nem engedélyezett a valaki máshoz rendelt feladatok frissítése.', + 'You are not allowed to change the assignee.' => 'Nem engedélyezett a felelős megváltoztatása.', + 'Task suppression is not permitted' => 'A feladatok eltávolítása nem engedélyezett', + 'Changing assignee is not permitted' => 'A felelős megváltoztatása nem engedélyezett', + 'Update only assigned tasks is permitted' => 'Csak a hozzárendelt feladatok frissítése engedélyezett', + 'Only for tasks assigned to the current user' => 'Csak az aktuális felhasználóhoz rendelt feladatoknál', + 'My projects' => 'Saját projektek', + 'Your are not member of any project.' => 'Ön nem tagja egyetlen projektnek sem.', + 'My subtasks' => 'Saját részfeladatok', + '%d subtasks' => '%d részfeladat', + '%d subtask' => '%d részfeladat', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Az aktuális felhasználóhoz rendelt feladatok csak az engedélyezett oszlopok között helyezhetők át', + '[DUPLICATE]' => '[KETTŐZÖTT]', + 'DKK - Danish Krona' => 'DKK - dán korona', + 'Remove user from group' => 'Felhasználó eltávolítása a csoportból', + 'Assign the task to its creator' => 'Feladat hozzárendelése a létrehozójához', + 'This task was sent by email to "%s" with subject "%s".' => 'A feladat elküldésre került e-mailben ide: „%s”, a következő tárggyal: „%s”.', + 'Predefined Email Subjects' => 'Előre meghatározott e-mail tárgyak', + 'Write one subject by line.' => 'Írjon be soronként egy tárgyat.', + 'Create another link' => 'Másik hivatkozás létrehozása', + 'BRL - Brazilian Real' => 'BRL - brazil real', + 'Add a new Kanboard task' => 'Új Kanboard feladat hozzáadása', + 'Subtask not started' => 'A részfeladat nincs elindítva', + 'Subtask currently in progress' => 'A részfeladat jelenleg folyamatban van', + 'Subtask completed' => 'A részfeladat befejeződött', + 'Subtask added successfully.' => 'A részfeladat sikeresen hozzáadva.', + '%d subtasks added successfully.' => '%d részfeladat sikeresen hozzáadva.', + 'Enter one subtask by line.' => 'Adjon meg soronként egy részfeladatot.', + 'Predefined Contents' => 'Előre meghatározott tartalmak', + 'Predefined contents' => 'Előre meghatározott tartalmak', + 'Predefined Task Description' => 'Előre meghatározott feladatleírás', + 'Do you really want to remove this template? "%s"' => 'Valóban el szeretné távolítani ezt a sablont: „%s”?', + 'Add predefined task description' => 'Előre meghatározott feladatleírás hozzáadása', + 'Predefined Task Descriptions' => 'Előre meghatározott feladatleírások', + 'Template created successfully.' => 'A sablon sikeresen létrehozva.', + 'Unable to create this template.' => 'Nem lehet létrehozni a sablont.', + 'Template updated successfully.' => 'A sablon sikeresen frissítve.', + 'Unable to update this template.' => 'Nem lehet frissíteni a sablont.', + 'Template removed successfully.' => 'A sablon sikeresen eltávolítva.', + 'Unable to remove this template.' => 'Nem lehet eltávolítani a sablont.', + 'Template for the task description' => 'Sablon a feladatleíráshoz', + 'The start date is greater than the end date' => 'A kezdési dátum nagyobb mint a befejezési dátum', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index ab079f82..6f9f5d02 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Masuk', 'Users' => 'Pengguna', - 'No user' => 'Tidak ada pengguna', 'Forbidden' => 'Terlarang', 'Access Forbidden' => 'Akses Dilarang', 'Edit user' => 'Edit pengguna', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Sub-tugas berhasil diperbarui.', 'Unable to update your sub-task.' => 'Tidak dapat memperbarui sub-tugas Anda.', 'Unable to create your sub-task.' => 'Tidak dapat membuat sub-tugas Anda.', - 'Sub-task added successfully.' => 'Sub-tugas berhasil dibuat.', 'Maximum size: ' => 'Ukuran maksimum: ', 'Display another project' => 'Lihat proyek lain', 'Created by %s' => 'Dibuat oleh %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Arus aktifitas', 'Dashboard' => 'Dasbor', 'Confirmation' => 'Konfirmasi', - 'Allow everybody to access to this project' => 'Izinkan semua orang untuk mengakses proyek ini', - 'Everybody have access to this project.' => 'Semua orang mendapat akses untuk proyek ini.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Buat komentar dari penyedia eksternal', 'Project management' => 'Manajemen proyek', - 'My projects' => 'Proyek saya', 'Columns' => 'Kolom', 'Task' => 'Tugas', - 'Your are not member of any project.' => 'Anda bukan anggota dari proyek apapun.', 'Percentage' => 'Persentasi', 'Number of tasks' => 'Jumlah dari tugas', 'Task distribution' => 'Pembagian tugas', 'Analytics' => 'Analitik', 'Subtask' => 'Sub-tugas', - 'My subtasks' => 'Sub-tugas saya', 'User repartition' => 'Partisi ulang pengguna', 'Clone this project' => 'Klon proyek ini', 'Column removed successfully.' => 'Kolom berhasil dihapus.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Bahasa:', 'Timezone:' => 'Zona waktu:', 'All columns' => 'Semua kolom', - 'Calendar' => 'Kalender', 'Next' => 'Selanjutnya', '#%d' => '#%d', 'All swimlanes' => 'Semua swimlane', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Tidak dapat menambahkan nilai tukar mata uang', 'Webhook URL' => 'URL Webhook', '%s removed the assignee of the task %s' => '%s menghapus penugasan dari tugas %s', - 'Enable Gravatar images' => 'Aktifkan gambar Gravatar', 'Information' => 'Informasi', 'Check two factor authentication code' => 'Cek dua faktor kode otentifikasi', 'The two factor authentication code is not valid.' => 'Kode dua faktor kode otentifikasi tidak sesuai.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Saat tugas dipindahkan dari kolom pertama', 'When task is moved to last column' => 'Saat tugas dipindahkan ke kolom terakhir', 'Year(s)' => 'Tahun', - 'Calendar settings' => 'Pengaturan kalender', - 'Project calendar view' => 'Tampilan kalender proyek', 'Project settings' => 'Pengaturan proyek', - 'Show subtasks based on the time tracking' => 'Tampilkan sub-tugas berdasarkan pelacakan waktu', - 'Show tasks based on the creation date' => 'Tampilkan tugas berdasarkan tanggal pembuatan', - 'Show tasks based on the start date' => 'Tampilkan tugas berdasarkan tanggal mulai', - 'Subtasks time tracking' => 'Pelacakan waktu sub-tugas', - 'User calendar view' => 'Tampilan kalender pengguna', 'Automatically update the start date' => 'Otomatis memperbarui tanggal permulaan', 'iCal feed' => 'Umpan iCal', 'Preferences' => 'Preferensi', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Pemberitahuan', '%s moved the task #%d to the first swimlane' => '%s memindahkan tugas #%d ke swimlane pertama', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s memindahkan tugas %s ke swimlane pertama', '%s moved the task %s to the swimlane "%s"' => '%s memindahkan tugas %s ke swimlane "%s"', 'This report contains all subtasks information for the given date range.' => 'Laporan ini berisi semua informasi sub-tugas untuk rentang tanggal tertentu.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Hentikan timer', 'Start timer' => 'Mulai timer', 'My activity stream' => 'Aliran kegiatan saya', - 'My calendar' => 'Kalender saya', 'Search tasks' => 'Cari tugas', 'Reset filters' => 'Reset saringan', 'My tasks due tomorrow' => 'Tugas saya yang berakhir besok', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Ringkasan', 'Board/Calendar/List view' => 'Tampilan Papan/Kalender/Daftar', 'Switch to the board view' => 'Beralih ke tampilan papan', - 'Switch to the calendar view' => 'Beralih ke tampilan kalender', 'Switch to the list view' => 'Beralih ke tampilan daftar', 'Go to the search/filter box' => 'Pergi ke kotak pencarian/saringan', 'There is no activity yet.' => 'Belum ada aktifitas.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Lisensi:', 'License' => 'Lisensi', 'Enter the text below' => 'Masukkan teks di bawah', - 'Sort by position' => 'Urutkan berdasarkan posisi', - 'Sort by date' => 'Urutkan berdasarkan tanggal', - 'Add task' => 'Tambah tugas', 'Start date:' => 'Tanggal mulai:', 'Due date:' => 'Batas waktu:', - 'There is no start date or due date for this task.' => 'Tidak ada tanggal mulai dan batas waktu untuk tugas ini.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Memindahkan atau mengubah ukuran tugas anda akan mengubah tanggal mulai dan batas waktu dari tugas ini.', - 'There is no task in your project.' => 'Tidak ada tugas didalam proyek anda.', - 'Gantt chart' => 'Grafik Gantt', 'People who are project managers' => 'Orang-orang yang menjadi manajer proyek', 'People who are project members' => 'Orang-orang yang menjadi anggota proyek', 'NOK - Norwegian Krone' => 'NOK - Krone Norwegia', @@ -763,22 +737,15 @@ return array( 'Members' => 'Anggota', 'Shared project' => 'Proyek bersama', 'Project managers' => 'Manajer proyek', - 'Gantt chart for all projects' => 'Grafik Gantt untuk semua proyek', 'Projects list' => 'Daftar proyek', - 'Gantt chart for this project' => 'Grafik Gantt untuk proyek ini', - 'Project board' => 'Papan proyek', 'End date:' => 'Waktu berakhir:', - 'There is no start date or end date for this project.' => 'Tidak ada waktu mulai atau waktu berakhir untuk proyek ini', - 'Projects Gantt chart' => 'Grafik Gantt proyek', 'Change task color when using a specific task link' => 'Ganti warna tugas ketika menggunakan tautan tugas yang spesifik', 'Task link creation or modification' => 'Tautan pembuatan atau modifikasi tugas ', 'Milestone' => 'Milestone', 'Documentation: %s' => 'Dokumentasi: %s', - 'Switch to the Gantt chart view' => 'Beralih ke tampilan grafik Gantt', 'Reset the search/filter box' => 'Reset kotak pencarian/saringan', 'Documentation' => 'Dokumentasi', 'Table of contents' => 'Daftar isi', - 'Gantt' => 'Gantt', 'Author' => 'Penulis', 'Version' => 'Versi', 'Plugins' => 'Plugin', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Tidak ada pengguna yang tersedia', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Anda yakin mau menghapus pengguna "%s" dari grup "%s"?', 'There is no group.' => 'Tidak ada grup', - 'External Id' => 'ID Eksternal', 'Add group member' => 'Tambah anggota grup', 'Do you really want to remove this group: "%s"?' => 'Anda yakin mau menghapus grup ini: "%s"?', 'There is no user in this group.' => 'Tidak ada pengguna dalam grup ini', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Prioritas default', 'Lowest priority' => 'Prioritas terendah', 'Highest priority' => 'Prioritas tertinggi', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Jika anda meletakkan nol untuk prioritas rendah dan tinggi, fitur ini akan dinonaktifkan.', 'Close a task when there is no activity' => 'Tutup tugas jika tidak ada aktifitas', 'Duration in days' => 'Durasi dalam hari', 'Send email when there is no activity on a task' => 'Kirim email jika tidak ada aktifitas dalam tugas', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Ringkasan sub-tugas untuk %s', 'Projects overview for %s' => 'Ringkasan proyek untuk %s', 'Activity stream for %s' => 'Arus aktivitas untuk %s', - 'Calendar for %s' => 'Kalender untuk %s', - 'Notifications for %s' => 'Notifikasi untuk %s', 'Assign a color when the task is moved to a specific swimlane' => 'Berikan warna saat tugas dipindahkan ke swimlane tertentu', 'Assign a priority when the task is moved to a specific swimlane' => 'Berikan prioritas saat tugas dipindahkan ke swimlane tertentu', 'User unlocked successfully.' => 'Berhasil membuka blokir pengguna.', @@ -1241,7 +1204,6 @@ return array( 'Preview' => 'Pratinjau', 'Write' => 'Tulis', 'Write your text in Markdown' => 'Tuliskan teks Anda di Markdown', - 'New External Task: %s' => 'Tugas Eksternal Baru: %s', 'No personal API access token registered.' => 'Tidak ada token akses API personal yang terdaftar.', 'Your personal API access token is "%s"' => 'Token akses API personal Anda adalah "%s"', 'Remove your token' => 'Hapus token Anda', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index 727d8237..b7e11f75 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Amministratore', 'Sign in' => 'Accedi', 'Users' => 'Utenti', - 'No user' => 'Nessun utente', 'Forbidden' => 'Vietato', 'Access Forbidden' => 'Accesso vietato', 'Edit user' => 'Modifica un utente', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Sotto-task aggiornato con successo.', 'Unable to update your sub-task.' => 'Impossibile aggiornare il tuo sotto-task.', 'Unable to create your sub-task.' => 'Impossibile creare il tuo sotto-task.', - 'Sub-task added successfully.' => 'Sotto-task aggiunto con successo.', 'Maximum size: ' => 'Dimensioni massime: ', 'Display another project' => 'Mostra un altro progetto', 'Created by %s' => 'Creato da %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Flusso attività', 'Dashboard' => 'Bacheca', 'Confirmation' => 'Conferma', - 'Allow everybody to access to this project' => 'Abilita tutti ad accedere a questo progetto', - 'Everybody have access to this project.' => 'Tutti hanno accesso a questo progetto.', // 'Webhooks' => '', // 'API' => '', 'Create a comment from an external provider' => 'Crea un commit da un provider esterno', 'Project management' => 'Gestione progetti', - 'My projects' => 'I miei progetti', 'Columns' => 'Colonne', 'Task' => 'Task', - 'Your are not member of any project.' => 'Non sei membro di alcun progetto.', 'Percentage' => 'Percentuale', 'Number of tasks' => 'Numero di task', 'Task distribution' => 'Distribuzione dei task', // 'Analytics' => '', 'Subtask' => 'Sotto-task', - 'My subtasks' => 'I miei sotto-task', 'User repartition' => 'Ripartizione per utente', 'Clone this project' => 'Clona questo progetto', 'Column removed successfully.' => 'Colonna rimossa con successo', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Lingua', 'Timezone:' => 'Fuso Orario', 'All columns' => 'Tutte le colonne', - 'Calendar' => 'Calendario', 'Next' => 'Prossimo', // '#%d' => '', 'All swimlanes' => 'Tutte le corsie', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Impossibile aggiungere questo tasso di cambio.', 'Webhook URL' => 'URL Webhook', '%s removed the assignee of the task %s' => '%s rimuove l\'assegnatario del task %s', - 'Enable Gravatar images' => 'Abilita immagini Gravatar', 'Information' => 'Informazioni', 'Check two factor authentication code' => 'Controlla il codice di autenticazione "two-factor"', 'The two factor authentication code is not valid.' => 'Il codice di autenticazione "two-factor" non è valido', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Quando un task è spostato dalla prima colonna', 'When task is moved to last column' => 'Quando un task è spostato nell\'ultima colonna', 'Year(s)' => 'Anno/i', - 'Calendar settings' => 'Impostazioni del calendario', - 'Project calendar view' => 'Vista di progetto a calendario', 'Project settings' => 'Impostazioni di progetto', - 'Show subtasks based on the time tracking' => 'Mostra i sotto-task in base al time tracking', - 'Show tasks based on the creation date' => 'Mostra i task in base alla data di creazione', - 'Show tasks based on the start date' => 'Mostra i task in base alla data di inizio', - 'Subtasks time tracking' => 'Time tracking per i sotto-task', - 'User calendar view' => 'Vista utente a calendario', 'Automatically update the start date' => 'Aggiorna automaticamente la data di inizio', 'iCal feed' => 'feed iCal', 'Preferences' => 'Preferenze', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Notifica', '%s moved the task #%d to the first swimlane' => '%s ha spostato il task #%d nella prima corsia', 'Swimlane' => 'Corsia', - // 'Gravatar' => '', '%s moved the task %s to the first swimlane' => '%s ha spostato il task %s nella prima corsia', '%s moved the task %s to the swimlane "%s"' => '%s ha spostato il task %s nella corsia %s', 'This report contains all subtasks information for the given date range.' => 'Questo report contiente tutte le informazioni sui sotto-task nell\'arco temporale indicato.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Ferma il timer', 'Start timer' => 'Avvia il timer', 'My activity stream' => 'Il mio flusso attività', - 'My calendar' => 'Il mio calendario', 'Search tasks' => 'Ricerca task', 'Reset filters' => 'Annulla filtri', 'My tasks due tomorrow' => 'I miei task da completare per domani', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Panoramica', 'Board/Calendar/List view' => 'Vista Bacheca/Calendario/Lista', 'Switch to the board view' => 'Passa alla vista "bacheca"', - 'Switch to the calendar view' => 'Passa alla vista "calendario"', 'Switch to the list view' => 'Passa alla vista "elenco"', 'Go to the search/filter box' => 'Vai alla casella di ricerca/filtro', 'There is no activity yet.' => 'Non è presente ancora nessuna attività.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Licenza:', 'License' => 'Licenza', 'Enter the text below' => 'Inserisci il testo qui sotto', - 'Sort by position' => 'Ordina per posizione', - 'Sort by date' => 'Ordina per data', - 'Add task' => 'Aggiungi task', 'Start date:' => 'Data di inizio:', 'Due date:' => 'Data di completamento:', - 'There is no start date or due date for this task.' => 'Nessuna data di inizio o di scadenza per questo task.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Spostando o ridimensionado un task ne modifca la data di inizio e di scadenza.', - 'There is no task in your project.' => 'Non ci sono task nel tuo progetto.', - 'Gantt chart' => 'Grafici Gantt', 'People who are project managers' => 'Persone che sono manager di progetto', 'People who are project members' => 'Persone che sono membri di progetto', 'NOK - Norwegian Krone' => 'NOK - Corone norvegesi', @@ -763,22 +737,15 @@ return array( 'Members' => 'Membri', 'Shared project' => 'Progetto condiviso', 'Project managers' => 'Manager di progetto', - 'Gantt chart for all projects' => 'Grafico Gantt per tutti i progetti', 'Projects list' => 'Elenco progetti', - 'Gantt chart for this project' => 'Grafico Gantt per questo progetto', - 'Project board' => 'Bacheca del progetto', 'End date:' => 'Data di fine:', - 'There is no start date or end date for this project.' => 'Non è prevista una data di inizio o fine per questo progetto.', - 'Projects Gantt chart' => 'Grafico Gantt dei progetti', 'Change task color when using a specific task link' => 'Cambia colore del task quando si un utilizza una determinata relazione di task', 'Task link creation or modification' => 'Creazione o modifica di relazione di task', // 'Milestone' => '', 'Documentation: %s' => 'Documentazione: %s', - 'Switch to the Gantt chart view' => 'Passa alla vista Grafico Gantt', 'Reset the search/filter box' => 'Resetta la riceca/filtro', 'Documentation' => 'Documentazione', 'Table of contents' => 'Indice dei contenuti', - 'Gantt' => 'Gantt', 'Author' => 'Autore', 'Version' => 'Versione', 'Plugins' => 'Plugin', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Nessun utente disponibile.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Vuoi davvero rimuovere l\'utente "%s" dal gruppo "%s"?', 'There is no group.' => 'Nessun gruppo presente', - 'External Id' => 'Id esterno', 'Add group member' => 'Aggiungi un membro del gruppo', 'Do you really want to remove this group: "%s"?' => 'Vuoi davvero rimuovere questo gruppo: "%s"?', 'There is no user in this group.' => 'Nessun utente in questo gruppo.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Priorità predefinita', 'Lowest priority' => 'Priorità minima', 'Highest priority' => 'Priorità massima', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Se imposti a zero la priorità massima e minima, questa funzionalità sarà disabilitata.', 'Close a task when there is no activity' => 'Chiudi un task quando non c\'è nessuna attività', 'Duration in days' => 'Durata in giorni', 'Send email when there is no activity on a task' => 'Invia un\'email quando non c\'è attività sul task', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Panoramica tasks per %s', 'Projects overview for %s' => 'Panoramica progetti per %s', 'Activity stream for %s' => 'Flusso attività per %s', - 'Calendar for %s' => 'Calendario per %s', - 'Notifications for %s' => 'Notifiche per %s', 'Assign a color when the task is moved to a specific swimlane' => 'Assegna un colore quando il task viene spostato su una specifica swimlane', 'Assign a priority when the task is moved to a specific swimlane' => 'Assegna una priorità quando il task viene spostato su una specifica swimlane', 'User unlocked successfully.' => 'Utente sbloccato con successo.', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index a4e571eb..69162e2a 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -1,11 +1,11 @@ <?php return array( - // 'number.decimals_separator' => '', - // 'number.thousands_separator' => '', + 'number.decimals_separator' => '小数点の区切り記号', + 'number.thousands_separator' => '桁の区切り記号', 'None' => 'なし', - 'Edit' => '変更', - 'Remove' => '削除する', + 'Edit' => '編集', + 'Remove' => '削除', 'Yes' => 'はい', 'No' => 'いいえ', 'cancel' => 'キャンセル', @@ -17,35 +17,34 @@ return array( 'Red' => 'レッド', 'Orange' => 'オレンジ', 'Grey' => 'グレー', - // 'Brown' => '', - // 'Deep Orange' => '', - // 'Dark Grey' => '', - // 'Pink' => '', - // 'Teal' => '', - // 'Cyan' => '', - // 'Lime' => '', - // 'Light Green' => '', - // 'Amber' => '', + 'Brown' => 'ブラウン', + 'Deep Orange' => 'ディープオレンジ', + 'Dark Grey' => 'ダークグレー', + 'Pink' => 'ピンク', + 'Teal' => 'ティール', + 'Cyan' => 'シアン', + 'Lime' => 'ライム', + 'Light Green' => 'ライトグリーン', + 'Amber' => 'アンバー', 'Save' => '保存', 'Login' => 'ログイン', - 'Official website:' => '公式 Web サイト:', + 'Official website:' => '公式 Webサイト:', 'Unassigned' => '担当なし', 'View this task' => 'このタクスを見る', - 'Remove user' => 'ユーザの削除', - 'Do you really want to remove this user: "%s"?' => 'ユーザ「%s」を本当に削除しますか?', - 'All users' => 'すべてのユーザ', - 'Username' => 'ユーザ名', + 'Remove user' => 'ユーザーの削除', + 'Do you really want to remove this user: "%s"?' => 'ユーザー「%s」を削除しますか?', + 'All users' => 'すべてのユーザー', + 'Username' => 'ユーザー名', 'Password' => 'パスワード', - 'Administrator' => '管理者', + 'Administrator' => 'システム管理者', 'Sign in' => 'ログイン', - 'Users' => 'ユーザ', - 'No user' => 'ユーザがいません', + 'Users' => 'ユーザー', 'Forbidden' => 'アクセス拒否', 'Access Forbidden' => 'アクセスが拒否されました', - 'Edit user' => 'ユーザを変更する', + 'Edit user' => 'ユーザーを編集する', 'Logout' => 'ログアウト', - 'Bad username or password' => 'ユーザ名またはパスワードが違います。', - 'Edit project' => 'プロジェクトを変更する', + 'Bad username or password' => 'ユーザー名またはパスワードが違います', + 'Edit project' => 'プロジェクトを編集', 'Name' => '名前', 'Projects' => 'プロジェクト', 'No project' => 'プロジェクトがありません', @@ -59,48 +58,48 @@ return array( 'Unable to update this board.' => 'ボードを更新できませんでした', 'Disable' => '無効にする', 'Enable' => '有効にする', - 'New project' => 'プロジェクトを作る', - 'Do you really want to remove this project: "%s"?' => 'プロジェクト「%s」を本当に削除しますか?', + 'New project' => 'プロジェクト作成', + 'Do you really want to remove this project: "%s"?' => 'プロジェクト「%s」を削除しますか?', 'Remove project' => 'プロジェクトの削除', - 'Edit the board for "%s"' => 'ボード「%s」を変更する', + 'Edit the board for "%s"' => 'ボード「%s」を編集', 'Add a new column' => 'カラムの追加', 'Title' => 'タイトル', 'Assigned to %s' => '%sが担当', 'Remove a column' => 'カラムの削除', - 'Unable to remove this column.' => 'カラムを削除できませんでした。', + 'Unable to remove this column.' => 'カラムを削除できませんでした', 'Do you really want to remove this column: "%s"?' => 'カラム「%s」を削除しますか?', 'Settings' => '設定', - 'Application settings' => 'アプリケーションの設定', + 'Application settings' => 'アプリケーション設定', 'Language' => '言語', - 'Webhook token:' => 'Webhook トークン:', - 'API token:' => 'API トークン:', - 'Database size:' => 'データベースのサイズ:', + 'Webhook token:' => 'Webhook トークン:', + 'API token:' => 'API トークン:', + 'Database size:' => 'データベースのサイズ:', 'Download the database' => 'データベースのダウンロード', 'Optimize the database' => 'データベースの最適化', '(VACUUM command)' => '(VACUUM コマンド)', '(Gzip compressed Sqlite file)' => '(GZip コマンドで圧縮された Sqlite ファイル)', - 'Close a task' => 'タスクをクロースする', + 'Close a task' => 'タスクを完了', 'Column' => 'カラム', 'Color' => '色', 'Assignee' => '担当', - 'Create another task' => '続けて別のタスクを追加する', - 'New task' => 'タスクを追加する', - 'Open a task' => 'タスクをオープンする', - 'Do you really want to open this task: "%s"?' => 'タスク「%s」をオープンしますか?', + 'Create another task' => '続けて別のタスクを追加', + 'New task' => 'タスクを追加', + 'Open a task' => 'タスクを開く', + 'Do you really want to open this task: "%s"?' => 'タスク「%s」を作成しますか?', 'Back to the board' => 'ボードに戻る', 'There is nobody assigned' => '担当者がいません', - 'Column on the board:' => 'カラム: ', - 'Close this task' => 'タスクをクローズする', - 'Open this task' => 'タスクをオープンする', + 'Column on the board:' => 'カラム:', + 'Close this task' => 'タスクを完了', + 'Open this task' => 'このタスクを開く', 'There is no description.' => '説明がありません', - 'Add a new task' => 'タスクを追加する', - 'The username is required' => 'ユーザ名が必要です', + 'Add a new task' => 'タスクを追加', + 'The username is required' => 'ユーザー名が必要です', 'The maximum length is %d characters' => '最大 %d 文字です', 'The minimum length is %d characters' => '最小 %d 文字必要です', 'The password is required' => 'パスワードが必要です', 'This value must be an integer' => '整数で入力してください', - 'The username must be unique' => 'ユーザ名がすでに使用されています', - 'The user id is required' => 'ユーザ ID が必要です', + 'The username must be unique' => 'ユーザー名がすでに使用されています', + 'The user id is required' => 'ユーザー ID が必要です', 'Passwords don\'t match' => 'パスワードが一致しません', 'The confirmation is required' => '確認用のパスワードを入力してください', 'The project is required' => 'プロジェクトが必要です', @@ -108,38 +107,38 @@ return array( 'The project id is required' => 'プロジェクト ID が必要です', 'The project name is required' => 'プロジェクト名が必要です', 'The title is required' => 'タイトルが必要です', - 'Settings saved successfully.' => '設定を保存しました。', - 'Unable to save your settings.' => '設定の保存に失敗しました。', - 'Database optimization done.' => 'データベースの最適化が終わりました。', - 'Your project have been created successfully.' => 'プロジェクトを作成しました。', - 'Unable to create your project.' => 'プロジェクトの作成に失敗しました。', - 'Project updated successfully.' => 'プロジェクトを更新しました。', - 'Unable to update this project.' => 'プロジェクトの更新に失敗しました。', - 'Unable to remove this project.' => 'プロジェクトの削除に失敗しました。', - 'Project removed successfully.' => 'プロジェクトを削除しました。', - 'Project activated successfully.' => 'プロジェクトを有効にしました。', - 'Unable to activate this project.' => 'プロジェクトの有効にできませんでした。', - 'Project disabled successfully.' => 'プロジェクトを無効にしました。', - 'Unable to disable this project.' => 'プロジェクトの無効にできませんでした。', - 'Unable to open this task.' => 'タスクのオープンに失敗しました。', - 'Task opened successfully.' => 'タスクをオープンしました。', - 'Unable to close this task.' => 'タスクのクローズに失敗しました。', - 'Task closed successfully.' => 'タスクをクローズしました。', - 'Unable to update your task.' => 'タスクの更新に失敗しました。', - 'Task updated successfully.' => 'タスクを更新しました。', - 'Unable to create your task.' => 'タスクの追加に失敗しました。', - 'Task created successfully.' => 'タスクを追加しました。', - 'User created successfully.' => 'ユーザを追加しました。', - 'Unable to create your user.' => 'ユーザの追加に失敗しました。', - 'User updated successfully.' => 'ユーザを更新しました。', - 'User removed successfully.' => 'ユーザを削除しました。', - 'Unable to remove this user.' => 'ユーザの削除に失敗しました。', - 'Board updated successfully.' => 'ボードを更新しました。', + 'Settings saved successfully.' => '設定を保存しました', + 'Unable to save your settings.' => '設定の保存に失敗しました', + 'Database optimization done.' => 'データベースの最適化が終わりました', + 'Your project have been created successfully.' => 'プロジェクトを作成しました', + 'Unable to create your project.' => 'プロジェクトの作成に失敗しました', + 'Project updated successfully.' => 'プロジェクトを更新しました', + 'Unable to update this project.' => 'プロジェクトの更新に失敗しました', + 'Unable to remove this project.' => 'プロジェクトの削除に失敗しました', + 'Project removed successfully.' => 'プロジェクトを削除しました', + 'Project activated successfully.' => 'プロジェクトを有効にしました', + 'Unable to activate this project.' => 'プロジェクトの有効にできませんでした', + 'Project disabled successfully.' => 'プロジェクトを無効にしました', + 'Unable to disable this project.' => 'プロジェクトの無効にできませんでした', + 'Unable to open this task.' => 'タスクの作成に失敗しました', + 'Task opened successfully.' => 'タスクを作成しました', + 'Unable to close this task.' => 'タスクの完了に失敗しました', + 'Task closed successfully.' => 'タスクを完了しました', + 'Unable to update your task.' => 'タスクの更新に失敗しました', + 'Task updated successfully.' => 'タスクを更新しました', + 'Unable to create your task.' => 'タスクの追加に失敗しました', + 'Task created successfully.' => 'タスクを追加しました', + 'User created successfully.' => 'ユーザーを追加しました', + 'Unable to create your user.' => 'ユーザーの追加に失敗しました', + 'User updated successfully.' => 'ユーザーを更新しました', + 'User removed successfully.' => 'ユーザーを削除しました', + 'Unable to remove this user.' => 'ユーザーの削除に失敗しました', + 'Board updated successfully.' => 'ボードを更新しました', 'Ready' => 'Ready', 'Backlog' => 'Backlog', 'Work in progress' => 'Work in progress', 'Done' => 'Done', - 'Application version:' => 'アプリケーションのバージョン:', + 'Application version:' => 'アプリケーションのバージョン:', 'Id' => 'ID', 'Public link' => '公開アクセス用リンク', 'Timezone' => 'タイムゾーン', @@ -148,48 +147,48 @@ return array( 'Complexity' => '複雑さ', 'Task limit' => 'タスク数制限', 'Task count' => 'タスク数', - 'User' => 'ユーザ', + 'User' => 'ユーザー', 'Comments' => 'コメント', 'Comment is required' => 'コメントを入力してください', - 'Comment added successfully.' => 'コメントを追加しました。', - 'Unable to create your comment.' => 'コメントの追加に失敗しました。', + 'Comment added successfully.' => 'コメントを追加しました', + 'Unable to create your comment.' => 'コメントの追加に失敗しました', 'Due Date' => '期限', 'Invalid date' => '日付が無効です', - 'Automatic actions' => '自動アクションを管理する', - 'Your automatic action have been created successfully.' => '自動アクションを作成しました。', - 'Unable to create your automatic action.' => '自動アクションの作成に失敗しました。', + 'Automatic actions' => '自動アクションの管理', + 'Your automatic action have been created successfully.' => '自動アクションを作成しました', + 'Unable to create your automatic action.' => '自動アクションの作成に失敗しました', 'Remove an action' => '自動アクションの削除', - 'Unable to remove this action.' => '自動アクションの削除に失敗しました。', - 'Action removed successfully.' => '自動アクションの削除に成功しました。', + 'Unable to remove this action.' => '自動アクションの削除に失敗しました', + 'Action removed successfully.' => '自動アクションの削除に成功しました', 'Automatic actions for the project "%s"' => 'プロジェクト「%s」の自動アクション', 'Add an action' => '自動アクションの追加', 'Event name' => 'イベント名', 'Action' => 'アクション', 'Event' => 'イベント', - 'When the selected event occurs execute the corresponding action.' => '選択されたイベントが発生した時、対応するアクションを実行する。', + 'When the selected event occurs execute the corresponding action.' => '選択されたイベントが発生した時、対応するアクションを実行', 'Next step' => '次のステップ', 'Define action parameters' => 'アクションのパラメーター', 'Do you really want to remove this action: "%s"?' => '自動アクション「%s」を削除しますか?', 'Remove an automatic action' => '自動アクションの削除', - 'Assign the task to a specific user' => 'タスクの担当者を割り当てる', - 'Assign the task to the person who does the action' => 'アクションを起こしたユーザを担当者にする', - 'Duplicate the task to another project' => '別のプロジェクトにタスクを複製する', - 'Move a task to another column' => 'タスクを別のカラムに移動する', + 'Assign the task to a specific user' => 'タスクの担当者を割当てる', + 'Assign the task to the person who does the action' => 'アクションを起こしたユーザーを担当者にする', + 'Duplicate the task to another project' => '別のプロジェクトにタスクを複製', + 'Move a task to another column' => 'タスクを別のカラムに移動', 'Task modification' => 'タスクの変更', 'Task creation' => 'タスクを作る', - 'Closing a task' => 'タスクをクローズする', - 'Assign a color to a specific user' => '色をユーザに割り当てる', + 'Closing a task' => 'タスクを完了', + 'Assign a color to a specific user' => '色をユーザーに割当てる', 'Position' => '位置', - 'Duplicate to another project' => '別のプロジェクトに複製する', - 'Duplicate' => '複製する', + 'Duplicate to another project' => '別プロジェクトに複製', + 'Duplicate' => '複製', 'Link' => 'リンク', - 'Comment updated successfully.' => 'コメントを更新しました。', - 'Unable to update your comment.' => 'コメントの更新に失敗しました。', - 'Remove a comment' => 'コメントを削除する', - 'Comment removed successfully.' => 'コメントを削除しました。', - 'Unable to remove this comment.' => 'コメントの削除に失敗しました。', + 'Comment updated successfully.' => 'コメントを更新しました', + 'Unable to update your comment.' => 'コメントの更新に失敗しました', + 'Remove a comment' => 'コメントを削除', + 'Comment removed successfully.' => 'コメントを削除しました', + 'Unable to remove this comment.' => 'コメントの削除に失敗しました', 'Do you really want to remove this comment?' => 'コメントを削除しますか?', - 'Current password for the user "%s"' => 'ユーザ「%s」の現在のパスワード', + 'Current password for the user "%s"' => 'ユーザー「%s」の現在のパスワード', 'The current password is required' => '現在のパスワードを入力してください', 'Wrong password' => 'パスワードが違います', 'Unknown' => '不明', @@ -197,44 +196,44 @@ return array( 'Login date' => 'ログイン日時', 'Authentication method' => '認証方法', 'IP address' => 'IP アドレス', - 'User agent' => 'ユーザエージェント', + 'User agent' => 'ユーザーエージェント', 'Persistent connections' => '既存のコネクション', - 'No session.' => 'セッションなし。', + 'No session.' => 'セッションなし', 'Expiration date' => '有効期限', - 'Remember Me' => '次回から自動的にログインする', + 'Remember Me' => '次回から自動的にログイン', 'Creation date' => '作成日', 'Everybody' => '全員', - 'Open' => 'オープン', - 'Closed' => 'クローズ', + 'Open' => '作成', + 'Closed' => '完了', 'Search' => '検索', - 'Nothing found.' => '結果なし。', + 'Nothing found.' => '結果なし', 'Due date' => '期限', 'Description' => '説明', '%d comments' => '%d 個のコメント', '%d comment' => '%d 個のコメント', 'Email address invalid' => 'メールアドレスが正しくありません', - // 'Your external account is not linked anymore to your profile.' => '', - // 'Unable to unlink your external account.' => '', - // 'External authentication failed' => '', - // 'Your external account is linked to your profile successfully.' => '', + 'Your external account is not linked anymore to your profile.' => 'あなたの外部アカウントはプロフィールにリンクされていません', + 'Unable to unlink your external account.' => '外部アカウントのリンクを解除できません', + 'External authentication failed' => '外部認証に失敗しました', + 'Your external account is linked to your profile successfully.' => 'あなたの外部アカウントはプロフィールに正常にリンクしています', 'Email' => 'Email', - 'Task removed successfully.' => 'タスクを削除しました。', - 'Unable to remove this task.' => 'タスクの削除に失敗しました。', + 'Task removed successfully.' => 'タスクを削除しました', + 'Unable to remove this task.' => 'タスクの削除に失敗しました', 'Remove a task' => 'タスクの削除', 'Do you really want to remove this task: "%s"?' => 'タスク「%s」を削除しますか?', 'Assign automatically a color based on a category' => 'カテゴリに基いて色を変える', 'Assign automatically a category based on a color' => '色に基いてカテゴリを変える', 'Task creation or modification' => 'タスクの作成または変更', 'Category' => 'カテゴリ', - 'Category:' => 'カテゴリ:', + 'Category:' => 'カテゴリ:', 'Categories' => 'カテゴリ', - 'Your category have been created successfully.' => 'カテゴリを作成しました。', - 'This category has been updated successfully.' => 'カテゴリを更新しました。', - 'Unable to update this category.' => 'カテゴリの更新に失敗しました。', + 'Your category have been created successfully.' => 'カテゴリを作成しました', + 'This category has been updated successfully.' => 'カテゴリを更新しました', + 'Unable to update this category.' => 'カテゴリの更新に失敗しました', 'Remove a category' => 'カテゴリの削除', - 'Category removed successfully.' => 'カテゴリを削除しました。', - 'Unable to remove this category.' => 'カテゴリを削除できませんでした。', - 'Category modification for the project "%s"' => 'プロジェクト「%s」のカテゴリの変更', + 'Category removed successfully.' => 'カテゴリを削除しました', + 'Unable to remove this category.' => 'カテゴリを削除できませんでした', + 'Category modification for the project "%s"' => 'プロジェクト「%s」のカテゴリの編集', 'Category Name' => 'カテゴリ名', 'Add a new category' => 'カテゴリの追加', 'Do you really want to remove this category: "%s"?' => 'カテゴリ「%s」を削除しますか?', @@ -242,40 +241,39 @@ return array( 'No category' => 'カテゴリなし', 'The name is required' => '名前を入力してください', 'Remove a file' => 'ファイルの削除', - 'Unable to remove this file.' => 'ファイルの削除に失敗しました。', - 'File removed successfully.' => 'ファイルを削除しました。', - 'Attach a document' => 'ドキュメントを添付する', + 'Unable to remove this file.' => 'ファイルの削除に失敗しました', + 'File removed successfully.' => 'ファイルを削除しました', + 'Attach a document' => 'ドキュメントを添付', 'Do you really want to remove this file: "%s"?' => 'ファイル「%s」を削除しますか?', 'Attachments' => '添付', - 'Edit the task' => 'タスクを変更する', - 'Add a comment' => 'コメントの追加', - 'Edit a comment' => 'コメントを変更する', - 'Summary' => '概要', - 'Time tracking' => '時間の計測', - 'Estimate:' => '予測:', - 'Spent:' => '経過:', + 'Edit the task' => 'タスクを編集', + 'Add a comment' => 'コメントを追加', + 'Edit a comment' => 'コメントを編集', + 'Summary' => '要約', + 'Time tracking' => '時間の追跡', + 'Estimate:' => '見積:', + 'Spent:' => '経過:', 'Do you really want to remove this sub-task?' => 'サブタスクを削除しますか?', - 'Remaining:' => '残り:', + 'Remaining:' => '残:', 'hours' => '時間', 'spent' => '経過', - 'estimated' => '予測', + 'estimated' => '見積', 'Sub-Tasks' => 'サブタスク', - 'Add a sub-task' => 'サブタスクを追加する', - 'Original estimate' => '初期の予測', - 'Create another sub-task' => '続けて別のサブタスクを追加する', + 'Add a sub-task' => 'サブタスクを追加', + 'Original estimate' => '初期の見積', + 'Create another sub-task' => '続けて別のサブタスクを追加', 'Time spent' => '経過時間', - 'Edit a sub-task' => 'サブタスクを変更する', - 'Remove a sub-task' => 'サブタスクを削除する', + 'Edit a sub-task' => 'サブタスクを編集', + 'Remove a sub-task' => 'サブタスクを削除', 'The time must be a numeric value' => '時間は数字で入力してください', 'Todo' => '作業予定', 'In progress' => '作業中', - 'Sub-task removed successfully.' => 'サブタスクを削除しました。', - 'Unable to remove this sub-task.' => 'サブタスクの削除に失敗しました。', - 'Sub-task updated successfully.' => 'サブタスクを更新しました。', - 'Unable to update your sub-task.' => 'サブタスクの更新に失敗しました。', - 'Unable to create your sub-task.' => 'サブタスクの追加に失敗しました。', - 'Sub-task added successfully.' => 'サブタスクを追加しました。', - 'Maximum size: ' => '最大: ', + 'Sub-task removed successfully.' => 'サブタスクを削除しました', + 'Unable to remove this sub-task.' => 'サブタスクの削除に失敗しました', + 'Sub-task updated successfully.' => 'サブタスクを更新しました', + 'Unable to update your sub-task.' => 'サブタスクの更新に失敗しました', + 'Unable to create your sub-task.' => 'サブタスクの追加に失敗しました', + 'Maximum size: ' => '最大:', 'Display another project' => '別のプロジェクトを表示', 'Created by %s' => '%s が作成', 'Tasks Export' => 'タスクの出力', @@ -283,34 +281,34 @@ return array( 'Execute' => '実行', 'Task Id' => 'タスク ID', 'Creator' => '作成者', - 'Modification date' => '変更日', + 'Modification date' => '更新日', 'Completion date' => '完了日', 'Clone' => '複製', - 'Project cloned successfully.' => 'プロジェクトを複製しました。', - 'Unable to clone this project.' => 'プロジェクトの複製に失敗しました。', + 'Project cloned successfully.' => 'プロジェクトを複製しました', + 'Unable to clone this project.' => 'プロジェクトの複製に失敗しました', 'Enable email notifications' => 'メール通知を設定', - 'Task position:' => 'タスクの位置:', - 'The task #%d have been opened.' => 'タスク #%d をオープンしました。', - 'The task #%d have been closed.' => 'タスク #%d をクローズしました。', + 'Task position:' => 'タスクの位置:', + 'The task #%d have been opened.' => 'タスク #%d を作成しました', + 'The task #%d have been closed.' => 'タスク #%d を完了しました', 'Sub-task updated' => 'サブタスクの更新', - 'Title:' => 'タイトル:', - 'Status:' => 'ステータス:', - 'Assignee:' => '担当:', - 'Time tracking:' => '時間計測:', + 'Title:' => 'タイトル:', + 'Status:' => 'ステータス:', + 'Assignee:' => '担当:', + 'Time tracking:' => '時間計測:', 'New sub-task' => '新しいサブタスク', 'New attachment added "%s"' => '添付ファイル「%s」が追加されました', 'New comment posted by %s' => '「%s」の新しいコメントが追加されました', 'New comment' => '新しいコメント', 'Comment updated' => 'コメントが更新されました', 'New subtask' => '新しいサブタスク', - 'I want to receive notifications only for those projects:' => '以下のプロジェクトにのみ通知を受け取る:', + 'I want to receive notifications only for those projects:' => '以下のプロジェクトにのみ通知を受け取る:', 'view the task on Kanboard' => 'Kanboard でタスクを見る', - 'Public access' => '公開アクセス設定', + 'Public access' => '公開アクセス', 'Disable public access' => '公開アクセスを無効にする', 'Enable public access' => '公開アクセスを有効にする', 'Public access disabled' => '公開アクセスは無効化されています', - 'Move the task to another project' => 'タスクを別プロジェクトに移す', - 'Move to another project' => '別プロジェクトに移す', + 'Move the task to another project' => 'タスクを別プロジェクトに移動', + 'Move to another project' => '別プロジェクトに移動', 'Do you really want to duplicate this task?' => 'タスクを複製しますか?', 'Duplicate a task' => 'タスクの複製', 'External accounts' => '外部アカウント', @@ -319,34 +317,34 @@ return array( 'Remote' => 'リモート', 'Enabled' => '有効', 'Disabled' => '無効', - 'Login:' => 'ユーザ名:', - 'Full Name:' => '名前:', - 'Email:' => 'Email:', - 'Notifications:' => '通知:', + 'Login:' => 'ユーザー名:', + 'Full Name:' => '名前:', + 'Email:' => 'Email:', + 'Notifications:' => '通知:', 'Notifications' => '通知', - 'Account type:' => 'アカウントの種類:', - 'Edit profile' => 'プロフィールの変更', + 'Account type:' => 'アカウントの種類:', + 'Edit profile' => 'プロフィールの編集', 'Change password' => 'パスワードの変更', 'Password modification' => 'パスワードの変更', 'External authentications' => '外部認証', - 'Never connected.' => '未接続。', - 'No external authentication enabled.' => '外部認証が設定されていません。', - 'Password modified successfully.' => 'パスワードを変更しました。', - 'Unable to change the password.' => 'パスワードが変更できませんでした。', + 'Never connected.' => '未接続', + 'No external authentication enabled.' => '外部認証が設定されていません', + 'Password modified successfully.' => 'パスワードを変更しました', + 'Unable to change the password.' => 'パスワードを変更できませんでした', 'Change category' => 'カテゴリの変更', - '%s updated the task %s' => '%s がタスク %s をアップデートしました', - '%s opened the task %s' => '%s がタスク %s をオープンしました', + '%s updated the task %s' => '%s がタスク %s を更新しました', + '%s opened the task %s' => '%s がタスク %s を作成しました', '%s moved the task %s to the position #%d in the column "%s"' => '%s がタスク %s をポジション #%d カラム %s に移動しました', '%s moved the task %s to the column "%s"' => '%s がタスク %s をカラム「%s」に移動しました', '%s created the task %s' => '%s がタスク %s を作成しました', - '%s closed the task %s' => '%s がタスク %s をクローズしました', + '%s closed the task %s' => '%s がタスク %s を完了しました', '%s created a subtask for the task %s' => '%s がタスク %s のサブタスクを追加しました', '%s updated a subtask for the task %s' => '%s がタスク %s のサブタスクを更新しました', - 'Assigned to %s with an estimate of %s/%sh' => '担当者 %s に予想 %s/%sh に変更されました', - 'Not assigned, estimate of %sh' => '担当者無しで予想 %sh に変更されました', + 'Assigned to %s with an estimate of %s/%sh' => '担当者 %s は見積を %s/%s時間 に変更しました', + 'Not assigned, estimate of %sh' => '担当者無しで見積を %s時間 に変更しました', '%s updated a comment on the task %s' => '%s がタスク %s のコメントを更新しました', '%s commented the task %s' => '%s がタスク %s にコメントしました', - '%s\'s activity' => '%s のアクティビティ', + '%s\'s activity' => '%s の活動状況', 'RSS feed' => 'RSS フィード', '%s updated a comment on the task #%d' => '%s がタスク #%d のコメントを更新しました', '%s commented on the task #%d' => '%s がタスク #%d にコメントしました', @@ -354,68 +352,63 @@ return array( '%s created a subtask for the task #%d' => '%s がタスク #%d のサブタスクを追加しました', '%s updated the task #%d' => '%s がタスク #%d を更新しました', '%s created the task #%d' => '%s がタスク #%d を追加しました', - '%s closed the task #%d' => '%s がタスク #%d をクローズしました', - '%s opened the task #%d' => '%s がタスク #%d をオープンしました', - 'Activity' => 'アクティビティ', - 'Default values are "%s"' => 'デフォルト値は「%s」', - 'Default columns for new projects (Comma-separated)' => '新規プロジェクトのデフォルトカラム (コンマで区切って入力)', + '%s closed the task #%d' => '%s がタスク #%d を完了しました', + '%s opened the task #%d' => '%s がタスク #%d を作成しました', + 'Activity' => '活動状況', + 'Default values are "%s"' => '既定値は「%s」', + 'Default columns for new projects (Comma-separated)' => '新規プロジェクトの既定カラム (コンマで区切って入力)', 'Task assignee change' => '担当者の変更', '%s changed the assignee of the task #%d to %s' => '%s がタスク #%d の担当を %s に変更しました', '%s changed the assignee of the task %s to %s' => '%s がタスク %s の担当を %s に変更しました', - 'New password for the user "%s"' => 'ユーザ「%s」の新しいパスワード', + 'New password for the user "%s"' => 'ユーザー「%s」の新しいパスワード', 'Choose an event' => 'イベントの選択', - 'Create a task from an external provider' => 'タスクを外部サービスから作成する', - 'Change the assignee based on an external username' => '担当者を外部サービスに基いて変更する', - 'Change the category based on an external label' => 'カテゴリを外部サービスに基いて変更する', + 'Create a task from an external provider' => 'タスクを外部サービスから作成', + 'Change the assignee based on an external username' => '担当者を外部サービスに基いて変更', + 'Change the category based on an external label' => 'カテゴリを外部サービスに基いて変更', 'Reference' => '参照', 'Label' => 'ラベル', 'Database' => 'データベース', 'About' => '情報', - 'Database driver:' => 'データベースドライバ:', + 'Database driver:' => 'データベースドライバ:', 'Board settings' => '基本設定', 'Webhook settings' => 'Webhook の設定', 'Reset token' => 'トークンのリセット', - 'API endpoint:' => 'API エンドポイント:', + 'API endpoint:' => 'API エンドポイント:', 'Refresh interval for private board' => '非公開ボードの更新頻度', 'Refresh interval for public board' => '公開ボードの更新頻度', 'Task highlight period' => 'タスクのハイライト期間', - 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'タスクが最近更新されたとみなす期間(0 はハイライト無効、デフォルト 2 日)', - 'Frequency in second (60 seconds by default)' => '秒数 (デフォルト 60 秒)', - 'Frequency in second (0 to disable this feature, 10 seconds by default)' => '秒数 (0 は機能を無効化、デフォルト 10 秒)', + 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'タスクが最近更新されたとみなす期間(0 はハイライト無効、既定 2 日)', + 'Frequency in second (60 seconds by default)' => '秒数 (既定 60 秒)', + 'Frequency in second (0 to disable this feature, 10 seconds by default)' => '秒数 (0 は機能を無効化、既定 10 秒)', 'Application URL' => 'アプリケーションの URL', - 'Token regenerated.' => 'トークンが再生成されました。', + 'Token regenerated.' => 'トークンが再生成されました', 'Date format' => 'データのフォーマット', 'ISO format is always accepted, example: "%s" and "%s"' => 'ISO フォーマットが入力できます(例: %s または %s)', - 'New private project' => '非公開プロジェクトを作る', + 'New private project' => '非公開プロジェクト作成', 'This project is private' => 'このプロジェクトは非公開です', 'Add' => '追加', 'Start date' => '開始時間', - 'Time estimated' => '予想時間', - 'There is nothing assigned to you.' => '何もアサインされていません。', + 'Time estimated' => '見積時間', + 'There is nothing assigned to you.' => '何もアサインされていません', 'My tasks' => '自分のタスク', - 'Activity stream' => 'アクティビティストリーム', + 'Activity stream' => '活動状況', 'Dashboard' => 'ダッシュボード', 'Confirmation' => '確認', - 'Allow everybody to access to this project' => '全員にプロジェクトへのアクセスを許す', - 'Everybody have access to this project.' => '誰でもこのプロジェクトにアクセスできます。', 'Webhooks' => 'Webhook', 'API' => 'API', - 'Create a comment from an external provider' => '外部サービスからコメントを作成する', - 'Project management' => 'プロジェクト・マネジメント', - 'My projects' => '自分のプロジェクト', + 'Create a comment from an external provider' => '外部サービスからコメントを作成', + 'Project management' => 'プロジェクト管理', 'Columns' => 'カラム', 'Task' => 'タスク', - 'Your are not member of any project.' => 'どのプロジェクトにも属していません。', 'Percentage' => '割合', 'Number of tasks' => 'タスク数', 'Task distribution' => 'タスク分布', 'Analytics' => '分析', 'Subtask' => 'サブタスク', - 'My subtasks' => '自分のサブタスク', 'User repartition' => '担当者分布', - 'Clone this project' => 'このプロジェクトを複製する', + 'Clone this project' => 'このプロジェクトを複製', 'Column removed successfully.' => 'カラムを削除しました', - 'Not enough data to show the graph.' => 'グラフを描画するには出たが足りません', + 'Not enough data to show the graph.' => 'グラフを描画するためのデータが不足しています', 'Previous' => '戻る', 'The id must be an integer' => 'id は数字でなければなりません', 'The project id must be an integer' => 'project id は数字でなければなりません', @@ -435,19 +428,19 @@ return array( 'This export contains the number of tasks per column grouped per day.' => 'この出力は日時のカラムごとのタスク数を集計したものです', 'Active swimlanes' => 'アクティブなスイムレーン', 'Add a new swimlane' => '新しいスイムレーン', - 'Default swimlane' => 'デフォルトスイムレーン', - 'Do you really want to remove this swimlane: "%s"?' => 'このスイムレーン「%s」を本当に削除しますか?', + 'Default swimlane' => '既定スイムレーン', + 'Do you really want to remove this swimlane: "%s"?' => 'スイムレーン「%s」を削除しますか?', 'Inactive swimlanes' => 'インタラクティブなスイムレーン', 'Remove a swimlane' => 'スイムレーンの削除', 'Swimlane modification for the project "%s"' => '「%s」に対するスイムレーン変更', - 'Swimlane removed successfully.' => 'スイムレーンを削除しました。', + 'Swimlane removed successfully.' => 'スイムレーンを削除しました', 'Swimlanes' => 'スイムレーン', - 'Swimlane updated successfully.' => 'スイムレーンを更新しました。', - 'Unable to remove this swimlane.' => 'スイムレーンを削除できませんでした。', - 'Unable to update this swimlane.' => 'スイムレーンを更新できませんでした。', - 'Your swimlane have been created successfully.' => 'スイムレーンが作成されました。', + 'Swimlane updated successfully.' => 'スイムレーンを更新しました', + 'Unable to remove this swimlane.' => 'スイムレーンを削除できませんでした', + 'Unable to update this swimlane.' => 'スイムレーンを更新できませんでした', + 'Your swimlane have been created successfully.' => 'スイムレーンが作成されました', 'Example: "Bug, Feature Request, Improvement"' => '例: バグ, 機能, 改善', - 'Default categories for new projects (Comma-separated)' => '新しいプロジェクトのデフォルトカテゴリー (コンマ区切り)', + 'Default categories for new projects (Comma-separated)' => '新しいプロジェクトの既定カテゴリー (コンマ区切り)', 'Integrations' => '連携', 'Integration with third-party services' => 'サードパーティサービスとの連携', 'Subtask Id' => 'サブタスク Id', @@ -455,38 +448,37 @@ return array( 'Subtasks Export' => 'サブタスクの出力', 'Task Title' => 'タスクタイトル', 'Untitled' => 'タイトル無し', - 'Application default' => 'アプリケーションデフォルト', - 'Language:' => '言語:', - 'Timezone:' => 'タイムゾーン:', + 'Application default' => 'アプリケーションの既定値', + 'Language:' => '言語:', + 'Timezone:' => 'タイムゾーン:', 'All columns' => '全てのカラム', - 'Calendar' => 'カレンダー', 'Next' => '次へ', '#%d' => '#%d', 'All swimlanes' => '全てのスイムレーン', 'All colors' => '全ての色', 'Moved to column %s' => 'カラム %s へ移動しました', - 'User dashboard' => 'ユーザダッシュボード', - 'Allow only one subtask in progress at the same time for a user' => '一人のユーザにつき一つのタスクのみ進行中にできます', + 'User dashboard' => 'ユーザーダッシュボード', + 'Allow only one subtask in progress at the same time for a user' => '1ユーザーにつき1件のタスクのみを進行中にできるよう制限', 'Edit column "%s"' => 'カラム「%s」の編集', 'Select the new status of the subtask: "%s"' => 'サブタスク「%s」のステータスを選択', 'Subtask timesheet' => 'サブタスクタイムシート', - 'There is nothing to show.' => '何も表示するものがありません。', + 'There is nothing to show.' => '何も表示するものがありません', 'Time Tracking' => 'タイムトラッキング', - 'You already have one subtask in progress' => 'すでに進行中のサブタスクがあります。', + 'You already have one subtask in progress' => 'すでに進行中のサブタスクがあります', 'Which parts of the project do you want to duplicate?' => 'プロジェクトの何を複製しますか?', - // 'Disallow login form' => '', + 'Disallow login form' => 'ログインフォームからのログインを許可しない', 'Start' => '開始', 'End' => '終了', 'Task age in days' => 'タスクの経過日数', 'Days in this column' => 'カラムでの経過日数', '%dd' => '%d 日', 'Add a new link' => '新しいリンクの追加', - 'Do you really want to remove this link: "%s"?' => 'リンク「%s」を本当に削除しますか?', + 'Do you really want to remove this link: "%s"?' => 'リンク「%s」を削除しますか?', 'Do you really want to remove this link with task #%d?' => 'このリンクとタスク#%dを削除しますか?', 'Field required' => 'フィールドが必要です', - 'Link added successfully.' => 'リンクを追加しました。', - 'Link updated successfully.' => 'リンクを更新しました。', - 'Link removed successfully.' => 'リンクを削除しました。', + 'Link added successfully.' => 'リンクを追加しました', + 'Link updated successfully.' => 'リンクを更新しました', + 'Link removed successfully.' => 'リンクを削除しました', 'Link labels' => 'リンクラベル', 'Link modification' => 'リンクの変更', 'Links' => 'リンク', @@ -495,9 +487,9 @@ return array( 'The labels must be different' => '異なるラベルを指定してください', 'There is no link.' => 'リンクがありません', 'This label must be unique' => 'ラベルはユニークである必要があります', - 'Unable to create your link.' => 'リンクを作成できませんでした。', - 'Unable to update your link.' => 'リンクを更新できませんでした。', - 'Unable to remove this link.' => 'リンクを削除できませんでした。', + 'Unable to create your link.' => 'リンクを作成できませんでした', + 'Unable to update your link.' => 'リンクを更新できませんでした', + 'Unable to remove this link.' => 'リンクを削除できませんでした', 'relates to' => '次に関連します', 'blocks' => '次をブロックしています', 'is blocked by' => '次にブロックされています', @@ -512,11 +504,11 @@ return array( 'This task' => 'このタスクは', '<1h' => '<1時間', '%dh' => '%d 時間', - 'Expand tasks' => 'タスクを展開する', - 'Collapse tasks' => 'タスクを閉じる', + 'Expand tasks' => 'タスクを詳細表示', + 'Collapse tasks' => 'タスクを簡略表示', 'Expand/collapse tasks' => 'タスクの展開/閉じる', 'Close dialog box' => 'ダイアログボックスを閉じる', - 'Submit a form' => 'フォームを送信する', + 'Submit a form' => 'フォームを送信', 'Board view' => 'ボードビュー', 'Keyboard shortcuts' => 'キーボードショートカット', 'Open board switcher' => 'ボード切り替えを開く', @@ -537,801 +529,841 @@ return array( 'JPY - Japanese Yen' => 'JPY - 日本円', 'NZD - New Zealand Dollar' => 'NZD - NZ ドル', 'RSD - Serbian dinar' => 'RSD - セルビアデナール', - // 'CNY - Chinese Yuan' => '', + 'CNY - Chinese Yuan' => 'CNY - 中国元', 'USD - US Dollar' => 'USD - 米ドル', 'Destination column' => '移動先のカラム', - 'Move the task to another column when assigned to a user' => 'ユーザの割り当てをしたらタスクを他のカラムに移動', - 'Move the task to another column when assignee is cleared' => 'ユーザの割り当てがなくなったらタスクを他のカラムに移動', + 'Move the task to another column when assigned to a user' => 'ユーザーの割当てをしたらタスクを他のカラムに移動', + 'Move the task to another column when assignee is cleared' => 'ユーザーの割当てがなくなったらタスクを他のカラムに移動', 'Source column' => '移動元のカラム', 'Transitions' => '履歴', 'Executer' => '実行者', - 'Time spent in the column' => 'カラムでの時間消費', + 'Time spent in the column' => 'カラムでの経過時間', 'Task transitions' => 'タスクの遷移', 'Task transitions export' => 'タスクの遷移を出力', - 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'このレポートはタスクのカラム間における移動を時間、ユーザー、経過時間と共に記録した物です。', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'このレポートはタスクのカラム間における移動を時間、ユーザー、経過時間と共に記録した物です', 'Currency rates' => '為替レート', 'Rate' => 'レート', 'Change reference currency' => '現在の基軸通貨', 'Reference currency' => '基軸通貨', - // 'The currency rate have been added successfully.' => '', - 'Unable to add this currency rate.' => 'この通貨レートを追加できません。', + 'The currency rate have been added successfully.' => '通貨レートが正常に追加されました', + 'Unable to add this currency rate.' => 'この通貨レートを追加できません', 'Webhook URL' => 'Webhook URL', - '%s removed the assignee of the task %s' => '%s がタスク「%s」の担当を解除しました。', - 'Enable Gravatar images' => 'Gravatar イメージを有効化', + '%s removed the assignee of the task %s' => '%s がタスク「%s」の担当を解除しました', 'Information' => '情報 ', - 'Check two factor authentication code' => '2 段認証をチェックする', - 'The two factor authentication code is not valid.' => '2 段認証コードは無効です。', - 'The two factor authentication code is valid.' => '2 段認証コードは有効です。', + 'Check two factor authentication code' => '二要素認証を確認', + 'The two factor authentication code is not valid.' => '二要素認証コードは無効です', + 'The two factor authentication code is valid.' => '二要素認証コードは有効です', 'Code' => 'コード', - 'Two factor authentication' => '2 段認証', - 'This QR code contains the key URI: ' => 'この QR コードが URI キーを含んでいます: ', + 'Two factor authentication' => '二要素認証', + 'This QR code contains the key URI: ' => 'この QR コードが URI キーを含んでいます:', 'Check my code' => '自分のコードをチェック', - 'Secret key: ' => '秘密鍵: ', - 'Test your device' => 'デバイスをテストする', - // 'Assign a color when the task is moved to a specific column' => '', - // '%s via Kanboard' => '', - // 'Burndown chart' => '', - // 'This chart show the task complexity over the time (Work Remaining).' => '', - // 'Screenshot taken %s' => '', - // 'Add a screenshot' => '', - // 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => '', - // 'Screenshot uploaded successfully.' => '', - // 'SEK - Swedish Krona' => '', - // 'Identifier' => '', - // 'Disable two factor authentication' => '', - // 'Do you really want to disable the two factor authentication for this user: "%s"?' => '', - // 'Edit link' => '', - // 'Start to type task title...' => '', - // 'A task cannot be linked to itself' => '', - // 'The exact same link already exists' => '', - // 'Recurrent task is scheduled to be generated' => '', - // 'Score' => '', - // 'The identifier must be unique' => '', - // 'This linked task id doesn\'t exists' => '', - // 'This value must be alphanumeric' => '', - // 'Edit recurrence' => '', - // 'Generate recurrent task' => '', - // 'Trigger to generate recurrent task' => '', - // 'Factor to calculate new due date' => '', - // 'Timeframe to calculate new due date' => '', - // 'Base date to calculate new due date' => '', - // 'Action date' => '', - // 'Base date to calculate new due date: ' => '', - // 'This task has created this child task: ' => '', - // 'Day(s)' => '', - // 'Existing due date' => '', - // 'Factor to calculate new due date: ' => '', - // 'Month(s)' => '', - // 'Recurrence' => '', - // 'This task has been created by: ' => '', - // 'Recurrent task has been generated:' => '', - // 'Timeframe to calculate new due date: ' => '', - // 'Trigger to generate recurrent task: ' => '', - // 'When task is closed' => '', - // 'When task is moved from first column' => '', - // 'When task is moved to last column' => '', - // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', - // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', - // 'Automatically update the start date' => '', - // 'iCal feed' => '', - // 'Preferences' => '', - // 'Security' => '', - // 'Two factor authentication disabled' => '', - // 'Two factor authentication enabled' => '', - // 'Unable to update this user.' => '', - // 'There is no user management for private projects.' => '', - // 'User that will receive the email' => '', - // 'Email subject' => '', - // 'Date' => '', - // 'Add a comment log when moving the task between columns' => '', - // 'Move the task to another column when the category is changed' => '', - // 'Send a task by email to someone' => '', - // 'Reopen a task' => '', - // 'Notification' => '', - // '%s moved the task #%d to the first swimlane' => '', - // 'Swimlane' => '', - // 'Gravatar' => '', - // '%s moved the task %s to the first swimlane' => '', - // '%s moved the task %s to the swimlane "%s"' => '', - // 'This report contains all subtasks information for the given date range.' => '', - // 'This report contains all tasks information for the given date range.' => '', - // 'Project activities for %s' => '', - // 'view the board on Kanboard' => '', - // 'The task have been moved to the first swimlane' => '', - // 'The task have been moved to another swimlane:' => '', - // 'New title: %s' => '', - // 'The task is not assigned anymore' => '', - // 'New assignee: %s' => '', - // 'There is no category now' => '', - // 'New category: %s' => '', - // 'New color: %s' => '', - // 'New complexity: %d' => '', - // 'The due date have been removed' => '', - // 'There is no description anymore' => '', - // 'Recurrence settings have been modified' => '', - // 'Time spent changed: %sh' => '', - // 'Time estimated changed: %sh' => '', - // 'The field "%s" have been updated' => '', - // 'The description has been modified:' => '', - // 'Do you really want to close the task "%s" as well as all subtasks?' => '', - // 'I want to receive notifications for:' => '', - // 'All tasks' => '', - // 'Only for tasks assigned to me' => '', - // 'Only for tasks created by me' => '', - // 'Only for tasks created by me and assigned to me' => '', + 'Secret key: ' => '秘密鍵:', + 'Test your device' => 'あなたのデバイスをテスト', + 'Assign a color when the task is moved to a specific column' => 'タスクが特定のカラムに移動した時の色を設定', + '%s via Kanboard' => '%s by Kanboard', + 'Burndown chart' => 'バウンダリーチャート', + 'This chart show the task complexity over the time (Work Remaining).' => 'グラフは、時間の経過とともにタスクの複雑さを示しています(残っている作業)', + 'Screenshot taken %s' => 'スクリーンショット %s', + 'Add a screenshot' => 'スクリーンショットを追加', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'スクリーンショットを撮りCTRL + Vまたは⌘+ Vを押してここに貼り付けてください', + 'Screenshot uploaded successfully.' => 'スクリーンショットが正常にアップロードされました', + 'SEK - Swedish Krona' => 'SEK - スウェーデン クローナ', + 'Identifier' => '識別子', + 'Disable two factor authentication' => '二要素認証を無効にする', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => '本当にユーザー「%s」の二要素認証を無効にしますか?', + 'Edit link' => 'リンクを編集', + 'Start to type task title...' => 'タスクタイトルを入力...', + 'A task cannot be linked to itself' => 'タスクをタスク自身にはリンクできません', + 'The exact same link already exists' => '同じリンクが既に存在しています', + 'Recurrent task is scheduled to be generated' => '反復タスクが生成されるようにスケジュールされています', + 'Score' => 'スコア', + 'The identifier must be unique' => '識別子はユニークでなければなりません', + 'This linked task id doesn\'t exists' => 'リンクされたタスクIDは存在しません', + 'This value must be alphanumeric' => '英数字で入力ください', + 'Edit recurrence' => '反復タスクの編集', + 'Generate recurrent task' => '反復タスクを生成', + 'Trigger to generate recurrent task' => '反復タスクを生成するためのトリガ', + 'Factor to calculate new due date' => '新しい期限を計算する要素', + 'Timeframe to calculate new due date' => '新しい期限を計算するための時間枠', + 'Base date to calculate new due date' => '新しい期限を計算するための基準日', + 'Action date' => '実行日', + 'Base date to calculate new due date: ' => '新しい期限を計算するための基準日:', + 'This task has created this child task: ' => 'このタスクはこの子タスクを作成しました:', + 'Day(s)' => '日', + 'Existing due date' => '既存の予定日', + 'Factor to calculate new due date: ' => '新しい支払期限を計算する要素:', + 'Month(s)' => 'ヶ月', + 'Recurrence' => '反復タスク', + 'This task has been created by: ' => 'タスク作成者', + 'Recurrent task has been generated:' => '反復タスクが生成されました:', + 'Timeframe to calculate new due date: ' => '新しい期限を計算する時間枠:', + 'Trigger to generate recurrent task: ' => '反復タスクを生成するためのトリガー:', + 'When task is closed' => 'タスクが完了したとき', + 'When task is moved from first column' => 'タスクが最初のカラムから移動されたとき', + 'When task is moved to last column' => 'タスクが最後のカラムに移動したとき', + 'Year(s)' => '年', + 'Project settings' => 'プロジェクト設定', + 'Automatically update the start date' => '開始日を自動的に更新', + 'iCal feed' => 'iCal 配信', + 'Preferences' => 'プリファレンス', + 'Security' => 'セキュリティ', + 'Two factor authentication disabled' => '二要素認証は無効です', + 'Two factor authentication enabled' => '二要素認証は有効です', + 'Unable to update this user.' => 'このユーザーを更新できません', + 'There is no user management for private projects.' => 'プライベート・プロジェクトのためのユーザー管理はありません', + 'User that will receive the email' => 'メールを受信するユーザー', + 'Email subject' => 'メールの件名', + 'Date' => '日付', + 'Add a comment log when moving the task between columns' => 'カラム間でタスクを移動するときにコメントログを追加', + 'Move the task to another column when the category is changed' => 'カテゴリが変更されたときにタスクを別のカラムに移動', + 'Send a task by email to someone' => 'タスクをメールで送信', + 'Reopen a task' => 'タスクを再開', + 'Notification' => '通知', + '%s moved the task #%d to the first swimlane' => '%sはタスク#%dを最初のスイムレーンに移動しました', + 'Swimlane' => 'スイムレーン', + '%s moved the task %s to the first swimlane' => '%sはタスク%sを最初のスイムレーンに移動しました', + '%s moved the task %s to the swimlane "%s"' => '%sはタスク%sをスイムレーン "%s"に移動しました', + 'This report contains all subtasks information for the given date range.' => 'このレポートには、指定した期間のすべてのサブタスク情報が含まれています', + 'This report contains all tasks information for the given date range.' => 'このレポートには、指定した期間のすべてのタスク情報が含まれます', + 'Project activities for %s' => '%sのプロジェクトの活動状況', + 'view the board on Kanboard' => 'Kanboard上のボードを見る', + 'The task have been moved to the first swimlane' => 'タスクは最初のスイムレーンに移動されました', + 'The task have been moved to another swimlane:' => 'タスクは次のスイムレーンに移動しました:', + 'New title: %s' => '新しいタイトル:%s', + 'The task is not assigned anymore' => 'タスクはもう割当てられません', + 'New assignee: %s' => '新しい担当者:%s', + 'There is no category now' => 'カテゴリはありません', + 'New category: %s' => '新しいカテゴリ:%s', + 'New color: %s' => '新しい色:%s', + 'New complexity: %d' => '新しい複雑さ:%d', + 'The due date have been removed' => '期限が削除されました', + 'There is no description anymore' => '説明はありません', + 'Recurrence settings have been modified' => '反復設定が変更されました', + 'Time spent changed: %sh' => '経過時間が変更されました:%sh', + 'Time estimated changed: %sh' => '見積時間が変更されました:%sh', + 'The field "%s" have been updated' => 'フィールド "%s"は更新されました', + 'The description has been modified:' => '説明が変更されました:', + 'Do you really want to close the task "%s" as well as all subtasks?' => 'すべてのサブタスクを含むタスク"%s"を完了しますか?', + 'I want to receive notifications for:' => '次の通知を受信します:', + 'All tasks' => 'すべてのタスク', + 'Only for tasks assigned to me' => '自分のタスクのみ', + 'Only for tasks created by me' => '自分が作成したタスクのみ', + 'Only for tasks created by me and assigned to me' => '自分が作成した自分のタスクのみ', // '%%Y-%%m-%%d' => '', - // 'Total for all columns' => '', - // 'You need at least 2 days of data to show the chart.' => '', - // '<15m' => '', - // '<30m' => '', - // 'Stop timer' => '', - // 'Start timer' => '', - // 'My activity stream' => '', - // 'My calendar' => '', - // 'Search tasks' => '', - // 'Reset filters' => '', - // 'My tasks due tomorrow' => '', - // 'Tasks due today' => '', - // 'Tasks due tomorrow' => '', - // 'Tasks due yesterday' => '', - // 'Closed tasks' => '', - // 'Open tasks' => '', - // 'Not assigned' => '', - // 'View advanced search syntax' => '', - // 'Overview' => '', - // 'Board/Calendar/List view' => '', - // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', - // 'Switch to the list view' => '', - // 'Go to the search/filter box' => '', - // 'There is no activity yet.' => '', - // 'No tasks found.' => '', - // 'Keyboard shortcut: "%s"' => '', - // 'List' => '', - // 'Filter' => '', - // 'Advanced search' => '', - // 'Example of query: ' => '', - // 'Search by project: ' => '', - // 'Search by column: ' => '', - // 'Search by assignee: ' => '', - // 'Search by color: ' => '', - // 'Search by category: ' => '', - // 'Search by description: ' => '', - // 'Search by due date: ' => '', - // 'Average time spent into each column' => '', - // 'Average time spent' => '', - // 'This chart show the average time spent into each column for the last %d tasks.' => '', - // 'Average Lead and Cycle time' => '', - // 'Average lead time: ' => '', - // 'Average cycle time: ' => '', - // 'Cycle Time' => '', - // 'Lead Time' => '', - // 'This chart show the average lead and cycle time for the last %d tasks over the time.' => '', - // 'Average time into each column' => '', - // 'Lead and cycle time' => '', - // 'Lead time: ' => '', - // 'Cycle time: ' => '', - // 'Time spent into each column' => '', - // 'The lead time is the duration between the task creation and the completion.' => '', - // 'The cycle time is the duration between the start date and the completion.' => '', - // 'If the task is not closed the current time is used instead of the completion date.' => '', - // 'Set automatically the start date' => '', - // 'Edit Authentication' => '', - // 'Remote user' => '', - // 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => '', - // 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => '', - // 'Default task color' => '', - // 'This feature does not work with all browsers.' => '', - // 'There is no destination project available.' => '', - // 'Trigger automatically subtask time tracking' => '', - // 'Include closed tasks in the cumulative flow diagram' => '', - // 'Current swimlane: %s' => '', - // 'Current column: %s' => '', - // 'Current category: %s' => '', - // 'no category' => '', - // 'Current assignee: %s' => '', - // 'not assigned' => '', - // 'Author:' => '', - // 'contributors' => '', - // 'License:' => '', - // 'License' => '', - // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', - // 'Start date:' => '', - // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', - // 'People who are project managers' => '', - // 'People who are project members' => '', - // 'NOK - Norwegian Krone' => '', - // 'Show this column' => '', - // 'Hide this column' => '', - // 'open file' => '', - // 'End date' => '', - // 'Users overview' => '', - // 'Members' => '', - // 'Shared project' => '', - // 'Project managers' => '', - // 'Gantt chart for all projects' => '', - // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', - // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', - // 'Change task color when using a specific task link' => '', - // 'Task link creation or modification' => '', - // 'Milestone' => '', - // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', - // 'Reset the search/filter box' => '', - // 'Documentation' => '', - // 'Table of contents' => '', - // 'Gantt' => '', - // 'Author' => '', - // 'Version' => '', - // 'Plugins' => '', - // 'There is no plugin loaded.' => '', - // 'My notifications' => '', - // 'Custom filters' => '', - // 'Your custom filter have been created successfully.' => '', - // 'Unable to create your custom filter.' => '', - // 'Custom filter removed successfully.' => '', - // 'Unable to remove this custom filter.' => '', - // 'Edit custom filter' => '', - // 'Your custom filter have been updated successfully.' => '', - // 'Unable to update custom filter.' => '', + 'Total for all columns' => 'すべてのカラムの合計', + 'You need at least 2 days of data to show the chart.' => 'グラフを表示するには最低2日間のデータが必要です', + '<15m' => '15分未満', + '<30m' => '30分未満', + 'Stop timer' => 'タイマー停止', + 'Start timer' => 'タイマー開始', + 'My activity stream' => '自分の活動状況', + 'Search tasks' => 'タスクを検索', + 'Reset filters' => 'フィルターをリセット', + 'My tasks due tomorrow' => '明日の自分のタスク', + 'Tasks due today' => '今日のタスク', + 'Tasks due tomorrow' => '明日のタスク', + 'Tasks due yesterday' => '昨日のタスク', + 'Closed tasks' => '完了タスク', + 'Open tasks' => '未完了タスク', + 'Not assigned' => '未割当', + 'View advanced search syntax' => '詳細検索の構文を見る', + 'Overview' => '概要', + 'Board/Calendar/List view' => 'ボード/カレンダー/リストビュー', + 'Switch to the board view' => 'ボードビューに切替', + 'Switch to the list view' => 'リストビューに切替', + 'Go to the search/filter box' => '検索/フィルタボックスに移動', + 'There is no activity yet.' => 'まだ活動状況はありません', + 'No tasks found.' => 'タスクが見つかりません', + 'Keyboard shortcut: "%s"' => 'キーボード・ショートカット: "%s"', + 'List' => 'リスト', + 'Filter' => 'フィルター', + 'Advanced search' => '詳細検索', + 'Example of query: ' => 'クエリの例:', + 'Search by project: ' => 'プロジェクトで検索:', + 'Search by column: ' => 'カラムで検索:', + 'Search by assignee: ' => '担当者で検索:', + 'Search by color: ' => '色で検索:', + 'Search by category: ' => 'カテゴリで検索:', + 'Search by description: ' => '説明で検索:', + 'Search by due date: ' => '期限で検索:', + 'Average time spent into each column' => '各カラムで経過した時間の平均', + 'Average time spent' => '平均経過時間', + 'This chart show the average time spent into each column for the last %d tasks.' => 'このグラフは最後の%d個のタスクに対して各カラムで経過した平均時間を示しています', + 'Average Lead and Cycle time' => '平均リードタイム・平均サイクルタイム', + 'Average lead time: ' => '平均リードタイム:', + 'Average cycle time: ' => '平均サイクルタイム:', + 'Cycle Time' => 'サイクルタイム', + 'Lead Time' => 'リードタイム', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'このグラフは時間の経過に伴う最後の%d個のタスクの平均リードタイムとサイクルタイムを示します', + 'Average time into each column' => '各カラムの平均時間', + 'Lead and cycle time' => 'リード/サイクルタイム', + 'Lead time: ' => 'リードタイム:', + 'Cycle time: ' => 'サイクルタイム:', + 'Time spent into each column' => '各カラムの経過時間', + 'The lead time is the duration between the task creation and the completion.' => 'リードタイムはタスクの作成〜完了まで時間です', + 'The cycle time is the duration between the start date and the completion.' => 'サイクルタイムは着手〜完了までの期間です', + 'If the task is not closed the current time is used instead of the completion date.' => 'タスクが終了していない場合は完了日の代わりに現在時刻を使用します', + 'Set automatically the start date' => '開始日を自動的に設定', + 'Edit Authentication' => '認証の編集', + 'Remote user' => 'リモートユーザー', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'リモートユーザーはパスワードをKanboardデータベースに保存しません(例:LDAP、Google、Githubのアカウント)', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => '「ログインフォームを許可しない」チェックボックスをオンにすると、ログインフォームに入力された認証情報は無視されます', + 'Default task color' => '規定のタスクカラー', + 'This feature does not work with all browsers.' => 'この機能は一部のブラウザで動作しません', + 'There is no destination project available.' => '利用可能なプロジェクトはありません', + 'Trigger automatically subtask time tracking' => '自動的にサブタスク時間トラッキングを作動させる', + 'Include closed tasks in the cumulative flow diagram' => '累積フロー図に完了したタスクを含める', + 'Current swimlane: %s' => '現在のスイムレーン:%s', + 'Current column: %s' => '現在のカラム:%s', + 'Current category: %s' => '現在のカテゴリ:%s', + 'no category' => 'カテゴリなし', + 'Current assignee: %s' => '現在の担当者:%s', + 'not assigned' => '未割当', + 'Author:' => '著者:', + 'contributors' => '協力者', + 'License:' => 'ライセンス:', + 'License' => 'ライセンス', + 'Enter the text below' => 'テキストを入力', + 'Start date:' => '開始日:', + 'Due date:' => '期限:', + 'People who are project managers' => 'プロジェクト管理者', + 'People who are project members' => 'プロジェクトメンバー', + 'NOK - Norwegian Krone' => 'NOK - ノルウェークローネ', + 'Show this column' => 'このカラムを表示', + 'Hide this column' => 'このカラムを隠す', + 'open file' => 'ファイルを開く', + 'End date' => '終了日', + 'Users overview' => 'ユーザー概要', + 'Members' => 'メンバー', + 'Shared project' => '共有プロジェクト', + 'Project managers' => 'プロジェクト管理者', + 'Projects list' => 'プロジェクトリスト', + 'End date:' => '終了日:', + 'Change task color when using a specific task link' => '特定のタスクリンクを使用するとタスクの色を変更', + 'Task link creation or modification' => 'タスクリンクの作成または変更', + 'Milestone' => 'マイルストーン', + 'Documentation: %s' => 'ドキュメント:%s', + 'Reset the search/filter box' => '検索/フィルタをリセット', + 'Documentation' => 'ドキュメント', + 'Table of contents' => '目次', + 'Author' => '著者', + 'Version' => 'バージョン', + 'Plugins' => 'プラグイン', + 'There is no plugin loaded.' => 'プラグインがロードされていません', + 'My notifications' => '自分の通知', + 'Custom filters' => 'カスタムフィルタ', + 'Your custom filter have been created successfully.' => 'カスタムフィルタを作成しました', + 'Unable to create your custom filter.' => 'カスタムフィルタを作成できません', + 'Custom filter removed successfully.' => 'カスタムフィルタを削除しました', + 'Unable to remove this custom filter.' => 'このカスタムフィルタは削除できません', + 'Edit custom filter' => 'カスタムフィルタを編集', + 'Your custom filter have been updated successfully.' => 'カスタムフィルタを更新しました', + 'Unable to update custom filter.' => 'カスタムフィルタを更新できません', // 'Web' => '', - // 'New attachment on task #%d: %s' => '', - // 'New comment on task #%d' => '', - // 'Comment updated on task #%d' => '', - // 'New subtask on task #%d' => '', - // 'Subtask updated on task #%d' => '', - // 'New task #%d: %s' => '', - // 'Task updated #%d' => '', - // 'Task #%d closed' => '', - // 'Task #%d opened' => '', - // 'Column changed for task #%d' => '', - // 'New position for task #%d' => '', - // 'Swimlane changed for task #%d' => '', - // 'Assignee changed on task #%d' => '', - // '%d overdue tasks' => '', - // 'Task #%d is overdue' => '', - // 'No notification.' => '', - // 'Mark all as read' => '', - // 'Mark as read' => '', - // 'Total number of tasks in this column across all swimlanes' => '', - // 'Collapse swimlane' => '', - // 'Expand swimlane' => '', - // 'Add a new filter' => '', - // 'Share with all project members' => '', - // 'Shared' => '', - // 'Owner' => '', - // 'Unread notifications' => '', - // 'Notification methods:' => '', - // 'Unable to read your file' => '', - // '%d task(s) have been imported successfully.' => '', - // 'Nothing have been imported!' => '', - // 'Import users from CSV file' => '', - // '%d user(s) have been imported successfully.' => '', - // 'Comma' => '', - // 'Semi-colon' => '', - // 'Tab' => '', - // 'Vertical bar' => '', - // 'Double Quote' => '', - // 'Single Quote' => '', - // '%s attached a file to the task #%d' => '', - // 'There is no column or swimlane activated in your project!' => '', - // 'Append filter (instead of replacement)' => '', - // 'Append/Replace' => '', - // 'Append' => '', - // 'Replace' => '', - // 'Import' => '', - // 'Change sorting' => '', - // 'Tasks Importation' => '', - // 'Delimiter' => '', - // 'Enclosure' => '', - // 'CSV File' => '', - // 'Instructions' => '', - // 'Your file must use the predefined CSV format' => '', - // 'Your file must be encoded in UTF-8' => '', - // 'The first row must be the header' => '', - // 'Duplicates are not verified for you' => '', - // 'The due date must use the ISO format: YYYY-MM-DD' => '', - // 'Download CSV template' => '', - // 'No external integration registered.' => '', - // 'Duplicates are not imported' => '', - // 'Usernames must be lowercase and unique' => '', - // 'Passwords will be encrypted if present' => '', - // '%s attached a new file to the task %s' => '', - // 'Link type' => '', - // 'Assign automatically a category based on a link' => '', + 'New attachment on task #%d: %s' => 'タスク#%dの新しい添付ファイル:%s', + 'New comment on task #%d' => 'タスク#%dの新しいコメント', + 'Comment updated on task #%d' => 'タスク#%dで更新されたコメント', + 'New subtask on task #%d' => 'タスク#%dの新しいサブタスク', + 'Subtask updated on task #%d' => 'タスク#%dで更新されたサブタスク', + 'New task #%d: %s' => '新しいタスク#%d:%s', + 'Task updated #%d' => 'タスクが更新されました#%d', + 'Task #%d closed' => 'タスク#%dは完了しました', + 'Task #%d opened' => 'タスク#%dを作成しました', + 'Column changed for task #%d' => 'タスク#%dのカラムが変更されました', + 'New position for task #%d' => 'タスク#%dの新しい位置', + 'Swimlane changed for task #%d' => 'タスク#%dのスイムレーンが変更されました', + 'Assignee changed on task #%d' => 'タスク#%dの担当者が変更されました', + '%d overdue tasks' => '%d 件の期限切れタスク', + 'Task #%d is overdue' => 'タスク#%dは期限切れです', + 'No notification.' => '通知なし', + 'Mark all as read' => 'すべてを既読にする', + 'Mark as read' => '既読にする', + 'Total number of tasks in this column across all swimlanes' => 'すべてのスイムレーンでこのカラムのタスクの合計', + 'Collapse swimlane' => 'スイムレーンをたたむ', + 'Expand swimlane' => 'スイムレーンを展開', + 'Add a new filter' => 'フィルターを追加', + 'Share with all project members' => 'プロジェクトメンバーと共有', + 'Shared' => '共有済み', + 'Owner' => '所有者', + 'Unread notifications' => '未読通知', + 'Notification methods:' => '通知方法:', + 'Unable to read your file' => 'あなたのファイルを読むことができません', + '%d task(s) have been imported successfully.' => '%d件のタスクが正常にインポートされました', + 'Nothing have been imported!' => '何もインポートされていません!', + 'Import users from CSV file' => 'CSVファイルからユーザーをインポート', + '%d user(s) have been imported successfully.' => '%d人のユーザーが正常にインポートされました', + 'Comma' => 'カンマ', + 'Semi-colon' => 'セミコロン', + 'Tab' => 'タブ', + 'Vertical bar' => '縦棒', + 'Double Quote' => '二重引用符', + 'Single Quote' => '一重引用符', + '%s attached a file to the task #%d' => '%sさんがタスクにファイルを添付しました#%d', + 'There is no column or swimlane activated in your project!' => 'あなたのプロジェクトではカラムやスイムレーンが有効になっていません!', + 'Append filter (instead of replacement)' => '置換の代わりにフィルターを追加', + 'Append/Replace' => '追加/置換', + 'Append' => '追加', + 'Replace' => '置換', + 'Import' => 'インポート', + 'Change sorting' => 'ソートの変更', + 'Tasks Importation' => 'タスクのインポート', + 'Delimiter' => '区切り', + 'Enclosure' => 'エンクロージャ', + 'CSV File' => 'CSVファイル', + 'Instructions' => '指示', + 'Your file must use the predefined CSV format' => 'ファイルは定義済みのCSV形式である必要があります', + 'Your file must be encoded in UTF-8' => 'ファイルはUTF-8でエンコードする必要があります', + 'The first row must be the header' => '最初の行は見出しでなければなりません', + 'Duplicates are not verified for you' => '重複は検証されません', + 'The due date must use the ISO format: YYYY-MM-DD' => '期限はISO形式である必要があります:YYYY-MM-DD', + 'Download CSV template' => 'CSVテンプレートをダウンロード', + 'No external integration registered.' => '外部統合が登録されていません', + 'Duplicates are not imported' => '重複はインポートされません', + 'Usernames must be lowercase and unique' => 'ユーザー名は小文字でユニークでなければなりません', + 'Passwords will be encrypted if present' => 'パスワードがあれば暗号化されます', + '%s attached a new file to the task %s' => '%sタスクに新しいファイルを添付しました%s', + 'Link type' => 'リンクタイプ', + 'Assign automatically a category based on a link' => 'リンクに基づいてカテゴリを自動的に割当てる', // 'BAM - Konvertible Mark' => '', - // 'Assignee Username' => '', - // 'Assignee Name' => '', - // 'Groups' => '', - // 'Members of %s' => '', - // 'New group' => '', - // 'Group created successfully.' => '', - // 'Unable to create your group.' => '', - // 'Edit group' => '', - // 'Group updated successfully.' => '', - // 'Unable to update your group.' => '', - // 'Add group member to "%s"' => '', - // 'Group member added successfully.' => '', - // 'Unable to add group member.' => '', - // 'Remove user from group "%s"' => '', - // 'User removed successfully from this group.' => '', - // 'Unable to remove this user from the group.' => '', - // 'Remove group' => '', - // 'Group removed successfully.' => '', - // 'Unable to remove this group.' => '', - // 'Project Permissions' => '', - // 'Manager' => '', - // 'Project Manager' => '', - // 'Project Member' => '', - // 'Project Viewer' => '', - // 'Your account is locked for %d minutes' => '', - // 'Invalid captcha' => '', - // 'The name must be unique' => '', - // 'View all groups' => '', - // 'There is no user available.' => '', - // 'Do you really want to remove the user "%s" from the group "%s"?' => '', - // 'There is no group.' => '', - // 'External Id' => '', - // 'Add group member' => '', - // 'Do you really want to remove this group: "%s"?' => '', - // 'There is no user in this group.' => '', - // 'Permissions' => '', - // 'Allowed Users' => '', - // 'No user have been allowed specifically.' => '', - // 'Role' => '', - // 'Enter user name...' => '', - // 'Allowed Groups' => '', - // 'No group have been allowed specifically.' => '', - // 'Group' => '', - // 'Group Name' => '', - // 'Enter group name...' => '', - // 'Role:' => '', - // 'Project members' => '', - // '%s mentioned you in the task #%d' => '', - // '%s mentioned you in a comment on the task #%d' => '', - // 'You were mentioned in the task #%d' => '', - // 'You were mentioned in a comment on the task #%d' => '', - // 'Estimated hours: ' => '', - // 'Actual hours: ' => '', - // 'Hours Spent' => '', - // 'Hours Estimated' => '', - // 'Estimated Time' => '', - // 'Actual Time' => '', - // 'Estimated vs actual time' => '', + 'Assignee Username' => '担当者のユーザー名', + 'Assignee Name' => '担当者名', + 'Groups' => 'グループ', + 'Members of %s' => '%sのメンバー', + 'New group' => '新しいグループ', + 'Group created successfully.' => 'グループは正常に作成されました', + 'Unable to create your group.' => 'あなたのグループを作成できません', + 'Edit group' => 'グループを編集', + 'Group updated successfully.' => 'グループは正常に更新されました', + 'Unable to update your group.' => 'あなたのグループを更新できません', + 'Add group member to "%s"' => '「%s」にグループメンバーを追加', + 'Group member added successfully.' => 'グループメンバーが正常に追加されました', + 'Unable to add group member.' => 'グループメンバーを追加できません', + 'Remove user from group "%s"' => 'グループ「%s」からユーザーを削除', + 'User removed successfully from this group.' => 'このグループからユーザーが正常に削除されました', + 'Unable to remove this user from the group.' => 'このユーザーをグループから削除できません', + 'Remove group' => 'グループを削除', + 'Group removed successfully.' => 'グループは正常に削除されました', + 'Unable to remove this group.' => 'このグループを削除できません', + 'Project Permissions' => 'プロジェクトの権限', + 'Manager' => '組織の管理者', + 'Project Manager' => 'プロジェクト管理者', + 'Project Member' => 'プロジェクトメンバー', + 'Project Viewer' => 'プロジェクトビューアー', + 'Your account is locked for %d minutes' => 'あなたのアカウントは%d分間ロックされています', + 'Invalid captcha' => '無効なcaptcha', + 'The name must be unique' => '名前はユニークである必要があります', + 'View all groups' => 'すべてのグループを表示', + 'There is no user available.' => '利用可能なユーザーはありません', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'ユーザー「%s」をグループ「%s」から削除しますか?', + 'There is no group.' => 'グループはありません', + 'Add group member' => 'グループメンバーを追加', + 'Do you really want to remove this group: "%s"?' => 'グループ「%s」を削除しますか?', + 'There is no user in this group.' => 'このグループにはユーザーがいません', + 'Permissions' => '権限', + 'Allowed Users' => '許可されたユーザー', + 'No user have been allowed specifically.' => '許可されたユーザーはありません', + 'Role' => '役割', + 'Enter user name...' => 'ユーザー名を入力...', + 'Allowed Groups' => '許可されたグループ', + 'No group have been allowed specifically.' => '許可されたグループはありません', + 'Group' => 'グループ', + 'Group Name' => 'グループ名', + 'Enter group name...' => 'グループ名を入力...', + 'Role:' => '役割:', + 'Project members' => 'プロジェクトメンバー', + '%s mentioned you in the task #%d' => '%sはタスク#%dであなたのことに言及しました', + '%s mentioned you in a comment on the task #%d' => '%sはタスク#%dのコメントであなたのことに言及しました', + 'You were mentioned in the task #%d' => 'タスク#%dであなたのことが言及されました', + 'You were mentioned in a comment on the task #%d' => 'タスク#%dのコメントであなたのことが言及されました', + 'Estimated hours: ' => '見積時間:', + 'Actual hours: ' => '実際の時間:', + 'Hours Spent' => '時間(経過)', + 'Hours Estimated' => '時間(見積)', + 'Estimated Time' => '見積時間', + 'Actual Time' => '実際の時間', + 'Estimated vs actual time' => '見積時間と実際の時間', // 'RUB - Russian Ruble' => '', - // 'Assign the task to the person who does the action when the column is changed' => '', - // 'Close a task in a specific column' => '', - // 'Time-based One-time Password Algorithm' => '', - // 'Two-Factor Provider: ' => '', - // 'Disable two-factor authentication' => '', - // 'Enable two-factor authentication' => '', - // 'There is no integration registered at the moment.' => '', - // 'Password Reset for Kanboard' => '', - // 'Forgot password?' => '', - // 'Enable "Forget Password"' => '', - // 'Password Reset' => '', - // 'New password' => '', - // 'Change Password' => '', - // 'To reset your password click on this link:' => '', - // 'Last Password Reset' => '', - // 'The password has never been reinitialized.' => '', - // 'Creation' => '', - // 'Expiration' => '', - // 'Password reset history' => '', - // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', - // 'Do you really want to close all tasks of this column?' => '', - // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', - // 'Close all tasks of this column' => '', - // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', - // 'My dashboard' => '', - // 'My profile' => '', - // 'Project owner: ' => '', - // 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => '', - // 'Project owner' => '', - // 'Private projects do not have users and groups management.' => '', - // 'There is no project member.' => '', - // 'Priority' => '', - // 'Task priority' => '', - // 'General' => '', - // 'Dates' => '', - // 'Default priority' => '', - // 'Lowest priority' => '', - // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', - // 'Close a task when there is no activity' => '', - // 'Duration in days' => '', - // 'Send email when there is no activity on a task' => '', - // 'Unable to fetch link information.' => '', - // 'Daily background job for tasks' => '', - // 'Auto' => '', - // 'Related' => '', - // 'Attachment' => '', - // 'Title not found' => '', - // 'Web Link' => '', - // 'External links' => '', - // 'Add external link' => '', - // 'Type' => '', - // 'Dependency' => '', - // 'Add internal link' => '', - // 'Add a new external link' => '', - // 'Edit external link' => '', - // 'External link' => '', - // 'Copy and paste your link here...' => '', + 'Assign the task to the person who does the action when the column is changed' => 'カラムが変更されたときにアクションを実行する人にタスクを割当てる', + 'Close a task in a specific column' => '特定のカラムのタスクを完了させる', + 'Time-based One-time Password Algorithm' => '時間基準のワンタイム・パスワード・アルゴリズム', + 'Two-Factor Provider: ' => '二要素認証の提供元:', + 'Disable two-factor authentication' => '二要素認証を無効にする', + 'Enable two-factor authentication' => '二要素認証を有効にする', + 'There is no integration registered at the moment.' => '現在登録されている統合はありません', + 'Password Reset for Kanboard' => 'Kanboardのパスワードリセット', + 'Forgot password?' => 'パスワードをお忘れですか?', + 'Enable "Forget Password"' => '「パスワードをお忘れですか?」を有効にする', + 'Password Reset' => 'パスワードリセット', + 'New password' => '新しいパスワード', + 'Change Password' => 'パスワードを変更', + 'To reset your password click on this link:' => 'このリンクをクリックするとパスワードをリセットします:', + 'Last Password Reset' => '最後のパスワードリセット', + 'The password has never been reinitialized.' => 'パスワードが再設定されていません', + 'Creation' => '作成', + 'Expiration' => '失効', + 'Password reset history' => 'パスワードリセット履歴', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'すべてのタスク「%s」とスイムレーン「%s」は正常に終了しました', + 'Do you really want to close all tasks of this column?' => 'このカラムのすべてのタスクを終了しますか?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => 'カラム「%s」とスイムレーン 「%s」にある%d件のタスクを終了します', + 'Close all tasks of this column' => 'このカラムのすべてのタスクを終了', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'プラグインはプロジェクト通知メソッドを登録していません。ユーザープロフィールで個別に通知を設定することができます', + 'My dashboard' => 'ダッシュボード', + 'My profile' => 'プロフィール', + 'Project owner: ' => 'プロジェクト責任者:', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'プロジェクト識別子はオプションです。設定する場合は英数字にしてください。 例:MYPROJECT', + 'Project owner' => 'プロジェクト責任者', + 'Private projects do not have users and groups management.' => 'プライベートプロジェクトにはユーザーとグループの管理はありません', + 'There is no project member.' => 'プロジェクトメンバーはありません', + 'Priority' => '優先度', + 'Task priority' => 'タスクの優先度', + 'General' => '一般', + 'Dates' => '日付', + 'Default priority' => '既定の優先度', + 'Lowest priority' => '最低優先度', + 'Highest priority' => '最高優先度', + 'Close a task when there is no activity' => '活動がないときはタスクを終了', + 'Duration in days' => '期間(日)', + 'Send email when there is no activity on a task' => 'タスクに活動がないときにメールを送信', + 'Unable to fetch link information.' => 'リンク情報を取得できません', + 'Daily background job for tasks' => 'タスクのためのバックグラウンドジョブ(毎日)', + 'Auto' => '自動', + 'Related' => '関連', + 'Attachment' => '添付', + 'Title not found' => 'タイトルが見つかりません', + 'Web Link' => 'Webリンク', + 'External links' => '外部リンク', + 'Add external link' => '外部リンクを追加', + 'Type' => 'タイプ', + 'Dependency' => '依存', + 'Add internal link' => '内部リンクを追加', + 'Add a new external link' => '新しい外部リンクを追加', + 'Edit external link' => '外部リンクを編集', + 'External link' => '外部リンク', + 'Copy and paste your link here...' => 'リンクをここにコピー&ペースト...', // 'URL' => '', - // 'Internal links' => '', - // 'Assign to me' => '', - // 'Me' => '', - // 'Do not duplicate anything' => '', - // 'Projects management' => '', - // 'Users management' => '', - // 'Groups management' => '', - // 'Create from another project' => '', - // 'open' => '', - // 'closed' => '', - // 'Priority:' => '', - // 'Reference:' => '', - // 'Complexity:' => '', - // 'Swimlane:' => '', - // 'Column:' => '', - // 'Position:' => '', - // 'Creator:' => '', - // 'Time estimated:' => '', - // '%s hours' => '', - // 'Time spent:' => '', - // 'Created:' => '', - // 'Modified:' => '', - // 'Completed:' => '', - // 'Started:' => '', - // 'Moved:' => '', - // 'Task #%d' => '', - // 'Time format' => '', - // 'Start date: ' => '', - // 'End date: ' => '', - // 'New due date: ' => '', - // 'Start date changed: ' => '', - // 'Disable private projects' => '', - // 'Do you really want to remove this custom filter: "%s"?' => '', - // 'Remove a custom filter' => '', - // 'User activated successfully.' => '', - // 'Unable to enable this user.' => '', - // 'User disabled successfully.' => '', - // 'Unable to disable this user.' => '', - // 'All files have been uploaded successfully.' => '', - // 'The maximum allowed file size is %sB.' => '', - // 'Drag and drop your files here' => '', - // 'choose files' => '', - // 'View profile' => '', - // 'Two Factor' => '', - // 'Disable user' => '', - // 'Do you really want to disable this user: "%s"?' => '', - // 'Enable user' => '', - // 'Do you really want to enable this user: "%s"?' => '', - // 'Download' => '', - // 'Uploaded: %s' => '', - // 'Size: %s' => '', - // 'Uploaded by %s' => '', - // 'Filename' => '', - // 'Size' => '', - // 'Column created successfully.' => '', - // 'Another column with the same name exists in the project' => '', - // 'Default filters' => '', - // 'Your board doesn\'t have any columns!' => '', - // 'Change column position' => '', - // 'Switch to the project overview' => '', - // 'User filters' => '', - // 'Category filters' => '', - // 'Upload a file' => '', - // 'View file' => '', - // 'Last activity' => '', - // 'Change subtask position' => '', - // 'This value must be greater than %d' => '', - // 'Another swimlane with the same name exists in the project' => '', - // 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => '', - // 'Actions duplicated successfully.' => '', - // 'Unable to duplicate actions.' => '', - // 'Add a new action' => '', - // 'Import from another project' => '', - // 'There is no action at the moment.' => '', - // 'Import actions from another project' => '', - // 'There is no available project.' => '', - // 'Local File' => '', - // 'Configuration' => '', - // 'PHP version:' => '', + 'Internal links' => '内部リンク', + 'Assign to me' => '自分が担当する', + 'Me' => '自分', + 'Do not duplicate anything' => '何も複製しない', + 'Projects management' => 'プロジェクト管理', + 'Users management' => 'ユーザー管理', + 'Groups management' => 'グループ管理', + 'Create from another project' => '別のプロジェクトから作成', + 'open' => '開始', + 'closed' => '終了', + 'Priority:' => '優先度:', + 'Reference:' => '参照:', + 'Complexity:' => '複雑さ:', + 'Swimlane:' => 'スイムレーン:', + 'Column:' => 'カラム:', + 'Position:' => '位置:', + 'Creator:' => '作成者:', + 'Time estimated:' => '見積時間:', + '%s hours' => '%s時間', + 'Time spent:' => '経過時間:', + 'Created:' => '作成:', + 'Modified:' => '更新:', + 'Completed:' => '完了:', + 'Started:' => '開始:', + 'Moved:' => '移動:', + 'Task #%d' => 'タスク #%d', + 'Time format' => '時刻形式', + 'Start date: ' => '開始日:', + 'End date: ' => '完了日:', + 'New due date: ' => '新しい期限:', + 'Start date changed: ' => '開始日が変更されました:', + 'Disable private projects' => '非公開プロジェクトを無効にする', + 'Do you really want to remove this custom filter: "%s"?' => 'このカスタムフィルタ「%s」を削除しますか?', + 'Remove a custom filter' => 'カスタムフィルタを削除', + 'User activated successfully.' => 'ユーザーは有効になりました', + 'Unable to enable this user.' => 'このユーザーを有効にできません', + 'User disabled successfully.' => 'ユーザーが無効になりました', + 'Unable to disable this user.' => 'このユーザーを無効にできません', + 'All files have been uploaded successfully.' => 'すべてのファイルが正常にアップロードされました', + 'The maximum allowed file size is %sB.' => '最大許容ファイルサイズ:%sB', + 'Drag and drop your files here' => 'ファイルをドラッグアンドドロップ', + 'choose files' => 'ファイルを選択', + 'View profile' => 'プロフィールを見る', + 'Two Factor' => '二要素認証', + 'Disable user' => 'ユーザーを無効にする', + 'Do you really want to disable this user: "%s"?' => 'ユーザー「%s」を無効にしますか?', + 'Enable user' => 'ユーザーを有効にする', + 'Do you really want to enable this user: "%s"?' => 'ユーザー「%s」を有効にしますか?', + 'Download' => 'ダンウロード', + 'Uploaded: %s' => 'アップロード完了:%s', + 'Size: %s' => 'サイズ:%s', + 'Uploaded by %s' => '%sによってアップロードされました', + 'Filename' => 'ファイル名', + 'Size' => 'サイズ', + 'Column created successfully.' => 'カラムが正常に作成されました', + 'Another column with the same name exists in the project' => '同じ名前の別のカラムがプロジェクトにあります', + 'Default filters' => '既定フィルタ', + 'Your board doesn\'t have any columns!' => 'あなたのボードにはカラムがありません!', + 'Change column position' => 'カラムの位置を変更', + 'Switch to the project overview' => 'プロジェクト概要に切替', + 'User filters' => 'ユーザーフィルタ', + 'Category filters' => 'カテゴリフィルタ', + 'Upload a file' => 'ファイルをアップロード', + 'View file' => 'ファイルを見る', + 'Last activity' => '最新の活動状況', + 'Change subtask position' => 'サブタスクの位置を変更', + 'This value must be greater than %d' => '%dより大きくなければなりません', + 'Another swimlane with the same name exists in the project' => '同じ名前の別のスイムレーンがプロジェクトにあります', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => '例:http://example.kanboard.net/(絶対URLの生成に使用)', + 'Actions duplicated successfully.' => 'アクションを複製しました', + 'Unable to duplicate actions.' => 'アクションを複製できません', + 'Add a new action' => '新しいアクションを追加', + 'Import from another project' => '別のプロジェクトからインポート', + 'There is no action at the moment.' => 'アクションはありません', + 'Import actions from another project' => '別のプロジェクトからアクションをインポート', + 'There is no available project.' => '利用可能なプロジェクトはありません', + 'Local File' => 'ローカルファイル', + 'Configuration' => '構成', + 'PHP version:' => 'PHPバージョン:', // 'PHP SAPI:' => '', - // 'OS version:' => '', - // 'Database version:' => '', - // 'Browser:' => '', - // 'Task view' => '', - // 'Edit task' => '', - // 'Edit description' => '', - // 'New internal link' => '', - // 'Display list of keyboard shortcuts' => '', + 'OS version:' => 'OSバージョン:', + 'Database version:' => 'データベース・バージョン:', + 'Browser:' => 'ブラウザー:', + 'Task view' => 'タスクビュー', + 'Edit task' => 'タスクを編集', + 'Edit description' => '説明を編集', + 'New internal link' => '新しい内部リンク', + 'Display list of keyboard shortcuts' => 'キーボードショートカットのリストを表示', // 'Menu' => '', - // 'Set start date' => '', - // 'Avatar' => '', - // 'Upload my avatar image' => '', - // 'Remove my image' => '', - // 'The OAuth2 state parameter is invalid' => '', - // 'User not found.' => '', - // 'Search in activity stream' => '', - // 'My activities' => '', - // 'Activity until yesterday' => '', - // 'Activity until today' => '', - // 'Search by creator: ' => '', - // 'Search by creation date: ' => '', - // 'Search by task status: ' => '', - // 'Search by task title: ' => '', - // 'Activity stream search' => '', - // 'Projects where "%s" is manager' => '', - // 'Projects where "%s" is member' => '', - // 'Open tasks assigned to "%s"' => '', - // 'Closed tasks assigned to "%s"' => '', - // 'Assign automatically a color based on a priority' => '', - // 'Overdue tasks for the project(s) "%s"' => '', - // 'Upload files' => '', - // 'Installed Plugins' => '', - // 'Plugin Directory' => '', - // 'Plugin installed successfully.' => '', - // 'Plugin updated successfully.' => '', - // 'Plugin removed successfully.' => '', - // 'Subtask converted to task successfully.' => '', - // 'Unable to convert the subtask.' => '', - // 'Unable to extract plugin archive.' => '', - // 'Plugin not found.' => '', - // 'You don\'t have the permission to remove this plugin.' => '', - // 'Unable to download plugin archive.' => '', - // 'Unable to write temporary file for plugin.' => '', - // 'Unable to open plugin archive.' => '', - // 'There is no file in the plugin archive.' => '', - // 'Create tasks in bulk' => '', - // 'Your Kanboard instance is not configured to install plugins from the user interface.' => '', - // 'There is no plugin available.' => '', - // 'Install' => '', - // 'Update' => '', - // 'Up to date' => '', - // 'Not available' => '', - // 'Remove plugin' => '', - // 'Do you really want to remove this plugin: "%s"?' => '', - // 'Uninstall' => '', - // 'Listing' => '', - // 'Metadata' => '', - // 'Manage projects' => '', - // 'Convert to task' => '', - // 'Convert sub-task to task' => '', - // 'Do you really want to convert this sub-task to a task?' => '', - // 'My task title' => '', - // 'Enter one task by line.' => '', - // 'Number of failed login:' => '', - // 'Account locked until:' => '', - // 'Email settings' => '', - // 'Email sender address' => '', - // 'Email transport' => '', - // 'Webhook token' => '', - // 'Project tags management' => '', - // 'Tag created successfully.' => '', - // 'Unable to create this tag.' => '', - // 'Tag updated successfully.' => '', - // 'Unable to update this tag.' => '', - // 'Tag removed successfully.' => '', - // 'Unable to remove this tag.' => '', - // 'Global tags management' => '', - // 'Tags' => '', - // 'Tags management' => '', - // 'Add new tag' => '', - // 'Edit a tag' => '', - // 'Project tags' => '', - // 'There is no specific tag for this project at the moment.' => '', - // 'Tag' => '', - // 'Remove a tag' => '', - // 'Do you really want to remove this tag: "%s"?' => '', - // 'Global tags' => '', - // 'There is no global tag at the moment.' => '', - // 'This field cannot be empty' => '', - // 'Close a task when there is no activity in an specific column' => '', - // '%s removed a subtask for the task #%d' => '', - // '%s removed a comment on the task #%d' => '', - // 'Comment removed on task #%d' => '', - // 'Subtask removed on task #%d' => '', - // 'Hide tasks in this column in the dashboard' => '', - // '%s removed a comment on the task %s' => '', - // '%s removed a subtask for the task %s' => '', - // 'Comment removed' => '', - // 'Subtask removed' => '', - // '%s set a new internal link for the task #%d' => '', - // '%s removed an internal link for the task #%d' => '', - // 'A new internal link for the task #%d have been defined' => '', - // 'Internal link removed for the task #%d' => '', - // '%s set a new internal link for the task %s' => '', - // '%s removed an internal link for the task %s' => '', - // 'Automatically set the due date on task creation' => '', - // 'Move the task to another column when closed' => '', - // 'Move the task to another column when not moved during a given period' => '', - // 'Dashboard for %s' => '', - // 'Tasks overview for %s' => '', - // 'Subtasks overview for %s' => '', - // 'Projects overview for %s' => '', - // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', - // 'Assign a color when the task is moved to a specific swimlane' => '', - // 'Assign a priority when the task is moved to a specific swimlane' => '', - // 'User unlocked successfully.' => '', - // 'Unable to unlock the user.' => '', - // 'Move a task to another swimlane' => '', - // 'Creator Name' => '', - // 'Time spent and estimated' => '', - // 'Move position' => '', - // 'Move task to another position on the board' => '', - // 'Insert before this task' => '', - // 'Insert after this task' => '', - // 'Unlock this user' => '', - // 'Custom Project Roles' => '', - // 'Add a new custom role' => '', - // 'Restrictions for the role "%s"' => '', - // 'Add a new project restriction' => '', - // 'Add a new drag and drop restriction' => '', - // 'Add a new column restriction' => '', - // 'Edit this role' => '', - // 'Remove this role' => '', - // 'There is no restriction for this role.' => '', - // 'Only moving task between those columns is permitted' => '', - // 'Close a task in a specific column when not moved during a given period' => '', - // 'Edit columns' => '', - // 'The column restriction has been created successfully.' => '', - // 'Unable to create this column restriction.' => '', - // 'Column restriction removed successfully.' => '', - // 'Unable to remove this restriction.' => '', - // 'Your custom project role has been created successfully.' => '', - // 'Unable to create custom project role.' => '', - // 'Your custom project role has been updated successfully.' => '', - // 'Unable to update custom project role.' => '', - // 'Custom project role removed successfully.' => '', - // 'Unable to remove this project role.' => '', - // 'The project restriction has been created successfully.' => '', - // 'Unable to create this project restriction.' => '', - // 'Project restriction removed successfully.' => '', - // 'You cannot create tasks in this column.' => '', - // 'Task creation is permitted for this column' => '', - // 'Closing or opening a task is permitted for this column' => '', - // 'Task creation is blocked for this column' => '', - // 'Closing or opening a task is blocked for this column' => '', - // 'Task creation is not permitted' => '', - // 'Closing or opening a task is not permitted' => '', - // 'New drag and drop restriction for the role "%s"' => '', - // 'People belonging to this role will be able to move tasks only between the source and the destination column.' => '', - // 'Remove a column restriction' => '', - // 'Do you really want to remove this column restriction: "%s" to "%s"?' => '', - // 'New column restriction for the role "%s"' => '', - // 'Rule' => '', - // 'Do you really want to remove this column restriction?' => '', - // 'Custom roles' => '', - // 'New custom project role' => '', - // 'Edit custom project role' => '', - // 'Remove a custom role' => '', - // 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '', - // 'There is no custom role for this project.' => '', - // 'New project restriction for the role "%s"' => '', - // 'Restriction' => '', - // 'Remove a project restriction' => '', - // 'Do you really want to remove this project restriction: "%s"?' => '', - // 'Duplicate to multiple projects' => '', - // 'This field is required' => '', - // 'Moving a task is not permitted' => '', - // 'This value must be in the range %d to %d' => '', - // 'You are not allowed to move this task.' => '', - // 'API User Access' => '', - // 'Preview' => '', - // 'Write' => '', - // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', - // 'No personal API access token registered.' => '', - // 'Your personal API access token is "%s"' => '', - // 'Remove your token' => '', - // 'Generate a new token' => '', - // 'Showing %d-%d of %d' => '', - // 'Outgoing Emails' => '', - // 'Add or change currency rate' => '', - // 'Reference currency: %s' => '', - // 'Add custom filters' => '', - // 'Export' => '', - // 'Add link label' => '', - // 'Incompatible Plugins' => '', - // 'Compatibility' => '', - // 'Permissions and ownership' => '', - // 'Priorities' => '', - // 'Close this window' => '', - // 'Unable to upload this file.' => '', - // 'Import tasks' => '', - // 'Choose a project' => '', - // 'Profile' => '', - // 'Application role' => '', - // '%d invitations were sent.' => '', - // '%d invitation was sent.' => '', - // 'Unable to create this user.' => '', - // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', - // 'Created at:' => '', - // 'Updated at:' => '', - // 'There is no custom filter.' => '', - // 'New User' => '', - // 'Authentication' => '', - // 'If checked, this user will use a third-party system for authentication.' => '', - // 'The password is necessary only for local users.' => '', - // 'You have been invited to register on Kanboard.' => '', - // 'Click here to join your team' => '', - // 'Invite people' => '', - // 'Emails' => '', - // 'Enter one email address by line.' => '', - // 'Add these people to this project' => '', - // 'Add this person to this project' => '', - // 'Sign-up' => '', - // 'Credentials' => '', - // 'New user' => '', - // 'This username is already taken' => '', - // 'A link to reset your password has been sent by email.' => '', - // 'Your profile must have a valid email address.' => '', - // 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '', + 'Set start date' => '開始する', + 'Avatar' => 'アバター', + 'Upload my avatar image' => '自分のアバター画像をアップロード', + 'Remove my image' => '画像を削除', + 'The OAuth2 state parameter is invalid' => 'OAuth2ステートパラメータは無効です', + 'User not found.' => 'ユーザーが見つかりません', + 'Search in activity stream' => '活動状況で検索', + 'My activities' => '自分の活動状況', + 'Activity until yesterday' => '昨日までの活動状況', + 'Activity until today' => '今までの活動状況', + 'Search by creator: ' => '作成者で検索:', + 'Search by creation date: ' => '作成日で検索:', + 'Search by task status: ' => 'タスクステータスで検索:', + 'Search by task title: ' => 'タスク名で検索:', + 'Activity stream search' => '活動状況を検索', + 'Projects where "%s" is manager' => '「%s」が管理者のプロジェクト', + 'Projects where "%s" is member' => '「%s」がメンバーのプロジェクト', + 'Open tasks assigned to "%s"' => '「%s」が担当のタスクを開く', + 'Closed tasks assigned to "%s"' => '「%s」が担当した終了したタスク', + 'Assign automatically a color based on a priority' => '優先度に基づいて自動的に色を割当て', + 'Overdue tasks for the project(s) "%s"' => '期限を超過したタスク「%s」', + 'Upload files' => 'ファイルをアップロード', + 'Installed Plugins' => '使用中のプラグイン', + 'Plugin Directory' => 'プラグインディレクトリ', + 'Plugin installed successfully.' => 'プラグインがインストールされました', + 'Plugin updated successfully.' => 'プラグインが更新されました', + 'Plugin removed successfully.' => 'プラグインを削除しました', + 'Subtask converted to task successfully.' => 'サブタスクをタスクに変換しました', + 'Unable to convert the subtask.' => 'サブタスクを変換できません', + 'Unable to extract plugin archive.' => 'プラグインアーカイブを解凍できません', + 'Plugin not found.' => 'プラグインが見つかりません', + 'You don\'t have the permission to remove this plugin.' => 'このプラグインを削除する権限がありません', + 'Unable to download plugin archive.' => 'プラグインアーカイブをダウンロードできません', + 'Unable to write temporary file for plugin.' => 'プラグインの一時ファイルを書き込めません', + 'Unable to open plugin archive.' => 'プラグインアーカイブを開くことができません', + 'There is no file in the plugin archive.' => 'プラグインアーカイブにファイルがありません', + 'Create tasks in bulk' => 'タスクを一括作成', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'あなたのKanboardインスタンスは、ユーザーインターフェースからプラグインをインストールするように設定されていません', + 'There is no plugin available.' => '利用可能なプラグインはありません', + 'Install' => 'インストール', + 'Update' => '更新', + 'Up to date' => '最新の日付', + 'Not available' => '利用できません', + 'Remove plugin' => 'プラグインを削除', + 'Do you really want to remove this plugin: "%s"?' => 'このプラグインを削除しますか?: %s', + 'Uninstall' => 'アンインストール', + 'Listing' => 'リスト', + 'Metadata' => 'メタデータ', + 'Manage projects' => 'プロジェクトを管理', + 'Convert to task' => 'タスクに変換', + 'Convert sub-task to task' => 'サブタスクをタスクに変換', + 'Do you really want to convert this sub-task to a task?' => 'このサブタスクをタスクに変換しますか?', + 'My task title' => '自分のタスク名', + 'Enter one task by line.' => '1行に1件のタスクを入力', + 'Number of failed login:' => 'ログイン失敗回数:', + 'Account locked until:' => 'ロックされたアカウント:', + 'Email settings' => 'メール設定', + 'Email sender address' => '送信者のメールアドレス', + 'Email transport' => 'メールの送信', + 'Webhook token' => 'Webhookトークン', + 'Project tags management' => 'プロジェクトタグ管理', + 'Tag created successfully.' => 'タグを作成しました', + 'Unable to create this tag.' => 'タグを作成できません', + 'Tag updated successfully.' => 'タグを更新しました', + 'Unable to update this tag.' => 'タグを更新できません', + 'Tag removed successfully.' => 'タグを削除しました', + 'Unable to remove this tag.' => 'タグを削除できません', + 'Global tags management' => 'グローバルタグ管理', + 'Tags' => 'タグ', + 'Tags management' => 'タグ管理', + 'Add new tag' => '新しいタグを追加', + 'Edit a tag' => 'タグを編集', + 'Project tags' => 'プロジェクトタグ', + 'There is no specific tag for this project at the moment.' => 'このプロジェクトにはタグはありません', + 'Tag' => 'タグ', + 'Remove a tag' => 'タグを削除', + 'Do you really want to remove this tag: "%s"?' => 'タグ「%s」を削除しますか?', + 'Global tags' => 'グローバルタグ', + 'There is no global tag at the moment.' => 'グローバルタグはありません', + 'This field cannot be empty' => 'このフィールドは必須です', + 'Close a task when there is no activity in an specific column' => '特定のカラムに活動がない場合にタスクを終了', + '%s removed a subtask for the task #%d' => 'タスク#%dからサブタスク%s件を削除しました', + '%s removed a comment on the task #%d' => 'タスク#%dからコメント%s件を削除しました', + 'Comment removed on task #%d' => 'タスク#%dからコメントを削除しました', + 'Subtask removed on task #%d' => 'タスク#%dからサブタスクを削除しました', + 'Hide tasks in this column in the dashboard' => 'ダッシュボードでこのカラムのタスクは表示しない', + '%s removed a comment on the task %s' => '%sはタスク「%s」からコメントを削除しました', + '%s removed a subtask for the task %s' => '%sはタスク「%s」からサブタスクを削除しました', + 'Comment removed' => 'コメントを削除しました', + 'Subtask removed' => 'サブタスクを削除しました', + '%s set a new internal link for the task #%d' => '%sはタスク#%dの新しい内部リンクを設定しました', + '%s removed an internal link for the task #%d' => '%sはタスク#%dの内部リンクを削除しました', + 'A new internal link for the task #%d have been defined' => 'タスク#%dの新しい内部リンクが定義されています', + 'Internal link removed for the task #%d' => 'タスク#%dの内部リンクが削除されました', + '%s set a new internal link for the task %s' => '%sはタスク「%s」の新しい内部リンクを設定しました', + '%s removed an internal link for the task %s' => '%sはタスク「%s」の内部リンクを削除しました', + 'Automatically set the due date on task creation' => 'タスク作成時に自動的に期限を設定', + 'Move the task to another column when closed' => '閉じたときにタスクを別のカラムに移動', + 'Move the task to another column when not moved during a given period' => '指定された期間中に移動しなかった場合、タスクを別のカラムに移動', + 'Dashboard for %s' => '%sのダッシュボード', + 'Tasks overview for %s' => '%sのタスク概要', + 'Subtasks overview for %s' => '%sのサブタスク概要', + 'Projects overview for %s' => '%sのプロジェクト概要', + 'Activity stream for %s' => '%sの活動状況', + 'Assign a color when the task is moved to a specific swimlane' => 'タスクが特定のスイムレーンに移動したときに色を割当てる', + 'Assign a priority when the task is moved to a specific swimlane' => 'タスクが特定のスイムレーンに移動したときに優先度を割当てる', + 'User unlocked successfully.' => 'ユーザーのロックを解除しました', + 'Unable to unlock the user.' => 'ユーザーのロックを解除できません', + 'Move a task to another swimlane' => '別のスイムレーンにタスクを移動', + 'Creator Name' => '作成者', + 'Time spent and estimated' => '経過/見積時間', + 'Move position' => '移動', + 'Move task to another position on the board' => 'ボード上の別の位置にタスクを移動', + 'Insert before this task' => 'このタスクの前に挿入', + 'Insert after this task' => 'このタスクの後に挿入', + 'Unlock this user' => 'このユーザーをロック解除', + 'Custom Project Roles' => 'プロジェクト独自の役割', + 'Add a new custom role' => '新しい役割を追加', + 'Restrictions for the role "%s"' => '役割「%s」の制限', + 'Add a new project restriction' => 'プロジェクト制約を追加', + 'Add a new drag and drop restriction' => 'ドラッグアンドドロップの制限を追加', + 'Add a new column restriction' => 'カラムに制限を追加', + 'Edit this role' => '役割を編集', + 'Remove this role' => '役割を削除', + 'There is no restriction for this role.' => 'この役割には制限はありません', + 'Only moving task between those columns is permitted' => 'これらのカラム間はタスクの移動のみが許可されています', + 'Close a task in a specific column when not moved during a given period' => '指定された期間中に移動しなかった場合、特定のカラムのタスクを終了', + 'Edit columns' => 'カラムを編集', + 'The column restriction has been created successfully.' => 'カラムの制限を作成しました', + 'Unable to create this column restriction.' => 'このカラムの制限を作成できません', + 'Column restriction removed successfully.' => 'カラムの制限を削除しました', + 'Unable to remove this restriction.' => 'この制限を削除できません', + 'Your custom project role has been created successfully.' => 'あなたのプロジェクトで独自の役割を作成しました', + 'Unable to create custom project role.' => 'プロジェクト独自の役割を作成できません', + 'Your custom project role has been updated successfully.' => 'プロジェクト独自の役割を更新しました', + 'Unable to update custom project role.' => 'プロジェクト独自の役割を更新できません', + 'Custom project role removed successfully.' => 'プロジェクト独自の役割を削除しました', + 'Unable to remove this project role.' => 'プロジェクトから役割を削除できません', + 'The project restriction has been created successfully.' => 'プロジェクトの制限が作成しました', + 'Unable to create this project restriction.' => 'プロジェクトの制限を作成できません', + 'Project restriction removed successfully.' => 'プロジェクトの制限を削除しました', + 'You cannot create tasks in this column.' => 'このカラムにタスクは作成できません', + 'Task creation is permitted for this column' => 'このカラムではタスクの作成が許可されています', + 'Closing or opening a task is permitted for this column' => 'このカラムではタスクを作成/完了が許可されています', + 'Task creation is blocked for this column' => 'このカラムでのタスク作成はブロックされています', + 'Closing or opening a task is blocked for this column' => 'このカラムでのタスクの作成/完了はブロックされています', + 'Task creation is not permitted' => 'タスクの作成は許可されていません', + 'Closing or opening a task is not permitted' => 'タスクの作成/完了は許可されていません', + 'New drag and drop restriction for the role "%s"' => '役割「%s」の新しいドラッグアンドドロップ制限', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'この役割に属するユーザーは、起点カラムと宛先カラムの間でのみタスクを移動できます', + 'Remove a column restriction' => 'カラムの制限を解除', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'このカラムの制限を解除しますか?: 「%s」→「%s」', + 'New column restriction for the role "%s"' => '役割「%s」のカラムでの新しい制限', + 'Rule' => '役割', + 'Do you really want to remove this column restriction?' => 'この列の制限を解除しますか?', + 'Custom roles' => '独自の役割', + 'New custom project role' => 'プロジェクトでの新しい独自の役割', + 'Edit custom project role' => 'プロジェクトでの独自の役割を編集', + 'Remove a custom role' => 'プロジェクトでの独自の役割を削除', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => '役割「%s」を削除しますか?この役割に割当てられたすべてのユーザーがプロジェクトメンバーになります', + 'There is no custom role for this project.' => 'プロジェクトでの独自の役割はありません', + 'New project restriction for the role "%s"' => '役割「%s」の新しいプロジェクト制限', + 'Restriction' => '制限', + 'Remove a project restriction' => 'プロジェクトの制限を解除', + 'Do you really want to remove this project restriction: "%s"?' => 'プロジェクトの制限「%s」を解除しますか?', + 'Duplicate to multiple projects' => '複数プロジェクトに複製', + 'This field is required' => 'このフィールドは必須です', + 'Moving a task is not permitted' => 'タスクを移動できません', + 'This value must be in the range %d to %d' => 'この値は%d〜%dの範囲になければなりません', + 'You are not allowed to move this task.' => 'このタスクを移動する権限がありません', + 'API User Access' => 'API ユーザーアクセス', + 'Preview' => 'プレビュー', + 'Write' => '書込み', + 'Write your text in Markdown' => 'Markdownで入力', + 'No personal API access token registered.' => '個人APIアクセストークンは登録されていません', + 'Your personal API access token is "%s"' => 'あなたのパーソナルAPIアクセストークン "%s"', + 'Remove your token' => 'あなたのトークンを削除', + 'Generate a new token' => '新しいトークンを生成', + 'Showing %d-%d of %d' => '%d〜%d/%dを表示', + 'Outgoing Emails' => '送信メール', + 'Add or change currency rate' => '通貨レートを追加または変更', + 'Reference currency: %s' => '参照通貨:%s', + 'Add custom filters' => 'カスタムフィルタを追加', + 'Export' => 'エクスポート', + 'Add link label' => 'リンクラベルを追加', + 'Incompatible Plugins' => '互換性のないプラグイン', + 'Compatibility' => '互換性', + 'Permissions and ownership' => 'アクセス権と所有権', + 'Priorities' => 'プロパティ', + 'Close this window' => 'ウィンドウを閉じる', + 'Unable to upload this file.' => 'ファイルをアップロードできません', + 'Import tasks' => 'タスクのインポート', + 'Choose a project' => 'プロジェクトを選択', + 'Profile' => 'プロフィール', + 'Application role' => 'アプリケーションでの役割', + '%d invitations were sent.' => '%d通の招待状を送信しました', + '%d invitation was sent.' => '%dに招待状を送信しました', + 'Unable to create this user.' => 'ユーザーを作成できません', + 'Kanboard Invitation' => 'Kanboardへの招待', + 'Visible on dashboard' => 'ダッシュボード表示', + 'Created at:' => '作成日時:', + 'Updated at:' => '更新日時:', + 'There is no custom filter.' => 'カスタムフィルタはありません', + 'New User' => '新規ユーザー', + 'Authentication' => '認証', + 'If checked, this user will use a third-party system for authentication.' => 'チェックすると、このユーザーは認証に第三者システムを使用します', + 'The password is necessary only for local users.' => 'パスワードはローカルユーザーにのみ必要です', + 'You have been invited to register on Kanboard.' => 'あなたはKanboardに登録されました', + 'Click here to join your team' => 'クリックしてあなたのチームに参加', + 'Invite people' => '招待', + 'Emails' => 'Eメール', + 'Enter one email address by line.' => '行ごとに1つのメールアドレスを入力してください', + 'Add these people to this project' => 'これらの人々をプロジェクトに追加', + 'Add this person to this project' => 'この人をプロジェクトに追加', + 'Sign-up' => 'サインアップ', + 'Credentials' => '資格情報', + 'New user' => '新規ユーザー', + 'This username is already taken' => 'このユーザー名はすでに使用されています', + 'A link to reset your password has been sent by email.' => 'パスワードをリセットするリンクをメールで送信しました', + 'Your profile must have a valid email address.' => 'プロフィールには有効なメールアドレスが必要です', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'パスワードをリセットできません。有効なユーザー名を入力しましたか?または、あなたのプロフィールにメールアドレスを登録していますか?', // 'TRL - Turkish Lira' => '', - // 'The project email is optional and could be used by several plugins.' => '', - // 'The project email must be unique across all projects' => '', - // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', - // 'Unable to upload files, check the permissions of your data folder.' => '', - // 'Another category with the same name exists in this project' => '', - // 'Comment sent by email successfully.' => '', - // 'Sent by email to [%s](mailto:%s) (%s)' => '', - // 'Unable to read uploaded file.' => '', - // 'Database uploaded successfully.' => '', - // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', - // 'Upload the database' => '', - // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', - // 'Database file' => '', - // 'Upload' => '', - // 'Remove this user from group' => '', - // 'Your project must have at least one active swimlane.' => '', - // 'Project: %s' => '', - // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', + 'The project email is optional and could be used by several plugins.' => 'プロジェクトのEメールはオプション/複数のプラグインで使用可能', + 'The project email must be unique across all projects' => 'プロジェクトのEメールはすべてのプロジェクトでユ一意である必要があります', + 'The email configuration has been disabled by the administrator.' => '管理者がEメールの設定を無効にしました', + 'Close this project' => 'プロジェクトを終了', + 'Open this project' => 'このプロジェクトを開く', + 'Close a project' => 'プロジェクトを終了', + 'Do you really want to close this project: "%s"?' => 'このプロジェクトを本当に終了しますか?: %s', + 'Reopen a project' => 'プロジェクトを開く', + 'Do you really want to reopen this project: "%s"?' => 'このプロジェクトを開きますか?: %s', + 'This project is open' => 'このプロジェクトは進行中', + 'This project is closed' => 'このプロジェクトは終了しました', + 'Unable to upload files, check the permissions of your data folder.' => 'ファイルをアップロードできません。データフォルダのアクセス権を確認してください。', + 'Another category with the same name exists in this project' => '同じ名前の別のカテゴリがプロジェクトに存在します', + 'Comment sent by email successfully.' => 'メールでコメントを送信しました', + 'Sent by email to [%s](mailto:%s) (%s)' => '%s をメールで送信しました(mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'アップロードされたファイルを読み込めません', + 'Database uploaded successfully.' => 'データベースをアップロードしました', + 'Task sent by email successfully.' => 'タスクをメールで送信しました', + 'There is no category in this project.' => 'このプロジェクトにカテゴリはありません', + 'Send by email' => 'メールで送る', + 'Create and send a comment by email' => 'Eメールでコメントを送信', + 'Subject' => '件名', + 'Upload the database' => 'データベースをアップロード', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => '以前にダウンロードしたSqliteデータベース(Gzip形式)をアップロードできます', + 'Database file' => 'データベースファイル', + 'Upload' => 'アップロード', + 'Your project must have at least one active swimlane.' => 'プロジェクトには少なくとも1つのアクティブなスイムレーンが必要です', + 'Project: %s' => 'プロジェクト:%s', + 'Automatic action not found: "%s"' => '自動アクションが見つかりません: %s', + '%d projects' => '%d 件のプロジェクト', + '%d project' => '%d プロジェクト', + 'There is no project.' => 'プロジェクトはありません', + 'Sort' => 'ソート', + 'Project ID' => 'プロジェクトID', + 'Project name' => 'プロジェクト名', + 'Public' => '公開', + 'Private' => 'プライベート', + '%d tasks' => '%d 件のタスク', + '%d task' => '%d タスク', + 'Task ID' => 'タスクID', + 'Assign automatically a color when due date is expired' => '期限が切れたら自動的に色を割当て', + 'Total score in this column across all swimlanes' => 'このカラムのすべてのスイムレーンで合計得点', // 'HRK - Kuna' => '', + 'ARS - Argentine Peso' => 'ARS - アルゼンチンペソ', + 'COP - Colombian Peso' => 'COP - コロンビアペソ', + '%d groups' => '%d個のグループ', + '%d group' => '%d グループ', + 'Group ID' => 'グループID', + 'External ID' => '外部ID', + '%d users' => '%d 人のユーザー', + '%d user' => '%d ユーザー', + 'Hide subtasks' => 'サブタスクを隠す', + 'Show subtasks' => 'サブタスクを表示', + 'Authentication Parameters' => '認証パラメータ', + 'API Access' => 'APIアクセス', + 'No users found.' => 'ユーザーが見つかりません', + 'User ID' => 'ユーザーID', + 'Notifications are activated' => '通知は有効', + 'Notifications are disabled' => '通知は無効', + 'User disabled' => 'ユーザーを無効にしました', + '%d notifications' => '%d 件の通知', + '%d notification' => '%d 通知', + 'There is no external integration installed.' => '外部インテグレーションはインストールされていません', + 'You are not allowed to update tasks assigned to someone else.' => '他の人に割当てられたタスクを更新する権限がありません', + 'You are not allowed to change the assignee.' => '担当者を変更する権限はありません', + 'Task suppression is not permitted' => 'タスクの抑制は許可されていません', + 'Changing assignee is not permitted' => '担当者は変更できません', + 'Update only assigned tasks is permitted' => '割当てられたタスクのみ更新できます', + 'Only for tasks assigned to the current user' => '現在のユーザーに割当てられたタスクのみ', + 'My projects' => '自分のプロジェクト', + 'Your are not member of any project.' => 'あなたが所属しているプロジェクトにはありません', + 'My subtasks' => '自分のサブタスク', + '%d subtasks' => '%d 件のサブタスク', + '%d subtask' => '%d サブタスク', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => '現在のユーザーに割当てられたタスクは、これらのカラム間の移動のみが許可されます', + '[DUPLICATE]' => '[コピー]', + 'DKK - Danish Krona' => 'DKK - デンマーククローナ', + 'Remove user from group' => 'ユーザーをグループから削除', + 'Assign the task to its creator' => '作成者にタスクを割当て', + 'This task was sent by email to "%s" with subject "%s".' => 'このタスクをメールで 「%s」 に送信しました(件名 "%s")', + 'Predefined Email Subjects' => '既定のメールの件名', + 'Write one subject by line.' => '行ごとに1つずつ件名を書く', + 'Create another link' => '別のリンクを作成', + 'BRL - Brazilian Real' => 'BRL - ブラジルレアル', + 'Add a new Kanboard task' => 'Kanboard タスクを追加', + 'Subtask not started' => 'サブタスクは開始されていません', + 'Subtask currently in progress' => 'サブタスクは進行中', + 'Subtask completed' => 'サブタスクは完了', + 'Subtask added successfully.' => 'サブタスクを追加しました', + '%d subtasks added successfully.' => '%d 件のサブタスクを追加しました', + 'Enter one subtask by line.' => '1行に1件のサブタスクを入力', + 'Predefined Contents' => '定義済みコンテンツ', + 'Predefined contents' => '定義済みコンテンツ', + 'Predefined Task Description' => '定義済みタスクの説明', + 'Do you really want to remove this template? "%s"' => 'このテンプレートを削除しますか?: %s', + 'Add predefined task description' => '定義済みのタスクの説明を追加', + 'Predefined Task Descriptions' => '定義済みタスクの説明', + 'Template created successfully.' => 'テンプレートを作成しました', + 'Unable to create this template.' => 'テンプレートを作成できません', + 'Template updated successfully.' => 'テンプレートを更新しました', + 'Unable to update this template.' => 'テンプレートを更新できません', + 'Template removed successfully.' => 'テンプレートを削除しました', + 'Unable to remove this template.' => 'テンプレートを削除できません', + 'Template for the task description' => 'タスク説明のテンプレート', + 'The start date is greater than the end date' => '開始日が終了日を超えています', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index 5e068fd7..a4ae9319 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => '관리자', 'Sign in' => '로그인', 'Users' => '사용자', - 'No user' => '사용자가 없습니다', 'Forbidden' => '접근 거부', 'Access Forbidden' => '접속이 거부되었습니다', 'Edit user' => '사용자를 변경하는 ', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => '서브 할일을 갱신했습니다.', 'Unable to update your sub-task.' => '서브 할일의 경신에 실패했습니다.', 'Unable to create your sub-task.' => '서브 할일의 추가에 실패했습니다.', - 'Sub-task added successfully.' => '서브 할일을 추가했습니다.', 'Maximum size: ' => '최대: ', 'Display another project' => '프로젝트 보기', 'Created by %s' => '작성자 %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => '활동기록', 'Dashboard' => '대시보드', 'Confirmation' => '확인', - 'Allow everybody to access to this project' => '모든 사람이 이 프로젝트에 접근할 수 있도록 합니다', - 'Everybody have access to this project.' => '누구나 이 프로젝트에 액세스 할 수 있습니다', 'Webhooks' => 'Webhook', 'API' => 'API', 'Create a comment from an external provider' => '외부 서비스로부터 의견을 작성한다', 'Project management' => '프로젝트 관리', - 'My projects' => '내 프로젝트', 'Columns' => '컬럼', 'Task' => '할일', - 'Your are not member of any project.' => '어떤 프로젝트에도 속하지 않습니다.', 'Percentage' => '비중', 'Number of tasks' => '할일 수', 'Task distribution' => '할일 분포', 'Analytics' => '분석', 'Subtask' => '서브 할일', - 'My subtasks' => '내 서브 할일', 'User repartition' => '담당자 분포', 'Clone this project' => '이 프로젝트를 복제하는 ', 'Column removed successfully.' => '(※)컬럼을 삭제했습니다', @@ -459,7 +452,6 @@ return array( 'Language:' => '언어:', 'Timezone:' => '시간대:', 'All columns' => '모든 컬럼', - 'Calendar' => '달력', 'Next' => '다음에 ', '#%d' => '#%d', 'All swimlanes' => '모든 스윔레인', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => '이 통화 환율을 추가할 수 없습니다.', 'Webhook URL' => 'Webhook URL', '%s removed the assignee of the task %s' => '%s이 할일 %s의 담당을 삭제했습니다', - 'Enable Gravatar images' => 'Gravatar이미지를 활성화', 'Information' => '정보', 'Check two factor authentication code' => '2단 인증을 체크한다', 'The two factor authentication code is not valid.' => '2단 인증 코드는 무효입니다.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => '할일이 첫번째 컬럼으로 옮겨졌을때', 'When task is moved to last column' => '할일이 마지막 컬럼으로 옮겨졌을때', 'Year(s)' => '년', - 'Calendar settings' => '달력 설정', - 'Project calendar view' => '프로젝트 달력 보기', 'Project settings' => '프로젝트 설정', - 'Show subtasks based on the time tracking' => '시간 트래킹의 서브 할일 보기', - 'Show tasks based on the creation date' => '생성 날짜로 할일 보기', - 'Show tasks based on the start date' => '시작 날짜로 할일 보기', - 'Subtasks time tracking' => '서브 할일 시간 트래킹', - 'User calendar view' => '담당자 달력 보기', 'Automatically update the start date' => '시작일에 자동 갱신', 'iCal feed' => 'iCal 피드', 'Preferences' => '우선권', @@ -637,7 +621,6 @@ return array( 'Notification' => '알림', '%s moved the task #%d to the first swimlane' => '%s가 할일 #%d를 첫번째 스웜레인으로 이동시켰습니다', 'Swimlane' => '스윔레인', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s가 할일 %s를 첫번째 스웜레인으로 이동시켰습니다', '%s moved the task %s to the swimlane "%s"' => '%s가 할일 %s를 %s 스웜레인으로 이동시켰습니다', 'This report contains all subtasks information for the given date range.' => '해당 기간의 모든 서브 할일 정보가 보고서에 포함됩니다', @@ -674,7 +657,6 @@ return array( 'Stop timer' => '타이머 정지', 'Start timer' => '타이머 시작', 'My activity stream' => '내 활동기록', - 'My calendar' => '내 캘린더', 'Search tasks' => '할일 찾기', 'Reset filters' => '필터 리셋', 'My tasks due tomorrow' => '내일까지 내 할일', @@ -688,7 +670,6 @@ return array( 'Overview' => '개요', 'Board/Calendar/List view' => '보드/달력/리스트 보기', 'Switch to the board view' => '보드 보기로 전환', - 'Switch to the calendar view' => '달력 보기로 전환', 'Switch to the list view' => '리스트 보기로 전환', 'Go to the search/filter box' => '검색/필터 박스로 이동', 'There is no activity yet.' => '활동이 없습니다', @@ -743,15 +724,8 @@ return array( 'License:' => '라이센스:', 'License' => '라이센스', 'Enter the text below' => '아랫글로 들어가기', - 'Sort by position' => '위치별 정렬', - 'Sort by date' => '날짜별 정렬', - 'Add task' => '할일 추가', 'Start date:' => '시작일:', 'Due date:' => '만기일:', - 'There is no start date or due date for this task.' => '할일의 시작일 또는 만기일이 없습니다', - 'Moving or resizing a task will change the start and due date of the task.' => '할일의 이동 혹은 리사이징으로 시작시간과 마감시간이 변경됩니다.', - 'There is no task in your project.' => '프로젝트에 할일이 없습니다.', - 'Gantt chart' => '간트 차트', 'People who are project managers' => '프로젝트 매니저', 'People who are project members' => '프로젝트 멤버', 'NOK - Norwegian Krone' => 'NOK - 노르웨이 크로네', @@ -763,22 +737,15 @@ return array( 'Members' => '멤버', 'Shared project' => '프로젝트 공유', 'Project managers' => '프로젝트 매니저', - 'Gantt chart for all projects' => '모든 프로젝트의 간트 차트', 'Projects list' => '프로젝트 리스트', - 'Gantt chart for this project' => '이 프로젝트 간트차트', - 'Project board' => '프로젝트 보드', 'End date:' => '날짜 수정', - 'There is no start date or end date for this project.' => '이 프로젝트에는 시작날짜와 종료날짜가 없습니다', - 'Projects Gantt chart' => '프로젝트 간트차트', 'Change task color when using a specific task link' => '특정 할일 링크를 사용할때 할일의 색깔 변경', 'Task link creation or modification' => '할일 링크 생성 혹은 수정', 'Milestone' => '마일스톤', 'Documentation: %s' => '문서: %s', - 'Switch to the Gantt chart view' => '간트 차트 보기로 변경', 'Reset the search/filter box' => '찾기/필터 박스 초기화', 'Documentation' => '문서', 'Table of contents' => '목차', - 'Gantt' => '간트', 'Author' => '글쓴이', 'Version' => '버전', 'Plugins' => '플러그인', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => '가능한 사용자가 없습니다', 'Do you really want to remove the user "%s" from the group "%s"?' => '"%s" 사용자를 "%s" 에서 삭제하시겠습니까?', 'There is no group.' => '그룹이 없습니다', - 'External Id' => '외부 아이디', 'Add group member' => '멤버추가', 'Do you really want to remove this group: "%s"?' => '그룹을 삭제하시겠습니까: "%s"?', 'There is no user in this group.' => '이 그룹에는 사용자가 없습니다', @@ -955,7 +921,6 @@ return array( 'Default priority' => '기본 우선순위', 'Lowest priority' => '낮은 우선순위', 'Highest priority' => '높은 우선순위', - 'If you put zero to the low and high priority, this feature will be disabled.' => '만약 낮은/높은 우선순위에 0을 입력하면 이 특성은 비활성화됩니다', 'Close a task when there is no activity' => '활동이 없는 할일을 종료합니다', 'Duration in days' => '기간', 'Send email when there is no activity on a task' => '활동이 없는 할일을 이메일로 보냅니다', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => '%s의 서브 할일 개요', 'Projects overview for %s' => '%s의 프로젝트 개요', 'Activity stream for %s' => '%s의 활동기록', - 'Calendar for %s' => '%s의 달력', - 'Notifications for %s' => '%s의 알림', 'Assign a color when the task is moved to a specific swimlane' => '할일이 특정 스웜라인으로 옮겨질 때 색상 지정', 'Assign a priority when the task is moved to a specific swimlane' => '할일이 특정 스웜라인으로 옮겨질 때 우선순위 지정', 'User unlocked successfully.' => '사용자 잠금 성공', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php index 2fc12a35..eee1428c 100644 --- a/app/Locale/my_MY/translations.php +++ b/app/Locale/my_MY/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Pentadbir', 'Sign in' => 'Masuk', 'Users' => 'Para Pengguna', - 'No user' => 'Tiada pengguna', 'Forbidden' => 'Larangan', 'Access Forbidden' => 'Akses Dilarang', 'Edit user' => 'Ubah Pengguna', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Sub-tugas berhasil diperbaharui.', 'Unable to update your sub-task.' => 'Tidak dapat memperbaharui sub-tugas anda.', 'Unable to create your sub-task.' => 'Tidak dapat membuat sub-tugas anda.', - 'Sub-task added successfully.' => 'Sub-tugas berhasil dibuat.', 'Maximum size: ' => 'Ukuran maksimum: ', 'Display another project' => 'Lihat projek lain', 'Created by %s' => 'Dibuat oleh %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Arus aktifitas', 'Dashboard' => 'Dasbor', 'Confirmation' => 'Konfirmasi', - 'Allow everybody to access to this project' => 'Memungkinkan semua orang untuk mengakses projek ini', - 'Everybody have access to this project.' => 'Semua orang mendapat akses untuk projek ini.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Buat komentar dari pemasok eksternal', 'Project management' => 'Manajemen projek', - 'My projects' => 'projek saya', 'Columns' => 'Kolom', 'Task' => 'Tugas', - 'Your are not member of any project.' => 'Anda bukan anggota dari setiap projek.', 'Percentage' => 'Persentasi', 'Number of tasks' => 'Jumlah dari tugas', 'Task distribution' => 'Pembagian tugas', 'Analytics' => 'Analitis', 'Subtask' => 'Subtugas', - 'My subtasks' => 'Subtugas saya', 'User repartition' => 'Partisi ulang pengguna', 'Clone this project' => 'Gandakan projek ini', 'Column removed successfully.' => 'Kolom berhasil dihapus.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Bahasa:', 'Timezone:' => 'Zon masa:', 'All columns' => 'Semua kolom', - 'Calendar' => 'Kalender', 'Next' => 'Selanjutnya', '#%d' => 'n°%d', 'All swimlanes' => 'Semua swimlane', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Tidak dapat menambahkan nilai tukar mata uang', 'Webhook URL' => 'URL webhook', '%s removed the assignee of the task %s' => '%s menghapus penugasan dari tugas %s', - 'Enable Gravatar images' => 'Mengaktifkan gambar Gravatar', 'Information' => 'Informasi', 'Check two factor authentication code' => 'Cek dua faktor kode otentifikasi', 'The two factor authentication code is not valid.' => 'Kode dua faktor kode otentifikasi tidak valid.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Ketika tugas dipindahkan dari kolom pertama', 'When task is moved to last column' => 'Ketika tugas dipindahkan ke kolom terakhir', 'Year(s)' => 'Tahun', - 'Calendar settings' => 'Pengaturan kalender', - 'Project calendar view' => 'Tampilan kalender projek', 'Project settings' => 'Pengaturan projek', - 'Show subtasks based on the time tracking' => 'Tampilkan subtugas berdasarkan pelacakan waktu', - 'Show tasks based on the creation date' => 'Tampilkan tugas berdasarkan tanggal pembuatan', - 'Show tasks based on the start date' => 'Tampilkan tugas berdasarkan tanggal mulai', - 'Subtasks time tracking' => 'Pelacakan waktu subtgas', - 'User calendar view' => 'Pengguna tampilan kalender', 'Automatically update the start date' => 'Otomatikkan pengemaskinian tanggal', 'iCal feed' => 'iCal feed', 'Preferences' => 'Keutamaan', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Pemberitahuan', '%s moved the task #%d to the first swimlane' => '%s memindahkan tugas n°%d ke swimlane pertama', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s memindahkan tugas %s ke swimlane pertama', '%s moved the task %s to the swimlane "%s"' => '%s memindahkan tugas %s ke swimlane « %s »', 'This report contains all subtasks information for the given date range.' => 'Laporan ini berisi semua informasi subtugas untuk rentang tanggal tertentu.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Hentikan timer', 'Start timer' => 'Mulai timer', 'My activity stream' => 'Aliran kegiatan saya', - 'My calendar' => 'Kalender saya', 'Search tasks' => 'Cari tugas', 'Reset filters' => 'Reset ulang filter', 'My tasks due tomorrow' => 'Tugas saya yang berakhir besok', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Ikhtisar', 'Board/Calendar/List view' => 'Tampilan Papan/Kalender/Daftar', 'Switch to the board view' => 'Beralih ke tampilan papan', - 'Switch to the calendar view' => 'Beralih ke tampilan kalender', 'Switch to the list view' => 'Beralih ke tampilan daftar', 'Go to the search/filter box' => 'Pergi ke kotak pencarian/filter', 'There is no activity yet.' => 'Tidak ada aktifitas saat ini.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Lesen:', 'License' => 'Lesen', 'Enter the text below' => 'Masukkan teks di bawah', - 'Sort by position' => 'Urutkan berdasarkan posisi', - 'Sort by date' => 'Urutkan berdasarkan tanggal', - 'Add task' => 'Tambah tugas', 'Start date:' => 'Tanggal mulai:', 'Due date:' => 'Batas waktu:', - 'There is no start date or due date for this task.' => 'Tiada tanggal mulai dan batas waktu untuk tugas ini.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Memindahkan atau mengubah ukuran tugas anda akan mengubah tanggal mulai dan batas waktu dari tugas ini.', - 'There is no task in your project.' => 'Tiada tugas didalam projek anda.', - 'Gantt chart' => 'Carta Gantt', 'People who are project managers' => 'Orang-orang yang menjadi pengurus projek', 'People who are project members' => 'Orang-orang yang menjadi anggota projek', 'NOK - Norwegian Krone' => 'NOK - Krone Norwegia', @@ -763,22 +737,15 @@ return array( 'Members' => 'Anggota', 'Shared project' => 'projek bersama', 'Project managers' => 'Pengurus projek', - 'Gantt chart for all projects' => 'Carta Gantt untuk kesemua projek', 'Projects list' => 'Senarai projek', - 'Gantt chart for this project' => 'Carta Gantt untuk projek ini', - 'Project board' => 'Papan projek', 'End date:' => 'Waktu berakhir :', - 'There is no start date or end date for this project.' => 'Tidak ada waktu mula atau waktu berakhir pada projek ini', - 'Projects Gantt chart' => 'projekkan carta Gantt', 'Change task color when using a specific task link' => 'Rubah warna tugas ketika menggunakan Pautan tugas yang spesifik', 'Task link creation or modification' => 'Pautan tugas pada penciptaan atau penyuntingan', 'Milestone' => 'Batu Tanda', 'Documentation: %s' => 'Dokumentasi : %s', - 'Switch to the Gantt chart view' => 'Beralih ke tampilan Carta Gantt', 'Reset the search/filter box' => 'Tetap semula pencarian/saringan', 'Documentation' => 'Dokumentasi', 'Table of contents' => 'Isi kandungan', - 'Gantt' => 'Gantt', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php index 59c4e7f1..0ffc7ee1 100644 --- a/app/Locale/nb_NO/translations.php +++ b/app/Locale/nb_NO/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Logg inn', 'Users' => 'Brukere', - 'No user' => 'Ingen bruker', 'Forbidden' => 'Ikke tillatt', 'Access Forbidden' => 'Adgang ikke tillatt', 'Edit user' => 'Rediger bruker', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Deloppgaven er opdateret.', 'Unable to update your sub-task.' => 'Deloppgaven kunne ikke opdateres.', 'Unable to create your sub-task.' => 'Deloppgaven kunne ikke oprettes.', - 'Sub-task added successfully.' => 'Deloppgaven er lagt til.', 'Maximum size: ' => 'Maksimum størrelse: ', 'Display another project' => 'Vis annet prosjekt...', 'Created by %s' => 'Opprettet av %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Aktivitetslogg', 'Dashboard' => 'Hovedsiden', 'Confirmation' => 'Bekreftelse', - 'Allow everybody to access to this project' => 'Gi alle tilgang til dette prosjektet', - 'Everybody have access to this project.' => 'Alle har tilgang til dette prosjektet', // 'Webhooks' => '', // 'API' => '', 'Create a comment from an external provider' => 'Opprett en kommentar fra en ekstern tilbyder', 'Project management' => 'Prosjektinnstillinger', - 'My projects' => 'Mine prosjekter', 'Columns' => 'Kolonner', 'Task' => 'Oppgave', - // 'Your are not member of any project.' => '', 'Percentage' => 'Prosent', 'Number of tasks' => 'Antall oppgaver', 'Task distribution' => 'Kolonnefordeling', 'Analytics' => 'Analyser', 'Subtask' => 'Deloppgave', - 'My subtasks' => 'Mine deloppgaver', 'User repartition' => 'Brukerfordeling', 'Clone this project' => 'Kopier dette prosjektet', 'Column removed successfully.' => 'Kolonne flyttet', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Språk', 'Timezone:' => 'Tidssone', 'All columns' => 'Alle kolonner', - 'Calendar' => 'Kalender', 'Next' => 'Neste', // '#%d' => '', 'All swimlanes' => 'Alle svømmebaner', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', // 'Webhook URL' => '', // '%s removed the assignee of the task %s' => '', - // 'Enable Gravatar images' => '', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Når oppgaven er flyttet fra første kolon', 'When task is moved to last column' => 'Når oppgaven er flyttet til siste kolonne', 'Year(s)' => 'år', - 'Calendar settings' => 'Kalenderinstillinger', - 'Project calendar view' => 'Visning prosjektkalender', 'Project settings' => 'Prosjektinnstillinger', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', 'Automatically update the start date' => 'Oppdater automatisk start-datoen', // 'iCal feed' => '', 'Preferences' => 'Preferanser', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Varsel', // '%s moved the task #%d to the first swimlane' => '', 'Swimlane' => 'Svømmebane', - // 'Gravatar' => '', // '%s moved the task %s to the first swimlane' => '', // '%s moved the task %s to the swimlane "%s"' => '', // 'This report contains all subtasks information for the given date range.' => '', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Stopp timer', 'Start timer' => 'Start timer', 'My activity stream' => 'Aktivitetslogg', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Søk oppgave', 'Reset filters' => 'Nullstill filter', 'My tasks due tomorrow' => 'Mine oppgaver med frist i morgen', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Oversikt', 'Board/Calendar/List view' => 'Oversikt/kalender/listevisning', 'Switch to the board view' => 'Oversiktsvisning', - 'Switch to the calendar view' => 'Kalendevisning', 'Switch to the list view' => 'Listevisning', 'Go to the search/filter box' => 'Gå til søk/filter', 'There is no activity yet.' => 'Ingen aktiviteter ennå.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Lisens:', 'License' => 'Lisens', 'Enter the text below' => 'Legg inn teksten nedenfor', - // 'Sort by position' => '', - 'Sort by date' => 'Sorter etter dato', - 'Add task' => 'Legg til oppgave', 'Start date:' => 'Startdato:', 'Due date:' => 'Frist:', - 'There is no start date or due date for this task.' => 'Det er ingen startdato eller frist for denne oppgaven', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - 'There is no task in your project.' => 'Det er ingen oppgaver i dette prosjektet', - 'Gantt chart' => 'Gantt skjema', 'People who are project managers' => 'Prosjektledere', 'People who are project members' => 'Prosjektmedlemmer', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( 'Members' => 'Medlemmer', 'Shared project' => 'Delt prosjekt', 'Project managers' => 'Prosjektledere', - // 'Gantt chart for all projects' => '', 'Projects list' => 'Prosjektliste', - 'Gantt chart for this project' => 'Gantt skjema for dette prosjektet', - 'Project board' => 'Prosjektsiden', 'End date:' => 'Sluttdato:', - // 'There is no start date or end date for this project.' => '', - 'Projects Gantt chart' => 'Gantt skjema for prosjekter', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', 'Milestone' => 'Milepæl', 'Documentation: %s' => 'Dokumentasjon: %s', - 'Switch to the Gantt chart view' => 'Gantt skjema visning', 'Reset the search/filter box' => 'Nullstill søk/filter', 'Documentation' => 'Dokumentasjon', 'Table of contents' => 'Innholdsfortegnelse', - 'Gantt' => 'Gantt', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index 11308340..12db3656 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Inloggen', 'Users' => 'Gebruikers', - 'No user' => 'Geen gebruiker', 'Forbidden' => 'Geweigerd', 'Access Forbidden' => 'Toegang geweigerd', 'Edit user' => 'Gebruiker bewerken', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Subtaak succesvol aangepast.', 'Unable to update your sub-task.' => 'Subtaak aanpassen niet gelukt.', 'Unable to create your sub-task.' => 'Subtaak aanmaken niet gelukt.', - 'Sub-task added successfully.' => 'Subtaak succesvol aangemaakt.', 'Maximum size: ' => 'Maximale grootte : ', 'Display another project' => 'Een ander project weergeven', 'Created by %s' => 'Aangemaakt door %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Activiteiten', 'Dashboard' => 'Dashboard', // 'Confirmation' => '', - 'Allow everybody to access to this project' => 'Geef iedereen toegang tot dit project', - 'Everybody have access to this project.' => 'Iedereen heeft toegang tot dit project.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Voeg een commentaar toe van een externe provider', 'Project management' => 'Project management', - 'My projects' => 'Mijn projecten', 'Columns' => 'Kolommen', 'Task' => 'Taak', - 'Your are not member of any project.' => 'U bent van geen enkel project lid.', 'Percentage' => 'Percentage', 'Number of tasks' => 'Aantal taken', 'Task distribution' => 'Distributie van taken', 'Analytics' => 'Analytics', 'Subtask' => 'Subtaak', - 'My subtasks' => 'Mijn subtaken', 'User repartition' => 'Gebruikerverdeling', 'Clone this project' => 'Kloon dit project', 'Column removed successfully.' => 'Kolom succesvol verwijderd.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Taal :', 'Timezone:' => 'Tijdzone :', 'All columns' => 'Alle kolommen', - 'Calendar' => 'Agenda', 'Next' => 'Volgende', '#%d' => '%d', 'All swimlanes' => 'Alle swimlanes', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', 'Webhook URL' => 'Webhook URL', // '%s removed the assignee of the task %s' => '', - // 'Enable Gravatar images' => '', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -573,7 +564,7 @@ return array( // 'Burndown chart' => '', // 'This chart show the task complexity over the time (Work Remaining).' => '', // 'Screenshot taken %s' => '', - // 'Add a screenshot' => '', + 'Add a screenshot' => 'Screenshot toevoegen', // 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => '', // 'Screenshot uploaded successfully.' => '', // 'SEK - Swedish Krona' => '', @@ -589,7 +580,7 @@ return array( // 'The identifier must be unique' => '', // 'This linked task id doesn\'t exists' => '', // 'This value must be alphanumeric' => '', - // 'Edit recurrence' => '', + 'Edit recurrence' => 'Herhaling instellen', // 'Generate recurrent task' => '', // 'Trigger to generate recurrent task' => '', // 'Factor to calculate new due date' => '', @@ -611,14 +602,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', 'Year(s)' => 'Jaar/Jaren', - 'Calendar settings' => 'Kalender instellingen', - // 'Project calendar view' => '', 'Project settings' => 'Project instellingen', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Voorkeuren', @@ -637,7 +621,6 @@ return array( // 'Notification' => '', // '%s moved the task #%d to the first swimlane' => '', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s heeft de taak %s naar de eerste swimlane verplaatst', '%s moved the task %s to the swimlane "%s"' => '%s heeft taak %s naar swimlane "%s" verplaatst', // 'This report contains all subtasks information for the given date range.' => '', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Stop timer', 'Start timer' => 'Start timer', 'My activity stream' => 'Mijn activiteiten', - 'My calendar' => 'Mijn kalender', 'Search tasks' => 'Zoek taken', 'Reset filters' => 'Reset filters', // 'My tasks due tomorrow' => '', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Overzicht', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', @@ -743,15 +724,8 @@ return array( // 'License:' => '', // 'License' => '', // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', // 'Start date:' => '', // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( 'Members' => 'Leden', // 'Shared project' => '', // 'Project managers' => '', - // 'Gantt chart for all projects' => '', // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', 'Milestone' => 'Mijlpaal', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', // 'Documentation' => '', // 'Table of contents' => '', - // 'Gantt' => '', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -941,21 +907,20 @@ return array( // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', // 'Close all tasks of this column' => '', // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', - // 'My dashboard' => '', - // 'My profile' => '', - // 'Project owner: ' => '', + 'My dashboard' => 'Mijn dashboard', + 'My profile' => 'Mijn profiel', + 'Project owner: ' => 'Project eigenaar: ', // 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => '', - // 'Project owner' => '', + 'Project owner' => 'Project eigenaar', // 'Private projects do not have users and groups management.' => '', // 'There is no project member.' => '', - // 'Priority' => '', - // 'Task priority' => '', - // 'General' => '', + 'Priority' => 'Prioriteit', + 'Task priority' => 'Taak prioriteit', + 'General' => 'Algemeen', // 'Dates' => '', // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -984,28 +949,28 @@ return array( // 'Users management' => '', // 'Groups management' => '', // 'Create from another project' => '', - // 'open' => '', - // 'closed' => '', - // 'Priority:' => '', + 'open' => 'open', + 'closed' => 'gesloten', + 'Priority:' => 'Prioriteit:', // 'Reference:' => '', - // 'Complexity:' => '', + 'Complexity:' => 'Complexiteit:', // 'Swimlane:' => '', - // 'Column:' => '', - // 'Position:' => '', - // 'Creator:' => '', - // 'Time estimated:' => '', + 'Column:' => 'Kolom:', + 'Position:' => 'Positie:', + 'Creator:' => 'Aanmaker:', + 'Time estimated:' => 'Ingeschatte tijd:', // '%s hours' => '', - // 'Time spent:' => '', - // 'Created:' => '', - // 'Modified:' => '', - // 'Completed:' => '', - // 'Started:' => '', - // 'Moved:' => '', + 'Time spent:' => 'Bestede tijd:', + 'Created:' => 'Aangemaakt:', + 'Modified:' => 'Gewijzigd:', + 'Completed:' => 'Afgerond:', + 'Started:' => 'Begonnen:', + 'Moved:' => 'Verplaatst:', // 'Task #%d' => '', - // 'Time format' => '', - // 'Start date: ' => '', - // 'End date: ' => '', - // 'New due date: ' => '', + 'Time format' => 'Tijd formaat', + 'Start date: ' => 'Begindatum: ', + 'End date: ' => 'Einddatum: ', + 'New due date: ' => 'Nieuwe einddatum: ', // 'Start date changed: ' => '', // 'Disable private projects' => '', // 'Do you really want to remove this custom filter: "%s"?' => '', @@ -1125,7 +1090,7 @@ return array( // 'Email sender address' => '', // 'Email transport' => '', // 'Webhook token' => '', - // 'Project tags management' => '', + 'Project tags management' => 'Project tags beheer', // 'Tag created successfully.' => '', // 'Unable to create this tag.' => '', // 'Tag updated successfully.' => '', @@ -1135,10 +1100,10 @@ return array( // 'Global tags management' => '', // 'Tags' => '', // 'Tags management' => '', - // 'Add new tag' => '', + 'Add new tag' => 'Voeg een nieuwe tag toe', // 'Edit a tag' => '', // 'Project tags' => '', - // 'There is no specific tag for this project at the moment.' => '', + 'There is no specific tag for this project at the moment.' => 'Er zijn geen tags gedefinieerd voor dit project.', // 'Tag' => '', // 'Remove a tag' => '', // 'Do you really want to remove this tag: "%s"?' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1250,14 +1212,14 @@ return array( // 'Outgoing Emails' => '', // 'Add or change currency rate' => '', // 'Reference currency: %s' => '', - // 'Add custom filters' => '', + 'Add custom filters' => 'Voeg nieuw aangepast filter toe', // 'Export' => '', // 'Add link label' => '', // 'Incompatible Plugins' => '', // 'Compatibility' => '', // 'Permissions and ownership' => '', // 'Priorities' => '', - // 'Close this window' => '', + 'Close this window' => 'Sluit dit scherm', // 'Unable to upload this file.' => '', // 'Import tasks' => '', // 'Choose a project' => '', @@ -1267,10 +1229,10 @@ return array( // '%d invitation was sent.' => '', // 'Unable to create this user.' => '', // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', + 'Visible on dashboard' => 'Tonen op dashboard', // 'Created at:' => '', // 'Updated at:' => '', - // 'There is no custom filter.' => '', + 'There is no custom filter.' => 'Er zijn geen aangepaste filters.', // 'New User' => '', // 'Authentication' => '', // 'If checked, this user will use a third-party system for authentication.' => '', @@ -1293,14 +1255,14 @@ return array( // 'The project email is optional and could be used by several plugins.' => '', // 'The project email must be unique across all projects' => '', // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', + 'Close this project' => 'Dit project sluiten', + 'Open this project' => 'Dit project openen', // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', + 'Do you really want to close this project: "%s"?' => 'Weet u zeker dat u dit project wilt sluiten: "%s"?', + 'Reopen a project' => 'Heropen dit project', + 'Do you really want to reopen this project: "%s"?' => 'Weet u zeker dat u dit project wilt heropenen: "%s"?', + 'This project is open' => 'Dit project is open', + 'This project is closed' => 'Dit project is gesloten', // 'Unable to upload files, check the permissions of your data folder.' => '', // 'Another category with the same name exists in this project' => '', // 'Comment sent by email successfully.' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + 'My projects' => 'Mijn projecten', + // 'Your are not member of any project.' => '', + 'My subtasks' => 'Mijn subtaken', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index f075eb3a..78c0c2ea 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Zaloguj', 'Users' => 'Użytkownicy', - 'No user' => 'Brak użytkowników', 'Forbidden' => 'Zabroniony', 'Access Forbidden' => 'Dostęp zabroniony', 'Edit user' => 'Edytuj użytkownika', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Pod-zadanie zaktualizowane pomyślnie.', 'Unable to update your sub-task.' => 'Nie można zaktualizować tego pod-zadania.', 'Unable to create your sub-task.' => 'Nie można utworzyć tego pod-zadania.', - 'Sub-task added successfully.' => 'Pod-zadanie utworzone pomyślnie', 'Maximum size: ' => 'Maksymalny rozmiar: ', 'Display another project' => 'Wyświetl inny projekt', 'Created by %s' => 'Utworzone przez %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Strumień aktywności', 'Dashboard' => 'Dashboard', 'Confirmation' => 'Potwierdzenie', - 'Allow everybody to access to this project' => 'Udostępnij ten projekt wszystkim', - 'Everybody have access to this project.' => 'Wszyscy mają dostęp do tego projektu.', 'Webhooks' => 'Webhooki', // 'API' => '', 'Create a comment from an external provider' => 'Utwórz komentarz od zewnętrznego dostawcy', 'Project management' => 'Menadżer projektu', - 'My projects' => 'Moje projekty', 'Columns' => 'Kolumny', 'Task' => 'Zadanie', - 'Your are not member of any project.' => 'Nie bierzesz udziału w żadnym projekcie', 'Percentage' => 'Procent', 'Number of tasks' => 'Liczba zadań', 'Task distribution' => 'Rozmieszczenie zadań', 'Analytics' => 'Analizy', 'Subtask' => 'Pod-zadanie', - 'My subtasks' => 'Moje pod-zadania', 'User repartition' => 'Przydział użytkownika', 'Clone this project' => 'Sklonuj ten projekt', 'Column removed successfully.' => 'Kolumna usunięta pomyślnie.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Język:', 'Timezone:' => 'Strefa czasowa:', 'All columns' => 'Wszystkie kolumny', - 'Calendar' => 'Kalendarz', 'Next' => 'Następny', '#%d' => 'nr %d', 'All swimlanes' => 'Wszystkie tory', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Nie można dodać kursu waluty', 'Webhook URL' => 'Adres webhooka', '%s removed the assignee of the task %s' => '%s usunął osobę przypisaną do zadania %s', - 'Enable Gravatar images' => 'Włącz Gravatar', 'Information' => 'Informacje', 'Check two factor authentication code' => 'Sprawdź kod weryfikujący', 'The two factor authentication code is not valid.' => 'Kod weryfikujący niepoprawny', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Przeniesienie zadania z pierwszej kolumny', 'When task is moved to last column' => 'Przeniesienie zadania do ostatniej kolumny', 'Year(s)' => 'Lat', - 'Calendar settings' => 'Ustawienia kalendarza', - 'Project calendar view' => 'Widok kalendarza projektu', 'Project settings' => 'Ustawienia Projektu', - 'Show subtasks based on the time tracking' => 'Pokaż pod-zadania w śledzeniu czasu', - 'Show tasks based on the creation date' => 'Pokaż zadania względem daty utworzenia', - 'Show tasks based on the start date' => 'Pokaż zadania względem daty rozpoczęcia', - 'Subtasks time tracking' => 'Śledzenie czasu pod-zadań', - 'User calendar view' => 'Widok kalendarza użytkownika', 'Automatically update the start date' => 'Automatycznie aktualizuj datę rozpoczęcia', // 'iCal feed' => '', 'Preferences' => 'Ustawienia', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Powiadomienie', '%s moved the task #%d to the first swimlane' => '%s przeniosł zadanie #%d na pierwszy tor', 'Swimlane' => 'Tor', - // 'Gravatar' => '', '%s moved the task %s to the first swimlane' => '%s przeniosł zadanie %s na pierwszy tor', '%s moved the task %s to the swimlane "%s"' => '%s przeniosł zadanie %s na tor "%s"', 'This report contains all subtasks information for the given date range.' => 'Niniejszy raport zawiera wszystkie informacje o pod-zadaniach dla podanego zakresu dat.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Zatrzymaj pomiar czasu', 'Start timer' => 'Uruchom pomiar czasu', 'My activity stream' => 'Moja aktywność', - 'My calendar' => 'Mój kalendarz', 'Search tasks' => 'Szukaj zadań', 'Reset filters' => 'Resetuj zastosowane filtry', 'My tasks due tomorrow' => 'Moje zadania do jutra', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Podsumowanie', 'Board/Calendar/List view' => 'Widok: Tablica/Kalendarz/Lista', 'Switch to the board view' => 'Przełącz na tablicę', - 'Switch to the calendar view' => 'Przełącz na kalendarz', 'Switch to the list view' => 'Przełącz na listę', 'Go to the search/filter box' => 'Użyj pola wyszukiwania/filtrów', 'There is no activity yet.' => 'Brak powiadomień', @@ -743,15 +724,8 @@ return array( 'License:' => 'Licencja:', 'License' => 'Licencja', 'Enter the text below' => 'Wpisz tekst poniżej', - 'Sort by position' => 'Sortuj wg pozycji', - 'Sort by date' => 'Sortuj wg daty', - 'Add task' => 'Dodaj zadanie', 'Start date:' => 'Data rozpoczęcia:', 'Due date:' => 'Termin', - 'There is no start date or due date for this task.' => 'Brak daty rozpoczęcia lub terminu zadania', - 'Moving or resizing a task will change the start and due date of the task.' => 'Przeniesienie bądź edycja zmieni datę rozpoczęcia oraz termin ukończenia zadania.', - 'There is no task in your project.' => 'Brak zadań w projekcie.', - 'Gantt chart' => 'Wykres Gantta', 'People who are project managers' => 'Użytkownicy będący menedżerami projektu', 'People who are project members' => 'Użytkownicy będący uczestnikami projektu', 'NOK - Norwegian Krone' => 'NOK - Korona norweska', @@ -763,22 +737,15 @@ return array( 'Members' => 'Członkowie', 'Shared project' => 'Projekt udostępniony', 'Project managers' => 'Menedżerowie projektu', - 'Gantt chart for all projects' => 'Wykres Gantta dla wszystkich projektów', 'Projects list' => 'Lista projektów', - 'Gantt chart for this project' => 'Wykres Gantta dla bieżacego projektu', - 'Project board' => 'Talica projektu', 'End date:' => 'Data zakończenia:', - 'There is no start date or end date for this project.' => 'Nie zdefiniowano czasu trwania projektu', - 'Projects Gantt chart' => 'Wykres Gantta dla projektów', 'Change task color when using a specific task link' => 'Zmień kolor zadania używając specjalnego adresu URL', 'Task link creation or modification' => 'Adres URL do utworzenia zadania lub modyfikacji', 'Milestone' => 'Kamień milowy', 'Documentation: %s' => 'Dokumentacja: %s', - 'Switch to the Gantt chart view' => 'Przełącz na wykres Gantta', 'Reset the search/filter box' => 'Zresetuj pole wyszukiwania/filtrowania', 'Documentation' => 'Dokumentacja', 'Table of contents' => 'Tablica zawartości', - // 'Gantt' => '', 'Author' => 'Autor', 'Version' => 'Wersja', 'Plugins' => 'Wtyczki', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Żaden użytkownik nie jest dostępny.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Czy na pewno chcesz usunąć użytkownika "%s" z grupy "%s"?', 'There is no group.' => 'Nie utworzono jeszcze żadnej grupy.', - 'External Id' => 'Zewnętrzny Id', 'Add group member' => 'Dodaj członka grupy', 'Do you really want to remove this group: "%s"?' => 'Czy na pewno chcesz usunąć grupę "%s"?', 'There is no user in this group.' => 'Wybrana grupa nie posiada członków.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Domyślny priorytet', 'Lowest priority' => 'Najniższy priorytet', 'Highest priority' => 'Najwyższy priorytet', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Jeżeli dla najniższego i najwyższego priorytetu ustawisz 0, to priorytety dla tablicy zostaną wyłączone.', 'Close a task when there is no activity' => 'Zamknij zadanie gdy nie jest aktywne', 'Duration in days' => 'Czas trwania w dniach', 'Send email when there is no activity on a task' => 'Wyślij email gdy zadanie nie jest aktywne', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 32d37f38..ebe4582a 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -2,7 +2,7 @@ return array( 'number.decimals_separator' => ',', - 'number.thousands_separator' => ' ', + 'number.thousands_separator' => '.', 'None' => 'Nenhum', 'Edit' => 'Editar', 'Remove' => 'Remover', @@ -20,7 +20,7 @@ return array( 'Brown' => 'Marrom', 'Deep Orange' => 'Laranja escuro', 'Dark Grey' => 'Cinza escuro', - 'Pink' => 'Roza', + 'Pink' => 'Rosa', 'Teal' => 'Turquesa', 'Cyan' => 'Azul intenso', 'Lime' => 'Verde limão', @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrador', 'Sign in' => 'Entrar', 'Users' => 'Usuários', - 'No user' => 'Sem usuário', 'Forbidden' => 'Proibido', 'Access Forbidden' => 'Acesso negado', 'Edit user' => 'Editar usuário', @@ -52,17 +51,17 @@ return array( 'Project' => 'Projeto', 'Status' => 'Status', 'Tasks' => 'Tarefas', - 'Board' => 'Board', + 'Board' => 'Quadro', 'Actions' => 'Ações', 'Inactive' => 'Inativo', 'Active' => 'Ativo', - 'Unable to update this board.' => 'Não foi possível atualizar este board.', + 'Unable to update this board.' => 'Não foi possível atualizar este quadro.', 'Disable' => 'Desativar', 'Enable' => 'Ativar', 'New project' => 'Novo projeto', 'Do you really want to remove this project: "%s"?' => 'Você realmente deseja remover este projeto: "%s"?', 'Remove project' => 'Remover projeto', - 'Edit the board for "%s"' => 'Editar o board para "%s"', + 'Edit the board for "%s"' => 'Editar o quadro para "%s"', 'Add a new column' => 'Adicionar uma nova coluna', 'Title' => 'Título', 'Assigned to %s' => 'Designado para %s', @@ -73,9 +72,9 @@ return array( 'Application settings' => 'Configurações da aplicação', 'Language' => 'Idioma', 'Webhook token:' => 'Token de webhooks:', - 'API token:' => 'API Token:', + 'API token:' => 'Token de API:', 'Database size:' => 'Tamanho do banco de dados:', - 'Download the database' => 'Download do banco de dados', + 'Download the database' => 'Baixar o banco de dados', 'Optimize the database' => 'Otimizar o banco de dados', '(VACUUM command)' => '(Comando VACUUM)', '(Gzip compressed Sqlite file)' => '(Arquivo Sqlite comprimido com Gzip)', @@ -87,9 +86,9 @@ return array( 'New task' => 'Nova tarefa', 'Open a task' => 'Abrir uma tarefa', 'Do you really want to open this task: "%s"?' => 'Você realmente deseja abrir esta tarefa: "%s"?', - 'Back to the board' => 'Voltar ao board', + 'Back to the board' => 'Voltar ao quadro', 'There is nobody assigned' => 'Não há ninguém designado', - 'Column on the board:' => 'Coluna no board:', + 'Column on the board:' => 'Coluna no quadro:', 'Close this task' => 'Finalizar esta tarefa', 'Open this task' => 'Abrir esta tarefa', 'There is no description.' => 'Não há descrição.', @@ -110,7 +109,7 @@ return array( 'The title is required' => 'O título é obrigatório', 'Settings saved successfully.' => 'Configurações salvas com sucesso.', 'Unable to save your settings.' => 'Não é possível salvar suas configurações.', - 'Database optimization done.' => 'Otimização do banco de dados concluida.', + 'Database optimization done.' => 'Otimização do banco de dados concluída.', 'Your project have been created successfully.' => 'Seu projeto foi criado com sucesso.', 'Unable to create your project.' => 'Não é possível criar o seu projeto.', 'Project updated successfully.' => 'Projeto atualizado com sucesso.', @@ -134,7 +133,7 @@ return array( 'User updated successfully.' => 'Usuário atualizado com sucesso.', 'User removed successfully.' => 'Usuário removido com sucesso.', 'Unable to remove this user.' => 'Não é possível remover este usuário.', - 'Board updated successfully.' => 'Board atualizado com sucesso.', + 'Board updated successfully.' => 'Quadro atualizado com sucesso.', 'Ready' => 'A fazer', 'Backlog' => 'Backlog', 'Work in progress' => 'Em andamento', @@ -156,7 +155,7 @@ return array( 'Due Date' => 'Data fim estimada', 'Invalid date' => 'Data inválida', 'Automatic actions' => 'Ações automáticas', - 'Your automatic action have been created successfully.' => 'Sua ação automética foi criada com sucesso.', + 'Your automatic action have been created successfully.' => 'Sua ação automática foi criada com sucesso.', 'Unable to create your automatic action.' => 'Não é possível criar sua ação automática.', 'Remove an action' => 'Remover uma ação', 'Unable to remove this action.' => 'Não é possível remover esta ação.', @@ -168,7 +167,7 @@ return array( 'Event' => 'Evento', 'When the selected event occurs execute the corresponding action.' => 'Quando o evento selecionado ocorrer execute a ação correspondente.', 'Next step' => 'Próximo passo', - 'Define action parameters' => 'Definir parêmetros da ação', + 'Define action parameters' => 'Definir parâmetros da ação', 'Do you really want to remove this action: "%s"?' => 'Você realmente deseja remover esta ação: "%s"?', 'Remove an automatic action' => 'Remover uma ação automática', 'Assign the task to a specific user' => 'Designar a tarefa para um usuário específico', @@ -239,7 +238,7 @@ return array( 'Add a new category' => 'Adicionar uma nova categoria', 'Do you really want to remove this category: "%s"?' => 'Você realmente deseja remover esta categoria: "%s"?', 'All categories' => 'Todas as categorias', - 'No category' => 'Nenhum categoria', + 'No category' => 'Nenhuma categoria', 'The name is required' => 'O nome é obrigatório', 'Remove a file' => 'Remover um arquivo', 'Unable to remove this file.' => 'Não foi possível remover este arquivo.', @@ -267,14 +266,13 @@ return array( 'Edit a sub-task' => 'Editar uma subtarefa', 'Remove a sub-task' => 'Remover uma subtarefa', 'The time must be a numeric value' => 'O tempo deve ser um valor numérico', - 'Todo' => 'À fazer', + 'Todo' => 'A fazer', 'In progress' => 'Em andamento', 'Sub-task removed successfully.' => 'Subtarefa removida com sucesso.', 'Unable to remove this sub-task.' => 'Não foi possível remover esta subtarefa.', 'Sub-task updated successfully.' => 'Subtarefa atualizada com sucesso.', 'Unable to update your sub-task.' => 'Não foi possível atualizar a sua subtarefa.', 'Unable to create your sub-task.' => 'Não é possível criar a sua subtarefa.', - 'Sub-task added successfully.' => 'Subtarefa adicionada com sucesso.', 'Maximum size: ' => 'Tamanho máximo: ', 'Display another project' => 'Exibir outro projeto', 'Created by %s' => 'Criado por %s', @@ -288,7 +286,7 @@ return array( 'Clone' => 'Clonar', 'Project cloned successfully.' => 'Projeto clonado com sucesso.', 'Unable to clone this project.' => 'Não foi possível clonar este projeto.', - 'Enable email notifications' => 'Habilitar notificações por email', + 'Enable email notifications' => 'Habilitar notificações por e-mail', 'Task position:' => 'Posição da tarefa:', 'The task #%d have been opened.' => 'A tarefa #%d foi aberta.', 'The task #%d have been closed.' => 'A tarefa #%d foi finalizada.', @@ -346,7 +344,7 @@ return array( 'Not assigned, estimate of %sh' => 'Não designado, estimado em %sh', '%s updated a comment on the task %s' => '%s atualizou o comentário na tarefa %s', '%s commented the task %s' => '%s comentou a tarefa %s', - '%s\'s activity' => 'Atividades de%s', + '%s\'s activity' => 'Atividades de %s', 'RSS feed' => 'Feed RSS', '%s updated a comment on the task #%d' => '%s atualizou um comentário sobre a tarefa #%d', '%s commented on the task #%d' => '%s comentou sobre a tarefa #%d', @@ -372,12 +370,12 @@ return array( 'Database' => 'Banco de dados', 'About' => 'Sobre', 'Database driver:' => 'Driver do banco de dados:', - 'Board settings' => 'Configurações do board', + 'Board settings' => 'Configurações do quadro', 'Webhook settings' => 'Configurações do Webhook', 'Reset token' => 'Resetar token', 'API endpoint:' => 'API endpoint:', - 'Refresh interval for private board' => 'Intervalo de atualização para um board privado', - 'Refresh interval for public board' => 'Intervalo de atualização para um board público', + 'Refresh interval for private board' => 'Intervalo de atualização para um quadro privado', + 'Refresh interval for public board' => 'Intervalo de atualização para um quadro público', 'Task highlight period' => 'Período de Tarefa em destaque', 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Período (em segundos) para considerar que uma tarefa foi modificada recentemente (0 para desativar, 2 dias por padrão)', 'Frequency in second (60 seconds by default)' => 'Frequência em segundos (60 segundos por padrão)', @@ -391,27 +389,22 @@ return array( 'Add' => 'Adicionar', 'Start date' => 'Data de início', 'Time estimated' => 'Tempo estimado', - 'There is nothing assigned to you.' => 'Não há nada designado à você.', + 'There is nothing assigned to you.' => 'Não há nada designado a você.', 'My tasks' => 'Minhas tarefas', 'Activity stream' => 'Atividades Recentes', 'Dashboard' => 'Painel de Controle', 'Confirmation' => 'Confirmação', - 'Allow everybody to access to this project' => 'Permitir que todos acessem este projeto', - 'Everybody have access to this project.' => 'Todos possuem acesso a este projeto.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Criar um comentário por meio de um serviço externo', 'Project management' => 'Gerenciamento de projetos', - 'My projects' => 'Meus projetos', 'Columns' => 'Colunas', 'Task' => 'Tarefas', - 'Your are not member of any project.' => 'Você não é membro de nenhum projeto.', 'Percentage' => 'Porcentagem', 'Number of tasks' => 'Número de tarefas', 'Task distribution' => 'Distribuição de tarefas', 'Analytics' => 'Estatísticas', 'Subtask' => 'Subtarefa', - 'My subtasks' => 'Minhas subtarefas', 'User repartition' => 'Redistribuição de usuário', 'Clone this project' => 'Clonar este projeto', 'Column removed successfully.' => 'Coluna removida com sucesso.', @@ -433,19 +426,19 @@ return array( 'Daily project summary export' => 'Exportação diária do resumo do projeto', 'Exports' => 'Exportar', 'This export contains the number of tasks per column grouped per day.' => 'Esta exportação contém o número de tarefas por coluna agrupada por dia.', - 'Active swimlanes' => 'Ativar swimlanes', - 'Add a new swimlane' => 'Adicionar swimlane', - 'Default swimlane' => 'Swimlane padrão', - 'Do you really want to remove this swimlane: "%s"?' => 'Você realmente deseja remover esta swimlane: "%s"?', - 'Inactive swimlanes' => 'Desativar swimlanes', - 'Remove a swimlane' => 'Remover uma swimlane', - 'Swimlane modification for the project "%s"' => 'Modificação de swimlane para o projeto "%s"', - 'Swimlane removed successfully.' => 'Swimlane removida com sucesso.', - 'Swimlanes' => 'Swimlanes', - 'Swimlane updated successfully.' => 'Swimlane atualizada com sucesso.', - 'Unable to remove this swimlane.' => 'Não foi possível remover esta swimlane.', - 'Unable to update this swimlane.' => 'Não foi possível atualizar esta swimlane.', - 'Your swimlane have been created successfully.' => 'Sua swimlane foi criada com sucesso.', + 'Active swimlanes' => 'Ativar raias', + 'Add a new swimlane' => 'Adicionar uma nova raia', + 'Default swimlane' => 'Raia padrão', + 'Do you really want to remove this swimlane: "%s"?' => 'Você realmente deseja remover esta raia: "%s"?', + 'Inactive swimlanes' => 'Desativar raias', + 'Remove a swimlane' => 'Remover uma raia', + 'Swimlane modification for the project "%s"' => 'Modificação de raia para o projeto "%s"', + 'Swimlane removed successfully.' => 'Raia removida com sucesso.', + 'Swimlanes' => 'Raias', + 'Swimlane updated successfully.' => 'Raia atualizada com sucesso.', + 'Unable to remove this swimlane.' => 'Não foi possível remover esta raia.', + 'Unable to update this swimlane.' => 'Não foi possível atualizar esta raia.', + 'Your swimlane have been created successfully.' => 'Sua raia foi criada com sucesso.', 'Example: "Bug, Feature Request, Improvement"' => 'Exemplo: "Bug, Solicitação de Recurso, Melhoria"', 'Default categories for new projects (Comma-separated)' => 'Categorias padrões para novos projetos (separadas por vírgula)', 'Integrations' => 'Integrações', @@ -459,10 +452,9 @@ return array( 'Language:' => 'Idioma', 'Timezone:' => 'Fuso horário', 'All columns' => 'Todas as colunas', - 'Calendar' => 'Calendário', 'Next' => 'Próximo', '#%d' => '#%d', - 'All swimlanes' => 'Todas as swimlanes', + 'All swimlanes' => 'Todas as raias', 'All colors' => 'Todas as cores', 'Moved to column %s' => 'Mover para a coluna %s', 'User dashboard' => 'Painel de Controle do usuário', @@ -494,7 +486,7 @@ return array( 'Remove a link' => 'Remover uma associação', 'The labels must be different' => 'As etiquetas devem ser diferentes', 'There is no link.' => 'Não há nenhuma associação.', - 'This label must be unique' => 'Esta etiqueta deve ser unica', + 'This label must be unique' => 'Esta etiqueta deve ser única', 'Unable to create your link.' => 'Impossível de adicionar sua associação.', 'Unable to update your link.' => 'Impossível de atualizar sua associação.', 'Unable to remove this link.' => 'Impossível de remover sua associação.', @@ -517,9 +509,9 @@ return array( 'Expand/collapse tasks' => 'Expandir/Contrair tarefas', 'Close dialog box' => 'Fechar a caixa de diálogo', 'Submit a form' => 'Envia o formulário', - 'Board view' => 'Página do painel', + 'Board view' => 'Visão do quadro', 'Keyboard shortcuts' => 'Atalhos de teclado', - 'Open board switcher' => 'Abrir o comutador de painel', + 'Open board switcher' => 'Abrir opções de quadros', 'Application' => 'Aplicação', 'Compact view' => 'Vista reduzida', 'Horizontal scrolling' => 'Rolagem horizontal', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Impossível de adicionar essa taxa de câmbio.', 'Webhook URL' => 'URL do webhook', '%s removed the assignee of the task %s' => '%s removeu a pessoa designada para a tarefa %s', - 'Enable Gravatar images' => 'Ativar imagens do Gravatar', 'Information' => 'Informações', 'Check two factor authentication code' => 'Verifique o código de autenticação em duas etapas', 'The two factor authentication code is not valid.' => 'O código de autenticação em duas etapas não é válido.', @@ -574,7 +565,7 @@ return array( 'This chart show the task complexity over the time (Work Remaining).' => 'Este gráfico mostra a complexidade da tarefa ao longo do tempo (Trabalho Restante).', 'Screenshot taken %s' => 'Captura de tela tirada em %s', 'Add a screenshot' => 'Adicionar uma captura de tela', - 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Tire uma captura de tela e pressione CTRL + V ou ⌘ + V para colar aqui.', + // 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => '', 'Screenshot uploaded successfully.' => 'Captura de tela enviada com sucesso.', 'SEK - Swedish Krona' => 'SEK - Coroa sueca', 'Identifier' => 'Identificador', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Quando a tarefa é movida fora da primeira coluna', 'When task is moved to last column' => 'Quando a tarefa é movida para a última coluna', 'Year(s)' => 'Ano(s)', - 'Calendar settings' => 'Configurações do calendário', - 'Project calendar view' => 'Vista em modo projeto do calendário', 'Project settings' => 'Configurações dos projetos', - 'Show subtasks based on the time tracking' => 'Mostrar as subtarefas com base no controle de tempo', - 'Show tasks based on the creation date' => 'Mostrar as tarefas em função da data de criação', - 'Show tasks based on the start date' => 'Mostrar as tarefas em função da data de início', - 'Subtasks time tracking' => 'Monitoramento do tempo comparado as subtarefas', - 'User calendar view' => 'Vista em modo utilizador do calendário', 'Automatically update the start date' => 'Atualizar automaticamente a data de início', 'iCal feed' => 'Subscrição iCal', 'Preferences' => 'Preferências', @@ -635,17 +619,16 @@ return array( 'Send a task by email to someone' => 'Enviar uma tarefa por e-mail a alguém', 'Reopen a task' => 'Reabrir uma tarefa', 'Notification' => 'Notificação', - '%s moved the task #%d to the first swimlane' => '%s moveu a tarefa #%d para a primeira swimlane', - 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', - '%s moved the task %s to the first swimlane' => '%s moveu a tarefa %s para a primeira swimlane', - '%s moved the task %s to the swimlane "%s"' => '%s moveu a tarefa %s para a swimlane "%s"', + '%s moved the task #%d to the first swimlane' => '%s moveu a tarefa #%d para a primeira raia', + 'Swimlane' => 'Raia', + '%s moved the task %s to the first swimlane' => '%s moveu a tarefa %s para a primeira raia', + '%s moved the task %s to the swimlane "%s"' => '%s moveu a tarefa %s para a raia "%s"', 'This report contains all subtasks information for the given date range.' => 'Este relatório contém informações de todas as subtarefas para o período selecionado.', 'This report contains all tasks information for the given date range.' => 'Este relatório contém informações de todas as tarefas para o período selecionado.', 'Project activities for %s' => 'Atividade do projeto "%s"', - 'view the board on Kanboard' => 'ver o painel no Kanboard', - 'The task have been moved to the first swimlane' => 'A tarefa foi movida para a primeira swimlane', - 'The task have been moved to another swimlane:' => 'A tarefa foi movida para outra swimlane:', + 'view the board on Kanboard' => 'ver o quadro no Kanboard', + 'The task have been moved to the first swimlane' => 'A tarefa foi movida para a primeira raia', + 'The task have been moved to another swimlane:' => 'A tarefa foi movida para outra raia:', 'New title: %s' => 'Novo título: %s', 'The task is not assigned anymore' => 'Agora a tarefa não está mais atribuída', 'New assignee: %s' => 'Novo designado: %s', @@ -671,10 +654,9 @@ return array( 'You need at least 2 days of data to show the chart.' => 'Você precisa de pelo menos 2 dias de dados para visualizar o gráfico.', '<15m' => '<15m', '<30m' => '<30m', - 'Stop timer' => 'Stop timer', - 'Start timer' => 'Start timer', + 'Stop timer' => 'Parar temporizador', + 'Start timer' => 'Start temporizador', 'My activity stream' => 'Meu feed de atividades', - 'My calendar' => 'Minha agenda', 'Search tasks' => 'Pesquisar tarefas', 'Reset filters' => 'Redefinir os filtros', 'My tasks due tomorrow' => 'Minhas tarefas que expirarão amanhã', @@ -686,11 +668,10 @@ return array( 'Not assigned' => 'Não designada', 'View advanced search syntax' => 'Ver a sintaxe para pesquisa avançada', 'Overview' => 'Visão global', - 'Board/Calendar/List view' => 'Vista Painel/Calendário/Lista', - 'Switch to the board view' => 'Mudar para o modo Painel', - 'Switch to the calendar view' => 'Mudar par o modo Calendário', + 'Board/Calendar/List view' => 'Quadro/Calendário/Lista', + 'Switch to the board view' => 'Mudar para a visão de quadro', 'Switch to the list view' => 'Mudar par o modo Lista', - 'Go to the search/filter box' => 'Ir para o campo de pesquisa', + 'Go to the search/filter box' => 'Ir para o campo de filtro/pesquisa', 'There is no activity yet.' => 'Não há nenhuma atividade ainda.', 'No tasks found.' => 'Nenhuma tarefa encontrada.', 'Keyboard shortcut: "%s"' => 'Tecla de atalho: "%s"', @@ -698,7 +679,7 @@ return array( 'Filter' => 'Filtro', 'Advanced search' => 'Pesquisa avançada', 'Example of query: ' => 'Exemplo de consulta: ', - 'Search by project: ' => 'Pesquisar por projet: ', + 'Search by project: ' => 'Pesquisar por projeto: ', 'Search by column: ' => 'Pesquisar por coluna: ', 'Search by assignee: ' => 'Pesquisar por designado: ', 'Search by color: ' => 'Pesquisar por cor: ', @@ -708,31 +689,31 @@ return array( 'Average time spent into each column' => 'Tempo médio gasto em cada coluna', 'Average time spent' => 'Tempo médio gasto', 'This chart show the average time spent into each column for the last %d tasks.' => 'Este gráfico mostra o tempo médio gasto em cada coluna para as %d últimas tarefas.', - 'Average Lead and Cycle time' => 'Tempo médio do Lead and cycle time', - 'Average lead time: ' => 'Lead time medio: ', - 'Average cycle time: ' => 'Cycle time medio: ', - 'Cycle Time' => 'Cycle time', - 'Lead Time' => 'Lead time', - 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Este gráfico mostra o tempo médio do Lead and cycle time das últimas %d tarefas.', + 'Average Lead and Cycle time' => 'Tempo médio do tempo de condução e tempo de ciclo', + 'Average lead time: ' => 'Tempo de condução médio: ', + 'Average cycle time: ' => 'Tempo de ciclo médio: ', + 'Cycle Time' => 'Tempo de ciclo', + 'Lead Time' => 'Tempo de condução', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Este gráfico mostra o tempo médio do tempo de condução e tempo de ciclo das últimas %d tarefas.', 'Average time into each column' => 'Tempo médio de cada coluna', - 'Lead and cycle time' => 'Lead and cycle time', - 'Lead time: ' => 'Lead time: ', - 'Cycle time: ' => 'Cycle time: ', + 'Lead and cycle time' => 'Tempo de condução e tempo de ciclo', + 'Lead time: ' => 'Tempo de condução: ', + 'Cycle time: ' => 'Tempo de ciclo: ', 'Time spent into each column' => 'Tempo gasto em cada coluna', - 'The lead time is the duration between the task creation and the completion.' => 'O Lead time é o tempo gasto entre a criação da tarefa e a sua conclusão.', - 'The cycle time is the duration between the start date and the completion.' => 'O Cycle time é o tempo gasto entre a data de início e a sua conclusão.', + 'The lead time is the duration between the task creation and the completion.' => 'O tempo de condução é o tempo gasto entre a criação da tarefa e a sua conclusão.', + 'The cycle time is the duration between the start date and the completion.' => 'O Tempo de ciclo é o tempo gasto entre a data de início e a sua conclusão.', 'If the task is not closed the current time is used instead of the completion date.' => 'Se a tarefa não está finalizada, a hora atual é usada no lugar da data de conclusão.', 'Set automatically the start date' => 'Definir automaticamente a data de início', 'Edit Authentication' => 'Modificar a autenticação', 'Remote user' => 'Usuário remoto', 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Os usuários remotos não conservam as suas senhas no banco de dados Kanboard, exemplos: contas LDAP, Github ou Google.', - 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Se você marcar "Interdir o formulário de autenticação", os identificadores entrados no formulário de login serão ignorado.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Se você marcar "Impedir o formulário de autenticação", os identificadores entrados no formulário de login serão ignorado.', 'Default task color' => 'Cor padrão para as tarefas', 'This feature does not work with all browsers.' => 'Esta funcionalidade não é compatível com todos os navegadores.', 'There is no destination project available.' => 'Não há nenhum projeto de destino disponível.', 'Trigger automatically subtask time tracking' => 'Ativar automaticamente o monitoramento do tempo para as subtarefas', 'Include closed tasks in the cumulative flow diagram' => 'Incluir as tarefas finalizadas no diagrama de fluxo acumulado', - 'Current swimlane: %s' => 'Swimlane atual: %s', + 'Current swimlane: %s' => 'Raia atual: %s', 'Current column: %s' => 'Coluna atual: %s', 'Current category: %s' => 'Categoria atual: %s', 'no category' => 'nenhuma categoria', @@ -742,16 +723,9 @@ return array( 'contributors' => 'contribuidores', 'License:' => 'Licença:', 'License' => 'Licença', - 'Enter the text below' => 'Entre o texto abaixo', - 'Sort by position' => 'Ordenar por posição', - 'Sort by date' => 'Ordenar por data', - 'Add task' => 'Adicionar uma tarefa', + 'Enter the text below' => 'Digite o texto abaixo', 'Start date:' => 'Data de início:', 'Due date:' => 'Data fim estimada:', - 'There is no start date or due date for this task.' => 'Não existe data de início ou data fim estimada para esta tarefa.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Mover ou redimensionar uma tarefa irá alterar a data de início e conclusão estimada da tarefa.', - 'There is no task in your project.' => 'Não há tarefas em seu projeto.', - 'Gantt chart' => 'Gráfico de Gantt', 'People who are project managers' => 'Pessoas que são gerente de projeto', 'People who are project members' => 'Pessoas que são membro de projeto', 'NOK - Norwegian Krone' => 'NOK - Coroa Norueguesa', @@ -763,26 +737,19 @@ return array( 'Members' => 'Membros', 'Shared project' => 'Projeto compartilhado', 'Project managers' => 'Gerentes de projeto', - 'Gantt chart for all projects' => 'Gráfico de Gantt para todos os projetos', 'Projects list' => 'Lista dos projetos', - 'Gantt chart for this project' => 'Gráfico de Gantt para este projeto', - 'Project board' => 'Painel do projeto', 'End date:' => 'Data de término:', - 'There is no start date or end date for this project.' => 'Não há data de início ou data de término para este projeto.', - 'Projects Gantt chart' => 'Gráfico de Gantt dos projetos', 'Change task color when using a specific task link' => 'Mudar a cor da tarefa quando um link específico é utilizado', 'Task link creation or modification' => 'Criação ou modificação de um link em uma tarefa', 'Milestone' => 'Milestone', 'Documentation: %s' => 'Documentação: %s', - 'Switch to the Gantt chart view' => 'Mudar para a vista gráfico de Gantt', 'Reset the search/filter box' => 'Reiniciar o campo de pesquisa', 'Documentation' => 'Documentação', 'Table of contents' => 'Índice', - 'Gantt' => 'Gantt', 'Author' => 'Autor', 'Version' => 'Versão', - 'Plugins' => 'Extensões', - 'There is no plugin loaded.' => 'Não há extensões carregadas.', + 'Plugins' => 'Plugins', + 'There is no plugin loaded.' => 'Não há plugins carregados.', 'My notifications' => 'Minhas notificações', 'Custom filters' => 'Filtros personalizados', 'Your custom filter have been created successfully.' => 'Seu filtro personalizado foi criado com sucesso.', @@ -804,16 +771,16 @@ return array( 'Task #%d opened' => 'Tarefa #%d aberta', 'Column changed for task #%d' => 'Coluna alterada para a tarefa #%d', 'New position for task #%d' => 'Nova posição para a tarefa #%d', - 'Swimlane changed for task #%d' => 'Swimlane alterada para a tarefa #%d', + 'Swimlane changed for task #%d' => 'Raia alterada para a tarefa #%d', 'Assignee changed on task #%d' => 'Designação alterada na tarefa #%d', '%d overdue tasks' => '%d tarefas atrasadas', 'Task #%d is overdue' => 'Tarefa #%d está atrasada', 'No notification.' => 'Nenhuma notificação nova.', 'Mark all as read' => 'Marcar todas como lidas', 'Mark as read' => 'Marcar como lida', - 'Total number of tasks in this column across all swimlanes' => 'Número total de tarefas nesta coluna através de todas as swimlanes', - 'Collapse swimlane' => 'Contrair swimlane', - 'Expand swimlane' => 'Expandir swimlane', + 'Total number of tasks in this column across all swimlanes' => 'Número total de tarefas nesta coluna através de todas as raias', + 'Collapse swimlane' => 'Contrair raia', + 'Expand swimlane' => 'Expandir raia', 'Add a new filter' => 'Adicionar filtro', 'Share with all project members' => 'Compartilhar com todos os membros do projeto', 'Shared' => 'Compartilhado', @@ -832,7 +799,7 @@ return array( 'Double Quote' => 'Aspas duplas', 'Single Quote' => 'Aspas simples', '%s attached a file to the task #%d' => '%s anexou um arquivo à tarefa #%d', - 'There is no column or swimlane activated in your project!' => 'Não há coluna ou swimlane ativa em seu projeto!', + 'There is no column or swimlane activated in your project!' => 'Não há coluna ou raia ativa em seu projeto!', 'Append filter (instead of replacement)' => 'Adicionar filtro (em vez de substituir)', 'Append/Replace' => 'Adicionar/Substituir', 'Append' => 'Adicionar', @@ -870,10 +837,10 @@ return array( 'Unable to update your group.' => 'Não foi possível atualizar o seu grupo.', 'Add group member to "%s"' => 'Adicionar um membro ao grupo "%s"', 'Group member added successfully.' => 'Membro adicionado com sucesso ao o grupo.', - 'Unable to add group member.' => 'Não foi possivel adicionar esse membro ao grupo.', + 'Unable to add group member.' => 'Não foi possível adicionar esse membro ao grupo.', 'Remove user from group "%s"' => 'Remover usuário do grupo "%s"', 'User removed successfully from this group.' => 'Usuário removido com sucesso deste grupo.', - 'Unable to remove this user from the group.' => 'Não foi possivel remover este Usuário do grupo.', + 'Unable to remove this user from the group.' => 'Não foi possível remover este Usuário do grupo.', 'Remove group' => 'Remover o grupo', 'Group removed successfully.' => 'Grupo removido com sucesso.', 'Unable to remove this group.' => 'Não foi possível remover este grupo.', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Não há nenhum usuário disponível', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Você realmente deseja remover o usuário "%s" do grupo "%s"?', 'There is no group.' => 'Não há nenhum grupo.', - 'External Id' => 'Id externo', 'Add group member' => 'Adicionar um membro ao grupo', 'Do you really want to remove this group: "%s"?' => 'Você realmente deseja excluir este grupo: "%s"?', 'There is no user in this group.' => 'Não há usuários neste grupo.', @@ -926,22 +892,22 @@ return array( 'There is no integration registered at the moment.' => 'Não há nenhuma integração registrada por enquanto.', 'Password Reset for Kanboard' => 'Redefinir a senha para Kanboard', 'Forgot password?' => 'Esqueceu a senha?', - 'Enable "Forget Password"' => 'Activar a funcionalidade "Esqueceu a senha"', + 'Enable "Forget Password"' => 'Ativar a funcionalidade "Esqueceu a senha"', 'Password Reset' => 'Redefinir a senha', 'New password' => 'Nova senha', 'Change Password' => 'Alterar a senha', 'To reset your password click on this link:' => 'Para redefinir a sua senha, clique neste link:', 'Last Password Reset' => 'Última redefinição de senha', - 'The password has never been reinitialized.' => 'A senha nunca foi redifinida.', + 'The password has never been reinitialized.' => 'A senha nunca foi redefinida.', 'Creation' => 'Criação', 'Expiration' => 'Expiração', 'Password reset history' => 'Histórico da redefinição da senha', - 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Todas as tarefas da coluna "%s" e da Swimlane "%s" foram finalizadas com sucesso.', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Todas as tarefas da coluna "%s" e da raia "%s" foram finalizadas com sucesso.', 'Do you really want to close all tasks of this column?' => 'Você realmente deseja finalizar todas as tarefas desta coluna?', - '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d tarefa(s) na coluna "%s" e na Swimlane "%s" serão finalizadas.', + // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', 'Close all tasks of this column' => 'Finalizar todas as tarefas desta coluna', - 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Nenhuma extensão tem registado um método de notificação de projecto. Você ainda pode definir notificações individuais em seu perfil de usuário.', - 'My dashboard' => 'Meu Painel', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Nenhum plugin registrou método de notificação de projeto. Você ainda pode definir notificações individuais em seu perfil de usuário.', + 'My dashboard' => 'Meu Painel de Controle', 'My profile' => 'Meu perfil', 'Project owner: ' => 'Líder do projeto: ', 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'O identificador do projeto é opcional e deve ser alfanumérico, por exemplo MEUPROJETO.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Prioridade padrão', 'Lowest priority' => 'Prioridade baixa', 'Highest priority' => 'Prioridade alta', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Se você colocar zero para a prioridade alta e baixa, essa funcionalidade será desativada.', 'Close a task when there is no activity' => 'Finalizar uma tarefa sem atividade', 'Duration in days' => 'Duração em dias', 'Send email when there is no activity on a task' => 'Enviar um e-mail quando não há nenhuma atividade em uma tarefa', @@ -989,7 +954,7 @@ return array( 'Priority:' => 'Prioridade:', 'Reference:' => 'Referência:', 'Complexity:' => 'Complexidade:', - 'Swimlane:' => 'Swimlane:', + 'Swimlane:' => 'Raia:', 'Column:' => 'Coluna:', 'Position:' => 'Posição:', 'Creator:' => 'Criador:', @@ -1033,7 +998,7 @@ return array( 'Column created successfully.' => 'A coluna criada com sucesso.', 'Another column with the same name exists in the project' => 'Uma outra coluna com o mesmo nome já existe no projeto', 'Default filters' => 'Filtros padrão', - 'Your board doesn\'t have any columns!' => 'O seu painel não tem nenhuma coluna', + 'Your board doesn\'t have any columns!' => 'O seu quadro não tem nenhuma coluna', 'Change column position' => 'Alterar a posição da coluna', 'Switch to the project overview' => 'Mudar para a vista geral do projeto', 'User filters' => 'Filtros dos usuários', @@ -1041,15 +1006,15 @@ return array( 'Upload a file' => 'Enviar um arquivo', 'View file' => 'Ver um arquivo', 'Last activity' => 'Últimas atividades', - 'Change subtask position' => 'Alterar a posição da sub-tarefa', + 'Change subtask position' => 'Alterar a posição da subtarefa', 'This value must be greater than %d' => 'Este valor deve ser maior que %d', - 'Another swimlane with the same name exists in the project' => 'Outra Swimlane existe com o mesmo nome no projeto', + 'Another swimlane with the same name exists in the project' => 'Outra raia existe com o mesmo nome no projeto', 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Exemplo: http://exemple.kanboard.net/ (usado para gerar URLs absolutos)', 'Actions duplicated successfully.' => 'Ações duplicadas com sucesso.', 'Unable to duplicate actions.' => 'Não foi possível duplicar as ações.', 'Add a new action' => 'Adicionar uma nova ação', 'Import from another project' => 'Importar a partir de outro projeto', - 'There is no action at the moment.' => 'Não há nenhuma ação actualmente.', + 'There is no action at the moment.' => 'Não há nenhuma ação atualmente.', 'Import actions from another project' => 'Importar ações a partir de outro projeto', 'There is no available project.' => 'Não há projetos disponíveis.', 'Local File' => 'Arquivo local', @@ -1093,45 +1058,45 @@ return array( 'Plugin updated successfully.' => 'Plugin atualizado com sucesso.', 'Plugin removed successfully.' => 'Plugin removido com sucesso.', 'Subtask converted to task successfully.' => 'Sub-tarefa convertida para tarefa com sucesso.', - 'Unable to convert the subtask.' => 'Não foi possivel converter a sub-tarefa.', - 'Unable to extract plugin archive.' => 'Não foi possivel extrair o arquivo do plugin.', + 'Unable to convert the subtask.' => 'Não foi possível converter a subtarefa.', + 'Unable to extract plugin archive.' => 'Não foi possível extrair o arquivo do plugin.', 'Plugin not found.' => 'Plugin não encontrado.', 'You don\'t have the permission to remove this plugin.' => 'Você não tem permissão para remover este plugin.', - 'Unable to download plugin archive.' => 'Não foi possivel transferir o arquivo do plugin.', - 'Unable to write temporary file for plugin.' => 'Não foi possivel escrever o arquivo temporário para o plugin.', - 'Unable to open plugin archive.' => 'Não foi possivel abrir o arquivo do plugin.', + 'Unable to download plugin archive.' => 'Não foi possível transferir o arquivo do plugin.', + 'Unable to write temporary file for plugin.' => 'Não foi possível escrever o arquivo temporário para o plugin.', + 'Unable to open plugin archive.' => 'Não foi possível abrir o arquivo do plugin.', 'There is no file in the plugin archive.' => 'Ficheiro não encontrado dentro do arquivo do plugin.', 'Create tasks in bulk' => 'Criar tarefas em massa', - 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Este Kanboard não está configurado para instalar plugins através do interface de usuário.', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Este Kanboard não está configurado para instalar plugins através da interface de usuário.', 'There is no plugin available.' => 'Não existe nenhum plugin instalado.', 'Install' => 'Instalar', 'Update' => 'Atualizar', 'Up to date' => 'Atualizado', - 'Not available' => 'Não disponivel', + 'Not available' => 'Não disponível', 'Remove plugin' => 'Remover plugin', - 'Do you really want to remove this plugin: "%s"?' => 'Tem a certeza que quer remover este plugin: "%s%"?', + 'Do you really want to remove this plugin: "%s"?' => 'Tem a certeza que quer remover este plugin: "%s"?', 'Uninstall' => 'Desinstalar', 'Listing' => 'Listando', 'Metadata' => 'Metadata', 'Manage projects' => 'Gerir projetos', 'Convert to task' => 'Converter para tarefa', - 'Convert sub-task to task' => 'Converter sub-tarefa para tarefa', - 'Do you really want to convert this sub-task to a task?' => 'Tem a certeza que pretende converter esta sub-tarefa para tarefa?', - 'My task title' => 'Titulo da minha tarefa', + 'Convert sub-task to task' => 'Converter subtarefa para tarefa', + 'Do you really want to convert this sub-task to a task?' => 'Tem a certeza que pretende converter esta subtarefa para tarefa?', + 'My task title' => 'Título da minha tarefa', 'Enter one task by line.' => 'Escreva uma tarefa por linha.', 'Number of failed login:' => 'Número de logins falhados:', 'Account locked until:' => 'Conta bloqueada até:', - 'Email settings' => 'Definições de Email', - 'Email sender address' => 'Endereço de envio de Email', - 'Email transport' => 'Transportador de Email', + 'Email settings' => 'Configurações de e-mail', + 'Email sender address' => 'Endereço de envio de e-mail', + 'Email transport' => 'Transportador de e-mail', 'Webhook token' => 'Token do Webhook', 'Project tags management' => 'Gestão de etiquetas do Projeto', 'Tag created successfully.' => 'Etiqueta criada com sucesso.', - 'Unable to create this tag.' => 'Não foi possivel criar esta etiqueta.', + 'Unable to create this tag.' => 'Não foi possível criar esta etiqueta.', 'Tag updated successfully.' => 'Etiqueta atualizada com sucesso.', - 'Unable to update this tag.' => 'Não foi possivel atualizar esta etiqueta.', + 'Unable to update this tag.' => 'Não foi possível atualizar esta etiqueta.', 'Tag removed successfully.' => 'Etiqueta removida com sucesso.', - 'Unable to remove this tag.' => 'Não foi possivel remover esta etiqueta.', + 'Unable to remove this tag.' => 'Não foi possível remover esta etiqueta.', 'Global tags management' => 'Gestão de etiquetas globais', 'Tags' => 'Etiquetas', 'Tags management' => 'Gestão de Etiquetas', @@ -1146,13 +1111,13 @@ return array( 'There is no global tag at the moment.' => 'Atualmente não existe nenhuma etiqueta global.', 'This field cannot be empty' => 'Este campo não pode ficar vazio', 'Close a task when there is no activity in an specific column' => 'Fechar a tarefa quando não houver atividade numa coluna especifica', - '%s removed a subtask for the task #%d' => '%s removeu uma sub-tarefa da tarefa #%d', + '%s removed a subtask for the task #%d' => '%s removeu uma subtarefa da tarefa #%d', '%s removed a comment on the task #%d' => '%s removeu um comentário da tarefa #%d ', 'Comment removed on task #%d' => 'Comentário removido da tarefa #%d', 'Subtask removed on task #%d' => 'Sub-tarefa removida da tarefa #%d', - 'Hide tasks in this column in the dashboard' => 'Esconder tarefas desta coluna no painel', + 'Hide tasks in this column in the dashboard' => 'Esconder tarefas desta coluna no Painel de Controle', '%s removed a comment on the task %s' => '%s removeu um comentário da tarefa %s', - '%s removed a subtask for the task %s' => '%s removeu uma sub-tarefa da tarefa %s', + '%s removed a subtask for the task %s' => '%s removeu uma subtarefa da tarefa %s', 'Comment removed' => 'Comentário removido', 'Subtask removed' => 'Sub-tarefa removida', '%s set a new internal link for the task #%d' => '%s definiu uma nova ligação interna para a tarefa #%d', @@ -1163,19 +1128,17 @@ return array( '%s removed an internal link for the task %s' => '%s removeu uma ligação interna da tarefa %s', 'Automatically set the due date on task creation' => 'Definir data de vencimento automaticamente ao criar uma tarefa', 'Move the task to another column when closed' => 'Mover a tarefa para outra coluna quando fechada', - 'Move the task to another column when not moved during a given period' => 'Mover a tarefa para outra coluna quando não movida dentro de determinado periodo', - 'Dashboard for %s' => 'Painel de %s', + 'Move the task to another column when not moved during a given period' => 'Mover a tarefa para outra coluna quando não movida dentro de determinado período', + 'Dashboard for %s' => 'Painel de Controle de %s', 'Tasks overview for %s' => 'Visão geral das tarefas de %s', - 'Subtasks overview for %s' => 'Visão geral das sub-tarefas de %s', + 'Subtasks overview for %s' => 'Visão geral das subtarefas de %s', 'Projects overview for %s' => 'Visão geral dos projetos de %s', 'Activity stream for %s' => 'Fluxo de atividade de %s', - 'Calendar for %s' => 'Calendário de %s', - 'Notifications for %s' => 'Notificações de %s', - 'Assign a color when the task is moved to a specific swimlane' => 'Atribuir uma cor quando a tarefa é movida para uma swimlane especifica', - 'Assign a priority when the task is moved to a specific swimlane' => 'Atribuir uma prioridade quando a tarefa é movida para uma swimlane especifica', + 'Assign a color when the task is moved to a specific swimlane' => 'Atribuir uma cor quando a tarefa for movida para uma raia especifica', + 'Assign a priority when the task is moved to a specific swimlane' => 'Atribuir uma prioridade quando a tarefa for movida para uma raia especifica', 'User unlocked successfully.' => 'Usuário desbloqueado com sucesso.', - 'Unable to unlock the user.' => 'Não foi possivel desbloquear o usuário.', - 'Move a task to another swimlane' => 'Mover a tarefa para outra swimlane', + 'Unable to unlock the user.' => 'Não foi possível desbloquear o usuário.', + 'Move a task to another swimlane' => 'Mover a tarefa para outra raia', 'Creator Name' => 'Nome do Criador', 'Time spent and estimated' => 'Tempo gasto e estimado', 'Move position' => 'Mover posição', @@ -1187,26 +1150,26 @@ return array( 'Add a new custom role' => 'Adicionar uma nova função personalizada', 'Restrictions for the role "%s"' => 'Restrições para a função: "%s"', 'Add a new project restriction' => 'Adicionar uma nova restrição de Projeto', - 'Add a new drag and drop restriction' => 'Adicionar uma nova restrição de arrastar e largar', + 'Add a new drag and drop restriction' => 'Adicionar uma nova restrição de arrastar e soltar', 'Add a new column restriction' => 'Adicionar uma nova restrição de colunas', 'Edit this role' => 'Editar esta função', 'Remove this role' => 'Remover esta função', 'There is no restriction for this role.' => 'Não existem restrições para esta função.', 'Only moving task between those columns is permitted' => 'Só é permitido mover a tarefa entre as seguintes colunas', - 'Close a task in a specific column when not moved during a given period' => 'Fecha a tarefa numa coluna especifica quando não é movimentada durante um dado periodo', + 'Close a task in a specific column when not moved during a given period' => 'Fecha a tarefa numa coluna especifica quando não é movimentada durante um dado período', 'Edit columns' => 'Editar colunas', 'The column restriction has been created successfully.' => 'A restrição de coluna foi criada com sucesso.', - 'Unable to create this column restriction.' => 'Não foi possivel criar esta restrição de coluna.', + 'Unable to create this column restriction.' => 'Não foi possível criar esta restrição de coluna.', 'Column restriction removed successfully.' => 'Restrição de coluna removida com sucesso.', - 'Unable to remove this restriction.' => 'Não foi possivel remover esta restrição.', + 'Unable to remove this restriction.' => 'Não foi possível remover esta restrição.', 'Your custom project role has been created successfully.' => 'A sua função de projeto personalizada foi criada com sucesso.', - 'Unable to create custom project role.' => 'Não foi possivel criar a função de projeto personalizada.', + 'Unable to create custom project role.' => 'Não foi possível criar a função de projeto personalizada.', 'Your custom project role has been updated successfully.' => 'A sua função de projeto personalizada foi atualizada com sucesso.', - 'Unable to update custom project role.' => 'Não foi possivel atualizar a função de projeto personalizada.', + 'Unable to update custom project role.' => 'Não foi possível atualizar a função de projeto personalizada.', 'Custom project role removed successfully.' => 'Função de projeto removida com sucesso.', - 'Unable to remove this project role.' => 'Não foi possivel remover esta função de projeto.', + 'Unable to remove this project role.' => 'Não foi possível remover esta função de projeto.', 'The project restriction has been created successfully.' => 'A restrição de projeto foi criada com sucesso.', - 'Unable to create this project restriction.' => 'Não foi possivel remover esta restrição de projeto.', + 'Unable to create this project restriction.' => 'Não foi possível remover esta restrição de projeto.', 'Project restriction removed successfully.' => 'Restrição de projeto removida com sucesso.', 'You cannot create tasks in this column.' => 'Não pode criar tarefas nesta coluna.', 'Task creation is permitted for this column' => 'A criação de tarefas é permitida nesta coluna', @@ -1215,7 +1178,7 @@ return array( 'Closing or opening a task is blocked for this column' => 'Fechar ou abrir tarefas está bloqueado nesta coluna', 'Task creation is not permitted' => 'A criação de tarefas não é permitida', 'Closing or opening a task is not permitted' => 'Fechar ou abrir tarefas não é permitido', - 'New drag and drop restriction for the role "%s"' => 'Nova restrição de arrastar e largar para a função: "%s"', + 'New drag and drop restriction for the role "%s"' => 'Nova restrição de arrastar e soltar para a função: "%s"', 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Pessoas pertecentes a esta função poderam mover terefas só entre as colunas de origem e de destino.', 'Remove a column restriction' => 'Remover a restrição de coluna', 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Tem a certeza que quer remover a restrição de coluna: "%s" para "%s"?', @@ -1236,102 +1199,171 @@ return array( 'This field is required' => 'Este campo é obrigatório', 'Moving a task is not permitted' => 'Mover uma tarefa não é permitido', 'This value must be in the range %d to %d' => 'Este valor precisa estar no intervalo %d até %d', - // 'You are not allowed to move this task.' => '', - // 'API User Access' => '', - // 'Preview' => '', - // 'Write' => '', - // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', - // 'No personal API access token registered.' => '', - // 'Your personal API access token is "%s"' => '', - // 'Remove your token' => '', - // 'Generate a new token' => '', - // 'Showing %d-%d of %d' => '', - // 'Outgoing Emails' => '', - // 'Add or change currency rate' => '', - // 'Reference currency: %s' => '', - // 'Add custom filters' => '', - // 'Export' => '', - // 'Add link label' => '', - // 'Incompatible Plugins' => '', - // 'Compatibility' => '', - // 'Permissions and ownership' => '', - // 'Priorities' => '', - // 'Close this window' => '', - // 'Unable to upload this file.' => '', - // 'Import tasks' => '', - // 'Choose a project' => '', - // 'Profile' => '', - // 'Application role' => '', - // '%d invitations were sent.' => '', - // '%d invitation was sent.' => '', - // 'Unable to create this user.' => '', - // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', - // 'Created at:' => '', - // 'Updated at:' => '', - // 'There is no custom filter.' => '', - // 'New User' => '', - // 'Authentication' => '', - // 'If checked, this user will use a third-party system for authentication.' => '', - // 'The password is necessary only for local users.' => '', - // 'You have been invited to register on Kanboard.' => '', - // 'Click here to join your team' => '', - // 'Invite people' => '', - // 'Emails' => '', - // 'Enter one email address by line.' => '', - // 'Add these people to this project' => '', - // 'Add this person to this project' => '', - // 'Sign-up' => '', - // 'Credentials' => '', - // 'New user' => '', - // 'This username is already taken' => '', - // 'A link to reset your password has been sent by email.' => '', - // 'Your profile must have a valid email address.' => '', - // 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '', - // 'TRL - Turkish Lira' => '', - // 'The project email is optional and could be used by several plugins.' => '', - // 'The project email must be unique across all projects' => '', - // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', - // 'Unable to upload files, check the permissions of your data folder.' => '', - // 'Another category with the same name exists in this project' => '', - // 'Comment sent by email successfully.' => '', - // 'Sent by email to [%s](mailto:%s) (%s)' => '', - // 'Unable to read uploaded file.' => '', - // 'Database uploaded successfully.' => '', - // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', - // 'Upload the database' => '', - // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', - // 'Database file' => '', - // 'Upload' => '', - // 'Remove this user from group' => '', - // 'Your project must have at least one active swimlane.' => '', - // 'Project: %s' => '', - // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'You are not allowed to move this task.' => 'Você não está autorizado a mover esta tarefa.', + 'API User Access' => 'Acesso à API do usuário', + 'Preview' => 'Pré-visualizar', + 'Write' => 'Escrever', + 'Write your text in Markdown' => 'Escrever seu texto em Markdown', + 'No personal API access token registered.' => 'Nenhum token de acesso pessoal à API registrado.', + 'Your personal API access token is "%s"' => 'Seu token de acesso pessoal à API é "%s"', + 'Remove your token' => 'Remover seu token', + 'Generate a new token' => 'Gerar um novo token', + 'Showing %d-%d of %d' => 'Mostrando %d-%d de %d', + 'Outgoing Emails' => 'E-mails de saída', + 'Add or change currency rate' => 'Adicionar ou alterar taxa de câmbio', + 'Reference currency: %s' => 'Câmbio de referência: %s', + 'Add custom filters' => 'Adicionar filtros personalizados', + 'Export' => 'Exportar', + 'Add link label' => 'Adicionar rótulo de link', + 'Incompatible Plugins' => 'Plugin incompatível', + 'Compatibility' => 'Compatibilidade', + 'Permissions and ownership' => 'Permissões e propriedade', + 'Priorities' => 'Propriedades', + 'Close this window' => 'Fechar esta janela', + 'Unable to upload this file.' => 'Não é possível carregar este arquivo', + 'Import tasks' => 'Importar tarefas', + 'Choose a project' => 'Escolher um projeto', + 'Profile' => 'Perfil', + 'Application role' => 'Regra de aplicação', + '%d invitations were sent.' => '%d convites foram enviados.', + '%d invitation was sent.' => '%d convite foi enviado.', + 'Unable to create this user.' => 'Não foi possível criar este usuário.', + 'Kanboard Invitation' => 'Convite do Kanboard', + 'Visible on dashboard' => 'Visível no painel de controle', + 'Created at:' => 'Criado em:', + 'Updated at:' => 'Atualizado em:', + 'There is no custom filter.' => 'Não existe nenhum filtro personalizado.', + 'New User' => 'Novo Usuário', + 'Authentication' => 'Autenticação', + 'If checked, this user will use a third-party system for authentication.' => 'Se marcado, este usuário usará um sistema de autenticação de terceiros.', + 'The password is necessary only for local users.' => 'A senha é necessária somente para usuários locais.', + 'You have been invited to register on Kanboard.' => 'Você foi convidado a se registrar no Kanboard', + 'Click here to join your team' => 'Clique aqui para se unir ao seu time', + 'Invite people' => 'Convidar pessoas', + 'Emails' => 'E-mails', + 'Enter one email address by line.' => 'Digite um e-mail por linha. ', + 'Add these people to this project' => 'Adicionar estas pessoas para este projeto', + 'Add this person to this project' => 'Adicionar esta pessoa para este projeto', + 'Sign-up' => 'Inscrever-se', + 'Credentials' => 'Credenciais', + 'New user' => 'Novo usuário', + 'This username is already taken' => 'Este nome de usuário já está em uso', + 'A link to reset your password has been sent by email.' => 'Um link para reiniciar sua senha foi enviado por e-mail.', + 'Your profile must have a valid email address.' => 'Seu perfil precisa ter um endereço de e-mail válido.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Infelizmente, não foi possível reiniciar sua senha. Você digitou um usuário válido?', + 'TRL - Turkish Lira' => 'TRL - Lira turca', + 'The project email is optional and could be used by several plugins.' => 'O e-mail do projeto é opcional e pode ser usado por diversos plugins.', + 'The project email must be unique across all projects' => 'O e-mail do projeto deve ser exclusivo em relação aos demais os projetos', + 'The email configuration has been disabled by the administrator.' => 'A configuração de e-mail foi desabilitada pelo administrador.', + 'Close this project' => 'Fechar este projeto', + 'Open this project' => 'Abrir este projeto', + 'Close a project' => 'Fechar um projeto', + 'Do you really want to close this project: "%s"?' => 'Deseja realmente fechar este projeto: "%s"?', + 'Reopen a project' => 'Reabrir um projeto', + 'Do you really want to reopen this project: "%s"?' => 'Deseja realmente reabrir este projeto: "%s"?', + 'This project is open' => 'Este projeto está aberto', + 'This project is closed' => 'Este projeto está fechado', + 'Unable to upload files, check the permissions of your data folder.' => 'Incapaz de enviar arquivos. Verifique as permissões da sua pasta de dados.', + 'Another category with the same name exists in this project' => 'Outra categoria com o mesmo nome existe neste projeto', + 'Comment sent by email successfully.' => 'Comentário enviado por e-mail com sucesso.', + 'Sent by email to [%s](mailto:%s) (%s)' => 'Enviar por e-mail para [%s](mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'Incapaz de ler arquivos enviados.', + 'Database uploaded successfully.' => 'Base de dados enviado com sucesso.', + 'Task sent by email successfully.' => 'Tarefa enviada por e-mail com sucesso.', + 'There is no category in this project.' => 'Não há categoria neste projeto.', + 'Send by email' => 'Enviar por e-mail', + 'Create and send a comment by email' => 'Criar e enviar um comentário por e-mail', + 'Subject' => 'Assunto', + 'Upload the database' => 'Enviar uma base de dados', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Você pode enviar uma base de dados Sqlite baixada anteriormente (formato Gzip).', + 'Database file' => 'Arquivo de base de dados', + 'Upload' => 'Enviar', + 'Your project must have at least one active swimlane.' => 'Seu projeto precisa ter pelo menos uma raia ativa.', + 'Project: %s' => 'Projeto: %s', + 'Automatic action not found: "%s"' => 'Ação automática não encontrada: "%s"', + '%d projects' => '%d projetos', + '%d project' => '%d projeto', + 'There is no project.' => 'Não há projeto.', + 'Sort' => 'Ordenar', + 'Project ID' => 'ID do projeto', + 'Project name' => 'Nome do projeto', + 'Public' => 'Público', + 'Private' => 'Privado', + '%d tasks' => '%d tarefas', + '%d task' => '%d tarefa', + 'Task ID' => 'ID da tarefa', + 'Assign automatically a color when due date is expired' => 'Designar automaticamente uma cor quando a data de vencimento está expirada', + 'Total score in this column across all swimlanes' => 'Pontuação total nesta coluna através de todas as raias', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Peso argentino', + 'COP - Colombian Peso' => 'COP - Peso colombiano', + '%d groups' => '%d grupos', + '%d group' => '%d grupo', + 'Group ID' => 'ID do grupo', + 'External ID' => 'ID externo', + '%d users' => '%d usuários', + '%d user' => '%d usuário', + 'Hide subtasks' => 'Esconder subtarefa', + 'Show subtasks' => 'Mostrar subtarefa', + 'Authentication Parameters' => 'Parâmetros de autenticação', + 'API Access' => 'Acesso à API', + 'No users found.' => 'Usuários não encontrados.', + 'User ID' => 'ID do usuário', + 'Notifications are activated' => 'As notificações estão ativadas', + 'Notifications are disabled' => 'As notificações estão desativadas', + 'User disabled' => 'Usuário desativado', + '%d notifications' => '%d notificações', + '%d notification' => '%d notificação', + 'There is no external integration installed.' => 'Não existe integração externa instalada.', + 'You are not allowed to update tasks assigned to someone else.' => 'Você não está autorizado a atualizar tarefas designadas para outros.', + 'You are not allowed to change the assignee.' => 'Você não está autorizado a mudar a designação.', + 'Task suppression is not permitted' => 'Supressão de tarefa não é permitida', + 'Changing assignee is not permitted' => 'Mudança de designação não é permitida', + 'Update only assigned tasks is permitted' => 'Atualizar somente tarefas designadas é permitida', + 'Only for tasks assigned to the current user' => 'Somente para tarefas designadas para o usuário atual', + 'My projects' => 'Meus projetos', + 'Your are not member of any project.' => 'Você não é membro de nenhum projeto.', + 'My subtasks' => 'Minhas subtarefas', + '%d subtasks' => '%d subtarefas', + '%d subtask' => '%d subtarefa', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Somente movimentação de tarefas entre aquelas colunas são permitidas para tarefas designadas para o usuário atual', + '[DUPLICATE]' => '[DUPLICADO]', + 'DKK - Danish Krona' => 'DKK - Coroa Dinamarquesa', + 'Remove user from group' => 'Remover usuário do grupo', + 'Assign the task to its creator' => 'Atribuir a tarefa ao seu criador', + 'This task was sent by email to "%s" with subject "%s".' => 'Esta tarefa foi enviada por e-mail para "%s" com o assunto "%s".', + 'Predefined Email Subjects' => 'Assuntos predefinidos de e-mail', + 'Write one subject by line.' => 'Escreva um assunto por linha.', + 'Create another link' => 'Criar outro link', + 'BRL - Brazilian Real' => 'BRL - Real Brasileiro', + 'Add a new Kanboard task' => 'Adicionar uma nova tarefa do Kanboard', + 'Subtask not started' => 'Subtarefa não iniciada', + 'Subtask currently in progress' => 'Subtarefa atualmente em progresso', + 'Subtask completed' => 'Subtarefa finalizada', + 'Subtask added successfully.' => 'Subtarefa adicionada com sucesso.', + '%d subtasks added successfully.' => '%d subtarefas adicionadas com sucesso.', + 'Enter one subtask by line.' => 'Escreva uma subtarefa por linha.', + 'Predefined Contents' => 'Conteúdos predefinidos', + 'Predefined contents' => 'Conteúdos predefinidos', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index 88751ab6..091e6c68 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrador', 'Sign in' => 'Entrar', 'Users' => 'Utilizadores', - 'No user' => 'Sem utilizador', 'Forbidden' => 'Proibido', 'Access Forbidden' => 'Acesso negado', 'Edit user' => 'Editar utilizador', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Subtarefa atualizada com sucesso.', 'Unable to update your sub-task.' => 'Não foi possível atualizar a sua subtarefa.', 'Unable to create your sub-task.' => 'Não é possível criar a sua subtarefa.', - 'Sub-task added successfully.' => 'Subtarefa adicionada com sucesso.', 'Maximum size: ' => 'Tamanho máximo: ', 'Display another project' => 'Mostrar outro projeto', 'Created by %s' => 'Criado por %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Atividades Recentes', 'Dashboard' => 'Painel de Controlo', 'Confirmation' => 'Confirmação', - 'Allow everybody to access to this project' => 'Permitir a todos os acesso a este projeto', - 'Everybody have access to this project.' => 'Todos possuem acesso a este projeto.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Criar um comentário por meio de um serviço externo', 'Project management' => 'Gestão de projetos', - 'My projects' => 'Os meus projetos', 'Columns' => 'Colunas', 'Task' => 'Tarefas', - 'Your are not member of any project.' => 'Você não é membro de nenhum projeto.', 'Percentage' => 'Percentagem', 'Number of tasks' => 'Número de tarefas', 'Task distribution' => 'Distribuição de tarefas', 'Analytics' => 'Estatísticas', 'Subtask' => 'Subtarefa', - 'My subtasks' => 'As minhas subtarefas', 'User repartition' => 'Redistribuição de utilizador', 'Clone this project' => 'Clonar este projeto', 'Column removed successfully.' => 'Coluna removida com sucesso.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Idioma:', 'Timezone:' => 'Fuso horário:', 'All columns' => 'Todas as colunas', - 'Calendar' => 'Calendário', 'Next' => 'Próximo', // '#%d' => '', 'All swimlanes' => 'Todos os swimlane', @@ -526,19 +518,19 @@ return array( 'Compact/wide view' => 'Alternar entre a vista compacta e ampliada', 'Currency' => 'Moeda', 'Private project' => 'Projeto privado', - 'AUD - Australian Dollar' => 'AUD - Dólar australiano', - 'CAD - Canadian Dollar' => 'CAD - Dólar canadense', + 'AUD - Australian Dollar' => 'AUD - Dólar Australiano', + 'CAD - Canadian Dollar' => 'CAD - Dólar Canadense', 'CHF - Swiss Francs' => 'CHF - Francos Suíços', 'Custom Stylesheet' => 'Folha de estilos personalizada', 'download' => 'transferir', 'EUR - Euro' => 'EUR - Euro', 'GBP - British Pound' => 'GBP - Libra Esterlina', - 'INR - Indian Rupee' => 'INR - Rúpia indiana', - 'JPY - Japanese Yen' => 'JPY - Iene japonês', + 'INR - Indian Rupee' => 'INR - Rúpia Indiana', + 'JPY - Japanese Yen' => 'JPY - Iene Japonês', 'NZD - New Zealand Dollar' => 'NZD - Dólar Neozelandês', - 'RSD - Serbian dinar' => 'RSD - Dinar sérvio', - // 'CNY - Chinese Yuan' => '', - 'USD - US Dollar' => 'USD - Dólar norte-americano', + 'RSD - Serbian dinar' => 'RSD - Dinar Sérvio', + 'CNY - Chinese Yuan' => 'CNY - Yuan Chinês', + 'USD - US Dollar' => 'USD - Dólar Norte-americano', 'Destination column' => 'Coluna de destino', 'Move the task to another column when assigned to a user' => 'Mover a tarefa para uma outra coluna quando esta está atribuída a um utilizador', 'Move the task to another column when assignee is cleared' => 'Mover a tarefa para uma outra coluna quando esta não está atribuída', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Impossível adicionar essa taxa de câmbio.', 'Webhook URL' => 'URL do webhook', '%s removed the assignee of the task %s' => '%s removeu a pessoa assignada à tarefa %s', - 'Enable Gravatar images' => 'Activar imagem Gravatar', 'Information' => 'Informações', 'Check two factor authentication code' => 'Verificação do código de autenticação com factor duplo', 'The two factor authentication code is not valid.' => 'O código de autenticação com factor duplo não é válido', @@ -576,7 +567,7 @@ return array( 'Add a screenshot' => 'Adicionar uma Screenshot', 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Tire um screenshot e pressione CTRL + V ou ⌘ + V para colar aqui.', 'Screenshot uploaded successfully.' => 'Screenshot enviada com sucesso.', - 'SEK - Swedish Krona' => 'SEK - Coroa sueca', + 'SEK - Swedish Krona' => 'SEK - Coroa Sueca', 'Identifier' => 'Identificador', 'Disable two factor authentication' => 'Desactivar autenticação com dois factores', 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Tem a certeza que quer desactivar a autenticação com dois factores para esse utilizador: "%s"?', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Quando a tarefa é movida fora da primeira coluna', 'When task is moved to last column' => 'Quando a tarefa é movida para a última coluna', 'Year(s)' => 'Ano(s)', - 'Calendar settings' => 'Configurações do calendário', - 'Project calendar view' => 'Vista em modo projeto do calendário', 'Project settings' => 'Configurações dos projetos', - 'Show subtasks based on the time tracking' => 'Mostrar as subtarefas com base no controle de tempo', - 'Show tasks based on the creation date' => 'Mostrar as tarefas em função da data de criação', - 'Show tasks based on the start date' => 'Mostrar as tarefas em função da data de início', - 'Subtasks time tracking' => 'Monitoramento do tempo comparado as subtarefas', - 'User calendar view' => 'Vista em modo utilizador do calendário', 'Automatically update the start date' => 'Actualizar automaticamente a data de início', 'iCal feed' => 'Subscrição iCal', 'Preferences' => 'Preferências', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Notificação', '%s moved the task #%d to the first swimlane' => '%s moveu a tarefa n° %d no primeiro swimlane', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s moveu a tarefa %s no primeiro swimlane', '%s moved the task %s to the swimlane "%s"' => '%s moveu a tarefa %s no swimlane "%s"', 'This report contains all subtasks information for the given date range.' => 'Este relatório contém informações de todas as sub-tarefas para o período selecionado.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Parar temporizador', 'Start timer' => 'Iniciar temporizador', 'My activity stream' => 'O meu feed de actividade', - 'My calendar' => 'A minha agenda', 'Search tasks' => 'Pesquisar tarefas', 'Reset filters' => 'Redefinir os filtros', 'My tasks due tomorrow' => 'A minhas tarefas que expiram amanhã', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Visão global', 'Board/Calendar/List view' => 'Vista Painel/Calendário/Lista', 'Switch to the board view' => 'Mudar para o modo Painel', - 'Switch to the calendar view' => 'Mudar para o modo Calendário', 'Switch to the list view' => 'Mudar para o modo Lista', 'Go to the search/filter box' => 'Ir para o campo de pesquisa', 'There is no activity yet.' => 'Ainda não há nenhuma actividade.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Licença:', 'License' => 'Licença', 'Enter the text below' => 'Escreva o texto em baixo', - 'Sort by position' => 'Ordenar por posição', - 'Sort by date' => 'Ordenar por data', - 'Add task' => 'Adicionar tarefa', 'Start date:' => 'Data de inicio:', 'Due date:' => 'Data de vencimento:', - 'There is no start date or due date for this task.' => 'Não existe data de inicio ou data de vencimento para esta tarefa.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Mover ou redimensionar a tarefa irá alterar a data de inicio e vencimento da tarefa.', - 'There is no task in your project.' => 'Não existe tarefa no seu projeto.', - 'Gantt chart' => 'Gráfico de Gantt', 'People who are project managers' => 'Pessoas que são gestores do projeto', 'People who are project members' => 'Pessoas que são membros do projeto', 'NOK - Norwegian Krone' => 'NOK - Coroa Norueguesa', @@ -763,22 +737,15 @@ return array( 'Members' => 'Membros', 'Shared project' => 'Projeto partilhado', 'Project managers' => 'Gestores do projeto', - 'Gantt chart for all projects' => 'Gráfico de Gantt para todos os projetos', 'Projects list' => 'Lista de projetos', - 'Gantt chart for this project' => 'Gráfico de Gantt para este projeto', - 'Project board' => 'Quadro de projeto', 'End date:' => 'Data de fim:', - 'There is no start date or end date for this project.' => 'Não existe data de inicio ou fim para este projeto.', - 'Projects Gantt chart' => 'Gráfico de Gantt dos projetos', 'Change task color when using a specific task link' => 'Alterar cor da tarefa quando se usar um tipo especifico de ligação de tarefa', 'Task link creation or modification' => 'Criação ou modificação de ligação de tarefa', 'Milestone' => 'Objectivo', 'Documentation: %s' => 'Documentação: %s', - 'Switch to the Gantt chart view' => 'Mudar para vista de gráfico de Gantt', 'Reset the search/filter box' => 'Repor caixa de procura/filtro', 'Documentation' => 'Documentação', 'Table of contents' => 'Tabela de conteúdos', - 'Gantt' => 'Gantt', 'Author' => 'Autor', 'Version' => 'Versão', 'Plugins' => 'Plugins', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Não existe utilizador disponivel.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Tem a certeza que quer remover o utilizador "%s" do grupo "%s"?', 'There is no group.' => 'Não existe grupo.', - 'External Id' => 'Id externo', 'Add group member' => 'Adicionar membro de grupo', 'Do you really want to remove this group: "%s"?' => 'Tem a certeza que quer remover este grupo: "%s"?', 'There is no user in this group.' => 'Não existe utilizadores neste grupo.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Prioridade por defeito', 'Lowest priority' => 'Prioridade mais baixa', 'Highest priority' => 'Prioridade mais alta', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Se colocar zero na prioridade baixa ou alta, essa funcionalidade será desactivada.', 'Close a task when there is no activity' => 'Fechar tarefa quando não há actividade', 'Duration in days' => 'Duração em dias', 'Send email when there is no activity on a task' => 'Enviar e-mail quando não há actividade numa tarefa', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Vista geral das sub-tarefas de %s', 'Projects overview for %s' => 'Vista geral dos projetos de %s', 'Activity stream for %s' => 'Fluxo de actividade de %s', - 'Calendar for %s' => 'Calendário de %s', - 'Notifications for %s' => 'Notificações de %s', 'Assign a color when the task is moved to a specific swimlane' => 'Atribuir uma cor quando a tarefa é movida para uma swimlane especifica', 'Assign a priority when the task is moved to a specific swimlane' => 'Atribuir uma prioridade quando a tarefa é movida para uma swimlane especifica', 'User unlocked successfully.' => 'Utilizador desbloqueado com sucesso.', @@ -1241,7 +1204,6 @@ return array( 'Preview' => 'Pré-Visualizar', 'Write' => 'Escrever', 'Write your text in Markdown' => 'Escreva o seu texto em Markdown', - 'New External Task: %s' => 'Nova Tarefa Externa: %s', 'No personal API access token registered.' => 'Nenhum token pessoal de acesso ao API ', 'Your personal API access token is "%s"' => 'O seu token de acesso pessoal ao API é "%s"', 'Remove your token' => 'Remover o seu token', @@ -1316,7 +1278,6 @@ return array( 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Poderia enviar a base de dados Sqlite transferida anteriormente (formato Gzip).', 'Database file' => 'Ficheiro base de dados', 'Upload' => 'Enviar', - 'Remove this user from group' => 'Remover este utilizador do grupo', 'Your project must have at least one active swimlane.' => 'O seu projecto deve ter pelo menos uma swimlane activa.', 'Project: %s' => 'Projecto: %s', 'Automatic action not found: "%s"' => 'Acção automática não encontrada: "%s"', @@ -1331,7 +1292,78 @@ return array( '%d tasks' => '%d tarefas', '%d task' => '%d tarefa', 'Task ID' => 'ID da Tarefa', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'Assign automatically a color when due date is expired' => 'Atribuir automaticamente uma cor quando a data de vencimento expirar', + 'Total score in this column across all swimlanes' => 'Pontuação total nesta coluna em todos os swimlanes', + 'HRK - Kuna' => 'HRK - Kuna Croata', + 'ARS - Argentine Peso' => 'ARS - Peso Argentino', + 'COP - Colombian Peso' => 'COP - Peso Colombiano', + '%d groups' => '%d grupos', + '%d group' => '%d grupo', + 'Group ID' => 'ID do Grupo', + 'External ID' => 'ID Externo', + '%d users' => '%d utilizadores', + '%d user' => '%d utilizador', + 'Hide subtasks' => 'Esconder subtarefas', + 'Show subtasks' => 'Mostrar subtarefas', + 'Authentication Parameters' => 'Parâmetros de autenticação', + 'API Access' => 'Acesso à API', + 'No users found.' => 'Não foram encontrados utilizadores.', + 'User ID' => 'ID de Utilizador', + 'Notifications are activated' => 'Notificações ativadas', + 'Notifications are disabled' => 'Notificações desativadas', + 'User disabled' => 'Utilizador desactivado', + '%d notifications' => '%d notificações', + '%d notification' => '%d notificação', + 'There is no external integration installed.' => 'Não há integração externa instalada.', + 'You are not allowed to update tasks assigned to someone else.' => 'Não tem permissão para atualizar tarefas atribuídas a outra pessoa.', + 'You are not allowed to change the assignee.' => 'Não tem permissão para alterar a atribuição', + 'Task suppression is not permitted' => 'A supressão de tarefas não é permitida', + 'Changing assignee is not permitted' => 'Não é permitido alterar a atribuição', + 'Update only assigned tasks is permitted' => 'Apenas é permitido atualizar as tarefas atribuídas', + 'Only for tasks assigned to the current user' => 'Apenas para tarefas atribuídas ao utilizador atual', + 'My projects' => 'Meus projetos', + 'Your are not member of any project.' => 'Não é membro de nenhum projeto.', + 'My subtasks' => 'Minhas subtarefas', + '%d subtasks' => '%d subtarefas', + '%d subtask' => '%d subtarefa', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Apenas é permitido mover a tarefa entre essas colunas para tarefas atribuídas ao utilizador atual', + '[DUPLICATE]' => '[DUPLICADA]', + 'DKK - Danish Krona' => 'DKK - Coroa Dinamarquesa', + 'Remove user from group' => 'Remover utilizador do grupo', + 'Assign the task to its creator' => 'Atribuir a tarefa ao seu criador', + 'This task was sent by email to "%s" with subject "%s".' => 'Esta tarefa foi enviada por email para "%s" com o assunto "%s".', + 'Predefined Email Subjects' => 'Assuntos de email predefinidos', + 'Write one subject by line.' => 'Escreva um assunto por linha.', + 'Create another link' => 'Criar outro link', + 'BRL - Brazilian Real' => 'BRL - Real Brasileiro', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/ro_RO/translations.php b/app/Locale/ro_RO/translations.php new file mode 100644 index 00000000..9bdd19cd --- /dev/null +++ b/app/Locale/ro_RO/translations.php @@ -0,0 +1,1369 @@ +<?php + +return array( + 'number.decimals_separator' => '.', + 'number.thousands_separator' => ' ', + 'None' => 'Nimic', + 'Edit' => 'Modifică', + 'Remove' => 'Șterge', + 'Yes' => 'Da', + 'No' => 'Nu', + 'cancel' => 'anulare', + 'or' => 'sau', + 'Yellow' => 'Galben', + 'Blue' => 'Albastru', + 'Green' => 'Verde', + 'Purple' => 'Violet', + 'Red' => 'Roșu', + 'Orange' => 'Portocaliu', + 'Grey' => 'Gri', + 'Brown' => 'Maro', + 'Deep Orange' => 'Portocaliu închis', + 'Dark Grey' => 'Gri închis', + 'Pink' => 'Roz', + 'Teal' => 'Turcoaz', + 'Cyan' => 'Bleu', + 'Lime' => 'Lime', + 'Light Green' => 'Verde deschis', + 'Amber' => 'Ambră', + 'Save' => 'Salvează', + 'Login' => 'Conectare', + 'Official website:' => 'Site web oficial:', + 'Unassigned' => 'Neatribuit', + 'View this task' => 'Vezi sarcina aceasta', + 'Remove user' => 'Șterge utilizator', + 'Do you really want to remove this user: "%s"?' => 'Vrei să ștergi acest utilizator: "%s" ?', + 'All users' => 'Toți utilizatorii', + 'Username' => 'Nume utilizator', + 'Password' => 'Parolă', + 'Administrator' => 'Administrator', + 'Sign in' => 'Conectare', + 'Users' => 'Utilizatori', + 'Forbidden' => 'Interzis', + 'Access Forbidden' => 'Acces interzis', + 'Edit user' => 'Modifică utilizator', + 'Logout' => 'Deconectare', + 'Bad username or password' => 'Utilizator sau parolă incorectă', + 'Edit project' => 'Modifică proiect', + 'Name' => 'Nume', + 'Projects' => 'Proiecte', + 'No project' => 'Fără proiect', + 'Project' => 'Proiect', + 'Status' => 'Stare', + 'Tasks' => 'Sarcini', + 'Board' => 'Bord', + 'Actions' => 'Actiuni', + 'Inactive' => 'Inactiv', + 'Active' => 'Activ', + 'Unable to update this board.' => 'Nu am putut actualiza acest bord.', + 'Disable' => 'Dezactivează', + 'Enable' => 'Activează', + 'New project' => 'Proiect nou', + 'Do you really want to remove this project: "%s"?' => 'Vrei să ștergi acest proiect: "%s" ?', + 'Remove project' => 'Șterge proiect', + 'Edit the board for "%s"' => 'Modifică bordul pentru "%s"', + 'Add a new column' => 'Adaugă o coloană nouă', + 'Title' => 'Titlu', + 'Assigned to %s' => 'Atribuie lui %s', + 'Remove a column' => 'Șterge o coloană', + 'Unable to remove this column.' => 'Nu pot șterge această coloană.', + 'Do you really want to remove this column: "%s"?' => 'Vrei să ștergi acestă coloană: "%s" ?', + 'Settings' => 'Preferințe', + 'Application settings' => 'Preferințele aplicației', + 'Language' => 'Limbă', + 'Webhook token:' => 'Token de securitate pentru webhook:', + 'API token:' => 'Token de securitate pentru API:', + 'Database size:' => 'Dimensiune bază de date:', + 'Download the database' => 'Descarcă baza de date', + 'Optimize the database' => 'Optimizează baza de date', + '(VACUUM command)' => '(Comanda VACUUM)', + '(Gzip compressed Sqlite file)' => '(Fișier Sqlite comprimat cu Gzip)', + 'Close a task' => 'Închide o sarcină', + 'Column' => 'Coloană', + 'Color' => 'Culoare', + 'Assignee' => 'Persoană desemnată', + 'Create another task' => 'Creează altă sarcină', + 'New task' => 'Sarcină nouă', + 'Open a task' => 'Deschide o sarcină', + 'Do you really want to open this task: "%s"?' => 'Vrei să deschizi sarcina: "%s" ?', + 'Back to the board' => 'Înapoi la bord', + 'There is nobody assigned' => 'Nu este desemnată o persoană', + 'Column on the board:' => 'Coloană pe bord: ', + 'Close this task' => 'Închide sarcina', + 'Open this task' => 'Deschide Sarcina', + 'There is no description.' => 'Nu există o descriere.', + 'Add a new task' => 'Adaugă o sarcină nouă', + 'The username is required' => 'Numele este obligatoriu', + 'The maximum length is %d characters' => 'Lungimea maximă este de %d caractere', + 'The minimum length is %d characters' => 'Lungimea minimă este de %d caractere', + 'The password is required' => 'Parola este obligatorie', + 'This value must be an integer' => 'Valoarea trebuie să fie număr întreg', + 'The username must be unique' => 'Utilizatorul trebuie să fie unic', + 'The user id is required' => 'ID-ul de utilizator este obligatoriu', + 'Passwords don\'t match' => 'Parolele nu corespund', + 'The confirmation is required' => 'Confirmarea este obligatorie', + 'The project is required' => 'Proiectul este obligatoriu', + 'The id is required' => 'Identificatorul este obligatoriu', + 'The project id is required' => 'ID-ul proiectului este obligatoriu', + 'The project name is required' => 'Numele proiectului este obligatoriu', + 'The title is required' => 'Titlul este obligatoriu', + 'Settings saved successfully.' => 'Preferințele au fost salvate.', + 'Unable to save your settings.' => 'Nu am putut salva preferințele.', + 'Database optimization done.' => 'Optimizarea bazei de date s-a încheiat.', + 'Your project have been created successfully.' => 'Proiectul dumneavoastră a fost creat cu succes.', + 'Unable to create your project.' => 'Nu am putut crea proiectul dumneavoastră.', + 'Project updated successfully.' => 'Proiectul a fost actualizat.', + 'Unable to update this project.' => 'Nu am putut actualiza proiectul.', + 'Unable to remove this project.' => 'Nu am putut șterge proiectul.', + 'Project removed successfully.' => 'Proiectul a fost șters.', + 'Project activated successfully.' => 'Proiectul a fost activat.', + 'Unable to activate this project.' => 'Nu am putut activa proiectul.', + 'Project disabled successfully.' => 'Proiectul a fost dezactivat.', + 'Unable to disable this project.' => 'Nu am putut dezactiva proiectul', + 'Unable to open this task.' => 'Nu am putut deschide sarcina.', + 'Task opened successfully.' => 'Sarcina a fost deschisă', + 'Unable to close this task.' => 'Nu am putut închide sarcina.', + 'Task closed successfully.' => 'Sarcina a fost închisă.', + 'Unable to update your task.' => 'Nu am putut actualiza sarcina.', + 'Task updated successfully.' => 'Sarcina fost actualizată.', + 'Unable to create your task.' => 'Nu am putut crea sarcina.', + 'Task created successfully.' => 'Sarcina a fost creată.', + 'User created successfully.' => 'Utilizatorul a fost creat.', + 'Unable to create your user.' => 'Nu am putut crea utilizatorul.', + 'User updated successfully.' => 'Utilizatorul a fost actualizat.', + 'User removed successfully.' => 'Utilizatorul a fost șters.', + 'Unable to remove this user.' => 'Nu am putut șterge utilizatorul.', + 'Board updated successfully.' => 'Bordul a fost actualizat.', + 'Ready' => 'Pregătit', + 'Backlog' => 'Restant', + 'Work in progress' => 'În desfășurare', + 'Done' => 'Finalizat', + 'Application version:' => 'Versiunea aplicației:', + 'Id' => 'Id', + 'Public link' => 'Legătură publică', + 'Timezone' => 'Fus orar', + 'Sorry, I didn\'t find this information in my database!' => 'Scuze, nu am găsit informația asta în baza mea de date!', + 'Page not found' => 'Pagina nu a fost găsită', + 'Complexity' => 'Complexitate', + 'Task limit' => 'Limită sarcini.', + 'Task count' => 'Număr de sarcini', + 'User' => 'Utilizator', + 'Comments' => 'Comentarii', + 'Comment is required' => 'Comentariul este obligatoriu', + 'Comment added successfully.' => 'Comentariul a fost adăugat', + 'Unable to create your comment.' => 'Nu am putut crea comentariul.', + 'Due Date' => 'Data scadentă', + 'Invalid date' => 'Dată invalidă', + 'Automatic actions' => 'Acțiuni automatizate', + 'Your automatic action have been created successfully.' => 'Acțiunea automatizată a fost creată.', + 'Unable to create your automatic action.' => 'Nu am putut crea acțiunea automatizată.', + 'Remove an action' => 'Șterge o acțiune', + 'Unable to remove this action.' => 'Nu am putut șterge acțiunea', + 'Action removed successfully.' => 'Acțiunea a fost ștearsă.', + 'Automatic actions for the project "%s"' => 'Acțiuni automatizate pentru proiectul "%s"', + 'Add an action' => 'Adaugă o acțiune', + 'Event name' => 'Nume eveniment', + 'Action' => 'Acțiune', + 'Event' => 'Eveniment', + 'When the selected event occurs execute the corresponding action.' => 'Când are loc evenimentul ales execută acțiunea corespunzătoare.', + 'Next step' => 'Pasul următor', + 'Define action parameters' => 'Definește parametrii acțiunii', + 'Do you really want to remove this action: "%s"?' => 'Vrei să ștergi acțiunea: "%s" ?', + 'Remove an automatic action' => 'Șterge o acțiune automatizată', + 'Assign the task to a specific user' => 'Atribuie sarcina unui utilizator specific', + 'Assign the task to the person who does the action' => 'Atribuie sarcina persoanei care îndeplinește acțiunea', + 'Duplicate the task to another project' => 'Duplichează sarcina în alt proiect', + 'Move a task to another column' => 'Mută sarcina în altă coloană', + 'Task modification' => 'Modificare sarcină', + 'Task creation' => 'Creare sarcină', + 'Closing a task' => 'Închidere sarcină', + 'Assign a color to a specific user' => 'Atribuie o culoare unui utilizator specific', + 'Position' => 'Poziție', + 'Duplicate to another project' => 'Duplichează în alt proiect', + 'Duplicate' => 'Duplicare', + 'Link' => 'Legătură', + 'Comment updated successfully.' => 'Comentariu actualizat.', + 'Unable to update your comment.' => 'Nu am putut actualiza comentariul.', + 'Remove a comment' => 'Șterge un comentariu', + 'Comment removed successfully.' => 'Comentariul a fost șters.', + 'Unable to remove this comment.' => 'Nu am putut șterge comentariul.', + 'Do you really want to remove this comment?' => 'Vrei să ștergi acest comentariu?', + 'Current password for the user "%s"' => 'Parola actuală pentru utilizatorul "%s"', + 'The current password is required' => 'Parola actuală este obligatorie', + 'Wrong password' => 'Parolă greșită', + 'Unknown' => 'Necunoscut', + 'Last logins' => 'Ultimele conectări', + 'Login date' => 'Data conectării', + 'Authentication method' => 'Metodă de autentificare', + 'IP address' => 'Adresă IP', + 'User agent' => 'Agent utilizator', + 'Persistent connections' => 'Conexiuni persistente', + 'No session.' => 'Fără sesiune.', + 'Expiration date' => 'Data expirării', + 'Remember Me' => 'Amintește-ți de mine', + 'Creation date' => 'Data creării', + 'Everybody' => 'Toată lumea', + 'Open' => 'Deschis', + 'Closed' => 'Închis', + 'Search' => 'Caută', + 'Nothing found.' => 'Nimic găsit.', + 'Due date' => 'Dată scadentă', + 'Description' => 'Descriere', + '%d comments' => '%d comentarii', + '%d comment' => '%d comentariu', + 'Email address invalid' => 'Adresă e-mail invalidă', + 'Your external account is not linked anymore to your profile.' => 'Contul tău extern nu mai este legat cu profilul.', + 'Unable to unlink your external account.' => 'Nu am putut dezlega contul tău extern.', + 'External authentication failed' => 'Autentificarea externă a eșuat', + 'Your external account is linked to your profile successfully.' => 'Contul tău extern a fost legat de profil.', + 'Email' => 'E-mail', + 'Task removed successfully.' => 'Sarcină ștearsă.', + 'Unable to remove this task.' => 'Nu pot șterge sarcina.', + 'Remove a task' => 'Șterge o sarcină', + 'Do you really want to remove this task: "%s"?' => 'Vrei să ștergi sarcina: "%s" ?', + 'Assign automatically a color based on a category' => 'Atribuie automat o culoare bazat pe categorie', + 'Assign automatically a category based on a color' => 'Atribuie automat o categorie bazat pe culoare', + 'Task creation or modification' => 'Creare sau modificare sarcină', + 'Category' => 'Categorie', + 'Category:' => 'Categorie:', + 'Categories' => 'Categorii', + 'Your category have been created successfully.' => 'Categoria a fost creată.', + 'This category has been updated successfully.' => 'Categoria a fost actualizată.', + 'Unable to update this category.' => 'Nu am putut actualiza categoria.', + 'Remove a category' => 'Șterge o categorie', + 'Category removed successfully.' => 'Categoria a fost ștearsă.', + 'Unable to remove this category.' => 'Nu am putut șterge categoria.', + 'Category modification for the project "%s"' => 'Modificarea categoriei pentru proiectul "%s"', + 'Category Name' => 'Numele categoriei', + 'Add a new category' => 'Adaugă o categorie nouă', + 'Do you really want to remove this category: "%s"?' => 'Vrei să ștergi categoria: "%s" ?', + 'All categories' => 'Toate categoriile', + 'No category' => 'Fără categorie', + 'The name is required' => 'Numele este obligatoriu', + 'Remove a file' => 'Șterge un fișier', + 'Unable to remove this file.' => 'Nu am putut șterge fișierul.', + 'File removed successfully.' => 'Fișierul a fost șters.', + 'Attach a document' => 'Atașează un document', + 'Do you really want to remove this file: "%s"?' => 'Vrei să ștergi acest fișier: "%s" ?', + 'Attachments' => 'Atașamente', + 'Edit the task' => 'Modifică sarcina', + 'Add a comment' => 'Adaugă un comentariu', + 'Edit a comment' => 'Modifică un comentariu', + 'Summary' => 'Sumar', + 'Time tracking' => 'Urmărirea timpului', + 'Estimate:' => 'Estimat:', + 'Spent:' => 'Petrecut:', + 'Do you really want to remove this sub-task?' => 'Vrei să ștergi această sub-sarcină?', + 'Remaining:' => 'Rămas:', + 'hours' => 'ore', + 'spent' => 'trecute', + 'estimated' => 'estimate', + 'Sub-Tasks' => 'Sub-sarcini', + 'Add a sub-task' => 'Adaugă o sub-sarcină', + 'Original estimate' => 'Estimat original', + 'Create another sub-task' => 'Creează altă sub-sarcină', + 'Time spent' => 'Timp petrecut', + 'Edit a sub-task' => 'Modifică o sub-sarcină', + 'Remove a sub-task' => 'Șterge o sub-sarcină', + 'The time must be a numeric value' => 'Timpul trebuie să fie o valoare numerică', + 'Todo' => 'De făcut', + 'In progress' => 'În curs', + 'Sub-task removed successfully.' => 'Sub-sarcină ștearsă.', + 'Unable to remove this sub-task.' => 'Nu am putut șterge sub-sarcina.', + 'Sub-task updated successfully.' => 'Sub-sarcină actualizată.', + 'Unable to update your sub-task.' => 'Nu am putut actualiza sub-sarcina.', + 'Unable to create your sub-task.' => 'Nu am putut crea sub-sarcina.', + 'Maximum size: ' => 'Dimensiune maximă: ', + 'Display another project' => 'Afișează alt proiect', + 'Created by %s' => 'Creat de %s', + 'Tasks Export' => 'Exportă sarcini', + 'Start Date' => 'Data pornirii', + 'Execute' => 'Execută', + 'Task Id' => 'ID Sarcină', + 'Creator' => 'Creator', + 'Modification date' => 'Data modificării', + 'Completion date' => 'Data finalizării', + 'Clone' => 'Clonează', + 'Project cloned successfully.' => 'Proiectul a fost clonat.', + 'Unable to clone this project.' => 'Nu am putut clona proiectul.', + 'Enable email notifications' => 'Activează notificarile pe e-mail', + 'Task position:' => 'Poziția sarcinii:', + 'The task #%d have been opened.' => 'Sarcina #%d a fost deschisă.', + 'The task #%d have been closed.' => 'Sarcina #%d a fost închisă.', + 'Sub-task updated' => 'Sub-sarcină actualizată', + 'Title:' => 'Titlu:', + 'Status:' => 'Stare:', + 'Assignee:' => 'Atribuire:', + 'Time tracking:' => 'Gestionarea timpului:', + 'New sub-task' => 'Sub-sarcină nouă', + 'New attachment added "%s"' => 'Atașament nou adăugat "%s"', + 'New comment posted by %s' => 'Comentariu nou postat de "%s"', + 'New comment' => 'Comentariu nou', + 'Comment updated' => 'Comentariu actualizat', + 'New subtask' => 'Sub-sarcină nouă', + 'I want to receive notifications only for those projects:' => 'Vreau să primesc notificări numai pentru acele proiecte:', + 'view the task on Kanboard' => 'vezi sarcina pe Kanboard', + 'Public access' => 'Acces public', + 'Disable public access' => 'Dezactivează accesul public', + 'Enable public access' => 'Activează accesul public', + 'Public access disabled' => 'Accesul public dezactivat', + 'Move the task to another project' => 'Mută sarcina în alt proiect', + 'Move to another project' => 'Mută în alt proiect', + 'Do you really want to duplicate this task?' => 'Vrei să duplichezi această sarcină?', + 'Duplicate a task' => 'Duplichează o sarcină', + 'External accounts' => 'Conturi externe', + 'Account type' => 'Tip de cont', + 'Local' => 'Local', + 'Remote' => 'La distanță', + 'Enabled' => 'Activat', + 'Disabled' => 'Dezactivat', + 'Login:' => 'Utilizator:', + 'Full Name:' => 'Nume :', + 'Email:' => 'E-mail :', + 'Notifications:' => 'Notificări:', + 'Notifications' => 'Notificări', + 'Account type:' => 'Tip de cont:', + 'Edit profile' => 'Modifică profilul', + 'Change password' => 'Schimbă parola', + 'Password modification' => 'Modificare parolă', + 'External authentications' => 'Autentificări externe', + 'Never connected.' => 'Niciodată conectat.', + 'No external authentication enabled.' => 'Nici o autentificare externă activă.', + 'Password modified successfully.' => 'Parolă modificată.', + 'Unable to change the password.' => 'Nu am putut modifica parola.', + 'Change category' => 'Schimbă categoria', + '%s updated the task %s' => '%s a actualizat sarcina %s', + '%s opened the task %s' => '%s a deschis sarcina %s', + '%s moved the task %s to the position #%d in the column "%s"' => '%s a mutat sarcina %s la poziția #%d în coloana "%s"', + '%s moved the task %s to the column "%s"' => '%s a mutat sarcina %s în coloana "%s"', + '%s created the task %s' => '%s a creat sarcina %s', + '%s closed the task %s' => '%s a închis sarcina %s', + '%s created a subtask for the task %s' => '%s a creat o sub-sarcină pentru sarcina %s', + '%s updated a subtask for the task %s' => '%s a actualizat o sub-sarcină pentru sarcina %s', + 'Assigned to %s with an estimate of %s/%sh' => 'Atribuit lui %s cu o estimare de %s/%s h', + 'Not assigned, estimate of %sh' => 'Nimeni atribuit, estimare de %s h', + '%s updated a comment on the task %s' => '%s a actualizat u comentariu în sarcina %s', + '%s commented the task %s' => '%s a comentat în sarcina %s', + '%s\'s activity' => 'Activitatea pentru %s', + 'RSS feed' => 'Flux RSS', + '%s updated a comment on the task #%d' => '%s a actualizat un comentariu în sarcina #%d', + '%s commented on the task #%d' => '%s a comentat în sarcina #%d', + '%s updated a subtask for the task #%d' => '%s a actualizat o sub-sarcină în sarcina #%d', + '%s created a subtask for the task #%d' => '%s a creat o sub-sarcină în sarcina #%d', + '%s updated the task #%d' => '%s a actualizat sarcina #%d', + '%s created the task #%d' => '%s a creat sarcina #%d', + '%s closed the task #%d' => '%s a închis sarcina #%d', + '%s opened the task #%d' => '%s a deschis sarcina #%d', + 'Activity' => 'Activitate', + 'Default values are "%s"' => 'Valorile implicite sunt "%s"', + 'Default columns for new projects (Comma-separated)' => 'Coloane implicite pentru proiectele noi (Separate prin virgulă)', + 'Task assignee change' => 'Modificare persoană desemnată sarcinii', + '%s changed the assignee of the task #%d to %s' => '%s a schimbat persoana desemnată sarcinii #%d lui %s', + '%s changed the assignee of the task %s to %s' => '%s a schimbat persoana desemnată sarcinii %s lui %s', + 'New password for the user "%s"' => 'Parolă nouă pentru utilizatorul "%s"', + 'Choose an event' => 'Alege un eveniment', + 'Create a task from an external provider' => 'Creează o sarcină de la un furnizor extern', + 'Change the assignee based on an external username' => 'Schimbă persoana desemnată bazat pe un nume de utilizator extern', + 'Change the category based on an external label' => 'Schimbă categoria bazat pe o etichetă externă', + 'Reference' => 'Referință', + 'Label' => 'Etichetă', + 'Database' => 'Bază de date', + 'About' => 'Despre', + 'Database driver:' => 'Tip de bază de date:', + 'Board settings' => 'Preferințe bord', + 'Webhook settings' => 'Preferințe webhook', + 'Reset token' => 'Resetare token de securitate', + 'API endpoint:' => 'URL-ul pentru API:', + 'Refresh interval for private board' => 'Interval de reîmprospătare pentru bord privat', + 'Refresh interval for public board' => 'Interval de reîmprospătare pentru bord public', + 'Task highlight period' => 'Perioada de evidențiere a sarcinii', + 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Durata în secunde pentru a considera o sarcină recent modificată (0 pentru dezactivare, 2 zile implicit)', + 'Frequency in second (60 seconds by default)' => 'Frecvență în secunde (60 secunde implicit)', + 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Frecvență în secunde (0 pentru dezactivare, 10 secunde implicit)', + 'Application URL' => 'URL-ul aplicației', + 'Token regenerated.' => 'Token de securitate regenerat.', + 'Date format' => 'Formatare dată', + 'ISO format is always accepted, example: "%s" and "%s"' => 'Formatul ISO este întotdeauna acceptat, exemplu: "%s" și "%s"', + 'New private project' => 'Proiect privat nou', + 'This project is private' => 'Acest proiect este privat', + 'Add' => 'Adaugă', + 'Start date' => 'Dată pornire', + 'Time estimated' => 'Timp estimat', + 'There is nothing assigned to you.' => 'Nu îți este atribuit nimic.', + 'My tasks' => 'Sarcinile mele', + 'Activity stream' => 'Flux de activitate', + 'Dashboard' => 'Bord', + 'Confirmation' => 'Confirmare', + 'Webhooks' => 'Webhook-uri', + 'API' => 'API', + 'Create a comment from an external provider' => 'Creează un comentariu de la un furnizor extern', + 'Project management' => 'Gestionare proiect', + 'Columns' => 'Coloane', + 'Task' => 'Sarcini', + 'Percentage' => 'Procentaj', + 'Number of tasks' => 'Număr de sarcini', + 'Task distribution' => 'Distribuția sarcinilor', + 'Analytics' => 'Analitică', + 'Subtask' => 'Sub-sarcină', + 'User repartition' => 'Repartizare utilizatori', + 'Clone this project' => 'Clonează proiectul', + 'Column removed successfully.' => 'Coloana a fost ștearsă.', + 'Not enough data to show the graph.' => 'Nu sunt destule date pentru afișarea graficului.', + 'Previous' => 'Anterior', + 'The id must be an integer' => 'ID-ul trebuie să fie un număr întreg', + 'The project id must be an integer' => 'ID-ul proiectului trebuie să fie un număr întreg', + 'The status must be an integer' => 'Starea trebuie să fie un număr întreg', + 'The subtask id is required' => 'ID-ul sub-sarcinii este obligatoriu', + 'The subtask id must be an integer' => 'ID-ul sub-sarcinii trebuie sa fie un număr întreg', + 'The task id is required' => 'ID-ul sarcinii este obligatoriu', + 'The task id must be an integer' => 'ID-ul sarcinii trebuie să fie un număr întreg', + 'The user id must be an integer' => 'ID-ul utilizatorului trebuie să fie un număr întreg', + 'This value is required' => 'Valoarea aceasta este obligatorie', + 'This value must be numeric' => 'Valoarea aceasta trebuie să fie numerică', + 'Unable to create this task.' => 'Nu am putut crea sarcina', + 'Cumulative flow diagram' => 'Diagrama fluxului cumulat', + 'Daily project summary' => 'Rezumatul zilnic al proiectului', + 'Daily project summary export' => 'Export rezumat zilnic al proiectului', + 'Exports' => 'Exporturi', + 'This export contains the number of tasks per column grouped per day.' => 'Acest export conține numărul de sarcini per coloană grupat pe zile.', + 'Active swimlanes' => 'Culoare active', + 'Add a new swimlane' => 'Adaugă culoar nou', + 'Default swimlane' => 'Culoar implicit', + 'Do you really want to remove this swimlane: "%s"?' => 'Vrei să ștergi culoarul: "%s" ?', + 'Inactive swimlanes' => 'Culoare inactive', + 'Remove a swimlane' => 'Șterge un culoar', + 'Swimlane modification for the project "%s"' => 'Modificarea culoarului pentru proiectul "%s"', + 'Swimlane removed successfully.' => 'Culoarul a fost șters', + 'Swimlanes' => 'Culoare', + 'Swimlane updated successfully.' => 'Culoar actualizat.', + 'Unable to remove this swimlane.' => 'Nu am putut șterge culoarul.', + 'Unable to update this swimlane.' => 'Nu am putut actualiza culoarul.', + 'Your swimlane have been created successfully.' => 'Culoarul a fost creat.', + 'Example: "Bug, Feature Request, Improvement"' => 'Exemplu: "Incident, Cere caracteristică, Îmbunătățire"', + 'Default categories for new projects (Comma-separated)' => 'Categorii implicite pentru proiecte noi (Separate prin virgulă)', + 'Integrations' => 'Integrări', + 'Integration with third-party services' => 'Integrări cu servicii externe', + 'Subtask Id' => 'ID sub-sarcină', + 'Subtasks' => 'Sub-sarcini', + 'Subtasks Export' => 'Export sub-sarcini', + 'Task Title' => 'Titlu sarcină', + 'Untitled' => 'Fără titlu', + 'Application default' => 'Implicit din aplicație', + 'Language:' => 'Limbă:', + 'Timezone:' => 'Fus orar:', + 'All columns' => 'Toate coloanele', + 'Next' => 'Următor', + '#%d' => '#%d', + 'All swimlanes' => 'Toate culoarele', + 'All colors' => 'Toate culorile', + 'Moved to column %s' => 'Mutat în coloana %s', + 'User dashboard' => 'Bordul utilizatorului', + 'Allow only one subtask in progress at the same time for a user' => 'Permite o singură sub-sarcină în derulare simultană pentru un utilizator', + 'Edit column "%s"' => 'Modifică coloana "%s"', + 'Select the new status of the subtask: "%s"' => 'Alege noua stare a sarcinii: "%s"', + 'Subtask timesheet' => 'Pontajul sub-sarcinii', + 'There is nothing to show.' => 'Nimic de afișat', + 'Time Tracking' => 'Urmărirea timpului', + 'You already have one subtask in progress' => 'Deja ai o sub-sarcină în desfășurare', + 'Which parts of the project do you want to duplicate?' => 'Care părți ale proiectului vrei să fie duplicate?', + 'Disallow login form' => 'Interzice formularul de autentificare', + 'Start' => 'Start', + 'End' => 'Final', + 'Task age in days' => 'Vârsta sarcinii în zile', + 'Days in this column' => 'Zile în această coloană', + '%dd' => '%d z', + 'Add a new link' => 'Adaugă legătură nouă', + 'Do you really want to remove this link: "%s"?' => 'Vrei să ștergi legătura: "%s" ?', + 'Do you really want to remove this link with task #%d?' => 'Vrei să ștergi legătura cu sarcina #%d ?', + 'Field required' => 'Câmp obligatoriu', + 'Link added successfully.' => 'Legătură adăugată.', + 'Link updated successfully.' => 'Legătură actualizată.', + 'Link removed successfully.' => 'Legătură ștearsă.', + 'Link labels' => 'Etichete de legături', + 'Link modification' => 'Modificare legătură', + 'Links' => 'Legături', + 'Opposite label' => 'Etichetă opusă', + 'Remove a link' => 'Șterge o legătură', + 'The labels must be different' => 'Etichetele trebuie să difere', + 'There is no link.' => 'Nu există legătură.', + 'This label must be unique' => 'Eticheta trebuie să fie unică', + 'Unable to create your link.' => 'Nu pot crea legătura.', + 'Unable to update your link.' => 'Nu pot actualiza legătura.', + 'Unable to remove this link.' => 'Nu pot șterge legătura.', + 'relates to' => 'se leagă de', + 'blocks' => 'blochează', + 'is blocked by' => 'este blocat de', + 'duplicates' => 'duplichează', + 'is duplicated by' => 'este duplicat de', + 'is a child of' => 'este element moștenitor al', + 'is a parent of' => 'este element parental al', + 'targets milestone' => 'vizează țelul', + 'is a milestone of' => 'este un țel a', + 'fixes' => 'corectează', + 'is fixed by' => 'este corectat de', + 'This task' => 'Această sarcină', + '<1h' => '< 1 h', + '%dh' => '%d h', + 'Expand tasks' => 'Extinde sarcinile', + 'Collapse tasks' => 'Restrânge sarcinile', + 'Expand/collapse tasks' => 'Extinde/restrânge sarcinile', + 'Close dialog box' => 'Închide dialogul', + 'Submit a form' => 'Depune un formular', + 'Board view' => 'Vizualizare bord', + 'Keyboard shortcuts' => 'Scurtături de tastatură', + 'Open board switcher' => 'Deschide comutatorul de bord', + 'Application' => 'Aplicație', + 'Compact view' => 'Vizualizare restrânsă', + 'Horizontal scrolling' => 'Derulare orizontală', + 'Compact/wide view' => 'Vizualizare compactă/lată', + 'Currency' => 'Monedă', + 'Private project' => 'Proiect privat', + 'AUD - Australian Dollar' => 'AUD - Dolar australian', + 'CAD - Canadian Dollar' => 'CAD - Dolar canadian', + 'CHF - Swiss Francs' => 'CHF - Franc elvetian', + 'Custom Stylesheet' => 'Stylesheet personalizat', + 'download' => 'descarcă', + 'EUR - Euro' => 'EUR - Euro', + 'GBP - British Pound' => 'GBP - Liră sterlină', + 'INR - Indian Rupee' => 'INR - Rupie indiană', + 'JPY - Japanese Yen' => 'JPY - Yen japonez', + 'NZD - New Zealand Dollar' => 'NZD - Dolar neo-zeelandez', + 'RSD - Serbian dinar' => 'RSD - Dinar sârbesc', + 'CNY - Chinese Yuan' => 'CNY - Yuan chinez', + 'USD - US Dollar' => 'USD - Dolar american', + 'Destination column' => 'Coloana destinație', + 'Move the task to another column when assigned to a user' => 'Mută sarcina în altă coloană când este atribuită unui utilizator', + 'Move the task to another column when assignee is cleared' => 'Mută sarcina în altă coloană când este eliberată atribuirea', + 'Source column' => 'Coloana sursă', + 'Transitions' => 'Tranzitii', + 'Executer' => 'Executant', + 'Time spent in the column' => 'Timp petrecut în coloană', + 'Task transitions' => 'Tranzițiile sarcinilor', + 'Task transitions export' => 'Exportă tranzițiile sarcinilor', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Acest raport conține toate mutările de coloană pentru sarcinile cu data, utilizatorul și timpul petrecut pentru fiecare tranziție.', + 'Currency rates' => 'Rate de schimb', + 'Rate' => 'Rată', + 'Change reference currency' => 'Schimbă moneda de referință', + 'Reference currency' => 'Moneda de referință', + 'The currency rate have been added successfully.' => 'Rata de schimb a fost adăugată.', + 'Unable to add this currency rate.' => 'Nu am putut adăuga rata de schimb', + 'Webhook URL' => 'URL pentru webhook', + '%s removed the assignee of the task %s' => '%s a eliberat persoana atribuită sarcinii %s', + 'Information' => 'Informații', + 'Check two factor authentication code' => 'Verificare cod autentificare în doi factori', + 'The two factor authentication code is not valid.' => 'Codul de autentificare în doi factori nu este valid.', + 'The two factor authentication code is valid.' => 'Codul de autentificare în doi factori este valid.', + 'Code' => 'Cod', + 'Two factor authentication' => 'Autentificare în doi factori', + 'This QR code contains the key URI: ' => 'Codul QR contine URI-ul cheii: ', + 'Check my code' => 'Verifică codul meu', + 'Secret key: ' => 'Cheia secretă: ', + 'Test your device' => 'Testează dispozitivul tău', + 'Assign a color when the task is moved to a specific column' => 'Atribuie o culoare când sarcina este mutată într-o anumită coloană', + '%s via Kanboard' => '%s via Kanboard', + 'Burndown chart' => 'Graficul progresului', + 'This chart show the task complexity over the time (Work Remaining).' => 'Acest grafic arată complexitatea sarcinii de-a lungul timpului (munca rămasă).', + 'Screenshot taken %s' => 'Captură de ecran %s', + 'Add a screenshot' => 'Adaugă captură de ecran', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Faceți o captura de ecran si apăsați CTRL+V sau ⌘+V pentru a lipi aici.', + 'Screenshot uploaded successfully.' => 'Captura de ecran a fost încărcată.', + 'SEK - Swedish Krona' => 'SEK - coroană suedeză', + 'Identifier' => 'Identificator', + 'Disable two factor authentication' => 'Dezactivează autentificarea în doi factori', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Vrei să dezactivezi autentificarea în doi factori pentru utilizatorul: "%s" ?', + 'Edit link' => 'Modifică o legătură', + 'Start to type task title...' => 'Scrie titlul sarcinii…', + 'A task cannot be linked to itself' => 'O sarcină nu se poate lega de ea însăși', + 'The exact same link already exists' => 'O legătură identică există deja', + 'Recurrent task is scheduled to be generated' => 'Sarcina recurentă este programată să fie generată', + 'Score' => 'Complexitate', + 'The identifier must be unique' => 'Identificatorul trebuie să fie unic', + 'This linked task id doesn\'t exists' => 'ID-ul de sarcină legat nu există', + 'This value must be alphanumeric' => 'Valoarea trebuie să fie alfanumerică', + 'Edit recurrence' => 'Modifică recurența', + 'Generate recurrent task' => 'Generează sarcină recurentă', + 'Trigger to generate recurrent task' => 'Declanșator pentru generarea sarcinii recurente', + 'Factor to calculate new due date' => 'Factor de calculare a noii date scadente', + 'Timeframe to calculate new due date' => 'Interval de timp pentru calcularea noii date scadente', + 'Base date to calculate new due date' => 'Data de bază pentru calcularea noii date scadente', + 'Action date' => 'Data acțiunii', + 'Base date to calculate new due date: ' => 'Data de bază pentru calcularea noii date scadente: ', + 'This task has created this child task: ' => 'Sarcina aceasta a creat această sarcină-moștenitor: ', + 'Day(s)' => 'Zi(le)', + 'Existing due date' => 'Dată scadentă existentă', + 'Factor to calculate new due date: ' => 'Factor de calculare a noii date scadente: ', + 'Month(s)' => 'Lună(/i)', + 'Recurrence' => 'Recurență', + 'This task has been created by: ' => 'Această sarcină a fost creată de:', + 'Recurrent task has been generated:' => 'Sarcina recurentă a fost generată:', + 'Timeframe to calculate new due date: ' => 'Interval de timp pentru calcularea noii date scadente: ', + 'Trigger to generate recurrent task: ' => 'Declanșator pentru generarea sarcinii recurente: ', + 'When task is closed' => 'Când sarcina este închisă', + 'When task is moved from first column' => 'Când sarcina este mutată din prima coloană', + 'When task is moved to last column' => 'Când sarcina este mutată în ultima coloană', + 'Year(s)' => 'An(i)', + 'Project settings' => 'Preferințe de proiect', + 'Automatically update the start date' => 'Actualizează automat data de start', + 'iCal feed' => 'Flux iCal', + 'Preferences' => 'Preferințe', + 'Security' => 'Securitate', + 'Two factor authentication disabled' => 'Autentificare în doi factori dezactivată', + 'Two factor authentication enabled' => 'Autentificare în doi factori activată', + 'Unable to update this user.' => 'Nu am putut actualiza utilizatorul.', + 'There is no user management for private projects.' => 'Nu poți gestiona utilizatori pentru proiecte private.', + 'User that will receive the email' => 'Utilizatorul care va primi e-mail-ul', + 'Email subject' => 'Subiectul e-mail-ului', + 'Date' => 'Data', + 'Add a comment log when moving the task between columns' => 'Înregistrează un comentariu în jurnal când se mută sarcina între coloane', + 'Move the task to another column when the category is changed' => 'Mută sarcina în altă coloană când se schimbă categoria', + 'Send a task by email to someone' => 'Trimite o sarcină prin e-mail cuiva', + 'Reopen a task' => 'Redeschide o sarcină', + 'Notification' => 'Notificare', + '%s moved the task #%d to the first swimlane' => '%s a mutat sarcina #%d în primul culoar', + 'Swimlane' => 'Culoar', + '%s moved the task %s to the first swimlane' => '%s a mutat sarcina %s în primul culoar', + '%s moved the task %s to the swimlane "%s"' => '%s a mutat sarcina %s în culoarul "%s"', + 'This report contains all subtasks information for the given date range.' => 'Raportul conține toate informațiile sub-sarcinilor pentru intervalul dat.', + 'This report contains all tasks information for the given date range.' => 'Raportul conține toate informațiile sarcinilor pentru intervalul dat.', + 'Project activities for %s' => 'Activități de proiect pentru "%s"', + 'view the board on Kanboard' => 'vezi bordul în Kanboard', + 'The task have been moved to the first swimlane' => 'Sarcina a fost mutată în primul culoar', + 'The task have been moved to another swimlane:' => 'Sarcina a fost mutată în alt culoar:', + 'New title: %s' => 'Titlu nou: %s', + 'The task is not assigned anymore' => 'Sarcina nu mai este desemnată', + 'New assignee: %s' => 'Desemnat nou: %s', + 'There is no category now' => 'Nu mai există categorii acum', + 'New category: %s' => 'Categorie nouă: %s', + 'New color: %s' => 'Culoare nouă: %s', + 'New complexity: %d' => 'Complexitate nouă: %d', + 'The due date have been removed' => 'Data scadentă a fost ștearsă', + 'There is no description anymore' => 'Nu mai există o descriere', + 'Recurrence settings have been modified' => 'Preferințele de recurență au fost modificate', + 'Time spent changed: %sh' => 'Timpul petrecut s-a schimbat: %s h', + 'Time estimated changed: %sh' => 'Timpul estimat s-a schimbat: %s h', + 'The field "%s" have been updated' => 'Câmpul "%s" a fost actualizat', + 'The description has been modified:' => 'Descrierea a fost modificată', + 'Do you really want to close the task "%s" as well as all subtasks?' => 'Vrei să închizi sarcina "%s" inclusiv toate sub-sarcinile?', + 'I want to receive notifications for:' => 'Vreau sa primesc notificări pentru:', + 'All tasks' => 'Toate Sarcinile', + 'Only for tasks assigned to me' => 'Numai sarcinile atribuite mie', + 'Only for tasks created by me' => 'Numai sarcinile create de mine', + 'Only for tasks created by me and assigned to me' => 'Numai sarcinile create de mine si atribuite mie.', + '%%Y-%%m-%%d' => '%%d/%%m/%%Y', + 'Total for all columns' => 'Totalul tuturor coloanelor', + 'You need at least 2 days of data to show the chart.' => 'Ai nevoie de cel putin 2 zile de date pentru afișarea graficului.', + '<15m' => '< 15 min', + '<30m' => '< 30 min', + 'Stop timer' => 'Oprește cronometrul', + 'Start timer' => 'Pornețe cronometrul', + 'My activity stream' => 'Fluxul meu de activități', + 'Search tasks' => 'Caută sarcini', + 'Reset filters' => 'Resetează filtre', + 'My tasks due tomorrow' => 'Sarcinile mele scadente mâine', + 'Tasks due today' => 'Sarcini scadente astăzi', + 'Tasks due tomorrow' => 'Sarcini scadente mâine', + 'Tasks due yesterday' => 'Sarcini scadente ieri', + 'Closed tasks' => 'Sarcini închise', + 'Open tasks' => 'Sarcini deschise', + 'Not assigned' => 'Fără atribuire', + 'View advanced search syntax' => 'Vezi sintaxa de căutare avansată', + 'Overview' => 'În ansamblu', + 'Board/Calendar/List view' => 'Bord/Calendar/Listă', + 'Switch to the board view' => 'Schimbă la bord', + 'Switch to the list view' => 'Schimbă la listă', + 'Go to the search/filter box' => 'Mergi la câmpul de căutare/filtre', + 'There is no activity yet.' => 'Nu există activitate încă.', + 'No tasks found.' => 'Nu s-au găsit sarcini.', + 'Keyboard shortcut: "%s"' => 'Scurtătură tastatură : "%s"', + 'List' => 'Listă', + 'Filter' => 'Filtru', + 'Advanced search' => 'Căutare avansată', + 'Example of query: ' => 'Exemplu de interogare: ', + 'Search by project: ' => 'Caută după proiect: ', + 'Search by column: ' => 'Caută după coloană: ', + 'Search by assignee: ' => 'Caută după desemnat: ', + 'Search by color: ' => 'Caută după culoare: ', + 'Search by category: ' => 'Caută după categorie: ', + 'Search by description: ' => 'Caută după descriere: ', + 'Search by due date: ' => 'Caută după dată scadentă: ', + 'Average time spent into each column' => 'Timp mediu petrecut în fiecare coloană', + 'Average time spent' => 'Timp mediu utilizat', + 'This chart show the average time spent into each column for the last %d tasks.' => 'Acest grafic arată timpul mediu petrecut în fiecare coloană pentru ultimele %d sarcini.', + 'Average Lead and Cycle time' => 'Durată medie de Avans si Ciclu', + 'Average lead time: ' => 'Medie durată avans: ', + 'Average cycle time: ' => 'Medie durata ciclu: ', + 'Cycle Time' => 'Timp ciclu', + 'Lead Time' => 'Timp avans', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Acest grafic arată media duratelor de avans și ciclu pentru ultimele %d sarcini de-a lungul timpului.', + 'Average time into each column' => 'Durată medie în fiecare coloană', + 'Lead and cycle time' => 'Timpuri de avans și ciclu', + 'Lead time: ' => 'Timp avans: ', + 'Cycle time: ' => 'Timp ciclu: ', + 'Time spent into each column' => 'Timp petrecut prin fiecare coloană', + 'The lead time is the duration between the task creation and the completion.' => 'Timpul de avans este durata între crearea sarcinii și finalizarea.', + 'The cycle time is the duration between the start date and the completion.' => 'Timpul de ciclu este durata între data de pornire și finalizare.', + 'If the task is not closed the current time is used instead of the completion date.' => 'Dacă sarcina nu este închisă data curentă este folosită în locul dății de finalizare.', + 'Set automatically the start date' => 'Setează automat data pornirii.', + 'Edit Authentication' => 'Modifică autentificarea', + 'Remote user' => 'Utilizator la distanță', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Utilizatorii la distanță nu păstrează parola în baza de date locală, de exemplu : conturi LDAP, GitHub sau Google.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Dacă bifezi "Interzice formularul de autentificare", acreditările introduse în dialogul de conectare vor fi ignorate.', + 'Default task color' => 'Culoarea implicită a sarcinii', + 'This feature does not work with all browsers.' => 'Această funcționalitate nu funcționează cu toate browserele.', + 'There is no destination project available.' => 'Nu este disponibil un proiect destinație.', + 'Trigger automatically subtask time tracking' => 'Declanșează automat cronometrarea timpului în sub-sarcini.', + 'Include closed tasks in the cumulative flow diagram' => 'Include sarcini închise în graficul fluxurilor cumulate', + 'Current swimlane: %s' => 'Culoarul curent: %s', + 'Current column: %s' => 'Coloana curentă: %s', + 'Current category: %s' => 'Categoria curentă: %s', + 'no category' => 'fără categorie', + 'Current assignee: %s' => 'Desemnat curent: %s', + 'not assigned' => 'fără desemnare', + 'Author:' => 'Autor:', + 'contributors' => 'contribuitori', + 'License:' => 'Licență:', + 'License' => 'Licență', + 'Enter the text below' => 'Introdu textul mai jos', + 'Start date:' => 'Data pornirii:', + 'Due date:' => 'Data scadentă:', + 'People who are project managers' => 'Persoane care gestionează proiectul', + 'People who are project members' => 'Persoane care participă la proiect', + 'NOK - Norwegian Krone' => 'NOK - Coroană norvegiană', + 'Show this column' => 'Arată această coloană', + 'Hide this column' => 'Ascunde această coloană', + 'open file' => 'deschide fișier', + 'End date' => 'Dată finalizare', + 'Users overview' => 'Prezentare generală utilizatori', + 'Members' => 'Membrii', + 'Shared project' => 'Proiect partajat', + 'Project managers' => 'Manageri de proiect', + 'Projects list' => 'Listă proiecte', + 'End date:' => 'Dată finalizare:', + 'Change task color when using a specific task link' => 'Schimbă culoarea sarcinii când se folosește o anumită legătură în sarcină', + 'Task link creation or modification' => 'Creare sau modificare legături sarcină', + 'Milestone' => 'Țel', + 'Documentation: %s' => 'Documentație: %s', + 'Reset the search/filter box' => 'Resetează dialogul de căutare/filtre', + 'Documentation' => 'Documentație', + 'Table of contents' => 'Cuprins', + 'Author' => 'Autor', + 'Version' => 'Versiuni', + 'Plugins' => 'Extensii', + 'There is no plugin loaded.' => 'Nu sunt încărcate extensii.', + 'My notifications' => 'Notificările mele', + 'Custom filters' => 'Filtre personalizate', + 'Your custom filter have been created successfully.' => 'Filtrul tău personalizat a fost creat.', + 'Unable to create your custom filter.' => 'Nu am putut crea filtrul tău personalizat.', + 'Custom filter removed successfully.' => 'Filtrul personalizat a fost șters.', + 'Unable to remove this custom filter.' => 'Nu am putut șterge filtrul presonalizat.', + 'Edit custom filter' => 'Modifică un filtru personalizat', + 'Your custom filter have been updated successfully.' => 'Filtrul tău personalizat a fost actualizat.', + 'Unable to update custom filter.' => 'Nu am putut actualiza filtrul personalizat.', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Atașament nou în sarcina #%d: %s', + 'New comment on task #%d' => 'Comentariu nou în sarcina #%d', + 'Comment updated on task #%d' => 'Comentariu actualizat în sarcina #%d', + 'New subtask on task #%d' => 'Sub-sarcină nouă în sarcina #%d', + 'Subtask updated on task #%d' => 'Sub-sarcină actualizată în sarcina #%d', + 'New task #%d: %s' => 'Sarcină nouă #%d: %s', + 'Task updated #%d' => 'Sarcina #%d a fost actualizată', + 'Task #%d closed' => 'Sarcina #%d a fost închisă', + 'Task #%d opened' => 'Sarcina #%d a fost deschisă', + 'Column changed for task #%d' => 'Coloană schimbată pentru sarcina #%d', + 'New position for task #%d' => 'Poziție nouă pentru sarcina #%d', + 'Swimlane changed for task #%d' => 'Culoarul schimbat pentru sarcina #%d', + 'Assignee changed on task #%d' => 'Persoana desemnată a fost schimbată în sarcina #%d', + '%d overdue tasks' => '%d sarcini întârziate', + 'Task #%d is overdue' => 'Sarcina #%d întârzie', + 'No notification.' => 'Fără notificări.', + 'Mark all as read' => 'Marchează toate ca citite', + 'Mark as read' => 'Marchează citit', + 'Total number of tasks in this column across all swimlanes' => 'Număr total de sarcini în această coloană peste toate culoarele', + 'Collapse swimlane' => 'Restrânge culoarul', + 'Expand swimlane' => 'Extinde culoarul', + 'Add a new filter' => 'Adaugă un filtru nou', + 'Share with all project members' => 'Partajează cu toți membrii proiectului', + 'Shared' => 'Partajat', + 'Owner' => 'Proprietar', + 'Unread notifications' => 'Notificări necitite', + 'Notification methods:' => 'Metode de notificare:', + 'Unable to read your file' => 'Nu am putut citi fișierul', + '%d task(s) have been imported successfully.' => 'Sarcini importate cu succes: %d.', + 'Nothing have been imported!' => 'Nu s-a importat nimic!', + 'Import users from CSV file' => 'Importă utilizatori dintr-un fișier CSV', + '%d user(s) have been imported successfully.' => 'Utilizatori importați cu succes: %d.', + 'Comma' => 'Virgulă', + 'Semi-colon' => 'Punct și virgulă', + 'Tab' => 'Tab', + 'Vertical bar' => 'Bară verticală', + 'Double Quote' => 'Ghilimele duble', + 'Single Quote' => 'Ghilimele simple', + '%s attached a file to the task #%d' => '%s a atașat un fișier sarcinii #%d', + 'There is no column or swimlane activated in your project!' => 'Nu există vreo coloană sau culoar activ în proiectul tău!', + 'Append filter (instead of replacement)' => 'Adaugă filtru (în loc de înlocuire)', + 'Append/Replace' => 'Adaugă/Înlocuiește', + 'Append' => 'Adaugă', + 'Replace' => 'Înlocuiește', + 'Import' => 'Import', + 'Change sorting' => 'Schimbă ordonarea', + 'Tasks Importation' => 'Import de sarcini', + 'Delimiter' => 'Delimitare', + 'Enclosure' => 'Caractere de încadrare', + 'CSV File' => 'Fișier CSV', + 'Instructions' => 'Instrucțiuni', + 'Your file must use the predefined CSV format' => 'Trebuie să folosești formatarea CSV predefinită', + 'Your file must be encoded in UTF-8' => 'Fișierul trebuie să fie codificat în UTF-8', + 'The first row must be the header' => 'Primul rând trebuie să fie antetul', + 'Duplicates are not verified for you' => 'Nu este verificată existența duplicatelor', + 'The due date must use the ISO format: YYYY-MM-DD' => 'Data scadentă trebuie să folosească formatarea ISO : AAAA-LL-ZZ', + 'Download CSV template' => 'Descarcă modelul CSV', + 'No external integration registered.' => 'Nu a fost înregistrată o integrare externă.', + 'Duplicates are not imported' => 'Duplicatele nu sunt importate', + 'Usernames must be lowercase and unique' => 'Numele de utilizator trebuie să aibă caractere minuscule și să fie unice', + 'Passwords will be encrypted if present' => 'Parolele vor fi criptate dacă există', + '%s attached a new file to the task %s' => '%s a atașat un fișier nou la sarcina %s', + 'Link type' => 'Tip de legătură', + 'Assign automatically a category based on a link' => 'Desemnează categoria automat în funcție de legătură', + 'BAM - Konvertible Mark' => 'BAM - Marcă bosniană convertibilă', + 'Assignee Username' => 'Utilizatorul desemnat', + 'Assignee Name' => 'Numele desemnatului', + 'Groups' => 'Groupuri', + 'Members of %s' => 'Membri al %s', + 'New group' => 'Grup nou', + 'Group created successfully.' => 'Grupul a fost creat.', + 'Unable to create your group.' => 'Nu am putut crea grupul.', + 'Edit group' => 'Modifică grup', + 'Group updated successfully.' => 'Grupul a fost actualizat.', + 'Unable to update your group.' => 'Nu am putut actualiza grupul.', + 'Add group member to "%s"' => 'Adaugă membru de grup în "%s"', + 'Group member added successfully.' => 'Membru de grup adăugat.', + 'Unable to add group member.' => 'Nu am putut adăuga membrul de grup.', + 'Remove user from group "%s"' => 'Șterge utilizatorul din grupul "%s"', + 'User removed successfully from this group.' => 'Utilizatorul a fost șters din grup.', + 'Unable to remove this user from the group.' => 'Nu am putut șterge utilizatorul din grup.', + 'Remove group' => 'Șterge grupul', + 'Group removed successfully.' => 'Grupul a fost șters.', + 'Unable to remove this group.' => 'Nu am putut șterge grupul.', + 'Project Permissions' => 'Permisiunile proiectului', + 'Manager' => 'Gestionar', + 'Project Manager' => 'Șef de proiect', + 'Project Member' => 'Membru de proiect', + 'Project Viewer' => 'Vizualizator de proiect', + 'Your account is locked for %d minutes' => 'Contul tău este blocat %d minute', + 'Invalid captcha' => 'Captcha invalid', + 'The name must be unique' => 'Numele trebuie să fie unic', + 'View all groups' => 'Vezi toate grupurile', + 'There is no user available.' => 'Nu există utilizator disponibil', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'Vrei să ștergi utilizatorul "%s" din grupul "%s" ?', + 'There is no group.' => 'Nu există grup.', + 'Add group member' => 'Adaugă membru în grup', + 'Do you really want to remove this group: "%s"?' => 'Vrei să ștergi acest grup: "%s" ?', + 'There is no user in this group.' => 'Nu există utilizatori în acest grup', + 'Permissions' => 'Permisiuni', + 'Allowed Users' => 'Utilizatori autorizați', + 'No user have been allowed specifically.' => 'Nu a fost autorizat vreun utilizator.', + 'Role' => 'Rol', + 'Enter user name...' => 'Introdu numele de utilizator…', + 'Allowed Groups' => 'Grupuri autorizate', + 'No group have been allowed specifically.' => 'Nu a fost autorizat vreun grup.', + 'Group' => 'Grup', + 'Group Name' => 'Nume grup', + 'Enter group name...' => 'Introdu numele de grup…', + 'Role:' => 'Rol:', + 'Project members' => 'Membri de proiect', + '%s mentioned you in the task #%d' => '%s te-a menționat în sarcina #%d', + '%s mentioned you in a comment on the task #%d' => '%s te-a menționat într-un comentariu în sarcina #%d', + 'You were mentioned in the task #%d' => 'Ai fost menționat în sarcina #%d', + 'You were mentioned in a comment on the task #%d' => 'Ai fost menționat într-un comentariu în sarcina #%d', + 'Estimated hours: ' => 'Ore estimate: ', + 'Actual hours: ' => 'Ore actuale: ', + 'Hours Spent' => 'Ore petrecute', + 'Hours Estimated' => 'Ore estimate', + 'Estimated Time' => 'Timp estimat', + 'Actual Time' => 'Timp actual', + 'Estimated vs actual time' => 'Timp estimat vs actual', + 'RUB - Russian Ruble' => 'RUB - Rublă rusească', + 'Assign the task to the person who does the action when the column is changed' => 'Atribuie sarcina persoanei care acționează când este schimbată coloana', + 'Close a task in a specific column' => 'Închide o sarcină într-o anumită coloană', + 'Time-based One-time Password Algorithm' => 'Parolă de unică folosință bazată pe timp', + 'Two-Factor Provider: ' => 'Furnizor autentificare în doi factori: ', + 'Disable two-factor authentication' => 'Dezactivează autentificarea în doi factori', + 'Enable two-factor authentication' => 'Activează autentificarea în doi factori', + 'There is no integration registered at the moment.' => 'Nu este vreo integrare înregistrată momentan.', + 'Password Reset for Kanboard' => 'Resetare parolă pentru Kanboard', + 'Forgot password?' => 'Parolă uitată?', + 'Enable "Forget Password"' => 'Activează "Parolă Uitată"', + 'Password Reset' => 'Resetare de parolă', + 'New password' => 'Parolă nouă', + 'Change Password' => 'Schimbă parola', + 'To reset your password click on this link:' => 'Pentru a reseta parola apasă pe acest link:', + 'Last Password Reset' => 'Ultima resetare de parolă', + 'The password has never been reinitialized.' => 'Parola nu a fost resetată vreodată.', + 'Creation' => 'Creare', + 'Expiration' => 'Expirare', + 'Password reset history' => 'Istoricul resetărilor de parolă', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Toate sarcinile coloanei "%s" si a culoarului "%s" au fost închise.', + 'Do you really want to close all tasks of this column?' => 'Vrei să închizi toate sarcinile acestei coloane?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d sarcini în coloana "%s" si culoarul "%s" vor fi închise.', + 'Close all tasks of this column' => 'Închide toate sarcinile acestei coloane', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Nici o extensie nu a înregistrat o metodă de notificare a proiectelor. Mai poți însă configura notificări individuale în profilul tău de utilizator.', + 'My dashboard' => 'Bordul meu', + 'My profile' => 'Profilul meu', + 'Project owner: ' => 'Responsabil de proiect: ', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'Identificatorul de proiect este opțional și trebuie să fie alfanumeric, exemplu: PROIECTULMEU.', + 'Project owner' => 'Responsabil de proiect', + 'Private projects do not have users and groups management.' => 'Proiectele private nu au utilizatori și gestionare de grupuri.', + 'There is no project member.' => 'Nu există membri de proiect.', + 'Priority' => 'Prioritate', + 'Task priority' => 'Priorități de sarcini', + 'General' => 'General', + 'Dates' => 'Date', + 'Default priority' => 'Prioritate implicită', + 'Lowest priority' => 'Prioritate mică', + 'Highest priority' => 'Prioritate maximă', + 'Close a task when there is no activity' => 'Închide o sarcină când nu are activitate', + 'Duration in days' => 'Durată în zile', + 'Send email when there is no activity on a task' => 'Trimite e-mail când o sarcină nu are activitate', + 'Unable to fetch link information.' => 'Nu am putut aduce informația legăturii.', + 'Daily background job for tasks' => 'Funcția zilnică de fundal pentru sarcini', + 'Auto' => 'Auto', + 'Related' => 'Asociat', + 'Attachment' => 'Atașament', + 'Title not found' => 'Titlul nu a fost găsit', + 'Web Link' => 'Link web', + 'External links' => 'Legături externe', + 'Add external link' => 'Adaugă legătură externă', + 'Type' => 'Tip', + 'Dependency' => 'Dependență', + 'Add internal link' => 'Adaugă legătură internă', + 'Add a new external link' => 'Adaugă o legătură externă nouă', + 'Edit external link' => 'Modifică legătura externă', + 'External link' => 'Legătură externă', + 'Copy and paste your link here...' => 'Lipește link-ul tău aici…', + 'URL' => 'URL', + 'Internal links' => 'Legături interne', + 'Assign to me' => 'Atribuie mie', + 'Me' => 'Eu', + 'Do not duplicate anything' => 'Nu duplica nimic', + 'Projects management' => 'Gestionează proiecte', + 'Users management' => 'Gestionează utilizatori', + 'Groups management' => 'Gestionează grupuri', + 'Create from another project' => 'Creează din alt proiect', + 'open' => 'deschis', + 'closed' => 'închis', + 'Priority:' => 'Prioritate:', + 'Reference:' => 'Referință:', + 'Complexity:' => 'Complexitate:', + 'Swimlane:' => 'Culoar:', + 'Column:' => 'Coloană:', + 'Position:' => 'Poziție:', + 'Creator:' => 'Creator:', + 'Time estimated:' => 'Timp estimat:', + '%s hours' => '%s ore', + 'Time spent:' => 'Timp petrecut:', + 'Created:' => 'Creat de:', + 'Modified:' => 'Modificat:', + 'Completed:' => 'Finalizat:', + 'Started:' => 'Pornit:', + 'Moved:' => 'Mutat: ', + 'Task #%d' => 'Sarcina #%d', + 'Time format' => 'Format oră', + 'Start date: ' => 'Data pornirii: ', + 'End date: ' => 'Data finalizării: ', + 'New due date: ' => 'Dată scadentă nouă: ', + 'Start date changed: ' => 'Data pornirii modificată: ', + 'Disable private projects' => 'Dezactivează proiectele private', + 'Do you really want to remove this custom filter: "%s"?' => 'Vrei să ștergi filtrul personalizat: "%s" ?', + 'Remove a custom filter' => 'Șterge un filtru personalizat', + 'User activated successfully.' => 'Utilizatorul a fost activat.', + 'Unable to enable this user.' => 'Nu am putut activa utilizatorul.', + 'User disabled successfully.' => 'Utilizatorul a fost dezactivat.', + 'Unable to disable this user.' => 'Nu am putut dezactiva utilizatorul.', + 'All files have been uploaded successfully.' => 'Toate fișierele au fost încărcate.', + 'The maximum allowed file size is %sB.' => 'Dimensiunea maximă a fișierului este %sB.', + 'Drag and drop your files here' => 'Trage fișierele tale aici', + 'choose files' => 'alege fișiere', + 'View profile' => 'Vezi profilul', + 'Two Factor' => 'Doi Factori', + 'Disable user' => 'Dezactivează utilizator', + 'Do you really want to disable this user: "%s"?' => 'Vrei să dezactivezi utilizatorul: "%s" ?', + 'Enable user' => 'Activează utilizator', + 'Do you really want to enable this user: "%s"?' => 'Vrei să activezi utilizatorul: "%s" ?', + 'Download' => 'Descarcă', + 'Uploaded: %s' => 'Încărcat: %s', + 'Size: %s' => 'Dimensiune: %s', + 'Uploaded by %s' => 'Încărcat de %s', + 'Filename' => 'Nume fișier', + 'Size' => 'Dimensiune', + 'Column created successfully.' => 'Coloana a fost creată.', + 'Another column with the same name exists in the project' => 'Există o coloană cu același nume în proiect', + 'Default filters' => 'Filtre implicite', + 'Your board doesn\'t have any columns!' => 'Bordul tău nu are coloane!', + 'Change column position' => 'Schimbă poziția coloanei', + 'Switch to the project overview' => 'Treci la vederea de ansamblu a proiectului', + 'User filters' => 'Filtre utilizatori', + 'Category filters' => 'Filtre categorii', + 'Upload a file' => 'Încarcă un fișier', + 'View file' => 'Vezi fișier', + 'Last activity' => 'Ultima activitate', + 'Change subtask position' => 'Schimbă poziția sub-sarcinii', + 'This value must be greater than %d' => 'Valoarea aceasta trebuie să fie mai mare decât %d', + 'Another swimlane with the same name exists in the project' => 'Există un culoar cu același nume în proiect', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Exemplu : http://exemplu.kanboard.net/ (utilizat în generarea URL-urilor absolute)', + 'Actions duplicated successfully.' => 'Acțiuni duplicate cu succes.', + 'Unable to duplicate actions.' => 'Nu am putut duplica acțiunile.', + 'Add a new action' => 'Adaugă o nouă acțiune', + 'Import from another project' => 'Importă din alt proiect', + 'There is no action at the moment.' => 'Nu există vreo acțiune momentan.', + 'Import actions from another project' => 'Importă acșiuni din alt proiect', + 'There is no available project.' => 'Nu există un proiect disponibil.', + 'Local File' => 'Fișier local', + 'Configuration' => 'Configurație', + 'PHP version:' => 'Versiune de PHP:', + 'PHP SAPI:' => 'PHP SAPI:', + 'OS version:' => 'Versiune sistem de operare:', + 'Database version:' => 'Versiune bază de date:', + 'Browser:' => 'Browser:', + 'Task view' => 'Detaliere sarcină', + 'Edit task' => 'Modifică sarcina', + 'Edit description' => 'Modifică descrierea', + 'New internal link' => 'Legătură internă nouă', + 'Display list of keyboard shortcuts' => 'Afișează lista de scurtături pe tastatură', + 'Menu' => 'Meniu', + 'Set start date' => 'Definește data pornirii', + 'Avatar' => 'Avatar', + 'Upload my avatar image' => 'Încarcă o imagine de avatar', + 'Remove my image' => 'Șterge imaginea mea', + 'The OAuth2 state parameter is invalid' => 'Parametrul "Stare" din OAuth2 este invalid', + 'User not found.' => 'Utilizatorul nu a fost găsit.', + 'Search in activity stream' => 'Caută în fluxul de activități', + 'My activities' => 'Activitățile mele', + 'Activity until yesterday' => 'Activitate până ieri', + 'Activity until today' => 'Activitate până azi', + 'Search by creator: ' => 'Caută după creator: ', + 'Search by creation date: ' => 'Caută după data creării: ', + 'Search by task status: ' => 'Caută după starea sarcinii: ', + 'Search by task title: ' => 'Caută după titlul sarcinii: ', + 'Activity stream search' => 'Căutare în fluxul de activități', + 'Projects where "%s" is manager' => 'Proiecte unde "%s" este gestionar', + 'Projects where "%s" is member' => 'Proiecte unde "%s" este membru', + 'Open tasks assigned to "%s"' => 'Sarcini deschise atribuite lui "%s"', + 'Closed tasks assigned to "%s"' => 'Sarcini închise atribuite lui "%s"', + 'Assign automatically a color based on a priority' => 'Atribuie în mod automat o culoare în funcție de prioritate', + 'Overdue tasks for the project(s) "%s"' => 'Sarcini întârziate pentru proiect "%s"', + 'Upload files' => 'Încarcă fișiere', + 'Installed Plugins' => 'Extensii instalate', + 'Plugin Directory' => 'Director extensii', + 'Plugin installed successfully.' => 'Extensie instalată cu succes.', + 'Plugin updated successfully.' => 'Extensie actualizată cu succes.', + 'Plugin removed successfully.' => 'Extensie dezinstalată cu succes.', + 'Subtask converted to task successfully.' => 'Sub-sarcina a fost transformată în sarcină.', + 'Unable to convert the subtask.' => 'Nu am putut transforma sub-sarcina.', + 'Unable to extract plugin archive.' => 'Nu am putut extrage arhiva extensiei.', + 'Plugin not found.' => 'Extensia nu a fost găsită.', + 'You don\'t have the permission to remove this plugin.' => 'Nu ai dreptul să ștergi această extensie.', + 'Unable to download plugin archive.' => 'Nu am putut descărca arhiva extensiei.', + 'Unable to write temporary file for plugin.' => 'Nu am putut scrie fișierul temporar pentru extensie.', + 'Unable to open plugin archive.' => 'Nu am putut deschide arhiva extensiei.', + 'There is no file in the plugin archive.' => 'Nu există fișiere în arhiva extensiei.', + 'Create tasks in bulk' => 'Creează sarcini în vrac', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Instanța ta de Kanboard nu a fost configurată pentru a instala extensii din interfața de utilizator.', + 'There is no plugin available.' => 'Nu există extensii disponibile.', + 'Install' => 'Instalează', + 'Update' => 'Actualizează', + 'Up to date' => 'La zi', + 'Not available' => 'Indisponibil', + 'Remove plugin' => 'Șterge extensia', + 'Do you really want to remove this plugin: "%s"?' => 'Vrei să ștergi această extensie: "%s" ?', + 'Uninstall' => 'Dezinstalare', + 'Listing' => 'Listare', + 'Metadata' => 'Metadate', + 'Manage projects' => 'Gestionează proiecte', + 'Convert to task' => 'Transformă în sarcină', + 'Convert sub-task to task' => 'Transformă sub-sarcina în sarcină', + 'Do you really want to convert this sub-task to a task?' => 'Vrei să transformi sub-sarcina în sarcină?', + 'My task title' => 'Titlul pentru sarcină', + 'Enter one task by line.' => 'Introdu o sarcină per linie.', + 'Number of failed login:' => 'Număr de autentificări eșuate:', + 'Account locked until:' => 'Cont blocat până la:', + 'Email settings' => 'Preferințe e-mail', + 'Email sender address' => 'Adresa e-mail expeditor', + 'Email transport' => 'Transport e-mail', + 'Webhook token' => 'Token de securitate webhook', + 'Project tags management' => 'Gestionare etichete de proiect', + 'Tag created successfully.' => 'Etichetă creată.', + 'Unable to create this tag.' => 'Nu am putut crea eticheta.', + 'Tag updated successfully.' => 'Eticheta a fost actualizată.', + 'Unable to update this tag.' => 'Nu am putut actualiza eticheta.', + 'Tag removed successfully.' => 'Eticheta a fost ștearsă.', + 'Unable to remove this tag.' => 'Impossible de supprimer ce libellé.', + 'Global tags management' => 'Gestionare etichete globale', + 'Tags' => 'Etichete', + 'Tags management' => 'Gestionare etichete', + 'Add new tag' => 'Adaugă etichetă nouă', + 'Edit a tag' => 'Modifică o etichetă', + 'Project tags' => 'Etichetele proiectului', + 'There is no specific tag for this project at the moment.' => 'Proiectul nu are vreo etichetă specifică momentan.', + 'Tag' => 'Etichetă', + 'Remove a tag' => 'Șterge o etichetă', + 'Do you really want to remove this tag: "%s"?' => 'Vrei să ștergi eticheta: "%s" ?', + 'Global tags' => 'Etichete globale', + 'There is no global tag at the moment.' => 'Nu există etichete globale momentan.', + 'This field cannot be empty' => 'Acest câmp nu poate fi gol', + 'Close a task when there is no activity in an specific column' => 'Închide o sarcină când nu există activitate într-o anumită coloană', + '%s removed a subtask for the task #%d' => '%s a șters o sub-sarcină din sarcina#%d', + '%s removed a comment on the task #%d' => '%s a șters un comentariu din sarcina #%d', + 'Comment removed on task #%d' => 'Comentariu șters în sarcina #%d', + 'Subtask removed on task #%d' => 'Sub-sarcină ștearsă din sarcina #%d', + 'Hide tasks in this column in the dashboard' => 'Ascunde sarcinile din această coloană în bord', + '%s removed a comment on the task %s' => '%s a șters un comentariu din sarcina %s', + '%s removed a subtask for the task %s' => '%s a șters o sub-sarcină din sarcina %s', + 'Comment removed' => 'Comentariu șters', + 'Subtask removed' => 'Sub-sarcină ștearsă', + '%s set a new internal link for the task #%d' => '%s a definit o legătură internă nouă pentru sarcina #%d', + '%s removed an internal link for the task #%d' => '%s a șters o legătură internă pentru sarcina #%d', + 'A new internal link for the task #%d have been defined' => 'O nouă legătură internă a fost definită pentru sarcina #%d', + 'Internal link removed for the task #%d' => 'Legătură internă ștearsă pentru sarcina #%d', + '%s set a new internal link for the task %s' => '%s a definit o nouă legătură internă pentru sarcina %s', + '%s removed an internal link for the task %s' => '%s a șters o legătură internă pentru sarcina %s', + 'Automatically set the due date on task creation' => 'Definește automat data scadentă la crearea sarcinii', + 'Move the task to another column when closed' => 'Mută sarcina în altă coloană când este închisă', + 'Move the task to another column when not moved during a given period' => 'Mută sarcina în altă coloană dacă nu a fost mutată într-o anumită perioadă', + 'Dashboard for %s' => 'Bordul pentru %s', + 'Tasks overview for %s' => 'Prezentare generală sarcini pentru %s', + 'Subtasks overview for %s' => 'Prezentare generală sub-sarcini pentru %s', + 'Projects overview for %s' => 'Prezentare generală proiecte pentru %s', + 'Activity stream for %s' => 'Flux de activități pentru %s', + 'Assign a color when the task is moved to a specific swimlane' => 'Atribuie o culoare când sarcina este mutată într-un anumit culoar', + 'Assign a priority when the task is moved to a specific swimlane' => 'Atribuie o prioritate când sarcina este mutată într-un anumit culoar', + 'User unlocked successfully.' => 'Utilizatorul a fost deblocat.', + 'Unable to unlock the user.' => 'Nu am putut debloca utilizatorul.', + 'Move a task to another swimlane' => 'Mută sarcina în alt culoar', + 'Creator Name' => 'Nume creator', + 'Time spent and estimated' => 'Timp petrecut si estimat', + 'Move position' => 'Mută poziția', + 'Move task to another position on the board' => 'Mută sarcina pe altă poziție pe bord', + 'Insert before this task' => 'Inserează înaintea sarcinii', + 'Insert after this task' => 'Inserează după sarcină', + 'Unlock this user' => 'Deblochează utilizatorul', + 'Custom Project Roles' => 'Roluri personalizate în proiect', + 'Add a new custom role' => 'Adaugă rol personalizat nou', + 'Restrictions for the role "%s"' => 'Restricții pentru rolul "%s"', + 'Add a new project restriction' => 'Adaugă o restricție nouă de proiect', + 'Add a new drag and drop restriction' => 'Adaugă o restricție nouă de mutare', + 'Add a new column restriction' => 'Adaugă o restricție nouă de coloană', + 'Edit this role' => 'Modifică rolul', + 'Remove this role' => 'Șterge rolul', + 'There is no restriction for this role.' => 'Nu există restricții pe acest rol.', + 'Only moving task between those columns is permitted' => 'Sarcina poate fi mutată numai între aceste coloane', + 'Close a task in a specific column when not moved during a given period' => 'Închide o sarcină într-o anumită coloană când nu a fost mutată într-o anumită perioadă', + 'Edit columns' => 'Modifică coloane', + 'The column restriction has been created successfully.' => 'Restricția pe coloane a fost creată.', + 'Unable to create this column restriction.' => 'Nu am putut crea restricția pe coloană.', + 'Column restriction removed successfully.' => 'Restricția pe coloană a fost ștearsă.', + 'Unable to remove this restriction.' => 'Nu am putut șterge restricția.', + 'Your custom project role has been created successfully.' => 'Rolul personalizat a fost creat.', + 'Unable to create custom project role.' => 'Nu am putut crea rolul personalizat.', + 'Your custom project role has been updated successfully.' => 'Rolul personalizat a fost actualizat.', + 'Unable to update custom project role.' => 'Nu am putut actualiza rolul personalizat.', + 'Custom project role removed successfully.' => 'Rolul personalizat a fost șters.', + 'Unable to remove this project role.' => 'Nu am putut șterge rolul.', + 'The project restriction has been created successfully.' => 'Restricția pe proiect a fost creată.', + 'Unable to create this project restriction.' => 'Nu am putut crea restricția pe proiect.', + 'Project restriction removed successfully.' => 'Restricția pe proiect a fost ștearsă.', + 'You cannot create tasks in this column.' => 'Nu poți crea sarcini în această coloană.', + 'Task creation is permitted for this column' => 'Crearea sarcinilor este permisă în această coloană', + 'Closing or opening a task is permitted for this column' => 'Închiderea sau deschiderea sarcinilor este permisă în această coloană', + 'Task creation is blocked for this column' => 'Crearea sarcinilor este blocată în această coloană', + 'Closing or opening a task is blocked for this column' => 'Închiderea sau deschiderea sarcinilor este blocată în această coloană', + 'Task creation is not permitted' => 'Crearea sarcinilor nu este permisă', + 'Closing or opening a task is not permitted' => 'Închiderea sau deschiderea sarcinilor nu este permisă', + 'New drag and drop restriction for the role "%s"' => 'Restricție nouă de mutare pentru rolul "%s"', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Persoanele cu acest rol vor putea muta sarcini numai între coloana sursă și destinație.', + 'Remove a column restriction' => 'Șterge o restricție pe coloană', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Vrei să ștergi această restricție pe coloană: "%s" la "%s" ?', + 'New column restriction for the role "%s"' => 'Restricție pe coloană nouă pentru rolul "%s"', + 'Rule' => 'Reguli', + 'Do you really want to remove this column restriction?' => 'Vrei să ștergi această restricție pe coloană?', + 'Custom roles' => 'Roluri personalizate', + 'New custom project role' => 'Nou rol personalizat pe proiect', + 'Edit custom project role' => 'Modifică rol personalizat pe proiect', + 'Remove a custom role' => 'Șterge rol personalizat pe proiect', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => 'Vrei să ștergi acest rol personalizat "%s" ? Toți membrii cu acest rol vor deveni membri de proiect.', + 'There is no custom role for this project.' => 'Nu există roluri personalizate în acest proiect.', + 'New project restriction for the role "%s"' => 'Restricție de proiect nouă pentru rolul "%s"', + 'Restriction' => 'Restricție', + 'Remove a project restriction' => 'Șterge o restricție de proiect', + 'Do you really want to remove this project restriction: "%s"?' => 'Vrei să ștergi această restricție de proiect: "%s" ?', + 'Duplicate to multiple projects' => 'Duplichează în mai multe proiecte', + 'This field is required' => 'Câmpul este obligatoriu', + 'Moving a task is not permitted' => 'Nu este permisă mutarea sarcinii', + 'This value must be in the range %d to %d' => 'Valoarea trebuie să se afle între %d și %d', + 'You are not allowed to move this task.' => 'Nu ai permisiunea să muți această sarcină.', + 'API User Access' => 'Acces utilizator in API', + 'Preview' => 'Previzualizare', + 'Write' => 'Scrie', + 'Write your text in Markdown' => 'Scrie-ți textul în Markdown', + 'No personal API access token registered.' => 'Nu este înregistrat vreun token personal de acces API.', + 'Your personal API access token is "%s"' => 'Token-ul tău personal de acces API este "%s"', + 'Remove your token' => 'Șterge token-ul tău', + 'Generate a new token' => 'Generează un nou token', + 'Showing %d-%d of %d' => 'Afișez %d - %d din %d', + 'Outgoing Emails' => 'E-mail-uri trimise', + 'Add or change currency rate' => 'Adaugă sau modifică rată de schimb', + 'Reference currency: %s' => 'Moneda de referință: %s', + 'Add custom filters' => 'Adaugă filtre personalizate', + 'Export' => 'Export', + 'Add link label' => 'Adaugă etichetă de legătură', + 'Incompatible Plugins' => 'Extensii incompatibile', + 'Compatibility' => 'Compatibilitate', + 'Permissions and ownership' => 'Permisii si proprietate', + 'Priorities' => 'Priorități', + 'Close this window' => 'Închide fereastra', + 'Unable to upload this file.' => 'Nu pot încărca fișierul acesta.', + 'Import tasks' => 'Importă sarcini', + 'Choose a project' => 'Alege un proiect', + 'Profile' => 'Profil', + 'Application role' => 'Rolul aplicației', + '%d invitations were sent.' => '%d invitații au fost trimise.', + '%d invitation was sent.' => '%d invitație a fost trimisă.', + 'Unable to create this user.' => 'Nu am putut crea acest utilizator.', + 'Kanboard Invitation' => 'Invitație în Kanboard', + 'Visible on dashboard' => 'Vizibil pe bord', + 'Created at:' => 'Creat la:', + 'Updated at:' => 'Actualizat la:', + 'There is no custom filter.' => 'Nu există filtru personalizat.', + 'New User' => 'Utilizator nou', + 'Authentication' => 'Autentificare', + 'If checked, this user will use a third-party system for authentication.' => 'Dacă este bifat, acest utilizator va folosi un sistem terț pentru autentificare.', + 'The password is necessary only for local users.' => 'Parola este obligatorie pentru membrii locali.', + 'You have been invited to register on Kanboard.' => 'Ai fost invitat să te înregistrezi pe Kanboard.', + 'Click here to join your team' => 'Apasă aici pentru a te alătura echipei tale', + 'Invite people' => 'Invită persoane', + 'Emails' => 'E-mail-uri', + 'Enter one email address by line.' => 'Introdu o adresă de e-mail per linie.', + 'Add these people to this project' => 'Adaugă aceste persoane în proiect', + 'Add this person to this project' => 'Adaugă această persoană în proiect', + 'Sign-up' => 'Înregistrare', + 'Credentials' => 'Acreditări', + 'New user' => 'Utilizator nou', + 'This username is already taken' => 'Acest nume de utilizator a fost luat deja', + 'A link to reset your password has been sent by email.' => 'Un link pentru resetarea parolei a fost trimis prin e-mail.', + 'Your profile must have a valid email address.' => 'Profilul tău trebuie să aibă o adresă de e-mail validă.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Din păcate nu am putut reseta parola ta. Ai introdus un nume de utilizator valid? Ai o adresă de e-mail în profil?', + 'TRL - Turkish Lira' => 'TRL - Liră turcească', + 'The project email is optional and could be used by several plugins.' => 'E-mail-ul proiectului este opțional si ar putea fi folosit de mai multe extensii.', + 'The project email must be unique across all projects' => 'E-mail-ul proiectului trebuie să fie diferit de toate celelalte proiecte.', + 'The email configuration has been disabled by the administrator.' => 'Configurarea de e-mail-uri a fost dezactivată de administrator.', + 'Close this project' => 'Închide acest proiect', + 'Open this project' => 'Deschide acest proiect', + 'Close a project' => 'Închide un proiect', + 'Do you really want to close this project: "%s"?' => 'Vrei să închizi proiectul: "%s" ?', + 'Reopen a project' => 'Redeschide un proiect', + 'Do you really want to reopen this project: "%s"?' => 'Vrei să redeschizi proiectul: "%s" ?', + 'This project is open' => 'Proiectul este deschis', + 'This project is closed' => 'Proiectul este închis', + 'Unable to upload files, check the permissions of your data folder.' => 'Nu am putut încărca fișierele, verifică permisiunile directorului de date.', + 'Another category with the same name exists in this project' => 'Altă categorie cu același nume există deja în proiect', + 'Comment sent by email successfully.' => 'Comentariul a fost trimis prin e-mail.', + 'Sent by email to [%s](mailto:%s) (%s)' => 'Trimite prin e-mail la [%s](mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'Nu pot citi fișierul încărcat.', + 'Database uploaded successfully.' => 'Baza de date a fost încărcată cu succes.', + 'Task sent by email successfully.' => 'Sarcina a fost trimisă prin e-mail.', + 'There is no category in this project.' => 'Nu există categorii în acest proiect.', + 'Send by email' => 'Trimis prin e-mail', + 'Create and send a comment by email' => 'Creat și trimis un comentariu prin e-mail', + 'Subject' => 'Subiect', + 'Upload the database' => 'Încarcă baza de date', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Ai putea încărca baza de date Sqlite descărcată anterior (format Gzip).', + 'Database file' => 'Fișierul bazei de date', + 'Upload' => 'Încarcă', + 'Your project must have at least one active swimlane.' => 'Proiectul tău trebuie să aibă măcar un culoar activ.', + 'Project: %s' => 'Proiect: %s', + 'Automatic action not found: "%s"' => 'Acțiunea automatizată nu a fost gasită: "%s"', + '%d projects' => '%d proiecte', + '%d project' => '%d proiect', + 'There is no project.' => 'Nu există proiect.', + 'Sort' => 'Sortare', + 'Project ID' => 'ID-ul proiectului', + 'Project name' => 'Numele proiectului', + 'Public' => 'Public', + 'Private' => 'Privat', + '%d tasks' => '%d sarcini', + '%d task' => '%d sarcină', + 'Task ID' => 'ID-ul sarcinii', + 'Assign automatically a color when due date is expired' => 'Atribuie automat o culoare când data scadentă a expirat', + 'Total score in this column across all swimlanes' => 'Scorul total în această coloană pe toate culoarele', + 'HRK - Kuna' => 'HRK - Kuna croată', + 'ARS - Argentine Peso' => 'ARS - Peso argentinian', + 'COP - Colombian Peso' => 'COP - Peso columbian', + '%d groups' => '%d grupuri', + '%d group' => '%d grup', + 'Group ID' => 'ID-ul grupului', + 'External ID' => 'ID extern', + '%d users' => '%d utilizatori', + '%d user' => '%d utilizator', + 'Hide subtasks' => 'Ascunde sub-sarcinile', + 'Show subtasks' => 'Arată sub-sarcinile', + 'Authentication Parameters' => 'Parametri de autentificare', + 'API Access' => 'Acces API', + 'No users found.' => 'Nici un utilizator găsit.', + 'User ID' => 'ID utilizator', + 'Notifications are activated' => 'Notificările sunt activate', + 'Notifications are disabled' => 'Notificările sunt dezactivate', + 'User disabled' => 'Utilizator dezactivat', + '%d notifications' => '%d notificări', + '%d notification' => '%d notificare', + 'There is no external integration installed.' => 'Nu este instalată vreo integrare externă.', + 'You are not allowed to update tasks assigned to someone else.' => 'Nu ai voie să actualizezi sarcini atribuite altcuiva.', + 'You are not allowed to change the assignee.' => 'Nu ai voie să schimbi persoana atribuită.', + 'Task suppression is not permitted' => 'Suprimarea sarcinii nu este permisă', + 'Changing assignee is not permitted' => 'Schimbarea persoanei atribuite nu este permisă', + 'Update only assigned tasks is permitted' => 'Numai actualizarea sarcinilor atribuite este permisă', + 'Only for tasks assigned to the current user' => 'Numai pentru sarcini atribuite utilizatorului curent', + 'My projects' => 'Proiectele mele', + 'Your are not member of any project.' => 'Nu faci parte din vreun proiect', + 'My subtasks' => 'Sub-sarcinile mele', + '%d subtasks' => '%d sub-sarcini', + '%d subtask' => '%d sub-sarcină', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Este permisă mutarea sarcinii între acele coloane pentru sarcinile atribuite utilizatorului curent', + '[DUPLICATE]' => '[DUPLICAT]', + 'DKK - Danish Krona' => 'DKK - Coroană daneză', + 'Remove user from group' => 'Șterge utilizatorul din grup', + 'Assign the task to its creator' => 'Atribuie sarcina creatorului ei', + 'This task was sent by email to "%s" with subject "%s".' => 'Această sarcină a fost trimisă prin e-mail lui "%s" cu subiectul "%s".', + 'Predefined Email Subjects' => 'Subiecte predefinite in e-mail', + 'Write one subject by line.' => 'Scrie un singur subiect per linie.', + 'Create another link' => 'Creează altă legătură', + 'BRL - Brazilian Real' => 'BRL - Real brazilian', + 'Add a new Kanboard task' => 'Adaugă o nouă sarcină Kanboard', + 'Subtask not started' => 'Sub-sarcina nu este pornită', + 'Subtask currently in progress' => 'Sub-sarcină în derulare', + 'Subtask completed' => 'Sub-sarcină finalizată', + 'Subtask added successfully.' => 'Sub-sarcină adăugată.', + '%d subtasks added successfully.' => '%d sub-sarcini au fost adăugate.', + 'Enter one subtask by line.' => 'Introdu o sub-sarcină pe linie.', + 'Predefined Contents' => 'Conținut predefinit', + 'Predefined contents' => 'Conținut predefinit', + 'Predefined Task Description' => 'Descrierea predefinită a sarcinii', + 'Do you really want to remove this template? "%s"' => 'Vrei să ștergi acest model? "%s"', + 'Add predefined task description' => 'Adaugă descriere predefinită a sarcinii', + 'Predefined Task Descriptions' => 'Descrieri predefinite ale sarcinilor', + 'Template created successfully.' => 'Model creat.', + 'Unable to create this template.' => 'Nu am putut crea modelul.', + 'Template updated successfully.' => 'Model actualizat.', + 'Unable to update this template.' => 'Nu am putut actualiza modelul.', + 'Template removed successfully.' => 'Model șters.', + 'Unable to remove this template.' => 'Nu am putut șterge modelul.', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', +); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 8217a086..eb991f38 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Администратор', 'Sign in' => 'Войти', 'Users' => 'Пользователи', - 'No user' => 'Нет пользователя', 'Forbidden' => 'Запрещено', 'Access Forbidden' => 'Доступ запрещён', 'Edit user' => 'Изменить пользователя', @@ -135,7 +134,7 @@ return array( 'User removed successfully.' => 'Пользователь удалён.', 'Unable to remove this user.' => 'Не удалось удалить пользователя.', 'Board updated successfully.' => 'Доска успешно обновлена.', - 'Ready' => 'Готовые', + 'Ready' => 'Согласованные', 'Backlog' => 'Ожидающие', 'Work in progress' => 'В процессе', 'Done' => 'Выполнено', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Подзадача обновлена.', 'Unable to update your sub-task.' => 'Не удалось обновить подзадачу.', 'Unable to create your sub-task.' => 'Не удалось создать подзадачу.', - 'Sub-task added successfully.' => 'Подзадача добавлена.', 'Maximum size: ' => 'Максимальный размер: ', 'Display another project' => 'Показать другой проект', 'Created by %s' => 'Создано %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Текущая активность', 'Dashboard' => 'Панель управления', 'Confirmation' => 'Подтверждение пароля', - 'Allow everybody to access to this project' => 'Разрешить любому', - 'Everybody have access to this project.' => 'Любой может получить доступ к этому проекту.', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Создать комментарий из внешнего источника', - 'Project management' => 'Управление проектом', - 'My projects' => 'Мои проекты', + 'Project management' => 'Управление проектами', 'Columns' => 'Колонки', 'Task' => 'Задача', - 'Your are not member of any project.' => 'Вы не состоите ни в одном проекте.', 'Percentage' => 'Процент', 'Number of tasks' => 'Количество задач', 'Task distribution' => 'Распределение задач', 'Analytics' => 'Аналитика', 'Subtask' => 'Подзадача', - 'My subtasks' => 'Мои подзадачи', 'User repartition' => 'Перераспределение пользователей', 'Clone this project' => 'Клонировать проект', 'Column removed successfully.' => 'Колонка успешно удалена.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Язык:', 'Timezone:' => 'Временная зона:', 'All columns' => 'Все колонки', - 'Calendar' => 'Календарь', 'Next' => 'Следующий', '#%d' => '#%d', 'All swimlanes' => 'Все дорожки', @@ -556,8 +548,7 @@ return array( 'The currency rate have been added successfully.' => 'Курс валюты был успешно добавлен.', 'Unable to add this currency rate.' => 'Невозможно добавить этот курс валюты.', 'Webhook URL' => 'Webhook URL', - '%s removed the assignee of the task %s' => '%s удалить назначенную задачу %s', - 'Enable Gravatar images' => 'Включить Gravatar изображения', + '%s removed the assignee of the task %s' => '%s удалил назначенного на задачу %s', 'Information' => 'Информация', 'Check two factor authentication code' => 'Проверка кода двухфакторной авторизации', 'The two factor authentication code is not valid.' => 'Код двухфакторной авторизации не валиден', @@ -592,33 +583,26 @@ return array( 'Edit recurrence' => 'Редактировать повторы', 'Generate recurrent task' => 'Создать повторяющуюся задачу', 'Trigger to generate recurrent task' => 'Триггер для генерации периодической задачи', - 'Factor to calculate new due date' => 'Коэффициент для расчёта новой даты', - 'Timeframe to calculate new due date' => 'Вычисление для расчёта новой даты', - 'Base date to calculate new due date' => 'Базовая дата вычисления новой даты', + 'Factor to calculate new due date' => 'Коэффициент для расчёта новой даты завершения', + 'Timeframe to calculate new due date' => 'Временные рамки для расчёта новой даты завершения', + 'Base date to calculate new due date' => 'Базовая дата вычисления новой даты завершения', 'Action date' => 'Дата действия', - 'Base date to calculate new due date: ' => 'Базовая дата вычисления новой даты: ', + 'Base date to calculate new due date: ' => 'Базовая дата вычисления новой даты завершения: ', 'This task has created this child task: ' => 'Эта задача создала эту дочернюю задачу:', 'Day(s)' => 'День(й)', - 'Existing due date' => 'Существующий срок', - 'Factor to calculate new due date: ' => 'Коэффициент для расчёта новой даты: ', + 'Existing due date' => 'Существующая дата завершения', + 'Factor to calculate new due date: ' => 'Коэффициент для расчёта новой даты завершения: ', 'Month(s)' => 'Месяц(а)', 'Recurrence' => 'Повторение', 'This task has been created by: ' => 'Эта задача была создана: ', 'Recurrent task has been generated:' => 'Периодическая задача была сформирована:', - 'Timeframe to calculate new due date: ' => 'Вычисление для расчёта новой даты: ', + 'Timeframe to calculate new due date: ' => 'Временные рамки для расчёта новой даты завершения: ', 'Trigger to generate recurrent task: ' => 'Триггер для генерации периодической задачи: ', 'When task is closed' => 'Когда задача закрывается', 'When task is moved from first column' => 'Когда задача перемещается из первой колонки', 'When task is moved to last column' => 'Когда задача перемещается в последнюю колонку', 'Year(s)' => 'Год(а)', - 'Calendar settings' => 'Настройки календаря', - 'Project calendar view' => 'Вид календаря проекта', 'Project settings' => 'Настройки проекта', - 'Show subtasks based on the time tracking' => 'Показать подзадачи, основанные на отслеживании времени', - 'Show tasks based on the creation date' => 'Показать задачи в зависимости от даты создания', - 'Show tasks based on the start date' => 'Показать задачи в зависимости от даты начала', - 'Subtasks time tracking' => 'Отслеживание времени подзадач', - 'User calendar view' => 'Просмотреть календарь пользователя', 'Automatically update the start date' => 'Автоматическое обновление даты начала', 'iCal feed' => 'iCal данные', 'Preferences' => 'Предпочтения', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Уведомления', '%s moved the task #%d to the first swimlane' => '%s переместил задачу #%d на первую дорожку', 'Swimlane' => 'Дорожки', - 'Gravatar' => 'Граватар', '%s moved the task %s to the first swimlane' => '%s переместил задачу %s на первую дорожку', '%s moved the task %s to the swimlane "%s"' => '%s переместил задачу %s на дорожку "%s"', 'This report contains all subtasks information for the given date range.' => 'Этот отчёт содержит всю информацию подзадач в заданном диапазоне дат.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Остановить таймер', 'Start timer' => 'Запустить таймер', 'My activity stream' => 'Лента моей активности', - 'My calendar' => 'Мой календарь', 'Search tasks' => 'Поиск задачи', 'Reset filters' => 'Сбросить фильтры', 'My tasks due tomorrow' => 'Мои задачи на завтра', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Обзор', 'Board/Calendar/List view' => 'Просмотр Доска/Календарь/Список', 'Switch to the board view' => 'Переключиться в режим доски', - 'Switch to the calendar view' => 'Переключиться в режим календаря', 'Switch to the list view' => 'Переключиться в режим списка', 'Go to the search/filter box' => 'Перейти в поиск/фильтр', 'There is no activity yet.' => 'Активности еще не было', @@ -743,17 +724,10 @@ return array( 'License:' => 'Лицензия:', 'License' => 'Лицензия', 'Enter the text below' => 'Введите текст ниже', - 'Sort by position' => 'Сортировать по позиции', - 'Sort by date' => 'Сортировать по дате', - 'Add task' => 'Добавить задачу', 'Start date:' => 'Дата начала:', 'Due date:' => 'Дата завершения:', - 'There is no start date or due date for this task.' => 'Для этой задачи нет даты начала или завершения.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Изменение или перемещение задачи повлечет изменение даты начала и завершения задачи.', - 'There is no task in your project.' => 'В Вашем проекте задач нет.', - 'Gantt chart' => 'Диаграмма Ганта', - 'People who are project managers' => 'Люди, которые менеджеры проекта', - 'People who are project members' => 'Люди, которые участники проекта', + 'People who are project managers' => 'Люди, которые являются менеджерами проекта', + 'People who are project members' => 'Люди, которые являются участниками проекта', 'NOK - Norwegian Krone' => 'НК - Норвежская крона', 'Show this column' => 'Показать эту колонку', 'Hide this column' => 'Спрятать эту колонку', @@ -763,22 +737,15 @@ return array( 'Members' => 'Участники', 'Shared project' => 'Общие/публичные проекты', 'Project managers' => 'Менеджер проекта', - 'Gantt chart for all projects' => 'Диаграмма Ганта для всех проектов', 'Projects list' => 'Список проектов', - 'Gantt chart for this project' => 'Диаграмма Ганта для этого проекта', - 'Project board' => 'Доска проекта', 'End date:' => 'Дата завершения:', - 'There is no start date or end date for this project.' => 'В проекте не указаны дата начала или завершения.', - 'Projects Gantt chart' => 'Диаграмма Ганта проектов', 'Change task color when using a specific task link' => 'Изменение цвета задач при использовании ссылки на определенные задачи', 'Task link creation or modification' => 'Ссылка на создание или модификацию задачи', 'Milestone' => 'Веха', 'Documentation: %s' => 'Документация: %s', - 'Switch to the Gantt chart view' => 'Переключиться в режим диаграммы Ганта', 'Reset the search/filter box' => 'Сбросить поиск/фильтр', 'Documentation' => 'Документация', 'Table of contents' => 'Содержание', - 'Gantt' => 'Гант', 'Author' => 'Автор', 'Version' => 'Версия', 'Plugins' => 'Плагины', @@ -848,7 +815,7 @@ return array( 'Your file must be encoded in UTF-8' => 'Ваш файл должен иметь кодировку UTF-8', 'The first row must be the header' => 'В первой строке должны быть заголовки столбцов', 'Duplicates are not verified for you' => 'Проверка на дубликаты не осуществляется', - 'The due date must use the ISO format: YYYY-MM-DD' => 'Дата просрочки должна быть в формате ISO: ГГГГ-ММ-ДД', + 'The due date must use the ISO format: YYYY-MM-DD' => 'Дата завершения должна быть в формате ISO: ГГГГ-ММ-ДД', 'Download CSV template' => 'Скачать шаблон CSV-файла', 'No external integration registered.' => 'Нет зарегистрированных внешних интеграций.', 'Duplicates are not imported' => 'Дубликаты не импортируются', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Нет доступных пользователей.', 'Do you really want to remove the user "%s" from the group "%s"?' => 'Вы действительно хотите удалить пользователя "%s" из группы "%s"?', 'There is no group.' => 'Нет созданных групп.', - 'External Id' => 'Внешний Id', 'Add group member' => 'Добавить участника в группу', 'Do you really want to remove this group: "%s"?' => 'Вы действительно хотите удалить группу "%s"?', 'There is no user in this group.' => 'В этой группе нет участников.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Приоритет по-умолчанию', 'Lowest priority' => 'Наименьший приоритет', 'Highest priority' => 'Наивысший приоритет', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Если Вы введете 0 для наименьшего и наивысшего приоритета, этот функционал будет отключен.', 'Close a task when there is no activity' => 'Закрывать задачу, когда нет активности', 'Duration in days' => 'Длительность в днях', 'Send email when there is no activity on a task' => 'Отправлять email, когда активность по задаче отсутствует', @@ -1003,9 +968,9 @@ return array( 'Moved:' => 'Перемещена:', 'Task #%d' => 'Задача #%d', 'Time format' => 'Формат времени', - 'Start date: ' => 'Дата начала:', - 'End date: ' => 'Дата окончания:', - 'New due date: ' => 'Новая дата исполнения:', + 'Start date: ' => 'Дата начала: ', + 'End date: ' => 'Дата окончания: ', + 'New due date: ' => 'Новая дата завершения: ', 'Start date changed: ' => 'Дата начала изменена:', 'Disable private projects' => 'Выключить приватные проекты', 'Do you really want to remove this custom filter: "%s"?' => 'Вы точно ходите удалить этот пользовательский фильтр: "%s"?', @@ -1161,7 +1126,7 @@ return array( 'Internal link removed for the task #%d' => 'Внутренняя ссылка удалена для задачи #%d', '%s set a new internal link for the task %s' => '%s добавил внутреннюю ссылку для задачи %s', '%s removed an internal link for the task %s' => '%s удалил внутреннюю ссылку для задачи %s', - 'Automatically set the due date on task creation' => 'Автоматическая установка срока задачи при создании', + 'Automatically set the due date on task creation' => 'Автоматически устанавливать дату завершения задачи при её создании', 'Move the task to another column when closed' => 'Переместить задачу в другую колонку при закрытии', 'Move the task to another column when not moved during a given period' => 'Переместить задачу в другую колонку если она не был перемещен в указанный период', 'Dashboard for %s' => 'Панель управления для %s', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => 'Обзор подзадач для %s', 'Projects overview for %s' => 'Обзор проектов для %s', 'Activity stream for %s' => 'Лента активности для %s', - 'Calendar for %s' => 'Календарь для %s', - 'Notifications for %s' => 'Уведомления для %s', 'Assign a color when the task is moved to a specific swimlane' => 'Назначить цвет, когда задача будет перемещена в указанную дорожку', 'Assign a priority when the task is moved to a specific swimlane' => 'Назначить приоритет, когда задача будет перемещена в указанную дорожку', 'User unlocked successfully.' => 'Пользователь успешно разблокирован.', @@ -1241,7 +1204,6 @@ return array( 'Preview' => 'Предпросмотр', 'Write' => 'Редактирование', 'Write your text in Markdown' => 'Добавьте Ваше описание в формате Markdown', - 'New External Task: %s' => 'Новая внешняя задача: %s', 'No personal API access token registered.' => 'Персональные токены доступа к API не созданы.', 'Your personal API access token is "%s"' => 'Ваш персональный токен доступа к API: "%s"', 'Remove your token' => 'Удалить токен', @@ -1316,7 +1278,6 @@ return array( 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Вы можете импортировать предварительно созданный файл выгрузки базы данных SQLite (формат Gzip).', 'Database file' => 'Файл выгрузки БД', 'Upload' => 'Импорт', - 'Remove this user from group' => 'Удалить этого пользователя из группы', 'Your project must have at least one active swimlane.' => 'Ваш проект должен иметь хотя бы одну активную дорожку.', 'Project: %s' => 'Проект: %s', 'Automatic action not found: "%s"' => 'Автоматическое действие не найдено: "%s"', @@ -1331,7 +1292,78 @@ return array( '%d tasks' => '%d задач', '%d task' => '%d задачу', 'Task ID' => 'ID задачи', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'Assign automatically a color when due date is expired' => 'Автоматически назначать цвет после истечения срока задачи', + 'Total score in this column across all swimlanes' => 'Общая оценка в этой колонке среди всех дорожек', + 'HRK - Kuna' => 'HRK - Хорватская куна', + 'ARS - Argentine Peso' => 'ARS - Аргентинский песо', + 'COP - Colombian Peso' => 'COP - Колумбийский песо', + '%d groups' => '%d групп', + '%d group' => '%d группа', + 'Group ID' => 'ID группы', + 'External ID' => 'Внешний ID', + '%d users' => '%d пользователей', + '%d user' => '%d пользователь', + 'Hide subtasks' => 'Скрыть подзадачи', + 'Show subtasks' => 'Показать подзадачи', + 'Authentication Parameters' => 'Параметры аутентификации', + 'API Access' => 'Доступ к API', + 'No users found.' => 'Пользователи не найдены.', + 'User ID' => 'ID пользователя', + 'Notifications are activated' => 'Уведомления активированы', + 'Notifications are disabled' => 'Уведомления выключены', + 'User disabled' => 'Пользователь выключен', + '%d notifications' => '%d уведомлений', + '%d notification' => '%d уведомление', + 'There is no external integration installed.' => 'Внешние интеграции не установлены.', + 'You are not allowed to update tasks assigned to someone else.' => 'Вы не можете обновлять задачи назначенные другому пользователю.', + 'You are not allowed to change the assignee.' => 'Вы не можете изменить назначенного на эту задачу.', + 'Task suppression is not permitted' => 'Удаление задач не разрешено', + 'Changing assignee is not permitted' => 'Изменение назначенного не разрешено', + 'Update only assigned tasks is permitted' => 'Разрешено обновление только назначенных задач', + 'Only for tasks assigned to the current user' => 'Только для задач назначенных текущему пользователю', + 'My projects' => 'Мои проекты', + 'Your are not member of any project.' => 'Вы не являетесь участником какого-либо проекта.', + 'My subtasks' => 'Мои подзадачи', + '%d subtasks' => '%d подзадач', + '%d subtask' => '%d подзадача', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Текущий пользователь может перемещать назначенные ему задачи только между этими колонками', + '[DUPLICATE]' => '[КОПИЯ]', + 'DKK - Danish Krona' => 'DKK - Датская крона', + 'Remove user from group' => 'Удалить пользователя из группы', + 'Assign the task to its creator' => 'Назначать задачу её создателю', + 'This task was sent by email to "%s" with subject "%s".' => 'Эта задача была отправлена по e-mail на "%s" с темой "%s".', + 'Predefined Email Subjects' => 'Предустановленные темы для e-mail', + 'Write one subject by line.' => 'Записываются по одной теме на строку.', + 'Create another link' => 'Создать другую ссылку', + 'BRL - Brazilian Real' => 'BRL - бразильский реал', + 'Add a new Kanboard task' => 'Добавить новую задачу на Kanboard', + 'Subtask not started' => 'Подзадача не начата', + 'Subtask currently in progress' => 'Подзадача в процессе выполнения', + 'Subtask completed' => 'Подзадача завершена', + 'Subtask added successfully.' => 'Подзадача успешно добавлена.', + '%d subtasks added successfully.' => '%d подзадач(а) успешно добавлено.', + 'Enter one subtask by line.' => 'Записывайте по одной подзадаче на строку.', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index 9c3f51ae..6c288acb 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administrator', 'Sign in' => 'Odjava', 'Users' => 'Korisnik', - 'No user' => 'Ne', 'Forbidden' => 'Zabranjeno', 'Access Forbidden' => 'Zabranjen prostup', 'Edit user' => 'Izmeni korisnika', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Pod-zadatak zaktualizowane pomyślnie.', 'Unable to update your sub-task.' => 'Nie można zaktalizować tego pod-zadania.', 'Unable to create your sub-task.' => 'Nie można utworzyć tego pod-zadania.', - 'Sub-task added successfully.' => 'Pod-zadatak utworzone pomyślnie', 'Maximum size: ' => 'Maksimalna veličina: ', 'Display another project' => 'Prikaži drugi projekat', 'Created by %s' => 'Kreirao %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Spisak aktinosti', 'Dashboard' => 'Panel', 'Confirmation' => 'Potvrda', - 'Allow everybody to access to this project' => 'Dozvoli svima pristup projektu', - 'Everybody have access to this project.' => 'Svima je dozvoljen pristup.', // 'Webhooks' => '', // 'API' => '', // 'Create a comment from an external provider' => '', 'Project management' => 'Uređivanje projekata', - 'My projects' => 'Moji projekti', 'Columns' => 'Kolone', 'Task' => 'Zadaci', - 'Your are not member of any project.' => 'Nisi član ni jednog projekta', 'Percentage' => 'Procenat', 'Number of tasks' => 'Broj zadataka', 'Task distribution' => 'Podela zadataka', 'Analytics' => 'Analiza', 'Subtask' => 'Pod-zadatak', - 'My subtasks' => 'Moji pod-zadaci', 'User repartition' => 'Zaduženja korisnika', 'Clone this project' => 'Kopiraj projekat', 'Column removed successfully.' => 'Kolumna usunięta pomyslnie.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Sve kolone', - 'Calendar' => 'Kalendar', 'Next' => 'Sledeći', // '#%d' => '', 'All swimlanes' => 'Svi razdelniki', @@ -557,7 +549,6 @@ return array( // 'Unable to add this currency rate.' => '', // 'Webhook URL' => '', // '%s removed the assignee of the task %s' => '', - // 'Enable Gravatar images' => '', // 'Information' => '', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -611,14 +602,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -637,7 +621,6 @@ return array( // 'Notification' => '', // '%s moved the task #%d to the first swimlane' => '', // 'Swimlane' => '', - // 'Gravatar' => '', // '%s moved the task %s to the first swimlane' => '', // '%s moved the task %s to the swimlane "%s"' => '', // 'This report contains all subtasks information for the given date range.' => '', @@ -674,7 +657,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -688,7 +670,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', @@ -743,15 +724,8 @@ return array( // 'License:' => '', // 'License' => '', // 'Enter the text below' => '', - // 'Sort by position' => '', - // 'Sort by date' => '', - // 'Add task' => '', // 'Start date:' => '', // 'Due date:' => '', - // 'There is no start date or due date for this task.' => '', - // 'Moving or resizing a task will change the start and due date of the task.' => '', - // 'There is no task in your project.' => '', - // 'Gantt chart' => '', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( // 'Members' => '', // 'Shared project' => '', // 'Project managers' => '', - // 'Gantt chart for all projects' => '', // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', // 'Milestone' => '', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', // 'Documentation' => '', // 'Table of contents' => '', - // 'Gantt' => '', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 420c57d1..97b4142d 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Administratör', 'Sign in' => 'Logga in', 'Users' => 'Användare', - 'No user' => 'Ingen användare', 'Forbidden' => 'Ej tillåten', 'Access Forbidden' => 'Ej tillåten', 'Edit user' => 'Ändra användare', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Deluppgiften har uppdaterats.', 'Unable to update your sub-task.' => 'Kunde inte uppdatera din deluppgift.', 'Unable to create your sub-task.' => 'Kunde inte skapa din deluppgift.', - 'Sub-task added successfully.' => 'Deluppgiften har lagts till.', 'Maximum size: ' => 'Maxstorlek: ', 'Display another project' => 'Visa ett annat projekt', 'Created by %s' => 'Skapad av %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'Aktivitetsström', 'Dashboard' => 'Instrumentpanel', 'Confirmation' => 'Bekräftelse', - 'Allow everybody to access to this project' => 'Ge alla tillgång till projektet', - 'Everybody have access to this project.' => 'Alla har tillgång till projektet', 'Webhooks' => 'Webhooks', 'API' => 'API', 'Create a comment from an external provider' => 'Skapa en kommentar från en extern leverantör', 'Project management' => 'Projekthantering', - 'My projects' => 'Mina projekt', 'Columns' => 'Kolumner', 'Task' => 'Uppgift', - 'Your are not member of any project.' => 'Du är inte medlem i något projekt', 'Percentage' => 'Procent', 'Number of tasks' => 'Antal uppgifter', 'Task distribution' => 'Uppgiftsfördelning', 'Analytics' => 'Analyser', 'Subtask' => 'Deluppgift', - 'My subtasks' => 'Mina deluppgifter', 'User repartition' => 'Användardeltagande', 'Clone this project' => 'Klona projektet', 'Column removed successfully.' => 'Kolumnen togs bort', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Språk', 'Timezone:' => 'Tidszon', 'All columns' => 'Alla kolumner', - 'Calendar' => 'Kalender', 'Next' => 'Nästa', '#%d' => '#%d', 'All swimlanes' => 'Alla swimlanes', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'Kunde inte lägga till valutakursen.', 'Webhook URL' => 'Webhook URL', '%s removed the assignee of the task %s' => '%s ta bort tilldelningen av uppgiften %s', - 'Enable Gravatar images' => 'Aktivera Gravatar bilder', 'Information' => 'Information', 'Check two factor authentication code' => 'Kolla tvåfaktorsverifieringskod', 'The two factor authentication code is not valid.' => 'Tvåfaktorsverifieringskoden är inte giltig.', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'När uppgiften flyttas från första kolumnen', 'When task is moved to last column' => 'När uppgiften flyttas till sista kolumnen', 'Year(s)' => 'År', - 'Calendar settings' => 'Inställningar för kalendern', - 'Project calendar view' => 'Projektkalendervy', 'Project settings' => 'Projektinställningar', - 'Show subtasks based on the time tracking' => 'Visa deluppgifter baserade på tidsspårning', - 'Show tasks based on the creation date' => 'Visa uppgifter baserade på skapat datum', - 'Show tasks based on the start date' => 'Visa uppgifter baserade på startdatum', - 'Subtasks time tracking' => 'Deluppgifter tidsspårning', - 'User calendar view' => 'Användarkalendervy', 'Automatically update the start date' => 'Automatisk uppdatering av startdatum', 'iCal feed' => 'iCal flöde', 'Preferences' => 'Preferenser', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Notis', '%s moved the task #%d to the first swimlane' => '%s flyttade uppgiften #%d till första swimlane', 'Swimlane' => 'Swimlane', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s flyttade uppgiften %s till första swimlane', '%s moved the task %s to the swimlane "%s"' => '%s flyttade uppgiften %s till swimlane "%s"', 'This report contains all subtasks information for the given date range.' => 'Denna rapport innehåller all deluppgiftsinformation för det givna datumintervallet.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Stoppa timer', 'Start timer' => 'Starta timer', 'My activity stream' => 'Min aktivitetsström', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Sök uppgifter', 'Reset filters' => 'Återställ filter', 'My tasks due tomorrow' => 'Mina uppgifter förfaller imorgon', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Översikts', 'Board/Calendar/List view' => 'Tavla/Kalender/Listvy', 'Switch to the board view' => 'Växla till tavelvy', - 'Switch to the calendar view' => 'Växla till kalendervy', 'Switch to the list view' => 'Växla till listvy', 'Go to the search/filter box' => 'Gå till sök/filter box', 'There is no activity yet.' => 'Det finns ingen aktivitet ännu.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Licens:', 'License' => 'Licens', 'Enter the text below' => 'Fyll i texten nedan', - 'Sort by position' => 'Sortera efter position', - 'Sort by date' => 'Sortera efter datum', - 'Add task' => 'Lägg till uppgift', 'Start date:' => 'Startdatum:', 'Due date:' => 'Slutdatum:', - 'There is no start date or due date for this task.' => 'Det finns inget startdatum eller slutdatum för uppgiften.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Flytt eller storleksändring av uppgiften ändrar start och slutdatum för uppgiften', - 'There is no task in your project.' => 'Det finns ingen uppgift i ditt projekt.', - 'Gantt chart' => 'Gantt-schema', // 'People who are project managers' => '', // 'People who are project members' => '', // 'NOK - Norwegian Krone' => '', @@ -763,22 +737,15 @@ return array( // 'Members' => '', // 'Shared project' => '', // 'Project managers' => '', - // 'Gantt chart for all projects' => '', // 'Projects list' => '', - // 'Gantt chart for this project' => '', - // 'Project board' => '', // 'End date:' => '', - // 'There is no start date or end date for this project.' => '', - // 'Projects Gantt chart' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', // 'Milestone' => '', // 'Documentation: %s' => '', - // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', // 'Documentation' => '', // 'Table of contents' => '', - // 'Gantt' => '', // 'Author' => '', // 'Version' => '', // 'Plugins' => '', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', // 'Do you really want to remove the user "%s" from the group "%s"?' => '', // 'There is no group.' => '', - // 'External Id' => '', // 'Add group member' => '', // 'Do you really want to remove this group: "%s"?' => '', // 'There is no user in this group.' => '', @@ -955,7 +921,6 @@ return array( // 'Default priority' => '', // 'Lowest priority' => '', // 'Highest priority' => '', - // 'If you put zero to the low and high priority, this feature will be disabled.' => '', // 'Close a task when there is no activity' => '', // 'Duration in days' => '', // 'Send email when there is no activity on a task' => '', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index fe14588e..fb2e0cbe 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => 'ผู้ดูแลระบบ', 'Sign in' => 'เข้าสู่ระบบ', 'Users' => 'ผู้ใช้', - 'No user' => 'ไม่มีผู้ใช้', 'Forbidden' => 'ไม่อนุญาต', 'Access Forbidden' => 'ไม่อนุญาตให้เข้า', 'Edit user' => 'แก้ไขผู้ใช้', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'ปรับปรุงงานย่อย่่เรียบร้อยแล้ว', 'Unable to update your sub-task.' => 'ไม่สามารถปรับปรุงานย่อยได้', 'Unable to create your sub-task.' => 'ไม่สามารถสร้างงานย่อยได้', - 'Sub-task added successfully.' => 'เพิ่มงานย่อยเรียบร้อยแล้ว', 'Maximum size: ' => 'ขนาดไฟล์สูงสุด:', 'Display another project' => 'แสดงโปรเจคอื่น', 'Created by %s' => 'สร้างโดย %s', @@ -396,22 +394,17 @@ return array( 'Activity stream' => 'กิจกรรมที่เกิดขึ้น', 'Dashboard' => 'แดชบอร์ด', 'Confirmation' => 'ยืนยันรหัสผ่าน', - 'Allow everybody to access to this project' => 'อนุญาตให้ทุกคนเข้าถึงโปรเจคนี้', - 'Everybody have access to this project.' => 'ทุกคนสามารถเข้าถึงโปรเจคนี้', // 'Webhooks' => '', // 'API' => '', 'Create a comment from an external provider' => 'สร้างความคิดเห็นจากบริการภายนอก', 'Project management' => 'การจัดการโปรเจค', - 'My projects' => 'โปรเจคของฉัน', 'Columns' => 'คอลัมน์', 'Task' => 'งาน', - 'Your are not member of any project.' => 'คุณไม่ได้เป็นสมาชิกของโปรเจคใดๆ', 'Percentage' => 'เปอร์เซ็นต์', 'Number of tasks' => 'จำนวนงาน', 'Task distribution' => 'การกระจายงาน', 'Analytics' => 'การวิเคราะห์', 'Subtask' => 'งานย่อย', - 'My subtasks' => 'งานย่อยของฉัน', 'User repartition' => 'การแบ่งงานของผู้ใช้', 'Clone this project' => 'สำเนาโปรเจคนี้', 'Column removed successfully.' => 'ลบคอลัมน์สำเร็จ', @@ -459,7 +452,6 @@ return array( 'Language:' => 'ภาษา:', 'Timezone:' => 'เขตเวลา:', 'All columns' => 'คอลัมน์ทั้งหมด', - 'Calendar' => 'ปฏิทิน', 'Next' => 'ต่อไป', '#%d' => '#%d', 'All swimlanes' => 'สวิมเลนทั้งหมด', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => 'ไม่สามารถเพิ่มค่าเงินนี้', // 'Webhook URL' => '', '%s removed the assignee of the task %s' => '%s เอาผู้รับผิดชอบออกจากงาน %s', - 'Enable Gravatar images' => 'สามารถใช้งานภาพ Gravatar', 'Information' => 'ข้อมูลสารสนเทศ', // 'Check two factor authentication code' => '', // 'The two factor authentication code is not valid.' => '', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'เมื่องานถูกย้ายจากคอลัมน์แรก', 'When task is moved to last column' => 'เมื่องานถูกย้ายไปคอลัมน์สุดท้าย', 'Year(s)' => 'ปี', - 'Calendar settings' => 'ตั้งค่าปฏิทิน', - 'Project calendar view' => 'มุมมองปฏิทินของโปรเจค', 'Project settings' => 'ตั้งค่าโปรเจค', - 'Show subtasks based on the time tracking' => 'แสดงงานย่อยในการติดตามเวลา', - 'Show tasks based on the creation date' => 'แสดงงานจากวันที่สร้าง', - 'Show tasks based on the start date' => 'แสดงงานจากวันที่เริ่ม', - 'Subtasks time tracking' => 'การติดตามเวลางานย่อย', - 'User calendar view' => 'มุมมองปฏิทินของผู้ใช้', 'Automatically update the start date' => 'ปรับปรุงวันที่เริ่มอัตโนมมัติ', // 'iCal feed' => '', // 'Preferences' => '', @@ -637,7 +621,6 @@ return array( 'Notification' => 'แจ้งเตือน', '%s moved the task #%d to the first swimlane' => '%s ย้ายงาน #%d ไปสวินเลนแรก', 'Swimlane' => 'สวิมเลน', - 'Gravatar' => 'รูปแทนตัว', '%s moved the task %s to the first swimlane' => '%s ย้ายงาน %s ไปสวินเลนแรก', '%s moved the task %s to the swimlane "%s"' => '%s ย้ายงาน %s ไปสวินเลนไปสวินเลน "%s"', 'This report contains all subtasks information for the given date range.' => 'รายงานนี้มีข้อมูลงานย่อยทั้งหมดในช่วงวันที่กำหนด', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'หยุดจับเวลา', 'Start timer' => 'เริ่มจับเวลา', 'My activity stream' => 'กิจกรรมที่เกิดขึ้นของฉัน', - 'My calendar' => 'ปฎิทินของฉัน', 'Search tasks' => 'ค้นหางาน', 'Reset filters' => 'ล้างตัวกรอง', 'My tasks due tomorrow' => 'งานถึงกำหนดของฉันวันพรุ่งนี้', @@ -688,7 +670,6 @@ return array( 'Overview' => 'ภาพรวม', 'Board/Calendar/List view' => 'มุมมอง บอร์ด/ปฎิทิน/ลิสต์', 'Switch to the board view' => 'เปลี่ยนเป็นมุมมองบอร์ด', - 'Switch to the calendar view' => 'เปลี่ยนเป็นมุมมองปฎิทิน', 'Switch to the list view' => 'เปลี่ยนเป็นมุมมองลิสต์', 'Go to the search/filter box' => 'ไปที่กล่องค้นหา/ตัวกรอง', 'There is no activity yet.' => 'ตอนนี้ไม่มีกิจกรรม', @@ -743,15 +724,8 @@ return array( 'License:' => 'สัญญาอนุญาต:', 'License' => 'สัญญาอนุญาต', 'Enter the text below' => 'พิมพ์ข้อความด้านล่าง', - 'Sort by position' => 'เรียงตามตำแหน่ง', - 'Sort by date' => 'เรียงตามวัน', - 'Add task' => 'เพิ่มงาน', 'Start date:' => 'วันที่เริ่ม:', 'Due date:' => 'วันครบกำหนด:', - 'There is no start date or due date for this task.' => 'งานนี้ไม่มีวันที่เริ่มหรือวันครบกำหนด', - 'Moving or resizing a task will change the start and due date of the task.' => 'การย้ายหรือปรับขนาดงานจะมีการเปลี่ยนแปลงที่วันเริ่มต้นและวันที่ครบกำหนดของงาน', - 'There is no task in your project.' => 'โปรเจคนี้ไม่มีงาน', - 'Gantt chart' => 'แผนภูมิแกรนท์', 'People who are project managers' => 'คนที่เป็นผู้จัดการโปรเจค', 'People who are project members' => 'คนที่เป็นสมาชิกโปรเจค', 'NOK - Norwegian Krone' => 'NOK - โครนนอร์เวย์', @@ -763,22 +737,15 @@ return array( 'Members' => 'สมาชิก', 'Shared project' => 'แชร์โปรเจค', 'Project managers' => 'ผู้จัดการโปรเจค', - 'Gantt chart for all projects' => 'แผนภูมิแกรนท์สำหรับทุกโปรเจค', 'Projects list' => 'รายการโปรเจค', - 'Gantt chart for this project' => 'แผนภูมิแกรนท์สำหรับโปรเจคนี้', - 'Project board' => 'บอร์ดโปรเจค', 'End date:' => 'วันที่จบ:', - 'There is no start date or end date for this project.' => 'ไม่มีวันที่เริ่มหรือวันที่จบของโปรเจคนี้', - 'Projects Gantt chart' => 'แผนภูมิแกรน์ของโปรเจค', 'Change task color when using a specific task link' => 'เปลี่ยนสีงานเมื่อมีการใช้การเชื่อมโยงงาน', 'Task link creation or modification' => 'การสร้างการเชื่อมโยงงานหรือการปรับเปลี่ยน', 'Milestone' => 'ขั้น', 'Documentation: %s' => 'เอกสาร: %s', - 'Switch to the Gantt chart view' => 'เปลี่ยนเป็นมุมมองแผนภูมิแกรนท์', 'Reset the search/filter box' => 'รีเซตกล่องค้นหา/ตัวกรอง', 'Documentation' => 'เอกสาร', 'Table of contents' => 'สารบัญ', - 'Gantt' => 'แกรนท์', 'Author' => 'ผู้แต่ง', 'Version' => 'เวอร์ชัน', 'Plugins' => 'ปลั๊กอิน', @@ -889,7 +856,6 @@ return array( // 'There is no user available.' => '', 'Do you really want to remove the user "%s" from the group "%s"?' => 'คุณต้องการลบผู้ใช้ "%s" ออกจากกลุ่ม "%s"?', 'There is no group.' => 'ไม่มีกลุ่ม', - 'External Id' => 'ไอดีภายนอก', 'Add group member' => 'เพิ่มสมาชิกกลุ่ม', 'Do you really want to remove this group: "%s"?' => 'คุณต้องการลบกลุ่มนี้: "%s"?', 'There is no user in this group.' => 'ไม่มีผู้ใช้ในกลุ่มนี้', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'ความสำคัญเริ่มต้น', 'Lowest priority' => 'ความสำคัญต่ำสุด', 'Highest priority' => 'ความสำคัญสูงสุด', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'ถ้าคุณใส่เลขศูนย์ทั้งความสำคัญต่ำและความสำคัญสูง จะเป็นการปิดการทำงานคุณลักษณะนี้', 'Close a task when there is no activity' => 'ปิดงานเมื่อไม่มีกิจกกรมเกิดขึ้น', 'Duration in days' => 'ระยะเวลาวันที่', 'Send email when there is no activity on a task' => 'ส่งอีเมลเมื่อไม่มีกิจกรรมเกิดขึ้นในงาน', @@ -1169,8 +1134,6 @@ return array( // 'Subtasks overview for %s' => '', // 'Projects overview for %s' => '', // 'Activity stream for %s' => '', - // 'Calendar for %s' => '', - // 'Notifications for %s' => '', // 'Assign a color when the task is moved to a specific swimlane' => '', // 'Assign a priority when the task is moved to a specific swimlane' => '', // 'User unlocked successfully.' => '', @@ -1241,7 +1204,6 @@ return array( // 'Preview' => '', // 'Write' => '', // 'Write your text in Markdown' => '', - // 'New External Task: %s' => '', // 'No personal API access token registered.' => '', // 'Your personal API access token is "%s"' => '', // 'Remove your token' => '', @@ -1316,7 +1278,6 @@ return array( // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', @@ -1334,4 +1295,75 @@ return array( // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + // '%d groups' => '', + // '%d group' => '', + // 'Group ID' => '', + // 'External ID' => '', + // '%d users' => '', + // '%d user' => '', + // 'Hide subtasks' => '', + // 'Show subtasks' => '', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + // 'User ID' => '', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + // 'User disabled' => '', + // '%d notifications' => '', + // '%d notification' => '', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + // 'My projects' => '', + // 'Your are not member of any project.' => '', + // 'My subtasks' => '', + // '%d subtasks' => '', + // '%d subtask' => '', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + // 'Remove user from group' => '', + // 'Assign the task to its creator' => '', + // 'This task was sent by email to "%s" with subject "%s".' => '', + // 'Predefined Email Subjects' => '', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 4368609f..c16d48f2 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -1,8 +1,8 @@ <?php return array( - // 'number.decimals_separator' => '', - // 'number.thousands_separator' => '', + 'number.decimals_separator' => '.', + 'number.thousands_separator' => ',', 'None' => 'Hiçbiri', 'Edit' => 'Düzenle', 'Remove' => 'Sil', @@ -39,7 +39,6 @@ return array( 'Administrator' => 'Yönetici', 'Sign in' => 'Giriş yap', 'Users' => 'Kullanıcılar', - 'No user' => 'Kullanıcı yok', 'Forbidden' => 'Yasak', 'Access Forbidden' => 'Erişim yasak', 'Edit user' => 'Kullanıcıyı düzenle', @@ -72,8 +71,8 @@ return array( 'Settings' => 'Ayarlar', 'Application settings' => 'Uygulama ayarları', 'Language' => 'Dil', - // 'Webhook token:' => '', - 'API token:' => 'API belirteci:', + 'Webhook token:' => 'Web kancası anahtarı:', + 'API token:' => 'API anahtarı:', 'Database size:' => 'Veritabanı boyutu :', 'Download the database' => 'Veritabanını indir', 'Optimize the database' => 'Veritabanını optimize et', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => 'Alt görev güncellendi.', 'Unable to update your sub-task.' => 'Alt görev güncellenemiyor.', 'Unable to create your sub-task.' => 'Alt görev oluşturulamadı.', - 'Sub-task added successfully.' => 'Alt görev başarıyla eklendi.', 'Maximum size: ' => 'Maksimum boyutu', 'Display another project' => 'Başka bir proje göster', 'Created by %s' => '%s tarafından oluşturuldu', @@ -374,7 +372,7 @@ return array( 'Database driver:' => 'Veritabanı sürücüsü:', 'Board settings' => 'Pano ayarları', 'Webhook settings' => 'Webhook ayarları', - 'Reset token' => 'Belirteci sıfırla', + 'Reset token' => 'Anahtarı sıfırla', 'API endpoint:' => 'API bitiş noktası:', 'Refresh interval for private board' => 'Özel panolar için yenileme sıklığı', 'Refresh interval for public board' => 'Dışa açık panolar için yenileme sıklığı', @@ -383,7 +381,7 @@ return array( 'Frequency in second (60 seconds by default)' => 'Saniye olarak frekans (varsayılan 60 saniye)', 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Saniye olarak frekans (Bu özelliği iptal etmek için 0, varsayılan değer 10 saniye)', 'Application URL' => 'Uygulama URL', - 'Token regenerated.' => 'Beliteç yeniden oluşturuldu.', + 'Token regenerated.' => 'Anahtar yeniden oluşturuldu.', 'Date format' => 'Tarih formatı', 'ISO format is always accepted, example: "%s" and "%s"' => 'ISO formatı her zaman kabul edilir, örneğin: "%s" ve "%s"', 'New private project' => 'Yeni özel proje', @@ -394,24 +392,19 @@ return array( 'There is nothing assigned to you.' => 'Size atanan hiçbir şey yok.', 'My tasks' => 'Görevlerim', 'Activity stream' => 'Güncel olay akışı', - 'Dashboard' => 'Anasayfa', + 'Dashboard' => 'Pano', 'Confirmation' => 'Onay', - 'Allow everybody to access to this project' => 'Bu projeye herkesin erişimine izin ver', - 'Everybody have access to this project.' => 'Bu projeye herkesin erişimi var.', - 'Webhooks' => 'Webhooks', + 'Webhooks' => 'Web Kancaları', 'API' => 'API', 'Create a comment from an external provider' => 'Dış sağlayıcı ile bir yorum oluştur', 'Project management' => 'Proje yönetimi', - 'My projects' => 'Projelerim', 'Columns' => 'Sütunlar', 'Task' => 'Görev', - 'Your are not member of any project.' => 'Hiç bir projenin üyesi değilsiniz.', 'Percentage' => 'Yüzde', 'Number of tasks' => 'Görev sayısı', 'Task distribution' => 'Görev dağılımı', 'Analytics' => 'Analiz', 'Subtask' => 'Alt görev', - 'My subtasks' => 'Alt görevlerim', 'User repartition' => 'Kullanıcı dağılımı', 'Clone this project' => 'Projenin kopyasını oluştur', 'Column removed successfully.' => 'Sütun başarıyla kaldırıldı.', @@ -459,7 +452,6 @@ return array( 'Language:' => 'Dil:', 'Timezone:' => 'Saat dilimi:', 'All columns' => 'Tüm sütunlar', - 'Calendar' => 'Takvim', 'Next' => 'Sonraki', '#%d' => '#%d', 'All swimlanes' => 'Tüm Kulvarlar', @@ -531,14 +523,14 @@ return array( 'CHF - Swiss Francs' => 'CHF - İsviçre Frangı', 'Custom Stylesheet' => 'Özel Sitil Css', 'download' => 'indir', - // 'EUR - Euro' => '', + 'EUR - Euro' => 'EUR - Euro', 'GBP - British Pound' => 'GBP - İngiliz Paund', 'INR - Indian Rupee' => 'INR - Hint Rupesi', 'JPY - Japanese Yen' => 'JPY - Japon Yeni', 'NZD - New Zealand Dollar' => 'NZD - Yeni Zelanda Doları', - // 'RSD - Serbian dinar' => '', - // 'CNY - Chinese Yuan' => '', - 'USD - US Dollar' => 'USD$ Amerikan Doları', + 'RSD - Serbian dinar' => 'Sırp Dinarı', + 'CNY - Chinese Yuan' => 'Çin Yuanı', + 'USD - US Dollar' => 'USD Amerikan Doları', 'Destination column' => 'Hedef Sütun', 'Move the task to another column when assigned to a user' => 'Bir kullanıcıya atandığında görevi başka bir sütuna taşı', 'Move the task to another column when assignee is cleared' => 'Atanmış kullanıcı kaldırıldığında görevi başka bir sütuna taşı', @@ -555,9 +547,8 @@ return array( 'Reference currency' => 'Referans kur', 'The currency rate have been added successfully.' => 'Kur başarıyla eklendi', 'Unable to add this currency rate.' => 'Bu kur eklenemedi', - // 'Webhook URL' => '', + 'Webhook URL' => 'Web kancası URL', '%s removed the assignee of the task %s' => '%s, %s görevinin atanan bilgisini kaldırdı', - 'Enable Gravatar images' => 'Gravatar resimlerini kullanıma aç', 'Information' => 'Bilgi', 'Check two factor authentication code' => 'Çift-Kademeli doğrulama kodunu kontrol et', 'The two factor authentication code is not valid.' => 'Çift-Kademeli doğrulama kodu geçersiz', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => 'Görev ilk sütundan taşındığı zaman', 'When task is moved to last column' => 'Görev son sütuna taşındığı zaman', 'Year(s)' => 'Yıl(lar)', - 'Calendar settings' => 'Takvim ayarları', - 'Project calendar view' => 'Proje takvim görünümü', 'Project settings' => 'Proje ayarları', - 'Show subtasks based on the time tracking' => 'Zaman takibi bazında alt görevleri göster', - 'Show tasks based on the creation date' => 'Oluşturulma zamanına göre görevleri göster', - 'Show tasks based on the start date' => 'Başlangıç zamanına göre görevleri göster', - 'Subtasks time tracking' => 'Alt görevler zaman takibi', - 'User calendar view' => 'Kullanıcı takvim görünümü', 'Automatically update the start date' => 'Başlangıç tarihini otomatik olarak güncelle', 'iCal feed' => 'iCal akışı', 'Preferences' => 'Ayarlar', @@ -637,7 +621,6 @@ return array( 'Notification' => 'Uyarılar', '%s moved the task #%d to the first swimlane' => '%s, #%d görevini birinci kulvara taşıdı', 'Swimlane' => 'Kulvar', - 'Gravatar' => 'Gravatar', '%s moved the task %s to the first swimlane' => '%s, %s görevini ilk kulvara taşıdı', '%s moved the task %s to the swimlane "%s"' => '%s, %s görevini "%s" kulvarına taşıdı', 'This report contains all subtasks information for the given date range.' => 'Bu rapor belirtilen tarih aralığında tüm alt görev bilgilerini içerir.', @@ -674,7 +657,6 @@ return array( 'Stop timer' => 'Zamanlayıcıyı durdur', 'Start timer' => 'Zamanlayıcıyı başlat', 'My activity stream' => 'Olay akışım', - 'My calendar' => 'Takvimim', 'Search tasks' => 'Görevleri ara', 'Reset filters' => 'Filtreleri sıfırla', 'My tasks due tomorrow' => 'Yarına tamamlanması gereken görevlerim', @@ -688,7 +670,6 @@ return array( 'Overview' => 'Özet Görünüm', 'Board/Calendar/List view' => 'Pano/Takvim/Liste görünümü', 'Switch to the board view' => 'Pano görünümüne geç', - 'Switch to the calendar view' => 'Takvim görünümüne geç', 'Switch to the list view' => 'Liste görünümüne geç', 'Go to the search/filter box' => 'Arama/Filtreleme kutusuna git', 'There is no activity yet.' => 'Henüz bir aktivite yok.', @@ -743,15 +724,8 @@ return array( 'License:' => 'Lisans:', 'License' => 'Lisans', 'Enter the text below' => 'Aşağıdaki metni girin', - 'Sort by position' => 'Pozisyona göre sırala', - 'Sort by date' => 'Tarihe göre sırala', - 'Add task' => 'Görev ekle', 'Start date:' => 'Başlangıç tarihi:', 'Due date:' => 'Tamamlanması gereken tarih:', - 'There is no start date or due date for this task.' => 'Bu görev için başlangıç veya tamamlanması gereken tarih yok.', - 'Moving or resizing a task will change the start and due date of the task.' => 'Bir görevin boyutunu değiştirmek, görevin başlangıç ve tamamlanması gereken tarihlerini değiştirir.', - 'There is no task in your project.' => 'Projenizde hiç görev yok.', - 'Gantt chart' => 'Gantt diyagramı', 'People who are project managers' => 'Proje müdürü olan kişiler', 'People who are project members' => 'Proje üyesi olan kişiler', 'NOK - Norwegian Krone' => ' NOK - Norveç Kronu', @@ -763,22 +737,15 @@ return array( 'Members' => 'Üyeler', 'Shared project' => 'Paylaşılan proje', 'Project managers' => 'Proje müdürleri', - 'Gantt chart for all projects' => 'Tüm projeler için Gantt diyagramı', 'Projects list' => 'Proje listesi', - 'Gantt chart for this project' => 'Bu proje için Gantt diyagramı', - 'Project board' => 'Proje Panosu', 'End date:' => 'Bitiş tarihi:', - 'There is no start date or end date for this project.' => 'Bu proje için başlangıç veya bitiş tarihi yok.', - 'Projects Gantt chart' => 'Projeler Gantt diyagramı', 'Change task color when using a specific task link' => 'Belirli bir görev bağlantısı kullanıldığında görevin rengini değiştir', 'Task link creation or modification' => 'Görev bağlantısı oluşturulması veya değiştirilmesi', 'Milestone' => 'Kilometre taşı', 'Documentation: %s' => 'Dokümantasyon: %s', - 'Switch to the Gantt chart view' => 'Gantt diyagramı görünümüne geç', 'Reset the search/filter box' => 'Arama/Filtre kutusunu sıfırla', 'Documentation' => 'Dokümantasyon', 'Table of contents' => 'İçindekiler', - 'Gantt' => 'Gantt', 'Author' => 'Yazar', 'Version' => 'Versiyon', 'Plugins' => 'Eklentiler', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => 'Uygun üye yok', 'Do you really want to remove the user "%s" from the group "%s"?' => '"%s" kullanıcısını "%s" grubundan çıkarmak istediğinize emin misiniz?', 'There is no group.' => 'Hiç grup yok.', - 'External Id' => 'Harici Kimlik', 'Add group member' => 'Grup üyesi ekle', 'Do you really want to remove this group: "%s"?' => '"%s" grubunu silmek istediğinize emin misiniz?', 'There is no user in this group.' => 'Bu grupta hiç kullanıcı yok.', @@ -941,9 +907,9 @@ return array( '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '"%s" sütunu ve "%s" kulvarındaki %d görev kapatılacak.', 'Close all tasks of this column' => 'Bu sütundaki tüm görevleri kapat', 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Proje bildirimleri için hiçbir plugin kaydedilmedi. Yine de profil sayfanızdan bildirim ayarları yapabilirsiniz.', - 'My dashboard' => 'Dashboard um', + 'My dashboard' => 'Panom', 'My profile' => 'Profilim', - 'Project owner: ' => 'Proje sahibi', + 'Project owner: ' => 'Proje sahibi: ', 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'Proje kodu opsiyoneldir ve alfanümerik olmalıdır, örneğin: PROJE1', 'Project owner' => 'Proje sahibi', 'Private projects do not have users and groups management.' => '(Kişiye) Özel projelerde kullanıcı ve grup yönetimi yoktur.', @@ -955,7 +921,6 @@ return array( 'Default priority' => 'Varsayılan öncelik', 'Lowest priority' => 'En düşük öncelik', 'Highest priority' => 'En yüksek öncelik', - 'If you put zero to the low and high priority, this feature will be disabled.' => 'Eğer en düşük ve en yüksek önceliğe sıfır girerseniz, bu özellik devre dışı bırakılacak.', 'Close a task when there is no activity' => 'Bir aktivite olmadığında görevi kapat', 'Duration in days' => 'Süre (gün olarak)', 'Send email when there is no activity on a task' => 'Bir görevde aktivite olmadığında e-posta gönder', @@ -1044,7 +1009,7 @@ return array( 'Change subtask position' => 'Alt görev sırasını değiştir', 'This value must be greater than %d' => 'Bu değer %d den büyük olmalı', 'Another swimlane with the same name exists in the project' => 'Projede aynı isimli başka bir kulvar var', - 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Örneğin: http://ornek.dediteknoloji.com/ (sabit URLler oluşturmak için)', + 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => 'Örneğin: http://ornek.kanboard.net/ (sabit URLler oluşturmak için)', 'Actions duplicated successfully.' => 'İşlemler başarıyla çoklandı.', 'Unable to duplicate actions.' => 'İşlemler çoklanamıyor.', 'Add a new action' => 'Yeni bir işlem ekle', @@ -1066,7 +1031,7 @@ return array( 'Display list of keyboard shortcuts' => 'Kısayol tuşları listesini göster', 'Menu' => 'Menü', 'Set start date' => 'Başlangıç tarihi belirle', - // 'Avatar' => '', + 'Avatar' => 'Simge', 'Upload my avatar image' => 'Avatar resmimi yükle', 'Remove my image' => 'Resmimi kaldır', 'The OAuth2 state parameter is invalid' => 'OAuth2 durum parametresi geçersiz', @@ -1087,29 +1052,29 @@ return array( 'Assign automatically a color based on a priority' => 'Önceliğe bağlı olarak bir renk belirle', 'Overdue tasks for the project(s) "%s"' => '%s proje(leri) için süresi geçen görevler', 'Upload files' => 'Dosyaları yükle', - 'Installed Plugins' => 'Yüklenmiş Pluginler', - 'Plugin Directory' => 'Plugin Klasörü', - 'Plugin installed successfully.' => 'Plugin başarıyla kuruldu.', - 'Plugin updated successfully.' => 'Plugin başarıyla güncellendi.', - 'Plugin removed successfully.' => 'Plugin başarıyla kaldırıldı.', + 'Installed Plugins' => 'Yüklenmiş Eklentiler', + 'Plugin Directory' => 'Eklenti Klasörü', + 'Plugin installed successfully.' => 'Eklenti başarıyla kuruldu.', + 'Plugin updated successfully.' => 'Eklenti başarıyla güncellendi.', + 'Plugin removed successfully.' => 'Eklenti başarıyla kaldırıldı.', 'Subtask converted to task successfully.' => 'Alt görev başarıyla göreve dönüştürüldü.', 'Unable to convert the subtask.' => 'Alt görev dönüştürülemedi', 'Unable to extract plugin archive.' => 'Plugin (sıkıştırılmış) dosyası açılamadı.', - 'Plugin not found.' => 'Plugin bulunamadı', + 'Plugin not found.' => 'Eklenti bulunamadı', 'You don\'t have the permission to remove this plugin.' => 'Bu plugin\'i kaldırmak için yetkiniz yok.', - 'Unable to download plugin archive.' => 'Plugin dosyası indirilemedi.', - 'Unable to write temporary file for plugin.' => 'Plugin için geçici dosya oluşturulamadı.', - 'Unable to open plugin archive.' => 'Plugin dosyası açılamadı.', - 'There is no file in the plugin archive.' => 'Plugin (sıkıştırılmış) dosyasında, dosya bulunmuyor.', + 'Unable to download plugin archive.' => 'Eklenti dosyası indirilemedi.', + 'Unable to write temporary file for plugin.' => 'Eklenti için geçici dosya oluşturulamadı.', + 'Unable to open plugin archive.' => 'Eklenti dosyası açılamadı.', + 'There is no file in the plugin archive.' => 'Eklenti (sıkıştırılmış) dosyasında, dosya bulunmuyor.', 'Create tasks in bulk' => 'Toplu olarak görev oluştur', - 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Kanbord sisteminiz arayüzden plugin kurulacak şekilde ayarlanmamış.', - 'There is no plugin available.' => 'Uygun plugin yok.', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Kanbord sisteminiz arayüzden eklenti kurulacak şekilde ayarlanmamış.', + 'There is no plugin available.' => 'Uygun eklenti yok.', 'Install' => 'Kur', 'Update' => 'Güncelle', 'Up to date' => 'Güncel', 'Not available' => 'Uygun değil', - 'Remove plugin' => 'Plugini kaldır', - 'Do you really want to remove this plugin: "%s"?' => '"%s" plugin i gerçekten kaldırmak istiyor musunuz?', + 'Remove plugin' => 'Eklentiyi kaldır', + 'Do you really want to remove this plugin: "%s"?' => '"%s" eklentiyi gerçekten kaldırmak istiyor musunuz?', 'Uninstall' => 'Kaldır', 'Listing' => 'Listeliyor', 'Metadata' => 'Meta veri', @@ -1124,7 +1089,7 @@ return array( 'Email settings' => 'E-posta ayarları', 'Email sender address' => 'E-posta gönderen adresi', 'Email transport' => 'E-posta taşıma', - 'Webhook token' => 'Webhook token', + 'Webhook token' => 'Web kancası anahtarı', 'Project tags management' => 'Proje etiket yönetimi', 'Tag created successfully.' => 'Etiket başarıyla oluturuldu.', 'Unable to create this tag.' => 'Etiket oluşturulamıyor.', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => '%s için alt görev özeti', 'Projects overview for %s' => '%s için proje özeti', 'Activity stream for %s' => '%s için akış', - 'Calendar for %s' => '%s için takvim', - 'Notifications for %s' => '%s için bildirimler', 'Assign a color when the task is moved to a specific swimlane' => 'Görev bir kulvara taşındığında rengini değiştir', 'Assign a priority when the task is moved to a specific swimlane' => 'Görev bir kulvara taşındığında önceliğini değiştir', 'User unlocked successfully.' => 'Kullanıcı kilidi başarıyla kaldırıldı.', @@ -1241,97 +1204,166 @@ return array( 'Preview' => 'Öngörünüm', 'Write' => 'Yaz', 'Write your text in Markdown' => 'Metninizi Markdown a yazın', - 'New External Task: %s' => 'Yeni Harici Görev: %s', - 'No personal API access token registered.' => 'Kişisel API erişim belirteç-token ınız kaydedilmedi.', - 'Your personal API access token is "%s"' => 'Kişisel API erişim belirteç-token ınız"%s"', - 'Remove your token' => 'Belirteç-token ınızı kaldır', - 'Generate a new token' => 'Yeni bir belirteç-token oluştur', - // 'Showing %d-%d of %d' => '', - // 'Outgoing Emails' => '', + 'No personal API access token registered.' => 'Kişisel API erişim anahtarınız kaydedilmedi.', + 'Your personal API access token is "%s"' => 'Kişisel API erişim anahtarınız "%s"', + 'Remove your token' => 'Anahtarı kaldır', + 'Generate a new token' => 'Yeni bir anahtar oluştur', + 'Showing %d-%d of %d' => 'Gösterilen %d-%d / %d', + 'Outgoing Emails' => 'Gönderilen ePostalar', 'Add or change currency rate' => 'Kur Oranını ekle veya değiştir', - // 'Reference currency: %s' => '', - // 'Add custom filters' => '', - // 'Export' => '', - // 'Add link label' => '', - // 'Incompatible Plugins' => '', - // 'Compatibility' => '', - // 'Permissions and ownership' => '', - // 'Priorities' => '', - // 'Close this window' => '', - // 'Unable to upload this file.' => '', - // 'Import tasks' => '', - // 'Choose a project' => '', - // 'Profile' => '', - // 'Application role' => '', - // '%d invitations were sent.' => '', - // '%d invitation was sent.' => '', - // 'Unable to create this user.' => '', - // 'Kanboard Invitation' => '', - // 'Visible on dashboard' => '', - // 'Created at:' => '', - // 'Updated at:' => '', - // 'There is no custom filter.' => '', - // 'New User' => '', - // 'Authentication' => '', - // 'If checked, this user will use a third-party system for authentication.' => '', - // 'The password is necessary only for local users.' => '', - // 'You have been invited to register on Kanboard.' => '', - // 'Click here to join your team' => '', - // 'Invite people' => '', - // 'Emails' => '', - // 'Enter one email address by line.' => '', - // 'Add these people to this project' => '', - // 'Add this person to this project' => '', - // 'Sign-up' => '', - // 'Credentials' => '', - // 'New user' => '', - // 'This username is already taken' => '', - // 'A link to reset your password has been sent by email.' => '', - // 'Your profile must have a valid email address.' => '', - // 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '', - // 'TRL - Turkish Lira' => '', - // 'The project email is optional and could be used by several plugins.' => '', - // 'The project email must be unique across all projects' => '', - // 'The email configuration has been disabled by the administrator.' => '', - // 'Close this project' => '', - // 'Open this project' => '', - // 'Close a project' => '', - // 'Do you really want to close this project: "%s"?' => '', - // 'Reopen a project' => '', - // 'Do you really want to reopen this project: "%s"?' => '', - // 'This project is open' => '', - // 'This project is closed' => '', - // 'Unable to upload files, check the permissions of your data folder.' => '', - // 'Another category with the same name exists in this project' => '', - // 'Comment sent by email successfully.' => '', - // 'Sent by email to [%s](mailto:%s) (%s)' => '', - // 'Unable to read uploaded file.' => '', - // 'Database uploaded successfully.' => '', - // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', - // 'Upload the database' => '', - // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', - // 'Database file' => '', - // 'Upload' => '', - // 'Remove this user from group' => '', - // 'Your project must have at least one active swimlane.' => '', - // 'Project: %s' => '', - // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', - // 'Assign automatically a color when due date is expired' => '', - // 'Total score in this column across all swimlanes' => '', - // 'HRK - Kuna' => '', + 'Reference currency: %s' => 'Referans parabirimi: %s', + 'Add custom filters' => 'Özel filtre ekle', + 'Export' => 'Dışa aktar', + 'Add link label' => 'Bağlantı etiketi ekle', + 'Incompatible Plugins' => 'Uyumsuz Eklentiler', + 'Compatibility' => 'Uyumluluk', + 'Permissions and ownership' => 'İzinler ve sahiplik', + 'Priorities' => 'Öncelikler', + 'Close this window' => 'Bu pencereyi kapat', + 'Unable to upload this file.' => 'Bu dosya yüklenemiyor', + 'Import tasks' => 'Görevleri içeri aktar', + 'Choose a project' => 'Proje seçin', + 'Profile' => 'Profil', + 'Application role' => 'Uygulama rolü', + '%d invitations were sent.' => '%d Davetiye gönderildi', + '%d invitation was sent.' => '%d Davetiye gönderildi', + 'Unable to create this user.' => 'Bu kullanıcı oluşturulamadı.', + 'Kanboard Invitation' => 'Kanboard Daveti', + 'Visible on dashboard' => 'Panoda görünür', + 'Created at:' => 'Oluşturulma: ', + 'Updated at:' => 'Güncellenme: ', + 'There is no custom filter.' => 'Uygulanmış özel filtre yok', + 'New User' => 'Yeni Kullanıcı', + 'Authentication' => 'Yetkilendirme', + 'If checked, this user will use a third-party system for authentication.' => 'İşaretlenirse, bu kullanıcı kimlik doğrulama için üçüncü parti bir sistem kullanacaktır.', + 'The password is necessary only for local users.' => 'Parola yalnızca yerel kullanıcılar için gereklidir', + 'You have been invited to register on Kanboard.' => 'Kanboarda kayıt yaptırmak için davet edildiniz.', + 'Click here to join your team' => 'Takımınıza katılmak için buraya tıklayın', + 'Invite people' => 'İnsanları davet et', + 'Emails' => 'ePostalar', + 'Enter one email address by line.' => 'Her satıra bir adet email girin.', + 'Add these people to this project' => 'Kişileri bu projeye ekle', + 'Add this person to this project' => 'Kişiyi bu projeye ekle', + 'Sign-up' => 'Kayıt', + 'Credentials' => 'Kimlik bilgileri', + 'New user' => 'Yeni kullanıcı', + 'This username is already taken' => 'Bu kullanıcı adı zaten alınmış', + 'A link to reset your password has been sent by email.' => 'Parola sıfırlama linkini içeren mesaj ePosta adresinize gönderildi.', + 'Your profile must have a valid email address.' => 'Profiliniz için geçerli bir ePosta adresi gerekiyor.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Malesef parolanızı sıfırlayamıyoruz. Kullanıcı adınızı doğru girdiniz mi? Profilinize kayıtlı ePosta adresiniz var mı?', + 'TRL - Turkish Lira' => 'TRL - Türk Lirası', + 'The project email is optional and could be used by several plugins.' => 'Proje ePostası isteğe bağlıdır ve eklentiler tarafından kullanılabilir', + 'The project email must be unique across all projects' => 'Proje e-postası tüm projelerde benzersiz olmalıdır.', + 'The email configuration has been disabled by the administrator.' => 'ePosta ayarları yönetici tarafından devre dışı bırakılmış.', + 'Close this project' => 'Bu projeyi kapat', + 'Open this project' => 'Bu projeyi aç', + 'Close a project' => 'Proje kapat', + 'Do you really want to close this project: "%s"?' => 'Bu projeyi kapatmak istediğinize emin misiniz? : "%s"', + 'Reopen a project' => 'Projeyi tekrar aç', + 'Do you really want to reopen this project: "%s"?' => 'Bu projeyi tekrar açmak istediğinizi onaylıyor musunuz? : "%s"', + 'This project is open' => 'Bu proje açıktır', + 'This project is closed' => 'Bu proje kapatılmış', + 'Unable to upload files, check the permissions of your data folder.' => 'Dosya yüklenemedi. Lütfen yükleme dizine yazma izninizi kontrol ediniz.', + 'Another category with the same name exists in this project' => 'Bu projede aynı ada sahip başka bir kategori var', + 'Comment sent by email successfully.' => 'Yorum ePosta ile başarıyla gönderildi.', + 'Sent by email to [%s](mailto:%s) (%s)' => 'ePostayı gönder [%s](mailto:%s) (%s)', + 'Unable to read uploaded file.' => 'Yüklenen dosya okunamadı.', + 'Database uploaded successfully.' => 'Veritabanı başarıyla yüklendi.', + 'Task sent by email successfully.' => 'Görev ePosta ile başarıyla gönderildi.', + 'There is no category in this project.' => 'Bu projenin kategorisi yok', + 'Send by email' => 'ePosta ile gönder', + 'Create and send a comment by email' => 'Yorum oluştur ve ePosta ile gönder', + 'Subject' => 'Konu', + 'Upload the database' => 'Veritabanına yükle', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Daha önce indirdiğiniz Sqlite Veritabanı dosyasını yükleyebilirsiniz (Gzip formatında)', + 'Database file' => 'Veritabanı dosyası', + 'Upload' => 'Yükle', + 'Your project must have at least one active swimlane.' => 'Projenizin en az bir aktif kulvara sahip olması gerekir', + 'Project: %s' => 'Proje: %s', + 'Automatic action not found: "%s"' => 'Otomatik işlem bulunamadı: "%s"', + '%d projects' => '%d proje', + '%d project' => '%d proje', + 'There is no project.' => 'Proje yok.', + 'Sort' => 'Sırala', + 'Project ID' => 'Proje No', + 'Project name' => 'Proje Adı', + 'Public' => 'Herkese açık', + 'Private' => 'Gizli', + '%d tasks' => '%d görev', + '%d task' => '%d görev', + 'Task ID' => 'Görev No', + 'Assign automatically a color when due date is expired' => 'Son günü geçtiğinde otomatik olarak bir renk ata', + 'Total score in this column across all swimlanes' => 'Tüm kulvarlara göre bu kulvarın toplam puanı', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Arjantin Pezosu', + 'COP - Colombian Peso' => 'COP - Kolombiya Pezosu', + '%d groups' => '%d grup', + '%d group' => '%d grup', + 'Group ID' => 'Grup No', + 'External ID' => 'Harici No', + '%d users' => '%d kullanıcı', + '%d user' => '%d kullanıcı', + 'Hide subtasks' => 'Alt görevleri gizler', + 'Show subtasks' => 'Alt görevleri göster', + 'Authentication Parameters' => 'Yetkilendirme Parametreleri', + 'API Access' => 'API Erişimi', + 'No users found.' => 'Kullanıcı yok', + 'User ID' => 'Kullanıcı No', + 'Notifications are activated' => 'Bildirimler etkinleştirildi', + 'Notifications are disabled' => 'Bildirimler devre dışı', + 'User disabled' => 'Kullanıcı devre dışı', + '%d notifications' => '%d bildirim', + '%d notification' => '%d bildirim', + 'There is no external integration installed.' => 'Yüklenmiş harici entegrasyon yok.', + 'You are not allowed to update tasks assigned to someone else.' => 'Başkasına atanmış görevi güncelleme izniniz yok.', + 'You are not allowed to change the assignee.' => 'Atanmış kişiyi değiştirme yetkiniz yok.', + 'Task suppression is not permitted' => 'Görev silmeye izniniz yok', + 'Changing assignee is not permitted' => 'Atanmışı değiştirme izniniz yok', + 'Update only assigned tasks is permitted' => 'Yalnızca atandığınız görevleri güncelleyebilirsiniz', + 'Only for tasks assigned to the current user' => 'Yalnızca geçerli kullanıcıya atanan görevler için', + 'My projects' => 'Projelerim', + 'Your are not member of any project.' => 'Herhangi bir projenin üyesi değilsiniz.', + 'My subtasks' => 'Altgörevlerim', + '%d subtasks' => '%d alt görev', + '%d subtask' => '%d alt görev', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Geçerli kullanıcıya atanan görevler için yalnızca o sütunlar arasında hareket eden bir göreve izin verilir.', + '[DUPLICATE]' => '[ÇİFT]', + 'DKK - Danish Krona' => 'DKK - Danimarka Kronu', + 'Remove user from group' => 'Kullanıcıyı gruptan çıkar', + 'Assign the task to its creator' => 'Oluşturucusuna görev ata', + 'This task was sent by email to "%s" with subject "%s".' => 'Bu görev "%s" konusuyla "%s" ePosta adresine gönderildi.', + 'Predefined Email Subjects' => 'Öntanımlı ePosta konuları', + 'Write one subject by line.' => 'Her satıra bir konu yazınız', + 'Create another link' => 'Başka bağlantı oluştur', + 'BRL - Brazilian Real' => 'BRL - Brezilya Reali', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Locale/vi_VN/translations.php b/app/Locale/vi_VN/translations.php new file mode 100644 index 00000000..fad538a4 --- /dev/null +++ b/app/Locale/vi_VN/translations.php @@ -0,0 +1,1375 @@ +<?php + +return array( + 'number.decimals_separator' => ',', + 'number.thousands_separator' => ' ', + 'None' => 'Chưa có', + 'Edit' => 'Chỉnh sửa', + 'Remove' => 'Xóa bỏ', + 'Yes' => 'Có', + 'No' => 'Không', + 'cancel' => 'hủy bỏ', + 'or' => 'hoặc là', + 'Yellow' => 'Màu vàng', + 'Blue' => 'Màu xanh da trời', + 'Green' => 'Màu xanh lá', + 'Purple' => 'Màu tím', + 'Red' => 'Đỏ', + 'Orange' => 'Trái cam', + 'Grey' => 'Xám', + 'Brown' => 'Nâu', + 'Deep Orange' => 'Deep Orange', + 'Dark Grey' => 'Màu xám đen', + 'Pink' => 'Hồng', + 'Teal' => 'Teal', + 'Cyan' => ' Cyan', + 'Lime' => 'Vôi', + 'Light Green' => 'Màu xanh lợt', + 'Amber' => 'Amber', + 'Save' => 'Lưu', + 'Login' => 'Đăng nhập', + 'Official website:' => 'Trang web chinh thưc:', + 'Unassigned' => 'Chưa được gán', + 'View this task' => 'Xem công việc này', + 'Remove user' => 'Xóa người dùng', + 'Do you really want to remove this user: "%s"?' => 'Bạn có thực sự muốn loại bỏ người dùng này: "%s"?', + 'All users' => 'Tất cả người dùng', + 'Username' => 'Tên đăng nhập', + 'Password' => 'Mật khẩu', + 'Administrator' => 'Người quản lý', + 'Sign in' => 'Đăng nhập', + 'Users' => 'Người dùng', + 'Forbidden' => 'Forbidden', + 'Access Forbidden' => 'Truy cập bị cấm', + 'Edit user' => 'Chỉnh sửa người dùng', + 'Logout' => 'Đăng xuất', + 'Bad username or password' => 'Tên đăng nhập hoặc mật khẩu xâu', + 'Edit project' => 'Chỉnh sửa dự án', + 'Name' => 'Tên', + 'Projects' => 'Dự án', + 'No project' => 'Không có dự án', + 'Project' => 'Dự án', + 'Status' => 'Trạng thái', + 'Tasks' => 'Nhiệm vụ', + 'Board' => 'Bảng', + 'Actions' => 'Hành động', + 'Inactive' => 'Không hoạt động', + 'Active' => 'Hoạt động', + 'Unable to update this board.' => 'Không thể cập nhật bảng này.', + 'Disable' => 'Vô hiệu hóa', + 'Enable' => 'Bật', + 'New project' => 'Dự án mới', + 'Do you really want to remove this project: "%s"?' => 'Bạn có thực sự muốn loại bỏ dự án này: "%s"?', + 'Remove project' => 'Loại bỏ dự án', + 'Edit the board for "%s"' => 'Chỉnh sửa bảng cho "%s"', + 'Add a new column' => 'Thêm cột mới', + 'Title' => 'Chức vụ', + 'Assigned to %s' => 'Được giao cho %s', + 'Remove a column' => 'Loại bỏ một cột', + 'Unable to remove this column.' => 'Không thể xoá cột này.', + 'Do you really want to remove this column: "%s"?' => 'Bạn có thực sự muốn loại bỏ cột này: "%s"?', + 'Settings' => 'Cài đặt', + 'Application settings' => 'Cài đặt ứng dụng', + 'Language' => 'Ngôn ngữ', + 'Webhook token:' => 'Mã thông báo Webhook:', + 'API token:' => 'Mã thông báo API:', + 'Database size:' => 'Kích thước cơ sở dữ liệu:', + 'Download the database' => 'Tải về cơ sở dữ liệu', + 'Optimize the database' => 'Tối ưu hóa cơ sở dữ liệu', + '(VACUUM command)' => '(Lệnh VACUUM)', + '(Gzip compressed Sqlite file)' => '(Gzip nén tập tin Sqlite)', + 'Close a task' => 'Đóng một nhiệm vụ', + 'Column' => 'Cột', + 'Color' => 'Màu', + 'Assignee' => 'Người được chuyển nhượng', + 'Create another task' => 'Tạo một nhiệm vụ khác', + 'New task' => 'Nhiệm vụ mới', + 'Open a task' => 'Mở một nhiệm vụ', + 'Do you really want to open this task: "%s"?' => 'Bạn có thực sự muốn mở công việc này: "%s"?', + 'Back to the board' => 'Trở lại bảng', + 'There is nobody assigned' => 'Không ai được chỉ định', + 'Column on the board:' => 'Cột trên bảng:', + 'Close this task' => 'Đóng nhiệm vụ này', + 'Open this task' => 'Mở nhiệm vụ này', + 'There is no description.' => 'Không có mô tả.', + 'Add a new task' => 'Thêm một nhiệm vụ mới', + 'The username is required' => 'Tên người dùng được yêu cầu', + 'The maximum length is %d characters' => 'Chiều dài tối đa là %d ký tự', + 'The minimum length is %d characters' => 'Chiều dài tối thiểu là %d ký tự', + 'The password is required' => 'Mật khẩu là bắt buộc', + 'This value must be an integer' => 'Giá trị này phải là một số nguyên', + 'The username must be unique' => 'Tên người dùng phải là duy nhất', + 'The user id is required' => 'Người sử dụng id là bắt buộc', + 'Passwords don\'t match' => 'Mật khẩu don \'t match', + 'The confirmation is required' => 'Cần xác nhận', + 'The project is required' => 'Dự án được yêu cầu', + 'The id is required' => 'Id là bắt buộc', + 'The project id is required' => 'Id dự án được yêu cầu', + 'The project name is required' => 'Tên của dự án được yêu cầu', + 'The title is required' => 'Tiêu đề là bắt buộc', + 'Settings saved successfully.' => 'Cài đặt đã lưu thành công.', + 'Unable to save your settings.' => 'Không thể lưu cài đặt của bạn.', + 'Database optimization done.' => 'Tối ưu hóa cơ sở dữ liệu được thực hiện.', + 'Your project have been created successfully.' => 'Dự án của bạn đã được tạo thành công.', + 'Unable to create your project.' => 'Không thể tạo dự án của bạn.', + 'Project updated successfully.' => 'Dự án được cập nhật thành công.', + 'Unable to update this project.' => 'Không thể cập nhật dự án này.', + 'Unable to remove this project.' => 'Không thể xóa dự án này.', + 'Project removed successfully.' => 'Dự án đã được loại bỏ thành công.', + 'Project activated successfully.' => 'Dự án được kích hoạt thành công.', + 'Unable to activate this project.' => 'Không thể kích hoạt dự án này.', + 'Project disabled successfully.' => 'Dự án bị vô hiệu thành công.', + 'Unable to disable this project.' => 'Không thể vô hiệu hoá dự án này.', + 'Unable to open this task.' => 'Không thể mở nhiệm vụ này.', + 'Task opened successfully.' => 'Nhiệm vụ thành công.', + 'Unable to close this task.' => 'Không thể đóng nhiệm vụ này.', + 'Task closed successfully.' => 'Nhiệm vụ đóng thành công.', + 'Unable to update your task.' => 'Không thể cập nhật công việc của bạn.', + 'Task updated successfully.' => 'Nhiệm vụ được cập nhật thành công.', + 'Unable to create your task.' => 'Không thể tạo ra nhiệm vụ của bạn.', + 'Task created successfully.' => 'Nhiệm vụ thành công.', + 'User created successfully.' => 'Người dùng đã thành công.', + 'Unable to create your user.' => 'Không thể tạo người dùng của bạn.', + 'User updated successfully.' => 'Người dùng cập nhật thành công.', + 'User removed successfully.' => 'Người dùng đã xoá thành công.', + 'Unable to remove this user.' => 'Không thể xóa người dùng này.', + 'Board updated successfully.' => 'Bảng đã được cập nhật thành công.', + 'Ready' => 'Sẳn sàng', + 'Backlog' => 'Backlog', + 'Work in progress' => 'Công việc đang tiến hành', + 'Done' => 'Làm xong', + 'Application version:' => 'Phiên bản ứng dụng:', + 'Id' => 'ID', + 'Public link' => 'Liên kết công cộng', + 'Timezone' => 'Múi giờ', + 'Sorry, I didn\'t find this information in my database!' => 'Xin lỗi, tôi không tìm thấy thông tin này trong cơ sở dữ liệu của tôi!', + 'Page not found' => 'Trang không tìm thấy', + 'Complexity' => 'Sự phức tạp', + 'Task limit' => 'Nhiệm vụ giới hạn', + 'Task count' => 'Nhiệm vụ', + 'User' => 'Người dùng', + 'Comments' => 'Bình luận', + 'Comment is required' => 'Bình luận là bắt buộc', + 'Comment added successfully.' => 'Bình luận được thêm thành công.', + 'Unable to create your comment.' => 'Không thể tạo bình luận của bạn.', + 'Due Date' => 'Ngày đáo hạn', + 'Invalid date' => 'Ngày không hợp lệ', + 'Automatic actions' => 'Hành động tự động', + 'Your automatic action have been created successfully.' => 'Hành động tự động của bạn đã được tạo thành công.', + 'Unable to create your automatic action.' => 'Không thể tạo hành động tự động của bạn.', + 'Remove an action' => 'Loại bỏ một hành động', + 'Unable to remove this action.' => 'Không thể loại bỏ hành động này.', + 'Action removed successfully.' => 'Hành động đã được xoá thành công.', + 'Automatic actions for the project "%s"' => 'Hành động tự động cho dự án "%s"', + 'Add an action' => 'Thêm một hành động', + 'Event name' => 'Tên sự kiện', + 'Action' => 'Hoạt động', + 'Event' => 'Biến cố', + 'When the selected event occurs execute the corresponding action.' => 'Khi sự kiện đã chọn xảy ra, hãy thực hiện hành động tương ứng.', + 'Next step' => 'Bước tiếp theo', + 'Define action parameters' => 'Xác định các tham số hành động', + 'Do you really want to remove this action: "%s"?' => 'Bạn có thực sự muốn loại bỏ hành động này: "%s"?', + 'Remove an automatic action' => 'Hủy bỏ một hành động tự động', + 'Assign the task to a specific user' => 'Chỉ định nhiệm vụ cho một người dùng cụ thể', + 'Assign the task to the person who does the action' => 'Chỉ định nhiệm vụ cho người thực hiện hành động', + 'Duplicate the task to another project' => 'Nhân đôi công việc với một dự án khác', + 'Move a task to another column' => 'Di chuyển một nhiệm vụ tới một cột khác', + 'Task modification' => 'Sửa đổi tác vụ', + 'Task creation' => 'Nhiệm vụ sáng tạo', + 'Closing a task' => 'Đóng một nhiệm vụ', + 'Assign a color to a specific user' => 'Chỉ định màu cho một người dùng cụ thể', + 'Position' => 'Chức vụ', + 'Duplicate to another project' => 'Nhân bản với một dự án khác', + 'Duplicate' => 'Bản sao', + 'Link' => 'Liên kết', + 'Comment updated successfully.' => 'Bình luận cập nhật thành công.', + 'Unable to update your comment.' => 'Không thể cập nhật nhận xét của bạn.', + 'Remove a comment' => 'Xóa một bình luận', + 'Comment removed successfully.' => 'Đã xóa nhận xét thành công.', + 'Unable to remove this comment.' => 'Không thể xóa nhận xét này.', + 'Do you really want to remove this comment?' => 'Bạn có thật sự muốn xóa nhận xét này?', + 'Current password for the user "%s"' => 'Mật khẩu hiện tại cho người dùng "%s"', + 'The current password is required' => 'Mật khẩu hiện tại là bắt buộc', + 'Wrong password' => 'Sai mật khẩu', + 'Unknown' => 'Không xác định', + 'Last logins' => 'Đăng nhập lần cuối', + 'Login date' => 'Ngày đăng nhập', + 'Authentication method' => 'Phương pháp xác thực', + 'IP address' => 'Địa chỉ IP', + 'User agent' => 'Đại lý người dùng', + 'Persistent connections' => 'Kết nối liên tục', + 'No session.' => 'Không có phiên.', + 'Expiration date' => 'Ngày hết hạn', + 'Remember Me' => 'Nhớ tôi', + 'Creation date' => 'Ngày thành lập', + 'Everybody' => 'Mọi người', + 'Open' => 'Mở', + 'Closed' => 'Đóng', + 'Search' => 'Tìm kiếm', + 'Nothing found.' => 'Không kết quả.', + 'Due date' => 'Ngày đáo hạn', + 'Description' => 'Mô tả', + '%d comments' => '%d nhận xét', + '%d comment' => '%d nhận xét', + 'Email address invalid' => 'Địa chỉ email không hợp lệ', + 'Your external account is not linked anymore to your profile.' => 'Tài khoản bên ngoài của bạn không được liên kết với hồ sơ của bạn nữa.', + 'Unable to unlink your external account.' => 'Không thể hủy liên kết tài khoản bên ngoài của bạn.', + 'External authentication failed' => 'Xác thực bên ngoài không thành công', + 'Your external account is linked to your profile successfully.' => 'Tài khoản bên ngoài của bạn được liên kết với hồ sơ của bạn thành công.', + 'Email' => 'E-mail', + 'Task removed successfully.' => 'Nhiệm vụ đã được gỡ bỏ thành công.', + 'Unable to remove this task.' => 'Không thể xóa tác vụ này.', + 'Remove a task' => 'Loại bỏ một nhiệm vụ', + 'Do you really want to remove this task: "%s"?' => 'Bạn có thực sự muốn loại bỏ công việc này: "%s"?', + 'Assign automatically a color based on a category' => 'Chỉ định tự động một màu dựa trên một loại', + 'Assign automatically a category based on a color' => 'Chỉ định tự động một thể loại dựa trên màu', + 'Task creation or modification' => 'Tạo tác hoặc sửa đổi nhiệm vụ', + 'Category' => 'Thể loại', + 'Category:' => 'Thể loại:', + 'Categories' => 'Thể loại', + 'Your category have been created successfully.' => 'Danh mục của bạn đã được tạo thành công.', + 'This category has been updated successfully.' => 'Danh mục này đã được cập nhật thành công.', + 'Unable to update this category.' => 'Không thể cập nhật danh mục này.', + 'Remove a category' => 'Loại bỏ một danh mục', + 'Category removed successfully.' => 'Loại bỏ thành công.', + 'Unable to remove this category.' => 'Không thể xóa loại này.', + 'Category modification for the project "%s"' => 'Sửa đổi loại cho dự án "%s"', + 'Category Name' => 'Tên danh mục', + 'Add a new category' => 'Thêm một loại mới', + 'Do you really want to remove this category: "%s"?' => 'Bạn có thực sự muốn loại bỏ loại này: "%s"?', + 'All categories' => 'Tất cả danh mục', + 'No category' => 'Không có loại', + 'The name is required' => 'Tên là bắt buộc', + 'Remove a file' => 'Hủy bỏ một tập tin', + 'Unable to remove this file.' => 'Không thể xóa tệp này.', + 'File removed successfully.' => 'Đã xoá tệp thành công.', + 'Attach a document' => 'Đính kèm một tài liệu', + 'Do you really want to remove this file: "%s"?' => 'Bạn có thực sự muốn xóa tệp này: "%s"?', + 'Attachments' => 'File đính kèm', + 'Edit the task' => 'Chỉnh sửa nhiệm vụ', + 'Add a comment' => 'Thêm nhận xét', + 'Edit a comment' => 'Chỉnh sửa một nhận xét', + 'Summary' => 'Tóm lược', + 'Time tracking' => 'Theo dõi thời gian', + 'Estimate:' => 'Ước tính:', + 'Spent:' => 'Spent:', + 'Do you really want to remove this sub-task?' => 'Bạn có thật sự muốn loại bỏ nhiệm vụ phụ này?', + 'Remaining:' => 'Còn lại:', + 'hours' => 'giờ', + 'spent' => 'chi tiêu', + 'estimated' => 'ước tính', + 'Sub-Tasks' => 'Nhiệm vụ phụ', + 'Add a sub-task' => 'Thêm một nhiệm vụ phụ', + 'Original estimate' => 'Ước tính ban đầu', + 'Create another sub-task' => 'Tạo một nhiệm vụ phụ khác', + 'Time spent' => 'Thời gian đã bỏ ra', + 'Edit a sub-task' => 'Chỉnh sửa một tiểu nhiệm vụ', + 'Remove a sub-task' => 'Loại bỏ một nhiệm vụ phụ', + 'The time must be a numeric value' => 'Thời gian phải là một giá trị số', + 'Todo' => 'Làm', + 'In progress' => 'Trong tiến trình', + 'Sub-task removed successfully.' => 'Nhiệm vụ phụ được xoá thành công.', + 'Unable to remove this sub-task.' => 'Không thể loại bỏ nhiệm vụ phụ này.', + 'Sub-task updated successfully.' => 'Tiểu nhiệm vụ được cập nhật thành công.', + 'Unable to update your sub-task.' => 'Không thể cập nhật tiểu nhiệm vụ của bạn.', + 'Unable to create your sub-task.' => 'Không thể tạo ra nhiệm vụ phụ của bạn.', + 'Maximum size: ' => 'Kích thước tối đa: ', + 'Display another project' => 'Hiển thị một dự án khác', + 'Created by %s' => 'Đã tạo bởi %s', + 'Tasks Export' => 'Nhiệm vụ xuất khẩu', + 'Start Date' => 'Ngày bắt đầu', + 'Execute' => 'Thực hiện', + 'Task Id' => 'Nhiệm vụ Id', + 'Creator' => 'Người sáng tạo', + 'Modification date' => 'Ngày sửa đổi', + 'Completion date' => 'Ngày kết thúc', + 'Clone' => 'Clone', + 'Project cloned successfully.' => 'Dự án nhân bản thành công.', + 'Unable to clone this project.' => 'Không thể nhân bản dự án này.', + 'Enable email notifications' => 'Bật thông báo qua email', + 'Task position:' => 'Nhiệm vụ:', + 'The task #%d have been opened.' => 'Nhiệm vụ #%d đã được mở ra.', + 'The task #%d have been closed.' => 'Nhiệm vụ #%d đã được đóng lại.', + 'Sub-task updated' => 'Tiểu nhiệm vụ cập nhật', + 'Title:' => 'Chức vụ:', + 'Status:' => 'Trạng thái:', + 'Assignee:' => 'Người được chuyển nhượng:', + 'Time tracking:' => 'Theo dõi thời gian:', + 'New sub-task' => 'Nhiệm vụ phụ mới', + 'New attachment added "%s"' => 'Tập tin đính kèm mới được thêm vào "%s"', + 'New comment posted by %s' => 'Bình luận mới được đăng bởi %s', + 'New comment' => 'Bình luận mới', + 'Comment updated' => 'Bình luận cập nhật', + 'New subtask' => 'Bổ sung phụ', + 'I want to receive notifications only for those projects:' => 'Tôi chỉ muốn nhận thông báo cho các dự án đó:', + 'view the task on Kanboard' => 'xem công việc trên Kanboard', + 'Public access' => 'Truy cập công cộng', + 'Disable public access' => 'Vô hiệu hoá quyền truy cập công cộng', + 'Enable public access' => 'Bật quyền truy cập công cộng', + 'Public access disabled' => 'Truy cập công cộng bị vô hiệu hóa', + 'Move the task to another project' => 'Di chuyển công việc sang dự án khác', + 'Move to another project' => 'Chuyển sang dự án khác', + 'Do you really want to duplicate this task?' => 'Bạn có thực sự muốn lặp lại nhiệm vụ này?', + 'Duplicate a task' => 'Nhân đôi một nhiệm vụ', + 'External accounts' => 'Tài khoản bên ngoài', + 'Account type' => 'Kiểu tài khoản', + 'Local' => 'Địa phương', + 'Remote' => 'Xa', + 'Enabled' => 'Bật', + 'Disabled' => 'Vô hiệu', + 'Login:' => 'Đăng nhập:', + 'Full Name:' => 'Họ và tên:', + 'Email:' => 'E-mail:', + 'Notifications:' => 'Thông báo:', + 'Notifications' => 'Thông báo', + 'Account type:' => 'Kiểu tài khoản:', + 'Edit profile' => 'Chỉnh sửa hồ sơ', + 'Change password' => 'Đổi mật khẩu', + 'Password modification' => 'Sửa đổi mật khẩu', + 'External authentications' => 'Xác thực bên ngoài', + 'Never connected.' => 'Không bao giờ kết nối.', + 'No external authentication enabled.' => 'Không bật xác thực bên ngoài.', + 'Password modified successfully.' => 'Đã sửa đổi mật khẩu thành công.', + 'Unable to change the password.' => 'Không thể thay đổi mật khẩu.', + 'Change category' => 'Thay đổi loại', + '%s updated the task %s' => ' %s đã cập nhật công việc %s', + '%s opened the task %s' => ' %s mở nhiệm vụ %s', + '%s moved the task %s to the position #%d in the column "%s"' => ' %s di chuyển nhiệm vụ %s đến vị trí #%d trong cột "%s"', + '%s moved the task %s to the column "%s"' => ' %s di chuyển công việc %s đến cột "%s"', + '%s created the task %s' => ' %s đã tạo ra nhiệm vụ %s', + '%s closed the task %s' => ' %s đã đóng công việc %s', + '%s created a subtask for the task %s' => ' %s tạo ra một phụ cho nhiệm vụ %s', + '%s updated a subtask for the task %s' => ' %s cập nhật một công việc phụ cho nhiệm vụ %s', + 'Assigned to %s with an estimate of %s/%sh' => 'Được giao cho %s với ước tính %s / %sh', + 'Not assigned, estimate of %sh' => 'Không được chỉ định, ước tính %sh', + '%s updated a comment on the task %s' => ' %s đã cập nhật một bình luận về nhiệm vụ %s', + '%s commented the task %s' => ' %s bình luận về nhiệm vụ %s', + '%s\'s activity' => 'Hoạt động của %s', + 'RSS feed' => 'Nguồn cấp dữ liệu RSS', + '%s updated a comment on the task #%d' => ' %s đã cập nhật một bình luận về nhiệm vụ #%d', + '%s commented on the task #%d' => ' %s bình luận về nhiệm vụ #%d', + '%s updated a subtask for the task #%d' => ' %s đã cập nhật một công việc phụ cho nhiệm vụ #%d', + '%s created a subtask for the task #%d' => ' %s tạo ra một phụ cho nhiệm vụ #%d', + '%s updated the task #%d' => ' %s cập nhật công việc #%d', + '%s created the task #%d' => ' %s đã tạo ra nhiệm vụ #%d', + '%s closed the task #%d' => ' %s đã đóng công việc #%d', + '%s opened the task #%d' => ' %s mở nhiệm vụ #%d', + 'Activity' => 'Hoạt động', + 'Default values are "%s"' => 'Giá trị mặc định là "%s"', + 'Default columns for new projects (Comma-separated)' => 'Cột mặc định cho các dự án mới (tách bằng dấu phẩy)', + 'Task assignee change' => 'Thay đổi nhiệm vụ chuyển nhượng', + '%s changed the assignee of the task #%d to %s' => ' %s đã thay đổi người được giao nhiệm vụ #%d thành %s', + '%s changed the assignee of the task %s to %s' => ' %s đã thay đổi người được giao nhiệm vụ %s sang %s', + 'New password for the user "%s"' => 'Mật khẩu mới cho người dùng "%s"', + 'Choose an event' => 'Chọn một sự kiện', + 'Create a task from an external provider' => 'Tạo một nhiệm vụ từ một nhà cung cấp bên ngoài', + 'Change the assignee based on an external username' => 'Thay đổi người được chuyển nhượng dựa trên tên người dùng bên ngoài', + 'Change the category based on an external label' => 'Thay đổi thể loại dựa trên một nhãn bên ngoài', + 'Reference' => 'Tài liệu tham khảo', + 'Label' => 'Nhãn', + 'Database' => 'Cơ sở dữ liệu', + 'About' => 'Về', + 'Database driver:' => 'Trình điều khiển cơ sở dữ liệu:', + 'Board settings' => 'Cài đặt Bảng', + 'Webhook settings' => 'Cài đặt Webhook', + 'Reset token' => 'Đặt lại mã thông báo', + 'API endpoint:' => 'Điểm cuối API:', + 'Refresh interval for private board' => 'Khoảng thời gian làm mới cho bảng cá nhân', + 'Refresh interval for public board' => 'Khoảng thời gian làm mới cho hội đồng quản trị', + 'Task highlight period' => 'Nhiệm vụ thời gian nổi bật', + 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Thời gian (thứ hai) để xem xét một tác vụ đã được sửa đổi gần đây (0 để vô hiệu hoá, 2 ngày theo mặc định)', + 'Frequency in second (60 seconds by default)' => 'Tần số trong giây (mặc định 60 giây)', + 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Tần số trong giây (0 để tắt tính năng này, mặc định là 10 giây)', + 'Application URL' => 'URL ứng dụng', + 'Token regenerated.' => 'Token tái tạo.', + 'Date format' => 'Định dạng ngày tháng', + 'ISO format is always accepted, example: "%s" and "%s"' => 'Định dạng ISO luôn được chấp nhận, ví dụ: "%s" và "%s"', + 'New private project' => 'Dự án riêng tư mới', + 'This project is private' => 'Dự án này là riêng tư', + 'Add' => 'Thêm vào', + 'Start date' => 'Ngày bắt đầu', + 'Time estimated' => 'Thời gian ước tính', + 'There is nothing assigned to you.' => 'Không có gì được giao cho bạn.', + 'My tasks' => 'Nhiệm vụ của tôi', + 'Activity stream' => 'Luồng hoạt động', + 'Dashboard' => 'Bảng điều khiển', + 'Confirmation' => 'Xác nhận', + 'Webhooks' => 'Webhooks', + 'API' => 'API', + 'Create a comment from an external provider' => 'Tạo một bình luận từ một nhà cung cấp bên ngoài', + 'Project management' => 'Quản lý dự án', + 'Columns' => 'Cột', + 'Task' => 'Bài tập', + 'Percentage' => 'Phần trăm', + 'Number of tasks' => 'Số nhiệm vụ', + 'Task distribution' => 'Phân phát nhiệm vụ', + 'Analytics' => 'Phân tích', + 'Subtask' => 'Subtask', + 'User repartition' => 'Phân vùng người dùng', + 'Clone this project' => 'Nhân bản dự án này', + 'Column removed successfully.' => 'Bỏ cột thành công.', + 'Not enough data to show the graph.' => 'Không đủ dữ liệu để hiển thị đồ thị.', + 'Previous' => 'Trước', + 'The id must be an integer' => 'Id phải là một số nguyên', + 'The project id must be an integer' => 'Id dự án phải là một số nguyên', + 'The status must be an integer' => 'Trạng thái phải là một số nguyên', + 'The subtask id is required' => 'Cần phải có id phụ đề', + 'The subtask id must be an integer' => 'Số thứ tự subtask phải là một số nguyên', + 'The task id is required' => 'ID công việc được yêu cầu', + 'The task id must be an integer' => 'ID công việc phải là một số nguyên', + 'The user id must be an integer' => 'ID người dùng phải là một số nguyên', + 'This value is required' => 'Giá trị này là bắt buộc', + 'This value must be numeric' => 'Giá trị này phải là số', + 'Unable to create this task.' => 'Không thể tạo ra nhiệm vụ này.', + 'Cumulative flow diagram' => 'Sơ đồ luồng tích luỹ', + 'Daily project summary' => 'Tóm tắt dự án hàng ngày', + 'Daily project summary export' => 'Tóm tắt dự án hàng ngày xuất khẩu', + 'Exports' => 'Xuất khẩu', + 'This export contains the number of tasks per column grouped per day.' => 'Xuất này có chứa số nhiệm vụ cho mỗi cột được nhóm trong một ngày.', + 'Active swimlanes' => 'Đường phố hoạt động', + 'Add a new swimlane' => 'Thêm một đường swimlane mới', + 'Default swimlane' => 'Mặc định swimlane', + 'Do you really want to remove this swimlane: "%s"?' => 'Bạn có thực sự muốn loại bỏ swimlane này: "%s"?', + 'Inactive swimlanes' => 'Bể swimlane không hoạt động', + 'Remove a swimlane' => 'Hủy bỏ swimlane lội', + 'Swimlane modification for the project "%s"' => 'Sửa đổi Swimlane cho dự án %s', + 'Swimlane removed successfully.' => 'Swimlane đã được gỡ bỏ thành công.', + 'Swimlanes' => 'Swimlanes', + 'Swimlane updated successfully.' => 'Swimlane được cập nhật thành công.', + 'Unable to remove this swimlane.' => 'Không thể tháo dải swimlane ra.', + 'Unable to update this swimlane.' => 'Không thể cập nhật swimlane lội này.', + 'Your swimlane have been created successfully.' => 'Làn sóng của bạn đã được tạo ra thành công.', + 'Example: "Bug, Feature Request, Improvement"' => 'Ví dụ: "Lỗi, yêu cầu tính năng, cải tiến"', + 'Default categories for new projects (Comma-separated)' => 'Danh mục mặc định cho các dự án mới (Phân cách bằng dấu phẩy)', + 'Integrations' => 'Tích hợp', + 'Integration with third-party services' => 'Tích hợp với các dịch vụ của bên thứ ba', + 'Subtask Id' => 'Id phụ đề', + 'Subtasks' => 'Công việc', + 'Subtasks Export' => 'Nhiệm vụ xuất khẩu', + 'Task Title' => 'Nhiệm vụ', + 'Untitled' => 'Không có tiêu đề', + 'Application default' => 'Mặc định ứng dụng', + 'Language:' => 'Ngôn ngữ:', + 'Timezone:' => 'Múi giờ:', + 'All columns' => 'Tất cả các cột', + 'Next' => 'Kế tiếp', + '#%d' => '#%d', + 'All swimlanes' => 'Tất cả swimlane', + 'All colors' => 'Đủ màu sắc', + 'Moved to column %s' => 'Đã chuyển đến cột %s', + 'User dashboard' => 'Trang tổng quan của người dùng', + 'Allow only one subtask in progress at the same time for a user' => 'Cho phép chỉ có một phụ đề đang được tiến hành đồng thời cho một người dùng', + 'Edit column "%s"' => 'Chỉnh sửa cột %s ', + 'Select the new status of the subtask: "%s"' => 'Chọn trạng thái mới của phụ đề: "%s"', + 'Subtask timesheet' => 'Lịch biểu phụ đề', + 'There is nothing to show.' => 'Không có gì để hiển thị.', + 'Time Tracking' => 'Theo dõi Thời gian', + 'You already have one subtask in progress' => 'Bạn đã có một phụ trong tiến trình', + 'Which parts of the project do you want to duplicate?' => 'Bạn muốn nhân bản phần nào của dự án?', + 'Disallow login form' => 'Disallow form đăng nhập', + 'Start' => 'Khởi đầu', + 'End' => 'Kết thúc', + 'Task age in days' => 'Nhiệm vụ tuổi tác trong ngày', + 'Days in this column' => 'Ngày trong cột này', + '%dd' => '%dd', + 'Add a new link' => 'Thêm một liên kết mới', + 'Do you really want to remove this link: "%s"?' => 'Bạn có thực sự muốn xoá liên kết này: "%s"?', + 'Do you really want to remove this link with task #%d?' => 'Bạn có thực sự muốn loại bỏ liên kết này với công việc #%d?', + 'Field required' => 'Trường bắt buộc', + 'Link added successfully.' => 'Liên kết thành công.', + 'Link updated successfully.' => 'Liên kết được cập nhật thành công.', + 'Link removed successfully.' => 'Liên kết đã xoá thành công.', + 'Link labels' => 'Liên kết nhãn', + 'Link modification' => 'Liên kết sửa đổi', + 'Links' => 'Liên kết', + 'Opposite label' => 'Ngược lại nhãn', + 'Remove a link' => 'Hủy liên kết', + 'The labels must be different' => 'Các nhãn phải khác nhau', + 'There is no link.' => 'Không có liên kết.', + 'This label must be unique' => 'Nhãn này phải là duy nhất', + 'Unable to create your link.' => 'Không thể tạo liên kết của bạn.', + 'Unable to update your link.' => 'Không thể cập nhật liên kết của bạn.', + 'Unable to remove this link.' => 'Không thể xóa liên kết này.', + 'relates to' => 'liên quan tới', + 'blocks' => 'khối', + 'is blocked by' => 'bị chặn bởi', + 'duplicates' => 'bản sao', + 'is duplicated by' => 'được nhân đôi bởi', + 'is a child of' => 'là một đứa trẻ', + 'is a parent of' => 'là cha mẹ của', + 'targets milestone' => 'mục tiêu cột mốc', + 'is a milestone of' => 'là một mốc quan trọng của', + 'fixes' => 'sửa lỗi', + 'is fixed by' => 'được sửa bởi', + 'This task' => 'Nhiệm vụ này', + '<1h' => '<1 giờ', + '%dh' => '%dh', + 'Expand tasks' => 'Mở rộng các nhiệm vụ', + 'Collapse tasks' => 'Thu hẹp nhiệm vụ', + 'Expand/collapse tasks' => 'Mở rộng / thu gọn nhiệm vụ', + 'Close dialog box' => 'Đóng hộp thoại', + 'Submit a form' => 'Gửi một mẫu', + 'Board view' => 'Quan điểm của hội đồng quản trị', + 'Keyboard shortcuts' => 'Các phím tắt bàn phím', + 'Open board switcher' => 'Open board switcher', + 'Application' => 'Ứng dụng', + 'Compact view' => 'Chế độ xem nhỏ gọn', + 'Horizontal scrolling' => 'Cuộn ngang', + 'Compact/wide view' => 'Chế độ xem nhỏ gọn / rộng', + 'Currency' => 'Tiền tệ', + 'Private project' => 'Dự án riêng tư', + 'AUD - Australian Dollar' => 'AUD - Đô la Úc', + 'CAD - Canadian Dollar' => 'CAD - Đô la Canada', + 'CHF - Swiss Francs' => 'CHF - Swiss Francs', + 'Custom Stylesheet' => 'Biểu định kiểu Tuỳ chỉnh', + 'download' => 'tải về', + 'EUR - Euro' => 'EUR - Euro', + 'GBP - British Pound' => 'GBP - Bảng Anh', + 'INR - Indian Rupee' => 'INR - Rupi Ấn Độ', + 'JPY - Japanese Yen' => 'JPY - Yên Nhật', + 'NZD - New Zealand Dollar' => 'NZD - Đô la New Zealand', + 'RSD - Serbian dinar' => 'RSD - dinar Serbia', + 'CNY - Chinese Yuan' => 'CNY - Yuan Trung Quốc', + 'USD - US Dollar' => 'Đô la Mỹ - Đô la Mỹ', + 'Destination column' => 'Cột đích', + 'Move the task to another column when assigned to a user' => 'Chuyển nhiệm vụ sang cột khác khi được chỉ định cho người dùng', + 'Move the task to another column when assignee is cleared' => 'Di chuyển nhiệm vụ sang cột khác khi người nhận chuyển giao bị xóa', + 'Source column' => 'Cột nguồn', + 'Transitions' => 'Chuyển tiếp', + 'Executer' => 'Executer', + 'Time spent in the column' => 'Thời gian trong cột', + 'Task transitions' => 'Nhiệm vụ chuyển tiếp', + 'Task transitions export' => 'Nhiệm vụ chuyển tiếp xuất khẩu', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => 'Báo cáo này chứa tất cả các cột di chuyển cho mỗi nhiệm vụ với ngày, người sử dụng và thời gian dành cho mỗi quá trình chuyển đổi.', + 'Currency rates' => 'Tỷ giá tiền tệ', + 'Rate' => 'Tỷ lệ', + 'Change reference currency' => 'Thay đổi đồng tiền tham chiếu', + 'Reference currency' => 'Tiền tệ tham khảo', + 'The currency rate have been added successfully.' => 'Tỷ giá đã được thêm thành công.', + 'Unable to add this currency rate.' => 'Không thể thêm tỷ giá tiền tệ này.', + 'Webhook URL' => 'Webhook URL', + '%s removed the assignee of the task %s' => ' %s loại bỏ người nhận chuyển nhượng của nhiệm vụ %s', + 'Information' => 'Thông tin', + 'Check two factor authentication code' => 'Kiểm tra mã xác thực hai lớp', + 'The two factor authentication code is not valid.' => 'Mã xác thực hai lớp không hợp lệ.', + 'The two factor authentication code is valid.' => 'Mã xác thực hai lớp là hợp lệ.', + 'Code' => 'Mã', + 'Two factor authentication' => 'Xác thực hai lớp', + 'This QR code contains the key URI: ' => 'Mã QR này có chứa URI chính:', + 'Check my code' => 'Kiểm tra mã của tôi', + 'Secret key: ' => 'Chìa khoá bí mật: ', + 'Test your device' => 'Kiểm tra thiết bị của bạn', + 'Assign a color when the task is moved to a specific column' => 'Chỉ định một màu khi công việc được chuyển đến một cột cụ thể', + '%s via Kanboard' => ' %s qua Kanboard', + 'Burndown chart' => 'Biểu đồ Burndown', + 'This chart show the task complexity over the time (Work Remaining).' => 'Biểu đồ này cho thấy sự phức tạp của công việc qua thời gian (Work Remaining).', + 'Screenshot taken %s' => 'Đã chụp ảnh chụp màn hình %s', + 'Add a screenshot' => 'Thêm ảnh chụp màn hình', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => 'Chụp ảnh màn hình và nhấn CTRL + V hoặc ⌘ + V để dán vào đây.', + 'Screenshot uploaded successfully.' => 'Ảnh chụp màn hình được tải lên thành công.', + 'SEK - Swedish Krona' => 'SEK - Krona Thu Swedish Điển', + 'Identifier' => 'Bộ nhận dạng', + 'Disable two factor authentication' => 'Vô hiệu hoá hai lớp xác thực', + 'Do you really want to disable the two factor authentication for this user: "%s"?' => 'Bạn có thực sự muốn vô hiệu hóa xác thực hai lớp cho người dùng này: "%s"?', + 'Edit link' => 'Chỉnh sửa liên kết', + 'Start to type task title...' => 'Bắt đầu gõ tên tác vụ ...', + 'A task cannot be linked to itself' => 'Một nhiệm vụ không thể được liên kết với chính nó', + 'The exact same link already exists' => 'Liên kết chính xác đã tồn tại', + 'Recurrent task is scheduled to be generated' => 'Nhiệm vụ lặp lại được dự kiến sẽ được tạo ra', + 'Score' => 'Ghi bàn', + 'The identifier must be unique' => 'Mã nhận diện phải là duy nhất', + 'This linked task id doesn\'t exists' => 'Không có id công việc liên kết nào tồn tại', + 'This value must be alphanumeric' => 'Giá trị này phải là chữ số', + 'Edit recurrence' => 'Chỉnh sửa sự tái phát', + 'Generate recurrent task' => 'Tạo ra công việc lặp đi lặp lại', + 'Trigger to generate recurrent task' => 'Trigger để tạo ra công việc lặp đi lặp lại', + 'Factor to calculate new due date' => 'Yếu tố tính ngày đáo hạn mới', + 'Timeframe to calculate new due date' => 'Khung thời gian để tính toán ngày đáo hạn mới', + 'Base date to calculate new due date' => 'Base date để tính ngày đáo hạn mới', + 'Action date' => 'Ngày hành động', + 'Base date to calculate new due date: ' => 'Căn cứ để tính ngày đáo hạn mới:', + 'This task has created this child task: ' => 'Nhiệm vụ này đã tạo ra nhiệm vụ con này:', + 'Day(s)' => 'Ngày', + 'Existing due date' => 'Ngày hết hạn', + 'Factor to calculate new due date: ' => 'Yếu tố tính ngày đáo hạn mới:', + 'Month(s)' => 'Tháng)', + 'Recurrence' => 'Sự tái xuất', + 'This task has been created by: ' => 'Nhiệm vụ này đã được tạo ra bằng cách:', + 'Recurrent task has been generated:' => 'Nhiệm vụ lặp lại đã được tạo ra:', + 'Timeframe to calculate new due date: ' => 'Khung thời gian tính ngày đáo hạn mới:', + 'Trigger to generate recurrent task: ' => 'Kích hoạt để tạo ra công việc lặp đi lặp lại:', + 'When task is closed' => 'Khi công việc được đóng lại', + 'When task is moved from first column' => 'Khi công việc được di chuyển từ cột đầu tiên', + 'When task is moved to last column' => 'Khi công việc được chuyển đến cột cuối cùng', + 'Year(s)' => 'Năm (s)', + 'Project settings' => 'Cài đặt dự án', + 'Automatically update the start date' => 'Tự động cập nhật ngày bắt đầu', + 'iCal feed' => 'nguồn cấp dữ liệu iCal', + 'Preferences' => 'Sở thích', + 'Security' => 'An ninh', + 'Two factor authentication disabled' => 'Xác thực hai lớp bị vô hiệu', + 'Two factor authentication enabled' => 'Kích hoạt chứng thực hai lớp', + 'Unable to update this user.' => 'Không thể cập nhật người dùng này.', + 'There is no user management for private projects.' => 'Không có người quản lý người dùng cho các dự án riêng tư.', + 'User that will receive the email' => 'Người dùng sẽ nhận được email', + 'Email subject' => 'Chủ đề email', + 'Date' => 'Ngày', + 'Add a comment log when moving the task between columns' => 'Thêm nhật ký nhận xét khi di chuyển nhiệm vụ giữa các cột', + 'Move the task to another column when the category is changed' => 'Di chuyển công việc sang cột khác khi danh mục được thay đổi', + 'Send a task by email to someone' => 'Gửi một nhiệm vụ qua email cho ai đó', + 'Reopen a task' => 'Mở lại một nhiệm vụ', + 'Notification' => 'Thông báo', + '%s moved the task #%d to the first swimlane' => ' %s di chuyển nhiệm vụ #%d đến người đầu tiên swimlane', + 'Swimlane' => 'Swimlane', + '%s moved the task %s to the first swimlane' => ' %s di chuyển nhiệm vụ %s tới swimlane đầu tiên', + '%s moved the task %s to the swimlane "%s"' => ' %s di chuyển nhiệm vụ %s tới swimlane lội "%s"', + 'This report contains all subtasks information for the given date range.' => 'Báo cáo này chứa tất cả các thông tin phụ cho một phạm vi ngày.', + 'This report contains all tasks information for the given date range.' => 'Báo cáo này chứa tất cả các nhiệm vụ thông tin cho phạm vi ngày nhất định.', + 'Project activities for %s' => 'Các hoạt động dự án cho %s', + 'view the board on Kanboard' => 'xem bảng trên Kanboard', + 'The task have been moved to the first swimlane' => 'Nhiệm vụ đã được dời đến sân vận động đầu tiên', + 'The task have been moved to another swimlane:' => 'Nhiệm vụ đã được chuyển sang một đội swimlane khác: ', + 'New title: %s' => 'Tiêu đề mới: %s', + 'The task is not assigned anymore' => 'Nhiệm vụ không được giao nữa', + 'New assignee: %s' => 'Người được chuyển nhượng mới: %s', + 'There is no category now' => 'Không có danh mục bây giờ', + 'New category: %s' => 'Thể loại mới: %s', + 'New color: %s' => 'Màu mới: %s', + 'New complexity: %d' => 'Sự phức tạp mới: %d', + 'The due date have been removed' => 'Ngày đáo hạn đã bị xoá', + 'There is no description anymore' => 'Không còn mô tả nữa', + 'Recurrence settings have been modified' => 'Cài đặt tái lập đã được sửa đổi', + 'Time spent changed: %sh' => 'Thời gian thay đổi: %sh', + 'Time estimated changed: %sh' => 'Thời gian ước tính thay đổi: %sh', + 'The field "%s" have been updated' => 'Trường "%s" đã được cập nhật', + 'The description has been modified:' => 'Mô tả đã được sửa đổi:', + 'Do you really want to close the task "%s" as well as all subtasks?' => 'Bạn có thực sự muốn đóng nhiệm vụ "%s" cũng như tất cả các nhiệm vụ phụ?', + 'I want to receive notifications for:' => 'Tôi muốn nhận thông báo cho:', + 'All tasks' => 'Tất cả các nhiệm vụ', + 'Only for tasks assigned to me' => 'Chỉ đối với những nhiệm vụ được giao cho tôi', + 'Only for tasks created by me' => 'Chỉ cho những công việc do tôi tạo ra', + 'Only for tasks created by me and assigned to me' => 'Chỉ cho những công việc mà tôi tạo ra và được giao cho tôi', + '%%Y-%%m-%%d' => '%%Y - %%m - %%d', + 'Total for all columns' => 'Tổng cho tất cả các cột', + 'You need at least 2 days of data to show the chart.' => 'Bạn cần ít nhất 2 ngày dữ liệu để hiển thị biểu đồ.', + '<15m' => '<15m', + '<30m' => '<30m', + 'Stop timer' => 'Ngừng hẹn giờ', + 'Start timer' => 'Bắt đầu hẹn giờ', + 'My activity stream' => 'Dòng hoạt động của tôi', + 'Search tasks' => 'Các nhiệm vụ tìm kiếm', + 'Reset filters' => 'Đặt lại bộ lọc', + 'My tasks due tomorrow' => 'Nhiệm vụ của tôi vào ngày mai', + 'Tasks due today' => 'Nhiệm vụ hôm nay', + 'Tasks due tomorrow' => 'Nhiệm vụ vào ngày mai', + 'Tasks due yesterday' => 'Nhiệm vụ do ngày hôm qua', + 'Closed tasks' => 'Các nhiệm vụ đã đóng', + 'Open tasks' => 'Mở nhiệm vụ', + 'Not assigned' => 'Không được chỉ định', + 'View advanced search syntax' => 'Xem cú pháp tìm kiếm nâng cao', + 'Overview' => 'Tổng quan', + 'Board/Calendar/List view' => 'Chế độ xem hội đồng quản trị / lịch / danh sách', + 'Switch to the board view' => 'Chuyển sang chế độ xem bảng', + 'Switch to the list view' => 'Chuyển sang chế độ xem danh sách', + 'Go to the search/filter box' => 'Đi tới hộp tìm kiếm / bộ lọc', + 'There is no activity yet.' => 'Không có hoạt động nào.', + 'No tasks found.' => 'Không tìm thấy công việc nào.', + 'Keyboard shortcut: "%s"' => 'Các phím tắt bàn phím "%s"', + 'List' => 'Danh sách', + 'Filter' => 'Lọc', + 'Advanced search' => 'Tìm kiếm nâng cao', + 'Example of query: ' => 'Ví dụ về truy vấn:', + 'Search by project: ' => 'Tìm kiếm theo dự án:', + 'Search by column: ' => 'Tìm kiếm theo cột:', + 'Search by assignee: ' => 'Tìm kiếm bởi người được chuyển nhượng:', + 'Search by color: ' => 'Tìm kiếm theo màu sắc:', + 'Search by category: ' => 'Tìm kiếm theo thể loại:', + 'Search by description: ' => 'Tìm theo mô tả:', + 'Search by due date: ' => 'Tìm kiếm theo ngày đáo hạn:', + 'Average time spent into each column' => 'Thời gian trung bình dành cho từng cột', + 'Average time spent' => 'Thời gian trung bình dành', + 'This chart show the average time spent into each column for the last %d tasks.' => 'Biểu đồ này cho thấy thời gian trung bình dành cho mỗi cột cho các tác vụ %d cuối cùng.', + 'Average Lead and Cycle time' => 'Thời gian trung bình và thời gian chu kỳ', + 'Average lead time: ' => 'Thời gian dẫn trung bình:', + 'Average cycle time: ' => 'Thời gian chu kỳ trung bình:', + 'Cycle Time' => 'Thời gian chu kỳ', + 'Lead Time' => 'Chì Thời gian', + 'This chart show the average lead and cycle time for the last %d tasks over the time.' => 'Biểu đồ này cho thấy thời gian dẫn và thời gian trung bình cho các tác vụ %d cuối cùng qua thời gian.', + 'Average time into each column' => 'Thời gian trung bình vào mỗi cột', + 'Lead and cycle time' => 'Chì và thời gian chu kỳ', + 'Lead time: ' => 'Chì thời gian:', + 'Cycle time: ' => 'Thời gian chu kỳ: ', + 'Time spent into each column' => 'Thời gian dành cho từng cột', + 'The lead time is the duration between the task creation and the completion.' => 'Thời gian dẫn là khoảng thời gian giữa nhiệm vụ sáng tạo và hoàn thành.', + 'The cycle time is the duration between the start date and the completion.' => 'Thời gian chu kỳ là khoảng thời gian giữa ngày bắt đầu và ngày hoàn thành.', + 'If the task is not closed the current time is used instead of the completion date.' => 'Nếu nhiệm vụ không đóng thì thời gian hiện tại được sử dụng thay vì ngày hoàn thành.', + 'Set automatically the start date' => 'Đặt tự động ngày bắt đầu', + 'Edit Authentication' => 'Chỉnh sửa Xác thực', + 'Remote user' => 'Người dùng từ xa', + 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => 'Người dùng từ xa không lưu mật khẩu của họ trong cơ sở dữ liệu Kanboard, ví dụ: LDAP, Google và Github.', + 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => 'Nếu bạn đánh dấu ô "Disallow form đăng nhập", các thông tin đăng nhập vào mẫu đăng nhập sẽ bị bỏ qua.', + 'Default task color' => 'Màu nhiệm vụ mặc định', + 'This feature does not work with all browsers.' => 'Tính năng này không hoạt động với tất cả các trình duyệt.', + 'There is no destination project available.' => 'Không có dự án điểm đến có sẵn.', + 'Trigger automatically subtask time tracking' => 'Trigger tự động theo dõi thời gian theo dõi', + 'Include closed tasks in the cumulative flow diagram' => 'Bao gồm các nhiệm vụ đã đóng trong sơ đồ luồng tích lũy', + 'Current swimlane: %s' => 'Dòng swimlane hiện tại: %s', + 'Current column: %s' => 'Cột hiện tại: %s', + 'Current category: %s' => 'Thể loại hiện tại: %s', + 'no category' => 'không có loại', + 'Current assignee: %s' => 'Đang chuyển nhượng hiện tại: %s', + 'not assigned' => 'không được chỉ định', + 'Author:' => 'Tác giả:', + 'contributors' => 'người đóng góp', + 'License:' => 'Giấy phép:', + 'License' => 'Giấy phép', + 'Enter the text below' => 'Nhập văn bản dưới đây', + 'Start date:' => 'Ngày bắt đầu:', + 'Due date:' => 'Ngày đáo hạn:', + 'People who are project managers' => 'Những người quản lý dự án', + 'People who are project members' => 'Những người là thành viên của dự án', + 'NOK - Norwegian Krone' => 'NOK - Krone Na Uy', + 'Show this column' => 'Hiển thị cột này', + 'Hide this column' => 'Ẩn cột này', + 'open file' => 'mở tập tin', + 'End date' => 'Ngày cuối', + 'Users overview' => 'Tổng quan người dùng', + 'Members' => 'Các thành viên', + 'Shared project' => 'Dự án được chia sẻ', + 'Project managers' => 'Quản lý dự án', + 'Projects list' => 'Danh sách các dự án', + 'End date:' => 'Ngày cuối:', + 'Change task color when using a specific task link' => 'Thay đổi màu nhiệm vụ khi sử dụng liên kết nhiệm vụ cụ thể', + 'Task link creation or modification' => 'Tạo hoặc sửa đổi liên kết nhiệm vụ', + 'Milestone' => 'Milestone', + 'Documentation: %s' => 'Tài liệu: %s', + 'Reset the search/filter box' => 'Đặt lại hộp tìm kiếm / bộ lọc', + 'Documentation' => 'Tài liệu hướng dẫn', + 'Table of contents' => 'Mục lục', + 'Author' => 'Tác giả', + 'Version' => 'Phiên bản', + 'Plugins' => 'Plugins', + 'There is no plugin loaded.' => 'Không có plugin nạp.', + 'My notifications' => 'Thông báo của tôi', + 'Custom filters' => 'Bộ lọc tùy chỉnh', + 'Your custom filter have been created successfully.' => 'Bộ lọc tuỳ chỉnh của bạn đã được tạo thành công.', + 'Unable to create your custom filter.' => 'Không thể tạo bộ lọc tuỳ chỉnh của bạn.', + 'Custom filter removed successfully.' => 'Đã xoá bộ lọc tùy chỉnh.', + 'Unable to remove this custom filter.' => 'Không thể xóa bộ lọc tùy chỉnh này.', + 'Edit custom filter' => 'Chỉnh sửa bộ lọc tùy chỉnh', + 'Your custom filter have been updated successfully.' => 'Bộ lọc tuỳ chỉnh của bạn đã được cập nhật thành công.', + 'Unable to update custom filter.' => 'Không thể cập nhật bộ lọc tuỳ chỉnh.', + 'Web' => 'Web', + 'New attachment on task #%d: %s' => 'Tập tin đính kèm mới trên task #%d: %s', + 'New comment on task #%d' => 'Ý kiến mới về nhiệm vụ #%d', + 'Comment updated on task #%d' => 'Bình luận cập nhật về nhiệm vụ #%d', + 'New subtask on task #%d' => 'Bổ sung phụ về nhiệm vụ #%d', + 'Subtask updated on task #%d' => 'Không cập nhật được nhiệm vụ #%d', + 'New task #%d: %s' => 'Nhiệm vụ mới %d: %s', + 'Task updated #%d' => 'Đã cập nhật nhiệm vụ #%d', + 'Task #%d closed' => 'Nhiệm vụ #%d đóng', + 'Task #%d opened' => 'Nhiệm vụ #%d mở', + 'Column changed for task #%d' => 'Đã thay đổi cột cho tác vụ #%d', + 'New position for task #%d' => 'Vị trí mới cho nhiệm vụ #%d', + 'Swimlane changed for task #%d' => 'Swimlane đã thay đổi cho nhiệm vụ #%d', + 'Assignee changed on task #%d' => 'Người được chỉ định thay đổi về nhiệm vụ #%d', + '%d overdue tasks' => '%d quá hạn tác vụ', + 'Task #%d is overdue' => 'Công việc #%d là quá hạn', + 'No notification.' => 'Không có thông báo.', + 'Mark all as read' => 'Đánh dấu tất cả như đã đọc', + 'Mark as read' => 'Đánh dấu là đã đọc', + 'Total number of tasks in this column across all swimlanes' => 'Tổng số công việc trong cột này trên tất cả các đường swimlane', + 'Collapse swimlane' => 'Thu gọn swimlane', + 'Expand swimlane' => 'Mở rộng swimlane lội', + 'Add a new filter' => 'Thêm một bộ lọc mới', + 'Share with all project members' => 'Chia sẻ với tất cả các thành viên dự án', + 'Shared' => 'Chia sẻ', + 'Owner' => 'Chủ nhân', + 'Unread notifications' => 'Thông báo chưa đọc', + 'Notification methods:' => 'Phương pháp thông báo:', + 'Unable to read your file' => 'Không thể đọc tập tin của bạn', + '%d task(s) have been imported successfully.' => '%d nhiệm vụ đã được nhập thành công.', + 'Nothing have been imported!' => 'Không có gì đã được nhập khẩu!', + 'Import users from CSV file' => 'Nhập khẩu người dùng từ tệp CSV', + '%d user(s) have been imported successfully.' => '%d người dùng đã được nhập thành công.', + 'Comma' => 'Comma', + 'Semi-colon' => 'Bán kết', + 'Tab' => 'Chuyển hướng', + 'Vertical bar' => 'Thanh dọc', + 'Double Quote' => 'Double Quote', + 'Single Quote' => 'Trích dẫn đơn', + '%s attached a file to the task #%d' => ' %s gắn một tập tin vào tác vụ #%d', + 'There is no column or swimlane activated in your project!' => 'Không có cột hoặc swimlane kích hoạt trong dự án của bạn!', + 'Append filter (instead of replacement)' => 'Thêm bộ lọc (thay vì thay thế)', + 'Append/Replace' => 'Thêm / Thay thế', + 'Append' => 'Thêm', + 'Replace' => 'Thay thế', + 'Import' => 'Nhập khẩu', + 'Change sorting' => 'Thay đổi phân loại', + 'Tasks Importation' => 'Nhiệm vụ Nhập khẩu', + 'Delimiter' => 'Delimiter', + 'Enclosure' => 'Bao vây', + 'CSV File' => 'CSV File', + 'Instructions' => 'Hướng dẫn', + 'Your file must use the predefined CSV format' => 'Tệp của bạn phải sử dụng định dạng CSV được xác định trước', + 'Your file must be encoded in UTF-8' => 'Tập tin của bạn phải được mã hoá bằng UTF-8', + 'The first row must be the header' => 'Hàng đầu tiên phải là tiêu đề', + 'Duplicates are not verified for you' => 'Bản sao không được xác minh cho bạn', + 'The due date must use the ISO format: YYYY-MM-DD' => 'Ngày đáo hạn phải sử dụng định dạng ISO: YYYY-MM-DD', + 'Download CSV template' => 'Tải xuống mẫu CSV', + 'No external integration registered.' => 'Không có tích hợp bên ngoài đăng ký.', + 'Duplicates are not imported' => 'Bản sao không được nhập', + 'Usernames must be lowercase and unique' => 'Tên người dùng phải là chữ thường và', + 'Passwords will be encrypted if present' => 'Mật khẩu sẽ được mã hóa nếu có', + '%s attached a new file to the task %s' => ' %s gắn một tập tin mới vào công việc %s', + 'Link type' => 'Loại liên kết', + 'Assign automatically a category based on a link' => 'Chỉ định tự động một thể loại dựa trên liên kết', + 'BAM - Konvertible Mark' => 'BAM - Konvertible Mark', + 'Assignee Username' => 'Assignee Username', + 'Assignee Name' => 'Người được chuyển nhượng', + 'Groups' => 'Các nhóm', + 'Members of %s' => 'Thành viên của %s', + 'New group' => 'Nhóm mới', + 'Group created successfully.' => 'Nhóm được tạo thành công.', + 'Unable to create your group.' => 'Không thể tạo nhóm của bạn.', + 'Edit group' => 'Chỉnh sửa nhóm', + 'Group updated successfully.' => 'Nhóm được cập nhật thành công.', + 'Unable to update your group.' => 'Không thể cập nhật nhóm của bạn.', + 'Add group member to "%s"' => 'Thêm thành viên nhóm vào "%s"', + 'Group member added successfully.' => 'Thành viên nhóm đã thành công.', + 'Unable to add group member.' => 'Không thể thêm thành viên nhóm', + 'Remove user from group "%s"' => 'Xóa người dùng khỏi nhóm %s', + 'User removed successfully from this group.' => 'Người dùng đã xóa thành công khỏi nhóm này.', + 'Unable to remove this user from the group.' => 'Không thể xóa người dùng này khỏi nhóm.', + 'Remove group' => 'Loại bỏ nhóm', + 'Group removed successfully.' => 'Nhóm đã xoá thành công.', + 'Unable to remove this group.' => 'Không thể xóa nhóm này.', + 'Project Permissions' => 'Quyền dự án', + 'Manager' => 'Giám đốc', + 'Project Manager' => 'Quản lý dự án', + 'Project Member' => 'Thành viên Dự án', + 'Project Viewer' => 'Trình xem dự án', + 'Your account is locked for %d minutes' => 'Tài khoản của bạn bị khóa trong %d phút', + 'Invalid captcha' => 'Captcha không hợp lệ', + 'The name must be unique' => 'Cái tên phải là duy nhất', + 'View all groups' => 'Xem tất cả các nhóm', + 'There is no user available.' => 'Không có người dùng nào có sẵn.', + 'Do you really want to remove the user "%s" from the group "%s"?' => 'Bạn có thực sự muốn xóa người dùng "%s" khỏi nhóm "%s"?', + 'There is no group.' => 'Không có nhóm.', + 'Add group member' => 'Thêm thành viên nhóm', + 'Do you really want to remove this group: "%s"?' => 'Bạn có thực sự muốn loại bỏ nhóm này: "%s"?', + 'There is no user in this group.' => 'Không có người dùng trong nhóm này.', + 'Permissions' => 'Quyền', + 'Allowed Users' => 'Người dùng được phép', + 'No user have been allowed specifically.' => 'Không người dùng nào được cho phép cụ thể.', + 'Role' => 'Vai trò', + 'Enter user name...' => 'Điền tên đăng nhập...', + 'Allowed Groups' => 'Nhóm được phép', + 'No group have been allowed specifically.' => 'Không có nhóm nào được cho phép cụ thể.', + 'Group' => 'Nhóm', + 'Group Name' => 'Tên nhóm', + 'Enter group name...' => 'Nhập tên nhóm ...', + 'Role:' => 'Vai trò:', + 'Project members' => 'Thành viên dự án', + '%s mentioned you in the task #%d' => ' %s đề cập đến bạn trong công việc #%d', + '%s mentioned you in a comment on the task #%d' => ' %s đã đề cập đến bạn trong một nhận xét về nhiệm vụ #%d', + 'You were mentioned in the task #%d' => 'Bạn đã được đề cập trong nhiệm vụ #%d', + 'You were mentioned in a comment on the task #%d' => 'Bạn đã được đề cập trong một nhận xét về nhiệm vụ #%d', + 'Estimated hours: ' => 'Giờ ước tính:', + 'Actual hours: ' => 'Giờ thực tế:', + 'Hours Spent' => 'Thời gian Nghỉ ngơi', + 'Hours Estimated' => 'Số giờ Ước tính', + 'Estimated Time' => 'Thơi gian dự định', + 'Actual Time' => 'Thời gian Thực', + 'Estimated vs actual time' => 'Ước tính thời gian thực', + 'RUB - Russian Ruble' => 'RUB - Nga Ruble', + 'Assign the task to the person who does the action when the column is changed' => 'Chỉ định nhiệm vụ cho người thực hiện hành động khi cột được thay đổi', + 'Close a task in a specific column' => 'Đóng một nhiệm vụ trong một cột cụ thể', + 'Time-based One-time Password Algorithm' => 'Thuật toán mật khẩu một lần dựa trên thời gian', + 'Two-Factor Provider: ' => 'Nhà cung cấp hai nhân tố:', + 'Disable two-factor authentication' => 'Tắt xác thực hai lớp', + 'Enable two-factor authentication' => 'Kích hoạt xác thực hai lớp', + 'There is no integration registered at the moment.' => 'Hiện tại không có hội nhập nào được đăng ký.', + 'Password Reset for Kanboard' => 'Đặt lại mật khẩu cho Kanboard', + 'Forgot password?' => 'Quên mật khẩu?', + 'Enable "Forget Password"' => 'Bật Quên mật khẩu ', + 'Password Reset' => 'Đặt lại mật khẩu', + 'New password' => 'Mật khẩu mới', + 'Change Password' => 'Đổi mật khẩu', + 'To reset your password click on this link:' => 'Để đặt lại mật khẩu của bạn bấm vào liên kết này:', + 'Last Password Reset' => 'Thiết lập lại mật khẩu lần cuối', + 'The password has never been reinitialized.' => 'Mật khẩu chưa bao giờ được khởi tạo lại.', + 'Creation' => 'Sự sáng tạo', + 'Expiration' => 'Hết hạn', + 'Password reset history' => 'Lịch sử đặt lại mật khẩu', + 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => 'Tất cả nhiệm vụ của cột "%s" và swimlane "%s" đã được đóng thành công.', + 'Do you really want to close all tasks of this column?' => 'Bạn có thực sự muốn đóng tất cả các nhiệm vụ của cột này?', + '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '%d nhiệm vụ trong cột "%s" và swimlane "%s" sẽ được đóng lại.', + 'Close all tasks of this column' => 'Đóng tất cả các tác vụ của cột này', + 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => 'Không có plugin đã đăng ký một phương pháp thông báo dự án. Bạn vẫn có thể định cấu hình các thông báo riêng trong hồ sơ người dùng của bạn. ', + 'My dashboard' => 'Bảng điều khiển của tôi', + 'My profile' => 'Thông tin của tôi', + 'Project owner: ' => 'Chủ dự án: ', + 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => 'Định danh dự án là tùy chọn và phải là chữ số, ví dụ: MYPROJECT.', + 'Project owner' => 'Chủ dự án', + 'Private projects do not have users and groups management.' => 'Các dự án riêng tư không có người dùng và quản lý nhóm.', + 'There is no project member.' => 'Không có thành viên dự án.', + 'Priority' => 'Sự ưu tiên', + 'Task priority' => 'Nhiệm vụ ưu tiên', + 'General' => 'Chung', + 'Dates' => 'Ngày', + 'Default priority' => 'Mức độ ưu tiên mặc định', + 'Lowest priority' => 'Mức ưu tiên thấp nhất', + 'Highest priority' => 'Mức ưu tiên cao nhất', + 'Close a task when there is no activity' => 'Đóng một nhiệm vụ khi không có hoạt động', + 'Duration in days' => 'Thời lượng theo ngày', + 'Send email when there is no activity on a task' => 'Gửi email khi không có hoạt động nào trên một tác vụ', + 'Unable to fetch link information.' => 'Không thể tìm nạp thông tin liên kết.', + 'Daily background job for tasks' => 'Công việc hàng ngày cho các nhiệm vụ', + 'Auto' => 'Tự động', + 'Related' => 'Liên quan', + 'Attachment' => 'Tập tin đính kèm', + 'Title not found' => 'Tiêu đề không tìm thấy', + 'Web Link' => 'Liên kết Web', + 'External links' => 'Liện kết ngoại', + 'Add external link' => 'Thêm liên kết bên ngoài', + 'Type' => 'Kiểu', + 'Dependency' => 'Sự phụ thuộc', + 'Add internal link' => 'Thêm liên kết nội bộ', + 'Add a new external link' => 'Thêm một liên kết bên ngoài mới', + 'Edit external link' => 'Chỉnh sửa liên kết bên ngoài', + 'External link' => 'Liên kết bên ngoài', + 'Copy and paste your link here...' => 'Sao chép và dán liên kết của bạn ở đây ...', + 'URL' => 'URL', + 'Internal links' => 'Liên kết nội bộ', + 'Assign to me' => 'Chỉ định cho tôi', + 'Me' => 'Tôi', + 'Do not duplicate anything' => 'Đừng trùng lặp bất cứ điều gì', + 'Projects management' => 'Quản lý dự án', + 'Users management' => 'Quản lý người dùng', + 'Groups management' => 'Quản lý nhóm', + 'Create from another project' => 'Tạo ra từ một dự án khác', + 'open' => 'mở', + 'closed' => 'đóng cửa', + 'Priority:' => 'Sự ưu tiên:', + 'Reference:' => 'Tài liệu tham khảo:', + 'Complexity:' => 'Sự phức tạp:', + 'Swimlane:' => 'Swimlane:', + 'Column:' => 'Cột:', + 'Position:' => 'Chức vụ:', + 'Creator:' => 'Người sáng tạo:', + 'Time estimated:' => 'Thời gian ước tính:', + '%s hours' => ' %s hours', + 'Time spent:' => 'Thời gian dành:', + 'Created:' => 'Tạo:', + 'Modified:' => 'Sửa đổi:', + 'Completed:' => 'Đã hoàn thành:', + 'Started:' => 'Đã bắt đầu:', + 'Moved:' => 'Moved:', + 'Task #%d' => 'Nhiệm vụ #%d', + 'Time format' => 'Định dạng thời gian', + 'Start date: ' => 'Ngày bắt đầu:', + 'End date: ' => 'Ngày cuối: ', + 'New due date: ' => 'Ngày đáo hạn mới:', + 'Start date changed: ' => 'Ngày bắt đầu thay đổi:', + 'Disable private projects' => 'Vô hiệu hoá các dự án riêng tư', + 'Do you really want to remove this custom filter: "%s"?' => 'Bạn có thực sự muốn loại bỏ bộ lọc tuỳ chỉnh này: "%s"?', + 'Remove a custom filter' => 'Xóa một bộ lọc tuỳ chỉnh', + 'User activated successfully.' => 'Người dùng đã kích hoạt thành công.', + 'Unable to enable this user.' => 'Không thể kích hoạt người dùng này.', + 'User disabled successfully.' => 'Người dùng đã vô hiệu thành công.', + 'Unable to disable this user.' => 'Không thể vô hiệu hóa người dùng này.', + 'All files have been uploaded successfully.' => 'Tất cả các tập tin đã được tải lên thành công.', + 'The maximum allowed file size is %sB.' => 'Kích thước tập tin tối đa cho phép là %sB.', + 'Drag and drop your files here' => 'Kéo và thả tệp của bạn ở đây', + 'choose files' => 'chọn tập tin', + 'View profile' => 'Xem hồ sơ', + 'Two Factor' => 'hai lớp', + 'Disable user' => 'Vô hiệu hoá người dùng', + 'Do you really want to disable this user: "%s"?' => 'Bạn thực sự muốn vô hiệu hóa người dùng này: "%s"?', + 'Enable user' => 'Enable user', + 'Do you really want to enable this user: "%s"?' => 'Bạn có thực sự muốn cho phép người dùng này: "%s"?', + 'Download' => 'Tải về', + 'Uploaded: %s' => 'Đã tải lên: %s', + 'Size: %s' => 'Kích thước: %s', + 'Uploaded by %s' => 'Đã tải lên bởi %s', + 'Filename' => 'Filename', + 'Size' => 'Kích thước', + 'Column created successfully.' => 'Cột được tạo thành công.', + 'Another column with the same name exists in the project' => 'Một cột có cùng tên tồn tại trong dự án', + 'Default filters' => 'Bộ lọc mặc định', + 'Your board doesn\'t have any columns!' => 'Bảng của bạn không có bất kỳ cột nào!', + 'Change column position' => 'Thay đổi vị trí cột', + 'Switch to the project overview' => 'Chuyển sang tổng quan về dự án', + 'User filters' => 'Bộ lọc người dùng', + 'Category filters' => 'Bộ lọc danh mục', + 'Upload a file' => 'Tải lên một tài liệu', + 'View file' => 'Xem tài liệu', + 'Last activity' => 'Hoạt động cuối', + 'Change subtask position' => 'Thay đổi vị trí phụ', + 'This value must be greater than %d' => 'Giá trị này phải lớn hơn %d', + 'Another swimlane with the same name exists in the project' => 'Một con tàu khác có cùng tên tồn tại trong dự án \', + \'Example: http://example.kanboard.net/ (used to generate absolute URLs)\' => \'Ví dụ: http://example.kanboard.net/ (dùng để tạo URL tuyệt đối)\', + \'Actions duplicated successfully.\' => \'Hành động trùng lặp thành công.\', + \'Unable to duplicate actions.\' => \'Không thể lặp lại hành động.\', + \'Add a new action\' => \'Thêm một hành động mới\', + \'Import from another project\' => \'Nhập khẩu từ một dự án khác\', + \'There is no action at the moment.\' => Hiện tại không có hành động nào. ', + // 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => '', + // 'Actions duplicated successfully.' => '', + // 'Unable to duplicate actions.' => '', + // 'Add a new action' => '', + // 'Import from another project' => '', + // 'There is no action at the moment.' => '', + 'Import actions from another project' => 'Nhập khẩu các hành động từ một dự án khác', + 'There is no available project.' => 'Không có dự án sẵn có.', + 'Local File' => 'Local File', + 'Configuration' => 'Cấu hình', + 'PHP version:' => 'Phiên bản PHP:', + 'PHP SAPI:' => 'PHP SAPI:', + 'OS version:' => 'Phiên bản hệ điều hành:', + 'Database version:' => 'Phiên bản cơ sở dữ liệu:', + 'Browser:' => 'Trình duyệt:', + 'Task view' => 'Công việc xem', + 'Edit task' => 'Chỉnh sửa nhiệm vụ', + 'Edit description' => 'Chỉnh sửa mô tả', + 'New internal link' => 'Liên kết nội bộ mới', + 'Display list of keyboard shortcuts' => 'Hiển thị danh sách các phím tắt', + 'Menu' => 'Thực đơn', + 'Set start date' => 'Đặt ngày bắt đầu', + 'Avatar' => 'Hình đại diện', + 'Upload my avatar image' => 'Tải lên hình ảnh đại diện của tôi', + 'Remove my image' => 'Hủy bỏ hình ảnh của tôi', + 'The OAuth2 state parameter is invalid' => 'Tham số trạng thái OAuth2 không hợp lệ', + 'User not found.' => 'Người dùng không tìm thấy.', + 'Search in activity stream' => 'Tìm kiếm trong luồng hoạt động', + 'My activities' => 'Hoạt động của tôi', + 'Activity until yesterday' => 'Hoạt động cho đến ngày hôm qua', + 'Activity until today' => 'Hoạt động cho đến ngày hôm nay', + 'Search by creator: ' => 'Tìm kiếm theo người sáng tạo:', + 'Search by creation date: ' => 'Tìm kiếm theo ngày tạo:', + 'Search by task status: ' => 'Tìm theo tình trạng công việc:', + 'Search by task title: ' => 'Tìm theo tên công việc:', + 'Activity stream search' => 'Tìm kiếm luồng hoạt động', + 'Projects where "%s" is manager' => 'Dự án nơi "%s" là người quản lý', + 'Projects where "%s" is member' => 'Dự án nơi "%s" là thành viên', + 'Open tasks assigned to "%s"' => 'Mở nhiệm vụ được giao cho "%s"', + 'Closed tasks assigned to "%s"' => 'Đã đóng nhiệm vụ được giao cho "%s"', + 'Assign automatically a color based on a priority' => 'Chỉ định tự động một màu dựa trên một ưu tiên', + 'Overdue tasks for the project(s) "%s"' => 'Các nhiệm vụ quá hạn cho (các) dự án %s', + 'Upload files' => 'Tải tệp lên', + 'Installed Plugins' => 'Plugin cài đặt', + 'Plugin Directory' => 'Plugin Directory', + 'Plugin installed successfully.' => 'Plugin được cài đặt thành công.', + 'Plugin updated successfully.' => 'Plugin được cập nhật thành công.', + 'Plugin removed successfully.' => 'Plugin được xoá thành công.', + 'Subtask converted to task successfully.' => 'Đã thực hiện thành công nhiệm vụ phụ đề đã được chuyển thành.', + 'Unable to convert the subtask.' => 'Không thể chuyển đổi phụ đề.', + 'Unable to extract plugin archive.' => 'Không thể trích xuất kho lưu trữ plugin.', + 'Plugin not found.' => 'Plugin không tìm thấy.', + 'You don\'t have the permission to remove this plugin.' => 'Bạn không có quyền xóa plugin này.', + 'Unable to download plugin archive.' => 'Không thể tải tệp lưu trữ plugin.', + 'Unable to write temporary file for plugin.' => 'Không thể ghi tập tin tạm thời cho plugin.', + 'Unable to open plugin archive.' => 'Không thể mở tệp lưu trữ plugin.', + 'There is no file in the plugin archive.' => 'Không có tệp nào trong kho lưu trữ trình cắm.', + 'Create tasks in bulk' => 'Tạo nhiệm vụ hàng loạt', + 'Your Kanboard instance is not configured to install plugins from the user interface.' => 'Trường hợp Kanboard của bạn không được định cấu hình để cài đặt plugin từ giao diện người dùng.', + 'There is no plugin available.' => 'Không có plugin nào sẵn có.', + 'Install' => 'Cài đặt, dựng lên', + 'Update' => 'Cập nhật', + 'Up to date' => 'Cập nhật', + 'Not available' => 'Không có sẵn', + 'Remove plugin' => 'Xoá plugin', + 'Do you really want to remove this plugin: "%s"?' => 'Bạn có thực sự muốn loại bỏ plugin này: "%s"?', + 'Uninstall' => 'Gỡ cài đặt', + 'Listing' => 'Liệt kê', + 'Metadata' => 'Siêu dữ liệu', + 'Manage projects' => 'Quản lý dự án', + 'Convert to task' => 'Chuyển đổi sang tác vụ', + 'Convert sub-task to task' => 'Chuyển tiểu nhiệm vụ thành nhiệm vụ', + 'Do you really want to convert this sub-task to a task?' => 'Bạn có thực sự muốn chuyển đổi tiểu nhiệm vụ này sang một nhiệm vụ?', + 'My task title' => 'Nhiệm vụ của tôi', + 'Enter one task by line.' => 'Nhập một tác vụ theo dòng.', + 'Number of failed login:' => 'Số lần đăng nhập không thành công:', + 'Account locked until:' => 'Tài khoản bị khoá cho đến khi:', + 'Email settings' => 'Cài đặt email', + 'Email sender address' => 'Địa chỉ người gửi email', + 'Email transport' => 'Vận chuyển email', + 'Webhook token' => 'Mã thông báo của Webhook', + 'Project tags management' => 'Quản lý thẻ dự án', + 'Tag created successfully.' => 'Thẻ được tạo thành công.', + 'Unable to create this tag.' => 'Không thể tạo thẻ này.', + 'Tag updated successfully.' => 'Thẻ được cập nhật thành công.', + 'Unable to update this tag.' => 'Không thể cập nhật thẻ này.', + 'Tag removed successfully.' => 'Thẻ đã xoá thành công.', + 'Unable to remove this tag.' => 'Không thể xóa thẻ này.', + 'Global tags management' => 'Quản lý thẻ toàn cầu', + 'Tags' => 'Thẻ', + 'Tags management' => 'Quản lý thẻ', + 'Add new tag' => 'Thêm thẻ mới', + 'Edit a tag' => 'Chỉnh sửa thẻ', + 'Project tags' => 'Thẻ dự án', + 'There is no specific tag for this project at the moment.' => 'Hiện tại không có thẻ cụ thể cho dự án này.', + 'Tag' => 'Nhãn', + 'Remove a tag' => 'Loại bỏ một thẻ', + 'Do you really want to remove this tag: "%s"?' => 'Bạn có thực sự muốn loại bỏ thẻ này: "%s"?', + 'Global tags' => 'Thẻ toàn cầu', + 'There is no global tag at the moment.' => 'Hiện tại không có nhãn toàn cầu. ', + 'This field cannot be empty' => 'Trường này không thể để trống', + 'Close a task when there is no activity in an specific column' => 'Đóng một nhiệm vụ khi không có hoạt động trong một cột cụ thể', + '%s removed a subtask for the task #%d' => ' %s loại bỏ một subtask cho nhiệm vụ #%d', + '%s removed a comment on the task #%d' => ' %s xóa một nhận xét về nhiệm vụ #%d', + 'Comment removed on task #%d' => 'Đã xóa nhận xét về công việc #%d', + 'Subtask removed on task #%d' => 'Huỷ bỏ các nhiệm vụ #%d', + 'Hide tasks in this column in the dashboard' => 'Ẩn nhiệm vụ trong cột này trong bảng điều khiển', + '%s removed a comment on the task %s' => ' %s xóa một nhận xét về nhiệm vụ %s', + '%s removed a subtask for the task %s' => ' %s loại bỏ một phụ cho nhiệm vụ %s', + 'Comment removed' => 'Đã xóa nhận xét', + 'Subtask removed' => 'Huỷ bỏ bỏ', + '%s set a new internal link for the task #%d' => ' %s thiết lập một liên kết nội bộ mới cho nhiệm vụ #%d', + '%s removed an internal link for the task #%d' => ' %s đã xóa liên kết nội bộ cho tác vụ #%d', + 'A new internal link for the task #%d have been defined' => 'Một liên kết nội bộ mới cho nhiệm vụ #%d đã được xác định', + 'Internal link removed for the task #%d' => 'Đã loại bỏ liên kết nội bộ cho tác vụ #%d', + '%s set a new internal link for the task %s' => ' %s thiết lập một liên kết nội bộ mới cho nhiệm vụ %s', + '%s removed an internal link for the task %s' => ' %s đã xóa liên kết nội bộ cho tác vụ %s', + 'Automatically set the due date on task creation' => 'Tự động thiết lập ngày đáo hạn khi tạo tác vụ', + 'Move the task to another column when closed' => 'Di chuyển nhiệm vụ sang cột khác khi đóng', + 'Move the task to another column when not moved during a given period' => 'Di chuyển công việc sang cột khác khi không di chuyển trong một khoảng thời gian nhất định', + 'Dashboard for %s' => 'Bảng điều khiển cho %s', + 'Tasks overview for %s' => 'Tổng quan về các nhiệm vụ cho %s', + 'Subtasks overview for %s' => 'Tổng quan về các công việc cho %s', + 'Projects overview for %s' => 'Tổng quan về dự án cho %s', + 'Activity stream for %s' => 'Luồng hoạt động cho %s', + 'Assign a color when the task is moved to a specific swimlane' => 'Chỉ định một màu sắc khi nhiệm vụ được chuyển đến một swimlane cụ thể', + 'Assign a priority when the task is moved to a specific swimlane' => 'Chỉ định một ưu tiên khi nhiệm vụ được chuyển đến một con swimlane cụ thể', + 'User unlocked successfully.' => 'Người dùng đã mở khóa thành công.', + 'Unable to unlock the user.' => 'Không thể mở khóa người dùng.', + 'Move a task to another swimlane' => 'Di chuyển một nhiệm vụ đến một swimlane khác', + 'Creator Name' => 'Tên người tạo', + 'Time spent and estimated' => 'Thời gian chi tiêu và ước tính', + 'Move position' => 'Di chuyển vị trí', + 'Move task to another position on the board' => 'Chuyển nhiệm vụ sang vị trí khác trên bảng', + 'Insert before this task' => 'Chèn trước khi tác vụ này', + 'Insert after this task' => 'Chèn sau khi tác vụ này', + 'Unlock this user' => 'Mở khóa người dùng này', + 'Custom Project Roles' => 'Vai trò dự án tùy chỉnh', + 'Add a new custom role' => 'Thêm một vai trò tùy chỉnh mới', + 'Restrictions for the role "%s"' => 'Hạn chế đối với vai trò %s', + 'Add a new project restriction' => 'Thêm một hạn chế dự án mới', + 'Add a new drag and drop restriction' => 'Thêm một hạn chế kéo và thả mới', + 'Add a new column restriction' => 'Thêm một cột mới', + 'Edit this role' => 'Chỉnh sửa vai trò này', + 'Remove this role' => 'Loại bỏ vai trò này', + 'There is no restriction for this role.' => 'Không có sự hạn chế đối với vai trò này.', + 'Only moving task between those columns is permitted' => 'Chỉ di chuyển nhiệm vụ giữa các cột đó được phép', + 'Close a task in a specific column when not moved during a given period' => 'Đóng một nhiệm vụ trong một cột cụ thể khi không di chuyển trong một khoảng thời gian nhất định', + 'Edit columns' => 'Chỉnh sửa cột', + 'The column restriction has been created successfully.' => 'Hạn chế cột đã được tạo thành công.', + 'Unable to create this column restriction.' => 'Không thể tạo giới hạn cột này.', + 'Column restriction removed successfully.' => 'Hạn chế cột đã được xoá thành công.', + 'Unable to remove this restriction.' => 'Không thể xóa bỏ hạn chế này.', + 'Your custom project role has been created successfully.' => 'Vai trò dự án tùy chỉnh của bạn đã được tạo thành công.', + 'Unable to create custom project role.' => 'Không thể tạo vai trò dự án tùy chỉnh.', + 'Your custom project role has been updated successfully.' => 'Vai trò dự án tùy chỉnh của bạn đã được cập nhật thành công.', + 'Unable to update custom project role.' => 'Không thể cập nhật vai trò dự án tùy chỉnh.', + 'Custom project role removed successfully.' => 'Vai trò dự án đã được gỡ bỏ thành công.', + 'Unable to remove this project role.' => 'Không thể xóa vai trò dự án này.', + 'The project restriction has been created successfully.' => 'Sự hạn chế của dự án đã được tạo ra thành công.', + 'Unable to create this project restriction.' => 'Không thể tạo ra sự hạn chế của dự án.', + 'Project restriction removed successfully.' => 'Hạn chế dự án đã được loại bỏ thành công.', + 'You cannot create tasks in this column.' => 'Bạn không thể tạo ra các nhiệm vụ trong cột này.', + 'Task creation is permitted for this column' => 'Tạo tác vụ được cho phép cho cột này', + 'Closing or opening a task is permitted for this column' => 'Cho phép Đóng hay mở một nhiệm vụ cho cột này', + 'Task creation is blocked for this column' => 'Tạo tác vụ bị chặn cho cột này', + 'Closing or opening a task is blocked for this column' => 'Đóng hoặc mở một tác vụ bị chặn cho cột này', + 'Task creation is not permitted' => 'Không được phép tạo công việc', + 'Closing or opening a task is not permitted' => 'Không được phép đóng hay mở một nhiệm vụ', + 'New drag and drop restriction for the role "%s"' => 'Hạn chế kéo và thả mới cho vai trò "%s"', + 'People belonging to this role will be able to move tasks only between the source and the destination column.' => 'Những người thuộc vai trò này sẽ chỉ có thể di chuyển nhiệm vụ giữa cột nguồn và cột đích.', + 'Remove a column restriction' => 'Hủy bỏ một hạn chế về cột', + 'Do you really want to remove this column restriction: "%s" to "%s"?' => 'Bạn có thực sự muốn loại bỏ giới hạn cột này: "%s" thành "%s"?', + 'New column restriction for the role "%s"' => 'Hạn chế cột mới cho vai trò %s', + 'Rule' => 'Qui định', + 'Do you really want to remove this column restriction?' => 'Bạn có thực sự muốn loại bỏ hạn chế cột này?', + 'Custom roles' => 'Vai trò tùy chỉnh', + 'New custom project role' => 'Vai trò dự án mới tùy chỉnh', + 'Edit custom project role' => 'Chỉnh sửa vai trò dự án tùy chỉnh', + 'Remove a custom role' => 'Loại bỏ một vai trò tùy chỉnh', + 'Do you really want to remove this custom role: "%s"? All people assigned to this role will become project member.' => 'Bạn có thực sự muốn loại bỏ vai trò tùy chỉnh này: "%s"? Tất cả mọi người được giao nhiệm vụ này sẽ trở thành thành viên của dự án.', + 'There is no custom role for this project.' => 'Không có vai trò tùy chỉnh cho dự án này.', + 'New project restriction for the role "%s"' => 'Hạn chế dự án mới cho vai trò "%s"', + 'Restriction' => 'Sự hạn chế', + 'Remove a project restriction' => 'Hủy bỏ một dự án hạn chế', + 'Do you really want to remove this project restriction: "%s"?' => 'Bạn có thực sự muốn loại bỏ hạn chế dự án này: "%s"?', + 'Duplicate to multiple projects' => 'Nhân đôi với nhiều dự án', + 'This field is required' => 'Trường này là bắt buộc', + 'Moving a task is not permitted' => 'Không được phép di chuyển một nhiệm vụ', + 'This value must be in the range %d to %d' => 'Giá trị này phải nằm trong khoảng từ %d đến %d', + 'You are not allowed to move this task.' => 'Bạn không được phép di chuyển nhiệm vụ này.', + 'API User Access' => 'Truy cập Người dùng API', + 'Preview' => 'Xem trước', + 'Write' => 'Viết', + 'Write your text in Markdown' => 'Viết văn bản của bạn trong Markdown', + 'No personal API access token registered.' => 'Không có đăng nhập truy cập API cá nhân.', + 'Your personal API access token is "%s"' => 'Mã thông báo truy cập API cá nhân của bạn là "%s"', + 'Remove your token' => 'Hủy bỏ mã thông báo của bạn', + 'Generate a new token' => 'Tạo mã thông báo mới', + 'Showing %d-%d of %d' => 'Hiển thị %d-%d của %d', + 'Outgoing Emails' => 'Email gửi đi', + 'Add or change currency rate' => 'Thêm hoặc thay đổi tỷ lệ tiền tệ', + 'Reference currency: %s' => 'Tiền tệ tham khảo: %s', + 'Add custom filters' => 'Thêm bộ lọc tùy chỉnh', + 'Export' => 'Xuất khẩu', + 'Add link label' => 'Thêm nhãn liên kết', + 'Incompatible Plugins' => 'Plugin không tương thích', + 'Compatibility' => 'Khả năng tương thích', + 'Permissions and ownership' => 'Quyền và quyền sở hữu', + 'Priorities' => 'Ưu tiên', + 'Close this window' => 'Đóng cửa sổ này', + 'Unable to upload this file.' => 'Không thể tải tệp này lên.', + 'Import tasks' => 'Nhập khẩu các nhiệm vụ', + 'Choose a project' => 'Chọn một dự án', + 'Profile' => 'Hồ sơ', + 'Application role' => 'Vai trò ứng dụng', + '%d invitations were sent.' => '%d lời mời đã được gửi.', + '%d invitation was sent.' => 'Thư mời %d đã được gửi.', + 'Unable to create this user.' => 'Không thể tạo người dùng này.', + 'Kanboard Invitation' => 'Lời mời của Kanboard', + 'Visible on dashboard' => 'Hiển thị trên bảng điều khiển', + 'Created at:' => 'Được tạo vào:', + 'Updated at:' => 'Cập nhật tại:', + 'There is no custom filter.' => 'Không có bộ lọc tuỳ chỉnh.', + 'New User' => 'Người dùng mới', + 'Authentication' => 'Xác thực', + 'If checked, this user will use a third-party system for authentication.' => 'Nếu được chọn, người dùng này sẽ sử dụng hệ thống của bên thứ ba để xác thực.', + 'The password is necessary only for local users.' => 'Mật khẩu là cần thiết chỉ dành cho người dùng cục bộ.', + 'You have been invited to register on Kanboard.' => 'Bạn đã được mời đăng ký trên Kanboard.', + 'Click here to join your team' => 'Nhấp vào đây để tham gia nhóm của bạn', + 'Invite people' => 'Mời mọi người', + 'Emails' => 'Email', + 'Enter one email address by line.' => 'Nhập một địa chỉ email theo dòng.', + 'Add these people to this project' => 'Thêm những người này vào dự án này', + 'Add this person to this project' => 'Thêm người này vào dự án này', + 'Sign-up' => 'Đăng ký', + 'Credentials' => 'Thông tin xác thực', + 'New user' => 'Người dùng mới', + 'This username is already taken' => 'Tên người dùng này đã được dùng', + 'A link to reset your password has been sent by email.' => 'Một liên kết để đặt lại mật khẩu của bạn đã được gửi bằng email.', + 'Your profile must have a valid email address.' => 'Tiểu sử của bạn phải có địa chỉ email hợp lệ.', + 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => 'Thật không may, chúng tôi không thể đặt lại mật khẩu của bạn. Bạn đã nhập một tên người dùng hợp lệ? Bạn có địa chỉ email trong hồ sơ của bạn không? ', + 'TRL - Turkish Lira' => 'TRL - Lira Thổ Nhĩ Kỳ', + 'The project email is optional and could be used by several plugins.' => 'Email dự án là tùy chọn và có thể được sử dụng bởi một số plugin.', + 'The project email must be unique across all projects' => 'Email của dự án phải là duy nhất trong tất cả các dự án', + 'The email configuration has been disabled by the administrator.' => 'Quản trị viên đã vô hiệu cấu hình email.', + 'Close this project' => 'Đóng dự án này', + 'Open this project' => 'Mở dự án này', + 'Close a project' => 'Đóng một dự án', + 'Do you really want to close this project: "%s"?' => 'Bạn có thực sự muốn đóng dự án này: "%s"?', + 'Reopen a project' => 'Mở lại một dự án', + 'Do you really want to reopen this project: "%s"?' => 'Bạn có thực sự muốn mở lại dự án này: "%s"?', + 'This project is open' => 'Dự án này đang mở', + 'This project is closed' => 'Dự án này đã kết thúc', + 'Unable to upload files, check the permissions of your data folder.' => 'Không thể tải tệp lên, hãy kiểm tra quyền của thư mục dữ liệu của bạn.', + 'Another category with the same name exists in this project' => 'Một thể loại khác có cùng tên tồn tại trong dự án này', + 'Comment sent by email successfully.' => 'Thảo luận gửi qua email thành công.', + 'Sent by email to [%s](mailto:%s) (%s)' => 'Gửi qua email tới [ %s] (mailto: %s) ( %s)', + 'Unable to read uploaded file.' => 'Không thể đọc tập tin được tải lên.', + 'Database uploaded successfully.' => 'Cơ sở dữ liệu được tải lên thành công.', + 'Task sent by email successfully.' => 'Nhiệm vụ gửi qua email thành công.', + 'There is no category in this project.' => 'Không có hạng mục trong dự án này.', + 'Send by email' => 'Gửi bằng thư điện tử', + 'Create and send a comment by email' => 'Tạo và gửi một nhận xét qua email', + 'Subject' => 'Môn học', + 'Upload the database' => 'Tải lên cơ sở dữ liệu', + 'You could upload the previously downloaded Sqlite database (Gzip format).' => 'Bạn có thể tải lên cơ sở dữ liệu Sqlite đã tải xuống trước đây (định dạng Gzip)', + 'Database file' => 'Tập tin cơ sở dữ liệu', + 'Upload' => 'Tải lên', + 'Your project must have at least one active swimlane.' => 'Dự án của bạn phải có ít nhất một swimlane hoạt động.', + 'Project: %s' => 'Dự án: %s', + 'Automatic action not found: "%s"' => 'Không tìm thấy hành động tự động: "%s"', + '%d projects' => '%d dự án', + '%d project' => '%d dự án', + 'There is no project.' => 'Không có dự án.', + 'Sort' => 'Sắp xếp', + 'Project ID' => 'ID dự án', + 'Project name' => 'Tên dự án', + 'Public' => 'Công cộng', + 'Private' => 'Riêng tư', + '%d tasks' => '%d nhiệm vụ', + '%d task' => '%d công việc', + 'Task ID' => 'ID công việc', + 'Assign automatically a color when due date is expired' => 'Chỉ định màu tự động khi ngày hết hạn hết hạn', + 'Total score in this column across all swimlanes' => 'Tổng số điểm trong cột này trên tất cả các đường swimlane', + 'HRK - Kuna' => 'HRK - Kuna', + 'ARS - Argentine Peso' => 'ARS - Peso Argentina', + 'COP - Colombian Peso' => 'COP - Colombia Peso', + '%d groups' => '%d nhóm', + '%d group' => '%d nhóm', + 'Group ID' => 'ID nhóm', + 'External ID' => 'ID bên ngoài', + '%d users' => '%d người dùng', + '%d user' => '%d người dùng', + 'Hide subtasks' => 'Ẩn các nhiệm vụ phụ', + 'Show subtasks' => 'Hiện các nhiệm vụ phụ', + 'Authentication Parameters' => 'Thông số xác thực', + 'API Access' => 'Truy cập API', + 'No users found.' => 'Không tìm thấy người dùng.', + 'User ID' => 'Tên người dùng', + 'Notifications are activated' => 'Thông báo được kích hoạt', + 'Notifications are disabled' => 'Thông báo bị vô hiệu hóa', + 'User disabled' => 'Người dùng đã vô hiệu hóa', + '%d notifications' => '%d thông báo', + '%d notification' => '%d thông báo', + 'There is no external integration installed.' => 'Không có tích hợp bên ngoài được cài đặt.', + 'You are not allowed to update tasks assigned to someone else.' => 'Bạn không được phép cập nhật các nhiệm vụ được giao cho người khác.', + 'You are not allowed to change the assignee.' => 'Bạn không được phép thay đổi người được chuyển nhượng.', + 'Task suppression is not permitted' => 'Không được phép loại bỏ công việc', + 'Changing assignee is not permitted' => 'Không được phép thay đổi người được chuyển nhượng', + 'Update only assigned tasks is permitted' => 'Chỉ được phép cập nhật các nhiệm vụ được giao', + 'Only for tasks assigned to the current user' => 'Chỉ cho các nhiệm vụ được gán cho người dùng hiện tại', + 'My projects' => 'Dự án của tôi', + 'Your are not member of any project.' => 'Bạn không phải là thành viên của bất kỳ dự án nào.', + 'My subtasks' => 'Nhiệm vụ phụ của tôi', + '%d subtasks' => '%d nhiệm vụ phụ', + '%d subtask' => '%d nhiệm vụ phụ', + 'Only moving task between those columns is permitted for tasks assigned to the current user' => 'Chỉ di chuyển nhiệm vụ giữa các cột được phép cho các nhiệm vụ được giao cho người sử dụng hiện tại', + '[DUPLICATE]' => '[BẢN SAO]', + 'DKK - Danish Krona' => 'DKK - Đan Mạch Đan Mạch', + 'Remove user from group' => 'Xóa người dùng khỏi nhóm', + 'Assign the task to its creator' => 'Chỉ định nhiệm vụ cho người sáng tạo', + 'This task was sent by email to "%s" with subject "%s".' => 'Nhiệm vụ này được gửi qua email tới "%s" với chủ đề "%s".', + 'Predefined Email Subjects' => 'Đối tượng Email được Xác định trước', + 'Write one subject by line.' => 'Viết một chủ đề theo dòng.', + 'Create another link' => 'Tạo liên kết khác', + 'BRL - Brazilian Real' => 'BRL - Brazilian Real', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', +); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index f68b59dc..46bffe6a 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -39,7 +39,6 @@ return array( 'Administrator' => '超级管理员', 'Sign in' => '登录', 'Users' => '用户', - 'No user' => '没有用户', 'Forbidden' => '禁止', 'Access Forbidden' => '禁止进入', 'Edit user' => '修改用户', @@ -84,7 +83,7 @@ return array( 'Color' => '颜色', 'Assignee' => '负责人', 'Create another task' => '创建另一个任务', - 'New task' => '新进任务', + 'New task' => '新建任务', 'Open a task' => '开一个任务', 'Do you really want to open this task: "%s"?' => '你确定要开这个任务吗?"%s"', 'Back to the board' => '回到看板', @@ -136,7 +135,7 @@ return array( 'Unable to remove this user.' => '无法移除该用户。', 'Board updated successfully.' => '看板成功更新。', 'Ready' => '预备', - 'Backlog' => '积压', + 'Backlog' => '待办', 'Work in progress' => '工作进行中', 'Done' => '完成', 'Application version:' => '应用程序版本:', @@ -150,7 +149,7 @@ return array( 'Task count' => '任务数', 'User' => '用户', 'Comments' => '评论', - 'Comment is required' => '必须得有评论', + 'Comment is required' => '评论不能为空', 'Comment added successfully.' => '评论成功添加。', 'Unable to create your comment.' => '无法创建评论。', 'Due Date' => '到期时间', @@ -212,12 +211,12 @@ return array( 'Description' => '描述', '%d comments' => '%d个评论', '%d comment' => '%d个评论', - 'Email address invalid' => 'email地址无效', + 'Email address invalid' => '邮件地址无效', 'Your external account is not linked anymore to your profile.' => '你的外部账户关联已解除', 'Unable to unlink your external account.' => '无法关联到你的外部账户', 'External authentication failed' => '外部认证失败', 'Your external account is linked to your profile successfully.' => '你已成功关联到你的外部账户', - 'Email' => 'email', + 'Email' => '邮件', 'Task removed successfully.' => '任务成功去除', 'Unable to remove this task.' => '无法移除该任务。', 'Remove a task' => '移除一个任务', @@ -274,7 +273,6 @@ return array( 'Sub-task updated successfully.' => '成功创建子任务', 'Unable to update your sub-task.' => '无法更新子任务', 'Unable to create your sub-task.' => '无法创建子任务', - 'Sub-task added successfully.' => '成功添加子任务', 'Maximum size: ' => '大小上限:', 'Display another project' => '显示其它项目', 'Created by %s' => '创建者:%s', @@ -288,7 +286,7 @@ return array( 'Clone' => '克隆', 'Project cloned successfully.' => '成功复制项目。', 'Unable to clone this project.' => '无法复制此项目', - 'Enable email notifications' => '启用email通知', + 'Enable email notifications' => '启用邮件通知', 'Task position:' => '任务位置:', 'The task #%d have been opened.' => '任务#%d已经被开启.', 'The task #%d have been closed.' => '任务#%d已经被关闭.', @@ -321,7 +319,7 @@ return array( 'Disabled' => '停用', 'Login:' => '用户名:', 'Full Name:' => '姓名:', - 'Email:' => 'email:', + 'Email:' => '邮件:', 'Notifications:' => '通知:', 'Notifications' => '通知', 'Account type:' => '账户类型:', @@ -396,22 +394,17 @@ return array( 'Activity stream' => '动态记录', 'Dashboard' => '面板', 'Confirmation' => '确认', - 'Allow everybody to access to this project' => '允许所有人访问此项目', - 'Everybody have access to this project.' => '所有人都可以访问此项目', 'Webhooks' => '网络钩子', 'API' => '应用程序接口', 'Create a comment from an external provider' => '从外部创建一个评论', 'Project management' => '项目管理', - 'My projects' => '我的项目', 'Columns' => '栏目', 'Task' => '任务', - 'Your are not member of any project.' => '您尚未加入任何项目', 'Percentage' => '百分比', 'Number of tasks' => '任务数', 'Task distribution' => '任务分布', 'Analytics' => '分析', 'Subtask' => '子任务', - 'My subtasks' => '我的子任务', 'User repartition' => '用户分析', 'Clone this project' => '复制此项目', 'Column removed successfully.' => '成功删除了栏目。', @@ -459,7 +452,6 @@ return array( 'Language:' => '语言:', 'Timezone:' => '时区:', 'All columns' => '全部栏目', - 'Calendar' => '日程表', 'Next' => '前进', '#%d' => '#%d', 'All swimlanes' => '全部里程碑', @@ -557,7 +549,6 @@ return array( 'Unable to add this currency rate.' => '无法添加此汇率', 'Webhook URL' => '网络钩子 URL', '%s removed the assignee of the task %s' => '%s删除了任务%s的负责人', - 'Enable Gravatar images' => '启用 Gravatar 图像', 'Information' => '信息', 'Check two factor authentication code' => '检查双重认证码', 'The two factor authentication code is not valid.' => '双重认证码不正确。', @@ -611,14 +602,7 @@ return array( 'When task is moved from first column' => '当任务从第一列任务栏移走时', 'When task is moved to last column' => '当任务移动到最后一列任务栏时', 'Year(s)' => '年', - 'Calendar settings' => '日程设置', - 'Project calendar view' => '项目日历表', 'Project settings' => '项目设置', - 'Show subtasks based on the time tracking' => '在时间跟踪上显示子任务', - 'Show tasks based on the creation date' => '显示任务创建日期于', - 'Show tasks based on the start date' => '显示任务开始日期于', - 'Subtasks time tracking' => '子任务时间跟踪', - 'User calendar view' => '用户日程视图', 'Automatically update the start date' => '自动更新开始日期', 'iCal feed' => '日历订阅', 'Preferences' => '偏好', @@ -628,7 +612,7 @@ return array( 'Unable to update this user.' => '无法更新此用户', 'There is no user management for private projects.' => '私有项目下无用户可管理', 'User that will receive the email' => '用户将收到邮件', - 'Email subject' => 'email主题', + 'Email subject' => '邮件主题', 'Date' => '日期', 'Add a comment log when moving the task between columns' => '当任务移动到任务栏时添加评论日志', 'Move the task to another column when the category is changed' => '当任务分类改变时移动到任务栏', @@ -637,7 +621,6 @@ return array( 'Notification' => '通知', '%s moved the task #%d to the first swimlane' => '%s将任务#%d移动到了首个里程碑', 'Swimlane' => '里程碑', - 'Gravatar' => 'Gravatar头像', '%s moved the task %s to the first swimlane' => '%s将任务%s移动到了首个里程碑', '%s moved the task %s to the swimlane "%s"' => '%s将任务%s移动到了里程碑"%s"下', 'This report contains all subtasks information for the given date range.' => '该报告包含了指定日期范围内的所有子任务信息。', @@ -673,8 +656,7 @@ return array( '<30m' => '小于30分钟', 'Stop timer' => '停止计时器', 'Start timer' => '开启计时器', - 'My activity stream' => '我的活动流', - 'My calendar' => '我的日程表', + 'My activity stream' => '我的动态', 'Search tasks' => '搜索任务', 'Reset filters' => '重置过滤器', 'My tasks due tomorrow' => '我的明天到期的任务', @@ -688,7 +670,6 @@ return array( 'Overview' => '概览', 'Board/Calendar/List view' => '看板/日程/列表视图', 'Switch to the board view' => '切换到看板视图', - 'Switch to the calendar view' => '切换到日程视图', 'Switch to the list view' => '切换到列表视图', 'Go to the search/filter box' => '前往搜索/过滤箱', 'There is no activity yet.' => '当前无任何活动.', @@ -705,22 +686,22 @@ return array( 'Search by category: ' => '按分类:', 'Search by description: ' => '按描述:', 'Search by due date: ' => '按超期时间:', - 'Average time spent into each column' => '每个任务栏平均花费时间', + 'Average time spent into each column' => '每个任务栏的平均花费时间', 'Average time spent' => '平均花费时间', 'This chart show the average time spent into each column for the last %d tasks.' => '当前柱状图表示最新%d条任务在每个任务栏下的平均花费时间', - // 'Average Lead and Cycle time' => '', - // 'Average lead time: ' => '', - // 'Average cycle time: ' => '', - // 'Cycle Time' => '', - // 'Lead Time' => '', + 'Average Lead and Cycle time' => '平均工作时间和平均周期时间', + 'Average lead time: ' => '平均工作时间', + 'Average cycle time: ' => '平均周期时间: ', + 'Cycle Time' => '周期时间', + 'Lead Time' => '工作时间', // 'This chart show the average lead and cycle time for the last %d tasks over the time.' => '', - // 'Average time into each column' => '', - // 'Lead and cycle time' => '', - // 'Lead time: ' => '', - // 'Cycle time: ' => '', - // 'Time spent into each column' => '', - // 'The lead time is the duration between the task creation and the completion.' => '', - // 'The cycle time is the duration between the start date and the completion.' => '', + 'Average time into each column' => '每个任务栏的平均时间', + 'Lead and cycle time' => '工作时间和周期时间', + 'Lead time: ' => '工作时间: ', + 'Cycle time: ' => '周期时间: ', + 'Time spent into each column' => '每个任务栏的花费时间', + 'The lead time is the duration between the task creation and the completion.' => '工作时间是任务创建和完成之间的持续时间。', + 'The cycle time is the duration between the start date and the completion.' => '周期时间是开始日期和完成时间之间的持续时间。', 'If the task is not closed the current time is used instead of the completion date.' => '如果当前任务未关闭时用当前时间代替完成时间', 'Set automatically the start date' => '设置自动开始日期', 'Edit Authentication' => '编辑认证信息', @@ -743,15 +724,8 @@ return array( 'License:' => '授权许可:', 'License' => '授权许可', 'Enter the text below' => '输入下方的文本', - 'Sort by position' => '按位置排序', - 'Sort by date' => '按日期排序', - 'Add task' => '添加任务', 'Start date:' => '开始日期', 'Due date:' => '到期日期', - 'There is no start date or due date for this task.' => '当前任务没有开始或结束时间。', - 'Moving or resizing a task will change the start and due date of the task.' => '移动或者重设任务将改变任务开始和结束时间。', - 'There is no task in your project.' => '当前项目还没有任务', - 'Gantt chart' => '甘特图', 'People who are project managers' => '项目管理员', 'People who are project members' => '项目成员', 'NOK - Norwegian Krone' => '克朗', @@ -763,22 +737,15 @@ return array( 'Members' => '成员', 'Shared project' => '公开项目', 'Project managers' => '项目管理员', - 'Gantt chart for all projects' => '所有项目的甘特图', 'Projects list' => '项目列表', - 'Gantt chart for this project' => '此项目的甘特图', - 'Project board' => '项目面板', 'End date:' => '结束日期', - 'There is no start date or end date for this project.' => '当前项目没有开始或结束日期', - 'Projects Gantt chart' => '项目甘特图', 'Change task color when using a specific task link' => '当任务关联到指定任务时改变颜色', 'Task link creation or modification' => '任务链接创建或更新时间', 'Milestone' => '里程碑', 'Documentation: %s' => '文档:%s', - 'Switch to the Gantt chart view' => '切换到甘特图', 'Reset the search/filter box' => '重置搜索/过滤框', 'Documentation' => '文档', 'Table of contents' => '表内容', - 'Gantt' => '甘特图', 'Author' => '作者', 'Version' => '版本', 'Plugins' => '插件', @@ -889,7 +856,6 @@ return array( 'There is no user available.' => '当前没有有效用户', 'Do you really want to remove the user "%s" from the group "%s"?' => '你确定把用户"%s"从"%s"中移除?', 'There is no group.' => '当前没有用户组', - 'External Id' => '关联ID', 'Add group member' => '添加用户组成员', 'Do you really want to remove this group: "%s"?' => '你真的想要移除用户组:"%s"?', 'There is no user in this group.' => '当前用户组下没有成员', @@ -955,7 +921,6 @@ return array( 'Default priority' => '默认优先级', 'Lowest priority' => '最低优先级', 'Highest priority' => '最高优先级', - 'If you put zero to the low and high priority, this feature will be disabled.' => '如果你为优先级填0,将禁用本功能', 'Close a task when there is no activity' => '当任务没有活动记录时关闭任务', 'Duration in days' => '持续天数', 'Send email when there is no activity on a task' => '当任务没有活动记录时发送邮件', @@ -990,7 +955,7 @@ return array( 'Reference:' => '引用:', 'Complexity:' => '复杂度:', 'Swimlane:' => '里程碑:', - 'Column:' => '列:', + 'Column:' => '栏目:', 'Position:' => '位置:', 'Creator:' => '创建者:', 'Time estimated:' => '时间已过去:', @@ -1121,9 +1086,9 @@ return array( 'Enter one task by line.' => '写入一行任务。', 'Number of failed login:' => '登录失败次数:', 'Account locked until:' => '账户被锁定至:', - 'Email settings' => 'email设置', - 'Email sender address' => 'email发送地址', - 'Email transport' => 'email转发', + 'Email settings' => '邮件设置', + 'Email sender address' => '邮件发送地址', + 'Email transport' => '邮件转发', 'Webhook token' => 'Web钩子Token', 'Project tags management' => '项目标签管理', 'Tag created successfully.' => '成功创建标签。', @@ -1169,8 +1134,6 @@ return array( 'Subtasks overview for %s' => '%s的子任务预览', 'Projects overview for %s' => '%s的项目预览', 'Activity stream for %s' => '%s的活动足迹', - 'Calendar for %s' => '%s的日历', - 'Notifications for %s' => '%s的通知', 'Assign a color when the task is moved to a specific swimlane' => '当任务移动到指定里程碑时标记颜色', 'Assign a priority when the task is moved to a specific swimlane' => '当任务移动到指定里程碑时标记优先级', 'User unlocked successfully.' => '用户解锁成功。', @@ -1241,13 +1204,12 @@ return array( 'Preview' => '预览', 'Write' => '写入', 'Write your text in Markdown' => '用markdown格式写入文本', - 'New External Task: %s' => '新的外部任务:%s', 'No personal API access token registered.' => '没有API access token 注册。', 'Your personal API access token is "%s"' => '你的API access token 是 “%s”', 'Remove your token' => '移除token', 'Generate a new token' => '生成新的token', 'Showing %d-%d of %d' => '本页显示 %d-%d 条,共有: %d 条', - 'Outgoing Emails' => '目标email', + 'Outgoing Emails' => '目标邮件', 'Add or change currency rate' => '添加更改汇率', 'Reference currency: %s' => '参考汇率:%s', 'Add custom filters' => '添加自定义过滤', @@ -1278,8 +1240,8 @@ return array( 'You have been invited to register on Kanboard.' => '你被邀请注册看板。', 'Click here to join your team' => '点击这里加入你的团队', 'Invite people' => '邀请新用户', - 'Emails' => 'Emails', - 'Enter one email address by line.' => '输入email地址,每行一个。', + 'Emails' => '邮件', + 'Enter one email address by line.' => '输入邮件地址,每行一个。', 'Add these people to this project' => '添加用户到项目', 'Add this person to this project' => '添加用户到项目', 'Sign-up' => '注册', @@ -1290,9 +1252,9 @@ return array( 'Your profile must have a valid email address.' => '个人资料必须有一个有效email地址。', 'Unfortunately, we are unable to reset your password. Did you entered a valid username? Do you have an email address in your profile?' => '抱歉,无法重置你的密码。请确认输入正确的用户名或email地址?', 'TRL - Turkish Lira' => '土耳其里拉', - 'The project email is optional and could be used by several plugins.' => '项目email地址可选,适用于插件。', - 'The project email must be unique across all projects' => '项目email地址必须全局唯一', - 'The email configuration has been disabled by the administrator.' => 'email配置被管理员禁用。', + 'The project email is optional and could be used by several plugins.' => '项目邮件地址可选,适用于插件。', + 'The project email must be unique across all projects' => '项目邮件地址必须全局唯一', + 'The email configuration has been disabled by the administrator.' => '邮件配置被管理员禁用。', 'Close this project' => '关闭项目', 'Open this project' => '打开项目', 'Close a project' => '关闭项目', @@ -1308,30 +1270,100 @@ return array( // 'Unable to read uploaded file.' => '', // 'Database uploaded successfully.' => '', // 'Task sent by email successfully.' => '', - // 'There is no category in this project.' => '', - // 'Send by email' => '', - // 'Create and send a comment by email' => '', - // 'Subject' => '', + 'There is no category in this project.' => '当前项目没有分类。', + 'Send by email' => '发送邮件', + 'Create and send a comment by email' => '通过电子邮件创建和发送评论', + 'Subject' => '主题', // 'Upload the database' => '', // 'You could upload the previously downloaded Sqlite database (Gzip format).' => '', // 'Database file' => '', // 'Upload' => '', - // 'Remove this user from group' => '', // 'Your project must have at least one active swimlane.' => '', // 'Project: %s' => '', // 'Automatic action not found: "%s"' => '', - // '%d projects' => '', - // '%d project' => '', - // 'There is no project.' => '', - // 'Sort' => '', - // 'Project ID' => '', - // 'Project name' => '', - // 'Public' => '', - // 'Private' => '', - // '%d tasks' => '', - // '%d task' => '', - // 'Task ID' => '', + '%d projects' => '%d 项目', + '%d project' => '%d 项目', + 'There is no project.' => '当前没有项目。', + 'Sort' => '排序', + 'Project ID' => '项目ID', + 'Project name' => '项目名', + 'Public' => '公开', + 'Private' => '私有', + '%d tasks' => '%d 任务', + '%d task' => '%d 任务', + 'Task ID' => '任务ID', // 'Assign automatically a color when due date is expired' => '', // 'Total score in this column across all swimlanes' => '', // 'HRK - Kuna' => '', + // 'ARS - Argentine Peso' => '', + // 'COP - Colombian Peso' => '', + '%d groups' => '%d 用户组', + '%d group' => '%d 用户组', + 'Group ID' => '用户组ID', + // 'External ID' => '', + '%d users' => '%d 用户', + '%d user' => '%d 用户', + 'Hide subtasks' => '显示子任务', + 'Show subtasks' => '隐藏子任务', + // 'Authentication Parameters' => '', + // 'API Access' => '', + // 'No users found.' => '', + 'User ID' => '用户ID', + // 'Notifications are activated' => '', + // 'Notifications are disabled' => '', + 'User disabled' => '用户已禁用', + '%d notifications' => '%d 通知', + '%d notification' => '%d 通知', + // 'There is no external integration installed.' => '', + // 'You are not allowed to update tasks assigned to someone else.' => '', + // 'You are not allowed to change the assignee.' => '', + // 'Task suppression is not permitted' => '', + // 'Changing assignee is not permitted' => '', + // 'Update only assigned tasks is permitted' => '', + // 'Only for tasks assigned to the current user' => '', + 'My projects' => '我的项目', + 'Your are not member of any project.' => '你不是任何项目的成员。', + 'My subtasks' => '我的子任务', + '%d subtasks' => '%d 子任务', + '%d subtask' => '%d 子任务', + // 'Only moving task between those columns is permitted for tasks assigned to the current user' => '', + // '[DUPLICATE]' => '', + // 'DKK - Danish Krona' => '', + 'Remove user from group' => '从用户组中移除用户', + 'Assign the task to its creator' => '将任务分配给创建者', + // 'This task was sent by email to "%s" with subject "%s".' => '', + 'Predefined Email Subjects' => '预定义的邮件主题', + // 'Write one subject by line.' => '', + // 'Create another link' => '', + // 'BRL - Brazilian Real' => '', + // 'Add a new Kanboard task' => '', + // 'Subtask not started' => '', + // 'Subtask currently in progress' => '', + // 'Subtask completed' => '', + // 'Subtask added successfully.' => '', + // '%d subtasks added successfully.' => '', + // 'Enter one subtask by line.' => '', + // 'Predefined Contents' => '', + // 'Predefined contents' => '', + // 'Predefined Task Description' => '', + // 'Do you really want to remove this template? "%s"' => '', + // 'Add predefined task description' => '', + // 'Predefined Task Descriptions' => '', + // 'Template created successfully.' => '', + // 'Unable to create this template.' => '', + // 'Template updated successfully.' => '', + // 'Unable to update this template.' => '', + // 'Template removed successfully.' => '', + // 'Unable to remove this template.' => '', + // 'Template for the task description' => '', + // 'The start date is greater than the end date' => '', + // 'Tags must be separated by a comma' => '', + // 'Only the task title is required' => '', + // 'Creator Username' => '', + // 'Color Name' => '', + // 'Column Name' => '', + // 'Swimlane Name' => '', + // 'Time Estimated' => '', + // 'Time Spent' => '', + // 'External Link' => '', ); diff --git a/app/Model/ColumnMoveRestrictionModel.php b/app/Model/ColumnMoveRestrictionModel.php index c2603efd..9d2b2842 100644 --- a/app/Model/ColumnMoveRestrictionModel.php +++ b/app/Model/ColumnMoveRestrictionModel.php @@ -31,6 +31,7 @@ class ColumnMoveRestrictionModel extends Base self::TABLE.'.role_id', self::TABLE.'.src_column_id', self::TABLE.'.dst_column_id', + self::TABLE.'.only_assigned', 'pr.role', 'sc.title as src_column_title', 'dc.title as dst_column_title' @@ -59,6 +60,7 @@ class ColumnMoveRestrictionModel extends Base self::TABLE.'.role_id', self::TABLE.'.src_column_id', self::TABLE.'.dst_column_id', + self::TABLE.'.only_assigned', 'pr.role', 'sc.title as src_column_title', 'dc.title as dst_column_title' @@ -81,7 +83,7 @@ class ColumnMoveRestrictionModel extends Base { return $this->db ->table(self::TABLE) - ->columns(self::TABLE.'.src_column_id', self::TABLE.'.dst_column_id') + ->columns(self::TABLE.'.src_column_id', self::TABLE.'.dst_column_id', self::TABLE.'.only_assigned') ->left(ProjectRoleModel::TABLE, 'pr', 'role_id', self::TABLE, 'role_id') ->eq(self::TABLE.'.project_id', $project_id) ->eq('pr.role', $role) @@ -95,9 +97,10 @@ class ColumnMoveRestrictionModel extends Base * @param int $role_id * @param int $src_column_id * @param int $dst_column_id + * @param bool $only_assigned * @return bool|int */ - public function create($project_id, $role_id, $src_column_id, $dst_column_id) + public function create($project_id, $role_id, $src_column_id, $dst_column_id, $only_assigned = false) { return $this->db ->table(self::TABLE) @@ -106,6 +109,7 @@ class ColumnMoveRestrictionModel extends Base 'role_id' => $role_id, 'src_column_id' => $src_column_id, 'dst_column_id' => $dst_column_id, + 'only_assigned' => (int) $only_assigned, )); } diff --git a/app/Model/CurrencyModel.php b/app/Model/CurrencyModel.php index c858a6ae..6f009f61 100644 --- a/app/Model/CurrencyModel.php +++ b/app/Model/CurrencyModel.php @@ -38,6 +38,7 @@ class CurrencyModel extends Base 'INR' => t('INR - Indian Rupee'), 'JPY' => t('JPY - Japanese Yen'), 'RSD' => t('RSD - Serbian dinar'), + 'DKK' => t('DKK - Danish Krona'), 'SEK' => t('SEK - Swedish Krona'), 'NOK' => t('NOK - Norwegian Krone'), 'BAM' => t('BAM - Konvertible Mark'), @@ -45,6 +46,9 @@ class CurrencyModel extends Base 'CNY' => t('CNY - Chinese Yuan'), 'TRL' => t('TRL - Turkish Lira'), 'HRK' => t('HRK - Kuna'), + 'ARS' => t('ARS - Argentine Peso'), + 'COP' => t('COP - Colombian Peso'), + 'BRL' => t('BRL - Brazilian Real'), ); } diff --git a/app/Model/LanguageModel.php b/app/Model/LanguageModel.php index 7b12cac8..eff2191d 100644 --- a/app/Model/LanguageModel.php +++ b/app/Model/LanguageModel.php @@ -25,6 +25,7 @@ class LanguageModel extends Base return array( 'id_ID', 'bs_BA', + 'ca_ES', 'cs_CZ', 'da_DK', 'de_DE', @@ -41,6 +42,7 @@ class LanguageModel extends Base 'pl_PL', 'pt_PT', 'pt_BR', + 'ro_RO', 'ru_RU', 'sr_Latn_RS', 'fi_FI', @@ -50,6 +52,7 @@ class LanguageModel extends Base 'zh_CN', 'ja_JP', 'th_TH', + 'vi_VN', ); } @@ -80,6 +83,7 @@ class LanguageModel extends Base $languages = array( 'id_ID' => 'Bahasa Indonesia', 'bs_BA' => 'Bosanski', + 'ca_ES' => 'Català', 'cs_CZ' => 'Čeština', 'da_DK' => 'Dansk', 'de_DE' => 'Deutsch', @@ -96,6 +100,7 @@ class LanguageModel extends Base 'pl_PL' => 'Polski', 'pt_PT' => 'Português', 'pt_BR' => 'Português (Brasil)', + 'ro_RO' => 'Română', 'ru_RU' => 'Русский', 'sr_Latn_RS' => 'Srpski', 'fi_FI' => 'Suomi', @@ -105,6 +110,7 @@ class LanguageModel extends Base 'zh_CN' => '中文(简体)', 'ja_JP' => '日本語', 'th_TH' => 'ไทย', + 'vi_VN' => 'Tiếng Việt', ); if ($prepend) { @@ -124,6 +130,7 @@ class LanguageModel extends Base { $languages = array( 'cs_CZ' => 'cs', + 'ca_ES' => 'ca', 'da_DK' => 'da', 'de_DE' => 'de', 'en_US' => 'en', @@ -136,14 +143,15 @@ class LanguageModel extends Base 'nb_NO' => 'nb', 'pl_PL' => 'pl', 'pt_PT' => 'pt', - 'pt_BR' => 'pt-br', + 'pt_BR' => 'pt-BR', + 'ro_RO' => 'ro', 'ru_RU' => 'ru', 'sr_Latn_RS' => 'sr', 'fi_FI' => 'fi', 'sv_SE' => 'sv', 'tr_TR' => 'tr', 'ko_KR' => 'ko', - 'zh_CN' => 'zh-cn', + 'zh_CN' => 'zh-CN', 'ja_JP' => 'ja', 'th_TH' => 'th', 'id_ID' => 'id', diff --git a/app/Model/PredefinedTaskDescriptionModel.php b/app/Model/PredefinedTaskDescriptionModel.php new file mode 100644 index 00000000..aaa4d23e --- /dev/null +++ b/app/Model/PredefinedTaskDescriptionModel.php @@ -0,0 +1,52 @@ +<?php + +namespace Kanboard\Model; + +use Kanboard\Core\Base; + +class PredefinedTaskDescriptionModel extends Base +{ + const TABLE = 'predefined_task_descriptions'; + + public function getAll($projectId) + { + return $this->db->table(self::TABLE)->eq('project_id', $projectId)->findAll(); + } + + public function getList($projectId) + { + return array('' => t('None')) + $this->db->hashtable(self::TABLE)->eq('project_id', $projectId)->getAll('id', 'title'); + } + + public function getById($projectId, $id) + { + return $this->db->table(self::TABLE)->eq('project_id', $projectId)->eq('id', $id)->findOne(); + } + + public function getDescriptionById($projectId, $id) + { + return $this->db->table(self::TABLE)->eq('project_id', $projectId)->eq('id', $id)->findOneColumn('description'); + } + + public function create($projectId, $title, $description) + { + return $this->db->table(self::TABLE)->persist(array( + 'project_id' => $projectId, + 'title' => $title, + 'description' => $description, + )); + } + + public function update($projectId, $id, $title, $description) + { + return $this->db->table(self::TABLE)->eq('project_id', $projectId)->eq('id', $id)->update(array( + 'title' => $title, + 'description' => $description, + )); + } + + public function remove($projectId, $id) + { + return $this->db->table(self::TABLE)->eq('project_id', $projectId)->eq('id', $id)->remove(); + } +} diff --git a/app/Model/ProjectActivityModel.php b/app/Model/ProjectActivityModel.php index 380ea125..17cf6485 100644 --- a/app/Model/ProjectActivityModel.php +++ b/app/Model/ProjectActivityModel.php @@ -21,13 +21,6 @@ class ProjectActivityModel extends Base const TABLE = 'project_activities'; /** - * Maximum number of events - * - * @var integer - */ - const MAX_EVENTS = 1000; - - /** * Add a new event for the project * * @access public @@ -49,7 +42,7 @@ class ProjectActivityModel extends Base 'data' => json_encode($data), ); - $this->cleanup(self::MAX_EVENTS - 1); + $this->cleanup(PROJECT_ACTIVITIES_MAX_EVENTS - 1); return $this->db->table(self::TABLE)->insert($values); } diff --git a/app/Model/ProjectGroupRoleModel.php b/app/Model/ProjectGroupRoleModel.php index 2729d5a6..2b1973f5 100644 --- a/app/Model/ProjectGroupRoleModel.php +++ b/app/Model/ProjectGroupRoleModel.php @@ -85,7 +85,13 @@ class ProjectGroupRoleModel extends Base public function getUsers($project_id) { return $this->db->table(self::TABLE) - ->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name', self::TABLE.'.role') + ->columns( + UserModel::TABLE.'.id', + UserModel::TABLE.'.username', + UserModel::TABLE.'.name', + UserModel::TABLE.'.email', + self::TABLE.'.role' + ) ->join(GroupMemberModel::TABLE, 'group_id', 'group_id', self::TABLE) ->join(UserModel::TABLE, 'id', 'user_id', GroupMemberModel::TABLE) ->eq(self::TABLE.'.project_id', $project_id) diff --git a/app/Model/ProjectModel.php b/app/Model/ProjectModel.php index aa7c002d..097806d8 100644 --- a/app/Model/ProjectModel.php +++ b/app/Model/ProjectModel.php @@ -202,16 +202,23 @@ class ProjectModel extends Base * Return the list of all projects * * @access public - * @param bool $prepend If true, prepend to the list the value 'None' + * @param bool $prependNone + * @param bool $noPrivateProjects * @return array */ - public function getList($prepend = true) + public function getList($prependNone = true, $noPrivateProjects = true) { - if ($prepend) { - return array(t('None')) + $this->db->hashtable(self::TABLE)->asc('name')->getAll('id', 'name'); + if ($noPrivateProjects) { + $projects = $this->db->hashtable(self::TABLE)->eq('is_private', 0)->asc('name')->getAll('id', 'name'); + } else { + $projects = $this->db->hashtable(self::TABLE)->asc('name')->getAll('id', 'name'); } - return $this->db->hashtable(self::TABLE)->asc('name')->getAll('id', 'name'); + if ($prependNone) { + return array(t('None')) + $projects; + } + + return $projects; } /** @@ -310,11 +317,11 @@ class ProjectModel extends Base } return $this->db - ->table(ProjectModel::TABLE) - ->columns(self::TABLE.'.*', UserModel::TABLE.'.username AS owner_username', UserModel::TABLE.'.name AS owner_name') - ->join(UserModel::TABLE, 'id', 'owner_id') - ->in(self::TABLE.'.id', $project_ids) - ->callback(array($this, 'applyColumnStats')); + ->table(ProjectModel::TABLE) + ->columns(self::TABLE.'.*', UserModel::TABLE.'.username AS owner_username', UserModel::TABLE.'.name AS owner_name') + ->join(UserModel::TABLE, 'id', 'owner_id') + ->in(self::TABLE.'.id', $project_ids) + ->callback(array($this, 'applyColumnStats')); } /** @@ -348,6 +355,10 @@ class ProjectModel extends Base */ public function create(array $values, $userId = 0, $addUser = false) { + if (! empty($userId) && ! $this->userModel->exists($userId)) { + return false; + } + $this->db->startTransaction(); $values['token'] = ''; @@ -440,6 +451,10 @@ class ProjectModel extends Base $values['end_date'] = $this->dateParser->getIsoDate($values['end_date']); } + if (! empty($values['owner_id']) && ! $this->userModel->exists($values['owner_id'])) { + return false; + } + $this->helper->model->convertIntegerFields($values, array('priority_default', 'priority_start', 'priority_end')); return $this->exists($values['id']) && @@ -455,7 +470,13 @@ class ProjectModel extends Base */ public function remove($project_id) { - return $this->db->table(self::TABLE)->eq('id', $project_id)->remove(); + $this->db->startTransaction(); + + $this->db->table(TagModel::TABLE)->eq('project_id', $project_id)->remove(); + $result = $this->db->table(self::TABLE)->eq('id', $project_id)->remove(); + + $this->db->closeTransaction(); + return $result; } /** diff --git a/app/Model/ProjectPermissionModel.php b/app/Model/ProjectPermissionModel.php index dabd406c..d1351a6c 100644 --- a/app/Model/ProjectPermissionModel.php +++ b/app/Model/ProjectPermissionModel.php @@ -93,20 +93,22 @@ class ProjectPermissionModel extends Base return $members; } - /** - * Return true if everybody is allowed for the project - * - * @access public - * @param integer $project_id Project id - * @return bool - */ - public function isEverybodyAllowed($project_id) + public function getMembers($project_id) + { + $userMembers = $this->projectUserRoleModel->getUsers($project_id); + $groupMembers = $this->projectGroupRoleModel->getUsers($project_id); + + $userMembers = array_column_index_unique($userMembers, 'username'); + $groupMembers = array_column_index_unique($groupMembers, 'username'); + return array_merge($userMembers, $groupMembers); + } + + public function getMembersWithEmail($project_id) { - return $this->db - ->table(ProjectModel::TABLE) - ->eq('id', $project_id) - ->eq('is_everybody_allowed', 1) - ->exists(); + $members = $this->getMembers($project_id); + return array_filter($members, function (array $user) { + return ! empty($user['email']); + }); } /** diff --git a/app/Model/ProjectRoleRestrictionModel.php b/app/Model/ProjectRoleRestrictionModel.php index 8ccdcf9c..45e7ed2f 100644 --- a/app/Model/ProjectRoleRestrictionModel.php +++ b/app/Model/ProjectRoleRestrictionModel.php @@ -14,9 +14,12 @@ class ProjectRoleRestrictionModel extends Base { const TABLE = 'project_role_has_restrictions'; - const RULE_TASK_CREATION = 'task_creation'; - const RULE_TASK_OPEN_CLOSE = 'task_open_close'; - const RULE_TASK_MOVE = 'task_move'; + const RULE_TASK_CREATION = 'task_creation'; + const RULE_TASK_SUPPRESSION = 'task_remove'; + const RULE_TASK_OPEN_CLOSE = 'task_open_close'; + const RULE_TASK_MOVE = 'task_move'; + const RULE_TASK_CHANGE_ASSIGNEE = 'task_change_assignee'; + const RULE_TASK_UPDATE_ASSIGNED = 'task_update_assigned'; /** * Get rules @@ -26,9 +29,12 @@ class ProjectRoleRestrictionModel extends Base public function getRules() { return array( - self::RULE_TASK_CREATION => t('Task creation is not permitted'), - self::RULE_TASK_OPEN_CLOSE => t('Closing or opening a task is not permitted'), - self::RULE_TASK_MOVE => t('Moving a task is not permitted'), + self::RULE_TASK_CREATION => t('Task creation is not permitted'), + self::RULE_TASK_SUPPRESSION => t('Task suppression is not permitted'), + self::RULE_TASK_OPEN_CLOSE => t('Closing or opening a task is not permitted'), + self::RULE_TASK_MOVE => t('Moving a task is not permitted'), + self::RULE_TASK_CHANGE_ASSIGNEE => t('Changing assignee is not permitted'), + self::RULE_TASK_UPDATE_ASSIGNED => t('Update only assigned tasks is permitted'), ); } diff --git a/app/Model/ProjectUserRoleModel.php b/app/Model/ProjectUserRoleModel.php index 76094431..dc4add34 100644 --- a/app/Model/ProjectUserRoleModel.php +++ b/app/Model/ProjectUserRoleModel.php @@ -44,10 +44,7 @@ class ProjectUserRoleModel extends Base { $userProjects = $this->db ->hashtable(ProjectModel::TABLE) - ->beginOr() ->eq(self::TABLE.'.user_id', $user_id) - ->eq(ProjectModel::TABLE.'.is_everybody_allowed', 1) - ->closeOr() ->in(ProjectModel::TABLE.'.is_active', $status) ->join(self::TABLE, 'project_id', 'id') ->getAll(ProjectModel::TABLE.'.id', ProjectModel::TABLE.'.name'); @@ -70,15 +67,6 @@ class ProjectUserRoleModel extends Base */ public function getUserRole($project_id, $user_id) { - $projectInfo = $this->db->table(ProjectModel::TABLE) - ->eq('id', $project_id) - ->columns('owner_id', 'is_everybody_allowed') - ->findOne(); - - if ($projectInfo['is_everybody_allowed'] == 1) { - return $projectInfo['owner_id'] == $user_id ? Role::PROJECT_MANAGER : Role::PROJECT_MEMBER; - } - $role = $this->db->table(self::TABLE)->eq('user_id', $user_id)->eq('project_id', $project_id)->findOneColumn('role'); if (empty($role)) { @@ -98,7 +86,13 @@ class ProjectUserRoleModel extends Base public function getUsers($project_id) { return $this->db->table(self::TABLE) - ->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name', self::TABLE.'.role') + ->columns( + UserModel::TABLE.'.id', + UserModel::TABLE.'.username', + UserModel::TABLE.'.name', + UserModel::TABLE.'.email', + self::TABLE.'.role' + ) ->join(UserModel::TABLE, 'id', 'user_id') ->eq('project_id', $project_id) ->asc(UserModel::TABLE.'.username') @@ -157,10 +151,6 @@ class ProjectUserRoleModel extends Base */ public function getAssignableUsers($project_id) { - if ($this->projectPermissionModel->isEverybodyAllowed($project_id)) { - return $this->userModel->getActiveUsersList(); - } - $userMembers = $this->db->table(self::TABLE) ->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name') ->join(UserModel::TABLE, 'id', 'user_id') diff --git a/app/Model/SubtaskModel.php b/app/Model/SubtaskModel.php index c62ddb53..1e652ae2 100644 --- a/app/Model/SubtaskModel.php +++ b/app/Model/SubtaskModel.php @@ -70,35 +70,6 @@ class SubtaskModel extends Base } /** - * Get the query to fetch subtasks assigned to a user - * - * @access public - * @param integer $userId - * @param array $status - * @return \PicoDb\Table - */ - public function getUserQuery($userId, array $status) - { - return $this->db->table(SubtaskModel::TABLE) - ->columns( - SubtaskModel::TABLE.'.*', - TaskModel::TABLE.'.project_id', - TaskModel::TABLE.'.color_id', - TaskModel::TABLE.'.title AS task_name', - ProjectModel::TABLE.'.name AS project_name' - ) - ->subquery($this->subtaskTimeTrackingModel->getTimerQuery($userId), 'timer_start_date') - ->eq('user_id', $userId) - ->eq(ProjectModel::TABLE.'.is_active', ProjectModel::ACTIVE) - ->eq(ColumnModel::TABLE.'.hide_in_dashboard', 0) - ->in(SubtaskModel::TABLE.'.status', $status) - ->join(TaskModel::TABLE, 'id', 'task_id') - ->join(ProjectModel::TABLE, 'id', 'project_id', TaskModel::TABLE) - ->join(ColumnModel::TABLE, 'id', 'column_id', TaskModel::TABLE) - ->callback(array($this, 'addStatusName')); - } - - /** * Get common query * * @return \PicoDb\Table @@ -117,6 +88,15 @@ class SubtaskModel extends Base ->asc(self::TABLE.'.position'); } + public function countByAssigneeAndTaskStatus($userId) + { + return $this->db->table(self::TABLE) + ->eq('user_id', $userId) + ->eq(TaskModel::TABLE.'.is_active', TaskModel::STATUS_OPEN) + ->join(Taskmodel::TABLE, 'id', 'task_id') + ->count(); + } + /** * Get all subtasks for a given task * @@ -149,6 +129,24 @@ class SubtaskModel extends Base } /** + * Get subtasks for a list of tasks and a given assignee + * + * @param array $taskIds + * @param integer $userId + * @return array + */ + public function getAllByTaskIdsAndAssignee(array $taskIds, $userId) + { + if (empty($taskIds)) { + return array(); + } + + return $this->subtaskListFormatter + ->withQuery($this->getQuery()->in('task_id', $taskIds)->eq(self::TABLE.'.user_id', $userId)) + ->format(); + } + + /** * Get a subtask by the id * * @access public @@ -229,10 +227,11 @@ class SubtaskModel extends Base $result = $this->db->table(self::TABLE)->eq('id', $values['id'])->save($values); if ($result) { - $this->subtaskTimeTrackingModel->updateTaskTimeTracking($values['task_id']); + $subtask = $this->getById($values['id']); + $this->subtaskTimeTrackingModel->updateTaskTimeTracking($subtask['task_id']); if ($fireEvent) { - $this->queueManager->push($this->subtaskEventJob->withParams($values['id'], self::EVENT_UPDATE, $values)); + $this->queueManager->push($this->subtaskEventJob->withParams($subtask['id'], self::EVENT_UPDATE, $values)); } } @@ -310,24 +309,4 @@ class SubtaskModel extends Base $values['user_id'] = isset($values['user_id']) ? $values['user_id'] : 0; $this->hook->reference('model:subtask:creation:prepare', $values); } - - /** - * Add subtask status status to the resultset - * - * @access public - * @param array $subtasks Subtasks - * @return array - */ - public function addStatusName(array $subtasks) - { - $status = $this->getStatusList(); - - foreach ($subtasks as &$subtask) { - $subtask['status_name'] = $status[$subtask['status']]; - $subtask['timer_start_date'] = isset($subtask['timer_start_date']) ? $subtask['timer_start_date'] : 0; - $subtask['is_timer_started'] = ! empty($subtask['timer_start_date']); - } - - return $subtasks; - } } diff --git a/app/Model/TaskCreationModel.php b/app/Model/TaskCreationModel.php index 95f62ee5..dbec2b12 100644 --- a/app/Model/TaskCreationModel.php +++ b/app/Model/TaskCreationModel.php @@ -58,7 +58,7 @@ class TaskCreationModel extends Base */ protected function prepare(array &$values) { - $values = $this->dateParser->convert($values, array('date_due')); + $values = $this->dateParser->convert($values, array('date_due'), true); $values = $this->dateParser->convert($values, array('date_started'), true); $this->helper->model->removeFields($values, array('another_task', 'duplicate_multiple_projects')); diff --git a/app/Model/TaskDuplicationModel.php b/app/Model/TaskDuplicationModel.php index c07ebca0..eb59f555 100644 --- a/app/Model/TaskDuplicationModel.php +++ b/app/Model/TaskDuplicationModel.php @@ -47,7 +47,10 @@ class TaskDuplicationModel extends Base */ public function duplicate($task_id) { - $new_task_id = $this->save($task_id, $this->copyFields($task_id)); + $values = $this->copyFields($task_id); + $values['title'] = t('[DUPLICATE]').' '.$values['title']; + + $new_task_id = $this->save($task_id, $values); if ($new_task_id !== false) { $this->tagDuplicationModel->duplicateTaskTags($task_id, $new_task_id); diff --git a/app/Model/TaskFinderModel.php b/app/Model/TaskFinderModel.php index b610a371..e3b5e0b9 100644 --- a/app/Model/TaskFinderModel.php +++ b/app/Model/TaskFinderModel.php @@ -59,27 +59,11 @@ class TaskFinderModel extends Base */ public function getUserQuery($user_id) { - return $this->db - ->table(TaskModel::TABLE) - ->columns( - TaskModel::TABLE.'.id', - TaskModel::TABLE.'.title', - TaskModel::TABLE.'.date_due', - TaskModel::TABLE.'.date_creation', - TaskModel::TABLE.'.project_id', - TaskModel::TABLE.'.column_id', - TaskModel::TABLE.'.color_id', - TaskModel::TABLE.'.priority', - TaskModel::TABLE.'.time_spent', - TaskModel::TABLE.'.time_estimated', - TaskModel::TABLE.'.is_active', - TaskModel::TABLE.'.creator_id', - ProjectModel::TABLE.'.name AS project_name', - ColumnModel::TABLE.'.title AS column_title' - ) - ->join(ProjectModel::TABLE, 'id', 'project_id') - ->join(ColumnModel::TABLE, 'id', 'column_id') + return $this->getExtendedQuery() + ->beginOr() ->eq(TaskModel::TABLE.'.owner_id', $user_id) + ->addCondition(TaskModel::TABLE.".id IN (SELECT task_id FROM ".SubtaskModel::TABLE." WHERE ".SubtaskModel::TABLE.".user_id='$user_id')") + ->closeOr() ->eq(TaskModel::TABLE.'.is_active', TaskModel::STATUS_OPEN) ->eq(ProjectModel::TABLE.'.is_active', ProjectModel::ACTIVE) ->eq(ColumnModel::TABLE.'.hide_in_dashboard', 0); @@ -213,7 +197,7 @@ class TaskFinderModel extends Base ->eq(ProjectModel::TABLE.'.is_active', 1) ->eq(TaskModel::TABLE.'.is_active', 1) ->neq(TaskModel::TABLE.'.date_due', 0) - ->lte(TaskModel::TABLE.'.date_due', mktime(23, 59, 59)); + ->lte(TaskModel::TABLE.'.date_due', time()); } /** diff --git a/app/Model/TaskModificationModel.php b/app/Model/TaskModificationModel.php index 0ae29293..b10c0aa9 100644 --- a/app/Model/TaskModificationModel.php +++ b/app/Model/TaskModificationModel.php @@ -98,7 +98,7 @@ class TaskModificationModel extends Base */ protected function prepare(array &$values) { - $values = $this->dateParser->convert($values, array('date_due')); + $values = $this->dateParser->convert($values, array('date_due'), true); $values = $this->dateParser->convert($values, array('date_started'), true); $this->helper->model->removeFields($values, array('id')); diff --git a/app/Model/TaskPositionModel.php b/app/Model/TaskPositionModel.php index 8805d57e..9f7eb983 100644 --- a/app/Model/TaskPositionModel.php +++ b/app/Model/TaskPositionModel.php @@ -243,26 +243,26 @@ class TaskPositionModel extends Base ); if ($task['swimlane_id'] != $new_swimlane_id) { - $this->queueManager->push($this->taskEventJob->withParams( + $this->taskEventJob->execute( $task['id'], array(TaskModel::EVENT_MOVE_SWIMLANE), $changes, $changes - )); + ); } elseif ($task['column_id'] != $new_column_id) { - $this->queueManager->push($this->taskEventJob->withParams( + $this->taskEventJob->execute( $task['id'], array(TaskModel::EVENT_MOVE_COLUMN), $changes, $changes - )); + ); } elseif ($task['position'] != $new_position) { - $this->queueManager->push($this->taskEventJob->withParams( + $this->taskEventJob->execute( $task['id'], array(TaskModel::EVENT_MOVE_POSITION), $changes, $changes - )); + ); } } } diff --git a/app/Model/UserModel.php b/app/Model/UserModel.php index 56b1a960..af49ce7d 100644 --- a/app/Model/UserModel.php +++ b/app/Model/UserModel.php @@ -376,4 +376,20 @@ class UserModel extends Base ->eq('id', $user_id) ->save(array('token' => '')); } + + public function getOrCreateExternalUserId($username, $name, $externalIdColumn, $externalId) + { + $userId = $this->db->table(self::TABLE)->eq($externalIdColumn, $externalId)->findOneColumn('id'); + + if (empty($userId)) { + $userId = $this->create(array( + 'username' => $username, + 'name' => $name, + 'is_ldap_user' => 1, + $externalIdColumn => $externalId, + )); + } + + return $userId; + } } diff --git a/app/Model/UserNotificationModel.php b/app/Model/UserNotificationModel.php index d77526f6..9e90cf5d 100644 --- a/app/Model/UserNotificationModel.php +++ b/app/Model/UserNotificationModel.php @@ -68,10 +68,6 @@ class UserNotificationModel extends Base */ public function getUsersWithNotificationEnabled($project_id, $exclude_user_id = 0) { - if ($this->projectPermissionModel->isEverybodyAllowed($project_id)) { - return $this->getEverybodyWithNotificationEnabled($exclude_user_id); - } - $users = array(); $members = $this->getProjectUserMembersWithNotificationEnabled($project_id, $exclude_user_id); $groups = $this->getProjectGroupMembersWithNotificationEnabled($project_id, $exclude_user_id); @@ -183,22 +179,4 @@ class UserNotificationModel extends Base ->eq(UserModel::TABLE.'.is_active', 1) ->findAll(); } - - /** - * Get a list of project members with notification enabled - * - * @access private - * @param integer $exclude_user_id User id to exclude - * @return array - */ - private function getEverybodyWithNotificationEnabled($exclude_user_id) - { - return $this->db - ->table(UserModel::TABLE) - ->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name', UserModel::TABLE.'.email', UserModel::TABLE.'.language', UserModel::TABLE.'.notifications_filter') - ->eq('notifications_enabled', '1') - ->neq(UserModel::TABLE.'.id', $exclude_user_id) - ->eq(UserModel::TABLE.'.is_active', 1) - ->findAll(); - } } diff --git a/app/Pagination/DashboardPagination.php b/app/Pagination/DashboardPagination.php new file mode 100644 index 00000000..b8fc4434 --- /dev/null +++ b/app/Pagination/DashboardPagination.php @@ -0,0 +1,50 @@ +<?php + +namespace Kanboard\Pagination; + +use Kanboard\Core\Base; +use Kanboard\Model\ProjectModel; +use Kanboard\Model\TaskModel; + +/** + * Class DashboardPagination + * + * @package Kanboard\Pagination + * @author Frederic Guillot + */ +class DashboardPagination extends Base +{ + /** + * Get user listing pagination + * + * @access public + * @param integer $userId + * @return array + */ + public function getOverview($userId) + { + $paginators = array(); + $projects = $this->projectUserRoleModel->getActiveProjectsByUser($userId); + + foreach ($projects as $projectId => $projectName) { + $paginator = $this->paginator + ->setUrl('DashboardController', 'show', array('user_id' => $userId)) + ->setMax(50) + ->setOrder(TaskModel::TABLE.'.priority') + ->setDirection('DESC') + ->setFormatter($this->taskListSubtaskAssigneeFormatter->withUserId($userId)) + ->setQuery($this->taskFinderModel->getUserQuery($userId)->eq(ProjectModel::TABLE.'.id', $projectId)) + ->calculate(); + + if ($paginator->getTotal() > 0) { + $paginators[] = array( + 'project_id' => $projectId, + 'project_name' => $projectName, + 'paginator' => $paginator, + ); + } + } + + return $paginators; + } +} diff --git a/app/Pagination/SubtaskPagination.php b/app/Pagination/SubtaskPagination.php index c55d0fb4..83593b5e 100644 --- a/app/Pagination/SubtaskPagination.php +++ b/app/Pagination/SubtaskPagination.php @@ -4,7 +4,6 @@ namespace Kanboard\Pagination; use Kanboard\Core\Base; use Kanboard\Core\Paginator; -use Kanboard\Model\SubtaskModel; use Kanboard\Model\TaskModel; /** @@ -19,21 +18,18 @@ class SubtaskPagination extends Base * Get dashboard pagination * * @access public - * @param integer $user_id - * @param string $method - * @param integer $max + * @param integer $userId * @return Paginator */ - public function getDashboardPaginator($user_id, $method, $max) + public function getDashboardPaginator($userId) { - $query = $this->subtaskModel->getUserQuery($user_id, array(SubtaskModel::STATUS_TODO, SubtaskModel::STATUS_INPROGRESS)); - $this->hook->reference('pagination:dashboard:subtask:query', $query); - return $this->paginator - ->setUrl('DashboardController', $method, array('pagination' => 'subtasks', 'user_id' => $user_id)) - ->setMax($max) - ->setOrder(TaskModel::TABLE.'.id') - ->setQuery($query) - ->calculateOnlyIf($this->request->getStringParam('pagination') === 'subtasks'); + ->setUrl('DashboardController', 'subtasks', array('user_id' => $userId)) + ->setMax(50) + ->setOrder(TaskModel::TABLE.'.priority') + ->setDirection('DESC') + ->setFormatter($this->taskListSubtaskAssigneeFormatter->withUserId($userId)->withoutEmptyTasks()) + ->setQuery($this->taskFinderModel->getUserQuery($userId)) + ->calculate(); } } diff --git a/app/Pagination/TaskPagination.php b/app/Pagination/TaskPagination.php index 5fe986e7..53e05c13 100644 --- a/app/Pagination/TaskPagination.php +++ b/app/Pagination/TaskPagination.php @@ -18,21 +18,22 @@ class TaskPagination extends Base * Get dashboard pagination * * @access public - * @param integer $user_id + * @param integer $userId * @param string $method * @param integer $max * @return Paginator */ - public function getDashboardPaginator($user_id, $method, $max) + public function getDashboardPaginator($userId, $method, $max) { - $query = $this->taskFinderModel->getUserQuery($user_id); + $query = $this->taskFinderModel->getUserQuery($userId); $this->hook->reference('pagination:dashboard:task:query', $query); return $this->paginator - ->setUrl('DashboardController', $method, array('pagination' => 'tasks', 'user_id' => $user_id)) + ->setUrl('DashboardController', $method, array('pagination' => 'tasks', 'user_id' => $userId)) ->setMax($max) ->setOrder(TaskModel::TABLE.'.id') ->setQuery($query) + ->setFormatter($this->taskListFormatter) ->calculateOnlyIf($this->request->getStringParam('pagination') === 'tasks'); } } diff --git a/app/Pagination/UserPagination.php b/app/Pagination/UserPagination.php index 430b7d2f..87688573 100644 --- a/app/Pagination/UserPagination.php +++ b/app/Pagination/UserPagination.php @@ -15,7 +15,7 @@ use Kanboard\Model\UserModel; class UserPagination extends Base { /** - * Get user listing paginator + * Get user listing pagination * * @access public * @return Paginator diff --git a/app/Schema/Migration.php b/app/Schema/Migration.php index 654303f4..21ef4427 100644 --- a/app/Schema/Migration.php +++ b/app/Schema/Migration.php @@ -13,6 +13,13 @@ function migrate_default_swimlane(PDO $pdo) $project['default_swimlane'] = 'Default swimlane'; } + $rq = $pdo->prepare('SELECT 1 FROM swimlanes WHERE name=? AND project_id=?'); + $rq->execute(array($project['default_swimlane'], $project['id'])); + + if ($rq->fetchColumn()) { + $project['default_swimlane'] = $project['default_swimlane'].' (Default swimlane)'; + } + // Create new default swimlane $rq = $pdo->prepare('INSERT INTO swimlanes (project_id, name, is_active, position) VALUES (?, ?, ?, ?)'); $rq->execute(array( diff --git a/app/Schema/Mysql.php b/app/Schema/Mysql.php index 385f63a3..5709b86d 100644 --- a/app/Schema/Mysql.php +++ b/app/Schema/Mysql.php @@ -8,7 +8,34 @@ use PDO; use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Role; -const VERSION = 122; +const VERSION = 126; + +function version_126(PDO $pdo) +{ + $pdo->exec('CREATE TABLE predefined_task_descriptions ( + id INT NOT NULL AUTO_INCREMENT, + project_id INT NOT NULL, + title TEXT NOT NULL, + description TEXT NOT NULL, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, + PRIMARY KEY(id) + ) ENGINE=InnoDB CHARSET=utf8'); +} + +function version_125(PDO $pdo) +{ + $pdo->exec('ALTER TABLE projects DROP COLUMN is_everybody_allowed'); +} + +function version_124(PDO $pdo) +{ + $pdo->exec('ALTER TABLE projects ADD COLUMN predefined_email_subjects TEXT'); +} + +function version_123(PDO $pdo) +{ + $pdo->exec('ALTER TABLE column_has_move_restrictions ADD COLUMN only_assigned TINYINT(1) DEFAULT 0'); +} function version_122(PDO $pdo) { diff --git a/app/Schema/Postgres.php b/app/Schema/Postgres.php index cc3d9632..bf9acaa7 100644 --- a/app/Schema/Postgres.php +++ b/app/Schema/Postgres.php @@ -8,7 +8,33 @@ use PDO; use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Role; -const VERSION = 101; +const VERSION = 105; + +function version_105(PDO $pdo) +{ + $pdo->exec('CREATE TABLE predefined_task_descriptions ( + id SERIAL PRIMARY KEY, + project_id INTEGER NOT NULL, + title TEXT NOT NULL, + description TEXT NOT NULL, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE + )'); +} + +function version_104(PDO $pdo) +{ + $pdo->exec('ALTER TABLE projects DROP COLUMN is_everybody_allowed'); +} + +function version_103(PDO $pdo) +{ + $pdo->exec('ALTER TABLE projects ADD COLUMN predefined_email_subjects TEXT'); +} + +function version_102(PDO $pdo) +{ + $pdo->exec('ALTER TABLE column_has_move_restrictions ADD COLUMN only_assigned BOOLEAN DEFAULT FALSE'); +} function version_101(PDO $pdo) { diff --git a/app/Schema/Sql/mysql.sql b/app/Schema/Sql/mysql.sql index d861823a..08e9b365 100644 --- a/app/Schema/Sql/mysql.sql +++ b/app/Schema/Sql/mysql.sql @@ -44,6 +44,7 @@ CREATE TABLE `column_has_move_restrictions` ( `role_id` int(11) NOT NULL, `src_column_id` int(11) NOT NULL, `dst_column_id` int(11) NOT NULL, + `only_assigned` tinyint(1) DEFAULT '0', PRIMARY KEY (`restriction_id`), UNIQUE KEY `role_id` (`role_id`,`src_column_id`,`dst_column_id`), KEY `project_id` (`project_id`), @@ -751,7 +752,7 @@ CREATE TABLE `users` ( LOCK TABLES `settings` WRITE; /*!40000 ALTER TABLE `settings` DISABLE KEYS */; -INSERT INTO `settings` VALUES ('api_token','af0d1f150c4f64ad61dcfdd28d5544c767656994c05bce919ca4c78ab704',0,0),('application_currency','USD',0,0),('application_date_format','m/d/Y',0,0),('application_language','en_US',0,0),('application_stylesheet','',0,0),('application_timezone','UTC',0,0),('application_url','',0,0),('board_columns','',0,0),('board_highlight_period','172800',0,0),('board_private_refresh_interval','10',0,0),('board_public_refresh_interval','60',0,0),('calendar_project_tasks','date_started',0,0),('calendar_user_subtasks_time_tracking','0',0,0),('calendar_user_tasks','date_started',0,0),('cfd_include_closed_tasks','1',0,0),('default_color','yellow',0,0),('integration_gravatar','0',0,0),('password_reset','1',0,0),('project_categories','',0,0),('subtask_restriction','0',0,0),('subtask_time_tracking','1',0,0),('webhook_token','9dc22b7faf57e4a9978c7ee30ce7ff85763fe3ebe5d595967a283610a321',0,0),('webhook_url','',0,0); +INSERT INTO `settings` VALUES ('api_token','7b7306fb38aa10046043df6e9631f51193ef58dc14b0b62836d00b2bb03e',0,0),('application_currency','USD',0,0),('application_date_format','m/d/Y',0,0),('application_language','en_US',0,0),('application_stylesheet','',0,0),('application_timezone','UTC',0,0),('application_url','',0,0),('board_columns','',0,0),('board_highlight_period','172800',0,0),('board_private_refresh_interval','10',0,0),('board_public_refresh_interval','60',0,0),('calendar_project_tasks','date_started',0,0),('calendar_user_subtasks_time_tracking','0',0,0),('calendar_user_tasks','date_started',0,0),('cfd_include_closed_tasks','1',0,0),('default_color','yellow',0,0),('integration_gravatar','0',0,0),('password_reset','1',0,0),('project_categories','',0,0),('subtask_restriction','0',0,0),('subtask_time_tracking','1',0,0),('webhook_token','384d5b69ffd7315f2cf1eef2c170b5ed0dbf6d2a2e63462e39dca5d24db2',0,0),('webhook_url','',0,0); /*!40000 ALTER TABLE `settings` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -780,4 +781,4 @@ UNLOCK TABLES; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -INSERT INTO users (username, password, role) VALUES ('admin', '$2y$10$rArU1OPUgo7QhObLvFaq1.d7FlIaC4XEsBBWLxIfifNJapk9h71uO', 'app-admin');INSERT INTO schema_version VALUES ('122'); +INSERT INTO users (username, password, role) VALUES ('admin', '$2y$10$0WR8YPAwOCrDQTRFjji6u.krMgA4PcVsmw3ypmXAkqFKFLwnFOpAG', 'app-admin');INSERT INTO schema_version VALUES ('123'); diff --git a/app/Schema/Sql/postgres.sql b/app/Schema/Sql/postgres.sql index c4310963..52ba11cb 100644 --- a/app/Schema/Sql/postgres.sql +++ b/app/Schema/Sql/postgres.sql @@ -97,7 +97,8 @@ CREATE TABLE "column_has_move_restrictions" ( "project_id" integer NOT NULL, "role_id" integer NOT NULL, "src_column_id" integer NOT NULL, - "dst_column_id" integer NOT NULL + "dst_column_id" integer NOT NULL, + "only_assigned" boolean DEFAULT false ); @@ -2570,8 +2571,8 @@ INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('board_high INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('board_public_refresh_interval', '60', 0, 0); INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('board_private_refresh_interval', '10', 0, 0); INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('board_columns', '', 0, 0); -INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('webhook_token', 'eb478afd6da3ca2b1bda2e5ef2b47d83f0ebdeef5cdebc02e01d5b568835', 0, 0); -INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('api_token', '32cf0d4f136c1adffb9475b9a4c910f3231dcac5c44777eb467f0e714e51', 0, 0); +INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('webhook_token', 'd5afda7f7444f8600138b276ae9a3d1e36781c3111ed35a55fc1a3ca3ff5', 0, 0); +INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('api_token', '8814fa59e03411e82772826d166f5cf444324efefcf334ae64b4921d53f3', 0, 0); INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('application_language', 'en_US', 0, 0); INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('application_timezone', 'UTC', 0, 0); INSERT INTO settings (option, value, changed_by, changed_on) VALUES ('application_url', '', 0, 0); @@ -2640,4 +2641,4 @@ SELECT pg_catalog.setval('links_id_seq', 11, true); -- PostgreSQL database dump complete -- -INSERT INTO users (username, password, role) VALUES ('admin', '$2y$10$rArU1OPUgo7QhObLvFaq1.d7FlIaC4XEsBBWLxIfifNJapk9h71uO', 'app-admin');INSERT INTO schema_version VALUES ('101'); +INSERT INTO users (username, password, role) VALUES ('admin', '$2y$10$0WR8YPAwOCrDQTRFjji6u.krMgA4PcVsmw3ypmXAkqFKFLwnFOpAG', 'app-admin');INSERT INTO schema_version VALUES ('102'); diff --git a/app/Schema/Sqlite.php b/app/Schema/Sqlite.php index 2d35b99e..70d13b98 100644 --- a/app/Schema/Sqlite.php +++ b/app/Schema/Sqlite.php @@ -8,7 +8,55 @@ use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Role; use PDO; -const VERSION = 112; +const VERSION = 116; + +function version_116(PDO $pdo) +{ + $pdo->exec('CREATE TABLE predefined_task_descriptions ( + id INTEGER PRIMARY KEY, + project_id INTEGER NOT NULL, + title TEXT NOT NULL, + description TEXT NOT NULL, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE + )'); +} + +function version_115(PDO $pdo) +{ + $pdo->exec('ALTER TABLE projects ADD COLUMN predefined_email_subjects TEXT'); +} + +function version_114(PDO $pdo) +{ + $pdo->exec('ALTER TABLE column_has_move_restrictions ADD COLUMN only_assigned INTEGER DEFAULT 0'); +} + +function version_113(PDO $pdo) +{ + $pdo->exec( + 'ALTER TABLE project_activities RENAME TO project_activities_bak' + ); + $pdo->exec(" + CREATE TABLE project_activities ( + id INTEGER PRIMARY KEY, + date_creation INTEGER NOT NULL, + event_name TEXT NOT NULL, + creator_id INTEGER NOT NULL, + project_id INTEGER NOT NULL, + task_id INTEGER NOT NULL, + data TEXT, + FOREIGN KEY(creator_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, + FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE + ) + "); + $pdo->exec( + 'INSERT INTO project_activities SELECT * FROM project_activities_bak' + ); + $pdo->exec( + 'DROP TABLE project_activities_bak' + ); +} function version_112(PDO $pdo) { @@ -951,7 +999,7 @@ function version_33(PDO $pdo) id INTEGER PRIMARY KEY, date_creation INTEGER NOT NULL, event_name TEXT NOT NULL, - creator_id INTEGE NOT NULL, + creator_id INTEGER NOT NULL, project_id INTEGER NOT NULL, task_id INTEGER NOT NULL, data TEXT, diff --git a/app/ServiceProvider/ActionProvider.php b/app/ServiceProvider/ActionProvider.php index a7e8040e..14b84c7a 100644 --- a/app/ServiceProvider/ActionProvider.php +++ b/app/ServiceProvider/ActionProvider.php @@ -19,6 +19,7 @@ use Kanboard\Action\TaskAssignColorCategory; use Kanboard\Action\TaskAssignColorColumn; use Kanboard\Action\TaskAssignColorLink; use Kanboard\Action\TaskAssignColorUser; +use Kanboard\Action\TaskAssignCreator; use Kanboard\Action\TaskAssignCurrentUser; use Kanboard\Action\TaskAssignCurrentUserColumn; use Kanboard\Action\TaskAssignSpecificUser; @@ -69,6 +70,7 @@ class ActionProvider implements ServiceProviderInterface $container['actionManager']->register(new TaskAssignColorLink($container)); $container['actionManager']->register(new TaskAssignColorUser($container)); $container['actionManager']->register(new TaskAssignColorPriority($container)); + $container['actionManager']->register(new TaskAssignCreator($container)); $container['actionManager']->register(new TaskAssignCurrentUser($container)); $container['actionManager']->register(new TaskAssignCurrentUserColumn($container)); $container['actionManager']->register(new TaskAssignSpecificUser($container)); diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php index 868696e0..797e70d0 100644 --- a/app/ServiceProvider/AuthenticationProvider.php +++ b/app/ServiceProvider/AuthenticationProvider.php @@ -89,15 +89,17 @@ class AuthenticationProvider implements ServiceProviderInterface $acl->add('CustomFilterController', '*', Role::PROJECT_MEMBER); $acl->add('ExportController', '*', Role::PROJECT_MANAGER); $acl->add('TaskFileController', array('screenshot', 'create', 'save', 'remove', 'confirm'), Role::PROJECT_MEMBER); - $acl->add('TaskGanttController', '*', Role::PROJECT_MANAGER); $acl->add('ProjectViewController', array('share', 'updateSharing', 'integrations', 'updateIntegrations', 'notifications', 'updateNotifications', 'duplicate', 'doDuplication'), Role::PROJECT_MANAGER); $acl->add('ProjectPermissionController', '*', Role::PROJECT_MANAGER); $acl->add('ProjectEditController', '*', Role::PROJECT_MANAGER); + $acl->add('ProjectPredefinedContentController', '*', Role::PROJECT_MANAGER); + $acl->add('PredefinedTaskDescriptionController', '*', Role::PROJECT_MANAGER); $acl->add('ProjectFileController', '*', Role::PROJECT_MEMBER); $acl->add('ProjectUserOverviewController', '*', Role::PROJECT_MANAGER); $acl->add('ProjectStatusController', '*', Role::PROJECT_MANAGER); $acl->add('ProjectTagController', '*', Role::PROJECT_MANAGER); $acl->add('SubtaskController', '*', Role::PROJECT_MEMBER); + $acl->add('SubtaskConverterController', '*', Role::PROJECT_MEMBER); $acl->add('SubtaskRestrictionController', '*', Role::PROJECT_MEMBER); $acl->add('SubtaskStatusController', '*', Role::PROJECT_MEMBER); $acl->add('SwimlaneController', '*', Role::PROJECT_MANAGER); @@ -145,7 +147,6 @@ class AuthenticationProvider implements ServiceProviderInterface $acl->add('TagController', '*', Role::APP_ADMIN); $acl->add('PluginController', '*', Role::APP_ADMIN); $acl->add('CurrencyController', '*', Role::APP_ADMIN); - $acl->add('ProjectGanttController', '*', Role::APP_MANAGER); $acl->add('GroupListController', '*', Role::APP_ADMIN); $acl->add('GroupCreationController', '*', Role::APP_ADMIN); $acl->add('GroupModificationController', '*', Role::APP_ADMIN); diff --git a/app/ServiceProvider/AvatarProvider.php b/app/ServiceProvider/AvatarProvider.php index d17985ed..e03a047a 100644 --- a/app/ServiceProvider/AvatarProvider.php +++ b/app/ServiceProvider/AvatarProvider.php @@ -5,7 +5,6 @@ namespace Kanboard\ServiceProvider; use Pimple\Container; use Pimple\ServiceProviderInterface; use Kanboard\Core\User\Avatar\AvatarManager; -use Kanboard\User\Avatar\GravatarProvider; use Kanboard\User\Avatar\AvatarFileProvider; use Kanboard\User\Avatar\LetterAvatarProvider; @@ -28,7 +27,6 @@ class AvatarProvider implements ServiceProviderInterface { $container['avatarManager'] = new AvatarManager; $container['avatarManager']->register(new LetterAvatarProvider($container)); - $container['avatarManager']->register(new GravatarProvider($container)); $container['avatarManager']->register(new AvatarFileProvider($container)); return $container; } diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php index d66794df..7f05dfae 100644 --- a/app/ServiceProvider/ClassProvider.php +++ b/app/ServiceProvider/ClassProvider.php @@ -47,6 +47,7 @@ class ClassProvider implements ServiceProviderInterface 'LinkModel', 'NotificationModel', 'PasswordResetModel', + 'PredefinedTaskDescriptionModel', 'ProjectModel', 'ProjectFileModel', 'ProjectActivityModel', @@ -118,9 +119,9 @@ class ClassProvider implements ServiceProviderInterface 'TaskLinkValidator', 'TaskValidator', 'UserValidator', + 'PredefinedTaskDescriptionValidator', ), 'Import' => array( - 'TaskImport', 'UserImport', ), 'Export' => array( @@ -129,9 +130,10 @@ class ClassProvider implements ServiceProviderInterface 'TransitionExport', ), 'Pagination' => array( - 'TaskPagination', - 'SubtaskPagination', + 'DashboardPagination', 'ProjectPagination', + 'SubtaskPagination', + 'TaskPagination', 'UserPagination', ), 'Core' => array( diff --git a/app/ServiceProvider/FilterProvider.php b/app/ServiceProvider/FilterProvider.php index 1cc4da8a..11a29e69 100644 --- a/app/ServiceProvider/FilterProvider.php +++ b/app/ServiceProvider/FilterProvider.php @@ -27,6 +27,7 @@ use Kanboard\Filter\TaskMovedDateFilter; use Kanboard\Filter\TaskPriorityFilter; use Kanboard\Filter\TaskProjectFilter; use Kanboard\Filter\TaskReferenceFilter; +use Kanboard\Filter\TaskScoreFilter; use Kanboard\Filter\TaskStatusFilter; use Kanboard\Filter\TaskSubtaskAssigneeFilter; use Kanboard\Filter\TaskSwimlaneFilter; @@ -172,6 +173,7 @@ class FilterProvider implements ServiceProviderInterface ) ->withFilter(new TaskProjectFilter()) ->withFilter(new TaskReferenceFilter()) + ->withFilter(new TaskScoreFilter()) ->withFilter(new TaskStatusFilter()) ->withFilter(TaskSubtaskAssigneeFilter::getInstance() ->setCurrentUserId($c['userSession']->getId()) diff --git a/app/ServiceProvider/FormatterProvider.php b/app/ServiceProvider/FormatterProvider.php index feaa597f..efc85d06 100644 --- a/app/ServiceProvider/FormatterProvider.php +++ b/app/ServiceProvider/FormatterProvider.php @@ -22,15 +22,17 @@ class FormatterProvider implements ServiceProviderInterface 'BoardTaskFormatter', 'GroupAutoCompleteFormatter', 'ProjectActivityEventFormatter', - 'ProjectGanttFormatter', + 'ProjectApiFormatter', + 'ProjectsApiFormatter', 'SubtaskListFormatter', 'SubtaskTimeTrackingCalendarFormatter', + 'TaskApiFormatter', + 'TasksApiFormatter', 'TaskAutoCompleteFormatter', - 'TaskCalendarFormatter', - 'TaskGanttFormatter', 'TaskICalFormatter', 'TaskListFormatter', 'TaskListSubtaskFormatter', + 'TaskListSubtaskAssigneeFormatter', 'TaskSuggestMenuFormatter', 'UserAutoCompleteFormatter', 'UserMentionFormatter', diff --git a/app/ServiceProvider/GroupProvider.php b/app/ServiceProvider/GroupProvider.php index 08548c73..86f5d112 100644 --- a/app/ServiceProvider/GroupProvider.php +++ b/app/ServiceProvider/GroupProvider.php @@ -25,7 +25,7 @@ class GroupProvider implements ServiceProviderInterface */ public function register(Container $container) { - $container['groupManager'] = new GroupManager; + $container['groupManager'] = new GroupManager(); if (DB_GROUP_PROVIDER) { $container['groupManager']->register(new DatabaseBackendGroupProvider($container)); diff --git a/app/ServiceProvider/HelperProvider.php b/app/ServiceProvider/HelperProvider.php index 82b175cb..f0f7ac07 100644 --- a/app/ServiceProvider/HelperProvider.php +++ b/app/ServiceProvider/HelperProvider.php @@ -19,7 +19,6 @@ class HelperProvider implements ServiceProviderInterface { $container['helper'] = new Helper($container); $container['helper']->register('app', '\Kanboard\Helper\AppHelper'); - $container['helper']->register('calendar', '\Kanboard\Helper\CalendarHelper'); $container['helper']->register('asset', '\Kanboard\Helper\AssetHelper'); $container['helper']->register('board', '\Kanboard\Helper\BoardHelper'); $container['helper']->register('comment', '\Kanboard\Helper\CommentHelper'); @@ -27,7 +26,6 @@ class HelperProvider implements ServiceProviderInterface $container['helper']->register('file', '\Kanboard\Helper\FileHelper'); $container['helper']->register('form', '\Kanboard\Helper\FormHelper'); $container['helper']->register('hook', '\Kanboard\Helper\HookHelper'); - $container['helper']->register('ical', '\Kanboard\Helper\ICalHelper'); $container['helper']->register('layout', '\Kanboard\Helper\LayoutHelper'); $container['helper']->register('model', '\Kanboard\Helper\ModelHelper'); $container['helper']->register('subtask', '\Kanboard\Helper\SubtaskHelper'); diff --git a/app/ServiceProvider/RouteProvider.php b/app/ServiceProvider/RouteProvider.php index 08759b22..5b9eca98 100644 --- a/app/ServiceProvider/RouteProvider.php +++ b/app/ServiceProvider/RouteProvider.php @@ -36,7 +36,6 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('dashboard/:user_id/projects', 'DashboardController', 'projects'); $container['route']->addRoute('dashboard/:user_id/tasks', 'DashboardController', 'tasks'); $container['route']->addRoute('dashboard/:user_id/subtasks', 'DashboardController', 'subtasks'); - $container['route']->addRoute('dashboard/:user_id/calendar', 'DashboardController', 'calendar'); $container['route']->addRoute('dashboard/:user_id/activity', 'DashboardController', 'activity'); $container['route']->addRoute('dashboard/:user_id/notifications', 'DashboardController', 'notifications'); @@ -119,18 +118,10 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('b/:project_id', 'BoardViewController', 'show'); $container['route']->addRoute('public/board/:token', 'BoardViewController', 'readonly'); - // Calendar routes - $container['route']->addRoute('calendar/:project_id', 'CalendarController', 'show'); - $container['route']->addRoute('c/:project_id', 'CalendarController', 'show'); - // Listing routes $container['route']->addRoute('list/:project_id', 'TaskListController', 'show'); $container['route']->addRoute('l/:project_id', 'TaskListController', 'show'); - // Gantt routes - $container['route']->addRoute('gantt/:project_id', 'TaskGanttController', 'show'); - $container['route']->addRoute('gantt/:project_id/sort/:sorting', 'TaskGanttController', 'show'); - // Feed routes $container['route']->addRoute('feed/project/:token', 'FeedController', 'project'); $container['route']->addRoute('feed/user/:token', 'FeedController', 'user'); @@ -167,7 +158,6 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('settings/project', 'ConfigController', 'project'); $container['route']->addRoute('settings/project', 'ConfigController', 'project'); $container['route']->addRoute('settings/board', 'ConfigController', 'board'); - $container['route']->addRoute('settings/calendar', 'ConfigController', 'calendar'); $container['route']->addRoute('settings/integrations', 'ConfigController', 'integrations'); $container['route']->addRoute('settings/webhook', 'ConfigController', 'webhook'); $container['route']->addRoute('settings/api', 'ConfigController', 'api'); diff --git a/app/ServiceProvider/UserProvider.php b/app/ServiceProvider/UserProvider.php new file mode 100644 index 00000000..c80a2aeb --- /dev/null +++ b/app/ServiceProvider/UserProvider.php @@ -0,0 +1,35 @@ +<?php + +namespace Kanboard\ServiceProvider; + +use Kanboard\Core\User\UserManager; +use Kanboard\User\DatabaseBackendUserProvider; +use Pimple\Container; +use Pimple\ServiceProviderInterface; + +/** + * User Provider + * + * @package Kanboard\ServiceProvider + * @author Frederic Guillot + */ +class UserProvider implements ServiceProviderInterface +{ + /** + * Register providers + * + * @access public + * @param \Pimple\Container $container + * @return \Pimple\Container + */ + public function register(Container $container) + { + $container['userManager'] = new UserManager(); + + if (DB_USER_PROVIDER) { + $container['userManager']->register(new DatabaseBackendUserProvider($container)); + } + + return $container; + } +} diff --git a/app/Template/action/index.php b/app/Template/action/index.php index a6fc70f9..29b6aca6 100644 --- a/app/Template/action/index.php +++ b/app/Template/action/index.php @@ -45,7 +45,11 @@ </li> <?php foreach ($action['params'] as $param_name => $param_value): ?> <li> - <?= $this->text->in($param_name, $available_params[$action['action_name']]) ?> = + <?php if (isset($available_params[$action['action_name']][$param_name]) && is_array($available_params[$action['action_name']][$param_name])): ?> + <?= $this->text->e(ucfirst($param_name)) ?> = + <?php else: ?> + <?= $this->text->in($param_name, $available_params[$action['action_name']]) ?> = + <?php endif ?> <strong> <?php if ($this->text->contains($param_name, 'column_id')): ?> <?= $this->text->in($param_value, $columns_list) ?> diff --git a/app/Template/action_creation/create.php b/app/Template/action_creation/create.php index 862ee474..a1169dca 100644 --- a/app/Template/action_creation/create.php +++ b/app/Template/action_creation/create.php @@ -3,7 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('ActionCreationController', 'event', array('project_id' => $project['id'])) ?>"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Action'), 'action_name') ?> <?= $this->form->select('action_name', $available_actions, $values) ?> diff --git a/app/Template/action_creation/event.php b/app/Template/action_creation/event.php index e4166548..2ea72612 100644 --- a/app/Template/action_creation/event.php +++ b/app/Template/action_creation/event.php @@ -5,7 +5,6 @@ <form method="post" action="<?= $this->url->href('ActionCreationController', 'params', array('project_id' => $project['id'])) ?>"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->hidden('action_name', $values) ?> <?= $this->form->label(t('Action'), 'action_name') ?> diff --git a/app/Template/action_creation/params.php b/app/Template/action_creation/params.php index 0cc98f50..9083b949 100644 --- a/app/Template/action_creation/params.php +++ b/app/Template/action_creation/params.php @@ -5,7 +5,6 @@ <form method="post" action="<?= $this->url->href('ActionCreationController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->hidden('event_name', $values) ?> <?= $this->form->hidden('action_name', $values) ?> @@ -43,6 +42,9 @@ <?php elseif ($this->text->contains($param_name, 'swimlane_id')): ?> <?= $this->form->label($param_desc, $param_name) ?> <?= $this->form->select('params['.$param_name.']', $swimlane_list, $values) ?> + <?php elseif (is_array($param_desc)): ?> + <?= $this->form->label(ucfirst($param_name), $param_name) ?> + <?= $this->form->select('params['.$param_name.']', $param_desc, $values) ?> <?php else: ?> <?= $this->form->label($param_desc, $param_name) ?> <?= $this->form->text('params['.$param_name.']', $values) ?> diff --git a/app/Template/board/table_column.php b/app/Template/board/table_column.php index 9d2815ff..a9652a2b 100644 --- a/app/Template/board/table_column.php +++ b/app/Template/board/table_column.php @@ -16,9 +16,7 @@ <!-- column in expanded mode --> <div class="board-column-expanded"> <?php if (! $not_editable && $this->projectRole->canCreateTaskInColumn($column['project_id'], $column['id'])): ?> - <div class="board-add-icon"> - <?= $this->modal->largeIcon('plus', t('Add a new task'), 'TaskCreationController', 'show', array('project_id' => $column['project_id'], 'column_id' => $column['id'], 'swimlane_id' => $swimlane['id'])) ?> - </div> + <?= $this->task->getNewBoardTaskButton($swimlane, $column) ?> <?php endif ?> <?php if ($swimlane['nb_swimlanes'] > 1 && ! empty($column['column_nb_tasks'])): ?> diff --git a/app/Template/board/task_footer.php b/app/Template/board/task_footer.php index 1ad1c9f1..4ea5bb31 100644 --- a/app/Template/board/task_footer.php +++ b/app/Template/board/task_footer.php @@ -32,7 +32,7 @@ <div class="task-board-icons-row"> <?php if ($task['reference']): ?> <span class="task-board-reference" title="<?= t('Reference') ?>"> - <?= $this->text->e($task['reference']) ?> + <?= $this->task->renderReference($task) ?> </span> <?php endif ?> </div> @@ -58,14 +58,14 @@ <?php if (! empty($task['date_due'])): ?> <span class="task-date - <?php if (date('Y-m-d') == date('Y-m-d', $task['date_due'])): ?> - task-date-today - <?php elseif (time() > $task['date_due']): ?> + <?php if (time() > $task['date_due']): ?> task-date-overdue + <?php elseif (date('Y-m-d') == date('Y-m-d', $task['date_due'])): ?> + task-date-today <?php endif ?> "> <i class="fa fa-calendar"></i> - <?= $this->dt->date($task['date_due']) ?> + <?= $this->dt->datetime($task['date_due']) ?> </span> <?php endif ?> </div> diff --git a/app/Template/board/task_private.php b/app/Template/board/task_private.php index c4afc0bf..ece5efbe 100644 --- a/app/Template/board/task_private.php +++ b/app/Template/board/task_private.php @@ -19,6 +19,7 @@ <div class="task-board-saving-icon" style="display: none;"><i class="fa fa-spinner fa-pulse"></i></div> <?php if ($this->user->hasProjectAccess('TaskModificationController', 'edit', $task['project_id'])): ?> <?= $this->render('task/dropdown', array('task' => $task)) ?> + <?= $this->modal->large('edit', '', 'TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> <?php else: ?> <strong><?= '#'.$task['id'] ?></strong> <?php endif ?> @@ -28,7 +29,7 @@ <?= $this->text->e($this->user->getInitials($task['assignee_name'] ?: $task['assignee_username'])) ?> </span> - <?php endif ?> - <?= $this->text->e($task['title']) ?> + <?= $this->url->link($this->text->e($task['title']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', $this->text->e($task['title'])) ?> </div> <?php else: ?> <div class="task-board-expanded"> @@ -36,6 +37,7 @@ <div class="task-board-header"> <?php if ($this->user->hasProjectAccess('TaskModificationController', 'edit', $task['project_id'])): ?> <?= $this->render('task/dropdown', array('task' => $task)) ?> + <?= $this->modal->large('edit', '', 'TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> <?php else: ?> <strong><?= '#'.$task['id'] ?></strong> <?php endif ?> @@ -51,7 +53,7 @@ <?= $this->hook->render('template:board:private:task:before-title', array('task' => $task)) ?> <div class="task-board-title"> - <?= $this->text->e($task['title']) ?> + <?= $this->url->link($this->text->e($task['title']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </div> <?= $this->hook->render('template:board:private:task:after-title', array('task' => $task)) ?> diff --git a/app/Template/board/tooltip_external_links.php b/app/Template/board/tooltip_external_links.php index a9f1fc7f..2c287adf 100644 --- a/app/Template/board/tooltip_external_links.php +++ b/app/Template/board/tooltip_external_links.php @@ -11,7 +11,7 @@ <?= $link['type'] ?> </td> <td> - <a href="<?= $link['url'] ?>" target="_blank"><?= $this->text->e($link['title']) ?></a> + <a href="<?= $link['url'] ?>" title="<?= $this->text->e($link['url']) ?>" target="_blank"><?= $this->text->e($link['title']) ?></a> </td> <td> <?= $this->text->e($link['dependency_label']) ?> diff --git a/app/Template/calendar/project.php b/app/Template/calendar/project.php deleted file mode 100644 index 769e019b..00000000 --- a/app/Template/calendar/project.php +++ /dev/null @@ -1,6 +0,0 @@ -<?= $this->projectHeader->render($project, 'CalendarController', 'show') ?> - -<?= $this->calendar->render( - $this->url->href('CalendarController', 'projectEvents', array('project_id' => $project['id'])), - $this->url->href('CalendarController', 'save', array('project_id' => $project['id'])) -) ?> diff --git a/app/Template/calendar/user.php b/app/Template/calendar/user.php deleted file mode 100644 index c68bd32d..00000000 --- a/app/Template/calendar/user.php +++ /dev/null @@ -1,4 +0,0 @@ -<?= $this->calendar->render( - $this->url->href('CalendarController', 'userEvents', array('user_id' => $user['id'])), - $this->url->href('CalendarController', 'save') -) ?> diff --git a/app/Template/category/create.php b/app/Template/category/create.php index b12ff7fa..b32a770c 100644 --- a/app/Template/category/create.php +++ b/app/Template/category/create.php @@ -3,7 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('CategoryController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Category Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="50"')) ?> diff --git a/app/Template/category/edit.php b/app/Template/category/edit.php index 108826f3..9ad5a9e9 100644 --- a/app/Template/category/edit.php +++ b/app/Template/category/edit.php @@ -5,9 +5,6 @@ <form method="post" action="<?= $this->url->href('CategoryController', 'update', array('project_id' => $project['id'], 'category_id' => $values['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> - <?= $this->form->label(t('Category Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="50"', 'tabindex="1"')) ?> diff --git a/app/Template/column/create.php b/app/Template/column/create.php index aad9606b..2b0c4641 100644 --- a/app/Template/column/create.php +++ b/app/Template/column/create.php @@ -4,8 +4,6 @@ <form method="post" action="<?= $this->url->href('ColumnController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> - <?= $this->form->label(t('Title'), 'title') ?> <?= $this->form->text('title', $values, $errors, array('autofocus', 'required', 'maxlength="50"', 'tabindex="1"')) ?> diff --git a/app/Template/column/edit.php b/app/Template/column/edit.php index e590b5cc..25cf60c9 100644 --- a/app/Template/column/edit.php +++ b/app/Template/column/edit.php @@ -5,9 +5,6 @@ <form method="post" action="<?= $this->url->href('ColumnController', 'update', array('project_id' => $project['id'], 'column_id' => $column['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> - <?= $this->form->label(t('Title'), 'title') ?> <?= $this->form->text('title', $values, $errors, array('autofocus', 'required', 'maxlength="50"')) ?> diff --git a/app/Template/column_move_restriction/create.php b/app/Template/column_move_restriction/create.php index 852df971..cd9e1bf5 100644 --- a/app/Template/column_move_restriction/create.php +++ b/app/Template/column_move_restriction/create.php @@ -12,6 +12,8 @@ <?= $this->form->label(t('Destination column'), 'dst_column_id') ?> <?= $this->form->select('dst_column_id', $columns, $values, $errors) ?> + <?= $this->form->checkbox('only_assigned', t('Only for tasks assigned to the current user'), 1, isset($values['only_assigned']) && $values['only_assigned'] == 1) ?> + <?= $this->modal->submitButtons() ?> <p class="alert alert-info"><?= t('People belonging to this role will be able to move tasks only between the source and the destination column.') ?></p> diff --git a/app/Template/comment/create.php b/app/Template/comment/create.php index 0e19ac19..55e972dc 100644 --- a/app/Template/comment/create.php +++ b/app/Template/comment/create.php @@ -8,8 +8,6 @@ </div> <form method="post" action="<?= $this->url->href('CommentController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('task_id', $values) ?> - <?= $this->form->hidden('user_id', $values) ?> <?= $this->form->textEditor('comment', $values, $errors, array('autofocus' => true, 'required' => true)) ?> diff --git a/app/Template/comment/edit.php b/app/Template/comment/edit.php index 04f6ffd4..db8d2921 100644 --- a/app/Template/comment/edit.php +++ b/app/Template/comment/edit.php @@ -4,9 +4,6 @@ <form method="post" action="<?= $this->url->href('CommentController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'comment_id' => $comment['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('task_id', $values) ?> - <?= $this->form->hidden('user_id', $values) ?> <?= $this->form->textEditor('comment', $values, $errors, array('autofocus' => true, 'required' => true)) ?> diff --git a/app/Template/comment_list/create.php b/app/Template/comment_list/create.php index a1bae5eb..4c86bc06 100644 --- a/app/Template/comment_list/create.php +++ b/app/Template/comment_list/create.php @@ -3,6 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('CommentListController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->textEditor('comment', array(), array(), array('required' => true)) ?> + <?= $this->form->textEditor('comment', array('project_id' => $task['project_id']), array(), array('required' => true)) ?> <?= $this->modal->submitButtons() ?> </form> diff --git a/app/Template/comment_mail/create.php b/app/Template/comment_mail/create.php index 019f8a20..8732080a 100644 --- a/app/Template/comment_mail/create.php +++ b/app/Template/comment_mail/create.php @@ -1,7 +1,7 @@ <div class="page-header"> <h2><?= t('Create and send a comment by email') ?></h2> </div> -<form method="post" action="<?= $this->url->href('CommentMailController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> +<form method="post" action="<?= $this->url->href('CommentMailController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off" class="js-mail-form"> <?= $this->form->csrf() ?> <?= $this->form->hidden('task_id', $values) ?> <?= $this->form->hidden('user_id', $values) ?> @@ -9,9 +9,39 @@ <?= $this->form->label(t('Email'), 'email') ?> <?= $this->form->email('email', $values, $errors, array('autofocus', 'required', 'tabindex="1"')) ?> + <?php if (! empty($members)): ?> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-address-card-o"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php foreach ($members as $member): ?> + <li data-email="<?= $this->text->e($member['email']) ?>" class="js-autocomplete-email"> + <?= $this->text->e($this->user->getFullname($member)) ?> + </li> + <?php endforeach ?> + </ul> + </div> + <?php endif ?> + <?= $this->form->label(t('Subject'), 'subject') ?> <?= $this->form->text('subject', $values, $errors, array('required', 'tabindex="2"')) ?> + <?php if (! empty($project['predefined_email_subjects'])): ?> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-archive"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php foreach (explode("\r\n", trim($project['predefined_email_subjects'])) as $subject): ?> + <?php $subject = trim($subject); ?> + + <?php if (! empty($subject)): ?> + <li data-subject="<?= $this->text->e($subject) ?>" class="js-autocomplete-subject"> + <?= $this->text->e($subject) ?> + </li> + <?php endif ?> + <?php endforeach ?> + </ul> + </div> + <?php endif ?> + <?= $this->form->textEditor('comment', $values, $errors, array('required' => true, 'tabindex' => 3)) ?> <?= $this->modal->submitButtons(array( diff --git a/app/Template/config/about.php b/app/Template/config/about.php index 23a3e6c0..4cce5e63 100644 --- a/app/Template/config/about.php +++ b/app/Template/config/about.php @@ -79,8 +79,6 @@ </div> <?php endif ?> -<?= $this->render('config/keyboard_shortcuts') ?> - <div class="page-header"> <h2><?= t('License') ?></h2> </div> diff --git a/app/Template/config/calendar.php b/app/Template/config/calendar.php deleted file mode 100644 index 0cc3d064..00000000 --- a/app/Template/config/calendar.php +++ /dev/null @@ -1,36 +0,0 @@ -<div class="page-header"> - <h2><?= t('Calendar settings') ?></h2> -</div> -<form method="post" action="<?= $this->url->href('ConfigController', 'save', array('redirect' => 'calendar')) ?>" autocomplete="off"> - - <?= $this->form->csrf() ?> - - <fieldset> - <legend><?= t('Project calendar view') ?></legend> - <?= $this->form->radios('calendar_project_tasks', array( - 'date_creation' => t('Show tasks based on the creation date'), - 'date_started' => t('Show tasks based on the start date'), - ), - $values - ) ?> - </fieldset> - - <fieldset> - <legend><?= t('User calendar view') ?></legend> - <?= $this->form->radios('calendar_user_tasks', array( - 'date_creation' => t('Show tasks based on the creation date'), - 'date_started' => t('Show tasks based on the start date'), - ), - $values - ) ?> - </fieldset> - - <fieldset> - <legend><?= t('Subtasks time tracking') ?></legend> - <?= $this->form->checkbox('calendar_user_subtasks_time_tracking', t('Show subtasks based on the time tracking'), 1, $values['calendar_user_subtasks_time_tracking'] == 1) ?> - </fieldset> - - <div class="form-actions"> - <button type="submit" class="btn btn-blue"><?= t('Save') ?></button> - </div> -</form> diff --git a/app/Template/config/integrations.php b/app/Template/config/integrations.php index 07a90ce2..0a3f9953 100644 --- a/app/Template/config/integrations.php +++ b/app/Template/config/integrations.php @@ -4,14 +4,11 @@ <form method="post" action="<?= $this->url->href('ConfigController', 'save', array('redirect' => 'integrations')) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->hook->render('template:config:integrations', array('values' => $values)) ?> - - <h3><img src="<?= $this->url->dir() ?>assets/img/gravatar-icon.png"/> <?= t('Gravatar') ?></h3> - <div class="panel"> - <?= $this->form->checkbox('integration_gravatar', t('Enable Gravatar images'), 1, $values['integration_gravatar'] == 1) ?> - <div class="form-actions"> - <button type="submit" class="btn btn-blue"><?= t('Save') ?></button> - </div> - </div> + <?php $contents = $this->hook->render('template:config:integrations', array('values' => $values)) ?> + <?php if (empty($contents)): ?> + <p class="alert"><?= t('There is no external integration installed.') ?></p> + <?php else: ?> + <?= $contents ?> + <?php endif ?> </form> diff --git a/app/Template/config/keyboard_shortcuts.php b/app/Template/config/keyboard_shortcuts.php index 6ac71ee0..4e78dbe0 100644 --- a/app/Template/config/keyboard_shortcuts.php +++ b/app/Template/config/keyboard_shortcuts.php @@ -6,9 +6,7 @@ <ul> <li><?= t('Switch to the project overview') ?> = <strong>v o</strong></li> <li><?= t('Switch to the board view') ?> = <strong>v b</strong></li> - <li><?= t('Switch to the calendar view') ?> = <strong>v c</strong></li> <li><?= t('Switch to the list view') ?> = <strong>v l</strong></li> - <li><?= t('Switch to the Gantt chart view') ?> = <strong>v g</strong></li> </ul> <h3><?= t('Board view') ?></h3> <ul> diff --git a/app/Template/config/sidebar.php b/app/Template/config/sidebar.php index 95be963b..2f265ed2 100644 --- a/app/Template/config/sidebar.php +++ b/app/Template/config/sidebar.php @@ -15,9 +15,6 @@ <li <?= $this->app->checkMenuSelection('ConfigController', 'board') ?>> <?= $this->url->link(t('Board settings'), 'ConfigController', 'board') ?> </li> - <li <?= $this->app->checkMenuSelection('ConfigController', 'calendar') ?>> - <?= $this->url->link(t('Calendar settings'), 'ConfigController', 'calendar') ?> - </li> <li <?= $this->app->checkMenuSelection('TagController', 'index') ?>> <?= $this->url->link(t('Tags management'), 'TagController', 'index') ?> </li> diff --git a/app/Template/custom_filter/create.php b/app/Template/custom_filter/create.php index 24e896ee..724cbc85 100644 --- a/app/Template/custom_filter/create.php +++ b/app/Template/custom_filter/create.php @@ -3,7 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('CustomFilterController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="100"')) ?> diff --git a/app/Template/custom_filter/edit.php b/app/Template/custom_filter/edit.php index b64dee53..786e0c91 100644 --- a/app/Template/custom_filter/edit.php +++ b/app/Template/custom_filter/edit.php @@ -5,9 +5,7 @@ <form method="post" action="<?= $this->url->href('CustomFilterController', 'update', array('project_id' => $filter['project_id'], 'filter_id' => $filter['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> <?= $this->form->hidden('user_id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="100"')) ?> diff --git a/app/Template/dashboard/layout.php b/app/Template/dashboard/layout.php index dbd16886..45b52451 100644 --- a/app/Template/dashboard/layout.php +++ b/app/Template/dashboard/layout.php @@ -7,9 +7,9 @@ </li> <?php endif ?> <?php if ($this->app->config('disable_private_project', 0) == 0): ?> - <li> - <?= $this->modal->medium('lock', t('New private project'), 'ProjectCreationController', 'createPrivate') ?> - </li> + <li> + <?= $this->modal->medium('lock', t('New private project'), 'ProjectCreationController', 'createPrivate') ?> + </li> <?php endif ?> <li> <?= $this->url->icon('folder', t('Project management'), 'ProjectListController', 'show') ?> @@ -17,9 +17,7 @@ <li> <?= $this->modal->medium('dashboard', t('My activity stream'), 'ActivityController', 'user') ?> </li> - <li> - <?= $this->modal->medium('calendar', t('My calendar'), 'CalendarController', 'user') ?> - </li> + <?= $this->hook->render('template:dashboard:page-header:menu', array('user' => $user)) ?> </ul> </div> <section class="sidebar-container" id="dashboard"> diff --git a/app/Template/dashboard/overview.php b/app/Template/dashboard/overview.php new file mode 100644 index 00000000..e732a387 --- /dev/null +++ b/app/Template/dashboard/overview.php @@ -0,0 +1,93 @@ +<div class="filter-box margin-bottom"> + <form method="get" action="<?= $this->url->dir() ?>" class="search"> + <?= $this->form->hidden('controller', array('controller' => 'SearchController')) ?> + <?= $this->form->hidden('action', array('action' => 'index')) ?> + + <div class="input-addon"> + <?= $this->form->text('search', array(), array(), array('placeholder="'.t('Search').'"'), 'input-addon-field') ?> + <div class="input-addon-item"> + <?= $this->render('app/filters_helper') ?> + </div> + </div> + </form> +</div> + +<?php if (! $project_paginator->isEmpty()): ?> + <div class="table-list"> + <?= $this->render('project_list/header', array('paginator' => $project_paginator)) ?> + <?php foreach ($project_paginator->getCollection() as $project): ?> + <div class="table-list-row table-border-left"> + <div> + <?php if ($this->user->hasProjectAccess('ProjectViewController', 'show', $project['id'])): ?> + <?= $this->render('project/dropdown', array('project' => $project)) ?> + <?php else: ?> + <strong><?= '#'.$project['id'] ?></strong> + <?php endif ?> + + <span class="table-list-title <?= $project['is_active'] == 0 ? 'status-closed' : '' ?>"> + <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> + </span> + + <?php if ($project['is_private']): ?> + <i class="fa fa-lock fa-fw" title="<?= t('Private project') ?>"></i> + <?php endif ?> + </div> + <div class="table-list-details"> + <?php foreach ($project['columns'] as $column): ?> + <strong title="<?= t('Task count') ?>"><?= $column['nb_open_tasks'] ?></strong> + <small><?= $this->text->e($column['title']) ?></small> + <?php endforeach ?> + </div> + </div> + <?php endforeach ?> + </div> + + <?= $project_paginator ?> +<?php endif ?> + +<?php if (empty($overview_paginator)): ?> + <p class="alert"><?= t('There is nothing assigned to you.') ?></p> +<?php else: ?> + <?php foreach ($overview_paginator as $result): ?> + <?php if (! $result['paginator']->isEmpty()): ?> + <div class="page-header"> + <h2><?= $this->url->link($this->text->e($result['project_name']), 'BoardViewController', 'show', array('project_id' => $result['project_id'])) ?></h2> + </div> + + <div class="table-list"> + <?= $this->render('task_list/header', array( + 'paginator' => $result['paginator'], + )) ?> + + <?php foreach ($result['paginator']->getCollection() as $task): ?> + <div class="table-list-row color-<?= $task['color_id'] ?>"> + <?= $this->render('task_list/task_title', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_details', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_avatars', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_icons', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_subtasks', array( + 'task' => $task, + 'user_id' => $user['id'], + )) ?> + </div> + <?php endforeach ?> + </div> + + <?= $result['paginator'] ?> + <?php endif ?> + <?php endforeach ?> +<?php endif ?> + +<?= $this->hook->render('template:dashboard:show', array('user' => $user)) ?> diff --git a/app/Template/dashboard/projects.php b/app/Template/dashboard/projects.php index 7e35b059..e84a9415 100644 --- a/app/Template/dashboard/projects.php +++ b/app/Template/dashboard/projects.php @@ -4,52 +4,24 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('Your are not member of any project.') ?></p> <?php else: ?> - <table class="table-striped table-small table-scrolling"> - <tr> - <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\ProjectModel::TABLE.'.id') ?></th> - <th class="column-3"><?= $paginator->order('<i class="fa fa-lock fa-fw" title="'.t('Private project').'"></i>', \Kanboard\Model\ProjectModel::TABLE.'.is_private') ?></th> - <th class="column-25"><?= $paginator->order(t('Project'), \Kanboard\Model\ProjectModel::TABLE.'.name') ?></th> - <th class="column-10"><?= t('Tasks') ?></th> - <th><?= t('Columns') ?></th> - </tr> + <div class="table-list"> + <?= $this->render('project_list/header', array('paginator' => $paginator)) ?> <?php foreach ($paginator->getCollection() as $project): ?> - <tr> - <td> - <?= $this->render('project/dropdown', array('project' => $project)) ?> - </td> - <td> - <?php if ($project['is_private']): ?> - <i class="fa fa-lock fa-fw" title="<?= t('Private project') ?>"></i> - <?php endif ?> - </td> - <td> - <?php if ($this->user->hasProjectAccess('TaskGanttController', 'show', $project['id'])): ?> - <?= $this->url->link('<i class="fa fa-sliders fa-fw"></i>', 'TaskGanttController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Gantt chart')) ?> - <?php endif ?> + <div class="table-list-row table-border-left"> + <?= $this->render('project_list/project_title', array( + 'project' => $project, + )) ?> - <?= $this->url->link('<i class="fa fa-list"></i>', 'TaskListController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('List')) ?> - <?= $this->url->link('<i class="fa fa-calendar"></i>', 'CalendarController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Calendar')) ?> + <?= $this->render('project_list/project_details', array( + 'project' => $project, + )) ?> - <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> - <?php if (! empty($project['description'])): ?> - <span class="tooltip" title="<?= $this->text->markdownAttribute($project['description']) ?>"> - <i class="fa fa-info-circle"></i> - </span> - <?php endif ?> - </td> - <td> - <?= $project['nb_active_tasks'] ?> - </td> - <td class="dashboard-project-stats"> - <?php foreach ($project['columns'] as $column): ?> - <strong title="<?= t('Task count') ?>"><?= $column['nb_open_tasks'] ?></strong> - <small><?= $this->text->e($column['title']) ?></small> - <?php endforeach ?> - </td> - - </tr> + <?= $this->render('project_list/project_icons', array( + 'project' => $project, + )) ?> + </div> <?php endforeach ?> - </table> + </div> <?= $paginator ?> <?php endif ?> diff --git a/app/Template/dashboard/show.php b/app/Template/dashboard/show.php deleted file mode 100644 index b1d877cf..00000000 --- a/app/Template/dashboard/show.php +++ /dev/null @@ -1,19 +0,0 @@ -<div class="filter-box margin-bottom"> - <form method="get" action="<?= $this->url->dir() ?>" class="search"> - <?= $this->form->hidden('controller', array('controller' => 'SearchController')) ?> - <?= $this->form->hidden('action', array('action' => 'index')) ?> - - <div class="input-addon"> - <?= $this->form->text('search', array(), array(), array('placeholder="'.t('Search').'"'), 'input-addon-field') ?> - <div class="input-addon-item"> - <?= $this->render('app/filters_helper') ?> - </div> - </div> - </form> -</div> - -<?= $this->render('dashboard/projects', array('paginator' => $project_paginator, 'user' => $user)) ?> -<?= $this->render('dashboard/tasks', array('paginator' => $task_paginator, 'user' => $user)) ?> -<?= $this->render('dashboard/subtasks', array('paginator' => $subtask_paginator, 'user' => $user)) ?> - -<?= $this->hook->render('template:dashboard:show', array('user' => $user)) ?> diff --git a/app/Template/dashboard/subtasks.php b/app/Template/dashboard/subtasks.php index d86b1ef9..96bb13cc 100644 --- a/app/Template/dashboard/subtasks.php +++ b/app/Template/dashboard/subtasks.php @@ -1,45 +1,49 @@ <div class="page-header"> - <h2><?= $this->url->link(t('My subtasks'), 'DashboardController', 'subtasks', array('user_id' => $user['id'])) ?> (<?= $paginator->getTotal() ?>)</h2> + <h2><?= $this->url->link(t('My subtasks'), 'DashboardController', 'subtasks', array('user_id' => $user['id'])) ?> (<?= $nb_subtasks ?>)</h2> </div> -<?php if ($paginator->isEmpty()): ?> +<?php if ($nb_subtasks == 0): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> - <table class="table-striped table-small table-scrolling"> - <tr> - <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\TaskModel::TABLE.'.id') ?></th> - <th class="column-20"><?= $paginator->order(t('Project'), 'project_name') ?></th> - <th><?= $paginator->order(t('Task'), 'task_name') ?></th> - <th><?= $paginator->order(t('Subtask'), \Kanboard\Model\SubtaskModel::TABLE.'.title') ?></th> - <?= $this->hook->render('template:dashboard:subtasks:header:before-timetracking', array('paginator' => $paginator)) ?> - <th class="column-20"><?= t('Time tracking') ?></th> - </tr> - <?php foreach ($paginator->getCollection() as $subtask): ?> - <tr> - <td class="task-table color-<?= $subtask['color_id'] ?>"> - <?= $this->render('task/dropdown', array('task' => array('id' => $subtask['task_id'], 'project_id' => $subtask['project_id']))) ?> - </td> - <td> - <?= $this->url->link($this->text->e($subtask['project_name']), 'BoardViewController', 'show', array('project_id' => $subtask['project_id'])) ?> - </td> - <td> - <?= $this->url->link($this->text->e($subtask['task_name']), 'TaskViewController', 'show', array('task_id' => $subtask['task_id'], 'project_id' => $subtask['project_id'])) ?> - </td> - <td> - <?= $this->subtask->renderToggleStatus(array('project_id' => $subtask['project_id']), $subtask) ?> - </td> - <?= $this->hook->render('template:dashboard:subtasks:rows', array('subtask' => $subtask)) ?> - <td> - <?php if (! empty($subtask['time_spent'])): ?> - <strong><?= $this->text->e($subtask['time_spent']).'h' ?></strong> <?= t('spent') ?> + <div class="table-list"> + <div class="table-list-header"> + <div class="table-list-header-count"> + <?php if ($nb_subtasks > 1): ?> + <?= t('%d subtasks', $nb_subtasks) ?> + <?php else: ?> + <?= t('%d subtask', $nb_subtasks) ?> <?php endif ?> + </div> + <div class="table-list-header-menu"> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><strong><?= t('Sort') ?> <i class="fa fa-caret-down"></i></strong></a> + <ul> + <li> + <?= $paginator->order(t('Task ID'), \Kanboard\Model\TaskModel::TABLE.'.id') ?> + </li> + <li> + <?= $paginator->order(t('Title'), \Kanboard\Model\TaskModel::TABLE.'.title') ?> + </li> + <li> + <?= $paginator->order(t('Priority'), \Kanboard\Model\TaskModel::TABLE.'.priority') ?> + </li> + </ul> + </div> + </div> + </div> - <?php if (! empty($subtask['time_estimated'])): ?> - <strong><?= $this->text->e($subtask['time_estimated']).'h' ?></strong> <?= t('estimated') ?> - <?php endif ?> - </td> - </tr> + <?php foreach ($paginator->getCollection() as $task): ?> + <div class="table-list-row color-<?= $task['color_id'] ?>"> + <?= $this->render('task_list/task_title', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_subtasks', array( + 'task' => $task, + 'user_id' => $user['id'], + )) ?> + </div> <?php endforeach ?> - </table> + </div> <?= $paginator ?> <?php endif ?> diff --git a/app/Template/dashboard/tasks.php b/app/Template/dashboard/tasks.php index 427b903d..23aef990 100644 --- a/app/Template/dashboard/tasks.php +++ b/app/Template/dashboard/tasks.php @@ -4,50 +4,35 @@ <?php if ($paginator->isEmpty()): ?> <p class="alert"><?= t('There is nothing assigned to you.') ?></p> <?php else: ?> - <table class="table-striped table-small table-scrolling"> - <tr> - <th class="column-5"><?= $paginator->order('Id', \Kanboard\Model\TaskModel::TABLE.'.id') ?></th> - <th class="column-20"><?= $paginator->order(t('Project'), 'project_name') ?></th> - <th><?= $paginator->order(t('Task'), \Kanboard\Model\TaskModel::TABLE.'.title') ?></th> - <th class="column-8"><?= $paginator->order(t('Priority'), \Kanboard\Model\TaskModel::TABLE.'.priority') ?></th> - <th class="column-20"><?= t('Time tracking') ?></th> - <th class="column-10"><?= $paginator->order(t('Due date'), \Kanboard\Model\TaskModel::TABLE.'.date_due') ?></th> - <th class="column-10"><?= $paginator->order(t('Column'), 'column_title') ?></th> - </tr> + <div class="table-list"> + <?= $this->render('task_list/header', array( + 'paginator' => $paginator, + )) ?> + <?php foreach ($paginator->getCollection() as $task): ?> - <tr> - <td class="task-table color-<?= $task['color_id'] ?>"> - <?= $this->render('task/dropdown', array('task' => $task)) ?> - </td> - <td> - <?= $this->url->link($this->text->e($task['project_name']), 'BoardViewController', 'show', array('project_id' => $task['project_id'])) ?> - </td> - <td> - <?= $this->url->link($this->text->e($task['title']), 'TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> - </td> - <td> - <?php if ($task['priority'] >= 0): ?> - P<?= $this->text->e($task['priority'])?> - <?php endif?> - </td> - <td> - <?php if (! empty($task['time_spent'])): ?> - <strong><?= $this->text->e($task['time_spent']).'h' ?></strong> <?= t('spent') ?> - <?php endif ?> + <div class="table-list-row color-<?= $task['color_id'] ?>"> + <?= $this->render('task_list/task_title', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_details', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_avatars', array( + 'task' => $task, + )) ?> + + <?= $this->render('task_list/task_icons', array( + 'task' => $task, + )) ?> - <?php if (! empty($task['time_estimated'])): ?> - <strong><?= $this->text->e($task['time_estimated']).'h' ?></strong> <?= t('estimated') ?> - <?php endif ?> - </td> - <td> - <?= $this->dt->date($task['date_due']) ?> - </td> - <td> - <?= $this->text->e($task['column_title']) ?> - </td> - </tr> + <?= $this->render('task_list/task_subtasks', array( + 'task' => $task, + )) ?> + </div> <?php endforeach ?> - </table> + </div> <?= $paginator ?> <?php endif ?> diff --git a/app/Template/group/user_dropdown.php b/app/Template/group/user_dropdown.php new file mode 100644 index 00000000..48acb955 --- /dev/null +++ b/app/Template/group/user_dropdown.php @@ -0,0 +1,11 @@ +<div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><strong>#<?= $user['id'] ?> <i class="fa fa-caret-down"></i></strong></a> + <ul> + <li> + <?= $this->url->icon('user', t('View profile'), 'UserViewController', 'show', array('user_id' => $user['id'])) ?> + </li> + <li> + <?= $this->modal->medium('trash', t('Remove user from group'), 'GroupListController', 'dissociate', array('group_id' => $user['group_id'], 'user_id' => $user['id'])) ?> + </li> + </ul> +</div> diff --git a/app/Template/group/users.php b/app/Template/group/users.php index 5025ca7a..2469296a 100644 --- a/app/Template/group/users.php +++ b/app/Template/group/users.php @@ -13,9 +13,20 @@ <?= $this->render('user_list/header', array('paginator' => $paginator)) ?> <?php foreach ($paginator->getCollection() as $user): ?> <div class="table-list-row table-border-left"> - <?= $this->render('user_list/user_title', array( - 'user' => $user, - )) ?> + <div> + <?= $this->render('group/user_dropdown', array('user' => $user)) ?> + <span class="table-list-title <?= $user['is_active'] == 0 ? 'status-closed' : '' ?>"> + <?= $this->avatar->small( + $user['id'], + $user['username'], + $user['name'], + $user['email'], + $user['avatar_path'], + 'avatar-inline' + ) ?> + <?= $this->url->link($this->text->e($user['name'] ?: $user['username']), 'UserViewController', 'show', array('user_id' => $user['id'])) ?> + </span> + </div> <?= $this->render('user_list/user_details', array( 'user' => $user, diff --git a/app/Template/header.php b/app/Template/header.php index 2af58d93..08523eb6 100644 --- a/app/Template/header.php +++ b/app/Template/header.php @@ -20,7 +20,7 @@ <?= $this->render('header/board_selector', array('board_selector' => $board_selector)) ?> <?php endif ?> </div> - <div class="menus-container pull-right"> + <div class="menus-container"> <?= $_top_right_corner ?> </div> </header> diff --git a/app/Template/notification/task_create.php b/app/Template/notification/task_create.php index 6e80b26a..e56c252d 100644 --- a/app/Template/notification/task_create.php +++ b/app/Template/notification/task_create.php @@ -6,7 +6,7 @@ </li> <?php if ($task['date_due']): ?> <li> - <strong><?= t('Due date:').' '.$this->dt->date($task['date_due']) ?></strong> + <strong><?= t('Due date:').' '.$this->dt->datetime($task['date_due']) ?></strong> </li> <?php endif ?> <?php if (! empty($task['creator_username'])): ?> diff --git a/app/Template/notification/task_overdue.php b/app/Template/notification/task_overdue.php index 01ad0a01..2ad4c14d 100644 --- a/app/Template/notification/task_overdue.php +++ b/app/Template/notification/task_overdue.php @@ -19,7 +19,7 @@ <?= $this->text->e($task['title']) ?> <?php endif ?> </td> - <td style="border: 1px solid #eee;"><?= $this->dt->date($task['date_due']) ?></td> + <td style="border: 1px solid #eee;"><?= $this->dt->datetime($task['date_due']) ?></td> <td style="border: 1px solid #eee;"><?= $this->text->e($task['project_name']) ?></td> <td style="border: 1px solid #eee;"> <?php if (! empty($task['assignee_username'])): ?> diff --git a/app/Template/predefined_task_description/create.php b/app/Template/predefined_task_description/create.php new file mode 100644 index 00000000..5a7a8d9f --- /dev/null +++ b/app/Template/predefined_task_description/create.php @@ -0,0 +1,14 @@ +<div class="page-header"> + <h2><?= t('Predefined Task Description') ?></h2> +</div> +<form method="post" action="<?= $this->url->href('PredefinedTaskDescriptionController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> + <?= $this->form->csrf() ?> + + <?= $this->form->label(t('Title'), 'title') ?> + <?= $this->form->text('title', $values, $errors, array('autofocus', 'required', 'tabindex="1"')) ?> + + <?= $this->form->label(t('Description'), 'description') ?> + <?= $this->form->textEditor('description', $values, $errors, array('tabindex' => 2)) ?> + + <?= $this->modal->submitButtons() ?> +</form> diff --git a/app/Template/predefined_task_description/edit.php b/app/Template/predefined_task_description/edit.php new file mode 100644 index 00000000..039d650b --- /dev/null +++ b/app/Template/predefined_task_description/edit.php @@ -0,0 +1,14 @@ +<div class="page-header"> + <h2><?= t('Predefined Task Description') ?></h2> +</div> +<form method="post" action="<?= $this->url->href('PredefinedTaskDescriptionController', 'update', array('project_id' => $project['id'], 'id' => $template['id'])) ?>" autocomplete="off"> + <?= $this->form->csrf() ?> + + <?= $this->form->label(t('Title'), 'title') ?> + <?= $this->form->text('title', $values, $errors, array('autofocus', 'required', 'tabindex="1"')) ?> + + <?= $this->form->label(t('Description'), 'description') ?> + <?= $this->form->textEditor('description', $values, $errors, array('tabindex' => 2)) ?> + + <?= $this->modal->submitButtons() ?> +</form> diff --git a/app/Template/predefined_task_description/remove.php b/app/Template/predefined_task_description/remove.php new file mode 100644 index 00000000..f60a8e75 --- /dev/null +++ b/app/Template/predefined_task_description/remove.php @@ -0,0 +1,15 @@ +<div class="page-header"> + <h2><?= t('Predefined Task Description') ?></h2> +</div> + +<div class="confirm"> + <p class="alert alert-info"> + <?= t('Do you really want to remove this template? "%s"', $template['title']) ?> + </p> + + <?= $this->modal->confirmButtons( + 'PredefinedTaskDescriptionController', + 'remove', + array('project_id' => $project['id'], 'id' => $template['id']) + ) ?> +</div> diff --git a/app/Template/project/dropdown.php b/app/Template/project/dropdown.php index 72c687a1..28fd9ba2 100644 --- a/app/Template/project/dropdown.php +++ b/app/Template/project/dropdown.php @@ -5,17 +5,8 @@ <?= $this->url->icon('th', t('Board'), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> </li> <li> - <?= $this->url->icon('calendar', t('Calendar'), 'CalendarController', 'show', array('project_id' => $project['id'])) ?> - </li> - <li> <?= $this->url->icon('list', t('Listing'), 'TaskListController', 'show', array('project_id' => $project['id'])) ?> </li> - <?php if ($this->user->hasProjectAccess('TaskGanttController', 'show', $project['id'])): ?> - <li> - <?= $this->url->icon('sliders', t('Gantt'), 'TaskGanttController', 'show', array('project_id' => $project['id'])) ?> - </li> - <?php endif ?> - <li> <?= $this->modal->medium('dashboard', t('Activity'), 'ActivityController', 'project', array('project_id' => $project['id'])) ?> </li> diff --git a/app/Template/project/sidebar.php b/app/Template/project/sidebar.php index 9775c7a1..4b39172c 100644 --- a/app/Template/project/sidebar.php +++ b/app/Template/project/sidebar.php @@ -13,6 +13,9 @@ <li <?= $this->app->checkMenuSelection('ProjectEditController') ?>> <?= $this->url->link(t('Edit project'), 'ProjectEditController', 'show', array('project_id' => $project['id'])) ?> </li> + <li <?= $this->app->checkMenuSelection('ProjectPredefinedContentController') ?>> + <?= $this->url->link(t('Predefined contents'), 'ProjectPredefinedContentController', 'show', array('project_id' => $project['id'])) ?> + </li> <li <?= $this->app->checkMenuSelection('ProjectViewController', 'share') ?>> <?= $this->url->link(t('Public access'), 'ProjectViewController', 'share', array('project_id' => $project['id'])) ?> </li> diff --git a/app/Template/project_edit/show.php b/app/Template/project_edit/show.php index 62bd9af6..96531007 100644 --- a/app/Template/project_edit/show.php +++ b/app/Template/project_edit/show.php @@ -9,7 +9,6 @@ <?php endif ?> <form method="post" action="<?= $this->url->href('ProjectEditController', 'update', array('project_id' => $project['id'], 'redirect' => 'edit')) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> <fieldset> <legend><?= t('General') ?></legend> diff --git a/app/Template/project_gantt/show.php b/app/Template/project_gantt/show.php deleted file mode 100644 index 725f348d..00000000 --- a/app/Template/project_gantt/show.php +++ /dev/null @@ -1,42 +0,0 @@ -<section id="main"> - <div class="page-header"> - <ul> - <?php if ($this->user->hasAccess('ProjectCreationController', 'create')): ?> - <li> - <?= $this->modal->medium('plus', t('New project'), 'ProjectCreationController', 'create') ?> - </li> - <?php endif ?> - <?php if ($this->app->config('disable_private_project', 0) == 0): ?> - <li> - <?= $this->modal->medium('lock', t('New private project'), 'ProjectCreationController', 'createPrivate') ?> - </li> - <?php endif ?> - <li> - <?= $this->url->icon('folder', t('Projects list'), 'ProjectListController', 'show') ?> - </li> - <?php if ($this->user->hasAccess('ProjectUserOverviewController', 'managers')): ?> - <li> - <?= $this->url->icon('user', t('Users overview'), 'ProjectUserOverviewController', 'managers') ?> - </li> - <?php endif ?> - </ul> - </div> - <section> - <?php if (empty($projects)): ?> - <p class="alert"><?= t('No project') ?></p> - <?php else: ?> - <div - id="gantt-chart" - data-records='<?= json_encode($projects, JSON_HEX_APOS) ?>' - data-save-url="<?= $this->url->href('ProjectGanttController', 'save') ?>" - data-label-project-manager="<?= t('Project managers') ?>" - data-label-project-member="<?= t('Project members') ?>" - data-label-gantt-link="<?= t('Gantt chart for this project') ?>" - data-label-board-link="<?= t('Project board') ?>" - data-label-start-date="<?= t('Start date:') ?>" - data-label-end-date="<?= t('End date:') ?>" - data-label-not-defined="<?= t('There is no start date or end date for this project.') ?>" - ></div> - <?php endif ?> - </section> -</section> diff --git a/app/Template/project_header/search.php b/app/Template/project_header/search.php index 512e88d7..75110779 100644 --- a/app/Template/project_header/search.php +++ b/app/Template/project_header/search.php @@ -2,6 +2,7 @@ <form method="get" action="<?= $this->url->dir() ?>" class="search"> <?= $this->form->hidden('controller', $filters) ?> <?= $this->form->hidden('action', $filters) ?> + <?= $this->form->hidden('plugin', $filters) ?> <?= $this->form->hidden('project_id', $filters) ?> <div class="input-addon"> diff --git a/app/Template/project_header/views.php b/app/Template/project_header/views.php index 2684c744..4203595e 100644 --- a/app/Template/project_header/views.php +++ b/app/Template/project_header/views.php @@ -5,15 +5,9 @@ <li <?= $this->app->checkMenuSelection('BoardViewController') ?>> <?= $this->url->icon('th', t('Board'), 'BoardViewController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-board', t('Keyboard shortcut: "%s"', 'v b')) ?> </li> - <li <?= $this->app->checkMenuSelection('CalendarController') ?>> - <?= $this->url->icon('calendar', t('Calendar'), 'CalendarController', 'project', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-calendar', t('Keyboard shortcut: "%s"', 'v c')) ?> - </li> <li <?= $this->app->checkMenuSelection('TaskListController') ?>> <?= $this->url->icon('list', t('List'), 'TaskListController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-listing', t('Keyboard shortcut: "%s"', 'v l')) ?> </li> - <?php if ($this->user->hasProjectAccess('TaskGanttController', 'show', $project['id'])): ?> - <li <?= $this->app->checkMenuSelection('TaskGanttController') ?>> - <?= $this->url->icon('sliders', t('Gantt'), 'TaskGanttController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-gantt', t('Keyboard shortcut: "%s"', 'v g')) ?> - </li> - <?php endif ?> + + <?= $this->hook->render('template:project-header:view-switcher', array('project' => $project, 'filters' => $filters)) ?> </ul> diff --git a/app/Template/project_list/listing.php b/app/Template/project_list/listing.php index f8c46729..6f6c93c1 100644 --- a/app/Template/project_list/listing.php +++ b/app/Template/project_list/listing.php @@ -18,10 +18,6 @@ <li><?= $this->url->icon('user', t('Users overview'), 'ProjectUserOverviewController', 'managers') ?></li> <?php endif ?> - <?php if ($this->user->hasAccess('ProjectGanttController', 'show')): ?> - <li><?= $this->url->icon('sliders', t('Projects Gantt chart'), 'ProjectGanttController', 'show') ?></li> - <?php endif ?> - <?= $this->hook->render('template:project-list:menu:after') ?> </ul> </div> diff --git a/app/Template/project_list/project_icons.php b/app/Template/project_list/project_icons.php index c7e9c4a9..348db367 100644 --- a/app/Template/project_list/project_icons.php +++ b/app/Template/project_list/project_icons.php @@ -1,4 +1,6 @@ <div class="table-list-icons"> + + <?php if ($project['is_public']): ?> <i class="fa fa-share-alt fa-fw" title="<?= t('Shared project') ?>"></i> <?php endif ?> @@ -18,6 +20,6 @@ <?php endif ?> <?php if ($project['is_active'] == 0): ?> - <i class="fa fa-ban fa-fw" aria-hidden="true" title="<?= t('Closed') ?>"></i><?= t('Closed') ?> + <i class="fa fa-ban fa-fw" aria-hidden="true" title="<?= t('Closed') ?>"></i><?= t('Closed') ?> <?php endif ?> </div> diff --git a/app/Template/project_permission/groups.php b/app/Template/project_permission/groups.php index c9914344..c241302b 100644 --- a/app/Template/project_permission/groups.php +++ b/app/Template/project_permission/groups.php @@ -46,7 +46,7 @@ 'placeholder="'.t('Enter group name...').'"', 'title="'.t('Enter group name...').'"', 'data-dst-field="group_id"', - 'data-dst-extra-field="external_id"', + 'data-dst-extra-fields="external_id"', 'data-search-url="'.$this->url->href('GroupAjaxController', 'autocomplete').'"', ), 'autocomplete') ?> diff --git a/app/Template/project_permission/index.php b/app/Template/project_permission/index.php index 689966b6..52a69fb5 100644 --- a/app/Template/project_permission/index.php +++ b/app/Template/project_permission/index.php @@ -2,36 +2,18 @@ <h2><?= t('Allowed Users') ?></h2> </div> -<?php if ($project['is_everybody_allowed']): ?> - <div class="alert"><?= t('Everybody have access to this project.') ?></div> -<?php else: ?> - <?= $this->render('project_permission/users', array( - 'project' => $project, - 'roles' => $roles, - 'users' => $users, - 'errors' => $errors, - 'values' => $values, - )) ?> +<?= $this->render('project_permission/users', array( + 'project' => $project, + 'roles' => $roles, + 'users' => $users, + 'errors' => $errors, + 'values' => $values, +)) ?> - <?= $this->render('project_permission/groups', array( - 'project' => $project, - 'roles' => $roles, - 'groups' => $groups, - 'errors' => $errors, - 'values' => $values, - )) ?> -<?php endif ?> - -<?php if ($project['is_private'] == 0): ?> -<hr/> -<form method="post" action="<?= $this->url->href('ProjectPermissionController', 'allowEverybody', array('project_id' => $project['id'])) ?>"> - <?= $this->form->csrf() ?> - - <?= $this->form->hidden('id', array('id' => $project['id'])) ?> - <?= $this->form->checkbox('is_everybody_allowed', t('Allow everybody to access to this project'), 1, $project['is_everybody_allowed']) ?> - - <div class="form-actions"> - <button type="submit" class="btn btn-blue"><?= t('Save') ?></button> - </div> -</form> -<?php endif ?> +<?= $this->render('project_permission/groups', array( + 'project' => $project, + 'roles' => $roles, + 'groups' => $groups, + 'errors' => $errors, + 'values' => $values, +)) ?> diff --git a/app/Template/project_permission/users.php b/app/Template/project_permission/users.php index bc92d060..1180fe1c 100644 --- a/app/Template/project_permission/users.php +++ b/app/Template/project_permission/users.php @@ -34,15 +34,19 @@ <?= $this->form->csrf() ?> <?= $this->form->hidden('project_id', array('project_id' => $project['id'])) ?> <?= $this->form->hidden('user_id', $values) ?> + <?= $this->form->hidden('username', $values) ?> + <?= $this->form->hidden('external_id', $values) ?> + <?= $this->form->hidden('external_id_column', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array( - 'required', - 'placeholder="'.t('Enter user name...').'"', - 'title="'.t('Enter user name...').'"', - 'data-dst-field="user_id"', - 'data-search-url="'.$this->url->href('UserAjaxController', 'autocomplete').'"', - ), + 'required', + 'placeholder="'.t('Enter user name...').'"', + 'title="'.t('Enter user name...').'"', + 'data-dst-field="user_id"', + 'data-dst-extra-fields="external_id,external_id_column,username"', + 'data-search-url="'.$this->url->href('UserAjaxController', 'autocomplete').'"', + ), 'autocomplete') ?> <?= $this->form->select('role', $roles, $values, $errors) ?> diff --git a/app/Template/project_predefined_content/show.php b/app/Template/project_predefined_content/show.php new file mode 100644 index 00000000..b2785ada --- /dev/null +++ b/app/Template/project_predefined_content/show.php @@ -0,0 +1,47 @@ +<div class="page-header"> + <h2><?= t('Predefined Contents') ?></h2> + <ul> + <li> + <?= $this->modal->medium('plus', t('Add predefined task description'), 'PredefinedTaskDescriptionController', 'create', array('project_id' => $project['id'])) ?> + </li> + </ul> +</div> + +<?php if (! empty($predefined_task_descriptions)): ?> + <h3><?= t('Predefined Task Descriptions') ?></h3> + <table> + <?php foreach ($predefined_task_descriptions as $template): ?> + <tr> + <td> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-cog"></i><i class="fa fa-caret-down"></i></a> + <ul> + <li> + <?= $this->modal->medium('edit', t('Edit'), 'PredefinedTaskDescriptionController', 'edit', array('project_id' => $project['id'], 'id' => $template['id'])) ?> + </li> + <li> + <?= $this->modal->confirm('trash-o', t('Remove'), 'PredefinedTaskDescriptionController', 'confirm', array('project_id' => $project['id'], 'id' => $template['id'])) ?> + </li> + </ul> + </div> + <?= $this->text->e($template['title']) ?> + <span class="tooltip" title="<?= $this->text->markdownAttribute($template['description']) ?>"> + <i class="fa fa-info-circle"></i> + </span> + </td> + </tr> + <?php endforeach ?> + </table> +<?php endif ?> + +<form method="post" action="<?= $this->url->href('ProjectPredefinedContentController', 'update', array('project_id' => $project['id'], 'redirect' => 'edit')) ?>" autocomplete="off"> + <?= $this->form->csrf() ?> + + <fieldset> + <legend><?= t('Predefined Email Subjects') ?></legend> + <?= $this->form->textarea('predefined_email_subjects', $values, $errors, array('tabindex="1"')) ?> + <p class="form-help"><?= t('Write one subject by line.') ?></p> + </fieldset> + + <?= $this->modal->submitButtons(array('tabindex' => 2)) ?> +</form> diff --git a/app/Template/project_role/show.php b/app/Template/project_role/show.php index 5377f7bb..65c9ef11 100644 --- a/app/Template/project_role/show.php +++ b/app/Template/project_role/show.php @@ -80,7 +80,11 @@ <i class="fa fa-check-circle-o fa-fw" aria-hidden="true"></i> <strong><?= $this->text->e($restriction['src_column_title']) ?> / <?= $this->text->e($restriction['dst_column_title']) ?></strong> <i class="fa fa-arrow-right fa-fw" aria-hidden="true"></i> - <?= t('Only moving task between those columns is permitted') ?> + <?php if ($restriction['only_assigned'] == 1): ?> + <?= t('Only moving task between those columns is permitted for tasks assigned to the current user') ?> + <?php else: ?> + <?= t('Only moving task between those columns is permitted') ?> + <?php endif ?> </td> <td> <?= $this->modal->confirm('trash-o', t('Remove'), 'ColumnMoveRestrictionController', 'confirm', array('project_id' => $project['id'], 'restriction_id' => $restriction['restriction_id'])) ?> diff --git a/app/Template/project_tag/create.php b/app/Template/project_tag/create.php index a0e6243b..6765e8fc 100644 --- a/app/Template/project_tag/create.php +++ b/app/Template/project_tag/create.php @@ -3,7 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('ProjectTagController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="255"')) ?> diff --git a/app/Template/project_tag/edit.php b/app/Template/project_tag/edit.php index 8cb1e209..29290c0c 100644 --- a/app/Template/project_tag/edit.php +++ b/app/Template/project_tag/edit.php @@ -3,8 +3,6 @@ </div> <form method="post" action="<?= $this->url->href('ProjectTagController', 'update', array('tag_id' => $tag['id'], 'project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="255"')) ?> diff --git a/app/Template/project_user_overview/layout.php b/app/Template/project_user_overview/layout.php index 9115ef3c..c97106f7 100644 --- a/app/Template/project_user_overview/layout.php +++ b/app/Template/project_user_overview/layout.php @@ -14,11 +14,6 @@ <li> <?= $this->url->icon('folder', t('Projects list'), 'ProjectListController', 'show') ?> </li> - <?php if ($this->user->hasAccess('ProjectGanttController', 'show')): ?> - <li> - <?= $this->url->icon('sliders', t('Projects Gantt chart'), 'ProjectGanttController', 'show') ?> - </li> - <?php endif ?> </ul> </div> <section class="sidebar-container"> diff --git a/app/Template/project_user_overview/roles.php b/app/Template/project_user_overview/roles.php index b8c67323..f53e7fa3 100644 --- a/app/Template/project_user_overview/roles.php +++ b/app/Template/project_user_overview/roles.php @@ -14,7 +14,6 @@ </td> <td> <?= $this->url->link('<i class="fa fa-th"></i>', 'BoardViewController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Board')) ?> - <?= $this->url->link('<i class="fa fa-sliders fa-fw"></i>', 'TaskGanttController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Gantt chart')) ?> <?= $this->url->link('<i class="fa fa-cog fa-fw"></i>', 'ProjectViewController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Project settings')) ?> <?= $this->text->e($project['project_name']) ?> diff --git a/app/Template/project_user_overview/tasks.php b/app/Template/project_user_overview/tasks.php index 8d682170..1e01a43f 100644 --- a/app/Template/project_user_overview/tasks.php +++ b/app/Template/project_user_overview/tasks.php @@ -36,7 +36,7 @@ <?= $this->dt->date($task['date_started']) ?> </td> <td> - <?= $this->dt->date($task['date_due']) ?> + <?= $this->dt->datetime($task['date_due']) ?> </td> </tr> <?php endforeach ?> diff --git a/app/Template/subtask/create.php b/app/Template/subtask/create.php index 96ad7a46..1ed36d47 100644 --- a/app/Template/subtask/create.php +++ b/app/Template/subtask/create.php @@ -2,11 +2,20 @@ <h2><?= t('Add a sub-task') ?></h2> </div> -<form method="post" action="<?= $this->url->href('SubtaskController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> +<?php if (isset($values['subtasks_added']) && $values['subtasks_added'] > 0): ?> + <p class="alert alert-success"> + <?php if ($values['subtasks_added'] == 1): ?> + <?= t('Subtask added successfully.') ?> + <?php else: ?> + <?= t('%d subtasks added successfully.', $values['subtasks_added']) ?> + <?php endif ?> + </p> +<?php endif ?> +<form method="post" action="<?= $this->url->href('SubtaskController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('task_id', $values) ?> - <?= $this->subtask->renderTitleField($values, $errors, array('autofocus')) ?> + + <?= $this->subtask->renderBulkTitleField($values, $errors, array('autofocus')) ?> <?= $this->subtask->renderAssigneeField($users_list, $values, $errors) ?> <?= $this->subtask->renderTimeEstimatedField($values, $errors) ?> diff --git a/app/Template/subtask/edit.php b/app/Template/subtask/edit.php index 7c0266a8..aed57e95 100644 --- a/app/Template/subtask/edit.php +++ b/app/Template/subtask/edit.php @@ -4,8 +4,6 @@ <form method="post" action="<?= $this->url->href('SubtaskController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'subtask_id' => $subtask['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('task_id', $values) ?> <?= $this->subtask->renderTitleField($values, $errors, array('autofocus')) ?> <?= $this->subtask->renderAssigneeField($users_list, $values, $errors) ?> diff --git a/app/Template/subtask/table.php b/app/Template/subtask/table.php index 5488796d..e1bca500 100644 --- a/app/Template/subtask/table.php +++ b/app/Template/subtask/table.php @@ -21,7 +21,7 @@ 'task' => $task, 'subtask' => $subtask, )) ?> - <?= $this->subtask->renderToggleStatus($task, $subtask, true) ?> + <?= $this->subtask->renderToggleStatus($task, $subtask, 'table') ?> <?php else: ?> <?= $this->subtask->renderTitle($subtask) ?> <?php endif ?> diff --git a/app/Template/swimlane/create.php b/app/Template/swimlane/create.php index 7d05e731..5ff8cbee 100644 --- a/app/Template/swimlane/create.php +++ b/app/Template/swimlane/create.php @@ -2,9 +2,7 @@ <h2><?= t('Add a new swimlane') ?></h2> </div> <form method="post" action="<?= $this->url->href('SwimlaneController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> - <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="50"', 'tabindex="1"')) ?> diff --git a/app/Template/swimlane/edit.php b/app/Template/swimlane/edit.php index c1c41196..b1d713ee 100644 --- a/app/Template/swimlane/edit.php +++ b/app/Template/swimlane/edit.php @@ -3,12 +3,8 @@ </div> <form method="post" action="<?= $this->url->href('SwimlaneController', 'update', array('project_id' => $project['id'], 'swimlane_id' => $values['id'])) ?>" autocomplete="off"> - <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> - <?= $this->form->label(t('Name'), 'name') ?> <?= $this->form->text('name', $values, $errors, array('autofocus', 'required', 'maxlength="50"', 'tabindex="1"')) ?> diff --git a/app/Template/task/changes.php b/app/Template/task/changes.php index 2c2bf267..6aa3d49b 100644 --- a/app/Template/task/changes.php +++ b/app/Template/task/changes.php @@ -31,7 +31,7 @@ if (empty($task['date_due'])) { echo '<li>'.t('The due date have been removed').'</li>'; } else { - echo '<li>'.t('New due date: ').$this->dt->date($task['date_due']).'</li>'; + echo '<li>'.t('New due date: ').$this->dt->datetime($task['date_due']).'</li>'; } break; case 'description': diff --git a/app/Template/task/details.php b/app/Template/task/details.php index 24099a3c..cf305743 100644 --- a/app/Template/task/details.php +++ b/app/Template/task/details.php @@ -22,7 +22,7 @@ </li> <?php if (! empty($task['reference'])): ?> <li> - <strong><?= t('Reference:') ?></strong> <span><?= $this->text->e($task['reference']) ?></span> + <strong><?= t('Reference:') ?></strong> <span><?= $this->task->renderReference($task) ?></span> </li> <?php endif ?> <?php if (! empty($task['score'])): ?> @@ -92,12 +92,6 @@ <span><?= $this->text->e($task['creator_name'] ?: $task['creator_username']) ?></span> </li> <?php endif ?> - <?php if ($task['date_due']): ?> - <li> - <strong><?= t('Due date:') ?></strong> - <span><?= $this->dt->date($task['date_due']) ?></span> - </li> - <?php endif ?> <?php if ($task['time_estimated']): ?> <li> <strong><?= t('Time estimated:') ?></strong> @@ -116,6 +110,18 @@ </div> <div class="task-summary-column"> <ul class="no-bullet"> + <?php if ($task['date_due']): ?> + <li> + <strong><?= t('Due date:') ?></strong> + <span><?= $this->dt->datetime($task['date_due']) ?></span> + </li> + <?php endif ?> + <?php if ($task['date_started']): ?> + <li> + <strong><?= t('Started:') ?></strong> + <span><?= $this->dt->datetime($task['date_started']) ?></span> + </li> + <?php endif ?> <li> <strong><?= t('Created:') ?></strong> <span><?= $this->dt->datetime($task['date_creation']) ?></span> @@ -130,12 +136,6 @@ <span><?= $this->dt->datetime($task['date_completed']) ?></span> </li> <?php endif ?> - <?php if ($task['date_started']): ?> - <li> - <strong><?= t('Started:') ?></strong> - <span><?= $this->dt->datetime($task['date_started']) ?></span> - </li> - <?php endif ?> <?php if ($task['date_moved']): ?> <li> <strong><?= t('Moved:') ?></strong> diff --git a/app/Template/task/dropdown.php b/app/Template/task/dropdown.php index f35abc79..5135fb77 100644 --- a/app/Template/task/dropdown.php +++ b/app/Template/task/dropdown.php @@ -1,15 +1,17 @@ <div class="dropdown"> <a href="#" class="dropdown-menu dropdown-menu-link-icon"><strong>#<?= $task['id'] ?> <i class="fa fa-caret-down"></i></strong></a> <ul> - <?php if (array_key_exists('date_started', $task) && empty($task['date_started'])): ?> - <li> - <?= $this->url->icon('play', t('Set automatically the start date'), 'TaskModificationController', 'start', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> - </li> + <?php if ($this->projectRole->canUpdateTask($task)): ?> + <?php if (array_key_exists('date_started', $task) && empty($task['date_started'])): ?> + <li> + <?= $this->url->icon('play', t('Set automatically the start date'), 'TaskModificationController', 'start', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> + </li> + <?php endif ?> + <li> + <?= $this->modal->large('edit', t('Edit the task'), 'TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> + </li> <?php endif ?> <li> - <?= $this->modal->large('edit', t('Edit the task'), 'TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> - </li> - <li> <?= $this->modal->medium('plus', t('Add a sub-task'), 'SubtaskController', 'create', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </li> <li> diff --git a/app/Template/task/show.php b/app/Template/task/show.php index 565f0632..892d62f2 100644 --- a/app/Template/task/show.php +++ b/app/Template/task/show.php @@ -18,7 +18,7 @@ 'task' => $task, 'subtasks' => $subtasks, 'project' => $project, - 'editable' => true, + 'editable' => $this->user->hasProjectAccess('SubtaskController', 'edit', $project['id']), )) ?> <?php endif ?> @@ -29,7 +29,7 @@ 'links' => $internal_links, 'project' => $project, 'link_label_list' => $link_label_list, - 'editable' => true, + 'editable' => $this->user->hasProjectAccess('TaskInternalLinkController', 'edit', $project['id']), 'is_public' => false, )) ?> <?php endif ?> diff --git a/app/Template/task/sidebar.php b/app/Template/task/sidebar.php index 952c3298..265c6ef0 100644 --- a/app/Template/task/sidebar.php +++ b/app/Template/task/sidebar.php @@ -29,12 +29,14 @@ <h2><?= t('Actions') ?></h2> </div> <ul> + <?php if ($this->projectRole->canUpdateTask($task)): ?> <li> <?= $this->modal->large('edit', t('Edit the task'), 'TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </li> <li> <?= $this->modal->medium('refresh fa-rotate-90', t('Edit recurrence'), 'TaskRecurrenceController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </li> + <?php endif ?> <li> <?= $this->modal->medium('plus', t('Add a sub-task'), 'SubtaskController', 'create', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> </li> diff --git a/app/Template/task_bulk/show.php b/app/Template/task_bulk/show.php index acf80d8c..b13cf239 100644 --- a/app/Template/task_bulk/show.php +++ b/app/Template/task_bulk/show.php @@ -6,12 +6,16 @@ <?= $this->form->csrf() ?> <?= $this->form->hidden('column_id', $values) ?> <?= $this->form->hidden('swimlane_id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> <?= $this->task->renderColorField($values) ?> <?= $this->task->renderAssigneeField($users_list, $values, $errors) ?> <?= $this->task->renderCategoryField($categories_list, $values, $errors) ?> + <?php if (! empty($task_description_templates)): ?> + <?= $this->form->label(t('Template for the task description'), 'task_description_template_id') ?> + <?= $this->form->select('task_description_template_id', $task_description_templates, $values, $errors) ?> + <?php endif ?> + <?= $this->form->label(t('Tasks'), 'tasks') ?> <?= $this->form->textarea('tasks', $values, $errors, array('placeholder="'.t('My task title').'"')) ?> <p class="form-help"><?= t('Enter one task by line.') ?></p> diff --git a/app/Template/task_comments/show.php b/app/Template/task_comments/show.php index d34e5e95..47bb5ff2 100644 --- a/app/Template/task_comments/show.php +++ b/app/Template/task_comments/show.php @@ -25,7 +25,11 @@ <?php if ($editable): ?> <?= $this->render('task_comments/create', array( - 'values' => array(), + 'values' => array( + 'user_id' => $this->user->getId(), + 'task_id' => $task['id'], + 'project_id' => $task['project_id'], + ), 'errors' => array(), 'task' => $task, )) ?> diff --git a/app/Template/task_creation/show.php b/app/Template/task_creation/show.php index e957087f..935e0823 100644 --- a/app/Template/task_creation/show.php +++ b/app/Template/task_creation/show.php @@ -1,14 +1,14 @@ <div class="page-header"> - <h2><?= $this->text->e($project['name']) ?> > <?= t('New task') ?><?= $this->task->getNewTaskDropdown($project['id'], $values['swimlane_id'], $values['column_id']) ?></h2> + <h2><?= $this->text->e($project['name']) ?> > <?= t('New task') ?></h2> </div> <form method="post" action="<?= $this->url->href('TaskCreationController', 'save', array('project_id' => $project['id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('project_id', $values) ?> <div class="task-form-container"> <div class="task-form-main-column"> <?= $this->task->renderTitleField($values, $errors) ?> <?= $this->task->renderDescriptionField($values, $errors) ?> + <?= $this->task->renderDescriptionTemplateDropdown($project['id']) ?> <?= $this->task->renderTagField($project) ?> <?= $this->hook->render('template:task:form:first-column', array('values' => $values, 'errors' => $errors)) ?> diff --git a/app/Template/task_external_link/edit.php b/app/Template/task_external_link/edit.php index df10d444..e448b10f 100644 --- a/app/Template/task_external_link/edit.php +++ b/app/Template/task_external_link/edit.php @@ -2,7 +2,7 @@ <h2><?= t('Edit external link') ?></h2> </div> -<form action="<?= $this->url->href('TaskExternalLinkController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" method="post" autocomplete="off"> +<form action="<?= $this->url->href('TaskExternalLinkController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'link_id' => $link['id'])) ?>" method="post" autocomplete="off"> <?= $this->render('task_external_link/form', array('task' => $task, 'dependencies' => $dependencies, 'values' => $values, 'errors' => $errors)) ?> <?= $this->modal->submitButtons() ?> </form> diff --git a/app/Template/task_external_link/find.php b/app/Template/task_external_link/find.php index a3665c0d..29d85101 100644 --- a/app/Template/task_external_link/find.php +++ b/app/Template/task_external_link/find.php @@ -4,7 +4,6 @@ <form action="<?= $this->url->href('TaskExternalLinkController', 'create', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" method="post" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('task_id', array('task_id' => $task['id'])) ?> <?= $this->form->label(t('External link'), 'text') ?> <?= $this->form->text( diff --git a/app/Template/task_external_link/form.php b/app/Template/task_external_link/form.php index 932ca521..4ad2b2e0 100644 --- a/app/Template/task_external_link/form.php +++ b/app/Template/task_external_link/form.php @@ -1,6 +1,4 @@ <?= $this->form->csrf() ?> -<?= $this->form->hidden('task_id', array('task_id' => $task['id'])) ?> -<?= $this->form->hidden('id', $values) ?> <?= $this->form->hidden('link_type', $values) ?> <?= $this->form->label(t('URL'), 'url') ?> diff --git a/app/Template/task_external_link/table.php b/app/Template/task_external_link/table.php index e345037e..5b22161a 100644 --- a/app/Template/task_external_link/table.php +++ b/app/Template/task_external_link/table.php @@ -1,12 +1,15 @@ <?php if (! empty($links)): ?> <table class="table-striped table-scrolling"> - <tr> - <th class="column-15"><?= t('Type') ?></th> - <th><?= t('Title') ?></th> - <th class="column-10"><?= t('Dependency') ?></th> - <th class="column-15"><?= t('Creator') ?></th> - <th class="column-15"><?= t('Date') ?></th> - </tr> + <thead> + <tr> + <th class="column-15"><?= t('Type') ?></th> + <th><?= t('Title') ?></th> + <th class="column-10"><?= t('Dependency') ?></th> + <th class="column-15"><?= t('Creator') ?></th> + <th class="column-15"><?= t('Date') ?></th> + </tr> + </thead> + <tbody> <?php foreach ($links as $link): ?> <tr> <td> @@ -26,7 +29,7 @@ <?= $this->text->e($link['type']) ?> </td> <td> - <a href="<?= $link['url'] ?>" target="_blank"><?= $this->text->e($link['title']) ?></a> + <a href="<?= $link['url'] ?>" title="<?= $this->text->e($link['url']) ?>" target="_blank"><?= $this->text->e($link['title']) ?></a> </td> <td> <?= $this->text->e($link['dependency_label']) ?> @@ -39,5 +42,6 @@ </td> </tr> <?php endforeach ?> + </tbody> </table> <?php endif ?> diff --git a/app/Template/task_gantt/show.php b/app/Template/task_gantt/show.php deleted file mode 100644 index 61a476b7..00000000 --- a/app/Template/task_gantt/show.php +++ /dev/null @@ -1,31 +0,0 @@ -<section id="main"> - <?= $this->projectHeader->render($project, 'TaskGanttController', 'show') ?> - <div class="menu-inline"> - <ul> - <li <?= $sorting === 'board' ? 'class="active"' : '' ?>> - <?= $this->url->icon('sort-numeric-asc', t('Sort by position'), 'TaskGanttController', 'show', array('project_id' => $project['id'], 'sorting' => 'board')) ?> - </li> - <li <?= $sorting === 'date' ? 'class="active"' : '' ?>> - <?= $this->url->icon('sort-amount-asc', t('Sort by date'), 'TaskGanttController', 'show', array('project_id' => $project['id'], 'sorting' => 'date')) ?> - </li> - <li> - <?= $this->modal->large('plus', t('Add task'), 'TaskCreationController', 'show', array('project_id' => $project['id'])) ?> - </li> - </ul> - </div> - - <?php if (! empty($tasks)): ?> - <div - id="gantt-chart" - data-records='<?= json_encode($tasks, JSON_HEX_APOS) ?>' - data-save-url="<?= $this->url->href('TaskGanttController', 'save', array('project_id' => $project['id'])) ?>" - data-label-start-date="<?= t('Start date:') ?>" - data-label-end-date="<?= t('Due date:') ?>" - data-label-assignee="<?= t('Assignee:') ?>" - data-label-not-defined="<?= t('There is no start date or due date for this task.') ?>" - ></div> - <p class="alert alert-info"><?= t('Moving or resizing a task will change the start and due date of the task.') ?></p> - <?php else: ?> - <p class="alert"><?= t('There is no task in your project.') ?></p> - <?php endif ?> -</section> diff --git a/app/Template/task_import/show.php b/app/Template/task_import/show.php index 20b020d3..342cfb76 100644 --- a/app/Template/task_import/show.php +++ b/app/Template/task_import/show.php @@ -26,6 +26,8 @@ <li><?= t('The first row must be the header') ?></li> <li><?= t('Duplicates are not verified for you') ?></li> <li><?= t('The due date must use the ISO format: YYYY-MM-DD') ?></li> + <li><?= t('Tags must be separated by a comma') ?></li> + <li><?= t('Only the task title is required') ?></li> </ul> <p class="margin-top"> <?= $this->url->icon('download', t('Download CSV template'), 'TaskImportController', 'template', array('project_id' => $project['id'])) ?> diff --git a/app/Template/task_internal_link/create.php b/app/Template/task_internal_link/create.php index 3c39b87c..bab41253 100644 --- a/app/Template/task_internal_link/create.php +++ b/app/Template/task_internal_link/create.php @@ -5,7 +5,6 @@ <form action="<?= $this->url->href('TaskInternalLinkController', 'save', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" method="post" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('task_id', array('task_id' => $task['id'])) ?> <?= $this->form->hidden('opposite_task_id', $values) ?> <?= $this->form->label(t('Label'), 'link_id') ?> @@ -25,5 +24,7 @@ ), 'autocomplete') ?> + <?= $this->form->checkbox('another_tasklink', t('Create another link'), 1, isset($values['another_tasklink']) && $values['another_tasklink'] == 1) ?> + <?= $this->modal->submitButtons() ?> </form> diff --git a/app/Template/task_internal_link/edit.php b/app/Template/task_internal_link/edit.php index 5abf7b65..fab84d0b 100644 --- a/app/Template/task_internal_link/edit.php +++ b/app/Template/task_internal_link/edit.php @@ -3,10 +3,8 @@ </div> <form action="<?= $this->url->href('TaskInternalLinkController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'link_id' => $task_link['id'])) ?>" method="post" autocomplete="off"> - <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('task_id', $values) ?> + <?= $this->form->hidden('opposite_task_id', $values) ?> <?= $this->form->label(t('Label'), 'link_id') ?> diff --git a/app/Template/task_list/listing.php b/app/Template/task_list/listing.php index b3c66aa6..97393972 100644 --- a/app/Template/task_list/listing.php +++ b/app/Template/task_list/listing.php @@ -1,40 +1,38 @@ -<section id="main"> - <?= $this->projectHeader->render($project, 'TaskListController', 'show') ?> +<?= $this->projectHeader->render($project, 'TaskListController', 'show') ?> - <?php if ($paginator->isEmpty()): ?> - <p class="alert"><?= t('No tasks found.') ?></p> - <?php elseif (! $paginator->isEmpty()): ?> - <div class="table-list"> - <?= $this->render('task_list/header', array( - 'paginator' => $paginator, - 'project' => $project, - )) ?> +<?php if ($paginator->isEmpty()): ?> + <p class="alert"><?= t('No tasks found.') ?></p> +<?php elseif (! $paginator->isEmpty()): ?> + <div class="table-list"> + <?= $this->render('task_list/header', array( + 'paginator' => $paginator, + 'project' => $project, + )) ?> - <?php foreach ($paginator->getCollection() as $task): ?> - <div class="table-list-row color-<?= $task['color_id'] ?>"> - <?= $this->render('task_list/task_title', array( - 'task' => $task, - )) ?> + <?php foreach ($paginator->getCollection() as $task): ?> + <div class="table-list-row color-<?= $task['color_id'] ?>"> + <?= $this->render('task_list/task_title', array( + 'task' => $task, + )) ?> - <?= $this->render('task_list/task_details', array( - 'task' => $task, - )) ?> + <?= $this->render('task_list/task_details', array( + 'task' => $task, + )) ?> - <?= $this->render('task_list/task_avatars', array( - 'task' => $task, - )) ?> + <?= $this->render('task_list/task_avatars', array( + 'task' => $task, + )) ?> - <?= $this->render('task_list/task_icons', array( - 'task' => $task, - )) ?> + <?= $this->render('task_list/task_icons', array( + 'task' => $task, + )) ?> - <?= $this->render('task_list/task_subtasks', array( - 'task' => $task, - )) ?> - </div> - <?php endforeach ?> - </div> + <?= $this->render('task_list/task_subtasks', array( + 'task' => $task, + )) ?> + </div> + <?php endforeach ?> + </div> - <?= $paginator ?> - <?php endif ?> -</section> + <?= $paginator ?> +<?php endif ?> diff --git a/app/Template/task_list/sort_menu.php b/app/Template/task_list/sort_menu.php index 48081fe0..a42fb46e 100644 --- a/app/Template/task_list/sort_menu.php +++ b/app/Template/task_list/sort_menu.php @@ -17,6 +17,9 @@ <?= $paginator->order(t('Priority'), \Kanboard\Model\TaskModel::TABLE.'.priority') ?> </li> <li> + <?= $paginator->order(t('Position'), \Kanboard\Model\TaskModel::TABLE.'.position') ?> + </li> + <li> <?= $paginator->order(t('Title'), \Kanboard\Model\TaskModel::TABLE.'.title') ?> </li> <li> @@ -26,6 +29,9 @@ <?= $paginator->order(t('Due date'), \Kanboard\Model\TaskModel::TABLE.'.date_due') ?> </li> <li> + <?= $paginator->order(t('Start date'), \Kanboard\Model\TaskModel::TABLE.'.date_started') ?> + </li> + <li> <?= $paginator->order(t('Status'), \Kanboard\Model\TaskModel::TABLE.'.is_active') ?> </li> </ul> diff --git a/app/Template/task_list/task_icons.php b/app/Template/task_list/task_icons.php index 8694d147..d02c9021 100644 --- a/app/Template/task_list/task_icons.php +++ b/app/Template/task_list/task_icons.php @@ -1,7 +1,7 @@ <div class="task-list-icons"> <?php if ($task['reference']): ?> <span class="task-board-reference" title="<?= t('Reference') ?>"> - <?= $this->text->e($task['reference']) ?> + <?= $this->task->renderReference($task) ?> </span> <?php endif ?> <?php if ($task['is_milestone'] == 1): ?> @@ -23,16 +23,23 @@ </span> <?php endif ?> + <?php if (! empty($task['date_started'])): ?> + <span title="<?= t('Start date') ?>" class="task-date"> + <i class="fa fa-clock-o"></i> + <?= $this->dt->date($task['date_started']) ?> + </span> + <?php endif ?> + <?php if (! empty($task['date_due'])): ?> - <span class="task-date - <?php if (date('Y-m-d') == date('Y-m-d', $task['date_due'])): ?> - task-date-today - <?php elseif (time() > $task['date_due']): ?> + <span title="<?= t('Due date') ?>" class="task-date + <?php if (time() > $task['date_due']): ?> task-date-overdue + <?php elseif (date('Y-m-d') == date('Y-m-d', $task['date_due'])): ?> + task-date-today <?php endif ?> "> <i class="fa fa-calendar"></i> - <?= $this->dt->date($task['date_due']) ?> + <?= $this->dt->datetime($task['date_due']) ?> </span> <?php endif ?> @@ -81,6 +88,8 @@ </span> <?php endif ?> + <span title="<?= t('Position') ?>">(<?= $task['position'] ?>)</span> + <?php if ($task['is_active'] == 1): ?> <div class="task-icon-age"> <span title="<?= t('Task age in days')?>" class="task-icon-age-total"><?= $this->dt->age($task['date_creation']) ?></span> diff --git a/app/Template/task_list/task_subtasks.php b/app/Template/task_list/task_subtasks.php index 716d6df2..9110b171 100644 --- a/app/Template/task_list/task_subtasks.php +++ b/app/Template/task_list/task_subtasks.php @@ -3,7 +3,7 @@ <?php foreach ($task['subtasks'] as $subtask): ?> <div class="task-list-subtask"> <span class="subtask-cell column-50"> - <?= $this->subtask->renderToggleStatus($task, $subtask) ?> + <?= $this->subtask->renderToggleStatus($task, $subtask, 'rows', isset($user_id) ? $user_id : 0) ?> </span> <span class="subtask-cell column-20 subtask-assignee"> <?php if (! empty($subtask['username'])): ?> diff --git a/app/Template/task_mail/create.php b/app/Template/task_mail/create.php index 9a1a26b3..f369ef99 100644 --- a/app/Template/task_mail/create.php +++ b/app/Template/task_mail/create.php @@ -1,15 +1,45 @@ <div class="page-header"> <h2><?= $this->text->e($task['title']) ?> > <?= t('Send by email') ?></h2> </div> -<form method="post" action="<?= $this->url->href('TaskMailController', 'send', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> +<form method="post" action="<?= $this->url->href('TaskMailController', 'send', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off" class="js-mail-form"> <?= $this->form->csrf() ?> <?= $this->form->label(t('Email'), 'email') ?> <?= $this->form->email('email', $values, $errors, array('autofocus', 'required', 'tabindex="1"')) ?> + <?php if (! empty($members)): ?> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-address-card-o"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php foreach ($members as $member): ?> + <li data-email="<?= $this->text->e($member['email']) ?>" class="js-autocomplete-email"> + <?= $this->text->e($this->user->getFullname($member)) ?> + </li> + <?php endforeach ?> + </ul> + </div> + <?php endif ?> + <?= $this->form->label(t('Subject'), 'subject') ?> <?= $this->form->text('subject', $values, $errors, array('required', 'tabindex="2"')) ?> + <?php if (! empty($project['predefined_email_subjects'])): ?> + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><i class="fa fa-archive"></i><i class="fa fa-caret-down"></i></a> + <ul> + <?php foreach (explode("\r\n", trim($project['predefined_email_subjects'])) as $subject): ?> + <?php $subject = trim($subject); ?> + + <?php if (! empty($subject)): ?> + <li data-subject="<?= $this->text->e($subject) ?>" class="js-autocomplete-subject"> + <?= $this->text->e($subject) ?> + </li> + <?php endif ?> + <?php endforeach ?> + </ul> + </div> + <?php endif ?> + <?= $this->modal->submitButtons(array( 'submitLabel' => t('Send by email'), 'tabindex' => 3, diff --git a/app/Template/task_mail/email.php b/app/Template/task_mail/email.php index 70db572e..ee85b1d1 100644 --- a/app/Template/task_mail/email.php +++ b/app/Template/task_mail/email.php @@ -9,7 +9,7 @@ </li> <?php if ($task['date_due']): ?> <li> - <strong><?= t('Due date:').' '.$this->dt->date($task['date_due']) ?></strong> + <strong><?= t('Due date:').' '.$this->dt->datetime($task['date_due']) ?></strong> </li> <?php endif ?> <?php if (! empty($task['creator_username'])): ?> diff --git a/app/Template/task_modification/show.php b/app/Template/task_modification/show.php index 710abedf..c7c41ddd 100644 --- a/app/Template/task_modification/show.php +++ b/app/Template/task_modification/show.php @@ -3,13 +3,12 @@ </div> <form method="post" action="<?= $this->url->href('TaskModificationController', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off"> <?= $this->form->csrf() ?> - <?= $this->form->hidden('id', $values) ?> - <?= $this->form->hidden('project_id', $values) ?> <div class="task-form-container"> <div class="task-form-main-column"> <?= $this->task->renderTitleField($values, $errors) ?> <?= $this->task->renderDescriptionField($values, $errors) ?> + <?= $this->task->renderDescriptionTemplateDropdown($project['id']) ?> <?= $this->task->renderTagField($project, $tags) ?> <?= $this->hook->render('template:task:form:first-column', array('values' => $values, 'errors' => $errors)) ?> diff --git a/app/User/Avatar/GravatarProvider.php b/app/User/Avatar/GravatarProvider.php deleted file mode 100644 index e066d766..00000000 --- a/app/User/Avatar/GravatarProvider.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -namespace Kanboard\User\Avatar; - -use Kanboard\Core\Base; -use Kanboard\Core\User\Avatar\AvatarProviderInterface; - -/** - * Gravatar Avatar Provider - * - * @package avatar - * @author Frederic Guillot - */ -class GravatarProvider extends Base implements AvatarProviderInterface -{ - /** - * Render avatar html - * - * @access public - * @param array $user - * @param int $size - * @return string - */ - public function render(array $user, $size) - { - $url = sprintf('https://www.gravatar.com/avatar/%s?s=%d', md5(strtolower($user['email'])), $size); - $title = $this->helper->text->e($user['name'] ?: $user['username']); - return '<img src="'.$url.'" alt="'.$title.'" title="'.$title.'">'; - } - - /** - * Determine if the provider is active - * - * @access public - * @param array $user - * @return boolean - */ - public function isActive(array $user) - { - return !empty($user['email']) && $this->configModel->get('integration_gravatar') == 1; - } -} diff --git a/app/User/DatabaseBackendUserProvider.php b/app/User/DatabaseBackendUserProvider.php new file mode 100644 index 00000000..835d90be --- /dev/null +++ b/app/User/DatabaseBackendUserProvider.php @@ -0,0 +1,43 @@ +<?php + +namespace Kanboard\User; + +use Kanboard\Core\Base; +use Kanboard\Core\User\UserBackendProviderInterface; +use Kanboard\Filter\UserNameFilter; +use Kanboard\Model\UserModel; + +/** + * Database Backend User Provider + * + * @package Kanboard\User + * @author Frederic Guillot + */ +class DatabaseBackendUserProvider extends Base implements UserBackendProviderInterface +{ + /** + * Find a group from a search query + * + * @access public + * @param string $input + * @return DatabaseUserProvider[] + */ + public function find($input) + { + $result = array(); + + $users = $this->userQuery->withFilter(new UserNameFilter($input)) + ->getQuery() + ->columns(UserModel::TABLE.'.id', UserModel::TABLE.'.username', UserModel::TABLE.'.name') + ->eq(UserModel::TABLE.'.is_active', 1) + ->asc(UserModel::TABLE.'.name') + ->asc(UserModel::TABLE.'.username') + ->findAll(); + + foreach ($users as $user) { + $result[] = new DatabaseUserProvider($user); + } + + return $result; + } +} diff --git a/app/User/DatabaseUserProvider.php b/app/User/DatabaseUserProvider.php index fc626610..3b26aedb 100644 --- a/app/User/DatabaseUserProvider.php +++ b/app/User/DatabaseUserProvider.php @@ -83,7 +83,7 @@ class DatabaseUserProvider implements UserProviderInterface */ public function getRole() { - return ''; + return empty($this->user['role']) ? '' : $this->user['role']; } /** @@ -94,7 +94,7 @@ class DatabaseUserProvider implements UserProviderInterface */ public function getUsername() { - return ''; + return empty($this->user['username']) ? '' : $this->user['username']; } /** @@ -105,7 +105,7 @@ class DatabaseUserProvider implements UserProviderInterface */ public function getName() { - return ''; + return empty($this->user['name']) ? '' : $this->user['name']; } /** @@ -116,7 +116,7 @@ class DatabaseUserProvider implements UserProviderInterface */ public function getEmail() { - return ''; + return empty($this->user['email']) ? '' : $this->user['email']; } /** diff --git a/app/Validator/PredefinedTaskDescriptionValidator.php b/app/Validator/PredefinedTaskDescriptionValidator.php new file mode 100644 index 00000000..3ff4e3cb --- /dev/null +++ b/app/Validator/PredefinedTaskDescriptionValidator.php @@ -0,0 +1,22 @@ +<?php + +namespace Kanboard\Validator; + +use SimpleValidator\Validator; +use SimpleValidator\Validators; + +class PredefinedTaskDescriptionValidator extends BaseValidator +{ + public function validate(array $values) + { + $v = new Validator($values, array( + new Validators\Required('title', t('This value is required')), + new Validators\Required('description', t('This value is required')), + )); + + return array( + $v->execute(), + $v->getErrors() + ); + } +}
\ No newline at end of file diff --git a/app/Validator/TaskValidator.php b/app/Validator/TaskValidator.php index f82e7374..3fc70317 100644 --- a/app/Validator/TaskValidator.php +++ b/app/Validator/TaskValidator.php @@ -49,6 +49,20 @@ class TaskValidator extends BaseValidator ); } + public function validateStartAndDueDate(array $values) + { + if (!empty($values['date_started']) && !empty($values['date_due'])) { + $startDate = $this->dateParser->getTimestamp($values['date_started']); + $endDate = $this->dateParser->getTimestamp($values['date_due']); + + if ($startDate > $endDate) { + return array(false, array('date_started' => array(t('The start date is greater than the end date')))); + } + } + + return array(true, array()); + } + /** * Validate task creation * @@ -64,11 +78,14 @@ class TaskValidator extends BaseValidator ); $v = new Validator($values, array_merge($rules, $this->commonValidationRules())); + $result = $v->execute(); + $errors = $v->getErrors(); - return array( - $v->execute(), - $v->getErrors() - ); + if ($result) { + list($result, $errors) = $this->validateStartAndDueDate($values); + } + + return array($result, $errors); } /** @@ -81,7 +98,6 @@ class TaskValidator extends BaseValidator public function validateBulkCreation(array $values) { $rules = array( - new Validators\Required('project_id', t('The project is required')), new Validators\Required('tasks', t('Field required')), new Validators\Required('column_id', t('Field required')), new Validators\Required('swimlane_id', t('Field required')), @@ -134,11 +150,14 @@ class TaskValidator extends BaseValidator ); $v = new Validator($values, array_merge($rules, $this->commonValidationRules())); + $result = $v->execute(); + $errors = $v->getErrors(); - return array( - $v->execute(), - $v->getErrors() - ); + if ($result) { + list($result, $errors) = $this->validateStartAndDueDate($values); + } + + return array($result, $errors); } /** @@ -155,11 +174,14 @@ class TaskValidator extends BaseValidator ); $v = new Validator($values, array_merge($rules, $this->commonValidationRules())); + $result = $v->execute(); + $errors = $v->getErrors(); - return array( - $v->execute(), - $v->getErrors() - ); + if ($result) { + list($result, $errors) = $this->validateStartAndDueDate($values); + } + + return array($result, $errors); } /** @@ -185,27 +207,6 @@ class TaskValidator extends BaseValidator } /** - * Validate time tracking modification (form) - * - * @access public - * @param array $values Form values - * @return array $valid, $errors [0] = Success or not, [1] = List of errors - */ - public function validateTimeModification(array $values) - { - $rules = array( - new Validators\Required('id', t('The id is required')), - ); - - $v = new Validator($values, array_merge($rules, $this->commonValidationRules())); - - return array( - $v->execute(), - $v->getErrors() - ); - } - - /** * Validate task email creation * * @access public diff --git a/app/Validator/UserValidator.php b/app/Validator/UserValidator.php index fe402c47..041390a3 100644 --- a/app/Validator/UserValidator.php +++ b/app/Validator/UserValidator.php @@ -116,6 +116,10 @@ class UserValidator extends BaseValidator $v = new Validator($values, array_merge($rules, $this->commonPasswordValidationRules())); if ($v->execute()) { + if (! $this->userSession->isAdmin() && $values['id'] != $this->userSession->getId()) { + return array(false, array('current_password' => array('Invalid User ID'))); + } + if ($this->authenticationManager->passwordAuthentication($this->userSession->getUsername(), $values['current_password'], false)) { return array(true, array()); } else { diff --git a/app/check_setup.php b/app/check_setup.php index d962a6f8..314c9786 100644 --- a/app/check_setup.php +++ b/app/check_setup.php @@ -43,3 +43,8 @@ foreach (array('gd', 'mbstring', 'hash', 'openssl', 'json', 'hash', 'ctype', 'fi if (ini_get('arg_separator.output') === '&') { ini_set('arg_separator.output', '&'); } + +// Make sure we can read files with "\r", "\r\n" and "\n" +if (ini_get('auto_detect_line_endings') != 1) { + ini_set("auto_detect_line_endings", 1); +} diff --git a/app/common.php b/app/common.php index 69c56953..a1d42c33 100644 --- a/app/common.php +++ b/app/common.php @@ -42,6 +42,7 @@ $container->register(new Kanboard\ServiceProvider\NotificationProvider()); $container->register(new Kanboard\ServiceProvider\ClassProvider()); $container->register(new Kanboard\ServiceProvider\EventDispatcherProvider()); $container->register(new Kanboard\ServiceProvider\GroupProvider()); +$container->register(new Kanboard\ServiceProvider\UserProvider()); $container->register(new Kanboard\ServiceProvider\RouteProvider()); $container->register(new Kanboard\ServiceProvider\ActionProvider()); $container->register(new Kanboard\ServiceProvider\ExternalLinkProvider()); diff --git a/app/constants.php b/app/constants.php index d62bfd3a..6b260a4a 100644 --- a/app/constants.php +++ b/app/constants.php @@ -56,6 +56,7 @@ defined('DB_SSL_CA') or define('DB_SSL_CA', null); // Database backend group provider defined('DB_GROUP_PROVIDER') or define('DB_GROUP_PROVIDER', true); +defined('DB_USER_PROVIDER') or define('DB_USER_PROVIDER', true); // LDAP configuration defined('LDAP_AUTH') or define('LDAP_AUTH', false); @@ -146,3 +147,5 @@ defined('HTTP_PROXY_PASSWORD') or define('HTTP_PROXY_PASSWORD', ''); defined('HTTP_VERIFY_SSL_CERTIFICATE') or define('HTTP_VERIFY_SSL_CERTIFICATE', true); defined('TOTP_ISSUER') or define('TOTP_ISSUER', 'Kanboard'); + +defined('PROJECT_ACTIVITIES_MAX_EVENTS') or define('PROJECT_ACTIVITIES_MAX_EVENTS', 10000); |