2010-04-22 20 views
8

Bir projeyi autotools'tan cmake'ye geçiriyorum. Gettext desteği hakkında bir sorum var..pot dosyalarını güncellemek için bir cmake işlevi var mı?

güzel fonksiyonunu sağlayan mevcut bir FindGettext.cmake modülleri bulunmaktadır:

Bir tencerede dosyası ve tercüme po fil sağlamak
GETTEXT_CREATE_TRANSLATIONS(foo.pot ALL fr.po de.po) 

; işlev po dosyaları gmo dosyalarına dönüştürmeyi ve dosyaların çalışma zamanında bulunabildiğinden emin olmak için uygun yükleme hedeflerini eklemeyi sağlar. Hepsi iyi ve iyi.

Şimdi soru geliyor: Yeni dosya eklediğinizde pot dosyalarınızı ve dosyalarınızı nasıl güncellersiniz?

Bunun için, autotools bir "update-po" hedefi oluşturur, (anladığım kadarıyla), çevrilmiş dizeleri içeren tüm dosyaların listelerini içeren bir POTFILES.in okur, diğer bilgilerle karıştırır ve biter. po oluşturmak için xgetext çağırıyor. Ben tekerleği yeniden icat önce, aynı şeyi yapmak için mevcut bir cmake işlevi yoktur, Yani

case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ 
    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --package-name="$${package_gnu}ube" \ 
    --package-version='0.4.0-dev' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
esac 

: Ben coresponding Makefile görev gibi bir şey içeren bir olduğunu düşünüyorum? Veya xgettext yürütülebilir dosyasını bulmalıyım, dosyaları listeler ve bunu elle yapar mıyım? Makefile versiyonu oldukça karmaşık görünüyor (her ne kadar çok sayıda dava ele alsa da); Autotool kabartmak sizi korkutmak izin vermeyin)

Teşekkür

PH

cevap

6

; ben değilcmake eşdeğer yazmak zorunda sakıncası olmaz. :-)

Aşağıdaki kodu kullanabilirsiniz: FindGettext yoktu ben tekerleği yeniden icat etmedi

--language=C --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 -s 
--package-name=${PROJECT_NAME} --package-version=${PRJ_VER} 
_xgettext_option_list olarak C programları için

SET(_potFile ${PROJECT_NAME}.pot) 
ADD_CUSTOM_COMMAND(OUTPUT ${_potFile} 
    COMMAND ${XGETTEXT_CMD} ${_xgettext_option_list} -o ${_potFile} ${_src_list} 
    DEPENDS ${_src_list} 
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 
    COMMENT "Extract translatable messages to ${_potFile}" 
) 

ADD_CUSTOM_TARGET(pot_file ${_all} 
DEPENDS ${_potFile} 
) 

, ben kullanıyorum şu seçenek ALL (ne zaman cmake-2.4) :-)

2

this kde wiki sayfasına göre, düzenleme için cmake kullanarak İdrarlar iyi bir fikir değildir. Çevirileri güncellemek için bağımsız komut dosyasını daha iyi kullanın.

Aslında, mesajların çıkarma ve kaynaşması belirtilen kaynak oluştururderler ait CKağıt konsepti üzerine de eşleşmiyor ve CKağıt ya bu adım için çok fazla yardıma sağlayamaz.

Bu nedenle, bu öğreticide, ilk adımı bağımsız kabuk betiğiyle ele alacağız ve yalnızca ikinci adım CMake tarafından ele alınacaktır. Yanıtınız yardımcı olabilse de, 7 yaşındaki bir soruyu yanıtlıyorsunuz demektir.

+0

Lütfen göndermeden önce cevaplamak istediğiniz mesajların yayınlanma tarihlerini kontrol edin. –

+3

Ancak sorunun 7 yaşında olduğu sorun nedir? İnsanlar bu soruyu (beni de dahil olmak üzere) arıyorlar. Ve burada böyle bir bilgi yoktu. Bu soruyu keşfettikten sonra, gelecekteki araştırmacılar için sonuçlarınızı burada sağladım. – Ashark

İlgili konular