400 неверный запрос - Microsoft Translation API - Jooscript & Java
Я использую библиотеку LibreOffice/JOD для создания PDF-файлов на основе шаблона ODT, который я создал вручную.
Эти шаблоны используют jooscript для заполнения шаблона значениями из базы данных. Два (2) из этих значений базы данных переведены на китайский язык.
Одним из этих значений является строка, которая корректно переводится, однако по состоянию на 19 мая 2017 года другое значение даты и времени не может быть преобразовано.
Я получаю сообщение об ошибке HTTP 400 Bad Request от API.
Страница переводчика выглядит следующим образом:
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
Дата: ДД-МОН-ГГ
Любая помощь приветствуется, так как этот код остается неизменным и работает в течение последних нескольких лет.
Обновлено:
Причина: java.io.IOException: сервер вернул код ответа HTTP: 400 для URL: http://api.microsofttranslator.com/v2/Http.svc/Translate?text=06+December+2017&from=en&to=zh-CHT декабря+2017&from=en&to=zh-CHT
Запрос: Перевести? Text = 06 + декабрь + 2017 & from = en & to = zh-CHT
Обнаружено, что когда мы изменяем текст на что-либо, он дает тот же ответ, то есть перевод "Hello" выдает ту же ошибку.
Ожидаемый ответ: 六 日 十二 月 二零一七年, т.е. 6 дней, 12 месяцев,2017 год. хотя формат меняется с помощью SimpleDateFormat на dd MMM гггг.