diff --git a/Messages.sh b/Messages.sh index df79880..61e8602 100644 --- a/Messages.sh +++ b/Messages.sh @@ -1,2 +1,3 @@ #! /usr/bin/env bash pybabel extract --add-comments=notes -F babel.cfg -o $podir/gcompris-net.pot . +python3 ./tools/convertLastNewsToPo.py && msgcat $podir/gcompris-net.pot gcompris-news.pot > $podir/gcompris-merged.pot && mv gcompris-merged.pot gcompris-net.pot && rm gcompris-news.pot diff --git a/tools/convertLastNewsToPo.py b/tools/convertLastNewsToPo.py new file mode 100755 index 0000000..2ba52ee --- /dev/null +++ b/tools/convertLastNewsToPo.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +import os +import re +import polib +import sys + +newsCount = -1 +if len(sys.argv) > 1: + newsCount = -int(sys.argv[1]) +print("Fetching last", -newsCount, "news") + +# get all the news in news folder and only get the last N ones that are not translated +lastNews = [news for news in sorted(os.listdir("news")) if not "-" in news and "html" in news][newsCount:] + +potFile = polib.pofile('', encoding="utf-8") +potFile.metadata = { + 'Project-Id-Version': '1.0', + 'Report-Msgid-Bugs-To': 'gcompris-devel@kde.org', + 'MIME-Version': '1.0', + 'Content-Type': 'text/plain; charset=utf-8', + 'Content-Transfer-Encoding': '8bit', +} + +for newsFileName in lastNews: + print(newsFileName) + file = open("news/"+newsFileName, encoding='utf-8') + fileContent = file.readlines() + newsText = [] + for line in fileContent: + if 'set title' in line: + newsTitle = re.search("\'(.+?)\'", line).group(1) + if not "{%" in line: # remove jinja2 expressions + newsText.append(line) + titleEntry = polib.POEntry(msgid=polib.escape(newsTitle), tcomment='news title', msgctxt=newsFileName) + potFile.append(titleEntry) + + text = ''.join(newsText) + contextEntry = polib.POEntry(msgid=polib.escape(text), tcomment='news text', msgctxt=newsFileName) + potFile.append(contextEntry) + +# saving the created po file +potFile.save('gcompris-news.pot') diff --git a/tools/convertPoToNews.py b/tools/convertPoToNews.py new file mode 100755 index 0000000..1ab79fa --- /dev/null +++ b/tools/convertPoToNews.py @@ -0,0 +1,56 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +import os +import re +import polib +import sys +import os.path + +if len(sys.argv) < 3: + print('Usage : python3 convertPoToNews.py locale file.po.') + sys.exit(1) + +locale = sys.argv[1] +poFile = polib.pofile(sys.argv[2], encoding="utf-8") + +news = {} + +for entry in poFile: + filename = entry.msgctxt + if not filename or not filename.find('.html'): + continue + index = filename.find('.html') + filename = "news/" + filename[:index] + '-' + locale + filename[index:] + + if os.path.isfile(filename): + print(filename + " already exists, we skip it") + continue + + context = entry.tcomment + + currentNews = {} + if news.get(filename): + currentNews = news.get(filename) + + if "title" in context: + currentNews['title'] = entry.msgstr + currentNews['header'] = "{% extends \"template/onenews.html\" %}\n" \ + "{% set title = '" + entry.msgstr + "' %}\n" \ + "{% set withlongcontent = 0 %}\n" \ + "{% block content %} \n" + else: + currentNews["newsContent"] = polib.unescape(entry.msgstr) + + news[filename] = currentNews + +FOOTER = "{% endblock %}" +for currentNews in news: + if news[currentNews]['title'] == "" or news[currentNews]['newsContent'] == "": + print("Skip news", currentNews) + continue + + print("Creating", currentNews) + file = open(currentNews, "w", encoding="utf-8") + file.write(news[currentNews]['header']) + file.write(news[currentNews]['newsContent']) + file.write(FOOTER+"\n")