2010-03-12 24 views
6

setup.py projelerinin PO dosyalarını derlediğinden ve bir sdist oluşturulduğunda bunları dahil etmesini nasıl sağlayabilirim.Bir Django uygulamasının setup.py dosyasındaki gettext çevirileri nasıl derlenir

django-admin compilemessages 

Ben istiyorum (Bunun anlamı setup.py dosyası birden seviye aşağıya gidiş): Bu, bir Django uygulaması ve MO dosyaları oluşturmak için elle yapılan bir işlemdir uygulamanın kök dizininde aşağıdaki komutu çalıştırmaktır edilir MO dosyalarını her zaman elle derlemekten kaçının. Ve onları depoda saklamak istemiyorum.

cevap

3
from django.core.management.commands.compilemessages import compile_messages 

ve setup yöntemde oluşturulan dosyaları setup çalıştırın ve ardından dahil önce setup.py komut kullanabilirsiniz.

#!/usr/bin/env python 
from setuptools import setup, find_packages 
from setuptools.command.install_lib import install_lib as _install_lib 
from distutils.command.build import build as _build 
from distutils.cmd import Command 


class compile_translations(Command): 
    description = 'compile message catalogs to MO files via django compilemessages' 
    user_options = [] 

    def initialize_options(self): 
     pass 

    def finalize_options(self): 
     pass 

    def run(self): 
     import os 
     import sys 
     from django.core.management.commands.compilemessages import \ 
      compile_messages 
     curdir = os.getcwd() 
     os.chdir(os.path.realpath('app_name')) 
     compile_messages(stderr=sys.stderr) 
     os.chdir(curdir) 


class build(_build): 
    sub_commands = [('compile_translations', None)] + _build.sub_commands 


class install_lib(_install_lib): 
    def run(self): 
     self.run_command('compile_translations') 
     _install_lib.run(self) 

setup(name='app', 
    packages=find_packages(), 
    include_package_data=True, 
    setup_requires=['django'], 
    ... 
    cmdclass={'build': build, 'install_lib': install_lib, 
     'compile_translations': compile_translations} 
) 

Bu yumurtayı oluştururken po dosyaları derlemek veya paketi yüklemeye yardımcı olacaktır:

+1

Sorun, bu görevin otomatikleştirilmesi ile ilgili soru –

+0

Kur, betik normal bir 'python' betiğidir, bu nedenle kodun içinden 'Django' kullanabilirsiniz. Kur, paketinizi yüklemek ve çeşitli adımları izlemeniz gereken normal bir program olan setup.py'yi düşünün. Bunlardan biri "Django" dan compile_messages 'i çağırıyor. Bu, otomatikleştirilmiş paketi yükleme görevini yapar - 'setup.py' çalıştırılmadan önce' django-admin compilemessages' çağırmanız gerekmez. – gruszczy

5

Benim basit bir çözüm (bazı Trac'dan fikrim var).

+0

Harika görünüyor. Bunu daha sonra deneyeceğim. Teşekkürler. – muhuk

+0

Bu güzel, ancak django yüklenmemişken 'python setup.py install' çağrılırken başarısız oluyor (Yükleyici django'yu yüklemeden önce kurulum komutunu çalıştırmayı dener) –

+0

i bu dosyayı düzeltmek için setup_requires = ['django'] ekledim https://bitbucket.org/slav0nic/djangobb/src/de8e836662e8c5e3a294717c24238b20f3cced47/setup.py?at=default – slav0nic