Tag: 本地化

DateTimeFormatter无法解析德语中没有前导零的日期

我们的客户今天发现了一个有趣的错 考虑以下方法: final DateTimeFormatter englishFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.ENGLISH); System.out.println(LocalDate.parse(“04/01/17”, englishFormatter)); System.out.println(LocalDate.parse(“4/1/17”, englishFormatter)); final DateTimeFormatter germanFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.GERMAN); System.out.println(LocalDate.parse(“01.04.17”, germanFormatter)); System.out.println(LocalDate.parse(“1.4.17”, germanFormatter)); (如果您不知道,这些确实是英语和德语的正确日期。我甚至会说它们是相同的日期[2017年4月1日]。请花点时间考虑一下您认为该应用程序应该返回的内容。 ) 它返回的是以下内容: Exception in thread “main” java.time.format.DateTimeParseException: Text ‘1.4.17’ could not be parsed at index 0 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400) at Main.main(Main.java:20) 英语日期格式使用和不使用前导零。 德语格式仅适用于前导零。 我似乎无法找到一个属性来更改此行为以正常工作。 如何让DateTimeFormatter没有前导零的情况下理解德语日期? 注意:我们的应用程序支持多种语言环境,因此使用特定的DateTimeFormatter (如DateTimeFormatter.ofPattern(“dMyy”) )是完全DateTimeFormatter.ofPattern(“dMyy”)的,特别是因为我们要解析默认的日期格式。

Xerces 2.11.0(Java)中特定于语言环境的消息

我想在我的JAXP和Xerces2中使用特定于语言环境的错误消息。 默认情况下,只有英文消息可用。 第一步是检索消息文件并将它们放入包“org / apache / xerces / impl / msg /” – 完成。 通过使用Locale.setDefault (Locale.GERMANY) ,将显示德语消息,以便这样做。 但我希望消息在每个实例的基础上进行不同的本地化。 因此,一个解析器应返回英文消息,另一个解析器应返回德语消息。 我用来创建SAX2解析器的代码是: org.xml.sax.XMLReader ret = XMLReaderFactory.createXMLReader (); 对于DOM我正在使用DocumentBuilder喜欢这个(非常简化): final DocumentBuilderFactory aDocumentBuilderFactory = DocumentBuilderFactory.newInstance (); final DocumentBuilder aDocBuilder = aDocBuilderFactory.newDocumentBuilder (); final Document doc = aDocumentBuilder.parse (aInputSource); 我找到了类似org.apache.xerces.impl.XMLErrorReporter类的东西,它有一个setLocale(Locale)方法,但是我找不到获取/设置它的方法。 切换到SAX1不是一个选项btw。 任何帮助表示赞赏!

Java / JSF i18n长文本(术语,常见问题)

在大多数情况下,我只是在页面的某处组合了很多短文本字符串。 但在某些情况下,我只有一个包含长静态文本的页面,如术语或常见问题解答。 现在,只需将段落放在资源包中或构建切换到terms_en.xhtml等等。 什么是在JSF中处理长文本的最佳/默认方式?

韩文字符在JTextField上显示为空框

JTextfield没有正确显示韩国JTextfield 。 它显示空框而不是字符。 这是我的应用程序的屏幕截图。

Java Locale区分大小写

我有以下代码来显示当前的区域设置 System.out.println(Locale.getDefault()); System.out.println(new Locale(“en_US”)); 以上给出如下输出 en_US en_us 如何构造一个给出en_US的Locale实例? 编辑 我问这个是因为当我尝试将其设置为默认语言环境时,如果发生任何exception,我的资源即Messages_en_US.properties将被忽略 ResourceBundle.getBundle(“Messages”, new Locale(“en_US”));

如何在Java或Groovy中获取许多语言的数字的序数后缀

我正在构建一个多语言的grails网站,我需要获得英语,法语,西class牙语,德语和意大利语等多种语言的序号后缀 。 我相信这个问题对于多语言网站所有者来说非常普遍。 我发现这篇文章提供了一个解决方案,但它只是英文版。 例如: /** *@value number *@locale Current locale *@returns ordinal suffix for the given number **/ public static String getOrdinalFor(int value, Locale locale) 将给出以下结果: assert getOrdinalFor(1, Locale.ENGLISH) == “st” assert getOrdinalFor(1, Locale.FRENCH) == “er” assert getOrdinalFor(2, Locale.ENGLISH) == “nd” assert getOrdinalFor(3, Locale.ENGLISH) == “rd” assert getOrdinalFor(4, Locale.ENGLISH) == “th” assert getOrdinalFor(4, Locale.FRENCH) […]

