import re
import unicodedata
def slugify_title(title):
title = re.sub(r"\.[^.]+$", "", title) # Remove extension
title = re.sub(r"[^\w\s.-]", "", title) # Remove unwanted characters
return title.strip()
def slugify(value):
# 1. Normaliza el texto para separar letras acentuadas (ñ → n, á → a, etc.)
value = unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode()
# 3. Reemplaza espacios y guiones múltiples con un solo guion bajo
return re.sub(r"[-\s]+", "_", value)
def get_deepl_language_code(language_name):
language_mapping = {
"None": "None",
"العربية": "ar",
"Български": "bg",
"中文": "zh",
"繁體中文": "zh-Hant",
"简体中文": "zh-Hans",
"Čeština": "cs",
"Dansk": "da",
"Nederlands": "nl",
"English": "en",
"English (British)": "en-GB",
"English (American)": "en-US",
"Eesti": "et",
"Suomi": "fi",
"Français": "fr",
"Deutsch": "de",
"Ελληνικά": "el",
"Magyar": "hu",
"Indonesia": "id",
"Italiano": "it",
"日本語": "ja",
"한국어": "ko",
"Latviešu": "lv",
"Lietuvių": "lt",
"Norsk (Bokmål)": "nb",
"Polski": "pl",
"Português": "pt",
"Português (Brasil)": "pt-BR",
"Română": "ro",
"Русский": "ru",
"Slovenčina": "sk",
"Slovenščina": "sl",
"Español": "es",
"Svenska": "sv",
"Türkçe": "tr",
"Українська": "uk",
}
return language_mapping.get(language_name)
def get_language_code(language_name):
"""
Convert full language names to ISO 639-1 or 639-2 language codes.
"""
language_map = {
"None": "None",
"Arabic": "ara",
"Bulgarian": "bul",
"Czech": "ces",
"Danish": "dan",
"German": "deu",
"Greek": "ell",
"English": "eng",
"Spanish": "spa",
"Estonian": "est",
"Finnish": "fin",
"French": "fra",
"Hungarian": "hun",
"Indonesian": "ind",
"Italian": "ita",
"Japanese": "jpn",
"Korean": "kor",
"Lithuanian": "lit",
"Latvian": "lav",
"Dutch": "nld",
"Polish": "pol",
"Portuguese": "por",
"Romanian": "ron",
"Russian": "rus",
"Slovak": "slk",
"Slovenian": "slv",
"Swedish": "swe",
"Turkish": "tur",
"Ukrainian": "ukr",
"Chinese": "zho",
}
return language_map.get(language_name)
def language_code_to_name(code):
"""
Convert ISO 639-1 or 639-2 language codes to full language names.
"""
lang_map = {
"eng": "English",
"fre": "French",
"fra": "French",
"ger": "German",
"deu": "German",
"spa": "Spanish",
"spl": "Spanish (Latin)",
"srp": "Serbian",
"hrv": "Croatian",
"slo": "Slovak",
"slk": "Slovak",
"slv": "Slovenian",
"ell": "Greek",
"gre": "Greek",
"ara": "Arabic",
"jpn": "Japanese",
"vie": "Vietnamese",
"ron": "Romanian",
"rum": "Romanian",
"kur": "Kurdish",
"ind": "Indonesian",
"tur": "Turkish",
"mal": "Malayalam",
"per": "Persian",
"fas": "Persian",
"ita": "Italian",
"nld": "Dutch",
"dut": "Dutch",
"por": "Portuguese",
"zho": "Chinese",
"chi": "Chinese",
# Add more as needed
}
return lang_map.get(code.lower(), f"Unknown ({code})")