bugfixes and improvements (#2660)

This commit is contained in:
Kevin Papst
2021-07-13 15:51:27 +02:00
committed by GitHub
parent 9dc94084c1
commit f12f1ae60d
53 changed files with 186 additions and 136 deletions

View File

@@ -276,8 +276,6 @@ class TimesheetController extends BaseApiController
* required=true,
* )
*
* @Security("is_granted('view_own_timesheet') or is_granted('view_other_timesheet')")
*
* @ApiSecurity(name="apiUser")
* @ApiSecurity(name="apiToken")
*
@@ -497,7 +495,7 @@ class TimesheetController extends BaseApiController
}
if (null !== ($reqLimit = $paramFetcher->get('size'))) {
$limit = $reqLimit;
$limit = (int) $reqLimit;
}
if (null !== ($reqBegin = $paramFetcher->get('begin'))) {

View File

@@ -90,6 +90,10 @@ class ImportTimesheetCommand extends Command
* @var User[]
*/
private $userCache = [];
/**
* @var Tag[]
*/
private $tagCache = [];
/**
* Comment that will be added to new customers, projects and activities.
*
@@ -371,9 +375,7 @@ class ImportTimesheetCommand extends Command
continue;
}
if (null === ($tag = $this->tagRepository->findTagByName($tagName))) {
$tag = (new Tag())->setName($tagName);
}
$tag = $this->getTag($tagName);
$timesheet->addTag($tag);
}
@@ -469,6 +471,23 @@ class ImportTimesheetCommand extends Command
return $this->userCache[$user];
}
private function getTag(string $tagName): Tag
{
if (\array_key_exists($tagName, $this->tagCache)) {
return $this->tagCache[$tagName];
}
$tag = $this->tagRepository->findTagByName($tagName);
if ($tag === null) {
$tag = (new Tag())->setName($tagName);
}
$this->tagCache[$tagName] = $tag;
return $this->tagCache[$tagName];
}
private function getActivity($activity, Project $project, $activityType): Activity
{
$tmpActivity = null;
@@ -497,8 +516,9 @@ class ImportTimesheetCommand extends Command
private function getProject($project, $customer, $fallbackCustomer): Project
{
if (!\array_key_exists($project, $this->projectCache)) {
/** @var Customer $tmpCustomer */
$cacheKey = $project . '_____' . $customer;
if (!\array_key_exists($cacheKey, $this->projectCache)) {
$tmpCustomer = $this->getCustomer($customer, $fallbackCustomer);
/** @var Project $tmpProject */
$tmpProject = null;
@@ -533,10 +553,10 @@ class ImportTimesheetCommand extends Command
$this->createdProjects++;
}
$this->projectCache[$project] = $tmpProject;
$this->projectCache[$cacheKey] = $tmpProject;
}
return $this->projectCache[$project];
return $this->projectCache[$cacheKey];
}
private function getCustomer($customer, $fallback): Customer
@@ -560,42 +580,44 @@ class ImportTimesheetCommand extends Command
}
}
if (null === $this->customerFallback) {
$tmpFallback = null;
if (!empty($fallback)) {
if (\is_int($customer)) {
$tmpFallback = $this->customers->find($fallback);
} else {
/** @var Customer|null $tmpFallback */
$tmpFallback = $this->customers->findOneBy(['name' => $fallback]);
}
}
if (null === $tmpFallback) {
$newName = $customer;
if (empty($customer)) {
$newName = self::DEFAULT_CUSTOMER;
if (!empty($fallback) && \is_string($fallback)) {
$newName = $fallback;
}
}
$tmpFallback = new Customer();
$tmpFallback->setName(sprintf($newName, $this->dateTime));
$tmpFallback->setComment($this->comment);
$tmpFallback->setCountry($this->configuration->getCustomerDefaultCountry());
$timezone = date_default_timezone_get();
if (null !== $this->configuration->getCustomerDefaultTimezone()) {
$timezone = $this->configuration->getCustomerDefaultTimezone();
}
$tmpFallback->setTimezone($timezone);
$this->customers->saveCustomer($tmpFallback);
$this->createdCustomers++;
}
$this->customerFallback = $tmpFallback;
if (null !== $this->customerFallback && !empty($fallback)) {
return $this->customerFallback;
}
$tmpFallback = null;
if (!empty($fallback)) {
if (is_numeric($fallback)) {
$tmpFallback = $this->customers->find((int) $fallback);
} else {
/** @var Customer|null $tmpFallback */
$tmpFallback = $this->customers->findOneBy(['name' => $fallback]);
}
}
if (null === $tmpFallback) {
$newName = $customer;
if (empty($customer)) {
$newName = self::DEFAULT_CUSTOMER;
if (!empty($fallback) && \is_string($fallback)) {
$newName = $fallback;
}
}
$tmpFallback = new Customer();
$tmpFallback->setName(sprintf($newName, $this->dateTime));
$tmpFallback->setComment($this->comment);
$tmpFallback->setCountry($this->configuration->getCustomerDefaultCountry());
$timezone = date_default_timezone_get();
if (null !== $this->configuration->getCustomerDefaultTimezone()) {
$timezone = $this->configuration->getCustomerDefaultTimezone();
}
$tmpFallback->setTimezone($timezone);
$this->customers->saveCustomer($tmpFallback);
$this->createdCustomers++;
}
$this->customerFallback = $tmpFallback;
return $this->customerFallback;
}

