diff --git a/bin/config.js b/bin/admin-yml/helper.js similarity index 100% rename from bin/config.js rename to bin/admin-yml/helper.js diff --git a/bin/admin.js b/bin/admin-yml/index.js similarity index 97% rename from bin/admin.js rename to bin/admin-yml/index.js index 17ba741..259532b 100644 --- a/bin/admin.js +++ b/bin/admin-yml/index.js @@ -1,7 +1,7 @@ -const fs = require('fs') const yaml = require('js-yaml') const ora = require('ora') +const { writeFile } = require('../helper') const { category, baseConfig, @@ -12,15 +12,7 @@ const { markdownField, listField, objectField -} = require('./config') - -const writeFile = (path, data, opts = 'utf8') => - new Promise((resolve, reject) => { - fs.writeFile(path, data, opts, (err) => { - if (err) reject(err) - else resolve() - }) - }) +} = require('./helper') const PATH_DESTINATION = './public/admin/config.yml' diff --git a/bin/helper.js b/bin/helper.js new file mode 100644 index 0000000..70fb286 --- /dev/null +++ b/bin/helper.js @@ -0,0 +1,22 @@ +const fs = require('fs') + +const writeFile = (path, data, opts = 'utf8') => + new Promise((resolve, reject) => { + fs.writeFile(path, data, opts, (err) => { + if (err) reject(err) + else resolve() + }) + }) + +const readFile = (path, opts = 'utf8') => + new Promise((resolve, reject) => { + fs.readFile(path, opts, (err, data) => { + if (err) reject(err) + else resolve(data) + }) + }) + +module.exports = { + writeFile, + readFile +} diff --git a/bin/xlsx-data/index.js b/bin/xlsx-data/index.js new file mode 100644 index 0000000..31f5220 --- /dev/null +++ b/bin/xlsx-data/index.js @@ -0,0 +1,144 @@ +const XLSX = require('xlsx') +const ora = require('ora') +const { writeFile } = require('../helper') + +/** + * Cell Object Structure + * v: raw value (see Data Types section for more info) + * w: formatted text (if applicable) + * t: type: b Boolean, e Error, n Number, d Date, s Text, z Stub + * f: cell formula encoded as an A1-style string (if applicable) + * F: range of enclosing array if formula is array formula (if applicable) + * r: rich text encoding (if applicable) + * h: HTML rendering of the rich text (if applicable) + * c: comments associated with the cell + * z: number format string associated with the cell (if requested) + * l: cell hyperlink object (.Target holds link, .Tooltip is tooltip) + * s: the style/theme of the cell (if applicable) + */ + +function createLocaleMap (section, data = {}) { + return Object.keys(data) + .filter(key => key.includes(section)) + .reduce((acc, keyLabel) => { + const splitKeyLabel = keyLabel.split(' ') + const locale = splitKeyLabel[splitKeyLabel.length - 1].toLowerCase() + acc[locale] = data[keyLabel].trim() + return acc + }, {}) +} + +function createPartyPositionMap (sheetName) { + if (!sheetName) return [] + const rawData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]) + return rawData.map(block => { + return { + thesis: block.Thesis, + position: block.Position, + statement: createLocaleMap('Statement', block) + } + }) +} + +function toJSON (data = {}) { + return JSON.stringify(data, null, 2) +} + +async function writeDataset (fileName, data = {}) { + const path = `${DIRECTORY}/${fileName}` + try { + await writeFile(path, toJSON(data)) + spinner.succeed(`Success! It's located at ${path}`) + } catch (error) { + spinner.fail(`Failure! Couldn't write '${fileName}'. Error: ${error.message}`) + } +} + +async function createOptionsDataset (sheetName) { + if (!sheetName) { + throw new Error(`createOptionsDataset() requires 'sheetName', got "${sheetName}"`) + } + await writeDataset( + 'options.json', + XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]) + ) +} + +async function createThesesDataset (sheetName) { + if (!sheetName) { + throw new Error(`createThesesDataset() requires 'sheetName', got "${sheetName}"`) + } + + const rawData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]) + const data = rawData.map(block => { + return { + id: parseInt(block.ID, 10), + category: createLocaleMap('Category', block), + thesis: createLocaleMap('Thesis', block), + terminology: block.Terminology || [] + } + }) + await writeDataset('theses.json', data) +} + +async function createTerminologyDataset (sheetName) { + if (!sheetName) { + throw new Error(`createTerminologyDataset() requires 'sheetName', got "${sheetName}"`) + } + + const rawData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]) + const data = rawData.map(block => { + return { + id: parseInt(block.ID, 10), + explanation: createLocaleMap('Explanation', block), + reference: createLocaleMap('Reference', block) + } + }) + await writeDataset('terminology.json', data) +} + +async function createPartiesDataset (sheetName, partySheets) { + if (!sheetName) { + throw new Error(`createPartiesDataset() requires 'sheetName', got "${sheetName}"`) + } + + const rawData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]) + const data = rawData.map(block => { + return { + id: parseInt(block.ID, 10), + token: block.Token, + european_profile: { + party: createLocaleMap('European Party', block) + }, + program: createLocaleMap('Program', block), + positions: createPartyPositionMap(partySheets.find(sName => sName === block.Token)) + } + }) + await writeDataset('parties.json', data) +} + +const DIRECTORY = './bin/xlsx-data/test' +const RESOURCE_FILE = 'euromat-dataset.xlsx' +const spinner = ora() +const workbook = XLSX.readFile(`./resources/${RESOURCE_FILE}`) +const [options, theses, terminology, parties, ...morePartySheets] = workbook.SheetNames + +;(async () => { + spinner.start() + spinner.info(`Parsing '${RESOURCE_FILE}' to JSON files`) + spinner.info(`XLSX SheetNames: ${workbook.SheetNames}`) + + spinner.info(`Writing 'options.json' file`) + await createOptionsDataset(options) + + spinner.info(`Writing 'theses.json' file`) + await createThesesDataset(theses) + + spinner.info(`Writing 'terminology.json' file`) + await createTerminologyDataset(terminology) + + spinner.info(`Writing 'parties.json' file`) + await createPartiesDataset(parties, morePartySheets) + + spinner.stopAndPersist() +})() diff --git a/bin/xlsx-data/test/options.json b/bin/xlsx-data/test/options.json new file mode 100644 index 0000000..7bb4d1b --- /dev/null +++ b/bin/xlsx-data/test/options.json @@ -0,0 +1,18 @@ +[ + { + "position": "positive", + "id": 0 + }, + { + "position": "neutral", + "id": 1 + }, + { + "position": "negative", + "id": 2 + }, + { + "position": "skipped", + "id": 3 + } +] \ No newline at end of file diff --git a/bin/xlsx-data/test/parties.json b/bin/xlsx-data/test/parties.json new file mode 100644 index 0000000..21d16a5 --- /dev/null +++ b/bin/xlsx-data/test/parties.json @@ -0,0 +1,1087 @@ +[ + { + "id": 0, + "token": "ALDE", + "european_profile": { + "party": { + "de": "Allianz der Liberalen und Demokraten für Europa", + "en": "Alliance of Liberals and Democrats for Europe (ALDE)" + } + }, + "program": { + "en": "https://www.aldeparty.eu/sites/alde/files/40-Resolutions/2019_freedom_opportunity_prosperity_the_liberal_vision_for_the_future_of_europe.pdf" + }, + "positions": [ + { + "thesis": 0, + "position": "skipped", + "statement": { + "de": "Nationale Kompetenz", + "en": "National competence", + "fr": "Statement der Partei" + } + }, + { + "thesis": "1", + "position": "neutral", + "statement": { + "de": "Die ALDE begrüßt eine umfassendere europäische Kooperation bei den Verteidigungsaufwendungen und dem PESCO-Abkommen, und sie ermutigt die Mitgliedstaaten dazu, die Verteidigungszusammenarbeit in Bereichen gegenseitigen Vorteils zu intensiveren, und zwar in verstärkter Kooperation mit und in Ergänzung zur NATO, die das Rückgrat der militärischen Zusammenarbeit und der Garant für die kollektive Verteidigung Europas bleiben wird. (2019 Manifesto)", + "en": "\"We welcome greater European cooperation in defence spending and the agreement of PESCO, and encourage Member States to further increase defence cooperation in areas of mutual advantage, in greater cooperation with and to complement NATO which remains the backbone of military cooperation and guarantor of collective defence for Europe.\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "2", + "position": "neutral", + "statement": { + "de": "Die ALDE ist der Meinung, dass die Beschlüsse auf derjenigen Ebene –der lokalen oder regionalen Ebene, der nationalen Ebene oder der EU –zu fassen sind, die Ihnen am besten und in der direktesten Weise nützt. Wir unterstützen Initiativen zur Neubewertung und Neuverhandlung der Zuständigkeiten zwischen der Europäischen Union und ihren Mitgliedstaaten, wobei die Grundsätze der Vereinfachung und Subsidiarität nicht vergessen werden dürfen. (2019 Manifesto)", + "en": "\"We believe that decisions should be taken at the appropriate local and regional, national or EU level that serves you best and most directly. We support initiatives to re-evaluate and re-negotiate of the division of competencies between the European Union and its Member States, strongly keeping in mind the principles of simplification and subsidiarity.\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "3", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "4", + "position": "negative", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "5", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "6", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "7", + "position": "negative", + "statement": { + "de": "Die Datenschutzpolitik muss harmonisiert und ausgeglichen werden, damit die Zukunft der EU als Standort für Innovation gesichert werden kann. [...] Das Ansprechen der Fragen der Cybersicherheit, des Datenschutzes und der Privatsphäre ist für die ALDE selbstverständlich, denn wenn diese grundlegenden Voraussetzungen nicht gegeben sind, kann es keine digitale Gesellschaft geben. (2019 Manifesto)", + "en": "\"Data protection policies need to be harmonised and balanced in order to ensure the EU's future as place of innovation […] Addressing the issues of cyber security, data protection, and privacy is selfevident for us, there can be no digital society without these base requirements.\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "8", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "9", + "position": "negative", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "10", + "position": "neutral", + "statement": { + "de": "Die ALDE befürwortet einen europäischen Rahmen für Mindeststeuern auf CO2-Emissionen für Sektoren außerhalb des EU-Emissionshandelssystems. Allerdings ist darauf zu achten, dass die Wettbewerbsfähigkeit der EU-Industrie nicht beeinträchtigt wird. (2012 Resolution)", + "en": "\"An EU framework for minimum national carbon taxes should be considered for the sectors outside the ETS (Emissions Trading System), but due care needs to be taken not to harm the competitiveness of EU industry.\" (2012 resolution)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "11", + "position": "positive", + "statement": { + "de": "Die ALDE ist bestrebt,die Agrarsubventionen substanziell zu reformieren und zu überdenken, da die Reformierung der Gemeinsamen Agrarpolitik einen wichtigen Schritt hin zu den Zielen der Nachhaltigkeit sowie zu höherer Transparenz und Gleichberechtigung bei der Zahlung von Subventionen sein wird. (2019 Manifesto)", + "en": "\"We aim to substantially reform and rethink agricultural subsidies as reforming the Common Agricultural Policy will be an essential step to the sustainability goals, and greater transparency and equality in the subsidies payment.\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "12", + "position": "skipped", + "statement": { + "de": "Die Bürgerinnen und Bürger Europas müssen im Mittelpunkt unserer Sicherheits-und Verteidigungspolitik stehen, die konkrete Aktionen mit engerer Kooperation von der Bekämpfung des Terrorismus bis zu effektiveren Bemühungen zur Sicherung der EU-Außengrenze mit umfassen sollte. Die Stärkung der Befugnisse von Europol und die Intensivierung der Zusammenarbeit beim Austausch von Informationen sind die notwendigen nächsten Schritte, die wir zu nehmen haben. Dies sollte auch eine verbesserte Fähigkeit der Institutionen und Mitgliedstaaten der EU umfassen, unsere Volkswirtschaften und Gesellschaften vor hybriden Aktivitäten wie Desinformationskampagnen, Cyber-Spionage, Cyber-Attacken und einschlägiger Kriminalität zu schützen. (2019 Manifesto)", + "en": "\"European citizens must be at the centre of our security and defence policy that must involve concrete actions starting with ever-closer cooperation to fight terrorism as well as more effective efforts to secure the EU’s external border. Upgrading Europol’s powers and increasing cooperation in intelligence sharing are necessary next steps we need to take. It must also involve greater capacity across EU institutions and Member States to defend our economies and societies against hybrid activities, such as disinformation campaigns, cyber espionage, cyber-attacks and crime.” (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "13", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "14", + "position": "negative", + "statement": { + "de": "Die ALDE spricht sich dafür aus, die Sanktionen gegen die russische Regierung aufrechtzuerhalten, bis diese die Besetzung der Krimhalbinsel beendet und alle Schritte des Minsker Friedensabkommens implementiert. (2016 Resolution)", + "en": "ALDE is in favor of maintaining and upholding sanctions against the Russian government unless it ceases to occupy the Crimean Peninsula and fully implements all steps of the Minsk Peace Agreement. (2016 resolution)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "15", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "16", + "position": "positive", + "statement": { + "de": "EU und Mitgliedsstaaten sollten sich auf das Problem der Jugendarbeitslosigkeit und die großen Unterschiede innerhalb Europas konzentrieren, um eine Lösung für dieses dringende Problem zu finden. (2016 Resolution)", + "en": "\"The EU and the Member States should focus on the problem of youth unemployment and the broad differences within Europe, in order to seek a solution to this pressing issue.\" (2016 resolution)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "17", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "18", + "position": "neutral", + "statement": { + "de": "Die ALDE ist der Meinung, dass die EU eine gemeinsame Steuerbemessungsgrundlage einführen sollte, es aber den Mitgliedsstaaten überlässt, den Steuersatz zu bestimmen. (2014 Resolution)", + "en": "The European Union should introduce a common consolidated tax base, but give the Member States the possibility to decide on tax rates. (2014 resolution)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "19", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "20", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "21", + "position": "neutral", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "22", + "position": "positive", + "statement": { + "de": "Vielleicht nicht in erheblichem Umfang, aber die ALDE fordert, dass die EU-Mitgliedstaaten auch in ihre eigene Sicherheit und Verteidigung investieren und ihre eigenen militärischen Fähigkeiten koordiniert verbessern. (2017 Resolution)", + "en": "Perhaps not substantially but we call for \"EU Member States to also invest in their own security and defence, and improve their own military capabilities in a coordinated manner.\" (2017 resolution)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "23", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "24", + "position": "negative", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "25", + "position": "positive", + "statement": { + "de": "Wir glauben, dass das Europäische Parlament nur einen Sitz in Brüssel haben sollte. (2019 Manifesto)", + "en": "\"We believe the European Parliament should only have one seat in Brussels\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "26", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": "27", + "position": "negative", + "statement": { + "de": "Der freie Verkehr von Personen in der EU ist für die Weiterführung der europäischen Integration und den Wohlstand Europas unerlässlich,und aus diesem Grund ist ALDE gegen jegliche Wiedereinführung von ständigen Kontrollen an den Binnengrenzen der Schengener Vertragsstaaten. (2019 Resolution)", + "en": "\"Free movement of people within the EU is vital for continued European integration and prosperity, so we oppose any re-introduction of permanent internal border controls between Schengen member states.\" (2019 Manifesto)", + "fr": "Statement der Partei" + } + }, + { + "thesis": "28", + "position": "skipped", + "statement": { + "de": "Nationale Kompetenz", + "en": "National competence", + "fr": "Statement der Partei" + } + }, + { + "thesis": "29", + "position": "skipped", + "statement": { + "de": "-", + "en": "-", + "fr": "Statement der Partei" + } + }, + { + "thesis": 30, + "position": "positive", + "statement": { + "de": "-", + "en": "-" + } + }, + { + "thesis": 31, + "position": "skipped", + "statement": { + "de": "-", + "en": "-" + } + }, + { + "thesis": 32, + "position": "skipped", + "statement": { + "de": "-", + "en": "-" + } + } + ] + }, + { + "id": 1, + "token": "DiEM25", + "european_profile": { + "party": { + "de": "Bewegung Demokratie in Europa 2025", + "en": "Democracy in Europe Movement 2025" + } + }, + "program": { + "en": "https://diem25.org/wp-content/uploads/2016/02/diem25_english_long.pdf" + }, + "positions": [ + { + "thesis": 0, + "position": "positive", + "statement": { + "de": "Um informierte Entscheidungen zu treffen sollten die Bürger Europas ihre gemeinsame Geschichte, Institutionen und die EU Politik kennen.", + "en": "European citizens must know about their common history, their institutions, and EU policies in order to make informed democratic decisions." + } + }, + { + "thesis": "1", + "position": "positive", + "statement": { + "de": "So lange militärische Kapazitäten (zur reinen Verteidigung) nötig sind, sollte die EU nicht weiter unnötige Ressourcen vergeuden und seine Streitkräfte zusammenschließen. Dies ist auch ein Schritt in eine Zukunft, in der Krieg ziwschen den Mitgliedern der EU unmöglich sein wird.", + "en": "As long as (purely defensive) military capacties are required, the EU should stop wasting resources and merge military forces. This is also a further step to make future wars between EU countries all but impossible." + } + }, + { + "thesis": "2", + "position": "negative", + "statement": { + "de": "European Spring kämpft für eine Europäische Konstitution, die von den Bürgern verfasst und verabschiedet wird. Es soll die Entscheidung der Bürger sein, welche Kompetenzen die EU hat und welche Länder, Regionen und Kommunen innehaben.", + "en": "The European Spring fights for a European Constitution which is written and adopted by the European citizens. It will be the citizens' prerogative to decide which competencies should be at the European level and which belong to lower levels such as countries, regions and communes." + } + }, + { + "thesis": "3", + "position": "positive", + "statement": { + "de": "Mit unserem Green New Deal wollen wir einen schnellen Wechsel hin zu erneuerbarer Energie erwirken und ein Auslaufen von Subventionen für nicht erneuerbare Energie wie Kohle und Atomenergie erreichen.", + "en": "With our Green New Deal, we allow a fast adoption of renewable energy sources and phasing out of all subsidies for non-renewable energy system including coal and atomic energy" + } + }, + { + "thesis": "4", + "position": "negative", + "statement": { + "de": "Generell sollten Produkte, die in der EU produziert werden, ohne Schutz vor Wettbewerb auskommen - Handelskriege sind kein adequates Mittel um ein gerechteres Wachstum in der Welt zu erreichen. Allerdings sollten Produkte, die im Einklang mit Umwelt-, Gesundheits und Arbeits- Standards produziert wurden nicht mit Produkten konkurrieren, die im Ausland zu einem niedrigeren Standard hergestellt wurden. Nichtsdestrotrotz sollte es Ausnahmen für Produkte aus dem globalen Süden geben.", + "en": "Generally, European products do not and should not need protection from competition — and trade wars are not conducive to equitable growth in any part of the world. Products that are produced according to strict environmental, health, labour and other standards, however, should be protected from having to compete with foreign products produced according to lower standards. There should be sensible exceptions for imports from the global south." + } + }, + { + "thesis": "5", + "position": "negative", + "statement": { + "de": "Alle EU Mitgliedsstaaten sollten natürlich zu einer gemeinsamen Migrationsstrategie beitragen. Aber wir lehnen die Haltung zu einer \"sicheren\" europäischen Grenze ab - und weisen entschieden darauf hin, dass mehr Ressourcen nötig sind, um Migranten zu schützen, die ihr Leben risktieren. Wir sind überzeugt, dass die Sicherheit an den Grenzen gewährleistet sein wird, wenn es eine sensible Migrationspolitik gibt.", + "en": "All EU Member-States should, of course, contribute to a common immigration strategy. But we reject the framing around 'securing' the European border — and insist that more resources should be spent saving migrants who risk their lives there. Indeed, security at the borders will become much less difficult if we establish a sensible immigration policy." + } + }, + { + "thesis": "6", + "position": "positive", + "statement": { + "de": "Es gibt nach wie vor viel zu wenig Frauen in leitenden Positionen. Wir fordern eine faire Vertretung aller Geschlechter in Führungspositionen in der EU Administration, dem Europäischen Parlament, großen Unternehmen und Universitäten.", + "en": "There are still far too few women in management positions. We demand fair representation of all genders in leadership positions at the EU administration, the European Parliament, big companies and universities." + } + }, + { + "thesis": "7", + "position": "negative", + "statement": { + "de": "European Spring wird die Rechte der EU Bürger dahingehend stärken, Kontrolle über die Nutzung, Speicherung und Löschung ihrer eigenen Daten zu haben. Dies betrifft auch die Datenerfassung von Staaten und internationalen Geheimdiensten.", + "en": "The European Spring will strengthen the rights of Europe's citizens*to \r\ncontrol the use, storage and deletion of their data. This also includes \r\ndata collection by state and international agencies. We need to avoid \r\nthe threat of an orwellian future which may arrive quickly if unlimted \r\ndata collection happens to coincide with authoritarian goverment \r\ntakeovers." + } + }, + { + "thesis": "8", + "position": "neutral", + "statement": { + "de": "Jeder EU Staat sollte einen gerechten Anteil an Geflüchtete aufnehmen; Dennoch sollten die Präferenzen der Geflüchteten Priorität haben (basierend auf dem Beruf, der Familie und den sprachlichen Fähigkeiten des Einzelnen).", + "en": "Each EUState should accept its fair share of refugees; however the refugees wishes (based on lanour market regarding the person's profession, family, language skills etc.) should have priority" + } + }, + { + "thesis": "9", + "position": "negative", + "statement": { + "de": "Es sollte strikte Kriterien zur Aufnahme neuer EU Mitgliedsstaaten geben. Diese Kriterien sollten auf der strikten Einhaltung von Menschenrechten, Rechtsstaatlichkeit und Korruptionslevel der einzelnen Kandidaten basiert sein.", + "en": "There shold be strict criteria for admission of new members to the EU. These criteria should be based, among other things, on the effective protection of human rights and the rule of law as well as corruption levels in the candidate state." + } + }, + { + "thesis": "10", + "position": "positive", + "statement": { + "de": "Wir werden Preise auf den Ausstoß von Kohlestoff erlassen, um die EU auf Linie mit den von Wissenschaftlern aufgestellten Emissionszielen zu bringen. Dies ist Teil unserers Green New Deal für Europa, der unter anderem das Auslaufen von nicht nachhaltigen und umweltschädlichen Formern der Energiegwinnung vorsieht (Kohl und Atomenergie) sowie eine Reform des Emissionshandels.", + "en": "We will raise prices on carbon to bring Europe in line with emissionstargets suggested by scientists. This is part of our more comprehensive Green new deal for Europe, which includes - among other things - adoption of renewable energy sources and phasing out all non-sustainable and environmentally damaging forms of energy including coal and atomic energy and the reform of the emission trading system and include more sectors." + } + }, + { + "thesis": "11", + "position": "positive", + "statement": { + "de": "European Spring wird die Subventionierung für große Agrarunternehmen einstellen. Dennoch müssen wir kleine, nachhaltige Bauern finanziell unterstützen, die den Tierschutz und die Umwelt respektieren.", + "en": "European Spring will stop subsidies to large, unsustainable agriculture enterprises. But we must subsidise small, sustainable farms which respect animal welfare and the environment." + } + }, + { + "thesis": "12", + "position": "neutral", + "statement": {} + }, + { + "thesis": "13", + "position": "positive", + "statement": { + "de": "Der freie Markt beeinflusst Arbeitnehmer in ganz Europa. Deshalb brauchen wir auch eine gemeinsame Arbeitsmarktpolitik, und einen einen Mindestlohn. Dieser sollte sich an den Lebensunterhaltungskosten orientieren und nicht an den Durchschnittslöhnen.", + "en": "The EU's free market affects employees all over Europe. Thus we also need a common policy regarding, among other things, minimum wages. The minimum wage shold be tied to the cost of living, however, not the average income." + } + }, + { + "thesis": "14", + "position": "negative", + "statement": { + "de": "Die EU sollte eine durchgängige Sanktionspolitik allen Staaten gegenüber haben, die einen Anreiz gibt, internationaler Regeln zu befolgen. Speziell Sanktionen gegen Russland sollten abgeschafft werden, die nicht im Einklang mit der Zurückhaltung von Sanktionen in anderen Fällen stehen.", + "en": "The EU should have a consistent sanctions policy towards all states that creates incentives for following international rules. Specific sanctions against Russia that are inconsistent with the absence of sanctions in other cases should be lifted." + } + }, + { + "thesis": "15", + "position": "neutral", + "statement": { + "de": "Dieser Aussage liegt die teilweise falsche Annahme zu Grunde, dass Missinformationen kriminell sind. Wir brauchen starke Sicherheitsstandards, die mit Hilfe des Internets vor gefährlicher Missinformation, Mobbing und Deformationen schützen. Strafverfolgung sollte allerdings nur ein Teil der schützenden Maßnahmen darstellen. Wichtig ist, dass der Schutz vor dem unrechtmäßgem Nutzen des Internets die Zensur ist. Solch eine Maßnahme muss immer im Einklang mit der freien Meinungsäußerung stehen. Im Zeifel sollte die freie Meinungsäußerung den Vorzug haben.", + "en": "The question rests on the partially inccorect premise that, for example, misinformation is criminal. We need strong safety mechanisms to protect against dangerous misinformation, bullying, and defamation with the help of the internet. Prosecution, however, should be only a part of that protection mechanism. Most importantly any protection against illegitimate use of the internet is, effectively, censorship. Thus such protection must be balanced against the principles of free speech. In case of doubt free speech should prevail." + } + }, + { + "thesis": "16", + "position": "negative", + "statement": { + "de": "Die hohen Arbeitslosenzahlen sollten von allen Mitgliedsstaaten der EU gemeinschaftlich bekämpft werden. Zusätzlichen brauchen wir eine gemeinsame Sozialpolitik, die sicher stellt, das Armut in der EU beseitigt wird. Die finanzielle Unterstützung ärmerer EU Staaten durch reicherer EU Staaten wird zu einer Stabilität und Prosperität der gesamten EU beitragen und so allen zu Gute kommen. Wegen all diesen Gründe sollte Jugendarbeitslosigkeit auf nationaler und EU Ebene bekämpft werden.", + "en": "High levels of youth (and other) unemployment should be fought jointly by all EU states. In addition we need a common EU social policy making sure that poverty is eradicated all over the EU. Richer EU regions transferring money to less wealthy ones will share stability and prosperity all over the EU and thus also benefit the richer regions. For all of these reasons, youth unemployment needs to be combatted at BOTH the national and EU levels." + } + }, + { + "thesis": "17", + "position": "positive", + "statement": { + "de": "Tonnnen von Gewicht zu bewegen nur um eine 80 kg schwere Person zu bewegen verschwendet enorme Ressourcen. Wir müssen nicht nur den öffentlichen Verkehr stärken sondern auch nachhtaltige und umweltfreundlichen Verkehrsmittel wie Fahrräder und E-Bikes.", + "en": "Moving a ton of weight to move a 80 Kg person is an enormous waste of resources. But we need not only enhance public transport but also support sustainable, and environmentally friendly personal transport such as bicycles and ebikes." + } + }, + { + "thesis": "18", + "position": "positive", + "statement": { + "de": "Es wird geschätzt, dass 1 Trillionen Euro im Jahr auf Grund von Steuervermeidung verlohren gehen. Die Mitgliedsstaaten der EU sollten nicht gezwungen sein, mit einander in einen Steuerwettbewerb treten zu müssen, um neue Arbeitsplätze zu sichern. Private Unternehmen sollten nationale Unterschiede nicht ausnutzen können. European Spring will diese Situation verändern und ein Minimum an Unternehemnssteuer erheben um dafür zu Sorgen, das alle Firmen, die in Europa angesiedelt sind einen fairen Anteil an Steuern zahlen. Generell braucht Europa eine Steuerharmonisieren, die an lokale Gegebenheiten agepasst werden kann.", + "en": "It is estimated that up to 1 trillion Euro is lost per year due to tax avoidance and tax evasion. The countries of Europe should not be forced to engage in tax competition to attract jobs and private companies should not be allowed to exploit such divisions to avoid paying taxation. The European Spring wants to change situation by introducing a minimum level of corporate taxation, ensuring that all companies operating within the EU pay their fair share. Moreover, Europe generally needs tax harmonisation, allowing, however, for consideration of local circumstances." + } + }, + { + "thesis": "19", + "position": "negative", + "statement": { + "de": "Einige Personen unterliegen der Ausweisung, so lange ihre Menschenrechte im Aufnahmeland garantiert sind. Personen ohne Aufentaltstitel müssen individuell angehört werden - mit dem Feingefühl für die Umstände, unter denen sie nach Europa gekommen sind. Eine Ausweisung ist nur in wenigen Fällen die richtige Antwort - wir lehnen die Aussage ab.", + "en": "Certain persons may be liable to expulsion, but only if their human rights are guaranteed in the receiving state. Persons lacking residence permits must be dealt with on a case by case basis — but with compassion for circumstances that led them to Europe. Expulsion is rarely the answer, so we disagree with the statement." + } + }, + { + "thesis": "20", + "position": "negative", + "statement": { + "de": "Die Nutzung von elektrischem Geld erlaubt eine Umfassende Nachverfolgung der Bürger. Dies ist Teil einer orwellschen Zukunft, die es zu Verhindern gilt.", + "en": "Fully electronic money would allow comprehensive tracking of citizens'. This is part of an orwellian future that we must avoid." + } + }, + { + "thesis": "21", + "position": "positive", + "statement": {} + }, + { + "thesis": "22", + "position": "negative", + "statement": { + "de": "Die EU sollte mehr Geld in Bildung, Gesundheit und Nachhaltigkeit investieren.", + "en": "The EU needs to spend more money in important areas like education, health and sustainable efforts for disarmament." + } + }, + { + "thesis": "23", + "position": "positive", + "statement": { + "de": "Der freie Markt der EU wirkt sich auf alle Arbeitssuchende aus.", + "en": "The EU's free market affects employment seekers in all of Europe." + } + }, + { + "thesis": "24", + "position": "positive", + "statement": { + "de": "Freihandelsabkommen mit Drittstaaten müssen transparent und unter fairen Bedingungen verhandelt werden. Sie sollten nie europäische Umwelt-, Gesundheits- und Arbeitsstandards untergraben.", + "en": "Trade agreements with foreign states must be negotiated transparently, must be fair, and must must not undermine advanced European environmental, health, labour and other standards." + } + }, + { + "thesis": "25", + "position": "neutral", + "statement": { + "de": "Die regelmäßige Verlegung des Parlaments zwischen Brüssel und Straßburg ist eine enorme Geldverschwendung. Aus Effizienzgründen sollte das Parlament dort sein, wo der Großteil der EU Administration angesiedelt ist: in Brüssel. Strasbourg sollte die Möglichkeit erhalten, für den Umzug des Parlaments entschädigt zu werden.", + "en": "Moving the whole parliament periodically between Brusseles and Strassbourg is an enormous waste of money. For reasons of efficiency, the parliament needs to be where the bulk of the EU administration is - that is in Bruxelles. Strassbourg should be offered opportunities to compensate for loosing the seat of the parliament." + } + }, + { + "thesis": "26", + "position": "neutral", + "statement": { + "de": "Schlaue, nachhaltige und umweltfreundliche Infrastruktur und öffentliche Dienstleistungen sollten sowohl in städtischem als auch ländlichem Raum vorhanden sein.", + "en": "Smart, sustainable, and environmentally sound infrastructure and public services need to be available in urban and rural regions alike." + } + }, + { + "thesis": "27", + "position": "negative", + "statement": { + "de": "Die Idee von Schengen ist es, Grenzkontrollen überflüssig zu machen. Die Freiheit sich überall bewegen zu können ist ein fundamentales Menschenrecht und der Eckpfeiler der Europäischen Union. Wir werden die Freizügigkeiten verteidigen und fordern eine sofortige Abschaffung aller Grenzkontrollen im Schengenraum.", + "en": "The whole idea of Schengen is to abolish border controls. The freedom of movement is a fundamental human right — and a cornerstone of the European Union. We will defend free movement by demanding the immediate elimination of all border controls within the Schengen area." + } + }, + { + "thesis": "28", + "position": "negative", + "statement": { + "de": "Menschen in Europa haben ein Anrecht auf Sozialfürsorge in allen Mitgliedsstaaten. Sie müssen die Hilfe bekommen, die sie benötigen, um Krankheit, Arbeitslosigkeit und im hohen Alter gut leben zu können. Die Sozialführsorge muss alle Bedürftnisse am Wohnort erfüllen.", + "en": "People in the EU must enjoy equal social welfare in all Member States. They must receive the help they need in case of sickness, unemployment or old age in the country where they life in. Social wellfare must cover all needs at the place of residence." + } + }, + { + "thesis": "29", + "position": "positive", + "statement": { + "de": "Wir brauchen flexiblere und schnellere Entscheidungen in der EU und fordern das Prinzip der qualifizierten Mehrheit in den Entscheidungsfindungen der EU, auch in der Außenpolitik. Außerdem vordern wir einen Außenminister auf EU Ebene.", + "en": "We need more flexible and faster decisions in the EU and call for the majority decision-making procedure including foreign policy decisions. In addition, we call for a forign minister of the EU." + } + }, + { + "thesis": 30, + "position": "positive", + "statement": { + "de": "Wir fordern eine bessere Beschriftung von Lebensmitteln. Transparenz fördert Demokratie und Selbstbestimmung. Eine Ernährungsampel schafft einen Verbraucherschutz für Menschen, die nicht Lesen können oder Kleingedrucktes auf Verpackungen nicht entziffern können.", + "en": "We call for better labelling of food health values. Transparency enables democracy and self-determination. A food traffic light creates consumer protection for people who cannot read or decipher small printed details." + } + }, + { + "thesis": 31, + "position": "positive", + "statement": { + "de": "Eine demokratische EU braucht ihre eigenen Steuereinnahmen. European Spring setzt sich dafür ein, ein gemeinsames Finanzministerium auf EU Ebene einzurichten. Einnahmen einer Finanztransaktionssteuer könnten in pan-Europäische Arbeits- und Sozialprojekte fließen und gemeinschaftlich verwaltet werden.", + "en": "A democratic EU needs its own tax resources. European Spring calls therefore for a common European Ministry of Finance.Revenues from the financial transaction tax can be channelled into pan-European labour and social projects and coordinated jointly." + } + }, + { + "thesis": 32, + "position": "negative", + "statement": { + "de": "European Spring kämpft für eine gemeinsame Europäische Verfassung, die von den Bürgern der EU verfasst und verabschiedet wird. Zweck dieser Verfassung ist es, dass die Bürger gemeinsam darüber beraten, zu welchen Teilen ihre Ländern in der EU integriert sind. Eine simple Ja-Nein Frage (die Frage, die in einem Referndum gestellt werden würde) kann diese Komplexität nicht auflösen. Der Brexit zeigt dies sehr deutlich.", + "en": "The European Spring fights for a European Constitution which is written and adopted by the European citizens. It is in this constitution that European citizens should deliberate together to which extent their countries should be integrated into the EU. A simplistic yes-no question (which is the only feasible kind of referendum) is incapable to resolve a matter as complex as how closely a country should be attached to the EU. Brexit demonstrates this in a quite striking manner." + } + } + ] + }, + { + "id": 2, + "token": "ECPM", + "european_profile": { + "party": { + "de": "Europäische Christliche Politische Bewegung", + "en": "European Christian Political Movement" + } + }, + "program": { + "en": "https://ecpm.info/ECPM%20Summary%20Election%20Manifesto%202019.pdf" + }, + "positions": [ + { + "thesis": 0, + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "1", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "2", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "3", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "4", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "5", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "6", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "7", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "8", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "9", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "10", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "11", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "12", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "13", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "14", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "15", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "16", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "17", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "18", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "19", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "20", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "21", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "22", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "23", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": "24", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "25", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "26", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "27", + "position": "neutral", + "statement": { + "de": "-" + } + }, + { + "thesis": "28", + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": "29", + "position": "negative", + "statement": { + "de": "-" + } + }, + { + "thesis": 30, + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": 31, + "position": "positive", + "statement": { + "de": "-" + } + }, + { + "thesis": 32, + "position": "negative", + "statement": { + "de": "-" + } + } + ] + }, + { + "id": 3, + "token": "EDE", + "european_profile": { + "party": { + "de": "Europa Demokratie Esperanto", + "en": "Europe Democracy Esperanto" + } + }, + "program": {}, + "positions": [ + { + "thesis": 0, + "statement": {} + }, + { + "thesis": "1", + "statement": {} + }, + { + "thesis": "2", + "statement": {} + }, + { + "thesis": "3", + "statement": {} + }, + { + "thesis": "4", + "statement": {} + }, + { + "thesis": "5", + "statement": {} + }, + { + "thesis": "6", + "statement": {} + }, + { + "thesis": "7", + "statement": {} + }, + { + "thesis": "8", + "statement": {} + }, + { + "thesis": "9", + "statement": {} + }, + { + "thesis": "10", + "statement": {} + }, + { + "thesis": "11", + "statement": {} + }, + { + "thesis": "12", + "statement": {} + }, + { + "thesis": "13", + "statement": {} + }, + { + "thesis": "14", + "statement": {} + }, + { + "thesis": "15", + "statement": {} + }, + { + "thesis": "16", + "statement": {} + }, + { + "thesis": "17", + "statement": {} + }, + { + "thesis": "18", + "statement": {} + }, + { + "thesis": "19", + "statement": {} + }, + { + "thesis": "20", + "statement": {} + }, + { + "thesis": "21", + "statement": {} + }, + { + "thesis": "22", + "statement": {} + }, + { + "thesis": "23", + "statement": {} + }, + { + "thesis": "24", + "statement": {} + }, + { + "thesis": "25", + "statement": {} + }, + { + "thesis": "26", + "statement": {} + }, + { + "thesis": "27", + "statement": {} + }, + { + "thesis": "28", + "statement": {} + }, + { + "thesis": "29", + "statement": {} + }, + { + "thesis": 30, + "statement": {} + }, + { + "thesis": 31, + "statement": {} + }, + { + "thesis": 32, + "statement": {} + } + ] + }, + { + "id": 4, + "token": "EDP", + "european_profile": { + "party": { + "de": "Europäische Demokratische Partei", + "en": "European Democratic Party" + } + }, + "program": { + "en": "http://www.democrats.eu/en/theme/a-democratic-europe" + }, + "positions": [] + }, + { + "id": 5, + "token": "EFA", + "european_profile": { + "party": { + "de": "Europäische Freie Allianz", + "en": "European Free Alliance" + } + }, + "program": { + "en": "https://www.youdecidenow.eu/2019-manifesto-european-elections/" + }, + "positions": [] + }, + { + "id": 6, + "token": "EGP", + "european_profile": { + "party": { + "de": "Europäische Grüne Partei", + "en": "European Greens" + } + }, + "program": { + "en": "https://vote.europeangreens.eu/manifesto" + }, + "positions": [] + }, + { + "id": 7, + "token": "European LEFT", + "european_profile": { + "party": { + "de": "Partei der Europäischen Linken", + "en": "Party of the European Left" + } + }, + "program": { + "en": "https://www.european-left.org/wp-content/uploads/2018/11/Manifesto-European-Left_ENG.pdf" + }, + "positions": [] + }, + { + "id": 8, + "token": "EPP", + "european_profile": { + "party": { + "de": "Europäische Volkspartei", + "en": "European People's Party" + } + }, + "program": { + "en": "https://www.eppgroup.eu/what-we-stand-for/campaigns/eu-elections-2019/commitments" + }, + "positions": [] + }, + { + "id": 9, + "token": "Pirates ", + "european_profile": { + "party": { + "de": "Europäische Piratenpartei", + "en": "European Pirate Party" + } + }, + "program": { + "en": "https://wiki.ppeu.net/doku.php?id=programme:ceep2019" + }, + "positions": [] + }, + { + "id": 10, + "token": "PES", + "european_profile": { + "party": { + "de": "Sozialdemokratische Partei Europas", + "en": "Party of European Socialists" + } + }, + "program": { + "en": "https://www.pes.eu/export/sites/default/.galleries/Documents-gallery/PES-Manifesto-2019_EN.pdf_2063069299.pdf" + }, + "positions": [] + }, + { + "id": 11, + "token": "VOLT", + "european_profile": { + "party": { + "de": "Volt Europa", + "en": "Volt Europa" + } + }, + "program": { + "en": "https://assets.nationbuilder.com/volt/pages/6564/attachments/original/1540629281/Amsterdam_Declaration.pdf?1540629281" + }, + "positions": [] + } +] \ No newline at end of file diff --git a/bin/xlsx-data/test/terminology.json b/bin/xlsx-data/test/terminology.json new file mode 100644 index 0000000..ac7d371 --- /dev/null +++ b/bin/xlsx-data/test/terminology.json @@ -0,0 +1,112 @@ +[ + { + "id": 0, + "explanation": { + "de": "Gebiet, das die EU-Mitgliedstaaten umfasst, die den Euro als Währung eingeführt haben, und in dem eine einheitliche Geldpolitik unter Aufsicht des EZB-Rats durchgeführt wird.", + "en": "The group of EU Member States that have adopted the euro as their currenc" + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=894832&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=894832&langId=en" + } + }, + { + "id": 1, + "explanation": { + "de": "Das Europäische Parlament ist die auf der Grundlage der Verträge, des Akts vom 20. September 1976 zur Einführung allgemeiner unmittelbarer Wahlen der Mitglieder des Europäischen Parlaments und der in Anwendung der Verträge erlassenen nationalen Rechtsvorsc", + "en": "The European Parliament is the assembly elected pursuant to the Treaties, the Act of 20 September 1976 concerning the election of the members of the European Parliament by direct universal suffrage and national legislation deriving from the Treaties." + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=126540&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=126540&langId=en" + } + }, + { + "id": 2, + "explanation": { + "de": "Die Europäische Union beruht auf rechtstaatlichen Grundsätzen. Das bedeutet, dass jede Tätigkeit der EU auf Verträgen beruht, die von allen EU-Mitgliedstaaten auf freiwilliger und demokratischer Basis angenommen wurden. Wenn ein Politikbereich beispielswei", + "en": "The European Union is based on the rule of law. This means that every action taken by the EU is founded on treaties that have been approved voluntarily and democratically by all EU member countries. For example, if a policy area is not cited in a treaty, t" + }, + "reference": { + "de": "https://europa.eu/european-union/law/treaties_de", + "en": "https://europa.eu/european-union/law/treaties_en" + } + }, + { + "id": 3, + "explanation": { + "de": "Anschlag auf Informationssysteme bzw. Steuersysteme kritischer Infrastrukturen mit Hilfe bösartiger Software, der zum Verlust lebenswichtiger Infrastrukturdienste führt.", + "en": "Deliberate act, generally using malicious computer code, designed to alter, disrupt, deny, degrade, or destroy information resident in computers and computer networks, or the computers and networks themselves." + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=919510&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=919510&langId=en" + } + }, + { + "id": 4, + "explanation": { + "de": "Unzutreffende Nachrichtenmeldung. Sie entsteht durch die fehlerhafte oder nachlässige Recherche eines Journalisten oder wird von Journalisten, amtlichen Stellen, Politikern, Unternehmen, Privatpersonen und anderen Informanten absichtlich lanciert. Abzugren", + "en": "Fabricated news stories with the deliberate aim of fooling readers" + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=3572432&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=3572432&langId=en" + } + }, + { + "id": 5, + "explanation": { + "de": "Land, das nicht Mitglied der Europäischen Union ist; \"Drittland\" bezeichnet im weiteren Sinne auch ein Land, das bei internationalen Verträgen nicht Vertragspartner ist bzw. einer internationalen Organisation nicht angehört.", + "en": "Country that is not a member of the European Union." + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=768108&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=768108&langId=en" + } + }, + { + "id": 6, + "explanation": { + "de": "Zentrales Organ der Internationalen Staatengemeinschaft für Friedenssicherung und Konfliktmanagement; fasst Beschlüsse (Resolutionen), die – anders als die der Generalversammlung – für alle Mitgliedstaaten bindend sind; damit verfügt er über weit gehende B", + "en": "UN body that has the primary responsibility for the maintenance of international peace and security; Composed of five permanent members — China, France, Russian Federation, the United Kingdom and the United States — and ten non-permanent members." + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=877820&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=877820&langId=en" + } + }, + { + "id": 7, + "explanation": { + "de": "Die Europäische Union (EU) besteht seit dem 1. Juli 2013 aus 28 Mitgliedstaaten (Unionsmitgliedstaaten). Belgien, Bulgarien, Dänemark, Deutschland, Estland, Finnland, Frankreich, Griechenland, Irland, Italien, Kroatien, Lettland, Litauen, Luxemburg, Malta,", + "en": "One of the sovereign nation states that have acceded to the European Union (EU). As from 1 July 2013 the 28 Member States of the EU are Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary" + }, + "reference": { + "de": "https://de.wikipedia.org/wiki/Mitgliedstaaten_der_Europ%C3%A4ischen_Union", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=1568826&langId=en" + } + }, + { + "id": 8, + "explanation": { + "de": "(I) Der Haushaltsplan ist der Rechtsakt, durch den für jedes Haushaltsjahr sämtliche als erforderlich erachteten Einnahmen und Ausgaben der Europäischen Gemeinschaft und der Europäischen Atomgemeinschaft veranschlagt und bewilligt werden. ; (II) Der Haush", + "en": "(I) The budget is the instrument which, for each financial year, forecasts and authorises all revenue and expenditure considered necessary for the European Community and the European Atomic Energy Community. ; (II) The budget shall consist of: Quelle (I) C" + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=749055&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=749055&langId=en" + } + }, + { + "id": 9, + "explanation": { + "de": "Der Haushaltsplan umfasst a) den allgemeinen Einnahmen- und Ausgabenplan, b) Einzelpläne mit den Einnahmen- und Ausgabenplänen für jedes der Organe einzeln mit Ausnahme des Europäischen Rates und des Rates, die in demselben Einzelplan zusammengefasst werde", + "en": "TBD" + }, + "reference": { + "de": "http://iate.europa.eu/FindTermsByLilId.do?lilId=1077513&langId=de", + "en": "http://iate.europa.eu/FindTermsByLilId.do?lilId=1077513&langId=en" + } + } +] \ No newline at end of file diff --git a/bin/xlsx-data/test/theses.json b/bin/xlsx-data/test/theses.json new file mode 100644 index 0000000..0fb12ee --- /dev/null +++ b/bin/xlsx-data/test/theses.json @@ -0,0 +1,398 @@ +[ + { + "id": 0, + "category": { + "de": "Politische Bildung", + "en": "Civic Education" + }, + "thesis": { + "de": "Europapolitische Bildung sollte Teil der Lehrpläne aller Mitgliedsländer sein.", + "en": "European civic education should be part of the school curricula of all member countries." + }, + "terminology": [] + }, + { + "id": 1, + "category": { + "de": "Europäische Armee", + "en": "European Army" + }, + "thesis": { + "de": "Langfristig sollten die EU-Mitgliedstaaten ihre Streitkräfte zu einer europäischen Armee zusammenschließen.", + "en": "In the long-term EU member states should merge their armed forces to a European army." + }, + "terminology": [] + }, + { + "id": 2, + "category": { + "de": "Zuständigkeiten der EU", + "en": "Competencies of the EU" + }, + "thesis": { + "de": "Die EU hat zu viele Aufgaben übernommen, die an die Mitgiedsstaaten zurück gegeben werden sollten.", + "en": "The EU has taken on too many tasks that should be transferred back to the member states." + }, + "terminology": [] + }, + { + "id": 3, + "category": { + "de": "Atomenergie", + "en": "Nuclear Energy" + }, + "thesis": { + "de": "Alle Mitgliedsstaaten sollen bis spätestens 2040 aus der Atomkraft aussteigen.", + "en": "Every member state should eliminate atomic energy by 2040." + }, + "terminology": [] + }, + { + "id": 4, + "category": { + "de": "Handelspolitik", + "en": "Trade Policy" + }, + "thesis": { + "de": "Die Europäische Union soll zum Schutz europäischer Produkte verstärkt Zölle erheben.", + "en": "The EU should raise tarifs to secure European products from foreign competition." + }, + "terminology": [] + }, + { + "id": 5, + "category": { + "de": "Grenzschutz", + "en": "Border Protection" + }, + "thesis": { + "de": "Alle Mitgliedsstaaten sollten Geld und Personal für den Schutz der europäischen Außengrenzen zur Verfügung stellen.", + "en": "Each member state should provide funds and human resources to secure the European border." + }, + "terminology": [] + }, + { + "id": 6, + "category": { + "de": "Gleichberechtigung", + "en": "Equality" + }, + "thesis": { + "de": "Die EU sollte sich für eine verpflichtende Frauenquote auf Führungsebene von Unternehmen einsetzen.", + "en": "The EU should be committed to introducing a quota for women in leading managerial positions." + }, + "terminology": [] + }, + { + "id": 7, + "category": { + "de": "Datenschutz", + "en": "Data Protection" + }, + "thesis": { + "de": "Unternehmen soll die Nutzung personalisierter Daten erleichtert werden.", + "en": "Personalized data should be made easier for companies to use." + }, + "terminology": [] + }, + { + "id": 8, + "category": { + "de": "Verteilung Flüchtlinge:", + "en": "Distribution Refugees" + }, + "thesis": { + "de": "Innerhalb der EU sollten Flüchtlinge nach einem Verteilungsschlüssel auf alle Mitgliedsstaaten verteilt werden.", + "en": "The refugees should be distributed between every member state based on a quota within the EU." + }, + "terminology": [] + }, + { + "id": 9, + "category": { + "de": "Erweiterung", + "en": "EU Enlargement" + }, + "thesis": { + "de": "Die EU sollte keine neuen Mitgliedsländer aufnehmen.", + "en": "The EU should not accept any new member states." + }, + "terminology": [] + }, + { + "id": 10, + "category": { + "de": "CO2 Steuer", + "en": "CO2 Tax" + }, + "thesis": { + "de": "Es soll eine EU-weite CO2-Steuer geben.", + "en": "A European carbon tax should be introduced." + }, + "terminology": [] + }, + { + "id": 11, + "category": { + "de": "Agrarsubventionen", + "en": "Agricultural Subsidies" + }, + "thesis": { + "de": "Die EU sollte die finanzielle Unterstützung der Landwirtschaft verringern.", + "en": "The EU should reduce financial subsidies given to the agriculture sector." + }, + "terminology": [] + }, + { + "id": 12, + "category": { + "de": "Europäischer Geheimdienst", + "en": "Intelligence Service" + }, + "thesis": { + "de": "Die EU sollte einen gemeinsamen europäischen Geheimdienst zur effektiveren Terrorismusbekämpfung aufbauen.", + "en": "The EU should install a common European intelligent service in order to effectivly counter terrorism." + }, + "terminology": [] + }, + { + "id": 13, + "category": { + "de": "Europäischer Mindestlohn:", + "en": "Minimum Wage" + }, + "thesis": { + "de": "Es sollten europaweit Mindestlöhne abhängig vom Durchschnittseinkommen des jeweiligen Mitgliedsstaates eingeführt werden.", + "en": "A European minimum wage should be introduced, dependent on the average income of the member state." + }, + "terminology": [] + }, + { + "id": 14, + "category": { + "de": "Russland", + "en": "Russia" + }, + "thesis": { + "de": "Alle EU-Sanktionen gegen Russland sollten aufgehoben werden.", + "en": "All EU sanctions against Russia should be lifted." + }, + "terminology": [] + }, + { + "id": 15, + "category": { + "de": "Netzpolitik", + "en": "Net Policy" + }, + "thesis": { + "de": "Straftaten wie Mobbing, Falschinformation oder Verleumdung im Internet sollen EU-weit konsequent verfolgt werden.", + "en": "Criminal offences such as bullying, misinformation or defamation on the Internet should be consistently prosecuted throughout the EU." + }, + "terminology": [] + }, + { + "id": 16, + "category": { + "de": "Jugendarbeitslosigkeit", + "en": "Youth Unemployment" + }, + "thesis": { + "de": "Jugendarbeitslosigkeit sollte national bekämpft werden.", + "en": "Youth unemployment should be combated at national level." + }, + "terminology": [] + }, + { + "id": 17, + "category": { + "de": "Mobilität", + "en": "Mobility" + }, + "thesis": { + "de": "Durch Ausbau des öffentlichen Nah- und Fernverkehrs soll es jedem EU-Bürger möglich sein, auf ein eigenes Auto zu verzichten.", + "en": "By expanding public local and long-distance transport, every EU citizen should be able to renounce their own car." + }, + "terminology": [] + }, + { + "id": 18, + "category": { + "de": "Unternehmensbesteuerung", + "en": "Taxation of Companies" + }, + "thesis": { + "de": "Um Steuervermeidung zu bekämpfen, sollen EU-Mindeststeuersätze für Unternehmen eingeführt werden.", + "en": "To prevent tax avoidance, an EU minimum taxation for companies should be introduced." + }, + "terminology": [] + }, + { + "id": 19, + "category": { + "de": "Abschiebung", + "en": "Deportation" + }, + "thesis": { + "de": "Straffällig gewordene Asylbewerber und Menschen ohne anerkanntem Aufenthaltsstatus sollen aus der EU ausgewiesen werden.", + "en": "Previously convicted asylum seekers and persons without a residence permit should be expelled from the EU." + }, + "terminology": [] + }, + { + "id": 20, + "category": { + "de": "Bargeld", + "en": "Cash" + }, + "thesis": { + "de": "Die EU sollte langfristig Bargeld abschaffen.", + "en": "The EU should abolish cash in the long-term." + }, + "terminology": [] + }, + { + "id": 21, + "category": { + "de": "Direktwahl", + "en": "Direct Election" + }, + "thesis": { + "de": "Der/die PräsidentIn der Europäischen Kommission soll von den Bürgerinnen und Bürgern der Europäischen Union direkt gewählt werden.", + "en": "The President of the European Commission should be directly elected by the citizens of the European Union." + }, + "terminology": [] + }, + { + "id": 22, + "category": { + "de": "Militärausgaben", + "en": "Military Spending" + }, + "thesis": { + "de": "Die EU-Mitgliedsstaaten sollten ihre Militärausgaben stark erhöhen.", + "en": "EU member states should substantially increase their military spending." + }, + "terminology": [] + }, + { + "id": 23, + "category": { + "de": "Arbeitslosenversicherung:", + "en": "Unemployment Insurance" + }, + "thesis": { + "de": "Es sollte eine gemeinsame Arbeitslosenversicherung auf europäischer Ebene geben.", + "en": "There should be a common unemployment insurance for all member states within Europe." + }, + "terminology": [] + }, + { + "id": 24, + "category": { + "de": "Freihandel", + "en": "Free Trade Agreements" + }, + "thesis": { + "de": "Die EU sollte keine weitere Freihandelsabkommen abschließen.", + "en": "The EU should not conclude further free trade agreements." + }, + "terminology": [] + }, + { + "id": 25, + "category": { + "de": "Bürokratieabbau", + "en": "Reduction of Bureaucracy" + }, + "thesis": { + "de": "Der Standort des Europäischen Parlaments in Strasbourg sollte abgeschafft werden (Brüssel bleibt als einziger Standort erhalten).", + "en": "The site of the European Parliament in Strasbourg should be abolished (Brussels remains as the only site)." + }, + "terminology": [] + }, + { + "id": 26, + "category": { + "de": "Ländliche Regionen", + "en": "Rural Regions" + }, + "thesis": { + "de": "Verkehr und öffentliche Versorgung sollen schwerpunktmäßig in ländlichen Regionen gefördert werden.", + "en": "Transport and public services are to be promoted primarily in rural regions." + }, + "terminology": [] + }, + { + "id": 27, + "category": { + "de": "Grenzkontrollen", + "en": "Border Control" + }, + "thesis": { + "de": "Grenzkontrollen im Schengen-Raum sollten immer möglich sein.", + "en": "Border controls should always be possible in the Schengen area." + }, + "terminology": [] + }, + { + "id": 28, + "category": { + "de": "Sozialleistungen", + "en": "Social Welfare Benefits" + }, + "thesis": { + "de": "EU-Bürger sollen Sozialleistungen hauptsächlich von ihrem Heimatland empfangen können.", + "en": "EU-citizens should receive social welfare benefits primarily from their home countries." + }, + "terminology": [] + }, + { + "id": 29, + "category": { + "de": "Vetorecht in der Außenpolitik", + "en": "Veto Right in Foreign Policy" + }, + "thesis": { + "de": "Ein einzelner Mitgliedsstaat sollte in Zukunft keine Mehrheitsentscheidung in der europäischen Außenpolitik blockieren können.", + "en": "In future, a single member state should not be able to block majority decisions in European foreign policy." + }, + "terminology": [] + }, + { + "id": 30, + "category": { + "de": "Lebensmittel/Verbraucherschutz", + "en": "Food/Consumer Protection" + }, + "thesis": { + "de": "Es sollte eine EU-weite Ampelkennzeichnung von Zucker-, Fett- und Kaloriengehalt für Lebensmittel eingeführt werden.", + "en": "EU-wide colour-coded labelling of sugar, fat and calorie content for food should be introduced." + }, + "terminology": [] + }, + { + "id": 31, + "category": { + "de": "Finanzmärkte (Finanztransaktionssteuer)", + "en": "Financial Markets (Financial Transaction Tax)" + }, + "thesis": { + "de": "Die EU sollte Finanzmärkte besteuern.", + "en": "The EU should tax financial markets." + }, + "terminology": [] + }, + { + "id": 32, + "category": { + "de": "EU Mitgliedschaft", + "en": "EU Membership" + }, + "thesis": { + "de": "Es sollte in meinem Land ein Referendum über die EU-Mitgliedschaft meines Landes geben.", + "en": "My country should have a referendum on its EU membership." + }, + "terminology": [] + } +] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1dfb256..d596137 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2204,6 +2204,16 @@ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", "dev": true }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "dev": true, + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -3677,6 +3687,18 @@ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==" }, + "cfb": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.0.tgz", + "integrity": "sha512-ZqfxNGWTMKhd0a/n6YKJLq8hWbd5kR3cA4kXwUj9vVEdHlwJ09werR8gN15Z7Y1FTXqdD6dE3GGCxv4uc28raA==", + "dev": true, + "requires": { + "adler-32": "~1.2.0", + "commander": "^2.16.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4027,6 +4049,24 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", + "dev": true, + "requires": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", + "dev": true + } + } + }, "collapse-white-space": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", @@ -4527,6 +4567,16 @@ } } }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dev": true, + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -6298,6 +6348,12 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -6881,6 +6937,12 @@ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -13341,6 +13403,12 @@ } } }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -14914,6 +14982,15 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "ssf": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz", + "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==", + "dev": true, + "requires": { + "frac": "~1.1.2" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -17425,6 +17502,29 @@ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" }, + "xlsx": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.2.tgz", + "integrity": "sha512-6+4TkmU34s1p/qsl8omWSEOa7pOtWlw4SuRJH/FGRk3iF/gcvSWGgCI1L28NaSDx2tI82aeq2SPY+xeFQJD27A==", + "dev": true, + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.0", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "ssf": "~0.10.2" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index 2efd8a9..1d671dd 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "lint": "vue-cli-service lint", "test:unit": "vue-cli-service test:unit", "svg": "vsvg -s ./src/assets/svg -t ./src/assets/icons", - "admin": "node bin/admin" + "admin": "node bin/admin-yml", + "data": "node bin/xlsx-data" }, "dependencies": { "lint-staged": "^8.1.5", @@ -45,7 +46,8 @@ "normalize.css": "^8.0.1", "ora": "^3.4.0", "sass-loader": "^7.1.0", - "vue-template-compiler": "^2.5.21" + "vue-template-compiler": "^2.5.21", + "xlsx": "^0.14.2" }, "husky": { "hooks": { diff --git a/resources/euromat-dataset.xlsx b/resources/euromat-dataset.xlsx new file mode 100644 index 0000000..bd382a7 Binary files /dev/null and b/resources/euromat-dataset.xlsx differ diff --git a/resources/~$euromat-dataset.xlsx b/resources/~$euromat-dataset.xlsx new file mode 100644 index 0000000..fe4a9dc Binary files /dev/null and b/resources/~$euromat-dataset.xlsx differ diff --git a/src/components/app-menu.vue b/src/components/app-menu.vue index 0f9227a..914d451 100644 --- a/src/components/app-menu.vue +++ b/src/components/app-menu.vue @@ -77,10 +77,7 @@ this.languageMenuSelected = false }, changeLanguage (locale) { - // console.log('this.$router.currentRoute', this.$router.currentRoute) - // const currentRoute = this.$router.currentRoute.name setCurrentLocale(locale) - // this.$router.replace(getTranslatedUrl(currentRoute)) this.hideLanguageSelection() } }