
Tafsiri maudhui yaliyopangwa kutoka Java kwa kutumia PolyLingo SDK
By Robert
Tafsiri yaliyomo yaliyopangwa kutoka Java kwa PolyLingo SDK
PolyLingo Java SDK sasa inapatikana kwenye Maven Central. Inashughulikia API kamili ya PolyLingo: tafsiri ya sinkroni, maombi ya kundi, kazi za asinkroni zenye polling, na vituo vyote vya huduma. Inahitaji Java 11 au baadaye, inatumia mteja wa HTTP wa maktaba ya kawaida, na ina utegemezi mmoja tu wa wakati wa utekelezaji: Jackson kwa JSON.
Usanidi
Maven
<dependency>
<groupId>com.usepolylingo</groupId>
<artifactId>polylingo</artifactId>
<version>0.1.0</version>
</dependency>
Gradle
implementation 'com.usepolylingo:polylingo:0.1.0'
Hakuna utegemezi wa ziada wa mteja wa HTTP unaohitajika. SDK inatumia java.net.http.HttpClient kutoka maktaba ya kawaida ya Java 11.
Kuweka mteja
import com.usepolylingo.polylingo.PolyLingo;
PolyLingo client = PolyLingo.builder()
.apiKey(System.getenv("POLYLINGO_API_KEY"))
.build();
Vigezo viwili vya hiari vya builder vinapatikana:
PolyLingo client = PolyLingo.builder()
.apiKey(System.getenv("POLYLINGO_API_KEY"))
.baseUrl("https://api.usepolylingo.com/v1") // chaguo-msingi, badilisha kwa mifumo inayojitegemea
.timeout(Duration.ofSeconds(30)) // chaguo-msingi ni sekunde 120
.build();
Hifadhi ufunguo wako wa API katika variable ya mazingira. Usihifadhi moja kwa moja au kuingiza kwenye udhibiti wa toleo.
SDK inatumia muundo wa builder kila mahali. Hakuna wajenzi wa nafasi, hakuna mpangilio wa lazima wa sehemu. Sehemu zote za hiari zina thamani za msingi za busara ili ubadilishe tu kile unachohitaji.
Kutafsiri yaliyomo
Ombi moja
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!
Builder wa TranslateParams unakubali content na targets kama sehemu zinazohitajika. Vigezo vya hiari ni pamoja na format (plain, markdown, json, au html — hutambuliwa kiotomatiki ikiwa haitajwi), source kama kidokezo cha lugha, na model kama standard (chaguo-msingi) au advanced.
Uhifadhi wa muundo hufanya kazi sawa na sehemu nyingine za API ya PolyLingo. Kwa yaliyomo ya json, thamani za aina ya string tu ndizo zinazotafsiriwa na funguo, uingizaji, na aina zisizo za string haziathiriwi. Kwa markdown, vichwa vinabaki vichwa na sehemu za msimbo zinahifadhiwa kama zilivyo. Kwa html, lebo na sifa zinahifadhiwa na nodi za maandishi pekee ndizo zinazotafsiriwa.
Kutafsiri faili la eneo la JSON
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);
}
});
Ombi moja hushughulikia maeneo yote matatu. Funguo ni sawa na chanzo katika kila faili ya matokeo.
Maombi ya kundi
Tuma hadi vitu 100 vya yaliyomo katika ombi moja, kila kikiwa na id yake na format ya hiari:
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());
}
Vitu vyote vinashiriki orodha ile ile ya targets. id unayotoa huhifadhiwa katika jibu ili uweze kurudisha matokeo kwenye data yako ya chanzo bila kutegemea mpangilio.
Kazi za asinkroni
Kwa hati ndefu au mzigo mkubwa wa tafsiri, API ya kazi inakubali ombi, inarudisha mara moja ID ya kazi, na inakuwezesha kufanya polling kwa matokeo. SDK inashughulikia hili kwa njia mbili.
Wito mmoja unaofanya polling hadi ukamilike
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) + "...")
);
Callback ya onProgress huanzishwa kila polling na nafasi ya sasa kwenye foleni kama nambari kamili, au null ikiwa API haitoi. Tumia hii kuandika maendeleo au kusasisha UI.
Weka kwenye foleni na fanya polling kwa mikono
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()
);
// Fanya polling mwenyewe
Job status = client.jobs().get(job.getJobId());
System.out.println(status.getStatus()); // pending / processing / completed / failed
Vituo vya huduma
// Angalia afya ya API (hakuna ufunguo wa API unahitajika)
HealthResponse health = client.health();
System.out.println(health.getStatus()); // "ok"
// Orodhesha lugha zinazotegemewa (hakuna ufunguo wa API unahitajika)
LanguagesResponse langs = client.languages();
langs.getLanguages().forEach(l ->
System.out.println(l.getCode() + " — " + l.getName())
);
// Angalia matumizi ya tokeni kwa mwezi wa sasa wa bili
UsageResponse usage = client.usage();
System.out.println("Tokens used: " + usage.getUsage().getTokensUsed());
System.out.println("Tokens remaining: " + usage.getUsage().getTokensRemaining());
Usindikaji wa makosa
Makosa yote hayakaguliwi. Hakuna taarifa za lazima za throws, hakuna mnyororo wa makosa yaliyokaguliwa kuondoa:
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 — ufunguo wa API batili, umekosekana, au umefutwa
System.out.println("Auth failed: " + e.getError());
} catch (RateLimitException e) {
// HTTP 429 — kikomo cha kwa dakika kimefikiwa
e.getRetryAfter().ifPresent(s ->
System.out.println("Retry after: " + s + "s")
);
} catch (JobFailedException e) {
// Kazi ya asinkroni imefikia hali ya mwisho ya kushindwa au polling imekwisha muda
System.out.println("Job " + e.getJobId() + " failed: " + e.getError());
} catch (PolyLingoException e) {
// Makosa mengine yote ya API
System.out.println(e.getStatus() + ": " + e.getMessage());
}
RateLimitException.getRetryAfter() inarudisha Optional<Integer> — ipo na idadi ya sekunde za kusubiri ikiwa API inajumuisha thamani hiyo, tupu vinginevyo. JobFailedException.getJobId() inakupa ID ya kazi iliyoshindwa kwa ajili ya kuandika kumbukumbu au mantiki ya jaribio tena.
Vidokezo vya muundo
Maamuzi machache ya kufahamu ikiwa unatazama SDK:
API ya sinkroni. Kila njia inazuia na kurudisha matokeo moja kwa moja. Hakuna Future, hakuna CompletableFuture, hakuna mfululizo wa reactive. Polling ya kazi ni hadithi ya asinkroni ya SDK kwa mzigo mzito — tuma kazi, SDK inafanya polling kwenye thread yako na inaita callback yako ya onProgress wakati nafasi ya foleni inasasishwa.
Muundo wa builder kila mahali. Kila kitu cha params kinatumia builder. Hakuna wajenzi wa nafasi, hakuna kubahatisha mpangilio wa hoja, hakuna kubadilisha sehemu kwa bahati mbaya, na msimbo wazi mahali pa kuitwa.
Utegemezi mmoja wa wakati wa utekelezaji. Jackson kwa serialization ya JSON. Kila kitu kingine ni maktaba ya kawaida. Hakuna OkHttp, hakuna Apache HttpClient, hakuna Guava.
Java 11+. Inatumia java.net.http.HttpClient iliyotolewa katika Java 11. Ikiwa mradi wako unalenga Java 8 au chini, SDK haifanyi kazi.
Marejeleo ya haraka
| Njia | Endpoint | Inahitaji uthibitisho |
|---|---|---|
client.health() | GET /health | Hapana |
client.languages() | GET /languages | Hapana |
client.translate(...) | POST /translate | Ndiyo |
client.batch(...) | POST /translate/batch | Ndiyo |
client.usage() | GET /usage | Ndiyo |
client.jobs().create(...) | POST /jobs | Ndiyo |
client.jobs().get(jobId) | GET /jobs/:id | Ndiyo |
client.jobs().translate(...) | POST /jobs + polling | Ndiyo |
Anza sasa
SDK iko kwenye Maven Central kwenye central.sonatype.com/artifact/com.usepolylingo/polylingo. Chanzo cha msimbo na Javadoc ziko kwenye github.com/UsePolyLingo/polylingo-Java. Nyaraka kamili za API ziko kwenye usepolylingo.com/docs/sdk/java.
Ngazi ya bure inajumuisha tokeni 50,000 kwa mwezi. Hakuna kadi ya mkopo inahitajika.
<dependency>
<groupId>com.usepolylingo</groupId>
<artifactId>polylingo</artifactId>
<version>0.1.0</version>
</dependency>