2010-03-12 3 views
6

이 생성 될 때마다 setup.py이 프로젝트 PO 파일을 컴파일하고 포함하도록하려면 어떻게해야합니까?Django 앱의 setup.py에서 gettext 번역을 컴파일하는 방법

django-admin compilemessages 

내가 싶습니다 (이 의미는 setup.py보다 한 단계 더 깊은 것)이 장고 응용 프로그램 및 MO 파일을 생성하는 수동 프로세스는 응용 프로그램의 루트 디렉토리에서 다음 명령을 실행하는 것입니다 MO 파일을 매번 수동으로 컴파일하지 마십시오. 저장소에 저장소를 저장하고 싶지 않습니다.

답변

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

하고 setup 방법으로 만든 파일을 setup를 실행 한 다음 포함하기 전에 setup.py 스크립트에서 사용할 수 있습니다.

#!/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} 
) 

이 당신이 계란을 구축 할 때 포 파일을 컴파일 또는 패키지를 설치하는 데 도움이됩니다

+1

질문은이 작업을 자동화하는 것에 관한 것입니다. –

+0

설치 스크립트는 일반적인'python' 스크립트이므로'Django '의 코드를 사용할 수 있습니다. 'setup.py'는 패키지를 설치하는 것을 목표로하는 일반 프로그램이며 여러 단계를 따라야합니다. 그들 중 하나는'장고'에서'compile_messages'를 호출하고 있습니다. 이렇게하면 패키지 설치 작업이 자동화됩니다.'setup.py'를 실행하기 전에'django-admin compilemessages'를 호출 할 필요가 없습니다. – gruszczy

5

내 간단한 솔루션 (일부 Trac의에서 아이디어를 얻었다).

+0

멋지다. 나는 나중에 이것을 시도 할 것이다. 감사. – muhuk

+0

django가 설치되지 않은 상태에서'python setup.py install'을 호출하면 좋지만 실패합니다 (설치 프로그램이 장고를 설치하기 전에 설치 명령을 실행하려고합니다) –

+0

이 문제를 해결하기 위해 setup_requires = [ 'django']를 추가했습니다.이 트릭을 사용합니다 in https://bitbucket.org/slav0nic/djangobb/src/de8e836662e8c5e3a294717c24238b20f3cced47/setup.py?at=default – slav0nic