İstem değişkenleri
Bir Read Frog isteminin kullanabileceği her değişken ve her birinin yerine geçen gerçek değer.
Bir değişken {{name}} biçiminde yazılır. Bir istek gönderilmeden hemen önce Read Frog bilinen her değişkeni bir metinle değiştirir. Başka hiçbir şeye dokunulmaz: {{url}} gibi bilinmeyen bir ad, istemde {{url}} karakterleri olarak kalır.
Aşağıdaki örneklerin hepsi tek bir sayfadan geliyor — https://devblog.example.com/posts/timestamps adresindeki, Basitleştirilmiş Çinceye çevrilen İngilizce bir yazıdan.
Hangi değişken nerede var
| Değişken | Sayfa istemleri | Altyazı istemleri |
|---|---|---|
{{targetLanguage}} | Var | Var |
{{input}} | Var | Var |
{{webTitle}} | Var | Var |
{{webDescription}} | Var | Var |
{{webContent}} | Var | — |
{{webSummary}} | Var | — |
{{videoSummary}} | — | Var |
{{videoSummary}} kullanan bir sayfa istemi ya da {{webContent}} kullanan bir altyazı istemi, metni olduğu gibi tutar. Her düzenleyici alanının altındaki değişken düğmeleri yalnızca o listenin doldurabileceklerini sunar.
{{targetLanguage}}
Çevirdiğiniz dilin İngilizce adı — bir kod değil ve arayüz dilinize çevrilmiş hâli de değil.
Simplified Mandarin ChineseBaşka örnekler: English, Traditional Mandarin Chinese, Japanese, Spanish. Yani Translate to {{targetLanguage}}: diye yazılmış bir istem, Translate to Simplified Mandarin Chinese: olarak ulaşır.
{{input}}
Çevrilecek metin. Bir istemin vazgeçemeyeceği tek değişken budur.
Bir seferde bir paragraf — baştaki ve sondaki boşluklar kaldırılmış, görünmez karakterler ayıklanmış:
Every timestamp you store without a zone is a bug waiting for a plane ticket.Bir seferde birkaç paragraf, ki bir LLM sağlayıcısında toplu çeviri açıkken olan budur. Paragraflar, iki yanında birer boş satır bulunan ve yalnızca %% içeren bir satırla birleştirilir:
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.Modelin aynı sayıda paragrafı aynı sırada, aynı biçimde ayrılmış olarak döndürmesi beklenir. Read Frog yanıtı bu %% satırlarından yeniden ayırır. İstemi ayırıcıyı değiştirecek biçimde yeniden yazarsanız ya da paragrafların numaralanmasını veya birleştirilmesini isterseniz, ayırma başarısız olur; tüm küme önce yeniden denenir, sonra paragraf paragraf yeniden gönderilir.
HTML ile, yani paragraf satır içi işaretleme içerdiğinde. Korunması gereken öznitelikler ayıklanır ve öğe data-rf-attr ile işaretlenir; böylece model bir URL yerine bir işaret görür:
The fix is <a data-rf-attr="0">boring</a>: store <code data-rf-attr="1">UTC</code>, render local.Bir formül ya da satır içi simge ile, ki bunlar numaralı bir yer tutucuyla değiştirilir ve sonradan çevirinin içine geri klonlanır:
Converting is just {{0}}, which is why nobody gets it wrong twice.Bir istem yazarken bu iki biçimi genellikle görmezsiniz, ama bir istekte belirip duran ek kural
bloklarını açıklarlar: Read Frog data-rf-attr ile ve numaralı yer tutucularla ilgili yönergeleri
yalnızca gönderilen metin gerçekten böyle bir şey içerdiğinde ekler.
{{webTitle}}
Sayfanın <title> etiketi, tam olarak tarayıcı sekmesinde göründüğü gibi.
Why your timestamps are eight hours off — devblogBir altyazı isteminde bunun yerine videonun başlığı gelir.
{{webDescription}}
Sayfanın kendi açıklaması; <meta name="description">, <meta property="og:description"> ve <meta name="twitter:description"> etiketlerinden içeriği olan ilki alınır.
A short tour of the three places a naive timestamp can go wrong, and the one rule that prevents all three.Bir altyazı isteminde bu, videonun açıklamasıdır.
{{webContent}}
Sayfanın gövdesi, Markdown olarak çıkarılıp ilk 2000 karaktere kırpılmış hâli. Gezinti, kenar çubukları ve sayfa altları atılır. Hiçbir yerleşik istem onu kullanmaz — bir başlıktan fazlasına ihtiyaç duyan istemler için oradadır.
# 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 twKırpma, cümle ya da paragraf sınırına değil düpedüz karakter sayısına göre yapılır; bu yüzden değer genellikle bir sözcüğün ortasında biter — yukarıdaki gibi. Modele bu içeriğin tam olduğunu söyleyen bir istem, birkaç ekranı aşan her sayfada yanlış olur.
{{webSummary}}
LLM sağlayıcınızın yazdığı bir sayfa özeti — ayrı bir model çağrısı, sayfa başına önbelleğe alınır, bir kez yapılır ve her paragraf için yeniden kullanılır.
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.Bunun için AI Akıllı Bağlam gerekir (Seçenekler → Çeviri). Kapalıyken eklenecek bir özet olmaz ve değişken aşağıdaki yedek metne dönüşür. Varsayılan istem {{webSummary}} kullandığı için Akıllı Bağlam'ı kapalı bırakmak, varsayılan sistem isteminde her zaman Webpage summary: No summary available yazması anlamına gelir.
{{videoSummary}}
Altyazı tarafındaki karşılığı: videonun özeti; o da AI Akıllı Bağlam'a bağlıdır ve kapalıyken yine yedek metne dönüşür.
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.Bir değer eksik olduğunda
Bir değişken asla boş bırakılmaz ve asla ortadan kaybolmaz. Değer eksikse, boşsa ya da yalnızca boşluk karakterlerinden oluşuyorsa Read Frog sabit bir İngilizce cümleyi yerine koyar:
| Değişken | Yerine konan |
|---|---|
{{webTitle}} | No title available |
{{webDescription}} | No description available |
{{webContent}} | No content available |
{{webSummary}}, {{videoSummary}} | No summary available |
Yani varsayılan sistem istemi, hiç meta verisi olmayan bir sayfada ve Akıllı Bağlam kapalıyken şöyle ulaşır:
## Document Metadata for Context Awareness
Webpage title: No title available
Webpage summary: No summary availableBu, en çok az örnekli (few-shot) örnekler yazdığınızda önemlidir. Sayfa başlığından örnek kuran bir istem, başlığı olmayan bir sayfada modele "No title available" adlı bir sayfayla ilgili bir örnek gösterir — modeller de bu cümleyi çevirir ya da üzerine yorum yapar. İsteminiz bir meta veri değişkenine yaslanıyorsa, değerin "No ... available" olduğu durumda ne yapılacağını istemin içinde yazın.
{{input}} ve {{targetLanguage}} için yedek değer yoktur. {{targetLanguage}} her zaman bir değer taşır, {{input}} ise paragraftır — boş metin için asla istek gönderilmez.
Sonra ne olur
Değişkenleri yerine konmuş metin isteğin tamamı değildir: ardından ek kural blokları ve terim sözlüğünüzdeki terimler eklenir, tamamlanmış sonuç da çeviri önbelleğinin anahtarı olur. Bkz. Bir istek nasıl kurulur.
