将它用作库时如何更改 epubcheck 的语言环境
How to change the Locale of epubcheck when using it as a library
我有戏了! 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");
编辑 2015 年 11 月 12 日:我添加了代码以支持每个实例的本地化,并向 EpubCheck 存储库发出了拉取请求。您可以在此处查看代码:
我会继续跟踪并根据进展更新此 post。
原回答:
Epubcheck 从 4.0 开始支持 i18n
国际化。您可以在 GitHub wiki 上查看该项目的国际化页面。目前支持en
、ja
、de
、es
、fr
、it
、
以下代码应该可以满足您的需要:
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());
默认输出现在以西班牙语显示:
Result >> Validación usando la versión de reglas epub 2.0.1.
编辑:由于Locale.setDefault()
更改了 JVM 的全局语言环境,因此不适合服务器端使用。
我有戏了! 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");
编辑 2015 年 11 月 12 日:我添加了代码以支持每个实例的本地化,并向 EpubCheck 存储库发出了拉取请求。您可以在此处查看代码:
我会继续跟踪并根据进展更新此 post。
原回答:
Epubcheck 从 4.0 开始支持 i18n
国际化。您可以在 GitHub wiki 上查看该项目的国际化页面。目前支持en
、ja
、de
、es
、fr
、it
、
以下代码应该可以满足您的需要:
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());
默认输出现在以西班牙语显示:
Result >> Validación usando la versión de reglas epub 2.0.1.
编辑:由于Locale.setDefault()
更改了 JVM 的全局语言环境,因此不适合服务器端使用。