代码之家  ›  专栏  ›  技术社区  ›  muhuk

如何在Django应用程序的setup.py中编译gettext翻译

  •  7
  • muhuk  · 技术社区  · 16 年前

    我怎么确定 setup.py 编译项目PO文件,并在任何时候 sdist 已创建。这是一个Django应用程序,手动生成MO文件的过程是在应用程序的根目录中运行以下命令:

    django-admin compilemessages
    

    (这意味着比setup.py更深一层)

    我希望避免每次手动编译MO文件。我根本不想把它们存储在存储库里。

    2 回复  |  直到 16 年前
        1
  •  3
  •   gruszczy    16 年前
    from django.core.management.commands.compilemessages import compile_messages
    

    把它用在你的生活中 setup.py setup 设置 方法。

        2
  •  6
  •   slav0nic    12 年前

    我的简单解决方案(从Trac得到一些想法):

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