[Scummvm-git-logs] scummvm master -> 912ffa448f605d0204afc91075f32d9b62816831

sev- noreply at scummvm.org
Tue Mar 21 11:32:49 UTC 2023


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
61552c2e96 I18N: Add script to automatically generate scummvm.appdata.xml from *.po files
dc9baac9d0 I18N: Add simpler template for easy modification and order language tags alphabetically
912ffa448f I18N: Refactor generate-appdata.py


Commit: 61552c2e96dfa843e67ba298a72e3965f66c7d28
    https://github.com/scummvm/scummvm/commit/61552c2e96dfa843e67ba298a72e3965f66c7d28
Author: Ankush Dutt (ankushd100 at gmail.com)
Date: 2023-03-21T12:32:42+01:00

Commit Message:
I18N: Add script to automatically generate scummvm.appdata.xml from *.po files

Changed paths:
  A devtools/generate-appdata.py
    dists/scummvm.appdata.xml


diff --git a/devtools/generate-appdata.py b/devtools/generate-appdata.py
new file mode 100644
index 00000000000..f955a8eae2b
--- /dev/null
+++ b/devtools/generate-appdata.py
@@ -0,0 +1,339 @@
+#!/usr/bin/env python3
+
+# This script generates a dists/scummvm.appdata.xml file with multilanguage support.
+# The multilanguage data is extracted from po/*.po files
+
+from xml.dom import minidom
+import re
+import os
+
+
+def extract_summary(file):
+    with open('../po/' + file) as f:
+        content = f.read()
+    pattern = r'#: dists\/scummvm\.appdata\.xml\.cpp:32\nmsgid ".+"\nmsgstr "(.+)"'
+    summary_match = re.search(pattern, content)
+    if summary_match:
+        summary = summary_match.group(1)
+        return summary.strip()
+    else:
+        return None
+
+
+def extract_par1(file):
+    with open('../po/' + file) as f:
+        content = f.read()
+    pattern = r'#: dists\/scummvm\.appdata\.xml\.cpp:37\nmsgid ""\n(.+\n)*msgstr ""\n((.+\n)*)'
+    par1_match = re.search(pattern, content)
+    if par1_match:
+        par1 = par1_match.group(2)
+        if par1:
+            return par1.strip()
+        else:
+            return None
+    else:
+        return None
+
+
+def extract_par2(file):
+    with open('../po/' + file) as f:
+        content = f.read()
+    pattern = r'#: dists\/scummvm\.appdata\.xml\.cpp:45\nmsgid ""\n(.+\n)*msgstr ""\n((.+\n)*)'
+    par2_match = re.search(pattern, content)
+    if par2_match:
+        par2 = par2_match.group(2)
+        if par2:
+            return par2.strip()
+        else:
+            return None
+    else:
+        return None
+
+
+def extract_par3(file):
+    with open('../po/' + file) as f:
+        content = f.read()
+    pattern = r'#: dists\/scummvm\.appdata\.xml\.cpp:51\nmsgid ""\n(.+\n)*msgstr ""\n((.+\n)*)'
+    par3_match = re.search(pattern, content)
+    if par3_match:
+        par3 = par3_match.group(2)
+        if par3:
+            return par3.strip()
+        else:
+            return None
+    else:
+        return None
+
+
+doc = minidom.Document()
+
+copyright_comment_elem = doc.createComment(
+    " Copyright 2020-2023 The ScummVM Team ")
+doc.appendChild(copyright_comment_elem)
+
+component_elem = doc.createElement("component")
+component_elem.setAttribute("type", "desktop")
+doc.appendChild(component_elem)
+
+
+id_elem = doc.createElement("id")
+id_text = doc.createTextNode("scummvm.desktop")
+id_elem.appendChild(id_text)
+component_elem.appendChild(id_elem)
+
+metadata_license_elem = doc.createElement("metadata_license")
+metadata_license_text = doc.createTextNode("CC0-1.0")
+metadata_license_elem.appendChild(metadata_license_text)
+component_elem.appendChild(metadata_license_elem)
+
+project_license_elem = doc.createElement("project_license")
+project_license_text = doc.createTextNode("GPL-3.0-or-later")
+project_license_elem.appendChild(project_license_text)
+component_elem.appendChild(project_license_elem)
+
+name_elem = doc.createElement("name")
+name_text = doc.createTextNode("ScummVM")
+name_elem.appendChild(name_text)
+component_elem.appendChild(name_elem)
+
+summary_elem = doc.createElement("summary")
+summary_text = doc.createTextNode(
+    "Interpreter for numerous adventure games and role-playing games")
+summary_elem.appendChild(summary_text)
+component_elem.appendChild(summary_elem)
+
+# get file names of all .po files
+file_names = []
+for filename in os.listdir("../po/"):
+    if filename.endswith(".po"):
+        file_names.append(filename)
+
+# summary translations
+for file in file_names:
+    summary = extract_summary(file)
+    if (summary is None):
+        continue
+    summary_elem = doc.createElement("summary")
+    summary_text = doc.createTextNode(summary)
+    summary_elem.appendChild(summary_text)
+    lang = file[0] + file[1]
+    summary_elem.setAttribute("xml:lang", lang)
+    component_elem.appendChild(summary_elem)
+
+developer_name_elem = doc.createElement("developer_name")
+developer_name_text = doc.createTextNode("The ScummVM Team")
+developer_name_elem.appendChild(developer_name_text)
+component_elem.appendChild(developer_name_elem)
+
+provides_elem = doc.createElement("provides")
+component_elem.appendChild(provides_elem)
+
+id_elem = doc.createElement("id")
+id_text = doc.createTextNode("scummvm.desktop")
+id_elem.appendChild(id_text)
+provides_elem.appendChild(id_elem)
+
+description_elem = doc.createElement("description")
+component_elem.appendChild(description_elem)
+
+# paragraph 1
+p_elem = doc.createElement("p")
+p_text = doc.createTextNode('''ScummVM is a program which allows you to run a wide variety of classic
+graphical point-and -click adventure games and role-playing games,
+provided you already have their data files. The clever part about this:
+ScummVM just replaces the executables shipped with the game,
+allowing you to play them on systems for which they were never designed!''')
+p_elem.appendChild(p_text)
+description_elem.appendChild(p_elem)
+
+# paragraph 1 translations
+for file in file_names:
+    par1 = extract_par1(file)
+    if (par1 is None):
+        continue
+
+    # par1 also contains " (quotes) around the text; so we need to replace them with empty
+    # character otherwise " will appear in scummvm.appdata.xml generated file
+    par1 = par1.replace('"', '')
+
+    p_elem = doc.createElement("p")
+    p_text = doc.createTextNode(par1)
+    p_elem.appendChild(p_text)
+    lang = file[0] + file[1]
+    p_elem.setAttribute("xml:lang", lang)
+    description_elem.appendChild(p_elem)
+
+# paragraph 2
+p_elem = doc.createElement("p")
+p_text = doc.createTextNode('''Currently, ScummVM supports a huge library of adventures with over 250 games in total.
+It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
+Revolution Software, Cyan, Inc. and Westwood Studios.''')
+p_elem.appendChild(p_text)
+description_elem.appendChild(p_elem)
+
+# paragraph 2 translations
+for file in file_names:
+    par2 = extract_par2(file)
+    if (par2 is None):
+        continue
+    par2 = par2.replace('"', '')
+    p_elem = doc.createElement("p")
+    p_text = doc.createTextNode(par2)
+    p_elem.appendChild(p_text)
+    lang = file[0] + file[1]
+    p_elem.setAttribute("xml:lang", lang)
+    description_elem.appendChild(p_elem)
+
+# paragraph 3
+p_elem = doc.createElement("p")
+p_text = doc.createTextNode('''Next to ground-breaking titles like the Monkey Island series, Broken Sword,
+Myst, Blade Runner and countless other games you will find
+some really obscure adventures and truly hidden gems to explore.''')
+p_elem.appendChild(p_text)
+description_elem.appendChild(p_elem)
+
+# paragraph 3 translations
+for file in file_names:
+    par3 = extract_par3(file)
+    if (par3 is None):
+        continue
+    par3 = par3.replace('"', '')
+    p_elem = doc.createElement("p")
+    p_text = doc.createTextNode(par3)
+    p_elem.appendChild(p_text)
+    lang = file[0] + file[1]
+    p_elem.setAttribute("xml:lang", lang)
+    description_elem.appendChild(p_elem)
+
+screenshots_elem = doc.createElement("screenshots")
+component_elem.appendChild(screenshots_elem)
+
+screenshot_elem = doc.createElement("screenshot")
+screenshots_elem.appendChild(screenshot_elem)
+screenshot_elem.setAttribute("type", "default")
+
+image_elem = doc.createElement("image")
+image_text = doc.createTextNode(
+    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_1.png")
+image_elem.appendChild(image_text)
+screenshot_elem.appendChild(image_elem)
+
+caption_elem = doc.createElement("caption")
+caption_text = doc.createTextNode("ScummVM Launcher")
+caption_elem.appendChild(caption_text)
+screenshot_elem.appendChild(caption_elem)
+
+screenshot_elem = doc.createElement("screenshot")
+screenshots_elem.appendChild(screenshot_elem)
+
+image_elem = doc.createElement("image")
+image_text = doc.createTextNode(
+    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_2.png")
+image_elem.appendChild(image_text)
+screenshot_elem.appendChild(image_elem)
+
+caption_elem = doc.createElement("caption")
+caption_text = doc.createTextNode(
+    "ScummVM running 'Flight of the Amazon Queen'")
+caption_elem.appendChild(caption_text)
+screenshot_elem.appendChild(caption_elem)
+
+screenshot_elem = doc.createElement("screenshot")
+screenshots_elem.appendChild(screenshot_elem)
+
+image_elem = doc.createElement("image")
+image_text = doc.createTextNode(
+    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_3.png")
+image_elem.appendChild(image_text)
+screenshot_elem.appendChild(image_elem)
+
+caption_elem = doc.createElement("caption")
+caption_text = doc.createTextNode("ScummVM running 'Beneath a Steel Sky'")
+caption_elem.appendChild(caption_text)
+screenshot_elem.appendChild(caption_elem)
+
+screenshot_elem = doc.createElement("screenshot")
+screenshots_elem.appendChild(screenshot_elem)
+
+image_elem = doc.createElement("image")
+image_text = doc.createTextNode(
+    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_4.png")
+image_elem.appendChild(image_text)
+screenshot_elem.appendChild(image_elem)
+
+caption_elem = doc.createElement("caption")
+caption_text = doc.createTextNode(
+    "ScummVM running 'The Curse of Monkey Island'")
+caption_elem.appendChild(caption_text)
+screenshot_elem.appendChild(caption_elem)
+
+screenshot_elem = doc.createElement("screenshot")
+screenshots_elem.appendChild(screenshot_elem)
+
+image_elem = doc.createElement("image")
+image_text = doc.createTextNode(
+    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_5.png")
+image_elem.appendChild(image_text)
+screenshot_elem.appendChild(image_elem)
+
+caption_elem = doc.createElement("caption")
+caption_text = doc.createTextNode("ScummVM running a demo of 'Myst'")
+caption_elem.appendChild(caption_text)
+screenshot_elem.appendChild(caption_elem)
+
+url_elem = doc.createElement("url")
+url_text = doc.createTextNode("https://www.scummvm.org")
+url_elem.appendChild(url_text)
+url_elem.setAttribute("type", "homepage")
+component_elem.appendChild(url_elem)
+
+update_contact_elem = doc.createElement("update_contact")
+update_contact_text = doc.createTextNode("scummvm-devel at lists.scummvm.org")
+update_contact_elem.appendChild(update_contact_text)
+component_elem.appendChild(update_contact_elem)
+
+# content ratings
+content_rating_elem = doc.createElement("content_rating")
+content_rating_elem.setAttribute("type", "oars-1.1")
+component_elem.appendChild(content_rating_elem)
+
+content_attribute_ids = {
+    "violence-cartoon": "none",
+    "violence-fantasy": "none",
+    "violence-realistic": "none",
+    "violence-bloodshed": "none",
+    "violence-sexual": "none",
+    "violence-desecration": "none",
+    "violence-slavery": "none",
+    "violence-worship": "none",
+    "drugs-alcohol": "none",
+    "drugs-narcotics": "none",
+    "drugs-tobacco": "none",
+    "sex-nudity": "none",
+    "sex-themes": "none",
+    "sex-homosexuality": "none",
+    "sex-prostitution": "none",
+    "sex-adultery": "none",
+    "sex-appearance": "none",
+    "language-profanity": "none",
+    "language-humor": "none",
+    "language-discrimination": "none",
+    "social-chat": "none",
+    "social-info": "none",
+    "social-audio": "none",
+    "social-location": "none",
+    "social-contacts": "none",
+    "money-purchasing": "none",
+    "money-gambling": "none",
+}
+
+for id in content_attribute_ids:
+    content_attribute_elem = doc.createElement("content_attribute")
+    content_attribute_text = doc.createTextNode(content_attribute_ids[id])
+    content_attribute_elem.appendChild(content_attribute_text)
+    content_attribute_elem.setAttribute("id", id)
+    content_rating_elem.appendChild(content_attribute_elem)
+
+# write to scummvm.appdata.xml file
+with open("../dists/scummvm.appdata.xml", "wb") as f:
+    f.write(doc.toprettyxml(indent="  ", encoding="UTF-8"))
diff --git a/dists/scummvm.appdata.xml b/dists/scummvm.appdata.xml
index b10f2f844fc..0c4eaadf90d 100644
--- a/dists/scummvm.appdata.xml
+++ b/dists/scummvm.appdata.xml
@@ -6,29 +6,258 @@
   <project_license>GPL-3.0-or-later</project_license>
   <name>ScummVM</name>
   <summary>Interpreter for numerous adventure games and role-playing games</summary>
+  <summary xml:lang="ru">Интерпретатор множества приключенческих и ролевых игр</summary>
+  <summary xml:lang="ja">数多くのアドベンチャーゲームやロールプレイングゲームの通訳</summary>
+  <summary xml:lang="es">Intérprete de numerosas aventuras gráficas y RPG</summary>
+  <summary xml:lang="uk">Інтерпретатор для численних пригодницьких і рольових ігор</summary>
+  <summary xml:lang="be">Інтэрпрэтатар многіх авантурных і ролявых гульняў</summary>
+  <summary xml:lang="fr">Interpréteur pour de nombreux jeux d'aventure et jeux de rôle</summary>
+  <summary xml:lang="it">Interprete per numerosi giochi di avventura e di ruolo</summary>
+  <summary xml:lang="nl">Interpreter voor diverse adventure spellen en rollenspellen</summary>
+  <summary xml:lang="hu">Interpreter számos kalandjátékhoz és szerepjátékhoz</summary>
+  <summary xml:lang="pt">Interpretador de vários jogos de aventura e RPGs</summary>
+  <summary xml:lang="ko">여러 어드벤처 게임과 RPG를 위한 인터프리터</summary>
   <summary xml:lang="de">Interpreter für zahlreiche Adventure-Spiele und RPGs</summary>
+  <summary xml:lang="ca">Intèrpret per a nombrosos jocs d'aventura i jocs de rol</summary>
+  <summary xml:lang="pl">Interpreter wielu gier przygodowych oraz RPG</summary>
+  <summary xml:lang="pt">Interpretador para vários jogos de aventura e RPG</summary>
+  <summary xml:lang="fi">Pelitulkki lukuisille seikkailu- ja roolipeleille</summary>
+  <summary xml:lang="nb">Programvaretolk for utallige eventyr- og rollespill</summary>
+  <summary xml:lang="he">מפרש עבור מספר גדול של משחקי הרפתקאות ומשחקי תפקידים</summary>
   <developer_name>The ScummVM Team</developer_name>
   <provides>
     <id>scummvm.desktop</id>
   </provides>
   <description>
-    <p>
-      ScummVM is a program which allows you to run a wide variety of classic
-      graphical point-and-click adventure games and role-playing games,
-      provided you already have their data files. The clever part about this:
-      ScummVM just replaces the executables shipped with the game,
-      allowing you to play them on systems for which they were never designed!
-    </p>
-    <p>
-      Currently, ScummVM supports a huge library of adventures with over 250 games in total.
-      It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
-      Revolution Software, Cyan, Inc. and Westwood Studios.
-    </p>
-    <p>
-      Next to ground-breaking titles like the Monkey Island series, Broken Sword,
-      Myst, Blade Runner and countless other games you will find
-      some really obscure adventures and truly hidden gems to explore.
-    </p>
+    <p>ScummVM is a program which allows you to run a wide variety of classic
+graphical point-and -click adventure games and role-playing games,
+provided you already have their data files. The clever part about this:
+ScummVM just replaces the executables shipped with the game,
+allowing you to play them on systems for which they were never designed!</p>
+    <p xml:lang="ru">ScummVM - это программа, которая позволяет запускать широкий спектр 
+классических графических приключенческих игр и ролевых игр, при условии, что 
+у вас уже есть их файлы данных. Самое умное в этом: ScummVM просто заменяет 
+исполняемые файлы, поставляемые с игрой, позволяя вам играть в них на 
+системах, для которых они никогда не были разработаны!</p>
+    <p xml:lang="ja">ScummVMは、データファイルが既にある場合に、さまざまな古典的なグラフィカルポイ
+ントアンドクリックアドベンチャーゲームやロールプレイングゲームを実行できるよ
+うにするプログラムです。これに関する巧妙な部分:ScummVMは、ゲームに付属してい
+る実行可能ファイルを置き換えるだけなので、設計されたことのないシステムで実行
+できます!</p>
+    <p xml:lang="es">ScummVM es un programa que te permite ejecutar una amplia selección de 
+aventuras gráficas «point-and-click» y RPG clásicos, siempre y cuando ya 
+tengas sus archivos de datos. Lo interesante es que ScummVM se limita a 
+sustituir los ejecutables de cada juego, ¡lo que permite jugarlos en 
+sistemas para los que nunca fueron diseñados!</p>
+    <p xml:lang="uk">ScummVM - це програма, яка дозволяє запускати широкий спектр класичних 
+графічних пригодницьких ігор та рольових ігор, якщо у вас вже є їх файли 
+даних. Щонайголовніше: ScummVM просто замінює виконувані файли, що 
+постачаються разом із грою, дозволяючи відтворювати їх у системах, для яких 
+вони ніколи не були розроблені!</p>
+    <p xml:lang="be">ScummVM — гэта праграма для запуску розных клясічных графічных point-and-
+click авантурных і ралявых гульняў, пры ўмове, што вы маеце зьвесткі тых 
+гульняў. Карацей, ScummVM проста замяняе выканальныя файлы гульняў, 
+дазваляючы гуляць на сістэмах, на якія іх ніколі не распрацоўвалі!</p>
+    <p xml:lang="fr">ScummVM est un programme qui vous permet d'exécuter une grande variété de 
+jeux d'aventure graphique point-and-click et de jeux de rôle, à condition 
+que vous ayez déjà leurs fichiers de données. Ce qui est génial dans tout 
+ça : ScummVM remplace simplement les exécutables livrés avec les jeux, ce 
+qui vous permet de jouer sur des systèmes pour lesquels ces jeux n'ont 
+jamais été conçus !</p>
+    <p xml:lang="it">ScummVM è un programma che permette di eseguire svariate avventure grafiche 
+e giochi di ruolo classici, a patto di averne a disposizione i files 
+originali. Il bello è che ScummVM sostituisce gli eseguibili originari, 
+permettendo di eseguire i giochi su piattaforme per cui non erano neppure 
+mai stati pensati!</p>
+    <p xml:lang="el">Το ScummVM είναι μια εφαρμογή που σας επιτρέπει να παίξετε μια ευρεία 
+ποικιλία από κλασσικά παιχνίδια περιπέτειας point-and-click, και ρόλων 
+(adventure και role-playing), αρκεί να έχετε στην κατοχή σας τα αρχεία 
+δεδομένων τους. Το ενδιαφέρον σε αυτή την υπόθεση είναι το εξής: το ScummVM 
+απλά αντικαθιστά τα εκτελέσιμα που συνόδευαν τα παιχνίδια, επιτρέποντάς σας 
+να τα παίξετε σε συστήματα για τα οποία δεν είχαν σχεδιαστεί ποτέ!</p>
+    <p xml:lang="nl">ScummVM is een programma die het mogelijk maakt om een grote verscheidenheid 
+aan klassieke grafische point-and-click adventure spellen en rollenspellen 
+te spelen, mits je de benodigde data bestanden al hebt. Het unieke hiervan 
+is: ScummVM vervangt de executables die bij het spel geleverd worden, 
+waardoor je ze kan spelen op systemen waar ze niet voor waren gemaakt!</p>
+    <p xml:lang="hu">A ScummVM egy olyan program, mely számos klasszikus grafikus point-and-click 
+kalandjáték és szerepjáték futtatását teszi lehetővé, feltéve, hogy már 
+rendelkeznek az adatfájljaikkal. Az okos rész ebben: A ScummVM csak 
+kicseréli a játékkal szállított futtatható fájlokat, lehetővé téve számukra, 
+hogy olyan rendszereken játsszák őket, amelyekre soha nem lettek tervezve!</p>
+    <p xml:lang="ko">ScummVM은 데이터 파일을 가진 경우 다양한 고전 그래픽 포인트 앤 클릭 어드벤처 
+게임과 롤플레잉 게임을 실행할 수 있게 하는 프로그램입니다. ScummVM은 게임과 
+함께 제공된 실행파일을 대체하기 때문에 원래 게임이 실행되도록 설계되지 않은 
+시스템에서도 실행할 수 있습니다!</p>
+    <p xml:lang="de">ScummVM ist ein Programm, welches dir ermöglicht, zahlreiche Adventures und 
+RPGs auszuführen, vorausgesetzt, du bist im Besitz der passenden 
+Spieldateien. ScummVM ersetzt dabei die ausführbaren Programmdateien, die 
+ursprünglich mit dem Spiel mitgeliefert wurden. Dadurch können diese Spiele 
+auf Systemen gespielt werden, für welche sie nie entwickelt wurden!</p>
+    <p xml:lang="ca">ScummVM és un programa que permet executar una àmplia varietat de jocs 
+clàssics d'aventures gràfiques «point-and-click» i jocs de rol, sempre que 
+ja tingueu els seus fitxers de dades. La part intel·ligent sobre això: 
+ScummVM només substitueix els executables originals del joc, permetent-vos 
+jugar-los en sistemes per als quals mai van ser dissenyats!</p>
+    <p xml:lang="pl">ScummVM to program pozwalajÄ…cy na uruchomienie bogatego wyboru klasycznych 
+graficznych gier przygodowych typu „wskaż i kliknij”, oraz gier RPG - pod 
+warunkiem posiadania ich danych. ScummVM podmienia oryginalny program gier, 
+pozwalając na granie w nie na systemach, na które nigdy nie były napisane!</p>
+    <p xml:lang="pt">ScummVM é um programa que permite que você execute uma ampla variedade de 
+jogos clássicos de point-and-click (apontar e clicar) e RPG, desde que você 
+já tenha seus arquivos de dados. A melhor parte: ScummVM apenas substitui os 
+executáveis do jogo, permitindo que você os jogue em sistemas para os quais 
+eles nunca foram projetados!</p>
+    <p xml:lang="fi">ScummVM on ohjelma jonka avulla voit pelata lukuisia klassisia graafisia 
+seikkailu- ja roolipelejä, olettaen että sinulla on jo pelien datatiedostot. 
+Tämä on fiksua koska: ScummVM korvaa itse ajettavan peliohjelman, joten voit 
+pelata pelejä jopa alustoilla joille pelejä ei koskaan suunniteltu!</p>
+    <p xml:lang="nb">ScummVM er et program som lar deg kjøre et bredt assortiment av klassiske 
+pek-og-klikk-eventyrspill og rollespill – forutsatt at du allerede har 
+datafilene til spillet. Det finurlige med det hele er at ScummVM kun 
+erstatter selve programdelen av spillet og gjør det slik at du kan spille 
+det på plattformer det aldri var utviklet til å kjøre på!</p>
+    <p xml:lang="he">ScummVM הינה תכנה שמאפשרת להריץ מגוון רחב של משחקי הרפתקאות גרפיים הצבע-
+והקלק ומשחקי תפקידים, בהינתן קבצי הנתונים שלהם. החלק המעניין הוא: ScummVM 
+מחליפה רק את קובץ הריצה שהגיע עם המשחק, מה שמאפשר לשחק בהם על מערכות אליהם 
+המשחק מעולם לא תוכנן!</p>
+    <p>Currently, ScummVM supports a huge library of adventures with over 250 games in total.
+It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
+Revolution Software, Cyan, Inc. and Westwood Studios.</p>
+    <p xml:lang="ru">В настоящее время ScummVM поддерживает огромную библиотеку приключений, 
+насчитывающую в общей сложности более 4000 игр. Он поддерживает множество 
+классических произведений, выпущенных легендарными студиями, такими как 
+LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. и Westwood 
+Studios.</p>
+    <p xml:lang="ja">現在、ScummVMは、合計4000を超えるゲームを備えた膨大なアドベンチャーライブラリ
+をサポートしています。 LucasArts、Sierra On-Line、Revolution Software、Cyan、
+Inc.、WestwoodStudiosなどの伝説的なスタジオによって公開された多くのクラシック
+をサポートしています.</p>
+    <p xml:lang="es">ScummVM es compatible con una inmensa biblioteca de más de 4 000 juegos en 
+total. Funciona con muchos de los clásicos publicados por estudios 
+legendarios como LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. 
+y Westwood Studios.</p>
+    <p xml:lang="uk">В даний час ScummVM підтримує величезну бібліотеку пригодницьких ігор із 
+загальною кількістю понад 4000. Проект підтримує багато класичних творів, 
+опублікованих такими легендарними студіями, як LucasArts, Sierra On-Line, 
+Revolution Software, Cyan, Inc. та Westwood Studios.</p>
+    <p xml:lang="be">На гэты момант ScummVM падтрымлівае вялічэзную бібліятэку авантур, дзе болей 
+за 4000 гульняў. Вы зможаце дакрануцца да многіх клясічных твораў, выданых 
+леґэндарнымі студыямі як LucasArts, Sierra On-Line, Revolution Software, 
+Cyan, Inc. Ñ– Westwood Studios.</p>
+    <p xml:lang="fr">Actuellement, ScummVM supporte une énorme collection d'aventures avec plus 
+de 4000 jeux au total. Il prend en charge de nombreux classiques publiés par 
+des studios légendaires comme LucasArts, Sierra On-Line, Revolution 
+Software, Cyan, Inc. et Westwood Studios.</p>
+    <p xml:lang="it">Attualmente, ScummVM supporta una vastissima collezione di giochi di 
+avventura, per un totale di oltre 4000 titoli. Tra questi, molti giochi 
+rinomati pubblicati da editori leggendari come la LucasArts, la Sierra On-
+Line, la Revolution Software, la Cyan, Inc. o i Westwood Studios.</p>
+    <p xml:lang="el">Το ScummVM υποστηρίζει μια τεράστια βιβλιοθήκη από παιχνίδια περιπέτειας 
+(adventure games) με περισσότερους από 4000 τίτλους συνολικά. Υποστηρίζει 
+πολλούς από τους κλασσικούς τίτλους που έχουν εκδώσει θρυλικά στούντιο όπως 
+οι LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. και Westwood 
+Studios.</p>
+    <p xml:lang="nl">Momenteel ondersteunt ScummVM een enorme hoeveelheid adventures van meer dan 
+4000 spellen in totaal. Het ondersteunt vele klassiekers gepubliceerd door 
+legendarische studios als LucasArts, Sierra On-Line, Revolution Software, 
+Cyan, Inc. en Westwood Studios.</p>
+    <p xml:lang="hu">Jelenleg a ScummVM egy hatalmas kalandkönyvtárat támogat, összesen több mint 
+4000 játékkal. Támogatja számos legendás stúdió által kiadott klasszikust, 
+mint például a LucasArts, a Sierra On-Line, a Revolution Software, a Cyan, 
+Inc. és a Westwood Studios.</p>
+    <p xml:lang="ko">현재 ScummVM은 합계 4000개를 넘는 수많은 어드벤처 게임을 지원합니다. 
+LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc., 그리고 Westwood 
+Studios 같은 전설적인 스튜디오에서 발표된 많은 고전을 지원합니다.</p>
+    <p xml:lang="de">Aktuell unterstützt ScummVM eine umfangreiche Bibliothek von Adventure-
+Spielen mit insgesamt über 4000 Spielen. Unterstützt werden viele Klassiker, 
+die von legendären Studios wie LucasArts, Sierra On-Line, Revolution 
+Software, Cyan Inc. und den Westwood Studios entwickelt wurden.</p>
+    <p xml:lang="ca">Actualment, ScummVM suporta una enorme biblioteca d'aventures amb més de 
+4.000 jocs en total. Dóna suport a molts clàssics publicats per estudis 
+llegendaris com LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. i 
+Westwood Studios.</p>
+    <p xml:lang="pl">Obecnie ScummVM obsługuje wielki katalog przygód liczący razem ponad 4000 
+gier. Obsługuje wiele klasycznych gier wydanych przez legandarne studia 
+takie jak LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. oraz 
+Westwood Studios.</p>
+    <p xml:lang="pt">Atualmente o ScummVM suporta uma enorme biblioteca de aventuras com mais de 
+4000 jogos no total. Ele suporta muitos clássicos publicados por estúdios 
+lendários como LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. e 
+Westwood Studios.</p>
+    <p xml:lang="fi">Tällä hetkellä ScummVM tukee jättimäistä seikkailujen kirjastoa, kaikkiaan 
+yli 4000 peliä. Se tukee lukuisia klassikkoja legendaarisilta studioilta 
+kuten LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. ja Westwood 
+Studios.</p>
+    <p xml:lang="nb">For øyeblikket støtter ScummVM et eventyrlig bibliotek på over 4000 
+spilltitler totalt. Det støtter mange klassikere utgitt av legendariske 
+spillstudioer som bl.a. LucasArts, Sierra On-Line, Revolution Software, 
+Cyan, Inc. og Westwood Studios.</p>
+    <p xml:lang="he">נכון להיום, ScummVM תומכת בספריה ענקית של הרפתקאות, עם למעלה מ-4000 משחקים 
+בסך הכל. ביניהם מיטב הקלאסיקות של אולפנים אגדיים כמו LucasArts, Sierra On-
+Line, Revolution Software, Cyan, Inc. וגם Westwood Studios.</p>
+    <p>Next to ground-breaking titles like the Monkey Island series, Broken Sword,
+Myst, Blade Runner and countless other games you will find
+some really obscure adventures and truly hidden gems to explore.</p>
+    <p xml:lang="ru">Наряду с новаторскими играми, такими как серия Monkey Island, Broken Sword, 
+Myst, Blade Runner и бесчисленное множество других игр, вы найдете 
+действительно малоизвестные приключения и действительно скрытые сокровища 
+для исследования.</p>
+    <p xml:lang="ja">モンキーアイランドシリーズ、ブロークンソード、ミスト、ブレードランナー、その
+他の無数のゲームなどの画期的なタイトルの横に、いくつかの本当にあいまいな冒険
+と真に隠された宝石を見つけることができます.</p>
+    <p xml:lang="es">Podrás jugar a títulos tan innovadores como las sagas de Monkey Island, 
+Broken Sword, Myst, Blade Runner como aventuras menos conocidas y otras 
+joyas ocultas.</p>
+    <p xml:lang="uk">Окрім новаторських ігор, як-от серії Monkey Island, Broken Sword, Myst, 
+Blade Runner та незліченної кількості інших, ви знайдете декілька справді 
+маловідомих пригодницьких ігор та справді прихованих дорогоцінних каменів, 
+які слід дослідити.</p>
+    <p xml:lang="be">Разам з рэвалюцыйнымі гульнямі як Monkey Island, Broken Sword, Myst, Blade 
+Runner і безьлічам іншых гульняў, вы знойдзіце насамрэч малавядомыя авантуры 
+й прыхаваныя скарбы.</p>
+    <p xml:lang="fr">À côté de titres révolutionnaires comme la série Monkey Island, Broken Sword 
+(Les Chevaliers de Baphomet) , Myst, Blade Runner et d'innombrables autres 
+jeux, vous trouverez des aventures vraiment obscures et des pépites vraiment 
+bien cachées à explorer.</p>
+    <p xml:lang="it">Pietre miliari come la saga di Monkey Island, Broken Sword, Myst, Blade 
+Runner e innumerevoli altri titoli tutti da scoprire. Potrai trovare 
+avventure sconosciute ai più ma anche dei gioiellini ingiustamente 
+dimenticati.</p>
+    <p xml:lang="el">Μαζί με καινοτόμους για την εποχή τους τίτλους, όπως ήταν οι σειρές Monkey 
+Island, Broken Sword, Myst, Blade Runner και αμέτρητα άλλα παιχνίδια, θα 
+βρείτε και μερικούς σχετικά άγνωστους τίτλους περιπέτειας και πραγματικά 
+κρυμμένα διαμαντάκια για να εξερευνήσετε.</p>
+    <p xml:lang="nl">Naast spraakmakende titels zoals de Monkey Island series, Broken Sword, 
+Myst, Blade Runner en talloze andere spellen zal je enkele vage adventures 
+vinden en echte verborgen pareltjes ontdekken.</p>
+    <p xml:lang="hu">Az olyan úttörő címek mellett, mint a Monkey Island sorozat, a Broken Sword, 
+a Myst, a Blade Runner és számtalan más játék, valóban homályos kalandokat 
+és valóban rejtett drágaköveket találhat.</p>
+    <p xml:lang="ko">Monkey Island 시리즈, Broken Sword, Myst, Blade Runner와 같이 획기적인 타이틀
+을 비롯해, 잘 알려지지 않은 어드벤처 게임과 진정한 숨겨진 보석을 찾아볼 수 있
+습니다.</p>
+    <p xml:lang="de">Neben bahnbrechenden Titel wie der Monkey Island-Serie, Baphomets Fluch, 
+Myst, Blade Runner und zahllosen weiteren Spielen wirst du auch einige 
+wirklich kuriose Adventures und versteckte Schätze entdecken.</p>
+    <p xml:lang="ca">Al costat de títols innovadors com la sèrie Monkey Island, Broken Sword, 
+Myst, Blade Runner i molts altres jocs trobareu algunes aventures realment 
+fosques i altres gemmes realment ocultes per explorar.</p>
+    <p xml:lang="pl">Poza przełomowymi tytułami, takimi jak seria Monkey Island, Broken Sword, 
+Myst, Blade Runner i wieloma innymi, znajdziesz tu również wiele mało 
+znanych przygód i naprawdę mało znanych perełek.</p>
+    <p xml:lang="pt">Ao lado de títulos inovadores como a série Monkey Island, Broken Sword, 
+Myst, Blade Runner e inúmeros outros jogos, você encontrará algumas 
+aventuras realmente obscuras e verdadeiras joias raras para explorar.</p>
+    <p xml:lang="fi">Uraauurtaneiden Monkey Island-, Broken Sword-, Myst-, Blade Runner- ja 
+lukuisten muiden pelien ohelta löydät myös vähemmän tunnettuja helmiä 
+tutkittavaksesi.</p>
+    <p xml:lang="nb">Sammen med banebrytende titler som Monkey Island-serien, Broken Sword, Myst, 
+Blade Runner og utallige andre spill finner du også enkelte kuriositeter og 
+skjulte skatter det kan være verdt å gi et forsøk.</p>
+    <p xml:lang="he">לצד כותרים פורצי דרך כמו סדרת אי הקופים, חרב שבורה, Myst, בלייד ראנר 
+ואינספור משחקים נוספים תוכלו למצוא גם הרפתקאות עמומות ופנינות נסתרות של ממש 
+שמחכות שתגלו אותן.</p>
   </description>
   <screenshots>
     <screenshot type="default">


Commit: dc9baac9d01400f0fed68bfbf9a344a2cfbd8782
    https://github.com/scummvm/scummvm/commit/dc9baac9d01400f0fed68bfbf9a344a2cfbd8782
Author: Ankush Dutt (ankushd100 at gmail.com)
Date: 2023-03-21T12:32:42+01:00

Commit Message:
I18N: Add simpler template for easy modification and order language tags alphabetically

Changed paths:
    devtools/generate-appdata.py
    dists/scummvm.appdata.xml


diff --git a/devtools/generate-appdata.py b/devtools/generate-appdata.py
index f955a8eae2b..f91159f77e9 100644
--- a/devtools/generate-appdata.py
+++ b/devtools/generate-appdata.py
@@ -3,10 +3,100 @@
 # This script generates a dists/scummvm.appdata.xml file with multilanguage support.
 # The multilanguage data is extracted from po/*.po files
 
-from xml.dom import minidom
 import re
 import os
 
+appdata_xml_template = '''<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2020-2023 The ScummVM Team -->
+<component type="desktop">
+  <id>scummvm.desktop</id>
+  <metadata_license>CC0-1.0</metadata_license>
+  <project_license>GPL-3.0-or-later</project_license>
+  <name>ScummVM</name>
+  <summary>Interpreter for numerous adventure games and role-playing games</summary>
+  <summary xml:lang="xy">I18N: One line summary as shown in *nix distributions</summary>
+  <developer_name>The ScummVM Team</developer_name>
+  <provides>
+    <id>scummvm.desktop</id>
+  </provides>
+  <description>
+    <p>
+      ScummVM is a program which allows you to run a wide variety of classic
+      graphical point-and-click adventure games and role-playing games,
+      provided you already have their data files. The clever part about this:
+      ScummVM just replaces the executables shipped with the game,
+      allowing you to play them on systems for which they were never designed!
+    </p>
+    <p xml:lang="xy">I18N: 1 of 3 paragraph of ScummVM description in *nix distributions</p>
+    <p>
+      Currently, ScummVM supports a huge library of adventures with over 250 games in total.
+      It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
+      Revolution Software, Cyan, Inc. and Westwood Studios.
+    </p>
+    <p xml:lang="xy">I18N: 2 of 3 paragraph of ScummVM description in *nix distributions</p>
+    <p>
+      Next to ground-breaking titles like the Monkey Island series, Broken Sword,
+      Myst, Blade Runner and countless other games you will find
+      some really obscure adventures and truly hidden gems to explore.
+    </p>
+    <p xml:lang="xy">I18N: 3 of 3 paragraph of ScummVM description in *nix distributions</p>
+  </description>
+  <screenshots>
+    <screenshot type="default">
+      <image>https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_1.png</image>
+      <caption>ScummVM Launcher</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_2.png</image>
+      <caption>ScummVM running 'Flight of the Amazon Queen'</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_3.png</image>
+      <caption>ScummVM running 'Beneath a Steel Sky'</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_4.png</image>
+      <caption>ScummVM running 'The Curse of Monkey Island'</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_5.png</image>
+      <caption>ScummVM running a demo of 'Myst'</caption>
+    </screenshot>
+  </screenshots>
+  <url type="homepage">https://www.scummvm.org</url>
+  <update_contact>scummvm-devel at lists.scummvm.org</update_contact>
+  <content_rating type="oars-1.1">
+    <content_attribute id="violence-cartoon">none</content_attribute>
+    <content_attribute id="violence-fantasy">none</content_attribute>
+    <content_attribute id="violence-realistic">none</content_attribute>
+    <content_attribute id="violence-bloodshed">none</content_attribute>
+    <content_attribute id="violence-sexual">none</content_attribute>
+    <content_attribute id="violence-desecration">none</content_attribute>
+    <content_attribute id="violence-slavery">none</content_attribute>
+    <content_attribute id="violence-worship">none</content_attribute>
+    <content_attribute id="drugs-alcohol">none</content_attribute>
+    <content_attribute id="drugs-narcotics">none</content_attribute>
+    <content_attribute id="drugs-tobacco">none</content_attribute>
+    <content_attribute id="sex-nudity">none</content_attribute>
+    <content_attribute id="sex-themes">none</content_attribute>
+    <content_attribute id="sex-homosexuality">none</content_attribute>
+    <content_attribute id="sex-prostitution">none</content_attribute>
+    <content_attribute id="sex-adultery">none</content_attribute>
+    <content_attribute id="sex-appearance">none</content_attribute>
+    <content_attribute id="language-profanity">none</content_attribute>
+    <content_attribute id="language-humor">none</content_attribute>
+    <content_attribute id="language-discrimination">none</content_attribute>
+    <content_attribute id="social-chat">none</content_attribute>
+    <content_attribute id="social-info">none</content_attribute>
+    <content_attribute id="social-audio">none</content_attribute>
+    <content_attribute id="social-location">none</content_attribute>
+    <content_attribute id="social-contacts">none</content_attribute>
+    <content_attribute id="money-purchasing">none</content_attribute>
+    <content_attribute id="money-gambling">none</content_attribute>
+  </content_rating>
+</component>
+'''
+
 
 def extract_summary(file):
     with open('../po/' + file) as f:
@@ -65,275 +155,106 @@ def extract_par3(file):
         return None
 
 
-doc = minidom.Document()
-
-copyright_comment_elem = doc.createComment(
-    " Copyright 2020-2023 The ScummVM Team ")
-doc.appendChild(copyright_comment_elem)
-
-component_elem = doc.createElement("component")
-component_elem.setAttribute("type", "desktop")
-doc.appendChild(component_elem)
-
-
-id_elem = doc.createElement("id")
-id_text = doc.createTextNode("scummvm.desktop")
-id_elem.appendChild(id_text)
-component_elem.appendChild(id_elem)
-
-metadata_license_elem = doc.createElement("metadata_license")
-metadata_license_text = doc.createTextNode("CC0-1.0")
-metadata_license_elem.appendChild(metadata_license_text)
-component_elem.appendChild(metadata_license_elem)
-
-project_license_elem = doc.createElement("project_license")
-project_license_text = doc.createTextNode("GPL-3.0-or-later")
-project_license_elem.appendChild(project_license_text)
-component_elem.appendChild(project_license_elem)
-
-name_elem = doc.createElement("name")
-name_text = doc.createTextNode("ScummVM")
-name_elem.appendChild(name_text)
-component_elem.appendChild(name_elem)
-
-summary_elem = doc.createElement("summary")
-summary_text = doc.createTextNode(
-    "Interpreter for numerous adventure games and role-playing games")
-summary_elem.appendChild(summary_text)
-component_elem.appendChild(summary_elem)
-
 # get file names of all .po files
 file_names = []
 for filename in os.listdir("../po/"):
     if filename.endswith(".po"):
         file_names.append(filename)
 
+file_names.sort()
+
 # summary translations
+summary_translations = ""
+
+# first_translation is used to determine the indentation (first translation will not require any indentation)
+first_translation = True
+
 for file in file_names:
     summary = extract_summary(file)
     if (summary is None):
         continue
-    summary_elem = doc.createElement("summary")
-    summary_text = doc.createTextNode(summary)
-    summary_elem.appendChild(summary_text)
-    lang = file[0] + file[1]
-    summary_elem.setAttribute("xml:lang", lang)
-    component_elem.appendChild(summary_elem)
-
-developer_name_elem = doc.createElement("developer_name")
-developer_name_text = doc.createTextNode("The ScummVM Team")
-developer_name_elem.appendChild(developer_name_text)
-component_elem.appendChild(developer_name_elem)
-
-provides_elem = doc.createElement("provides")
-component_elem.appendChild(provides_elem)
-
-id_elem = doc.createElement("id")
-id_text = doc.createTextNode("scummvm.desktop")
-id_elem.appendChild(id_text)
-provides_elem.appendChild(id_elem)
-
-description_elem = doc.createElement("description")
-component_elem.appendChild(description_elem)
-
-# paragraph 1
-p_elem = doc.createElement("p")
-p_text = doc.createTextNode('''ScummVM is a program which allows you to run a wide variety of classic
-graphical point-and -click adventure games and role-playing games,
-provided you already have their data files. The clever part about this:
-ScummVM just replaces the executables shipped with the game,
-allowing you to play them on systems for which they were never designed!''')
-p_elem.appendChild(p_text)
-description_elem.appendChild(p_elem)
+
+    lang = '"' + file[0] + file[1] + '"'
+    summary_translations += ('' if first_translation else '  ') + '<summary xml:lang=' + \
+        lang + '>' + summary + '</summary>\n'
+    first_translation = False
+
+summary_translations = summary_translations.rstrip('\n')
+
+regex_pattern = r'<summary xml:lang="xy">I18N: One line summary as shown in \*nix distributions<\/summary>'
+
+appdata_xml_template = re.sub(
+    regex_pattern, summary_translations, appdata_xml_template)
 
 # paragraph 1 translations
+par1_translations = ""
+first_translation = True
+
 for file in file_names:
     par1 = extract_par1(file)
     if (par1 is None):
         continue
 
-    # par1 also contains " (quotes) around the text; so we need to replace them with empty
-    # character otherwise " will appear in scummvm.appdata.xml generated file
+    # par1 also contains " (quotes) around the text; so we need to replace them with empty character
+    # otherwise " (quotes) will appear in scummvm.appdata.xml generated file
     par1 = par1.replace('"', '')
 
-    p_elem = doc.createElement("p")
-    p_text = doc.createTextNode(par1)
-    p_elem.appendChild(p_text)
-    lang = file[0] + file[1]
-    p_elem.setAttribute("xml:lang", lang)
-    description_elem.appendChild(p_elem)
-
-# paragraph 2
-p_elem = doc.createElement("p")
-p_text = doc.createTextNode('''Currently, ScummVM supports a huge library of adventures with over 250 games in total.
-It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
-Revolution Software, Cyan, Inc. and Westwood Studios.''')
-p_elem.appendChild(p_text)
-description_elem.appendChild(p_elem)
+    lang = '"' + file[0] + file[1] + '"'
+    par1_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
+        lang + '>' + par1 + '</p>\n'
+    first_translation = False
+
+par1_translations = par1_translations.rstrip('\n')
+
+regex_pattern = r'<p xml:lang="xy">I18N: 1 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+
+appdata_xml_template = re.sub(
+    regex_pattern, par1_translations, appdata_xml_template)
 
 # paragraph 2 translations
+par2_translations = ""
+first_translation = True
+
 for file in file_names:
     par2 = extract_par2(file)
     if (par2 is None):
         continue
     par2 = par2.replace('"', '')
-    p_elem = doc.createElement("p")
-    p_text = doc.createTextNode(par2)
-    p_elem.appendChild(p_text)
-    lang = file[0] + file[1]
-    p_elem.setAttribute("xml:lang", lang)
-    description_elem.appendChild(p_elem)
-
-# paragraph 3
-p_elem = doc.createElement("p")
-p_text = doc.createTextNode('''Next to ground-breaking titles like the Monkey Island series, Broken Sword,
-Myst, Blade Runner and countless other games you will find
-some really obscure adventures and truly hidden gems to explore.''')
-p_elem.appendChild(p_text)
-description_elem.appendChild(p_elem)
+
+    lang = '"' + file[0] + file[1] + '"'
+    par2_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
+        lang + '>' + par2 + '</p>\n'
+    first_translation = False
+
+par2_translations = par2_translations.rstrip('\n')
+
+regex_pattern = r'<p xml:lang="xy">I18N: 2 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+
+appdata_xml_template = re.sub(
+    regex_pattern, par2_translations, appdata_xml_template)
 
 # paragraph 3 translations
+par3_translations = ""
+first_translation = True
+
 for file in file_names:
     par3 = extract_par3(file)
     if (par3 is None):
         continue
     par3 = par3.replace('"', '')
-    p_elem = doc.createElement("p")
-    p_text = doc.createTextNode(par3)
-    p_elem.appendChild(p_text)
-    lang = file[0] + file[1]
-    p_elem.setAttribute("xml:lang", lang)
-    description_elem.appendChild(p_elem)
-
-screenshots_elem = doc.createElement("screenshots")
-component_elem.appendChild(screenshots_elem)
-
-screenshot_elem = doc.createElement("screenshot")
-screenshots_elem.appendChild(screenshot_elem)
-screenshot_elem.setAttribute("type", "default")
-
-image_elem = doc.createElement("image")
-image_text = doc.createTextNode(
-    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_1.png")
-image_elem.appendChild(image_text)
-screenshot_elem.appendChild(image_elem)
-
-caption_elem = doc.createElement("caption")
-caption_text = doc.createTextNode("ScummVM Launcher")
-caption_elem.appendChild(caption_text)
-screenshot_elem.appendChild(caption_elem)
-
-screenshot_elem = doc.createElement("screenshot")
-screenshots_elem.appendChild(screenshot_elem)
-
-image_elem = doc.createElement("image")
-image_text = doc.createTextNode(
-    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_2.png")
-image_elem.appendChild(image_text)
-screenshot_elem.appendChild(image_elem)
-
-caption_elem = doc.createElement("caption")
-caption_text = doc.createTextNode(
-    "ScummVM running 'Flight of the Amazon Queen'")
-caption_elem.appendChild(caption_text)
-screenshot_elem.appendChild(caption_elem)
-
-screenshot_elem = doc.createElement("screenshot")
-screenshots_elem.appendChild(screenshot_elem)
-
-image_elem = doc.createElement("image")
-image_text = doc.createTextNode(
-    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_3.png")
-image_elem.appendChild(image_text)
-screenshot_elem.appendChild(image_elem)
-
-caption_elem = doc.createElement("caption")
-caption_text = doc.createTextNode("ScummVM running 'Beneath a Steel Sky'")
-caption_elem.appendChild(caption_text)
-screenshot_elem.appendChild(caption_elem)
-
-screenshot_elem = doc.createElement("screenshot")
-screenshots_elem.appendChild(screenshot_elem)
-
-image_elem = doc.createElement("image")
-image_text = doc.createTextNode(
-    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_4.png")
-image_elem.appendChild(image_text)
-screenshot_elem.appendChild(image_elem)
-
-caption_elem = doc.createElement("caption")
-caption_text = doc.createTextNode(
-    "ScummVM running 'The Curse of Monkey Island'")
-caption_elem.appendChild(caption_text)
-screenshot_elem.appendChild(caption_elem)
-
-screenshot_elem = doc.createElement("screenshot")
-screenshots_elem.appendChild(screenshot_elem)
-
-image_elem = doc.createElement("image")
-image_text = doc.createTextNode(
-    "https://www.scummvm.org/frs/extras/storefront/screenshots/screenshot_5.png")
-image_elem.appendChild(image_text)
-screenshot_elem.appendChild(image_elem)
-
-caption_elem = doc.createElement("caption")
-caption_text = doc.createTextNode("ScummVM running a demo of 'Myst'")
-caption_elem.appendChild(caption_text)
-screenshot_elem.appendChild(caption_elem)
-
-url_elem = doc.createElement("url")
-url_text = doc.createTextNode("https://www.scummvm.org")
-url_elem.appendChild(url_text)
-url_elem.setAttribute("type", "homepage")
-component_elem.appendChild(url_elem)
-
-update_contact_elem = doc.createElement("update_contact")
-update_contact_text = doc.createTextNode("scummvm-devel at lists.scummvm.org")
-update_contact_elem.appendChild(update_contact_text)
-component_elem.appendChild(update_contact_elem)
-
-# content ratings
-content_rating_elem = doc.createElement("content_rating")
-content_rating_elem.setAttribute("type", "oars-1.1")
-component_elem.appendChild(content_rating_elem)
-
-content_attribute_ids = {
-    "violence-cartoon": "none",
-    "violence-fantasy": "none",
-    "violence-realistic": "none",
-    "violence-bloodshed": "none",
-    "violence-sexual": "none",
-    "violence-desecration": "none",
-    "violence-slavery": "none",
-    "violence-worship": "none",
-    "drugs-alcohol": "none",
-    "drugs-narcotics": "none",
-    "drugs-tobacco": "none",
-    "sex-nudity": "none",
-    "sex-themes": "none",
-    "sex-homosexuality": "none",
-    "sex-prostitution": "none",
-    "sex-adultery": "none",
-    "sex-appearance": "none",
-    "language-profanity": "none",
-    "language-humor": "none",
-    "language-discrimination": "none",
-    "social-chat": "none",
-    "social-info": "none",
-    "social-audio": "none",
-    "social-location": "none",
-    "social-contacts": "none",
-    "money-purchasing": "none",
-    "money-gambling": "none",
-}
-
-for id in content_attribute_ids:
-    content_attribute_elem = doc.createElement("content_attribute")
-    content_attribute_text = doc.createTextNode(content_attribute_ids[id])
-    content_attribute_elem.appendChild(content_attribute_text)
-    content_attribute_elem.setAttribute("id", id)
-    content_rating_elem.appendChild(content_attribute_elem)
+
+    lang = '"' + file[0] + file[1] + '"'
+    par3_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
+        lang + '>' + par3 + '</p>\n'
+    first_translation = False
+
+par3_translations = par3_translations.rstrip('\n')
+
+regex_pattern = r'<p xml:lang="xy">I18N: 3 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+
+appdata_xml_template = re.sub(
+    regex_pattern, par3_translations, appdata_xml_template)
 
 # write to scummvm.appdata.xml file
-with open("../dists/scummvm.appdata.xml", "wb") as f:
-    f.write(doc.toprettyxml(indent="  ", encoding="UTF-8"))
+with open("../dists/scummvm.appdata.xml", "w") as f:
+    f.write(appdata_xml_template)
diff --git a/dists/scummvm.appdata.xml b/dists/scummvm.appdata.xml
index 0c4eaadf90d..68de2b679e3 100644
--- a/dists/scummvm.appdata.xml
+++ b/dists/scummvm.appdata.xml
@@ -6,99 +6,104 @@
   <project_license>GPL-3.0-or-later</project_license>
   <name>ScummVM</name>
   <summary>Interpreter for numerous adventure games and role-playing games</summary>
-  <summary xml:lang="ru">Интерпретатор множества приключенческих и ролевых игр</summary>
-  <summary xml:lang="ja">数多くのアドベンチャーゲームやロールプレイングゲームの通訳</summary>
-  <summary xml:lang="es">Intérprete de numerosas aventuras gráficas y RPG</summary>
-  <summary xml:lang="uk">Інтерпретатор для численних пригодницьких і рольових ігор</summary>
   <summary xml:lang="be">Інтэрпрэтатар многіх авантурных і ролявых гульняў</summary>
+  <summary xml:lang="ca">Intèrpret per a nombrosos jocs d'aventura i jocs de rol</summary>
+  <summary xml:lang="de">Interpreter für zahlreiche Adventure-Spiele und RPGs</summary>
+  <summary xml:lang="es">Intérprete de numerosas aventuras gráficas y RPG</summary>
+  <summary xml:lang="fi">Pelitulkki lukuisille seikkailu- ja roolipeleille</summary>
   <summary xml:lang="fr">Interpréteur pour de nombreux jeux d'aventure et jeux de rôle</summary>
-  <summary xml:lang="it">Interprete per numerosi giochi di avventura e di ruolo</summary>
-  <summary xml:lang="nl">Interpreter voor diverse adventure spellen en rollenspellen</summary>
+  <summary xml:lang="he">מפרש עבור מספר גדול של משחקי הרפתקאות ומשחקי תפקידים</summary>
   <summary xml:lang="hu">Interpreter számos kalandjátékhoz és szerepjátékhoz</summary>
-  <summary xml:lang="pt">Interpretador de vários jogos de aventura e RPGs</summary>
+  <summary xml:lang="it">Interprete per numerosi giochi di avventura e di ruolo</summary>
+  <summary xml:lang="ja">数多くのアドベンチャーゲームやロールプレイングゲームの通訳</summary>
   <summary xml:lang="ko">여러 어드벤처 게임과 RPG를 위한 인터프리터</summary>
-  <summary xml:lang="de">Interpreter für zahlreiche Adventure-Spiele und RPGs</summary>
-  <summary xml:lang="ca">Intèrpret per a nombrosos jocs d'aventura i jocs de rol</summary>
+  <summary xml:lang="nb">Programvaretolk for utallige eventyr- og rollespill</summary>
+  <summary xml:lang="nl">Interpreter voor diverse adventure spellen en rollenspellen</summary>
   <summary xml:lang="pl">Interpreter wielu gier przygodowych oraz RPG</summary>
   <summary xml:lang="pt">Interpretador para vários jogos de aventura e RPG</summary>
-  <summary xml:lang="fi">Pelitulkki lukuisille seikkailu- ja roolipeleille</summary>
-  <summary xml:lang="nb">Programvaretolk for utallige eventyr- og rollespill</summary>
-  <summary xml:lang="he">מפרש עבור מספר גדול של משחקי הרפתקאות ומשחקי תפקידים</summary>
+  <summary xml:lang="pt">Interpretador de vários jogos de aventura e RPGs</summary>
+  <summary xml:lang="ru">Интерпретатор множества приключенческих и ролевых игр</summary>
+  <summary xml:lang="uk">Інтерпретатор для численних пригодницьких і рольових ігор</summary>
   <developer_name>The ScummVM Team</developer_name>
   <provides>
     <id>scummvm.desktop</id>
   </provides>
   <description>
-    <p>ScummVM is a program which allows you to run a wide variety of classic
-graphical point-and -click adventure games and role-playing games,
-provided you already have their data files. The clever part about this:
-ScummVM just replaces the executables shipped with the game,
-allowing you to play them on systems for which they were never designed!</p>
-    <p xml:lang="ru">ScummVM - это программа, которая позволяет запускать широкий спектр 
-классических графических приключенческих игр и ролевых игр, при условии, что 
-у вас уже есть их файлы данных. Самое умное в этом: ScummVM просто заменяет 
-исполняемые файлы, поставляемые с игрой, позволяя вам играть в них на 
-системах, для которых они никогда не были разработаны!</p>
-    <p xml:lang="ja">ScummVMは、データファイルが既にある場合に、さまざまな古典的なグラフィカルポイ
-ントアンドクリックアドベンチャーゲームやロールプレイングゲームを実行できるよ
-うにするプログラムです。これに関する巧妙な部分:ScummVMは、ゲームに付属してい
-る実行可能ファイルを置き換えるだけなので、設計されたことのないシステムで実行
-できます!</p>
+    <p>
+      ScummVM is a program which allows you to run a wide variety of classic
+      graphical point-and-click adventure games and role-playing games,
+      provided you already have their data files. The clever part about this:
+      ScummVM just replaces the executables shipped with the game,
+      allowing you to play them on systems for which they were never designed!
+    </p>
+    <p xml:lang="be">ScummVM — гэта праграма для запуску розных клясічных графічных point-and-
+click авантурных і ралявых гульняў, пры ўмове, што вы маеце зьвесткі тых 
+гульняў. Карацей, ScummVM проста замяняе выканальныя файлы гульняў, 
+дазваляючы гуляць на сістэмах, на якія іх ніколі не распрацоўвалі!</p>
+    <p xml:lang="ca">ScummVM és un programa que permet executar una àmplia varietat de jocs 
+clàssics d'aventures gràfiques «point-and-click» i jocs de rol, sempre que 
+ja tingueu els seus fitxers de dades. La part intel·ligent sobre això: 
+ScummVM només substitueix els executables originals del joc, permetent-vos 
+jugar-los en sistemes per als quals mai van ser dissenyats!</p>
+    <p xml:lang="de">ScummVM ist ein Programm, welches dir ermöglicht, zahlreiche Adventures und 
+RPGs auszuführen, vorausgesetzt, du bist im Besitz der passenden 
+Spieldateien. ScummVM ersetzt dabei die ausführbaren Programmdateien, die 
+ursprünglich mit dem Spiel mitgeliefert wurden. Dadurch können diese Spiele 
+auf Systemen gespielt werden, für welche sie nie entwickelt wurden!</p>
+    <p xml:lang="el">Το ScummVM είναι μια εφαρμογή που σας επιτρέπει να παίξετε μια ευρεία 
+ποικιλία από κλασσικά παιχνίδια περιπέτειας point-and-click, και ρόλων 
+(adventure και role-playing), αρκεί να έχετε στην κατοχή σας τα αρχεία 
+δεδομένων τους. Το ενδιαφέρον σε αυτή την υπόθεση είναι το εξής: το ScummVM 
+απλά αντικαθιστά τα εκτελέσιμα που συνόδευαν τα παιχνίδια, επιτρέποντάς σας 
+να τα παίξετε σε συστήματα για τα οποία δεν είχαν σχεδιαστεί ποτέ!</p>
     <p xml:lang="es">ScummVM es un programa que te permite ejecutar una amplia selección de 
 aventuras gráficas «point-and-click» y RPG clásicos, siempre y cuando ya 
 tengas sus archivos de datos. Lo interesante es que ScummVM se limita a 
 sustituir los ejecutables de cada juego, ¡lo que permite jugarlos en 
 sistemas para los que nunca fueron diseñados!</p>
-    <p xml:lang="uk">ScummVM - це програма, яка дозволяє запускати широкий спектр класичних 
-графічних пригодницьких ігор та рольових ігор, якщо у вас вже є їх файли 
-даних. Щонайголовніше: ScummVM просто замінює виконувані файли, що 
-постачаються разом із грою, дозволяючи відтворювати їх у системах, для яких 
-вони ніколи не були розроблені!</p>
-    <p xml:lang="be">ScummVM — гэта праграма для запуску розных клясічных графічных point-and-
-click авантурных і ралявых гульняў, пры ўмове, што вы маеце зьвесткі тых 
-гульняў. Карацей, ScummVM проста замяняе выканальныя файлы гульняў, 
-дазваляючы гуляць на сістэмах, на якія іх ніколі не распрацоўвалі!</p>
+    <p xml:lang="fi">ScummVM on ohjelma jonka avulla voit pelata lukuisia klassisia graafisia 
+seikkailu- ja roolipelejä, olettaen että sinulla on jo pelien datatiedostot. 
+Tämä on fiksua koska: ScummVM korvaa itse ajettavan peliohjelman, joten voit 
+pelata pelejä jopa alustoilla joille pelejä ei koskaan suunniteltu!</p>
     <p xml:lang="fr">ScummVM est un programme qui vous permet d'exécuter une grande variété de 
 jeux d'aventure graphique point-and-click et de jeux de rôle, à condition 
 que vous ayez déjà leurs fichiers de données. Ce qui est génial dans tout 
 ça : ScummVM remplace simplement les exécutables livrés avec les jeux, ce 
 qui vous permet de jouer sur des systèmes pour lesquels ces jeux n'ont 
 jamais été conçus !</p>
+    <p xml:lang="he">ScummVM הינה תכנה שמאפשרת להריץ מגוון רחב של משחקי הרפתקאות גרפיים הצבע-
+והקלק ומשחקי תפקידים, בהינתן קבצי הנתונים שלהם. החלק המעניין הוא: ScummVM 
+מחליפה רק את קובץ הריצה שהגיע עם המשחק, מה שמאפשר לשחק בהם על מערכות אליהם 
+המשחק מעולם לא תוכנן!</p>
+    <p xml:lang="hu">A ScummVM egy olyan program, mely számos klasszikus grafikus point-and-click 
+kalandjáték és szerepjáték futtatását teszi lehetővé, feltéve, hogy már 
+rendelkeznek az adatfájljaikkal. Az okos rész ebben: A ScummVM csak 
+kicseréli a játékkal szállított futtatható fájlokat, lehetővé téve számukra, 
+hogy olyan rendszereken játsszák őket, amelyekre soha nem lettek tervezve!</p>
     <p xml:lang="it">ScummVM è un programma che permette di eseguire svariate avventure grafiche 
 e giochi di ruolo classici, a patto di averne a disposizione i files 
 originali. Il bello è che ScummVM sostituisce gli eseguibili originari, 
 permettendo di eseguire i giochi su piattaforme per cui non erano neppure 
 mai stati pensati!</p>
-    <p xml:lang="el">Το ScummVM είναι μια εφαρμογή που σας επιτρέπει να παίξετε μια ευρεία 
-ποικιλία από κλασσικά παιχνίδια περιπέτειας point-and-click, και ρόλων 
-(adventure και role-playing), αρκεί να έχετε στην κατοχή σας τα αρχεία 
-δεδομένων τους. Το ενδιαφέρον σε αυτή την υπόθεση είναι το εξής: το ScummVM 
-απλά αντικαθιστά τα εκτελέσιμα που συνόδευαν τα παιχνίδια, επιτρέποντάς σας 
-να τα παίξετε σε συστήματα για τα οποία δεν είχαν σχεδιαστεί ποτέ!</p>
+    <p xml:lang="ja">ScummVMは、データファイルが既にある場合に、さまざまな古典的なグラフィカルポイ
+ントアンドクリックアドベンチャーゲームやロールプレイングゲームを実行できるよ
+うにするプログラムです。これに関する巧妙な部分:ScummVMは、ゲームに付属してい
+る実行可能ファイルを置き換えるだけなので、設計されたことのないシステムで実行
+できます!</p>
+    <p xml:lang="ko">ScummVM은 데이터 파일을 가진 경우 다양한 고전 그래픽 포인트 앤 클릭 어드벤처 
+게임과 롤플레잉 게임을 실행할 수 있게 하는 프로그램입니다. ScummVM은 게임과 
+함께 제공된 실행파일을 대체하기 때문에 원래 게임이 실행되도록 설계되지 않은 
+시스템에서도 실행할 수 있습니다!</p>
+    <p xml:lang="nb">ScummVM er et program som lar deg kjøre et bredt assortiment av klassiske 
+pek-og-klikk-eventyrspill og rollespill – forutsatt at du allerede har 
+datafilene til spillet. Det finurlige med det hele er at ScummVM kun 
+erstatter selve programdelen av spillet og gjør det slik at du kan spille 
+det på plattformer det aldri var utviklet til å kjøre på!</p>
     <p xml:lang="nl">ScummVM is een programma die het mogelijk maakt om een grote verscheidenheid 
 aan klassieke grafische point-and-click adventure spellen en rollenspellen 
 te spelen, mits je de benodigde data bestanden al hebt. Het unieke hiervan 
 is: ScummVM vervangt de executables die bij het spel geleverd worden, 
 waardoor je ze kan spelen op systemen waar ze niet voor waren gemaakt!</p>
-    <p xml:lang="hu">A ScummVM egy olyan program, mely számos klasszikus grafikus point-and-click 
-kalandjáték és szerepjáték futtatását teszi lehetővé, feltéve, hogy már 
-rendelkeznek az adatfájljaikkal. Az okos rész ebben: A ScummVM csak 
-kicseréli a játékkal szállított futtatható fájlokat, lehetővé téve számukra, 
-hogy olyan rendszereken játsszák őket, amelyekre soha nem lettek tervezve!</p>
-    <p xml:lang="ko">ScummVM은 데이터 파일을 가진 경우 다양한 고전 그래픽 포인트 앤 클릭 어드벤처 
-게임과 롤플레잉 게임을 실행할 수 있게 하는 프로그램입니다. ScummVM은 게임과 
-함께 제공된 실행파일을 대체하기 때문에 원래 게임이 실행되도록 설계되지 않은 
-시스템에서도 실행할 수 있습니다!</p>
-    <p xml:lang="de">ScummVM ist ein Programm, welches dir ermöglicht, zahlreiche Adventures und 
-RPGs auszuführen, vorausgesetzt, du bist im Besitz der passenden 
-Spieldateien. ScummVM ersetzt dabei die ausführbaren Programmdateien, die 
-ursprünglich mit dem Spiel mitgeliefert wurden. Dadurch können diese Spiele 
-auf Systemen gespielt werden, für welche sie nie entwickelt wurden!</p>
-    <p xml:lang="ca">ScummVM és un programa que permet executar una àmplia varietat de jocs 
-clàssics d'aventures gràfiques «point-and-click» i jocs de rol, sempre que 
-ja tingueu els seus fitxers de dades. La part intel·ligent sobre això: 
-ScummVM només substitueix els executables originals del joc, permetent-vos 
-jugar-los en sistemes per als quals mai van ser dissenyats!</p>
     <p xml:lang="pl">ScummVM to program pozwalajÄ…cy na uruchomienie bogatego wyboru klasycznych 
 graficznych gier przygodowych typu „wskaż i kliknij”, oraz gier RPG - pod 
 warunkiem posiadania ich danych. ScummVM podmienia oryginalny program gier, 
@@ -108,75 +113,76 @@ jogos clássicos de point-and-click (apontar e clicar) e RPG, desde que você
 já tenha seus arquivos de dados. A melhor parte: ScummVM apenas substitui os 
 executáveis do jogo, permitindo que você os jogue em sistemas para os quais 
 eles nunca foram projetados!</p>
-    <p xml:lang="fi">ScummVM on ohjelma jonka avulla voit pelata lukuisia klassisia graafisia 
-seikkailu- ja roolipelejä, olettaen että sinulla on jo pelien datatiedostot. 
-Tämä on fiksua koska: ScummVM korvaa itse ajettavan peliohjelman, joten voit 
-pelata pelejä jopa alustoilla joille pelejä ei koskaan suunniteltu!</p>
-    <p xml:lang="nb">ScummVM er et program som lar deg kjøre et bredt assortiment av klassiske 
-pek-og-klikk-eventyrspill og rollespill – forutsatt at du allerede har 
-datafilene til spillet. Det finurlige med det hele er at ScummVM kun 
-erstatter selve programdelen av spillet og gjør det slik at du kan spille 
-det på plattformer det aldri var utviklet til å kjøre på!</p>
-    <p xml:lang="he">ScummVM הינה תכנה שמאפשרת להריץ מגוון רחב של משחקי הרפתקאות גרפיים הצבע-
-והקלק ומשחקי תפקידים, בהינתן קבצי הנתונים שלהם. החלק המעניין הוא: ScummVM 
-מחליפה רק את קובץ הריצה שהגיע עם המשחק, מה שמאפשר לשחק בהם על מערכות אליהם 
-המשחק מעולם לא תוכנן!</p>
-    <p>Currently, ScummVM supports a huge library of adventures with over 250 games in total.
-It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
-Revolution Software, Cyan, Inc. and Westwood Studios.</p>
-    <p xml:lang="ru">В настоящее время ScummVM поддерживает огромную библиотеку приключений, 
-насчитывающую в общей сложности более 4000 игр. Он поддерживает множество 
-классических произведений, выпущенных легендарными студиями, такими как 
-LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. и Westwood 
+    <p xml:lang="ru">ScummVM - это программа, которая позволяет запускать широкий спектр 
+классических графических приключенческих игр и ролевых игр, при условии, что 
+у вас уже есть их файлы данных. Самое умное в этом: ScummVM просто заменяет 
+исполняемые файлы, поставляемые с игрой, позволяя вам играть в них на 
+системах, для которых они никогда не были разработаны!</p>
+    <p xml:lang="uk">ScummVM - це програма, яка дозволяє запускати широкий спектр класичних 
+графічних пригодницьких ігор та рольових ігор, якщо у вас вже є їх файли 
+даних. Щонайголовніше: ScummVM просто замінює виконувані файли, що 
+постачаються разом із грою, дозволяючи відтворювати їх у системах, для яких 
+вони ніколи не були розроблені!</p>
+    <p>
+      Currently, ScummVM supports a huge library of adventures with over 250 games in total.
+      It supports many classics published by legendary studios like LucasArts, Sierra On-Line,
+      Revolution Software, Cyan, Inc. and Westwood Studios.
+    </p>
+    <p xml:lang="be">На гэты момант ScummVM падтрымлівае вялічэзную бібліятэку авантур, дзе болей 
+за 4000 гульняў. Вы зможаце дакрануцца да многіх клясічных твораў, выданых 
+леґэндарнымі студыямі як LucasArts, Sierra On-Line, Revolution Software, 
+Cyan, Inc. Ñ– Westwood Studios.</p>
+    <p xml:lang="ca">Actualment, ScummVM suporta una enorme biblioteca d'aventures amb més de 
+4.000 jocs en total. Dóna suport a molts clàssics publicats per estudis 
+llegendaris com LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. i 
+Westwood Studios.</p>
+    <p xml:lang="de">Aktuell unterstützt ScummVM eine umfangreiche Bibliothek von Adventure-
+Spielen mit insgesamt über 4000 Spielen. Unterstützt werden viele Klassiker, 
+die von legendären Studios wie LucasArts, Sierra On-Line, Revolution 
+Software, Cyan Inc. und den Westwood Studios entwickelt wurden.</p>
+    <p xml:lang="el">Το ScummVM υποστηρίζει μια τεράστια βιβλιοθήκη από παιχνίδια περιπέτειας 
+(adventure games) με περισσότερους από 4000 τίτλους συνολικά. Υποστηρίζει 
+πολλούς από τους κλασσικούς τίτλους που έχουν εκδώσει θρυλικά στούντιο όπως 
+οι LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. και Westwood 
 Studios.</p>
-    <p xml:lang="ja">現在、ScummVMは、合計4000を超えるゲームを備えた膨大なアドベンチャーライブラリ
-をサポートしています。 LucasArts、Sierra On-Line、Revolution Software、Cyan、
-Inc.、WestwoodStudiosなどの伝説的なスタジオによって公開された多くのクラシック
-をサポートしています.</p>
     <p xml:lang="es">ScummVM es compatible con una inmensa biblioteca de más de 4 000 juegos en 
 total. Funciona con muchos de los clásicos publicados por estudios 
 legendarios como LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. 
 y Westwood Studios.</p>
-    <p xml:lang="uk">В даний час ScummVM підтримує величезну бібліотеку пригодницьких ігор із 
-загальною кількістю понад 4000. Проект підтримує багато класичних творів, 
-опублікованих такими легендарними студіями, як LucasArts, Sierra On-Line, 
-Revolution Software, Cyan, Inc. та Westwood Studios.</p>
-    <p xml:lang="be">На гэты момант ScummVM падтрымлівае вялічэзную бібліятэку авантур, дзе болей 
-за 4000 гульняў. Вы зможаце дакрануцца да многіх клясічных твораў, выданых 
-леґэндарнымі студыямі як LucasArts, Sierra On-Line, Revolution Software, 
-Cyan, Inc. Ñ– Westwood Studios.</p>
+    <p xml:lang="fi">Tällä hetkellä ScummVM tukee jättimäistä seikkailujen kirjastoa, kaikkiaan 
+yli 4000 peliä. Se tukee lukuisia klassikkoja legendaarisilta studioilta 
+kuten LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. ja Westwood 
+Studios.</p>
     <p xml:lang="fr">Actuellement, ScummVM supporte une énorme collection d'aventures avec plus 
 de 4000 jeux au total. Il prend en charge de nombreux classiques publiés par 
 des studios légendaires comme LucasArts, Sierra On-Line, Revolution 
 Software, Cyan, Inc. et Westwood Studios.</p>
+    <p xml:lang="he">נכון להיום, ScummVM תומכת בספריה ענקית של הרפתקאות, עם למעלה מ-4000 משחקים 
+בסך הכל. ביניהם מיטב הקלאסיקות של אולפנים אגדיים כמו LucasArts, Sierra On-
+Line, Revolution Software, Cyan, Inc. וגם Westwood Studios.</p>
+    <p xml:lang="hu">Jelenleg a ScummVM egy hatalmas kalandkönyvtárat támogat, összesen több mint 
+4000 játékkal. Támogatja számos legendás stúdió által kiadott klasszikust, 
+mint például a LucasArts, a Sierra On-Line, a Revolution Software, a Cyan, 
+Inc. és a Westwood Studios.</p>
     <p xml:lang="it">Attualmente, ScummVM supporta una vastissima collezione di giochi di 
 avventura, per un totale di oltre 4000 titoli. Tra questi, molti giochi 
 rinomati pubblicati da editori leggendari come la LucasArts, la Sierra On-
 Line, la Revolution Software, la Cyan, Inc. o i Westwood Studios.</p>
-    <p xml:lang="el">Το ScummVM υποστηρίζει μια τεράστια βιβλιοθήκη από παιχνίδια περιπέτειας 
-(adventure games) με περισσότερους από 4000 τίτλους συνολικά. Υποστηρίζει 
-πολλούς από τους κλασσικούς τίτλους που έχουν εκδώσει θρυλικά στούντιο όπως 
-οι LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. και Westwood 
-Studios.</p>
+    <p xml:lang="ja">現在、ScummVMは、合計4000を超えるゲームを備えた膨大なアドベンチャーライブラリ
+をサポートしています。 LucasArts、Sierra On-Line、Revolution Software、Cyan、
+Inc.、WestwoodStudiosなどの伝説的なスタジオによって公開された多くのクラシック
+をサポートしています.</p>
+    <p xml:lang="ko">현재 ScummVM은 합계 4000개를 넘는 수많은 어드벤처 게임을 지원합니다. 
+LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc., 그리고 Westwood 
+Studios 같은 전설적인 스튜디오에서 발표된 많은 고전을 지원합니다.</p>
+    <p xml:lang="nb">For øyeblikket støtter ScummVM et eventyrlig bibliotek på over 4000 
+spilltitler totalt. Det støtter mange klassikere utgitt av legendariske 
+spillstudioer som bl.a. LucasArts, Sierra On-Line, Revolution Software, 
+Cyan, Inc. og Westwood Studios.</p>
     <p xml:lang="nl">Momenteel ondersteunt ScummVM een enorme hoeveelheid adventures van meer dan 
 4000 spellen in totaal. Het ondersteunt vele klassiekers gepubliceerd door 
 legendarische studios als LucasArts, Sierra On-Line, Revolution Software, 
 Cyan, Inc. en Westwood Studios.</p>
-    <p xml:lang="hu">Jelenleg a ScummVM egy hatalmas kalandkönyvtárat támogat, összesen több mint 
-4000 játékkal. Támogatja számos legendás stúdió által kiadott klasszikust, 
-mint például a LucasArts, a Sierra On-Line, a Revolution Software, a Cyan, 
-Inc. és a Westwood Studios.</p>
-    <p xml:lang="ko">현재 ScummVM은 합계 4000개를 넘는 수많은 어드벤처 게임을 지원합니다. 
-LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc., 그리고 Westwood 
-Studios 같은 전설적인 스튜디오에서 발표된 많은 고전을 지원합니다.</p>
-    <p xml:lang="de">Aktuell unterstützt ScummVM eine umfangreiche Bibliothek von Adventure-
-Spielen mit insgesamt über 4000 Spielen. Unterstützt werden viele Klassiker, 
-die von legendären Studios wie LucasArts, Sierra On-Line, Revolution 
-Software, Cyan Inc. und den Westwood Studios entwickelt wurden.</p>
-    <p xml:lang="ca">Actualment, ScummVM suporta una enorme biblioteca d'aventures amb més de 
-4.000 jocs en total. Dóna suport a molts clàssics publicats per estudis 
-llegendaris com LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. i 
-Westwood Studios.</p>
     <p xml:lang="pl">Obecnie ScummVM obsługuje wielki katalog przygód liczący razem ponad 4000 
 gier. Obsługuje wiele klasycznych gier wydanych przez legandarne studia 
 takie jak LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. oraz 
@@ -185,79 +191,79 @@ Westwood Studios.</p>
 4000 jogos no total. Ele suporta muitos clássicos publicados por estúdios 
 lendários como LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. e 
 Westwood Studios.</p>
-    <p xml:lang="fi">Tällä hetkellä ScummVM tukee jättimäistä seikkailujen kirjastoa, kaikkiaan 
-yli 4000 peliä. Se tukee lukuisia klassikkoja legendaarisilta studioilta 
-kuten LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. ja Westwood 
+    <p xml:lang="ru">В настоящее время ScummVM поддерживает огромную библиотеку приключений, 
+насчитывающую в общей сложности более 4000 игр. Он поддерживает множество 
+классических произведений, выпущенных легендарными студиями, такими как 
+LucasArts, Sierra On-Line, Revolution Software, Cyan, Inc. и Westwood 
 Studios.</p>
-    <p xml:lang="nb">For øyeblikket støtter ScummVM et eventyrlig bibliotek på over 4000 
-spilltitler totalt. Det støtter mange klassikere utgitt av legendariske 
-spillstudioer som bl.a. LucasArts, Sierra On-Line, Revolution Software, 
-Cyan, Inc. og Westwood Studios.</p>
-    <p xml:lang="he">נכון להיום, ScummVM תומכת בספריה ענקית של הרפתקאות, עם למעלה מ-4000 משחקים 
-בסך הכל. ביניהם מיטב הקלאסיקות של אולפנים אגדיים כמו LucasArts, Sierra On-
-Line, Revolution Software, Cyan, Inc. וגם Westwood Studios.</p>
-    <p>Next to ground-breaking titles like the Monkey Island series, Broken Sword,
-Myst, Blade Runner and countless other games you will find
-some really obscure adventures and truly hidden gems to explore.</p>
-    <p xml:lang="ru">Наряду с новаторскими играми, такими как серия Monkey Island, Broken Sword, 
-Myst, Blade Runner и бесчисленное множество других игр, вы найдете 
-действительно малоизвестные приключения и действительно скрытые сокровища 
-для исследования.</p>
-    <p xml:lang="ja">モンキーアイランドシリーズ、ブロークンソード、ミスト、ブレードランナー、その
-他の無数のゲームなどの画期的なタイトルの横に、いくつかの本当にあいまいな冒険
-と真に隠された宝石を見つけることができます.</p>
-    <p xml:lang="es">Podrás jugar a títulos tan innovadores como las sagas de Monkey Island, 
-Broken Sword, Myst, Blade Runner como aventuras menos conocidas y otras 
-joyas ocultas.</p>
-    <p xml:lang="uk">Окрім новаторських ігор, як-от серії Monkey Island, Broken Sword, Myst, 
-Blade Runner та незліченної кількості інших, ви знайдете декілька справді 
-маловідомих пригодницьких ігор та справді прихованих дорогоцінних каменів, 
-які слід дослідити.</p>
+    <p xml:lang="uk">В даний час ScummVM підтримує величезну бібліотеку пригодницьких ігор із 
+загальною кількістю понад 4000. Проект підтримує багато класичних творів, 
+опублікованих такими легендарними студіями, як LucasArts, Sierra On-Line, 
+Revolution Software, Cyan, Inc. та Westwood Studios.</p>
+    <p>
+      Next to ground-breaking titles like the Monkey Island series, Broken Sword,
+      Myst, Blade Runner and countless other games you will find
+      some really obscure adventures and truly hidden gems to explore.
+    </p>
     <p xml:lang="be">Разам з рэвалюцыйнымі гульнямі як Monkey Island, Broken Sword, Myst, Blade 
 Runner і безьлічам іншых гульняў, вы знойдзіце насамрэч малавядомыя авантуры 
 й прыхаваныя скарбы.</p>
+    <p xml:lang="ca">Al costat de títols innovadors com la sèrie Monkey Island, Broken Sword, 
+Myst, Blade Runner i molts altres jocs trobareu algunes aventures realment 
+fosques i altres gemmes realment ocultes per explorar.</p>
+    <p xml:lang="de">Neben bahnbrechenden Titel wie der Monkey Island-Serie, Baphomets Fluch, 
+Myst, Blade Runner und zahllosen weiteren Spielen wirst du auch einige 
+wirklich kuriose Adventures und versteckte Schätze entdecken.</p>
+    <p xml:lang="el">Μαζί με καινοτόμους για την εποχή τους τίτλους, όπως ήταν οι σειρές Monkey 
+Island, Broken Sword, Myst, Blade Runner και αμέτρητα άλλα παιχνίδια, θα 
+βρείτε και μερικούς σχετικά άγνωστους τίτλους περιπέτειας και πραγματικά 
+κρυμμένα διαμαντάκια για να εξερευνήσετε.</p>
+    <p xml:lang="es">Podrás jugar a títulos tan innovadores como las sagas de Monkey Island, 
+Broken Sword, Myst, Blade Runner como aventuras menos conocidas y otras 
+joyas ocultas.</p>
+    <p xml:lang="fi">Uraauurtaneiden Monkey Island-, Broken Sword-, Myst-, Blade Runner- ja 
+lukuisten muiden pelien ohelta löydät myös vähemmän tunnettuja helmiä 
+tutkittavaksesi.</p>
     <p xml:lang="fr">À côté de titres révolutionnaires comme la série Monkey Island, Broken Sword 
 (Les Chevaliers de Baphomet) , Myst, Blade Runner et d'innombrables autres 
 jeux, vous trouverez des aventures vraiment obscures et des pépites vraiment 
 bien cachées à explorer.</p>
+    <p xml:lang="he">לצד כותרים פורצי דרך כמו סדרת אי הקופים, חרב שבורה, Myst, בלייד ראנר 
+ואינספור משחקים נוספים תוכלו למצוא גם הרפתקאות עמומות ופנינות נסתרות של ממש 
+שמחכות שתגלו אותן.</p>
+    <p xml:lang="hu">Az olyan úttörő címek mellett, mint a Monkey Island sorozat, a Broken Sword, 
+a Myst, a Blade Runner és számtalan más játék, valóban homályos kalandokat 
+és valóban rejtett drágaköveket találhat.</p>
     <p xml:lang="it">Pietre miliari come la saga di Monkey Island, Broken Sword, Myst, Blade 
 Runner e innumerevoli altri titoli tutti da scoprire. Potrai trovare 
 avventure sconosciute ai più ma anche dei gioiellini ingiustamente 
 dimenticati.</p>
-    <p xml:lang="el">Μαζί με καινοτόμους για την εποχή τους τίτλους, όπως ήταν οι σειρές Monkey 
-Island, Broken Sword, Myst, Blade Runner και αμέτρητα άλλα παιχνίδια, θα 
-βρείτε και μερικούς σχετικά άγνωστους τίτλους περιπέτειας και πραγματικά 
-κρυμμένα διαμαντάκια για να εξερευνήσετε.</p>
-    <p xml:lang="nl">Naast spraakmakende titels zoals de Monkey Island series, Broken Sword, 
-Myst, Blade Runner en talloze andere spellen zal je enkele vage adventures 
-vinden en echte verborgen pareltjes ontdekken.</p>
-    <p xml:lang="hu">Az olyan úttörő címek mellett, mint a Monkey Island sorozat, a Broken Sword, 
-a Myst, a Blade Runner és számtalan más játék, valóban homályos kalandokat 
-és valóban rejtett drágaköveket találhat.</p>
+    <p xml:lang="ja">モンキーアイランドシリーズ、ブロークンソード、ミスト、ブレードランナー、その
+他の無数のゲームなどの画期的なタイトルの横に、いくつかの本当にあいまいな冒険
+と真に隠された宝石を見つけることができます.</p>
     <p xml:lang="ko">Monkey Island 시리즈, Broken Sword, Myst, Blade Runner와 같이 획기적인 타이틀
 을 비롯해, 잘 알려지지 않은 어드벤처 게임과 진정한 숨겨진 보석을 찾아볼 수 있
 습니다.</p>
-    <p xml:lang="de">Neben bahnbrechenden Titel wie der Monkey Island-Serie, Baphomets Fluch, 
-Myst, Blade Runner und zahllosen weiteren Spielen wirst du auch einige 
-wirklich kuriose Adventures und versteckte Schätze entdecken.</p>
-    <p xml:lang="ca">Al costat de títols innovadors com la sèrie Monkey Island, Broken Sword, 
-Myst, Blade Runner i molts altres jocs trobareu algunes aventures realment 
-fosques i altres gemmes realment ocultes per explorar.</p>
+    <p xml:lang="nb">Sammen med banebrytende titler som Monkey Island-serien, Broken Sword, Myst, 
+Blade Runner og utallige andre spill finner du også enkelte kuriositeter og 
+skjulte skatter det kan være verdt å gi et forsøk.</p>
+    <p xml:lang="nl">Naast spraakmakende titels zoals de Monkey Island series, Broken Sword, 
+Myst, Blade Runner en talloze andere spellen zal je enkele vage adventures 
+vinden en echte verborgen pareltjes ontdekken.</p>
     <p xml:lang="pl">Poza przełomowymi tytułami, takimi jak seria Monkey Island, Broken Sword, 
 Myst, Blade Runner i wieloma innymi, znajdziesz tu również wiele mało 
 znanych przygód i naprawdę mało znanych perełek.</p>
     <p xml:lang="pt">Ao lado de títulos inovadores como a série Monkey Island, Broken Sword, 
 Myst, Blade Runner e inúmeros outros jogos, você encontrará algumas 
 aventuras realmente obscuras e verdadeiras joias raras para explorar.</p>
-    <p xml:lang="fi">Uraauurtaneiden Monkey Island-, Broken Sword-, Myst-, Blade Runner- ja 
-lukuisten muiden pelien ohelta löydät myös vähemmän tunnettuja helmiä 
-tutkittavaksesi.</p>
-    <p xml:lang="nb">Sammen med banebrytende titler som Monkey Island-serien, Broken Sword, Myst, 
-Blade Runner og utallige andre spill finner du også enkelte kuriositeter og 
-skjulte skatter det kan være verdt å gi et forsøk.</p>
-    <p xml:lang="he">לצד כותרים פורצי דרך כמו סדרת אי הקופים, חרב שבורה, Myst, בלייד ראנר 
-ואינספור משחקים נוספים תוכלו למצוא גם הרפתקאות עמומות ופנינות נסתרות של ממש 
-שמחכות שתגלו אותן.</p>
+    <p xml:lang="ru">Наряду с новаторскими играми, такими как серия Monkey Island, Broken Sword, 
+Myst, Blade Runner и бесчисленное множество других игр, вы найдете 
+действительно малоизвестные приключения и действительно скрытые сокровища 
+для исследования.</p>
+    <p xml:lang="uk">Окрім новаторських ігор, як-от серії Monkey Island, Broken Sword, Myst, 
+Blade Runner та незліченної кількості інших, ви знайдете декілька справді 
+маловідомих пригодницьких ігор та справді прихованих дорогоцінних каменів, 
+які слід дослідити.</p>
   </description>
   <screenshots>
     <screenshot type="default">


Commit: 912ffa448f605d0204afc91075f32d9b62816831
    https://github.com/scummvm/scummvm/commit/912ffa448f605d0204afc91075f32d9b62816831
Author: Ankush Dutt (ankushd100 at gmail.com)
Date: 2023-03-21T12:32:42+01:00

Commit Message:
I18N: Refactor generate-appdata.py

Changed paths:
    devtools/generate-appdata.py


diff --git a/devtools/generate-appdata.py b/devtools/generate-appdata.py
index f91159f77e9..b2ed7457afc 100644
--- a/devtools/generate-appdata.py
+++ b/devtools/generate-appdata.py
@@ -155,106 +155,108 @@ def extract_par3(file):
         return None
 
 
-# get file names of all .po files
-file_names = []
-for filename in os.listdir("../po/"):
-    if filename.endswith(".po"):
-        file_names.append(filename)
+def get_summary_translations(po_file_names):
+    summary_translations = ""
 
-file_names.sort()
+    # first_translation is used to determine the indentation (first translation will not require any indentation)
+    first_translation = True
 
-# summary translations
-summary_translations = ""
+    for file in po_file_names:
+        summary = extract_summary(file)
+        if (summary is None):
+            continue
 
-# first_translation is used to determine the indentation (first translation will not require any indentation)
-first_translation = True
+        lang = '"' + file[0] + file[1] + '"'
+        summary_translations += ('' if first_translation else '  ') + '<summary xml:lang=' + \
+            lang + '>' + summary + '</summary>\n'
+        first_translation = False
 
-for file in file_names:
-    summary = extract_summary(file)
-    if (summary is None):
-        continue
+    summary_translations = summary_translations.rstrip('\n')
 
-    lang = '"' + file[0] + file[1] + '"'
-    summary_translations += ('' if first_translation else '  ') + '<summary xml:lang=' + \
-        lang + '>' + summary + '</summary>\n'
-    first_translation = False
+    return summary_translations
 
-summary_translations = summary_translations.rstrip('\n')
 
-regex_pattern = r'<summary xml:lang="xy">I18N: One line summary as shown in \*nix distributions<\/summary>'
+def substitute_summary_translations(summary_translations, xml):
+    pattern = r'<summary xml:lang="xy">I18N: One line summary as shown in \*nix distributions<\/summary>'
 
-appdata_xml_template = re.sub(
-    regex_pattern, summary_translations, appdata_xml_template)
+    appdata_xml = re.sub(pattern, summary_translations, xml)
 
-# paragraph 1 translations
-par1_translations = ""
-first_translation = True
+    return appdata_xml
 
-for file in file_names:
-    par1 = extract_par1(file)
-    if (par1 is None):
-        continue
 
-    # par1 also contains " (quotes) around the text; so we need to replace them with empty character
-    # otherwise " (quotes) will appear in scummvm.appdata.xml generated file
-    par1 = par1.replace('"', '')
+def get_parx_translations(x, po_file_names):
+    parx_translations = ""
+    first_translation = True
+
+    for file in po_file_names:
+        parx = ""
+        if (x == 1):
+            parx = extract_par1(file)
+        elif (x == 2):
+            parx = extract_par2(file)
+        else:
+            parx = extract_par3(file)
+
+        if (parx is None):
+            continue
+
+        # parx also contains " (quotes) around the text; so we need to replace them with empty character
+        # otherwise " (quotes) will appear in scummvm.appdata.xml generated file
+        parx = parx.replace('"', '')
+
+        lang = '"' + file[0] + file[1] + '"'
+        parx_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
+            lang + '>' + parx + '</p>\n'
+        first_translation = False
+
+    parx_translations = parx_translations.rstrip('\n')
+
+    return parx_translations
 
-    lang = '"' + file[0] + file[1] + '"'
-    par1_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
-        lang + '>' + par1 + '</p>\n'
-    first_translation = False
 
-par1_translations = par1_translations.rstrip('\n')
+def substitute_parx_translations(x, parx_translations, xml):
+    pattern = r'<p xml:lang="xy">I18N: 1 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
 
-regex_pattern = r'<p xml:lang="xy">I18N: 1 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+    if (x == 2):
+        pattern = r'<p xml:lang="xy">I18N: 2 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+    elif (x == 3):
+        pattern = r'<p xml:lang="xy">I18N: 3 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
 
-appdata_xml_template = re.sub(
-    regex_pattern, par1_translations, appdata_xml_template)
+    appdata_xml = re.sub(pattern, parx_translations, xml)
+    return appdata_xml
 
-# paragraph 2 translations
-par2_translations = ""
-first_translation = True
 
-for file in file_names:
-    par2 = extract_par2(file)
-    if (par2 is None):
-        continue
-    par2 = par2.replace('"', '')
+def get_po_files():
+    po_file_names = []
+    for filename in os.listdir("../po/"):
+        if filename.endswith(".po"):
+            po_file_names.append(filename)
 
-    lang = '"' + file[0] + file[1] + '"'
-    par2_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
-        lang + '>' + par2 + '</p>\n'
-    first_translation = False
+    po_file_names.sort()
 
-par2_translations = par2_translations.rstrip('\n')
+    return po_file_names
 
-regex_pattern = r'<p xml:lang="xy">I18N: 2 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
 
-appdata_xml_template = re.sub(
-    regex_pattern, par2_translations, appdata_xml_template)
+def main():
+    po_file_names = get_po_files()
 
-# paragraph 3 translations
-par3_translations = ""
-first_translation = True
+    summary_translations = get_summary_translations(po_file_names)
+    xml = substitute_summary_translations(
+        summary_translations, appdata_xml_template)
 
-for file in file_names:
-    par3 = extract_par3(file)
-    if (par3 is None):
-        continue
-    par3 = par3.replace('"', '')
+    par1_translations = get_parx_translations(1, po_file_names)
+    xml = substitute_parx_translations(1, par1_translations, xml)
 
-    lang = '"' + file[0] + file[1] + '"'
-    par3_translations += ('' if first_translation else '    ') + '<p xml:lang=' + \
-        lang + '>' + par3 + '</p>\n'
-    first_translation = False
+    par2_translations = get_parx_translations(2, po_file_names)
+    xml = substitute_parx_translations(2, par2_translations, xml)
 
-par3_translations = par3_translations.rstrip('\n')
+    par3_translations = get_parx_translations(3, po_file_names)
+    xml = substitute_parx_translations(3, par3_translations, xml)
 
-regex_pattern = r'<p xml:lang="xy">I18N: 3 of 3 paragraph of ScummVM description in \*nix distributions<\/p>'
+    # write to scummvm.appdata.xml file
+    with open("../dists/scummvm.appdat3a.xml", "w") as f:
+        f.write(xml)
 
-appdata_xml_template = re.sub(
-    regex_pattern, par3_translations, appdata_xml_template)
 
-# write to scummvm.appdata.xml file
-with open("../dists/scummvm.appdata.xml", "w") as f:
-    f.write(appdata_xml_template)
+if __name__ == '__main__':
+    main()




More information about the Scummvm-git-logs mailing list