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 日历