Web Uygulamalarında Birden Çok Dil Yerelleştirmeleri Desteklemek için Özet Fabrika Deseni Uygulayın
Table of Contents
Neden Globalized Web Uygulamaları Akıllı Bir Yerelleştirme Mimarisini Talep Ediyor
Modern web uygulamaları artık tek bir bölgeye hizmet etmiyor. Kullanıcılar yerel dilde mevcut olması için arayüzler bekliyor, küçük başlangıçlardan gelen kurumsal platformlara doğru yapılan diller için aşağıdaki değişiklikler:0)Directus) çevirisi yerelleştirmenin görünür bir parçası olsa da, alt yapı mimarisi dinamik metinleri ele almalıdır ve doğru sol diller için doğru-solda dil koşullarını yönetmeden bile değişiklikler sunar.
Bu makale, web uygulamalarında çok dilli yerelleştirme için Abstract Factory Desen'den nasıl yararlanılacağını, Doğrudanus gibi bir kafasız CMS ile entegre edilen pratik örneklerle ve çevirilere hizmet etmeyi öğreneceksiniz.You will learn how to decouple language-specific file from core application logic, make it simple to add new languages even as your application.
Özet Fabrika Desenini Anlamak
Özet Fabrika Deseni, somut sınıflarını belirtmeden ilgili veya bağımlı nesnelere ait aileler oluşturmak için bir arayüz sağlayan bir yaratım tasarım modelidir. Doğrudan, belirli bir bağlamda doğru nesneyi nasıl inşa edeceğiniz bir fabrika ile etkileşime girersiniz.
Değeri anlamak için, bir "Submit" düğmesine ihtiyacı olan bir UI düşünün. Monolithic approach, you might write:
[0]
Bu bir dil çifti için çalışır, ancak ölçeklendirmez. Şimdi bu durumu etiketlerin, yer sahipleri, hata mesajları ve alettipleri ile uygular. Kod merkezi bir yönetişimle ilgili koşulların laboratuvarını oluşturur. Abstract Factory inverts this: her UI bileşeni için yaratım yöntemlerini tanımlayan bir fabrika arayüzünü tanımlarsınız, sonra dil özel içerikle bu yöntemleri uygulayan beton fabrikaları sağlar.
Dört Kökeni'nin Gang
İlk belgelenmiş InFL:0) Tasarım Desenleri: Reusable Object-Oriented Software), Abstract Factory Deseni ayrıca Kit pattern olarak da bilinir. birincil amacı, dil değişiklikleri yapmadan tüm nesneleri değiştirmenize izin vermek.
Desenin kendisi hakkında daha ayrıntılı bir açıklama için, yazara dayalı referansı gör:0)Refak Guru'nun Özet Fabrika sayfası).
Neden Localization Is a Non-Trivial Problem
Birçok geliştirici yanlışlıkla dize değişimi ile yerelleştirmeyi eşitledi. Gerçek şu ana kadar karmaşık:
- [FONT:0]Text genişleme ve sözleşme: İngilizcede bir cümle daha Almanca veya daha kısa sürede Japonca, kırılma düzeni içinde %40 daha uzun olabilir.
- [FONT:0) Doğrusallık:[Dönetici:[Dönetici:[Dönetici: 0,0) Arapça ve İbranice haklı sol düzeni gerektirir, bu sadece metin değil, hizalama, ikonlar ve navigasyon düzeni etkiler.
- [FONT:0]Pluralizasyon kuralları:[Dönetici:[Dönetici: 1) İngilizcenin tekil / basitliği vardır; Slav dillerin çoğul kategoriye sahiptir; Japonlar onları zar zor ayırt eder.
- [FONT=0]Date, zaman ve sayı formatları:) MM/D/YYYYYYYY / DD / MM / RYYYYYYYY, decimal separatorlar ve para merkezi konumu yerel olarak değişir.
- [[Dönetici:0)Context-bağımlı çeviri:[Dönetici:[Dönetici:0) Aynı kelime farklı UI bağlamlarında farklı çevirilere ihtiyaç duyabilir (örneğin, "File", noun vs.
Güçlü bir yerelleştirme sistemi tüm bu endişeleri ele almalıdır. Abstract Factory Desen, her dilin tüm biçim ve içerik kurallarını, onları çeşitli fayda fonksiyonlarına yaymak yerine, belirli bir fabrikada dağıtmanıza olanak tanır.
Özet Fabrika Desenini Yerelleştirmeye Uygulayın
Bu yaklaşımın özünde, uygulamanızın ihtiyaç duyduğu her yerelleştirilmiş bileşeni oluşturmak için yöntemleri söyleyen soyut bir fabrika arayüzüdür. Tipik bir web uygulamasında, bu düğmeler, etiketler, mesajlar, yer sahipleri, doğrulama ipuçları ve hatta tüm sayfa bölümleri içerir.
Özet Fabrika Interface'i Tanımlamak
Aşağıdaki yöntemleri ortaya koyan bir arayüz düşünün:0)LocalizationMaster
- [[DÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜN
- [[Dinsh:2) – iptal eylem için yerelleştirilmiş etiket döndürür
- [[DÜDÜDÜDÜDÜDÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜ
- [[DÜDÜDÜDÜDÜDÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞ
- [[Dinsh: Yerelleştirilmiş geçerlilik mesajları döndürür.
Her yöntem, hem metin hem de ilişkili metadata içeren bir dize veya yapılandırılmış bir nesne döndürür (örneğin yönsel ipuçları gibi). arayüz herhangi bir somut dil referans etmez, uygulama kodunun tamamen dil-agnostic kalmasını sağlar.
Her Dil için Beton Faktörleri Oluşturun
Arayüzü tanımlamışken, desteklenen dilde bir beton fabrikası uygulayın. Örneğin:
- [FONT:0] İngilizce [8] [DÜDÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Merhabalar!
- [FONT=0] İspanya ́nın üst üste [Döntgen:0) [Dönetici:0] İspanya'nın [8] [Dönder: {name}!”
- [FONT:0] Fransız [8] [Dönetici:0] – "Soumettre", "Annuler", "Bon retour, {name}
- [FONT=0]ArapicMaster [[DÜDÜT:1) – " ⁇ ", " ⁇ ", " ⁇ ", " ⁇ {name} ve ayrıca bir malum var.
Uygulamanız, React veya Vue gibi bir UI çerçevesi kullanırsa, bu fabrikalar aynı zamanda düz dizelerden ziyade bileşeni geri döndürebilir. Örneğin, bir fabrika doğru düğmeyi doğru etiketle yapan tam yapılandırılmış bir Reaktör bileşeni geri dönebilir, stil ve ARIA etiketleri bu dil için.
Örnek: İngilizceFlement Uygulama
[FONT=FONT=)
Bir Web Uygulamasında Deseni Uygulamayı Uygulayın
Gerçek güç, fabrikayı uygulamanızın başlangıç veya talep hattına telince ortaya çıkıyor. Kullanıcının dil tercihini tespit ettiğinizde, uygun beton fabrikasını seçin ve sonra tüm kullanıcı seansı boyunca tüm yerelleştirilmiş içeriği oluşturmak için bu tek fabrikayı kullanın.
Dil Tespiti ve Fabrika Seçiciliği
Dil algılaması birden fazla kaynaktan gelebilir: browserFLT:8) Başlık, yerel depolamada saklanan bir kullanıcı tercihi, bir URL yol segmenti (örneğin, 03.03.2012), veya gerçekleştirilmiş kullanıcılar için bir veritabanı kaydı.Bir kez tespit edildi, dil kodunu fabrikaya haritanız:
[Üye: 9)
Bu fabrika örneği, kullanıcınızın hangi dili aktif olduğunu bilmeniz için uygulamanızın başka bir parçası değildir.
Dinamik UI Bitirme Üretimi
Bir form oluştururken, fabrikayı sert kodlama dizeleri yerine çağırın:
(Ey Âdem)
Şablonunuz temiz ve declaratif hale gelir:
[FONT=FONT][/FONT=)
Yeni bir dil daha sonra eklemek gerekiyorsa, bu şablona asla dokunmazsınız. Sadece yeni bir fabrika sınıfı yaratırsınız ve haritada kayıt olun.
Faktörlerle Yönelme
RTL dilleri için fabrika sadece dizeleri geri döndüremez, ancak yön içeren bir yapılandırma nesnesi:
(Allah’a) yemin ederim.
Uygulamanız sonra www.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S
Scalable Content Management için Directus ile bütünleşme
Fabrika sınıflarındaki sert kodlar küçük bir statik UI metni için uygundur, ancak gerçek dünya uygulamaları dinamik içeriği yönetmek gerekir.Bu, yüksek olmayan CMS gibi bir farmaktr:0)Directus) güçlü bir müttefik haline gelir. Directus, makaleler, ürün açıklaması için de dahil olmak üzere, çeviriler için esnek bir şema sağlar ve hatta geliştirmeyenler güncellemek isteyebilir.
Directus'ta Çevirileri
Directus, yerleşik çeviri alanlarını destekler.Bir koleksiyonda her öğenin en iyi şekilde çalıştığı bir "translasyon" koleksiyonu oluşturabilirsiniz: ESFLT:18 ve ESFLT:19). Alternatif olarak, Directus'un yerel çeviri arayüzünü kullanabilirsiniz.In UI etiketleri için, düz anahtar değer bir yaklaşım genellikle en iyi şekilde çalışır:
- [0]Köleksiyon: [Döntme:[Döncükler:)
- [FONT:0)Fields:[[Dönetici: 1) anahtar (string, benzersiz), en (string), es (string), ar (string)
Fabrikalarınız daha sonra bu çevirileri Uygulama başlangıçlarında veya talep üzerine, zor kodlanmış dizeleri geri dönmek yerine doğrudan uygulama başında getirin.
Direktus Data ile Combining Directus Data with Abstract Factory
Doğrudanus'tan gelen bir çeviri haritası kabul etmek için fabrika uygulamasını değiştirebilirsiniz:
(Allah’a) yemin ederim.
Şimdi, pazarlama ekibi Directus'ta bir etiket güncellendiğinde, bir sonraki kullanıcı oturumu herhangi bir kod dağıtım olmadan değişikliği alır. Abstract Factory modeli sağlam vemdash kalır; sadece dizeleri için veri kaynağını değiştirdiniz.Daha derin bir görünüm için Directus'un çevirileri yerli olarak nasıl ele alır, resmiFLT:0Directus dilsel içerik belgeleri).
Prodüksiyon Sistemleri için Gelişmiş Düşünmeler
Ana model basit olsa da, üretim yerelleştirme sistemleri, bu türistasyon katmanları gerektirir.
Regalizasyon ve ICU Mesaj Format
Statik dizeler "1 öğe" vs. "3 öğe" veya Polonya'nın karmaşık çoğu kurallarının kullanımları gerekir:0)ICU Mesaj Format) gibi bir kütüphane ile yapılan [[Dönetici18).
[Üye: Âdem-i İmran-ı Hakka yemin olsun ki,
Directus'taki anahtar için çeviri ICU çoğu kural içeriyor:ENFLT:23). Fabrika delegeleri, çoğul kategoriyi ele alan i18.
Lazy Factory Instantiation
Her sayfa yük üzerindeki tüm diller için tüm çeviriler boşanıyor.Kariyer anlıklama: Bir kullanıcının dili tespit edildiğinde, sadece bu dilin Directus'tan çevirilerini getir ve onları fabrikaya enjekte edebilirsiniz. Ayrıca, varsayılan dil dizelerini performans için önceden yükleyebilirsiniz.
Fabrika Caching ve Paylaşım
Bir sunucunun dış görünüşü (Node.js, Next.js, Nuxt), her istekte yeniden değerlendirmelerden kaçınmak için dil için önbellekli fabrika örneklerini önbellekli çeviriler yapmanız gerekir. ancak, kullanıcı özellikle aşırı yükleme &dash hakkında dikkatli olun; eğer bir kullanıcı arayüzü etiketini özelleştirebilirse, fabrika oturumda kişiselleştirilmiş olmalıdır.
Özet Fabrika Desenini Yerelleştirmenin Faydaları
Model beton getiriyor, ölçülebilir avantajlar web uygulama gelişimi:
- [FONT:0]Scalability:[Dönetici:[Dönetici: Yeni bir dil eklemek, fabrika haritasında yeni bir fabrika sınıfı ve bir giriş gerektirir.
- [FONT:0)Maintainability:[Dönetici:[Dönetici:0)[Dönetici:0)[Dönetici:0)[Dönetici:0)[Dönetici:0)[Dönetici:[Dönetici:0) İspanyolca için çeviri hatası düzeltme, sadece düzinelerce dosyayı aramamak anlamına gelir.
- [FONT:0]Consistency:[Dönetici: [Dönetici] Aynı fabrika bir dil için tüm bileşenleri üretiyor. Hiç yanlışlıkla bir Fransız sayfasında İngilizce düğmesine basmıyorsunuz, çünkü fabrika tüm yaratımı yönetiyor.
- [FONT:0)Loose Coupling:[Dönetici:[Dönetici:0) Uygulama kodu, beton dil sınıflarında değil, soyut fabrika arayüzüne bağlıdır. Bu, birim testlerine önemsiz hale getirir: öngörülebilir dizeleri geri döndüren bir makineye enjekte edebilirsiniz.
- [FONT:0)Testability:[Dönetici:[Dönetici:0)Testability:[Dönetici:[Dönetici:0)) Her fabrikayı anında test edebilirsiniz ve tüm yöntemlerin beklenen yerelleştirilmiş değerleri geri döndüğünü doğrulayabilirsiniz.
- [[Düzg:0) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Potansiyel Pitfalls ve Them'dan Nasıl Kaçırmak
Hiçbir model ticaret yapmadan değildir. Özet Fabrikayı yerelleşmeye uygulama yaparken bu ortak zorlukların farkında olun:
- [FONT:0)Yüksek Gerilim:[Dönetici:0) Uygulamanız yüzlerce eşsiz UI dizesi varsa, fabrika arayüzü muazzam hale gelir. Bu, ilgili dizeleri alt faktörlere (örneğin, [[DüzDönetmenler) ile ilgili olarak Mitigate.
- [FONT:0] Fabrikalar üzerinde duplikasyonu: İngilizce ve Avustralya İngilizce fabrikaları, varsayılan bir temel fabrika kullanarak kopya-paste'yi % 95 oranında paylaşabilir ve sadece çeşitlendirme yöntemlerinden fazlasını engelleyebilir.
- [FONT:0]Runtime performans:[[Dönetici: 1 ) Her bir dize için bir fabrika yöntemi talep edilebilir. Batch fabrika çağrıları veya bir sayfanın süresi için geri çekleri önleyebilirsiniz.
Gerçek Dünya Örneği: A Directus-Powered Multi-Language Dashboard
Doğrudanus ile arka uçlu bir analitik pano inşa ettiğinizi düşünün. panjurlar, grafik aletler ve kullanıcı dilinde görünmesi gereken form kontrolleri. İşte desen nasıl bittiği:
- [FONT=0] Kullanıcı istekleri[Dönetici:0)[Dönetici:0)[[FONT:0))[[FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=TRNT=FONT=TRNT=))
- [FONT:0) Fabrika[DÜT:1], tüm İspanyolca çevirilerini REST API çağrısıyla getiriyor: 03: 30). Bu, anahtar değerli haritayı iç içe saklar.
- [FONT=0) Sizin pano şablonunuz[[Dönem: 1)) ve "Informes" (İngilizce) çağrıları ve "Ingresos en {term} şeklindedir.
- [0] Eğer kullanıcı anahtarlar Arapça olarak , orta dikkatleri anında (FONTD:33) ve tüm bileşenler yeni fabrika ile yeniden ayarlandığında, ve düzen sorunsuz bir şekilde geri dönüyor.
Bu mimari şablon kodunu temiz tutar ve yerelleştirme mantığı merkezileşmiştir. Japonlar gibi yeni bir dil gerektiğinde, Directus girişlerini ekleyin ve hiçbir koşullu, tahmin işi yok.
Ek Kaynaklar ve Sonraki Adımlar
Özet Fabrika Deseni, yerelleştirme aracı kutusunda sadece bir araçtır. Daha fazla okuma için, bu kaynakları düşünün:
- [FONT:0)Refaksiyon Guru: Özet Fabrika Deseni) – UML diyagramları ve kod örnekleri ile ayrıntılı bir açıklama.
- [FONT=0]İs 18Sonraki Uluslararasılaştırma Çerçeve[[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜSÜŞÜNÜ; ARAPAR, çoğullaştırma ve geri çekilme işlemi ile fabrika modelini tamamlayan olgun i18n bir kütüphane.
- [FONT=0)Directus ⁇ İçerik Kılavuzu[[Döner: 1 ) – Directus içindeki çevirileri yönetmek için resmi belgeler.
Directus'un içerik yönetimi gücü ile Özet Fabrikanın yapısal açıklıklarını birleştirerek size hem mimari olarak ses ve operasyonel olarak esnek olan bir yerelleştirme sistemi veriyor. Basit bir iniş sayfası veya bir işletme SaaS platformu inşa etmek, bu yaklaşım yeni diller eklemek, bir geliştirme projesinden ziyade bir yapılandırma egzersizi haline geliyor.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Özet Fabrika Deseni, web uygulamaları için çok dilli yerelleştirmeyi ilke olarak yürütmenin bir yolunu sağlar.Sessiz bir arayüz arkasındaki dil özel içerik ve davranışları çiğneyerek, şablonlarınızdan koşullu mantık ortadan kaldırır ve kodunuzu değiştirmeniz için esnek hale getirir.Sessiz bir CMS ile bağlantıya hizmet etmek ve hizmet etmek için, desen daha güçlü hale gelir, içerik editörlerinin yerelleştirilmiş dizeleri geliştirici katılımı olmadan yönetmesine olanak sağlar.