Add proofread languages to available languages
This commit is contained in:
parent
7a4e568898
commit
e0c9332634
7 changed files with 15 additions and 325 deletions
|
@ -1,309 +0,0 @@
|
||||||
{
|
|
||||||
"404": {
|
|
||||||
"title": "Nicht gefunden",
|
|
||||||
"text": "Die angeforderte Seite existiert nicht."
|
|
||||||
},
|
|
||||||
"filters": {
|
|
||||||
"create": {
|
|
||||||
"action": "Neuen gespeicherten Filter erstellen",
|
|
||||||
"description": "Ein gespeicherter Filter ist eine virtuelle Liste, die bei jedem Zugriff aus einem Satz von Filtern errechnet wird. Einmal erstellt, erscheint er in einem speziellen Namensraum.",
|
|
||||||
"title": "Einen gespeicherten Filter erstellen"
|
|
||||||
},
|
|
||||||
"attributes": {
|
|
||||||
"descriptionPlaceholder": "Die Beschreibung steht hier …",
|
|
||||||
"description": "Beschreibung",
|
|
||||||
"titlePlaceholder": "Der gespeicherte Filtertitel steht hier …",
|
|
||||||
"title": "Titel"
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"header": "Diesen gespeicherten Filter löschen",
|
|
||||||
"success": "Der Filter wurde erfolgreich gelöscht."
|
|
||||||
},
|
|
||||||
"edit": {
|
|
||||||
"success": "Der Filter wurde erfolgreich gespeichert.",
|
|
||||||
"title": "Diesen gespeicherten Filter bearbeiten"
|
|
||||||
},
|
|
||||||
"title": "Filter"
|
|
||||||
},
|
|
||||||
"sharing": {
|
|
||||||
"authenticating": "Authentifizierung …",
|
|
||||||
"invalidPassword": "Das Passwort ist ungültig.",
|
|
||||||
"error": "Es ist ein Fehler aufgetreten."
|
|
||||||
},
|
|
||||||
"label": {
|
|
||||||
"attributes": {
|
|
||||||
"color": "Farbe",
|
|
||||||
"description": "Beschreibung",
|
|
||||||
"title": "Titel"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"misc": {
|
|
||||||
"search": "Suchen",
|
|
||||||
"copy": "In Zwischenablage kopieren",
|
|
||||||
"disable": "Deaktivieren",
|
|
||||||
"confirm": "Bestätigen",
|
|
||||||
"delete": "Löschen",
|
|
||||||
"save": "Speichern",
|
|
||||||
"loading": "Wird geladen …",
|
|
||||||
"previous": "Vorherige",
|
|
||||||
"next": "Weiter"
|
|
||||||
},
|
|
||||||
"task": {
|
|
||||||
"delete": "Diese Aufgabe löschen",
|
|
||||||
"new": "Eine neue Aufgabe erstellen",
|
|
||||||
"task": "Aufgabe",
|
|
||||||
"show": {
|
|
||||||
"titleCurrent": "Aktuelle Aufgaben",
|
|
||||||
"noTasks": "Nichts zu tun – Einen schönen Tag noch!",
|
|
||||||
"today": "Heute",
|
|
||||||
"nextWeek": "Nächste Woche"
|
|
||||||
},
|
|
||||||
"detail": {
|
|
||||||
"created": "Erstellt {0} von {1}",
|
|
||||||
"undone": "Als unerledigt markieren",
|
|
||||||
"done": "Fertig!",
|
|
||||||
"move": "Aufgabe in eine andere Liste verschieben",
|
|
||||||
"delete": {
|
|
||||||
"header": "Diese Aufgabe löschen"
|
|
||||||
},
|
|
||||||
"deleteSuccess": "Die Aufgabe wurde erfolgreich gelöscht.",
|
|
||||||
"updateSuccess": "Die Aufgabe wurde erfolgreich gespeichert.",
|
|
||||||
"doneAt": "Erledigt {0}",
|
|
||||||
"updated": "Aktualisiert {0}",
|
|
||||||
"actions": {
|
|
||||||
"priority": "Priorität einstellen",
|
|
||||||
"reminders": "Erinnerungen einstellen",
|
|
||||||
"relatedTasks": "Aufgabenbeziehungen hinzufügen",
|
|
||||||
"attachments": "Anhänge hinzufügen",
|
|
||||||
"delete": "Aufgabe löschen",
|
|
||||||
"color": "Taskfarbe einstellen",
|
|
||||||
"moveList": "Aufgabe verschieben"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"attributes": {
|
|
||||||
"color": "Farbe",
|
|
||||||
"done": "Fertig",
|
|
||||||
"createdBy": "Erstellt von",
|
|
||||||
"created": "Erstellt",
|
|
||||||
"endDate": "Enddatum",
|
|
||||||
"dueDate": "Fälligkeitsdatum",
|
|
||||||
"title": "Titel",
|
|
||||||
"startDate": "Anfangsdatum",
|
|
||||||
"relatedTasks": "Verwandte Aufgaben",
|
|
||||||
"priority": "Priorität",
|
|
||||||
"percentDone": "% erledigt",
|
|
||||||
"repeat": "Wiederholen",
|
|
||||||
"reminders": "Erinnerungen",
|
|
||||||
"updated": "Aktualisiert"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"team": {
|
|
||||||
"edit": {
|
|
||||||
"delete": {
|
|
||||||
"header": "Team löschen",
|
|
||||||
"success": "Das Team wurde erfolgreich gelöscht."
|
|
||||||
},
|
|
||||||
"madeAdmin": "Das Teammitglied wurde erfolgreich zum Admin gemacht.",
|
|
||||||
"madeMember": "Das Teammitglied wurde erfolgreich zum Mitglied gemacht.",
|
|
||||||
"userAddedSuccess": "Das Teammitglied wurde erfolgreich hinzugefügt.",
|
|
||||||
"success": "Das Team wurde erfolgreich aktualisiert.",
|
|
||||||
"addUser": "Zum Team hinzufügen",
|
|
||||||
"members": "Teammitglieder",
|
|
||||||
"title": "Team „{team}“ bearbeiten",
|
|
||||||
"deleteUser": {
|
|
||||||
"header": "Benutzer aus dem Team entfernen"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"success": "Das Team wurde erfolgreich erstellt.",
|
|
||||||
"title": "Ein neues Team erstellen"
|
|
||||||
},
|
|
||||||
"title": "Teams",
|
|
||||||
"attributes": {
|
|
||||||
"description": "Beschreibung",
|
|
||||||
"descriptionPlaceholder": "Die Beschreibung des Teams steht hier …",
|
|
||||||
"member": "Mitglied",
|
|
||||||
"admin": "Admin",
|
|
||||||
"name": "Teamname",
|
|
||||||
"namePlaceholder": "Der Name des Teams steht hier …"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"namespace": {
|
|
||||||
"create": {
|
|
||||||
"explanation": "Ein Namensraum ist eine Sammlung von Listen, die man teilen und verwenden kann, um seine Listen zu organisieren. Tatsächlich gehört jede Liste zu einem Namensraum.",
|
|
||||||
"success": "Der Namensraum wurde erfolgreich angelegt.",
|
|
||||||
"tooltip": "Was ist ein Namensraum?",
|
|
||||||
"title": "Einen neuen Namensraum erstellen"
|
|
||||||
},
|
|
||||||
"attributes": {
|
|
||||||
"isArchived": "Dieser Namensraum wird archiviert",
|
|
||||||
"archived": "Ist archiviert",
|
|
||||||
"color": "Farbe",
|
|
||||||
"descriptionPlaceholder": "Die Beschreibung des Namensraums steht hier …",
|
|
||||||
"description": "Beschreibung",
|
|
||||||
"titlePlaceholder": "Der Titel des Namensraums steht hier …",
|
|
||||||
"title": "Namensraumtitel"
|
|
||||||
},
|
|
||||||
"share": {
|
|
||||||
"title": "„{namespace}“ teilen"
|
|
||||||
},
|
|
||||||
"edit": {
|
|
||||||
"success": "Der Namensraum wurde erfolgreich aktualisiert.",
|
|
||||||
"title": "„{namespace}“ bearbeiten"
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"success": "Der Namensraum wurde erfolgreich gelöscht.",
|
|
||||||
"text2": "Dies umfasst alle Listen und Aufgaben und kann NICHT rückgängig gemacht werden!",
|
|
||||||
"title": "„{namespace}“ löschen"
|
|
||||||
},
|
|
||||||
"archive": {
|
|
||||||
"description": "Wenn ein Namensraum archiviert ist, kann man keine neuen Listen erstellen oder ihn bearbeiten.",
|
|
||||||
"success": "Der Namensraum wurde erfolgreich archiviert.",
|
|
||||||
"titleUnarchive": "Archivierung von „{namespace}“ aufheben",
|
|
||||||
"titleArchive": "„{namespace}“ archivieren"
|
|
||||||
},
|
|
||||||
"noLists": "Dieser Namensraum enthält keine Listen.",
|
|
||||||
"title": "Namensräume & Listen",
|
|
||||||
"unarchive": "Archivierung aufheben",
|
|
||||||
"archived": "Archiviert",
|
|
||||||
"showArchived": "Archivierte anzeigen"
|
|
||||||
},
|
|
||||||
"list": {
|
|
||||||
"kanban": {
|
|
||||||
"bucketTitleSavedSuccess": "Der Eimertitel wurde erfolgreich gespeichert.",
|
|
||||||
"deleteBucketSuccess": "Der Eimer wurde erfolgreich gelöscht.",
|
|
||||||
"deleteBucketText2": "Dies löscht keine Aufgaben, sondern verschiebt sie in den Standard-Eimer.",
|
|
||||||
"deleteHeaderBucket": "Den Eimer löschen",
|
|
||||||
"addBucket": "Einen neuen Eimer erstellen",
|
|
||||||
"addAnotherTask": "Weitere Aufgabe hinzufügen",
|
|
||||||
"addTask": "Eine Aufgabe hinzufügen",
|
|
||||||
"doneBucket": "Erledigte-Dinge-Eimer",
|
|
||||||
"noLimit": "Nicht eingestellt"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"columns": "Spalten",
|
|
||||||
"title": "Tabelle"
|
|
||||||
},
|
|
||||||
"gantt": {
|
|
||||||
"to": "An",
|
|
||||||
"from": "Von",
|
|
||||||
"day": "Tag",
|
|
||||||
"month": "Monat",
|
|
||||||
"default": "Standard",
|
|
||||||
"size": "Größe",
|
|
||||||
"showTasksWithoutDates": "Aufgaben anzeigen, für die keine Termine festgelegt sind",
|
|
||||||
"title": "Gantt"
|
|
||||||
},
|
|
||||||
"list": {
|
|
||||||
"empty": "Diese Liste ist derzeit leer.",
|
|
||||||
"addPlaceholder": "Eine neue Aufgabe hinzufügen …",
|
|
||||||
"add": "Hinzufügen",
|
|
||||||
"title": "Liste"
|
|
||||||
},
|
|
||||||
"share": {
|
|
||||||
"title": "„{Liste}“ teilen",
|
|
||||||
"header": "Diese Liste teilen"
|
|
||||||
},
|
|
||||||
"edit": {
|
|
||||||
"success": "Die Liste wurde erfolgreich aktualisiert.",
|
|
||||||
"color": "Farbe",
|
|
||||||
"descriptionPlaceholder": "Die Listenbeschreibung geht hier …",
|
|
||||||
"description": "Beschreibung",
|
|
||||||
"identifierPlaceholder": "Der Listenbezeichner geht hier …",
|
|
||||||
"identifier": "Listebezeichner",
|
|
||||||
"identifierTooltip": "Der Listenbezeichner kann zur eindeutigen Identifizierung einer Aufgabe über Listen hinweg verwendet werden. Man kann ihn auf leer setzen, um ihn zu deaktivieren.",
|
|
||||||
"titlePlaceholder": "Der Titel der Liste steht hier …",
|
|
||||||
"title": "„{list}“ bearbeiten",
|
|
||||||
"header": "Diese Liste bearbeiten"
|
|
||||||
},
|
|
||||||
"duplicate": {
|
|
||||||
"success": "Die Liste wurde erfolgreich dupliziert.",
|
|
||||||
"label": "Duplizieren",
|
|
||||||
"title": "Diese Liste duplizieren"
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"success": "Die Liste wurde erfolgreich gelöscht.",
|
|
||||||
"text2": "Dies umfasst alle Aufgaben und kann NICHT rückgängig gemacht werden!",
|
|
||||||
"header": "Diese Liste löschen",
|
|
||||||
"title": "„{list}“ löschen"
|
|
||||||
},
|
|
||||||
"background": {
|
|
||||||
"removeSuccess": "Der Hintergrund ist erfolgreich entfernt worden!",
|
|
||||||
"success": "Der Hintergrund ist erfolgreich eingestellt worden!",
|
|
||||||
"loadMore": "Mehr Fotos laden",
|
|
||||||
"poweredByUnsplash": "Angetrieben von Unsplash",
|
|
||||||
"searchPlaceholder": "Nach einem Hintergrund suchen …",
|
|
||||||
"remove": "Hintergrund entfernen",
|
|
||||||
"title": "Listenhintergrund festlegen"
|
|
||||||
},
|
|
||||||
"archive": {
|
|
||||||
"success": "Die Liste wurde erfolgreich archiviert.",
|
|
||||||
"unarchive": "Archivierung dieser Liste aufheben",
|
|
||||||
"archive": "Diese Liste archivieren",
|
|
||||||
"title": "„{Liste}“ archivieren"
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"createdSuccess": "Die Liste wurde erfolgreich erstellt.",
|
|
||||||
"titlePlaceholder": "Der Titel der Liste steht hier …",
|
|
||||||
"header": "Eine neue Liste erstellen"
|
|
||||||
},
|
|
||||||
"color": "Farbe"
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"settings": {
|
|
||||||
"caldav": {
|
|
||||||
"title": "Caldav"
|
|
||||||
},
|
|
||||||
"totp": {
|
|
||||||
"disableSuccess": "Die Zwei-Faktor-Authentifizierung wurde erfolgreich deaktiviert.",
|
|
||||||
"passcode": "Passcode",
|
|
||||||
"enroll": "Einschreiben",
|
|
||||||
"title": "Zwei-Faktor-Authentifizierung"
|
|
||||||
},
|
|
||||||
"general": {
|
|
||||||
"weekStartMonday": "Montag",
|
|
||||||
"weekStartSunday": "Sonntag",
|
|
||||||
"weekStart": "Woche beginnt am",
|
|
||||||
"playSoundWhenDone": "Einen Ton abspielen, wenn Aufgaben als erledigt markiert werden",
|
|
||||||
"discoverableByEmail": "Andere Benutzer mich finden lassen, wenn sie nach meiner vollständigen E-Mail suchen",
|
|
||||||
"discoverableByName": "Andere Benutzer mich finden lassen, wenn sie nach meinem Namen suchen",
|
|
||||||
"overdueReminders": "Mir jeden Morgen Erinnerungen für überfällige unerledigte Aufgaben per E-Mail senden",
|
|
||||||
"emailReminders": "Mir Erinnerungen für Aufgaben per E-Mail senden",
|
|
||||||
"savedSuccess": "Die Einstellungen wurden erfolgreich aktualisiert.",
|
|
||||||
"newName": "Der neue Name",
|
|
||||||
"name": "Name",
|
|
||||||
"title": "Allgemeine Einstellungen"
|
|
||||||
},
|
|
||||||
"updateEmailNew": "Neue E-Mail-Adresse",
|
|
||||||
"passwordUpdateSuccess": "Das Passwort wurde erfolgreich aktualisiert.",
|
|
||||||
"passwordsDontMatch": "Das neue Passwort und seine Bestätigung stimmen nicht überein.",
|
|
||||||
"currentPassword": "Aktuelles Passwort",
|
|
||||||
"newPasswordConfirm": "Neue Passwortbestätigung",
|
|
||||||
"newPassword": "Neues Passwort",
|
|
||||||
"title": "Einstellungen"
|
|
||||||
},
|
|
||||||
"auth": {
|
|
||||||
"openIdStateError": "Zustand stimmt nicht überein, weigert sich fortzufahren!",
|
|
||||||
"authenticating": "Authentifizierung …",
|
|
||||||
"loginWith": "Mit {provider} anmelden",
|
|
||||||
"register": "Registrieren",
|
|
||||||
"login": "Anmelden",
|
|
||||||
"totpPlaceholder": "z.B. 123456",
|
|
||||||
"totpTitle": "Zwei-Faktor-Authentifizierungscode",
|
|
||||||
"passwordsDontMatch": "Passwörter stimmen nicht überein",
|
|
||||||
"passwordPlaceholder": "z.B. •••••••••••",
|
|
||||||
"password": "Passwort",
|
|
||||||
"emailPlaceholder": "z.B. frederic@vikunja.io",
|
|
||||||
"email": "E-Mail-Adresse",
|
|
||||||
"usernamePlaceholder": "z.B. frederick",
|
|
||||||
"usernameEmail": "Benutzername oder E-Mail-Adresse",
|
|
||||||
"username": "Benutzername"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home": {
|
|
||||||
"list": {
|
|
||||||
"new": "Eine neue Liste erstellen"
|
|
||||||
},
|
|
||||||
"welcome": "Hallo {username}"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
|
@ -14,7 +14,10 @@ export const i18n = new VueI18n({
|
||||||
|
|
||||||
export const availableLanguages = {
|
export const availableLanguages = {
|
||||||
en: 'English',
|
en: 'English',
|
||||||
de: 'Deutsch',
|
'de-DE': 'Deutsch',
|
||||||
|
'de-swiss': 'Schwizertütsch',
|
||||||
|
'ru-RU': 'Русский',
|
||||||
|
'fr-FR': 'Français',
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadedLanguages = ['en'] // our default language that is preloaded
|
const loadedLanguages = ['en'] // our default language that is preloaded
|
||||||
|
@ -48,18 +51,16 @@ export const loadLanguageAsync = lang => {
|
||||||
|
|
||||||
export const getCurrentLanguage = () => {
|
export const getCurrentLanguage = () => {
|
||||||
const savedLanguage = localStorage.getItem('language')
|
const savedLanguage = localStorage.getItem('language')
|
||||||
if(savedLanguage !== null) {
|
if (savedLanguage !== null) {
|
||||||
return savedLanguage
|
return savedLanguage
|
||||||
}
|
}
|
||||||
|
|
||||||
let browserLanguage = navigator.language || navigator.userLanguage
|
let browserLanguage = navigator.language || navigator.userLanguage
|
||||||
|
|
||||||
if (browserLanguage.startsWith('en-')) {
|
for (let k in availableLanguages) {
|
||||||
browserLanguage = 'en'
|
if (browserLanguage[k] === browserLanguage || k.startsWith(browserLanguage + '-')) {
|
||||||
}
|
return k
|
||||||
|
}
|
||||||
if (typeof availableLanguages[browserLanguage] !== 'undefined') {
|
|
||||||
return browserLanguage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'en'
|
return 'en'
|
||||||
|
|
|
@ -71,8 +71,8 @@
|
||||||
{{ $t('user.settings.general.language') }}
|
{{ $t('user.settings.general.language') }}
|
||||||
</span>
|
</span>
|
||||||
<div class="select ml-2">
|
<div class="select ml-2">
|
||||||
<select v-model.number="language">
|
<select v-model="language">
|
||||||
<option :value="l" v-for="(lang, l) in availableLanguages" :key="l">{{ lang }}</option>
|
<option :value="lang.code" v-for="lang in availableLanguages" :key="lang.code">{{ lang.title }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
@ -288,7 +288,7 @@ import TotpService from '../../services/totp'
|
||||||
import UserSettingsService from '../../services/userSettings'
|
import UserSettingsService from '../../services/userSettings'
|
||||||
import UserSettingsModel from '../../models/userSettings'
|
import UserSettingsModel from '../../models/userSettings'
|
||||||
import {playSoundWhenDoneKey} from '@/helpers/playPop'
|
import {playSoundWhenDoneKey} from '@/helpers/playPop'
|
||||||
import {availableLanguages, saveLanguage, getCurrentLanguage} from '@/i18n/setup'
|
import {availableLanguages, saveLanguage, getCurrentLanguage} from '../../i18n/setup'
|
||||||
|
|
||||||
import {mapState} from 'vuex'
|
import {mapState} from 'vuex'
|
||||||
|
|
||||||
|
@ -367,7 +367,9 @@ export default {
|
||||||
return `${apiBase}/dav/principals/${this.userInfo.username}/`
|
return `${apiBase}/dav/principals/${this.userInfo.username}/`
|
||||||
},
|
},
|
||||||
availableLanguages() {
|
availableLanguages() {
|
||||||
return availableLanguages
|
return Object.entries(availableLanguages)
|
||||||
|
.map(l => ({code: l[0], title: l[1]}))
|
||||||
|
.sort((a, b) => a.title > b.title)
|
||||||
},
|
},
|
||||||
...mapState({
|
...mapState({
|
||||||
totpEnabled: state => state.config.totpEnabled,
|
totpEnabled: state => state.config.totpEnabled,
|
||||||
|
|
Loading…
Reference in a new issue