So übersetzen Sie dynamische Inhalte in Rails mit der PTC API

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:

PTC einrichten und Ihr API-Token erhalten

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

  1. 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.
  2. Erstellen Sie ein neues Projekt und wählen Sie API-Integration.
  3. 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_translation

Parameter:

  • data (erforderlich) – Der zu übersetzende Inhalt als Hash
  • name (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:

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

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}/status

Parameter:

  • id (erforderlich) – Die eindeutige Kennung des zu prüfenden Content-Translation-Jobs

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 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:

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 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.

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? 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.

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

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.

Nach oben scrollen