From 04d28c1b3fcff64c435827259c8b42ef9a60b4b2 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 14 Nov 2020 22:05:23 +0100 Subject: [PATCH] Editing of title, description and owners of a category system --- .../categorization/DomainManager.java | 35 + .../CategorySystemDetailsModel.java | 90 ++- .../categories/CategorySystemOwnerOption.java | 69 ++ .../categories/CategorySystemsController.java | 100 ++- .../categories/categorysystem-details.xhtml | 662 +++++++++++++++--- .../org/libreccm/ui/AdminBundle.properties | 43 ++ .../org/libreccm/ui/AdminBundle_de.properties | 43 ++ 7 files changed, 912 insertions(+), 130 deletions(-) create mode 100644 ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemOwnerOption.java diff --git a/ccm-core/src/main/java/org/libreccm/categorization/DomainManager.java b/ccm-core/src/main/java/org/libreccm/categorization/DomainManager.java index f34e48779..fe44dd540 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainManager.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainManager.java @@ -119,6 +119,41 @@ public class DomainManager implements Serializable { domainRepo.save(domain); } + /** + * Adds a {@code CcmApplication} to the owners of a {@link Domain}.If the + provided {@code CcmApplication} is already an owner of the provided + {@code Domain} the method does nothing. + * + * @param application The {@code CcmApplication} to add to the owners of the + * {@code Domain}. + * @param domain The {@code Domain} to which owners the + * {@code CcmApplication is added}. + * @param context Context for the mapping + */ + @AuthorizationRequired + @RequiresPrivilege(CategorizationConstants.PRIVILEGE_MANAGE_DOMAINS) + @Transactional(Transactional.TxType.REQUIRED) + public void addDomainOwner( + final CcmApplication application, + final Domain domain, + final String context + ) { + final DomainOwnership ownership = new DomainOwnership(); + ownership.setUuid(UUID.randomUUID().toString()); + ownership.setDomain(domain); + ownership.setOwner(application); + ownership.setContext(context); + ownership.setOwnerOrder(domain.getOwners().size() + 1); + ownership.setDomainOrder(application.getDomains().size() + 1); + + application.addDomain(ownership); + domain.addOwner(ownership); + + entityManager.persist(ownership); + applicationRepo.save(application); + domainRepo.save(domain); + } + /** * Removes a {@code CcmApplication} from the owners of a {@code Domain}. If * the provided {@code CcmApplication} is not an owner of the provided diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java index 5d88c690e..0baf31e0d 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java @@ -20,7 +20,12 @@ package org.libreccm.ui.admin.categories; import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainOwnership; +import org.libreccm.configuration.ConfigurationManager; +import org.libreccm.l10n.GlobalizationHelper; +import org.libreccm.l10n.LocalizedTextsUtil; import org.libreccm.ui.Message; +import org.libreccm.web.ApplicationRepository; +import org.libreccm.web.CcmApplication; import java.time.LocalDate; import java.time.ZoneOffset; @@ -29,12 +34,14 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; import javax.inject.Named; import javax.transaction.Transactional; @@ -46,6 +53,12 @@ import javax.transaction.Transactional; @Named("CategorySystemDetailsModel") public class CategorySystemDetailsModel { + @Inject + private ApplicationRepository applicationRepository; + + @Inject + private GlobalizationHelper globalizationHelper; + private long categorySystemId; private String uuid; @@ -60,12 +73,18 @@ public class CategorySystemDetailsModel { private Map title; + private List unusedTitleLocales; + private Map description; + private List unusedDescriptionLocales; + private List owners; + private List ownerOptions; + private final List messages; - + private Set invalidFields; public CategorySystemDetailsModel() { @@ -137,14 +156,34 @@ public class CategorySystemDetailsModel { return Collections.unmodifiableMap(title); } + public List getUnusedTitleLocales() { + return Collections.unmodifiableList(unusedTitleLocales); + } + + public boolean hasUnusedTitleLocales() { + return !unusedTitleLocales.isEmpty(); + } + public Map getDescription() { return Collections.unmodifiableMap(description); } + public List getUnusedDescriptionLocales() { + return Collections.unmodifiableList(unusedDescriptionLocales); + } + + public boolean hasUnusedDescriptionLocales() { + return !unusedDescriptionLocales.isEmpty(); + } + public List getOwners() { return Collections.unmodifiableList(owners); } + public List getOwnerOptions() { + return Collections.unmodifiableList(ownerOptions); + } + public boolean isNew() { return categorySystemId == 0; } @@ -156,15 +195,15 @@ public class CategorySystemDetailsModel { public void addMessage(final Message message) { messages.add(message); } - + public Set getInvalidFields() { return Collections.unmodifiableSet(invalidFields); } - + protected void addInvalidField(final String invalidField) { invalidFields.add(invalidField); } - + protected void setInvalidFields(final Set invalidFields) { this.invalidFields = new HashSet<>(invalidFields); } @@ -185,6 +224,8 @@ public class CategorySystemDetailsModel { .withZone(ZoneOffset.systemDefault()) .format(domain.getReleased()); } + final List availableLocales = globalizationHelper + .getAvailableLocales(); title = domain .getTitle() .getValues() @@ -196,6 +237,16 @@ public class CategorySystemDetailsModel { entry -> entry.getValue() ) ); + final Set titleLocales = domain + .getTitle() + .getAvailableLocales(); + unusedTitleLocales = availableLocales + .stream() + .filter(locale -> !titleLocales.contains(locale)) + .map(Locale::toString) + .sorted() + .collect(Collectors.toList()); + description = domain .getDescription() .getValues() @@ -207,6 +258,15 @@ public class CategorySystemDetailsModel { entry -> entry.getValue() ) ); + final Set descriptionLocales = domain + .getDescription() + .getAvailableLocales(); + unusedDescriptionLocales = availableLocales + .stream() + .filter(locale -> !descriptionLocales.contains(locale)) + .map(Locale::toString) + .sorted() + .collect(Collectors.toList()); owners = domain .getOwners() @@ -214,6 +274,20 @@ public class CategorySystemDetailsModel { .map(this::buildOwnerRow) .sorted() .collect(Collectors.toList()); + + final List ownerApplications = domain + .getOwners() + .stream() + .map(DomainOwnership::getOwner) + .collect(Collectors.toList()); + + ownerOptions = applicationRepository + .findAll() + .stream() + .filter(application -> !ownerApplications.contains(application)) + .map(CategorySystemOwnerOption::new) + .sorted() + .collect(Collectors.toList()); } private CategorySystemOwnerRow buildOwnerRow( @@ -221,10 +295,14 @@ public class CategorySystemDetailsModel { ) { final CategorySystemOwnerRow ownerRow = new CategorySystemOwnerRow(); ownerRow.setOwnershipId(ownership.getOwnershipId()); - ownerRow.setUuid(ownership.getUuid()); + ownerRow.setUuid(ownership.getOwner().getUuid()); ownerRow.setContext(ownership.getContext()); ownerRow.setOwnerOrder(ownership.getOwnerOrder()); - ownerRow.setOwnerAppName(ownership.getOwner().getDisplayName()); + if (ownership.getOwner().getDisplayName() == null) { + ownerRow.setOwnerAppName(ownership.getOwner().getApplicationType()); + } else { + ownerRow.setOwnerAppName(ownership.getOwner().getDisplayName()); + } return ownerRow; } diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemOwnerOption.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemOwnerOption.java new file mode 100644 index 000000000..f0947a8f7 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemOwnerOption.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.ui.admin.categories; + +import org.libreccm.web.CcmApplication; + +import java.util.Objects; + +/** + * + * @author Jens Pelzetter + */ +public class CategorySystemOwnerOption + implements Comparable { + + private final long applicationId; + + private final String applicationUuid; + + private final String applicationName; + + public CategorySystemOwnerOption(final CcmApplication application) { + applicationId = application.getObjectId(); + applicationUuid = application.getUuid(); + if (application.getDisplayName() == null) { + applicationName = application.getApplicationType(); + } else { + applicationName = application.getDisplayName(); + } + } + + public long getApplicationId() { + return applicationId; + } + + public String getApplicationUuid() { + return applicationUuid; + } + + public String getApplicationName() { + return applicationName; + } + + @Override + public int compareTo(final CategorySystemOwnerOption other) { + return Objects.compare( + applicationName, + Objects.requireNonNull(other).getApplicationName(), + String::compareTo + ); + } + +} diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemsController.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemsController.java index 88f64eff5..960982742 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemsController.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemsController.java @@ -85,7 +85,6 @@ public class CategorySystemsController { // public String getCategoryManager() { // return getCategorySystems(); // } - @GET @Path("/") @AuthorizationRequired @@ -291,8 +290,10 @@ public class CategorySystemsController { final Locale locale = new Locale(localeParam); domain.getTitle().addValue(locale, value); domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -310,6 +311,7 @@ public class CategorySystemsController { @POST @Path("/{categorySystemIdentifier}/title/${locale}/edit") @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public String editTitle( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, @@ -345,8 +347,10 @@ public class CategorySystemsController { final Locale locale = new Locale(localeParam); domain.getTitle().addValue(locale, value); domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -364,11 +368,15 @@ public class CategorySystemsController { @POST @Path("/{categorySystemIdentifier}/title/${locale}/remove") @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public String removeTitle( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, - @PathParam("locale") final String localeParam + @PathParam("locale") final String localeParam, + @FormParam("confirmed") + final String confirmed ) { + final Identifier identifier = identifierParser.parseIdentifier( categorySystemIdentifier ); @@ -395,11 +403,15 @@ public class CategorySystemsController { if (result.isPresent()) { final Domain domain = result.get(); - final Locale locale = new Locale(localeParam); - domain.getTitle().removeValue(locale); - domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + if (Objects.equals(confirmed, "true")) { + final Locale locale = new Locale(localeParam); + domain.getTitle().removeValue(locale); + domainRepository.save(domain); + } + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -417,6 +429,7 @@ public class CategorySystemsController { @POST @Path("/{categorySystemIdentifier}/description/add") @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public String addDescription( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, @@ -452,8 +465,10 @@ public class CategorySystemsController { final Locale locale = new Locale(localeParam); domain.getDescription().addValue(locale, value); domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -470,8 +485,10 @@ public class CategorySystemsController { @POST @Path( - "categorysystems/{categorySystemIdentifier}/description/${locale}/edit") + "categorysystems/{categorySystemIdentifier}/description/${locale}/edit" + ) @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public String editDescription( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, @@ -507,8 +524,10 @@ public class CategorySystemsController { final Locale locale = new Locale(localeParam); domain.getDescription().addValue(locale, value); domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -527,10 +546,13 @@ public class CategorySystemsController { @Path( "categorysystems/{categorySystemIdentifier}/description/${locale}/remove") @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) public String removeDescription( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, - @PathParam("locale") final String localeParam + @PathParam("locale") final String localeParam, + @FormParam("confirmed") + final String confirmed ) { final Identifier identifier = identifierParser.parseIdentifier( categorySystemIdentifier @@ -558,11 +580,15 @@ public class CategorySystemsController { if (result.isPresent()) { final Domain domain = result.get(); - final Locale locale = new Locale(localeParam); - domain.getDescription().removeValue(locale); - domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; + if (Objects.equals(confirmed, "true")) { + final Locale locale = new Locale(localeParam); + domain.getDescription().removeValue(locale); + domainRepository.save(domain); + } + return String.format( + "redirect:categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -581,10 +607,12 @@ public class CategorySystemsController { @Path("/{categorySystemIdentifier}/owners/add") @AuthorizationRequired @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) + @Transactional(Transactional.TxType.REQUIRED) public String addOwner( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, - @FormParam("applicationUuid") final String applicationUuid + @FormParam("applicationUuid") final String applicationUuid, + @FormParam("context") final String context ) { final Identifier identifier = identifierParser.parseIdentifier( categorySystemIdentifier @@ -628,11 +656,16 @@ public class CategorySystemsController { } final CcmApplication owner = appResult.get(); - - domainManager.addDomainOwner(owner, domain); + if (context == null + || context.isEmpty() + || context.matches("\\s*")) { + domainManager.addDomainOwner(owner, domain); + } else { + domainManager.addDomainOwner(owner, domain, context); + } return String.format( - "redirect:categorymanager/categorysystems/%s", + "redirect:categorymanager/categorysystems/ID-%s/details", categorySystemIdentifier ); } else { @@ -650,13 +683,15 @@ public class CategorySystemsController { } @POST - @Path("/{categorySystemIdentifier}/owners/remove") + @Path("/{categorySystemIdentifier}/owners/${applicationUuid}/remove") @AuthorizationRequired @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) + @Transactional(Transactional.TxType.REQUIRED) public String removeOwner( @PathParam("categorySystemIdentifier") final String categorySystemIdentifier, - @FormParam("applicationUuid") final String applicationUuid + @PathParam("applicationUuid") final String applicationUuid, + @FormParam("confirmed") final String confirmed ) { final Identifier identifier = identifierParser.parseIdentifier( categorySystemIdentifier @@ -699,12 +734,13 @@ public class CategorySystemsController { return "org/libreccm/ui/admin/categories/application-not-found.xhtml"; } - final CcmApplication owner = appResult.get(); - - domainManager.removeDomainOwner(owner, domain); + if (Objects.equals(confirmed, "true")) { + final CcmApplication owner = appResult.get(); + domainManager.removeDomainOwner(owner, domain); + } return String.format( - "redirect:categorymanager/categorysystems/%s", + "redirect:categorymanager/categorysystems/ID-%s/details", categorySystemIdentifier ); } else { diff --git a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml index b184986f6..9687a8c00 100644 --- a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml +++ b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml @@ -1,4 +1,4 @@ - +]> #{AdminMessages['categorysystems.details.title.heading']} - - + +
+
+ +
+ +
+
+

#{AdminMessages['categorysystems.details.title.none']} @@ -131,28 +203,137 @@ #{entry.value} - +

+ +
+ - +
+ +
+ @@ -164,21 +345,92 @@

#{AdminMessages['categorysystems.details.description.heading']}

- + +
+
+ +
+
+ +
-

#{AdminMessages['categorysystems.details.description.none']} @@ -196,7 +448,7 @@ - @@ -206,28 +458,137 @@ #{entry.value} - +

+ +
+ - +
+ +
+ @@ -239,18 +600,88 @@

#{AdminMessages['categorysystems.details.owners.heading']}

-
- - - - - #{AdminMessages['categorysystems.details.owners.add']} - +
+
+ +
+
@@ -259,7 +690,7 @@

- +
diff --git a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties index 059e1b992..1b6a15cbf 100644 --- a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties +++ b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties @@ -301,3 +301,46 @@ categorysystems.delete.confirm.title=Confirm Delete categorysystems.delete.confirm.message=Are you sure to delete the category system {0} and all its categories? categorysystems.delete.confirm.cancel=Cancel categorysystems.delete.confirm.yes=Delete Category System +categorysystems.details.title.add.dialog.title=Add localized title +categorysystems.details.title.add.dialog.close=Cancel +categorysystems.details.title.add.dialog.submit=Add title +categorysystems.details.title.add.dialog.value.label=Localized title +categorysystems.details.title.add.dialog.value.help=The localized title to add +categorysystems.details.title.add.dialog.locale.label=Locale +categorysystems.details.title.add.dialog.locale.help=The locale (language) of the title value to add +categorysystems.details.title.table.actions.edit.dialog.title=Edit title +categorysystems.details.title.edit.dialog.close=Cancel +categorysystems.details.title.edit.dialog.value.label=Localized Title +categorysystems.details.title.edit.dialog.value.help=The new value for the title +categorysystems.details.title.edit.dialog.submit=Save +categorysystems.details.title.table.actions.remove.dialog.title=Remove localized title +categorysystems.details.title.remove.dialog.close=Cancel +categorysystems.details.title.remove.dialog.message=Are your sure to delete title "{1}" for locale? +categorysystems.details.title.remove.dialog.submit=Delete title +categorysystems.details.description.add.dialog.title=Add localized description +categorysystems.details.description.add.dialog.locale.label=Locale +categorysystems.details.description.add.dialog.locale.help=The locale (language) of the description value to add +categorysystems.details.description.add.dialog.value.label=Localized description +categorysystems.details.description.add.dialog.value.help=The localized description to add +categorysystems.details.description.add.dialog.close=Cancel +categorysystems.details.description.add.dialog.submit=Add description +categorysystems.details.description.table.actions.edit.dialog.title=Edit description +categorysystems.details.description.edit.dialog.close=Cancel +categorysystems.details.description.edit.dialog.value.label=Localized description +categorysystems.details.description.edit.dialog.value.help=The localized description +categorysystems.details.description.edit.dialog.submit=Save +categorysystems.details.description.table.actions.remove.dialog.title=Removed localized description +categorysystems.details.description.remove.dialog.close=Cancel +categorysystems.details.description.remove.dialog.message=Are your sure to delete the description for locale {0}? +categorysystems.details.description.remove.dialog.submit=Remove localized description +categorysstems.details.owner.add.dialog.title=Add Application Mapping +categorysystems.details.owner.add.dialog.application.label=Application +categorysystems.details.owner.add.dialog.application.help=Application for that a new mapping is added +categorysystems.details.owner.add.dialog.close=Cancel +categorysystems.details.owner.add.dialog.submit=Add application mapping +categorysystems.details.owners.remove.title=Remove application mapping +categorysystems.details.owners.remove.close=Cancel +categorysystems.details.owners.remove.message=Are your sure to remove the mapping for application {0}? +categorysystems.details.owners.remove.submit=Remove mapping +categorysystems.details.owner.add.dialog.context.label=Context +categorysystems.details.owner.add.dialog.context.help=Context for the mapping diff --git a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties index 6816d7078..65ffc1657 100644 --- a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties +++ b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties @@ -301,3 +301,46 @@ categorysystems.delete.confirm.title=L\u00f6schen best\u00e4tigen categorysystems.delete.confirm.message=Sind Sie sicher, dass Sie das Kategoriensystem {0} mit allen seinen Kategorien l\u00f6schen wollen? categorysystems.delete.confirm.cancel=Abbrechen categorysystems.delete.confirm.yes=Kategoriensystem l\u00f6schen +categorysystems.details.title.add.dialog.title=Lokalisierten Titel hinzuf\u00fcgen +categorysystems.details.title.add.dialog.close=Abbrechen +categorysystems.details.title.add.dialog.submit=Titel hinzuf\u00fcgen +categorysystems.details.title.add.dialog.value.label=Lokalisierter Titel +categorysystems.details.title.add.dialog.value.help=Der hinzuzuf\u00fcgendende Titel +categorysystems.details.title.add.dialog.locale.label=Sprache +categorysystems.details.title.add.dialog.locale.help=Die Sprache des Titels +categorysystems.details.title.table.actions.edit.dialog.title=Titel bearbeiten +categorysystems.details.title.edit.dialog.close=Abbrechen +categorysystems.details.title.edit.dialog.value.label=Lokalisierter Titel +categorysystems.details.title.edit.dialog.value.help=Neuer Wert f\u00fcr den Titel +categorysystems.details.title.edit.dialog.submit=Speichern +categorysystems.details.title.table.actions.remove.dialog.title=Lokalisierten Titel entfernen +categorysystems.details.title.remove.dialog.close=Abbrechen +categorysystems.details.title.remove.dialog.message=Sind Sie sicher, dass Sie den Titel "{1}" f\u00fcr die Sprache {0} entfernen wollen? +categorysystems.details.title.remove.dialog.submit=Titel entfernen +categorysystems.details.description.add.dialog.title=Lokalisierte Beschreibung hinzuf\u00fcgen +categorysystems.details.description.add.dialog.locale.label=Sprache +categorysystems.details.description.add.dialog.locale.help=Die Sprache der Beschreibung +categorysystems.details.description.add.dialog.value.label=Lokalisierte Beschreibung +categorysystems.details.description.add.dialog.value.help=Die hinzuzuf\u00fcgende Beschreibung +categorysystems.details.description.add.dialog.close=Abbrechen +categorysystems.details.description.add.dialog.submit=Beschreibung hinzuf\u00fcgen +categorysystems.details.description.table.actions.edit.dialog.title=Beschreibung bearbeiten +categorysystems.details.description.edit.dialog.close=Abbrechen +categorysystems.details.description.edit.dialog.value.label=Lokalisierte Beschreibung +categorysystems.details.description.edit.dialog.value.help=Die lokalisierte Beschreibung +categorysystems.details.description.edit.dialog.submit=Speichern +categorysystems.details.description.table.actions.remove.dialog.title=Lokalisierte Beschreibung entfernen +categorysystems.details.description.remove.dialog.close=Abbrechen +categorysystems.details.description.remove.dialog.message=Sind Sie sicher das die Beschreibung f\u00fcr die Sprache {0} entfernen wollen? +categorysystems.details.description.remove.dialog.submit=Lokalisierte Beschreibung entfernen +categorysstems.details.owner.add.dialog.title=Applikation hinzuf\u00fcgen +categorysystems.details.owner.add.dialog.application.label=Anwendung +categorysystems.details.owner.add.dialog.application.help=Hinzuzuf\u00fcgende Anwendung +categorysystems.details.owner.add.dialog.close=Abbrechen +categorysystems.details.owner.add.dialog.submit=Anwendung hinzuf\u00fcgen +categorysystems.details.owners.remove.title=Anwendung entfernen +categorysystems.details.owners.remove.close=Cancel +categorysystems.details.owners.remove.message=Sind Sie sicher das die Application {0} entfernen wollen? +categorysystems.details.owners.remove.submit=Zuordnung entfernen +categorysystems.details.owner.add.dialog.context.label=Context +categorysystems.details.owner.add.dialog.context.help=Context for the mapping
@@ -284,16 +715,63 @@ #{owner.context} - +
+ +
+