PTC

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:

PTC einrichten und Ihr API-Token abrufen

Um loszulegen, benötigen Sie ein PTC-Konto und ein API-Token:

  1. 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.
  2. Erstellen Sie ein neues Projekt und wählen Sie API integration.
  3. 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.
Ein neues Projekt in der PTC erstellen
Ein neues Projekt erstellen
API integration im PTC-Setup auswählen
API Integration auswählen
API-Token unter Einstellungen → API-Tokens verwalten
API-Token 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 Hash
  • name (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

Bevor Sie beginnen

PTC einrichten und Ihr API-Token abrufen

API-Endpunkte zur Übersetzung dynamischer Inhalte

Inhalte zur Übersetzung senden

Den Übersetzungsstatus überprüfen

Übersetzungen abrufen

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.