我正在尝试通过这种方式设置语言环境
Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
Locale.setDefault(ar);例如,我在这里尝试将编号系统从拉丁文系统更改为阿拉伯系统
int i = 1000;
System.out.println(i);它不会改变编号系统,它仍然是拉丁文,直到我使用NumberFormat
NumberFormat nf = NumberFormat.getNumberInstance(ar);
String s = nf.format(i);
System.out.println(s);这样,它就可以正确地打印出阿拉伯数字。我需要一种方法来显示所有的阿拉伯数字,所以请帮助。
发布于 2015-04-13 19:18:47
System.out.println(i);根据定义,它是一个不受区域设置影响的操作,它不会受到您更改默认Locale的影响。
你可以求助于
System.out.printf("%d%n", i);这确实尊重当地的环境。
更详细地说:
打印
documentation of PrintStream.println(int)指定:
打印一个整数,然后终止该行。此方法的行为就像它先调用
print(int),然后调用println()。
而print(int) is specified as
打印一个整数。
String.valueOf(int)生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入。
这将我们引向String.valueOf(int)
返回整型参数的字符串表示形式。
该表示形式与一个参数的Integer.toString方法返回的表示形式完全相同。
Integer.toString(int)
返回一个表示指定整数的
String对象。参数被转换为带符号的十进制表示形式,并以字符串的形式返回,就像参数和基数10作为参数提供给toString(int, int)方法一样。
toString(int, int)
…如果第一个参数为负,则结果的第一个元素是ASCII减号字符
'-'('\u002D')。如果第一个参数不是负数,则结果中不会出现符号字符。
结果的其余字符表示第一个参数的大小。如果幅度为零,则由单个零字符'0' ('\u0030')表示;否则,幅度表示的第一个字符将不是零字符。以下ASCII字符用作数字:
这些是通过'\u0039'的'\u0030'和通过'\u007A'的'\u0061'。…
因此,在这条漫长的道路的尽头,我们看到了一个规范,没有为特定于地区的结果留下任何空间。
printf
与specification of PrintStream.printf进行比较(请注意,甚至是overloaded method taking a Locale as first argument):
使用指定的格式化字符串和参数将格式化字符串写入此输出流的便捷方法。
此out.printf(format, args)形式的方法的调用方式与调用的方式完全相同
out.format(format, args)参数:
格式- Format string syntax中描述的格式字符串
Format String Syntax是一个相当大的规范。我们必须查看section “Byte, Short, Integer, and Long”
以下转换可应用于
byte、Byte、short、Short、int和Integer、long和Long。
'd' '\u0064'将参数格式化为十进制整数。将应用localization algorithm。
…
localization algorithm恰好在该部分的正上方进行了描述:
号码定位算法
在获得整数部分、小数部分和指数(根据数据类型而定)的数字后,将应用以下转换:
',' ('\u002c')标志,则通过从最低有效位到最高有效位扫描字符串的整数部分,并以给定的地区grouping size.'('标志,则在前面附加'(' ('\u0028')并附加')' ('\u0029')。'('标志,则对'-' ('\u002d')进行prepended.'+'标志,并且该值为正或零(或浮点正零),然后将添加一个'+' ('\u002b')。如果该值为NaN或正无穷大,则将分别输出文字字符串"NaN“或" infinity”。如果值为负无穷大,则在给定'('标志的情况下输出将为“(无穷大)”,否则输出将为"-Infinity“。这些值未本地化。
发布于 2015-04-11 09:09:31
也许您可以尝试为程序中的所有Swing组件设置默认区域设置:
Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
JComponent.setDefaultLocale(ar);https://stackoverflow.com/questions/29571853
复制相似问题