Skip to content

Commit

Permalink
sub/audio name: avoid " (English)" when there are spaces at start of …
Browse files Browse the repository at this point in the history
…the name

Seen in Modern Family tvshow
  • Loading branch information
courville committed May 11, 2024
1 parent c712c4c commit 2e56e2a
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/com/archos/mediacenter/utils/ISO639codes.java
Original file line number Diff line number Diff line change
Expand Up @@ -372,15 +372,25 @@ public static boolean isLanguageInString(String language, String string) {
return Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(string).matches();
}

public static String removeStartingSpacesAndSurroundingParenthesis(String string) {
String result = string.replaceAll("^\\s+", ""); // Remove starting spaces
if (!result.contains(")(")) { // no nesting parenthesis
result = result.replaceAll("^\\(([^)]*)\\)$", "$1"); // Remove surrounding parenthesis if the content does not contain a closing parenthesis
}
return result;
}

public static String replaceLanguageCodeInString(String string) {
// treat strings being "l_XYZ" or "l_XY" or "XYZ" or "XY" or "title (l_XYZ)" or "title (l_XY)"
// and replace it with locale language corresponding to XY or XYZ letter code
log.debug("replaceLanguageCodeInString: input string=" + string);
if (string == null) return "";
// avoid name=" (l_eng)" with starting space seen in Modern Family show
String cleanString = removeStartingSpacesAndSurroundingParenthesis(string);
String pattern = "(?:^l_([A-Za-z]{2,3}\\b)|\\(l_([A-Za-z]{2,3})\\)$)"; // 2 or 3 letters code
String languageCode = "";
Pattern regexPattern = Pattern.compile(pattern);
Matcher matcher = regexPattern.matcher(string);
Matcher matcher = regexPattern.matcher(cleanString);
String result = "";
if (matcher.find()) {
String languageCode1 = matcher.group(1);
Expand All @@ -389,24 +399,24 @@ public static String replaceLanguageCodeInString(String string) {
if (languageCode1 != null) {
languageCode = languageCode1;
if (languageCode1.equals("und") || languageCode1.equals("Unknown")) result = ""; // und = undefined
else result = capitalizeFirstLetter(string.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode)));
else result = capitalizeFirstLetter(cleanString.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode)));
} else if (languageCode2 != null) {
languageCode = languageCode2;
result = string.replaceAll(pattern, "(" + ISO639codes.getLanguageNameForLetterCode(languageCode) + ")");
result = cleanString.replaceAll(pattern, "(" + ISO639codes.getLanguageNameForLetterCode(languageCode) + ")");
}
} else {
// could be that it is a 2|3 letter code alone: treat this case too
pattern = "^[A-Za-z]{2,3}$"; // 2 or 3 letters code
regexPattern = Pattern.compile(pattern);
matcher = regexPattern.matcher(string);
matcher = regexPattern.matcher(cleanString);
if (matcher.find()) {
languageCode = matcher.group();
log.debug("replaceLanguageCodeInString: languageCode=" + languageCode);
if (languageCode.equals("und") || languageCode.equals("Unknown")) result = ""; // und = undefined
else result = capitalizeFirstLetter(string.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode)));
else result = capitalizeFirstLetter(cleanString.replaceAll(pattern, ISO639codes.getLanguageNameForLetterCode(languageCode)));
} else {
log.error("replaceLanguageCodeInString: no languageCode in " + string);
result = string;
log.error("replaceLanguageCodeInString: no languageCode in " + cleanString);
result = cleanString;
}
}
log.debug("replaceLanguageCodeInString: input={} -> result={}", string, result);
Expand Down

0 comments on commit 2e56e2a

Please sign in to comment.