如何在将其用作库时更改epubcheck的Locale

时间:2015-11-07 19:42:22

标签: java playframework locale epub

我玩了! 2.4 webapp,用epubcheck 4.0.1验证epub。

epubcheck.jar包含多种语言的本地化。

当我从命令行运行jar时,我收到了本地化的错误消息。

java -Duser.language=es -jar epubcheck.jar some.epub 

Validación usando la versión de reglas epub 2.0.1.
INFO(CSS-007): some.epub/OEBPS/css/style.css(10,3): La propiedad 'font-face' OEBPS/fonts/ABeeZee-Regular.woff hace referencia a un tipo de fuente no estándar application/octet-stream.
INFO(CSS-007): some.epub/OEBPS/css/style.css(16,3): La propiedad 'font-face' OEBPS/fonts/ABeeZee-Italic.woff hace referencia a un tipo de fuente no estándar application/octet-stream.
No se han detectado errores o advertencias.
epubcheck completado

但是当我把它作为一个库运行时,它总是默认为英文。

我试过了:

// set locale for translated messages
Locale locale = new Locale(language); 
Locale.setDefault(locale);
language = Locale.getDefault().getLanguage(); // is "es" now

如何让epubcheck使用它的其他本地化?

编辑:

我得到了epubcheck的输出:

// catch stderror output of epubvalidator
ByteArrayOutputStream ba = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(ba);        
System.setOut(ps);
System.setErr(ps);
EpubCheck epubCheck = new EpubCheck(file);
// .. get stdout as string
String resultString = new String(ba.toByteArray(), "UTF-8");

1 个答案:

答案 0 :(得分:1)

编辑2015年11月12日:我添加了代码以支持每个实例的本地化,并向EpubCheck仓库发出了拉取请求。你可以在这里看到代码:

我将继续跟踪此事并通过开发更新此帖子。

原始回答:

自4.0以来,Epubcheck支持i18n国际化。您可以在项目的GitHub wiki上查看国际化页面。目前支持enjadeesfrit

以下代码应该满足您的需求:

File file = new File("/home/matthew/Desktop/RobinHood-1.0.epub");
Locale l = new Locale("es");
Locale.setDefault(l);

// Create a stream to hold the output
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream old = System.out;
System.setOut(new PrintStream(baos));

// Do epubcheck stuff...
EpubCheck epubCheck = new EpubCheck(file);
epubCheck.validate();

// Flush and reset output stream
System.out.flush();
System.setOut(old);

System.out.println("Result >> " + baos.toString());

默认输出现在以西班牙语显示:

  

结果>> Validaciónusandolaversióndereglas epub 2.0.1。

编辑:由于Locale.setDefault()更改了JVM的全局区域设置,因此不适合服务器端使用。