gpt4 book ai didi

java - 是否可以在同一个 MessageFormat 中使用多个 Locales?

转载 作者:行者123 更新时间:2023-12-05 04:38:19 25 4
gpt4 key购买 nike

我在下面有以下 JSON 示例:

{
"value": 946.2,
"description": "O valor é R$ 946,20."
}

我需要使用 MessageFormat 来 JUnit 测试这个 JSON 示例,但我得到了一个无效值,因为我的语言环境不是英语。如果我将语言环境更改为英语而不是巴西葡萄牙语,我会收到无效描述,因为货币值以英语显示。

这是我的代码:

import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.Locale;

Locale.setDefault(Locale.ENGLISH);

System.out.println(MessageFormat.format("""
'{'
"value": {0},
"description": "O valor é {0,number,currency}."
'}'
""", new BigDecimal(946.2)));

如何格式化值或描述以获得上面显示的 JSON?

最佳答案

这是一个 String.format 解决方案,具有两个内部(本地化、自定义)NumberFormatters:

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Locale;

public class OtherMain {

private static final Locale LOCALE_PT_BR = new Locale.Builder().
setLanguage("pt").
setRegion("BR").
build();

private static final NumberFormat DEFAULT_NUMBER_FMT
= NumberFormat.getNumberInstance(Locale.US);
private static final NumberFormat MY_SPECIAL_NUMBER_FMT
= NumberFormat.getCurrencyInstance(LOCALE_PT_BR);

static {
// this disables "thousands sperarator", we can adjust DEFAULT_NUMBER_FMT as well...
MY_SPECIAL_NUMBER_FMT.setGroupingUsed(false);
}

public static void main(String[] args) {
final BigDecimal num = new BigDecimal(99946.2);
System.out.format("""
{
"value": %s,
"description": "O valor é %s."
}
""",
DEFAULT_NUMBER_FMT.format(num),
MY_SPECIAL_NUMBER_FMT.format(num)
);
}
}

打印:

{
"value": 99,946.2,
"description": "O valor é R$ 99946,20."
}

关于java - 是否可以在同一个 MessageFormat 中使用多个 Locales?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70629200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com