diff --git a/src/Configuration/SystemConfiguration.php b/src/Configuration/SystemConfiguration.php
index 7a4459b0..32f1dc54 100644
--- a/src/Configuration/SystemConfiguration.php
+++ b/src/Configuration/SystemConfiguration.php
@@ -352,6 +352,11 @@ class SystemConfiguration implements SystemBundleConfiguration
return $this->getIncrement('timesheet.time_increment', $this->getTimesheetDefaultRoundingEnd(), 0);
}
+ public function getQuickEntriesRecentAmount(): int
+ {
+ return $this->getIncrement('quick_entry.recent_activities', 5, 0) ?? 5;
+ }
+
// ========== Company configurations ==========
public function getFinancialYearStart(): ?string
diff --git a/src/Controller/QuickEntryController.php b/src/Controller/QuickEntryController.php
index 9bfffec2..86b740df 100644
--- a/src/Controller/QuickEntryController.php
+++ b/src/Controller/QuickEntryController.php
@@ -106,7 +106,8 @@ class QuickEntryController extends AbstractController
ksort($rows);
// attach recent activities
- $timesheets = $this->repository->getRecentActivities($this->getUser(), null, 5);
+ $amount = $this->configuration->getQuickEntriesRecentAmount();
+ $timesheets = $this->repository->getRecentActivities($this->getUser(), null, $amount);
foreach ($timesheets as $timesheet) {
$id = $timesheet->getProject()->getId() . '_' . $timesheet->getActivity()->getId();
if (\array_key_exists($id, $rows)) {
diff --git a/src/Controller/SystemConfigurationController.php b/src/Controller/SystemConfigurationController.php
index 386ae604..af015f4a 100644
--- a/src/Controller/SystemConfigurationController.php
+++ b/src/Controller/SystemConfigurationController.php
@@ -266,8 +266,7 @@ final class SystemConfigurationController extends AbstractController
}
}
- $authentication = (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_AUTHENTICATION)
+ $authentication = (new SystemConfigurationModel('authentication'))
->setConfiguration([
(new Configuration())
->setName('user.login')
@@ -319,9 +318,8 @@ final class SystemConfigurationController extends AbstractController
$authentication->getConfigurationByName('user.password_reset_token_ttl')->setEnabled(false);
}
- $configurationModels = [
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_TIMESHEET)
+ return [
+ (new SystemConfigurationModel('timesheet'))
->setConfiguration([
(new Configuration())
->setName('timesheet.mode')
@@ -387,8 +385,20 @@ final class SystemConfigurationController extends AbstractController
->setType(YesNoType::class)
->setOptions(['help' => 'default_value_new', 'label' => 'label.billable']),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_LOCKDOWN)
+ (new SystemConfigurationModel('quick_entry'))
+ ->setTranslation('quick_entry.title')
+ ->setTranslationDomain('messages')
+ ->setConfiguration([
+ (new Configuration())
+ ->setName('quick_entry.recent_activities')
+ ->setType(IntegerType::class)
+ ->setTranslationDomain('system-configuration')
+ ->setRequired(false)
+ ->setConstraints([
+ new Range(['min' => 0, 'max' => 20]),
+ ]),
+ ]),
+ (new SystemConfigurationModel('lockdown_period'))
->setConfiguration([
(new Configuration())
->setName('timesheet.rules.lockdown_period_start')
@@ -417,8 +427,7 @@ final class SystemConfigurationController extends AbstractController
->setConstraints([new DateTimeFormat()])
->setTranslationDomain('system-configuration'),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_ROUNDING)
+ (new SystemConfigurationModel('rounding'))
->setConfiguration([
(new Configuration())
->setName('timesheet.rounding.default.mode')
@@ -450,8 +459,9 @@ final class SystemConfigurationController extends AbstractController
->setType(WeekDaysType::class)
->setTranslationDomain('system-configuration'),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_FORM_INVOICE)
+ (new SystemConfigurationModel('invoice'))
+ ->setTranslation('invoices')
+ ->setTranslationDomain('messages')
->setConfiguration([
// TODO that should be a custom type with validation
(new Configuration())
@@ -468,8 +478,7 @@ final class SystemConfigurationController extends AbstractController
->setTranslationDomain('system-configuration'),
]),
$authentication,
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_FORM_CUSTOMER)
+ (new SystemConfigurationModel('customer'))
->setConfiguration([
(new Configuration())
->setName('defaults.customer.timezone')
@@ -488,8 +497,7 @@ final class SystemConfigurationController extends AbstractController
->setType(CurrencyType::class)
->setOptions(['help' => 'default_value_new']),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_FORM_USER)
+ (new SystemConfigurationModel('user'))
->setConfiguration([
(new Configuration())
->setName('defaults.user.timezone')
@@ -518,8 +526,7 @@ final class SystemConfigurationController extends AbstractController
->setType(CheckboxType::class)
->setTranslationDomain('system-configuration'),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_THEME)
+ (new SystemConfigurationModel('theme'))
->setConfiguration([
(new Configuration())
->setName('theme.autocomplete_chars')
@@ -557,8 +564,9 @@ final class SystemConfigurationController extends AbstractController
->setType(CheckboxType::class)
->setTranslationDomain('system-configuration'),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_CALENDAR)
+ (new SystemConfigurationModel('calendar'))
+ ->setTranslation('calendar')
+ ->setTranslationDomain('messages')
->setConfiguration([
(new Configuration())
->setName('calendar.week_numbers')
@@ -599,8 +607,7 @@ final class SystemConfigurationController extends AbstractController
->setType(IntegerType::class)
->setConstraints([new Range(['min' => 0, 'max' => 20]), new NotNull()]),
]),
- (new SystemConfigurationModel())
- ->setSection(SystemConfigurationModel::SECTION_BRANDING)
+ (new SystemConfigurationModel('branding'))
->setConfiguration([
(new Configuration())
->setName('theme.branding.logo')
@@ -632,7 +639,5 @@ final class SystemConfigurationController extends AbstractController
->setOptions(['input' => 'string']),
]),
];
-
- return $configurationModels;
}
}
diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php
index f1cd9d2a..a0353fbe 100644
--- a/src/DependencyInjection/Configuration.php
+++ b/src/DependencyInjection/Configuration.php
@@ -30,7 +30,7 @@ class Configuration implements ConfigurationInterface
/**
* {@inheritdoc}
*/
- public function getConfigTreeBuilder()
+ public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('kimai');
/** @var ArrayNodeDefinition $node */
@@ -69,13 +69,32 @@ class Configuration implements ConfigurationInterface
->append($this->getPermissionsNode())
->append($this->getLdapNode())
->append($this->getSamlNode())
+ ->append($this->getQuickEntryNode())
->end()
->end();
return $treeBuilder;
}
- protected function getTimesheetNode()
+ private function getQuickEntryNode()
+ {
+ $builder = new TreeBuilder('quick_entry');
+ /** @var ArrayNodeDefinition $node */
+ $node = $builder->getRootNode();
+
+ $node
+ ->addDefaultsIfNotSet()
+ ->children()
+ ->integerNode('recent_activities')
+ ->defaultValue(5)
+ ->end()
+ ->end()
+ ;
+
+ return $node;
+ }
+
+ private function getTimesheetNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('timesheet');
/** @var ArrayNodeDefinition $node */
@@ -259,7 +278,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getInvoiceNode()
+ private function getInvoiceNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('invoice');
/** @var ArrayNodeDefinition $node */
@@ -292,7 +311,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getExportNode()
+ private function getExportNode()
{
$builder = new TreeBuilder('export');
/** @var ArrayNodeDefinition $node */
@@ -319,7 +338,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getLanguagesNode()
+ private function getLanguagesNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('languages');
/** @var ArrayNodeDefinition $node */
@@ -349,7 +368,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getCalendarNode()
+ private function getCalendarNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('calendar');
/** @var ArrayNodeDefinition $node */
@@ -416,7 +435,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getThemeNode()
+ private function getThemeNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('theme');
/** @var ArrayNodeDefinition $node */
@@ -506,7 +525,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getIndustryNode()
+ private function getIndustryNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('industry');
/** @var ArrayNodeDefinition $node */
@@ -522,7 +541,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getCompanyNode()
+ private function getCompanyNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('company');
/** @var ArrayNodeDefinition $node */
@@ -538,7 +557,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getUserNode()
+ private function getUserNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('user');
/** @var ArrayNodeDefinition $node */
@@ -568,7 +587,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getWidgetsNode()
+ private function getWidgetsNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('widgets');
/** @var ArrayNodeDefinition $node */
@@ -595,7 +614,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getDashboardNode()
+ private function getDashboardNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('dashboard');
/** @var ArrayNodeDefinition $node */
@@ -624,7 +643,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getDefaultsNode()
+ private function getDefaultsNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('defaults');
/** @var ArrayNodeDefinition $node */
@@ -662,7 +681,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getPermissionsNode()
+ private function getPermissionsNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('permissions');
/** @var ArrayNodeDefinition $node */
@@ -712,7 +731,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getLdapNode()
+ private function getLdapNode(): ArrayNodeDefinition
{
$treeBuilder = new TreeBuilder('ldap');
$node = $treeBuilder->getRootNode();
@@ -835,7 +854,7 @@ class Configuration implements ConfigurationInterface
return $node;
}
- protected function getSamlNode()
+ private function getSamlNode(): ArrayNodeDefinition
{
$builder = new TreeBuilder('saml');
/** @var ArrayNodeDefinition $node */
diff --git a/src/EventSubscriber/MenuSubscriber.php b/src/EventSubscriber/MenuSubscriber.php
index 25faa073..99655769 100644
--- a/src/EventSubscriber/MenuSubscriber.php
+++ b/src/EventSubscriber/MenuSubscriber.php
@@ -65,12 +65,12 @@ final class MenuSubscriber implements EventSubscriberInterface
}
$menu->addItem(
- new MenuItemModel('calendar', 'calendar.title', 'calendar', [], $icons->icon('calendar'))
+ new MenuItemModel('calendar', 'calendar', 'calendar', [], $icons->icon('calendar'))
);
}
if ($auth->isGranted('view_invoice')) {
- $invoice = new MenuItemModel('invoice', 'menu.invoice', 'invoice', [], $icons->icon('invoice'));
+ $invoice = new MenuItemModel('invoice', 'invoices', 'invoice', [], $icons->icon('invoice'));
$invoice->setChildRoutes(['admin_invoice_template', 'admin_invoice_template_edit', 'admin_invoice_template_create', 'admin_invoice_template_copy', 'admin_invoice_list', 'admin_invoice_document_upload']);
$menu->addItem($invoice);
}
diff --git a/src/Form/Model/SystemConfiguration.php b/src/Form/Model/SystemConfiguration.php
index 77428062..4d98b574 100644
--- a/src/Form/Model/SystemConfiguration.php
+++ b/src/Form/Model/SystemConfiguration.php
@@ -9,33 +9,61 @@
namespace App\Form\Model;
-class SystemConfiguration
+final class SystemConfiguration
{
+ /** @deprecated since 1.16.10 */
public const SECTION_ROUNDING = 'rounding';
+ /** @deprecated since 1.16.10 */
public const SECTION_LOCKDOWN = 'lockdown_period';
+ /** @deprecated since 1.16.10 */
public const SECTION_TIMESHEET = 'timesheet';
+ /** @deprecated since 1.16.10 */
public const SECTION_FORM_INVOICE = 'invoice';
+ /** @deprecated since 1.16.10 */
public const SECTION_FORM_CUSTOMER = 'customer';
+ /** @deprecated since 1.16.10 */
public const SECTION_FORM_USER = 'user';
+ /** @deprecated since 1.16.10 */
public const SECTION_THEME = 'theme';
+ /** @deprecated since 1.16.10 */
public const SECTION_AUTHENTICATION = 'authentication';
+ /** @deprecated since 1.16.10 */
public const SECTION_CALENDAR = 'calendar';
+ /** @deprecated since 1.16.10 */
public const SECTION_BRANDING = 'branding';
/**
* @var string|null
*/
private $section;
+ /**
+ * @var string|null
+ */
+ private $translation;
+ /**
+ * @var string|null
+ */
+ private $translationDomain = 'system-configuration';
/**
* @var Configuration[]
*/
private $configuration = [];
+ public function __construct(?string $section = null)
+ {
+ $this->section = $section;
+ }
+
public function getSection(): ?string
{
return $this->section;
}
+ /**
+ * @deprecated since 1.16.10
+ * @param string|null $section
+ * @return $this
+ */
public function setSection(?string $section): SystemConfiguration
{
$this->section = $section;
@@ -43,6 +71,30 @@ class SystemConfiguration
return $this;
}
+ public function setTranslation(string $translation): SystemConfiguration
+ {
+ $this->translation = $translation;
+
+ return $this;
+ }
+
+ public function getTranslation(): string
+ {
+ return $this->translation ?? $this->section;
+ }
+
+ public function setTranslationDomain(string $domain): SystemConfiguration
+ {
+ $this->translationDomain = $domain;
+
+ return $this;
+ }
+
+ public function getTranslationDomain(): string
+ {
+ return $this->translationDomain;
+ }
+
/**
* @return Configuration[]
*/
diff --git a/src/Form/Type/InitialViewType.php b/src/Form/Type/InitialViewType.php
index be059044..a84cf9ce 100644
--- a/src/Form/Type/InitialViewType.php
+++ b/src/Form/Type/InitialViewType.php
@@ -28,11 +28,11 @@ class InitialViewType extends AbstractType
private const ALLOWED_VIEWS = [
'dashboard' => 'menu.homepage',
'timesheet' => 'menu.timesheet',
- 'calendar' => 'calendar.title',
+ 'calendar' => 'calendar',
'quick_entry' => 'quick_entry.title',
'my_profile' => 'profile.title',
'admin_timesheet' => 'menu.admin_timesheet',
- 'invoice' => 'menu.invoice',
+ 'invoice' => 'invoices',
'admin_user' => 'users',
'admin_customer' => 'customers',
'admin_project' => 'projects',
diff --git a/templates/calendar/user.html.twig b/templates/calendar/user.html.twig
index 19312f58..9543226c 100644
--- a/templates/calendar/user.html.twig
+++ b/templates/calendar/user.html.twig
@@ -2,7 +2,7 @@
{% import "macros/widgets.html.twig" as widgets %}
{% import "macros/widgets.html.twig" as widgets %}
-{% block page_title %}{{ 'calendar.title'|trans }}{% endblock %}
+{% block page_title %}{{ 'calendar'|trans }}{% endblock %}
{% block page_actions %}
{% set event = actions(app.user, 'calendar', 'index') %}
{{ widgets.page_actions(event.actions) }}
diff --git a/templates/invoice/index.html.twig b/templates/invoice/index.html.twig
index 2e268235..a69b48fd 100644
--- a/templates/invoice/index.html.twig
+++ b/templates/invoice/index.html.twig
@@ -17,7 +17,7 @@
{% set tableName = 'invoice' %}
-{% block page_title %}{{ 'invoice.title'|trans }}{% endblock %}
+{% block page_title %}{{ 'invoices'|trans }}{% endblock %}
{% block page_actions %}{{ actions.invoices('index') }}{% endblock %}
{% block main_before %}
@@ -81,7 +81,7 @@
{% import "macros/widgets.html.twig" as widgets %}
{% import '@AdminLTE/Macros/buttons.html.twig' as button %}
{% block box_title %}
- {{ 'button.preview'|trans }}: {{ 'invoice.title'|trans }}
+ {{ 'button.preview'|trans }}: {{ 'invoices'|trans }}
{% endblock %}
{% block box_body_class %}no-padding{% endblock %}
{% block box_footer %}
diff --git a/templates/invoice/listing.html.twig b/templates/invoice/listing.html.twig
index b6583eda..9c267299 100644
--- a/templates/invoice/listing.html.twig
+++ b/templates/invoice/listing.html.twig
@@ -21,7 +21,7 @@
{% set tableName = 'invoices' %}
-{% block page_title %}{{ 'invoice.title'|trans }}{% endblock %}
+{% block page_title %}{{ 'invoices'|trans }}{% endblock %}
{% block page_actions %}{{ actions.invoice_listing('index', query) }}{% endblock %}
{% block page_search %}{{ search.searchModal(toolbarForm) }}{% endblock %}
diff --git a/templates/invoice/payment_date_edit.html.twig b/templates/invoice/payment_date_edit.html.twig
index 1408dac3..4d3ecbb3 100644
--- a/templates/invoice/payment_date_edit.html.twig
+++ b/templates/invoice/payment_date_edit.html.twig
@@ -1,6 +1,6 @@
{% extends app.request.xmlHttpRequest ? 'form.html.twig' : 'base.html.twig' %}
-{% block page_title %}{{ 'invoice.title'|trans }}{% endblock %}
+{% block page_title %}{{ 'invoices'|trans }}{% endblock %}
{% block main %}
{% set formEditTemplate = app.request.xmlHttpRequest ? 'default/_form_modal.html.twig' : 'default/_form.html.twig' %}
diff --git a/templates/system-configuration/index.html.twig b/templates/system-configuration/index.html.twig
index a5446537..321f914b 100644
--- a/templates/system-configuration/index.html.twig
+++ b/templates/system-configuration/index.html.twig
@@ -1,7 +1,7 @@
{% extends app.request.xmlHttpRequest ? 'form.html.twig' : 'base.html.twig' %}
{% import "system-configuration/actions.html.twig" as actions %}
-{% block page_title %}{{ 'title'|trans({}, 'system-configuration') }}{% endblock %}
+{% block page_title %}{{ 'menu.system_configuration'|trans }}{% endblock %}
{% block page_actions %}{{ actions.system_configuration('index') }}{% endblock %}
{% block main %}
@@ -9,8 +9,8 @@
{% set formEditTemplate = app.request.xmlHttpRequest ? 'default/_form_modal.html.twig' : 'default/_form.html.twig' %}
{% for section in sections %}
- {% set title = section.model.section|trans({}, 'system-configuration') %}
- {% if title == section.model.section %}
+ {% set title = section.model.translation|trans({}, section.model.translationDomain) %}
+ {% if title == section.model.translation %}
{% set title = ('label.' ~ section.model.section)|trans %}
{% endif %}
{{ include(formEditTemplate, {
diff --git a/tests/Controller/SystemConfigurationControllerTest.php b/tests/Controller/SystemConfigurationControllerTest.php
index 48123f59..1fec2b8b 100644
--- a/tests/Controller/SystemConfigurationControllerTest.php
+++ b/tests/Controller/SystemConfigurationControllerTest.php
@@ -70,6 +70,7 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
{
return [
['form[name=system_configuration_form_timesheet]', $this->createUrl('/admin/system-config/update/timesheet')],
+ ['form[name=system_configuration_form_quick_entry]', $this->createUrl('/admin/system-config/update/quick_entry')],
['form[name=system_configuration_form_lockdown_period]', $this->createUrl('/admin/system-config/update/lockdown_period')],
['form[name=system_configuration_form_invoice]', $this->createUrl('/admin/system-config/update/invoice')],
['form[name=system_configuration_form_authentication]', $this->createUrl('/admin/system-config/update/authentication')],
diff --git a/tests/DependencyInjection/ConfigurationTest.php b/tests/DependencyInjection/ConfigurationTest.php
index b08fda44..1adb4798 100644
--- a/tests/DependencyInjection/ConfigurationTest.php
+++ b/tests/DependencyInjection/ConfigurationTest.php
@@ -459,7 +459,10 @@ class ConfigurationTest extends TestCase
],
'company' => [
'financial_year' => null,
- ]
+ ],
+ 'quick_entry' => [
+ 'recent_activities' => 5
+ ],
];
$this->assertConfig($this->getMinConfig(), $fullDefaultConfig);
diff --git a/translations/messages.ar.xlf b/translations/messages.ar.xlf
index 313fe421..27dc6183 100644
--- a/translations/messages.ar.xlf
+++ b/translations/messages.ar.xlf
@@ -79,10 +79,6 @@
menu.timesheet
أوقاتي
-
- menu.invoice
- الفواتير
-
menu.admin_timesheet
الجداول الزمنية
@@ -514,8 +510,8 @@
admin_invoice_template.title
قالب الفاتورة
-
- invoice.title
+
+ invoices
الفواتير
diff --git a/translations/messages.cs.xlf b/translations/messages.cs.xlf
index 0437062f..dfbc46d4 100644
--- a/translations/messages.cs.xlf
+++ b/translations/messages.cs.xlf
@@ -102,10 +102,6 @@
menu.timesheet
Moje časy
-
- menu.invoice
- Faktury
-
menu.export
Export
@@ -435,8 +431,8 @@
-
- calendar.title
+
+ calendar
Kalendář
-
- calendar.title
+
+ calendar
Kalender
-
- calendar.title
+
+ calendar
Kalender
@@ -920,8 +916,8 @@
admin_invoice_template.title
Rechnungsvorlagen
-
- invoice.title
+
+ invoices
Rechnungen
diff --git a/translations/messages.de_CH.xlf b/translations/messages.de_CH.xlf
index 64650731..14ea180a 100644
--- a/translations/messages.de_CH.xlf
+++ b/translations/messages.de_CH.xlf
@@ -285,8 +285,8 @@
invoice.filter
Rechnungsdaten filtern
-
- invoice.title
+
+ invoices
Rechnungen
@@ -517,8 +517,8 @@
label.project_start
Projekt Start
-
- calendar.title
+
+ calendar
Kalender
@@ -905,10 +905,6 @@
menu.export
Export
-
- menu.invoice
- Rechnungen
-
menu.timesheet
Meine Zeiten
diff --git a/translations/messages.el.xlf b/translations/messages.el.xlf
index 5f8bad24..8a2f2305 100644
--- a/translations/messages.el.xlf
+++ b/translations/messages.el.xlf
@@ -167,10 +167,6 @@
menu.timesheet
Οι ώρες μου
-
- menu.invoice
- Τιμολόγια
-
menu.export
Εξαγωγή
@@ -588,8 +584,8 @@
-
- calendar.title
+
+ calendar
Ημερολόγιο
@@ -852,8 +848,8 @@
admin_invoice_template.title
Πρότυπο τιμολογίου
-
- invoice.title
+
+ invoices
Τιμολόγια
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index 0b608a29..3e6c9b12 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -183,10 +183,6 @@
menu.timesheet
My times
-
- menu.invoice
- Invoices
-
menu.export
Export
@@ -620,8 +616,8 @@
-
- calendar.title
+
+ calendar
Calendar
@@ -920,8 +916,8 @@
admin_invoice_template.title
Invoice template
-
- invoice.title
+
+ invoices
Invoices
diff --git a/translations/messages.eo.xlf b/translations/messages.eo.xlf
index 96988b30..9670c081 100644
--- a/translations/messages.eo.xlf
+++ b/translations/messages.eo.xlf
@@ -134,10 +134,6 @@
menu.timesheet
Miaj tempoj
-
- menu.invoice
- Fakturoj
-
menu.export
Eksporto
@@ -511,8 +507,8 @@
-
- calendar.title
+
+ calendar
Kalendaro
-
- calendar.title
+
+ calendar
Calendario
-
- calendar.title
+
+ calendar
Egutegia
-
- calendar.title
+
+ calendar
Kalenteri
-
- calendar.title
+
+ calendar
Calendrier
-
- calendar.title
+
+ calendar
Kalendar
@@ -893,8 +889,8 @@
admin_invoice_template.title
Predložak računa
-
- invoice.title
+
+ invoices
Računi
diff --git a/translations/messages.hu.xlf b/translations/messages.hu.xlf
index 21589c22..c4f56983 100644
--- a/translations/messages.hu.xlf
+++ b/translations/messages.hu.xlf
@@ -102,10 +102,6 @@
menu.timesheet
Rögzített órák
-
- menu.invoice
- Számlák
-
menu.export
Exportálás
@@ -415,8 +411,8 @@
-
- calendar.title
+
+ calendar
Naptár
-
- calendar.title
+
+ calendar
Calendario
-
-
label.project_start
Inizio progetto
@@ -565,9 +555,6 @@
label.project_end
Fine progetto
-
label.number
Account
@@ -620,9 +607,6 @@
label.currency
Valuta
-
label.alias
Nome
@@ -655,9 +639,6 @@
Allowed character: A-Z and _
Caratteri permessi: A-Z and _
-
label.version
Versione
@@ -666,9 +647,6 @@
label.required_version
Compatibile con
-
ROLE_SUPER_ADMIN
Amministratore di sistema
@@ -685,9 +663,6 @@
ROLE_USER
Utente
-
stats.workingTimeToday
Oggi, %day%
@@ -796,15 +771,12 @@
stats.percentUsedLeft
%percent%% utilizzata (%left% ancora disponibili)
-
admin_invoice_template.title
Template Fatture
-
- invoice.title
+
+ invoices
Fatture
diff --git a/translations/messages.ja.xlf b/translations/messages.ja.xlf
index f7b0dbfc..155a81e7 100644
--- a/translations/messages.ja.xlf
+++ b/translations/messages.ja.xlf
@@ -102,10 +102,6 @@
menu.timesheet
タイムシート
-
- menu.invoice
- 請求書
-
menu.export
エクスポート
@@ -415,8 +411,8 @@
-
- calendar.title
+
+ calendar
カレンダー
-
- calendar.title
+
+ calendar
달력
-
- calendar.title
+
+ calendar
Kalender
@@ -532,10 +532,6 @@
registration.check_email
En e-post har blitt sendt til %email%. Den inneholder en invitasjonslenke du må klikke for å aktivere kontoen din.
-
- menu.invoice
- Fakturaer
-
menu.export
Eksporter
@@ -1116,8 +1112,8 @@
error.too_many_entries
Forespørselen kunne ikke behandles. For mange resultater.
-
- invoice.title
+
+ invoices
Fakturaer
diff --git a/translations/messages.nl.xlf b/translations/messages.nl.xlf
index 00a0d192..a335badd 100644
--- a/translations/messages.nl.xlf
+++ b/translations/messages.nl.xlf
@@ -111,10 +111,6 @@
menu.timesheet
Mijn tijden
-
- menu.invoice
- Facturen
-
menu.export
Exporteren
@@ -464,8 +460,8 @@
-
- calendar.title
+
+ calendar
Agenda
-
- calendar.title
+
+ calendar
Kalendarz
-
- calendar.title
+
+ calendar
Calendário
-
- calendar.title
+
+ calendar
Calendário
-
- calendar.title
+
+ calendar
Kalendár
-
- calendar.title
+
+ calendar
Kalender
-
- calendar.title
+
+ calendar
Takvim
-
- calendar.title
+
+ calendar
Lịch
-
- calendar.title
+
+ calendar
日历