Bir web uygulaması için i18n eklemek için en iyi yolu nedir?

3 Cevap php

Ben bir web uygulaması i18n-ize için arıyorum. Site sürekli değişen olacaktır: metin yazılabilir olacak, yeni ürünleri, web uygulaması PHP ile yazılmış vb ekledi, ama aynı herhangi bir dil için de geçerlidir.

Temelde istiyorum:

1) The code to be readable and maintainable 2) Translators to be sent an email when new stuff is added in English OR the English is changed 3) To know whether something is up-to-date or not. 4) Translators be able to update things online

Ben iyi fikir bir veritabanında her şeyi saklamak ve yol rtaher PO dosyaları ve gettext daha şeyler işlemek için sanırım. Ama ne iyi yolu:

$ Lang ('bizeulaşın') okunmaz (kod-bilge) olmanın dezavantajı vardır, ve (tüm İngilizce benzersiz bir anahtar verilen ve veritabanında saklanan gereken gibi) geliştirmek için daha yavaş

$ Lang ('Daha fazla bilgi için lütfen bize ulaşın') okunabilir ve hızlıdır, ancak İngiliz değişiklikler (yazım hatası, gramer edit, updated) eğer çeviri tamamen kaybolur.

Nasıl diğer uygulamalar / çerçeveler bunu ele?

3 Cevap

Veritabanında tercüme edilmesi gereken dizeleri depolamak kaçının. Kendim ve pişman yaptım. Eğer çevirmenler gönderebilirsiniz harici dosyaları kullanın. Tuşları olarak tercih dilinizde dizeleri kullanın. Yani örneğin $ lang ('Daha fazla bilgi için lütfen bize ulaşın') gibi gitmek için yoludur. İngilizce bir metin değişikliği muhtemelen çeviriler karşılık gelen bir değişiklik bu yüzden evet bu bir bakım baş ağrısı demektir.

Plus, sadece dize çevirileriyle daha kendisine daha var. (Sembol görünene ondalık basamak gruplama sembolleri,) para sembolleri ve biçimleri, sayı biçimleri, tarih biçimlendirme vardır. Biçimlendirme Ad - bazı yerlerde insanlar genellikle genellikle değil diğerlerinde orta isimleri var. Metin okuma yanı sıra soldan sağa vs sağa sola. ugh.

Bir web uygulaması için dil-yerel dizinlere ayrılır web sayfaları var ve onunla bu şekilde başa çıkmak için bazen sadece çok basittir. Hepiniz iş mantığı doğru görünümü kodundan ayrı var mı? Tipik PHP yaklaşım gerçekten zarar başlar ala html içinde doğrudan iş mantık gömerek yerdir.

, Adını yazmanız için kolay bir ile bazı çeviri işlevi yapmak örnek t ($ tuşu) veya _ ($ key) fonksiyonu sağlar, varolan çözümü (örneğin Zend_Translate) veya PHP gettext kullanın.

Çeviri dosyalarının biçimi çok önemli olmamalı - en iyi çeviri sürecini uyuyor ne olursa olsun.

Anahtar için, örneğin İngilizce için, orijinal bir dil kullanın. Uzun dizeleri için yapay tuşları icat bazen mantıklı, örneğin "introduction_text_1"

Sadece diziler kullanmaktan kaçının, veritabanını kullanmak istemiyorum, sabitleri ya da herhangi kısaltılmış çevirisi tuşlarını kullanmak asla. Çeviriler işlemek için sadece profesyonel yolu gettext (gibi) fonksiyonudur.

You should only use _("Original english text queries"). This has the advantage that at least the default language text is still available, should translation data/files be inaccessible.
Don't worry about changes in the text strings. In reality this is rare. If you use the gettext syntax, there are even tools to adapt the language files automatically then. Not many good tools, mind you. But more than for homebrew translation methods, and it gets the job done. If your PHP interpreter doesn't support native gettext, search for the "php-gettext" emulation or "upgradephp".