package net.rrm.ehour.ui.common.panel.datepicker; import com.googlecode.wicket.jquery.core.Options; import com.googlecode.wicket.jquery.ui.form.datepicker.DatePicker; import net.rrm.ehour.config.LocaleUtil; import net.rrm.ehour.ui.common.session.EhourWebSession; import net.rrm.ehour.util.DateUtil; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.internal.HtmlHeaderContainer; import org.apache.wicket.model.IModel; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Locale; public class LocalizedDatePicker extends DatePicker { private static final List<String> KNOWN_COUNTRIES = Arrays.asList("af", "ar-DZ", "ar", "az", "be", "bg", "bs", "ca", "cs", "cy-GB", "da", "de", "el", "en-AU", "en-GB", "en-NZ", "eo", "es", "et", "eu", "fa", "fi", "fo", "fr-CA", "fr-CH", "fr", "gl", "he", "hi", "hr", "hu", "hy", "id", "is", "it", "ja", "ka", "kk", "km", "ko", "ky", "lb", "lt", "lv", "mk", "ml", "ms", "nb", "nl-BE", "nl", "nn", "no", "pl", "pt-BR", "pt", "rm", "ro", "ru", "sk", "sl", "sq", "sr", "sr-SR", "sv", "ta", "th", "tj", "tr", "uk", "vi", "zh-CN", "zh-HK", "zh-TW"); public LocalizedDatePicker(String id, IModel<Date> dateModel) { super(id, dateModel, getPattern(), getOptions()); } private static String getPattern() { Locale locale = EhourWebSession.getEhourConfig().getFormattingLocale(); Locale localeToUse = isSupported(getLanguageTag(locale)) ? locale : Locale.US; return DateUtil.getPatternForDateLocale(localeToUse); } public static Options getOptions() { Locale locale = EhourWebSession.getEhourConfig().getFormattingLocale(); String languageTag = getLanguageTag(locale); return isSupported(languageTag) ? new Options("option", String.format("$.datepicker.regional['%s']", languageTag)) : new Options(); } @Override public void renderHead(HtmlHeaderContainer container) { super.renderHead(container); Locale locale = EhourWebSession.getEhourConfig().getFormattingLocale(); String languageTag = getLanguageTag(locale); if (isSupported(languageTag)) { container.getHeaderResponse().render(JavaScriptHeaderItem.forUrl("js/i18n/jquery-ui-i18n.js")); container.getHeaderResponse().render(JavaScriptHeaderItem.forUrl(String.format("js/i18n/jquery.ui.datepicker-%s.js", languageTag))); } } private static String getLanguageTag(Locale locale) { String languageTag = LocaleUtil.toLanguageTag(locale); String[] languageTags = languageTag.split("-"); // Dutch locale is nl-NL, remove the -NL part if the language is the same as the country return languageTags[0].equalsIgnoreCase(languageTags[1]) ? languageTags[0] : languageTags[0] + "-" + languageTags[1].toUpperCase(); } private static boolean isSupported(String languageTag) { return KNOWN_COUNTRIES.contains(languageTag); } }