
___x_cmd_locale_money(){
    local x_
    ___x_cmd_locale_money_ || return $?
    printf "%s\n" "$x_"
}

___X_CMD_LOCALE_MONEY_FP="$___X_CMD_ROOT_DATA/locale/money/unit"

___x_cmd_locale_money_(){
    x_=""
    [ -z "$___X_CMD_LOCALE_MONEY_UNIT" ] || {
        x_="$___X_CMD_LOCALE_MONEY_UNIT"
        return 0
    }

    [ -f "$___X_CMD_LOCALE_MONEY_FP" ] || {
        ___x_cmd_locale_money_update || return $?
    }

    read -r ___X_CMD_LOCALE_MONEY_UNIT <"$___X_CMD_LOCALE_MONEY_FP"
    x_="$___X_CMD_LOCALE_MONEY_UNIT"
}

___x_cmd_locale_money_update(){
    local x_=""
    ___x_cmd_locale_money_update_
    ___x_cmd ensurefp "$___X_CMD_LOCALE_MONEY_FP"
    printf "%s\n" "$x_" >"$___X_CMD_LOCALE_MONEY_FP"
}

___x_cmd_locale_money_update_(){
    x_="$( ___x_cmd_cmds locale -k LC_MONETARY | ___x_cmd_cmds grep "^int_curr_symbol=" 2>/dev/null )"

    x_="${x_#*=\"}"; x_="${x_%" "*}"

    case "$x_" in
        ???)
            x_="${x_%"${x_#???}"}" ;;

        *)
            ___x_cmd_locale_money_update___try_lang_
            [ -z "$x_" ] || return 0

            ___x_cmd_locale_money_update___try_pwsh_
            [ -z "$x_" ] || return 0

            x_="USD"
    esac
}

___x_cmd_locale_money_update___try_pwsh_(){
    if ! ___x_cmd os is win && ! ___x_cmd os is wsl; then
        x_=""
        return 0
    fi

    ___x_cmd_locale_money_update___try_lang_ "$( ___x_cmd pwsh -Command '(Get-Culture).Name' 2>/dev/null )"
}

___x_cmd_locale_money_update___try_lang_(){
    local current_lang="${1:-"${LANG:-"${___X_CMD_LANG}"}"}"

    local ___X_CMD_STR___DASH2UNDERLINE=""
    ___x_cmd_str___dash2underline "$current_lang"
    current_lang="$___X_CMD_STR___DASH2UNDERLINE"

    case "$current_lang" in
        zh)         x_=CNY ;;
        en)         x_=USD ;;

        zh_CN*)     x_=CNY ;;
        zh_HK*)     x_=HKD ;;
        zh_MO*)     x_=MOP ;;
        zh_TW*)     x_=TWD ;;
        *_SG*)      x_=SGD ;;
        ja_JP*)     x_=JPY ;;
        ko_KR*)     x_=KRW ;;
        *_IN*)      x_=INR ;;
        th_TH*)     x_=THB ;;
        vi_VN*)     x_=VND ;;
        id_ID*)     x_=IDR ;;
        ms_MY*)     x_=MYR ;;

        en_GB*)     x_=GBP ;;
        en_IE*)     x_=EUR ;;
        fr_FR*)     x_=EUR ;;
        de_DE*)     x_=EUR ;;
        es_ES*)     x_=EUR ;;
        it_IT*)     x_=EUR ;;
        pt_PT*)     x_=EUR ;;
        nl_NL*)     x_=EUR ;;
        sv_SE*)     x_=SEK ;;
        da_DK*)     x_=DKK ;;
        no_NO*)     x_=NOK ;;
        ru_RU*)     x_=RUB ;;
        pl_PL*)     x_=PLN ;;
        cs_CZ*)     x_=CZK ;;
        hu_HU*)     x_=HUF ;;
        tr_TR*)     x_=TRY ;;
        uk_UA*)     x_=UAH ;;

        en_US*)     x_=USD ;;
        en_CA*)     x_=CAD ;;
        fr_CA*)     x_=CAD ;;
        es_MX*)     x_=MXN ;;

        pt_BR*)     x_=BRL ;;
        es_AR*)     x_=ARS ;;
        es_CL*)     x_=CLP ;;
        es_CO*)     x_=COP ;;
        es_PE*)     x_=PEN ;;

        en_ZA*)     x_=ZAR ;;
        ar_EG*)     x_=EGP ;;

        en_AU*)     x_=AUD ;;
        en_NZ*)     x_=NZD ;;

        *)          x_="" ;;
    esac
}
