def timeago(seconds=0, accuracy=4, format=0, lang="en"):
    """Translate seconds into human-readable.

        :param seconds: seconds (float/int).
        :param accuracy: 4 by default (units[:accuracy]), determine the length of elements.
        :param format: index of [led, literal, dict].
        :param lang: en or cn.
        :param units: day, hour, minute, second, ms.

    >>> timeago(93245732.0032424, 5)
    '1079 days, 05:35:32,003'
    >>> timeago(93245732.0032424, 4, 1)
    '1079 days 5 hours 35 minutes 32 seconds'
    >>> timeago(-389, 4, 1)
    '-6 minutes 29 seconds 0 ms'
    """
    assert format in [0, 1, 2], ValueError("format arg should be one of 0, 1, 2")
    negative = "-" if seconds < 0 else ""
    seconds = abs(seconds)
    if lang == "en":
        units = ("day", "hour", "minute", "second", "ms")
    elif lang == "cn":
        units = (u"天", u"小时", u"分钟", u"秒", u"毫秒")
    times = split_seconds(seconds)
    if format == 2:
        return dict(zip(units, times))

    day, hour, minute, second, ms = times

    if format == 0:
        day_str = (
            "%d %s%s, " % (day, units[0], "s" if day > 1 and lang == "en" else "")
            if day
            else ""
        )
        mid_str = ":".join(("%02d" % i for i in (hour, minute, second)))
        if accuracy > 4:
            mid_str += ",%03d" % ms
        return negative + day_str + mid_str
    elif format == 1:
        # find longest valid fields index (non-zero in front)
        valid_index = 0
        for x, i in enumerate(times):
            if i > 0:
                valid_index = x
                break
        else:
            valid_index = x
        result_str = [
            "%d %s%s"
            % (num, unit, "s" if lang == "en" and num > 1 and unit != "ms" else "")
            for num, unit in zip(times, units)
        ][valid_index:][:accuracy]
        result_str = " ".join(result_str)
        return negative + result_str