这是底层翻译引擎的已知行为,它会剔除任何非语言内容。
一般来说,在翻译中准确地保留非语言内容很难甚至不可能,因为翻译句子的语法结构可能完全不同,因此分隔符没有自然的位置。例如,如果我要将句子“I saw \n the dog”(中间有一个换行符)翻译成德语,纯句子的德语版本是“Ich habe den Hund gesehen”,谓词在句末和中间的宾语。换行符应该放在谓词之后(“Ich habe den Hund gesehen \n”)还是在宾语之前(“Ich habe \n den Hund gesehen”)?
如果文本被分成句子中的段落(或其他块),您可以分别翻译它们,然后再将它们连接起来:
List<Task<String>> tasks = new ArrayList<>();
for (String paragraph : text.split("\n\n")) {
tasks.add(translator.translate(paragraph));
}
Task<String> resultTask = Tasks.whenAll(tasks).onSuccessTask(aVoid -> {
List<String> results = new ArrayList<>();
for (Task<String> task : tasks) {
results.add(task.getResult);
}
return Tasks.forResult(String.join("\n\n", results));
});
或在斯威夫特:
let paragraphs = text.components(separatedBy: "\n\n")
var results = [String]()
for paragraph in paragraphs {
translator.translate(paragraph) { result, error in
guard let unwrappedResult = result else {
// Handle error
return
}
results.append(unwrappedResult)
if (results.count == paragraphs.count) {
let result = results.joined(separator: "\n\n")
// Handle result
}
}
}