Permalink
Fetching contributors…
Cannot retrieve contributors at this time
139 lines (122 sloc) 5.48 KB
# The contents of this file are subject to the Common Public Attribution
# License Version 1.0. (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://code.reddit.com/LICENSE. The License is based on the Mozilla Public
# License Version 1.1, but Sections 14 and 15 have been added to cover use of
# software over a computer network and provide for limited attribution for the
# Original Developer. In addition, Exhibit A has been modified to be consistent
# with Exhibit B.
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
# the specific language governing rights and limitations under the License.
#
# The Original Code is Reddit.
#
# The Original Developer is the Initial Developer. The Initial Developer of the
# Original Code is CondeNet, Inc.
#
# All portions of the code written by CondeNet are Copyright (c) 2006-2008
# CondeNet, Inc. All Rights Reserved.
################################################################################
from distutils.cmd import Command
from babel.messages.frontend import new_catalog as _new_catalog, \
extract_messages as _extract_messages
from distutils.cmd import Command
from distutils.errors import DistutilsOptionError
from babel import Locale
import os, shutil, re
class extract_messages(_extract_messages):
def initialize_options(self):
_extract_messages.initialize_options(self)
self.output_file = 'r2/i18n/r2.pot'
self.mapping_file = 'babel.cfg'
class new_catalog(_new_catalog):
def initialize_options(self):
_new_catalog.initialize_options(self)
self.output_dir = 'r2/i18n'
self.input_file = 'r2/i18n/r2.pot'
self.domain = 'r2'
def finalize_options(self):
_new_catalog.finalize_options(self)
if os.path.exists(self.output_file):
file2 = self.output_file + "-sav"
print " --> backing up existing PO file to '%s'" % file2
shutil.copyfile(self.output_file, file2)
class commit_translation(Command):
description = 'Turns PO into MO files'
user_options = [('locale=', 'l',
'locale for the new localized catalog'), ]
def initialize_options(self):
self.locale = None
self.output_dir = 'r2/i18n'
self.domain = 'r2'
self.string = '_what_'
def finalize_options(self):
if not self.locale:
raise DistutilsOptionError('you must provide a locale for the '
'catalog')
self.input_file = os.path.join(self.output_dir, self.locale,
'LC_MESSAGES', self.domain + '.po')
self.output_file = os.path.join(self.output_dir, self.locale,
'LC_MESSAGES', self.domain + '.mo')
def run(self):
cmd = 'msgfmt -o "%s" "%s"' % (self.output_file, self.input_file)
handle = os.popen(cmd)
print handle.read(),
handle.close()
class test_translation(new_catalog):
description = 'makes a mock-up PO and MO file for testing and sets to en'
user_options = [('locale=', 'l',
'locale for the new localized catalog'),
('string=', 's',
'global string substitution on translation'),
]
def initialize_options(self):
new_catalog.initialize_options(self)
self.locale = 'en'
self.string = '_what_'
def finalize_options(self):
self.output_file = os.path.join(self.output_dir, self.locale,
'LC_MESSAGES', self.domain + '.po')
self.output_file_mo = os.path.join(self.output_dir, self.locale,
'LC_MESSAGES', self.domain + '.mo')
if not os.path.exists(os.path.dirname(self.output_file)):
os.makedirs(os.path.dirname(self.output_file))
self._locale = Locale.parse('en')
self._locale.language = self.locale
def run(self):
new_catalog.run(self)
handle = open(self.output_file)
res = ''
counter = 0
formatting_string = False
for line in handle:
if not ('""' in line):
strlen = len(re.findall(r"\S+", line)) - 1
if "%" in line:
formatting_string = re.findall(r"%\S+", line)
strlen -= len(formatting_string)
formatting_string = (', '.join(formatting_string)).strip('"')
if '""' in line and not("msgid" in line):
strlen = 1 if strlen < 1 else strlen
string = ' '.join([self.string for x in range(0, strlen)])
if formatting_string:
string = '%s [%s]' %(string, formatting_string)
formatting_string = ''
string = '"%s"' % string
res += line if counter < 1 else line.replace('""', string)
counter += 1
elif line.startswith('"Last-Translator:'):
res += line.replace("FULL NAME", "Babel Phish")
else:
res += line
handle.close()
handle = open(self.output_file, 'w')
handle.write(res)
handle.close()
cmd = 'msgfmt -o "%s" "%s"' % (self.output_file_mo, self.output_file)
handle = os.popen(cmd)
print "converting to MO file..."
print handle.read(),
handle.close()