diff --git a/admin/.dockerignore b/admin/.dockerignore
index 88249539f..1ddda051a 100644
--- a/admin/.dockerignore
+++ b/admin/.dockerignore
@@ -1,3 +1,4 @@
node_modules
.git
-.gitignore
\ No newline at end of file
+.gitignore
+!.eslintignore
\ No newline at end of file
diff --git a/admin/.eslintignore b/admin/.eslintignore
index 433390392..94934f9e7 100644
--- a/admin/.eslintignore
+++ b/admin/.eslintignore
@@ -1,4 +1,3 @@
-node_modules
-coverage
-**/*.min.js
-dist
\ No newline at end of file
+node_modules/
+dist/
+coverage/
\ No newline at end of file
diff --git a/admin/.eslintrc.js b/admin/.eslintrc.js
index 96c602ef3..73dce291f 100644
--- a/admin/.eslintrc.js
+++ b/admin/.eslintrc.js
@@ -8,9 +8,20 @@ module.exports = {
parserOptions: {
parser: 'babel-eslint',
},
- extends: ['standard', 'plugin:vue/essential', 'plugin:prettier/recommended'],
+ extends: [
+ 'standard',
+ 'plugin:vue/essential',
+ 'plugin:prettier/recommended',
+ 'plugin:@intlify/vue-i18n/recommended',
+ ],
// required to lint *.vue files
plugins: ['vue', 'prettier', 'jest'],
+ overrides: [
+ {
+ files: ['*.json'],
+ extends: ['plugin:@intlify/vue-i18n/recommended'],
+ },
+ ],
// add your custom rules here
rules: {
'no-console': ['error'],
@@ -22,6 +33,17 @@ module.exports = {
allowBinding: false,
},
],
+ '@intlify/vue-i18n/no-dynamic-keys': 'error',
+ '@intlify/vue-i18n/no-unused-keys': [
+ 'error',
+ {
+ src: './src',
+ extensions: ['.js', '.vue'],
+ ignores: [],
+ enableFix: false,
+ },
+ ],
+ '@intlify/vue-i18n/no-missing-keys-in-other-locales': 'error',
'prettier/prettier': [
'error',
{
@@ -29,4 +51,12 @@ module.exports = {
},
],
},
+ settings: {
+ 'vue-i18n': {
+ localeDir: './src/locales/*.json',
+ // Specify the version of `vue-i18n` you are using.
+ // If not specified, the message will be parsed twice.
+ messageSyntaxVersion: '^8.26.5',
+ },
+ },
}
diff --git a/admin/package.json b/admin/package.json
index a46dc1fd6..2b4be2851 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -12,11 +12,10 @@
"build": "vue-cli-service build",
"dev": "yarn run serve",
"analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json",
- "lint": "eslint --max-warnings=0 --ext .js,.vue .",
+ "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .",
"stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'",
- "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
"test": "TZ=UTC jest --coverage",
- "locales": "scripts/missing-keys.sh && scripts/sort.sh"
+ "locales": "scripts/sort.sh"
},
"dependencies": {
"@babel/core": "^7.15.8",
@@ -52,6 +51,7 @@
},
"devDependencies": {
"@babel/eslint-parser": "^7.15.8",
+ "@intlify/eslint-plugin-vue-i18n": "^1.4.0",
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-service": "~4.5.0",
diff --git a/admin/src/components/ContentFooter.vue b/admin/src/components/ContentFooter.vue
index 510318e61..c10e53596 100644
--- a/admin/src/components/ContentFooter.vue
+++ b/admin/src/components/ContentFooter.vue
@@ -4,24 +4,24 @@
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index bf477c491..2a9bcd1ce 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -7,7 +7,7 @@
{{ $t('transactionlist.amount') }}
- {{ item.amount }} GDD
+ {{ item.amount }} {{ $t('GDD') }}
diff --git a/admin/src/components/Tables/SelectUsersTable.vue b/admin/src/components/Tables/SelectUsersTable.vue
index 5bc49823a..73be770ed 100644
--- a/admin/src/components/Tables/SelectUsersTable.vue
+++ b/admin/src/components/Tables/SelectUsersTable.vue
@@ -12,7 +12,7 @@
>
- {{ $t('e_mail') }}!
+ {{ $t('e_mail') }}{{ $t('math.exclaim') }}
diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json
index 2a05f6ff0..fd902db97 100644
--- a/admin/src/locales/de.json
+++ b/admin/src/locales/de.json
@@ -1,8 +1,6 @@
{
"all_emails": "Alle Nutzer",
"back": "zurück",
- "bookmark": "bookmark",
- "confirmed": "bestätigt",
"creation": "Schöpfung",
"creation_form": {
"creation_failed": "Ausstehende Schöpfung für {email} konnte nicht erzeugt werden.",
@@ -16,7 +14,6 @@
"submit_creation": "Schöpfung einreichen",
"toasted": "Offene Schöpfung ({value} GDD) für {email} wurde gespeichert und liegt zur Bestätigung bereit",
"toasted_created": "Schöpfung wurde erfolgreich gespeichert",
- "toasted_default": "`Fall {event} wird nicht unterstützt`",
"toasted_delete": "Offene Schöpfung wurde gelöscht",
"toasted_update": "`Offene Schöpfung {value} GDD) für {email} wurde geändert und liegt zur Bestätigung bereit",
"update_creation": "Schöpfung aktualisieren"
@@ -27,14 +24,26 @@
"deleted": "gelöscht",
"deleted_user": "Alle gelöschten Nutzer",
"delete_user": "Nutzer löschen",
- "details": "Details",
"edit": "Bearbeiten",
+ "enabled": "aktiviert",
"error": "Fehler",
"e_mail": "E-Mail",
"firstname": "Vorname",
- "gradido_admin_footer": "Gradido Akademie Adminkonsole",
+ "footer": {
+ "app_version": "App version {version}",
+ "copyright": {
+ "link": "Gradido Akademie Adminkonsole",
+ "year": "© {year}"
+ },
+ "short_hash": "({shortHash})"
+ },
+ "GDD": "GDD",
"hide_details": "Details verbergen",
"lastname": "Nachname",
+ "math": {
+ "exclaim": "!",
+ "pipe": "|"
+ },
"moderator": "Moderator",
"multiple_creation_text": "Bitte wähle ein oder mehrere Mitglieder aus für die du Schöpfen möchtest.",
"name": "Name",
@@ -47,7 +56,6 @@
"user_search": "Nutzersuche"
},
"not_open_creations": "Keine offenen Schöpfungen",
- "open_creation": "Offene Schöpfung",
"open_creations": "Offene Schöpfungen",
"overlay": {
"confirm": {
@@ -56,13 +64,6 @@
"text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar und kann auch nicht mehr gelöscht werden. Bitte überprüfe genau, dass alles stimmt.",
"title": "Schöpfung bestätigen!",
"yes": "Ja, Schöpfung bestätigen und speichern!"
- },
- "remove": {
- "no": "Nein, nicht löschen.",
- "question": "Willst du die vorgespeicherte Schöpfung wirklich löschen?",
- "text": "Nach dem Löschen gibt es keine Möglichkeit mehr diesen Datensatz wiederherzustellen. Es wird aber der gesamte Vorgang in der Logdatei als Übersicht gespeichert.",
- "title": "Achtung! Schöpfung löschen!",
- "yes": "Ja, Schöpfung löschen!"
}
},
"remove": "Entfernen",
@@ -72,13 +73,11 @@
"status": "Status",
"success": "Erfolg",
"text": "Text",
- "transaction": "Transaktion",
"transactionlist": {
"amount": "Betrag",
"balanceDate": "Schöpfungsdatum",
"community": "Gemeinschaft",
"date": "Datum",
- "decay": "Vergänglichkeit",
"memo": "Nachricht",
"title": "Alle geschöpften Transaktionen für den Nutzer"
},
diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json
index 898c49ded..d91922d3b 100644
--- a/admin/src/locales/en.json
+++ b/admin/src/locales/en.json
@@ -1,8 +1,6 @@
{
"all_emails": "All users",
"back": "back",
- "bookmark": "Remember",
- "confirmed": "confirmed",
"creation": "Creation",
"creation_form": {
"creation_failed": "Could not create pending creation for {email}",
@@ -16,7 +14,6 @@
"submit_creation": "Submit creation",
"toasted": "Open creation ({value} GDD) for {email} has been saved and is ready for confirmation.",
"toasted_created": "Creation has been successfully saved",
- "toasted_default": "`Case {event} is not supported`",
"toasted_delete": "Open creation has been deleted",
"toasted_update": "Open creation {value} GDD) for {email} has been changed and is ready for confirmation.",
"update_creation": "Creation update"
@@ -27,14 +24,26 @@
"deleted": "deleted",
"deleted_user": "All deleted user",
"delete_user": "Delete user",
- "details": "Details",
"edit": "Edit",
+ "enabled": "enabled",
"error": "Error",
"e_mail": "E-mail",
"firstname": "Firstname",
- "gradido_admin_footer": "Gradido Academy Admin Console",
+ "footer": {
+ "app_version": "App version {version}",
+ "copyright": {
+ "link": "Gradido Academy Admin Console",
+ "year": "© {year}"
+ },
+ "short_hash": "({shortHash})"
+ },
+ "GDD": "GDD",
"hide_details": "Hide details",
"lastname": "Lastname",
+ "math": {
+ "exclaim": "!",
+ "pipe": "|"
+ },
"moderator": "Moderator",
"multiple_creation_text": "Please select one or more members for which you would like to perform creations.",
"name": "Name",
@@ -47,7 +56,6 @@
"user_search": "User search"
},
"not_open_creations": "No open creations",
- "open_creation": "Open creation",
"open_creations": "Open creations",
"overlay": {
"confirm": {
@@ -56,13 +64,6 @@
"text": "After saving, the record can no longer be changed or deleted. Please check carefully that everything is correct.",
"title": "Confirm creation!",
"yes": "Yes, confirm and save creation!"
- },
- "remove": {
- "no": "No, do not delete.",
- "question": "Do you really want to delete the pre-stored creation?",
- "text": "After deletion, there is no possibility to restore this data record. However, the entire process is saved in the log file as an overview.",
- "title": "Attention! Delete creation!",
- "yes": "Yes, delete creation!"
}
},
"remove": "Remove",
@@ -72,13 +73,11 @@
"status": "Status",
"success": "Success",
"text": "Text",
- "transaction": "Transaction",
"transactionlist": {
"amount": "Amount",
"balanceDate": "Creation date",
"community": "Community",
"date": "Date",
- "decay": "Decay",
"memo": "Message",
"title": "All creation-transactions for the user"
},
diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue
index a5966ee68..8a229d7be 100644
--- a/admin/src/pages/Creation.vue
+++ b/admin/src/pages/Creation.vue
@@ -2,7 +2,7 @@
-
+
{
})
return forward(operation).map((response) => {
if (response.errors && response.errors[0].message === '403.13 - Client certificate revoked') {
- response.errors[0].message = i18n.t('error.session-expired')
store.dispatch('logout', null)
window.location.assign(CONFIG.WALLET_URL)
return response
diff --git a/admin/vue.config.js b/admin/vue.config.js
index 18929c38c..4492312a0 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -14,6 +14,7 @@ module.exports = {
fallbackLocale: 'de',
localeDir: 'locales',
enableInSFC: false,
+ enableLegacy: false,
},
},
lintOnSave: true,
diff --git a/admin/yarn.lock b/admin/yarn.lock
index 4dd2c8193..d5fae27fe 100644
--- a/admin/yarn.lock
+++ b/admin/yarn.lock
@@ -932,6 +932,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.14.0":
+ version "7.17.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825"
+ integrity sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@7", "@babel/template@^7.0.0", "@babel/template@^7.15.4", "@babel/template@^7.3.3", "@babel/template@^7.4.0":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
@@ -1001,6 +1008,21 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@eslint/eslintrc@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6"
+ integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.3.1"
+ globals "^13.9.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
"@hapi/address@2.x.x":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@@ -1042,6 +1064,83 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
+"@intlify/core-base@^9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.1.9.tgz#e4e8c951010728e4af3a0d13d74cf3f9e7add7f6"
+ integrity sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==
+ dependencies:
+ "@intlify/devtools-if" "9.1.9"
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ "@intlify/vue-devtools" "9.1.9"
+
+"@intlify/devtools-if@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz#a30e1dd1256ff2c5c98d8d75d075384fba898e5d"
+ integrity sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==
+ dependencies:
+ "@intlify/shared" "9.1.9"
+
+"@intlify/eslint-plugin-vue-i18n@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-1.4.0.tgz#f8fe791892c2dce7d189a364b6a908c87e1c3ac9"
+ integrity sha512-anB1eBf6rpxpWyW883gi6O1hozQy4Q02VyzyodOUnohOqT07GATVSxnr2J9/qQSV47xWukV+9LiRErJcU7d/uA==
+ dependencies:
+ "@eslint/eslintrc" "^1.2.0"
+ "@intlify/core-base" "^9.1.9"
+ "@intlify/message-compiler" "^9.1.9"
+ debug "^4.3.1"
+ glob "^7.1.3"
+ ignore "^5.0.5"
+ is-language-code "^3.1.0"
+ js-yaml "^4.0.0"
+ json5 "^2.1.3"
+ jsonc-eslint-parser "^2.0.0"
+ lodash "^4.17.11"
+ parse5 "^6.0.0"
+ semver "^7.3.4"
+ vue-eslint-parser "^8.0.0"
+ yaml-eslint-parser "^0.5.0"
+
+"@intlify/message-compiler@9.1.9", "@intlify/message-compiler@^9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz#1193cbd224a71c2fb981455b8534a3c766d2948d"
+ integrity sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ source-map "0.6.1"
+
+"@intlify/message-resolver@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz#3155ccd2f5e6d0dc16cad8b7f1d8e97fcda05bfc"
+ integrity sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==
+
+"@intlify/runtime@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.9.tgz#2c12ce29518a075629efed0a8ed293ee740cb285"
+ integrity sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==
+ dependencies:
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
+"@intlify/shared@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a"
+ integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==
+
+"@intlify/vue-devtools@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz#2be8f4dbe7f7ed4115676eb32348141d411e426b"
+ integrity sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -2399,6 +2498,11 @@ acorn@^8.2.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
+acorn@^8.5.0, acorn@^8.7.0:
+ version "8.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
+ integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+
address@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
@@ -2645,6 +2749,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -4892,7 +5001,7 @@ debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.3.0, debug@^4.3.3:
+debug@^4.3.0, debug@^4.3.1, debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@@ -5615,6 +5724,14 @@ eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
+eslint-scope@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
@@ -5644,6 +5761,11 @@ eslint-visitor-keys@^3.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186"
integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==
+eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
eslint@7.25.0:
version "7.25.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67"
@@ -5710,6 +5832,15 @@ espree@^7.3.0, espree@^7.3.1:
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
+espree@^9.0.0, espree@^9.3.1:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd"
+ integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==
+ dependencies:
+ acorn "^8.7.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^3.3.0"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -7003,16 +7134,16 @@ ignore@^4.0.3, ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+ignore@^5.0.5, ignore@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+ integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
ignore@^5.1.1, ignore@^5.1.4:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
-ignore@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
- integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
-
import-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -7386,6 +7517,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-language-code@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-3.1.0.tgz#b2386b49227e7010636f16d0c2c681ca40136ab5"
+ integrity sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==
+ dependencies:
+ "@babel/runtime" "^7.14.0"
+
is-negative-zero@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
@@ -8571,6 +8709,13 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.0.0, js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -8723,7 +8868,7 @@ json3@^3.3.3:
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
-json5@2.x, json5@^2.1.2:
+json5@2.x, json5@^2.1.2, json5@^2.1.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
@@ -8742,6 +8887,16 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonc-eslint-parser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
+ integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
+ dependencies:
+ acorn "^8.5.0"
+ eslint-visitor-keys "^3.0.0"
+ espree "^9.0.0"
+ semver "^7.3.5"
+
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -10014,7 +10169,7 @@ parse5@5.1.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
-parse5@6.0.1, parse5@^6.0.1:
+parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
@@ -11700,16 +11855,16 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
@@ -12970,6 +13125,19 @@ vue-eslint-parser@^7.10.0:
lodash "^4.17.21"
semver "^6.3.0"
+vue-eslint-parser@^8.0.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"
+ integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==
+ dependencies:
+ debug "^4.3.2"
+ eslint-scope "^7.0.0"
+ eslint-visitor-keys "^3.1.0"
+ espree "^9.0.0"
+ esquery "^1.4.0"
+ lodash "^4.17.21"
+ semver "^7.3.5"
+
vue-functional-data-merge@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz#08a7797583b7f35680587f8a1d51d729aa1dc657"
@@ -13515,7 +13683,16 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yaml@^1.10.0:
+yaml-eslint-parser@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz#01d4e4d992a820769ea85ef5fd526dfc20ebc6f5"
+ integrity sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==
+ dependencies:
+ eslint-visitor-keys "^3.0.0"
+ lodash "^4.17.21"
+ yaml "^1.10.2"
+
+yaml@^1.10.0, yaml@^1.10.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
diff --git a/frontend/.dockerignore b/frontend/.dockerignore
index 88249539f..1ddda051a 100644
--- a/frontend/.dockerignore
+++ b/frontend/.dockerignore
@@ -1,3 +1,4 @@
node_modules
.git
-.gitignore
\ No newline at end of file
+.gitignore
+!.eslintignore
\ No newline at end of file
diff --git a/frontend/.eslintignore b/frontend/.eslintignore
index e973d3709..94934f9e7 100644
--- a/frontend/.eslintignore
+++ b/frontend/.eslintignore
@@ -1,3 +1,3 @@
-node_modules
-**/*.min.js
-dist
\ No newline at end of file
+node_modules/
+dist/
+coverage/
\ No newline at end of file
diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
index 96c602ef3..4e45ede62 100644
--- a/frontend/.eslintrc.js
+++ b/frontend/.eslintrc.js
@@ -8,9 +8,24 @@ module.exports = {
parserOptions: {
parser: 'babel-eslint',
},
- extends: ['standard', 'plugin:vue/essential', 'plugin:prettier/recommended'],
+ extends: [
+ 'standard',
+ 'plugin:vue/essential',
+ 'plugin:prettier/recommended',
+ 'plugin:@intlify/vue-i18n/recommended',
+ ],
// required to lint *.vue files
plugins: ['vue', 'prettier', 'jest'],
+ overrides: [
+ {
+ files: ['*.json'],
+ extends: ['plugin:@intlify/vue-i18n/recommended'],
+ rules: {
+ // TODO: enable
+ '@intlify/vue-i18n/no-html-messages': 'off',
+ },
+ },
+ ],
// add your custom rules here
rules: {
'no-console': ['error'],
@@ -22,6 +37,29 @@ module.exports = {
allowBinding: false,
},
],
+ '@intlify/vue-i18n/no-dynamic-keys': 'error',
+ '@intlify/vue-i18n/no-unused-keys': [
+ 'error',
+ {
+ src: './src',
+ extensions: ['.js', '.vue'],
+ // TODO: remove ignores
+ ignores: [
+ '/site.thx./',
+ '/form./',
+ '/time./',
+ '/decay.types./',
+ 'settings.password.resend_subtitle',
+ 'settings.password.reset-password.text',
+ 'settings.password.set',
+ 'settings.password.set-password.text',
+ 'settings.password.subtitle',
+ 'site.login.signin',
+ ],
+ enableFix: false,
+ },
+ ],
+ '@intlify/vue-i18n/no-missing-keys-in-other-locales': 'error',
'prettier/prettier': [
'error',
{
@@ -29,4 +67,12 @@ module.exports = {
},
],
},
+ settings: {
+ 'vue-i18n': {
+ localeDir: './src/locales/*.json',
+ // Specify the version of `vue-i18n` you are using.
+ // If not specified, the message will be parsed twice.
+ messageSyntaxVersion: '^8.22.4',
+ },
+ },
}
diff --git a/frontend/.gitignore b/frontend/.gitignore
index b868f0a64..b19667d17 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -5,7 +5,6 @@ dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-test/unit/coverage
package-lock.json
/.env
diff --git a/frontend/package.json b/frontend/package.json
index 69c843bf5..6ccf37d09 100755
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -8,11 +8,10 @@
"build": "vue-cli-service build",
"dev": "yarn run serve",
"analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json",
- "lint": "eslint --max-warnings=0 --ext .js,.vue .",
+ "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .",
"stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'",
- "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
"test": "TZ=UTC jest --coverage",
- "locales": "scripts/missing-keys.sh && scripts/sort.sh"
+ "locales": "scripts/sort.sh"
},
"dependencies": {
"@babel/core": "^7.13.13",
@@ -67,6 +66,7 @@
"vuex-persistedstate": "^4.0.0-beta.3"
},
"devDependencies": {
+ "@intlify/eslint-plugin-vue-i18n": "^1.4.0",
"@vue/cli-plugin-babel": "^3.7.0",
"@vue/cli-plugin-eslint": "^3.7.0",
"@vue/cli-service": "^3.7.0",
diff --git a/frontend/public/json-example/admin_card_statistic.json b/frontend/public/json-example/admin_card_statistic.json
deleted file mode 100644
index bacdccb5a..000000000
--- a/frontend/public/json-example/admin_card_statistic.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{"state":"success", "statisticdata":
- [
- {
- "i_creation_sum": 29288278.4653,
- "i_creation_mon": 68278.4653,
- "i_creation_365d": 19288278.4653,
- "i_creation_30d": 288278.4653,
- "i_creation_14d": 88278.4653,
- "i_creation_7d": 3278.4653
- },
- {
- "i_transience_sum": 8278.4653,
- "i_transience_mon": 8278.4653,
- "i_transience_365d": 8278.4653,
- "i_transience_30d": 178.4653,
- "i_transience_14d": 78.4653,
- "i_transience_7d": 8.4653
- },
- {
- "i_exchange_sum": 23345.2324,
- "i_exchange_mon": 2,
- "i_exchange_365d": 2,
- "i_exchange_30d": 2,
- "i_exchange_14d": 2,
- "i_exchange_7d": 2
- },
- {
- "i_members_sum": 5398,
- "i_members_mon": 234,
- "i_members_365d": 2356,
- "i_members_30d": 123,
- "i_members_14d": 23,
- "i_members_7d": 24
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/admin_charts_statistic.json b/frontend/public/json-example/admin_charts_statistic.json
deleted file mode 100644
index 8c7e6667b..000000000
--- a/frontend/public/json-example/admin_charts_statistic.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{"state":"success", "statisticdata":
- [
- {
- "charts_creation_0_mon": 5635,
- "charts_creation_1_mon": 5635,
- "charts_creation_2_mon": 5635,
- "charts_creation_3_mon": 5635,
- "charts_creation_4_mon": 5635,
- "charts_creation_5_mon": 5635,
- "charts_creation_6_mon": 5635,
- "charts_creation_7_mon": 5635,
- "charts_creation_8_mon": 5635,
- "charts_creation_9_mon": 5635,
- "charts_creation_10_mon": 5635,
- "charts_creation_11_mon": 5635,
- "charts_creation_12_mon": 5635
- },
- {
- "charts_transience_0_mon": 5635,
- "charts_transience_1_mon": 5635,
- "charts_transience_2_mon": 5635,
- "charts_transience_3_mon": 5635,
- "charts_transience_4_mon": 5635,
- "charts_transience_5_mon": 5635,
- "charts_transience_6_mon": 5635,
- "charts_transience_7_mon": 5635,
- "charts_transience_8_mon": 5635,
- "charts_transience_9_mon": 5635,
- "charts_transience_10_mon": 5635,
- "charts_transience_11_mon": 5635,
- "charts_transience_12_mon": 5635
- },
- {
- "charts_exchange_0_mon": 5635,
- "charts_exchange_1_mon": 5635,
- "charts_exchange_2_mon": 5635,
- "charts_exchange_3_mon": 5635,
- "charts_exchange_4_mon": 5635,
- "charts_exchange_5_mon": 5635,
- "charts_exchange_6_mon": 5635,
- "charts_exchange_7_mon": 5635,
- "charts_exchange_8_mon": 5635,
- "charts_exchange_9_mon": 5635,
- "charts_exchange_10_mon": 5635,
- "charts_exchange_11_mon": 5635,
- "charts_exchange_12_mon": 5635
- },
- {
- "charts_members_0_mon": 5635,
- "charts_members_1_mon": 5635,
- "charts_members_2_mon": 5635,
- "charts_members_3_mon": 5635,
- "charts_members_4_mon": 5635,
- "charts_members_5_mon": 5635,
- "charts_members_6_mon": 5635,
- "charts_members_7_mon": 5635,
- "charts_members_8_mon": 5635,
- "charts_members_9_mon": 5635,
- "charts_members_10_mon": 5635,
- "charts_members_11_mon": 5635,
- "charts_members_12_mon": 5635
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/admin_community_statistic.json b/frontend/public/json-example/admin_community_statistic.json
deleted file mode 100644
index f083991aa..000000000
--- a/frontend/public/json-example/admin_community_statistic.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{"state":"success", "statisticdata":
- [
- {
- "community_entries1_mon": 5635,
- "community_entries2_mon": 5635,
- "community_entries3_mon": 5635,
- "community_entries4_mon": 5635,
- "community_entries5_mon": 5635,
- "community_entries6_mon": 5635,
- "community_entries7_mon": 5635,
- "community_entries8_mon": 5635,
- "community_entries9_mon": 5635,
- "community_entries0_mon": 5635,
- "community_entries10_mon": 5635,
- "community_entries11_mon": 5635,
- "community_entries12_mon": 5635
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/admin_transaction_list.json b/frontend/public/json-example/admin_transaction_list.json
deleted file mode 100644
index a1af47db8..000000000
--- a/frontend/public/json-example/admin_transaction_list.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{"state":"success", "transactions":
- [
- {
- "name": "Jon Tester",
- "email": "jon@example.de",
- "type": "send",
- "transaction_id": 12,
- "date": "29-11-2020",
- "balance": 7000,
- "memo": "Reperatur Waschbecken",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Gradido Community",
- "email": "gradido@example.de",
- "type": "creation",
- "transaction_id": 11,
- "date": "1-11-2020",
- "balance": 10000,
- "memo": "Müll gesammelt im Wald",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Maria Tester",
- "email": "maria@example.de",
- "type": "receive",
- "transaction_id": 7,
- "date": "23-10-2020",
- "balance": 5000,
- "memo": "Spende an Alice ",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Alice Tester",
- "email": "alice@example.de",
- "type": "receive",
- "transaction_id": 5,
- "date": "2-8-2020",
- "balance": 1000,
- "memo": "Bob hat meinen Müll getrennt",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Gradido Community",
- "email": "gradido@example.de",
- "type": "creation",
- "transaction_id": 1,
- "date": "11-7-2020",
- "balance": 10000,
- "memo": "Bob hat meinen Müll getrennt",
- "pubkey": "abcdefghi123456789"
-
- }
- ],
- "transactionExecutingCount": 8750,
- "count": 5
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/admin_transience_list.json b/frontend/public/json-example/admin_transience_list.json
deleted file mode 100644
index 0cbacfbd8..000000000
--- a/frontend/public/json-example/admin_transience_list.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{"state":"success", "participation":
- [
- {
- "name": "",
- "type": "submitted",
- "participation_id": 412,
- "date_submitted": "9-12-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "8-12-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "name": "",
- "type": "in progress",
- "participation_id": 312,
- "date_submitted": "2-11-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "2-11-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "name": "",
- "type": "confirmed",
- "participation_id": 212,
- "date_submitted": "20-10-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "20-10-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "name": "",
- "type": "rejected",
- "participation_id": 142,
- "date_submitted": "17-9-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "17-9-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- }
- ],
- "count": 4
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/admin_userlist.json b/frontend/public/json-example/admin_userlist.json
deleted file mode 100644
index a8550716f..000000000
--- a/frontend/public/json-example/admin_userlist.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{"state":"success", "admin0userlist":
- [
- {
- "created": 1578688666,
- "disabled": false,
- "email": "dervommond@gmail.com",
- "email_checked": true,
- "first_name": "Max",
- "group_alias": "gdd1",
- "ident_hash": 2928827813,
- "last_name": "Miau",
- "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b",
- "role": "admin",
- "username": "",
- "balance_gdd": 174500,
- "balance_gdt": 4500,
- "errorCount": 0
- },
- {
- "created": 1578685678,
- "disabled": false,
- "email": "ttwer@gmail.com",
- "email_checked": true,
- "first_name": "John",
- "group_alias": "gdd1",
- "ident_hash": 2928827813,
- "last_name": "Doe",
- "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71x",
- "role": "user",
- "username": "",
- "balance_gdd": 144500,
- "balance_gdt": 0,
- "errorCount": 0
- },
- {
- "created": 1578635671,
- "disabled": false,
- "email": "test@gmail.com",
- "email_checked": true,
- "first_name": "Alice",
- "group_alias": "gdd1",
- "ident_hash": 4928827813,
- "last_name": "Seer",
- "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71a",
- "role": "user",
- "username": "",
- "balance_gdd": 444500,
- "balance_gdt": 4500,
- "errorCount": 0
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/example.json b/frontend/public/json-example/example.json
deleted file mode 100644
index e69de29bb..000000000
diff --git a/frontend/public/json-example/userdata.json b/frontend/public/json-example/userdata.json
deleted file mode 100644
index 69f5a8041..000000000
--- a/frontend/public/json-example/userdata.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{"state":"success", "userdata":
- [
- {
- "created": 1578688666,
- "disabled": false,
- "email": "dervommond@gmail.com",
- "email_checked": true,
- "first_name": "Max",
- "group_alias": "gdd1",
- "ident_hash": 2928827813,
- "last_name": "Miau",
- "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b",
- "role": "admin",
- "username": "",
- "balance": 174500,
- "errorCount": 0
- }
- ]
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/userparticipation.json b/frontend/public/json-example/userparticipation.json
deleted file mode 100644
index 4e29f117b..000000000
--- a/frontend/public/json-example/userparticipation.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{"state":"success", "participation":
- [
- {
- "type": "submitted",
- "participation_id": 412,
- "date_submitted": "9-12-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "8-12-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "type": "in progress",
- "participation_id": 312,
- "date_submitted": "2-11-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "2-11-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "type": "confirmed",
- "participation_id": 212,
- "date_submitted": "20-10-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "20-10-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- },
- {
- "type": "rejected",
- "participation_id": 142,
- "date_submitted": "17-9-2020",
- "titel": "Lorem Ipsum panta lore es Tastina sero was. ",
- "text": "Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. Lorem Ipsum panta lore es Tastina sero was. ",
- "date_participation": "17-9-2020",
- "plz_participation": "01099",
- "pubkey": "abcdefghi123456789"
- }
- ],
- "count": 4
-}
\ No newline at end of file
diff --git a/frontend/public/json-example/usertransactions.json b/frontend/public/json-example/usertransactions.json
deleted file mode 100644
index a1af47db8..000000000
--- a/frontend/public/json-example/usertransactions.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{"state":"success", "transactions":
- [
- {
- "name": "Jon Tester",
- "email": "jon@example.de",
- "type": "send",
- "transaction_id": 12,
- "date": "29-11-2020",
- "balance": 7000,
- "memo": "Reperatur Waschbecken",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Gradido Community",
- "email": "gradido@example.de",
- "type": "creation",
- "transaction_id": 11,
- "date": "1-11-2020",
- "balance": 10000,
- "memo": "Müll gesammelt im Wald",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Maria Tester",
- "email": "maria@example.de",
- "type": "receive",
- "transaction_id": 7,
- "date": "23-10-2020",
- "balance": 5000,
- "memo": "Spende an Alice ",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Alice Tester",
- "email": "alice@example.de",
- "type": "receive",
- "transaction_id": 5,
- "date": "2-8-2020",
- "balance": 1000,
- "memo": "Bob hat meinen Müll getrennt",
- "pubkey": "abcdefghi123456789"
-
- },
- {
- "name": "Gradido Community",
- "email": "gradido@example.de",
- "type": "creation",
- "transaction_id": 1,
- "date": "11-7-2020",
- "balance": 10000,
- "memo": "Bob hat meinen Müll getrennt",
- "pubkey": "abcdefghi123456789"
-
- }
- ],
- "transactionExecutingCount": 8750,
- "count": 5
-}
\ No newline at end of file
diff --git a/frontend/scripts/missing-keys.sh b/frontend/scripts/missing-keys.sh
deleted file mode 100755
index 6dbaee897..000000000
--- a/frontend/scripts/missing-keys.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-ROOT_DIR=$(dirname "$0")/..
-
-sorting="jq -f $ROOT_DIR/scripts/sort_filter.jq"
-english="$sorting $ROOT_DIR/src/locales/en.json"
-german="$sorting $ROOT_DIR/src/locales/de.json"
-listPaths="jq -c 'path(..)|[.[]|tostring]|join(\".\")'"
-diffString="<( $english | $listPaths ) <( $german | $listPaths )"
-if eval "diff -q $diffString";
-then
- : # all good
-else
- eval "diff -y $diffString | grep '[|<>]'";
- printf "\nEnglish and German translation keys do not match, see diff above.\n"
- exit 1
-fi
diff --git a/admin/scripts/missing-keys.sh b/frontend/scripts/missing-keys.sh.old
similarity index 100%
rename from admin/scripts/missing-keys.sh
rename to frontend/scripts/missing-keys.sh.old
diff --git a/frontend/src/layouts/ContentFooter.spec.js b/frontend/src/components/ContentFooter.spec.js
similarity index 92%
rename from frontend/src/layouts/ContentFooter.spec.js
rename to frontend/src/components/ContentFooter.spec.js
index 4b360d581..f67560e44 100644
--- a/frontend/src/layouts/ContentFooter.spec.js
+++ b/frontend/src/components/ContentFooter.spec.js
@@ -11,7 +11,7 @@ describe('ContentFooter', () => {
$i18n: {
locale: 'en',
},
- $t: jest.fn((t) => t),
+ $t: jest.fn((t, options) => (options ? [t, options] : t)),
}
const Wrapper = () => {
@@ -33,11 +33,11 @@ describe('ContentFooter', () => {
})
it('renders the copyright year', () => {
- expect(wrapper.find('div.copyright').text()).toMatch(/©\s*2[0-9]{3,3}\s+/)
+ expect(mocks.$t).toBeCalledWith('footer.copyright.year', { year: 2022 })
})
it('renders a link to Gradido-Akademie', () => {
- expect(wrapper.find('div.copyright').find('a').text()).toEqual('Gradido-Akademie')
+ expect(wrapper.find('div.copyright').find('a').text()).toEqual('footer.copyright.link')
})
it('links to the login page when clicked on copyright', () => {
@@ -51,7 +51,7 @@ describe('ContentFooter', () => {
it('shows the current version', async () => {
wrapper.setData({ version: 1.23 })
await wrapper.vm.$nextTick()
- expect(wrapper.find('div.copyright').findAll('a').at(1).text()).toEqual('App version 1.23')
+ expect(mocks.$t).toBeCalledWith('footer.app_version', { version: 1.23 })
})
it('links to latest release on GitHub', () => {
@@ -64,7 +64,7 @@ describe('ContentFooter', () => {
wrapper.setData({ shortHash: 'ACCEDED' })
wrapper.setData({ hash: 'ACCEDEDC001D00DC001D00DC001D00DC001CAFA' })
await wrapper.vm.$nextTick()
- expect(wrapper.find('div.copyright').findAll('a').at(2).text()).toEqual('(ACCEDED)')
+ expect(mocks.$t).toBeCalledWith('footer.short_hash', { shortHash: 'ACCEDED' })
})
it('links to last release commit', async () => {
@@ -78,7 +78,7 @@ describe('ContentFooter', () => {
describe('links to gradido.net', () => {
it('has a link to the legal notice', () => {
- expect(wrapper.findAll('a.nav-link').at(0).text()).toEqual('imprint')
+ expect(wrapper.findAll('a.nav-link').at(0).text()).toEqual('footer.imprint')
})
it('links to the https://gradido.net/en/impressum when locale is en', () => {
@@ -88,7 +88,7 @@ describe('ContentFooter', () => {
})
it('has a link to the privacy policy', () => {
- expect(wrapper.findAll('a.nav-link').at(1).text()).toEqual('privacy_policy')
+ expect(wrapper.findAll('a.nav-link').at(1).text()).toEqual('footer.privacy_policy')
})
it('links to the https://gradido.net/en/datenschutz when locale is en', () => {
@@ -98,7 +98,7 @@ describe('ContentFooter', () => {
})
it('has a link to the members area', () => {
- expect(wrapper.findAll('a.nav-link').at(2).text()).toEqual('members_area')
+ expect(wrapper.findAll('a.nav-link').at(2).text()).toEqual('navigation.members_area')
})
it('links to the elopage', () => {
diff --git a/frontend/src/layouts/ContentFooter.vue b/frontend/src/components/ContentFooter.vue
similarity index 81%
rename from frontend/src/layouts/ContentFooter.vue
rename to frontend/src/components/ContentFooter.vue
index de49e8635..bdcb5b1a9 100755
--- a/frontend/src/layouts/ContentFooter.vue
+++ b/frontend/src/components/ContentFooter.vue
@@ -3,24 +3,24 @@
@@ -29,16 +29,16 @@
diff --git a/frontend/src/components/DecayInformations/DecayInformation-Decay.vue b/frontend/src/components/DecayInformations/DecayInformation-Decay.vue
index 19aac9e98..7377b6fa8 100644
--- a/frontend/src/components/DecayInformations/DecayInformation-Decay.vue
+++ b/frontend/src/components/DecayInformations/DecayInformation-Decay.vue
@@ -14,7 +14,7 @@
{{ (Number(balance) - Number(decay.decay)) | GDD }}
- {{ decay.decay | GDD }} =
+ {{ decay.decay | GDD }} {{ $t('math.equal') }}
{{ balance | GDD }}
diff --git a/frontend/src/components/DecayInformations/DecayInformation-DecayStartblock.vue b/frontend/src/components/DecayInformations/DecayInformation-DecayStartblock.vue
index 2ee9ecc2c..5802bfb4b 100644
--- a/frontend/src/components/DecayInformations/DecayInformation-DecayStartblock.vue
+++ b/frontend/src/components/DecayInformations/DecayInformation-DecayStartblock.vue
@@ -4,12 +4,11 @@
{{ $t('decay.Starting_block_decay') }}
-
{{ $t('decay.decay_introduced') }} :
+
{{ $t('decay.decay_introduced') }}
{{ $d(new Date(decay.start), 'long') }}
- {{ $i18n.locale === 'de' ? 'Uhr' : '' }}
@@ -28,7 +27,8 @@
- {{ $t(`decay.${typeId.toLowerCase()}`) }}
+
+ {{ $t(`decay.types.${typeId.toLowerCase()}`) }}
{{ amount | GDD }}
diff --git a/frontend/src/components/DecayInformations/DecayInformation-Long.vue b/frontend/src/components/DecayInformations/DecayInformation-Long.vue
index b5e1bbbe5..50e3d6697 100644
--- a/frontend/src/components/DecayInformations/DecayInformation-Long.vue
+++ b/frontend/src/components/DecayInformations/DecayInformation-Long.vue
@@ -15,7 +15,6 @@
{{ $d(new Date(decay.start), 'long') }}
- {{ $i18n.locale === 'de' ? 'Uhr' : '' }}
@@ -44,7 +43,8 @@
- {{ $t(`decay.${typeId.toLowerCase()}`) }}
+
+ {{ $t(`decay.types.${typeId.toLowerCase()}`) }}
{{ amount | GDD }}
@@ -82,7 +82,8 @@ export default {
const result = []
order.forEach((timeSpan) => {
if (this.duration[timeSpan] > 0) {
- const locale = this.$t(`decay.${timeSpan}`)
+ // eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys
+ const locale = this.$t(`time.${timeSpan}`)
result.push(`${this.duration[timeSpan]} ${locale}`)
}
})
diff --git a/frontend/src/components/GddSend/QrCode.vue b/frontend/src/components/GddSend/QrCode.vue
index 0146621ed..32e527cfe 100644
--- a/frontend/src/components/GddSend/QrCode.vue
+++ b/frontend/src/components/GddSend/QrCode.vue
@@ -1,5 +1,6 @@
+
@@ -18,6 +19,7 @@
+
diff --git a/frontend/src/components/GddSend/TransactionConfirmationLink.vue b/frontend/src/components/GddSend/TransactionConfirmationLink.vue
index 18eb0f25d..31ae01cc3 100644
--- a/frontend/src/components/GddSend/TransactionConfirmationLink.vue
+++ b/frontend/src/components/GddSend/TransactionConfirmationLink.vue
@@ -28,12 +28,14 @@
{{ $t('gdd_per_link.decay-14-day') }}
- ~ {{ (amount * 0.028 * -1) | GDD }}
+ {{ $t('math.aprox') }} {{ (amount * 0.028 * -1) | GDD }}
{{ $t('form.new_balance') }}
- ~ {{ (balance - amount - amount * 0.028) | GDD }}
+
+ {{ $t('math.aprox') }} {{ (balance - amount - amount * 0.028) | GDD }}
+
diff --git a/frontend/src/components/GddSend/TransactionConfirmationSend.vue b/frontend/src/components/GddSend/TransactionConfirmationSend.vue
index e05d42269..2d85fa33f 100644
--- a/frontend/src/components/GddSend/TransactionConfirmationSend.vue
+++ b/frontend/src/components/GddSend/TransactionConfirmationSend.vue
@@ -15,7 +15,7 @@
- GDD
+ {{ $t('GDD') }}
{{ (amount * -1) | GDD }}
@@ -27,7 +27,7 @@
- {{ memo ? memo : '-' }}
+ {{ memo ? memo : $t('em-dash') }}
diff --git a/frontend/src/components/GddSend/TransactionForm.vue b/frontend/src/components/GddSend/TransactionForm.vue
index 991e165ce..845e749cc 100644
--- a/frontend/src/components/GddSend/TransactionForm.vue
+++ b/frontend/src/components/GddSend/TransactionForm.vue
@@ -76,7 +76,7 @@
- GDD
+ {{ $t('GDD') }}
{{ $t('transaction.receiverDeleted') }}
- ({{ errorResult }})
+ {{ errorResult }}
{{ $t('form.close') }}
diff --git a/frontend/src/components/GddTransactionList.spec.js b/frontend/src/components/GddTransactionList.spec.js
index ab8f3658c..379e1144e 100644
--- a/frontend/src/components/GddTransactionList.spec.js
+++ b/frontend/src/components/GddTransactionList.spec.js
@@ -440,7 +440,7 @@ describe('GddTransactionList', () => {
})
it('shows the text "1 / 2"', () => {
- expect(paginationButtons.find('p.text-center').text()).toBe('1 / 2')
+ expect(paginationButtons.find('p.text-center').text()).toBe('1 math.div 2')
})
it('emits update-transactions when next button is clicked', async () => {
@@ -452,7 +452,7 @@ describe('GddTransactionList', () => {
it('shows text "2 / 2" when next button is clicked', async () => {
await paginationButtons.find('button.next-page').trigger('click')
- expect(paginationButtons.find('p.text-center').text()).toBe('2 / 2')
+ expect(paginationButtons.find('p.text-center').text()).toBe('2 math.div 2')
})
it('has next-button disabled when next button is clicked', async () => {
diff --git a/frontend/src/components/GddTransactionListFooter.vue b/frontend/src/components/GddTransactionListFooter.vue
index 0e30d85dc..1e4961493 100644
--- a/frontend/src/components/GddTransactionListFooter.vue
+++ b/frontend/src/components/GddTransactionListFooter.vue
@@ -2,10 +2,12 @@
+
+
diff --git a/frontend/src/components/Menu/Navbar.spec.js b/frontend/src/components/Menu/Navbar.spec.js
index 49765e0b3..ebf9abba0 100644
--- a/frontend/src/components/Menu/Navbar.spec.js
+++ b/frontend/src/components/Menu/Navbar.spec.js
@@ -54,31 +54,31 @@ describe('Navbar', () => {
expect(wrapper.findAll('.nav-item').at(1).text()).toEqual('1234 GDD')
})
- it('has first nav-item "overview" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(3).text()).toEqual('overview')
+ it('has first nav-item "navigation.overview" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(3).text()).toEqual('navigation.overview')
})
- it('has first nav-item "send" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(4).text()).toEqual('send')
+ it('has first nav-item "navigation.send" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(4).text()).toEqual('navigation.send')
})
- it('has first nav-item "transactions" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(5).text()).toEqual('transactions')
+ it('has first nav-item "navigation.transactions" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(5).text()).toEqual('navigation.transactions')
})
- it('has first nav-item "my-profil" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(6).text()).toEqual('site.navbar.my-profil')
+ it('has first nav-item "navigation.profile" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(6).text()).toEqual('navigation.profile')
})
it('has a link to the members area', () => {
- expect(wrapper.findAll('.nav-item').at(7).text()).toContain('members_area')
+ expect(wrapper.findAll('.nav-item').at(7).text()).toContain('navigation.members_area')
expect(wrapper.findAll('.nav-item').at(7).find('a').attributes('href')).toBe(
'https://elopage.com',
)
})
- it('has first nav-item "admin_area" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(8).text()).toEqual('admin_area')
+ it('has first nav-item "navigation.admin_area" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(8).text()).toEqual('navigation.admin_area')
})
- it('has first nav-item "logout" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(9).text()).toEqual('logout')
+ it('has first nav-item "navigation.logout" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(9).text()).toEqual('navigation.logout')
})
})
})
diff --git a/frontend/src/components/Menu/Navbar.vue b/frontend/src/components/Menu/Navbar.vue
index 1c6f71955..3542c1cd1 100644
--- a/frontend/src/components/Menu/Navbar.vue
+++ b/frontend/src/components/Menu/Navbar.vue
@@ -10,10 +10,10 @@
- {{ pending ? '—' : balance | amount }} GDD
+ {{ pending ? $t('em-dash') : balance | amount }} {{ $t('GDD') }}
- {{ $store.state.firstName }} {{ $store.state.lastName }},
+ {{ $store.state.firstName }} {{ $store.state.lastName }}
{{ $store.state.email }}
@@ -32,40 +32,42 @@
{{ $store.state.firstName }}
- {{ $store.state.lastName }},
+ {{ $store.state.lastName }}
{{ $store.state.email }}
- {{ $t('overview') }}
+ {{ $t('navigation.overview') }}
- {{ $t('send') }}
+ {{ $t('navigation.send') }}
- {{ $t('transactions') }}
+ {{ $t('navigation.transactions') }}
- {{ $t('site.navbar.my-profil') }}
+ {{ $t('navigation.profile') }}
- {{ $t('members_area') }}
- !
+ {{ $t('navigation.members_area') }}
+
+ {{ $t('math.exclaim') }}
+
- {{ $t('admin_area') }}
+ {{ $t('navigation.admin_area') }}
- {{ $t('logout') }}
+ {{ $t('navigation.logout') }}
diff --git a/frontend/src/components/Menu/Sidebar.spec.js b/frontend/src/components/Menu/Sidebar.spec.js
index 884269b9b..fec7945c8 100644
--- a/frontend/src/components/Menu/Sidebar.spec.js
+++ b/frontend/src/components/Menu/Sidebar.spec.js
@@ -36,29 +36,29 @@ describe('Sidebar', () => {
expect(wrapper.findAll('.nav-item')).toHaveLength(7)
})
- it('has first nav-item "overview" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(0).text()).toEqual('overview')
+ it('has first nav-item "navigation.overview" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(0).text()).toEqual('navigation.overview')
})
- it('has first nav-item "send" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(1).text()).toEqual('send')
+ it('has first nav-item "navigation.send" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(1).text()).toEqual('navigation.send')
})
- it('has first nav-item "transactions" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(2).text()).toEqual('transactions')
+ it('has first nav-item "navigation.transactions" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(2).text()).toEqual('navigation.transactions')
})
- it('has first nav-item "my-profil" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(3).text()).toEqual('site.navbar.my-profil')
+ it('has first nav-item "navigation.profile" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(3).text()).toEqual('navigation.profile')
})
it('has a link to the members area', () => {
- expect(wrapper.findAll('.nav-item').at(4).text()).toContain('members_area')
+ expect(wrapper.findAll('.nav-item').at(4).text()).toContain('navigation.members_area')
expect(wrapper.findAll('.nav-item').at(4).find('a').attributes('href')).toBe('#')
})
- it('has first nav-item "admin_area" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(5).text()).toEqual('admin_area')
+ it('has first nav-item "navigation.admin_area" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(5).text()).toEqual('navigation.admin_area')
})
- it('has first nav-item "logout" in navbar', () => {
- expect(wrapper.findAll('.nav-item').at(6).text()).toEqual('logout')
+ it('has first nav-item "navigation.logout" in navbar', () => {
+ expect(wrapper.findAll('.nav-item').at(6).text()).toEqual('navigation.logout')
})
})
})
diff --git a/frontend/src/components/Menu/Sidebar.vue b/frontend/src/components/Menu/Sidebar.vue
index 4341791f0..028b7aca6 100644
--- a/frontend/src/components/Menu/Sidebar.vue
+++ b/frontend/src/components/Menu/Sidebar.vue
@@ -6,35 +6,37 @@
- {{ $t('overview') }}
+ {{ $t('navigation.overview') }}
- {{ $t('send') }}
+ {{ $t('navigation.send') }}
- {{ $t('transactions') }}
+ {{ $t('navigation.transactions') }}
- {{ $t('site.navbar.my-profil') }}
+ {{ $t('navigation.profile') }}
- {{ $t('members_area') }}
- !
+ {{ $t('navigation.members_area') }}
+
+ {{ $t('math.exclaim') }}
+
- {{ $t('admin_area') }}
+ {{ $t('navigation.admin_area') }}
- {{ $t('logout') }}
+ {{ $t('navigation.logout') }}
diff --git a/frontend/src/components/PaginationButtons.spec.js b/frontend/src/components/PaginationButtons.spec.js
index c6ae816cc..f2badd082 100644
--- a/frontend/src/components/PaginationButtons.spec.js
+++ b/frontend/src/components/PaginationButtons.spec.js
@@ -12,8 +12,12 @@ const propsData = {
describe('PaginationButtons', () => {
let wrapper
+ const mocks = {
+ $t: jest.fn((t) => t),
+ }
+
const Wrapper = () => {
- return mount(PaginationButtons, { localVue, propsData })
+ return mount(PaginationButtons, { localVue, mocks, propsData })
}
describe('mount', () => {
diff --git a/frontend/src/components/PaginationButtons.vue b/frontend/src/components/PaginationButtons.vue
index 3b80481c6..e5e465032 100644
--- a/frontend/src/components/PaginationButtons.vue
+++ b/frontend/src/components/PaginationButtons.vue
@@ -7,7 +7,7 @@
- {{ value }} / {{ totalPages }}
+ {{ value }} {{ $t('math.div') }} {{ totalPages }}
diff --git a/frontend/src/components/Status.spec.js b/frontend/src/components/Status.spec.js
index 30dab4345..ba7b03fa4 100644
--- a/frontend/src/components/Status.spec.js
+++ b/frontend/src/components/Status.spec.js
@@ -7,6 +7,7 @@ describe('Status', () => {
let wrapper
const mocks = {
+ $t: jest.fn((t) => t),
$n: jest.fn((n) => n),
}
@@ -26,7 +27,7 @@ describe('Status', () => {
describe('balance is pending', () => {
it('it displays an en-dash', () => {
- expect(wrapper.find('div.gdd-status-div').text()).toEqual('— GDD')
+ expect(wrapper.find('div.gdd-status-div').text()).toEqual('em-dash GDD')
})
})
diff --git a/frontend/src/components/Status.vue b/frontend/src/components/Status.vue
index 92d00452d..9ebe48e09 100644
--- a/frontend/src/components/Status.vue
+++ b/frontend/src/components/Status.vue
@@ -1,7 +1,7 @@
- {{ pending || balance === null ? '—' : $n(balance, 'decimal') }} {{ statusText }}
+ {{ pending || balance === null ? $t('em-dash') : $n(balance, 'decimal') }} {{ statusText }}
diff --git a/frontend/src/components/Transaction.vue b/frontend/src/components/Transaction.vue
index acce0f7ff..ea651c663 100644
--- a/frontend/src/components/Transaction.vue
+++ b/frontend/src/components/Transaction.vue
@@ -51,7 +51,7 @@
{{ $t('form.date') }}
- {{ $d(new Date(date), 'long') }} {{ $i18n.locale === 'de' ? 'Uhr' : '' }}
+ {{ $d(new Date(date), 'long') }}
diff --git a/frontend/src/components/TransactionRows/DateRow.vue b/frontend/src/components/TransactionRows/DateRow.vue
index 5daccfa69..20e80ec2b 100644
--- a/frontend/src/components/TransactionRows/DateRow.vue
+++ b/frontend/src/components/TransactionRows/DateRow.vue
@@ -7,7 +7,6 @@
{{ $d(new Date(balanceDate), 'long') }}
- {{ $i18n.locale === 'de' ? 'Uhr' : '' }}
diff --git a/frontend/src/components/UserCard.vue b/frontend/src/components/UserCard.vue
index 728883109..beca89532 100755
--- a/frontend/src/components/UserCard.vue
+++ b/frontend/src/components/UserCard.vue
@@ -15,18 +15,18 @@
{{ $n(balance, 'decimal') }}
- GDD
+ {{ $t('GDD') }}
{{ transactionCount }}
- {{ $t('transactions') }}
+ {{ $t('navigation.transactions') }}
- --
+ {{ $t('em-dash') }}
{{ $t('community.community') }}
diff --git a/frontend/src/components/UserCard_FormUserMail.spec.js b/frontend/src/components/UserCard_FormUserMail.spec.js.old
similarity index 95%
rename from frontend/src/components/UserCard_FormUserMail.spec.js
rename to frontend/src/components/UserCard_FormUserMail.spec.js.old
index cc4911683..f59f610ee 100644
--- a/frontend/src/components/UserCard_FormUserMail.spec.js
+++ b/frontend/src/components/UserCard_FormUserMail.spec.js.old
@@ -42,8 +42,8 @@ describe('UserCard_FormUserMail', () => {
expect(wrapper.find('a[href="#formusermail"]').exists()).toBeTruthy()
})
- it('renders the E-Mail form.change', () => {
- expect(wrapper.findAll('div.col').at(0).text()).toBe('E-Mail form.change')
+ it('renders the form.email form.change', () => {
+ expect(wrapper.findAll('div.col').at(0).text()).toBe('form.email form.change')
})
it('renders the E-Mail', () => {
diff --git a/frontend/src/components/UserCard_FormUserMail.vue b/frontend/src/components/UserCard_FormUserMail.vue.old
similarity index 93%
rename from frontend/src/components/UserCard_FormUserMail.vue
rename to frontend/src/components/UserCard_FormUserMail.vue.old
index e0d013973..8d7677c35 100644
--- a/frontend/src/components/UserCard_FormUserMail.vue
+++ b/frontend/src/components/UserCard_FormUserMail.vue.old
@@ -4,7 +4,7 @@
- E-Mail {{ $t('form.change') }}
+ {{ $t('form.email') }} {{ $t('form.change') }}
diff --git a/frontend/src/layouts/AuthLayout_gdd.vue b/frontend/src/layouts/AuthLayout_gdd.vue
index 4d0f8cb78..e87ebe06a 100644
--- a/frontend/src/layouts/AuthLayout_gdd.vue
+++ b/frontend/src/layouts/AuthLayout_gdd.vue
@@ -8,7 +8,7 @@