From 08c85bb4f1cdc4a4419e370c00d5ff1d5fec012a Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Fri, 21 Oct 2022 08:33:08 +0000 Subject: [PATCH] fix translation using gettextInterpolate(), fixes #1062 Closes #1062 Merge request studip/studip!1099 --- .../javascripts/bootstrap/mvv_difflog.js | 22 +++++++++--- resources/vue/components/EditableList.vue | 2 +- .../vue/components/MyCoursesColorPicker.vue | 5 ++- .../courseware/CoursewareActionWidget.vue | 7 +++- .../CoursewareDashboardProgress.vue | 4 +-- .../courseware/CoursewareDefaultBlock.vue | 8 ++--- .../courseware/CoursewareDefaultContainer.vue | 23 +++++++++--- .../courseware/CoursewareManagerElement.vue | 30 ++++++++++++---- .../CoursewareManagerElementItem.vue | 12 +++++-- .../CoursewareStructuralElement.vue | 36 ++++++++++++++----- resources/vue/mixins/courseware/oermessage.js | 3 +- 11 files changed, 114 insertions(+), 38 deletions(-) diff --git a/resources/assets/javascripts/bootstrap/mvv_difflog.js b/resources/assets/javascripts/bootstrap/mvv_difflog.js index 0bcd4a41caf..f21c3680e6e 100644 --- a/resources/assets/javascripts/bootstrap/mvv_difflog.js +++ b/resources/assets/javascripts/bootstrap/mvv_difflog.js @@ -1,4 +1,4 @@ -import { $gettextInterpolate } from '../lib/gettext.js'; +import { $gettext, $gettextInterpolate } from '../lib/gettext.js'; STUDIP.domReady(() => { $('del.diffdel').each(function() { @@ -44,7 +44,10 @@ STUDIP.domReady(() => { senddata, function(data) { if (data) { - var info = $gettextInterpolate('Entfernt von %{user} am %{time}', data); + var info = $gettextInterpolate( + $gettext('Entfernt von %{user} am %{time}'), + data + ); del.attr('title', info); $('<del class="difflog"/>').text(` [${info}] `).insertAfter(del); } @@ -137,7 +140,10 @@ STUDIP.domReady(() => { senddata, function(data) { if (data) { - var info = $gettextInterpolate('Änderung durch %{user} am %{time}', data); + var info = $gettextInterpolate( + $gettext('Änderung durch %{user} am %{time}'), + data + ); ins.attr('title', info); $('<ins class="difflog"/>').text(` [${info}] `).insertAfter(ins); } @@ -169,7 +175,10 @@ STUDIP.domReady(() => { ); function onSuccess(data) { if (data) { - var info = $gettextInterpolate('Hinzugefügt von %{user} am %{time}', data); + var info = $gettextInterpolate( + $gettext('Hinzugefügt von %{user} am %{time}'), + data + ); curtable.attr('title', info); const log = $('<ins class="difflog"/>').text(` [${info}] `); const cell = $('<td/>').append(log); @@ -201,7 +210,10 @@ STUDIP.domReady(() => { ); function onSuccess(data) { if (data) { - var info = $gettextInterpolate('Entfernt von %{user} am %{time}', data); + var info = $gettextInterpolate( + $gettext('Entfernt von %{user} am %{time}'), + data + ); curtable.attr('title', info); const log = $('<del class="difflog"/>').text(` [${info}] `); const cell = $('<td/>').append(log); diff --git a/resources/vue/components/EditableList.vue b/resources/vue/components/EditableList.vue index 8b224227213..df1c6131b24 100644 --- a/resources/vue/components/EditableList.vue +++ b/resources/vue/components/EditableList.vue @@ -6,7 +6,7 @@ <studip-icon v-if="item.icon" :shape="item.icon" role="info" size="20" class="text-bottom" alt=""></studip-icon> <input v-if="name" type="hidden" :name="name + '[]'" :value="item.value"> <span>{{item.name}}</span> - <button v-if="item.deletable" @click.prevent="deleteItem(item)" :title="$gettextInterpolate('%{ name } löschen', {name: item.name})" class="undecorated"> + <button v-if="item.deletable" @click.prevent="deleteItem(item)" :title="$gettextInterpolate($gettext('%{ name } löschen'), {name: item.name})" class="undecorated"> <studip-icon shape="trash" role="clickable" size="20" class="text-bottom"></studip-icon> </button> </li> diff --git a/resources/vue/components/MyCoursesColorPicker.vue b/resources/vue/components/MyCoursesColorPicker.vue index ecf24a7ff93..f6d1d43a598 100644 --- a/resources/vue/components/MyCoursesColorPicker.vue +++ b/resources/vue/components/MyCoursesColorPicker.vue @@ -33,7 +33,10 @@ export default { return classes; }, getTitle (i, index) { - let title = this.$gettextInterpolate('Gruppe %{ group }', {group: i}); + let title = this.$gettextInterpolate( + this.$gettext('Gruppe %{ group }'), + {group: i} + ); if (this.course.group === index) { title += ' (' + this.$gettext('ausgewählt') + ')'; } diff --git a/resources/vue/components/courseware/CoursewareActionWidget.vue b/resources/vue/components/courseware/CoursewareActionWidget.vue index d165d784239..b01c77d000e 100644 --- a/resources/vue/components/courseware/CoursewareActionWidget.vue +++ b/resources/vue/components/courseware/CoursewareActionWidget.vue @@ -180,7 +180,12 @@ export default { async deleteElement() { await this.loadStructuralElement(this.currentId); if (this.blockedByAnotherUser) { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} die Seite bearbeitet.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ + info: this.$gettextInterpolate( + this.$gettext('Löschen nicht möglich, da %{blockingUserName} die Seite bearbeitet.'), + {blockingUserName: this.blockingUserName} + ) + }); return false; } diff --git a/resources/vue/components/courseware/CoursewareDashboardProgress.vue b/resources/vue/components/courseware/CoursewareDashboardProgress.vue index 36e4a510618..6594318a742 100644 --- a/resources/vue/components/courseware/CoursewareDashboardProgress.vue +++ b/resources/vue/components/courseware/CoursewareDashboardProgress.vue @@ -19,7 +19,7 @@ </a> </nav> <div v-if="selected" class="cw-dashboard-progress-chapter"> - <a :href="chapterUrl" :title="$gettextInterpolate('%{ pageTitle } öffnen', {pageTitle: selected.name})"> + <a :href="chapterUrl" :title="$gettextInterpolate($gettext('%{ pageTitle } öffnen'), {pageTitle: selected.name})"> <h1>{{ selected.name }}</h1> </a> <courseware-progress-circle @@ -42,7 +42,7 @@ @selectChapter="selectChapter" /> <div v-if="!children.length" class="cw-dashboard-empty-info"> - <courseware-companion-box + <courseware-companion-box mood="sad" :msgCompanion="$gettext('Diese Seite enthält keine darunter liegenden Seiten.')" /> diff --git a/resources/vue/components/courseware/CoursewareDefaultBlock.vue b/resources/vue/components/courseware/CoursewareDefaultBlock.vue index 5df64c99a5a..52d4926c497 100644 --- a/resources/vue/components/courseware/CoursewareDefaultBlock.vue +++ b/resources/vue/components/courseware/CoursewareDefaultBlock.vue @@ -7,7 +7,7 @@ <studip-icon v-if="blockedByAnotherUser" shape="lock-locked" /> <span>{{ blockTitle }}</span> <span v-if="blockedByAnotherUser" class="cw-default-block-blocker-warning"> - | {{ $gettextInterpolate('wird im Moment von %{ userName } bearbeitet', { userName: this.blockingUserName }) }} + | {{ $gettextInterpolate($gettext('wird im Moment von %{ userName } bearbeitet'), { userName: this.blockingUserName }) }} </span> <span v-if="!block.attributes.visible" class="cw-default-block-invisible-info"> @@ -261,7 +261,7 @@ export default { } if (this.blockedByAnotherUser) { - this.companionWarning({ info: this.$gettextInterpolate('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionWarning({ info: this.$gettextInterpolate(this.$gettext('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.'), {blockingUserName: this.blockingUserName}) }); this.displayFeature(false); this.$emit('closeEdit'); } @@ -288,7 +288,7 @@ export default { if (this.blockedByThisUser) { this.showDeleteDialog = true; } else { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} den Block bearbeitet.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ info: this.$gettextInterpolate(this.$gettext('Löschen nicht möglich, da %{blockingUserName} den Block bearbeitet.'), {blockingUserName: this.blockingUserName}) }); } } }, @@ -302,7 +302,7 @@ export default { async executeDelete() { await this.loadBlock({ id: this.block.id, options: { include: 'edit-blocker' } }); if (this.blockedByAnotherUser) { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ info: this.$gettextInterpolate(this.$gettext('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.'), {blockingUserName: this.blockingUserName}) }); return false; } const containerId = this.block.relationships.container.data.id; diff --git a/resources/vue/components/courseware/CoursewareDefaultContainer.vue b/resources/vue/components/courseware/CoursewareDefaultContainer.vue index 962febba6f3..9c7857fa93a 100644 --- a/resources/vue/components/courseware/CoursewareDefaultContainer.vue +++ b/resources/vue/components/courseware/CoursewareDefaultContainer.vue @@ -8,7 +8,7 @@ <studip-icon v-if="blockedByAnotherUser" shape="lock-locked" /> <span>{{ container.attributes.title }} ({{container.attributes.width}})</span> <span v-if="blockedByAnotherUser" class="cw-default-container-blocker-warning"> - | {{ $gettextInterpolate('wird im Moment von %{ userName } bearbeitet', { userName: this.blockingUserName }) }} + | {{ $gettextInterpolate($gettext('wird im Moment von %{ userName } bearbeitet'), { userName: this.blockingUserName }) }} </span> <courseware-container-actions :canEdit="canEdit" @@ -165,7 +165,12 @@ export default { this.$emit('storeContainer'); } if (this.blockedByAnotherUser) { - this.companionWarning({ info: this.$gettextInterpolate('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionWarning({ + info: this.$gettextInterpolate( + this.$gettext('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.'), + {blockingUserName: this.blockingUserName} + ) + }); this.$emit('closeEdit'); } if (this.blockerId === null) { @@ -183,7 +188,12 @@ export default { if (this.blockedByThisUser) { this.showDeleteDialog = true; } else { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} den Abschnitt bearbeitet.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ + info: this.$gettextInterpolate( + this.$gettext('Löschen nicht möglich, da %{blockingUserName} den Abschnitt bearbeitet.'), + {blockingUserName: this.blockingUserName} + ) + }); } } }, @@ -197,7 +207,12 @@ export default { async executeDelete() { await this.loadContainer({ id: this.container.id, options: { include: 'edit-blocker' } }); if (this.blockedByAnotherUser) { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ + info: this.$gettextInterpolate( + this.$gettext('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.'), + {blockingUserName: this.blockingUserName} + ) + }); return false; } await this.deleteContainer({ diff --git a/resources/vue/components/courseware/CoursewareManagerElement.vue b/resources/vue/components/courseware/CoursewareManagerElement.vue index 2bd892c2ed5..d6488303d85 100644 --- a/resources/vue/components/courseware/CoursewareManagerElement.vue +++ b/resources/vue/components/courseware/CoursewareManagerElement.vue @@ -243,9 +243,15 @@ export default { let title = this.elementName; if (this.elementInserterActive && this.moveSelfPossible && this.canEdit) { if (this.isRemote || this.isOwn) { - title = this.$gettextInterpolate('%{ elementTitle } kopieren', {elementTitle: this.elementName}); + title = this.$gettextInterpolate( + this.$gettext('%{ elementTitle } kopieren'), + {elementTitle: this.elementName} + ); } else { - title = this.$gettextInterpolate('%{ elementTitle } verschieben', {elementTitle: this.elementName}); + title = this.$gettextInterpolate( + this.$gettext('%{ elementTitle } verschieben'), + {elementTitle: this.elementName} + ); } } @@ -400,7 +406,10 @@ export default { elementId: element.id, migrate: false }).catch((error) => { - let message = this.$gettextInterpolate('%{ pageTitle } konnte nicht kopiert werden.', {pageTitle: element.attributes.title}); + let message = this.$gettextInterpolate( + this.$gettext('%{ pageTitle } konnte nicht kopiert werden.'), + {pageTitle: element.attributes.title} + ); this.text.copyProcessFailed.push(message); this.showFailedCopyProcessCompanion(); }); @@ -412,7 +421,10 @@ export default { parentId: parentId, elementId: element.id, }).catch((error) => { - let message = this.$gettextInterpolate('%{ pageTitle } konnte nicht verknüpft werden.', {pageTitle: element.attributes.title}); + let message = this.$gettextInterpolate( + this.$gettext('%{ pageTitle } konnte nicht verknüpft werden.'), + {pageTitle: element.attributes.title} + ); this.text.linkProcessFailed.push(message); this.showFailedLinkProcessCompanion(); }); @@ -449,7 +461,10 @@ export default { parentId: parentId, container: container, }).catch((error) => { - let message = this.$gettextInterpolate('Abschnitt "%{ containerTitle }" konnte nicht kopiert werden', {containerTitle: container.attributes.title}); + let message = this.$gettextInterpolate( + this.$gettext('Abschnitt "%{ containerTitle }" konnte nicht kopiert werden'), + {containerTitle: container.attributes.title} + ); this.text.copyProcessFailed.push(message); this.showFailedCopyProcessCompanion(); }); @@ -511,7 +526,10 @@ export default { parentId: parentId, block: block, }).catch((error) => { - let message = this.$gettextInterpolate('Block "%{ blockTitle }" konnte nicht kopiert werden', {blockTitle: block.attributes.title}); + let message = this.$gettextInterpolate( + this.$gettext('Block "%{ blockTitle }" konnte nicht kopiert werden'), + {blockTitle: block.attributes.title} + ); this.text.copyProcessFailed.push(message); this.showFailedCopyProcessCompanion(); }); diff --git a/resources/vue/components/courseware/CoursewareManagerElementItem.vue b/resources/vue/components/courseware/CoursewareManagerElementItem.vue index 1a8bac8c9b7..7b827d175cc 100644 --- a/resources/vue/components/courseware/CoursewareManagerElementItem.vue +++ b/resources/vue/components/courseware/CoursewareManagerElementItem.vue @@ -10,7 +10,7 @@ {{ element.attributes.title }} <span v-if="task" class="cw-manager-element-item-solver-name">| {{ solverName }}</span> </a> - <div + <div v-else class="cw-manager-element-item cw-manager-element-item-sorting" > @@ -87,9 +87,15 @@ export default { let title = this.element.attributes.title; if (this.inserter) { if (this.type === 'remote' || this.type === 'own') { - title = this.$gettextInterpolate('%{ elementTitle } kopieren', {elementTitle: this.element.attributes.title}); + title = this.$gettextInterpolate( + this.$gettext('%{ elementTitle } kopieren'), + {elementTitle: this.element.attributes.title} + ); } else { - title = this.$gettextInterpolate('%{ elementTitle } verschieben', {elementTitle: this.element.attributes.title}); + title = this.$gettextInterpolate( + this.$gettext('%{ elementTitle } verschieben'), + {elementTitle: this.element.attributes.title} + ); } } diff --git a/resources/vue/components/courseware/CoursewareStructuralElement.vue b/resources/vue/components/courseware/CoursewareStructuralElement.vue index bc8ae88437a..16018bc3437 100644 --- a/resources/vue/components/courseware/CoursewareStructuralElement.vue +++ b/resources/vue/components/courseware/CoursewareStructuralElement.vue @@ -78,7 +78,7 @@ <div v-if="structuralElementLoaded" class="cw-companion-box-wrapper"> <courseware-companion-box v-if="blockedByAnotherUser" - :msgCompanion="$gettextInterpolate('Die Einstellungen dieser Seite werden im Moment von %{blockingUserName} bearbeitet', {blockingUserName: blockingUserName})" + :msgCompanion="$gettextInterpolate($gettext('Die Einstellungen dieser Seite werden im Moment von %{blockingUserName} bearbeitet'), {blockingUserName: blockingUserName})" mood="pointing" > <template #companionActions> @@ -125,7 +125,7 @@ /> <courseware-companion-box v-if="editView" - :msgCompanion="$gettextInterpolate('Dieser Inhalt ist aus den persönlichen Lerninhalten von %{ ownerName } verlinkt und kann nur dort bearbeitet werden.', { ownerName: ownerName })" + :msgCompanion="$gettextInterpolate($gettext('Dieser Inhalt ist aus den persönlichen Lerninhalten von %{ ownerName } verlinkt und kann nur dort bearbeitet werden.'), { ownerName: ownerName })" mood="pointing" /> <component @@ -773,7 +773,7 @@ export default { textOer() { return { - title: this.$gettextInterpolate('Seite auf %{ oerTitle } veröffentlichen', {oerTitle: this.oerTitle}), + title: this.$gettextInterpolate(this.$gettext('Seite auf %{ oerTitle } veröffentlichen'), {oerTitle: this.oerTitle}), confirm: this.$gettext('Veröffentlichen'), close: this.$gettext('Schließen'), }; @@ -781,7 +781,7 @@ export default { textSuggestOer() { return { - title: this.$gettextInterpolate('Material für %{ oerTitle } vorschlagen', {oerTitle: this.oerTitle}), + title: this.$gettextInterpolate(this.$gettext('Material für %{ oerTitle } vorschlagen'), {oerTitle: this.oerTitle}), confirm: this.$gettext('Material vorschlagen'), close: this.$gettext('Schließen'), }; @@ -797,7 +797,10 @@ export default { textDelete.alert = this.$gettext('Möchten Sie die Seite wirklich löschen?'); if (this.structuralElementLoaded) { textDelete.alert = - this.$gettextInterpolate('Möchten Sie die Seite %{ pageTitle } und alle ihre Unterseiten wirklich löschen?', {pageTitle: this.structuralElement.attributes.title}); + this.$gettextInterpolate( + this.$gettext('Möchten Sie die Seite %{ pageTitle } und alle ihre Unterseiten wirklich löschen?'), + {pageTitle: this.structuralElement.attributes.title} + ); } return textDelete; @@ -957,7 +960,7 @@ export default { let menu = [ { id: 4, label: this.$gettext('Informationen anzeigen'), icon: 'info', emit: 'showInfo' }, { id: 5, label: this.$gettext('Lesezeichen setzen'), icon: 'star', emit: 'setBookmark' }, - { id: 6, label: this.$gettextInterpolate('Material für %{ oerTitle } vorschlagen', {oerTitle: this.oerTitle}), icon: 'oer-campus', emit: 'showSuggest' }, + { id: 6, label: this.$gettextInterpolate(this.$gettext('Material für %{ oerTitle } vorschlagen'), {oerTitle: this.oerTitle}), icon: 'oer-campus', emit: 'showSuggest' }, ]; if (this.canEdit) { @@ -1361,7 +1364,12 @@ export default { case 'deleteCurrentElement': await this.loadStructuralElement(this.currentId); if (this.blockedByAnotherUser) { - this.companionInfo({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} die Seite bearbeitet.', {blockingUserName: this.blockingUserName}) }); + this.companionInfo({ + info: this.$gettextInterpolate( + this.$gettext('Löschen nicht möglich, da %{blockingUserName} die Seite bearbeitet.'), + {blockingUserName: this.blockingUserName} + ) + }); return false; } @@ -1438,7 +1446,12 @@ export default { async storeCurrentElement() { await this.loadStructuralElement(this.currentElement.id); if (this.blockedByAnotherUser) { - this.companionWarning({ info: this.$gettextInterpolate('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionWarning({ + info: this.$gettextInterpolate( + this.$gettext('Ihre Änderungen konnten nicht gespeichert werden, da %{blockingUserName} die Bearbeitung übernommen hat.'), + {blockingUserName: this.blockingUserName} + ) + }); this.showElementEditDialog(false); return false; } @@ -1554,7 +1567,12 @@ export default { async deleteCurrentElement() { await this.loadStructuralElement(this.currentElement.id); if (this.blockedByAnotherUser) { - this.companionWarning({ info: this.$gettextInterpolate('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.', {blockingUserName: this.blockingUserName}) }); + this.companionWarning({ + info: this.$gettextInterpolate( + this.$gettext('Löschen nicht möglich, da %{blockingUserName} die Bearbeitung übernommen hat.'), + {blockingUserName: this.blockingUserName} + ) + }); this.showElementDeleteDialog(false); return false; } diff --git a/resources/vue/mixins/courseware/oermessage.js b/resources/vue/mixins/courseware/oermessage.js index ff50d1b0c71..f9c1b0010e4 100644 --- a/resources/vue/mixins/courseware/oermessage.js +++ b/resources/vue/mixins/courseware/oermessage.js @@ -13,9 +13,8 @@ export default { data: { text: text, }, - }).then( () => { - this.companionInfo({ info: this.$gettextInterpolate('Der Vorschlag wurde verschickt.') }); + this.companionInfo({ info: this.$gettext('Der Vorschlag wurde verschickt.') }); }); } -- GitLab