mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-15 14:05:57 +00:00
84802da29b
* Added `from __future__ import unicode_literals` to every file so now all strings in code are forced to be unicode strings unless marked as byte string `b'str'` or encoded to byte string `'str'.encode('utf-8')`. This is a large change but we have been working towards the goal of unicode strings passed in the code so decoding external input and encoding output as byte strings (where applicable). Note that in Python 2 the `str` type still refers to byte strings. * Replaced the use of `str` for `basestring` in isinstance comparison as this was the original intention but breaks code when encoutering unicode strings. * Marked byte strings in gtkui as the conversion to utf8 is not always handled, mostly related to gobject signal names.
113 lines
3.7 KiB
Python
Executable File
113 lines
3.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2011-2013 Calum Lind <calumlind@gmail.com>
|
|
# Copyright (C) 2009 Andrew Resch <andrewresch@gmail.com>
|
|
#
|
|
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
|
|
# the additional special exception to link portions of this program with the OpenSSL library.
|
|
# See LICENSE for more details.
|
|
#
|
|
|
|
"""Parses Python and Javascript code for translation strings to create the 'deluge.pot' template for translators"""
|
|
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import os
|
|
import re
|
|
from datetime import datetime
|
|
from subprocess import call
|
|
|
|
from gen_web_gettext import create_gettext_js
|
|
from version import get_version
|
|
|
|
# Paths to exclude
|
|
EXCLUSIONS = [
|
|
'deluge/scripts',
|
|
'deluge/i18n',
|
|
'deluge/tests',
|
|
]
|
|
WEBUI_JS_DIR = 'deluge/ui/web/js/deluge-all'
|
|
WEBUI_RENDER_DIR = 'deluge/ui/web/render'
|
|
INFILES_LIST = 'infiles.list'
|
|
POT_FILEPATH = os.path.join('deluge', 'i18n', 'deluge.pot')
|
|
|
|
RE_EXC_PLUGIN_BUILD = re.compile('deluge\\/plugins\\/.*\\/build')
|
|
|
|
xgettext_cmd = [
|
|
'xgettext',
|
|
'--from-code=UTF-8',
|
|
'-kN_:1',
|
|
'-f%s' % INFILES_LIST,
|
|
'-o%s' % POT_FILEPATH,
|
|
'--package-name=%s' % 'Deluge',
|
|
'--copyright-holder=%s' % 'Deluge Team',
|
|
'--package-version=%s' % get_version(prefix='deluge-', suffix='.dev0'),
|
|
'--msgid-bugs-address=%s' % 'http://deluge-torrent.org',
|
|
]
|
|
|
|
to_translate = []
|
|
for (dirpath, dirnames, filenames) in os.walk('deluge'):
|
|
for filename in filenames:
|
|
if dirpath not in EXCLUSIONS and not RE_EXC_PLUGIN_BUILD.match(dirpath):
|
|
filepath = os.path.join(dirpath, filename)
|
|
if os.path.splitext(filepath)[1] in ('.py', '.glade'):
|
|
to_translate.append(filepath)
|
|
elif filename.endswith('.in'):
|
|
call(['intltool-extract', '--quiet', '--type=gettext/ini', filepath])
|
|
to_translate.append(filepath + '.h')
|
|
elif filename.endswith('.ui'):
|
|
call(['intltool-extract', '--quiet', '--type=gettext/glade', filepath])
|
|
to_translate.append(filepath + '.h')
|
|
|
|
with open(INFILES_LIST, 'w') as f:
|
|
for line in to_translate:
|
|
f.write(line + '\n')
|
|
|
|
# Create pot file from file list
|
|
call(xgettext_cmd)
|
|
|
|
# find javascript files
|
|
js_to_translate = []
|
|
for (dirpath, dirnames, filenames) in os.walk(WEBUI_JS_DIR):
|
|
for filename in filenames:
|
|
if os.path.splitext(filename)[1] == '.js':
|
|
js_to_translate.append(os.path.join(dirpath, filename))
|
|
|
|
# find render html files
|
|
for (dirpath, dirnames, filenames) in os.walk(WEBUI_RENDER_DIR):
|
|
for filename in filenames:
|
|
if os.path.splitext(filename)[1] == '.html':
|
|
js_to_translate.append(os.path.join(dirpath, filename))
|
|
|
|
with open(INFILES_LIST, 'w') as f:
|
|
for line in js_to_translate:
|
|
f.write(line + '\n')
|
|
|
|
# Force xgettext language to parse javascript and update pot file
|
|
# Note: For javascript files xgettext will parse comments, so single apostrophes or quotes are
|
|
# flagged as a 'warning: untermined string'. Either ignore warning or edit javascript comment.
|
|
call(xgettext_cmd + ['--language=Python', '-j'])
|
|
|
|
# Replace YEAR and PACKAGE in the copyright message
|
|
with open(POT_FILEPATH, 'r') as f:
|
|
lines = f.readlines()
|
|
with open(POT_FILEPATH, 'w') as f:
|
|
for line in lines:
|
|
if 'YEAR' in line:
|
|
line = line.replace('YEAR', str(datetime.now().year))
|
|
elif 'PACKAGE' in line:
|
|
line = line.replace('PACKAGE', 'Deluge')
|
|
f.write(line)
|
|
|
|
# Clean up temp files
|
|
os.remove(INFILES_LIST)
|
|
for filepath in to_translate:
|
|
if filepath.endswith('.h'):
|
|
os.remove(filepath)
|
|
|
|
# Update web js gettext
|
|
create_gettext_js(WEBUI_JS_DIR)
|
|
|
|
print('Created %s and updated gettext.js' % POT_FILEPATH)
|