Comment traduire du contenu dynamique dans Rails à l’aide de l’API PTC
Découvrez comment utiliser l’API PTC pour traduire du contenu dynamique dans votre application Ruby on Rails (RoR). Cela inclut les articles de blog, les informations sur les produits et tout texte stocké dans votre base de données.
Ci-dessous, nous vous guiderons à travers le processus de traduction de contenu dynamique dans les applications Rails en deux parties :
- Tout d’abord, vous découvrirez individuellement les trois points de terminaison de l’API : comment envoyer du contenu pour traduction, vérifier son statut et récupérer les traductions terminées.
- Ensuite, vous verrez comment connecter ces points de terminaison dans un flux de travail complet en utilisant soit des callbacks, soit la scrutation (polling).
Avant de commencer
Ce guide suppose que vous disposez d’une application Rails configurée avec un moyen de stocker les traductions (comme Mobility, Globalize ou votre propre solution).
Si vous partez de zéro ou si vous souhaitez voir une implémentation complète, nous avons conçu une application Rails de démonstration qui montre l’intégration de PTC de bout en bout. La démo utilise :
- Mobility pour le stockage des traductions
- dotenv-rails pour les variables d’environnement
- delayed_job_active_record pour le traitement en arrière-plan
Configurer PTC et obtenir votre jeton d’API
Pour commencer, vous avez besoin d’un compte PTC et d’un jeton d’API :
- Inscrivez-vous à PTC. La création d’un compte est gratuite et vous pouvez traduire 20 000 mots vers 2 langues sans frais. Ensuite, vous payez pour ce que vous traduisez.
- Créez un nouveau projet et sélectionnez API integration.
- Copiez le jeton d’API que PTC génère à la fin de la configuration du projet. Vous aurez besoin de ce jeton pour authentifier toutes les requêtes. Vous pouvez trouver le même jeton dans le tableau de bord de votre projet sous Settings → Manage API tokens.



Points de terminaison de l’API pour la traduction de contenu dynamique
Envoyer du contenu pour traduction
Pour traduire du contenu, utilisez le point de terminaison Create Content Translation. Cela planifie la traduction de votre contenu et renvoie un ID que vous utiliserez pour suivre la progression et récupérer les résultats.
Point de terminaison :
POST https://app.ptc.wpml.org/api/v1/content_translation
Paramètres :
data(requis) – Le contenu à traduire sous forme de hashname(requis) – Un libellé pour ce travail de traduction (par exemple,"post-123-translation")target_languages(optionnel) – Un tableau de codes de langue (par exemple,["es", "fr", "de"])callback_url(optionnel) – Une URL où PTC vous informera dès que les traductions seront prêtes
Voici un exemple de service qui lance la traduction :
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
Pour obtenir les détails complets de la réponse, les codes d’erreur et des exemples supplémentaires, consultez la documentation de l’API Create Content Translation.
Vérifier le statut de la traduction
Pour vérifier si votre traduction est terminée, utilisez le point de terminaison Get Content Translation Status. Celui-ci renvoie le statut actuel et la progression de la traduction.
Point de terminaison :
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}/status
Paramètres :
id(requis) – L’identifiant unique du travail de traduction de contenu à vérifier
Exemple de service dans 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 réponse inclut un champ de statut et un pourcentage indiquant la progression de la traduction. Pour obtenir les détails complets de la réponse, consultez la documentation de l’API Get Content Translation.
Récupérer les traductions
Une fois votre traduction terminée, utilisez le point de terminaison Get Content Translations pour récupérer les résultats. Celui-ci renvoie votre contenu original ainsi que les versions traduites pour chaque langue cible.
Point de terminaison :
GET https://app.ptc.wpml.org/api/v1/content_translation/{id}
Paramètres :
id(requis) – L’identifiant unique du travail de traduction de contenu à récupérer
Exemple dans 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
Être notifié quand les traductions sont prêtes
Vous avez appris à envoyer du contenu, à vérifier le statut et à récupérer les traductions. Vous devez maintenant connecter ces étapes pour que votre application sache automatiquement quand récupérer les traductions.
Vous pouvez le faire en utilisant des callbacks (recommandé) ou en exécutant un travail qui interroge le statut de la traduction.
Utilisation des callbacks (recommandée)
Lorsque vous envoyez du contenu pour traduction, vous pouvez inclure une URL de rappel (callback URL). PTC appelle cette URL lorsque la traduction est terminée. Votre point de terminaison récupère et stocke ensuite les traductions.
C’est une méthode efficace car PTC vous avertit immédiatement.
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
Scrutation du statut de la traduction (alternative)
Vous ne pouvez pas utiliser de rappels ? Après avoir envoyé le contenu pour traduction, vous pouvez mettre en file d’attente un travail en arrière-plan qui vérifie de manière répétée le statut de la traduction. Le travail récupère les traductions une fois terminées.
Cette approche n’est pas recommandée car elle gaspille des ressources et ajoute des appels API inutiles.
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
Commencez à traduire votre application Rails
Vous avez maintenant tout ce dont vous avez besoin pour intégrer l’API de traduction de PTC. Créez un compte gratuit et traduisez 20.000 mots vers 2 langues sans frais.
Sur cette page
Configurer PTC et obtenir votre jeton d’API
Points de terminaison de l’API pour la traduction de contenu dynamique
Envoyer du contenu pour traduction
Vérifier le statut de la traduction
Être notifié quand les traductions sont prêtes
Utilisation des rappels (recommandé)
Interrogation du statut de la traduction (alternative)

Prêt à commencer à utiliser PTC ? Inscrivez-vous pour un essai gratuit de 30 jours.