Çeviri ekrana değil, akışa uygulanır
Bir web oturumu rrweb olay akışı olarak kaydedilir: önce DOM’un tam bir anlık görüntüsü (snapshot), ardından bir dizi değişiklik (mutation). Bir oynatmayı çevirmenin akla ilk gelen yolu, oynatıcının sayfayı kurmasını bekleyip bulduğu metin düğümlerini yeniden yazmaktır. Yanlış yol da budur. Her mutation, her ileri-geri sarma ve her yeniden başlatma sayfanın bir kısmını yeniden kurar; bu yüzden yeniden yazma her seferinde tekrar uygulanmak zorunda kalır ve oynatıcı çalışırken onunla yarışır.
AnyReplay bunun yerine olayları çevirir. Oynatıcı daha hiçbir şey görmeden metinler anlık görüntüden ve her mutation’dan çıkarılır, çevrilir ve yerlerine geri konur. Oynatıcı zaten çevrilmiş bir sayfayı kurar ve bu sorunların hepsi ortadan kalkar. İşin iki yarısı — çıkarma ve yerine koyma — saf fonksiyonlardır; ürünün en hassas parçasını tarayıcı olmadan test edilebilir kılan da budur.
Her metin bağlamıyla birlikte gider
Arayüz metinleri düz yazı değildir. Butondaki “Save” “Kaydet” demektir, bir cümlenin içinde ise pekâlâ “biriktir” anlamına gelebilir; bir etiketin de içinde durduğu kontrole sığacak kadar kısa kalması gerekir. Bu yüzden çıkarılan her metin bir bağlam taşır: heading, button, label, link, input, attribute veya text. İnceleyen kişinin okumak isteyeceği öznitelikler — placeholder, title, alt, aria-label — çevrilir; script, style, code, pre ve svg içeriğine ise asla dokunulmaz.
Her metin modele bir sıra numarasıyla gönderilir ve her çeviri bu numarayı geri getirmek zorundadır. Sıraya göre eşleştirmek daha basit görünür ama bir tuzaktır: kırk metin istenen bir model zaman zaman otuz dokuz döndürür ve numara olmadan boşluktan sonraki her çeviri yanlış metne yerleşir. Numarayla ise kaybolan bir öğenin bedeli tam olarak tek bir metindir; o metin de özgün dilinde kalır — yani inceleyen kişinin zaten baktığı hâliyle.
Değişmemesi gereken kelimeler için sözlük
Ürün adları, özellik adları ve şirketinizin kendine özgü biçimde yazdığı birkaç terim, modele değişmemeleri gerektiğini söylediğiniz için çeviriden sağlam çıkar. Organizasyon genelindeki sözlük bir terimi zorunlu çevirisine — ya da “bunu olduğu gibi bırak” anlamında kendisine — eşler ve modelin kendi yargısından önce gelir. Sözlük Team, Business ve Enterprise planlarına dahildir; ayrıntılar için fiyatlandırma sayfasına bakın.
Bir kez çevrilir, içeriğe göre önbelleğe alınır
Metinler hash’lenir ve organizasyon genelinde önbelleğe alınır; yani bir projede bir kez çevrilen metin, aynı organizasyondaki diğer projelerde de yeniden kullanılır. On bin oturumda görünen bir buton yalnızca bir kez çevrilir; bu oturumlardan herhangi birini aynı dilde açan bir sonraki kişi çeviriyi anında görür. Çeviri, biri kaydın kendi dilinden farklı bir dilde oynat’a bastığında istenir; hiçbir şey tahminle önceden çevrilmez ve hiçbir şey organizasyonunuzun kapsamı dışına çıkmaz.
Maskelenmiş alanlar ne olacak?
Maskelenmiş bir girdi, kayıt gönderilmeden önce kullanıcının cihazında ya da tarayıcısında yıldızlarla değiştirilir. Akış çeviri adımına ulaştığında çevrilecek bir değer kalmamıştır — amaç da tam olarak budur. Neyin maskelendiğini, neyin maskelenmediğini ve neyin hiç kaydedilmediğini gizlilik sayfası anlatıyor.
Mobil oturumlar da aynı şekilde çevrilir
Bir React Native kaydı zaten ekran görüntülerinden değil, öğe türleri ve metinlerden oluşan bir ağaçtır; bu yüzden aynı hattan geçer: çıkar, bağlamla çevir, yerine koy, oynat. Mobil kaydedicinin piksel yakalamayı reddetmesinin nedeni de budur. Almanca bir ekranın görüntüsü sonsuza dek o görüntü olarak kalır; kaydedilmiş bir metin ise her dile yalnızca bir çeviri uzaklıktadır.
Beş panel dili, beş oynatma dili
Panelin kendisi İngilizce, Türkçe, Almanca, İspanyolca ve Fransızca olarak sunulur; herhangi bir dil kaynak metinlerle eşitliğini kaybederse derlemeyi durduran bir test de vardır. Oynatma çevirisi de bugün aynı beş dile sunuluyor; talep üzerine yeni diller eklenebilir. Diğer araçlarla yan yana karşılaştırmalar için karşılaştırma sayfasına, bu sayfanın arkasındaki mühendislik notları için bloga göz atın.
