CCM NG/ccm-cms: Missing class
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4452 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
e2765a9109
commit
db8a7d08bc
|
|
@ -0,0 +1,221 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 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.librecms.util;
|
||||||
|
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
|
import com.arsdigita.util.Pair;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.MissingResourceException;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
public class LanguageUtil {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.
|
||||||
|
getLogger(LanguageUtil.class);
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private GlobalizationHelper globalizationHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping from the ISO639-1 2-letter codes to the ISO639-2 3-letter codes
|
||||||
|
*/
|
||||||
|
private static final String ISO639_2LA_3LA = "com.arsdigita.cms.util.iso639rev";
|
||||||
|
private static final ResourceBundle LANG_3LA = ResourceBundle.getBundle(
|
||||||
|
ISO639_2LA_3LA);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping from the ISO639-1 2-letter codes to the full descriptive name
|
||||||
|
*/
|
||||||
|
private static final String ISO639_2LA_FULL = "com.arsdigita.cms.util.iso639full";
|
||||||
|
private static final ResourceBundle LANG_FULL = ResourceBundle.getBundle(
|
||||||
|
ISO639_2LA_FULL);
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ConfigurationManager confManager;
|
||||||
|
|
||||||
|
private List<Locale> supportedLanguages;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
private void init() {
|
||||||
|
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||||
|
KernelConfig.class);
|
||||||
|
supportedLanguages = kernelConfig.getSupportedLanguages()
|
||||||
|
.stream()
|
||||||
|
.map(language -> new Locale(language))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public GlobalizedMessage globalizedLanguageName(final String key) {
|
||||||
|
return new GlobalizedMessage(key, ISO639_2LA_FULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Locale> getSupportedLanguages() {
|
||||||
|
return supportedLanguages;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of the 2 letter language codes of all supported languages.
|
||||||
|
*
|
||||||
|
* @return all supported languages
|
||||||
|
*/
|
||||||
|
public List<String> getSupportedLanguages2LA() {
|
||||||
|
return getSupportedLanguages().stream()
|
||||||
|
.map(locale -> locale.getLanguage())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the collection of all supported languages. Each entry is a pair
|
||||||
|
* of 2 letter code as key and three letter code as value.
|
||||||
|
*
|
||||||
|
* @return all supported languages
|
||||||
|
*/
|
||||||
|
public List<Pair> getSupportedLanguages3LA() {
|
||||||
|
return getSupportedLanguages().stream()
|
||||||
|
.map(locale -> new Pair(locale.getLanguage(),
|
||||||
|
locale.getISO3Language()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the collection of all supported languages. Each entry is a pair
|
||||||
|
* of 2 letter code as key and full language name as a value.
|
||||||
|
*
|
||||||
|
* @return all supported languages
|
||||||
|
*/
|
||||||
|
public List<Pair> getSupportedLanguagesFull() {
|
||||||
|
return getSupportedLanguages().stream()
|
||||||
|
.map(locale -> new Pair(locale.getLanguage(),
|
||||||
|
getLangFull(locale)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns three letter acronym for language code mapped from two letter
|
||||||
|
* code.
|
||||||
|
*
|
||||||
|
* @param lang
|
||||||
|
* @return three letter code for the two letter code. If the resource is not
|
||||||
|
* found then the key itself is returned.
|
||||||
|
*/
|
||||||
|
public String getLang3LA(final String lang) {
|
||||||
|
String threeLA;
|
||||||
|
try {
|
||||||
|
// Lookup 3-letter language code via java.util.Locale
|
||||||
|
threeLA = (new Locale(lang)).getISO3Language();
|
||||||
|
} catch (MissingResourceException ex) {
|
||||||
|
LOGGER.warn("No 3 letter code for \"{}\" available via "
|
||||||
|
+ "Locale#getISO3Language.",
|
||||||
|
lang);
|
||||||
|
LOGGER.warn(ex);
|
||||||
|
|
||||||
|
// If there is none
|
||||||
|
try {
|
||||||
|
// Lookup 3-letter code via ressource bundle
|
||||||
|
threeLA = LANG_3LA.getString(lang);
|
||||||
|
} catch (MissingResourceException mex) {
|
||||||
|
// if there is still no match, log a warning and return the 2-letter code
|
||||||
|
LOGGER.warn("No 3 letter language code for key \"{}\" found.",
|
||||||
|
lang);
|
||||||
|
LOGGER.warn(ex);
|
||||||
|
threeLA = lang;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return threeLA;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the full language name mapped from the two letter acronym.
|
||||||
|
*
|
||||||
|
* @param lang 2 letter language code
|
||||||
|
*
|
||||||
|
* @return full language name for the given two letter code If the resource
|
||||||
|
* is not found then the key itself is returned.
|
||||||
|
*/
|
||||||
|
public String getLangFull(final Locale lang) {
|
||||||
|
// Lookup language name via java.util.Locale
|
||||||
|
String fullName = (lang.getDisplayLanguage(
|
||||||
|
globalizationHelper.getNegotiatedLocale()));
|
||||||
|
|
||||||
|
if (lang.getLanguage().equals(fullName)) {
|
||||||
|
// If that fails
|
||||||
|
try {
|
||||||
|
// Lookup language name vie ressource bundle
|
||||||
|
fullName = LANG_FULL.getString(lang.getLanguage());
|
||||||
|
} catch (MissingResourceException ex) {
|
||||||
|
// If there is still nomatch, log a warning and return 2-letter code
|
||||||
|
LOGGER.warn("Full language name for key \"{}\" not found.",
|
||||||
|
lang);
|
||||||
|
LOGGER.warn(ex);
|
||||||
|
fullName = lang.getLanguage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fullName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLangFull(final String lang) {
|
||||||
|
return getLangFull(new Locale(lang));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes in a list of 2 letter codes and converts into 3 letter codes. Each
|
||||||
|
* entry is pair of 2 letter code as key and 3 letter code as value.
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<Pair> convertTo3LA(final List<String> list) {
|
||||||
|
return list.stream()
|
||||||
|
.map(lang2Code -> new Pair(lang2Code, getLang3LA(lang2Code)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pair> convertToFull(final List<String> list) {
|
||||||
|
return list.stream()
|
||||||
|
.map(lang2Code -> new Pair(lang2Code, getLangFull(lang2Code)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pair> convertToG11N(final List<String> list) {
|
||||||
|
return list.stream()
|
||||||
|
.map(lang2Code -> new Pair(lang2Code,
|
||||||
|
globalizedLanguageName(lang2Code)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue