Format wind elements into a readable sentence

    Returns the translation string

    Ex: NNE-020 (variable 010 to 040) at 14kt gusting to 20kt

def wind(direction: Number,
         speed: Number,
         gust: Number,
         vardir: typing.List[Number] = None,  # type: ignore
         unit: str = 'kt',
         cardinals: bool = True,
         spoken: bool = False) -> str:
    """
    Format wind elements into a readable sentence

    Returns the translation string

    Ex: NNE-020 (variable 010 to 040) at 14kt gusting to 20kt
    """
    ret = ''
    target = 'spoken' if spoken else 'repr'
    # Wind direction
    if direction:
        if direction.repr in WIND_DIR_REPR:
            ret += WIND_DIR_REPR[direction.repr]
        elif direction.value is None:
            ret += direction.repr
        else:
            if cardinals:
                ret += get_cardinal_direction(direction.value) + '-'  # type: ignore
            ret += getattr(direction, target)
    # Variable direction
    if vardir and isinstance(vardir, list):
        vardir = [getattr(var, target) for var in vardir]
        ret += ' (variable {} to {})'.format(*vardir)
    # Speed
    if speed and speed.value:
        ret += f' at {speed.value}{unit}'
    # Gust
    if gust and gust.value:
        ret += f' gusting to {gust.value}{unit}'
    return ret