2014-06-19 10 views
5

C++ projelerimi nasıl uluslararası hale getirebileceğime bakıyorum ve bu, tekil olmayan değerler ile serpiştirilmiş akış metnin dönüştürülmesini nasıl kullandığını merak etmeme çok zaman almadı. Şimdiye kadar bulduğum tek sayfa bile bu sayfanın this C++ FQA page olacağını belirtiyor, ancak bu sayfa maalesef herhangi bir çözüm sunmaya çok fazla ilgi duymuyor. Ayrıca herhangi bir yere gitmek için görünmeyen this Boost mailing list thread from 2000 da var. Bu C-tarzı için bir örnek olarak C++ akışlarını uluslararasılaştırmak için bir sistem var mı?

, printf deyimi:

printf("There are %d lines in '%s'.", numlines, filename); 

Böyle gettext'lerle çeşitli işlevleri olarak tercüme fonksiyonu, bir çeşit mesajın tamamını sarın ve metin ve mecazi bileşenlerini izin Önemsiz gerektiğinde hareket ettirildi. printf'un POSIX sürümüne (veya printf biçiminde geliştirmeler sunan başka bir kitaplığa) erişiminiz varsa, değerleri gerektiği gibi sırayla düzenleyebilirsiniz.

Ancak eşdeğer C++ akışı tabanlı açıklamada için:

std::cout << "There are " << numlines 
      << "lines in '" << filename << "'."; 

ben çeviri için mesajın tamamını işaretlemek için bir yol bulmak henüz. Her bir dizeyi uygun işlevlerde toplayabilirsiniz, ancak çeviricinin bu üç dizenin hepsinin bir iletinin parçası olduğunu ve aralarında görünenleri bilmesini gerektirir. Ek olarak, en azından bazı i18n çözümlerinin, aynı dizgenin değişmezi olan diğer durumlarının, söz konusu değişkenin içeriğine bağlı olarak değiştiği diller için ayrı olduğu söylenmelidir. Ve dize olmayan değişmez değerleri yeniden düzenlemek zorunda olduğunuz durumları unutun.

Benim sorum şu ki, orada akarsu operasyonlarının kullanımını destekleyen bir uluslararasılaştırma çözümü var mı, yoksa yükselttiğim endişeler için sadece printf stilinde çözümler var mı?

cevap

1

Boost.Format yardımcı olabilir:

cout << boost::format("There are %d lines in '%s'.") % numlines % filename; 

veya

cout << boost::format("There are %1% lines in '%2%'.") % numlines % filename; 
İlgili konular