使用错误的小数点分隔符在Android格式化货币

我收到瑞典用户的错误报告,说我们的瑞典货币使用了错误的小数分隔符。 NumberFormat enUS = NumberFormat.getCurrencyInstance(Locale.US); NumberFormat enGB = NumberFormat.getCurrencyInstance(Locale.UK); NumberFormat svSE = NumberFormat.getCurrencyInstance(new Locale(“sv”, “SE”)); double cost = 1020d; String fmt = “en_US: %s en_GB %s sv_SE %s”; String text = String.format(fmt, enUS.format(cost), enGB.format(cost), svSE.format(cost)); Log.e(“Format”, text); > Format﹕ en_US: $1,020.00 en_GB £1,020.00 sv_SE 1 020:00 kr 他们说格式应为“1 020,00 kr”。 当我检查格式对象时,看起来它在符号表中有“,”的decimalSeparator,而是“:”的“monetarySeparator”。 有谁知道:实际上是否正确,这是Android / java中的错误还是任何forms的解决方法?

在Java中对多语言环境字符串进行排序

我正在尝试按字符串字段“country”对对象列表进行排序。 每个国家都使用其母语 阿根廷 澳大利亚 Österreich Ελλάδα България… 我想做的是让“България”例如出现在“A *”国家之后,因为字母’Б’对应于拉丁’B’。 我正在尝试使用默认的Collat​​er,但非拉丁名称仍然在列表中排在最后。 到目前为止,这是我的代码: private static final Comparator DOMAIN_COUNTRY_COMPARATOR = new Comparator() { @Override public int compare(DomainTO t, DomainTO t1) { Collator defaultCollator = Collator.getInstance(); return defaultCollator.compare(t.getCountry(), t1.getCountry()); } };

Eclipse RCP应用程序中的动态语言切换

我正在研究具有本地化的Eclipse RCP应用程序。 用户应该能够动态更改应用程序中使用的语言。 在此语言切换期间不应重新启动应用程序。 还应该可以在从左到右书写的语言和从右到左书写的语言之间切换。 是否有(好的)方法来解决这个问题?

java.util.Calendar的非标准语言环境

我们在瑞典有一位客户,使用英文软件。 所以我们设置Locale(en, SV) 。 我们确实希望Calendar类符合国家/地区设置,但它使用语言,并且在此区域设置中它采用美国设置。 因此,我现在正在寻找一种方法,让日历通过标准方式了解新的firstDayOfWeek和minimumDayinFirstWeek设置,而不是手动设置并因此硬编码。 澄清:2010年8月29日在瑞典的CW 34(也在德国和英国),但在美国,据报道为CW 36. 2010年1月1日是星期五和29.08的不同结果.2010一个星期天。 我无法将语言设置本身更改为瑞典语并使用英语后备,因为我们不支持瑞典语作为语言,但Sun / Oracle / ..确实如此,因此Swing UI将混合使用瑞典语和英语文本,这是不可接受的。 只是添加名为“sun.util.resources.CalendarData_en_SV.properties”的属性文件无法解决:它无法读取! 手动作为ResourceBundle是可能的。 不知何故,LocaleData.getCalendarData(Locale)在读取resourcfiles方面有自己的魔力,因为它的源不可用,所以我找不到它。 这里调用该方法: java.util.Calendar.setWeekCountData(Locale) 。 我还找到了java.util.spi包,但它不提供对firstDayOfWeek和minimumDaysInFirstWeek设置的访问。 也许我可以尝试拦截对resourcebundles的调用并使用默认的回退到英语,只允许对CalendarData的调用继续!? 但这听起来很糟糕。 package de.drews.i18n; import java.util.Calendar; import java.util.Locale; import java.util.ResourceBundle; public class Test { /** * @param args */ public static void main(String[] args) { // en_GB = 34 // en_US = […]