2013-03-12 37 views
7

Şu anda birden çok platform için (iOS, Android, HTML5, BlackBerry ...) bir uygulama için çeviri oluşturma ve ana makine barındırması sorunu yaşıyoruz. Çevirileri barındıran ve gerekli çeviri dosyalarını (en.lproj/Localizable.string, değerler-fr/strings.xml, ...) anında oluşturmak için en iyi yöntemler var mı?Çoklu platformlar için çeviri dosyaları oluşturma hakkında en iyi yöntemler

Çevirileri ve anahtarlarını Google Dokümanlar'daki (veya diğer platformlardaki) bir masada barındırarak ve verileri csv'ye aktararak ve dosyaları oluşturmak için komut dosyalarını kullanmayla ilgili düşünüyorum.

İnternette arama yapıyorum ancak şu ana kadar iyi bir başlangıç ​​noktası buldum.

+0

Ş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

+0

@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

+0

@ 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

cevap

3

Biliyormusunuz Transifex?

Transifex modern, açık kaynaklı bir yerelleştirme platformudur. Karmaşık uluslararası projeler için çeviri iş akışını otomatikleştiren bir web sistemi.

+0

Kulağa hoş geliyor, ama daha az maliyeti daha iyi biliyorsunuz. – AlexVogel

1

http://www.getlocalization.com/

Yayınladıklarınız ve alenen bireysel dizeleri ve bunların çevirisini paylaşmaya çekinmiyorsanız Ücretsizdir yoktur.

+0

Hehe evet bedava ama pratikte çok pahalı ... – Warpzit

+0

Evet, lisanslarını 2013'ten bu yana büyük ölçüde değiştirdiler, artık platformlarını tavsiye etmem. Bu, sitelerine ücretsiz çeviri yapan tüm insanlar için beni üzüyor. Artık bunu yapmak için hiçbir sebep yok. –

4

Çapraz platform yerelleştirme aracı olarak Loco veya Shuttle deneyebilirsiniz.

+0

Loco'nun ücretsiz modelde bazı ağır kısıtlamaları var ama diğer planlar bu kadar pahalı değil. Shuttle'ın arkasındaki fikri gerçekten çok beğendim. Ama gelecekte sadece 2 bağlantıda yapıştırmadan daha fazlasını yapın :) – Warpzit

+0

Elbette, deneyeceğim! –

1

Hem İngilizce hem de Japonca uygulamalar yapıyorum. Yaptığım şey, her iki çeviriyi de uygulamanın herhangi bir yerine erişebildiğim bir dosyada, yani genel bir değişken, örnek, tekil veya ne hissettiğinizi bir dosyada saklamak.
Evde ihtiyacınız olan tüm çevirileri yapın, çünkü bilgisayar çevirmenleri doğru şeyler söylemez. Ardından, onları nerede kullanırsanız kullanın, onu İngilizce veya Japonca yazan bir boolean değerine dayanarak listeden çekin.

+0

Bu çok kötü bir yaklaşım, farklı platformların avantajlarını kullanmıyor. – Warpzit

+0

Patronunuz, şimdi bir iOS sürümü oluşturmanıza izin veriyorsa işe yarar. Ayrıca, paylaşılan bir örneği neden kötü bir yaklaşım kullanıyor? İyi çalışıyor ve tek bir yerde değiştirebiliyorsunuz ve bu program kimin için değişecek. Orada bulundurmak kolay bir çeviri hatası var.Ve onunla uğraşmak için üçüncü bir partide onun tüm kapalı. Öyleyse lütfen bunun nasıl yapıldığını kötü bir şekilde anlatıyor musunuz? – MNM

+0

Ve bu sayede tek bir uygulamada iki veya daha fazla diliniz olabilir. Ve bu yaklaşımla anında farklı diller arasında geçiş yapabilirsiniz. Kullanıcıya hangi dili tercih ettiklerini sormak için basit bir yöntem ve seçenek ekranına sahip olmanız yeterlidir. – MNM

1

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.

2

Birden çok platform için başarıyla PhraseApp kullandık. Hızlı bir komutla çevirileri güncellemek için proje ağacında kabuk betikleri sağlayabileceğimiz bir API var. Bunu bir yapı adımı olarak bile yapabilirsin.

Farklı lokalize platformlarda farklı özellik kümeleri bulunduğundan, bu servisler için yönetilmesi zor olan bazı engellerin varmış gibi görünebileceğini unutmayın. Örneğin, Android iOS'un IIRC içermediği çoğullamayı destekler.