Dillere giden uzun bir yol
Bir süredir kulağa hem ilginç hem de zorlayıcı gelen bir fikir üzerine kafa yoruyorum: Web uygulamam için mümkün olan en az bakımla çoklu dil desteği elde etmek için ne gerekliydi? Ayrıca maliyetleri ana kısıtlama olarak düşünürsek (bu site herhangi bir reklam sunmaz ve herhangi bir izleme kullanmaz, dolayısıyla burada gelir gelmez), geçerli bir çözüm nasıl görünür?
plan
Her şey kullanılacak çeviri motoruyla başlar ve biter. Ubuntu'yu günlük sürücülerimden biri olarak kullandığım için, bir keresinde uygulama mağazasında, DeepL'e güç sağlayanlara benzer en yeni ML modelleri üzerine kurulmuş açık kaynaklı bir çeviri motoru olan "Argos translate" adlı güzel bir küçük uygulama keşfettim. . DeepL'i bilmiyorsanız, web sitelerinde ücretsiz olarak kullanabileceğiniz harika bir çevirmen.
Ancak Argos'a geri dönelim: ilgili depoya bir göz attıktan sonra, kendi kendine barındırılan bir ortama güzel bir şekilde uyan bir OSS python-lib'in de mevcut olduğunu gördüm. Kısa bir süre oyalandıktan sonra, argos translate'in tüm kurulum süreci umduğum kadar iyi sonuçlanmadığından, SaaS teklifleri aracılığıyla bazı çevirmenlere bakmaya karar verdim.
Bu nedenle, GCP'den ayda 500.000 karakter ücretsiz olarak sunan ve ardından her 1.000.000 için bir miktar para alan başka bir hizmet olan Bulut Çevirileri'ni kurdum.
Her şey önbelleğe almakla ilgili
Next.js'nin ISG (artımlı site oluşturma) ile kurulumu sayesinde, her sayfa için çevirileri istek üzerine çağırabiliyorum, bu da tüm çevirilerin aynı anda gerçekleştirilmesine gerek olmadığı için planlamayı oldukça basitleştiriyor.
Yine de çevrilmiş dizelerin önbelleğe alınmasını nasıl ele alacağımdan emin değildim. Elbette, Vercel'in uç ağı (bu PWA'nın barındırıldığı yer) bu görevden kesinlikle yararlanabilir. Ancak dağıtımların çevirilerden bağımsız olmasını istedim. bu nedenle, yine GCP'de barındırılan basit bir Firestore örneği aracılığıyla fazladan bir önbelleğe alma katmanı oluşturdum.
En büyük zorluk, her makale için blok içeriğini ayrıştırmak + değiştirmekti. Eğer bilmiyorsan. Blok içeriği, benim tarafımdan bir CMS'de oluşturulan makalenin gerçek gövdesini açıklar. Tercüme üzerine, bu bloklar düz metin değil, her biri anlamsal bilgi veya meta verilerin depolanmasına izin vermek için özel bir veri yapısına gömülür. Yalnızca ilgili dizeleri güvenilir bir şekilde algılamak + çevirmek, bu uygulamanın daha büyük kısımlarından biriydi.
Bir adam, 12+ dil
(Şu anda) desteklenen diller şunlardır:
- "tr": İngilizce
- "de": Almanca
- "fr": Fransızca
- "es": İspanyolca
- "eo": Esperanto
- "el": Yunanca
- "ja": Japonca
- "ru": Rusça
- "merhaba": Hintçe
- "o": İbranice
- "tr": Türkçe
- "af": Afrikaanca
- "ar": Arapça
- "ko": Korece
Farklı varyantları test etmek için dil kodunu temel url'den sonra yerleştirmeniz yeterlidir. Örneğin: "https://flaming.codes/fr". Ve bu kadar!
Uygulamamı özetlersek, kurulum şöyle görünür:
- her sayfa en az 4 saatte bir, ancak yalnızca talep üzerine statik olarak oluşturulur; bu, belirli bir site için en fazla 4 saatte bir yeni bir çeviri işinin yapıldığı anlamına gelir.
- çeviriler ilk olarak Firestore'dan yüklenir; yalnızca kullanılabilir hiçbir şey yoksa dizeler çevrilir + Firestore'da önbelleğe alınır
Bu kurulum o kadar iyi çalışıyor ki herhangi bir çeviriyi klasik bir şekilde kullanmayacağım, ör. anahtar/değer çiftlerini tutan json dosyalarını manuel olarak oluşturma. Uluslararası hale getirilmesi gereken her şey için Cloud Translation API'yi kullanacağım ve onu tamamen dinamik hale getireceğim. Bu değişiklikler sayesinde, PWA'nın yazım tarihi itibariyle yaklaşık 430 sayfası bulunmaktadır.
Her sayfa İngilizce'den en çok konuşulanları ve aralarında dünya çapında bulunanları temsil eden 13 dile daha tercüme edilir. Bakalım nasıl gelişecek!
- Tom