Skip to content

Commit 672b3dc

Browse files
committed
api/match-action: convert ISO 639-1 language codes to ISO 639-2
1 parent b91c0c0 commit 672b3dc

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

api/src/misc/subtitle-lang.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// converted from this file https://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt
2+
const LANGUAGE_CODES = {
3+
'aa': 'aar', 'ab': 'abk', 'af': 'afr', 'ak': 'aka', 'sq': 'sqi',
4+
'am': 'amh', 'ar': 'ara', 'an': 'arg', 'hy': 'hye', 'as': 'asm',
5+
'av': 'ava', 'ae': 'ave', 'ay': 'aym', 'az': 'aze', 'ba': 'bak',
6+
'bm': 'bam', 'eu': 'eus', 'be': 'bel', 'bn': 'ben', 'bi': 'bis',
7+
'bs': 'bos', 'br': 'bre', 'bg': 'bul', 'my': 'mya', 'ca': 'cat',
8+
'ch': 'cha', 'ce': 'che', 'zh': 'zho', 'cu': 'chu', 'cv': 'chv',
9+
'kw': 'cor', 'co': 'cos', 'cr': 'cre', 'cs': 'ces', 'da': 'dan',
10+
'dv': 'div', 'nl': 'nld', 'dz': 'dzo', 'en': 'eng', 'eo': 'epo',
11+
'et': 'est', 'ee': 'ewe', 'fo': 'fao', 'fj': 'fij', 'fi': 'fin',
12+
'fr': 'fra', 'fy': 'fry', 'ff': 'ful', 'ka': 'kat', 'de': 'deu',
13+
'gd': 'gla', 'ga': 'gle', 'gl': 'glg', 'gv': 'glv', 'el': 'ell',
14+
'gn': 'grn', 'gu': 'guj', 'ht': 'hat', 'ha': 'hau', 'he': 'heb',
15+
'hz': 'her', 'hi': 'hin', 'ho': 'hmo', 'hr': 'hrv', 'hu': 'hun',
16+
'ig': 'ibo', 'is': 'isl', 'io': 'ido', 'ii': 'iii', 'iu': 'iku',
17+
'ie': 'ile', 'ia': 'ina', 'id': 'ind', 'ik': 'ipk', 'it': 'ita',
18+
'jv': 'jav', 'ja': 'jpn', 'kl': 'kal', 'kn': 'kan', 'ks': 'kas',
19+
'kr': 'kau', 'kk': 'kaz', 'km': 'khm', 'ki': 'kik', 'rw': 'kin',
20+
'ky': 'kir', 'kv': 'kom', 'kg': 'kon', 'ko': 'kor', 'kj': 'kua',
21+
'ku': 'kur', 'lo': 'lao', 'la': 'lat', 'lv': 'lav', 'li': 'lim',
22+
'ln': 'lin', 'lt': 'lit', 'lb': 'ltz', 'lu': 'lub', 'lg': 'lug',
23+
'mk': 'mkd', 'mh': 'mah', 'ml': 'mal', 'mi': 'mri', 'mr': 'mar',
24+
'ms': 'msa', 'mg': 'mlg', 'mt': 'mlt', 'mn': 'mon', 'na': 'nau',
25+
'nv': 'nav', 'nr': 'nbl', 'nd': 'nde', 'ng': 'ndo', 'ne': 'nep',
26+
'nn': 'nno', 'nb': 'nob', 'no': 'nor', 'ny': 'nya', 'oc': 'oci',
27+
'oj': 'oji', 'or': 'ori', 'om': 'orm', 'os': 'oss', 'pa': 'pan',
28+
'fa': 'fas', 'pi': 'pli', 'pl': 'pol', 'pt': 'por', 'ps': 'pus',
29+
'qu': 'que', 'rm': 'roh', 'ro': 'ron', 'rn': 'run', 'ru': 'rus',
30+
'sg': 'sag', 'sa': 'san', 'si': 'sin', 'sk': 'slk', 'sl': 'slv',
31+
'se': 'sme', 'sm': 'smo', 'sn': 'sna', 'sd': 'snd', 'so': 'som',
32+
'st': 'sot', 'es': 'spa', 'sc': 'srd', 'sr': 'srp', 'ss': 'ssw',
33+
'su': 'sun', 'sw': 'swa', 'sv': 'swe', 'ty': 'tah', 'ta': 'tam',
34+
'tt': 'tat', 'te': 'tel', 'tg': 'tgk', 'tl': 'tgl', 'th': 'tha',
35+
'bo': 'bod', 'ti': 'tir', 'to': 'ton', 'tn': 'tsn', 'ts': 'tso',
36+
'tk': 'tuk', 'tr': 'tur', 'tw': 'twi', 'ug': 'uig', 'uk': 'ukr',
37+
'ur': 'urd', 'uz': 'uzb', 've': 'ven', 'vi': 'vie', 'vo': 'vol',
38+
'cy': 'cym', 'wa': 'wln', 'wo': 'wol', 'xh': 'xho', 'yi': 'yid',
39+
'yo': 'yor', 'za': 'zha', 'zu': 'zul'
40+
}
41+
42+
export const convertSubtitleLanguage = (code) => {
43+
return LANGUAGE_CODES[code.toLowerCase()] || null;
44+
}

api/src/processing/match-action.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { createResponse } from "./request.js";
44
import { audioIgnore } from "./service-config.js";
55
import { createStream } from "../stream/manage.js";
66
import { splitFilenameExtension } from "../misc/utils.js";
7+
import { convertSubtitleLanguage } from "../misc/subtitle-lang.js";
78

89
const extraProcessingTypes = ["merge", "remux", "mute", "audio", "gif"];
910

@@ -238,6 +239,19 @@ export default function({
238239
responseType = "local-processing";
239240
}
240241

242+
// extractors return ISO 639-1 language codes,
243+
// but video players expect ISO 639-2, so we convert them here
244+
if (defaultParams.fileMetadata?.sublanguage) {
245+
const code = convertSubtitleLanguage(defaultParams.fileMetadata.sublanguage);
246+
if (code) {
247+
defaultParams.fileMetadata.sublanguage = code;
248+
} else {
249+
// if a language code couldn't be converted,
250+
// then we don't want it at all
251+
delete defaultParams.fileMetadata.sublanguage;
252+
}
253+
}
254+
241255
return createResponse(
242256
responseType,
243257
{ ...defaultParams, ...params }

0 commit comments

Comments
 (0)