diff --git a/development/scons/SConstruct b/development/scons/SConstruct
index 8c6e74a83a..51069d5e7a 100644
--- a/development/scons/SConstruct
+++ b/development/scons/SConstruct
@@ -2019,8 +2019,14 @@ if update_po:
env.msgmerge(f, '$BUILDDIR/common/lyx.pot')
# build language_l10n.pot
env['BUILDERS']['language_l10n'] = Builder(action=utils.env_language_l10n)
- tar = env.language_l10n('$BUILDDIR/common/language_l10n.pot', '$TOP_SRCDIR/lib/languages')
- Alias('update_po', tar)
+ tar1 = env.language_l10n('$BUILDDIR/common/language_l10n.pot', '$TOP_SRCDIR/lib/languages')
+ env['BUILDERS']['qt4_l10n'] = Builder(action=utils.env_qt4_l10n)
+ tar2 = env.qt4_l10n('$BUILDDIR/common/qt4_l10n.pot',
+ ['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files])
+ env['BUILDERS']['layouts_l10n'] = Builder(action=utils.env_layouts_l10n)
+ tar3 = env.layouts_l10n('$BUILDDIR/common/layouts_l10n.pot',
+ ['$TOP_SRCDIR/lib/layouts/%s' % x for x in lib_layouts_files])
+ Alias('update_po', [tar1, tar2, tar3])
if build_po:
diff --git a/development/scons/scons_manifest.py b/development/scons/scons_manifest.py
index 18fdadee44..bbf40dcc2f 100644
--- a/development/scons/scons_manifest.py
+++ b/development/scons/scons_manifest.py
@@ -2200,6 +2200,7 @@ lib_layouts_files = Split('''
hollywood.layout
ijmpc.layout
ijmpd.layout
+ isprs.layout
jgrga.layout
kluwer.layout
latex8.layout
diff --git a/development/scons/scons_utils.py b/development/scons/scons_utils.py
index e5c995eed9..3fe960ee6d 100644
--- a/development/scons/scons_utils.py
+++ b/development/scons/scons_utils.py
@@ -146,6 +146,64 @@ def env_language_l10n(target, source, env):
output.close()
+def env_qt4_l10n(target, source, env):
+ '''Generate pot file from src/frontends/qt4/ui/*.ui'''
+ output = open(env.File(target[0]).abspath, 'w')
+ pat = re.compile(r'\s*(.*)')
+ prop = re.compile(r'\s*
+ if skipNextLine:
+ skipNextLine = False
+ continue
+ # skip the line after
+ if prop.match(line):
+ skipNextLine = True
+ continue
+ # get lines that match ...
+ if pat.match(line):
+ (string,) = pat.match(line).groups()
+ string = string.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', r'\"')
+ print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
+ (relativePath(env, src), lineno+1, string)
+ input.close()
+ output.close()
+
+
+def env_layouts_l10n(target, source, env):
+ '''Generate pot file from lib/layouts/*.layout and *.inc'''
+ output = open(env.File(target[0]).abspath, 'w')
+ Style = re.compile(r'^Style\s+(.*)')
+ # include ???LabelString???, but exclude comment lines
+ LabelString = re.compile(r'^[^#]*LabelString\S*\s+(.*)')
+ GuiName = re.compile(r'\s*GuiName\s+(.*)')
+ ListName = re.compile(r'\s*ListName\s+(.*)')
+ for src in source:
+ input = open(env.File(src).abspath)
+ for lineno, line in enumerate(input.readlines()):
+ # get lines that match ...
+ if Style.match(line):
+ (string,) = Style.match(line).groups()
+ string = string.replace('_', ' ')
+ elif LabelString.match(line):
+ (string,) = LabelString.match(line).groups()
+ elif GuiName.match(line):
+ (string,) = GuiName.match(line).groups()
+ elif ListName.match(line):
+ (string,) = ListName.match(line).groups()
+ else:
+ continue
+ string = string.replace('\\', '\\\\').replace('"', '')
+ if string != "":
+ print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
+ (relativePath(env, src), lineno+1, string)
+ input.close()
+ output.close()
+
+
def createResFromIcon(env, icon_file, rc_file):
''' create a rc file with icon, and return res file (windows only) '''
if os.name == 'nt':