首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Java语言环境

更改Java语言环境
EN

Stack Overflow用户
提问于 2015-04-11 06:51:35
回答 2查看 514关注 0票数 0

我正在尝试通过这种方式设置语言环境

代码语言:javascript
复制
Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
Locale.setDefault(ar);

例如,我在这里尝试将编号系统从拉丁文系统更改为阿拉伯系统

代码语言:javascript
复制
int i = 1000;
System.out.println(i);

它不会改变编号系统,它仍然是拉丁文,直到我使用NumberFormat

代码语言:javascript
复制
NumberFormat nf = NumberFormat.getNumberInstance(ar);
String s = nf.format(i);
System.out.println(s);

这样,它就可以正确地打印出阿拉伯数字。我需要一种方法来显示所有的阿拉伯数字,所以请帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-04-13 19:18:47

代码语言:javascript
复制
System.out.println(i);

根据定义,它是一个不受区域设置影响的操作,它不会受到您更改默认Locale的影响。

你可以求助于

代码语言:javascript
复制
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”

以下转换可应用于byteByteshortShortintIntegerlongLong

'd' '\u0064'将参数格式化为十进制整数。将应用localization algorithm

localization algorithm恰好在该部分的正上方进行了描述:

号码定位算法

在获得整数部分、小数部分和指数(根据数据类型而定)的数字后,将应用以下转换:

  1. 字符串中的每个数字字符d都替换为相对于当前语言环境的zero digit z计算的特定于语言环境的数字;如果存在小数分隔符,则给定',' ('\u002c')标志,则通过从最低有效位到最高有效位扫描字符串的整数部分,并以给定的地区grouping size.
  2. If定义的间隔插入分隔符,从而插入地区特定的decimal separator,然后在符号字符(如果有的话)之后和第一个非零数字之前插入地区特定的zero digits。直到字符串的长度等于请求的字段宽度。
  3. 如果该值为负值且给定了'('标志,则在前面附加'(' ('\u0028')并附加')' ('\u0029')。
  4. 如果该值为负(或浮点负零)且未给出'('标志,则对'-' ('\u002d')进行prepended.
  5. If给定'+'标志,并且该值为正或零(或浮点正零),然后将添加一个'+' ('\u002b')。

如果该值为NaN或正无穷大,则将分别输出文字字符串"NaN“或" infinity”。如果值为负无穷大,则在给定'('标志的情况下输出将为“(无穷大)”,否则输出将为"-Infinity“。这些值未本地化。

票数 2
EN

Stack Overflow用户

发布于 2015-04-11 09:09:31

也许您可以尝试为程序中的所有Swing组件设置默认区域设置:

代码语言:javascript
复制
Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
JComponent.setDefaultLocale(ar);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29571853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档