Read Frog

Variables de prompt

Todas las variables que puede usar un prompt de Read Frog, con el valor real por el que se sustituye cada una.

Una variable se escribe {{nombre}}. Justo antes de enviar una solicitud, Read Frog sustituye cada variable conocida por una cadena de texto. No se toca nada más: un nombre desconocido como {{url}} se queda en el prompt como los caracteres literales {{url}}.

Todos los ejemplos de abajo vienen de una misma página: un artículo en inglés en https://devblog.example.com/posts/timestamps, que se está traduciendo a chino simplificado.

Qué variables existen y dónde

VariablePrompts de páginaPrompts de subtítulos
{{targetLanguage}}
{{input}}
{{webTitle}}
{{webDescription}}
{{webContent}}
{{webSummary}}
{{videoSummary}}

Un prompt de página que use {{videoSummary}}, o un prompt de subtítulos que use {{webContent}}, conserva el texto literal. Los botones de variable que hay bajo cada campo del editor solo ofrecen las que esa lista puede rellenar.

{{targetLanguage}}

El nombre en inglés del idioma al que traduces: no un código, y sin traducir al idioma de tu interfaz.

Simplified Mandarin Chinese

Otros ejemplos: English, Traditional Mandarin Chinese, Japanese, Spanish. Así, un prompt escrito como Translate to {{targetLanguage}}: llega como Translate to Simplified Mandarin Chinese:.

{{input}}

El texto que hay que traducir. Es la única variable sin la que un prompt no puede funcionar.

Un párrafo a la vez, con los espacios del principio y del final eliminados y los caracteres invisibles quitados:

Every timestamp you store without a zone is a bug waiting for a plane ticket.

Varios párrafos a la vez, que es lo que pasa con un proveedor LLM y la traducción por lotes activada. Los párrafos se unen con una línea que no contiene más que %%, con una línea vacía a cada lado:

Every timestamp you store without a zone is a bug waiting for a plane ticket.

%%

The fix is boring: store UTC, render local, and never let the two meet in a database column.

%%

Ordering by a naive timestamp works until the clocks change, and then it works wrongly.

Se espera que el modelo devuelva el mismo número de párrafos en el mismo orden, separados de la misma forma. Read Frog vuelve a partir la respuesta por esas líneas %%. Si reescribes el prompt de una manera que cambie el separador, o que pida los párrafos numerados o fusionados, la partición falla y el lote entero se reintenta y después se vuelve a enviar párrafo a párrafo.

Con HTML, cuando el párrafo contiene marcado en línea. Los atributos que deben sobrevivir se extraen y el elemento se marca con data-rf-attr, así que el modelo ve una marca en lugar de una URL:

The fix is <a data-rf-attr="0">boring</a>: store <code data-rf-attr="1">UTC</code>, render local.

Con una fórmula o un símbolo en línea, que se sustituye por un marcador numerado y se vuelve a clonar en la traducción después:

Converting is just {{0}}, which is why nobody gets it wrong twice.

Normalmente no verás estas dos formas mientras escribes un prompt, pero explican los bloques de reglas extra que aparecen en una solicitud: Read Frog añade instrucciones sobre data-rf-attr y sobre los marcadores numerados solo cuando el texto que se envía contiene alguno de verdad.

{{webTitle}}

El <title> de la página, exactamente como lo muestra la pestaña del navegador.

Why your timestamps are eight hours off — devblog

En un prompt de subtítulos esto es el título del vídeo.

{{webDescription}}

La descripción propia de la página, tomada del primero de <meta name="description">, <meta property="og:description"> y <meta name="twitter:description"> que tenga contenido.

A short tour of the three places a naive timestamp can go wrong, and the one rule that prevents all three.

En un prompt de subtítulos esto es la descripción del vídeo.

{{webContent}}

El cuerpo principal de la página, extraído como Markdown y recortado a los primeros 2000 caracteres. La navegación, las barras laterales y los pies se descartan. Ningún prompt integrado lo usa: está ahí para los prompts que necesitan más que un título con el que trabajar.

# Why your timestamps are eight hours off

Every timestamp you store without a zone is a bug waiting for a plane ticket.
It works on your laptop, it works in CI, and it fails the first time somebody
in another country opens the report.

## Three places it goes wrong

1. **At the boundary.** A form posts `2026-03-14 09:00` and the server decides
   what that means.
2. **In the column.** `timestamp without time zone` is not a moment in time; it
   is a picture of a wall clock.
3. **On the way out.** Formatting in UTC and labelling it local is the same bug
   wearing a hat.

The fix is boring: store UTC, render local, and never let the tw

El recorte es un simple recuento de caracteres, no un límite de frase ni de párrafo, así que el valor suele acabar a mitad de palabra, como pasa arriba. Un prompt que le diga al modelo que el contenido está completo se equivocará en cualquier página de más de un par de pantallas.

{{webSummary}}

Un resumen de la página escrito por tu proveedor LLM: una llamada al modelo aparte, guardada en caché por página, hecha una vez y reutilizada para todos los párrafos.

A technical blog post arguing that timestamps should be stored in UTC and rendered in the reader's local zone. It identifies three failure points — form input, database column type, and output formatting — and recommends a single rule for all three. Written for backend developers; uses PostgreSQL column types as examples.

Esto requiere AI Smart Context (Opciones → Traducción). Con él desactivado no hay ningún resumen que insertar y la variable pasa a ser la cadena de reserva de más abajo. El prompt por defecto usa {{webSummary}}, así que dejar Smart Context desactivado significa que el prompt de sistema por defecto siempre dice Webpage summary: No summary available.

{{videoSummary}}

El equivalente para subtítulos: un resumen del vídeo, también detrás de AI Smart Context, y también con la cadena de reserva cuando está desactivado.

A conference talk on time zone handling in web applications. The speaker walks through a production incident caused by naive timestamps, then demonstrates a UTC-in, local-out pattern. Names mentioned: PostgreSQL, Temporal, Luxon.

Cuando falta un valor

Una variable nunca se queda vacía y nunca desaparece. Si el valor falta, está en blanco o solo tiene espacios, Read Frog sustituye una frase fija en inglés:

VariableSe sustituye por
{{webTitle}}No title available
{{webDescription}}No description available
{{webContent}}No content available
{{webSummary}}, {{videoSummary}}No summary available

Así que el prompt de sistema por defecto, en una página sin metadatos y con Smart Context desactivado, llega así:

## Document Metadata for Context Awareness
Webpage title: No title available
Webpage summary: No summary available

Esto importa sobre todo si escribes ejemplos de few-shot. Un prompt que le muestre al modelo un ejemplo resuelto construido a partir del título de la página le mostrará, en una página sin título, un ejemplo sobre una página llamada "No title available", y los modelos traducirán o comentarán esa frase. Si tu prompt se apoya en una variable de metadatos, di en el propio prompt qué hacer cuando el valor diga "No ... available".

No hay ninguna cadena de reserva para {{input}} ni para {{targetLanguage}}. {{targetLanguage}} siempre tiene valor, y {{input}} es el párrafo: nunca se envía una solicitud con texto vacío.

Qué pasa después

El texto sustituido no es la solicitud entera: después se añaden bloques de reglas extra y los términos de tu glosario, y el resultado terminado se convierte en la clave de la caché de traducciones. Consulta Cómo se compone una solicitud.

On this page