Doctranslate.io

API를 사용한 문서 영어-포르투갈어 번역 | 완벽 가이드

Đăng bởi

vào

API를 통해 문서를 번역하는 것이 왜 겉보기보다 복잡한가

API를 사용하여 문서를 영어에서 포르투갈어로 번역하는 프로세스를 자동화하는 것은 글로벌 시장에서 운영되는 기업에게 필수적인 요구 사항입니다.
그러나 개발자들은 이 작업이 단순히 텍스트 문자열을 번역 서비스에 전달하는 것 이상의 것을 포함한다는 것을 금방 알게 됩니다.
주요 과제는 문서 파일 형식의 내재된 복잡성과 언어 자체의 미묘한 차이에서 비롯됩니다.

가장 중요한 장애물 중 하나는 원본 문서의 레이아웃과 서식을 보존하는 것입니다.
문서는 단순한 텍스트 모음이 아닙니다. 문서에는 표, 이미지, 머리글, 바닥글, 열, 그리고 완벽하게 유지되어야 하는 복잡한 스타일링이 포함되어 있습니다.
이 구조를 존중하지 않는 모든 번역 프로세스는 시각적으로 깨지고 사용할 수 없는 결과 파일을 생성하여 자동화의 전체 목적을 훼손합니다.

또한, 다양한 파일 유형을 처리하는 것은 주요 기술적 장애물을 제시합니다.
강력한 솔루션은 PDF, DOCX, PPTX, XLSX와 같은 복잡한 형식을 구문 분석할 수 있어야 하며, 각 형식은 고유한 내부 구조와 인코딩 규칙을 가지고 있습니다.
이러한 각 형식에 대한 파서를 처음부터 구축하려고 시도하는 것은 핵심 제품 기능에서 개발자 리소스를 전환시키는 엄청난 작업입니다.
이러한 복잡성은 포르투갈어에서 발견되는 ‘ç’, ‘ã’, ‘é’와 같은 특수 문자를 처리할 때 특히 문자 인코딩 문제로 인해 더욱 심화됩니다.

문서 번역을 위한 Doctranslate API 소개

Doctranslate API는 이러한 정확한 문제를 해결하도록 설계된 목적 지향적인 솔루션으로, 고성능 문서 번역을 위한 강력하면서도 간단한 RESTful 인터페이스를 제공합니다.
파일 구문 분석, 레이아웃 보존 또는 문자 인코딩에 대해 걱정할 필요 없이, 저희 API가 전체 복잡한 워크플로우를 처리합니다.
문서를 제출하고 대상 언어를 지정하기만 하면 원본의 구조와 서식을 완벽하게 반영하는 번역된 파일을 받을 수 있습니다.

저희 API는 글로벌 애플리케이션을 구축하는 개발자에게 몇 가지 주요 이점을 제공합니다.
컨텍스트와 뉘앙스를 이해하는 최첨단 번역 품질에 액세스하여 메시지가 포르투갈어로 정확하게 전달되도록 보장합니다.
전체 프로세스는 비동기식이므로 애플리케이션의 기본 스레드를 차단하지 않고 대용량 문서와 많은 양의 작업을 처리할 수 있습니다.
이 확장 가능한 인프라는 단일 문서 또는 수천 개의 문서를 동일하게 안정적인 성능으로 번역할 수 있음을 의미하며, 이는 엔터프라이즈급 워크플로우에 이상적입니다.

내부적으로 API는 업로드, 상태 확인(폴링), 다운로드의 세 가지 간단한 단계를 따릅니다.
통신은 표준 HTTP 요청을 통해 처리되며, 응답은 깔끔한 JSON 형식으로 제공되어 모든 최신 기술 스택에 통합하는 것을 매우 간단하게 만듭니다.
문서 처리의 엄청난 복잡성을 추상화함으로써 Doctranslate API는 사용자를 위한 훌륭한 소프트웨어를 구축하는 진정으로 중요한 일에 집중할 수 있도록 합니다. 강력한 번역 기능으로 애플리케이션을 향상시키려는 개발자를 위해, Doctranslate.io가 국제 워크플로우를 간소화하기 위해 즉각적이고 정확한 문서 번역을 제공하는 방법을 알아보십시오.

