Erfahren Sie, wie Sie die PTC API verwenden, um dynamische Inhalte in Ihrer Ruby on Rails (RoR)-Anwendung zu übersetzen. Dazu gehören Blogbeiträge, Produktinformationen und jeder Text, der in Ihrer Datenbank gespeichert ist.
Im Folgenden führen wir Sie in zwei Teilen durch den Prozess der Übersetzung dynamischer Inhalte in Rails-Anwendungen:
- Zunächst lernen Sie die drei API-Endpunkte einzeln kennen – wie Sie Inhalte zur Übersetzung senden, den Status prüfen und fertige Übersetzungen abrufen.
- Anschließend sehen Sie, wie Sie diese Endpunkte mithilfe von Callbacks oder Polling zu einem vollständigen Workflow verbinden.
Bevor Sie starten
Dieser Leitfaden setzt voraus, dass Sie eine Rails-Anwendung eingerichtet haben und eine Möglichkeit zum Speichern von Übersetzungen nutzen (z. B. Mobility, Globalize oder eine eigene Lösung).
Wenn Sie bei null anfangen oder eine vollständige Implementierung sehen möchten, haben wir eine Demo-Rails-Anwendung erstellt, die die PTC-Integration von Anfang bis Ende zeigt. Die Demo verwendet:
- Mobility zum Speichern von Übersetzungen
- dotenv-rails für Umgebungsvariablen
- delayed_job_active_record für die Hintergrundverarbeitung
PTC einrichten und Ihr API-Token erhalten
Um loszulegen, benötigen Sie ein PTC-Konto und ein API-Token:
- Registrieren Sie sich bei PTC. Das Erstellen eines Kontos ist kostenlos, und Sie können 20.000 Wörter ohne Kosten in 2 Sprachen übersetzen. Anschließend zahlen Sie nur für das, was Sie übersetzen.
- Erstellen Sie ein neues Projekt und wählen Sie API-Integration.
- Kopieren Sie das API-Token, das PTC am Ende der Projekteinrichtung generiert. Sie benötigen dieses Token, um alle Anfragen zu authentifizieren. Sie finden dasselbe Token auch in Ihrem Projekt-Dashboard unter Einstellungen → API-Tokens verwalten.
API-Endpunkte zum Übersetzen dynamischer Inhalte
1
Inhalte zur Übersetzung senden
Um Inhalte zu übersetzen, verwenden Sie den Endpunkt Create Content Translation. Damit wird Ihre Übersetzung eingeplant und eine ID zurückgegeben, mit der Sie den Fortschritt verfolgen und Ergebnisse abrufen können.
Endpunkt:
POST https://app.ptc.wpml.org/api/v1/content_translationParameter:
data(erforderlich) – Der zu übersetzende Inhalt als Hashname(erforderlich) – Eine Bezeichnung für diesen Übersetzungsauftrag (z. B."post-123-translation")target_languages(optional) – Ein Array von Sprachcodes (z. B.["es", "fr", "de"])callback_url(optional) – Eine URL, an die PTC Sie benachrichtigt, sobald Übersetzungen
Hier ist ein Beispiel-Service, der die Übersetzung startet:
require 'net/http'
require 'uri'
module Ptc
class TranslateService
def initialize(data:, name: ,target_languages:, callback_url: nil)
@data = data
@name = name
@target_languages = target_languages
@token = ENV.fetch("PTC_API_TOKEN")
@callback_url = callback_url
end
def call
translate
end
def self.call(**attributes)
new(**attributes).call
end
private
attr_reader :data, :name, :target_languages, :token, :callback_url
def translate
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)
end
def body
{
data:,
name:,
target_languages:,
callback_url:,
}.to_json
end
def request
return @request if @request.present?
@request ||= Net::HTTP::Post.new(uri)
@request.content_type = "application/json"
@request.body = body
@request["Authorization"] = "Bearer #{token}"
@request
end
def uri
@uri ||= URI.parse("https://app.ptc.wpml.org/api/v1/content_translation")
end
end
end
Für vollständige Antwortdetails, Fehlercodes und weitere Beispiele siehe die Create Content Translation API-Dokumentation.
2
Übersetzungsstatus prüfen
Um zu prüfen, ob Ihre Übersetzung abgeschlossen ist, verwenden Sie den Endpunkt Get Content Translation Status. Dieser gibt den aktuellen Status und den Übersetzungsfortschritt zurück.
Endpunkt:
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}/statusParameter:
id(erforderlich) – Die eindeutige Kennung des zu prüfenden Content-Translation-Jobs
Beispiel-Service in Rails:
require 'net/http'
require 'uri'
module Ptc
class GetTranslationStatusService
def initialize(id:)
@id = id
@token = ENV.fetch("PTC_API_TOKEN")
end
def call
get
end
def self.call(**attributes)
new(**attributes).call
end
private
attr_reader :id, :token
def get
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)
end
def request
return @request if @request.present?
@request ||= Net::HTTP::Get.new(uri)
@request.content_type = "application/json"
@request["Authorization"] = "Bearer #{token}"
@request
end
def uri
@uri ||= URI.parse("https://app.ptc.wpml.org/api/v1/content_translation/#{id}/status")
end
end
end
Die Antwort enthält ein Statusfeld und einen Prozentwert, der den Übersetzungsfortschritt anzeigt. Für vollständige Antwortdetails siehe die Get Content Translation API-Dokumentation.
3
Übersetzungen abrufen
Sobald Ihre Übersetzung abgeschlossen ist, verwenden Sie den Endpunkt Get Content Translations, um die Ergebnisse abzurufen. Dieser gibt Ihre Originalinhalte sowie übersetzte Versionen für jede Zielsprache zurück.
Endpunkt:
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}Parameter:
id(erforderlich) – Die eindeutige Kennung des abzurufenden Content-Translation-Jobs
Beispiel in Rails:
require 'net/http'
require 'uri'
module Ptc
class GetTranslationService
def initialize(id:)
@id = id
@token = ENV.fetch("PTC_API_TOKEN")
end
def call
get
end
def self.call(**attributes)
new(**attributes).call
end
private
attr_reader :id, :token
def get
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)
end
def request
return @request if @request.present?
@request ||= Net::HTTP::Get.new(uri)
@request.content_type = "application/json"
@request["Authorization"] = "Bearer #{token}"
@request
end
def uri
@uri ||= URI.parse("https://app.ptc.wpml.org/api/v1/content_translation/#{id}")
end
end
end
Benachrichtigt werden, wenn Übersetzungen bereit sind
Sie haben gelernt, wie Sie Inhalte senden, den Status prüfen und Übersetzungen abrufen. Jetzt müssen Sie diese Schritte verbinden, damit Ihre App automatisch weiß, wann sie Übersetzungen abrufen soll.
Sie können dies mithilfe von Callbacks (empfohlen) oder durch Ausführen eines Jobs tun, der den Übersetzungsstatus per Polling abfragt.
Callbacks verwenden (empfohlen)
Wenn Sie Inhalte zur Übersetzung senden, können Sie eine Callback-URL angeben. PTC ruft diese URL auf, wenn die Übersetzung abgeschlossen ist. Ihr Endpunkt ruft dann die Übersetzungen ab und speichert sie.
Das ist effizient, weil PTC Sie sofort benachrichtigt.
module Api
class CallbacksController < ActionController::API
before_action :set_post
def create
id = callback_params[:id]
translation_data = Ptc::GetTranslationService.call(id:)
translation_data.except("source").each do |locale, data|
@post.set_translation(locale:, title: data["title"], description: data["description"])
end
head :ok
end
private
def set_post
@post = Post.find(params[:post_id])
end
def callback_params
params.permit([:post_id, :id, :status, :translations_url])
end
end
end
Polling des Übersetzungsstatus (Alternative)
Können Sie keine Callbacks verwenden? Nachdem Sie Inhalte zur Übersetzung gesendet haben, können Sie einen Hintergrundjob in die Warteschlange stellen, der den Übersetzungsstatus wiederholt prüft. Der Job ruft die Übersetzungen ab, sobald sie fertig sind.
Dieser Ansatz wird nicht empfohlen, da er Ressourcen verschwendet und unnötige API-Aufrufe verursacht.
class CheckTranslationJob < ApplicationJob
MAX_ATTEMPTS = 3
def perform(id:, post_id:, attempt: 0)
translation = Ptc::GetTranslationStatusService.call(id:)
if translation["status"] == "completed"
translation = Ptc::GetTranslationService.call(id:)
post = Post.find(post_id)
translation.except("source").each do |locale, data|
post.set_translation(locale:, title: data["title"], description: data["description"])
end
else
raise "Failed to get translation after #{MAX_ATTEMPTS} attempts" if attempt > MAX_ATTEMPTS
CheckTranslationJob.set(wait: 1.minute).perform_later(id:, post_id:, attempt: attempt + 1)
end
end
end
Beginnen Sie mit der Übersetzung Ihrer Rails-Anwendung
Sie haben jetzt alles, was Sie für die Integration der Übersetzungs-API von PTC benötigen. Erstellen Sie ein kostenloses Konto und übersetzen Sie 20.000 Wörter ohne Kosten in 2 Sprachen.