From 14c5821afbf903037435769b35428dc15b457dcf Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sat, 14 Dec 2013 02:22:31 +0000 Subject: [PATCH] * some hacks to make pb/pob "Brazilian Portuguese" work as expected even though it's not officially a language according to the ISO standards --- .../filebot/format/MediaBindingBean.java | 2 +- .../sourceforge/filebot/media/ReleaseInfo.java | 17 ++++++++++++----- .../filebot/web/OpenSubtitlesClient.java | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/source/net/sourceforge/filebot/format/MediaBindingBean.java b/source/net/sourceforge/filebot/format/MediaBindingBean.java index 1713cb67..7805189d 100644 --- a/source/net/sourceforge/filebot/format/MediaBindingBean.java +++ b/source/net/sourceforge/filebot/format/MediaBindingBean.java @@ -426,7 +426,7 @@ public class MediaBindingBean { Locale languageSuffix = releaseInfo.getLanguageSuffix(FileUtilities.getName(mediaFile)); if (languageSuffix != null) - return new Locale(languageSuffix.getISO3Language()); // force ISO3 letter-code + return languageSuffix; // require subtitle file if (!SUBTITLE_FILES.accept(mediaFile)) { diff --git a/source/net/sourceforge/filebot/media/ReleaseInfo.java b/source/net/sourceforge/filebot/media/ReleaseInfo.java index 8bdbcac0..78346860 100644 --- a/source/net/sourceforge/filebot/media/ReleaseInfo.java +++ b/source/net/sourceforge/filebot/media/ReleaseInfo.java @@ -449,21 +449,28 @@ public class ReleaseInfo { @SuppressWarnings("unchecked") Comparator order = (Comparator) collator; - Map languageMap = languageMap = new TreeMap(order); + Map languageMap = new TreeMap(order); for (String code : Locale.getISOLanguages()) { - Locale locale = new Locale(code); - languageMap.put(locale.getLanguage(), locale); - languageMap.put(locale.getISO3Language(), locale); + Locale locale = new Locale(code); // force ISO3 language as default toString() value + Locale iso3locale = new Locale(locale.getISO3Language()); + + languageMap.put(locale.getLanguage(), iso3locale); + languageMap.put(locale.getISO3Language(), iso3locale); // map display language names for given locales for (Locale language : new HashSet(asList(supportedDisplayLocale))) { // make sure language name is properly normalized so accents and whatever don't break the regex pattern syntax String languageName = Normalizer.normalize(locale.getDisplayLanguage(language), Form.NFKD); - languageMap.put(languageName.toLowerCase(), locale); + languageMap.put(languageName.toLowerCase(), iso3locale); } } + // unofficial language for pb/pob for Portuguese (Brazil) + Locale brazil = new Locale("pob"); + languageMap.put("pb", brazil); + languageMap.put("pob", brazil); + // remove illegal tokens languageMap.remove(""); languageMap.remove("II"); diff --git a/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java b/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java index 26f9a13e..4bc928a2 100644 --- a/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java +++ b/source/net/sourceforge/filebot/web/OpenSubtitlesClient.java @@ -447,10 +447,12 @@ public class OpenSubtitlesClient implements SubtitleProvider, VideoHashSubtitleS for (Entry entry : xmlrpc.getSubLanguages().entrySet()) { // map id by name subLanguageMap.put(entry.getValue().toLowerCase(), entry.getKey().toLowerCase()); + subLanguageMap.put(entry.getKey().toLowerCase(), entry.getKey().toLowerCase()); // add reverse mapping as well for improved compatibility } // some additional special handling subLanguageMap.put("brazilian", "pob"); + subLanguageMap.put("pob", "pob"); // cache data cache.put(cacheKey, subLanguageMap);