CCM NG/ccm-cms: Language Tab of the ContentItemPage now works
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4835 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
d0c7265b13
commit
a57a121ebb
|
|
@ -29,7 +29,6 @@ import com.arsdigita.bebop.Resettable;
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
import com.arsdigita.bebop.SingleSelectionModel;
|
import com.arsdigita.bebop.SingleSelectionModel;
|
||||||
import com.arsdigita.bebop.TabbedPane;
|
import com.arsdigita.bebop.TabbedPane;
|
||||||
import com.arsdigita.bebop.Text;
|
|
||||||
import com.arsdigita.bebop.event.ActionEvent;
|
import com.arsdigita.bebop.event.ActionEvent;
|
||||||
import com.arsdigita.bebop.event.ActionListener;
|
import com.arsdigita.bebop.event.ActionListener;
|
||||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
|
@ -42,7 +41,6 @@ import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
import com.arsdigita.cms.CMS;
|
import com.arsdigita.cms.CMS;
|
||||||
import com.arsdigita.cms.ItemSelectionModel;
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
import com.arsdigita.cms.PageLocations;
|
import com.arsdigita.cms.PageLocations;
|
||||||
import com.arsdigita.cms.dispatcher.CMSDispatcher;
|
|
||||||
import com.arsdigita.cms.dispatcher.CMSPage;
|
import com.arsdigita.cms.dispatcher.CMSPage;
|
||||||
import com.arsdigita.cms.ui.authoring.WizardSelector;
|
import com.arsdigita.cms.ui.authoring.WizardSelector;
|
||||||
import com.arsdigita.cms.ui.item.ContentItemRequestLocal;
|
import com.arsdigita.cms.ui.item.ContentItemRequestLocal;
|
||||||
|
|
@ -57,7 +55,6 @@ import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
|
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
|
||||||
import com.arsdigita.xml.Document;
|
import com.arsdigita.xml.Document;
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
|
|
||||||
|
|
@ -71,9 +68,7 @@ import org.librecms.contentsection.ContentItemL10NManager;
|
||||||
import org.librecms.contentsection.ContentItemRepository;
|
import org.librecms.contentsection.ContentItemRepository;
|
||||||
import org.librecms.contentsection.ContentItemVersion;
|
import org.librecms.contentsection.ContentItemVersion;
|
||||||
import org.librecms.contentsection.ContentSection;
|
import org.librecms.contentsection.ContentSection;
|
||||||
import org.librecms.contentsection.ContentSectionManager;
|
|
||||||
import org.librecms.contentsection.ContentType;
|
import org.librecms.contentsection.ContentType;
|
||||||
import org.librecms.dispatcher.ItemResolver;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
@ -149,7 +144,7 @@ public class ContentItemPage extends CMSPage implements ActionListener {
|
||||||
private final TabbedPane tabbedPane;
|
private final TabbedPane tabbedPane;
|
||||||
private final StringParameter returnUrlParameter;
|
private final StringParameter returnUrlParameter;
|
||||||
private final ItemSelectionModel itemSelectionModel;
|
private final ItemSelectionModel itemSelectionModel;
|
||||||
private final SingleSelectionModel<String> selectedLanguageModel;
|
// private final SingleSelectionModel<String> selectedLanguageModel;
|
||||||
private final ACSObjectSelectionModel typeSelectionModel;
|
private final ACSObjectSelectionModel typeSelectionModel;
|
||||||
private final ContentItemRequestLocal itemRequestLocal;
|
private final ContentItemRequestLocal itemRequestLocal;
|
||||||
private final Summary summaryPane;
|
private final Summary summaryPane;
|
||||||
|
|
@ -178,9 +173,9 @@ public class ContentItemPage extends CMSPage implements ActionListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void prepare(final PrintEvent event) {
|
public final void prepare(final PrintEvent event) {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
final Label label = (Label) event.getTarget();
|
final Label label = (Label) event.getTarget();
|
||||||
final ContentItem item = itemRequestLocal.getContentItem(event.
|
final ContentItem item = itemRequestLocal.getContentItem(event.
|
||||||
getPageState());
|
getPageState());
|
||||||
|
|
@ -214,7 +209,7 @@ public class ContentItemPage extends CMSPage implements ActionListener {
|
||||||
.append(language)
|
.append(language)
|
||||||
.append(")");
|
.append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
label.setLabel(title.toString());
|
label.setLabel(title.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -238,15 +233,14 @@ public class ContentItemPage extends CMSPage implements ActionListener {
|
||||||
itemSelectionModel = new ItemSelectionModel(itemId);
|
itemSelectionModel = new ItemSelectionModel(itemId);
|
||||||
|
|
||||||
// Add the selected item language as parameter
|
// Add the selected item language as parameter
|
||||||
selectedLanguageParam = new StringParameter(
|
selectedLanguageParam = new StringParameter(SELECTED_LANGUAGE);
|
||||||
SELECTED_LANGUAGE);
|
|
||||||
selectedLanguageParam.addParameterListener(
|
selectedLanguageParam.addParameterListener(
|
||||||
new NotNullValidationListener(SELECTED_LANGUAGE));
|
new NotNullValidationListener(SELECTED_LANGUAGE));
|
||||||
addGlobalStateParam(selectedLanguageParam);
|
addGlobalStateParam(selectedLanguageParam);
|
||||||
selectedLanguageModel = new ParameterSingleSelectionModel<>(
|
// selectedLanguageModel = new ParameterSingleSelectionModel<>(
|
||||||
selectedLanguageParam);
|
// selectedLanguageParam);
|
||||||
selectedLanguageParam
|
// selectedLanguageParam
|
||||||
.setDefaultValue(KernelConfig.getConfig().getDefaultLanguage());
|
// .setDefaultValue(KernelConfig.getConfig().getDefaultLanguage());
|
||||||
|
|
||||||
// Add the content type global state parameter
|
// Add the content type global state parameter
|
||||||
final LongParameter contentType = new LongParameter(CONTENT_TYPE);
|
final LongParameter contentType = new LongParameter(CONTENT_TYPE);
|
||||||
|
|
@ -282,7 +276,8 @@ public class ContentItemPage extends CMSPage implements ActionListener {
|
||||||
summaryPane = new Summary(itemSelectionModel);
|
summaryPane = new Summary(itemSelectionModel);
|
||||||
wizardPane = new WizardSelector(itemSelectionModel, typeSelectionModel);
|
wizardPane = new WizardSelector(itemSelectionModel, typeSelectionModel);
|
||||||
languagesPane = new ItemLanguages(itemSelectionModel,
|
languagesPane = new ItemLanguages(itemSelectionModel,
|
||||||
selectedLanguageModel);
|
// selectedLanguageModel,
|
||||||
|
selectedLanguageParam);
|
||||||
workflowPane = new ItemWorkflowAdminPane(itemId); // Make this use m_item XXX
|
workflowPane = new ItemWorkflowAdminPane(itemId); // Make this use m_item XXX
|
||||||
lifecyclePane = new ItemLifecycleAdminPane(itemRequestLocal);
|
lifecyclePane = new ItemLifecycleAdminPane(itemRequestLocal);
|
||||||
revisionsPane = new ItemRevisionAdminPane(itemRequestLocal);
|
revisionsPane = new ItemRevisionAdminPane(itemRequestLocal);
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,9 @@ import com.arsdigita.bebop.event.PrintListener;
|
||||||
import com.arsdigita.bebop.form.Option;
|
import com.arsdigita.bebop.form.Option;
|
||||||
import com.arsdigita.bebop.form.OptionGroup;
|
import com.arsdigita.bebop.form.OptionGroup;
|
||||||
import com.arsdigita.bebop.form.Submit;
|
import com.arsdigita.bebop.form.Submit;
|
||||||
|
import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
|
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
import org.librecms.contentsection.ContentSection;
|
|
||||||
import org.librecms.contentsection.ContentType;
|
|
||||||
|
|
||||||
import com.arsdigita.cms.ItemSelectionModel;
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
import com.arsdigita.cms.ui.ContentItemPage;
|
import com.arsdigita.cms.ui.ContentItemPage;
|
||||||
|
|
@ -43,28 +42,21 @@ import com.arsdigita.cms.ui.authoring.LanguageWidget;
|
||||||
import org.librecms.util.LanguageUtil;
|
import org.librecms.util.LanguageUtil;
|
||||||
|
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
|
||||||
import com.arsdigita.toolbox.ui.ActionGroup;
|
import com.arsdigita.toolbox.ui.ActionGroup;
|
||||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||||
import com.arsdigita.toolbox.ui.Section;
|
import com.arsdigita.toolbox.ui.Section;
|
||||||
import com.arsdigita.util.Assert;
|
|
||||||
import com.arsdigita.util.Pair;
|
import com.arsdigita.util.Pair;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
|
||||||
import com.arsdigita.web.RedirectSignal;
|
import com.arsdigita.web.RedirectSignal;
|
||||||
import com.arsdigita.web.URL;
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.workflow.Workflow;
|
|
||||||
import org.libreccm.workflow.WorkflowTemplate;
|
|
||||||
import org.librecms.contentsection.ContentItemL10NManager;
|
import org.librecms.contentsection.ContentItemL10NManager;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.libreccm.configuration.ConfigurationManager;
|
|
||||||
|
import org.libreccm.core.UnexpectedErrorException;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -77,23 +69,28 @@ import org.librecms.CmsConstants;
|
||||||
public class ItemLanguages extends LayoutPanel {
|
public class ItemLanguages extends LayoutPanel {
|
||||||
|
|
||||||
private final ItemSelectionModel selectionModel;
|
private final ItemSelectionModel selectionModel;
|
||||||
private final SingleSelectionModel<String> selectedLanguage;
|
// private final SingleSelectionModel<String> selectedLanguage;
|
||||||
private final LanguageWidget languageWidget;
|
private final LanguageWidget languageWidget;
|
||||||
private final Submit changeSubmit;
|
private final StringParameter selectedLanguageParam;
|
||||||
|
// private final Submit changeSubmit;
|
||||||
private final Submit createSubmit;
|
private final Submit createSubmit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new <code>ItemLanguages</code>.
|
* Constructs a new <code>ItemLanguages</code>.
|
||||||
*
|
*
|
||||||
* @param selectionModel the {@link ItemSelectionModel} which will supply
|
* @param selectionModel the {@link ItemSelectionModel} which will
|
||||||
* the current item
|
* supply the current item
|
||||||
* @param selectedLanguage {@link SingleSelectionModel} for the selected
|
* @param selectedLanguage {@link SingleSelectionModel} for the
|
||||||
* language.
|
* selected language.
|
||||||
|
* @param selectedLanguageParam
|
||||||
*/
|
*/
|
||||||
public ItemLanguages(final ItemSelectionModel selectionModel,
|
public ItemLanguages(final ItemSelectionModel selectionModel,
|
||||||
final SingleSelectionModel<String> selectedLanguage) {
|
// final SingleSelectionModel<String> selectedLanguage,
|
||||||
|
final StringParameter selectedLanguageParam) {
|
||||||
|
|
||||||
this.selectionModel = selectionModel;
|
this.selectionModel = selectionModel;
|
||||||
this.selectedLanguage = selectedLanguage;
|
// this.selectedLanguage = selectedLanguage;
|
||||||
|
this.selectedLanguageParam = selectedLanguageParam;
|
||||||
|
|
||||||
final Section section = new Section(gz("cms.ui.item.languages"));
|
final Section section = new Section(gz("cms.ui.item.languages"));
|
||||||
setBody(section);
|
setBody(section);
|
||||||
|
|
@ -102,10 +99,23 @@ public class ItemLanguages extends LayoutPanel {
|
||||||
section.setBody(group);
|
section.setBody(group);
|
||||||
|
|
||||||
group.setSubject(new ItemLanguagesTable(selectionModel,
|
group.setSubject(new ItemLanguagesTable(selectionModel,
|
||||||
selectedLanguage));
|
// selectedLanguage,
|
||||||
|
selectedLanguageParam));
|
||||||
|
|
||||||
final Form form = new Form("newLanguage", new BoxPanel(
|
final Form form = new Form("newLanguage", new BoxPanel(
|
||||||
BoxPanel.HORIZONTAL));
|
BoxPanel.HORIZONTAL)) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible(final PageState state) {
|
||||||
|
final ContentItem item = selectionModel.getSelectedItem(state);
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final ContentItemL10NManager l10NManager = cdiUtil.findBean(
|
||||||
|
ContentItemL10NManager.class);
|
||||||
|
return !l10NManager.creatableLocales(item).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
group.addAction(form);
|
group.addAction(form);
|
||||||
|
|
||||||
form.setRedirecting(true);
|
form.setRedirecting(true);
|
||||||
|
|
@ -121,12 +131,12 @@ public class ItemLanguages extends LayoutPanel {
|
||||||
try {
|
try {
|
||||||
languageWidget.addPrintListener(new OptionPrinter());
|
languageWidget.addPrintListener(new OptionPrinter());
|
||||||
} catch (TooManyListenersException ex) {
|
} catch (TooManyListenersException ex) {
|
||||||
throw new UncheckedWrapperException(ex);
|
throw new UnexpectedErrorException(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
form.add(languageWidget);
|
form.add(languageWidget);
|
||||||
changeSubmit = new Submit("change", gz("cms.ui.item.language.change"));
|
// changeSubmit = new Submit("change", gz("cms.ui.item.language.change"));
|
||||||
form.add(changeSubmit);
|
// form.add(changeSubmit);
|
||||||
createSubmit = new Submit("create", gz("cms.ui.item.language.add"));
|
createSubmit = new Submit("create", gz("cms.ui.item.language.add"));
|
||||||
form.add(createSubmit);
|
form.add(createSubmit);
|
||||||
form.addProcessListener(new ProcessListener());
|
form.addProcessListener(new ProcessListener());
|
||||||
|
|
@ -140,28 +150,29 @@ public class ItemLanguages extends LayoutPanel {
|
||||||
@Override
|
@Override
|
||||||
public final void prepare(final PrintEvent event) {
|
public final void prepare(final PrintEvent event) {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final OptionGroup optionGroup = (OptionGroup) event.getTarget();
|
final OptionGroup target = (OptionGroup) event.getTarget();
|
||||||
|
target.clearOptions();
|
||||||
final ContentItem item = selectionModel.getSelectedItem(state);
|
final ContentItem item = selectionModel.getSelectedItem(state);
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final LanguageUtil languageUtil = cdiUtil.findBean(
|
final LanguageUtil languageUtil = cdiUtil.findBean(
|
||||||
LanguageUtil.class);
|
LanguageUtil.class);
|
||||||
final ContentItemL10NManager l10NManager = cdiUtil.findBean(
|
final ContentItemL10NManager l10NManager = cdiUtil.findBean(
|
||||||
ContentItemL10NManager.class);
|
ContentItemL10NManager.class);
|
||||||
|
|
||||||
final List<String> creatableLangs = l10NManager.creatableLocales(
|
final List<String> creatableLangs = l10NManager.creatableLocales(
|
||||||
item).stream()
|
item).stream()
|
||||||
.map(locale -> locale.toString())
|
.map(locale -> locale.toString())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
final List<Pair> languages = languageUtil.convertToG11N(
|
final List<Pair> languages = languageUtil
|
||||||
creatableLangs);
|
.convertToG11N(creatableLangs);
|
||||||
|
|
||||||
for (final Pair pair : languages) {
|
for (final Pair pair : languages) {
|
||||||
final String langCode = (String) pair.getKey();
|
final String langCode = (String) pair.getKey();
|
||||||
final GlobalizedMessage langName
|
final GlobalizedMessage langName
|
||||||
= (GlobalizedMessage) pair
|
= (GlobalizedMessage) pair
|
||||||
.getValue();
|
.getValue();
|
||||||
optionGroup.addOption(new Option(langCode, new Label(langName)));
|
target.addOption(new Option(langCode, new Label(langName)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,40 +185,35 @@ public class ItemLanguages extends LayoutPanel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void process(final FormSectionEvent event)
|
public final void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final String lang = (String) languageWidget.getValue(state);
|
final String language = (String) languageWidget.getValue(state);
|
||||||
final ContentItem item = (ContentItem) selectionModel
|
final ContentItem item = selectionModel.getSelectedItem(state);
|
||||||
.getSelectedItem(state);
|
|
||||||
|
|
||||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
|
||||||
ConfigurationManager.class);
|
|
||||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
|
||||||
KernelConfig.class);
|
|
||||||
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
|
||||||
final String name = item.getName().getValue(defaultLocale);
|
|
||||||
|
|
||||||
if (createSubmit.isSelected(state)) {
|
if (createSubmit.isSelected(state)) {
|
||||||
final ContentSection section = item.getContentType().
|
|
||||||
getContentSection();
|
|
||||||
|
|
||||||
Assert.exists(section, ContentSection.class);
|
final ItemLanguagesController controller = cdiUtil
|
||||||
|
.findBean(ItemLanguagesController.class);
|
||||||
|
|
||||||
final ContentItemL10NManager l10NManager = cdiUtil.findBean(
|
controller.addLanguage(item, language);
|
||||||
ContentItemL10NManager.class);
|
|
||||||
l10NManager.addLanguage(item, new Locale(lang));
|
|
||||||
|
|
||||||
// redirect to ContentItemPage.AUTHORING_TAB of the new instance
|
// redirect to ContentItemPage.AUTHORING_TAB of the new instance
|
||||||
|
state.setValue(selectedLanguageParam, language);
|
||||||
|
final String langParam = String
|
||||||
|
.format("&%s=%s",
|
||||||
|
ContentItemPage.SELECTED_LANGUAGE,
|
||||||
|
language);
|
||||||
final String target = String.join(
|
final String target = String.join(
|
||||||
"", URL.getDispatcherPath(),
|
"",
|
||||||
ContentItemPage.getItemURL(item,
|
URL.getDispatcherPath(),
|
||||||
ContentItemPage.AUTHORING_TAB));
|
controller.getItemEditUrl(item),
|
||||||
|
langParam);
|
||||||
|
|
||||||
throw new RedirectSignal(target, true);
|
throw new RedirectSignal(target, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
package com.arsdigita.cms.ui.item;
|
package com.arsdigita.cms.ui.item;
|
||||||
|
|
||||||
import com.arsdigita.bebop.table.RowData;
|
import com.arsdigita.bebop.table.RowData;
|
||||||
|
import com.arsdigita.cms.ui.ContentItemPage;
|
||||||
|
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
|
|
@ -41,49 +42,100 @@ import javax.transaction.Transactional;
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
public class ItemLanguagesController {
|
class ItemLanguagesController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ContentItemRepository itemRepo;
|
private ContentItemRepository itemRepo;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ContentItemL10NManager itemL10NManager;
|
private ContentItemL10NManager itemL10NManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private GlobalizationHelper globalizationHelper;
|
private GlobalizationHelper globalizationHelper;
|
||||||
|
|
||||||
public List<RowData<String>> retrieveLanguageVariants(final ContentItem item) {
|
protected List<RowData<String>> retrieveLanguageVariants(
|
||||||
|
final ContentItem item) {
|
||||||
return retrieveLanguageVariants(item.getObjectId());
|
return retrieveLanguageVariants(item.getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public List<RowData<String>> retrieveLanguageVariants(final long itemId) {
|
protected List<RowData<String>> retrieveLanguageVariants(final long itemId) {
|
||||||
final Optional<ContentItem> item = itemRepo.findById(itemId);
|
|
||||||
|
|
||||||
if (!item.isPresent()) {
|
final ContentItem item = itemRepo
|
||||||
throw new IllegalArgumentException(String.format(
|
.findById(itemId)
|
||||||
"No content item with id %d found.", itemId));
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
}
|
"No ContentItem with ID %d in the database.", itemId)));
|
||||||
|
|
||||||
final List<Locale> availableLangs = new ArrayList<>(itemL10NManager
|
final List<Locale> availableLangs = new ArrayList<>(itemL10NManager
|
||||||
.availableLanguages(item.get()));
|
.availableLanguages(item));
|
||||||
availableLangs.sort((locale1, locale2) -> {
|
availableLangs.sort((locale1, locale2) -> {
|
||||||
return locale1.toString().compareTo(locale2.toString());
|
return locale1.toString().compareTo(locale2.toString());
|
||||||
});
|
});
|
||||||
|
|
||||||
return availableLangs.stream()
|
return availableLangs.stream()
|
||||||
.map(lang -> createRow(item.get(), lang))
|
.map(lang -> createRow(item, lang))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private RowData<String> createRow(final ContentItem item,
|
private RowData<String> createRow(final ContentItem item,
|
||||||
final Locale lang) {
|
final Locale lang) {
|
||||||
final RowData<String> row = new RowData<>(2);
|
final RowData<String> row = new RowData<>(2);
|
||||||
row.setRowKey(lang.toString());
|
row.setRowKey(lang.toString());
|
||||||
row.setColData(0, lang.getDisplayName(globalizationHelper.getNegotiatedLocale()));
|
row.setColData(0, lang.getDisplayName(globalizationHelper
|
||||||
|
.getNegotiatedLocale()));
|
||||||
row.setColData(1, item.getTitle().getValue(lang));
|
row.setColData(1, item.getTitle().getValue(lang));
|
||||||
|
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected int countLanguageVariants(final ContentItem item) {
|
||||||
|
|
||||||
|
final ContentItem contentItem = itemRepo
|
||||||
|
.findById(item.getObjectId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No ContentItem with ID %d in the database.",
|
||||||
|
item.getObjectId())));
|
||||||
|
|
||||||
|
return itemL10NManager.availableLanguages(contentItem).size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected void addLanguage(final ContentItem item, final String language) {
|
||||||
|
|
||||||
|
final ContentItem contentItem = itemRepo
|
||||||
|
.findById(item.getObjectId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No ContentItem with ID %d in the database.",
|
||||||
|
item.getObjectId())));
|
||||||
|
|
||||||
|
itemL10NManager.addLanguage(contentItem, new Locale(language));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected void removeLanguage(final ContentItem item,
|
||||||
|
final String language) {
|
||||||
|
|
||||||
|
final ContentItem contentItem = itemRepo
|
||||||
|
.findById(item.getObjectId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No ContentItem with ID %d in the database.",
|
||||||
|
item.getObjectId())));
|
||||||
|
|
||||||
|
itemL10NManager.removeLanguage(contentItem, new Locale(language));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected String getItemEditUrl(final ContentItem item) {
|
||||||
|
|
||||||
|
final ContentItem contentItem = itemRepo
|
||||||
|
.findById(item.getObjectId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No ContentItem with ID %d in the database.",
|
||||||
|
item.getObjectId())));
|
||||||
|
|
||||||
|
return ContentItemPage.getItemURL(contentItem,
|
||||||
|
ContentItemPage.AUTHORING_TAB);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,28 +22,29 @@ import com.arsdigita.bebop.Component;
|
||||||
import com.arsdigita.bebop.ControlLink;
|
import com.arsdigita.bebop.ControlLink;
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.Label;
|
import com.arsdigita.bebop.Label;
|
||||||
import com.arsdigita.bebop.Link;
|
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.SingleSelectionModel;
|
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
|
import com.arsdigita.bebop.Text;
|
||||||
import com.arsdigita.bebop.event.TableActionEvent;
|
import com.arsdigita.bebop.event.TableActionEvent;
|
||||||
import com.arsdigita.bebop.event.TableActionListener;
|
import com.arsdigita.bebop.event.TableActionListener;
|
||||||
|
import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||||
import com.arsdigita.bebop.table.TableColumn;
|
import com.arsdigita.bebop.table.TableColumn;
|
||||||
import com.arsdigita.bebop.table.TableColumnModel;
|
import com.arsdigita.bebop.table.TableColumnModel;
|
||||||
import com.arsdigita.cms.ItemSelectionModel;
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
import com.arsdigita.cms.ui.ContentItemPage;
|
import com.arsdigita.cms.ui.ContentItemPage;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
|
import com.arsdigita.web.RedirectSignal;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
import org.librecms.contentsection.ContentItemL10NManager;
|
|
||||||
import org.librecms.util.LanguageUtil;
|
import org.librecms.util.LanguageUtil;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays a list of all language instances of an item.
|
* Displays a list of all language instances of an item.
|
||||||
*
|
*
|
||||||
|
|
@ -55,7 +56,8 @@ public class ItemLanguagesTable extends Table {
|
||||||
public static final int COL_DELETE = 2;
|
public static final int COL_DELETE = 2;
|
||||||
|
|
||||||
private final ItemSelectionModel itemSelectionModel;
|
private final ItemSelectionModel itemSelectionModel;
|
||||||
private final SingleSelectionModel<String> langSelectionModel;
|
// private final SingleSelectionModel<String> langSelectionModel;
|
||||||
|
private final StringParameter selectedLanguageParam;
|
||||||
// private final TableColumn deleteColumn;
|
// private final TableColumn deleteColumn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -68,12 +70,14 @@ public class ItemLanguagesTable extends Table {
|
||||||
* selected language.
|
* selected language.
|
||||||
*/
|
*/
|
||||||
public ItemLanguagesTable(final ItemSelectionModel itemSelectionModel,
|
public ItemLanguagesTable(final ItemSelectionModel itemSelectionModel,
|
||||||
final SingleSelectionModel<String> langSelectionModel) {
|
// final SingleSelectionModel<String> langSelectionModel,
|
||||||
|
final StringParameter selectedLanguageParam) {
|
||||||
super();
|
super();
|
||||||
setIdAttr("item_languages_table");
|
setIdAttr("item_languages_table");
|
||||||
|
|
||||||
this.itemSelectionModel = itemSelectionModel;
|
this.itemSelectionModel = itemSelectionModel;
|
||||||
this.langSelectionModel = langSelectionModel;
|
// this.langSelectionModel = langSelectionModel;
|
||||||
|
this.selectedLanguageParam = selectedLanguageParam;
|
||||||
setModelBuilder(new ItemLanguagesTableModelBuilder(itemSelectionModel));
|
setModelBuilder(new ItemLanguagesTableModelBuilder(itemSelectionModel));
|
||||||
|
|
||||||
final TableColumnModel columnModel = getColumnModel();
|
final TableColumnModel columnModel = getColumnModel();
|
||||||
|
|
@ -102,6 +106,8 @@ public class ItemLanguagesTable extends Table {
|
||||||
final int column) {
|
final int column) {
|
||||||
|
|
||||||
final Locale locale = new Locale((String) value);
|
final Locale locale = new Locale((String) value);
|
||||||
|
final String selectedLanguage = (String) state
|
||||||
|
.getValue(selectedLanguageParam);
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final LanguageUtil langUtil = cdiUtil.findBean(
|
final LanguageUtil langUtil = cdiUtil.findBean(
|
||||||
|
|
@ -109,70 +115,114 @@ public class ItemLanguagesTable extends Table {
|
||||||
|
|
||||||
final Label label = new Label(langUtil.getLangFull(locale));
|
final Label label = new Label(langUtil.getLangFull(locale));
|
||||||
|
|
||||||
if (langSelectionModel.getSelectedKey(state).equals(key)) {
|
// if (langSelectionModel.getSelectedKey(state).equals(key)) {
|
||||||
|
if (selectedLanguage.equals(key)) {
|
||||||
// Current variant, no link
|
// Current variant, no link
|
||||||
return label;
|
return label;
|
||||||
} else {
|
} else {
|
||||||
final String target = ContentItemPage.getItemURL(
|
return new ControlLink(label);
|
||||||
itemSelectionModel.getSelectedItem(state),
|
|
||||||
ContentItemPage.AUTHORING_TAB);
|
// final String target = ContentItemPage.getItemURL(
|
||||||
return new Link(label, target);
|
// itemSelectionModel.getSelectedItem(state),
|
||||||
|
// ContentItemPage.AUTHORING_TAB);
|
||||||
|
// return new Link(label, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
columnModel.get(COL_DELETE).setCellRenderer(new TableCellRenderer() {
|
columnModel.get(COL_DELETE)
|
||||||
|
.setCellRenderer(new TableCellRenderer() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getComponent(final Table table,
|
public Component getComponent(final Table table,
|
||||||
final PageState state,
|
final PageState state,
|
||||||
final Object value,
|
final Object value,
|
||||||
final boolean isSelected,
|
final boolean isSelected,
|
||||||
final Object key,
|
final Object key,
|
||||||
final int row,
|
final int row,
|
||||||
final int column) {
|
final int column
|
||||||
|
) {
|
||||||
|
|
||||||
final ControlLink link = new ControlLink(new Label(
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
new GlobalizedMessage("cms.ui.delete",
|
final ItemLanguagesController controller = cdiUtil
|
||||||
CmsConstants.CMS_BUNDLE)));
|
.findBean(ItemLanguagesController.class);
|
||||||
link.setConfirmation(new GlobalizedMessage(
|
final ContentItem item = itemSelectionModel
|
||||||
"cms.ui.delete.confirmation", CmsConstants.CMS_BUNDLE));
|
.getSelectedItem(state);
|
||||||
|
|
||||||
|
if (key
|
||||||
|
.equals(KernelConfig.getConfig().getDefaultLanguage())
|
||||||
|
|| controller.countLanguageVariants(item) <= 1) {
|
||||||
|
return new Text(" ");
|
||||||
|
} else {
|
||||||
|
final ControlLink link = new ControlLink(new Label(
|
||||||
|
new GlobalizedMessage("cms.ui.delete",
|
||||||
|
CmsConstants.CMS_BUNDLE)));
|
||||||
|
link.setConfirmation(new GlobalizedMessage(
|
||||||
|
"cms.ui.delete.confirmation",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return link;
|
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
});
|
addTableActionListener(
|
||||||
|
new TableActionListener() {
|
||||||
addTableActionListener(new TableActionListener() {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cellSelected(final TableActionEvent event)
|
public void cellSelected(final TableActionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
if (event.getColumn() != COL_DELETE) {
|
|
||||||
//Nothing to do
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final ContentItem item = itemSelectionModel
|
final ContentItem item = itemSelectionModel
|
||||||
.getSelectedItem(state);
|
.getSelectedItem(state);
|
||||||
final String selectedLang = (String) event.getRowKey();
|
final String selectedLanguage = (String) event.getRowKey();
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final ContentItemL10NManager l10nManager = cdiUtil.findBean(
|
final ItemLanguagesController controller = cdiUtil
|
||||||
ContentItemL10NManager.class);
|
.findBean(ItemLanguagesController.class);
|
||||||
|
|
||||||
l10nManager.removeLanguage(item, new Locale(selectedLang));
|
switch (event.getColumn()) {
|
||||||
|
case COL_LANGUAGE: {
|
||||||
|
state.setValue(selectedLanguageParam, selectedLanguage);
|
||||||
|
final String langParam = String
|
||||||
|
.format("&%s=%s",
|
||||||
|
ContentItemPage.SELECTED_LANGUAGE,
|
||||||
|
selectedLanguage);
|
||||||
|
final String target = String.join(
|
||||||
|
"",
|
||||||
|
URL.getDispatcherPath(),
|
||||||
|
controller.getItemEditUrl(item),
|
||||||
|
langParam);
|
||||||
|
throw new RedirectSignal(target, true);
|
||||||
|
}
|
||||||
|
case COL_DELETE: {
|
||||||
|
if (selectedLanguage.equals(state.getValue(
|
||||||
|
selectedLanguageParam))) {
|
||||||
|
state.setValue(selectedLanguageParam,
|
||||||
|
KernelConfig.getConfig()
|
||||||
|
.getDefaultLanguage());
|
||||||
|
}
|
||||||
|
controller.removeLanguage(item, selectedLanguage);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
//Nothing to do
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void headSelected(final TableActionEvent event) {
|
public void headSelected(final TableActionEvent event
|
||||||
|
) {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -359,7 +359,11 @@ public class ContentItemL10NManager {
|
||||||
* set with all locales provided by any of the fields. After that the method
|
* set with all locales provided by any of the fields. After that the method
|
||||||
* will iterate over all {@link LocalizedString} fields and check if the
|
* will iterate over all {@link LocalizedString} fields and check if the
|
||||||
* {@link LocalizedString} has an entry for every language in the set. If
|
* {@link LocalizedString} has an entry for every language in the set. If
|
||||||
* not an entry for the language is added.
|
* not an entry for the language is added. The initial value is taken from
|
||||||
|
* the variant for default language configured in
|
||||||
|
* {@link KernelConfig#defaultLanguage}. If no value for the default locale
|
||||||
|
* exists the value for the first found language from the list of supported
|
||||||
|
* languages ({@link KernelConfig#supportedLanguages}) is used.
|
||||||
*
|
*
|
||||||
* @param item The item to normalise. The item <strong>must be</strong> the
|
* @param item The item to normalise. The item <strong>must be</strong> the
|
||||||
* <strong>draft version</strong> of the item! If a <em>live version</em> or
|
* <strong>draft version</strong> of the item! If a <em>live version</em> or
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,9 @@ ay=Aymara
|
||||||
az=Azerbaijani
|
az=Azerbaijani
|
||||||
ba=Bashkir
|
ba=Bashkir
|
||||||
be=Byelorussian
|
be=Byelorussian
|
||||||
bg=Bulgarian
|
|
||||||
bh=Bihari
|
bh=Bihari
|
||||||
bi=Bislama
|
bi=Bislama
|
||||||
bn=Bengali;=Bangla
|
bn=Bengali
|
||||||
bo=Tibetan
|
bo=Tibetan
|
||||||
br=Breton
|
br=Breton
|
||||||
ca=Catalan
|
ca=Catalan
|
||||||
|
|
@ -20,21 +19,21 @@ cs=Czech
|
||||||
cy=Welsh
|
cy=Welsh
|
||||||
da=Danish
|
da=Danish
|
||||||
de=German
|
de=German
|
||||||
dz=Bhutani
|
dz=Dzongkha (Bhutani)
|
||||||
el=Greek
|
el=Greek
|
||||||
en=English
|
en=English
|
||||||
eo=Esperanto
|
eo=Esperanto
|
||||||
es=Spanish
|
es=Spanish
|
||||||
et=Estonian
|
et=Estonian
|
||||||
eu=Basque
|
eu=Basque
|
||||||
fa=Persian
|
fa=Farsi (Persian)
|
||||||
fi=Finnish
|
fi=Finnish
|
||||||
fj=Fiji
|
fj=Fiji
|
||||||
fo=Faroese
|
fo=Faroese
|
||||||
fr=French
|
fr=French
|
||||||
fy=Frisian
|
fy=Frisian
|
||||||
ga=Irish
|
ga=Irish
|
||||||
gd=Scots=Gaelic
|
gd=Scottish Gaelic
|
||||||
gl=Galician
|
gl=Galician
|
||||||
gn=Guarani
|
gn=Guarani
|
||||||
gu=Gujarati
|
gu=Gujarati
|
||||||
|
|
@ -47,17 +46,15 @@ hy=Armenian
|
||||||
ia=Interlingua
|
ia=Interlingua
|
||||||
id=Indonesian
|
id=Indonesian
|
||||||
ie=Interlingue
|
ie=Interlingue
|
||||||
ik=Inupiak
|
ik=Ik
|
||||||
is=Icelandic
|
is=Icelandic
|
||||||
it=Italian
|
it=Italian
|
||||||
iu=Inuktitut
|
iu=Inuktitut
|
||||||
iw=Hebrew
|
|
||||||
ja=Japanese
|
ja=Japanese
|
||||||
jw=Javanese
|
|
||||||
ka=Georgian
|
ka=Georgian
|
||||||
kk=Kazakh
|
kk=Kazakh
|
||||||
kl=Greenlandic
|
kl=Kalaallisut (Greenlandic)
|
||||||
km=Cambodian
|
km=Khmer (Cambodian)
|
||||||
kn=Kannada
|
kn=Kannada
|
||||||
ko=Korean
|
ko=Korean
|
||||||
ks=Kashmiri
|
ks=Kashmiri
|
||||||
|
|
@ -83,11 +80,11 @@ ne=Nepali
|
||||||
nl=Dutch
|
nl=Dutch
|
||||||
no=Norwegian
|
no=Norwegian
|
||||||
oc=Occitan
|
oc=Occitan
|
||||||
om==Oromo
|
om=Oromo
|
||||||
or=Oriya
|
or=Oriya
|
||||||
pa=Punjabi
|
pa=Punjabi
|
||||||
pl=Polish
|
pl=Polish
|
||||||
ps=Pashto,=Pushto
|
ps=Pashto
|
||||||
pt=Portuguese
|
pt=Portuguese
|
||||||
qu=Quechua
|
qu=Quechua
|
||||||
rm=Rhaeto-Romance
|
rm=Rhaeto-Romance
|
||||||
|
|
@ -98,7 +95,6 @@ rw=Kinyarwanda
|
||||||
sa=Sanskrit
|
sa=Sanskrit
|
||||||
sd=Sindhi
|
sd=Sindhi
|
||||||
sg=Sangho
|
sg=Sangho
|
||||||
sh=Serbo-Croatian
|
|
||||||
si=Sinhalese
|
si=Sinhalese
|
||||||
sk=Slovak
|
sk=Slovak
|
||||||
sl=Slovenian
|
sl=Slovenian
|
||||||
|
|
@ -136,6 +132,6 @@ xh=Xhosa
|
||||||
yi=Yiddish
|
yi=Yiddish
|
||||||
yo=Yoruba
|
yo=Yoruba
|
||||||
za=Zhuang
|
za=Zhuang
|
||||||
zh=Chinese
|
zh=Manarin Chinese
|
||||||
zu=Zulu
|
zu=Zulu
|
||||||
--=Undefined
|
--=Undefined
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
aa=Afar
|
||||||
|
ab=Abchasisch
|
||||||
|
af=Afrikaans
|
||||||
|
am=Amharisch
|
||||||
|
ar=Arabisch
|
||||||
|
as=Assamesisch
|
||||||
|
ay=Aymara
|
||||||
|
az=Aserbeidschanisch
|
||||||
|
ba=Baschkirisch
|
||||||
|
be=Wei\u00dfrussisch
|
||||||
|
bh=Bihari
|
||||||
|
bi=Bislama
|
||||||
|
bn=Bengalisch
|
||||||
|
bo=Tibetisch
|
||||||
|
br=Bretonisch
|
||||||
|
ca=Catalanisch
|
||||||
|
co=Korsisch
|
||||||
|
cs=Tschechisch
|
||||||
|
cy=Walisisch
|
||||||
|
da=D\u00e4nisch
|
||||||
|
de=Deutsch
|
||||||
|
dz=Dzongkha (Bhutanisch)
|
||||||
|
el=Griechisch
|
||||||
|
en=Englisch
|
||||||
|
eo=Esperanto
|
||||||
|
es=Spanisch
|
||||||
|
et=Estnisch
|
||||||
|
eu=Baskisch
|
||||||
|
fa=Farsi (Persisch)
|
||||||
|
fi=Finnisch
|
||||||
|
fj=Fidschi
|
||||||
|
fo=F\u00e4r\u00f6isch
|
||||||
|
fr=Franz\u00f6sische
|
||||||
|
fy=Friesisch
|
||||||
|
ga=Irisch
|
||||||
|
gd=Schottisch-g\u00e4lisch
|
||||||
|
gl=Galicisch
|
||||||
|
gn=Guarani
|
||||||
|
gu=Gujarati
|
||||||
|
ha=Hausa
|
||||||
|
he=Ivrit (Hebrew)
|
||||||
|
hi=Hindi
|
||||||
|
hr=Kroatisch
|
||||||
|
hu=Ungarisch
|
||||||
|
hy=Armenisch
|
||||||
|
ia=Interlingua
|
||||||
|
id=Indonesisch
|
||||||
|
ie=Interlingue
|
||||||
|
ik=Ik
|
||||||
|
is=Isl\u00e4ndisch
|
||||||
|
it=Italienisch
|
||||||
|
iu=Inuktitut
|
||||||
|
ja=Japanisch
|
||||||
|
ka=Georgisch
|
||||||
|
kk=Kasachisch
|
||||||
|
kl=Kalaallisut (Gr\u00f6nl\u00e4ndisch)
|
||||||
|
km=Khmer (Kambodschanisch)
|
||||||
|
kn=Kannada
|
||||||
|
ko=Koreanisch
|
||||||
|
ks=Kashmiri
|
||||||
|
ku=Kurdisch
|
||||||
|
ky=Kirgisisch
|
||||||
|
la=Latein
|
||||||
|
ln=Ling\u00e1la
|
||||||
|
lo=Laotisch
|
||||||
|
lt=Litauisch
|
||||||
|
lv=Lettisch
|
||||||
|
mg=Malagasy
|
||||||
|
mi=Maorisch
|
||||||
|
mk=Mazedonisch
|
||||||
|
ml=Malayalam
|
||||||
|
mn=Mongolisch
|
||||||
|
mo=Moldauische
|
||||||
|
mr=Marathi
|
||||||
|
ms=Malaiisch
|
||||||
|
mt=(Malti) Maltesisch
|
||||||
|
my=Birmanisch
|
||||||
|
na=Nauruisch
|
||||||
|
ne=Nepali
|
||||||
|
nl=Niederl\u00e4ndisch
|
||||||
|
no=Norwegisch
|
||||||
|
oc=Okzitanisch
|
||||||
|
om=Oromo
|
||||||
|
or=Oriya
|
||||||
|
pa=Punjabi
|
||||||
|
pl=Polnisch
|
||||||
|
ps=Paschtu
|
||||||
|
pt=Portugiesisch
|
||||||
|
qu=Quechua
|
||||||
|
rm=R\u00e4toromanisch
|
||||||
|
rn=Kirundi
|
||||||
|
ro=Rum\u00e4nisch
|
||||||
|
ru=Russisch
|
||||||
|
rw=Kinyarwanda
|
||||||
|
sa=Sanskrit
|
||||||
|
sd=Sindhi
|
||||||
|
sg=Sangho
|
||||||
|
si=Singhalesisch
|
||||||
|
sk=Slowakisch
|
||||||
|
sl=Slowenisch
|
||||||
|
sm=Samoanisch
|
||||||
|
sn=Shona
|
||||||
|
so=Somali
|
||||||
|
sq=Albanisch
|
||||||
|
sr=Serbisch
|
||||||
|
ss=Siswati
|
||||||
|
st=Sesotho
|
||||||
|
su=Sundanesisch
|
||||||
|
sv=Schwedisch
|
||||||
|
sw=Swahili
|
||||||
|
ta=Tamil
|
||||||
|
te=Telugu
|
||||||
|
tg=Tadschikisch
|
||||||
|
th=Thail\u00e4ndisch
|
||||||
|
ti=Tigrinya
|
||||||
|
tk=Turkmenisch
|
||||||
|
tl=Tagalog
|
||||||
|
tn=Setswana
|
||||||
|
to=Tongaische
|
||||||
|
tr=T\u00fcrkisch
|
||||||
|
ts=Tsonga
|
||||||
|
tt=Tatarisch
|
||||||
|
tw=Twi
|
||||||
|
ug=Uigurisch
|
||||||
|
uk=Ukrainisch
|
||||||
|
ur=Urdu
|
||||||
|
uz=Usbekisch
|
||||||
|
vi=Vietnamesisch
|
||||||
|
vo=Volap\u00fck
|
||||||
|
wo=Wolof
|
||||||
|
xh=Xhosa
|
||||||
|
yi=Jiddisch
|
||||||
|
yo=Yoruba
|
||||||
|
za=Zhuang
|
||||||
|
zh=Mandarin (Chinese)
|
||||||
|
zu=Zulu
|
||||||
|
--=Undefined
|
||||||
|
|
@ -330,3 +330,7 @@ cms.ui.workflow.task.user.add=Assign user
|
||||||
cms.ui.workflow.task.locked_by=Locked by {0}
|
cms.ui.workflow.task.locked_by=Locked by {0}
|
||||||
cms.ui.workflow.task.locked_by_you=Locked by you
|
cms.ui.workflow.task.locked_by_you=Locked by you
|
||||||
cms.ui.edit=Edit
|
cms.ui.edit=Edit
|
||||||
|
cms.ui.language.header=Language
|
||||||
|
cms.ui.language.title=Title
|
||||||
|
cms.ui.action=Action
|
||||||
|
cms.ui.item.language.add=Add language
|
||||||
|
|
|
||||||
|
|
@ -327,3 +327,7 @@ cms.ui.workflow.task.user.add=Benutzer zuordnen
|
||||||
cms.ui.workflow.task.locked_by=Reserviert durch {0}
|
cms.ui.workflow.task.locked_by=Reserviert durch {0}
|
||||||
cms.ui.workflow.task.locked_by_you=Von Ihnen reserviert
|
cms.ui.workflow.task.locked_by_you=Von Ihnen reserviert
|
||||||
cms.ui.edit=Bearbeiten
|
cms.ui.edit=Bearbeiten
|
||||||
|
cms.ui.language.header=Sprache
|
||||||
|
cms.ui.language.title=Titel
|
||||||
|
cms.ui.action=Aktion
|
||||||
|
cms.ui.item.language.add=Sprache hinzuf\u00fcgen
|
||||||
|
|
|
||||||
|
|
@ -286,3 +286,7 @@ cms.ui.workflow.task.user.add=Assign user
|
||||||
cms.ui.workflow.task.locked_by=Locked by {0}
|
cms.ui.workflow.task.locked_by=Locked by {0}
|
||||||
cms.ui.workflow.task.locked_by_you=Locked by you
|
cms.ui.workflow.task.locked_by_you=Locked by you
|
||||||
cms.ui.edit=Edit
|
cms.ui.edit=Edit
|
||||||
|
cms.ui.language.header=Language
|
||||||
|
cms.ui.language.title=Title
|
||||||
|
cms.ui.action=Action
|
||||||
|
cms.ui.item.language.add=Add language
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue