Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Bu sayfanın içeriği bir yapay zeka kullanılarak çevrildi.
Orijinal içeriğin İngilizce son sürümünü görüntüleyinBu dokümantasyonu geliştirmek için bir fikriniz varsa, lütfen GitHub'da bir çekme isteği göndererek katkıda bulunmaktan çekinmeyin.
Dokümantasyon için GitHub bağlantısıBelge Markdown'ını panoya kopyala
Kırılgan Testler Yazmadan Çevirileri Test Etme Yöntemleri
Çoğu i18n test paketi iki nedenden biriyle başarısız olur. Ya doğrudan metin içeriğini doğrularlar, böylece ufak bir kelime değişikliği elli testi bozar ve ekip testleri silmek zorunda kalır. Ya da her şeyi yalnızca varsayılan dilde render ederler, bu da diğer on yedi dil hakkında hiçbir şey kanıtlamaz. Her iki yaklaşım da aynı yere varır: kimsenin güvenmediği bir test paketi.
İçindekiler
Desenler kütüphaneden bağımsızdır
Aşağıdaki her desen her türlü i18n yığınında çalışır. Sağlayıcıyı I18nextProvider, NextIntlClientProvider veya IntlProvider ile değiştirseniz bile testler tamamen aynı kalır; çünkü bir kütüphane API'sini değil, render edilen çıktıyı doğrularlar.
Kapsam araçları da taşınabilir: Mevcut kataloglarınıza yönlendirilmiş Sync JSON eklentisi veya mevcut içe aktarmalarınızı takma adlandıran bir uyumluluk adaptörü ile kapsam doğrulaması doğrudan mevcut JSON dosyalarınıza karşı çalışır.
Aslında neyi test ettiğinize karar verin
Çeviri kalitesi kod testiyle doğrulanamaz. Hiçbir assertion Almanca metnin doğal olup olmadığını size söyleyemez ve aksini iddia etmek test paketinizi sabit kodlanmış dizelerle doldurur.
Mekanik olarak test edilmeye değer olanlar şunlardır:
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Test edilmeye değer | Test edilmeye değmez |
|---|---|
| Gerekli her dilin bir değeri olması | İfadenin ne kadar zarif olduğu |
| Doğru dilin bileşene ulaşması | Her etiketin tam metin kopyası |
| Çoğulların her kategori için çözümlenmesi | Çevirmenin işini iyi yapıp yapmadığı |
| RTL dillerinin yön ve aynalama ayarları | Her dildeki her dize |
| Biçimlendirilmiş tarih ve sayıların dili | Intl motorunun iç doğruluğu |
Kapsam denetimi bileşen testlerinizde değil, tek bir veri odaklı testte yapılmalıdır. Bu konu eksik çevirileri tespit etme yazısında ayrıntılı olarak ele alınmıştır; bu yazı diğer konulara odaklanır.
Sağlayıcı altında render edin ve role göre sorgulayın
Temel desen, bileşeni bir dil sağlayıcısı içine yerleştirmek ve metin yerine rol veya test id üzerinden sorgulama yapmaktır.
Kodu panoya kopyala
getByRole("heading") ile sorgulamak metin değişikliklerine karşı dirençlidir. getByText("Récapitulatif") ise metin değiştiğinde bozulur. Birebir metin eşleşmesini yalnızca dizenin kendisi test konusu olduğunda kullanın, bu da oldukça nadirdir.
aria-label gibi nitelikler için render edilebilir bir düğüm yerine ham dizeye ihtiyacınız vardır. React'ta useIntlayer girişleri bunun için bir .value alanı sunar.
Testleri diller arasında parametrelendirin
Her dil için ayrı test yazmaktansa, tüm diller üzerinde çalışan tek bir test mantığı çok daha değerlidir.
Kodu panoya kopyala
İlk assertion zahmetsiz ve genel bir kazançtır: Arama başarısız olduğunda kütüphaneniz anahtarı yazdırırsa, DOM içinde cart.summary.title gibi bir kalıp yer alır. Bu, tek bir dizeyi belirtmeden bütün bir hata sınıfını yakalar.
Sahte yerelleştirme (Pseudolocalization) katalogların göremediğini bulur
Her dizeyi dönüştüren sahte bir dil ekleyin; örneğin Checkout ifadesini [!!! Çĥéçķöũţ !!!] haline getirin. Ardından sayfayı bu dilde render edin.
Halen standart İngilizce görünen her metin doğrudan koda gömülmüştür. Hiçbir katalog tabanlı denetim bunu göremez çünkü araçlar açısından o dize henüz mevcut değildir. Köşeli ayraçlar ikinci bir işe yarar: Metni yaklaşık yüzde 30 uzatarak, Almanca desteği gelmeden önce tasarımın taşacağı yerleri açığa çıkarır.
Bu hata görsel olarak fark edildiğinden, bunu birim test yerine görsel veya uçtan uca (E2E) test olarak çalıştırmak en doğrusudur.
Çoğullar dil başına değil, kategori başına test gerektirir
Çoğul hataları genellikle gizli kalır çünkü İngilizcede yalnızca iki biçim vardır ve çoğu geliştirici yalnızca bunları dener. Lehçede dört, Arapçada altı çoğul kategorisi bulunur.
Kodu panoya kopyala
Her yerde sadece 1 ve 2'yi test etmek yerine en karmaşık diliniz için her CLDR kategorisine denk gelen sayıları seçin. Intl.PluralRules bir sayının hangi kategoriye girdiğini söyler, böylece tahmin yürütmek zorunda kalmazsınız. Kategoriler hakkında daha fazla bilgi için ICU mesaj formatı makalesine göz atın.
Anlık görüntü (Snapshot) tuzağı
Anlık görüntüler ve i18n iyi bir ikili değildir. Yerelleştirilmiş bir bileşenin anlık görüntüsü içerideki her dizeyi kaydeder: bir çevirmen Portekizcedeki bir yazım hatasını düzelttiğinde, hiçbir incelemecinin anlayamayacağı bir dosyada yeşil yanan test kırmızıya döner. Bir süre sonra geliştiriciler diff'i okumadan -u çalıştırmaya başlar ve snapshot testleri tüm anlamını yitirir.
Snapshot kullanmak istiyorsanız, bunu yalnızca tek bir dilde alın ve içerik denetimi yerine yapısal bir kontrol olarak değerlendirin. Dile özgü her şey açık assertion ifadelerinde yer almalıdır.
Yalnızca render işlemini değil, dil anlaşmasını da test edin
Canlı ortamdaki en yaygın i18n hatası çevirinin eksik olması değildir. Yanlış dilin seçilmesidir: URL /fr/ derken istemci navigator.language okur ve uyuşmazlık yaşanır.
Çözümleme sırasını bileşenlerden bağımsız, saf bir fonksiyon olarak doğrudan test edin:
Kodu panoya kopyala
Bu, çoğu projede eksik olan en yüksek değerli i18n testidir ve herhangi bir DOM gerektirmez.
Neyi nerede çalıştırmalı
- Unit: Dil seçimi mantığı, formatlayıcılar, çoğul kategorileri. Hızlıdır, DOM gerektirmez.
- Bileşen: Her dil için bir kez sağlayıcı tabanlı render, roller ve ham anahtar olmaması denetimi.
- Kapsam: Gerekli dillerde eksik olmadığını doğrulayan veri odaklı test.
- Görsel veya E2E: Sahte yerelleştirme geçişi ve bir RTL sayfası; çünkü bu hatalar görseldir.
İlk üçünü her commit'te CI hattında tutun. Sonuncusunu her push yerine gecelik derlemelerde çalıştırmak daha ekonomiktir.
Sık yapılan hatalar
- Her yerde birebir metni doğrulamak. Test paketinin birkaç ay içinde silinmesini garantiler.
- Yerelleştirilmiş bileşenlerin anlık görüntüsünü almak. Çevirmenler derlemeyi bozar, incelemeciler kontrol etmeden onaylar.
- Yalnızca varsayılan dili test etmek. Asla eksik olamayacak tek dili test etmiş olursunuz.
- Çoğullar için yalnızca 1 ve 2'yi test etmek. İngilizcede bulunmayan tüm kategorileri kaçırır.
- i18n kütüphanesini mock ile devre dışı bırakmak. O zaman yalnızca mock nesnenizin dize döndürdüğünü test edersiniz.
- Dil anlaşma mantığını asla test etmemek. Gerçek dünyadaki en yaygın sorun ve test etmesi en kolay olanıdır.
İleri okuma
- İçeriğinizi test etme: CLI denetimi, programatik API ve UI doğrulamaları
- ESLint eklentisi: Sabit kodlanmış dizeleri ve kullanılmayan içerikleri yakalama
- Formatlayıcılar ve dil yardımcıları (
getHTMLTextDirdahil) - Frameworkler arası benchmark raporları
- react-i18next uyumluluk adaptörü
- Eksik çevirileri tespit etme
- ICU mesaj biçimi: Çoğullar, select ve iskeletler
Yorumlar
Henüz yorum yok. Düşüncelerinizi paylaşan ilk kişi olun.