단계별 가이드: API를 사용하여 문서 영어-포르투갈어 번역

저희 API를 프로젝트에 통합하는 과정은 빠르고 간단합니다.
이 가이드는 자격 증명을 얻는 것부터 최종 번역된 문서를 다운로드하는 것까지 필수적인 단계를 안내합니다.
가장 인기 있는 두 가지 백엔드 환경을 다루기 위해 Python과 Node.js 모두에 대한 전체 코드 예제를 제공할 것입니다.

전제 조건: API 키

API를 호출하기 전에 고유한 API 키를 받아야 합니다.
이 키는 요청을 인증하고 계정에 연결합니다.
계정을 등록한 후 Doctranslate 개발자 대시보드에서 키를 찾을 수 있습니다.
API 키를 안전하게 보관하고 클라이언트 측 코드에 노출하지 않도록 유의하십시오.

3단계 번역 워크플로우

번역 작업의 핵심 논리는 모든 크기의 파일을 처리하는 데 매우 효율적인 간단한 비동기 패턴을 따릅니다.
먼저, POST 요청을 /v3/documents 엔드포인트에 보내 소스 문서를 업로드합니다.
API는 고유한 id와 “queued” status로 즉시 응답합니다.
다음으로, 상태가 “done”으로 바뀔 때까지 GET 요청을 /v3/documents/{id}에 보내 번역 진행 상황을 주기적으로 확인합니다.
마지막으로, 번역이 완료되면 GET 요청을 /v3/documents/{id}/result 엔드포인트에 보내 결과 파일을 다운로드합니다.

Python 코드 예제

이 Python 스크립트는 널리 사용되는 requests 라이브러리를 사용하여 전체 워크플로우를 보여줍니다.
문서 업로드, 폴링 메커니즘을 사용한 상태 확인, 최종 결과 다운로드 등 각 단계에 대한 별도의 함수를 정의합니다.
requests 라이브러리가 설치되어 있는지 확인하고 (pip install requests) 자리 표시자 값을 실제 API 키 및 파일 경로로 대체하십시오.


import requests
import time
import os

# --- Configuration ---
API_KEY = "YOUR_API_KEY_HERE" # Replace with your actual API key
BASE_URL = "https://developer.doctranslate.io/api/v3"
FILE_PATH = "./example.docx" # Path to your source document
TARGET_FILE_PATH = "./example_portuguese.docx" # Path to save the translated document
SOURCE_LANG = "en"
TARGET_LANG = "pt"

# --- API Headers ---
headers = {
    "Authorization": f"Bearer {API_KEY}"
}

def upload_document():
    """Step 1: Upload the document to the API."""
    print(f"Uploading file: {FILE_PATH}...")
    try:
        with open(FILE_PATH, "rb") as file:
            files = {
                'file': (os.path.basename(FILE_PATH), file),
                'source_language': (None, SOURCE_LANG),
                'target_language': (None, TARGET_LANG),
            }
            response = requests.post(f"{BASE_URL}/documents", headers=headers, files=files)
            response.raise_for_status() # Raises an exception for bad status codes
            data = response.json()
            print(f"Successfully uploaded document. Document ID: {data['id']}")
            return data['id']
    except requests.exceptions.RequestException as e:
        print(f"Error uploading document: {e}")
        return None

def check_translation_status(document_id):
    """Step 2: Poll the API to check the translation status."""
    print("Checking translation status...")
    while True:
        try:
            response = requests.get(f"{BASE_URL}/documents/{document_id}", headers=headers)
            response.raise_for_status()
            data = response.json()
            status = data.get("status")
            progress = data.get("progress", 0)
            print(f"Status: {status}, Progress: {progress}%")

            if status == "done":
                print("Translation finished successfully!")
                return True
            elif status == "error":
                print("Translation failed.")
                return False

            time.sleep(5) # Wait for 5 seconds before polling again
        except requests.exceptions.RequestException as e:
            print(f"Error checking status: {e}")
            return False