View File

@@ -50,6 +50,7 @@ final class ProjectViewController extends AbstractController
'title' => 'report_project_view',
'tableName' => 'project_view_reporting',
'now' => $this->getDateTimeFactory()->createDateTime(),
'showDurations' => true,
]);
}
}

View File

@@ -72,7 +72,7 @@ class ProjectSubscriber extends AbstractActionsSubscriber
$event->addDelete($this->path('admin_project_delete', ['id' => $project->getId()]));
}
if ($project->isVisible() && $this->isGranted('view_reporting') && $this->isGranted('details_project')) {
if ($project->isVisible() && $this->isGranted('view_reporting') && $this->isGranted('details', $project)) {
$event->addAction('report_project_details', ['url' => $this->path('report_project_details', ['project' => $project->getId()]), 'icon' => 'reporting', 'translation_domain' => 'reporting']);
}
}

View File

@@ -43,10 +43,13 @@ abstract class AbstractSpreadsheetRenderer
public const DATETIME_FORMAT = 'yyyy-mm-dd hh:mm';
public const TIME_FORMAT = 'hh:mm';
public const DURATION_FORMAT = '[hh]:mm';
public const DURATION_DECIMAL = '#0.00';
public const RATE_FORMAT_DEFAULT = '#.##0,00 [$%1$s];-#.##0,00 [$%1$s]';
public const RATE_FORMAT_LEFT = '_("%1$s"* #,##0.00_);_("%1$s"* \(#,##0.00\);_("%1$s"* "-"??_);_(@_)';
public const RATE_FORMAT = self::RATE_FORMAT_LEFT;
protected $durationFormat = self::DURATION_FORMAT;
protected $durationBase = 86400;
/**
* @var LocaleFormatExtensions
*/
@@ -183,7 +186,7 @@ abstract class AbstractSpreadsheetRenderer
{
$sheet->setCellValueByColumnAndRow($column, $row, sprintf('=SUM(%s:%s)', $startCoordinate, $endCoordinate));
$style = $sheet->getStyleByColumnAndRow($column, $row);
$style->getNumberFormat()->setFormatCode(self::DURATION_FORMAT);
$style->getNumberFormat()->setFormatCode($this->durationFormat);
}
protected function setDuration(Worksheet $sheet, $column, $row, $duration)
@@ -191,8 +194,8 @@ abstract class AbstractSpreadsheetRenderer
if (null === $duration) {
$duration = 0;
}
$sheet->setCellValueByColumnAndRow($column, $row, sprintf('=%s/86400', $duration));
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(self::DURATION_FORMAT);
$sheet->setCellValueByColumnAndRow($column, $row, sprintf('=%s/%s', $duration, $this->durationBase));
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode($this->durationFormat);
}
protected function setRateTotal(Worksheet $sheet, $column, $row, $startCoordinate, $endCoordinate)
@@ -232,6 +235,11 @@ abstract class AbstractSpreadsheetRenderer
*/
protected function getColumns(array $exportItems, TimesheetQuery $query, array $columns): array
{
if (null !== $query->getCurrentUser() && $query->getCurrentUser()->isExportDecimal()) {
$this->durationFormat = self::DURATION_DECIMAL;
$this->durationBase = 3600;
}
$showRates = $this->isRenderRate($query);
if (isset($columns['date']) && !isset($columns['date']['render'])) {

View File

@@ -21,7 +21,7 @@ final class Version20210605154245 extends AbstractMigration
{
public function getDescription(): string
{
return 'Cleans up User table';
return 'Cleans up the user table';
}
public function up(Schema $schema): void

View File

@@ -15,7 +15,7 @@ use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
* @version 1.15
*/
final class Version20210704111542 extends AbstractMigration
{

View File

@@ -7,7 +7,7 @@
{% block main %}
{% set formEditTemplate = app.request.xmlHttpRequest ? 'default/_form_modal.html.twig' : 'default/_form.html.twig' %}
{% set formOptions = {
'title': (activity.id is null ? 'create'|trans : 'edit'|trans({}, 'actions')),
'title': (activity.id is null ? 'create-activity'|trans({}, 'actions') : 'edit'|trans({}, 'actions')),
'form': form,
'back': path('admin_activity')
} %}

View File

@@ -1,6 +1,12 @@
{% embed '@AdminLTE/Widgets/box-widget.html.twig' %}
{% import "macros/progressbar.html.twig" as progress %}
{% block box_title %}{{ 'label.timeBudget'|trans }}{% endblock %}
{% import "macros/widgets.html.twig" as widgets %}
{% block box_title %}
{{ 'label.timeBudget'|trans }}
{% if entity.timeBudget > 0 %}
{{ widgets.label(entity.timeBudget|duration, 'gray') }}
{% endif %}
{% endblock %}
{% block box_attributes %}id="time_budget_box"{% endblock %}
{% block box_body %}
{{ progress.progressbar(stats.recordDuration, stats.durationBillable, 'label.billable'|trans, stats.durationBillable|duration ~ ' / ' ~ stats.recordDuration|duration, true) }}
@@ -11,7 +17,13 @@
{% endembed %}
{% embed '@AdminLTE/Widgets/box-widget.html.twig' %}
{% import "macros/progressbar.html.twig" as progress %}
{% block box_title %}{{ 'label.budget'|trans }}{% endblock %}
{% import "macros/widgets.html.twig" as widgets %}
{% block box_title %}
{{ 'label.budget'|trans }}
{% if entity.budget > 0 %}
{{ widgets.label(entity.budget|money(currency), 'gray') }}
{% endif %}
{% endblock %}
{% block box_attributes %}id="budget_box"{% endblock %}
{% block box_body %}
{{ progress.progressbar(stats.recordRate, stats.rateBillable, 'label.billable'|trans, stats.rateBillable|money(currency) ~ ' / ' ~ stats.recordRate|money(currency), true) }}

View File

@@ -7,7 +7,7 @@
{% block main %}
{% set formEditTemplate = app.request.xmlHttpRequest ? 'default/_form_modal.html.twig' : 'default/_form.html.twig' %}
{% set formOptions = {
'title': (project.id is null ? 'create'|trans : 'edit'|trans({}, 'actions')),
'title': (project.id is null ? 'create-project'|trans({}, 'actions') : 'edit'|trans({}, 'actions')),
'form': form,
'back': path('admin_project')
} %}

View File

@@ -3,12 +3,19 @@
{% block report_title %}{{ (title|default('report_project_view'))|trans({}, 'reporting') }}{% endblock %}
{% set showDurations = showDurations is defined and showDurations is same as (true) %}
{% set columns = {
'name': {'class': 'alwaysVisible'},
'lastRecord': {'class': 'hidden text-center hw-min', 'title': 'label.last_record'|trans},
'today': {'class': 'hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationToday'|trans},
'week': {'class': 'hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationWeek'|trans},
'month': {'class': 'hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationMonth'|trans},
} %}
{% if showDurations %}
{% set columns = columns|merge({
'today': {'class': 'hidden hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationToday'|trans},
'week': {'class': 'hidden hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationWeek'|trans},
'month': {'class': 'hidden hidden-md hidden-sm hidden-xs text-center hw-min', 'title': 'stats.durationMonth'|trans},
}) %}
{% endif %}
{% set columns = columns|merge({
'durationTotal': {'class': 'text-center hw-min', 'title': 'stats.durationTotal'|trans},
'timeBudget': {'class': 'hidden-xs', 'title': 'label.timeBudget'|trans},
'budget': {'class': 'hidden-xs', 'title': 'label.budget'|trans},
@@ -18,7 +25,7 @@
'projectEnd': {'class': 'hidden-md hidden-sm hidden-xs hidden text-center w-min', 'title': 'label.project_end'|trans},
'comment': {'class': 'hidden-md hidden-sm hidden-xs hidden', 'title': 'label.comment'|trans},
'actions': {'class': 'actions alwaysVisible'},
} %}
}) %}
{% set tableName = tableName|default('project_view_reporting') %}
{% block main_before %}
@@ -70,9 +77,11 @@
–
{% endif %}
</td>
{% if showDurations %}
<td class="{{ tables.data_table_column_class(tableName, columns, 'today') }}">{{ entry.durationDay|duration }}</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'week') }}">{{ entry.durationWeek|duration }}</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'month') }}">{{ entry.durationMonth|duration }}</td>
{% endif %}
<td class="{{ tables.data_table_column_class(tableName, columns, 'durationTotal') }}">{{ entry.durationTotal|duration }}</td>
<td class="{{ tables.data_table_column_class(tableName, columns, 'timeBudget') }}">
{% if project.timeBudget > 0 %}

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="library_authors">
<source>library_authors</source>
<target>... مؤلفو مكتبات البرامج الحالية ،، لم يكون kimai قادراً على إكمالها بدونك 👍</target>
<target> مؤلفو مكتبات البرامج الحالية ،، لم يكون kimai قادراً على إكمالها بدونك 👍</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Tohle se může stát...</target>
<target>Tohle se může stát</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... takže jste zapomněli heslo? Nevadí, Kimai vám pomůže s vytvořením nového:</target>
<target> takže jste zapomněli heslo? Nevadí, Kimai vám pomůže s vytvořením nového:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Αυτό μπορεί να συμβεί ...</target>
<target>Αυτό μπορεί να συμβεί </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... επομένως ξεχάσατε τον δικό σας κωδικό πρόσβασης; Μην ανησυχείτε: Το λογισμικό Kimai θα σας βοηθήσει να δημιουργήσετε ένα νέο:</target>
<target> επομένως ξεχάσατε τον δικό σας κωδικό πρόσβασης; Μην ανησυχείτε: Το λογισμικό Kimai θα σας βοηθήσει να δημιουργήσετε ένα νέο:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>That can happen ...</target>
<target>That can happen </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... so you forgot your password? Don't worry: Kimai will help you to create a new one:</target>
<target> so you forgot your password? Don't worry: Kimai will help you to create a new one:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Tio povas okazi ...</target>
<target>Tio povas okazi </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... do, vi forgesis vian pasvorton, ĉu? Ne zorgu: Kimai helpos al vi krei la novan:</target>
<target> do, vi forgesis vian pasvorton, ĉu? Ne zorgu: Kimai helpos al vi krei la novan:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>آن می تواند اتفاق بیفتد ...</target>
<target>آن می تواند اتفاق بیفتد </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... خب شما پسورد خود را فراموش کرده اید؟ نگران نباشید : kimai به شما کمک خواهد کرد تا یکی جدید بسازید:</target>
<target> خب شما پسورد خود را فراموش کرده اید؟ نگران نباشید : kimai به شما کمک خواهد کرد تا یکی جدید بسازید:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target state="translated">Näin voi käydä ...</target>
<target state="translated">Näin voi käydä </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target state="translated">... eli unohdit salasanasi? Ei hätää: Kimai auttaa sinua tekemään uuden:</target>
<target state="translated"> eli unohdit salasanasi? Ei hätää: Kimai auttaa sinua tekemään uuden:</target>
</trans-unit>
</body>
</file>

