diff --git a/.gitignore b/.gitignore index 95fa32466..5d78d0226 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ dist coverage __coverage__ csak-timelog.json +.idea/ diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js index 219ae7b08..f9c59e37a 100644 --- a/src/renderer/components/ft-list-video/ft-list-video.js +++ b/src/renderer/components/ft-list-video/ft-list-video.js @@ -1,5 +1,6 @@ import Vue from 'vue' import FtIconButton from '../ft-icon-button/ft-icon-button.vue' +import { mapActions } from 'vuex' export default Vue.extend({ name: 'FtListVideo', @@ -213,7 +214,20 @@ export default Vue.extend({ this.viewCount = this.data.viewCount if (typeof (this.data.publishedText) !== 'undefined') { - this.uploadedTime = this.data.publishedText + // produces a string according to the template in the locales string + this.toLocalePublicationString({ + publishText: this.data.publishedText, + templateString: this.$t('Video.Publicationtemplate'), + timeStrings: this.$t('Video.Published'), + liveStreamString: this.$t('Video.Watching'), + upcomingString: this.$t('Video.Published.Upcoming'), + isLive: this.data.live, + isUpcoming: this.data.isUpcoming + }).then((data) => { + this.uploadedTime = data + }).catch((error) => { + console.error(error) + }) } if (typeof (this.data.viewCount) !== 'undefined' && this.data.viewCount !== null) { @@ -252,6 +266,19 @@ export default Vue.extend({ } if (typeof (this.data.uploaded_at) !== 'undefined') { + this.toLocalePublicationString({ + publishText: this.data.uploaded_at, + templateString: this.$t('Video.Publicationtemplate'), + timeStrings: this.$t('Video.Published'), + liveStreamString: this.$t('Video.Watching'), + upcomingString: this.$t('Video.Published.Upcoming'), + isLive: this.data.live, + isUpcoming: false + }).then((data) => { + this.uploadedTime = data + }).catch((error) => { + console.error(error) + }) this.uploadedTime = this.data.uploaded_at } @@ -265,6 +292,9 @@ export default Vue.extend({ } this.isLive = this.data.live - } + }, + ...mapActions([ + 'toLocalePublicationString' + ]) } }) diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js index 6e0931f8f..bef9726bf 100644 --- a/src/renderer/store/modules/utils.js +++ b/src/renderer/store/modules/utils.js @@ -166,6 +166,70 @@ const actions = { return vttString }, + toLocalePublicationString ({ dispatch }, payload) { + if (payload.isLive) { + return '0' + payload.liveStreamString + } else if (payload.isUpcoming || payload.publishText === null) { + // the check for null is currently just an inferring of knowledge, because there is no other possibility left + return payload.upcomingString + } + const strings = payload.publishText.split(' ') + const singular = (strings[0] === '1') + let publicationString = payload.templateString.replace('$', strings[0]) + switch (strings[1].substring(0, 2)) { + case 'se': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Second) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Seconds) + } + break + case 'mi': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Minute) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Minutes) + } + break + case 'ho': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Hour) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Hours) + } + break + case 'da': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Day) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Days) + } + break + case 'we': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Week) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Weeks) + } + break + case 'mo': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Month) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Months) + } + break + case 'ye': + if (singular) { + publicationString = publicationString.replace('%', payload.timeStrings.Year) + } else { + publicationString = publicationString.replace('%', payload.timeStrings.Years) + } + break + } + return publicationString + }, + showToast (_, payload) { FtToastEvents.$emit('toast.open', payload.message, payload.action, payload.time) } diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml index 1f1777923..50c917add 100644 --- a/static/locales/de-DE.yaml +++ b/static/locales/de-DE.yaml @@ -305,18 +305,23 @@ Video: Oct: Okt Nov: Nov Dec: Dez + Second: Sekunde + Seconds: Sekunden Hour: Stunde Hours: Stunden Day: Tag - Days: Tage + Days: Tagen Week: Woche Weeks: Wochen Month: Monat - Months: Monate + Months: Monaten Year: Jahr - Years: Jahre + Years: Jahren Ago: Vor + Upcoming: Premiere bald Published on: Veröffentlicht am + Publicationtemplate: vor $ % veröffentlicht + #& Videos Videos: #& Sort By diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml index b5ef87857..ad60dcc20 100644 --- a/static/locales/en-US.yaml +++ b/static/locales/en-US.yaml @@ -297,6 +297,8 @@ Video: Oct: Oct Nov: Nov Dec: Dec + Second: Second + Seconds: Seconds Hour: Hour Hours: Hours Day: Day @@ -308,7 +310,10 @@ Video: Year: Year Years: Years Ago: Ago + Upcoming: Premieres soon Published on: Published on + # $ is replaced with the number and % with the unit (days, hours, minutes...) + Publicationtemplate: $ % ago #& Videos Videos: #& Sort By diff --git a/static/locales/pt-PT.yaml b/static/locales/pt-PT.yaml index f25ad840d..4f2cbc132 100644 --- a/static/locales/pt-PT.yaml +++ b/static/locales/pt-PT.yaml @@ -302,6 +302,10 @@ Video: Oct: Out Nov: Nov Dec: Dez + # ! + Second: Second + # ! + Seconds: Seconds Hour: Hora Hours: Horas Day: Dia @@ -313,7 +317,12 @@ Video: Year: Ano Years: Anos Ago: Há + # ! + Upcoming: Premieres soon Published on: Publicado em + # ! + # $ is replaced with the number and % with the unit (days, hours, minutes...) + Publicationtemplate: $ % ago #& Videos Videos: #& Sort By