Django

Code

Changeset 8234

Show
Ignore:
Timestamp:
08/08/08 11:41:55 (4 months ago)
Author:
mtredinnick
Message:

Fixed #5463 -- Allow alternate file extensions on files that are translated.
Patch from Jannis Leidel.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/core/management/commands/makemessages.py

    r7848 r8234  
    66from django.core.management.base import CommandError, BaseCommand 
    77 
     8try: 
     9    set 
     10except NameError: 
     11    from sets import Set as set     # For Python 2.3 
     12 
    813pythonize_re = re.compile(r'\n\s*//') 
    914 
    10 def make_messages(locale=None, domain='django', verbosity='1', all=False): 
     15def handle_extensions(extensions=('html',)): 
     16    """ 
     17    organizes multiple extensions that are separated with commas or passed by 
     18    using --extension/-e multiple times. 
     19 
     20    for example: running 'django-admin makemessages -e js,txt -e xhtml -a' 
     21    would result in a extension list: ['.js', '.txt', '.xhtml'] 
     22 
     23    >>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py']) 
     24    ['.html', '.js'] 
     25    >>> handle_extensions(['.html, txt,.tpl']) 
     26    ['.html', '.tpl', '.txt'] 
     27    """ 
     28    ext_list = [] 
     29    for ext in extensions: 
     30        ext_list.extend(ext.replace(' ','').split(',')) 
     31    for i, ext in enumerate(ext_list): 
     32        if not ext.startswith('.'): 
     33            ext_list[i] = '.%s' % ext_list[i] 
     34 
     35    # we don't want *.py files here because of the way non-*.py files 
     36    # are handled in make_messages() (they are copied to file.ext.py files to 
     37    # trick xgettext to parse them as Python files) 
     38    return set([x for x in ext_list if x != '.py']) 
     39 
     40def make_messages(locale=None, domain='django', verbosity='1', all=False, extensions=None): 
    1141    """ 
    1242    Uses the locale directory from the Django SVN tree or an application/ 
     
    6494        all_files.sort() 
    6595        for dirpath, file in all_files: 
    66             if domain == 'djangojs' and file.endswith('.js'): 
     96            file_base, file_ext = os.path.splitext(file) 
     97            if domain == 'djangojs' and file_ext == '.js': 
    6798                if verbosity > 1: 
    6899                    sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) 
     
    88119                    open(potfile, 'ab').write(msgs) 
    89120                os.unlink(os.path.join(dirpath, thefile)) 
    90             elif domain == 'django' and (file.endswith('.py') or file.endswith('.html')): 
     121            elif domain == 'django' and (file_ext == '.py' or file_ext in extensions): 
    91122                thefile = file 
    92                 if file.endswith('.html')
     123                if file_ext in extensions
    93124                    src = open(os.path.join(dirpath, file), "rb").read() 
    94125                    thefile = '%s.py' % file 
     
    145176        make_option('--all', '-a', action='store_true', dest='all', 
    146177            default=False, help='Reexamines all source code and templates for new translation strings and updates all message files for all available languages.'), 
     178        make_option('--extension', '-e', dest='extensions', 
     179            help='The file extension(s) to examine (default: ".html", separate multiple extensions with commas, or use -e multiple times)', 
     180            action='append'), 
    147181    ) 
    148182    help = "Runs over the entire source tree of the current directory and pulls out all strings marked for translation. It creates (or updates) a message file in the conf/locale (in the django tree) or locale (for project and application) directory." 
     
    159193        verbosity = int(options.get('verbosity')) 
    160194        process_all = options.get('all') 
    161  
    162         make_messages(locale, domain, verbosity, process_all) 
     195        extensions = options.get('extensions') or ['html'] 
     196 
     197        if domain == 'djangojs': 
     198            extensions = [] 
     199        else: 
     200            extensions = handle_extensions(extensions) 
     201 
     202        if '.js' in extensions: 
     203            raise CommandError("JavaScript files should be examined by using the special 'djangojs' domain only.") 
     204 
     205        make_messages(locale, domain, verbosity, process_all, extensions) 
  • django/trunk/docs/django-admin.txt

    r8043 r8234  
    412412 
    413413    django-admin.py makemessages --all 
     414 
     415--extension 
     416~~~~~~~~~~~ 
     417 
     418Use the ``--extension`` or ``-e`` option to specify a list of file extensions 
     419to examine (default: ".html"). 
     420 
     421Example usage:: 
     422 
     423    django-admin.py makemessages --locale=de --extension xhtml 
     424 
     425Separate multiple extensions with commas or use -e or --extension multiple times:: 
     426 
     427    django-admin.py makemessages --locale=de --extension=html,txt --extension xml 
    414428 
    415429--locale 
  • django/trunk/docs/i18n.txt

    r8134 r8234  
    426426do the same, but the location of the locale directory is ``locale/LANG/LC_MESSAGES`` 
    427427(note the missing ``conf`` prefix). 
     428 
     429By default ``django-admin.py makemessages`` examines every file that has the 
     430``.html`` file extension. In case you want to override that default, use the 
     431``--extension`` or ``-e`` option to specify the file extensions to examine:: 
     432 
     433    django-admin.py makemessages -l de -e txt 
     434 
     435Separate multiple extensions with commas and/or use ``-e`` or ``--extension`` multiple times:: 
     436 
     437    django-admin.py makemessages -l=de -e=html,txt -e xml 
     438 
     439When `creating JavaScript translation catalogs`_ you need to use the special 
     440'djangojs' domain, **not** ``-e js``. 
     441 
     442.. _create a JavaScript translation catalog: #creating-javascript-translation-catalogs 
    428443 
    429444.. admonition:: No gettext? 
  • django/trunk/docs/man/django-admin.1

    r7844 r8234  
    5050for the given app(s) in the current database. 
    5151.TP 
    52 .BI "makemessages [" "\-\-locale=LOCALE" "] [" "\-\-domain=DOMAIN" "] [" "\-\-all" "]" 
     52.BI "makemessages [" "\-\-locale=LOCALE" "] [" "\-\-domain=DOMAIN" "] [" "\-\-extension=EXTENSION" "] [" "\-\-all" "]" 
    5353Runs over the entire source tree of the current directory and pulls out all 
    5454strings marked for translation. It creates (or updates) a message file in the 
     
    155155The domain of the message files (default: "django") when using makemessages. 
    156156.TP 
     157.I \-e, \-\-extension=EXTENSION 
     158The file extension(s) to examine (default: ".html", separate multiple 
     159extensions with commas, or use -e multiple times). 
     160.TP 
    157161.I \-a, \-\-all 
    158162Process all available locales when using makemessages.