def _translate_word(name, lang=''): """ Helper to get word translations Args: name (str): Word name. Returned as the default value if not translated lang (str): Language code, e.g. "en-us" Returns: str: translated version of resource name """ from lingua_franca.internal import resolve_resource_file if not lang: if lang is None: warn(NoneLangWarning) lang = get_default_loc() lang_code = lang if is_supported_full_lang(lang) else \ get_full_lang_code(lang) filename = resolve_resource_file(join("text", lang_code, name + ".word")) if filename: # open the file try: with open(filename, 'r', encoding='utf8') as f: for line in f: word = line.strip() if word.startswith("#"): continue # skip comment lines return word except Exception: pass return name # use resource name as the word
def nice_duration(duration, lang='', speech=True): """ Convert duration in seconds to a nice spoken timespan Examples: duration = 60 -> "1:00" or "one minute" duration = 163 -> "2:43" or "two minutes forty three seconds" Args: duration: time, in seconds lang (str, optional): a BCP-47 language code, None for default speech (bool): format for speech (True) or display (False) Returns: str: timespan as a string """ if not lang: if lang is None: warn(NoneLangWarning) lang = get_default_loc() if not is_supported_full_lang(lang): # TODO deprecated; delete when 'lang=None' and 'lang=invalid' are removed try: lang = get_full_lang_code(lang) except UnsupportedLanguageError: warn(InvalidLangWarning) lang = get_default_loc() if isinstance(duration, datetime.timedelta): duration = duration.total_seconds() # Do traditional rounding: 2.5->3, 3.5->4, plus this # helps in a few cases of where calculations generate # times like 2:59:59.9 instead of 3:00. duration += 0.5 days = int(duration // 86400) hours = int(duration // 3600 % 24) minutes = int(duration // 60 % 60) seconds = int(duration % 60) if speech: out = "" if days > 0: out += pronounce_number(days, lang) + " " if days == 1: out += _translate_word("day", lang) else: out += _translate_word("days", lang) out += " " if hours > 0: if out: out += " " out += pronounce_number(hours, lang) + " " if hours == 1: out += _translate_word("hour", lang) else: out += _translate_word("hours", lang) if minutes > 0: if out: out += " " out += pronounce_number(minutes, lang) + " " if minutes == 1: out += _translate_word("minute", lang) else: out += _translate_word("minutes", lang) if seconds > 0: if out: out += " " out += pronounce_number(seconds, lang) + " " if seconds == 1: out += _translate_word("second", lang) else: out += _translate_word("seconds", lang) else: # M:SS, MM:SS, H:MM:SS, Dd H:MM:SS format out = "" if days > 0: out = str(days) + "d " if hours > 0 or days > 0: out += str(hours) + ":" if minutes < 10 and (hours > 0 or days > 0): out += "0" out += str(minutes) + ":" if seconds < 10: out += "0" out += str(seconds) return out