def download_translated_document(document_id):
    """Step 3: Download the translated document."""
    print("Downloading translated file...")
    try:
        response = requests.get(f"{BASE_URL}/documents/{document_id}/result", headers=headers, stream=True)
        response.raise_for_status()
        with open(TARGET_FILE_PATH, "wb") as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"File successfully downloaded to {TARGET_FILE_PATH}")
    except requests.exceptions.RequestException as e:
        print(f"Error downloading file: {e}")

# --- Main Execution Logic ---
if __name__ == "__main__":
    if not os.path.exists(FILE_PATH):
        print(f"Error: File not found at {FILE_PATH}")
    else:
        doc_id = upload_document()
        if doc_id:
            if check_translation_status(doc_id):
                download_translated_document(doc_id)

Node.js 코드 예제

JavaScript 생태계의 개발자들을 위해, 이 Node.js 예제는 동일한 워크플로우를 달성합니다.
HTTP 요청을 위해 axios 라이브러리를 사용하고 멀티파트 파일 업로드를 위해 form-data를 활용합니다.
스크립트를 실행하기 전에 이 패키지들을 설치했는지 확인하십시오 (npm install axios form-data).


const axios = require('axios');
const fs = require('fs');
const path = require('path');
const FormData = require('form-data');

// --- Configuration ---
const API_KEY = 'YOUR_API_KEY_HERE'; // Replace with your actual API key
const BASE_URL = 'https://developer.doctranslate.io/api/v3';
const FILE_PATH = path.join(__dirname, 'example.pdf'); // Path to your source document
const TARGET_FILE_PATH = path.join(__dirname, 'example_portuguese.pdf'); // Path to save result
const SOURCE_LANG = 'en';
const TARGET_LANG = 'pt';

// --- API Headers ---
const headers = {
    'Authorization': `Bearer ${API_KEY}`,
};

// Utility function for polling
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// --- Main async function ---
async function translateDocument() {
    if (!fs.existsSync(FILE_PATH)) {
        console.error(`Error: File not found at ${FILE_PATH}`);
        return;
    }

    let documentId;

    // Step 1: Upload Document
    try {
        console.log(`Uploading file: ${FILE_PATH}...`);
        const form = new FormData();
        form.append('file', fs.createReadStream(FILE_PATH));
        form.append('source_language', SOURCE_LANG);
        form.append('target_language', TARGET_LANG);

        const response = await axios.post(`${BASE_URL}/documents`, form, {
            headers: {
                ...headers,
                ...form.getHeaders(),
            },
        });

        documentId = response.data.id;
        console.log(`Successfully uploaded document. Document ID: ${documentId}`);
    } catch (error) {
        console.error('Error uploading document:', error.response ? error.response.data : error.message);
        return;
    }

    // Step 2: Check Translation Status
    try {
        console.log('Checking translation status...');
        while (true) {
            const response = await axios.get(`${BASE_URL}/documents/${documentId}`, { headers });
            const { status, progress } = response.data;
            console.log(`Status: ${status}, Progress: ${progress}%`);

            if (status === 'done') {
                console.log('Translation finished successfully!');
                break;
            }
            if (status === 'error') {
                console.error('Translation failed.');
                return;
            }
            await sleep(5000); // Wait 5 seconds
        }
    } catch (error) {
        console.error('Error checking status:', error.response ? error.response.data : error.message);
        return;
    }

    // Step 3: Download Translated Document
    try {
        console.log('Downloading translated file...');
        const response = await axios.get(`${BASE_URL}/documents/${documentId}/result`, {
            headers,
            responseType: 'stream',
        });

        const writer = fs.createWriteStream(TARGET_FILE_PATH);
        response.data.pipe(writer);

        await new Promise((resolve, reject) => {
            writer.on('finish', resolve);
            writer.on('error', reject);
        });

        console.log(`File successfully downloaded to ${TARGET_FILE_PATH}`);
    } catch (error) {
        console.error('Error downloading file:', error.response ? error.response.data : error.message);
    }
}

