Dynamische Inhalte in Rails mit der PTC-API übersetzen
Erfahren Sie, wie Sie die PTC-API nutzen, um dynamische Inhalte in Ihrer Ruby-on-Rails-Anwendung (RoR) zu übersetzen. Dazu gehören Blogbeiträge, Produktinformationen und jeglicher Text, der in Ihrer Datenbank gespeichert ist.
Im Folgenden führen wir Sie in zwei Teilen durch den Prozess zur Übersetzung dynamischer Inhalte in Rails-Anwendungen:
- Zunächst lernen Sie die drei API-Endpunkte einzeln kennen – wie Sie Inhalte zur Übersetzung senden, deren Status überprüfen und abgeschlossene Übersetzungen abrufen.
- Anschließend erfahren Sie, wie Sie diese Endpunkte mithilfe von Callbacks oder Polling zu einem vollständigen Workflow verbinden.
Bevor Sie beginnen
Diese Anleitung setzt voraus, dass Sie eine Rails-Anwendung eingerichtet haben, die über eine Möglichkeit zur Speicherung von Übersetzungen verfügt (wie das Gem „Mobility“, das Globalize-Gem oder Ihre eigene Lösung).
Wenn Sie von Grund auf neu beginnen oder eine vollständige Implementierung sehen möchten, haben wir eine Rails-Demoanwendung erstellt, die die PTC-Integration von Anfang bis Ende zeigt. Die Demo verwendet:
- Mobility zur Speicherung von Übersetzungen
- dotenv-rails für Umgebungsvariablen
- delayed_job_active_record für die Hintergrundverarbeitung
PTC einrichten und Ihr API-Token abrufen
Um loszulegen, benötigen Sie ein PTC-Konto und ein API-Token:
- Registrieren Sie sich bei PTC. Die Erstellung eines Kontos dauert nur eine Minute und die Testphase deckt 20.000 Wörter in 2 Sprachen ab. Danach zahlen Sie für das, was Sie übersetzen.
- Erstellen Sie ein neues Projekt und wählen Sie API integration.
- Kopieren Sie das API-Token, das die PTC am Ende der Projekteinrichtung generiert. Sie benötigen dieses Token, um alle Anfragen zu authentifizieren. Sie finden dasselbe Token in Ihrem Projekt-Dashboard unter Einstellungen → API-Tokens verwalten.



API-Endpunkte zur Übersetzung dynamischer Inhalte
Inhalte zur Übersetzung senden
Um Inhalte zu übersetzen, verwenden Sie den Endpunkt Inhaltsübersetzung erstellen. Dadurch werden Ihre Inhalte für die Übersetzung eingeplant und eine ID zurückgegeben, mit der Sie den Fortschritt verfolgen und die Ergebnisse abrufen können.
Endpunkt:
POST https://app.ptc.wpml.org/api/v1/content_translation
Parameter:
data(erforderlich) – Die zu übersetzenden Inhalte als Hashname(erforderlich) – Ein Label für diesen Übersetzungsjob (zum Beispiel"post-123-translation")target_languages(optional) – Ein Array von Sprachcodes (zum Beispiel["es", "fr", "de"])callback_url(optional) – Eine URL, über die die PTC Sie benachrichtigt, sobald die Übersetzungen bereit sind
Hier ist ein Beispiel-Service, der die Übersetzung startet:
Ruby
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
Vollständige Antwortdetails, Fehlercodes und weitere Beispiele finden Sie in der API-Dokumentation für „Inhaltsübersetzung erstellen“.
Den Übersetzungsstatus überprüfen
Um zu überprü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}/status
Parameter:
id(erforderlich) – Der eindeutige Bezeichner des zu überprüfenden Inhalts-Übersetzungsjobs
Beispiel-Service in Rails:
Ruby
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 Prozentsatz, der den Übersetzungsfortschritt anzeigt. Vollständige Antwortdetails finden Sie in der API-Dokumentation für „Inhaltsübersetzungen abrufen“.
Übersetzungen abrufen
Sobald Ihre Übersetzung abgeschlossen ist, verwenden Sie den Endpunkt Inhaltsübersetzungen abrufen, um die Ergebnisse zu holen. Dieser gibt Ihre Originalinhalte sowie die übersetzten Versionen für jede Zielsprache zurück.
Endpunkt:
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}
Parameter:
id(erforderlich) – Der eindeutige Bezeichner des abzurufenden Inhalts-Übersetzungsjobs
Beispiel in Rails:
Ruby
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 überprüfen und Übersetzungen abrufen. Nun müssen Sie diese Schritte miteinander verbinden, damit Ihre App automatisch weiß, wann sie Übersetzungen abrufen soll.
Sie können dies tun, indem Sie Callbacks verwenden (empfohlen) oder einen Job ausführen, der den Übersetzungsstatus abfragt.
Verwendung von Callbacks (empfohlen)
Wenn Sie Inhalte zur Übersetzung senden, können Sie eine Callback-URL angeben. Die PTC ruft diese URL auf, wenn die Übersetzung abgeschlossen ist. Ihr Endpunkt ruft dann die Übersetzungen ab und speichert sie.
Dies ist effizient, da die PTC Sie sofort benachrichtigt.
Ruby
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? Nach dem Senden von Inhalten zur Übersetzung können Sie einen Hintergrundjob in die Warteschlange stellen, der wiederholt den Übersetzungsstatus abfragt. Der Job ruft die Übersetzungen ab, wenn sie abgeschlossen sind.
Dieser Ansatz wird nicht empfohlen, da er Systemressourcen verschwendet und unnötige API-Aufrufe verursacht.
Ruby
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
Starten Sie die Übersetzung Ihrer Rails-Anwendung
Sie haben nun alles, was Sie benötigen, um die Übersetzungs-API der PTC zu integrieren. Erstellen Sie ein Konto und übersetzen Sie während der Testphase 20.000 Wörter in 2 Sprachen.
Auf dieser Seite
PTC einrichten und Ihr API-Token abrufen
API-Endpunkte zur Übersetzung dynamischer Inhalte
Inhalte zur Übersetzung senden
Den Übersetzungsstatus überprüfen
Benachrichtigt werden, wenn Übersetzungen bereit sind
Verwendung von Callbacks (empfohlen)
Polling des Übersetzungsstatus (Alternative)

Sind Sie bereit, die PTC zu nutzen? Registrieren Sie sich für eine 30-Tage-Testphase.