From 4a910664eb3e79d0cf6fb9288dfa71ed6b3dde1c Mon Sep 17 00:00:00 2001 From: roschaefer Date: Sun, 14 Jun 2020 17:51:10 +0200 Subject: [PATCH] Parameterize entire html of terms+conditions --- webapp/constants/manifest.js | 7 +++-- webapp/constants/metadata.js | 10 +++---- webapp/locales/de.json | 12 ++++---- .../locales/html/de/termsAndConditions.html | 1 + .../locales/html/en/termsAndConditions.html | 1 + webapp/nuxt.config.js | 7 +++++ webapp/pages/terms-and-conditions.vue | 29 ++++--------------- webapp/plugins/i18n.js | 18 +++++++++--- 8 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 webapp/locales/html/de/termsAndConditions.html create mode 100644 webapp/locales/html/en/termsAndConditions.html diff --git a/webapp/constants/manifest.js b/webapp/constants/manifest.js index 8ae296f3b..9d05bb700 100644 --- a/webapp/constants/manifest.js +++ b/webapp/constants/manifest.js @@ -1,6 +1,9 @@ import metadata from './metadata.js' -const { name, short_name, description, theme_color } = metadata +const { APPLICATION_NAME, APPLICATION_SHORT_NAME, APPLICATION_DESCRIPTION } = metadata export default { - name, short_name, description, theme_color, + name: APPLICATION_NAME, + short_name: APPLICATION_SHORT_NAME, + description: APPLICATION_DESCRIPTION, + theme_color: '#17b53f', lang: 'en', } diff --git a/webapp/constants/metadata.js b/webapp/constants/metadata.js index 00f7396f0..6017cd1af 100644 --- a/webapp/constants/metadata.js +++ b/webapp/constants/metadata.js @@ -1,7 +1,7 @@ export default { - name: 'fyphe_O', - short_name: 'fyphe', - description: 'The Schools in Motion Network', - organization: 'Ensible e.V.', - theme_color: '#17b53f', + APPLICATION_NAME: 'fyphe_O', + APPLICATION_SHORT_NAME: 'fyphe', + APPLICATION_DESCRIPTION: 'The Schools in Motion Network', + ORGANIZATION_NAME: 'Ensible e.V.', + ORGANIZATION_JURISDICTION: 'Köln', } diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 843b172ae..ad82b6969 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -102,14 +102,14 @@ }, "get-help": "Wenn Du einem inakzeptablen Verhalten ausgesetzt bist, es miterlebst oder andere Bedenken hast, benachrichtige bitte so schnell wie möglich einen Organisator der Gemeinschaft und verlinke oder verweise auf den entsprechenden Inhalt:", "preamble": { - "description": "{name} ist ein gemeinnütziges soziales Wissens- und Aktionsnetzwerk der nächsten Generation. Von Menschen – für Menschen. Open Source, fair und transparent. Für positiven lokalen und globalen Wandel in allen Lebensbereichen. Wir gestalten den öffentlichen Austausch von Wissen, Ideen und Projekten völlig neu. Die Funktionen von {name} bringen die Menschen zusammen – offline und online – so dass wir die Welt zu einem besseren Ort machen können.", + "description": "{APPLICATION_NAME} ist ein gemeinnütziges soziales Wissens- und Aktionsnetzwerk der nächsten Generation. Von Menschen – für Menschen. Open Source, fair und transparent. Für positiven lokalen und globalen Wandel in allen Lebensbereichen. Wir gestalten den öffentlichen Austausch von Wissen, Ideen und Projekten völlig neu. Die Funktionen von {APPLICATION_NAME} bringen die Menschen zusammen – offline und online – so dass wir die Welt zu einem besseren Ort machen können.", "title": "Präambel" }, "purpose": { - "description": "Mit diesen Verhaltensregeln regeln wir die wesentlichen Grundsätze für das Verhalten in unserem Sozialen Netzwerk. Dabei ist die Menschenrechtscharta der Vereinten Nationen unsere Orientierung und bildet das Herz unseres Werteverständnisses. Die Verhaltensregeln dienen als Leitsätze für den persönlichen Auftritt und den Umgang untereinander. Wer als Nutzer im {name} Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an.", + "description": "Mit diesen Verhaltensregeln regeln wir die wesentlichen Grundsätze für das Verhalten in unserem Sozialen Netzwerk. Dabei ist die Menschenrechtscharta der Vereinten Nationen unsere Orientierung und bildet das Herz unseres Werteverständnisses. Die Verhaltensregeln dienen als Leitsätze für den persönlichen Auftritt und den Umgang untereinander. Wer als Nutzer im {APPLICATION_NAME} Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an.", "title": "Zweck" }, - "subheader": "für das Soziale Netzwerk von {organization}", + "subheader": "für das Soziale Netzwerk von {ORGANIZATION_NAME}", "unacceptable-behaviour": { "description": "Die folgenden Verhaltensweisen sind in unserer Community inakzeptabel:", "list": { @@ -785,7 +785,7 @@ }, "agree": "Ich stimme zu!", "code-of-conduct": { - "description": "Unser Verhaltenskodex dient als Leitfaden für das persönliche Auftreten und den Umgang miteinander. Wer als Nutzer im Human Connection-Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an. https://alpha.human-connection.org/code-of-conduct", + "description": "Unser Verhaltenskodex dient als Leitfaden für das persönliche Auftreten und den Umgang miteinander. Wer als Nutzer im {APPLICATION_NAME}-Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an. https://alpha.human-connection.org/code-of-conduct", "title": "Verhaltenscodex" }, "errors-and-feedback": { @@ -802,7 +802,7 @@ }, "newTermsAndConditions": "Neue Nutzungsbedingungen", "no-commercial-use": { - "description": "Die Nutzung des Human Connection Netzwerkes ist nicht gestattet für kommerzielle Nutzung. Darunter fällt unter anderem das Bewerben von Produkten mit kommerzieller Absicht, das Einstellen von Affiliate-Links (Geschäftspartner-Links), direkter Aufruf zu Spenden oder finanzieller Unterstützung für Zwecke, die steuerlich nicht als gemeinnützig anerkannt sind.", + "description": "Die Nutzung des {APPLICATION_NAME} Netzwerkes ist nicht gestattet für kommerzielle Nutzung. Darunter fällt unter anderem das Bewerben von Produkten mit kommerzieller Absicht, das Einstellen von Affiliate-Links (Geschäftspartner-Links), direkter Aufruf zu Spenden oder finanzieller Unterstützung für Zwecke, die steuerlich nicht als gemeinnützig anerkannt sind.", "title": "Keine kommerzielle Nutzung" }, "no-parties": { @@ -814,7 +814,7 @@ "title": "Datenschutz" }, "terms-of-service": { - "description": "Die folgenden Nutzungsbedingungen sind Basis für die Nutzung unseres Netzwerkes. Beim Registrieren musst Du sie anerkennen und wir werden Dich auch später über ggf. stattfindende Änderungen informieren. Das Human Connection Netzwerk wird in Deutschland betrieben und unterliegt daher deutschem Recht. Gerichtsstand ist Kirchheim / Teck. Zu Details schau in unser Impressum: https://human-connection.org/impressum/", + "description": "Die folgenden Nutzungsbedingungen sind Basis für die Nutzung unseres Netzwerkes. Beim Registrieren musst Du sie anerkennen und wir werden Dich auch später über ggf. stattfindende Änderungen informieren. Das {APPLICATION_NAME} Netzwerk wird in Deutschland betrieben und unterliegt daher deutschem Recht. Gerichtsstand ist {ORGANIZATION_JURISDICTION}. Zu Details schau in unser Impressum.", "title": "Nutzungsbedingungen" }, "termsAndConditionsConfirmed": "Ich habe die Nutzungsbedingungen durchgelesen und stimme ihnen zu.", diff --git a/webapp/locales/html/de/termsAndConditions.html b/webapp/locales/html/de/termsAndConditions.html new file mode 100644 index 000000000..a4414ed4b --- /dev/null +++ b/webapp/locales/html/de/termsAndConditions.html @@ -0,0 +1 @@ +

Ich bin der Inhalt der Seite "Nutzungsbedingungen"

diff --git a/webapp/locales/html/en/termsAndConditions.html b/webapp/locales/html/en/termsAndConditions.html new file mode 100644 index 000000000..62e416b6a --- /dev/null +++ b/webapp/locales/html/en/termsAndConditions.html @@ -0,0 +1 @@ +

I am the content of the page "terms and conditions"

diff --git a/webapp/nuxt.config.js b/webapp/nuxt.config.js index ca31f25a9..c5639e202 100644 --- a/webapp/nuxt.config.js +++ b/webapp/nuxt.config.js @@ -279,6 +279,13 @@ export default { }, ], }) + config.module.rules.push({ + enforce: 'pre', + test: /\.html$/, + loader: 'raw-loader', + exclude: /(node_modules)/, + }) + const tagAttributesForTesting = ['data-test', ':data-test', 'v-bind:data-test'] ctx.loaders.vue.compilerOptions = { modules: [ diff --git a/webapp/pages/terms-and-conditions.vue b/webapp/pages/terms-and-conditions.vue index 42c13c938..94c0800d6 100644 --- a/webapp/pages/terms-and-conditions.vue +++ b/webapp/pages/terms-and-conditions.vue @@ -4,14 +4,7 @@ {{ $t('site.termsAndConditions') }} -

-
    -
  1. - {{ $t(`termsAndConditions.${section}.title`) }}: -

    -

  2. -
-
+
@@ -24,22 +17,10 @@ export default { title: this.$t('site.termsAndConditions'), } }, - data() { - return { - // if you change terms and conditions please change also version in file "webapp/constants/terms-and-conditions-version.js" - sections: [ - 'terms-of-service', - 'use-and-license', - 'privacy-statement', - 'code-of-conduct', - 'moderation', - 'errors-and-feedback', - 'no-commercial-use', - 'no-parties', - 'help-and-questions', - 'addition', - ], - } + computed: { + translatedTermsAndConditions() { + return this.$t('html.termsAndConditions') + }, }, } diff --git a/webapp/plugins/i18n.js b/webapp/plugins/i18n.js index c355472eb..bc33ec9ad 100644 --- a/webapp/plugins/i18n.js +++ b/webapp/plugins/i18n.js @@ -3,6 +3,17 @@ import vuexI18n from 'vuex-i18n/dist/vuex-i18n.umd.js' import { isEmpty, find } from 'lodash' import locales from '~/locales' +const registerTranslation = ({ Vue, locale }) => { + const translation = require(`~/locales/${locale}.json`) + try { + const { + default: termsAndConditions, + } = require(`~/locales/html/${locale}/termsAndConditions.html`) + translation.html = { termsAndConditions } + } catch (ex) {} + Vue.i18n.add(locale, translation) +} + /** * TODO: Refactor and simplify browser detection * and implement the user preference logic @@ -53,9 +64,6 @@ export default ({ app, req, cookie, store }) => { }, }) - // register the fallback locales - Vue.i18n.add('en', require('~/locales/en.json')) - let userLocale = 'en' const localeCookie = app.$cookies.get(key) /* const userSettings = store.getters['auth/userSettings'] @@ -80,8 +88,10 @@ export default ({ app, req, cookie, store }) => { const availableLocales = locales.filter((lang) => !!lang.enabled) const locale = find(availableLocales, ['code', userLocale]) ? userLocale : 'en' + // register the fallback locales + registerTranslation({ Vue, locale: 'en' }) if (locale !== 'en') { - Vue.i18n.add(locale, require(`~/locales/${locale}.json`)) + registerTranslation({ Vue, locale }) } // Set the start locale to use