// --- Execute the function ---
translateDocument();

영어-포르투갈어 번역의 주요 고려 사항

API를 사용하여 문서를 영어에서 포르투갈어로 번역할 때, 코드 자체를 넘어 고려해야 할 몇 가지 언어학적 요소가 있습니다.
저희 번역 엔진이 매우 발전되어 있지만, 이러한 미묘한 차이를 아는 것은 결과를 검증하고 관련된 복잡성을 이해하는 데 도움이 될 수 있습니다.
이러한 고려 사항은 최종 문서가 문자 그대로 번역될 뿐만 아니라 문화적으로나 상황적으로 적절한지 확인하는 데 중요합니다.

방언 차이: 브라질 포르투갈어 vs. 유럽 포르투갈어

포르투갈어에는 두 가지 주요 방언이 있습니다: 브라질 포르투갈어 (pt-BR)와 유럽 포르투갈어 (pt-PT).
상호 이해가 가능하지만, 이들은 어휘, 문법, 공식적인 호칭에서 눈에 띄는 차이가 있습니다.
Doctranslate API는 일반 언어 코드 ‘pt’를 사용하며, 이는 두 방언 모두에서 널리 이해되는 번역을 생성하도록 최적화되어 있으며, 일반적으로 더 일반적인 브라질어 변형에 가깝습니다.
특정 시장을 대상으로 하는 고도로 전문화된 콘텐츠의 경우, 해당 지역 원어민의 수동 검토가 항상 최선의 방법입니다.

격식 및 어조 처리

영어는 종종 중립적인 어조를 사용하는 반면, 포르투갈어는 명확하게 구분되는 격식체 (브라질에서는 ‘você’, 포르투갈에서는 ‘o senhor/a senhora’)와 비격식체 (‘tu’) 호칭 형태를 가지고 있습니다.
마케팅 문구, 법률 문서 또는 사용자 인터페이스 텍스트를 번역하려면 적절한 격식 수준에 세심한 주의가 필요합니다.
저희 API의 기본 AI 모델은 방대한 데이터 세트에서 훈련되어 컨텍스트를 인식하고 가장 적합한 대명사와 동사 활용을 선택하지만, 개발자는 문서의 대상 독자를 염두에 두어야 합니다.

성별 및 수 일치

영어와 달리 포르투갈어는 명사가 남성 또는 여성인 성별 언어입니다.
이는 형용사, 관사 및 대명사가 참조하는 명사와 성별 및 수에서 일치해야 함을 의미합니다.
이 문법 규칙은 자동화 시스템에 상당한 어려움을 야기하는데, 단일 영어 형용사가 포르투갈어에서 네 가지 다른 형태를 가질 수 있기 때문입니다.
저희 번역 기술은 이러한 복잡한 문법 구조를 처리하도록 특별히 설계되어 출력이 유창하고 문법적으로 정확하도록 보장합니다.

결론 및 다음 단계

API를 통합하여 문서를 영어에서 포르투갈어로 번역하면 글로벌 확장을 위한 필수 기능이 애플리케이션에 제공됩니다.
Doctranslate API는 파일 구문 분석, 레이아웃 보존 및 언어학적 문제를 처리하여 이 복잡한 프로세스를 단순화하므로 핵심 개발 작업에 집중할 수 있습니다.
제공된 비동기 워크플로우와 명확한 코드 예제를 통해 몇 분 만에 강력하고 확장 가능하며 효율적인 번역 파이프라인을 구축할 수 있습니다.
고급 기능, 지원되는 파일 형식 및 오류 처리에 대한 자세한 내용은 공식 API 설명서를 살펴보시기 바랍니다.

Doctranslate.io - 다양한 언어에서 즉각적이고 정확한 번역

Để lại bình luận

chat