<i18n dev> Fwd: Re: Code review request: 7163483 JarSigner -verify -verbose does not format date string according to locale

Jonathan Lu luchsh at linux.vnet.ibm.com
Tue Jun 19 23:36:45 PDT 2012


Hi Naoto,

Thanks for your suggestion.

I've tried SimpleDateFormat, but met the problem of making a common 
pattern string for all Locales.
The Date.toString() approach is using pattern "EEE MMM dd HH:mm:ss zzz 
yyyy", but it does not work for me, failed cases are like "mar. déc. 30 
19:44:43 CST 0002" and "dim. sept. 30 02:49:58 CST 4992" in fr_FR locale.

As described in Java spec, the text, month presentation will use full 
form if the number of pattern letters is 4/3 or more, other wise short 
form or number form will be used. But my problem is that the short/long 
forms in the same locale do not have the same length. So the only 
working pattern for me is "uu MM dd HH:mm:ss zzz yyyy" which is almost 
completely composed by numbers and looks the same in all locales. Any 
better idea on how to modify the pattern?

I've made a simple test to test the vertical alignment of outputs,
http://cr.openjdk.java.net/~luchsh/VerticalAlignmentTest.java

Best regards
  Jonathan

On 06/14/2012 05:02 AM, Naoto Sato wrote:
> Hi Jonathan,
>
> If you need to format dates with exact format you desire, you can use 
> SimpleDateFormat class instead. That way the user would see 
> months/weekdays localized and still you can control the output length. 
> Downside is that the format you specify may not be the preferred one 
> for the user for that locale.
>
> BTW, your regression test sets the default locale to some specific 
> ones, and do not restore the original locale. That could result in 
> some erroneous behavior in the succeeding tests. Original locale 
> should be reset at the end.
>
> Naoto
>
> On 6/13/12 1:52 AM, Jonathan Lu wrote:
>> Hello i18n-dev,
>>
>> Here's a question about output multiple lines in console under different
>> locales, I firstly raised it in security-dev list, and proposed a patch
>> http://mail.openjdk.java.net/pipermail/security-dev/2012-April/004760.html 
>>
>> http://cr.openjdk.java.net/~luchsh/7163483/
>>
>> but found no good solution for the problem of how to format the many
>> fields of time string to be aligned in a column so far, so I'm
>> forwarding the mail to i18n-dev, hope to get some suggestions since it
>> is related to string format in different locales.
>>
>> Weijun has posted the question to core-libs-dev list, but no response 
>> yet.
>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-April/010033.html 
>>
>>
>> Could anybody please help to take a look?
>>
>> Thanks
>> - Jonathan
>>
>> -------- Original Message --------
>> Subject:     Re: Code review request: 7163483 JarSigner -verify -verbose
>> does not format date string according to locale
>> Date:     Tue, 24 Apr 2012 15:06:08 +0800
>> From:     Weijun Wang <weijun.wang at oracle.com>
>> To:     Jonathan Lu <luchsh at linux.vnet.ibm.com>
>> CC:     security-dev at openjdk.java.net
>>
>>
>>
>> Hi Jonathan
>>
>> Some comments:
>>
>> 1. Can you be sure that the new format always has the same length?
>> jarsigner tries to output in a tabular style and each column should be
>> aligned.
>>
>> 2. You might need to reformat the modified line to make it fit into 80
>> characters width.
>>
>> 3. Why not include the test inside the changeset?
>>
>> Thanks
>> Max
>>
>>
>> On 04/23/2012 05:46 PM, Jonathan Lu wrote:
>>>  Hello security-dev,
>>>
>>>  Here's a patch for bug 7163483, could anybody please help to take a 
>>> look?
>>>  http://cr.openjdk.java.net/~luchsh/7163483/
>>>
>>>  The problem is that command "jarsigner -verify -verbose my.jar" 
>>> does not
>>>  format date string according to current locale. following simple test
>>>  case can be used to disclose this problem.
>>>
>>>  /*
>>>  * Copyright (c) 2012 Oracle and/or its affiliates. All rights 
>>> reserved.
>>>  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>  *
>>>  * This code is free software; you can redistribute it and/or modify it
>>>  * under the terms of the GNU General Public License version 2 only, as
>>>  * published by the Free Software Foundation.
>>>  *
>>>  * This code is distributed in the hope that it will be useful, but 
>>> WITHOUT
>>>  * ANY WARRANTY; without even the implied warranty of 
>>> MERCHANTABILITY or
>>>  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
>>>  * version 2 for more details (a copy is included in the LICENSE 
>>> file that
>>>  * accompanied this code).
>>>  *
>>>  * You should have received a copy of the GNU General Public License 
>>> version
>>>  * 2 along with this work; if not, write to the Free Software 
>>> Foundation,
>>>  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
>>>  *
>>>  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 
>>> 94065 USA
>>>  * or visitwww.oracle.com  if you need additional information or 
>>> have any
>>>  * questions.
>>>  */
>>>
>>>  /*
>>>  * Portions Copyright (c) 2012 IBM Corporation
>>>  */
>>>
>>>
>>>  import java.io.ByteArrayOutputStream;
>>>  import java.io.PrintStream;
>>>  import java.util.Locale;
>>>  import sun.security.tools.JarSigner;
>>>
>>>  public class bug7163483 {
>>>
>>>  public static void main(String[] args) throws Exception {
>>>  final String[] arg = { "-verify", "-verbose",
>>>  System.getProperty("java.home")+"/lib/jce.jar"};
>>>
>>>  ByteArrayOutputStream stream = new ByteArrayOutputStream(1024*64);
>>>  PrintStream out = new PrintStream(stream);
>>>  System.setOut(out);
>>>
>>>  Locale.setDefault(Locale.GERMAN);
>>>  JarSigner js = new JarSigner();
>>>  js.run(arg);
>>>
>>>  out.flush();
>>>  String s1 = stream.toString();
>>>  s1 = s1.substring(0, s1.length()/2);
>>>  stream.reset();
>>>
>>>  Locale.setDefault(Locale.FRANCE);
>>>  js = new JarSigner();
>>>  js.run(arg);
>>>
>>>  out.flush();
>>>  String s2 = stream.toString();
>>>  s2 = s2.substring(0, s2.length()/2);
>>>
>>>  if (s1.equals(s2)) {
>>>  System.err.println("Header output for GERMAN locale is:"+s1);
>>>  System.err.println("Header output for FRANCE locale is:"+s2);
>>>  throw new RuntimeException(
>>>  "JarSigner verbose outputs are the same after setting locale!!");
>>>  } else {
>>>  System.err.println("Header output for GERMAN locale is:"+s1);
>>>  System.err.println("Header output for FRANCE locale is:"+s2);
>>>  System.err.println("Test passed!");
>>>  }
>>>  }
>>>  }
>>>
>>>  Thanks and best regards!
>>>  - Jonathan Lu
>>>
>>
>



More information about the i18n-dev mailing list