Ben uzman değilim, ama işte bazı temel şeyler:
Dizelerinizin ASCII'den daha fazlasını kullanabileceğinden emin olun
ASCII'ye uymayan bazı özel karakterlere ihtiyacınız olacak ve string sınıfınız daha iyi değil. UTF-8 ortak bir kodlamadır, çünkü yerden tasarruf sağlar. Ne yaparsanız yapın, erken test edin ve akıntıları ütüleyin.
Gerçek bir sicim sınıfını kullanmak gerçekten iyi bir fikirdir ve sadece char *
her yerde değil , acı dolu bir dünyada olacaksınız.
Yazı tiplerini unutma. Kullandığınız tüm fontların, ihtiyacınız olan karakterlere sahip olduğundan emin olun.
Dizelerinizi koddan çıkarın
Bu en önemlisi. Metin dizelerinizin, değiştirebileceğiniz bazı veri dosyasında kod dışında tutulduğundan emin olun. Bunun için bir boru hattı kurmak, bir angarya ön cephesi olabilir, ancak bir süre sonra size tasarruf sağlayacaktır. Basit bir API isteyeceksiniz, böylece kodda bir dizgeye ihtiyacınız olduğunda, bu kadar basit:
String text = Locale::getString("some unique identifier");
Kodda birleştirme veya dizeler oluşturma
Bir metnin nasıl daha küçük kelimelerden oluştuğu konusunda herhangi bir varsayımda bulunmamak önemlidir. En az zararsız bir şey bile:
String currency = Locale::getCurrencyString() + money.toString();
// creates $123
bir problem çünkü diğer diller sayıdan sonra para birimini koyabilir. Bunun yerine, kendileri gibi yerelleştirilmiş biçim dizeleri kullanın:
String format = Locale::get("currency format"); // returns "${0}" in English
String currency = String::Format(format, money.toString());
Bu şekilde, yerelleştiriciler, biçim dizesindeki sözcükleri yeniden düzenleyebilir.
Sanatta görünen, özellikle de videodaki metin miktarını en aza indirin
Sanat varlıklarını çatallamak bir angaryadır. Bazı UI öğeleri için en azından biraz yapmanız gerekecek, ancak bu bir güçlük. FMV'yi istemek çok büyük bir acıdır çünkü artık FMV'nizin kopyalarını hazırlamanız ve saklamanız gerekir.
Farklı dillerde iyice test edin
Çoğu kod tabanında, yerelleştirme API'nizden geçmek zorunda olduklarını söylemek sadece unutmak printf("Hi there");
ya da loadTexture("someTexture");
unutmak çok kolaydır . Biri unutacak ve sonunda ana dilinizde doğru olan ama başkalarında yanlış olan bir şeyle karşılaşacaksınız. Bunları bulmanın tek yolu, test edicilerinizin birincil olmayan dillerde test yaptırmasıdır.
Kayıp yerelleştirilmiş metni belirgin hale getirme
Metninizi genellikle döngünün sonunda çevirirsiniz, bu nedenle çoğu zaman, bazı diller için hiçbir veri olmaz. Bu iyi, çünkü sürekli olarak yeniden tercüme etmek zorunda kalmadan içeriğinizi yinelemenize izin veriyor. Dezavantajı, bir şeyleri kaçırmanız ve bazı şeyleri çevirmeyi unutmanızın kolay olduğu anlamına gelir.
Yapabileceğiniz ucuz bir şey, eksik metinlerin çok açık bir şekilde görünmesini sağlamaktır. Oyunda eksik olduğunda.
UI'nizi en kötü durumdaki dil çevresinde tasarlayın
Farklı diller daha uzun veya daha kısa kelimelere sahip olma eğilimindedir. İngilizce’de güzel görünen bir kullanıcı arayüzü, sınırları aşan, kırpılan veya daha uzun bir dilde yanlış şekilde kaydırılan bir metne sahip olabilir. En kötü durumdaki dili barındırmak için UI değişiklikleri yapmanız gerekecektir (veya kullanıcı arayüzünüzü doldurun, ancak muhtemelen yapmak istediğiniz şey bu değildir .)
Sinir bozucu bir şekilde, İngilizce genellikle yerelleştirilenlerin en kısa dilidir, bu nedenle tasarımcılarınız muhtemelen istemeden en iyi durum için tasarlıyorlar. Tasarladıklarında yer tutucuları için ekstra uzun metin kullanmalarını sağlayın. Herhangi bir metnin İngilizce'den yaklaşık% 30 daha uzun olabileceğini varsayalım. Google Çeviri, yer tutucu için yaklaşık bir metin parçası almak için iyi olabilir.
Çeviri için bütçe zamanı
Metin çevirme genellikle ekip yorgun olduğunda ve gerçekten umursamadığında geç olur. Bununla birlikte, bu olduğunda çok fazla hata alırsınız . Kelimeler sınırları aşar, çevirmenler hata yapar, vb. İşler yapar. Sorunları daha da kötüleştirmek için, yurtdışındaki insanlara metin göndermek ve değişikliklerini beklemek zorunda kalırsanız, metni tekrarlamak için geri dönüş süresi uzayabilir. Bu iş için zaman ayırın.