View File

@@ -35,7 +35,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>זה עלול לקרות ...</target>
<target>זה עלול לקרות </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Ez megtörténhet...</target>
<target>Ez megtörténhet</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>그럴 수 있습니다...</target>
<target>그럴 수 있습니다</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... 암호를 잊어 버렸습니까? 걱정하지 마세요: Kimai가 새 계정을 만드는 데 도움을 줄 것입니다:</target>
<target> 암호를 잊어 버렸습니까? 걱정하지 마세요: Kimai가 새 계정을 만드는 데 도움을 줄 것입니다:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Dat kan gebeuren ...</target>
<target>Dat kan gebeuren </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... dus u bent uw wachtwoord vergeten? Maakt u zich geen zorgen: Kimai zal u helpen om een nieuwe te maken: </target>
<target> dus u bent uw wachtwoord vergeten? Maakt u zich geen zorgen: Kimai zal u helpen om een nieuwe te maken: </target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>To może się zdarzyć...</target>
<target>To może się zdarzyć</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... zapomniałeś hasła? Nie martw się, Kimai pomoże Ci stworzyć nowe:</target>
<target> zapomniałeś hasła? Nie martw się, Kimai pomoże Ci stworzyć nowe:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Isso pode acontecer ...</target>
<target>Isso pode acontecer </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... Então você esqueceu a sua senha? Não se preocupe: O Kimai vai ajudá-lo a criar uma nova:</target>
<target> Então você esqueceu a sua senha? Não se preocupe: O Kimai vai ajudá-lo a criar uma nova:</target>
</trans-unit>
</body>
</file>

