กลับไปที่บล็อก
Maven coordinates for the PolyLingo Java SDK alongside a short Java client setup snippet.

แปลเนื้อหาที่มีโครงสร้างจาก Java ด้วย PolyLingo SDK

By Robert

แปลเนื้อหาแบบมีโครงสร้างจาก Java ด้วย PolyLingo SDK

PolyLingo Java SDK พร้อมให้ใช้งานบน Maven Central แล้ว ครอบคลุม PolyLingo API ทั้งหมด: การแปลแบบซิงโครนัส, คำขอแบบกลุ่ม, งานแบบอะซิงโครนัสพร้อมการตรวจสอบสถานะ และจุดเชื่อมต่อยูทิลิตี้ทั้งหมด ต้องการ Java 11 หรือใหม่กว่า ใช้ไคลเอนต์ HTTP จากไลบรารีมาตรฐาน และมีการพึ่งพา runtime เพียงตัวเดียวคือ Jackson สำหรับ JSON


การติดตั้ง

Maven

<dependency>
  <groupId>com.usepolylingo</groupId>
  <artifactId>polylingo</artifactId>
  <version>0.1.0</version>
</dependency>

Gradle

implementation 'com.usepolylingo:polylingo:0.1.0'

ไม่ต้องการการพึ่งพาไคลเอนต์ HTTP เพิ่มเติม SDK ใช้ java.net.http.HttpClient จากไลบรารีมาตรฐาน Java 11


การตั้งค่าไคลเอนต์

import com.usepolylingo.polylingo.PolyLingo;

PolyLingo client = PolyLingo.builder()
    .apiKey(System.getenv("POLYLINGO_API_KEY"))
    .build();

มีพารามิเตอร์ตัวสร้างแบบเลือกได้สองตัว:

PolyLingo client = PolyLingo.builder()
    .apiKey(System.getenv("POLYLINGO_API_KEY"))
    .baseUrl("https://api.usepolylingo.com/v1") // ค่าเริ่มต้น, เปลี่ยนสำหรับอินสแตนซ์ที่โฮสต์เอง
    .timeout(Duration.ofSeconds(30))            // ค่าเริ่มต้นคือ 120 วินาที
    .build();

เก็บคีย์ API ของคุณในตัวแปรแวดล้อม ห้ามเขียนคีย์ลงในโค้ดโดยตรงหรือคอมมิตลงในระบบควบคุมเวอร์ชัน

SDK ใช้รูปแบบ builder ตลอด ไม่มีตัวสร้างตำแหน่ง ไม่มีลำดับฟิลด์ที่ต้องกำหนด ฟิลด์เลือกทั้งหมดมีค่าเริ่มต้นที่เหมาะสม ดังนั้นคุณจึงกำหนดค่าเฉพาะสิ่งที่ต้องการเปลี่ยนแปลงจริงๆ


การแปลเนื้อหา

คำขอเดียว

import com.usepolylingo.polylingo.types.TranslateParams;
import com.usepolylingo.polylingo.types.TranslateResult;

TranslateResult result = client.translate(
    TranslateParams.builder()
        .content("Hello, world!")
        .targets(List.of("es", "fr", "de"))
        .build()
);

result.getTranslations().forEach((lang, text) ->
    System.out.println(lang + ": " + text)
);
// es: ¡Hola, mundo!
// fr: Bonjour le monde !
// de: Hallo Welt!

ตัวสร้าง TranslateParams รับ content และ targets เป็นฟิลด์ที่ต้องระบุ พารามิเตอร์เลือกได้รวมถึง format (plain, markdown, json หรือ html — ตรวจจับอัตโนมัติถ้าไม่ระบุ), source เป็นคำใบ้ภาษา และ model เป็น standard (ค่าเริ่มต้น) หรือ advanced

การรักษารูปแบบทำงานเหมือนกับ API PolyLingo อื่นๆ สำหรับเนื้อหา json จะแปลเฉพาะค่าข้อความเท่านั้น ส่วนคีย์, การซ้อน, และชนิดข้อมูลที่ไม่ใช่ข้อความจะไม่ถูกแตะต้อง สำหรับ markdown หัวข้อยังคงเป็นหัวข้อและบล็อกโค้ดยังคงเหมือนเดิม สำหรับ html แท็กและแอตทริบิวต์จะถูกเก็บไว้และแปลเฉพาะโหนดข้อความ

การแปลไฟล์ JSON locale

import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.file.Files;
import java.nio.file.Path;

ObjectMapper mapper = new ObjectMapper();
String sourceJson = Files.readString(Path.of("messages/en.json"));

TranslateResult result = client.translate(
    TranslateParams.builder()
        .content(sourceJson)
        .format("json")
        .targets(List.of("fr", "de", "ja"))
        .build()
);

result.getTranslations().forEach((locale, translated) -> {
    try {
        Object parsed = mapper.readValue(translated, Object.class);
        String pretty = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(parsed);
        Files.writeString(Path.of("messages/" + locale + ".json"), pretty);
        System.out.println("Wrote messages/" + locale + ".json");
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
});

คำขอเดียวจัดการ locale ทั้งสามไฟล์ คีย์เหมือนกับต้นฉบับในทุกไฟล์ผลลัพธ์


คำขอแบบกลุ่ม

ส่งเนื้อหาสูงสุด 100 รายการในคำขอเดียว แต่ละรายการมี id ของตัวเองและ format แบบเลือกได้:

import com.usepolylingo.polylingo.types.BatchParams;
import com.usepolylingo.polylingo.types.BatchItem;
import com.usepolylingo.polylingo.types.BatchResult;

BatchResult result = client.batch(
    BatchParams.builder()
        .targets(List.of("es", "ja"))
        .addItem(BatchItem.builder().id("title").content("Welcome").build())
        .addItem(BatchItem.builder().id("body").content("Get started today.").build())
        .build()
);

for (BatchItemResult item : result.getResults()) {
    System.out.println(item.getId() + ": " + item.getTranslations());
}

รายการทั้งหมดใช้รายการ targets เดียวกัน id ที่คุณกำหนดจะถูกเก็บไว้ในคำตอบเพื่อให้คุณแมปผลลัพธ์กลับไปยังข้อมูลต้นทางโดยไม่ต้องพึ่งพาลำดับ


งานแบบอะซิงโครนัส

สำหรับเอกสารยาวหรือภาระงานแปลขนาดใหญ่ API งานรับคำขอ, ส่งกลับทันทีพร้อม ID งาน และให้คุณตรวจสอบผลลัพธ์ได้ SDK จัดการสองวิธี

การเรียกครั้งเดียวที่ตรวจสอบจนเสร็จ

import com.usepolylingo.polylingo.types.JobsTranslateParams;

TranslateResult result = client.jobs().translate(
    JobsTranslateParams.builder()
        .content(longArticleText)
        .targets(List.of("fr", "de", "ja", "zh"))
        .pollInterval(Duration.ofSeconds(3))
        .timeout(Duration.ofMinutes(10))
        .onProgress(queuePosition ->
            System.out.println("Queue position: " + queuePosition))
        .build()
);

result.getTranslations().forEach((lang, text) ->
    System.out.println(lang + ": " + text.substring(0, 100) + "...")
);

คอลแบ็ก onProgress จะถูกเรียกในแต่ละรอบตรวจสอบพร้อมตำแหน่งคิวปัจจุบันเป็นจำนวนเต็ม หรือ null หาก API ไม่ส่งกลับ ใช้เพื่อล็อกความคืบหน้าหรืออัปเดต UI

การเข้าคิวและตรวจสอบด้วยตนเอง

import com.usepolylingo.polylingo.types.CreateJobParams;
import com.usepolylingo.polylingo.types.Job;

Job job = client.jobs().create(
    CreateJobParams.builder()
        .content("Translate this.")
        .targets(List.of("es"))
        .build()
);

// ตรวจสอบสถานะด้วยตัวเอง
Job status = client.jobs().get(job.getJobId());
System.out.println(status.getStatus()); // pending / processing / completed / failed

จุดเชื่อมต่อยูทิลิตี้

// ตรวจสอบสถานะ API (ไม่ต้องใช้คีย์ API)
HealthResponse health = client.health();
System.out.println(health.getStatus()); // "ok"

// แสดงรายการภาษาที่รองรับ (ไม่ต้องใช้คีย์ API)
LanguagesResponse langs = client.languages();
langs.getLanguages().forEach(l ->
    System.out.println(l.getCode() + " — " + l.getName())
);

// ตรวจสอบการใช้โทเค็นสำหรับเดือนเรียกเก็บเงินปัจจุบัน
UsageResponse usage = client.usage();
System.out.println("Tokens used: " + usage.getUsage().getTokensUsed());
System.out.println("Tokens remaining: " + usage.getUsage().getTokensRemaining());

การจัดการข้อผิดพลาด

ข้อยกเว้นทั้งหมดเป็นแบบ unchecked ไม่มีการประกาศ throws บังคับ ไม่มีโซ่ข้อยกเว้นที่ต้องจัดการ:

import com.usepolylingo.polylingo.errors.*;

try {
    TranslateResult result = client.translate(
        TranslateParams.builder()
            .content("# Hello")
            .targets(List.of("es", "fr"))
            .format("markdown")
            .build()
    );
} catch (AuthException e) {
    // HTTP 401 — คีย์ API ไม่ถูกต้อง, ขาด หรือถูกเพิกถอน
    System.out.println("Auth failed: " + e.getError());
} catch (RateLimitException e) {
    // HTTP 429 — ถึงขีดจำกัดต่อหนึ่งนาที
    e.getRetryAfter().ifPresent(s ->
        System.out.println("Retry after: " + s + "s")
    );
} catch (JobFailedException e) {
    // งานอะซิงโครนัสถึงสถานะล้มเหลวหรือหมดเวลาตรวจสอบ
    System.out.println("Job " + e.getJobId() + " failed: " + e.getError());
} catch (PolyLingoException e) {
    // ข้อผิดพลาด API อื่นๆ ทั้งหมด
    System.out.println(e.getStatus() + ": " + e.getMessage());
}

RateLimitException.getRetryAfter() คืนค่า Optional<Integer> — มีค่าเป็นจำนวนวินาทีที่ต้องรอถ้า API ส่งค่ามา, ว่างถ้าไม่มี JobFailedException.getJobId() ให้ ID ของงานที่ล้มเหลวสำหรับการบันทึกหรือการลองใหม่


หมายเหตุการออกแบบ

มีการตัดสินใจบางอย่างที่ควรรู้ถ้าคุณกำลังประเมิน SDK:

API แบบซิงโครนัส. ทุกเมธอดบล็อกและคืนค่าผลลัพธ์โดยตรง ไม่มี Future, ไม่มี CompletableFuture, ไม่มี reactive streams การตรวจสอบงานเป็นเรื่องอะซิงโครนัสของ SDK สำหรับภาระงานหนัก — ส่งงาน, SDK ตรวจสอบบนเธรดของคุณและเรียกคอลแบ็ก onProgress เมื่อมีการอัปเดตตำแหน่งคิว

รูปแบบ builder ตลอด. ทุกอ็อบเจ็กต์พารามิเตอร์ใช้ builder ไม่มีตัวสร้างตำแหน่ง หมายความว่าไม่ต้องเดาลำดับอาร์กิวเมนต์ ไม่มีการสลับฟิลด์โดยไม่ตั้งใจ และโค้ดชัดเจนที่จุดเรียกใช้

การพึ่งพา runtime เพียงตัวเดียว. Jackson สำหรับการซีเรียลไลซ์ JSON ทุกอย่างอื่นเป็นไลบรารีมาตรฐาน ไม่มี OkHttp, ไม่มี Apache HttpClient, ไม่มี Guava

Java 11+. ใช้ java.net.http.HttpClient ที่เพิ่มเข้ามาใน Java 11 ถ้าโปรเจกต์ของคุณเป้าหมาย Java 8 หรือต่ำกว่า SDK จะไม่เข้ากัน


อ้างอิงด่วน

วิธีการจุดเชื่อมต่อต้องใช้การยืนยันตัวตน
client.health()GET /healthไม่
client.languages()GET /languagesไม่
client.translate(...)POST /translateใช่
client.batch(...)POST /translate/batchใช่
client.usage()GET /usageใช่
client.jobs().create(...)POST /jobsใช่
client.jobs().get(jobId)GET /jobs/:idใช่
client.jobs().translate(...)POST /jobs + pollingใช่

เริ่มต้น

SDK อยู่บน Maven Central ที่ central.sonatype.com/artifact/com.usepolylingo/polylingo โค้ดต้นฉบับและ Javadoc อยู่ที่ github.com/UsePolyLingo/polylingo-Java เอกสาร API เต็มรูปแบบอยู่ที่ usepolylingo.com/docs/sdk/java

ระดับฟรีรวม 50,000 โทเค็นต่อเดือน ไม่ต้องใช้บัตรเครดิต

<dependency>
  <groupId>com.usepolylingo</groupId>
  <artifactId>polylingo</artifactId>
  <version>0.1.0</version>
</dependency>

รับคีย์ API ของคุณ