Changeset 7844
- Timestamp:
- 07/06/08 01:39:44 (2 months ago)
- Files:
-
- django/trunk/django/bin/compile-messages.py (modified) (1 diff)
- django/trunk/django/bin/daily_cleanup.py (modified) (1 diff)
- django/trunk/django/bin/make-messages.py (modified) (1 diff)
- django/trunk/django/core/management/base.py (modified) (1 diff)
- django/trunk/django/core/management/commands/cleanup.py (added)
- django/trunk/django/core/management/commands/compilemessages.py (added)
- django/trunk/django/core/management/commands/makemessages.py (copied) (copied from django/trunk/django/bin/make-messages.py) (8 diffs, 1 prop)
- django/trunk/docs/contributing.txt (modified) (1 diff)
- django/trunk/docs/django-admin.txt (modified) (2 diffs)
- django/trunk/docs/i18n.txt (modified) (11 diffs)
- django/trunk/docs/man/compile-messages.1 (deleted)
- django/trunk/docs/man/django-admin.1 (modified) (4 diffs)
- django/trunk/docs/man/make-messages.1 (deleted)
- django/trunk/docs/sessions.txt (modified) (1 diff)
- django/trunk/docs/settings.txt (modified) (1 diff)
- django/trunk/extras/django_bash_completion (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/bin/compile-messages.py
r6701 r7844 1 1 #!/usr/bin/env python 2 2 3 import optparse 4 import os 5 import sys 3 if __name__ == "__main__": 4 import sys 5 name = sys.argv[0] 6 args = ' '.join(sys.argv[1:]) 7 print >> sys.stderr, "%s has been moved into django-admin.py" % name 8 print >> sys.stderr, 'Please run "django-admin.py compilemessages %s" instead.'% args 9 print >> sys.stderr 10 sys.exit(1) 6 11 7 try:8 set9 except NameError:10 from sets import Set as set # For Python 2.311 12 13 def compile_messages(locale=None):14 basedirs = (os.path.join('conf', 'locale'), 'locale')15 if os.environ.get('DJANGO_SETTINGS_MODULE'):16 from django.conf import settings17 basedirs += settings.LOCALE_PATHS18 19 # Gather existing directories.20 basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs)))21 22 if not basedirs:23 print "This script should be run from the Django SVN tree or your project or app tree, or with the settings module specified."24 sys.exit(1)25 26 for basedir in basedirs:27 if locale:28 basedir = os.path.join(basedir, locale, 'LC_MESSAGES')29 compile_messages_in_dir(basedir)30 31 def compile_messages_in_dir(basedir):32 for dirpath, dirnames, filenames in os.walk(basedir):33 for f in filenames:34 if f.endswith('.po'):35 sys.stderr.write('processing file %s in %s\n' % (f, dirpath))36 pf = os.path.splitext(os.path.join(dirpath, f))[0]37 # Store the names of the .mo and .po files in an environment38 # variable, rather than doing a string replacement into the39 # command, so that we can take advantage of shell quoting, to40 # quote any malicious characters/escaping.41 # See http://cyberelk.net/tim/articles/cmdline/ar01s02.html42 os.environ['djangocompilemo'] = pf + '.mo'43 os.environ['djangocompilepo'] = pf + '.po'44 if sys.platform == 'win32': # Different shell-variable syntax45 cmd = 'msgfmt --check-format -o "%djangocompilemo%" "%djangocompilepo%"'46 else:47 cmd = 'msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"'48 os.system(cmd)49 50 def main():51 parser = optparse.OptionParser()52 parser.add_option('-l', '--locale', dest='locale',53 help="The locale to process. Default is to process all.")54 parser.add_option('--settings',55 help='Python path to settings module, e.g. "myproject.settings". If provided, all LOCALE_PATHS will be processed. If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be checked as well.')56 options, args = parser.parse_args()57 if len(args):58 parser.error("This program takes no arguments")59 if options.settings:60 os.environ['DJANGO_SETTINGS_MODULE'] = options.settings61 compile_messages(options.locale)62 63 if __name__ == "__main__":64 main()django/trunk/django/bin/daily_cleanup.py
r5403 r7844 8 8 """ 9 9 10 import datetime 11 from django.db import transaction 12 from django.contrib.sessions.models import Session 13 14 def clean_up(): 15 """Clean up expired sessions.""" 16 Session.objects.filter(expire_date__lt=datetime.datetime.now()).delete() 17 transaction.commit_unless_managed() 10 from django.core import management 18 11 19 12 if __name__ == "__main__": 20 clean_up()13 management.call_command('cleanup') django/trunk/django/bin/make-messages.py
r7473 r7844 1 1 #!/usr/bin/env python 2 2 3 # Need to ensure that the i18n framework is enabled 4 from django.conf import settings 5 settings.configure(USE_I18N = True) 3 if __name__ == "__main__": 4 import sys 5 name = sys.argv[0] 6 args = ' '.join(sys.argv[1:]) 7 print >> sys.stderr, "%s has been moved into django-admin.py" % name 8 print >> sys.stderr, 'Please run "django-admin.py makemessages %s" instead.'% args 9 print >> sys.stderr 10 sys.exit(1) 6 11 7 from django.utils.translation import templatize8 import re9 import os10 import sys11 import getopt12 from itertools import dropwhile13 14 pythonize_re = re.compile(r'\n\s*//')15 16 def make_messages():17 localedir = None18 19 if os.path.isdir(os.path.join('conf', 'locale')):20 localedir = os.path.abspath(os.path.join('conf', 'locale'))21 elif os.path.isdir('locale'):22 localedir = os.path.abspath('locale')23 else:24 print "This script should be run from the django svn tree or your project or app tree."25 print "If you did indeed run it from the svn checkout or your project or application,"26 print "maybe you are just missing the conf/locale (in the django tree) or locale (for project"27 print "and application) directory?"28 print "make-messages.py doesn't create it automatically, you have to create it by hand if"29 print "you want to enable i18n for your project or application."30 sys.exit(1)31 32 (opts, args) = getopt.getopt(sys.argv[1:], 'l:d:va')33 34 lang = None35 domain = 'django'36 verbose = False37 all = False38 39 for o, v in opts:40 if o == '-l':41 lang = v42 elif o == '-d':43 domain = v44 elif o == '-v':45 verbose = True46 elif o == '-a':47 all = True48 49 if domain not in ('django', 'djangojs'):50 print "currently make-messages.py only supports domains 'django' and 'djangojs'"51 sys.exit(1)52 if (lang is None and not all) or domain is None:53 print "usage: make-messages.py -l <language>"54 print " or: make-messages.py -a"55 sys.exit(1)56 57 languages = []58 59 if lang is not None:60 languages.append(lang)61 elif all:62 languages = [el for el in os.listdir(localedir) if not el.startswith('.')]63 64 for lang in languages:65 66 print "processing language", lang67 basedir = os.path.join(localedir, lang, 'LC_MESSAGES')68 if not os.path.isdir(basedir):69 os.makedirs(basedir)70 71 pofile = os.path.join(basedir, '%s.po' % domain)72 potfile = os.path.join(basedir, '%s.pot' % domain)73 74 if os.path.exists(potfile):75 os.unlink(potfile)76 77 all_files = []78 for (dirpath, dirnames, filenames) in os.walk("."):79 all_files.extend([(dirpath, f) for f in filenames])80 all_files.sort()81 for dirpath, file in all_files:82 if domain == 'djangojs' and file.endswith('.js'):83 if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))84 src = open(os.path.join(dirpath, file), "rb").read()85 src = pythonize_re.sub('\n#', src)86 open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)87 thefile = '%s.py' % file88 cmd = 'xgettext -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (domain, os.path.join(dirpath, thefile))89 (stdin, stdout, stderr) = os.popen3(cmd, 't')90 msgs = stdout.read()91 errors = stderr.read()92 if errors:93 print "errors happened while running xgettext on %s" % file94 print errors95 sys.exit(8)96 old = '#: '+os.path.join(dirpath, thefile)[2:]97 new = '#: '+os.path.join(dirpath, file)[2:]98 msgs = msgs.replace(old, new)99 if os.path.exists(potfile):100 # Strip the header101 msgs = '\n'.join(dropwhile(len, msgs.split('\n')))102 else:103 msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')104 if msgs:105 open(potfile, 'ab').write(msgs)106 os.unlink(os.path.join(dirpath, thefile))107 elif domain == 'django' and (file.endswith('.py') or file.endswith('.html')):108 thefile = file109 if file.endswith('.html'):110 src = open(os.path.join(dirpath, file), "rb").read()111 thefile = '%s.py' % file112 open(os.path.join(dirpath, thefile), "wb").write(templatize(src))113 if verbose:114 sys.stdout.write('processing file %s in %s\n' % (file, dirpath))115 cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (116 domain, os.path.join(dirpath, thefile))117 (stdin, stdout, stderr) = os.popen3(cmd, 't')118 msgs = stdout.read()119 errors = stderr.read()120 if errors:121 print "errors happened while running xgettext on %s" % file122 print errors123 sys.exit(8)124 if thefile != file:125 old = '#: '+os.path.join(dirpath, thefile)[2:]126 new = '#: '+os.path.join(dirpath, file)[2:]127 msgs = msgs.replace(old, new)128 if os.path.exists(potfile):129 # Strip the header130 msgs = '\n'.join(dropwhile(len, msgs.split('\n')))131 else:132 msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')133 if msgs:134 open(potfile, 'ab').write(msgs)135 if thefile != file:136 os.unlink(os.path.join(dirpath, thefile))137 138 if os.path.exists(potfile):139 (stdin, stdout, stderr) = os.popen3('msguniq --to-code=utf-8 "%s"' % potfile, 'b')140 msgs = stdout.read()141 errors = stderr.read()142 if errors:143 print "errors happened while running msguniq"144 print errors145 sys.exit(8)146 open(potfile, 'w').write(msgs)147 if os.path.exists(pofile):148 (stdin, stdout, stderr) = os.popen3('msgmerge -q "%s" "%s"' % (pofile, potfile), 'b')149 msgs = stdout.read()150 errors = stderr.read()151 if errors:152 print "errors happened while running msgmerge"153 print errors154 sys.exit(8)155 open(pofile, 'wb').write(msgs)156 os.unlink(potfile)157 158 if __name__ == "__main__":159 make_messages()django/trunk/django/core/management/base.py
r7294 r7844 6 6 from django.core.exceptions import ImproperlyConfigured 7 7 from django.core.management.color import color_style 8 9 try: 10 set 11 except NameError: 12 from sets import Set as set # For Python 2.3 8 13 9 14 class CommandError(Exception): django/trunk/django/core/management/commands/makemessages.py
- Property svn:executable deleted
r7473 r7844 1 #!/usr/bin/env python2 3 # Need to ensure that the i18n framework is enabled4 from django.conf import settings5 settings.configure(USE_I18N = True)6 7 from django.utils.translation import templatize8 1 import re 9 2 import os 10 3 import sys 11 import getopt12 4 from itertools import dropwhile 5 from optparse import make_option 6 from django.core.management.base import CommandError, BaseCommand 13 7 14 8 pythonize_re = re.compile(r'\n\s*//') 15 9 16 def make_messages(): 17 localedir = None 10 def make_messages(locale=None, domain='django', verbosity='1', all=False): 11 """ 12 Uses the locale directory from the Django SVN tree or an application/ 13 project to process all 14 """ 15 # Need to ensure that the i18n framework is enabled 16 from django.conf import settings 17 settings.configure(USE_I18N = True) 18 19 from django.utils.translation import templatize 18 20 19 21 if os.path.isdir(os.path.join('conf', 'locale')): … … 22 24 localedir = os.path.abspath('locale') 23 25 else: 24 print "This script should be run from the django svn tree or your project or app tree." 25 print "If you did indeed run it from the svn checkout or your project or application," 26 print "maybe you are just missing the conf/locale (in the django tree) or locale (for project" 27 print "and application) directory?" 28 print "make-messages.py doesn't create it automatically, you have to create it by hand if" 29 print "you want to enable i18n for your project or application." 30 sys.exit(1) 26 raise CommandError("This script should be run from the Django SVN tree or your project or app tree. If you did indeed run it from the SVN checkout or your project or application, maybe you are just missing the conf/locale (in the django tree) or locale (for project and application) directory? It is not created automatically, you have to create it by hand if you want to enable i18n for your project or application.") 27 28 if domain not in ('django', 'djangojs'): 29 raise CommandError("currently makemessages only supports domains 'django' and 'djangojs'") 31 30 32 (opts, args) = getopt.getopt(sys.argv[1:], 'l:d:va') 33 34 lang = None 35 domain = 'django' 36 verbose = False 37 all = False 38 39 for o, v in opts: 40 if o == '-l': 41 lang = v 42 elif o == '-d': 43 domain = v 44 elif o == '-v': 45 verbose = True 46 elif o == '-a': 47 all = True 48 49 if domain not in ('django', 'djangojs'): 50 print "currently make-messages.py only supports domains 'django' and 'djangojs'" 51 sys.exit(1) 52 if (lang is None and not all) or domain is None: 53 print "usage: make-messages.py -l <language>" 54 print " or: make-messages.py -a" 55 sys.exit(1) 31 if (locale is None and not all) or domain is None: 32 # backwards compatible error message 33 if not sys.argv[0].endswith("make-messages.py"): 34 message = "Type '%s help %s' for usage.\n" % (os.path.basename(sys.argv[0]), sys.argv[1]) 35 else: 36 message = "usage: make-messages.py -l <language>\n or: make-messages.py -a\n" 37 raise CommandError(message) 56 38 57 39 languages = [] 58 59 if lang is not None: 60 languages.append(lang) 40 if locale is not None: 41 languages.append(locale) 61 42 elif all: 62 43 languages = [el for el in os.listdir(localedir) if not el.startswith('.')] 63 44 64 for l angin languages:65 66 print "processing language", lang67 basedir = os.path.join(localedir, l ang, 'LC_MESSAGES')45 for locale in languages: 46 if verbosity > 0: 47 print "processing language", locale 48 basedir = os.path.join(localedir, locale, 'LC_MESSAGES') 68 49 if not os.path.isdir(basedir): 69 50 os.makedirs(basedir) … … 81 62 for dirpath, file in all_files: 82 63 if domain == 'djangojs' and file.endswith('.js'): 83 if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) 64 if verbosity > 1: 65 sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) 84 66 src = open(os.path.join(dirpath, file), "rb").read() 85 67 src = pythonize_re.sub('\n#', src) … … 91 73 errors = stderr.read() 92 74 if errors: 93 print "errors happened while running xgettext on %s" % file 94 print errors 95 sys.exit(8) 75 raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors)) 96 76 old = '#: '+os.path.join(dirpath, thefile)[2:] 97 77 new = '#: '+os.path.join(dirpath, file)[2:] … … 111 91 thefile = '%s.py' % file 112 92 open(os.path.join(dirpath, thefile), "wb").write(templatize(src)) 113 if verbos e:93 if verbosity > 1: 114 94 sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) 115 95 cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % ( … … 119 99 errors = stderr.read() 120 100 if errors: 121 print "errors happened while running xgettext on %s" % file 122 print errors 123 sys.exit(8) 101 raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors)) 124 102 if thefile != file: 125 103 old = '#: '+os.path.join(dirpath, thefile)[2:] … … 141 119 errors = stderr.read() 142 120 if errors: 143 print "errors happened while running msguniq" 144 print errors 145 sys.exit(8) 121 raise CommandError("errors happened while running msguniq\n%s" % errors) 146 122 open(potfile, 'w').write(msgs) 147 123 if os.path.exists(pofile): … … 150 126 errors = stderr.read() 151 127 if errors: 152 print "errors happened while running msgmerge" 153 print errors 154 sys.exit(8) 128 raise CommandError("errors happened while running msgmerge\n%s" % errors) 155 129 open(pofile, 'wb').write(msgs) 156 130 os.unlink(potfile) 157 131 158 if __name__ == "__main__": 159 make_messages() 132 133 class Command(BaseCommand): 134 option_list = BaseCommand.option_list + ( 135 make_option('--locale', '-l', default=None, dest='locale', 136 help='Creates or updates the message files only for the given locale (e.g. pt_BR).'), 137 make_option('--domain', '-d', default='django', dest='domain', 138 help='The domain of the message files (default: "django").'), 139 make_option('--verbosity', '-v', action='store', dest='verbosity', 140 default='1', type='choice', choices=['0', '1', '2'], 141 help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), 142 make_option('--all', '-a', action='store_true', dest='all', 143 default=False, help='Reexamines all source code and templates for new translation strings and updates all message files for all available languages.'), 144 ) 145 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." 146 147 requires_model_validation = False 148 can_import_settings = False 149 150 def handle(self, *args, **options): 151 if len(args) != 0: 152 raise CommandError("Command doesn't accept any arguments") 153 154 locale = options.get('locale') 155 domain = options.get('domain') 156 verbosity = int(options.get('verbosity')) 157 process_all = options.get('all') 158 159 make_messages(locale, domain, verbosity, process_all) django/trunk/docs/contributing.txt
r7751 r7844 393 393 `i18n documentation`_. 394 394 * Create a diff of the ``.po`` file against the current Subversion trunk. 395 * Make sure that `` bin/compile-messages.py-l <lang>`` runs without395 * Make sure that `` django-admin.py compilemessages -l <lang>`` runs without 396 396 producing any warnings. 397 397 * Attach the patch to a ticket in Django's ticket system. django/trunk/docs/django-admin.txt
r7704 r7844 85 85 86 86 .. _Tutorial 2: ../tutorial02/ 87 88 cleanup 89 ------- 90 91 **New in Django development version** 92 93 Can be run as a cronjob or directly to clean out old data from the database 94 (only expired sessions at the moment). 95 96 compilemessages 97 --------------- 98 99 **New in Django development version** 100 101 Compiles .po files created with ``makemessages`` to .mo files for use with 102 the builtin gettext support. See the `i18n documentation`_ for details. 103 104 --locale 105 ~~~~~~~~ 106 107 Use the ``--locale`` or ``-l`` option to specify the locale to process. 108 If not provided all locales are processed. 109 110 Example usage:: 111 112 django-admin.py compilemessages --locale=br_PT 87 113 88 114 createcachetable <tablename> … … 362 388 363 389 django-admin.py loaddata --verbosity=2 390 391 makemessages 392 ------------ 393 394 **New in Django development version** 395 396 Runs over the entire source tree of the current directory and pulls out all 397 strings marked for translation. It creates (or updates) a message file in the 398 conf/locale (in the django tree) or locale (for project and application) 399 directory. After making changes to the messages files you need to compile them 400 with ``compilemessages`` for use with the builtin gettext support. See the 401 `i18n documentation`_ for details. 402 403 .. _i18n documentation: ../i18n/#how-to-create-language-files 404 405 --all 406 ~~~~~ 407 408 Use the ``--all`` or ``-a`` option to update the message files for all 409 available languages. 410 411 Example usage:: 412 413 django-admin.py makemessages --all 414 415 --locale 416 ~~~~~~~~ 417 418 Use the ``--locale`` or ``-l`` option to specify the locale to process. 419 420 Example usage:: 421 422 django-admin.py makemessages --locale=br_PT 423 424 --domain 425 ~~~~~~~~ 426 427 Use the ``--domain`` or ``-d`` option to change the domain of the messages files. 428 Currently supported: 429 430 * ``django`` for all ``*.py`` and ``*.html`` files (default) 431 * ``djangojs`` for ``*.js`` files 432 433 --verbosity 434 ~~~~~~~~~~~ 435 436 Use ``--verbosity`` or ``-v`` to specify the amount of notification and debug 437 information that ``django-admin.py`` should print to the console. 438 439 * ``0`` means no output. 440 * ``1`` means normal output (default). 441 * ``2`` means verbose output. 442 443 Example usage:: 444 445 django-admin.py makemessages --verbosity=2 364 446 365 447 reset <appname appname ...> django/trunk/docs/i18n.txt
r7842 r7844 123 123 (The caveat with using variables or computed values, as in the previous two 124 124 examples, is that Django's translation-string-detecting utility, 125 `` make-messages.py``, won't be able to find these strings. More on126 ``make -messages`` later.)125 ``django-admin.py makemessages``, won't be able to find these strings. More on 126 ``makemessages`` later.) 127 127 128 128 The strings you pass to ``_()`` or ``ugettext()`` can take placeholders, … … 394 394 language. Message files have a ``.po`` file extension. 395 395 396 Django comes with a tool, ``bin/make-messages.py``, that automates the creation 397 and upkeep of these files. 396 Django comes with a tool, ``django-admin.py makemessages``, that automates the 397 creation and upkeep of these files. 398 399 .. admonition:: A note to Django veterans 400 401 The old tool ``bin/make-messages.py`` has been moved to the command 402 ``django-admin.py makemessages`` to provide consistency throughout Django. 398 403 399 404 To create or update a message file, run this command:: 400 405 401 bin/make-messages.py-l de406 django-admin.py makemessages -l de 402 407 403 408 ...where ``de`` is the language code for the message file you want to create. … … 424 429 .. admonition:: No gettext? 425 430 426 If you don't have the ``gettext`` utilities installed, ``make-messages.py``427 will create empty files. If that's the case, either install the ``gettext``428 utilities or just copy the English message file429 (``conf/locale/en/LC_MESSAGES/django.po``) and use it as a starting point;430 it's just an empty translation file.431 If you don't have the ``gettext`` utilities installed, 432 ``django-admin.py makemessages`` will create empty files. If that's the 433 case, either install the ``gettext`` utilities or just copy the English 434 message file (``conf/locale/en/LC_MESSAGES/django.po``) and use it as a 435 starting point; it's just an empty translation file. 431 436 432 437 The format of ``.po`` files is straightforward. Each ``.po`` file contains a … … 441 446 _("Welcome to my site.") 442 447 443 ...then `` make-messages.py`` will have created a ``.po`` file containing the444 following snippet -- a message::448 ...then ``django-admin.py makemessages`` will have created a ``.po`` file 449 containing the following snippet -- a message:: 445 450 446 451 #: path/to/python/module.py:23 … … 477 482 update all message files for **all** languages, run this:: 478 483 479 make-messages.py-a484 django-admin.py makemessages -a 480 485 481 486 Compiling message files … … 484 489 After you create your message file -- and each time you make changes to it -- 485 490 you'll need to compile it into a more efficient form, for use by ``gettext``. 486 Do this with the `` bin/compile-messages.py`` utility.491 Do this with the ``django-admin.py compilemessages`` utility. 487 492 488 493 This tool runs over all available ``.po`` files and creates ``.mo`` files, 489 494 which are binary files optimized for use by ``gettext``. In the same directory 490 from which you ran `` make-messages.py``, run ``compile-messages.py`` like491 this::492 493 bin/compile-messages.py495 from which you ran ``django-admin.py makemessages``, run 496 ``django-admin.py compilemessages`` like this:: 497 498 django-admin.py compilemessages 494 499 495 500 That's it. Your translations are ready for use. 501 502 .. admonition:: A note to Django veterans 503 504 The old tool ``bin/compile-messages.py`` has been moved to the command 505 ``django-admin.py compilemessages`` to provide consistency throughout 506 Django. 496 507 497 508 .. admonition:: A note to translators … … 599 610 ) 600 611 601 With this arrangement, `` make-messages.py`` will still find and mark602 these strings for translation, but the translation won't happen at603 runtime -- so you'll have to remember to wrap the languages in the *real*612 With this arrangement, ``django-admin.py makemessages`` will still find 613 and mark these strings for translation, but the translation won't happen 614 at runtime -- so you'll have to remember to wrap the languages in the *real* 604 615 ``ugettext()`` in any code that uses ``LANGUAGES`` at runtime. 605 616 … … 678 689 * ``$PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)`` 679 690 680 To create message files, you use the same ``make-messages.py`` tool as with the 681 Django message files. You only need to be in the right place -- in the directory 682 where either the ``conf/locale`` (in case of the source tree) or the ``locale/`` 683 (in case of app messages or project messages) directory are located. And you 684 use the same ``compile-messages.py`` to produce the binary ``django.mo`` files 685 that are used by ``gettext``. 686 687 You can also run ``compile-message.py --settings=path.to.settings`` to make 688 the compiler process all the directories in your ``LOCALE_PATHS`` setting. 691 To create message files, you use the same ``django-admin.py makemessages`` 692 tool as with the Django message files. You only need to be in the right place 693 -- in the directory where either the ``conf/locale`` (in case of the source 694 tree) or the ``locale/`` (in case of app messages or project messages) 695 directory are located. And you use the same ``django-admin.py compilemessages`` 696 to produce the binary ``django.mo`` files that are used by ``gettext``. 697 698 You can also run ``django-admin.py compilemessages --settings=path.to.settings`` 699 to make the compiler process all the directories in your ``LOCALE_PATHS`` 700 setting. 689 701 690 702 Application message files are a bit complicated to discover -- they need the … … 696 708 be used in other projects, you might want to use app-specific translations. 697 709 But using app-specific translations and project translations could produce 698 weird problems with ``make -messages``: ``make-messages`` will traverse all710 weird problems with ``makemessages``: ``makemessages`` will traverse all 699 711 directories below the current path and so might put message IDs into the 700 712 project message file that are already in application message files. … … 702 714 The easiest way out is to store applications that are not part of the project 703 715 (and so carry their own translations) outside the project tree. That way, 704 `` make-messages`` on the project level will only translate strings that are705 connected to your explicit project and not strings that are distributed 706 independently.716 ``django-admin.py makemessages`` on the project level will only translate 717 strings that are connected to your explicit project and not strings that are 718 distributed independently. 707 719 708 720 The ``set_language`` redirect view … … 859 871 860 872 You create and update the translation catalogs the same way as the other 861 Django translation catalogs -- with the make-messages.py tool. The only862 difference is you need to provide a ``-d djangojs`` parameter, like this::863 864 make-messages.py-d djangojs -l de873 Django translation catalogs -- with the django-admin.py makemessages tool. The 874 only difference is you need to provide a ``-d djangojs`` parameter, like this:: 875 876 django-admin.py makemessages -d djangojs -l de 865 877 866 878 This would create or update the translation catalog for JavaScript for German. 867 After updating translation catalogs, just run `` compile-messages.py`` the same868 way as you do with normal Django translation catalogs.879 After updating translation catalogs, just run ``django-admin.py compilemessages`` 880 the same way as you do with normal Django translation catalogs. 869 881 870 882 Specialties of Django translation django/trunk/docs/man/django-admin.1
r7294 r7844 1 .TH "django-admin.py" "1" " June 2007" "Django Project" ""1 .TH "django-admin.py" "1" "March 2008" "Django Project" "" 2 2 .SH "NAME" 3 3 django\-admin.py \- Utility script for the Django web framework … … 22 22 Prints the admin\-index template snippet for the given app name(s). 23 23 .TP 24 .BI cleanup 25 Cleans out old data from the database (only expired sessions at the moment). 26 .TP 27 .BI "compilemessages [" "\-\-locale=LOCALE" "]" 28 Compiles .po files to .mo files for use with builtin gettext support. 29 .TP 24 30 .BI "createcachetable [" "tablename" "]" 25 31 Creates the table needed to use the SQL cache backend … … 43 49 .B sqlall 44 50 for the given app(s) in the current database. 51 .TP 52 .BI "makemessages [" "\-\-locale=LOCALE" "] [" "\-\-domain=DOMAIN" "] [" "\-\-all" "]" 53 Runs over the entire source tree of the current directory and pulls out all 54 strings marked for translation. It creates (or updates) a message file in the 55 conf/locale (in the django tree) or locale (for project and application) directory. 45 56 .TP 46 57 .BI "reset [" "appname ..." "]" … … 137 148 .I \-\-adminmedia=ADMIN_MEDIA_PATH 138 149 Specifies the directory from which to serve admin media when using the development server. 139 150 .TP 151 .I \-l, \-\-locale=LOCALE 152 The locale to process when using makemessages or compilemessages. 153 .TP 154 .I \-d, \-\-domain=DOMAIN 155 The domain of the message files (default: "django") when using makemessages. 156 .TP 157 .I \-a, \-\-all 158 Process all available locales when using makemessages. 140 159 .SH "ENVIRONMENT" 141 160 .TP django/trunk/docs/sessions.txt
r7654 r7844 350 350 the row never gets deleted. 351 351 352 Django provides a sample clean-up script in ``django /bin/daily_cleanup.py``.352 Django provides a sample clean-up script in ``django-admin.py cleanup``. 353 353 That script deletes any session in the session table whose ``expire_date`` is 354 354 in the past -- but your application may have different requirements. django/trunk/docs/settings.txt
r7814 r7844 683 683 ) 684 684 685 With this arrangement, `` make-messages.py`` will still find and mark these686 strings for translation, but the translation won't happen at runtime -- so 687 you'll have to remember to wrap the languages in the *real* ``gettext()`` in 688 any code that uses ``LANGUAGES`` at runtime.685 With this arrangement, ``django-admin.py makemessages`` will still find and 686 mark these strings for translation, but the translation won't happen at 687 runtime -- so you'll have to remember to wrap the languages in the *real* 688 ``gettext()`` in any code that uses ``LANGUAGES`` at runtime. 689 689 690 690 LOCALE_PATHS django/trunk/extras/django_bash_completion
r7727 r7844 43 43 44 44 # Standalone options 45 opts="--help --settings --pythonpath --noinput --noreload --format --indent --verbosity --adminmedia --version "45 opts="--help --settings --pythonpath --noinput --noreload --format --indent --verbosity --adminmedia --version --locale --domain" 46 46 # Actions 47 actions="adminindex createcachetable createsuperuser dbshell diffsettings \48 d umpdata flush inspectdb loaddata reset runfcgi runserver\49 shell sql sqlall sqlclear sqlcustom sqlflush sqlindexes\50 sql reset sqlsequencereset startapp startproject\51 s yncdb test validate"47 actions="adminindex createcachetable createsuperuser compilemessages \ 48 dbshell diffsettings dumpdata flush inspectdb loaddata \ 49 makemessages reset runfcgi runserver shell sql sqlall sqlclear \ 50 sqlcustom sqlflush sqlindexes sqlreset sqlsequencereset startapp \ 51 startproject syncdb test validate" 52 52 # Action's options 53 53 action_shell_opts="--plain" … … 119 119 ;; 120 120 121 createcachetable|dbshell|diffsettings| \ 122 inspectdb|runserver|startapp|startproject|syncdb| \ 121 createcachetable|cleanup|compilemessages|dbshell| \ 122 diffsettings|inspectdb|makemessages| \ 123 runserver|startapp|startproject|syncdb| \ 123 124 validate) 124 125 COMPREPLY=()
