/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ro.nextreports.server.web.language; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.TrueFileFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LanguageManager { private static final Logger LOG = LoggerFactory.getLogger(LanguageManager.class); public static final String LANGUAGE_ENGLISH = "en"; public static final String COUNTRY_ENGLISH = "US"; public static final String PROPERTY_NAME_ENGLISH = LANGUAGE_ENGLISH + "_" + COUNTRY_ENGLISH; public static final String LANGUAGE_FRENCH = "fr"; public static final String COUNTRY_FRENCH = "FR"; public static final String PROPERTY_NAME_FRENCH = LANGUAGE_FRENCH + "_" + COUNTRY_FRENCH; public static final String LANGUAGE_ROMANIAN = "ro"; public static final String COUNTRY_ROMANIAN = "RO"; public static final String PROPERTY_NAME_ROMANIAN = LANGUAGE_ROMANIAN + "_" + COUNTRY_ROMANIAN; public static final String LANGUAGE_POLISH = "pl"; public static final String COUNTRY_POLISH = "PL"; public static final String PROPERTY_NAME_POLISH = LANGUAGE_POLISH + "_" + COUNTRY_POLISH; public static final String LANGUAGE_RUSSIAN = "ru"; public static final String COUNTRY_RUSSIAN = "RU"; public static final String PROPERTY_NAME_RUSSIAN = LANGUAGE_RUSSIAN + "_" + COUNTRY_RUSSIAN; public static final String LANGUAGE_PORTUGUESE = "pt"; public static final String COUNTRY_BRAZIL = "BR"; public static final String PROPERTY_NAME_PORTUGUESE = LANGUAGE_PORTUGUESE + "_" + COUNTRY_BRAZIL; public static final List<Language> languages = new ArrayList<Language>(); public static final List<String> LANGUAGES = new ArrayList<String>(); private static LanguageManager instance; @SuppressWarnings("unchecked") private LanguageManager() { languages.add(new Language(LANGUAGE_ENGLISH, COUNTRY_ENGLISH, PROPERTY_NAME_ENGLISH)); languages.add(new Language(LANGUAGE_FRENCH, COUNTRY_FRENCH, PROPERTY_NAME_FRENCH)); languages.add(new Language(LANGUAGE_ROMANIAN, COUNTRY_ROMANIAN, PROPERTY_NAME_ROMANIAN)); languages.add(new Language(LANGUAGE_POLISH, COUNTRY_POLISH, PROPERTY_NAME_POLISH)); languages.add(new Language(LANGUAGE_RUSSIAN, COUNTRY_RUSSIAN, PROPERTY_NAME_RUSSIAN)); languages.add(new Language(LANGUAGE_PORTUGUESE, COUNTRY_BRAZIL, PROPERTY_NAME_PORTUGUESE)); LANGUAGES.add(PROPERTY_NAME_ENGLISH); LANGUAGES.add(PROPERTY_NAME_FRENCH); LANGUAGES.add(PROPERTY_NAME_ROMANIAN); LANGUAGES.add(PROPERTY_NAME_POLISH); LANGUAGES.add(PROPERTY_NAME_RUSSIAN); LANGUAGES.add(PROPERTY_NAME_PORTUGUESE); // try to see if other internatinalization filee where added by hand // must have name like NextServerApplication_<lang>_<country>.properties // you must add in all other i18n files the property: // Settings.personalize.language.<lang>_<country> to see it in seetings Collection<File> files = FileUtils.listFiles(new File("."), I18NFileFilter.INSTANCE, TrueFileFilter.INSTANCE); Set<String> fileNames = new HashSet<String>(); for (File file : files) { String name = file.getName(); String baseName = name.substring(0, name.indexOf(".properties")); String[] s = baseName.split("_"); if (s.length == 3) { fileNames.add(name); languages.add(new Language(s[1], s[2], s[1]+"_" +s[2])); LANGUAGES.add(s[1]+"_" +s[2]); } } } public static synchronized LanguageManager getInstance() { if (instance == null) { instance = new LanguageManager(); } return instance; } public Locale getLocale(String languageProperty) { Locale locale = new Locale(getLanguage(languageProperty), getCountry(languageProperty)); Locale.setDefault(locale); return locale; } private String getLanguage(String languageProperty) { for (int i=0; i<languages.size(); i++) { if (languages.get(i).getProperty().equals(languageProperty)) { return languages.get(i).getLanguage(); } } return languages.get(0).getLanguage(); } private String getCountry(String languageProperty) { for (int i=0; i<languages.size(); i++) { if (languages.get(i).getProperty().equals(languageProperty)) { return languages.get(i).getCountry(); } } return languages.get(0).getCountry(); } }