View File

@@ -20,7 +20,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... então esqueceu sua senha? Não se preocupe: Kimai vai ajudá-lo a criar uma nova:</target>
<target> então esqueceu sua senha? Não se preocupe: Kimai vai ajudá-lo a criar uma nova:</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -28,7 +28,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Isso pode acontecer...</target>
<target>Isso pode acontecer</target>
</trans-unit>
<trans-unit id="reset.subject">
<source>reset.subject</source>

View File

@@ -35,7 +35,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Asta se poate întâmpla ...</target>
<target>Asta se poate întâmpla </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -43,7 +43,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... ți-ai uitat parola? Nu te îngrijora. Kimai te va ajuta să îți creezi o parolă nouă:</target>
<target> ți-ai uitat parola? Nu te îngrijora. Kimai te va ajuta să îți creezi o parolă nouă:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Это может произойти ...</target>
<target>Это может произойти </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... вы забыли пароль? Не беспокойтесь: Kimai поможет Вам создать новый:</target>
<target> вы забыли пароль? Не беспокойтесь: Kimai поможет Вам создать новый:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>To sa môže stať...</target>
<target>To sa môže stať</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>...zabudli ste Vaše heslo? Bez obáv: Kimai Vám pomôže vytvoriť nové:</target>
<target>zabudli ste Vaše heslo? Bez obáv: Kimai Vám pomôže vytvoriť nové:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target state="translated">Det kan hända ...</target>
<target state="translated">Det kan hända </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target state="translated">... så du glömde ditt lösenord? Oroa dig inte: Kimai hjälper dig att skapa ett nytt:</target>
<target state="translated"> så du glömde ditt lösenord? Oroa dig inte: Kimai hjälper dig att skapa ett nytt:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Bu olabilir ...</target>
<target>Bu olabilir </target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... parolanızı mı unuttunuz? Endişelenmeyin: Kimai, yeni bir tane oluşturmanıza yardımcı olacaktır:</target>
<target> parolanızı mı unuttunuz? Endişelenmeyin: Kimai, yeni bir tane oluşturmanıza yardımcı olacaktır:</target>
</trans-unit>
</body>
</file>

View File

@@ -32,7 +32,7 @@
</trans-unit>
<trans-unit id="reset.title">
<source>reset.title</source>
<target>Điều đó có thể xảy ra...</target>
<target>Điều đó có thể xảy ra</target>
</trans-unit>
<trans-unit id="reset.button">
<source>reset.button</source>
@@ -40,7 +40,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>... bạn quên mật khẩu? Đừng lo lắng: Kimai sẽ giúp bạn tạo một cái mới:</target>
<target> bạn quên mật khẩu? Đừng lo lắng: Kimai sẽ giúp bạn tạo một cái mới:</target>
</trans-unit>
</body>
</file>

View File

@@ -20,7 +20,7 @@
</trans-unit>
<trans-unit id="reset.intro">
<source>reset.intro</source>
<target>...您忘记了密码吗别担心Kimai将帮助您创建一个新的</target>
<target>您忘记了密码吗别担心Kimai将帮助您创建一个新的</target>
</trans-unit>
</body>
</file>

View File

@@ -684,7 +684,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>اكتب رسالتك...</target>
<target>اكتب رسالتك</target>
</trans-unit>
<trans-unit id="label.teamlead">
<source>label.teamlead</source>

View File

@@ -1088,7 +1088,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Napište vaši zprávu...</target>
<target>Napište vaši zprávu</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>

