2006-02-19 06:21:31 +08:00
#!/usr/bin/env python
2005-11-04 12:59:46 +08:00
2007-03-09 12:59:58 +08:00
import optparse
2005-11-04 12:59:46 +08:00
import os
import sys
2007-09-16 11:17:48 +08:00
try :
set
except NameError :
from sets import Set as set # For Python 2.3
2007-03-09 12:59:58 +08:00
def compile_messages ( locale = None ) :
2007-09-16 11:17:48 +08:00
basedirs = [ os . path . join ( ' conf ' , ' locale ' ) , ' locale ' ]
if os . environ . get ( ' DJANGO_SETTINGS_MODULE ' ) :
from django . conf import settings
2007-10-03 11:19:14 +08:00
if hasattr ( settings , ' LOCALE_PATHS ' ) :
basedirs + = settings . LOCALE_PATHS
2007-09-16 11:17:48 +08:00
# Gather existing directories.
basedirs = set ( map ( os . path . abspath , filter ( os . path . isdir , basedirs ) ) )
if not basedirs :
print " This script should be run from the Django SVN tree or your project or app tree, or with the settings module specified. "
2006-01-19 08:54:15 +08:00
sys . exit ( 1 )
2005-11-04 12:59:46 +08:00
2007-09-16 11:17:48 +08:00
for basedir in basedirs :
if locale :
basedir = os . path . join ( basedir , locale , ' LC_MESSAGES ' )
compile_messages_in_dir ( basedir )
2007-03-09 12:59:58 +08:00
2007-09-16 11:17:48 +08:00
def compile_messages_in_dir ( basedir ) :
2006-08-13 11:45:43 +08:00
for dirpath , dirnames , filenames in os . walk ( basedir ) :
2006-01-19 09:06:12 +08:00
for f in filenames :
if f . endswith ( ' .po ' ) :
sys . stderr . write ( ' processing file %s in %s \n ' % ( f , dirpath ) )
pf = os . path . splitext ( os . path . join ( dirpath , f ) ) [ 0 ]
2006-08-16 14:28:13 +08:00
# Store the names of the .mo and .po files in an environment
# variable, rather than doing a string replacement into the
# command, so that we can take advantage of shell quoting, to
# quote any malicious characters/escaping.
# See http://cyberelk.net/tim/articles/cmdline/ar01s02.html
os . environ [ ' djangocompilemo ' ] = pf + ' .mo '
os . environ [ ' djangocompilepo ' ] = pf + ' .po '
2006-08-29 02:43:58 +08:00
if sys . platform == ' win32 ' : # Different shell-variable syntax
2007-04-05 23:34:32 +08:00
cmd = ' msgfmt --check-format -o " %d jangocompilemo % " " %d jangocompilepo % " '
2006-08-29 02:43:58 +08:00
else :
2007-04-05 23:34:32 +08:00
cmd = ' msgfmt --check-format -o " $djangocompilemo " " $djangocompilepo " '
2006-01-19 08:54:15 +08:00
os . system ( cmd )
2005-11-04 12:59:46 +08:00
2007-03-09 12:59:58 +08:00
def main ( ) :
parser = optparse . OptionParser ( )
parser . add_option ( ' -l ' , ' --locale ' , dest = ' locale ' ,
help = " The locale to process. Default is to process all. " )
2007-09-16 11:17:48 +08:00
parser . add_option ( ' --settings ' ,
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. ' )
2007-03-09 12:59:58 +08:00
options , args = parser . parse_args ( )
if len ( args ) :
parser . error ( " This program takes no arguments " )
2007-09-16 11:17:48 +08:00
if options . settings :
os . environ [ ' DJANGO_SETTINGS_MODULE ' ] = options . settings
2007-03-09 12:59:58 +08:00
compile_messages ( options . locale )
2006-01-19 08:54:15 +08:00
if __name__ == " __main__ " :
2007-03-09 12:59:58 +08:00
main ( )