DeepL es un servicio de traducción por inteligencia artificial preciso y rápido. Implementado en Rails, permite crear aplicaciones multilingües fácilmente. Al final del artículo te dejo un repositorio para que lo pruebes.
Cuenta DeepL
Crear una cuenta gratuita y obtener una API key:
Visita DeepL Pro API para crear una cuenta gratuita y obtener una API key con 500,000 caracteres mensuales. La documentación está disponible aquí.
Primeros Pasos
Crea un archivo .env en la raíz del proyecto o donde manejes tus credenciales y añade tu clave de API de DeepL:
DEEPL_API_KEY=tu_clave_de_api_deepl
Crea un servicio (app/services/deep_l_service.rb):
require 'net/http' require 'uri' require 'json' class DeepLService DEEPL_API_KEY = ENV['DEEPL_API_KEY'] def self.translate(text, target_lang) url = URI.parse("https://api-free.deepl.com/v2/translate") request = Net::HTTP::Post.new(url) request['Authorization'] = "DeepL-Auth-Key #{DEEPL_API_KEY}" request['Content-Type'] = 'application/x-www-form-urlencoded' params = { text: text, target_lang: target_lang } request.set_form_data(params) response = Net::HTTP.start(url.hostname, url.port, use_ssl: url.scheme == 'https') do |http| http.request(request) end result = JSON.parse(response.body) result['translations'].first['text'] rescue StandardError => e Rails.logger.error("DeepL API Error: #{e.message}") nil end end
Ejemplo de uso del servicio DeepLService:
translated_text = DeepLService.translate("Hola mundo", 'EN') puts translated_text # Output: "Hello world"
Concern para Traducción Automática
Define un concern (app/models/concerns/deepl_translatable.rb):
module DeeplTranslatable extend ActiveSupport::Concern included do before_save :translate_fields end class_methods do def translatable_fields(*fields) @translatable_fields = fields end def get_translatable_fields @translatable_fields end end private def translate_fields return unless self.class.get_translatable_fields self.class.get_translatable_fields.each do |field| es_field = field.to_s en_field = "en_#{field.to_s.sub('es_', '')}" if self[es_field].present? && self[en_field].blank? self[en_field] = DeepLService.translate(self[es_field], 'EN') elsif self[es_field].blank? && self[en_field].present? self[es_field] = DeepLService.translate(self[en_field], 'ES') end end end end
Ejemplo de Uso en un Modelo
Modelo (app/models/article.rb):
class Article < ApplicationRecord include DeeplTranslatable translatable_fields :es_title, :es_content end
Repositorio
Integrar DeepL con Rails permite traducir contenido dinámico automáticamente, como observaciones, comentarios y artículos de blog, mejorando la accesibilidad y experiencia del usuario. Puedes ver un repositorio de ejemplo aquí.