Bob Schellink wrote: > Looks promising. I think Click uses Java ResourceBundle.getBundle to load its > properties, so this > might require a bit of rework. If you are interested have a look at > ClickUtils.getBundle implementation.
Oh. Forget about "properties files encoding" ;-) As i can see ResourceBundle.getBundle doesn't support encodings other than ISO8859-1 java.util.ResourceBundle line 2428: bundle = new PropertyResourceBundle(stream); //here must be (reader) ClassLoader hack (our own classloader, who forward calls to Thread.currentThread().getContextClassLoader()) looks too troubled. On Thu, Jan 14, 2010 at 19:23, Andrey P.Rybin <[email protected]> wrote: > I'll try to write here. > > 1. Bug fix: > I like freemarker's, dependencies in separate jars and i haven't > 'velocity' in my classpath. > So I found bug: common click core depends on Velocity. > > Namely: > org.apache.click.ClickServlet.java > org.apache.click.util.ErrorReport.java > > They both depend on > org.apache.velocity.exception.ParseErrorException (search: > instanceof ParseErrorException) > and require Velocity be present in classpath even if freemarker are used. > > > My workaround: > I made fake public class ParseErrorException extends Exception {}. > > > But you can make generic solution, for example: > > TemplateService > + boolean isParseErrorException (Exception e) > + Map<String, Object> describeParseErrorException (Exception e) > > > > === > 2. org.apache.click.util.ClickUtils.java > Instead of few .close(SomeIoObject) methods you can use ONE: > > public static void close (Closeable someStreamOrWriter) { > if (someStreamOrWriter != null) { > try { > someStreamOrWriter.close(); > } catch (Throwable ignore) {} //don't believe in IOException > } > }//close > > > My own code looks like this: > public static void close (@Nullable Closeable someStreamOrWriter) { > if (someStreamOrWriter != null) { > try { > someStreamOrWriter.close(); > } catch (Throwable e) { > log.debug("close: can't close "+ someStreamOrWriter, e); > } > }//i > }//close > > > All them: reader, writer and streams implement Closeable. > > > ==== > 3. properties files encoding > > J2SE 5.0 reached its End of Service Life (EOSL) on November 3, 2009 > > So we can try to use some Java6 features with care. > > For example (somewhere in Click core): > > private static volatile Boolean java6;//def: null=unknown > > public static void loadProperties (Properties properties, InputStream > in, final Charset charset) > throws IOException, IllegalArgumentException { > > if (java6 == null) { //1st run > try { > java6 = Properties.class.getMethod("load", Reader.class) != null; > } catch (Exception ignore) { > java6 = false; > }//t > }//i > > if (java6.booleanValue()) { > properties.load(new InputStreamReader(in, charset)); > > } else { //older than 1.6. load(Reader) not supported > properties.load(in); > }//i > }//loadProperties > > Profit: click property files can be in UTF-8 encoding instead of that > ugly \u1234\u1234\u1234\u1234\u1234\u1234\u1234\u1234\u1234\u1234 > > and it is full backward compatible - you don't need to convert ISO > 8859-1 encoded property files (with these \ucafe\ubebe) to UTF-8. > But you can. > > > > 4. I made russian translation for click-control_ru.properties > Attached. > > >> If I have found bug in Click core and have few small improvements - >> can I write about them to this community or must use dev-list or JIRA >> instead? >