View File

@@ -367,7 +367,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Πληκτρολογήσετε το μήνυμα σας...</target>
<target>Πληκτρολογήσετε το μήνυμα σας</target>
</trans-unit>
<trans-unit id="label.billable">
<source>label.billable</source>
@@ -1045,7 +1045,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>Παράλειψη προ-επισκόπησης %rows% και περισσότερων γραμμών ...</target>
<target>Παράλειψη προ-επισκόπησης %rows% και περισσότερων γραμμών </target>
</trans-unit>
<!--
Export

View File

@@ -147,19 +147,19 @@
<source>login_required</source>
<target>Missing permission. Redirect to login?</target>
</trans-unit>
<trans-unit id="registration.check_email">
<source>registration.check_email</source>
<target>An email has been sent to %email%. It contains an activation link you must click to activate your account.</target>
</trans-unit>
<trans-unit id="resetting.check_email">
<source>resetting.check_email</source>
<target>
An email has been sent. It contains a link you must click to reset your password.
Note: You can only request a new password once within %tokenLifetime% hours.
<trans-unit id="registration.check_email">
<source>registration.check_email</source>
<target>An email has been sent to %email%. It contains an activation link you must click to activate your account.</target>
</trans-unit>
<trans-unit id="resetting.check_email">
<source>resetting.check_email</source>
<target>
An email has been sent. It contains a link you must click to reset your password.
Note: You can only request a new password once within %tokenLifetime% hours.
If you don't get an email check your spam folder or try again.
</target>
</trans-unit>
If you don't get an email check your spam folder or try again.
</target>
</trans-unit>
<!--
Menu / Navbar items
-->
@@ -387,7 +387,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Type your message...</target>
<target>Type your message</target>
</trans-unit>
<trans-unit id="label.billable">
<source>label.billable</source>
@@ -1100,7 +1100,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>Skipped preview of %rows% more rows ...</target>
<target>Skipped preview of %rows% more rows </target>
</trans-unit>
<!--
Export

View File

@@ -1078,7 +1078,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Idatzi zure mezua...</target>
<target>Idatzi zure mezua</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>

View File

@@ -213,7 +213,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>پیام خود را تایپ کنید ...</target>
<target>پیام خود را تایپ کنید </target>
</trans-unit>
<trans-unit id="label.create_more">
<source>label.create_more</source>

View File

@@ -334,7 +334,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target state="translated">Kirjoita viesti...</target>
<target state="translated">Kirjoita viesti</target>
</trans-unit>
<trans-unit id="label.billable">
<source>label.billable</source>

View File

@@ -745,7 +745,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Skriva tíni boð...</target>
<target>Skriva tíni boð</target>
</trans-unit>
<trans-unit id="label.billable">
<source>label.billable</source>
@@ -917,7 +917,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>Leyp undansýning av %rows% fleiri rekkjum um ...</target>
<target>Leyp undansýning av %rows% fleiri rekkjum um </target>
</trans-unit>
<trans-unit id="recent.activities.format">
<source>recent.activities.format</source>

