OpenRouter
Traducción con IA mediante OpenRouter y Lingo.dev Compiler
¿Qué es OpenRouter?
OpenRouter es una plataforma que proporciona acceso a una amplia variedad de modelos de IA de diferentes proveedores a través de una API unificada, permitiendo a los desarrolladores comparar, cambiar y enrutar peticiones fácilmente. Se centra en la flexibilidad, transparencia y en dar a los usuarios más control sobre qué modelos utilizan y cómo se les factura.
Configuración de la clave API
OpenRouter requiere una clave API para autenticar las solicitudes desde Lingo.dev Compiler. Elige el método de configuración que mejor se adapte a tu flujo de trabajo:
Opción 1: Variable de entorno (Terminal)
Ideal para experimentos rápidos y pruebas sin modificar archivos.
Establece la clave directamente en tu sesión de terminal:
export OPENROUTER_API_KEY="tu-clave-api-aquí"
Esta clave solo estará disponible hasta que cierres la ventana de la terminal.
Opción 2: Configuración del proyecto (.env)
Ideal para configuración específica de proyectos y entornos de equipo donde cada proyecto puede usar diferentes credenciales.
Crea un archivo .env
en la raíz de tu proyecto:
touch .env
Añade la siguiente línea al archivo:
OPENROUTER_API_KEY="tu-clave-api-aquí"
Lingo.dev Compiler verifica los archivos de entorno en este orden de prioridad:
.env.development
(prioridad más alta).env.local
.env
(prioridad más baja)
Los valores en archivos de mayor prioridad sobrescriben a los de archivos de menor prioridad.
Opción 3: Configuración global (Ajustes de usuario)
Ideal para desarrolladores individuales que quieren usar la misma clave API en todos sus proyectos.
Crea un archivo de configuración en tu directorio principal:
touch ~/.lingodotdevrc
Añade el siguiente contenido al archivo:
[llm]
openrouterApiKey="tu-clave-api-aquí"
Esta configuración persiste en todas las sesiones de terminal y proyectos en tu máquina.
Prioridad de configuración
Cuando se utilizan múltiples métodos de configuración, Lingo.dev Compiler busca las claves API en este orden:
- Variables de entorno (prioridad más alta)
- Archivos .env del proyecto (en su propio orden de prioridad)
- Archivo de configuración de usuario
~/.lingodotdevrc
(prioridad más baja)
Se utiliza la primera clave API válida que se encuentre.
Uso de OpenRouter
Para habilitar OpenRouter, establece la propiedad models
en las opciones del compilador:
import react from "@vitejs/plugin-react";
import lingoCompiler from "lingo.dev/compiler";
import { type UserConfig } from "vite";
// https://vite.dev/config/
const viteConfig: UserConfig = {
plugins: [react()],
};
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja"],
rsc: false,
useDirective: false,
debug: false,
models: {
"*:*": "openrouter:anthropic/claude-3.5-sonnet",
},
});
export default withLingo(viteConfig);
La propiedad acepta un objeto donde:
- las claves son pares de locales de origen y destino, con
*
representando cualquier locale - los valores son identificadores de modelos (p. ej.,
openrouter:anthropic/claude-3.5-sonnet
)
Puedes usar OpenRouter para traducir:
- entre todos los locales
- desde un locale de origen específico
- a un locale de destino específico
- entre un locale de origen y destino específicos
Traducción de todos los locales
Utiliza el patrón comodín *:*
para aplicar el mismo modelo de OpenRouter a todos los pares de traducción:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// Usar Claude 3.5 Sonnet para todos los pares de traducción
"*:*": "openrouter:anthropic/claude-3.5-sonnet",
},
});
Traducción desde un locale de origen específico
Utiliza un locale de origen específico con un comodín de destino para aplicar un modelo a todas las traducciones desde ese origen:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// Usar Claude 3.5 Sonnet para todas las traducciones desde inglés
"en:*": "openrouter:anthropic/claude-3.5-sonnet",
// Usar GPT-4 Turbo para traducciones desde español a cualquier idioma
"es:*": "openrouter:openai/gpt-4-turbo",
// Fallback para otros idiomas de origen
"*:*": "openrouter:meta-llama/llama-3.1-70b",
},
});
Traducción a un idioma de destino específico
Utiliza un comodín de origen con un idioma de destino específico para aplicar un modelo a todas las traducciones a ese destino:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// Usar modelo especializado para traducciones al japonés
"*:ja": "openrouter:anthropic/claude-3-opus",
// Usar Gemini Pro para traducciones al chino
"*:zh": "openrouter:google/gemini-pro-1.5",
// Usar Mistral Large para traducciones al francés
"*:fr": "openrouter:mistralai/mistral-large",
// Predeterminado para otros idiomas de destino
"*:*": "openrouter:openai/gpt-3.5-turbo",
},
});
Traducción entre idiomas específicos
Define pares exactos de origen-destino para un control preciso sobre qué modelo maneja combinaciones específicas de idiomas:
const withLingo = lingoCompiler.vite({
sourceRoot: "src",
lingoDir: "lingo",
sourceLocale: "en",
targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
models: {
// Pares específicos con modelos óptimos
"en:es": "openrouter:openai/gpt-3.5-turbo", // Inglés a español
"en:ja": "openrouter:anthropic/claude-3.5-sonnet", // Inglés a japonés
"en:zh": "openrouter:google/gemini-pro-1.5", // Inglés a chino
"en:fr": "openrouter:mistralai/mistral-large", // Inglés a francés
"es:en": "openrouter:meta-llama/llama-3.1-8b", // Español a inglés
"fr:en": "openrouter:cohere/command-r-plus", // Francés a inglés
"de:en": "openrouter:perplexity/llama-3.1-sonar-large", // Alemán a inglés
// Fallback para pares no especificados
"*:*": "openrouter:openai/gpt-3.5-turbo",
},
});