Gereksinimlerinizi karşılayabilen bir açık kaynak çevrimiçi (tercih ettiğiniz sunucuya dağıtılabilir) çeviri aracı Pootle, yani Translate Toolkit üstünde yerleşiktir. Pootle'yi LibreCAD için çevirmen olarak kullandım. LibreCAD's Translation Server'a göz atabilir ve hareket halinde görebilirsiniz. LibreCAD, temel çerçevesi olarak Qt'u kullanır ve Pootle, Qt içindeki çeviriler için kullanılan TS dosyalarını yükleyip karşıdan yükler. Ayrıca, Transifex'u kullandım, Pootle'nin o kadar da süslü olmadığını söyleyebilirim (LibreCAD'in Çeviri Sunucusu'nun Pootle'nin eski bir sürümünü kullandığını aklınızda bulundurduğunuz halde, kendiniz için görebilirsiniz), ancak çalışmak hiç de fena değil. Uygulamanızın çeviriler için ihtiyaç duyacağı dosyaların Çeviri Sunucusundan (ve muhtemelen) alınmasına (ve muhtemelen ithal edilmesine) izin vermeniz gerekir. Bir web tarayıcısı kullanarak çeviri yapabilir veya çevrimdışı çeviri yapabilir ve ardından düzenlenmiş dosyalarınızı yükleyip tüm değişen çevirilerinizi toplu olarak uygulayabilirsiniz. Pootle'den daha benzer ve daha modern bir yaklaşım sunacak gibi görünen bir başka web tabanlı çeviri aracı (daha iyi görünüyor ve sıkı sürüm kontrol entegrasyonu var), aynı zamanda Translate Toolkit'e dayanarak, Weblate. Bu ayrıca açık kaynaklıdır ve tercih ettiğiniz sunucuya dağıtılabilir.
Daha fazla bilgi sağlamak için, Translation Related File Formats numaralı telefona bakarsanız, Pootle and Translate Toolkit'in dışa aktarma/içe aktarma yetenekleri hakkında daha iyi bir fikre sahip olacaksınız. Bu listeden ve çeviri deneyimimden, INI dosyalarınınçekirdek ve uzantıları için kullanıldığını söyleyebilirim, PHP çeviri dizileri Yii uygulamalarındaki çeviriler için kullanılır ve Qt Linguist TS dosyaları daha önce bahsedildiği gibi kullanılır. Qt uygulamalarında çeviriler. Ayrıca, yerelleştirme için Free Software Foundation kitaplığı tarafından onaylanan GNU gettext ile deney yaptım.GNU gettext, Çevir Araç Takımı tarafından ele alınabilecek çeviriler için PO dosyalarını kullanır.
Platformun önemi ne olursa olsun, tüm yerelleştirme yaklaşımlarının arkasındaki temel fikir az çok aynıdır. Belirli bir ana dili olan kodunuzu tasarlıyorsunuz ve bu dili kodunuzda kullanıyorsunuz. İngilizce ideal seçim olurdu ama bu gerekli değil. Tüm geliştiricilerin birlikte çalışabileceği bir dil seçmeli, gelişmeyi yavaşlatmayan bir dil seçmelisiniz (düğmeler için birkaç etiket ararken, yalnızca bir etiket üzerinde dakikalarca düşünmek istemezsiniz) ve bir dil Ana hedef kitleniz tarafından kullanıldığında, sadece ana hedef kitlenin var olması ve aynı zamanda aklınızda başka bir dille gelişmesi durumunda, ana hedefinize tercüme edildikten sonra uygulamanın ana hedef kitleniz için doğal olmadığını hissettirmesi muhtemeldir. izleyicinin dili. Bu, diğer tüm dilleri çevirmek için tüm çevirmenlerin kaynak dil dizilerini (ve dolayısıyla bir referans noktası olarak) alacağı dildir. Uzlaşmak zorunda kalabilirsiniz, çünkü gelişmekte olan tek bir dili konuşuyoruz. Gelişme sırasında, dilinize bir dize eklemeniz gerektiğinde, bunu doğrudan eklemezsiniz, ancak kullandığınız yerelleştirme platformu tarafından belirtilen özel bir işlev çağrısı içine alırsınız. Örneğin bir Qt uygulamasında, QLabel *label = new QLabel("Password:");
yerine QLabel *label = new QLabel(tr("Password:"));
yazabilirsiniz. Uygulamanın yürütülmesi sırasında, kullanıcı dili tr
işlev çağrısı içinde belirlenir, kullanıcı dili için uygun dil dosyası taranır ve kullanıcı dili için "Password:"
'a karşılık gelen çevrilmiş mesaj alınır ve bir etiket olarak kullanılır. Dil belirleme/tanımı, bir global/statik değişkeni esas olarak alan/ayarlayan ayrı bir mekanizmadır; yukarıdaki örnekte tr
işlevi çağrıldığında aranan olanıdır. Her bir platform tarafından özel olarak ele alınabilenler çoğul biçimlerdir (bazı parametrelere dayalı koşullu çeviri). Örneğin Yii'de çeviri dizesi olarak 'n==1#one book|n>1#many books'
olabilir. Uygulamanızda, Yii::t('app', 'n==1#one book|n>1#many books', 1);
kullanırsınız, yani gerçek sayıyı bir parametre olarak gönderirsiniz, böylece doğru biçim kullanılabilir (çeviri işlevinde kullanılan 'app'
parametresi, altından beri app
adlı belirli bir çeviri kategorisini ifade eder. Her dil, uygulamanızın bazı bölümleri için farklı çeviri kategorileri kullanabilirsiniz).
Son bir bakış açısı eklemek için, çeviriler için genel bir ortak arka uç kullanmanız, çevrilmiş dizelerinizin büyük çoğunluğunu, bir çerçeveden diğerine geçerken veya birden çok farklı uygulama var olsa bile yeniden kullanmanıza olanak tanır aynı uygulamayı aynı anda Yerel bir uygulama ile birlikte tarayıcı tabanlı bir uygulama bulunur. Çoğul formlar, gerçekten platform özelliğinden dolayı aynı dil dizisi için özel işleme ve ayrı çeviriler gerektirecektir (ancak gerekirse çoğul biçimlerin çoğu, koşulun çeviri dizgisi alanından kod etki alanına taşınmasıyla ortadan kaldırılabilir). Ancak bir uygulamadaki çevirilerin büyük çoğunluğu, bir dizenin diğerine doğrudan eşleştirilmesidir. Qt gibi bazı çerçeveler, kaynak dosyaları taramak ve özel çeviri işlevinin yeni kullanımlarına (Qt içinde tr
) dayalı çeviri dosyalarını güncellemek için araçlara sahiptir. Seçtiğiniz çerçeve için böyle bir araç varsa, bir çeviri dosyasına manuel olarak bir çeviri eşlemesi eklemeniz gerekmez. Kaynak dosyaları tarandıktan sonra, eşleme çeviri dosyalarında görünecektir, orijinal dizgeye çevirme olarak atanır ve çevrilen dizenin yerine geçmesini bekler. Bir yaklaşıma başlamadan önce olası iş akışlarını araştırın.
Şu anda aynı sorunla karşı karşıyayız. Kendimizi en ucuz ve en iyi çözüm haline getirme sonucuna ulaşmaya başladım. Online olanlar genelde kendi kendimize yapmalarına kıyasla çok sayıda proje ve çoklu dil ile çok pahalıdırlar. – Warpzit
@Warpzit Sanırım yararlı bir bilgi verilemedi. Mümkünse, lütfen kullanmak için hangi platformun kullanılacağı ile ilgili kararınızı bize bildirin. – xnakos
@ xnakos, aslında daha fazla ya da daha az değerli bilgiler sağladılar, sadece geri kalanlardan ayrılmak için herhangi birine yeterince çalışma yapıldığını düşünmüyorum. Eğer AlexVogel aynı şekilde hissederse, Dunno :) – Warpzit