我使用 LibreOffice/JOD 库根据我手动创建的 ODT 模板生成 PDF 文件。
这些模板使用 jooscript 使用数据库中的值填充模板。这些数据库值中的两 (2) 个被翻译成中文。
其中一个值是正确翻译的字符串,但截至2017 年 5 月 19 日,另一个值无法转换日期时间。
我收到从 API 返回的 HTTP 400 Bad Request 错误消息。
翻译页面如下所示:
package com.anguillafsd.acorn.pam.conf;
import wslite.rest.*
import wslite.http.auth.*
import java.text.SimpleDateFormat
import java.util.Date;
import javax.management.monitor.Monitor.NumericalType;
import com.anguillafsd.acorn.pam.conf.NumericTranslator
import com.anguillafsd.acorn.pam.util.Translatable
class Translator implements Translatable{
def id = *********
def secret = *********
def getToken = {
def client = new RESTClient("https://datamarket.accesscontrol.windows.net/v2/OAuth2-13")
try{
client.post(){
type "application/x-www-form-urlencoded"
urlenc client_id:id , client_secret:secret , scope: "http://api.microsofttranslator.com", grant_type: "client_credentials"
}.json.access_token
}
catch(e){ e.printStackTrace(); return null;}
}
public String translate(String text, String from, String to){
def client = new RESTClient("http://api.microsofttranslator.com/v2/Http.svc/Translate")
client.get(path:'', query:[text:"$text", from:"$from", to:"$to"], headers:["Authorization":"Bearer ${getToken()}"]).xml
}
public String translateDate(Date date,String to){
def numericTranslator = new NumericTranslator()
def df = new SimpleDateFormat("dd MMMM yyyy")
def txt = translate(df.format(date), 'en', to)
def yearMatch = (txt =~ /(\d{4})/)
yearMatch.each {key,value -> key.each { txt = txt.replaceFirst(it, numericTranslator.translate(Long.parseLong(it),to)) }}
def otherMatch = (txt =~ /\d{1,2}/)
otherMatch.each{value -> txt = txt.replaceFirst(value,numericTranslator.translate(Long.parseLong(value),to))}
return txt
}
public String translateNumber(BigInteger number, String to) {
def numericTranslator = new NumericTranslator()
numericTranslator.translate(number,to)
}
}
用于转换日期时间的 jooscript 作为certificate.issueDate
数据库变量如下所示。
${translate(certificate.issueDate?datetime,"en","zh-CHT" )}
日期格式为certificate.issueDate
:dd-MON-yy
感谢您提供任何帮助,因为此代码保持不变并且在过去几年中一直在工作。
更新:
原因:java.io.IOException:服务器返回 HTTP 响应代码:400 用于 URL:http ://api.microsofttranslator.com/v2/Http.svc/Translate?text=06+December+2017&from=en&to=zh-CHT
要求:翻译?text=06+December+2017&from=en&to=zh-CHT
发现当我们将文本更改为任何内容时,它会给出相同的响应,即翻译“Hello”会给出相同的错误。
预期响应: 六日十二月 十月一七年,即 2017 年 12 月 6 日。尽管使用 SimpleDateFormat 将格式更改为 dd MMM yyyy。