View File

@@ -936,7 +936,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Üzenet írása...</target>
<target>Üzenet írása</target>
</trans-unit>
<trans-unit id="label.teamlead">
<source>label.teamlead</source>

View File

@@ -1004,7 +1004,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>메시지 입력...</target>
<target>메시지 입력</target>
</trans-unit>
<trans-unit id="label.teamlead">
<source>label.teamlead</source>
@@ -1152,7 +1152,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>%rows% 더 많은 행의 미리 보기를 건너뛰었습니다...</target>
<target>%rows% 더 많은 행의 미리 보기를 건너뛰었습니다</target>
</trans-unit>
<trans-unit id="invoice.payment_date">
<source>invoice.payment_date</source>

View File

@@ -996,7 +996,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Typ uw bericht...</target>
<target>Typ uw bericht</target>
</trans-unit>
<trans-unit id="label.project_start">
<source>label.project_start</source>
@@ -1128,7 +1128,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>Voorbeeld van nog %rows% rijen overgeslagen ...</target>
<target>Voorbeeld van nog %rows% rijen overgeslagen </target>
</trans-unit>
<trans-unit id="label.not_invoiced">
<source>label.not_invoiced</source>

View File

@@ -1108,7 +1108,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Wpisz swoją wiadomość...</target>
<target>Wpisz swoją wiadomość</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>

View File

@@ -1018,7 +1018,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Escreva a sua mensagem...</target>
<target>Escreva a sua mensagem</target>
</trans-unit>
<trans-unit id="label.teamlead">
<source>label.teamlead</source>

View File

@@ -1096,7 +1096,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Digite sua mensagem...</target>
<target>Digite sua mensagem</target>
</trans-unit>
<trans-unit id="label.team">
<source>label.team</source>

View File

@@ -1033,7 +1033,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Scrie mesajul tău...</target>
<target>Scrie mesajul tău</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>
@@ -1073,7 +1073,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>A sărit previzualizarea peste %rows% rânduri ...</target>
<target>A sărit previzualizarea peste %rows% rânduri </target>
</trans-unit>
<trans-unit id="invoice.payment_date">
<source>invoice.payment_date</source>

View File

@@ -1063,7 +1063,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Ввести сообщение...</target>
<target>Ввести сообщение</target>
</trans-unit>
<trans-unit id="label.teamlead">
<source>label.teamlead</source>

View File

@@ -1112,7 +1112,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Napíšte vašu správu...</target>
<target>Napíšte vašu správu</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>

View File

@@ -979,7 +979,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Skriv ditt meddelande...</target>
<target>Skriv ditt meddelande</target>
</trans-unit>
<trans-unit id="modal.dirty">
<source>modal.dirty</source>

View File

@@ -1051,7 +1051,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>Mesajınızı yazın...</target>
<target>Mesajınızı yazın</target>
</trans-unit>
<trans-unit id="label.recalculate_rates">
<source>label.recalculate_rates</source>
@@ -1167,7 +1167,7 @@
</trans-unit>
<trans-unit id="preview.skipped_rows">
<source>preview.skipped_rows</source>
<target>%rows% satırın ön izlemesi atlandı ...</target>
<target>%rows% satırın ön izlemesi atlandı </target>
</trans-unit>
<trans-unit id="invoice.payment_date">
<source>invoice.payment_date</source>

View File

@@ -943,7 +943,7 @@
</trans-unit>
<trans-unit id="label.invoice_bank_account">
<source>label.invoice_bank_account</source>
<target>Ngày đặt hàng...</target>
<target>Ngày đặt hàng</target>
</trans-unit>
<trans-unit id="label.decimalDuration">
<source>label.decimalDuration</source>

View File

@@ -1015,7 +1015,7 @@
</trans-unit>
<trans-unit id="placeholder.type_message">
<source>placeholder.type_message</source>
<target>输入您的消息...</target>
<target>输入您的消息</target>
</trans-unit>
<trans-unit id="label.theme.layout">
<source>label.theme.layout</source>