Cómo traducir contenido dinámico en Rails usando la API de PTC
Aprenda a usar la API de PTC para traducir contenido dinámico en su aplicación de Ruby on Rails (RoR). Esto incluye entradas de blog, información de productos y cualquier texto almacenado en su base de datos.
A continuación, le guiaremos a través del proceso de traducción de contenido dinámico en aplicaciones de Rails en dos partes:
- Primero, aprenderá los tres endpoints de la API individualmente: cómo enviar contenido para su traducción, comprobar su estado y recuperar las traducciones completadas.
- Luego, verá cómo conectar estos endpoints en un flujo de trabajo completo usando callbacks o polling.
Antes de empezar
Esta guía asume que tiene una aplicación de Rails configurada con una forma de almacenar traducciones (como la gema Mobility, la gema Globalize o su propia solución).
Si va a empezar desde cero o quiere ver una implementación completa, hemos creado una aplicación de Rails de demostración que muestra la integración de PTC de principio a fin. La demostración usa:
- Mobility para almacenar traducciones
- dotenv-rails para las variables de entorno
- delayed_job_active_record para el procesamiento en segundo plano
Configure PTC y obtenga su token de API
Para empezar, necesita una cuenta de PTC y un token de API:
- Regístrese en PTC. Crear una cuenta lleva un minuto y la prueba cubre 20.000 palabras en 2 idiomas. Después, paga por lo que traduce.
- Cree un nuevo proyecto y seleccione API integration.
- Copie el token de API que PTC genera al final de la configuración del proyecto. Necesitará este token para autenticar todas las solicitudes. Puede encontrar el mismo token en el panel de control de su proyecto en Configuración → Gestionar tokens de API.



Endpoints de la API para traducir contenido dinámico
Enviar contenido para su traducción
Para traducir contenido, use el endpoint Create Content Translation. Esto programa su contenido para la traducción y devuelve un ID que usará para realizar un seguimiento del progreso y recuperar los resultados.
Endpoint:
POST https://app.ptc.wpml.org/api/v1/content_translation
Parámetros:
data(obligatorio) – El contenido a traducir como un hashname(obligatorio) – Una etiqueta para este trabajo de traducción (por ejemplo,"post-123-translation")target_languages(opcional) – Un array de códigos de idioma (por ejemplo,["es", "fr", "de"])callback_url(opcional) – Una URL donde PTC le notificará una vez que las traducciones estén listas
Este es un ejemplo de un servicio que inicia la traducción:
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
Para obtener detalles completos de la respuesta, códigos de error y ejemplos adicionales, consulte la documentación de la API de Create Content Translation.
Comprobar el estado de la traducción
Para comprobar si su traducción se ha completado, use el endpoint Get Content Translation Status. Esto devuelve el estado actual y el progreso de la traducción.
Endpoint:
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}/status
Parámetros:
id(obligatorio) – El identificador único del trabajo de traducción de contenido a comprobar
Servicio de ejemplo en 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
La respuesta incluye un campo de estado y un porcentaje que muestra el progreso de la traducción. Para obtener detalles completos de la respuesta, consulte la documentación de la API de Get Content Translation.
Recuperar las traducciones
Una vez que su traducción se haya completado, use el endpoint Get Content Translations para obtener los resultados. Esto devuelve su contenido original más las versiones traducidas para cada idioma de destino.
Endpoint:
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}
Parámetros:
id(obligatorio) – El identificador único del trabajo de traducción de contenido a recuperar
Ejemplo en 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
Recibir notificaciones cuando las traducciones estén listas
Ha aprendido a enviar contenido, comprobar el estado y recuperar traducciones. Ahora necesita conectar estos pasos para que su aplicación sepa automáticamente cuándo obtener las traducciones.
Puede hacer esto usando callbacks (recomendado) o ejecutando un trabajo que consulte el estado de la traducción mediante polling.
Uso de callbacks (recomendado)
Cuando envía contenido para su traducción, puede incluir una URL de callback. PTC llama a esta URL cuando se completa la traducción. Luego, su endpoint obtiene y almacena las traducciones.
Esto es eficiente porque PTC le notifica de inmediato.
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 del estado de la traducción (alternativa)
¿No puede usar callbacks? Después de enviar el contenido para su traducción, puede poner en cola un trabajo en segundo plano que compruebe repetidamente el estado de la traducción. El trabajo obtiene las traducciones cuando se completan.
Este enfoque no se recomienda porque desperdicia recursos y añade llamadas innecesarias a la API.
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
Comience a traducir su aplicación de Rails
Ahora tiene todo lo que necesita para integrar la API de traducción de PTC. Cree una cuenta y traduzca 20.000 palabras a 2 idiomas durante la prueba.
En esta página
Configure PTC y obtenga su token de API
Endpoints de la API para traducir contenido dinámico
Enviar contenido para su traducción
Comprobar el estado de la traducción
Recibir notificaciones cuando las traducciones estén listas
Uso de callbacks (recomendado)
Polling del estado de la traducción (alternativa)

¿Listo para empezar a usar PTC? Regístrese para una prueba de 30 días.