From 9679aec73986d5349b0c29535d4e056271bee734 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 11 Jul 2024 15:42:12 +0200 Subject: [PATCH 001/136] Moderation delay: fix accessibility on the timer shown to moderators. --- CHANGELOG.md | 6 ++++++ conversejs/lib/plugins/moderation-delay.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc064151..ac5241e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## ??? (Not Released Yet) + +### Minor changes and fixes + +* Moderation delay: fix accessibility on the timer shown to moderators. + ## 10.3.0 ### New features diff --git a/conversejs/lib/plugins/moderation-delay.ts b/conversejs/lib/plugins/moderation-delay.ts index 70945adc..d8c6bfc7 100644 --- a/conversejs/lib/plugins/moderation-delay.ts +++ b/conversejs/lib/plugins/moderation-delay.ts @@ -42,7 +42,7 @@ export const moderationDelayPlugin = { // Ok... We will add some info about how many remains... r.pretty_time = window.converse.env.html` - ${r.pretty_time} - ${Math.round(remains)}⏱ + ${r.pretty_time} ` // and we must update in 1 second... setTimeout(() => this.requestUpdate(), 1000) From 51b603c8946f8c9a3901e3adfb87fa618259862c Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 11 Jul 2024 17:53:50 +0200 Subject: [PATCH 002/136] Switch from Converse v10.1.6 to upstream (unreleased v11): * various WIP to change the Converse version --- conversejs/build-conversejs.sh | 10 +++++----- conversejs/custom/index.js | 2 +- conversejs/custom/livechat-external-login-content.js | 2 +- .../custom/plugins/poll/components/poll-form-view.js | 2 +- conversejs/custom/plugins/poll/components/poll-view.js | 2 +- conversejs/custom/plugins/poll/index.js | 2 +- conversejs/custom/plugins/poll/modals/poll-form.js | 2 +- conversejs/custom/plugins/poll/templates/poll.js | 2 +- conversejs/custom/plugins/poll/utils.js | 2 +- conversejs/custom/plugins/size/index.js | 2 +- .../plugins/tasks/components/muc-task-app-view.js | 2 +- .../plugins/tasks/components/muc-task-list-view.js | 2 +- .../plugins/tasks/components/muc-task-lists-view.js | 2 +- .../custom/plugins/tasks/components/muc-task-view.js | 2 +- conversejs/custom/plugins/tasks/index.js | 2 +- .../custom/plugins/tasks/modals/pick-task-list.js | 2 +- conversejs/custom/plugins/tasks/utils.js | 2 +- .../custom/plugins/terms/components/muc-terms.js | 2 +- conversejs/custom/plugins/terms/index.js | 2 +- conversejs/custom/shared/lib/pubsub-manager.js | 6 +++--- .../custom/shared/modals/livechat-external-login.js | 2 +- conversejs/custom/templates/background_logo.js | 2 +- .../custom/templates/livechat-external-login-modal.js | 2 +- conversejs/custom/templates/muc-bottom-panel.js | 2 +- conversejs/custom/templates/muc-chatarea.js | 2 +- conversejs/custom/templates/muc-head.js | 2 +- conversejs/lib/converse-params.ts | 1 + conversejs/lib/plugins/livechat-specific.ts | 5 +++++ 28 files changed, 38 insertions(+), 32 deletions(-) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 239c2918..84b7b860 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -15,10 +15,10 @@ set -x # Set CONVERSE_VERSION and CONVERSE_REPO to select which repo and tag/commit/branch use. # Defaults values: -CONVERSE_VERSION="v10.1.6" +CONVERSE_VERSION="v11.0.0" CONVERSE_REPO="https://github.com/conversejs/converse.js.git" # You can eventually set CONVERSE_COMMIT to a specific commit ID, if you want to apply some patches. -CONVERSE_COMMIT="" +CONVERSE_COMMIT="ef86863cbd983f0c2de6c3b81105800bcbb804d4" # 2014-01-16: we are using a custom version, to wait for some PR to be apply upstream. # This version includes following changes: @@ -38,9 +38,9 @@ CONVERSE_COMMIT="" # - New config option [colorize_username](https://conversejs.org/docs/html/configuration.html#colorize_username) # - New loadEmojis hook, to customize emojis at runtime. # - Fix custom emojis path when assets_path is not the default path. -CONVERSE_VERSION="livechat-10.1.0" -# CONVERSE_COMMIT="4402fcc3fc60f6c9334f86528c33a0b463371d12" -CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" +# CONVERSE_VERSION="livechat-10.1.0" +# # CONVERSE_COMMIT="4402fcc3fc60f6c9334f86528c33a0b463371d12" +# CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" rootdir="$(pwd)" src_dir="$rootdir/conversejs" diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 51d352c5..00dbc0c6 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -13,7 +13,7 @@ import './i18n/index.js' import 'shared/registry.js' import { CustomElement } from 'shared/components/element' import { VIEW_PLUGINS } from './shared/constants.js' -import { _converse, converse } from '@converse/headless/core' +import { _converse, converse } from '@converse/headless' import 'shared/styles/index.scss' diff --git a/conversejs/custom/livechat-external-login-content.js b/conversejs/custom/livechat-external-login-content.js index 10f4b099..5bca5b5c 100644 --- a/conversejs/custom/livechat-external-login-content.js +++ b/conversejs/custom/livechat-external-login-content.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { api } from '@converse/headless/core.js' +import { api } from '@converse/headless/index.js' import { CustomElement } from 'shared/components/element.js' import { tplExternalLoginModal } from 'templates/livechat-external-login-modal.js' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/poll/components/poll-form-view.js b/conversejs/custom/plugins/poll/components/poll-form-view.js index a0fba934..8d2f4b12 100644 --- a/conversejs/custom/plugins/poll/components/poll-form-view.js +++ b/conversejs/custom/plugins/poll/components/poll-form-view.js @@ -4,7 +4,7 @@ import { XMLNS_POLL } from '../constants.js' import { tplPollForm } from '../templates/poll-form.js' import { CustomElement } from 'shared/components/element.js' -import { converse, api } from '@converse/headless/core' +import { converse, api } from '@converse/headless' import { webForm2xForm } from '@converse/headless/utils/form' import { __ } from 'i18n' import '../styles/poll-form.scss' diff --git a/conversejs/custom/plugins/poll/components/poll-view.js b/conversejs/custom/plugins/poll/components/poll-view.js index 9973aa99..a51c5d02 100644 --- a/conversejs/custom/plugins/poll/components/poll-view.js +++ b/conversejs/custom/plugins/poll/components/poll-view.js @@ -4,7 +4,7 @@ import { tplPoll } from '../templates/poll.js' import { CustomElement } from 'shared/components/element.js' -import { converse, _converse, api } from '@converse/headless/core' +import { converse, _converse, api } from '@converse/headless' import '../styles/poll.scss' export default class MUCPollView extends CustomElement { diff --git a/conversejs/custom/plugins/poll/index.js b/conversejs/custom/plugins/poll/index.js index d7e94b0c..749b4891 100644 --- a/conversejs/custom/plugins/poll/index.js +++ b/conversejs/custom/plugins/poll/index.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { _converse, converse } from '../../../src/headless/core.js' +import { _converse, converse } from '../../../src/headless/index.js' import { getHeadingButtons } from './utils.js' import { POLL_MESSAGE_TAG, POLL_QUESTION_TAG, POLL_CHOICE_TAG } from './constants.js' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/poll/modals/poll-form.js b/conversejs/custom/plugins/poll/modals/poll-form.js index f56bb9c3..7d51eb05 100644 --- a/conversejs/custom/plugins/poll/modals/poll-form.js +++ b/conversejs/custom/plugins/poll/modals/poll-form.js @@ -4,7 +4,7 @@ import { __ } from 'i18n' import BaseModal from 'plugins/modal/modal.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { modal_close_button as ModalCloseButton } from 'plugins/modal/templates/buttons.js' import { html } from 'lit' diff --git a/conversejs/custom/plugins/poll/templates/poll.js b/conversejs/custom/plugins/poll/templates/poll.js index f1b61144..b95b1368 100644 --- a/conversejs/custom/plugins/poll/templates/poll.js +++ b/conversejs/custom/plugins/poll/templates/poll.js @@ -63,7 +63,7 @@ function _tplChoice (el, currentPoll, choice, canVote) {

diff --git a/conversejs/custom/plugins/poll/utils.js b/conversejs/custom/plugins/poll/utils.js index 9a4a3812..ecb4266d 100644 --- a/conversejs/custom/plugins/poll/utils.js +++ b/conversejs/custom/plugins/poll/utils.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { XMLNS_POLL } from './constants.js' -import { _converse, api } from '../../../src/headless/core.js' +import { _converse, api } from '../../../src/headless/index.js' import { __ } from 'i18n' export function getHeadingButtons (view, buttons) { diff --git a/conversejs/custom/plugins/size/index.js b/conversejs/custom/plugins/size/index.js index 7732002e..d02ce408 100644 --- a/conversejs/custom/plugins/size/index.js +++ b/conversejs/custom/plugins/size/index.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { _converse, converse, api } from '../../../src/headless/core.js' +import { _converse, converse, api } from '../../../src/headless/index.js' /** * This plugin computes the available width of converse-root, and adds classes diff --git a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js index 155b75a2..32e3c7ce 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { CustomElement } from 'shared/components/element.js' import { tplMUCTaskApp } from '../templates/muc-task-app.js' diff --git a/conversejs/custom/plugins/tasks/components/muc-task-list-view.js b/conversejs/custom/plugins/tasks/components/muc-task-list-view.js index 3f97abfd..8688468c 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-list-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-list-view.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { CustomElement } from 'shared/components/element.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import tplMucTaskList from '../templates/muc-task-list' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js b/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js index c4429827..7c0df41c 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { CustomElement } from 'shared/components/element.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import tplMucTaskLists from '../templates/muc-task-lists' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/tasks/components/muc-task-view.js b/conversejs/custom/plugins/tasks/components/muc-task-view.js index 1d02af85..db7bfdda 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-view.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { CustomElement } from 'shared/components/element.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { tplMucTask } from '../templates/muc-task' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/tasks/index.js b/conversejs/custom/plugins/tasks/index.js index 50b6afd7..37cfd1c3 100644 --- a/conversejs/custom/plugins/tasks/index.js +++ b/conversejs/custom/plugins/tasks/index.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { _converse, converse } from '../../../src/headless/core.js' +import { _converse, converse } from '../../../src/headless/index.js' import { ChatRoomTaskLists } from './task-lists.js' import { ChatRoomTaskList } from './task-list.js' import { ChatRoomTasks } from './tasks.js' diff --git a/conversejs/custom/plugins/tasks/modals/pick-task-list.js b/conversejs/custom/plugins/tasks/modals/pick-task-list.js index 7258bd33..1c5e1701 100644 --- a/conversejs/custom/plugins/tasks/modals/pick-task-list.js +++ b/conversejs/custom/plugins/tasks/modals/pick-task-list.js @@ -4,7 +4,7 @@ import BaseModal from 'plugins/modal/modal.js' import tplPickTaskList from './templates/pick-task-list.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { __ } from 'i18n' export default class PickTaskListModal extends BaseModal { diff --git a/conversejs/custom/plugins/tasks/utils.js b/conversejs/custom/plugins/tasks/utils.js index 8406412d..65700a5e 100644 --- a/conversejs/custom/plugins/tasks/utils.js +++ b/conversejs/custom/plugins/tasks/utils.js @@ -4,7 +4,7 @@ import { XMLNS_TASKLIST, XMLNS_TASK } from './constants.js' import { PubSubManager } from '../../shared/lib/pubsub-manager.js' -import { converse, _converse, api } from '../../../src/headless/core.js' +import { converse, _converse, api } from '../../../src/headless/index.js' import { __ } from 'i18n' export function getHeadingButtons (view, buttons) { diff --git a/conversejs/custom/plugins/terms/components/muc-terms.js b/conversejs/custom/plugins/terms/components/muc-terms.js index ac57d74a..b133e64b 100644 --- a/conversejs/custom/plugins/terms/components/muc-terms.js +++ b/conversejs/custom/plugins/terms/components/muc-terms.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { CustomElement } from 'shared/components/element.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { html } from 'lit' import { __ } from 'i18n' diff --git a/conversejs/custom/plugins/terms/index.js b/conversejs/custom/plugins/terms/index.js index 8459cd82..95d25b61 100644 --- a/conversejs/custom/plugins/terms/index.js +++ b/conversejs/custom/plugins/terms/index.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { converse, api } from '../../../src/headless/core.js' +import { converse, api } from '../../../src/headless/index.js' import './components/muc-terms.js' const { sizzle } = converse.env diff --git a/conversejs/custom/shared/lib/pubsub-manager.js b/conversejs/custom/shared/lib/pubsub-manager.js index ceabf378..51a4e13b 100644 --- a/conversejs/custom/shared/lib/pubsub-manager.js +++ b/conversejs/custom/shared/lib/pubsub-manager.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { converse, _converse, api } from '../../../src/headless/core.js' +import { converse, _converse, api } from '../../../src/headless/index.js' const { $build, Strophe, $iq, sizzle } = converse.env /** @@ -50,7 +50,7 @@ export class PubSubManager { async start () { // FIXME: handle errors. Find a way to display to user that this failed. - this.stanzaHandler = _converse.connection.addHandler( + this.stanzaHandler = api.connection.get().addHandler( (message) => { try { this._handleMessage(message) @@ -79,7 +79,7 @@ export class PubSubManager { // Note: no need to unsubscribe from the pubsub node, the backend will do when users leave the room. if (this.stanzaHandler) { - _converse.connection.deleteHandler(this.stanzaHandler) + api.connection.get().deleteHandler(this.stanzaHandler) this.stanzaHandler = undefined } } diff --git a/conversejs/custom/shared/modals/livechat-external-login.js b/conversejs/custom/shared/modals/livechat-external-login.js index b0accf00..edbbfa30 100644 --- a/conversejs/custom/shared/modals/livechat-external-login.js +++ b/conversejs/custom/shared/modals/livechat-external-login.js @@ -4,7 +4,7 @@ import { __ } from 'i18n' import BaseModal from 'plugins/modal/modal.js' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { html } from 'lit' import 'livechat-external-login-content.js' diff --git a/conversejs/custom/templates/background_logo.js b/conversejs/custom/templates/background_logo.js index 585de358..4548f2a5 100644 --- a/conversejs/custom/templates/background_logo.js +++ b/conversejs/custom/templates/background_logo.js @@ -5,7 +5,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { html } from 'lit' -import { api } from '@converse/headless/core.js' +import { api } from '@converse/headless/index.js' export default () => html`

diff --git a/conversejs/custom/templates/livechat-external-login-modal.js b/conversejs/custom/templates/livechat-external-login-modal.js index a8cbca95..52e33027 100644 --- a/conversejs/custom/templates/livechat-external-login-modal.js +++ b/conversejs/custom/templates/livechat-external-login-modal.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { _converse, api } from '@converse/headless/core' +import { _converse, api } from '@converse/headless' import { __ } from 'i18n' import { html } from 'lit' diff --git a/conversejs/custom/templates/muc-bottom-panel.js b/conversejs/custom/templates/muc-bottom-panel.js index cfac6d2c..cf70e064 100644 --- a/conversejs/custom/templates/muc-bottom-panel.js +++ b/conversejs/custom/templates/muc-bottom-panel.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { __ } from 'i18n' -import { _converse, api } from '@converse/headless/core' +import { _converse, api } from '@converse/headless' import { html } from 'lit' import tplMucBottomPanel from '../../src/plugins/muc-views/templates/muc-bottom-panel.js' import { CustomElement } from 'shared/components/element.js' diff --git a/conversejs/custom/templates/muc-chatarea.js b/conversejs/custom/templates/muc-chatarea.js index 726e8fd5..d709ca56 100644 --- a/conversejs/custom/templates/muc-chatarea.js +++ b/conversejs/custom/templates/muc-chatarea.js @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import tplMUCChatarea from '../../src/plugins/muc-views/templates/muc-chatarea.js' import { html } from 'lit' diff --git a/conversejs/custom/templates/muc-head.js b/conversejs/custom/templates/muc-head.js index d926ed32..ebd1ef7a 100644 --- a/conversejs/custom/templates/muc-head.js +++ b/conversejs/custom/templates/muc-head.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { html } from 'lit' -import { api } from '@converse/headless/core' +import { api } from '@converse/headless' import { until } from 'lit/directives/until.js' import { repeat } from 'lit/directives/repeat.js' import { unsafeHTML } from 'lit/directives/unsafe-html.js' diff --git a/conversejs/lib/converse-params.ts b/conversejs/lib/converse-params.ts index e7ef1c06..43040524 100644 --- a/conversejs/lib/converse-params.ts +++ b/conversejs/lib/converse-params.ts @@ -97,6 +97,7 @@ function defaultConverseParams ( pruning_behavior: 'unscrolled', colorize_username: true, send_chat_markers: [], + reuse_scram_keys: false, // for now we don't use this. // This is a specific settings, that is used in ConverseJS customization, to force avatars loading in readonly mode. livechat_load_all_vcards: !!forceReadonly, diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index 6c7fdf43..a5e4dbf1 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -114,6 +114,11 @@ export const livechatSpecificsPlugin = { // We are probably on a dev instance, so we will add _converse in window: (window as any)._livechatConverse = _converse } + + // Temporary Fix, because v11 removes some constants from _converse. + // TODO: remove this line, and replace by something else. + // Waiting for response to https://github.com/conversejs/converse.js/issues/3440 + _converse.CHATROOMS_TYPE = 'chatroom' }, overrides: { ChatRoom: { From a0d5c4a3685212bfccc1465ba48f6ffa663352a1 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 11 Jul 2024 18:22:59 +0200 Subject: [PATCH 003/136] Switch from Converse v10.1.6 to upstream (unreleased v11): * fix poll form --- .../plugins/poll/components/poll-form-view.js | 19 +++++++++---------- .../plugins/poll/templates/poll-form.js | 16 ++++++++++++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/conversejs/custom/plugins/poll/components/poll-form-view.js b/conversejs/custom/plugins/poll/components/poll-form-view.js index 8d2f4b12..9bbdf9cd 100644 --- a/conversejs/custom/plugins/poll/components/poll-form-view.js +++ b/conversejs/custom/plugins/poll/components/poll-form-view.js @@ -4,7 +4,7 @@ import { XMLNS_POLL } from '../constants.js' import { tplPollForm } from '../templates/poll-form.js' import { CustomElement } from 'shared/components/element.js' -import { converse, api } from '@converse/headless' +import { converse, api, parsers } from '@converse/headless' import { webForm2xForm } from '@converse/headless/utils/form' import { __ } from 'i18n' import '../styles/poll-form.scss' @@ -18,7 +18,6 @@ export default class MUCPollFormView extends CustomElement { return { model: { type: Object, attribute: true }, modal: { type: Object, attribute: true }, - form_fields: { type: Object, attribute: false }, alert_message: { type: Object, attribute: false }, title: { type: String, attribute: false }, instructions: { type: String, attribute: false } @@ -27,6 +26,8 @@ export default class MUCPollFormView extends CustomElement { _fieldTranslationMap = new Map() + xform = undefined + async initialize () { this.alert_message = undefined if (!this.model) { @@ -36,20 +37,18 @@ export default class MUCPollFormView extends CustomElement { try { this._initFieldTranslations() const stanza = await this._fetchPollForm() - const query = stanza.querySelector('query') - const xform = sizzle(`x[xmlns="${Strophe.NS.XFORM}"]`, query)[0] + const xform = parsers.parseXForm(stanza) if (!xform) { throw Error('Missing xform in stanza') } + xform.fields?.map(f => this._translateField(f)) + this.xform = xform + // eslint-disable-next-line no-undef this.title = __(LOC_poll_title) // xform.querySelector('title')?.textContent ?? '' // eslint-disable-next-line no-undef this.instructions = __(LOC_poll_instructions) // xform.querySelector('instructions')?.textContent ?? '' - this.form_fields = Array.from(xform.querySelectorAll('field')).map(field => { - this._translateField(field) - return u.xForm2TemplateResult(field, stanza) - }) } catch (err) { console.error(err) this.alert_message = __('Error') @@ -86,10 +85,10 @@ export default class MUCPollFormView extends CustomElement { } _translateField (field) { - const v = field.getAttribute('var') + const v = field.var const label = this._fieldTranslationMap.get(v) if (label) { - field.setAttribute('label', label) + field.label = label } } diff --git a/conversejs/custom/plugins/poll/templates/poll-form.js b/conversejs/custom/plugins/poll/templates/poll-form.js index 4e831171..2b66983e 100644 --- a/conversejs/custom/plugins/poll/templates/poll-form.js +++ b/conversejs/custom/plugins/poll/templates/poll-form.js @@ -5,6 +5,10 @@ import { converseLocalizedHelpUrl } from '../../../shared/lib/help' import { html } from 'lit' import { __ } from 'i18n' +import { converse } from '@converse/headless' + +const u = converse.env.utils + export function tplPollForm (el) { const i18nOk = __('Ok') // eslint-disable-next-line no-undef @@ -13,10 +17,18 @@ export function tplPollForm (el) { page: 'documentation/user/streamers/polls' }) + let formFieldTemplates + if (el.xform) { + const fields = el.xform.fields + formFieldTemplates = fields.map(field => { + return u.xFormField2TemplateResult(field) + }) + } + return html` ${el.alert_message ? html`
${el.alert_message}
` : ''} ${ - el.form_fields + formFieldTemplates ? html`
el.formSubmit(ev)}>

@@ -30,7 +42,7 @@ export function tplPollForm (el) {

${el.instructions}

- ${el.form_fields} + ${formFieldTemplates}
From d0ab3d94aec22ea81b7c3280b9d78ac811a861e0 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 12:09:25 +0200 Subject: [PATCH 004/136] Converse upstream updates. --- conversejs/build-conversejs.sh | 2 +- conversejs/custom/plugins/poll/utils.js | 2 +- conversejs/custom/plugins/tasks/utils.js | 4 ++-- conversejs/lib/plugins/livechat-mini-muc-head.ts | 2 +- conversejs/lib/plugins/livechat-specific.ts | 7 +------ 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 84b7b860..4d3e8e76 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -18,7 +18,7 @@ set -x CONVERSE_VERSION="v11.0.0" CONVERSE_REPO="https://github.com/conversejs/converse.js.git" # You can eventually set CONVERSE_COMMIT to a specific commit ID, if you want to apply some patches. -CONVERSE_COMMIT="ef86863cbd983f0c2de6c3b81105800bcbb804d4" +CONVERSE_COMMIT="46313ad92c1a861bcb50b9653859cfa9a960ae4a" # 2014-01-16: we are using a custom version, to wait for some PR to be apply upstream. # This version includes following changes: diff --git a/conversejs/custom/plugins/poll/utils.js b/conversejs/custom/plugins/poll/utils.js index ecb4266d..f10172b4 100644 --- a/conversejs/custom/plugins/poll/utils.js +++ b/conversejs/custom/plugins/poll/utils.js @@ -8,7 +8,7 @@ import { __ } from 'i18n' export function getHeadingButtons (view, buttons) { const muc = view.model - if (muc.get('type') !== _converse.CHATROOMS_TYPE) { + if (muc.get('type') !== _converse.constants.CHATROOMS_TYPE) { // only on MUC. return buttons } diff --git a/conversejs/custom/plugins/tasks/utils.js b/conversejs/custom/plugins/tasks/utils.js index 65700a5e..00f941e4 100644 --- a/conversejs/custom/plugins/tasks/utils.js +++ b/conversejs/custom/plugins/tasks/utils.js @@ -9,7 +9,7 @@ import { __ } from 'i18n' export function getHeadingButtons (view, buttons) { const muc = view.model - if (muc.get('type') !== _converse.CHATROOMS_TYPE) { + if (muc.get('type') !== _converse.constants.CHATROOMS_TYPE) { // only on MUC. return buttons } @@ -127,7 +127,7 @@ function _destroyChatRoomTaskLists (mucModel) { } export function initOrDestroyChatRoomTaskLists (mucModel) { - if (mucModel.get('type') !== _converse.CHATROOMS_TYPE) { + if (mucModel.get('type') !== _converse.constants.CHATROOMS_TYPE) { // only on MUC. return _destroyChatRoomTaskLists(mucModel) } diff --git a/conversejs/lib/plugins/livechat-mini-muc-head.ts b/conversejs/lib/plugins/livechat-mini-muc-head.ts index 82f71484..49815919 100644 --- a/conversejs/lib/plugins/livechat-mini-muc-head.ts +++ b/conversejs/lib/plugins/livechat-mini-muc-head.ts @@ -16,7 +16,7 @@ export const livechatMiniMucHeadPlugin = { }) _converse.api.listen.on('getHeadingButtons', (view: any, buttons: any[]) => { - if (view.model.get('type') !== _converse.CHATROOMS_TYPE) { + if (view.model.get('type') !== _converse.constants.CHATROOMS_TYPE) { // only on MUC. return buttons } diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index a5e4dbf1..72ee34e8 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -15,7 +15,7 @@ export const livechatSpecificsPlugin = { }) _converse.api.listen.on('getHeadingButtons', (view: any, buttons: any[]) => { - if (view.model.get('type') !== _converse.CHATROOMS_TYPE) { + if (view.model.get('type') !== _converse.constants.CHATROOMS_TYPE) { // only on MUC. return buttons } @@ -114,11 +114,6 @@ export const livechatSpecificsPlugin = { // We are probably on a dev instance, so we will add _converse in window: (window as any)._livechatConverse = _converse } - - // Temporary Fix, because v11 removes some constants from _converse. - // TODO: remove this line, and replace by something else. - // Waiting for response to https://github.com/conversejs/converse.js/issues/3440 - _converse.CHATROOMS_TYPE = 'chatroom' }, overrides: { ChatRoom: { From 6218d65b726f90757aa762774d23a284073536bc Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 14:20:44 +0200 Subject: [PATCH 005/136] Converse upstream WIP. --- conversejs/custom/index.js | 2 +- conversejs/custom/shared/components/font-awesome.js | 2 +- conversejs/custom/templates/muc-bottom-panel.js | 12 ++---------- conversejs/custom/webpack.livechat.js | 2 +- conversejs/lib/plugins/livechat-specific.ts | 8 +++++++- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 00dbc0c6..0ca3368c 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -61,7 +61,7 @@ CORE_PLUGINS.push('livechat-converse-poll') // (see headless/plugins/muc, getDiscoInfoFeatures, which loops on this const) ROOM_FEATURES.push('x_peertubelivechat_mute_anonymous') -_converse.CustomElement = CustomElement +_converse.exports.CustomElement = CustomElement const initialize = converse.initialize diff --git a/conversejs/custom/shared/components/font-awesome.js b/conversejs/custom/shared/components/font-awesome.js index 8a93dfef..33b8c1b0 100644 --- a/conversejs/custom/shared/components/font-awesome.js +++ b/conversejs/custom/shared/components/font-awesome.js @@ -4,7 +4,7 @@ /* eslint-disable max-len */ import { html } from 'lit' -import tplIcons from '../../../src/shared/templates/icons.js' +import tplIcons from '../../../src/shared/components/templates/icons.js' export default () => { // Here we are adding some additonal icons to ConverseJS defaults diff --git a/conversejs/custom/templates/muc-bottom-panel.js b/conversejs/custom/templates/muc-bottom-panel.js index cf70e064..37ebc48b 100644 --- a/conversejs/custom/templates/muc-bottom-panel.js +++ b/conversejs/custom/templates/muc-bottom-panel.js @@ -79,7 +79,7 @@ class SlowMode extends CustomElement { api.elements.define('livechat-slow-mode', SlowMode) const tplSlowMode = (o) => { - if (!o.can_edit) { return html`` } + if (!o.can_post) { return html`` } return html`` } @@ -128,17 +128,9 @@ const tplViewerMode = (o) => { } export default (o) => { - // ConverseJS 10.x does not handle properly the visitor role in unmoderated rooms. - // See https://github.com/conversejs/converse.js/issues/3428 for more info. - // So we will do a dirty hack here to fix this case. - // Note: ConverseJS 11.x has changed the code, and could be fixed more cleanly (or will be fixed if #3428 is fixed). - if (o.can_edit && o.model.getOwnRole() === 'visitor') { - o.can_edit = false - } - let mutedAnonymousMessage if ( - !o.can_edit && + !o.can_post && o.model.features?.get?.('x_peertubelivechat_mute_anonymous') && _converse.api.settings.get('livechat_specific_is_anonymous') === true ) { diff --git a/conversejs/custom/webpack.livechat.js b/conversejs/custom/webpack.livechat.js index bf6e041c..6825b35b 100644 --- a/conversejs/custom/webpack.livechat.js +++ b/conversejs/custom/webpack.livechat.js @@ -44,7 +44,7 @@ module.exports = merge(prod, { '../../templates/background_logo.js$': path.resolve(__dirname, 'custom/templates/background_logo.js'), './templates/muc-chatarea.js': path.resolve('custom/templates/muc-chatarea.js'), - '../templates/icons.js': path.resolve(__dirname, 'custom/shared/components/font-awesome.js'), + './templates/icons.js': path.resolve(__dirname, 'custom/shared/components/font-awesome.js'), 'shared/styles/index.scss$': path.resolve(__dirname, 'custom/shared/styles/livechat.scss'), diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index 72ee34e8..c4926307 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -117,7 +117,7 @@ export const livechatSpecificsPlugin = { }, overrides: { ChatRoom: { - getActionInfoMessage: function (this: any, code: string, nick: string, actor: any): any { + getActionInfoMessage: function getActionInfoMessage (this: any, code: string, nick: string, actor: any): any { if (code === '303') { // When there is numerous anonymous users joining at the same time, // they can all change their nicknames at the same time, generating a log of action messages. @@ -130,6 +130,12 @@ export const livechatSpecificsPlugin = { } } return this.__super__.getActionInfoMessage(code, nick, actor) + }, + canPostMessages: function canPostMessages (this: any) { + // ConverseJS does not handle properly the visitor role in unmoderated rooms. + // See https://github.com/conversejs/converse.js/issues/3428 for more info. + // FIXME: if #3428 is fixed, remove this override. + return this.isEntered() && this.getOwnRole() !== 'visitor' } }, ChatRoomMessage: { From e97cd1d78ea71575cd1de0c11dd97b9eb203ab87 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 15:57:28 +0200 Subject: [PATCH 006/136] Converse v11, reporting customization in the livechat repo: Reporting the vcard plugin customizations in the livechat repo, to avoid maintaining a Converse fork. --- conversejs/custom/livechat-patch-vcard.js | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 conversejs/custom/livechat-patch-vcard.js diff --git a/conversejs/custom/livechat-patch-vcard.js b/conversejs/custom/livechat-patch-vcard.js new file mode 100644 index 00000000..57ee61ef --- /dev/null +++ b/conversejs/custom/livechat-patch-vcard.js @@ -0,0 +1,57 @@ +// Here we are patching the vCard plugin, to add some specific optimizations. + +import { _converse, api } from '@converse/headless/index.js' +import { + onOccupantAvatarChanged, + setVCardOnModel, + setVCardOnOccupant +} from '@converse/headless/plugins/vcard/utils.js' + +const pluginDefinition = _converse.pluggable.plugins['converse-vcard'] +const originalInitialize = pluginDefinition.initialize + +pluginDefinition.initialize = function initialize () { + const previousListeners = _converse._events.chatRoomInitialized ?? [] + originalInitialize.apply(this) + + _converse.api.settings.extend({ + livechat_load_all_vcards: false + }) + + // Now we must detect the new chatRoomInitialized listener, and remove it: + const listenersToRemove = [] + for (const def of _converse._events.chatRoomInitialized ?? []) { + if (def.callback && !previousListeners.includes(def.callback)) { + listenersToRemove.push(def.callback) + } + } + for (const callback of listenersToRemove) { + console.debug('Livechat patching vcard: we must remove this listener', callback) + api.listen.not('chatRoomInitialized', callback) + } + + // Adding the new listener: + api.listen.on('chatRoomInitialized', (m) => { + console.debug('Patched version of the vcard chatRoomInitialized event.') + setVCardOnModel(m) + + // loadAll: when in readonly mode (ie: OBS integration), always load all avatars. + const loadAll = api.settings.get('livechat_load_all_vcards') === true + let hiddenOccupants = m.get('hidden_occupants') + if (hiddenOccupants !== true || loadAll) { + m.occupants.forEach(setVCardOnOccupant) + } + m.listenTo(m.occupants, 'add', (occupant) => { + if (hiddenOccupants !== true || loadAll) { + setVCardOnOccupant(occupant) + } + }) + m.on('change:hidden_occupants', () => { + hiddenOccupants = m.get('hidden_occupants') + if (hiddenOccupants !== true || loadAll) { + m.occupants.forEach(setVCardOnOccupant) + } + }) + m.listenTo(m.occupants, 'change:image_hash', o => onOccupantAvatarChanged(o)) + }) +} From e8f287b8a9731048bcf9d8ab2b380f728511a4e5 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 16:27:01 +0200 Subject: [PATCH 007/136] Converse v11, reporting customization in the livechat repo: Reporting the toggle occupants customization. --- conversejs/custom/index.js | 3 ++ conversejs/lib/plugins/livechat-specific.ts | 53 +++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 0ca3368c..74f8936f 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -50,6 +50,9 @@ import '../custom/plugins/terms/index.js' import '../custom/plugins/poll/index.js' /* END: Removable components */ +// Running some specific livechat patches: +import '../custom/livechat-patch-vcard.js' + import { CORE_PLUGINS } from './headless/shared/constants.js' import { ROOM_FEATURES } from './headless/plugins/muc/constants.js' // We must add our custom plugins to CORE_PLUGINS (so it is white listed): diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index c4926307..b777277a 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -53,6 +53,59 @@ export const livechatSpecificsPlugin = { return buttons }) + _converse.api.listen.on('getToolbarButtons', (toolbarEl: any, buttons: any[]) => { + // We will replace the toggle occupant button, to change its appearance. + // First, we must find it. We search from the end, because usually it is the last one. + let toggleOccupantButton + for (const button of buttons.reverse()) { + if (button.strings?.find((s: string) => s.includes('toggle_occupants'))) { // searching the classname + console.debug('[livechatSpecificsPlugin] found the toggle occupants button', button) + toggleOccupantButton = button + break + } + } + if (!toggleOccupantButton) { + console.debug('[livechatSpecificsPlugin] Did not found the toggle occupants button') + return buttons + } + + buttons = buttons.filter(b => b !== toggleOccupantButton) + // Replacing by the new button... + // Note: we don't need to test conditions, we know the button was here. + const i18nHideOccupants = _converse.__('Hide participants') + const i18nShowOccupants = _converse.__('Show participants') + const html = window.converse.env.html + const icon = toolbarEl.hidden_occupants + ? html` + + + ` + : html` + + + ` + buttons.push(html` + ` + ) + return buttons + }) + _converse.api.listen.on('chatRoomViewInitialized', function (this: any, _model: any): void { // Remove the spinner if present... document.getElementById('livechat-loading-spinner')?.remove() From f1ac80d468acc86a122e4ce76b2febe998207632 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 16:50:26 +0200 Subject: [PATCH 008/136] Converse v11, reporting customization in the livechat repo: Destroy room: remove the challenge, and the new JID. --- conversejs/custom/index.js | 1 - conversejs/lib/plugins/livechat-specific.ts | 37 ++++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 74f8936f..71d2ab6d 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -8,7 +8,6 @@ * @description This files will override the original ConverseJS index.js file. */ -import '@converse/headless' import './i18n/index.js' import 'shared/registry.js' import { CustomElement } from 'shared/components/element' diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index b777277a..b50d254e 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -56,7 +56,7 @@ export const livechatSpecificsPlugin = { _converse.api.listen.on('getToolbarButtons', (toolbarEl: any, buttons: any[]) => { // We will replace the toggle occupant button, to change its appearance. // First, we must find it. We search from the end, because usually it is the last one. - let toggleOccupantButton + let toggleOccupantButton: any for (const button of buttons.reverse()) { if (button.strings?.find((s: string) => s.includes('toggle_occupants'))) { // searching the classname console.debug('[livechatSpecificsPlugin] found the toggle occupants button', button) @@ -106,6 +106,18 @@ export const livechatSpecificsPlugin = { return buttons }) + // Overriding the MUCHeading custom element, to customize the destroyMUC function: + const MUCHeading = _converse.api.elements.registry['converse-muc-heading'] + if (MUCHeading) { + class MUCHeadingOverloaded extends MUCHeading { + async destroy (ev: Event): Promise { + ev.preventDefault() + await destroyMUC(_converse, this.model) // here we call a custom version of destroyMUC + } + } + _converse.api.elements.define('converse-muc-heading', MUCHeadingOverloaded) + } + _converse.api.listen.on('chatRoomViewInitialized', function (this: any, _model: any): void { // Remove the spinner if present... document.getElementById('livechat-loading-spinner')?.remove() @@ -242,3 +254,26 @@ function getOpenPromise (): any { ) return promise } + +async function destroyMUC (_converse: any, model: any): Promise { + const __ = _converse.__ + const messages = [__('Are you sure you want to destroy this groupchat?')] + // Note: challenge and newjid make no sens for peertube-plugin-livechat, + // we remove them comparing to the original function. + let fields = [ + { + name: 'reason', + label: __('Optional reason for destroying this groupchat'), + placeholder: __('Reason'), + value: undefined + } + ] + try { + fields = await _converse.api.confirm(__('Confirm'), messages, fields) + const reason = fields.filter(f => f.name === 'reason').pop()?.value + const newjid = undefined + return model.sendDestroyIQ(reason, newjid).then(() => model.close()) + } catch (e) { + console.error(e) + } +} From 1226162b50f36d8af4804a21bab4ac6eb8a8d376 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 17:35:26 +0200 Subject: [PATCH 009/136] Converse upstream WIP. --- conversejs/build-conversejs.sh | 28 +++++++---------------- conversejs/custom/livechat-patch-vcard.js | 4 ++++ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 4d3e8e76..3f384cc5 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -18,29 +18,17 @@ set -x CONVERSE_VERSION="v11.0.0" CONVERSE_REPO="https://github.com/conversejs/converse.js.git" # You can eventually set CONVERSE_COMMIT to a specific commit ID, if you want to apply some patches. +# 2024-07-15: using Converse upstream (v11 WIP). CONVERSE_COMMIT="46313ad92c1a861bcb50b9653859cfa9a960ae4a" +# 2024-07-15, FIXME: the following commit includes a quick fix for Converse/#3443, waiting for upstream to be fixed. +CONVERSE_COMMIT="7d65ef8d30a1f3949dbc590b6d27a9d786bf819f" -# 2014-01-16: we are using a custom version, to wait for some PR to be apply upstream. -# This version includes following changes: -# - #converse.js/3300: Adding the maxWait option for `debouncedPruneHistory` -# - #converse.js/3302: debounce MUC sidebar rendering -# - Fix: refresh the MUC sidebar when participants collection is sorted -# - Fix: MUC occupant list does not sort itself on nicknames or roles changes -# - Fix inconsistency between browsers on textarea outlines -# - Fix: room information not correctly refreshed when modifications are made by other users -# This version already includes following changes that will not be merged in ConverseJS upstream: -# - Don't load vCards for all room occupants when the right menu is closed -# - Changing the default avatar, for something very light (to mitigate blinking effect when vCards are loaded) -# - Custom settings livechat_load_all_vcards for the readonly mode -# - Adding "users" icon in the menu toggle button -# - Removing unecessary plugins: headless/pubsub, minimize, notifications, profile, omemo, push, roomlist, dragresize. -# - Destroy room: remove the challenge, and the new JID -# - New config option [colorize_username](https://conversejs.org/docs/html/configuration.html#colorize_username) -# - New loadEmojis hook, to customize emojis at runtime. -# - Fix custom emojis path when assets_path is not the default path. -# CONVERSE_VERSION="livechat-10.1.0" +# It is possible to use another repository, if we want some customization that are not upstream (yet): +# CONVERSE_VERSION="livechat" # # CONVERSE_COMMIT="4402fcc3fc60f6c9334f86528c33a0b463371d12" -# CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" +CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" +# 2024-07-15, fix MUC save. +CONVERSE_COMMIT="58c682b9ba09038beb961e9d8f804c270408ea69" rootdir="$(pwd)" src_dir="$rootdir/conversejs" diff --git a/conversejs/custom/livechat-patch-vcard.js b/conversejs/custom/livechat-patch-vcard.js index 57ee61ef..e108f71d 100644 --- a/conversejs/custom/livechat-patch-vcard.js +++ b/conversejs/custom/livechat-patch-vcard.js @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + // Here we are patching the vCard plugin, to add some specific optimizations. import { _converse, api } from '@converse/headless/index.js' From cbcf51d1eb42c2e8360ccd5992f5af128a792dcb Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 17:42:32 +0200 Subject: [PATCH 010/136] Converse upstream WIP: * Fix anonymous mode --- conversejs/lib/plugins/livechat-viewer-mode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conversejs/lib/plugins/livechat-viewer-mode.ts b/conversejs/lib/plugins/livechat-viewer-mode.ts index b01fffab..4d889c88 100644 --- a/conversejs/lib/plugins/livechat-viewer-mode.ts +++ b/conversejs/lib/plugins/livechat-viewer-mode.ts @@ -17,11 +17,11 @@ export const livechatViewerModePlugin = { livechat_external_auth_reconnect_mode: undefined }) - const originalGetDefaultMUCNickname = _converse.getDefaultMUCNickname + const originalGetDefaultMUCNickname = _converse.exports.getDefaultMUCNickname if (!originalGetDefaultMUCNickname) { console.error('[livechatViewerModePlugin] getDefaultMUCNickname is not initialized.') } else { - Object.assign(_converse, { + Object.assign(_converse.exports, { getDefaultMUCNickname: function (this: any): any { if (!_converse.api.settings.get('livechat_enable_viewer_mode')) { return originalGetDefaultMUCNickname.apply(this, arguments) From b9473cada9fdf6672c954ff188b39dcaf8ba2ce1 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 17:46:45 +0200 Subject: [PATCH 011/136] Converse upstream WIP: * moving exports to _converse.exports. --- conversejs/custom/plugins/tasks/index.js | 11 ++++++++--- conversejs/custom/plugins/tasks/task-list.js | 2 +- conversejs/custom/plugins/tasks/task-lists.js | 4 ++-- conversejs/custom/plugins/tasks/task.js | 2 +- conversejs/custom/plugins/tasks/tasks.js | 4 ++-- conversejs/custom/plugins/tasks/utils.js | 4 ++-- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/conversejs/custom/plugins/tasks/index.js b/conversejs/custom/plugins/tasks/index.js index 37cfd1c3..8c7b53fb 100644 --- a/conversejs/custom/plugins/tasks/index.js +++ b/conversejs/custom/plugins/tasks/index.js @@ -18,9 +18,14 @@ converse.plugins.add('livechat-converse-tasks', { dependencies: ['converse-muc', 'converse-disco', 'converse-pubsub'], initialize () { - _converse.ChatRoomTaskLists = ChatRoomTaskLists - _converse.ChatRoomTaskList = ChatRoomTaskList - _converse.ChatRoomTasks = ChatRoomTasks + Object.assign( + _converse.exports, + { + ChatRoomTaskLists, + ChatRoomTaskList, + ChatRoomTasks + } + ) _converse.api.settings.extend({ livechat_task_app_enabled: false, diff --git a/conversejs/custom/plugins/tasks/task-list.js b/conversejs/custom/plugins/tasks/task-list.js index e58106de..23a00a0a 100644 --- a/conversejs/custom/plugins/tasks/task-list.js +++ b/conversejs/custom/plugins/tasks/task-list.js @@ -7,7 +7,7 @@ import { Model } from '@converse/skeletor/src/model.js' /** * A chat room task list. * @class - * @namespace _converse.ChatRoomTaskList + * @namespace _converse.exports.ChatRoomTaskList * @memberof _converse */ class ChatRoomTaskList extends Model { diff --git a/conversejs/custom/plugins/tasks/task-lists.js b/conversejs/custom/plugins/tasks/task-lists.js index d74edb81..17130a73 100644 --- a/conversejs/custom/plugins/tasks/task-lists.js +++ b/conversejs/custom/plugins/tasks/task-lists.js @@ -7,9 +7,9 @@ import { ChatRoomTaskList } from './task-list' import { initStorage } from '@converse/headless/utils/storage.js' /** - * A list of {@link _converse.ChatRoomTaskList} instances, representing task lists associated to a MUC. + * A list of {@link _converse.exports.ChatRoomTaskList} instances, representing task lists associated to a MUC. * @class - * @namespace _converse.ChatRoomTaskLists + * @namespace _converse.exports.ChatRoomTaskLists * @memberOf _converse */ class ChatRoomTaskLists extends Collection { diff --git a/conversejs/custom/plugins/tasks/task.js b/conversejs/custom/plugins/tasks/task.js index 7d21b947..9bf9c6f6 100644 --- a/conversejs/custom/plugins/tasks/task.js +++ b/conversejs/custom/plugins/tasks/task.js @@ -7,7 +7,7 @@ import { Model } from '@converse/skeletor/src/model.js' /** * A chat room task. * @class - * @namespace _converse.ChatRoomTask + * @namespace _converse.exports.ChatRoomTask * @memberof _converse */ class ChatRoomTask extends Model { diff --git a/conversejs/custom/plugins/tasks/tasks.js b/conversejs/custom/plugins/tasks/tasks.js index 239a1723..facc16d6 100644 --- a/conversejs/custom/plugins/tasks/tasks.js +++ b/conversejs/custom/plugins/tasks/tasks.js @@ -7,9 +7,9 @@ import { ChatRoomTask } from './task' import { initStorage } from '@converse/headless/utils/storage.js' /** - * A list of {@link _converse.ChatRoomTask} instances, representing all tasks associated to a MUC. + * A list of {@link _converse.exports.ChatRoomTask} instances, representing all tasks associated to a MUC. * @class - * @namespace _converse.ChatRoomTasks + * @namespace _converse.exports.ChatRoomTasks * @memberOf _converse */ class ChatRoomTasks extends Collection { diff --git a/conversejs/custom/plugins/tasks/utils.js b/conversejs/custom/plugins/tasks/utils.js index 00f941e4..52e0162b 100644 --- a/conversejs/custom/plugins/tasks/utils.js +++ b/conversejs/custom/plugins/tasks/utils.js @@ -74,8 +74,8 @@ function _initChatRoomTaskLists (mucModel) { return } - mucModel.tasklists = new _converse.ChatRoomTaskLists(undefined, { chatroom: mucModel }) - mucModel.tasks = new _converse.ChatRoomTasks(undefined, { chatroom: mucModel }) + mucModel.tasklists = new _converse.exports.ChatRoomTaskLists(undefined, { chatroom: mucModel }) + mucModel.tasks = new _converse.exports.ChatRoomTasks(undefined, { chatroom: mucModel }) mucModel.taskManager = new PubSubManager( mucModel.get('jid'), From 2f69e45b265a33e64ff2722e6e4955a8177b4ff6 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 15 Jul 2024 18:15:45 +0200 Subject: [PATCH 012/136] Changelog. --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac5241e6..869a1a41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog -## ??? (Not Released Yet) +## 11.0.0 (Not Released Yet) + +### New features + +* Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. ### Minor changes and fixes From 712d2bcdcb4257e66da75ee2e9bd76431b8d3471 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Tue, 16 Jul 2024 11:35:26 +0200 Subject: [PATCH 013/136] Converse Fix. --- conversejs/build-conversejs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 3f384cc5..010ab156 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -29,6 +29,7 @@ CONVERSE_COMMIT="7d65ef8d30a1f3949dbc590b6d27a9d786bf819f" CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" # 2024-07-15, fix MUC save. CONVERSE_COMMIT="58c682b9ba09038beb961e9d8f804c270408ea69" +CONVERSE_COMMIT="bbee0e4e8d2dc43636385cf4cca34f3604f59520" rootdir="$(pwd)" src_dir="$rootdir/conversejs" From 00960652fe887cc7820ea2e261e50929e7ddff53 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Tue, 16 Jul 2024 12:01:51 +0200 Subject: [PATCH 014/136] =?UTF-8?q?Fix=20=C2=ABcreate=20new=20poll=C2=BB?= =?UTF-8?q?=20icon.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + conversejs/custom/plugins/poll/utils.js | 2 +- conversejs/custom/shared/components/font-awesome.js | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 869a1a41..9561c228 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Minor changes and fixes * Moderation delay: fix accessibility on the timer shown to moderators. +* Fix «create new poll» icon. ## 10.3.0 diff --git a/conversejs/custom/plugins/poll/utils.js b/conversejs/custom/plugins/poll/utils.js index f10172b4..4dbe4e52 100644 --- a/conversejs/custom/plugins/poll/utils.js +++ b/conversejs/custom/plugins/poll/utils.js @@ -32,7 +32,7 @@ export function getHeadingButtons (view, buttons) { api.modal.show('livechat-converse-poll-form-modal', { model: muc }) }, a_class: '', - icon_class: 'fa-list-check', // FIXME + icon_class: 'fa-square-poll-horizontal', name: 'muc-create-poll' }) diff --git a/conversejs/custom/shared/components/font-awesome.js b/conversejs/custom/shared/components/font-awesome.js index 33b8c1b0..2713ea23 100644 --- a/conversejs/custom/shared/components/font-awesome.js +++ b/conversejs/custom/shared/components/font-awesome.js @@ -23,6 +23,11 @@ export default () => { + + + + + ` } From 12a1300df6c83b7eab741e5533cb74982a08696c Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Thu, 11 Jul 2024 12:07:27 +0000 Subject: [PATCH 015/136] Translated using Weblate (German) Currently translated at 100.0% (808 of 808 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/ --- support/documentation/po/livechat.de.po | 32 +++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index b14f8ae4..b316785f 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -8,9 +8,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-07-10 16:54+0200\n" -"PO-Revision-Date: 2024-07-05 19:12+0000\n" -"Last-Translator: Victor Hampel \n" -"Language-Team: German \n" +"PO-Revision-Date: 2024-07-12 09:10+0000\n" +"Last-Translator: Victor Hampel " +"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3272,25 +3274,30 @@ msgstr "Um den Wert für einen bereits bestehenden Raum zu ändern, öffnen Sie #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "Currently, this feature has one known bug: users that join the chat will get all messages, even messages that are still pending for other participants. However, messages sent after they joined will be delayed correctly." msgstr "" +"Derzeit gibt es bei dieser Funktion einen bekannten Fehler: Benutzer, die " +"dem Chat beitreten, erhalten alle Nachrichten, auch solche, die noch für " +"andere Teilnehmer ausstehen. Allerdings werden Nachrichten, die nach dem " +"Beitritt gesendet werden, korrekt verzögert." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -#, fuzzy, no-wrap -#| msgid "Share the chat" +#, no-wrap msgid "In the chat" -msgstr "Teilen Sie den Chat" +msgstr "Im Chat" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "As a moderator, you will see the remaining time (in seconds) before the message is broadcasted, just besides the message datetime." msgstr "" +"Als Moderator sehen Sie neben dem Datum der Nachricht auch die verbleibende " +"Zeit (in Sekunden), bevor die Nachricht veröffentlicht wird." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -#, fuzzy -#| msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -msgstr "![Kanalkonfiguration / Moderationsverzögerung](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" +msgstr "" +"![Moderationsverzögerungstimer](/peertube-plugin-livechat/images/" +"moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3337,10 +3344,11 @@ msgstr "Über das [Chat Dropdown Menü](/peertube-plugin-livechat/de/documentati #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -#, fuzzy -#| msgid "The video owner will be owner of the chat room. This means he can configure the room, delete it, promote other users as admins, ..." msgid "The video owner will be owner of the chat room. This means they can configure the room, delete it, promote other users as admins, ..." -msgstr "Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den Raum konfigurieren, löschen, andere Benutzer als Administratoren befördern, ..." +msgstr "" +"Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den " +"Raum konfigurieren, löschen, andere Benutzer als Administratoren befördern, " +"..." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md From 123f9a5a8a1ed048177c395632fe333c0528fc9b Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 16 Jul 2024 10:50:24 +0000 Subject: [PATCH 016/136] Translated using Weblate (Albanian) Currently translated at 62.4% (168 of 269 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/sq/ --- languages/sq.yml | 190 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) diff --git a/languages/sq.yml b/languages/sq.yml index e69de29b..ed32287e 100644 --- a/languages/sq.yml +++ b/languages/sq.yml @@ -0,0 +1,190 @@ +muted_anonymous_message: Mesazhe mund të dërgojnë vetëm përdorues të regjistruar. +moderation_delay: Vonesë moderimi +share_url_label: Shfaq butonin “Ndani me të tjerët lidhje fjalosjeje” +no_anonymous_label: Fshihe fjalosjen për përdorues anonimë +theming_advanced_description:

Aplikim temash

+login_remote_peertube_url_invalid: URL PeerTube e pavlefshme. +tasks: Punë +task_list_create: 'Krijoni një listë të re punësh:' +task_list_create_error: Gabim teksa ruhej lista e punëve +task_list_delete_confirm: Jeni i sigurt se doni të fshihet kjo listë punësh? +avatar_set_option_abstract: Abstrakte +prosody_s2s_interfaces_label: Ndërfaqe rrjeti shërbyes te shërbyes +per_live_video_label: Përdoruesit mund të aktivizojnë fjalosje për transmetimet e + tyre të drejtpërdrejta +successfully_saved: U ruajtën me sukses +livechat_configuration_channel_quote_delay_label: Dërgoje çdo X minuta +livechat_configuration_title: Formësoni dhoma fjalosjeje të transmetimit tuaj të drejtpërdrejtë +avatar_set_label: Grup avatarësh +prosody_s2s_port_label: Portë Prosody shërbyes te shërbyes +prosody_c2s_label: Aktivizo lidhje klient te shërbyes +livechat_configuration_channel_bot_options_title: Mundësi roboti moderimi +livechat_configuration_channel_forbidden_words_label: Fjalë, ose shprehje të ndaluara +livechat_configuration_channel_forbidden_words_regexp_label: Konsideroji shprehje + të rregullta +livechat_configuration_channel_command_label: Urdhër roboti +prosody_c2s_interfaces_label: Ndërfaqe rrjeti klient te shërbyes +livechat_configuration_channel_command_message_label: Mesazh +task_list_name: Emër liste punësh +promote: Bëhuni moderator +open_chat: Hapni fjalosje +open_chat_new_window: Hap fjalosjen në dritare të re +read_only: Vetëm për lexim +show_scrollbarr: Shfaq rrëshqitës +close_chat: Mbylle fjalosjen +use_chat: Përdorni fjalosjen +use_chat_help: Në u aktivizoftë, në krah të videos do të ketë një fjalosje. +share_chat_link: Ndajeni lidhjen e fjalosjes me të tjerët +copy: Kopjoje +copied: U kopjua +use_current_theme_color: Përdor ngjyra të temës së tanishme +room_name: Emër dhome +room_description: Përshkrim dhome +not_found: S’u gjet +video: Video +important_note_title:

Shënim të rëndësishme

+chat_terms_label: Terma & Kushte +channel: Kanal +last_activity: Veprimtaria e fundit +connect_using_xmpp: Lidhu duke përdorur XMPP +connect_using_xmpp_help: Mund të lidheni me dhomën duke përdorur një llogari të jashtme + XMPP dhe klientin tuaj të parapëlqyer XMPP. +list_rooms_label: Paraqit dhoma ekzistuese +list_rooms_description: "Paraqit dhomat\n" +external_auth_description: "

Mirëfilltësim së jashtmi

\nPër përdorues që s’kanë + llogari Peertube, mund të aktivizoni mënyra të ndryshme mirëfilltësimi, bazuar në + shërbyes të largët mirëfilltësimesh.\n" +external_auth_custom_oidc_button_label_label: Etiketë për butonin e lidhjes +external_auth_oidc_client_id_label: ID Klienti +external_auth_oidc_client_secret_label: E fshehtë klienti +external_auth_facebook_oidc_label: Përdor Facebook +open_blank_description: Do të ketë një buton për hapje dritareje fjalosjeje në një + dritare të re. +room_type_option_video: Çdo video ka dhomën e vet të fjalosjes +share_url_option_nobody: Mos e shfaq për ndonjë +room_type_option_channel: Dhomat e fjalosjes grupohen sipas kanaleve +share_url_option_everyone: Shfaqe për këdo +videos_list_label: Aktivizo fjalosje për këto video +avatar_set_option_sepia: Sepia (simboli i PeerTube-it) +converse_theme_label: Temë ConverseJS +converse_theme_option_peertube: Temë PeerTube +converse_theme_option_default: Tema Parazgjedhje ConverseJS +system_prosody_label: Përdor Prosody sistemi +disable_websocket_label: Çaktivizo Websocket-in +prosody_peertube_uri_label: URL Peertube për thirrje API +cancel: Anuloje +livechat_configuration_channel_slow_mode_label: Mënyra ngadalë +livechat_configuration_channel_enable_bot_label: Aktivizo robot moderimi +prosody_muc_expiration_description: "Këtu mund të zgjidhni se për sa kohë mbahet lënda + e dhomës së fjalosjes nga shërbyesi. Vlera mund të jetë:\n
    \n
  • 60: + lënda do të ruhet për 60 sekonda. 60-n mund ta zëvendësoni me çfarëdo vlere + numër të plotë.
  • \n
  • 1d: lënda do të ruhet për 1 ditë. 1-shin + mund ta zëvendësoni me çfarëdo vlere numër të plotë.
  • \n
  • 1w: lënda + do të ruhet për 1 javë. 1-shin mund ta zëvendësoni me çfarëdo vlere numër + të plotë.
  • \n
  • 1m: lënda do të ruhet për 1 muaj. 1-shin mund + ta zëvendësoni me çfarëdo vlere numër të plotë.
  • \n
  • 1y: lënda do + të ruhet për 1 vit. 1-shin mund ta zëvendësoni me çfarëdo vlere numër të + plotë.
  • \n
  • never: lënda nuk skadon kurrë dhe do të mbahet përgjithnjë.
  • \n\ +
\n" +livechat_configuration_channel_forbidden_words_reason_label: Arsye +livechat_configuration_channel_forbidden_words_comments_label: Komente +livechat_configuration_channel_quote_label2: Mesazhe +livechat_configuration_channel_command_message_desc: Mesazhi për t’u dërguar. +livechat_configuration_channel_banned_jids_label: Përdorues dhe rregullsi të dëbuara +validation_error: Pati një gabim gjatë vleftësimit. +invalid_value: Vlerë e pavlefshme. +invalid_value_missing: Kjo vlerë është e domosdoshme. +invalid_value_wrong_type: Vlera është e një lloji të gabuar. +invalid_value_wrong_format: Vlera është në format të gabuar. +invalid_value_not_in_range: Vlerë jo brenda intervalit të autorizuar. +invalid_value_duplicate: Vlerë e përsëdytur +invalid_value_too_long: Vlerë shumë e gjatë +too_many_entries: Shumë zëra +chatroom_not_accessible: Kjo dhomë fjalosjeje s’ekziston, ose s’lejoheni të hyni në + të. +login_using_external_account: Bëni hyrjen duke përdorur një llogari të jashtme +login_remote_peertube_url: URL e instancës tuaj Peertube +login_remote_peertube_video_not_found: Kjo video s’është në këtë instancë Peertube. +login_external_auth_alert_message: Mirëfilltësimi dështoi +task_list_delete: Fshi listë punësh +task_create: Krijoni një punë të re +task_name: Emër pune +task_description: Përshkrim +task_delete_confirm: Jeni i sigurt se doni të fshihet kjo punë? +task_list_pick_title: Ju lutemi, zgjidhni një listë punësh +livechat_configuration_channel_emojis_title: Emoxhi kanali +livechat_emojis_shortname: Emër i shkurtër +livechat_emojis_file_desc: "Kartela e emoji-t.\n" +action_export: Eksportoje +action_remove_entry_confirm: Jeni i sigurt se doni të hiqet ky zë? +loading_error: Ndodhi gabim teksa ngarkoheshin të dhëna. +token_password: Token fjalëkalimi +token_date: Datë +token_action_revoke: Hiqe token-in +token_default_label: Token i prodhuar nga ndërfaqja web +token_action_create: Krijoni një token të ri +token_action_revoke_confirm: Jeni i sigurt se doni të hiqet ky token? +livechat_configuration_channel_mute_anonymous_label: Heshto përdorues anonimë +livechat_configuration_channel_terms_label: Terma & kushte kanali fjalosjeje +new_poll: Krijoni një pyetësor të ri +poll_title: Pyetësor i ri +poll_question: Pyetje +poll_duration: Kohëzgjatje pyetësori (në minuta) +poll_anonymous_results: Përfundime anonime +poll_is_over: Ky pyetësor tanimë ka përfunduar. +poll_choice_invalid: Kjo zgjedhje s’është e vlefshme. +chat_behaviour_description:

Sjellje fjalosjeje

+room_type_label: Lloj dhome +auto_display_description: Kur shihet një video, dritarja e fjalosjes do të hapet vetvetiu. +open_blank_label: Shfaq butonin “hape në dritare të re” +all_lives_label: Aktivizo fjalosje për krejt të drejtpërdrejtat +converse_theme_description: Ju lutemi, zgjidhni temën converseJS që doni të përdoret. +prosody_port_label: Portë Prosody +prosody_muc_log_by_default_label: Regjistro ç’bëhet në dhomë, si parazgjedhje +prosody_room_allow_s2s_label: Aktivizoni lidhje te dhoma duke përdorur llogari të + jashtme XMPP +prosody_certificates_dir_label: Dosje dëshmish +livechat_configuration_channel_forbidden_words_label_label: Etiketë +task_delete: Fshije punën +avatar_set_option_bird: Zogj +autocolors_label: Pikasje e vetvetishme ngjyrash +help_builtin_prosody_label: Shërbyes Prosody +prosody_c2s_port_label: Klient Prosody te portë shërbyesi +prosody_components_list_label: Përbërës të jashtëm +prosody_components_port_label: Portë përbërësish Prosody të jashtëm +livechat_configuration_channel_command_cmd_label: Urdhër +livechat_configuration_channel_title: Mundësi kanali +prosody_muc_expiration_label: Skadim regjistrash dhome +livechat_configuration_channel_quote_label: Kohëmatës +livechat_configuration_channel_bot_nickname: Nofkë roboti +federation_no_remote_chat_label: Mos shfaq fjalosje nga larg +federation_no_remote_chat_description: "Duke i vënë shenjë këtij rregullimi, instanca + juaj s’do të shfaqë kurrë fjalosje prej videosh të largëta.\n" +federation_dont_publish_remotely_label: Mos boto hollësifjalosjeje +auto_display_label: Hape vetvetiu fjalosjen +livechat_emojis_file: Kartelë +action_import: Importoje +share_url_option_owner: Shfaq të zotin e videos +avatar_set_option_cat: Mace +share_chat_embed: Trupëzojeni +share_chat_peertube_tips: Kjo lidhje do ta hapë fjalosjen brenda ndërfaqes së Peertube-it. +auth_description: "

Mirëfilltësim

\n" +external_auth_google_oidc_label: Përdor Google +save: Ruaje +chat_title:

Fjalosje

+action_add_entry: Shtoni një zë +action_remove_entry: Hiqe këtë zë +token_label: Etiketë +poll: Pyetësor +poll_choice_n: 'Zgjedhje {{N}}:' +poll_end: 'Pyetësori përfundon më:' +link_copied: Lidhja u kopjua +error: Gabim +open: Hape +web: Web +online_help: Ndihmë në Internet +federation_description: "

Federim

\nRregulliemt vijuese kanë të bëjnë me federimin + me instanca të tjera\nPeertube dhe programe të tjera fediversi.\n" +invalid_value_file_too_big: 'Madhësia e kartelës është shumë e madhe (madhësi maksimum: + %s).' From 22daa45b92baa8467116cac7ec40b970e3d05298 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 17 Jul 2024 10:46:50 +0200 Subject: [PATCH 017/136] Converse update. --- conversejs/build-conversejs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 010ab156..6245cb6c 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -30,6 +30,7 @@ CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" # 2024-07-15, fix MUC save. CONVERSE_COMMIT="58c682b9ba09038beb961e9d8f804c270408ea69" CONVERSE_COMMIT="bbee0e4e8d2dc43636385cf4cca34f3604f59520" +CONVERSE_COMMIT="86c0522551afb418f8c34e81e381f0f0f4b57903" rootdir="$(pwd)" src_dir="$rootdir/conversejs" From 522265db5cdd1d08fea4fda5c5e45661c813edfc Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 17 Jul 2024 10:48:14 +0200 Subject: [PATCH 018/136] Changelog. --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dfb1747..a16534c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. +### Minor changes and fixes + +* New translation: Albanian + ## 10.3.1 ### Minor changes and fixes From 64f03e5454528b31faad56254c132b42c671ffe5 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 17 Jul 2024 10:53:53 +0200 Subject: [PATCH 019/136] Documentation. --- .../user/streamers/bot/forbidden_words.md | 4 +++ .../user/streamers/moderation_delay.md | 4 +++ support/documentation/po/livechat.ar.po | 8 ++++- support/documentation/po/livechat.ca.po | 8 ++++- support/documentation/po/livechat.cs.po | 8 ++++- support/documentation/po/livechat.de.po | 33 ++++++++----------- support/documentation/po/livechat.el.po | 8 ++++- support/documentation/po/livechat.en.pot | 9 ++++- support/documentation/po/livechat.eo.po | 8 ++++- support/documentation/po/livechat.es.po | 8 ++++- support/documentation/po/livechat.eu.po | 8 ++++- support/documentation/po/livechat.fa.po | 8 ++++- support/documentation/po/livechat.fi.po | 8 ++++- support/documentation/po/livechat.fr.po | 20 +++++------ support/documentation/po/livechat.gd.po | 8 ++++- support/documentation/po/livechat.gl.po | 8 ++++- support/documentation/po/livechat.hr.po | 8 ++++- support/documentation/po/livechat.hu.po | 8 ++++- support/documentation/po/livechat.is.po | 8 ++++- support/documentation/po/livechat.it.po | 8 ++++- support/documentation/po/livechat.ja.po | 8 ++++- support/documentation/po/livechat.kab.po | 8 ++++- support/documentation/po/livechat.nb.po | 8 ++++- support/documentation/po/livechat.nl.po | 8 ++++- support/documentation/po/livechat.nn.po | 8 ++++- support/documentation/po/livechat.oc.po | 8 ++++- support/documentation/po/livechat.pl.po | 8 ++++- support/documentation/po/livechat.pt.po | 8 ++++- support/documentation/po/livechat.ru.po | 8 ++++- support/documentation/po/livechat.sq.po | 8 ++++- support/documentation/po/livechat.sv.po | 8 ++++- support/documentation/po/livechat.th.po | 8 ++++- support/documentation/po/livechat.tok.po | 8 ++++- support/documentation/po/livechat.tr.po | 6 ++++ support/documentation/po/livechat.uk.po | 8 ++++- support/documentation/po/livechat.vi.po | 8 ++++- support/documentation/po/livechat.zh-Hans.po | 8 ++++- support/documentation/po/livechat.zh-Hant.po | 8 ++++- 38 files changed, 269 insertions(+), 63 deletions(-) diff --git a/support/documentation/content/en/documentation/user/streamers/bot/forbidden_words.md b/support/documentation/content/en/documentation/user/streamers/bot/forbidden_words.md index b40a875b..35d8bd72 100644 --- a/support/documentation/content/en/documentation/user/streamers/bot/forbidden_words.md +++ b/support/documentation/content/en/documentation/user/streamers/bot/forbidden_words.md @@ -35,6 +35,10 @@ See the [contribution guide](/peertube-plugin-livechat/contributing/) for more i These words are case insensitive. {{% /notice %}} +{{% notice tip %}} +You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them. +{{% /notice %}} + {{% notice warning %}} This features is still experimental. There might be some issues with non-latin alphabets. diff --git a/support/documentation/content/en/documentation/user/streamers/moderation_delay.md b/support/documentation/content/en/documentation/user/streamers/moderation_delay.md index 3033b5cc..e75bf729 100644 --- a/support/documentation/content/en/documentation/user/streamers/moderation_delay.md +++ b/support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -39,6 +39,10 @@ Currently, this feature has one known bug: users that join the chat will get all However, messages sent after they joined will be delayed correctly. {{% /notice %}} +{{% notice tip %}} +You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them. +{{% /notice %}} + ## In the chat As a moderator, you will see the remaining time (in seconds) before the message is broadcasted, just besides the message datetime. diff --git a/support/documentation/po/livechat.ar.po b/support/documentation/po/livechat.ar.po index d68c4310..4dc4d195 100644 --- a/support/documentation/po/livechat.ar.po +++ b/support/documentation/po/livechat.ar.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-01-17 11:38+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Arabic \n" @@ -2894,6 +2894,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.ca.po b/support/documentation/po/livechat.ca.po index a721daee..e152cc4f 100644 --- a/support/documentation/po/livechat.ca.po +++ b/support/documentation/po/livechat.ca.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.cs.po b/support/documentation/po/livechat.cs.po index 55c06eb1..1291a142 100644 --- a/support/documentation/po/livechat.cs.po +++ b/support/documentation/po/livechat.cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index b316785f..fdf2a8e3 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -7,12 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-07-12 09:10+0000\n" -"Last-Translator: Victor Hampel " -"\n" -"Language-Team: German \n" +"Last-Translator: Victor Hampel \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2963,6 +2961,12 @@ msgstr "Wenn Sie einige nützliche Wörterlisten haben, können Sie die gerne zu msgid "These words are case insensitive." msgstr "Bei diesen Wörtern wird die Groß- und Kleinschreibung nicht berücksichtigt." +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." @@ -3273,11 +3277,7 @@ msgstr "Um den Wert für einen bereits bestehenden Raum zu ändern, öffnen Sie #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "Currently, this feature has one known bug: users that join the chat will get all messages, even messages that are still pending for other participants. However, messages sent after they joined will be delayed correctly." -msgstr "" -"Derzeit gibt es bei dieser Funktion einen bekannten Fehler: Benutzer, die " -"dem Chat beitreten, erhalten alle Nachrichten, auch solche, die noch für " -"andere Teilnehmer ausstehen. Allerdings werden Nachrichten, die nach dem " -"Beitritt gesendet werden, korrekt verzögert." +msgstr "Derzeit gibt es bei dieser Funktion einen bekannten Fehler: Benutzer, die dem Chat beitreten, erhalten alle Nachrichten, auch solche, die noch für andere Teilnehmer ausstehen. Allerdings werden Nachrichten, die nach dem Beitritt gesendet werden, korrekt verzögert." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3288,16 +3288,12 @@ msgstr "Im Chat" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "As a moderator, you will see the remaining time (in seconds) before the message is broadcasted, just besides the message datetime." -msgstr "" -"Als Moderator sehen Sie neben dem Datum der Nachricht auch die verbleibende " -"Zeit (in Sekunden), bevor die Nachricht veröffentlicht wird." +msgstr "Als Moderator sehen Sie neben dem Datum der Nachricht auch die verbleibende Zeit (in Sekunden), bevor die Nachricht veröffentlicht wird." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -msgstr "" -"![Moderationsverzögerungstimer](/peertube-plugin-livechat/images/" -"moderation_delay_timer.png?classes=shadow,border)" +msgstr "![Moderationsverzögerungstimer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3345,10 +3341,7 @@ msgstr "Über das [Chat Dropdown Menü](/peertube-plugin-livechat/de/documentati #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "The video owner will be owner of the chat room. This means they can configure the room, delete it, promote other users as admins, ..." -msgstr "" -"Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den " -"Raum konfigurieren, löschen, andere Benutzer als Administratoren befördern, " -"..." +msgstr "Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den Raum konfigurieren, löschen, andere Benutzer als Administratoren befördern, ..." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md diff --git a/support/documentation/po/livechat.el.po b/support/documentation/po/livechat.el.po index 4629a3d8..cd85dff8 100644 --- a/support/documentation/po/livechat.el.po +++ b/support/documentation/po/livechat.el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.en.pot b/support/documentation/po/livechat.en.pot index 79f2751b..7a4d8836 100644 --- a/support/documentation/po/livechat.en.pot +++ b/support/documentation/po/livechat.en.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3259,6 +3259,13 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#, markdown-text +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md #, markdown-text diff --git a/support/documentation/po/livechat.eo.po b/support/documentation/po/livechat.eo.po index 0b9cc0de..fc8eeb4e 100644 --- a/support/documentation/po/livechat.eo.po +++ b/support/documentation/po/livechat.eo.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.es.po b/support/documentation/po/livechat.es.po index ee6a537b..5c92116a 100644 --- a/support/documentation/po/livechat.es.po +++ b/support/documentation/po/livechat.es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-04-16 21:38+0000\n" "Last-Translator: rnek0 \n" "Language-Team: Spanish \n" @@ -2925,6 +2925,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.eu.po b/support/documentation/po/livechat.eu.po index f8d88533..a5a16735 100644 --- a/support/documentation/po/livechat.eu.po +++ b/support/documentation/po/livechat.eu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.fa.po b/support/documentation/po/livechat.fa.po index 40451f6d..bdc43a3f 100644 --- a/support/documentation/po/livechat.fa.po +++ b/support/documentation/po/livechat.fa.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.fi.po b/support/documentation/po/livechat.fi.po index fafeb2ac..e9728113 100644 --- a/support/documentation/po/livechat.fi.po +++ b/support/documentation/po/livechat.fi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Finnish \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index 5f06d13d..807da99e 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -7,11 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-07-11 07:38+0000\n" "Last-Translator: John Livingston \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2980,6 +2979,12 @@ msgstr "Si vous avez des listes de mots utiles, vous êtes les bienvenu⋅es pou msgid "These words are case insensitive." msgstr "Ces mots ne sont pas sensibles à la casse." +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." @@ -3301,17 +3306,12 @@ msgstr "Dans le tchat" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "As a moderator, you will see the remaining time (in seconds) before the message is broadcasted, just besides the message datetime." -msgstr "" -"En tant que modérateur⋅rice, vous verrez le temps restant (en secondes) " -"avant que le message ne soit diffusé, juste à côté de l'horodatage du " -"message." +msgstr "En tant que modérateur⋅rice, vous verrez le temps restant (en secondes) avant que le message ne soit diffusé, juste à côté de l'horodatage du message." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -msgstr "" -"![Timer du délai de modération](/peertube-plugin-livechat/images/" -"moderation_delay_timer.png?classes=shadow,border)" +msgstr "![Timer du délai de modération](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md diff --git a/support/documentation/po/livechat.gd.po b/support/documentation/po/livechat.gd.po index a093dd6f..647fd337 100644 --- a/support/documentation/po/livechat.gd.po +++ b/support/documentation/po/livechat.gd.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Gaelic \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.gl.po b/support/documentation/po/livechat.gl.po index 3f67843d..ed7dfe6e 100644 --- a/support/documentation/po/livechat.gl.po +++ b/support/documentation/po/livechat.gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index 4e378a64..223377fe 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-07-01 20:41+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -2895,6 +2895,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.hu.po b/support/documentation/po/livechat.hu.po index 38ac4c3a..1e793f9b 100644 --- a/support/documentation/po/livechat.hu.po +++ b/support/documentation/po/livechat.hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.is.po b/support/documentation/po/livechat.is.po index b4fc8fe6..6ad5fbe0 100644 --- a/support/documentation/po/livechat.is.po +++ b/support/documentation/po/livechat.is.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Icelandic \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.it.po b/support/documentation/po/livechat.it.po index 4df6ccae..4038bcd9 100644 --- a/support/documentation/po/livechat.it.po +++ b/support/documentation/po/livechat.it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 14:21+0000\n" "Last-Translator: John Livingston \n" "Language-Team: Italian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.ja.po b/support/documentation/po/livechat.ja.po index 0eec164e..af5eca86 100644 --- a/support/documentation/po/livechat.ja.po +++ b/support/documentation/po/livechat.ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2024-03-10 20:38+0000\n" "Last-Translator: \"T.S\" \n" "Language-Team: Japanese \n" @@ -2961,6 +2961,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md #, fuzzy diff --git a/support/documentation/po/livechat.kab.po b/support/documentation/po/livechat.kab.po index 0b3191f9..447fec02 100644 --- a/support/documentation/po/livechat.kab.po +++ b/support/documentation/po/livechat.kab.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.nb.po b/support/documentation/po/livechat.nb.po index 3d7824b9..828286e6 100644 --- a/support/documentation/po/livechat.nb.po +++ b/support/documentation/po/livechat.nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Bokmål \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.nl.po b/support/documentation/po/livechat.nl.po index ac98e455..1f6cbed5 100644 --- a/support/documentation/po/livechat.nl.po +++ b/support/documentation/po/livechat.nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dutch \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.nn.po b/support/documentation/po/livechat.nn.po index 659cf1ae..cbea9f32 100644 --- a/support/documentation/po/livechat.nn.po +++ b/support/documentation/po/livechat.nn.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Nynorsk \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.oc.po b/support/documentation/po/livechat.oc.po index 42d36cff..9edc00fe 100644 --- a/support/documentation/po/livechat.oc.po +++ b/support/documentation/po/livechat.oc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Occitan \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.pl.po b/support/documentation/po/livechat.pl.po index e53ee858..752e59f2 100644 --- a/support/documentation/po/livechat.pl.po +++ b/support/documentation/po/livechat.pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Polish \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.pt.po b/support/documentation/po/livechat.pt.po index 63f6732a..741695a9 100644 --- a/support/documentation/po/livechat.pt.po +++ b/support/documentation/po/livechat.pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.ru.po b/support/documentation/po/livechat.ru.po index e199adda..745e9227 100644 --- a/support/documentation/po/livechat.ru.po +++ b/support/documentation/po/livechat.ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Russian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.sq.po b/support/documentation/po/livechat.sq.po index 773d9be7..1269dc1a 100644 --- a/support/documentation/po/livechat.sq.po +++ b/support/documentation/po/livechat.sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.sv.po b/support/documentation/po/livechat.sv.po index fa22faa3..4e4ee793 100644 --- a/support/documentation/po/livechat.sv.po +++ b/support/documentation/po/livechat.sv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.th.po b/support/documentation/po/livechat.th.po index 509fe52d..00a4f61a 100644 --- a/support/documentation/po/livechat.th.po +++ b/support/documentation/po/livechat.th.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.tok.po b/support/documentation/po/livechat.tok.po index f0b2ff34..6da412df 100644 --- a/support/documentation/po/livechat.tok.po +++ b/support/documentation/po/livechat.tok.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Toki Pona \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.tr.po b/support/documentation/po/livechat.tr.po index 185bdd06..99b16ae5 100644 --- a/support/documentation/po/livechat.tr.po +++ b/support/documentation/po/livechat.tr.po @@ -2869,6 +2869,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.uk.po b/support/documentation/po/livechat.uk.po index f39333f2..3b24b3eb 100644 --- a/support/documentation/po/livechat.uk.po +++ b/support/documentation/po/livechat.uk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.vi.po b/support/documentation/po/livechat.vi.po index bdcce264..d9202152 100644 --- a/support/documentation/po/livechat.vi.po +++ b/support/documentation/po/livechat.vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.zh-Hans.po b/support/documentation/po/livechat.zh-Hans.po index be9c463e..24128837 100644 --- a/support/documentation/po/livechat.zh-Hans.po +++ b/support/documentation/po/livechat.zh-Hans.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." diff --git a/support/documentation/po/livechat.zh-Hant.po b/support/documentation/po/livechat.zh-Hant.po index f498f700..181691d9 100644 --- a/support/documentation/po/livechat.zh-Hant.po +++ b/support/documentation/po/livechat.zh-Hant.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-10 16:54+0200\n" +"POT-Creation-Date: 2024-07-17 10:53+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Traditional) \n" @@ -2888,6 +2888,12 @@ msgstr "" msgid "These words are case insensitive." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md +#: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." +msgstr "" + #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." From 8b0d72bf136aef55a66abbdc651f3b1971651d23 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 17 Jul 2024 11:48:43 +0200 Subject: [PATCH 020/136] Fix Converse bug. --- conversejs/build-conversejs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 6245cb6c..bfc01ee8 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -31,6 +31,7 @@ CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" CONVERSE_COMMIT="58c682b9ba09038beb961e9d8f804c270408ea69" CONVERSE_COMMIT="bbee0e4e8d2dc43636385cf4cca34f3604f59520" CONVERSE_COMMIT="86c0522551afb418f8c34e81e381f0f0f4b57903" +CONVERSE_COMMIT="1281b492a62d7e5626fc297657097fab8a48eebc" rootdir="$(pwd)" src_dir="$rootdir/conversejs" From ed0b2eb9131002d67fec1c2bf5d4cc8a3ec89e27 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 18 Jul 2024 10:39:40 +0200 Subject: [PATCH 021/136] ConverseJS merge. --- conversejs/build-conversejs.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index bfc01ee8..bcecbff4 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -27,11 +27,8 @@ CONVERSE_COMMIT="7d65ef8d30a1f3949dbc590b6d27a9d786bf819f" # CONVERSE_VERSION="livechat" # # CONVERSE_COMMIT="4402fcc3fc60f6c9334f86528c33a0b463371d12" CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" -# 2024-07-15, fix MUC save. -CONVERSE_COMMIT="58c682b9ba09038beb961e9d8f804c270408ea69" -CONVERSE_COMMIT="bbee0e4e8d2dc43636385cf4cca34f3604f59520" -CONVERSE_COMMIT="86c0522551afb418f8c34e81e381f0f0f4b57903" -CONVERSE_COMMIT="1281b492a62d7e5626fc297657097fab8a48eebc" +# 2024-07-18, including some fixes that are not merged yet. +CONVERSE_COMMIT="74696f298b8c49ed6feaf29d52bebc854aae48c7" rootdir="$(pwd)" src_dir="$rootdir/conversejs" From 548b79a3a6866207b356439eae18514be2950e20 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Thu, 18 Jul 2024 10:56:09 +0000 Subject: [PATCH 022/136] Translated using Weblate (Albanian) Currently translated at 71.7% (193 of 269 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/sq/ --- languages/sq.yml | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/languages/sq.yml b/languages/sq.yml index ed32287e..69d92e2d 100644 --- a/languages/sq.yml +++ b/languages/sq.yml @@ -188,3 +188,59 @@ federation_description: "

Federim

\nRregulliemt vijuese kanë të bëjnë me instanca të tjera\nPeertube dhe programe të tjera fediversi.\n" invalid_value_file_too_big: 'Madhësia e kartelës është shumë e madhe (madhësi maksimum: %s).' +all_non_lives_description: Në iu vëntë shenjë, fjalosja do të jetë e aktivizuar për + krejt videot që s’janë transmetimet e drejtpërdrejta. +external_auth_custom_oidc_title:

OpenID Connect

+external_auth_custom_oidc_label: Përdorni një shërbim OpenID Connect +external_auth_custom_oidc_button_label_description: Kjo etiketë do t’ju shfaqet përdoruesve, + si etiketa e butonit për kryerje mirëfilltësimi me këtë shërbim OIDC. +per_live_video_description: Në iu vëntë shenjë, krejt videot e transmetuara drejtpërdrejt + do të kenë një kutizë te vetitë e tyre, për aktivizim fjalosjeje. +livechat_configuration_channel_moderation_delay_desc: "Vlerë parazgjedhjeje vonese + moderimi:\n
    \n
  • 0: vonesë moderimi e çaktivizuar
  • \n
  • Çfarëdo numër + i plotë pozitiv: mesazhet do të vonohen për X sekonda për pjesëmarrës që s’janë + moderatorë, duke u lejuar moderatorëve të fshijnë mesazhe para se të mund t’i lexojë + cilido përdorues.
  • \n
\n" +all_lives_description: Në iu vëntë shenjë, fjalosja do të jetë e aktivizuar për krejt + transmetimet e drejtpërdrejta. +all_non_lives_label: Aktivizo fjalosje për krejt transmetimet jo të drejtpërdrejta +room_type_description: Këtu mund të zgjidhni të keni dhoma më vete për çdo video, + ose t’i gruponi sipas kanalesh. +share_url_option_owner_moderators: Shfaqe për të zotin e videos dhe moderatorët e + instancës +poll_vote_instructions: 'Që të votoni, klikoni mbi zgjedhjen tuaj, ose dërgoni një + mesazh me një pikëçuditje pasuar nga numri që keni zgjedhur (Shembull: !1).' +external_auth_custom_oidc_description: "Mund të formësoni një shërbim të jashtëm OpenID + që mund të përdoret për të bërë hyrjen te fjalosja.\nJu lutemi, shihni te dokumentimi:\n + Rregullime.\n" +external_auth_google_oidc_description: "Aktivizimi i kësaj shton një buton “hyrje + me Google”.\nJu duhet të formësoni një aplikacion Google OAuth.\n" +external_auth_facebook_oidc_description: "Aktivizimi i kësaj shton një buton “hyrje + me Facebook”.\nJu duhet të formësoni një aplikacion Facebook OAuth.\n" +share_url_description: Do të ketë një buton për dhënien e URL-së së fjalosjes (mund + të përdoret për integrim OBS, për shembull). +avatar_set_description: "Avatarët parazgjedhje që do të përdoren për përdoruesit i + fjalosjes mund t’i zgjidhni nga disa grupe të ndryshme.\nJu lutemi, shihni te dokumentimi:\n + Rregullime.\n" +livechat_configuration_channel_mute_anonymous_desc: "Vlerë parazgjedhje për dhoma + të reja fjalosjeje.\nPër dhoma ekzistuese, mund të ndryshoni veçorinë te formulari + i formësimit të dhomave.\nKur kjo veçori është e aktivizuar, përdoruesit anonimë + vetëm se do të lexojnë fjalosjen dhe s’mund të dërgojnë mesazhe.\n" +transparent_background: Sfond i tejdukshëm (për integrim transmetimi, me OBS për shembull) +livechat_configuration_channel_emojis_desc: "Mund të formësoni emoxhi vetjake për + kanalin tuaj.\nKëto emoxhi do të jenë të përdorshëm që nga zgjedhësi i tyre.\nPërdoruesit + mund t’i përdoren edhe përmes emrit të shkurtër përkatës (për shembull, duke shkruar + \":emrineshkurtër:\").\n" +important_note_text: "Dokumentimin e shtojcës mund ta gjeni këtu:\n\n Dokumentim Shtojce Peertube Livechat\n.\n" +action_import_emojis_info: Nëse të dhënat e importuara janë në rregull, mos harroni + të ruani formularin. +livechat_configuration_channel_terms_desc: "Mund të formësoni një ndarje “terma & + kushte” që do t’u shfaqet përdoruesve që hyjnë në dhomat tuaja.\n" +poll_vote_instructions_xmpp: 'Që të votoni, dërgoni një mesazh me një pikëçuditje + pasuar nga numri që keni zgjedhur. Shembull: !1' +poll_anonymous_vote_ok: Vota juaj është marrë parasysh. Votat janë anonime, s’do t’u + shfaqen pjesëmarrësve të tjerë. +poll_vote_ok: Vota juaj është marrë parasysh, numëratorët do të përditësohen në çast. From d4ecafb6de5391f44283f5cf22a5769eeb783e2d Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Fri, 19 Jul 2024 14:54:05 +0000 Subject: [PATCH 023/136] Translated using Weblate (Croatian) Currently translated at 90.3% (243 of 269 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/hr/ --- languages/hr.yml | 83 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 76 insertions(+), 7 deletions(-) diff --git a/languages/hr.yml b/languages/hr.yml index acae6a4d..492e5745 100644 --- a/languages/hr.yml +++ b/languages/hr.yml @@ -209,8 +209,8 @@ share_url_description: Postojat će gumb za dijeljenje URL-a chata (može se na koristiti za OBS integraciju). per_live_video_description: Ako je označeno, sva videa uživo imat će potvrdni okvir u svojim svojstvima za aktiviranje web chata. -per_live_video_label: Korisnici mogu aktivirati chat za svoja videa uživo -all_lives_label: Aktiviraj chat za sva videa uživo +per_live_video_label: Korisnici mogu aktivirati chat za svoje prijenose uživo +all_lives_label: Aktiviraj chat za sve prijenose uživo no_anonymous_label: Sakrij chat za anonimne korisnike theming_advanced_description:

Izgled

chat_style_description: "Dodatni stilovi koji se dodaju atributu stila iframea.
\n @@ -234,15 +234,15 @@ external_auth_custom_oidc_description: "Možeš konfigurirati eksternog pružate external_auth_description: "

Eksterna autentifikacija

\nZa korisnike koji nemaju Peertube račun možeš aktivirati različite načine autentifikacije pomoću externih pružatelja usluge autentifikacije.\n" -all_lives_description: Ako je označeno, chat će se aktivirati za sva videa uživo. -all_non_lives_description: Ako je označeno, chat će se aktivirati za sva videa koja - nisu uživo. -all_non_lives_label: Aktiviraj chat za sva videa koja nisu uživo +all_lives_description: Ako je označeno, chat će se aktivirati za sve prijenose uživo. +all_non_lives_description: Ako je označeno, chat će se aktivirati za sve prijenose + koji nisu uživo. +all_non_lives_label: Aktiviraj chat za sve prijenose koji nisu uživo converse_theme_option_concord: ConverseJS concord tema chat_style_label: Atribut stila ifreama za chat prosody_muc_log_by_default_description: "Ako je označeno, sadržaj sobe će se standardno spremati.\nSvaki korisnik koji se pridruži sobi vidjet će što je napisano prije - nego što se pridruži.
\nArhiviranje sadržaja se uvijek moguće aktivirati/deaktivirati\n + nego što se pridruži.
\nArhiviranje sadržaja se uvijek može aktivirati/deaktivirati\n za određenu sobu, uređivanjem njezinih svojstava.\n" auto_ban_anonymous_ip_label: Blokiraj IP anonimnog korisnika kada je korisniku zabranjen pristup chat sobi @@ -275,3 +275,72 @@ share_chat_embed: Ugradi token_label: Oznaka auth_description: "

Autentifikacija

\n" chat_terms_label: Uvjeti i odredbe +muted_anonymous_message: Samo registrirani korisnici mogu slati poruke. +livechat_configuration_channel_mute_anonymous_label: Isključi zvuk anonimnih korisnika +login_remote_peertube_video_not_found_try_anyway: U nekim slučajevima, video se ipak + može dohvatiti ako se povežeš s eksternom instancom. +livechat_configuration_channel_moderation_delay_desc: "Standardna vrijednost odgode + moderiranja:\n
    \n
  • 0: odgoda moderiranja je deaktivirana
  • \n
  • Bilo + koji pozitivni cijeli broj: poruke će se odgoditi za X sekundi za sudionike koji + nisu moderatori, dopuštajući moderatorima da izbrišu poruku prije nego što je bilo + koji korisnik može pročitati.
  • \n
\n" +moderation_delay: Odgoda moderiranja +livechat_configuration_channel_forbidden_words_label_desc: Oznaka za ovo pravilo zabranjenih + riječi +livechat_configuration_channel_emojis_desc: "Možeš konfigurirati prilagođene emojije + za svoj kanal.\nOvi emojiji će biti dostupni u alatu za biranje emojija.\nKorisnici + ih također mogu koristiti sa svojim kratkim imenom (na primjer tako da napišu \"\ + :shortname:\").\n" +livechat_emojis_shortname_desc: "Emotikone možeš koristiti u chatu koristeći \":shortname:\"\ + .\nKratko ime može započeti i/ili završiti dvotočkom (:) te koristiti samo alfanumeričke + znakove, podvlake i crtice.\nPreporuča se započeti ih dvotočkom, kako bi korisnici + mogli koristiti automatsko dovršavanje (upisivanjem \":\" i pritiskom tipke tabulatora).\n" +validation_error: Došlo je do greške tijekom provjere valjanosti. +help_builtin_prosody_description: "Ovaj dodatak koristi Prosody XMPP server za upravljanje + sobama za razgovor.
\nOvaj dodatak dolazi s Prosody AppImage koji će se koristiti + za pokretanje usluge.\n" +livechat_configuration_channel_terms_desc: "Možeš konfigurirati poruku „uvjeti i odredbe” + koja će se prikazati korisnicima koji se pridružuju tvojim chat sobama.\n" +poll_vote_instructions_xmpp: 'Pošalji poruku s uskličnikom i brojem izbora za glasanje. + Primjer: !1' +invalid_value_file_too_big: 'Datoteka je prevelika (maksimalna veličina: %s).' +per_live_video_warning_description: "\n Postavka „Korisnici mogu aktivirati chat za svoje prijenose uživo” je aktivirana.\n\ + \ Postavka je redundanta s postavkom „Aktiviraj chat za sve prijenose uživo”.\n\ + \n" +new_poll: Stvori novu anketu +invalid_value_missing: Ova je vrijednost obavezna. +invalid_value_wrong_type: Neispravna vrsta vrijednost. +invalid_value_wrong_format: Neispravan format vrijednosti. +invalid_value_not_in_range: Vrijednost ne odgovara dopuštenom rasponu. +invalid_value_duplicate: Dupla vrijednost +too_many_entries: Previše unosa +promote: Postani moderator +livechat_emojis_shortname: Kratko ime +action_import_emojis_info: Ako su uvezeni podaci u redu, ne zaboravi spremiti obrazac. +share_chat_peertube_tips: Ova će poveznica otvoriti chat unutar Peertube sučelja. +token_password: Token lozinke +token_date: Datum +token_action_create: Stvori novi token +token_default_label: Token generiran iz web sučelja +token_action_revoke: Opozovi token +token_action_revoke_confirm: Stvarno želiš opozvati ovaj token? +livechat_token_disabled_label: Deaktiviraj tokene za chat uživo +invalid_value_too_long: Vrijednost je predugačka +livechat_configuration_channel_terms_label: Uvjeti i odredbe kanala chata +poll: Anketa +poll_title: Nova anketa +poll_instructions: Ispuni i pošalji ovaj obrazac za izradu nove ankete. Ovo će zamijeniti + sve postojeće ankete. +poll_question: Pitanje +poll_duration: Trajanje ankete (u minutama) +poll_anonymous_results: Anonimni rezultati +poll_choice_n: 'Izbor {{N}}:' +poll_end: 'Anketa završava:' +poll_vote_instructions: 'Za glasanje klikni na svoj izbor ili pošalji poruku s uskličnikom + iza kojeg slijedi broj tvog izbora (Primjer: !1).' +poll_is_over: Ova anketa je sada završena. +poll_choice_invalid: Ovaj izbor nije valjan. +poll_anonymous_vote_ok: Tvoje se glasanje uzima u obzir. Glasanja su anonimna, neće + se prikazati drugim sudionicima. +poll_vote_ok: Tvoje se glasanje uzima u obzir. Brojači će se uskoro aktualizirati. From 1b4ccf669361095b44946781b1a4fa3d6e52c277 Mon Sep 17 00:00:00 2001 From: "T.S" Date: Sat, 20 Jul 2024 06:26:44 +0000 Subject: [PATCH 024/136] Translated using Weblate (Japanese) Currently translated at 63.5% (171 of 269 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/ja/ --- languages/ja.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/languages/ja.yml b/languages/ja.yml index 8a796c03..9df3635c 100644 --- a/languages/ja.yml +++ b/languages/ja.yml @@ -7,7 +7,7 @@ share_chat_link: チャットリンクを共有 read_only: 読み取り専用にする show_scrollbarr: スクロールバーを表示する transparent_background: 透過型背景にする (OBSなどを使用したストリーミング連携に最適) -tips_for_streamers: "ストリーマーの方へ: OBSにチャットを追加する場合は、読み取り専用のチャットリンクを生成し、ブラウザソースで読み込んでください。" +tips_for_streamers: "ストリーマーの方へ: OBSなどを使用して動画ストリームにチャットを埋め込む場合は、読み取り専用のチャットリンクを生成し、ブラウザソースで読み込んでください。\n" copy: コピー link_copied: リンクをコピーしました error: エラー @@ -230,3 +230,4 @@ external_auth_custom_oidc_description: "チャットへのログインに、外 \ target=\"_blank\">設定ページ\n" external_auth_custom_oidc_button_label_description: このラベルは、OIDCプロバイダーを使用して認証するボタン名としてユーザーに表示されます。 copied: コピーしました +chat_terms_label: 利用規約 From 36323569c0190cafc2fe691683ad6e4f60041e61 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 18 Jul 2024 14:52:44 +0000 Subject: [PATCH 025/136] Translated using Weblate (French) Currently translated at 100.0% (809 of 809 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/fr/ --- support/documentation/po/livechat.fr.po | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index 807da99e..4020f06b 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -8,9 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-07-17 10:53+0200\n" -"PO-Revision-Date: 2024-07-11 07:38+0000\n" +"PO-Revision-Date: 2024-07-18 15:05+0000\n" "Last-Translator: John Livingston \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2984,6 +2985,11 @@ msgstr "Ces mots ne sont pas sensibles à la casse." #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." msgstr "" +"Vous pouvez combiner un [délai de modération](/peertube-plugin-livechat/fr/" +"documentation/user/streamers/moderation_delay) court (1 seconde par exemple) " +"avec le [bot dé modération](/peertube-plugin-livechat/fr/documentation/user/" +"streamers/bot) pour supprimer les messages contenant des gros mots avant " +"même qu'un⋅e utilisateur⋅rice non-modérateur⋅rice ne les voie." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md From e938f7918271395afa20235c5ff1549b753322c0 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Fri, 19 Jul 2024 13:33:55 +0000 Subject: [PATCH 026/136] Translated using Weblate (Croatian) Currently translated at 13.1% (106 of 809 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/hr/ --- support/documentation/po/livechat.hr.po | 72 ++++++++++++++----------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index 223377fe..0bf82112 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -7,15 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" "POT-Creation-Date: 2024-07-17 10:53+0200\n" -"PO-Revision-Date: 2024-07-01 20:41+0000\n" +"PO-Revision-Date: 2024-07-19 17:45+0000\n" "Last-Translator: Milo Ivir \n" -"Language-Team: Croatian \n" +"Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.6.1\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.6.2\n" #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/contact/_index.md @@ -1854,10 +1856,9 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/admin/_index.md -#, fuzzy, no-wrap -#| msgid "Write documentation" +#, no-wrap msgid "Admin documentation" -msgstr "Piši dokumentaciju" +msgstr "Dokumentacija za administratore" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/admin/settings.md @@ -2094,10 +2095,13 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -#, fuzzy, no-wrap -#| msgid "If this settings is left empty, and you are using Peertube >= 5.1 or later, the plugin will use values from your Peertube configuration file to guess on which interface and port request have to be done.\n" +#, no-wrap msgid "If this setting is left empty, and you are using Peertube >= 5.1 or later, the plugin will use values from your Peertube configuration file to guess on which interface and port request have to be done.\n" -msgstr "Ako je ova postavka ostavljena prazna i koristiš Peertube verziju ≥ 5.1 ili noviju, dodatak će koristiti vrijednosti iz tvoje Peertube konfiguracijske datoteke kako bi pogodio na kojem sučelju i priključku treba izvršiti zahtjev.\n" +msgstr "" +"Ako je ova postavka ostavljena prazna i koristiš Peertube verziju ≥ 5.1 ili " +"noviju, dodatak će koristiti vrijednosti iz tvoje Peertube konfiguracijske " +"datoteke kako bi pogodio na kojem sučelju i priključku treba izvršiti " +"zahtjev.\n" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -2422,10 +2426,9 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/_index.md -#, fuzzy, no-wrap -#| msgid "Write documentation" +#, no-wrap msgid "User documentation" -msgstr "Piši dokumentaciju" +msgstr "Dokumentacija za korisnike" #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/obs.md @@ -3082,7 +3085,7 @@ msgstr "" #: build/documentation/pot_in/documentation/user/streamers/emojis.md #, no-wrap msgid "Import / Export" -msgstr "" +msgstr "Uvoz / Izvoz" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md @@ -3110,6 +3113,10 @@ msgstr "" #: build/documentation/pot_in/documentation/user/streamers/emojis.md msgid "The `sn` attribute is the short name code. The `url` attribute can be any image url than your browser can access, or a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) representing the file you want to import." msgstr "" +"Atribut `sn` je kod kratkog imena. Atribut `url` može biti bilo koji url " +"slike kojem tvoj preglednik može pristupiti ili [URL " +"podataka](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/" +"Data_URLs) koji predstavlja datoteku koju želiš uvesti." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/_index.md @@ -3131,17 +3138,14 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -#, fuzzy, no-wrap -#| msgid "Federation" +#, no-wrap msgid "Moderation delay" -msgstr "Federacija" +msgstr "Odgoda moderiranja" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -#, fuzzy -#| msgid "This feature comes with the livechat plugin version 10.1.0." msgid "This feature comes with the livechat plugin version 10.3.0." -msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.1.0." +msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.3.0." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3150,7 +3154,7 @@ msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.1.0." #: support/documentation/content/en/intro/_index.md #, no-wrap msgid "Introduction" -msgstr "" +msgstr "Uvod" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3171,19 +3175,23 @@ msgstr "" #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md #, no-wrap msgid "Moderation delay option" -msgstr "" +msgstr "Opcije odgode moderiranja" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -#, fuzzy -#| msgid "To configure the terms & conditions, go to the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel):" msgid "On the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel), you can set the \"{{% livechat_label moderation_delay %}}\" option:" -msgstr "Za konfiguriranje uvjeta i odredbi idi na [stranicu za konfiguraciju kanala](/peertube-plugin-livechat/hr/documentation/user/streamers/channel):" +msgstr "" +"Na [stranici za konfiguraciju kanala](/peertube-plugin-livechat/hr/" +"documentation/user/streamers/channel) možeš postaviti opciju „{{% " +"livechat_label moderation_delay %}}”:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" msgstr "" +"![Konfiguracija kanala / Odgoda moderiranja](/peertube-plugin-livechat/" +"images/moderation_delay_channel_option." +"png?classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3227,6 +3235,8 @@ msgstr "" #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" msgstr "" +"![Timer odgode moderiranja](/peertube-plugin-livechat/images/" +"moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3288,10 +3298,8 @@ msgstr "" #: build/documentation/pot_in/documentation/user/streamers/moderation.md #: support/documentation/content/en/documentation/user/streamers/polls.md #: support/documentation/content/en/documentation/user/streamers/terms.md -#, fuzzy -#| msgid "This feature comes with the livechat plugin version 10.1.0." msgid "This feature comes with the livechat plugin version 10.2.0." -msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.1.0." +msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.2.0." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3484,10 +3492,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -#, fuzzy -#| msgid "[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}](/peertube-plugin-livechat/documentation/user/streamers/moderation) default value" msgid "Every user that is not muted can vote. This means that you can prevent anonymous users to vote by using the [\"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" feature](/peertube-plugin-livechat/documentation/user/streamers/moderation)." -msgstr "[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}](/peertube-plugin-livechat/hr/documentation/user/streamers/moderation) standardna vrijednost" +msgstr "" +"Svaki korisnik koji nije isključen može glasati. To znači da možeš " +"spriječiti anonimne korisnike da glasaju pomoću funkcije [\"{{% " +"livechat_label livechat_configuration_channel_mute_anonymous_label " +"%}}\"](/peertube-plugin-livechat/documentation/user/streamers/moderation)." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/polls.md From a7bd0c1c3e959eb132f16b174f78dcc9677a5c2b Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Wed, 24 Jul 2024 06:12:05 +0000 Subject: [PATCH 027/136] Translated using Weblate (German) Currently translated at 100.0% (809 of 809 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/ --- support/documentation/po/livechat.de.po | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index fdf2a8e3..32a0b06d 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -8,9 +8,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-07-17 10:53+0200\n" -"PO-Revision-Date: 2024-07-12 09:10+0000\n" -"Last-Translator: Victor Hampel \n" -"Language-Team: German \n" +"PO-Revision-Date: 2024-07-24 09:23+0000\n" +"Last-Translator: Victor Hampel " +"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2966,6 +2968,11 @@ msgstr "Bei diesen Wörtern wird die Groß- und Kleinschreibung nicht berücksic #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." msgstr "" +"Sie können eine kurze [Moderationsverzögerung](/peertube-plugin-livechat/de/" +"documentation/user/streamers/moderation_delay) (z.B. 1 Sekunde) mit dem " +"[Moderations-Chatbot](/peertube-plugin-livechat/de/documentation/user/" +"streamers/bot) kombinieren, um Nachrichten mit Schimpfwörtern zu löschen, " +"bevor ein Nicht-Moderator sie sieht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md From b40b3a2716aee074314860d8c43d3bc8de203853 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 25 Jul 2024 11:12:49 +0200 Subject: [PATCH 028/136] Changelog. --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb55078d..289c2df6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ ### Minor changes and fixes -* New translation: Albanian +* New translation: Albanian. +* Translation updates: Crotian, Japanese. ## 10.3.2 From c6c365abf09403f5d6a88f78f943b68022d2dcd6 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 25 Jul 2024 15:34:27 +0200 Subject: [PATCH 029/136] Avatar set for anonymous users: new 'none' choice (that will fallback to Converse new colorized avatars). --- CHANGELOG.md | 1 + languages/en.yml | 1 + server/lib/external-auth/oidc.ts | 12 ++++++------ server/lib/prosody/config.ts | 27 +++++++++++++++++++-------- server/lib/prosody/config/paths.ts | 4 ++-- server/lib/settings.ts | 5 +++-- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c07af460..31697e68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### Minor changes and fixes +* Avatar set for anonymous users: new 'none' choice (that will fallback to Converse new colorized avatars). * New translation: Albanian. * Translation updates: Crotian, Japanese. diff --git a/languages/en.yml b/languages/en.yml index 35c2d624..caa4808a 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -181,6 +181,7 @@ avatar_set_option_fenec: "Fenecs (Mobilizon mascot)" avatar_set_option_abstract: Abstract avatar_set_option_legacy: "Legacy Sepia avatars (those included in previous plugin versions)" +avatar_set_option_none: None converse_theme_label: "ConverseJS theme" converse_theme_description: "Please choose the converseJS theme you want to use." diff --git a/server/lib/external-auth/oidc.ts b/server/lib/external-auth/oidc.ts index a694d00e..b2780450 100644 --- a/server/lib/external-auth/oidc.ts +++ b/server/lib/external-auth/oidc.ts @@ -87,8 +87,8 @@ class ExternalAuthOIDC { private readonly redirectUrl: string private readonly connectUrl: string private readonly externalVirtualhost: string - private readonly avatarsDir: string - private readonly avatarsFiles: string[] + private readonly avatarsDir: string | undefined + private readonly avatarsFiles: string[] | undefined private readonly encryptionOptions = { algorithm: 'aes256' as string, @@ -129,8 +129,8 @@ class ExternalAuthOIDC { connectUrl: string redirectUrl: string externalVirtualhost: string - avatarsDir: string - avatarsFiles: string[] + avatarsDir?: string + avatarsFiles?: string[] }) { this.logger = { debug: (s) => params.logger.debug('[ExternalAuthOIDC] ' + s), @@ -591,8 +591,8 @@ class ExternalAuthOIDC { */ private async getRandomAvatar (): Promise { try { - if (!this.avatarsDir || !this.avatarsFiles.length) { - throw new Error('Seems there is no default avatars') + if (!this.avatarsDir || !this.avatarsFiles?.length) { + return undefined } const file = this.avatarsFiles[Math.floor(Math.random() * this.avatarsFiles.length)] diff --git a/server/lib/prosody/config.ts b/server/lib/prosody/config.ts index 97cd17d0..9bf45d64 100644 --- a/server/lib/prosody/config.ts +++ b/server/lib/prosody/config.ts @@ -102,14 +102,23 @@ async function getProsodyFilePaths (options: RegisterServerOptions): Promise { const { peertubeHelpers, settingsManager } = options @@ -510,7 +510,8 @@ function initThemingSettings ({ registerSetting }: RegisterServerOptions): void { value: 'bird', label: loc('avatar_set_option_bird') }, { value: 'fenec', label: loc('avatar_set_option_fenec') }, { value: 'abstract', label: loc('avatar_set_option_abstract') }, - { value: 'legacy', label: loc('avatar_set_option_legacy') } + { value: 'legacy', label: loc('avatar_set_option_legacy') }, + { value: 'none', label: loc('avatar_set_option_none') } ] as Array<{ value: AvatarSet label: string From 81632fa467190b9640c6473f5df414ea1082de93 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 25 Jul 2024 18:03:46 +0200 Subject: [PATCH 030/136] livechat-specific Converse plugin: refactoring --- conversejs/lib/plugins/livechat-specific.ts | 261 +----------------- .../livechat-specific/chatroom-message.ts | 11 + .../livechat-specific/chatroom-occupants.ts | 21 ++ .../lib/plugins/livechat-specific/chatroom.ts | 28 ++ .../lib/plugins/livechat-specific/heading.ts | 75 +++++ .../plugins/livechat-specific/reconnection.ts | 66 +++++ .../lib/plugins/livechat-specific/toolbar.ts | 69 +++++ .../lib/plugins/livechat-specific/utils.ts | 55 ++++ 8 files changed, 338 insertions(+), 248 deletions(-) create mode 100644 conversejs/lib/plugins/livechat-specific/chatroom-message.ts create mode 100644 conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts create mode 100644 conversejs/lib/plugins/livechat-specific/chatroom.ts create mode 100644 conversejs/lib/plugins/livechat-specific/heading.ts create mode 100644 conversejs/lib/plugins/livechat-specific/reconnection.ts create mode 100644 conversejs/lib/plugins/livechat-specific/toolbar.ts create mode 100644 conversejs/lib/plugins/livechat-specific/utils.ts diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index b50d254e..ef62eaeb 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -2,6 +2,13 @@ // // SPDX-License-Identifier: AGPL-3.0-only +import { customizeHeading } from './livechat-specific/heading' +import { customizeToolbar } from './livechat-specific/toolbar' +import { initReconnectionStuff } from './livechat-specific/reconnection' +import { chatRoomOverrides } from './livechat-specific/chatroom' +import { chatRoomMessageOverrides } from './livechat-specific/chatroom-message' +import { chatRoomOccupantsOverrides } from './livechat-specific/chatroom-occupants' + export const livechatSpecificsPlugin = { dependencies: ['converse-muc', 'converse-muc-views'], initialize: function (this: any) { @@ -14,166 +21,15 @@ export const livechatSpecificsPlugin = { livechat_specific_is_anonymous: false }) - _converse.api.listen.on('getHeadingButtons', (view: any, buttons: any[]) => { - if (view.model.get('type') !== _converse.constants.CHATROOMS_TYPE) { - // only on MUC. - return buttons - } - - if (_converse.api.settings.get('livechat_specific_external_authent')) { - // Adding a logout button - buttons.push({ - i18n_text: _converse.__('Log out'), - handler: async (ev: Event) => { - ev.preventDefault() - ev.stopPropagation() - - const messages = [_converse.__('Are you sure you want to leave this groupchat?')] - const result = await _converse.api.confirm(_converse.__('Confirm'), messages) - if (!result) { return } - - // Deleting access token in sessionStorage. - window.sessionStorage.removeItem('peertube-plugin-livechat-external-auth-oidc-token') - - const reconnectMode = _converse.api.settings.get('livechat_external_auth_reconnect_mode') - if (reconnectMode === 'button-close-open') { - const button = document.getElementsByClassName('peertube-plugin-livechat-button-close')[0] - if ((button as HTMLAnchorElement).click) { (button as HTMLAnchorElement).click() } - return - } - - window.location.reload() - }, - a_class: 'close-chatbox-button', - icon_class: 'fa-sign-out-alt', - name: 'signout' - }) - } - - return buttons - }) - - _converse.api.listen.on('getToolbarButtons', (toolbarEl: any, buttons: any[]) => { - // We will replace the toggle occupant button, to change its appearance. - // First, we must find it. We search from the end, because usually it is the last one. - let toggleOccupantButton: any - for (const button of buttons.reverse()) { - if (button.strings?.find((s: string) => s.includes('toggle_occupants'))) { // searching the classname - console.debug('[livechatSpecificsPlugin] found the toggle occupants button', button) - toggleOccupantButton = button - break - } - } - if (!toggleOccupantButton) { - console.debug('[livechatSpecificsPlugin] Did not found the toggle occupants button') - return buttons - } - - buttons = buttons.filter(b => b !== toggleOccupantButton) - // Replacing by the new button... - // Note: we don't need to test conditions, we know the button was here. - const i18nHideOccupants = _converse.__('Hide participants') - const i18nShowOccupants = _converse.__('Show participants') - const html = window.converse.env.html - const icon = toolbarEl.hidden_occupants - ? html` - - - ` - : html` - - - ` - buttons.push(html` - ` - ) - return buttons - }) - - // Overriding the MUCHeading custom element, to customize the destroyMUC function: - const MUCHeading = _converse.api.elements.registry['converse-muc-heading'] - if (MUCHeading) { - class MUCHeadingOverloaded extends MUCHeading { - async destroy (ev: Event): Promise { - ev.preventDefault() - await destroyMUC(_converse, this.model) // here we call a custom version of destroyMUC - } - } - _converse.api.elements.define('converse-muc-heading', MUCHeadingOverloaded) - } + customizeHeading(this) + customizeToolbar(this) _converse.api.listen.on('chatRoomViewInitialized', function (this: any, _model: any): void { // Remove the spinner if present... document.getElementById('livechat-loading-spinner')?.remove() }) - // Adding a method on window.converse, so we can close the chat on navigation-end event - // (when chatIncludeMode is peertube-*) - window.converse.livechatDisconnect = function livechatDisconnect () { - if (_converse.api.connection.connected()) { - console.log('[livechatSpecificsPlugin] disconnecting converseJS...') - _converse.api.user.logout() - } - } - - // To reconnect ConverseJS when joining another room (or the same one), - // we store the relevant closure function: - window.reconnectConverse = function reconnectConverse (params: any): void { - console.log('[livechatSpecificsPlugin] reconnecting converseJS...') - - // The new room to join: - _converse.api.settings.set('auto_join_rooms', params.auto_join_rooms) - _converse.api.settings.set('notify_all_room_messages', params.notify_all_room_messages) - - // update connection parameters (in case the user logged in after the first chat) - for (const k of [ - 'bosh_service_url', 'websocket_url', - 'authentication', 'nickname', 'muc_nickname_from_jid', 'auto_login', 'jid', 'password', 'keepalive' - ]) { - _converse.api.settings.set(k, params[k]) - } - - // update other settings - for (const k of [ - 'hide_muc_participants', - 'livechat_enable_viewer_mode', - 'livechat_external_auth_oidc_buttons', - 'livechat_external_auth_reconnect_mode', - 'livechat_mini_muc_head', - 'livechat_specific_external_authent', - 'livechat_task_app_enabled', - 'livechat_task_app_restore', - 'livechat_custom_emojis_url', - 'emoji_categories' - ]) { - _converse.api.settings.set(k, params[k]) - } - - // We also unload emojis, in case there are custom emojis. - window.converse.emojis = { - initialized: false, - initialized_promise: getOpenPromise() - } - - // Then login. - _converse.api.user.login() - } + initReconnectionStuff(this) if (window.location.protocol === 'http:') { // We are probably on a dev instance, so we will add _converse in window: @@ -181,99 +37,8 @@ export const livechatSpecificsPlugin = { } }, overrides: { - ChatRoom: { - getActionInfoMessage: function getActionInfoMessage (this: any, code: string, nick: string, actor: any): any { - if (code === '303') { - // When there is numerous anonymous users joining at the same time, - // they can all change their nicknames at the same time, generating a log of action messages. - // To mitigate this, will don't display nickname changes if the previous nick is something like - // 'Anonymous 12345'. - if (/^Anonymous \d+$/.test(nick)) { - // To avoid displaying the message, we just have to return an empty one - // (createInfoMessage will ignore if !data.message). - return null - } - } - return this.__super__.getActionInfoMessage(code, nick, actor) - }, - canPostMessages: function canPostMessages (this: any) { - // ConverseJS does not handle properly the visitor role in unmoderated rooms. - // See https://github.com/conversejs/converse.js/issues/3428 for more info. - // FIXME: if #3428 is fixed, remove this override. - return this.isEntered() && this.getOwnRole() !== 'visitor' - } - }, - ChatRoomMessage: { - /* By default, ConverseJS groups messages from the same users for a 10 minutes period. - * This make no sense in a livechat room. So we override isFollowup to ignore. */ - isFollowup: function isFollowup () { return false } - }, - ChatRoomOccupants: { - comparator: function (this: any, occupant1: any, occupant2: any): Number { - // Overriding Occupants comparators, to display anonymous users at the end of the list. - const nick1: string = occupant1.getDisplayName() - const nick2: string = occupant2.getDisplayName() - const b1 = nick1.startsWith('Anonymous ') - const b2 = nick2.startsWith('Anonymous ') - if (b1 === b2) { - // Both startswith anonymous, or non of it: fallback to the standard comparator. - return this.__super__.comparator(occupant1, occupant2) - } - // Else: Anonymous always last. - return b1 ? 1 : -1 - } - } - } -} - -// FIXME: this function is copied from @converse. Should not do so. -function getOpenPromise (): any { - const wrapper: any = { - isResolved: false, - isPending: true, - isRejected: false - } - const promise: any = new Promise((resolve, reject) => { - wrapper.resolve = resolve - wrapper.reject = reject - }) - Object.assign(promise, wrapper) - promise.then( - function (v: any) { - promise.isResolved = true - promise.isPending = false - promise.isRejected = false - return v - }, - function (e: any) { - promise.isResolved = false - promise.isPending = false - promise.isRejected = true - throw (e) - } - ) - return promise -} - -async function destroyMUC (_converse: any, model: any): Promise { - const __ = _converse.__ - const messages = [__('Are you sure you want to destroy this groupchat?')] - // Note: challenge and newjid make no sens for peertube-plugin-livechat, - // we remove them comparing to the original function. - let fields = [ - { - name: 'reason', - label: __('Optional reason for destroying this groupchat'), - placeholder: __('Reason'), - value: undefined - } - ] - try { - fields = await _converse.api.confirm(__('Confirm'), messages, fields) - const reason = fields.filter(f => f.name === 'reason').pop()?.value - const newjid = undefined - return model.sendDestroyIQ(reason, newjid).then(() => model.close()) - } catch (e) { - console.error(e) + ChatRoom: chatRoomOverrides(), + ChatRoomMessage: chatRoomMessageOverrides(), + ChatRoomOccupants: chatRoomOccupantsOverrides() } } diff --git a/conversejs/lib/plugins/livechat-specific/chatroom-message.ts b/conversejs/lib/plugins/livechat-specific/chatroom-message.ts new file mode 100644 index 00000000..c34ddff7 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/chatroom-message.ts @@ -0,0 +1,11 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +export function chatRoomMessageOverrides (): {[key: string]: Function} { + return { + /* By default, ConverseJS groups messages from the same users for a 10 minutes period. + * This make no sense in a livechat room. So we override isFollowup to ignore. */ + isFollowup: function isFollowup () { return false } + } +} diff --git a/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts b/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts new file mode 100644 index 00000000..51685231 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +export function chatRoomOccupantsOverrides (): {[key: string]: Function} { + return { + comparator: function (this: any, occupant1: any, occupant2: any): Number { + // Overriding Occupants comparators, to display anonymous users at the end of the list. + const nick1: string = occupant1.getDisplayName() + const nick2: string = occupant2.getDisplayName() + const b1 = nick1.startsWith('Anonymous ') + const b2 = nick2.startsWith('Anonymous ') + if (b1 === b2) { + // Both startswith anonymous, or non of it: fallback to the standard comparator. + return this.__super__.comparator(occupant1, occupant2) + } + // Else: Anonymous always last. + return b1 ? 1 : -1 + } + } +} diff --git a/conversejs/lib/plugins/livechat-specific/chatroom.ts b/conversejs/lib/plugins/livechat-specific/chatroom.ts new file mode 100644 index 00000000..b41871ab --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/chatroom.ts @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +export function chatRoomOverrides (): {[key: string]: Function} { + return { + getActionInfoMessage: function getActionInfoMessage (this: any, code: string, nick: string, actor: any): any { + if (code === '303') { + // When there is numerous anonymous users joining at the same time, + // they can all change their nicknames at the same time, generating a log of action messages. + // To mitigate this, will don't display nickname changes if the previous nick is something like + // 'Anonymous 12345'. + if (/^Anonymous \d+$/.test(nick)) { + // To avoid displaying the message, we just have to return an empty one + // (createInfoMessage will ignore if !data.message). + return null + } + } + return this.__super__.getActionInfoMessage(code, nick, actor) + }, + canPostMessages: function canPostMessages (this: any) { + // ConverseJS does not handle properly the visitor role in unmoderated rooms. + // See https://github.com/conversejs/converse.js/issues/3428 for more info. + // FIXME: if #3428 is fixed, remove this override. + return this.isEntered() && this.getOwnRole() !== 'visitor' + } + } +} diff --git a/conversejs/lib/plugins/livechat-specific/heading.ts b/conversejs/lib/plugins/livechat-specific/heading.ts new file mode 100644 index 00000000..38170d14 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/heading.ts @@ -0,0 +1,75 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { destroyMUC } from './utils' + +/** + * Do some customization on MUCHeading: + * * adds a logout button for users that are authenticated with an external account + * * change the destroyMUC handler + * + * @param plugin The plugin object + */ +export function customizeHeading (plugin: any): void { + const _converse = plugin._converse + _converse.api.listen.on('getHeadingButtons', getHeadingButtons.bind(plugin)) + overrideMUCHeadingElement(_converse) +} + +function getHeadingButtons (this: any, view: any, buttons: any[]): any { + const _converse = this._converse + + if (view.model.get('type') !== _converse.constants.CHATROOMS_TYPE) { + // only on MUC. + return buttons + } + + if (_converse.api.settings.get('livechat_specific_external_authent')) { + // Adding a logout button + buttons.push({ + i18n_text: _converse.__('Log out'), + handler: async (ev: Event) => { + ev.preventDefault() + ev.stopPropagation() + + const messages = [_converse.__('Are you sure you want to leave this groupchat?')] + const result = await _converse.api.confirm(_converse.__('Confirm'), messages) + if (!result) { return } + + // Deleting access token in sessionStorage. + window.sessionStorage.removeItem('peertube-plugin-livechat-external-auth-oidc-token') + + const reconnectMode = _converse.api.settings.get('livechat_external_auth_reconnect_mode') + if (reconnectMode === 'button-close-open') { + const button = document.getElementsByClassName('peertube-plugin-livechat-button-close')[0] + if ((button as HTMLAnchorElement).click) { (button as HTMLAnchorElement).click() } + return + } + + window.location.reload() + }, + a_class: 'close-chatbox-button', + icon_class: 'fa-sign-out-alt', + name: 'signout' + }) + } + + return buttons +} + +/** + * Override the MUCHeading custom element, to customize the destroyMUC function. + */ +function overrideMUCHeadingElement (_converse: any): void { + const MUCHeading = _converse.api.elements.registry['converse-muc-heading'] + if (MUCHeading) { + class MUCHeadingOverloaded extends MUCHeading { + async destroy (ev: Event): Promise { + ev.preventDefault() + await destroyMUC(_converse, this.model) // here we call a custom version of destroyMUC + } + } + _converse.api.elements.define('converse-muc-heading', MUCHeadingOverloaded) + } +} diff --git a/conversejs/lib/plugins/livechat-specific/reconnection.ts b/conversejs/lib/plugins/livechat-specific/reconnection.ts new file mode 100644 index 00000000..b75bf488 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/reconnection.ts @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { getOpenPromise } from './utils' + +/** + * Initialiaze some function on `window` that will be used for the reconnection process. + * + * @param plugin The plugin object + */ +export function initReconnectionStuff (plugin: any): void { + const _converse = plugin._converse + + // Adding a method on window.converse, so we can close the chat on navigation-end event + // (when chatIncludeMode is peertube-*) + window.converse.livechatDisconnect = function livechatDisconnect () { + if (_converse.api.connection.connected()) { + console.log('[livechatSpecificsPlugin] disconnecting converseJS...') + _converse.api.user.logout() + } + } + + // To reconnect ConverseJS when joining another room (or the same one), + // we store the relevant closure function: + window.reconnectConverse = function reconnectConverse (params: any): void { + console.log('[livechatSpecificsPlugin] reconnecting converseJS...') + + // The new room to join: + _converse.api.settings.set('auto_join_rooms', params.auto_join_rooms) + _converse.api.settings.set('notify_all_room_messages', params.notify_all_room_messages) + + // update connection parameters (in case the user logged in after the first chat) + for (const k of [ + 'bosh_service_url', 'websocket_url', + 'authentication', 'nickname', 'muc_nickname_from_jid', 'auto_login', 'jid', 'password', 'keepalive' + ]) { + _converse.api.settings.set(k, params[k]) + } + + // update other settings + for (const k of [ + 'hide_muc_participants', + 'livechat_enable_viewer_mode', + 'livechat_external_auth_oidc_buttons', + 'livechat_external_auth_reconnect_mode', + 'livechat_mini_muc_head', + 'livechat_specific_external_authent', + 'livechat_task_app_enabled', + 'livechat_task_app_restore', + 'livechat_custom_emojis_url', + 'emoji_categories' + ]) { + _converse.api.settings.set(k, params[k]) + } + + // We also unload emojis, in case there are custom emojis. + window.converse.emojis = { + initialized: false, + initialized_promise: getOpenPromise() + } + + // Then login. + _converse.api.user.login() + } +} diff --git a/conversejs/lib/plugins/livechat-specific/toolbar.ts b/conversejs/lib/plugins/livechat-specific/toolbar.ts new file mode 100644 index 00000000..bbe4a6d0 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/toolbar.ts @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +/** + * Do some customization on the toolbar: + * * change the appearance of the toggle occupants button + * + * @param plugin The plugin object + */ +export function customizeToolbar (plugin: any): void { + const _converse = plugin._converse + _converse.api.listen.on('getToolbarButtons', getToolbarButtons.bind(plugin)) +} + +function getToolbarButtons (this: any, toolbarEl: any, buttons: any[]): any { + const _converse = this._converse + + // We will replace the toggle occupant button, to change its appearance. + // First, we must find it. We search from the end, because usually it is the last one. + let toggleOccupantButton: any + for (const button of buttons.reverse()) { + if (button.strings?.find((s: string) => s.includes('toggle_occupants'))) { // searching the classname + console.debug('[livechatSpecificsPlugin] found the toggle occupants button', button) + toggleOccupantButton = button + break + } + } + if (!toggleOccupantButton) { + console.debug('[livechatSpecificsPlugin] Did not found the toggle occupants button') + return buttons + } + + buttons = buttons.filter(b => b !== toggleOccupantButton) + // Replacing by the new button... + // Note: we don't need to test conditions, we know the button was here. + const i18nHideOccupants = _converse.__('Hide participants') + const i18nShowOccupants = _converse.__('Show participants') + const html = window.converse.env.html + const icon = toolbarEl.hidden_occupants + ? html` + + + ` + : html` + + + ` + buttons.push(html` + ` + ) + return buttons +} diff --git a/conversejs/lib/plugins/livechat-specific/utils.ts b/conversejs/lib/plugins/livechat-specific/utils.ts new file mode 100644 index 00000000..14644041 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/utils.ts @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +// FIXME: this function is copied from @converse. Should not do so. +export function getOpenPromise (): any { + const wrapper: any = { + isResolved: false, + isPending: true, + isRejected: false + } + const promise: any = new Promise((resolve, reject) => { + wrapper.resolve = resolve + wrapper.reject = reject + }) + Object.assign(promise, wrapper) + promise.then( + function (v: any) { + promise.isResolved = true + promise.isPending = false + promise.isRejected = false + return v + }, + function (e: any) { + promise.isResolved = false + promise.isPending = false + promise.isRejected = true + throw (e) + } + ) + return promise +} + +export async function destroyMUC (_converse: any, model: any): Promise { + const __ = _converse.__ + const messages = [__('Are you sure you want to destroy this groupchat?')] + // Note: challenge and newjid make no sens for peertube-plugin-livechat, + // we remove them comparing to the original function. + let fields = [ + { + name: 'reason', + label: __('Optional reason for destroying this groupchat'), + placeholder: __('Reason'), + value: undefined + } + ] + try { + fields = await _converse.api.confirm(__('Confirm'), messages, fields) + const reason = fields.filter(f => f.name === 'reason').pop()?.value + const newjid = undefined + return model.sendDestroyIQ(reason, newjid).then(() => model.close()) + } catch (e) { + console.error(e) + } +} From dd4bca8c069e48adaf48bda96245742bd44ebd12 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 25 Jul 2024 18:32:38 +0200 Subject: [PATCH 031/136] Fix Converse v11 regression - occupant comparator function: The way we overloaded the MUCOccupants method was no more working. --- conversejs/lib/plugins/livechat-specific.ts | 4 +--- .../livechat-specific/chatroom-occupants.ts | 21 ------------------- .../lib/plugins/livechat-specific/chatroom.ts | 20 ++++++++++++++++++ 3 files changed, 21 insertions(+), 24 deletions(-) delete mode 100644 conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index ef62eaeb..cfec5b8e 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -7,7 +7,6 @@ import { customizeToolbar } from './livechat-specific/toolbar' import { initReconnectionStuff } from './livechat-specific/reconnection' import { chatRoomOverrides } from './livechat-specific/chatroom' import { chatRoomMessageOverrides } from './livechat-specific/chatroom-message' -import { chatRoomOccupantsOverrides } from './livechat-specific/chatroom-occupants' export const livechatSpecificsPlugin = { dependencies: ['converse-muc', 'converse-muc-views'], @@ -38,7 +37,6 @@ export const livechatSpecificsPlugin = { }, overrides: { ChatRoom: chatRoomOverrides(), - ChatRoomMessage: chatRoomMessageOverrides(), - ChatRoomOccupants: chatRoomOccupantsOverrides() + ChatRoomMessage: chatRoomMessageOverrides() } } diff --git a/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts b/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts deleted file mode 100644 index 51685231..00000000 --- a/conversejs/lib/plugins/livechat-specific/chatroom-occupants.ts +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-FileCopyrightText: 2024 John Livingston -// -// SPDX-License-Identifier: AGPL-3.0-only - -export function chatRoomOccupantsOverrides (): {[key: string]: Function} { - return { - comparator: function (this: any, occupant1: any, occupant2: any): Number { - // Overriding Occupants comparators, to display anonymous users at the end of the list. - const nick1: string = occupant1.getDisplayName() - const nick2: string = occupant2.getDisplayName() - const b1 = nick1.startsWith('Anonymous ') - const b2 = nick2.startsWith('Anonymous ') - if (b1 === b2) { - // Both startswith anonymous, or non of it: fallback to the standard comparator. - return this.__super__.comparator(occupant1, occupant2) - } - // Else: Anonymous always last. - return b1 ? 1 : -1 - } - } -} diff --git a/conversejs/lib/plugins/livechat-specific/chatroom.ts b/conversejs/lib/plugins/livechat-specific/chatroom.ts index b41871ab..297c0ed4 100644 --- a/conversejs/lib/plugins/livechat-specific/chatroom.ts +++ b/conversejs/lib/plugins/livechat-specific/chatroom.ts @@ -23,6 +23,26 @@ export function chatRoomOverrides (): {[key: string]: Function} { // See https://github.com/conversejs/converse.js/issues/3428 for more info. // FIXME: if #3428 is fixed, remove this override. return this.isEntered() && this.getOwnRole() !== 'visitor' + }, + initOccupants: function initOccupants (this: any) { + const r = this.__super__.initOccupants() + + const originalComparatorFunction: Function = this.occupants.comparator + this.occupants.comparator = function (this: any, occupant1: any, occupant2: any): Number { + // Overriding Occupants comparators, to display anonymous users at the end of the list. + const nick1: string = occupant1.getDisplayName() + const nick2: string = occupant2.getDisplayName() + const b1 = nick1.startsWith('Anonymous ') + const b2 = nick2.startsWith('Anonymous ') + if (b1 === b2) { + // Both startswith anonymous, or non of it: fallback to the standard comparator. + return originalComparatorFunction.call(this, occupant1, occupant2) + } + // Else: Anonymous always last. + return b1 ? 1 : -1 + } + + return r } } } From f88520d9258cfeb9c4c2b328da01ee628f452ce4 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 10:51:55 +0200 Subject: [PATCH 032/136] Implements #146: copy message button for moderators We overload the copy message method that comes with Converse 11, to add the message metadata (nick and full date). --- client/utils/conversejs.ts | 2 +- conversejs/builtin.ts | 1 + conversejs/lib/plugins/livechat-specific.ts | 2 ++ .../livechat-specific/message-action.ts | 32 +++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 conversejs/lib/plugins/livechat-specific/message-action.ts diff --git a/client/utils/conversejs.ts b/client/utils/conversejs.ts index 89936971..758e14ee 100644 --- a/client/utils/conversejs.ts +++ b/client/utils/conversejs.ts @@ -167,7 +167,7 @@ async function displayConverseJS ( const converseJSParams: InitConverseJSParams = await (response).json() if (!pollListenerInitiliazed) { - // First time we got here, initiliaze this event: + // First time we got here, initialize this event: const i18nVoteOk = await clientOptions.peertubeHelpers.translate(LOC_POLL_VOTE_OK) pollListenerInitiliazed = true document.addEventListener('livechat-poll-vote', () => { diff --git a/conversejs/builtin.ts b/conversejs/builtin.ts index 3165f871..c1dd6689 100644 --- a/conversejs/builtin.ts +++ b/conversejs/builtin.ts @@ -34,6 +34,7 @@ declare global { env: { html: Function sizzle: Function + dayjs: Function } } initConversePlugins: typeof initConversePlugins diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index cfec5b8e..494f88bb 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -7,6 +7,7 @@ import { customizeToolbar } from './livechat-specific/toolbar' import { initReconnectionStuff } from './livechat-specific/reconnection' import { chatRoomOverrides } from './livechat-specific/chatroom' import { chatRoomMessageOverrides } from './livechat-specific/chatroom-message' +import { customizeMessageAction } from './livechat-specific/message-action' export const livechatSpecificsPlugin = { dependencies: ['converse-muc', 'converse-muc-views'], @@ -22,6 +23,7 @@ export const livechatSpecificsPlugin = { customizeHeading(this) customizeToolbar(this) + customizeMessageAction(this) _converse.api.listen.on('chatRoomViewInitialized', function (this: any, _model: any): void { // Remove the spinner if present... diff --git a/conversejs/lib/plugins/livechat-specific/message-action.ts b/conversejs/lib/plugins/livechat-specific/message-action.ts new file mode 100644 index 00000000..87bb70ca --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/message-action.ts @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +/** + * Do some customization on Message actions custom elements: + * * override the copy text method to add meta data + * + * @param plugin The plugin object + */ +export function customizeMessageAction (plugin: any): void { + const _converse = plugin._converse + const MessageActions = _converse.api.elements.registry['converse-message-actions'] + if (MessageActions) { + class MessageActionsOverloaded extends MessageActions { + async onMessageCopyButtonClicked (ev?: Event): Promise { + ev?.preventDefault?.() + let txt = '' + try { + txt += this.model.getDisplayName() as string + txt += ' - ' + const date = new Date(this.model.get('edited') || this.model.get('time')) + txt += date.toLocaleDateString() + ' ' + date.toLocaleTimeString() + txt += '\n' + } catch {} + txt += this.model.getMessageText() as string + await navigator.clipboard.writeText(txt) + } + } + _converse.api.elements.define('converse-message-actions', MessageActionsOverloaded) + } +} From 80d458c445916d04d2df0c1fc84ed5621a14422b Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 10:58:26 +0200 Subject: [PATCH 033/136] Changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31697e68..a6d65b55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### New features * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. +* #146: copy message button for moderators. ### Minor changes and fixes From e1252709b389a24e7b1a379a359b61857b3f28ff Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Fri, 26 Jul 2024 07:21:30 +0000 Subject: [PATCH 034/136] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/de/ --- languages/de.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/de.yml b/languages/de.yml index 3d209a22..f58e12e6 100644 --- a/languages/de.yml +++ b/languages/de.yml @@ -557,3 +557,4 @@ livechat_configuration_channel_moderation_delay_desc: "Standardwert der Moderati ganze Zahl: Nachrichten werden für Nicht-Moderator-Teilnehmer um X Sekunden verzögert, so dass Moderatoren die Nachricht löschen können, bevor ein anderer Benutzer sie lesen kann.\n\n" +avatar_set_option_none: Nichts From 12f11e44686d2939514bb457fb6d94b072c5fb4b Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 09:10:42 +0000 Subject: [PATCH 035/136] Translated using Weblate (French) Currently translated at 100.0% (270 of 270 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/fr/ --- languages/fr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr.yml b/languages/fr.yml index fc444fe5..e2062864 100644 --- a/languages/fr.yml +++ b/languages/fr.yml @@ -573,3 +573,4 @@ livechat_configuration_channel_moderation_delay_desc: "Valeur par défaut du dé non modérateur⋅rices, ce qui permet à ces derniers de supprimer les messages avant qu'un utilisateur⋅rice ne puisse le lire.\n\n" moderation_delay: Délai de modération +avatar_set_option_none: Aucun From b7c595214b8b40c782293ede5651f2138fd8fbcc Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 14:44:01 +0200 Subject: [PATCH 036/136] Updated mod_muc_moderation to upstream. --- CHANGELOG.md | 1 + .../mod_muc_moderation/README.markdown | 29 +++--- .../mod_muc_moderation/mod_muc_moderation.lua | 96 +++++++++++++------ 3 files changed, 82 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6d65b55..a0b629db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Avatar set for anonymous users: new 'none' choice (that will fallback to Converse new colorized avatars). * New translation: Albanian. * Translation updates: Crotian, Japanese. +* Updated mod_muc_moderation to upstream. ## 10.3.3 diff --git a/prosody-modules/mod_muc_moderation/README.markdown b/prosody-modules/mod_muc_moderation/README.markdown index 6c914443..4abb1f66 100644 --- a/prosody-modules/mod_muc_moderation/README.markdown +++ b/prosody-modules/mod_muc_moderation/README.markdown @@ -1,7 +1,9 @@ - +summary: Let moderators remove spam and abuse messages +--- + # Introduction This module implements [XEP-0425: Message Moderation]. @@ -16,7 +18,7 @@ role in the channel / group chat. Example [MUC component][doc:chatrooms] configuration: ``` {.lua} -VirtualHost "channels.example.com" "muc" +Component "channels.example.com" "muc" modules_enabled = { "muc_mam", "muc_moderation", @@ -25,20 +27,19 @@ modules_enabled = { # Compatibility -- Should work with Prosody 0.11.x and later. -- Tested with trunk rev `52c6dfa04dba`. -- Message tombstones requires a compatible storage module implementing - a new message replacement API. +- Basic functionality with Prosody 0.11.x and later +- Full functionality with Prosody 0.12.x and `internal` or `sql` + storage^[Replacing moderated messages with tombstones requires new storage API methods.] +- Works with [mod_storage_xmlarchive] ## Clients -- Tested with [Converse.js](https://conversejs.org/) - [v6.0.1](https://github.com/conversejs/converse.js/releases/tag/v6.0.1) +- [Converse.js](https://conversejs.org/) +- [Gajim](https://dev.gajim.org/gajim/gajim/-/issues/10107) +- [clix](https://code.zash.se/clix/rev/6c1953fbe0fa) ### Feature requests -- [Conv](https://github.com/iNPUTmice/Conversations/issues/3722)[ersa](https://github.com/iNPUTmice/Conversations/issues/3920)[tions](https://github.com/iNPUTmice/Conversations/issues/4227) -- [Dino](https://github.com/dino/dino/issues/1133) -- [Gajim](https://dev.gajim.org/gajim/gajim/-/issues/10107) -- [Poezio](https://lab.louiz.org/poezio/poezio/-/issues/3543) -- [Profanity](https://github.com/profanity-im/profanity/issues/1336) +- [Conversations](https://codeberg.org/iNPUTmice/Conversations/issues/20) +- [Dino](https://github.com/dino/dino/issues/1133) +- [Profanity](https://github.com/profanity-im/profanity/issues/1336) diff --git a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua index 318175be..06d30b55 100644 --- a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua +++ b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua @@ -27,6 +27,7 @@ end -- Namespaces local xmlns_fasten = "urn:xmpp:fasten:0"; local xmlns_moderate = "urn:xmpp:message-moderate:0"; +local xmlns_occupant_id = "urn:xmpp:occupant-id:0"; local xmlns_retract = "urn:xmpp:message-retract:0"; -- Discovering support @@ -34,36 +35,17 @@ module:hook("muc-disco#info", function (event) event.reply:tag("feature", { var = xmlns_moderate }):up(); end); --- Main handling -module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) - local stanza, origin = event.stanza, event.origin; +-- TODO error registry, requires Prosody 0.12+ - -- Collect info we need - local apply_to = stanza.tags[1]; - local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); - if not moderate_tag then return end -- some other kind of fastening? - - local reason = moderate_tag:get_child_text("reason"); - local retract = moderate_tag:get_child("retract", xmlns_retract); - - local room_jid = stanza.attr.to; +-- moderate : function (string, string, string, boolean, string) : boolean, enum, enum, string +local function moderate(actor, room_jid, stanza_id, retract, reason) local room_node = jid.split(room_jid); local room = mod_muc.get_room_from_jid(room_jid); - local stanza_id = apply_to.attr.id; - - -- Permissions - local actor = stanza.attr.from; + -- Permissions is based on role, which is a property of a current occupant, + -- so check if the actor is an occupant, otherwise if they have a reserved + -- nickname that can be used to retrieve the role. local actor_nick = room:get_occupant_jid(actor); - local affiliation = room:get_affiliation(actor); - -- Retrieve their current role, iff they are in the room, otherwise what they - -- would have based on affiliation. - local role = room:get_role(actor_nick) or room:get_default_role(affiliation); - if valid_roles[role or "none"] < valid_roles.moderator then - origin.send(st.error_reply(stanza, "auth", "forbidden", "You need a role of at least 'moderator'")); - return true; - end - if not actor_nick then local reserved_nickname = room:get_affiliation_data(jid.bare(actor), "reserved_nickname"); if reserved_nickname then @@ -71,6 +53,14 @@ module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) end end + -- Retrieve their current role, iff they are in the room, otherwise what they + -- would have based on affiliation. + local affiliation = room:get_affiliation(actor); + local role = room:get_role(actor_nick) or room:get_default_role(affiliation); + if valid_roles[role or "none"] < valid_roles.moderator then + return false, "auth", "forbidden", "You need a role of at least 'moderator'"; + end + -- Original stanza to base tombstone on local original, err; if muc_log_archive.get then @@ -84,13 +74,13 @@ module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) end end end + if not original then if err == "item-not-found" then - origin.send(st.error_reply(stanza, "modify", "item-not-found")); + return false, "modify", "item-not-found"; else - origin.send(st.error_reply(stanza, "wait", "internal-server-error")); + return false, "wait", "internal-server-error"; end - return true; end @@ -106,19 +96,39 @@ module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) announcement:text_tag("reason", reason); end + local moderated_occupant_id = original:get_child("occupant-id", xmlns_occupant_id); + if room.get_occupant_id and moderated_occupant_id then + announcement:add_direct_child(moderated_occupant_id); + end + + local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick); + if room.get_occupant_id then + -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here + announcement:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) + end + if muc_log_archive.set and retract then local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); + if room.get_occupant_id then + tombstone:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) + + if moderated_occupant_id then + -- Copy occupant id from moderated message + tombstone:add_child(moderated_occupant_id); + end + end + if reason then tombstone:text_tag("reason", reason); end + tombstone:reset(); local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); if not was_replaced then - origin.send(st.error_reply(stanza, "wait", "internal-server-error")); - return true; + return false, "wait", "internal-server-error"; end end @@ -126,6 +136,32 @@ module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) module:log("info", "Message with id '%s' in room %s moderated by %s, reason: %s", stanza_id, room_jid, actor, reason); room:broadcast_message(announcement); + return true; +end + +-- Main handling +module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) + local stanza, origin = event.stanza, event.origin; + + local actor = stanza.attr.from; + local room_jid = stanza.attr.to; + + -- Collect info we need + local apply_to = stanza.tags[1]; + local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); + if not moderate_tag then return end -- some other kind of fastening? + + local reason = moderate_tag:get_child_text("reason"); + local retract = moderate_tag:get_child("retract", xmlns_retract); + + local stanza_id = apply_to.attr.id; + + local ok, error_type, error_condition, error_text = moderate(actor, room_jid, stanza_id, retract, reason); + if not ok then + origin.send(st.error_reply(stanza, error_type, error_condition, error_text)); + return true; + end + origin.send(st.reply(stanza)); return true; end); From 38f2b2af574c28c78b8fbe7d5b9363973bc112de Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 15:49:18 +0200 Subject: [PATCH 037/136] prosody-modules: preparing some modules for publication on prosody-modules repo --- .../mod_muc_moderation_delay/{README.md => README.markdown} | 3 ++- prosody-modules/mod_muc_poll/README.md | 6 +++--- .../mod_muc_slow_mode/{README.md => README.markdown} | 0 3 files changed, 5 insertions(+), 4 deletions(-) rename prosody-modules/mod_muc_moderation_delay/{README.md => README.markdown} (93%) rename prosody-modules/mod_muc_slow_mode/{README.md => README.markdown} (100%) diff --git a/prosody-modules/mod_muc_moderation_delay/README.md b/prosody-modules/mod_muc_moderation_delay/README.markdown similarity index 93% rename from prosody-modules/mod_muc_moderation_delay/README.md rename to prosody-modules/mod_muc_moderation_delay/README.markdown index 7c831885..2b1d7812 100644 --- a/prosody-modules/mod_muc_moderation_delay/README.md +++ b/prosody-modules/mod_muc_moderation_delay/README.markdown @@ -6,8 +6,9 @@ SPDX-License-Identifier: AGPL-3.0-only With this module, you can apply a delay to groupchat messages delivery, so that room moderators can moderate them before other participants receives them. -This module is part of peertube-plugin-livechat, and is under the same LICENSE. +This module is part of peertube-plugin-livechat, and is under AGPL-3.0.-only license. This module can work on any Prosody server (version >= 0.12.x). +This module is still experimental. ## Configuration diff --git a/prosody-modules/mod_muc_poll/README.md b/prosody-modules/mod_muc_poll/README.md index 072a19a2..be61bb41 100644 --- a/prosody-modules/mod_muc_poll/README.md +++ b/prosody-modules/mod_muc_poll/README.md @@ -13,16 +13,16 @@ There will probably be a XEP proposal for this module behaviour. When done, this ## Configuration Just enable the module on your MUC component. -All above configurations are optional. +All following configurations are optional. -## poll_groupchat_votes_priority +### poll_groupchat_votes_priority The priority for the hook that will take into account votes. You can change this, if you have some specific hook that should be done after/before counting votes (slow mode, firewall, ...). Default: 40 (Prosody checks visitor role with priority of 50, we want this to be after). -## Strings +### Strings You can change some defaults strings, if you want for example to localize the poll messages. Here are the existing strings and default values: diff --git a/prosody-modules/mod_muc_slow_mode/README.md b/prosody-modules/mod_muc_slow_mode/README.markdown similarity index 100% rename from prosody-modules/mod_muc_slow_mode/README.md rename to prosody-modules/mod_muc_slow_mode/README.markdown From ebc8fc8797b8310f23d06d650b2e29b35874bbc8 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 17:04:14 +0200 Subject: [PATCH 038/136] Option to hide moderator name who made actions WIP (#137). --- CHANGELOG.md | 1 + client/@types/global.d.ts | 2 + .../templates/channel-configuration.ts | 28 +++++++++++- languages/en.yml | 5 +++ .../README.markdown | 32 ++++++++++++++ .../mod_muc_anonymize_moderation_actions.lua | 44 +++++++++++++++++++ .../mod_muc_http_defaults.lua | 4 ++ server/lib/configuration/channel/sanitize.ts | 4 +- server/lib/configuration/channel/storage.ts | 3 +- server/lib/prosody/config/content.ts | 3 ++ server/lib/routers/api/room.ts | 4 +- shared/lib/types.ts | 1 + .../user/streamers/moderation.md | 13 ++++++ 13 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 prosody-modules/mod_muc_anonymize_moderation_actions/README.markdown create mode 100644 prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index a0b629db..5da0a497 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. * #146: copy message button for moderators. +* #137: option to hide moderator name who made actions (kick, ban, message moderation, ...). ### Minor changes and fixes diff --git a/client/@types/global.d.ts b/client/@types/global.d.ts index ecc2d9be..dcdde332 100644 --- a/client/@types/global.d.ts +++ b/client/@types/global.d.ts @@ -133,3 +133,5 @@ declare const LOC_POLL_VOTE_OK: string declare const LOC_MODERATION_DELAY: string declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_MODERATION_DELAY_DESC: string +declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_ANONYMIZE_MODERATION_LABEL: string +declare const LOC_LIVECHAT_CONFIGURATION_CHANNEL_ANONYMIZE_MODERATION_DESC: string diff --git a/client/common/configuration/elements/templates/channel-configuration.ts b/client/common/configuration/elements/templates/channel-configuration.ts index 69878f95..28187f31 100644 --- a/client/common/configuration/elements/templates/channel-configuration.ts +++ b/client/common/configuration/elements/templates/channel-configuration.ts @@ -167,7 +167,7 @@ export function tplChannelConfiguration (el: ChannelConfigurationElement): Templ
+ + +
+ +
+ 0: moderation delay disabled
  • Any positive integer: messages will be delayed for X seconds for non-moderator participants, allowing moderators to delete message before any user can read it.
  • + +livechat_configuration_channel_anonymize_moderation_label: "Anonymize moderation actions" +livechat_configuration_channel_anonymize_moderation_desc: | + Anonymize moderation actions default value for new rooms. + When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants. diff --git a/prosody-modules/mod_muc_anonymize_moderation_actions/README.markdown b/prosody-modules/mod_muc_anonymize_moderation_actions/README.markdown new file mode 100644 index 00000000..62a1b323 --- /dev/null +++ b/prosody-modules/mod_muc_anonymize_moderation_actions/README.markdown @@ -0,0 +1,32 @@ + +# mod_muc_anonymize_moderation_actions + +This modules allows to anonymize affiliation and role changes in MUC rooms. + +Enabling this module on a MUC Virtualhost will add a settings in the roomconfig form. +When the feature is enabled, when a moderator changes the role or affiliation of an occupant (kick, ban, ...) their name will be removed from the broadcasted message, to not disclose who did the moderation action. + +This is particularly usefull to prevent some revenge when a moderator bans someone. + +This module is under AGPL-3.0 license. + +It was tested on Prosody 0.12.x. + +## Configuration + +Just enable the module on your MUC VirtualHost. +The feature will be accessible throught the room configuration form. + +You can tweak the position of the settings in the MUC configuration form using `anonymize_moderation_actions_form_position`. +This value will be passed as priority for the "muc-config-form" hook, so you can move field up by increasing the value, or down by decreasing the value. + +By default, the field will be between muc#roomconfig_changesubject and muc#roomconfig_moderatedroom (default value is `78`). + +``` lua +VirtualHost "muc.example.com" + modules_enabled = { "muc_anonymize_moderation_actions" } + anonymize_moderation_actions_form_position = 96 +``` diff --git a/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua new file mode 100644 index 00000000..58eb8e20 --- /dev/null +++ b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua @@ -0,0 +1,44 @@ +-- mod_muc_anonymize_moderation_actions +-- +-- SPDX-FileCopyrightText: 2024 John Livingston +-- SPDX-License-Identifier: AGPL-3.0-only + +-- form_position: the position in the room config form (this value will be passed as priority for the "muc-config-form" hook). +-- By default, field will be between muc#roomconfig_changesubject and muc#roomconfig_moderatedroom +local form_position = module:get_option_number("anonymize_moderation_actions_form_position") or 80-2; + +local function get_anonymize_moderation_actions(room) + return room._data.anonymize_moderation_actions or false; +end + +local function set_anonymize_moderation_actions(room, anonymize_moderation_actions) + anonymize_moderation_actions = anonymize_moderation_actions and true or nil; + if get_anonymize_moderation_actions(room) == anonymize_moderation_actions then return false; end + room._data.anonymize_moderation_actions = anonymize_moderation_actions; + return true; +end + +-- Config form declaration +local function add_form_option(event) + table.insert(event.form, { + name = "muc#roomconfig_anonymize_moderation_actions"; + type = "boolean"; + label = "Anonymize moderation actions"; + desc = "When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants."; + value = get_anonymize_moderation_actions(event.room); + }); +end + +local function config_submitted(event) + set_anonymize_moderation_actions(event.room, event.value); +end + +local function remove_actor(event) + if (event.room and get_anonymize_moderation_actions(event.room)) then + event.actor = nil; + end +end + +module:hook("muc-config-submitted/muc#roomconfig_anonymize_moderation_actions", config_submitted); +module:hook("muc-config-form", add_form_option, form_position); +module:hook("muc-broadcast-presence", remove_actor); diff --git a/prosody-modules/mod_muc_http_defaults/mod_muc_http_defaults.lua b/prosody-modules/mod_muc_http_defaults/mod_muc_http_defaults.lua index 1a217671..771498ad 100644 --- a/prosody-modules/mod_muc_http_defaults/mod_muc_http_defaults.lua +++ b/prosody-modules/mod_muc_http_defaults/mod_muc_http_defaults.lua @@ -8,6 +8,7 @@ -- * "slow_mode_duration" -- * "mute_anonymous" -- * "moderation_delay" +-- * "anonymize_moderation_actions" -- These options are introduced in the Peertube livechat plugin. -- -- The "slow_mode_duration" comes with mod_muc_slow_mode. @@ -132,6 +133,9 @@ local function apply_config(room, settings) -- (and thus we don't need to broadcast changes) room._data.livechat_muc_terms = config.livechat_muc_terms; end + if (type(config.anonymize_moderation_actions) == "boolean") then + room._data.anonymize_moderation_actions = config.anonymize_moderation_actions; + end elseif config ~= nil then module:log("error", "Invalid config returned from API for %s: %q", room.jid, config); return nil, "format", { field = "config" }; diff --git a/server/lib/configuration/channel/sanitize.ts b/server/lib/configuration/channel/sanitize.ts index 3aa45480..8a72f9ed 100644 --- a/server/lib/configuration/channel/sanitize.ts +++ b/server/lib/configuration/channel/sanitize.ts @@ -38,6 +38,7 @@ async function sanitizeChannelConfigurationOptions ( const moderationData = data.moderation ?? {} // comes with livechat 10.3.0 moderationData.delay ??= 0 + moderationData.anonymize ??= false // comes with livechat 11.0.0 // mute not present in livechat <= 10.2.0 const mute = data.mute ?? {} @@ -73,7 +74,8 @@ async function sanitizeChannelConfigurationOptions ( anonymous: _readBoolean(mute, 'anonymous') }, moderation: { - delay: _readInteger(moderationData, 'delay', 0, 60) + delay: _readInteger(moderationData, 'delay', 0, 60), + anonymize: _readBoolean(moderationData, 'anonymize') } } if (terms !== undefined) { diff --git a/server/lib/configuration/channel/storage.ts b/server/lib/configuration/channel/storage.ts index d5dbdf90..d9ecc1fe 100644 --- a/server/lib/configuration/channel/storage.ts +++ b/server/lib/configuration/channel/storage.ts @@ -54,7 +54,8 @@ function getDefaultChannelConfigurationOptions (_options: RegisterServerOptions) anonymous: false }, moderation: { - delay: 0 + delay: 0, + anonymize: false }, terms: undefined } diff --git a/server/lib/prosody/config/content.ts b/server/lib/prosody/config/content.ts index fe2da987..b827e329 100644 --- a/server/lib/prosody/config/content.ts +++ b/server/lib/prosody/config/content.ts @@ -255,6 +255,9 @@ class ProsodyConfigContent { this.muc.add('modules_enabled', 'muc_moderation_delay') this.muc.set('moderation_delay_form_position', 118) + + this.muc.add('modules_enabled', 'muc_anonymize_moderation_actions') + this.muc.set('anonymize_moderation_actions_form_position', 117) } useAnonymous (autoBanIP: boolean): void { diff --git a/server/lib/routers/api/room.ts b/server/lib/routers/api/room.ts index ec2d0da8..a3efbad6 100644 --- a/server/lib/routers/api/room.ts +++ b/server/lib/routers/api/room.ts @@ -39,6 +39,7 @@ interface RoomDefaults { mute_anonymous?: boolean livechat_muc_terms?: string moderation_delay?: number + anonymize_moderation_actions?: boolean } affiliations?: Affiliations } @@ -54,7 +55,8 @@ async function _getChannelSpecificOptions ( slow_mode_duration: channelOptions.slowMode.duration, mute_anonymous: channelOptions.mute.anonymous, livechat_muc_terms: channelOptions.terms, - moderation_delay: channelOptions.moderation.delay + moderation_delay: channelOptions.moderation.delay, + anonymize_moderation_actions: channelOptions.moderation.anonymize } } diff --git a/shared/lib/types.ts b/shared/lib/types.ts index a827efb7..da64c22b 100644 --- a/shared/lib/types.ts +++ b/shared/lib/types.ts @@ -109,6 +109,7 @@ interface ChannelConfigurationOptions { terms?: string // comes with Livechat 10.2.0 moderation: { // comes with Livechat 10.3.0 delay: number + anonymize: boolean // comes with Livechat 11.0.0 } } diff --git a/support/documentation/content/en/documentation/user/streamers/moderation.md b/support/documentation/content/en/documentation/user/streamers/moderation.md index eb3c0e9a..36954b97 100644 --- a/support/documentation/content/en/documentation/user/streamers/moderation.md +++ b/support/documentation/content/en/documentation/user/streamers/moderation.md @@ -73,6 +73,19 @@ This section is still incomplete. You can promote users as moderators, if you need some help. +## {{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}} + +{{% notice info %}} +This feature comes with the livechat plugin version 11.0.0. +{{% /notice %}} + +It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants." + +To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the "configure" menu. +In the form, you will find a "{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}" checkbox. + +You can choose to enable or disable this feature for new chatrooms on the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel). + ## Delete room content You can delete old rooms: join the room, and use the menu on the top to destroy the room. From 6e928821760c2a8b27a1c5c3bc19f622181bb2f0 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 26 Jul 2024 18:07:47 +0200 Subject: [PATCH 039/136] Fix mod_muc_moderation regression: See https://issues.prosody.im/1862 --- .../mod_muc_moderation/mod_muc_moderation.lua | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua index 06d30b55..ac8efd6a 100644 --- a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua +++ b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua @@ -83,11 +83,17 @@ local function moderate(actor, room_jid, stanza_id, retract, reason) end end + local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick); local announcement = st.message({ from = room_jid, type = "groupchat", id = id.medium(), }) :tag("apply-to", { xmlns = xmlns_fasten, id = stanza_id }) :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) + if room.get_occupant_id then + -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here + announcement:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })); + end + if retract then announcement:tag("retract", { xmlns = xmlns_retract }):up(); end @@ -101,20 +107,18 @@ local function moderate(actor, room_jid, stanza_id, retract, reason) announcement:add_direct_child(moderated_occupant_id); end - local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick); - if room.get_occupant_id then - -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here - announcement:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) - end - if muc_log_archive.set and retract then local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) - :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); + :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }); if room.get_occupant_id then - tombstone:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) + tombstone:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })); + end + tombstone:up(); + + if room.get_occupant_id then if moderated_occupant_id then -- Copy occupant id from moderated message tombstone:add_child(moderated_occupant_id); From c5bcb9fc145b235d0bfb9ecb92d0f64da1b54e4f Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 13:12:25 +0200 Subject: [PATCH 040/136] Fix mod_muc_moderation + anonymize moderation events (#137) --- .../mod_muc_anonymize_moderation_actions.lua | 24 +++++++++ .../mod_muc_moderation/mod_muc_moderation.lua | 51 +++++++++++++------ 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua index 58eb8e20..dfb40e3c 100644 --- a/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua +++ b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua @@ -39,6 +39,30 @@ local function remove_actor(event) end end +local function remove_moderate_actor(event) + local room, announcement, tombstone = event.room, event.announcement, event.tombstone; + if not get_anonymize_moderation_actions(room) then + return; + end + + local moderated = announcement:find("{urn:xmpp:fasten:0}apply-to/{urn:xmpp:message-moderate:0}moderated"); + if moderated then + module:log("debug", "We must anonymize the moderation announcement for stanza %s", event.stanza_id); + moderated.attr.by = nil; + moderated:remove_children("occupant-id", "urn:xmpp:occupant-id:0"); + end + + if tombstone then + local moderated = tombstone:get_child("moderated", "urn:xmpp:message-moderate:0"); + if moderated then + module:log("debug", "We must anonymize the moderation tombstone for stanza %s", event.stanza_id); + moderated.attr.by = nil; + moderated:remove_children("occupant-id", "urn:xmpp:occupant-id:0"); + end + end +end + module:hook("muc-config-submitted/muc#roomconfig_anonymize_moderation_actions", config_submitted); module:hook("muc-config-form", add_form_option, form_position); module:hook("muc-broadcast-presence", remove_actor); +module:hook("muc-moderate-message", remove_moderate_actor); diff --git a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua index ac8efd6a..1e794841 100644 --- a/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua +++ b/prosody-modules/mod_muc_moderation/mod_muc_moderation.lua @@ -107,29 +107,48 @@ local function moderate(actor, room_jid, stanza_id, retract, reason) announcement:add_direct_child(moderated_occupant_id); end + announcement:reset(); + + local tombstone = nil; if muc_log_archive.set and retract then - local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) + tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) - :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }); - - if room.get_occupant_id then - tombstone:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })); - end - - tombstone:up(); - - if room.get_occupant_id then - if moderated_occupant_id then - -- Copy occupant id from moderated message - tombstone:add_child(moderated_occupant_id); - end - end + :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); if reason then tombstone:text_tag("reason", reason); end - tombstone:reset(); + if room.get_occupant_id then + if actor_occupant then + tombstone:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })); + end + + if moderated_occupant_id then + -- Copy occupant id from moderated message + tombstone:add_direct_child(moderated_occupant_id); + end + end + tombstone:reset(); + end + + -- fire an event, that can be used to cancel the moderation, or modify stanzas. + local event = { + room = room; + announcement = announcement; + tombstone = tombstone; + stanza_id = stanza_id; + retract = retract; + reason = reason; + actor = actor; + actor_nick = actor_nick; + }; + if module:fire_event("muc-moderate-message", event) then + -- TODO: allow to change the error message? + return false, "wait", "internal-server-error"; + end + + if tombstone then local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); if not was_replaced then return false, "wait", "internal-server-error"; From ce5114afc9803a681cd40bf1d573e1f11590020f Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 13:25:09 +0200 Subject: [PATCH 041/136] mod_muc_anonymize_moderation_actions: fix XEP-0425 v0.2.1 compliance. --- .../mod_muc_anonymize_moderation_actions.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua index dfb40e3c..89a41cc7 100644 --- a/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua +++ b/prosody-modules/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua @@ -48,7 +48,11 @@ local function remove_moderate_actor(event) local moderated = announcement:find("{urn:xmpp:fasten:0}apply-to/{urn:xmpp:message-moderate:0}moderated"); if moderated then module:log("debug", "We must anonymize the moderation announcement for stanza %s", event.stanza_id); - moderated.attr.by = nil; + -- FIXME: XEP-0245 has changed. + -- urn:xmpp:message-moderate:0 requires a "by" attribute + -- urn:xmpp:message-moderate:1 do not require the "by" attribute + -- So, for now, settings the room jid, as we only implement urn:xmpp:message-moderate:0. + moderated.attr.by = room.jid; moderated:remove_children("occupant-id", "urn:xmpp:occupant-id:0"); end @@ -56,7 +60,11 @@ local function remove_moderate_actor(event) local moderated = tombstone:get_child("moderated", "urn:xmpp:message-moderate:0"); if moderated then module:log("debug", "We must anonymize the moderation tombstone for stanza %s", event.stanza_id); - moderated.attr.by = nil; + -- FIXME: XEP-0245 has changed. + -- urn:xmpp:message-moderate:0 requires a "by" attribute + -- urn:xmpp:message-moderate:1 do not require the "by" attribute + -- So, for now, settings the room jid, as we only implement urn:xmpp:message-moderate:0. + moderated.attr.by = room.jid; moderated:remove_children("occupant-id", "urn:xmpp:occupant-id:0"); end end From faef584f8b1c13302b7a18dda13e01152a9d93a1 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 14:58:34 +0200 Subject: [PATCH 042/136] npm run doc:translate --- support/documentation/po/livechat.ar.po | 17 +++++- support/documentation/po/livechat.ca.po | 17 +++++- support/documentation/po/livechat.cs.po | 17 +++++- support/documentation/po/livechat.de.po | 34 ++++++++---- support/documentation/po/livechat.el.po | 17 +++++- support/documentation/po/livechat.en.pot | 20 ++++++- support/documentation/po/livechat.eo.po | 17 +++++- support/documentation/po/livechat.es.po | 17 +++++- support/documentation/po/livechat.eu.po | 17 +++++- support/documentation/po/livechat.fa.po | 17 +++++- support/documentation/po/livechat.fi.po | 17 +++++- support/documentation/po/livechat.fr.po | 31 +++++++---- support/documentation/po/livechat.gd.po | 17 +++++- support/documentation/po/livechat.gl.po | 17 +++++- support/documentation/po/livechat.hr.po | 57 +++++++++----------- support/documentation/po/livechat.hu.po | 17 +++++- support/documentation/po/livechat.is.po | 17 +++++- support/documentation/po/livechat.it.po | 17 +++++- support/documentation/po/livechat.ja.po | 18 ++++++- support/documentation/po/livechat.kab.po | 17 +++++- support/documentation/po/livechat.nb.po | 17 +++++- support/documentation/po/livechat.nl.po | 17 +++++- support/documentation/po/livechat.nn.po | 17 +++++- support/documentation/po/livechat.oc.po | 17 +++++- support/documentation/po/livechat.pl.po | 17 +++++- support/documentation/po/livechat.pt.po | 17 +++++- support/documentation/po/livechat.ru.po | 17 +++++- support/documentation/po/livechat.sq.po | 17 +++++- support/documentation/po/livechat.sv.po | 17 +++++- support/documentation/po/livechat.th.po | 17 +++++- support/documentation/po/livechat.tok.po | 17 +++++- support/documentation/po/livechat.tr.po | 15 ++++++ support/documentation/po/livechat.uk.po | 17 +++++- support/documentation/po/livechat.vi.po | 17 +++++- support/documentation/po/livechat.zh-Hans.po | 17 +++++- support/documentation/po/livechat.zh-Hant.po | 17 +++++- 36 files changed, 602 insertions(+), 83 deletions(-) diff --git a/support/documentation/po/livechat.ar.po b/support/documentation/po/livechat.ar.po index 4dc4d195..a6bbbd51 100644 --- a/support/documentation/po/livechat.ar.po +++ b/support/documentation/po/livechat.ar.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-01-17 11:38+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Arabic \n" @@ -3343,6 +3343,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.ca.po b/support/documentation/po/livechat.ca.po index e152cc4f..f0fa2a4f 100644 --- a/support/documentation/po/livechat.ca.po +++ b/support/documentation/po/livechat.ca.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.cs.po b/support/documentation/po/livechat.cs.po index 1291a142..940f71b1 100644 --- a/support/documentation/po/livechat.cs.po +++ b/support/documentation/po/livechat.cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index 32a0b06d..b7d6276b 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -7,12 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-07-24 09:23+0000\n" -"Last-Translator: Victor Hampel " -"\n" -"Language-Team: German \n" +"Last-Translator: Victor Hampel \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2967,12 +2965,7 @@ msgstr "Bei diesen Wörtern wird die Groß- und Kleinschreibung nicht berücksic #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." -msgstr "" -"Sie können eine kurze [Moderationsverzögerung](/peertube-plugin-livechat/de/" -"documentation/user/streamers/moderation_delay) (z.B. 1 Sekunde) mit dem " -"[Moderations-Chatbot](/peertube-plugin-livechat/de/documentation/user/" -"streamers/bot) kombinieren, um Nachrichten mit Schimpfwörtern zu löschen, " -"bevor ein Nicht-Moderator sie sieht." +msgstr "Sie können eine kurze [Moderationsverzögerung](/peertube-plugin-livechat/de/documentation/user/streamers/moderation_delay) (z.B. 1 Sekunde) mit dem [Moderations-Chatbot](/peertube-plugin-livechat/de/documentation/user/streamers/bot) kombinieren, um Nachrichten mit Schimpfwörtern zu löschen, bevor ein Nicht-Moderator sie sieht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md @@ -3423,6 +3416,25 @@ msgstr "Es gibt verschiedene Rollen, die Benutzern in Chaträumen zugewiesen wer msgid "You can promote users as moderators, if you need some help." msgstr "Sie können Benutzer zu Moderatoren befördern, wenn Sie Hilfe benötigen." +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "This feature comes with the livechat plugin version 10.0.0." +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.0.0 verfügbar sein." + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" checkbox." +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"." + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.el.po b/support/documentation/po/livechat.el.po index cd85dff8..84c9598d 100644 --- a/support/documentation/po/livechat.el.po +++ b/support/documentation/po/livechat.el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.en.pot b/support/documentation/po/livechat.en.pot index 7a4d8836..acba7193 100644 --- a/support/documentation/po/livechat.en.pot +++ b/support/documentation/po/livechat.en.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3764,6 +3764,24 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, markdown-text, no-wrap diff --git a/support/documentation/po/livechat.eo.po b/support/documentation/po/livechat.eo.po index fc8eeb4e..6f0bd8eb 100644 --- a/support/documentation/po/livechat.eo.po +++ b/support/documentation/po/livechat.eo.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.es.po b/support/documentation/po/livechat.es.po index 5c92116a..b0ffaa78 100644 --- a/support/documentation/po/livechat.es.po +++ b/support/documentation/po/livechat.es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-04-16 21:38+0000\n" "Last-Translator: rnek0 \n" "Language-Team: Spanish \n" @@ -3374,6 +3374,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.eu.po b/support/documentation/po/livechat.eu.po index a5a16735..2d661947 100644 --- a/support/documentation/po/livechat.eu.po +++ b/support/documentation/po/livechat.eu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.fa.po b/support/documentation/po/livechat.fa.po index bdc43a3f..8c304d4e 100644 --- a/support/documentation/po/livechat.fa.po +++ b/support/documentation/po/livechat.fa.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.fi.po b/support/documentation/po/livechat.fi.po index e9728113..3bf1fe55 100644 --- a/support/documentation/po/livechat.fi.po +++ b/support/documentation/po/livechat.fi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Finnish \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index 4020f06b..01b40e1d 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -7,11 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-07-18 15:05+0000\n" "Last-Translator: John Livingston \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2984,12 +2983,7 @@ msgstr "Ces mots ne sont pas sensibles à la casse." #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." -msgstr "" -"Vous pouvez combiner un [délai de modération](/peertube-plugin-livechat/fr/" -"documentation/user/streamers/moderation_delay) court (1 seconde par exemple) " -"avec le [bot dé modération](/peertube-plugin-livechat/fr/documentation/user/" -"streamers/bot) pour supprimer les messages contenant des gros mots avant " -"même qu'un⋅e utilisateur⋅rice non-modérateur⋅rice ne les voie." +msgstr "Vous pouvez combiner un [délai de modération](/peertube-plugin-livechat/fr/documentation/user/streamers/moderation_delay) court (1 seconde par exemple) avec le [bot dé modération](/peertube-plugin-livechat/fr/documentation/user/streamers/bot) pour supprimer les messages contenant des gros mots avant même qu'un⋅e utilisateur⋅rice non-modérateur⋅rice ne les voie." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md @@ -3440,6 +3434,25 @@ msgstr "Il y a différents rôles qui peuvent être assignés aux utilisateur⋅ msgid "You can promote users as moderators, if you need some help." msgstr "Vous pouvez promouvoir des utilisateur⋅rices en tant que modérateur⋅rices, si vous avez besoin d'aide." +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "This feature comes with the livechat plugin version 10.0.0." +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "Cette fonctionnalité arrive avec le plugin livechat version 10.0.0." + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" checkbox." +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "Pour activer ou désactiver cette fonctionnalité, utilisez le [menu déroulant du chat](/peertube-plugin-livechat/fr/documentation/user/viewers), puis ouvrez le menu \"configurer\". Dans le formulaire, vous trouverez une case à cocher \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"." + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.gd.po b/support/documentation/po/livechat.gd.po index 647fd337..b28e51ec 100644 --- a/support/documentation/po/livechat.gd.po +++ b/support/documentation/po/livechat.gd.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Gaelic \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.gl.po b/support/documentation/po/livechat.gl.po index ed7dfe6e..d3f077fd 100644 --- a/support/documentation/po/livechat.gl.po +++ b/support/documentation/po/livechat.gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index 0bf82112..791a2591 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -6,17 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-07-19 17:45+0000\n" "Last-Translator: Milo Ivir \n" -"Language-Team: Croatian \n" +"Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.6.2\n" #. type: Yaml Front Matter Hash Value: description @@ -2097,11 +2095,7 @@ msgstr "" #: build/documentation/pot_in/documentation/admin/settings.md #, no-wrap msgid "If this setting is left empty, and you are using Peertube >= 5.1 or later, the plugin will use values from your Peertube configuration file to guess on which interface and port request have to be done.\n" -msgstr "" -"Ako je ova postavka ostavljena prazna i koristiš Peertube verziju ≥ 5.1 ili " -"noviju, dodatak će koristiti vrijednosti iz tvoje Peertube konfiguracijske " -"datoteke kako bi pogodio na kojem sučelju i priključku treba izvršiti " -"zahtjev.\n" +msgstr "Ako je ova postavka ostavljena prazna i koristiš Peertube verziju ≥ 5.1 ili noviju, dodatak će koristiti vrijednosti iz tvoje Peertube konfiguracijske datoteke kako bi pogodio na kojem sučelju i priključku treba izvršiti zahtjev.\n" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -3112,11 +3106,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md msgid "The `sn` attribute is the short name code. The `url` attribute can be any image url than your browser can access, or a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) representing the file you want to import." -msgstr "" -"Atribut `sn` je kod kratkog imena. Atribut `url` može biti bilo koji url " -"slike kojem tvoj preglednik može pristupiti ili [URL " -"podataka](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/" -"Data_URLs) koji predstavlja datoteku koju želiš uvesti." +msgstr "Atribut `sn` je kod kratkog imena. Atribut `url` može biti bilo koji url slike kojem tvoj preglednik može pristupiti ili [URL podataka](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) koji predstavlja datoteku koju želiš uvesti." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/_index.md @@ -3180,18 +3170,12 @@ msgstr "Opcije odgode moderiranja" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "On the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel), you can set the \"{{% livechat_label moderation_delay %}}\" option:" -msgstr "" -"Na [stranici za konfiguraciju kanala](/peertube-plugin-livechat/hr/" -"documentation/user/streamers/channel) možeš postaviti opciju „{{% " -"livechat_label moderation_delay %}}”:" +msgstr "Na [stranici za konfiguraciju kanala](/peertube-plugin-livechat/hr/documentation/user/streamers/channel) možeš postaviti opciju „{{% livechat_label moderation_delay %}}”:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" -msgstr "" -"![Konfiguracija kanala / Odgoda moderiranja](/peertube-plugin-livechat/" -"images/moderation_delay_channel_option." -"png?classes=shadow,border&height=400px)" +msgstr "![Konfiguracija kanala / Odgoda moderiranja](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3234,9 +3218,7 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -msgstr "" -"![Timer odgode moderiranja](/peertube-plugin-livechat/images/" -"moderation_delay_timer.png?classes=shadow,border)" +msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3357,6 +3339,23 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "This feature comes with the livechat plugin version 10.0.0." +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.0.0." + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3493,11 +3492,7 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every user that is not muted can vote. This means that you can prevent anonymous users to vote by using the [\"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" feature](/peertube-plugin-livechat/documentation/user/streamers/moderation)." -msgstr "" -"Svaki korisnik koji nije isključen može glasati. To znači da možeš " -"spriječiti anonimne korisnike da glasaju pomoću funkcije [\"{{% " -"livechat_label livechat_configuration_channel_mute_anonymous_label " -"%}}\"](/peertube-plugin-livechat/documentation/user/streamers/moderation)." +msgstr "Svaki korisnik koji nije isključen može glasati. To znači da možeš spriječiti anonimne korisnike da glasaju pomoću funkcije [\"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"](/peertube-plugin-livechat/documentation/user/streamers/moderation)." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.hu.po b/support/documentation/po/livechat.hu.po index 1e793f9b..e23e763c 100644 --- a/support/documentation/po/livechat.hu.po +++ b/support/documentation/po/livechat.hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.is.po b/support/documentation/po/livechat.is.po index 6ad5fbe0..3ba424f1 100644 --- a/support/documentation/po/livechat.is.po +++ b/support/documentation/po/livechat.is.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Icelandic \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.it.po b/support/documentation/po/livechat.it.po index 4038bcd9..6be26854 100644 --- a/support/documentation/po/livechat.it.po +++ b/support/documentation/po/livechat.it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 14:21+0000\n" "Last-Translator: John Livingston \n" "Language-Team: Italian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.ja.po b/support/documentation/po/livechat.ja.po index af5eca86..2f65db09 100644 --- a/support/documentation/po/livechat.ja.po +++ b/support/documentation/po/livechat.ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2024-03-10 20:38+0000\n" "Last-Translator: \"T.S\" \n" "Language-Team: Japanese \n" @@ -3439,6 +3439,22 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "PeerTube ライブチャットプラグイン" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.kab.po b/support/documentation/po/livechat.kab.po index 447fec02..8c5a275e 100644 --- a/support/documentation/po/livechat.kab.po +++ b/support/documentation/po/livechat.kab.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.nb.po b/support/documentation/po/livechat.nb.po index 828286e6..500a8c81 100644 --- a/support/documentation/po/livechat.nb.po +++ b/support/documentation/po/livechat.nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Bokmål \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.nl.po b/support/documentation/po/livechat.nl.po index 1f6cbed5..a1712a36 100644 --- a/support/documentation/po/livechat.nl.po +++ b/support/documentation/po/livechat.nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dutch \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.nn.po b/support/documentation/po/livechat.nn.po index cbea9f32..1e5eafe8 100644 --- a/support/documentation/po/livechat.nn.po +++ b/support/documentation/po/livechat.nn.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Nynorsk \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.oc.po b/support/documentation/po/livechat.oc.po index 9edc00fe..e97f6f0d 100644 --- a/support/documentation/po/livechat.oc.po +++ b/support/documentation/po/livechat.oc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Occitan \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.pl.po b/support/documentation/po/livechat.pl.po index 752e59f2..38899580 100644 --- a/support/documentation/po/livechat.pl.po +++ b/support/documentation/po/livechat.pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Polish \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.pt.po b/support/documentation/po/livechat.pt.po index 741695a9..1da91774 100644 --- a/support/documentation/po/livechat.pt.po +++ b/support/documentation/po/livechat.pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.ru.po b/support/documentation/po/livechat.ru.po index 745e9227..6f6807ea 100644 --- a/support/documentation/po/livechat.ru.po +++ b/support/documentation/po/livechat.ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Russian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.sq.po b/support/documentation/po/livechat.sq.po index 1269dc1a..e3489d69 100644 --- a/support/documentation/po/livechat.sq.po +++ b/support/documentation/po/livechat.sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.sv.po b/support/documentation/po/livechat.sv.po index 4e4ee793..b0fdfb49 100644 --- a/support/documentation/po/livechat.sv.po +++ b/support/documentation/po/livechat.sv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.th.po b/support/documentation/po/livechat.th.po index 00a4f61a..7eff7bb9 100644 --- a/support/documentation/po/livechat.th.po +++ b/support/documentation/po/livechat.th.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.tok.po b/support/documentation/po/livechat.tok.po index 6da412df..a6d28ad8 100644 --- a/support/documentation/po/livechat.tok.po +++ b/support/documentation/po/livechat.tok.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Toki Pona \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.tr.po b/support/documentation/po/livechat.tr.po index 99b16ae5..22d46d8b 100644 --- a/support/documentation/po/livechat.tr.po +++ b/support/documentation/po/livechat.tr.po @@ -3316,6 +3316,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/ occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.uk.po b/support/documentation/po/livechat.uk.po index 3b24b3eb..b6540437 100644 --- a/support/documentation/po/livechat.uk.po +++ b/support/documentation/po/livechat.uk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.vi.po b/support/documentation/po/livechat.vi.po index d9202152..d8e1afe1 100644 --- a/support/documentation/po/livechat.vi.po +++ b/support/documentation/po/livechat.vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hans.po b/support/documentation/po/livechat.zh-Hans.po index 24128837..3e358ace 100644 --- a/support/documentation/po/livechat.zh-Hans.po +++ b/support/documentation/po/livechat.zh-Hans.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hant.po b/support/documentation/po/livechat.zh-Hant.po index 181691d9..b4707c4d 100644 --- a/support/documentation/po/livechat.zh-Hant.po +++ b/support/documentation/po/livechat.zh-Hant.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-17 10:53+0200\n" +"POT-Creation-Date: 2024-07-29 14:58+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Traditional) \n" @@ -3335,6 +3335,21 @@ msgstr "" msgid "You can promote users as moderators, if you need some help." msgstr "" +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "This feature comes with the livechat plugin version 11.0.0." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap From bf8f3a08ecf9b3e96c9b94ef2ddd4c6d96ad7233 Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Tue, 30 Jul 2024 06:39:38 +0000 Subject: [PATCH 043/136] Translated using Weblate (German) Currently translated at 100.0% (812 of 812 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/ --- support/documentation/po/livechat.de.po | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index b7d6276b..4c92c45f 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -8,9 +8,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-07-29 14:58+0200\n" -"PO-Revision-Date: 2024-07-24 09:23+0000\n" -"Last-Translator: Victor Hampel \n" -"Language-Team: German \n" +"PO-Revision-Date: 2024-07-30 06:49+0000\n" +"Last-Translator: Victor Hampel " +"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3418,22 +3420,26 @@ msgstr "Sie können Benutzer zu Moderatoren befördern, wenn Sie Hilfe benötige #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -#, fuzzy -#| msgid "This feature comes with the livechat plugin version 10.0.0." msgid "This feature comes with the livechat plugin version 11.0.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.0.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 11.0.0 verfügbar sein." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" msgstr "" +"Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, dass " +"bekannt wird, wer Teilnehmer bannt/verweist/....\"" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -#, fuzzy -#| msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" checkbox." msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." -msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"." +msgstr "" +"Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das " +"[Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers)" +", öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine " +"Checkbox \"{{% livechat_label " +"livechat_configuration_channel_anonymize_moderation_label %}}\"." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md From a700263eda3fe309a71b3c0a74b7adf5aaa89ac1 Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Tue, 30 Jul 2024 06:36:42 +0000 Subject: [PATCH 044/136] Translated using Weblate (German) Currently translated at 100.0% (272 of 272 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/de/ --- languages/de.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/languages/de.yml b/languages/de.yml index f58e12e6..b4578675 100644 --- a/languages/de.yml +++ b/languages/de.yml @@ -558,3 +558,7 @@ livechat_configuration_channel_moderation_delay_desc: "Standardwert der Moderati so dass Moderatoren die Nachricht löschen können, bevor ein anderer Benutzer sie lesen kann.\n\n" avatar_set_option_none: Nichts +livechat_configuration_channel_anonymize_moderation_label: Moderationsaktionen anonymisieren +livechat_configuration_channel_anonymize_moderation_desc: "Moderationsaktionen anonymisieren + Standardwert für neue Räume.\nWenn dies aktiviert ist, werden Moderationsaktionen + anonymisiert, um zu vermeiden, dass bekannt wird, wer Teilnehmer bannt/verweist/....\n" From 074e688ed8212da853e13afc0707ca9dd73c3225 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 18:58:02 +0200 Subject: [PATCH 045/136] New moderator app WIP: * #144: moderator notes WIP, * plugin size: adding an API, * refactoring the code from the task app, to create a new MUC App system. --- CHANGELOG.md | 1 + conversejs/builtin.ts | 8 + conversejs/custom/index.js | 2 + .../notes/components/muc-note-app-view.js | 21 +++ conversejs/custom/plugins/notes/constants.js | 5 + conversejs/custom/plugins/notes/index.js | 57 +++++++ conversejs/custom/plugins/notes/note.js | 29 ++++ conversejs/custom/plugins/notes/notes.js | 39 +++++ .../plugins/notes/templates/muc-note-app.js | 51 ++++++ conversejs/custom/plugins/notes/utils.js | 146 ++++++++++++++++++ conversejs/custom/plugins/size/index.js | 29 +++- .../tasks/components/muc-task-app-view.js | 24 +-- .../custom/shared/components/font-awesome.js | 5 + .../custom/shared/components/muc-app.js | 77 +++++++++ .../components/styles/muc-app.scss} | 6 +- conversejs/custom/templates/muc-chatarea.js | 5 + conversejs/loc.keys.js | 3 +- languages/en.yml | 2 + .../mod_pubsub_peertubelivechat/README.md | 13 +- .../mod_pubsub_peertubelivechat.lua | 5 +- 20 files changed, 496 insertions(+), 32 deletions(-) create mode 100644 conversejs/custom/plugins/notes/components/muc-note-app-view.js create mode 100644 conversejs/custom/plugins/notes/constants.js create mode 100644 conversejs/custom/plugins/notes/index.js create mode 100644 conversejs/custom/plugins/notes/note.js create mode 100644 conversejs/custom/plugins/notes/notes.js create mode 100644 conversejs/custom/plugins/notes/templates/muc-note-app.js create mode 100644 conversejs/custom/plugins/notes/utils.js create mode 100644 conversejs/custom/shared/components/muc-app.js rename conversejs/custom/{plugins/tasks/styles/muc-task-app.scss => shared/components/styles/muc-app.scss} (89%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da0a497..9196ae73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. * #146: copy message button for moderators. * #137: option to hide moderator name who made actions (kick, ban, message moderation, ...). +* #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/notes/). ### Minor changes and fixes diff --git a/conversejs/builtin.ts b/conversejs/builtin.ts index c1dd6689..2f6c3928 100644 --- a/conversejs/builtin.ts +++ b/conversejs/builtin.ts @@ -219,9 +219,12 @@ async function initConverse ( // * mode === chat-only + !transparent + !readonly + is using a livechat token // Technically it would work in 'chat-only' mode, but i don't want to add too many things to test // (and i now there is some CSS bugs in the task list). + // Same for the moderator notes app. let enableTask = false + let enableModeratorNotes = false if (chatIncludeMode === 'peertube-video' || chatIncludeMode === 'peertube-fullpage') { enableTask = true + enableModeratorNotes = true } else if ( chatIncludeMode === 'chat-only' && usedLivechatToken && @@ -229,11 +232,16 @@ async function initConverse ( !initConverseParams.forceReadonly ) { enableTask = true + enableModeratorNotes = true } if (enableTask) { params.livechat_task_app_enabled = true params.livechat_task_app_restore = chatIncludeMode === 'peertube-fullpage' || chatIncludeMode === 'chat-only' } + if (enableModeratorNotes) { + params.livechat_note_app_enabled = true + params.livechat_note_app_restore = chatIncludeMode === 'peertube-fullpage' || chatIncludeMode === 'chat-only' + } try { if (window.reconnectConverse) { // this is set in the livechatSpecificsPlugin diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 71d2ab6d..29de15ce 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -44,6 +44,7 @@ import './plugins/singleton/index.js' import './plugins/fullscreen/index.js' import '../custom/plugins/size/index.js' +import '../custom/plugins/notes/index.js' import '../custom/plugins/tasks/index.js' import '../custom/plugins/terms/index.js' import '../custom/plugins/poll/index.js' @@ -59,6 +60,7 @@ CORE_PLUGINS.push('livechat-converse-size') CORE_PLUGINS.push('livechat-converse-tasks') CORE_PLUGINS.push('livechat-converse-terms') CORE_PLUGINS.push('livechat-converse-poll') +CORE_PLUGINS.push('livechat-converse-notes') // We must also add our custom ROOM_FEATURES, so that they correctly resets // (see headless/plugins/muc, getDiscoInfoFeatures, which loops on this const) ROOM_FEATURES.push('x_peertubelivechat_mute_anonymous') diff --git a/conversejs/custom/plugins/notes/components/muc-note-app-view.js b/conversejs/custom/plugins/notes/components/muc-note-app-view.js new file mode 100644 index 00000000..6b7368f0 --- /dev/null +++ b/conversejs/custom/plugins/notes/components/muc-note-app-view.js @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { api } from '@converse/headless' +import { MUCApp } from '../../../shared/components/muc-app.js' +import { tplMUCNoteApp } from '../templates/muc-note-app.js' + +/** + * Custom Element to display the Notes Application. + */ +export default class MUCNoteApp extends MUCApp { + enableSettingName = 'livechat_note_app_restore' + sessionStorangeShowKey = 'livechat-converse-note-app-show' + + render () { + return tplMUCNoteApp(this, this.model) + } +} + +api.elements.define('livechat-converse-muc-note-app', MUCNoteApp) diff --git a/conversejs/custom/plugins/notes/constants.js b/conversejs/custom/plugins/notes/constants.js new file mode 100644 index 00000000..baefcc00 --- /dev/null +++ b/conversejs/custom/plugins/notes/constants.js @@ -0,0 +1,5 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +export const XMLNS_NOTE = 'urn:peertube-plugin-livechat:note' diff --git a/conversejs/custom/plugins/notes/index.js b/conversejs/custom/plugins/notes/index.js new file mode 100644 index 00000000..7f3127af --- /dev/null +++ b/conversejs/custom/plugins/notes/index.js @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { _converse, converse } from '../../../src/headless/index.js' +import { XMLNS_NOTE } from './constants.js' +import { ChatRoomNote } from './note.js' +import { ChatRoomNotes } from './notes.js' +import { initOrDestroyChatRoomNotes, getHeadingButtons, getMessageActionButtons } from './utils.js' + +import './components/muc-note-app-view.js' + +converse.plugins.add('livechat-converse-notes', { + dependencies: ['converse-muc', 'converse-disco', 'converse-pubsub'], + + initialize () { + Object.assign( + _converse.exports, + { + ChatRoomNotes, + ChatRoomNote + } + ) + + _converse.api.settings.extend({ + livechat_note_app_enabled: false, + livechat_note_app_restore: false // should we open the app by default if it was previously oppened? + }) + + _converse.api.listen.on('chatRoomInitialized', muc => { + muc.session.on('change:connection_status', _session => { + // When joining a room, initializing the Notes object (if user has access), + // When disconnected from a room, destroying the Notes object: + initOrDestroyChatRoomNotes(muc) + }) + + // When the current user affiliation changes, we must also delete or initialize the TaskLists object: + muc.occupants.on('change:affiliation', occupant => { + if (occupant.get('jid') !== _converse.bare_jid) { // only for myself + return + } + initOrDestroyChatRoomNotes(muc) + }) + + // To be sure that everything works in any case, we also must listen for addition in muc.features. + muc.features.on('change:' + XMLNS_NOTE, () => { + initOrDestroyChatRoomNotes(muc) + }) + }) + + // adding the "Notes" button in the MUC heading buttons: + _converse.api.listen.on('getHeadingButtons', getHeadingButtons) + + // Adding buttons on message: + _converse.api.listen.on('getMessageActionButtons', getMessageActionButtons) + } +}) diff --git a/conversejs/custom/plugins/notes/note.js b/conversejs/custom/plugins/notes/note.js new file mode 100644 index 00000000..67cd679c --- /dev/null +++ b/conversejs/custom/plugins/notes/note.js @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { Model } from '@converse/skeletor/src/model.js' + +/** + * A chat room note. + * @class + * @namespace _converse.exports.ChatRoomNote + * @memberof _converse + */ +class ChatRoomNote extends Model { + idAttribute = 'id' + + async saveItem () { + console.log('Saving note ' + this.get('id') + '...') + await this.collection.chatroom.noteManager.saveItem(this) + console.log('Note ' + this.get('id') + ' saved.') + } + + async deleteItem () { + return this.collection.chatroom.noteManager.deleteItems([this]) + } +} + +export { + ChatRoomNote +} diff --git a/conversejs/custom/plugins/notes/notes.js b/conversejs/custom/plugins/notes/notes.js new file mode 100644 index 00000000..32a4d9e3 --- /dev/null +++ b/conversejs/custom/plugins/notes/notes.js @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { Collection } from '@converse/skeletor/src/collection.js' +import { ChatRoomNote } from './note' +import { initStorage } from '@converse/headless/utils/storage.js' + +/** + * A list of {@link _converse.exports.ChatRoomNote} instances, representing notes associated to a MUC. + * @class + * @namespace _converse.exports.ChatRoomNotes + * @memberOf _converse + */ +class ChatRoomNotes extends Collection { + model = ChatRoomNote + comparator = 'order' + + initialize (models, options) { + this.model = ChatRoomNote // don't know why, must do it again here + super.initialize(arguments) + this.chatroom = options.chatroom + + const id = `converse-livechat-notes-${this.chatroom.get('jid')}` + initStorage(this, id, 'session') + + this.on('change:order', () => this.sort()) + } + + // async createNote (data) { + // console.log('Creating note...') + // await this.chatroom.NoteManager.createItem(this, Object.assign({}, data)) + // console.log('Note created.') + // } +} + +export { + ChatRoomNotes +} diff --git a/conversejs/custom/plugins/notes/templates/muc-note-app.js b/conversejs/custom/plugins/notes/templates/muc-note-app.js new file mode 100644 index 00000000..ec409bcb --- /dev/null +++ b/conversejs/custom/plugins/notes/templates/muc-note-app.js @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { converseLocalizedHelpUrl } from '../../../shared/lib/help' +import { html } from 'lit' +import { __ } from 'i18n' + +export function tplMUCNoteApp (el, mucModel) { + if (!mucModel) { + // should not happen + el.classList.add('hidden') // we must do this, otherwise will have CSS side effects + return html`` + } + if (!mucModel.notes) { + // too soon, not initialized yet (this will happen) + el.classList.add('hidden') // we must do this, otherwise will have CSS side effects + return html`` + } + + if (!el.show) { + el.classList.add('hidden') + return html`` + } + + el.classList.remove('hidden') + + // eslint-disable-next-line no-undef + const i18nNotes = __(LOC_moderator_notes) + // eslint-disable-next-line no-undef + const i18nHelp = __(LOC_online_help) + const helpUrl = converseLocalizedHelpUrl({ + page: 'documentation/user/streamers/notes' + }) + + return html` +
    +
    ${i18nNotes}
    + + +
    +
    + +
    ` +} diff --git a/conversejs/custom/plugins/notes/utils.js b/conversejs/custom/plugins/notes/utils.js new file mode 100644 index 00000000..e425d9e3 --- /dev/null +++ b/conversejs/custom/plugins/notes/utils.js @@ -0,0 +1,146 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { XMLNS_NOTE } from './constants.js' +import { PubSubManager } from '../../shared/lib/pubsub-manager.js' +import { converse, _converse, api } from '../../../src/headless/index.js' +import { __ } from 'i18n' + +export function getHeadingButtons (view, buttons) { + const muc = view.model + if (muc.get('type') !== _converse.constants.CHATROOMS_TYPE) { + // only on MUC. + return buttons + } + + if (!muc.notes) { // this is defined only if user has access (see initOrDestroyChatRoomNotes) + return buttons + } + + // Adding a "Open moderator noteds" button. + buttons.unshift({ + // eslint-disable-next-line no-undef + i18n_text: __(LOC_moderator_notes), + handler: async (ev) => { + ev.preventDefault() + // opening or closing the muc notes: + const NoteAppEl = ev.target.closest('converse-root').querySelector('livechat-converse-muc-note-app') + NoteAppEl.toggleApp() + }, + a_class: '', + icon_class: 'fa-note-sticky', + name: 'muc-notes' + }) + + return buttons +} + +export function getMessageActionButtons (messageActionsEl, buttons) { + const messageModel = messageActionsEl.model + if (messageModel.get('type') !== 'groupchat') { + // only on groupchat message. + return buttons + } + + const muc = messageModel.collection?.chatbox + if (!muc?.notes) { + return buttons + } + + // TODO: button to create a note from a message. + // // eslint-disable-next-line no-undef + // const i18nCreate = __(LOC_task_create) + + // buttons.push({ + // i18n_text: i18nCreate, + // handler: async (ev) => { + // ev.preventDefault() + // api.modal.show('livechat-converse-pick-task-list-modal', { + // muc, + // message: messageModel + // }, ev) + // }, + // button_class: '', + // icon_class: 'fa fa-list-check', + // name: 'muc-task-create-from-message' + // }) + + return buttons +} + +function _initChatRoomNotes (mucModel) { + if (mucModel.noteManager) { + // already initiliazed + return + } + + mucModel.notes = new _converse.exports.ChatRoomNotes(undefined, { chatroom: mucModel }) + + mucModel.noteManager = new PubSubManager( + mucModel.get('jid'), + 'livechat-notes', // the node name + { + note: { + itemTag: 'note', + xmlns: XMLNS_NOTE, + collection: mucModel.notes, + fields: { + name: String, + description: String + }, + attributes: { + order: Number + } + } + } + ) + mucModel.noteManager.start().catch(err => console.log(err)) + + // We must requestUpdate for all message actions, to add the "create note" button. + // FIXME: this should not be done here (but it is simplier for now) + document.querySelectorAll('converse-message-actions').forEach(el => el.requestUpdate()) +} + +function _destroyChatRoomNotes (mucModel) { + if (!mucModel.noteManager) { return } + + mucModel.noteManager.stop().catch(err => console.log(err)) + mucModel.noteManager = undefined + + mucModel.notes = undefined + + // We must requestUpdate for all message actions, to remove the "create note" button. + // FIXME: this should not be done here (but it is simplier for now) + document.querySelectorAll('converse-message-actions').forEach(el => el.requestUpdate()) +} + +export function initOrDestroyChatRoomNotes (mucModel) { + if (mucModel.get('type') !== _converse.constants.CHATROOMS_TYPE) { + // only on MUC. + return _destroyChatRoomNotes(mucModel) + } + + if (!api.settings.get('livechat_note_app_enabled')) { + // Feature disabled, no need to handle notes. + return _destroyChatRoomNotes(mucModel) + } + + if (mucModel.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED) { + return _destroyChatRoomNotes(mucModel) + } + + // We must check disco features + // (if the chat is remote, the server could use a livechat version that does not support this feature) + if (!mucModel.features?.get?.(XMLNS_NOTE)) { + return _destroyChatRoomNotes(mucModel) + } + + const myself = mucModel.getOwnOccupant() + if (!myself || !['admin', 'owner'].includes(myself.get('affiliation'))) { + // User must be admin or owner + return _destroyChatRoomNotes(mucModel) + } + + return _initChatRoomNotes(mucModel) +} diff --git a/conversejs/custom/plugins/size/index.js b/conversejs/custom/plugins/size/index.js index d02ce408..3ac9b54c 100644 --- a/conversejs/custom/plugins/size/index.js +++ b/conversejs/custom/plugins/size/index.js @@ -4,6 +4,8 @@ import { _converse, converse, api } from '../../../src/headless/index.js' +let currentSize + /** * This plugin computes the available width of converse-root, and adds classes * and events so we can adapt the display of some elements to the current @@ -16,6 +18,27 @@ converse.plugins.add('livechat-converse-size', { dependencies: [], initialize () { + Object.assign(api, { + livechat_size: { + current: () => { + return currentSize + }, + width_is: (sizes) => { + if (!Array.isArray(sizes)) { + sizes = [sizes] + } + if (!currentSize) { return false } + return sizes.includes(currentSize.width) + }, + height_is: (sizes) => { + if (!Array.isArray(sizes)) { + sizes = [sizes] + } + if (!currentSize) { return false } + return sizes.includes(currentSize.height) + } + } + }) _converse.api.listen.on('connected', start) _converse.api.listen.on('reconnected', start) _converse.api.listen.on('disconnected', stop) @@ -42,6 +65,7 @@ function start () { } function stop () { + currentSize = undefined rootResizeObserver.disconnect() const root = document.querySelector('converse-root') if (root) { @@ -60,8 +84,9 @@ function handle (el) { el.setAttribute('livechat-converse-root-width', width) el.setAttribute('livechat-converse-root-height', height) - api.trigger('livechatSizeChanged', { + currentSize = { height: height, width: width - }) + } + api.trigger('livechatSizeChanged', Object.assign({}, currentSize)) // cloning... } diff --git a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js index 32e3c7ce..ebadd97b 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js @@ -3,35 +3,19 @@ // SPDX-License-Identifier: AGPL-3.0-only import { api } from '@converse/headless' -import { CustomElement } from 'shared/components/element.js' +import { MUCApp } from '../../../shared/components/muc-app.js' import { tplMUCTaskApp } from '../templates/muc-task-app.js' -import '../styles/muc-task-app.scss' - /** * Custom Element to display the Task Application. */ -export default class MUCTaskApp extends CustomElement { - static get properties () { - return { - model: { type: Object, attribute: true }, // mucModel - show: { type: Boolean, attribute: false } - } - } - - async initialize () { - this.show = api.settings.get('livechat_task_app_restore') && - (window.sessionStorage?.getItem?.('livechat-converse-task-app-show') === '1') - } +export default class MUCTaskApp extends MUCApp { + enableSettingName = 'livechat_task_app_restore' + sessionStorangeShowKey = 'livechat-converse-task-app-show' render () { return tplMUCTaskApp(this, this.model) } - - toggleApp () { - this.show = !this.show - window.sessionStorage?.setItem?.('livechat-converse-task-app-show', this.show ? '1' : '') - } } api.elements.define('livechat-converse-muc-task-app', MUCTaskApp) diff --git a/conversejs/custom/shared/components/font-awesome.js b/conversejs/custom/shared/components/font-awesome.js index 2713ea23..d3ab7ede 100644 --- a/conversejs/custom/shared/components/font-awesome.js +++ b/conversejs/custom/shared/components/font-awesome.js @@ -28,6 +28,11 @@ export default () => { + + + + + ` } diff --git a/conversejs/custom/shared/components/muc-app.js b/conversejs/custom/shared/components/muc-app.js new file mode 100644 index 00000000..8ab03c5e --- /dev/null +++ b/conversejs/custom/shared/components/muc-app.js @@ -0,0 +1,77 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { CustomElement } from 'shared/components/element.js' +import { api, _converse } from '@converse/headless' +import './styles/muc-app.scss' + +/** + * Base class for MUC App custom elements (task app, notes app, ...). + * This is an abstract class, should not be called directly. + */ +export class MUCApp extends CustomElement { + enableSettingName = undefined // must be overloaded + sessionStorangeShowKey = undefined // must be overloaded + + static get properties () { + return { + model: { type: Object, attribute: true }, // mucModel + show: { type: Boolean, attribute: false } + } + } + + async initialize () { + this.classList.add('livechat-converse-muc-app') + this.show = this.enableSettingName && + api.settings.get(this.enableSettingName) && + this.sessionStorangeShowKey && + (window.sessionStorage?.getItem?.(this.sessionStorangeShowKey) === '1') + + // we listen for livechatSizeChanged event, + // and close all apps except the first if small or medium width. + // Note: this will also be triggered when we first open the page + this.listenTo(_converse, 'livechatSizeChanged', () => { + if (!this.show || !api.livechat_size?.width_is(['small', 'medium'])) { + return + } + // are we the first opened app? + for (const el of document.querySelectorAll('.livechat-converse-muc-app')) { + if (el === this) { break } + if (!el.show) { continue } + console.debug('The livechat size is small or medium, there is already an opened app, so closing myself', this) + // ok, there is already an opened app. + this.toggleApp() // we know we are open + break + } + }) + } + + render () { // must be overloaded. + return '' + } + + toggleApp () { + this.show = !this.show + if (this.sessionStorangeShowKey) { + window.sessionStorage?.setItem?.(this.sessionStorangeShowKey, this.show ? '1' : '') + } + + if ( + this.show && + api.livechat_size?.width_is(['small', 'medium']) + ) { + // When showing an App, if the screen width is small or medium, we hide the others. + this._closeOtherApps() + } + } + + _closeOtherApps () { + document.querySelectorAll('.livechat-converse-muc-app').forEach((el) => { + if (el !== this && el.show) { + console.debug('Closing another app, because livechat width is small or medium', el) + el.toggleApp() + } + }) + } +} diff --git a/conversejs/custom/plugins/tasks/styles/muc-task-app.scss b/conversejs/custom/shared/components/styles/muc-app.scss similarity index 89% rename from conversejs/custom/plugins/tasks/styles/muc-task-app.scss rename to conversejs/custom/shared/components/styles/muc-app.scss index e636a57e..59eb23a7 100644 --- a/conversejs/custom/plugins/tasks/styles/muc-task-app.scss +++ b/conversejs/custom/shared/components/styles/muc-app.scss @@ -5,7 +5,7 @@ */ .conversejs { - livechat-converse-muc-task-app { + .livechat-converse-muc-app { border: var(--occupants-border-left); display: flex; flex-flow: column nowrap; @@ -42,8 +42,8 @@ &[livechat-converse-root-width="small"], &[livechat-converse-root-width="medium"] { - converse-muc-chatarea livechat-converse-muc-task-app:not(.hidden) ~ * { - // on small and medium width, we hide all subsequent siblings of the task app + converse-muc-chatarea .livechat-converse-muc-app:not(.hidden) ~ * { + // on small and medium width, we hide all subsequent siblings of the app // (when app is not hidden) display: none !important; } diff --git a/conversejs/custom/templates/muc-chatarea.js b/conversejs/custom/templates/muc-chatarea.js index d709ca56..6980b17f 100644 --- a/conversejs/custom/templates/muc-chatarea.js +++ b/conversejs/custom/templates/muc-chatarea.js @@ -13,5 +13,10 @@ export default (o) => { ? html`` : '' } + ${ + o?.model && api.settings.get('livechat_note_app_enabled') + ? html`` + : '' + } ${tplMUCChatarea(o)}` } diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index 7a6f9283..bb811c3f 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -49,7 +49,8 @@ const locKeys = [ 'poll_vote_instructions_xmpp', 'poll_is_over', 'poll_choice_invalid', - 'poll_anonymous_vote_ok' + 'poll_anonymous_vote_ok', + 'moderator_notes' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index eeded6d1..b0133c1e 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -593,3 +593,5 @@ livechat_configuration_channel_anonymize_moderation_label: "Anonymize moderation livechat_configuration_channel_anonymize_moderation_desc: | Anonymize moderation actions default value for new rooms. When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants. + +moderator_notes: Moderator notes diff --git a/prosody-modules/mod_pubsub_peertubelivechat/README.md b/prosody-modules/mod_pubsub_peertubelivechat/README.md index b0525942..62d143cc 100644 --- a/prosody-modules/mod_pubsub_peertubelivechat/README.md +++ b/prosody-modules/mod_pubsub_peertubelivechat/README.md @@ -7,13 +7,16 @@ SPDX-License-Identifier: AGPL-3.0-only This module is a custom module that provide some pubsub services associated to a MUC room. This module is entended to be used in the peertube-plugin-livechat project. -For each MUC room, there will be an associated pubsub node. -This node in only accessible by the ROOM admin/owner. +For each MUC room, there will be a associated pubsub nodes. +These nodes are only accessible by the ROOM admins/owners. -This node can contains various objects: +Here are a description of existing nodes, and objects they can contain: -* task lists -* tasks +* livechat-tasks: + * task lists + * tasks +* livechat-notes: + * notes * ... (more to come) These objects are meant te be shared between admin/owner. diff --git a/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua b/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua index 95465bf1..5b004436 100644 --- a/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua +++ b/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua @@ -15,6 +15,7 @@ -- Implemented nodes: -- * livechat-tasks: contains tasklist and task items, specific to livechat plugin. +-- * livechat-notes: contains notes, specific to livechat plugin. -- There are some other tricks in this module: -- * unsubscribing users that have left the room (the front-end will subscribe again when needed) @@ -39,7 +40,8 @@ local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; local xmlns_tasklist = "urn:peertube-plugin-livechat:tasklist"; -local xmlns_task = "urn:peertube-plugin-livechat:task" +local xmlns_task = "urn:peertube-plugin-livechat:task"; +local xmlns_note = "urn:peertube-plugin-livechat:note"; local lib_pubsub = module:require "pubsub"; @@ -389,4 +391,5 @@ end); module:hook("muc-disco#info", function (event) event.reply:tag("feature", { var = xmlns_task }):up(); event.reply:tag("feature", { var = xmlns_tasklist }):up(); + event.reply:tag("feature", { var = xmlns_note }):up(); end); From 86cac34ef37af0a9e21289991f3f9ace9d974286 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 23:26:29 +0200 Subject: [PATCH 046/136] Muc-app: cleaning code. --- .../custom/plugins/notes/templates/muc-note-app.js | 5 ----- .../custom/plugins/tasks/templates/muc-task-app.js | 5 ----- conversejs/custom/shared/components/muc-app.js | 10 ++++++++++ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conversejs/custom/plugins/notes/templates/muc-note-app.js b/conversejs/custom/plugins/notes/templates/muc-note-app.js index ec409bcb..ad471ca9 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note-app.js +++ b/conversejs/custom/plugins/notes/templates/muc-note-app.js @@ -9,22 +9,17 @@ import { __ } from 'i18n' export function tplMUCNoteApp (el, mucModel) { if (!mucModel) { // should not happen - el.classList.add('hidden') // we must do this, otherwise will have CSS side effects return html`` } if (!mucModel.notes) { // too soon, not initialized yet (this will happen) - el.classList.add('hidden') // we must do this, otherwise will have CSS side effects return html`` } if (!el.show) { - el.classList.add('hidden') return html`` } - el.classList.remove('hidden') - // eslint-disable-next-line no-undef const i18nNotes = __(LOC_moderator_notes) // eslint-disable-next-line no-undef diff --git a/conversejs/custom/plugins/tasks/templates/muc-task-app.js b/conversejs/custom/plugins/tasks/templates/muc-task-app.js index 5dcbd8a3..33255a8d 100644 --- a/conversejs/custom/plugins/tasks/templates/muc-task-app.js +++ b/conversejs/custom/plugins/tasks/templates/muc-task-app.js @@ -9,22 +9,17 @@ import { __ } from 'i18n' export function tplMUCTaskApp (el, mucModel) { if (!mucModel) { // should not happen - el.classList.add('hidden') // we must do this, otherwise will have CSS side effects return html`` } if (!mucModel.tasklists) { // too soon, not initialized yet (this will happen) - el.classList.add('hidden') // we must do this, otherwise will have CSS side effects return html`` } if (!el.show) { - el.classList.add('hidden') return html`` } - el.classList.remove('hidden') - // eslint-disable-next-line no-undef const i18nTasks = __(LOC_tasks) // eslint-disable-next-line no-undef diff --git a/conversejs/custom/shared/components/muc-app.js b/conversejs/custom/shared/components/muc-app.js index 8ab03c5e..40f13911 100644 --- a/conversejs/custom/shared/components/muc-app.js +++ b/conversejs/custom/shared/components/muc-app.js @@ -51,6 +51,16 @@ export class MUCApp extends CustomElement { return '' } + updated () { + if (this.innerText.trim() === '') { + this.classList.add('hidden') // we must do this, otherwise will have CSS side effects + } else { + this.classList.remove('hidden') + } + + super.updated() + } + toggleApp () { this.show = !this.show if (this.sessionStorangeShowKey) { From 20cb668e09fd6badf6a5fd48ef08a9b202ae3b2e Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 29 Jul 2024 23:50:06 +0200 Subject: [PATCH 047/136] Muc-app: some refactoring. --- .../notes/components/muc-note-app-view.js | 2 +- .../plugins/notes/templates/muc-note-app.js | 23 +++++++----------- .../tasks/components/muc-task-app-view.js | 2 +- .../plugins/tasks/templates/muc-task-app.js | 23 +++++++----------- .../{muc-app.js => muc-app/index.js} | 0 .../{ => muc-app}/styles/muc-app.scss | 0 .../components/muc-app/templates/muc-app.js | 24 +++++++++++++++++++ 7 files changed, 42 insertions(+), 32 deletions(-) rename conversejs/custom/shared/components/{muc-app.js => muc-app/index.js} (100%) rename conversejs/custom/shared/components/{ => muc-app}/styles/muc-app.scss (100%) create mode 100644 conversejs/custom/shared/components/muc-app/templates/muc-app.js diff --git a/conversejs/custom/plugins/notes/components/muc-note-app-view.js b/conversejs/custom/plugins/notes/components/muc-note-app-view.js index 6b7368f0..92ac6295 100644 --- a/conversejs/custom/plugins/notes/components/muc-note-app-view.js +++ b/conversejs/custom/plugins/notes/components/muc-note-app-view.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { api } from '@converse/headless' -import { MUCApp } from '../../../shared/components/muc-app.js' +import { MUCApp } from '../../../shared/components/muc-app/index.js' import { tplMUCNoteApp } from '../templates/muc-note-app.js' /** diff --git a/conversejs/custom/plugins/notes/templates/muc-note-app.js b/conversejs/custom/plugins/notes/templates/muc-note-app.js index ad471ca9..24c8766d 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note-app.js +++ b/conversejs/custom/plugins/notes/templates/muc-note-app.js @@ -3,6 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { converseLocalizedHelpUrl } from '../../../shared/lib/help' +import { tplMUCApp } from '../../../shared/components/muc-app/templates/muc-app.js' import { html } from 'lit' import { __ } from 'i18n' @@ -28,19 +29,11 @@ export function tplMUCNoteApp (el, mucModel) { page: 'documentation/user/streamers/notes' }) - return html` -
    -
    ${i18nNotes}
    - - -
    -
    - -
    ` + return tplMUCApp( + el, + i18nNotes, + helpUrl, + i18nHelp, + html`` + ) } diff --git a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js index ebadd97b..c7ad938a 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { api } from '@converse/headless' -import { MUCApp } from '../../../shared/components/muc-app.js' +import { MUCApp } from '../../../shared/components/muc-app/index.js' import { tplMUCTaskApp } from '../templates/muc-task-app.js' /** diff --git a/conversejs/custom/plugins/tasks/templates/muc-task-app.js b/conversejs/custom/plugins/tasks/templates/muc-task-app.js index 33255a8d..aeaf68e9 100644 --- a/conversejs/custom/plugins/tasks/templates/muc-task-app.js +++ b/conversejs/custom/plugins/tasks/templates/muc-task-app.js @@ -3,6 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { converseLocalizedHelpUrl } from '../../../shared/lib/help' +import { tplMUCApp } from '../../../shared/components/muc-app/templates/muc-app.js' import { html } from 'lit' import { __ } from 'i18n' @@ -28,19 +29,11 @@ export function tplMUCTaskApp (el, mucModel) { page: 'documentation/user/streamers/tasks' }) - return html` -
    -
    ${i18nTasks}
    - - -
    -
    - -
    ` + return tplMUCApp( + el, + i18nTasks, + helpUrl, + i18nHelp, + html`` + ) } diff --git a/conversejs/custom/shared/components/muc-app.js b/conversejs/custom/shared/components/muc-app/index.js similarity index 100% rename from conversejs/custom/shared/components/muc-app.js rename to conversejs/custom/shared/components/muc-app/index.js diff --git a/conversejs/custom/shared/components/styles/muc-app.scss b/conversejs/custom/shared/components/muc-app/styles/muc-app.scss similarity index 100% rename from conversejs/custom/shared/components/styles/muc-app.scss rename to conversejs/custom/shared/components/muc-app/styles/muc-app.scss diff --git a/conversejs/custom/shared/components/muc-app/templates/muc-app.js b/conversejs/custom/shared/components/muc-app/templates/muc-app.js new file mode 100644 index 00000000..9db12559 --- /dev/null +++ b/conversejs/custom/shared/components/muc-app/templates/muc-app.js @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { html } from 'lit' +import { __ } from 'i18n' + +export function tplMUCApp (el, i18nTitle, helpUrl, i18nHelp, content) { + return html` +
    +
    ${i18nTitle}
    + + +
    +
    + ${content} +
    ` +} From eb76e7ebb91e398a66ba05ef9903382a54811495 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Tue, 30 Jul 2024 01:24:19 +0200 Subject: [PATCH 048/136] Moderator notes WIP (#144) --- .../plugins/notes/components/muc-note-view.js | 109 ++++++++++++++++++ .../notes/components/muc-notes-view.js | 95 +++++++++++++++ conversejs/custom/plugins/notes/index.js | 2 + conversejs/custom/plugins/notes/notes.js | 19 ++- .../custom/plugins/notes/styles/muc-note.scss | 40 +++++++ .../plugins/notes/styles/muc-notes.scss | 21 ++++ .../plugins/notes/templates/muc-note.js | 71 ++++++++++++ .../plugins/notes/templates/muc-notes.js | 35 ++++++ conversejs/custom/plugins/notes/utils.js | 1 - conversejs/loc.keys.js | 7 +- languages/en.yml | 5 + .../mod_pubsub_peertubelivechat.lua | 3 - 12 files changed, 398 insertions(+), 10 deletions(-) create mode 100644 conversejs/custom/plugins/notes/components/muc-note-view.js create mode 100644 conversejs/custom/plugins/notes/components/muc-notes-view.js create mode 100644 conversejs/custom/plugins/notes/styles/muc-note.scss create mode 100644 conversejs/custom/plugins/notes/styles/muc-notes.scss create mode 100644 conversejs/custom/plugins/notes/templates/muc-note.js create mode 100644 conversejs/custom/plugins/notes/templates/muc-notes.js diff --git a/conversejs/custom/plugins/notes/components/muc-note-view.js b/conversejs/custom/plugins/notes/components/muc-note-view.js new file mode 100644 index 00000000..cdcb4e15 --- /dev/null +++ b/conversejs/custom/plugins/notes/components/muc-note-view.js @@ -0,0 +1,109 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { CustomElement } from 'shared/components/element.js' +import { api } from '@converse/headless' +import { tplMucNote } from '../templates/muc-note' +import { __ } from 'i18n' + +import '../styles/muc-note.scss' + +export default class MUCNoteView extends CustomElement { + static get properties () { + return { + model: { type: Object, attribute: true }, + edit: { type: Boolean, attribute: false } + } + } + + async initialize () { + this.edit = false + if (!this.model) { + return + } + + this.listenTo(this.model, 'change', () => this.requestUpdate()) + } + + render () { + return tplMucNote(this, this.model) + } + + shouldUpdate (changedProperties) { + if (!super.shouldUpdate(...arguments)) { return false } + // When a note is currently edited, and another users change the order, + // it could refresh losing the current form. + // To avoid this, we cancel update here. + // Note: of course, if 'edit' is part of the edited properties, we must update anyway + // (it means we just leaved the form) + if (this.edit && !changedProperties.has('edit')) { + console.info('Canceling an update on note, because it is currently edited', this) + return false + } + return true + } + + async saveNote (ev) { + ev?.preventDefault?.() + + const description = ev.target.description.value + + if ((description ?? '') === '') { return } + + try { + this.querySelectorAll('input[type=submit]').forEach(el => { + el.setAttribute('disabled', true) + el.classList.add('disabled') + }) + + const note = this.model + note.set('description', description) + await note.saveItem() + + this.edit = false + this.requestUpdate() // In case we cancel another update in shouldUpdate + } catch (err) { + console.error(err) + } finally { + this.querySelectorAll('input[type=submit]').forEach(el => { + el.removeAttribute('disabled') + el.classList.remove('disabled') + }) + } + } + + async deleteNote (ev) { + ev?.preventDefault?.() + + // eslint-disable-next-line no-undef + const i18nConfirmDelete = __(LOC_moderator_note_delete_confirm) + + const result = await api.confirm(i18nConfirmDelete) + if (!result) { return } + + try { + await this.model.deleteItem() + } catch (err) { + api.alert( + 'error', __('Error'), [__('Error')] + ) + } + } + + async toggleEdit () { + this.edit = !this.edit + if (this.edit) { + await this.updateComplete + const textarea = this.querySelector('textarea[name="description"]') + if (textarea) { + textarea.focus() + // Placing cursor at the end: + textarea.selectionStart = textarea.value.length + textarea.selectionEnd = textarea.selectionStart + } + } + } +} + +api.elements.define('livechat-converse-muc-note', MUCNoteView) diff --git a/conversejs/custom/plugins/notes/components/muc-notes-view.js b/conversejs/custom/plugins/notes/components/muc-notes-view.js new file mode 100644 index 00000000..902bb356 --- /dev/null +++ b/conversejs/custom/plugins/notes/components/muc-notes-view.js @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { CustomElement } from 'shared/components/element.js' +import { api } from '@converse/headless' +import tplMucNotes from '../templates/muc-notes' +import { __ } from 'i18n' + +import '../styles/muc-notes.scss' + +export default class MUCNotesView extends CustomElement { + currentDraggedNote = null + + static get properties () { + return { + model: { type: Object, attribute: true }, + create_note_error_message: { type: String, attribute: false }, + create_note_opened: { type: Boolean, attribute: false } + } + } + + async initialize () { + this.create_note_error_message = '' + + if (!this.model) { + return + } + + // Adding or removing a new note: we must update. + this.listenTo(this.model, 'add', () => this.requestUpdate()) + this.listenTo(this.model, 'remove', () => this.requestUpdate()) + this.listenTo(this.model, 'sort', () => this.requestUpdate()) + + // this._handleDragStartBinded = this._handleDragStart.bind(this) + // this._handleDragOverBinded = this._handleDragOver.bind(this) + // this._handleDragLeaveBinded = this._handleDragLeave.bind(this) + // this._handleDragEndBinded = this._handleDragEnd.bind(this) + // this._handleDropBinded = this._handleDrop.bind(this) + } + + render () { + return tplMucNotes(this, this.model) + } + + async openCreateNoteForm (ev) { + ev?.preventDefault?.() + this.create_note_opened = true + await this.updateComplete + const textarea = this.querySelector('.notes-create-note textarea[name="description"]') + if (textarea) { + textarea.focus() + } + } + + closeCreateNoteForm (ev) { + ev?.preventDefault?.() + this.create_note_opened = false + } + + async submitCreateNote (ev) { + ev.preventDefault() + + const description = ev.target.description.value + if (this.create_note_error_message) { + this.create_note_error_message = '' + } + + if ((description ?? '') === '') { return } + + try { + this.querySelectorAll('input[type=submit]').forEach(el => { + el.setAttribute('disabled', true) + el.classList.add('disabled') + }) + + await this.model.createNote({ + description: description + }) + + this.closeCreateNoteForm() + } catch (err) { + console.error(err) + // eslint-disable-next-line no-undef + this.create_note_error_message = __(LOC_moderator_notes_create_error) + } finally { + this.querySelectorAll('input[type=submit]').forEach(el => { + el.removeAttribute('disabled') + el.classList.remove('disabled') + }) + } + } +} + +api.elements.define('livechat-converse-muc-notes', MUCNotesView) diff --git a/conversejs/custom/plugins/notes/index.js b/conversejs/custom/plugins/notes/index.js index 7f3127af..a1bd5d66 100644 --- a/conversejs/custom/plugins/notes/index.js +++ b/conversejs/custom/plugins/notes/index.js @@ -9,6 +9,8 @@ import { ChatRoomNotes } from './notes.js' import { initOrDestroyChatRoomNotes, getHeadingButtons, getMessageActionButtons } from './utils.js' import './components/muc-note-app-view.js' +import './components/muc-notes-view.js' +import './components/muc-note-view.js' converse.plugins.add('livechat-converse-notes', { dependencies: ['converse-muc', 'converse-disco', 'converse-pubsub'], diff --git a/conversejs/custom/plugins/notes/notes.js b/conversejs/custom/plugins/notes/notes.js index 32a4d9e3..e83b2ad9 100644 --- a/conversejs/custom/plugins/notes/notes.js +++ b/conversejs/custom/plugins/notes/notes.js @@ -27,11 +27,20 @@ class ChatRoomNotes extends Collection { this.on('change:order', () => this.sort()) } - // async createNote (data) { - // console.log('Creating note...') - // await this.chatroom.NoteManager.createItem(this, Object.assign({}, data)) - // console.log('Note created.') - // } + async createNote (data) { + data = Object.assign({}, data) + + if (!data.order) { + data.order = 0 + Math.max( + 0, + ...(this.map(n => n.get('order') ?? 0).filter(o => !isNaN(o))) + ) + } + + console.log('Creating note...') + await this.chatroom.noteManager.createItem(this, data) + console.log('Note created.') + } } export { diff --git a/conversejs/custom/plugins/notes/styles/muc-note.scss b/conversejs/custom/plugins/notes/styles/muc-note.scss new file mode 100644 index 00000000..d3f698d0 --- /dev/null +++ b/conversejs/custom/plugins/notes/styles/muc-note.scss @@ -0,0 +1,40 @@ +/* + * SPDX-FileCopyrightText: 2024 John Livingston + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +.conversejs { + livechat-converse-muc-note { + padding: 0; + width: 100%; + + .note-line { + border: 1px solid var(--chatroom-head-bg-color); + border-radius: 4px; + display: flex; + flex-flow: row nowrap; + justify-content: space-around; + margin: 0.25em 0; + padding: 0.25em; + column-gap: 0.25em; + width: 100%; + + .note-description { + flex-grow: 2; + white-space: pre-wrap; + } + + .note-action { + background: unset; + border: 0; + padding-left: 0.25em; + padding-right: 0.25em; + } + + form { + width: 100%; + } + } + } +} diff --git a/conversejs/custom/plugins/notes/styles/muc-notes.scss b/conversejs/custom/plugins/notes/styles/muc-notes.scss new file mode 100644 index 00000000..8cea37b8 --- /dev/null +++ b/conversejs/custom/plugins/notes/styles/muc-notes.scss @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: 2024 John Livingston + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +.conversejs { + .notes-actions { + display: flex; + flex-flow: row nowrap; + justify-content: right; + width: 100%; + } + + .notes-action { + background: unset; + border: 0; + padding-left: 0.25em; + padding-right: 0.25em; + } +} diff --git a/conversejs/custom/plugins/notes/templates/muc-note.js b/conversejs/custom/plugins/notes/templates/muc-note.js new file mode 100644 index 00000000..dde1ffec --- /dev/null +++ b/conversejs/custom/plugins/notes/templates/muc-note.js @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { html } from 'lit' +import { __ } from 'i18n' + +export function tplMucNote (el, note) { + // eslint-disable-next-line no-undef + const i18nDelete = __(LOC_moderator_note_delete) + + return !el.edit + ? html` +
    +
    ${note.get('description') ?? ''}
    + + +
    ` + : html` +
    + + ${_tplNoteForm(note)} +
    + + +
    + +
    ` +} + +function _tplNoteForm (note) { + // eslint-disable-next-line no-undef + const i18nNoteDesc = __(LOC_moderator_note_description) + + return html`
    + +
    ` +} + +export function tplMucCreateNoteForm (notesEl) { + const i18nOk = __('Ok') + const i18nCancel = __('Cancel') + + return html` +
    + ${_tplNoteForm(undefined)} +
    + + + ${!notesEl.create_note_error_message + ? '' + : html`
    ${notesEl.create_note_error_message}
    ` + } +
    +
    ` +} diff --git a/conversejs/custom/plugins/notes/templates/muc-notes.js b/conversejs/custom/plugins/notes/templates/muc-notes.js new file mode 100644 index 00000000..8a0aa363 --- /dev/null +++ b/conversejs/custom/plugins/notes/templates/muc-notes.js @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { html } from 'lit' +import { repeat } from 'lit/directives/repeat.js' +import { __ } from 'i18n' +import { tplMucCreateNoteForm } from './muc-note' + +export default function tplMucNotes (el, notes) { + if (!notes) { // if user loses rights + return html`` // FIXME: add a message like "you dont have access"? + } + + return html` + ${ + el.create_note_opened ? tplMucCreateNoteForm(el) : tplCreateButton(el) + } + ${ + repeat(notes, (note) => note.get('id'), (note) => { + return html`` + }) + }` +} + +function tplCreateButton (el) { + // eslint-disable-next-line no-undef + const i18nCreateNote = __(LOC_moderator_note_create) + return html` +
    + +
    ` +} diff --git a/conversejs/custom/plugins/notes/utils.js b/conversejs/custom/plugins/notes/utils.js index e425d9e3..e06d4e93 100644 --- a/conversejs/custom/plugins/notes/utils.js +++ b/conversejs/custom/plugins/notes/utils.js @@ -86,7 +86,6 @@ function _initChatRoomNotes (mucModel) { xmlns: XMLNS_NOTE, collection: mucModel.notes, fields: { - name: String, description: String }, attributes: { diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index bb811c3f..9be7414d 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -50,7 +50,12 @@ const locKeys = [ 'poll_is_over', 'poll_choice_invalid', 'poll_anonymous_vote_ok', - 'moderator_notes' + 'moderator_notes', + 'moderator_notes_create_error', + 'moderator_note_create', + 'moderator_note_description', + 'moderator_note_delete', + 'moderator_note_delete_confirm' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index b0133c1e..376a24b5 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -595,3 +595,8 @@ livechat_configuration_channel_anonymize_moderation_desc: | When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants. moderator_notes: Moderator notes +moderator_notes_create_error: 'Error when saving the note' +moderator_note_create: 'Create a new note' +moderator_note_description: 'Description' +moderator_note_delete: 'Delete note' +moderator_note_delete_confirm: 'Are you sure you want to delete this note?' diff --git a/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua b/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua index 5b004436..95afee23 100644 --- a/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua +++ b/prosody-modules/mod_pubsub_peertubelivechat/mod_pubsub_peertubelivechat.lua @@ -48,9 +48,6 @@ local lib_pubsub = module:require "pubsub"; local mod_muc = module:depends"muc"; local get_room_from_jid = mod_muc.get_room_from_jid; -local muc_util = module:require "muc/util"; -local valid_roles = muc_util.valid_roles; - -- room_jid => object passed to module:add_items() local mep_service_items = {}; From fbc9a39485a500f3589f3e87ef04fd2d3f5b43df Mon Sep 17 00:00:00 2001 From: John Livingston Date: Tue, 30 Jul 2024 12:54:05 +0200 Subject: [PATCH 049/136] Refactoring: moving the draggable code in a common class. --- .../notes/components/muc-notes-view.js | 39 +++- .../plugins/notes/templates/muc-note.js | 4 +- .../tasks/components/muc-task-lists-view.js | 157 ++------------- .../plugins/tasks/styles/muc-task-drag.scss | 27 --- .../plugins/tasks/templates/muc-task-list.js | 2 +- .../plugins/tasks/templates/muc-task.js | 4 +- .../shared/components/draggables/index.js | 189 ++++++++++++++++++ .../draggables/styles/draggables.scss | 19 ++ 8 files changed, 260 insertions(+), 181 deletions(-) delete mode 100644 conversejs/custom/plugins/tasks/styles/muc-task-drag.scss create mode 100644 conversejs/custom/shared/components/draggables/index.js create mode 100644 conversejs/custom/shared/components/draggables/styles/draggables.scss diff --git a/conversejs/custom/plugins/notes/components/muc-notes-view.js b/conversejs/custom/plugins/notes/components/muc-notes-view.js index 902bb356..f7e82a92 100644 --- a/conversejs/custom/plugins/notes/components/muc-notes-view.js +++ b/conversejs/custom/plugins/notes/components/muc-notes-view.js @@ -2,16 +2,14 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { CustomElement } from 'shared/components/element.js' import { api } from '@converse/headless' import tplMucNotes from '../templates/muc-notes' import { __ } from 'i18n' +import { DraggablesCustomElement } from '../../../shared/components/draggables/index.js' import '../styles/muc-notes.scss' -export default class MUCNotesView extends CustomElement { - currentDraggedNote = null - +export default class MUCNotesView extends DraggablesCustomElement { static get properties () { return { model: { type: Object, attribute: true }, @@ -27,16 +25,16 @@ export default class MUCNotesView extends CustomElement { return } + this.draggableTagName = 'livechat-converse-muc-note' + this.droppableTagNames = ['livechat-converse-muc-note'] + this.droppableAlwaysBottomTagNames = [] + // Adding or removing a new note: we must update. this.listenTo(this.model, 'add', () => this.requestUpdate()) this.listenTo(this.model, 'remove', () => this.requestUpdate()) this.listenTo(this.model, 'sort', () => this.requestUpdate()) - // this._handleDragStartBinded = this._handleDragStart.bind(this) - // this._handleDragOverBinded = this._handleDragOver.bind(this) - // this._handleDragLeaveBinded = this._handleDragLeave.bind(this) - // this._handleDragEndBinded = this._handleDragEnd.bind(this) - // this._handleDropBinded = this._handleDrop.bind(this) + await super.initialize() } render () { @@ -90,6 +88,29 @@ export default class MUCNotesView extends CustomElement { }) } } + + _dropDone (draggedEl, droppedOnEl, onTopHalf) { + super._dropDone(...arguments) + console.log('[livechat note drag&drop] Note dropped...') + + const note = draggedEl.model + if (!note) { + throw new Error('No model for the draggedEl') + } + const targetNote = droppedOnEl.model + if (!targetNote) { + throw new Error('No model for the droppedOnEl') + } + if (note === targetNote) { + console.log('[livechat note drag&drop] Note dropped on itself, nothing to do') + return + } + + let newOrder = targetNote.get('order') ?? 0 + if (!onTopHalf) { newOrder = Math.max(0, newOrder + 1) } + + this._saveOrders(this.model, note, newOrder) + } } api.elements.define('livechat-converse-muc-notes', MUCNotesView) diff --git a/conversejs/custom/plugins/notes/templates/muc-note.js b/conversejs/custom/plugins/notes/templates/muc-note.js index dde1ffec..0eebcd4b 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note.js +++ b/conversejs/custom/plugins/notes/templates/muc-note.js @@ -11,7 +11,7 @@ export function tplMucNote (el, note) { return !el.edit ? html` -
    +
    ${note.get('description') ?? ''}
    ` : html` -
    +
    ${_tplNoteForm(note)}
    diff --git a/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js b/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js index 7c0df41c..a04faa2e 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-lists-view.js @@ -2,17 +2,14 @@ // // SPDX-License-Identifier: AGPL-3.0-only -import { CustomElement } from 'shared/components/element.js' import { api } from '@converse/headless' import tplMucTaskLists from '../templates/muc-task-lists' import { __ } from 'i18n' +import { DraggablesCustomElement } from '../../../shared/components/draggables/index.js' import '../styles/muc-task-lists.scss' -import '../styles/muc-task-drag.scss' - -export default class MUCTaskListsView extends CustomElement { - currentDraggedTask = null +export default class MUCTaskListsView extends DraggablesCustomElement { static get properties () { return { model: { type: Object, attribute: true }, @@ -27,42 +24,22 @@ export default class MUCTaskListsView extends CustomElement { return } + this.draggableTagName = 'livechat-converse-muc-task' + this.droppableTagNames = ['livechat-converse-muc-task', 'livechat-converse-muc-task-list'] + this.droppableAlwaysBottomTagNames = ['livechat-converse-muc-task-list'] + // Adding or removing a new task list: we must update. this.listenTo(this.model, 'add', () => this.requestUpdate()) this.listenTo(this.model, 'remove', () => this.requestUpdate()) this.listenTo(this.model, 'sort', () => this.requestUpdate()) - this._handleDragStartBinded = this._handleDragStart.bind(this) - this._handleDragOverBinded = this._handleDragOver.bind(this) - this._handleDragLeaveBinded = this._handleDragLeave.bind(this) - this._handleDragEndBinded = this._handleDragEnd.bind(this) - this._handleDropBinded = this._handleDrop.bind(this) + return super.initialize() } render () { return tplMucTaskLists(this, this.model) } - connectedCallback () { - super.connectedCallback() - this.currentDraggedTask = null - this.addEventListener('dragstart', this._handleDragStartBinded) - this.addEventListener('dragover', this._handleDragOverBinded) - this.addEventListener('dragleave', this._handleDragLeaveBinded) - this.addEventListener('dragend', this._handleDragEndBinded) - this.addEventListener('drop', this._handleDropBinded) - } - - disconnectedCallback () { - super.disconnectedCallback() - this.currentDraggedTask = null - this.removeEventListener('dragstart', this._handleDragStartBinded) - this.removeEventListener('dragover', this._handleDragOverBinded) - this.removeEventListener('dragleave', this._handleDragLeaveBinded) - this.removeEventListener('dragend', this._handleDragEndBinded) - this.removeEventListener('drop', this._handleDropBinded) - } - async submitCreateTaskList (ev) { ev.preventDefault() @@ -96,15 +73,7 @@ export default class MUCTaskListsView extends CustomElement { } } - _getParentTaskEl (target) { - return target.closest?.('livechat-converse-muc-task') - } - - _getParentTaskOrTaskListEl (target) { - return target.closest?.('livechat-converse-muc-task, livechat-converse-muc-task-list') - } - - _isATaskEl (target) { + isATaskEl (target) { return target.nodeName?.toLowerCase() === 'livechat-converse-muc-task' } @@ -112,71 +81,18 @@ export default class MUCTaskListsView extends CustomElement { return target.nodeName?.toLowerCase() === 'livechat-converse-muc-task-list' } - _isOnTopHalf (ev, taskEl) { - const y = ev.clientY - const bounding = taskEl.getBoundingClientRect() - return (y <= bounding.y + (bounding.height / 2)) - } - - _resetDropOver () { - document.querySelectorAll('.livechat-drag-bottom-half, .livechat-drag-top-half').forEach( - el => el.classList.remove('livechat-drag-bottom-half', 'livechat-drag-top-half') - ) - } - - _handleDragStart (ev) { - // The draggable=true is on a livechat-converse-muc-task child - const possibleTaskEl = ev.target.parentElement - if (!this._isATaskEl(possibleTaskEl)) { return } - console.log('[livechat task drag&drop] Starting to drag a task...') - this.currentDraggedTask = possibleTaskEl - this._resetDropOver() - } - - _handleDragOver (ev) { - if (!this.currentDraggedTask) { return } - const taskOrTaskListEl = this._getParentTaskOrTaskListEl(ev.target) - if (!taskOrTaskListEl) { return } - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/drop_event says we should preventDefault - ev.preventDefault() - - // Are we on the top or bottom part of the taskEl? - // Note: for task list, we always add the task in the task list, so no need to test here. - const topHalf = this._isATaskEl(taskOrTaskListEl) ? this._isOnTopHalf(ev, taskOrTaskListEl) : false - taskOrTaskListEl.classList.add(topHalf ? 'livechat-drag-top-half' : 'livechat-drag-bottom-half') - taskOrTaskListEl.classList.remove(topHalf ? 'livechat-drag-bottom-half' : 'livechat-drag-top-half') - } - - _handleDragLeave (ev) { - if (!this.currentDraggedTask) { return } - const taskOrTaskListEl = this._getParentTaskOrTaskListEl(ev.target) - if (!taskOrTaskListEl) { return } - taskOrTaskListEl.classList.remove('livechat-drag-bottom-half', 'livechat-drag-top-half') - } - - _handleDragEnd (_ev) { - this.currentDraggedTask = null - this._resetDropOver() - } - - _handleDrop (_ev) { - if (!this.currentDraggedTask) { return } - - const droppedOnEl = document.querySelector('.livechat-drag-bottom-half, .livechat-drag-top-half') - const droppedOntaskOrTaskListEl = this._getParentTaskOrTaskListEl(droppedOnEl) - if (!droppedOntaskOrTaskListEl) { return } - + _dropDone (draggedEl, droppedOnEl, onTopHalf) { + super._dropDone(...arguments) console.log('[livechat task drag&drop] Task dropped...') - const task = this.currentDraggedTask.model + const task = draggedEl.model let newOrder, targetTasklist - if (this.isATaskListEl(droppedOntaskOrTaskListEl)) { + if (this.isATaskListEl(droppedOnEl)) { // We dropped on a task list, we must add as first entry. newOrder = 0 - targetTasklist = droppedOntaskOrTaskListEl.model + targetTasklist = droppedOnEl.model if (task.get('list') !== targetTasklist.get('id')) { console.log('[livechat task drag&drop] Changing task list...') task.set('list', targetTasklist.get('id')) @@ -185,9 +101,9 @@ export default class MUCTaskListsView extends CustomElement { console.log('[livechat task drag&drop] Task dropped on tasklist, but already first item, nothing to do') return } - } else if (this._isATaskEl(droppedOntaskOrTaskListEl)) { + } else if (this.isATaskEl(droppedOnEl)) { // We dropped on a task, we must get its order (+1 if !onTopHalf) - const droppedOnTask = droppedOntaskOrTaskListEl.model + const droppedOnTask = droppedOnEl.model if (task === droppedOnTask) { // But of course, if dropped on itself there is nothing to do. console.log('[livechat task drag&drop] Task dropped on itself, nothing to do') @@ -199,9 +115,8 @@ export default class MUCTaskListsView extends CustomElement { task.set('list', droppedOnTask.get('list')) } - const topHalf = droppedOnEl.classList.contains('livechat-drag-top-half') newOrder = droppedOnTask.get('order') ?? 0 - if (!topHalf) { newOrder = Math.max(0, newOrder + 1) } + if (!onTopHalf) { newOrder = Math.max(0, newOrder + 1) } if (typeof newOrder !== 'number' || isNaN(newOrder)) { console.error( @@ -217,45 +132,7 @@ export default class MUCTaskListsView extends CustomElement { return } - if (typeof newOrder !== 'number' || isNaN(newOrder)) { - console.error('[livechat task drag&drop] Computed new order is not a number, aborting.') - return - } - console.log('[livechat task drag&drop] Task new order will be ' + newOrder) - - console.log('[livechat task drag&drop] Reordering tasks...') - let currentOrder = newOrder + 1 - for (const t of targetTasklist.getTasks()) { - if (t === task) { - console.log('[livechat task drag&drop] Skipping the currently moved task') - continue - } - - let order = t.get('order') ?? 0 - if (typeof order !== 'number' || isNaN(order)) { - console.error('[livechat task drag&drop] Found a task with an invalid order, fixing it.') - order = currentOrder // this will cause the code bellow to increment task order - } - if (order < newOrder) { continue } - - currentOrder++ - if (order > currentOrder) { - console.log( - `Task "${t.get('name')}" as already on order greater than ${currentOrder.toString()}, stoping.` - ) - break - } - - console.log(`Changing order of task "${t.get('name')}" to ${currentOrder}`) - t.set('order', currentOrder) - t.saveItem() // TODO: handle errors? - } - - console.log('[livechat task drag&drop] Setting new order on the moved task') - task.set('order', newOrder) - task.saveItem() // TODO: handle errors? - - this._resetDropOver() + this._saveOrders(targetTasklist.getTasks(), task, newOrder) } } diff --git a/conversejs/custom/plugins/tasks/styles/muc-task-drag.scss b/conversejs/custom/plugins/tasks/styles/muc-task-drag.scss deleted file mode 100644 index 60904a3d..00000000 --- a/conversejs/custom/plugins/tasks/styles/muc-task-drag.scss +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 John Livingston - * - * SPDX-License-Identifier: AGPL-3.0-only - */ - -.conversejs { - livechat-converse-muc-task { - &.livechat-drag-bottom-half .task-line { - border-bottom: 4px solid blue; - } - - &.livechat-drag-top-half .task-line { - border-top: 4px solid blue; - } - } - - livechat-converse-muc-task-list { - &.livechat-drag-bottom-half .task-list-line { - border-bottom: 4px solid blue; - } - - &.livechat-drag-top-half .task-list-line { - border-top: 4px solid blue; - } - } -} diff --git a/conversejs/custom/plugins/tasks/templates/muc-task-list.js b/conversejs/custom/plugins/tasks/templates/muc-task-list.js index d226211f..cc93ea81 100644 --- a/conversejs/custom/plugins/tasks/templates/muc-task-list.js +++ b/conversejs/custom/plugins/tasks/templates/muc-task-list.js @@ -16,7 +16,7 @@ export default function tplMucTaskList (el, tasklist) { // eslint-disable-next-line no-undef const i18nTaskListName = __(LOC_task_list_name) return html` -
    +
    ${el.collapsed ? html` ` } +
    +
    + ` +} + +function isFiltered (el, note) { + const filterOccupant = el.occupant_filter + if (!filterOccupant) { return false } + + const noteOccupant = note.getAboutOccupant() + // there is an occupant filter, so if current note has no associated occupant, we can pass. + if (!noteOccupant) { return true } + + if (noteOccupant === filterOccupant) { + // Yes! + return false + } + + // We will also test for nickname, so that we can found anonymous users + // (they can have multiple associated occupants) + if (filterOccupant.get('nick') && filterOccupant.get('nick') === noteOccupant.get('nick')) { + return false + } + + return true +} + export default function tplMucNotes (el, notes) { if (!notes) { // if user loses rights return html`` // FIXME: add a message like "you dont have access"? @@ -14,11 +65,17 @@ export default function tplMucNotes (el, notes) { return html` ${ - el.create_note_opened ? tplMucCreateNoteForm(el, el.create_note_for_occupant) : tplCreateButton(el) + el.create_note_opened ? tplMucCreateNoteForm(el, el.create_note_about_occupant) : tplCreateButton(el) } + ${tplFilters(el)} ${ repeat(notes, (note) => note.get('id'), (note) => { - return html`` + return isFiltered(el, note) + ? '' + : html`` }) }` } diff --git a/conversejs/custom/plugins/notes/utils.js b/conversejs/custom/plugins/notes/utils.js index 25f60cd4..2cd4bf0e 100644 --- a/conversejs/custom/plugins/notes/utils.js +++ b/conversejs/custom/plugins/notes/utils.js @@ -51,29 +51,30 @@ export function getMessageActionButtons (messageActionsEl, buttons) { if (messageModel.occupant) { // eslint-disable-next-line no-undef const i18nCreate = __(LOC_moderator_note_create_for_participant) + // eslint-disable-next-line no-undef + const i18nSearch = __(LOC_moderator_note_search_for_participant) buttons.push({ i18n_text: i18nCreate, handler: async (ev) => { ev.preventDefault() - const appElement = document.querySelector('livechat-converse-muc-note-app') - if (!appElement) { - throw new Error('Cant find Note App Element') - } - await appElement.showApp() - await appElement.updateComplete // waiting for the app to be open - - const notesElement = appElement.querySelector('livechat-converse-muc-notes') - if (!notesElement) { - throw new Error('Cant find Notes Element') - } - await notesElement.updateComplete - notesElement.openCreateNoteForm(undefined, messageModel.occupant) + await api.livechat_notes.openCreateNoteForm(messageModel.occupant) }, button_class: '', icon_class: 'fa fa-note-sticky', name: 'muc-note-create-for-occupant' }) + + buttons.push({ + i18n_text: i18nSearch, + handler: async (ev) => { + ev.preventDefault() + await api.livechat_notes.searchNotesAbout(messageModel.occupant) + }, + button_class: '', + icon_class: 'fa fa-magnifying-glass', + name: 'muc-note-search-for-occupant' + }) } return buttons diff --git a/conversejs/custom/shared/components/font-awesome.js b/conversejs/custom/shared/components/font-awesome.js index d3ab7ede..18ad7348 100644 --- a/conversejs/custom/shared/components/font-awesome.js +++ b/conversejs/custom/shared/components/font-awesome.js @@ -33,6 +33,11 @@ export default () => { + + + + + ` } diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index 70307fce..5b62bc80 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -56,7 +56,9 @@ const locKeys = [ 'moderator_note_description', 'moderator_note_delete', 'moderator_note_delete_confirm', - 'moderator_note_create_for_participant' + 'moderator_note_create_for_participant', + 'moderator_note_search_for_participant', + 'moderator_note_filters' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index ab5b949c..9b76338d 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -600,4 +600,6 @@ moderator_note_create: 'Create a new note' moderator_note_description: 'Description' moderator_note_delete: 'Delete note' moderator_note_delete_confirm: 'Are you sure you want to delete this note?' -moderator_note_create_for_participant: 'Create a new note for this participant' +moderator_note_create_for_participant: 'Create a new note about this participant' +moderator_note_search_for_participant: 'Search notes about this participant' +moderator_note_filters: 'Search filters' From 70f702f78ecde5b49b24143ea15444243fe1325c Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 17:45:51 +0200 Subject: [PATCH 056/136] Fix: clicking on the current user nickname in message history was failing to open the profile modal. --- CHANGELOG.md | 1 + conversejs/lib/plugins/livechat-specific.ts | 2 ++ .../lib/plugins/livechat-specific/profile.ts | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 conversejs/lib/plugins/livechat-specific/profile.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 017e1625..54cd5bbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * Translation updates: Crotian, Japanese. * Updated mod_muc_moderation to upstream. * Fix new task ordering. +* Fix: clicking on the current user nickname in message history was failing to open the profile modal. ## 10.3.3 diff --git a/conversejs/lib/plugins/livechat-specific.ts b/conversejs/lib/plugins/livechat-specific.ts index 494f88bb..6313564d 100644 --- a/conversejs/lib/plugins/livechat-specific.ts +++ b/conversejs/lib/plugins/livechat-specific.ts @@ -8,6 +8,7 @@ import { initReconnectionStuff } from './livechat-specific/reconnection' import { chatRoomOverrides } from './livechat-specific/chatroom' import { chatRoomMessageOverrides } from './livechat-specific/chatroom-message' import { customizeMessageAction } from './livechat-specific/message-action' +import { customizeProfileModal } from './livechat-specific/profile' export const livechatSpecificsPlugin = { dependencies: ['converse-muc', 'converse-muc-views'], @@ -24,6 +25,7 @@ export const livechatSpecificsPlugin = { customizeHeading(this) customizeToolbar(this) customizeMessageAction(this) + customizeProfileModal(this) _converse.api.listen.on('chatRoomViewInitialized', function (this: any, _model: any): void { // Remove the spinner if present... diff --git a/conversejs/lib/plugins/livechat-specific/profile.ts b/conversejs/lib/plugins/livechat-specific/profile.ts new file mode 100644 index 00000000..fbb60bd6 --- /dev/null +++ b/conversejs/lib/plugins/livechat-specific/profile.ts @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +/** + * Livechat Converse does not include plugins/profile, + * so the default profile modal is broken. + * Moreover this modal includes some features that we do not want (password change, ...). + * So we simply define the converse-profile-modal to be converse-muc-occupant-modal! + * @param plugin The plugin object + */ +export function customizeProfileModal (plugin: any): void { + const _converse = plugin._converse + const OccupantModal = _converse.api.elements.registry['converse-muc-occupant-modal'] + if (!OccupantModal) { return } + class ProfileModal extends OccupantModal { + initialize (): any { + // We just need to change the modal for the occupant: + if (this.model?.getOccupant) { + this.model = this.model.getOccupant() + } + return super.initialize() + } + } + _converse.api.elements.define('converse-profile-modal', ProfileModal) +} From 48763e617310780760e9de6e0b495fc69994dcdb Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 21:55:20 +0200 Subject: [PATCH 057/136] Moderator notes WIP (#144): Displaying the nickname at time of note creation if it changed. --- CHANGELOG.md | 2 +- .../plugins/notes/components/muc-note-occupant-view.js | 3 ++- .../custom/plugins/notes/templates/muc-note-app.js | 2 +- .../custom/plugins/notes/templates/muc-note-occupant.js | 9 ++++++++- conversejs/custom/plugins/notes/templates/muc-note.js | 2 ++ conversejs/loc.keys.js | 3 ++- languages/en.yml | 1 + 7 files changed, 17 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54cd5bbc..48143641 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. * #146: copy message button for moderators. * #137: option to hide moderator name who made actions (kick, ban, message moderation, ...). -* #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/notes/). +* #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/moderator_notes/). ### Minor changes and fixes diff --git a/conversejs/custom/plugins/notes/components/muc-note-occupant-view.js b/conversejs/custom/plugins/notes/components/muc-note-occupant-view.js index 51ed79ae..f7121f5f 100644 --- a/conversejs/custom/plugins/notes/components/muc-note-occupant-view.js +++ b/conversejs/custom/plugins/notes/components/muc-note-occupant-view.js @@ -12,6 +12,7 @@ export default class MUCNoteOccupantView extends CustomElement { static get properties () { return { model: { type: Object, attribute: true }, + note: { type: Object, attribute: true }, // optional associated note full_display: { type: Boolean, attribute: true } } } @@ -21,7 +22,7 @@ export default class MUCNoteOccupantView extends CustomElement { } render () { - return tplMucNoteOccupant(this, this.model) + return tplMucNoteOccupant(this, this.model, this.note) } } diff --git a/conversejs/custom/plugins/notes/templates/muc-note-app.js b/conversejs/custom/plugins/notes/templates/muc-note-app.js index 24c8766d..7ea4b14a 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note-app.js +++ b/conversejs/custom/plugins/notes/templates/muc-note-app.js @@ -26,7 +26,7 @@ export function tplMUCNoteApp (el, mucModel) { // eslint-disable-next-line no-undef const i18nHelp = __(LOC_online_help) const helpUrl = converseLocalizedHelpUrl({ - page: 'documentation/user/streamers/notes' + page: 'documentation/user/streamers/moderator_notes' }) return tplMUCApp( diff --git a/conversejs/custom/plugins/notes/templates/muc-note-occupant.js b/conversejs/custom/plugins/notes/templates/muc-note-occupant.js index 6de7e36c..72c50ff3 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note-occupant.js +++ b/conversejs/custom/plugins/notes/templates/muc-note-occupant.js @@ -7,7 +7,7 @@ import { api } from '@converse/headless' import { getAuthorStyle } from '../../../../src/utils/color.js' import { __ } from 'i18n' -export function tplMucNoteOccupant (el, occupant) { +export function tplMucNoteOccupant (el, occupant, note) { const authorStyle = getAuthorStyle(occupant) const jid = occupant.get('jid') const occupantId = occupant.get('occupant_id') @@ -28,6 +28,13 @@ export function tplMucNoteOccupant (el, occupant) { ${ el.full_display ? html`` diff --git a/conversejs/custom/plugins/notes/templates/muc-note.js b/conversejs/custom/plugins/notes/templates/muc-note.js index dc8df7c5..92c85ee0 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note.js +++ b/conversejs/custom/plugins/notes/templates/muc-note.js @@ -24,6 +24,7 @@ export function tplMucNote (el, note) { ` : '' } @@ -60,6 +61,7 @@ export function tplMucNote (el, note) { ` : '' diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index 5b62bc80..f5290ffd 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -58,7 +58,8 @@ const locKeys = [ 'moderator_note_delete_confirm', 'moderator_note_create_for_participant', 'moderator_note_search_for_participant', - 'moderator_note_filters' + 'moderator_note_filters', + 'moderator_note_original_nick' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index 9b76338d..ba9b46e1 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -603,3 +603,4 @@ moderator_note_delete_confirm: 'Are you sure you want to delete this note?' moderator_note_create_for_participant: 'Create a new note about this participant' moderator_note_search_for_participant: 'Search notes about this participant' moderator_note_filters: 'Search filters' +moderator_note_original_nick: 'Nickname of the participant at the time of the note creation' From bb2aca71c11dfe84b76b7e4e5aa86a25164f9c6c Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 22:32:57 +0200 Subject: [PATCH 058/136] Moderator notes WIP (#144): * Fix notes occupants when unknown * notes.getAboutOccupant result cache --- conversejs/custom/plugins/notes/note.js | 53 ++++++++++++++++++++----- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/conversejs/custom/plugins/notes/note.js b/conversejs/custom/plugins/notes/note.js index d22b381f..482ecca1 100644 --- a/conversejs/custom/plugins/notes/note.js +++ b/conversejs/custom/plugins/notes/note.js @@ -12,6 +12,8 @@ import { Model } from '@converse/skeletor/src/model.js' */ class ChatRoomNote extends Model { idAttribute = 'id' + _aboutOccupantCache = null + _aboutOccupantCacheFor = null async saveItem () { console.log('Saving note ' + this.get('id') + '...') @@ -27,22 +29,51 @@ class ChatRoomNote extends Model { const occupants = this.collection.chatroom?.occupants if (!occupants?.findOccupant) { return undefined } - if (this.get('about_occupant_id')) { - const o = occupants.findOccupant({ occupant_id: this.get('about_occupant_id') }) - if (o) { return o } - } + const nick = this.get('about_nick') + const jid = this.get('about_jid') + const occupantId = this.get('about_occupant_id') - if (!this.get('about_nick') && !this.get('about_jid')) { + if (!nick && !jid && !occupantId) { + this._aboutOccupantCache = null + this._aboutOccupantCacheFor = null return undefined } - const o = occupants.findOccupant({ - nick: this.get('about_nick'), - jid: this.get('about_jid') - }) - if (o) { return o } + // Keeping some cache, to avoid intensive search on each rendering. + const cacheKey = `${occupantId ?? ''} ${jid ?? ''} ${nick ?? ''}` + if (this._aboutOccupantCacheFor === cacheKey && this._aboutOccupantCache) { + return this._aboutOccupantCache + } - return undefined + this._aboutOccupantCacheFor = cacheKey + + if (occupantId) { + const o = occupants.findOccupant({ occupant_id: occupantId }) + if (o) { + this._aboutOccupantCache = o + return o + } + } + + if (jid) { + const o = occupants.findOccupant({ + jid, + nick + }) + if (o) { + this._aboutOccupantCache = o + return o + } + } + + // If we don't find it, maybe it is a user that has spoken a long time ago (or never spoked). + // In such case, we must create a dummy occupant: + this._aboutOccupantCache = occupants.create({ + nick, + occupant_id: occupantId, + jid + }) + return this._aboutOccupantCache } } From 3004105b5eeea0932a99176f0cfb4524f0b3cdf7 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 22:46:53 +0200 Subject: [PATCH 059/136] Moderator notes WIP (#144): * user documentation --- .../user/streamers/moderation_notes.md | 90 ++++++++++++++++++ .../en/images/moderation_notes_filters.png | Bin 0 -> 111749 bytes .../moderation_notes_open_app_fullpage.png | Bin 0 -> 100176 bytes .../moderation_notes_open_app_video.png | Bin 0 -> 129484 bytes .../images/moderator_notes_app_fullpage_1.png | Bin 0 -> 181510 bytes .../en/images/moderator_notes_app_video_1.png | Bin 0 -> 133102 bytes 6 files changed, 90 insertions(+) create mode 100644 support/documentation/content/en/documentation/user/streamers/moderation_notes.md create mode 100644 support/documentation/content/en/images/moderation_notes_filters.png create mode 100644 support/documentation/content/en/images/moderation_notes_open_app_fullpage.png create mode 100644 support/documentation/content/en/images/moderation_notes_open_app_video.png create mode 100644 support/documentation/content/en/images/moderator_notes_app_fullpage_1.png create mode 100644 support/documentation/content/en/images/moderator_notes_app_video_1.png diff --git a/support/documentation/content/en/documentation/user/streamers/moderation_notes.md b/support/documentation/content/en/documentation/user/streamers/moderation_notes.md new file mode 100644 index 00000000..00ef2acb --- /dev/null +++ b/support/documentation/content/en/documentation/user/streamers/moderation_notes.md @@ -0,0 +1,90 @@ +--- +title: "Moderation notes" +description: "Plugin peertube-plugin-livechat moderation notes" +weight: 355 +chapter: false +--- + +{{% notice info %}} +This feature comes with the livechat plugin version 11.0.0. +{{% /notice %}} + +## Introduction + +The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. +Every room's admins have access to these notes, so they can edit them collaboratively. + +You can for example use this Application to: + +* share some notes between moderators +* take notes about participants that were kicked or caused troubles +* ... + +## Using the Moderator Notes Application + +### Opening the Moderator Notes Application + +To open the Moderator Notes Application, there is a "{{% livechat_label "moderator_notes" %}}" button in the top chat menu: + +![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px) + +![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px) + +Clicking this button will toggle the Application display: + +![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px) + +![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px) + +{{% notice tip %}} +To have more space and better readability, open the chat in full-page mode. +{{% /notice %}} + +### Access rights + +Every room's admins have access to this Application (read and write access). + +When you promote someone as room admin or owner, they gets instant access to this Application. +When you remove admin or owner rights to someone, they instantly lose access to this Application. + +### Notes + +#### Create/Edit Notes + +You can use the plus button on the top to create a new note. +You can also edit existing notes using the edit button, or delate any note. + +{{% notice tip %}} +All modification are instantly visible in all your browser tabs, and for all room's admins. +{{% /notice %}} + +You can create a note associated to a participant in several ways: + +* using the "{{% livechat_label moderator_note_create_for_participant %}}" action in the dropdown menu besides chat messages + +When a note is associated to a participant, you will see their nickname and avatar on the top of the note. + +#### Notes filtering + +You can filter notes to find all notes related to a given participant in several ways: + +* click on the "{{% livechat_label moderator_note_search_for_participant %}}" button that is available on notes to find all notes related to the same participant +* click on the "{{% livechat_label moderator_note_search_for_participant %}}" button in the dropdown menu besides chat messages + +You can remove the filter by clicking on the close button. + +![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px) + +When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname: + +* if the current nickname is different than the nickname when you created the note, the original nickname will be shown +* you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant +* you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant + +The search result will also include all notes related to participants who had the same nickname. +So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). +You can differenciate them by comparing JID and occupant-id. + +#### Sorting notes + +You can sort notes simply using drag & drop. diff --git a/support/documentation/content/en/images/moderation_notes_filters.png b/support/documentation/content/en/images/moderation_notes_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..1eed5de4d1d91018ed58c58e5a90a3af484d1f92 GIT binary patch literal 111749 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 z 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 z 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 A?EnA( literal 0 HcmV?d00001 diff --git a/support/documentation/content/en/images/moderation_notes_open_app_fullpage.png b/support/documentation/content/en/images/moderation_notes_open_app_fullpage.png new file mode 100644 index 0000000000000000000000000000000000000000..4a461645826883a1d2852a3d48e26b6e61a302b0 GIT binary patch literal 100176 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

    DuA5=%kJL4~G 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

    0XCeaWC^gZk9*V-1XxthHwJV;S3_civ+^y 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 literal 0 HcmV?d00001 diff --git a/support/documentation/content/en/images/moderator_notes_app_fullpage_1.png b/support/documentation/content/en/images/moderator_notes_app_fullpage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3f691d80847e1c889eb1d55b68b959036d07495c GIT binary patch literal 181510 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%0AK9_%cn=n)4dK3u&sm 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%0DHlw+}5pvhzD#N}(J;#VRIIsobPm5md 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 S!7BaKAL(iz*1D@{8~i^DE%5~a literal 0 HcmV?d00001 diff --git a/support/documentation/content/en/images/moderator_notes_app_video_1.png b/support/documentation/content/en/images/moderator_notes_app_video_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec9d5ad84fbe2e9f3740acb466ca04755c3687b GIT binary patch literal 133102 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]abSpgyeFsa(gGrHLzvlF2cWsN?SXK9&LUjbol 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 GVgC=q+0tkL literal 0 HcmV?d00001 From af2941f4e0c912462b8c42c6bd55c6ea1a7b3040 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 22:50:38 +0200 Subject: [PATCH 060/136] npm run doc:translate --- support/documentation/po/livechat.ar.po | 235 +++++++++++++-- support/documentation/po/livechat.ca.po | 235 +++++++++++++-- support/documentation/po/livechat.cs.po | 235 +++++++++++++-- support/documentation/po/livechat.de.po | 290 ++++++++++++++++--- support/documentation/po/livechat.el.po | 235 +++++++++++++-- support/documentation/po/livechat.en.pot | 268 +++++++++++++++-- support/documentation/po/livechat.eo.po | 235 +++++++++++++-- support/documentation/po/livechat.es.po | 235 +++++++++++++-- support/documentation/po/livechat.eu.po | 235 +++++++++++++-- support/documentation/po/livechat.fa.po | 235 +++++++++++++-- support/documentation/po/livechat.fi.po | 235 +++++++++++++-- support/documentation/po/livechat.fr.po | 270 +++++++++++++++-- support/documentation/po/livechat.gd.po | 235 +++++++++++++-- support/documentation/po/livechat.gl.po | 235 +++++++++++++-- support/documentation/po/livechat.hr.po | 246 ++++++++++++++-- support/documentation/po/livechat.hu.po | 235 +++++++++++++-- support/documentation/po/livechat.is.po | 235 +++++++++++++-- support/documentation/po/livechat.it.po | 235 +++++++++++++-- support/documentation/po/livechat.ja.po | 245 ++++++++++++++-- support/documentation/po/livechat.kab.po | 235 +++++++++++++-- support/documentation/po/livechat.nb.po | 235 +++++++++++++-- support/documentation/po/livechat.nl.po | 235 +++++++++++++-- support/documentation/po/livechat.nn.po | 235 +++++++++++++-- support/documentation/po/livechat.oc.po | 235 +++++++++++++-- support/documentation/po/livechat.pl.po | 235 +++++++++++++-- support/documentation/po/livechat.pt.po | 235 +++++++++++++-- support/documentation/po/livechat.ru.po | 235 +++++++++++++-- support/documentation/po/livechat.sq.po | 235 +++++++++++++-- support/documentation/po/livechat.sv.po | 235 +++++++++++++-- support/documentation/po/livechat.th.po | 235 +++++++++++++-- support/documentation/po/livechat.tok.po | 235 +++++++++++++-- support/documentation/po/livechat.tr.po | 233 +++++++++++++-- support/documentation/po/livechat.uk.po | 235 +++++++++++++-- support/documentation/po/livechat.vi.po | 235 +++++++++++++-- support/documentation/po/livechat.zh-Hans.po | 235 +++++++++++++-- support/documentation/po/livechat.zh-Hant.po | 235 +++++++++++++-- 36 files changed, 7749 insertions(+), 853 deletions(-) diff --git a/support/documentation/po/livechat.ar.po b/support/documentation/po/livechat.ar.po index a6bbbd51..7c8f25f0 100644 --- a/support/documentation/po/livechat.ar.po +++ b/support/documentation/po/livechat.ar.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-01-17 11:38+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Arabic \n" @@ -3143,6 +3143,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3345,6 +3346,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3390,6 +3392,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3469,13 +3680,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3699,11 +3903,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3746,11 +3945,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3787,11 +3981,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.ca.po b/support/documentation/po/livechat.ca.po index f0fa2a4f..92cd21b1 100644 --- a/support/documentation/po/livechat.ca.po +++ b/support/documentation/po/livechat.ca.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.cs.po b/support/documentation/po/livechat.cs.po index 940f71b1..66f62056 100644 --- a/support/documentation/po/livechat.cs.po +++ b/support/documentation/po/livechat.cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index 4c92c45f..d4dc9b6b 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -7,12 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-07-30 06:49+0000\n" -"Last-Translator: Victor Hampel " -"\n" -"Language-Team: German \n" +"Last-Translator: Victor Hampel \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3216,6 +3214,7 @@ msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.3.0 verfügbar sei #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3420,26 +3419,19 @@ msgstr "Sie können Benutzer zu Moderatoren befördern, wenn Sie Hilfe benötige #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." -msgstr "" -"Diese Funktion wird mit dem Livechatplugin Version 11.0.0 verfügbar sein." +msgstr "Diese Funktion wird mit dem Livechatplugin Version 11.0.0 verfügbar sein." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" -msgstr "" -"Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, dass " -"bekannt wird, wer Teilnehmer bannt/verweist/....\"" +msgstr "Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, dass bekannt wird, wer Teilnehmer bannt/verweist/....\"" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." -msgstr "" -"Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das " -"[Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers)" -", öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine " -"Checkbox \"{{% livechat_label " -"livechat_configuration_channel_anonymize_moderation_label %}}\"." +msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\"." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3473,6 +3465,246 @@ msgstr "Sie können alle bestehenden Chaträume auflisten: in den Einstellungen msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "Von dort aus kannst du dich auch als Moderator des Raums bewerben, indem du die Schaltfläche \"{{% livechat_label promote %}}\" auf der rechten Seite benutzt." +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Plugin peertube-plugin-livechat moderation delay" +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "Plugin peertube-plugin-livechat Moderationsverzögerung" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Moderation" +msgid "Moderation notes" +msgstr "Moderation" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "The livechat plugin includes a Task Application: a kind of \"to-do list\" feature where you can create task lists and add tasks to them. Every room's admins have access to these tasks, so you can edit them collaboratively." +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "Das Livechat Plugin enthält eine Aufgabenanwendung: eine Art \"To-Do-Liste\", mit der Sie Aufgabenlisten erstellen und Aufgaben zu ihnen hinzufügen können. Die Administratoren eines jeden Raums haben Zugriff auf diese Aufgaben, sodass Sie sie gemeinsam bearbeiten können." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can for example use the Task Application to:" +msgid "You can for example use this Application to:" +msgstr "Sie können die Aufgabenanwendung zum Beispiel verwenden, um:" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "..." + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Using the Task Application" +msgid "Using the Moderator Notes Application" +msgstr "Aufgabenanwendung nutzen" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Opening the Task Application" +msgid "Opening the Moderator Notes Application" +msgstr "Aufgabenanwendung öffnen" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "To open the Task Application, there is a \"{{% livechat_label \"tasks\" %}}\" button in the top chat menu:" +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "Um die Aufgabenanwendung zu öffnen, gibt es eine Schaltfläche \"{{% livechat_label \"Aufgaben\" %}}\" im oberen Chatmenü:" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "Clicking this button will toggle the Task Application display:" +msgid "Clicking this button will toggle the Application display:" +msgstr "Wenn Sie auf diese Schaltfläche klicken, wird die Anzeige der Aufgabenanwendung umgeschaltet:" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat im neuen Fenster." + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "Zugriffsrechte" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "Every room's admins have access to the Task Application (read and write access)." +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "Die Administratoren eines jeden Raums haben Zugriff auf die Aufgabenanwendung (Lese- und Schreibzugriff)." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "When you promote someone as room admin or owner, they gets instant access to the Task Application. When you remove admin or owner rights to someone, they instantly lose access to the Task Application." +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält dieser sofortigen Zugriff auf die Aufgabenanwendung. Wenn Sie jemandem die Admin- oder Eigentümerrechte entziehen, verliert er sofort den Zugang zur Aufgabenanwendung." + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "Hinweise" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Create tasks" +msgid "Create/Edit Notes" +msgstr "Aufgaben erstellen" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can use the form at the bottom to create a new task list. You can also edit existing task lists using the edit button, or delete any task list. Deleting a task list will also delete all its tasks." +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "Mit dem Formular am unteren Rand können Sie eine neue Aufgabenliste erstellen. Sie können auch bestehende Aufgabenlisten über die Schaltfläche bearbeiten oder eine Aufgabenliste löschen. Wenn Sie eine Aufgabenliste löschen, werden auch alle dazugehörigen Aufgaben gelöscht." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "Alle Änderungen sind sofort in allen Registerkarten Ihres Browsers und für alle Raumadministratoren sichtbar." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Timers configuration](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "[Konfiguration der Timer](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can sort tasks, or move tasks from one list to another, simply using drag & drop." +msgid "You can sort notes simply using drag & drop." +msgstr "Sie können Aufgaben sortieren oder von einer Liste in eine andere verschieben, indem Sie sie einfach per Drag & Drop ziehen." + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3552,13 +3784,6 @@ msgstr "Sobald Sie das Formular abschicken, wird die Umfrage sofort gestartet." msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "Wenn es eine vorherige, noch nicht beendete Umfrage gab, wird diese beendet und ihr Ergebnis angezeigt." -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "Zugriffsrechte" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3782,11 +4007,6 @@ msgstr "eine Liste der Themen vorzubereiten, die Sie während Ihres Livestreams msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "Fragen Ihrer Zuschauer markieren, damit Sie später darauf zurückkommen können, ohne zu vergessen, sie zu beantworten" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "..." - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3829,11 +4049,6 @@ msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.p msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat im neuen Fenster." - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3870,11 +4085,6 @@ msgstr "Die Aufgabenlisten sind alphabetisch sortiert." msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "![Aufgabenlisten](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "Alle Änderungen sind sofort in allen Registerkarten Ihres Browsers und für alle Raumadministratoren sichtbar." - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -4634,10 +4844,6 @@ msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind u #~ msgid "These dependencies were tested on a Debian Bullseye. If there is some dependencies issues on your UNIX/Linux system, please open an issue on Github." #~ msgstr "Diese Abhängigkeiten wurden auf dem Betriebssystem Debian Bullseye getestet. Wenn es Probleme mit den Abhängigkeiten auf Ihrem UNIX/Linux-System gibt, öffnen Sie bitte einen Eintrag auf Github." -#, no-wrap -#~ msgid "Notes" -#~ msgstr "Hinweise" - #, fuzzy #~ msgid "| | | |---|---| | ![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px) | ![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px) |" #~ msgstr "" diff --git a/support/documentation/po/livechat.el.po b/support/documentation/po/livechat.el.po index 84c9598d..c321aab8 100644 --- a/support/documentation/po/livechat.el.po +++ b/support/documentation/po/livechat.el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.en.pot b/support/documentation/po/livechat.en.pot index acba7193..550338c7 100644 --- a/support/documentation/po/livechat.en.pot +++ b/support/documentation/po/livechat.en.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3535,6 +3535,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3766,6 +3767,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, markdown-text msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3818,6 +3820,245 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, markdown-text +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, markdown-text +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, markdown-text, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, markdown-text +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3908,13 +4149,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, markdown-text, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md #, markdown-text @@ -4174,12 +4408,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, markdown-text -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, markdown-text, no-wrap @@ -4228,12 +4456,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, markdown-text -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md #, markdown-text @@ -4276,12 +4498,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, markdown-text -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, markdown-text, no-wrap diff --git a/support/documentation/po/livechat.eo.po b/support/documentation/po/livechat.eo.po index 6f0bd8eb..872ddb7b 100644 --- a/support/documentation/po/livechat.eo.po +++ b/support/documentation/po/livechat.eo.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.es.po b/support/documentation/po/livechat.es.po index b0ffaa78..57a4bd72 100644 --- a/support/documentation/po/livechat.es.po +++ b/support/documentation/po/livechat.es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-04-16 21:38+0000\n" "Last-Translator: rnek0 \n" "Language-Team: Spanish \n" @@ -3174,6 +3174,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3376,6 +3377,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3421,6 +3423,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3500,13 +3711,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3730,11 +3934,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3777,11 +3976,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3818,11 +4012,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.eu.po b/support/documentation/po/livechat.eu.po index 2d661947..9af8795b 100644 --- a/support/documentation/po/livechat.eu.po +++ b/support/documentation/po/livechat.eu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.fa.po b/support/documentation/po/livechat.fa.po index 8c304d4e..ec037c4c 100644 --- a/support/documentation/po/livechat.fa.po +++ b/support/documentation/po/livechat.fa.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.fi.po b/support/documentation/po/livechat.fi.po index 3bf1fe55..bf181d9e 100644 --- a/support/documentation/po/livechat.fi.po +++ b/support/documentation/po/livechat.fi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Finnish \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index 01b40e1d..50cdf744 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-07-18 15:05+0000\n" "Last-Translator: John Livingston \n" "Language-Team: French \n" @@ -3232,6 +3232,7 @@ msgstr "Cette fonctionnalité arrive avec le plugin livechat version 10.3.0." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3436,6 +3437,7 @@ msgstr "Vous pouvez promouvoir des utilisateur⋅rices en tant que modérateur #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, fuzzy #| msgid "This feature comes with the livechat plugin version 10.0.0." msgid "This feature comes with the livechat plugin version 11.0.0." @@ -3485,6 +3487,246 @@ msgstr "Vous pouvez lister toutes les salles de discussion existantes : dans l' msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "De là, vous pouvez également vous promouvoir en tant que modérateur⋅rice de salon en utilisant le bouton \"{{% livechat_label promote %}}\" sur la droite." +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Plugin peertube-plugin-livechat moderation delay" +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "Plugin peertube-plugin-livechat délai de modération" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Moderation" +msgid "Moderation notes" +msgstr "Modération" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "The livechat plugin includes a Task Application: a kind of \"to-do list\" feature where you can create task lists and add tasks to them. Every room's admins have access to these tasks, so you can edit them collaboratively." +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "Le plugin livechat comprend une Application de Tâches : une sorte de \"liste de choses à faire\" où vous pouvez créer des listes de tâches et y ajouter des tâches. Les administrateur⋅rices de chaque salon de discussion ont accès à ces tâches, ce qui vous permet de les modifier de manière collaborative." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can for example use the Task Application to:" +msgid "You can for example use this Application to:" +msgstr "Vous pouvez par exemple utiliser l'Application de Tâches pour :" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "..." + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Using the Task Application" +msgid "Using the Moderator Notes Application" +msgstr "Utilisation de l'Application Tâches" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Opening the Task Application" +msgid "Opening the Moderator Notes Application" +msgstr "Ouverture de l'Application Tâche" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "To open the Task Application, there is a \"{{% livechat_label \"tasks\" %}}\" button in the top chat menu:" +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "Pour ouvrir l'Application Tâches, il y a un bouton «{{% livechat_label tasks %}}» dans le menu haut du tchat :" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "![Ouvrir l'Application Tâche](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "![Ouvrir l'Application Tâche](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "Clicking this button will toggle the Task Application display:" +msgid "Clicking this button will toggle the Application display:" +msgstr "En cliquant sur ce bouton, l'affichage de l'Application de Tâches bascule :" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "Pour avoir plus d'espace et une meilleure lisibilité, ouvrez le tchat en mode pleine page." + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "Droits d'accès" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "Every room's admins have access to the Task Application (read and write access)." +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "Les administrateur⋅rices de chaque salon de discussion ont accès à l'application de tâches (accès en lecture et en écriture)." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "When you promote someone as room admin or owner, they gets instant access to the Task Application. When you remove admin or owner rights to someone, they instantly lose access to the Task Application." +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "Lorsque vous promouvez quelqu'un en tant qu'administrateur⋅rice ou propriétaire d'un salon, iel obtient un accès instantané à l'Application Tâches. Lorsque vous retirez les droits d'admin ou de propriétaire à quelqu'un, iel perd instantanément l'accès à l'Application Tâches." + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "Remarques" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Create tasks" +msgid "Create/Edit Notes" +msgstr "Créer des tâches" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can use the form at the bottom to create a new task list. You can also edit existing task lists using the edit button, or delete any task list. Deleting a task list will also delete all its tasks." +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "Vous pouvez utiliser le formulaire en bas de page pour créer une nouvelle liste de tâches. Vous pouvez également modifier les listes de tâches existantes à l'aide du bouton \"modifier\" ou supprimer n'importe quelle liste de tâches. La suppression d'une liste de tâches entraîne la suppression de toutes les tâches qu'elle contient." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "Toutes les modifications sont instantanément visibles dans tous les onglets de votre navigateur, et pour tous les administrateur⋅rices du salon." + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Timers configuration](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "![Configuration des messages pré-enregistrés](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "You can sort tasks, or move tasks from one list to another, simply using drag & drop." +msgid "You can sort notes simply using drag & drop." +msgstr "Vous pouvez trier les tâches ou les déplacer d'une liste à l'autre par simple \"glisser-déposer\"." + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3564,13 +3806,6 @@ msgstr "Une fois que vous aurez soumis le formulaire, le sondage commencera inst msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "Si un sondage précédent était inachevé, il se terminera et son résultat sera affiché." -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "Droits d'accès" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3794,11 +4029,6 @@ msgstr "préparez une liste des thèmes que vous souhaitez aborder lors de votre msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "mettre en évidence les questions de vos spectateur⋅rices, afin que vous puissiez y revenir plus tard sans oublier d'y répondre" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "..." - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3841,11 +4071,6 @@ msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_video_1 msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "Pour avoir plus d'espace et une meilleure lisibilité, ouvrez le tchat en mode pleine page." - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3882,11 +4107,6 @@ msgstr "Les listes de tâches sont triées par ordre alphabétique." msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "![Listes de Tâches](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "Toutes les modifications sont instantanément visibles dans tous les onglets de votre navigateur, et pour tous les administrateur⋅rices du salon." - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -4647,10 +4867,6 @@ msgstr "Si vous êtes webdesigner ou avez une expertise en ConverseJS/Prosody/XM #~ msgid "If everything is fine in the diagnostic tools, but chat windows remains empty: it can be a Websocket issue. Since Peertube version 5.0.0, there are some additional configuration to do on the server side. Check with the instance administrators that they did not forgot to apply changes listes in the [Peertube v5.0.0 release notes](https://github.com/Chocobozzz/PeerTube/blob/master/CHANGELOG.md#v500)." #~ msgstr "Si tout est OK d'après l'outil de diagnostique, mais que la fenêtre de tchat reste vide : cela peut être un soucis Websocket. Depuis la version 5.0.0 de Peertube, il y a de la configuration supplémentaire à faire du côté du serveur. Vérifiez avec les administrateur⋅rices de votre instance s'iels n'ont pas oublié d'appliquer les changements listés dans les [notes de version 5.0.0 de Peertube](https://github.com/Chocobozzz/PeerTube/blob/master/CHANGELOG.md#v500)." -#, no-wrap -#~ msgid "Notes" -#~ msgstr "Remarques" - #, fuzzy #~ msgid "| | | |---|---| | ![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px) | ![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px) |" #~ msgstr "" diff --git a/support/documentation/po/livechat.gd.po b/support/documentation/po/livechat.gd.po index b28e51ec..4775bbf5 100644 --- a/support/documentation/po/livechat.gd.po +++ b/support/documentation/po/livechat.gd.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Gaelic \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.gl.po b/support/documentation/po/livechat.gl.po index d3f077fd..ef12fee1 100644 --- a/support/documentation/po/livechat.gl.po +++ b/support/documentation/po/livechat.gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index 791a2591..ebe8d540 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-07-19 17:45+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -3139,6 +3139,7 @@ msgstr "Ova je funkcija dostupna s dodatkom za chat uživo verzije 10.3.0." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3341,6 +3342,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, fuzzy #| msgid "This feature comes with the livechat plugin version 10.0.0." msgid "This feature comes with the livechat plugin version 11.0.0." @@ -3388,6 +3390,226 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +#| msgid "Moderation delay" +msgid "Moderation notes" +msgstr "Odgoda moderiranja" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "![Konfiguracija kanala / Odgoda moderiranja](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "![Konfiguracija kanala / Odgoda moderiranja](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3467,13 +3689,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3697,11 +3912,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3744,11 +3954,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3785,11 +3990,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.hu.po b/support/documentation/po/livechat.hu.po index e23e763c..704b6887 100644 --- a/support/documentation/po/livechat.hu.po +++ b/support/documentation/po/livechat.hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.is.po b/support/documentation/po/livechat.is.po index 3ba424f1..d261bcf0 100644 --- a/support/documentation/po/livechat.is.po +++ b/support/documentation/po/livechat.is.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Icelandic \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.it.po b/support/documentation/po/livechat.it.po index 6be26854..879fcd39 100644 --- a/support/documentation/po/livechat.it.po +++ b/support/documentation/po/livechat.it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 14:21+0000\n" "Last-Translator: John Livingston \n" "Language-Team: Italian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.ja.po b/support/documentation/po/livechat.ja.po index 2f65db09..90715672 100644 --- a/support/documentation/po/livechat.ja.po +++ b/support/documentation/po/livechat.ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2024-03-10 20:38+0000\n" "Last-Translator: \"T.S\" \n" "Language-Team: Japanese \n" @@ -3226,6 +3226,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3441,6 +3442,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3487,6 +3489,225 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "PeerTube ライブチャットプラグイン" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy, no-wrap +msgid "Moderation notes" +msgstr "ドキュメンテーション" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3568,13 +3789,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3810,11 +4024,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3865,11 +4074,6 @@ msgstr "![チャット画面のスクリーンショット](/peertube-plugin-liv msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3908,11 +4112,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.kab.po b/support/documentation/po/livechat.kab.po index 8c5a275e..24487e5e 100644 --- a/support/documentation/po/livechat.kab.po +++ b/support/documentation/po/livechat.kab.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.nb.po b/support/documentation/po/livechat.nb.po index 500a8c81..4e564769 100644 --- a/support/documentation/po/livechat.nb.po +++ b/support/documentation/po/livechat.nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Bokmål \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.nl.po b/support/documentation/po/livechat.nl.po index a1712a36..3063842d 100644 --- a/support/documentation/po/livechat.nl.po +++ b/support/documentation/po/livechat.nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dutch \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.nn.po b/support/documentation/po/livechat.nn.po index 1e5eafe8..d7bbf092 100644 --- a/support/documentation/po/livechat.nn.po +++ b/support/documentation/po/livechat.nn.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Nynorsk \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.oc.po b/support/documentation/po/livechat.oc.po index e97f6f0d..4a530bf2 100644 --- a/support/documentation/po/livechat.oc.po +++ b/support/documentation/po/livechat.oc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Occitan \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.pl.po b/support/documentation/po/livechat.pl.po index 38899580..78302b6b 100644 --- a/support/documentation/po/livechat.pl.po +++ b/support/documentation/po/livechat.pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Polish \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.pt.po b/support/documentation/po/livechat.pt.po index 1da91774..59096812 100644 --- a/support/documentation/po/livechat.pt.po +++ b/support/documentation/po/livechat.pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.ru.po b/support/documentation/po/livechat.ru.po index 6f6807ea..672afd78 100644 --- a/support/documentation/po/livechat.ru.po +++ b/support/documentation/po/livechat.ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Russian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.sq.po b/support/documentation/po/livechat.sq.po index e3489d69..8a154a3d 100644 --- a/support/documentation/po/livechat.sq.po +++ b/support/documentation/po/livechat.sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.sv.po b/support/documentation/po/livechat.sv.po index b0fdfb49..f560a779 100644 --- a/support/documentation/po/livechat.sv.po +++ b/support/documentation/po/livechat.sv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.th.po b/support/documentation/po/livechat.th.po index 7eff7bb9..4f7c18ee 100644 --- a/support/documentation/po/livechat.th.po +++ b/support/documentation/po/livechat.th.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.tok.po b/support/documentation/po/livechat.tok.po index a6d28ad8..5407bfeb 100644 --- a/support/documentation/po/livechat.tok.po +++ b/support/documentation/po/livechat.tok.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Toki Pona \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.tr.po b/support/documentation/po/livechat.tr.po index 22d46d8b..57f5e6a6 100644 --- a/support/documentation/po/livechat.tr.po +++ b/support/documentation/po/livechat.tr.po @@ -3116,6 +3116,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3318,6 +3319,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3363,6 +3365,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3442,13 +3653,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3672,11 +3876,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3719,11 +3918,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3760,11 +3954,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.uk.po b/support/documentation/po/livechat.uk.po index b6540437..9ad20536 100644 --- a/support/documentation/po/livechat.uk.po +++ b/support/documentation/po/livechat.uk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.vi.po b/support/documentation/po/livechat.vi.po index d8e1afe1..5c882971 100644 --- a/support/documentation/po/livechat.vi.po +++ b/support/documentation/po/livechat.vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hans.po b/support/documentation/po/livechat.zh-Hans.po index 3e358ace..0c5f2a01 100644 --- a/support/documentation/po/livechat.zh-Hans.po +++ b/support/documentation/po/livechat.zh-Hans.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hant.po b/support/documentation/po/livechat.zh-Hant.po index b4707c4d..8e2b4016 100644 --- a/support/documentation/po/livechat.zh-Hant.po +++ b/support/documentation/po/livechat.zh-Hant.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-29 14:58+0200\n" +"POT-Creation-Date: 2024-07-31 22:48+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Traditional) \n" @@ -3135,6 +3135,7 @@ msgstr "" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md #: support/documentation/content/en/documentation/user/streamers/tasks.md #: support/documentation/content/en/intro/_index.md @@ -3337,6 +3338,7 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." msgstr "" @@ -3382,6 +3384,215 @@ msgstr "" msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." msgstr "" +#. type: Yaml Front Matter Hash Value: description +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Plugin peertube-plugin-livechat moderation notes" +msgstr "" + +#. type: Yaml Front Matter Hash Value: title +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Moderation notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can for example use this Application to:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "share some notes between moderators" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "take notes about participants that were kicked or caused troubles" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "..." +msgstr "" + +#. type: Title ## +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Using the Moderator Notes Application" +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Opening the Moderator Notes Application" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Clicking this button will toggle the Application display:" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/polls.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, no-wrap +msgid "Access rights" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Every room's admins have access to this Application (read and write access)." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." +msgstr "" + +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes" +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Create/Edit Notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can create a note associated to a participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Notes filtering" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can remove the filter by clicking on the close button." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgstr "" + +#. type: Bullet: '* ' +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgstr "" + +#. type: Title #### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Sorting notes" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "You can sort notes simply using drag & drop." +msgstr "" + #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md #, no-wrap @@ -3461,13 +3672,6 @@ msgstr "" msgid "If there was a previous unfinished poll, it will end and its result will be shown." msgstr "" -#. type: Title ### -#: support/documentation/content/en/documentation/user/streamers/polls.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, no-wrap -msgid "Access rights" -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." @@ -3691,11 +3895,6 @@ msgstr "" msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" msgstr "" -#. type: Bullet: '* ' -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "..." -msgstr "" - #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap @@ -3738,11 +3937,6 @@ msgstr "" msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Every room's admins have access to the Task Application (read and write access)." @@ -3779,11 +3973,6 @@ msgstr "" msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md #, no-wrap From 0543a720f24f309c695b336539411e4700f5ed4c Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 23:00:29 +0200 Subject: [PATCH 061/136] Fix REUSE. --- conversejs/custom/plugins/notes/api.js | 4 ++++ conversejs/custom/shared/components/draggables/index.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/conversejs/custom/plugins/notes/api.js b/conversejs/custom/plugins/notes/api.js index 9836a64d..14d92260 100644 --- a/conversejs/custom/plugins/notes/api.js +++ b/conversejs/custom/plugins/notes/api.js @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + async function openNotes () { const appElement = document.querySelector('livechat-converse-muc-note-app') if (!appElement) { diff --git a/conversejs/custom/shared/components/draggables/index.js b/conversejs/custom/shared/components/draggables/index.js index b2ff8bec..2147a367 100644 --- a/conversejs/custom/shared/components/draggables/index.js +++ b/conversejs/custom/shared/components/draggables/index.js @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + import { CustomElement } from 'shared/components/element.js' import './styles/draggables.scss' From 7892fd6c039791b53003a526aa110678090f4de9 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 23:19:48 +0200 Subject: [PATCH 062/136] Fix doc link + add missing chapter. --- CHANGELOG.md | 2 +- .../plugins/notes/templates/muc-note-app.js | 2 +- .../user/streamers/moderation_notes.md | 13 ++++++++++ support/documentation/po/livechat.ar.po | 23 +++++++++++++++- support/documentation/po/livechat.ca.po | 23 +++++++++++++++- support/documentation/po/livechat.cs.po | 23 +++++++++++++++- support/documentation/po/livechat.de.po | 23 +++++++++++++++- support/documentation/po/livechat.el.po | 23 +++++++++++++++- support/documentation/po/livechat.en.pot | 26 ++++++++++++++++++- support/documentation/po/livechat.eo.po | 23 +++++++++++++++- support/documentation/po/livechat.es.po | 23 +++++++++++++++- support/documentation/po/livechat.eu.po | 23 +++++++++++++++- support/documentation/po/livechat.fa.po | 23 +++++++++++++++- support/documentation/po/livechat.fi.po | 23 +++++++++++++++- support/documentation/po/livechat.fr.po | 23 +++++++++++++++- support/documentation/po/livechat.gd.po | 23 +++++++++++++++- support/documentation/po/livechat.gl.po | 23 +++++++++++++++- support/documentation/po/livechat.hr.po | 23 +++++++++++++++- support/documentation/po/livechat.hu.po | 23 +++++++++++++++- support/documentation/po/livechat.is.po | 23 +++++++++++++++- support/documentation/po/livechat.it.po | 23 +++++++++++++++- support/documentation/po/livechat.ja.po | 23 +++++++++++++++- support/documentation/po/livechat.kab.po | 23 +++++++++++++++- support/documentation/po/livechat.nb.po | 23 +++++++++++++++- support/documentation/po/livechat.nl.po | 23 +++++++++++++++- support/documentation/po/livechat.nn.po | 23 +++++++++++++++- support/documentation/po/livechat.oc.po | 23 +++++++++++++++- support/documentation/po/livechat.pl.po | 23 +++++++++++++++- support/documentation/po/livechat.pt.po | 23 +++++++++++++++- support/documentation/po/livechat.ru.po | 23 +++++++++++++++- support/documentation/po/livechat.sq.po | 23 +++++++++++++++- support/documentation/po/livechat.sv.po | 23 +++++++++++++++- support/documentation/po/livechat.th.po | 23 +++++++++++++++- support/documentation/po/livechat.tok.po | 23 +++++++++++++++- support/documentation/po/livechat.tr.po | 21 +++++++++++++++ support/documentation/po/livechat.uk.po | 23 +++++++++++++++- support/documentation/po/livechat.vi.po | 23 +++++++++++++++- support/documentation/po/livechat.zh-Hans.po | 23 +++++++++++++++- support/documentation/po/livechat.zh-Hant.po | 23 +++++++++++++++- 39 files changed, 809 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48143641..24d5ae94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. * #146: copy message button for moderators. * #137: option to hide moderator name who made actions (kick, ban, message moderation, ...). -* #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/moderator_notes/). +* #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/moderation_notes/). ### Minor changes and fixes diff --git a/conversejs/custom/plugins/notes/templates/muc-note-app.js b/conversejs/custom/plugins/notes/templates/muc-note-app.js index 7ea4b14a..e63f6e24 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note-app.js +++ b/conversejs/custom/plugins/notes/templates/muc-note-app.js @@ -26,7 +26,7 @@ export function tplMUCNoteApp (el, mucModel) { // eslint-disable-next-line no-undef const i18nHelp = __(LOC_online_help) const helpUrl = converseLocalizedHelpUrl({ - page: 'documentation/user/streamers/moderator_notes' + page: 'documentation/user/streamers/moderation_notes' }) return tplMUCApp( diff --git a/support/documentation/content/en/documentation/user/streamers/moderation_notes.md b/support/documentation/content/en/documentation/user/streamers/moderation_notes.md index 00ef2acb..f6955b65 100644 --- a/support/documentation/content/en/documentation/user/streamers/moderation_notes.md +++ b/support/documentation/content/en/documentation/user/streamers/moderation_notes.md @@ -47,6 +47,19 @@ Every room's admins have access to this Application (read and write access). When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application. +### Scope + +Notes are only available in the room in which you have created them. + +Chatrooms can be releated to video or channel. +If you want to keep notes from one video to another, please consider using rooms associated to channels. + +{{% notice warning %}} +Currently the video vs channel rooms is an instance-wide settings. +Only Peertube admins can change it, and it applies to all chatrooms. +In the future, this choice will be added in your channel's options. +{{% /notice %}} + ### Notes #### Create/Edit Notes diff --git a/support/documentation/po/livechat.ar.po b/support/documentation/po/livechat.ar.po index 7c8f25f0..b4ed0913 100644 --- a/support/documentation/po/livechat.ar.po +++ b/support/documentation/po/livechat.ar.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-01-17 11:38+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Arabic \n" @@ -3496,6 +3496,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.ca.po b/support/documentation/po/livechat.ca.po index 92cd21b1..6b3af074 100644 --- a/support/documentation/po/livechat.ca.po +++ b/support/documentation/po/livechat.ca.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.cs.po b/support/documentation/po/livechat.cs.po index 66f62056..5504d7aa 100644 --- a/support/documentation/po/livechat.cs.po +++ b/support/documentation/po/livechat.cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index d4dc9b6b..49c8ca78 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-07-30 06:49+0000\n" "Last-Translator: Victor Hampel \n" "Language-Team: German \n" @@ -3593,6 +3593,27 @@ msgstr "Die Administratoren eines jeden Raums haben Zugriff auf die Aufgabenanwe msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält dieser sofortigen Zugriff auf die Aufgabenanwendung. Wenn Sie jemandem die Admin- oder Eigentümerrechte entziehen, verliert er sofort den Zugang zur Aufgabenanwendung." +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.el.po b/support/documentation/po/livechat.el.po index c321aab8..4b910182 100644 --- a/support/documentation/po/livechat.el.po +++ b/support/documentation/po/livechat.el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.en.pot b/support/documentation/po/livechat.en.pot index 550338c7..36609a90 100644 --- a/support/documentation/po/livechat.en.pot +++ b/support/documentation/po/livechat.en.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3938,6 +3938,30 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, markdown-text +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, markdown-text, no-wrap diff --git a/support/documentation/po/livechat.eo.po b/support/documentation/po/livechat.eo.po index 872ddb7b..a387c5bf 100644 --- a/support/documentation/po/livechat.eo.po +++ b/support/documentation/po/livechat.eo.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.es.po b/support/documentation/po/livechat.es.po index 57a4bd72..8e7dcb08 100644 --- a/support/documentation/po/livechat.es.po +++ b/support/documentation/po/livechat.es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-04-16 21:38+0000\n" "Last-Translator: rnek0 \n" "Language-Team: Spanish \n" @@ -3527,6 +3527,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.eu.po b/support/documentation/po/livechat.eu.po index 9af8795b..332251e9 100644 --- a/support/documentation/po/livechat.eu.po +++ b/support/documentation/po/livechat.eu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.fa.po b/support/documentation/po/livechat.fa.po index ec037c4c..b1d7c9b4 100644 --- a/support/documentation/po/livechat.fa.po +++ b/support/documentation/po/livechat.fa.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.fi.po b/support/documentation/po/livechat.fi.po index bf181d9e..83a728ff 100644 --- a/support/documentation/po/livechat.fi.po +++ b/support/documentation/po/livechat.fi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Finnish \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index 50cdf744..d0abf56c 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-07-18 15:05+0000\n" "Last-Translator: John Livingston \n" "Language-Team: French \n" @@ -3615,6 +3615,27 @@ msgstr "Les administrateur⋅rices de chaque salon de discussion ont accès à l msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "Lorsque vous promouvez quelqu'un en tant qu'administrateur⋅rice ou propriétaire d'un salon, iel obtient un accès instantané à l'Application Tâches. Lorsque vous retirez les droits d'admin ou de propriétaire à quelqu'un, iel perd instantanément l'accès à l'Application Tâches." +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.gd.po b/support/documentation/po/livechat.gd.po index 4775bbf5..2eaf62f4 100644 --- a/support/documentation/po/livechat.gd.po +++ b/support/documentation/po/livechat.gd.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Gaelic \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.gl.po b/support/documentation/po/livechat.gl.po index ef12fee1..3aa07751 100644 --- a/support/documentation/po/livechat.gl.po +++ b/support/documentation/po/livechat.gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index ebe8d540..15b49299 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-07-19 17:45+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -3503,6 +3503,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.hu.po b/support/documentation/po/livechat.hu.po index 704b6887..8bb78363 100644 --- a/support/documentation/po/livechat.hu.po +++ b/support/documentation/po/livechat.hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.is.po b/support/documentation/po/livechat.is.po index d261bcf0..48265ac1 100644 --- a/support/documentation/po/livechat.is.po +++ b/support/documentation/po/livechat.is.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Icelandic \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.it.po b/support/documentation/po/livechat.it.po index 879fcd39..c70e2691 100644 --- a/support/documentation/po/livechat.it.po +++ b/support/documentation/po/livechat.it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 14:21+0000\n" "Last-Translator: John Livingston \n" "Language-Team: Italian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.ja.po b/support/documentation/po/livechat.ja.po index 90715672..971bd21a 100644 --- a/support/documentation/po/livechat.ja.po +++ b/support/documentation/po/livechat.ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2024-03-10 20:38+0000\n" "Last-Translator: \"T.S\" \n" "Language-Team: Japanese \n" @@ -3601,6 +3601,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.kab.po b/support/documentation/po/livechat.kab.po index 24487e5e..9cc219b2 100644 --- a/support/documentation/po/livechat.kab.po +++ b/support/documentation/po/livechat.kab.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.nb.po b/support/documentation/po/livechat.nb.po index 4e564769..3179f6aa 100644 --- a/support/documentation/po/livechat.nb.po +++ b/support/documentation/po/livechat.nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Bokmål \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.nl.po b/support/documentation/po/livechat.nl.po index 3063842d..20ea3bbe 100644 --- a/support/documentation/po/livechat.nl.po +++ b/support/documentation/po/livechat.nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dutch \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.nn.po b/support/documentation/po/livechat.nn.po index d7bbf092..43a27627 100644 --- a/support/documentation/po/livechat.nn.po +++ b/support/documentation/po/livechat.nn.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Nynorsk \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.oc.po b/support/documentation/po/livechat.oc.po index 4a530bf2..63e49190 100644 --- a/support/documentation/po/livechat.oc.po +++ b/support/documentation/po/livechat.oc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Occitan \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.pl.po b/support/documentation/po/livechat.pl.po index 78302b6b..e9fdc6a4 100644 --- a/support/documentation/po/livechat.pl.po +++ b/support/documentation/po/livechat.pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Polish \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.pt.po b/support/documentation/po/livechat.pt.po index 59096812..ce97709c 100644 --- a/support/documentation/po/livechat.pt.po +++ b/support/documentation/po/livechat.pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.ru.po b/support/documentation/po/livechat.ru.po index 672afd78..1a394cd1 100644 --- a/support/documentation/po/livechat.ru.po +++ b/support/documentation/po/livechat.ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Russian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.sq.po b/support/documentation/po/livechat.sq.po index 8a154a3d..4e6c077a 100644 --- a/support/documentation/po/livechat.sq.po +++ b/support/documentation/po/livechat.sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.sv.po b/support/documentation/po/livechat.sv.po index f560a779..3a5bdf4e 100644 --- a/support/documentation/po/livechat.sv.po +++ b/support/documentation/po/livechat.sv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.th.po b/support/documentation/po/livechat.th.po index 4f7c18ee..2e4bb942 100644 --- a/support/documentation/po/livechat.th.po +++ b/support/documentation/po/livechat.th.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.tok.po b/support/documentation/po/livechat.tok.po index 5407bfeb..e906b4f2 100644 --- a/support/documentation/po/livechat.tok.po +++ b/support/documentation/po/livechat.tok.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Toki Pona \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.tr.po b/support/documentation/po/livechat.tr.po index 57f5e6a6..ff09d94b 100644 --- a/support/documentation/po/livechat.tr.po +++ b/support/documentation/po/livechat.tr.po @@ -3469,6 +3469,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.uk.po b/support/documentation/po/livechat.uk.po index 9ad20536..a3c584e7 100644 --- a/support/documentation/po/livechat.uk.po +++ b/support/documentation/po/livechat.uk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.vi.po b/support/documentation/po/livechat.vi.po index 5c882971..1a06eafa 100644 --- a/support/documentation/po/livechat.vi.po +++ b/support/documentation/po/livechat.vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hans.po b/support/documentation/po/livechat.zh-Hans.po index 0c5f2a01..1488034b 100644 --- a/support/documentation/po/livechat.zh-Hans.po +++ b/support/documentation/po/livechat.zh-Hans.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap diff --git a/support/documentation/po/livechat.zh-Hant.po b/support/documentation/po/livechat.zh-Hant.po index 8e2b4016..108c27c3 100644 --- a/support/documentation/po/livechat.zh-Hant.po +++ b/support/documentation/po/livechat.zh-Hant.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 22:48+0200\n" +"POT-Creation-Date: 2024-07-31 23:19+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Traditional) \n" @@ -3488,6 +3488,27 @@ msgstr "" msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." msgstr "" +#. type: Title ### +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#, no-wrap +msgid "Scope" +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Notes are only available in the room in which you have created them." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgstr "" + +#. type: Plain text +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgstr "" + #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap From cdbe97137eb2c140779b7bc5c3fd23d62799ba6f Mon Sep 17 00:00:00 2001 From: John Livingston Date: Wed, 31 Jul 2024 23:28:10 +0200 Subject: [PATCH 063/136] Moderation notes technical documentation. --- .../content/en/technical/moderation_notes.md | 86 +++++++++++++++++++ .../content/en/technical/tasks.md | 6 +- 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 support/documentation/content/en/technical/moderation_notes.md diff --git a/support/documentation/content/en/technical/moderation_notes.md b/support/documentation/content/en/technical/moderation_notes.md new file mode 100644 index 00000000..d775583d --- /dev/null +++ b/support/documentation/content/en/technical/moderation_notes.md @@ -0,0 +1,86 @@ +--- +title: "Moderator notes overview" +description: "Moderator Notes Application technical overview" +weight: 75 +chapter: false +livechatnotranslation: true +--- + +The livechat plugin includes a [Moderation Notes Application](/peertube-plugin-livechat/documentation/user/streamers/moderation_notes). +The present document describes how this is implemented. + +## Basics + +This features relies on [XEP-0060: Publish-Subscribe](https://xmpp.org/extensions/xep-0060.html). +This XEP provide a way to store and retrieve items, and to receive push notifications when an item is created/deleted/modified. + +There is a Prosody Module, [mod_pubsub_peertubelivechat](https://github.com/JohnXLivingston/peertube-plugin-livechat/tree/main/prosody-modules/mod_pubsub_peertubelivechat), to implement some specific use of the pubsub mechanism. + +This module is also used for [Tasks](/peertube-plugin-livechat/technical/tasks/). + +We use the [JID+NodeID addressing](https://xmpp.org/extensions/xep-0060.html#addressing-jidnode) to specify some nodes related to each MUC room. +The JID is the MUC room JID, the NodeID is functionnality we want to address. + +This modules implement the "livechat-notes" node, to handle moderator notes. + +The "livechat-notes" node contains one type of objects: Note (XML Namespaces: `urn:peertube-plugin-livechat:note`). + +On the front-end, we have the [livechat-converse-notes](https://github.com/JohnXLivingston/peertube-plugin-livechat/tree/main/conversejs/custom/plugins/notes) plugin for ConverseJS. + +## Workflow / Unsubscribing + +This is basically the same as for [Tasks](/peertube-plugin-livechat/technical/tasks/). + +## Items + +Here we describes the content of note items. + +* Item tag: `note` +* XML Namespace: `urn:peertube-plugin-livechat:note` +* item attributes: + * `order`: the order of the note in the note list +* item childs: + * `description`: the text content of the note + * `note-about`: an optional tag, if the note is associated to a participant + +The `note-about` tag, if present, has following structure: + +* Item tag: `note-about` +* XML Namespace: none +* item attributes: + * `jid`: the JID of the occupant + * `nick` the nick of the occupant, at time of note creation +* item childs: + * `occupant-id`: see [XEP-0421](https://xmpp.org/extensions/xep-0421.html). + +Example: + +```xml + + + + + + Some text. + + + + + + + + +``` diff --git a/support/documentation/content/en/technical/tasks.md b/support/documentation/content/en/technical/tasks.md index e4b38879..adef52b4 100644 --- a/support/documentation/content/en/technical/tasks.md +++ b/support/documentation/content/en/technical/tasks.md @@ -16,10 +16,12 @@ This XEP provide a way to store and retrieve items, and to receive push notifica There is a Prosody Module, [mod_pubsub_peertubelivechat](https://github.com/JohnXLivingston/peertube-plugin-livechat/tree/main/prosody-modules/mod_pubsub_peertubelivechat), to implement some specific use of the pubsub mechanism. +This module is also used for [Moderator Notes](/peertube-plugin-livechat/technical/moderation_notes/). + We use the [JID+NodeID addressing](https://xmpp.org/extensions/xep-0060.html#addressing-jidnode) to specify some nodes related to each MUC room. The JID is the MUC room JID, the NodeID is functionnality we want to address. -For now, this modules only implement one such node: "livechat-tasks", to handle tasks and task lists. -But the module code anticipates futur uses. + +This modules implement the "livechat-tasks" node, to handle tasks and task lists. The "livechat-tasks" node contains two type of objects: Task and TaskList (XML Namespaces: `urn:peertube-plugin-livechat:tasklist` and `urn:peertube-plugin-livechat:task`). Tasks have an attribute containing their task list id. From a4497739fa9be0f1fdc011178fa171e6dd71f740 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 1 Aug 2024 16:10:34 +0200 Subject: [PATCH 064/136] Search user messages WIP (#145) --- CHANGELOG.md | 1 + conversejs/custom/index.js | 2 + conversejs/custom/plugins/mam-search/api.js | 100 ++++++++++++ .../custom/plugins/mam-search/constants.js | 5 + conversejs/custom/plugins/mam-search/index.js | 71 ++++++++ conversejs/custom/plugins/notes/utils.js | 54 +++--- conversejs/loc.keys.js | 3 +- languages/en.yml | 2 + .../mod_muc_mam_search/README.markdown | 23 +++ .../mod_muc_mam_search/archive.lib.lua | 25 +++ .../mod_muc_mam_search/filter.lib.lua | 24 +++ .../mod_muc_mam_search/mod_muc_mam_search.lua | 154 ++++++++++++++++++ server/lib/prosody/config/content.ts | 2 + 13 files changed, 439 insertions(+), 27 deletions(-) create mode 100644 conversejs/custom/plugins/mam-search/api.js create mode 100644 conversejs/custom/plugins/mam-search/constants.js create mode 100644 conversejs/custom/plugins/mam-search/index.js create mode 100644 prosody-modules/mod_muc_mam_search/README.markdown create mode 100644 prosody-modules/mod_muc_mam_search/archive.lib.lua create mode 100644 prosody-modules/mod_muc_mam_search/filter.lib.lua create mode 100644 prosody-modules/mod_muc_mam_search/mod_muc_mam_search.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index 24d5ae94..00debd69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * #146: copy message button for moderators. * #137: option to hide moderator name who made actions (kick, ban, message moderation, ...). * #144: [moderator notes](https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/moderation_notes/). +* #145: action for moderators to find all messages from a given participant. ### Minor changes and fixes diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 29de15ce..08033a19 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -44,6 +44,7 @@ import './plugins/singleton/index.js' import './plugins/fullscreen/index.js' import '../custom/plugins/size/index.js' +import '../custom/plugins/mam-search/index.js' import '../custom/plugins/notes/index.js' import '../custom/plugins/tasks/index.js' import '../custom/plugins/terms/index.js' @@ -61,6 +62,7 @@ CORE_PLUGINS.push('livechat-converse-tasks') CORE_PLUGINS.push('livechat-converse-terms') CORE_PLUGINS.push('livechat-converse-poll') CORE_PLUGINS.push('livechat-converse-notes') +CORE_PLUGINS.push('livechat-converse-mam-search') // We must also add our custom ROOM_FEATURES, so that they correctly resets // (see headless/plugins/muc, getDiscoInfoFeatures, which loops on this const) ROOM_FEATURES.push('x_peertubelivechat_mute_anonymous') diff --git a/conversejs/custom/plugins/mam-search/api.js b/conversejs/custom/plugins/mam-search/api.js new file mode 100644 index 00000000..93f7e2be --- /dev/null +++ b/conversejs/custom/plugins/mam-search/api.js @@ -0,0 +1,100 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { api, converse } from '../../../src/headless/index.js' +import { XMLNS_MAM_SEARCH } from './constants.js' + +const env = converse.env +const { + $iq, + Strophe, + sizzle, + log, + TimeoutError, + __, + u +} = env +const NS = Strophe.NS + +async function query (options) { + if (!api.connection.connected()) { + throw new Error('Can\'t call `api.livechat_mam_search.query` before having established an XMPP session') + } + + if (!options?.room) { + throw new Error('api.livechat_mam_search.query: Missing room parameter.') + } + + const attrs = { + type: 'set', + to: options.room + } + + const jid = attrs.to + const supported = await api.disco.supports(XMLNS_MAM_SEARCH, jid) + if (!supported) { + log.warn(`Did not search MAM archive for ${jid} because it doesn't support ${XMLNS_MAM_SEARCH}`) + return { messages: [] } + } + + const queryid = u.getUniqueId() + const stanza = $iq(attrs).c('query', { xmlns: XMLNS_MAM_SEARCH, queryid: queryid }) + + stanza.c('x', { xmlns: NS.XFORM, type: 'submit' }) + .c('field', { var: 'FORM_TYPE', type: 'hidden' }) + .c('value').t(XMLNS_MAM_SEARCH).up().up() + + if (options.from) { + stanza.c('field', { var: 'from' }).c('value') + .t(options.from).up().up() + } + if (options.occupant_id) { + stanza.c('field', { var: 'occupant_id' }).c('value') + .t(options.occupant_id).up().up() + } + stanza.up() + + // TODO: handle RSM (pagination.) + + const connection = api.connection.get() + + const messages = [] + const messageHandler = connection.addHandler((stanza) => { + const result = sizzle(`message > result[xmlns="${NS.MAM}"]`, stanza).pop() + if (result === undefined || result.getAttribute('queryid') !== queryid) { + return true + } + const from = stanza.getAttribute('from') + if (from !== attrs.to) { + log.warn(`Ignoring alleged groupchat MAM message from ${from}`) + return true + } + messages.push(stanza) + return true + }, NS.MAM) + + let error + const timeout = api.settings.get('message_archiving_timeout') + const iqResult = await api.sendIQ(stanza, timeout, false) + + if (iqResult === null) { + const errMsg = __('Timeout while trying to fetch archived messages.') + log.error(errMsg) + error = new TimeoutError(errMsg) + return { messages, error } + } else if (u.isErrorStanza(iqResult)) { + const errMsg = __('An error occurred while querying for archived messages.') + log.error(errMsg) + log.error(iqResult) + error = new Error(errMsg) + return { messages, error } + } + connection.deleteHandler(messageHandler) + + return { messages } +} + +export default { + query +} diff --git a/conversejs/custom/plugins/mam-search/constants.js b/conversejs/custom/plugins/mam-search/constants.js new file mode 100644 index 00000000..c92dd4a2 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/constants.js @@ -0,0 +1,5 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +export const XMLNS_MAM_SEARCH = 'urn:xmpp:mam:2#x-search' diff --git a/conversejs/custom/plugins/mam-search/index.js b/conversejs/custom/plugins/mam-search/index.js new file mode 100644 index 00000000..17ca2551 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/index.js @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { api, converse } from '../../../src/headless/index.js' +import { XMLNS_MAM_SEARCH } from './constants.js' +import mamSearchApi from './api.js' +import { __ } from 'i18n' + +converse.plugins.add('livechat-converse-mam-search', { + dependencies: ['converse-muc', 'converse-muc-views'], + async initialize () { + const _converse = this._converse + + Object.assign(api, { + livechat_mam_search: mamSearchApi + }) + + // Adding buttons on message: + _converse.api.listen.on('getMessageActionButtons', getMessageActionButtons) + + // FIXME: should we listen to any event (feature/affiliation change?, mam_enabled?) to refresh messageActionButtons? + } +}) + +function getMessageActionButtons (messageActionsEl, buttons) { + const messageModel = messageActionsEl.model + if (messageModel.get('type') !== 'groupchat') { + // only on groupchat message. + return buttons + } + + if (!messageModel.occupant) { + return buttons + } + + const muc = messageModel.collection?.chatbox + if (!muc) { + return buttons + } + + if (!muc.features?.get?.(XMLNS_MAM_SEARCH)) { + return buttons + } + + const myself = muc.getOwnOccupant() + if (!myself || !['admin', 'owner'].includes(myself.get('affiliation'))) { + return buttons + } + + // eslint-disable-next-line no-undef + const i18nSearch = __(LOC_search_occupant_message) + + buttons.push({ + i18n_text: i18nSearch, + handler: async (ev) => { + ev.preventDefault() + console.log(await api.livechat_mam_search.query({ + room: muc.get('jid'), + // FIXME: shouldn't we escape the nick? cant see any code that escapes it in Converse. + from: messageModel.occupant.get('from') || muc.get('jid') + '/' + (messageModel.occupant.get('nick') ?? ''), + occupant_id: messageModel.occupant.get('occupant_id') + })) + }, + button_class: '', + icon_class: 'fa fa-magnifying-glass', + name: 'muc-mam-search' + }) + + return buttons +} diff --git a/conversejs/custom/plugins/notes/utils.js b/conversejs/custom/plugins/notes/utils.js index 2cd4bf0e..d1c49311 100644 --- a/conversejs/custom/plugins/notes/utils.js +++ b/conversejs/custom/plugins/notes/utils.js @@ -43,39 +43,41 @@ export function getMessageActionButtons (messageActionsEl, buttons) { return buttons } + if (!messageModel.occupant) { + return buttons + } + const muc = messageModel.collection?.chatbox if (!muc?.notes) { return buttons } - if (messageModel.occupant) { - // eslint-disable-next-line no-undef - const i18nCreate = __(LOC_moderator_note_create_for_participant) - // eslint-disable-next-line no-undef - const i18nSearch = __(LOC_moderator_note_search_for_participant) + // eslint-disable-next-line no-undef + const i18nCreate = __(LOC_moderator_note_create_for_participant) + // eslint-disable-next-line no-undef + const i18nSearch = __(LOC_moderator_note_search_for_participant) - buttons.push({ - i18n_text: i18nCreate, - handler: async (ev) => { - ev.preventDefault() - await api.livechat_notes.openCreateNoteForm(messageModel.occupant) - }, - button_class: '', - icon_class: 'fa fa-note-sticky', - name: 'muc-note-create-for-occupant' - }) + buttons.push({ + i18n_text: i18nCreate, + handler: async (ev) => { + ev.preventDefault() + await api.livechat_notes.openCreateNoteForm(messageModel.occupant) + }, + button_class: '', + icon_class: 'fa fa-note-sticky', + name: 'muc-note-create-for-occupant' + }) - buttons.push({ - i18n_text: i18nSearch, - handler: async (ev) => { - ev.preventDefault() - await api.livechat_notes.searchNotesAbout(messageModel.occupant) - }, - button_class: '', - icon_class: 'fa fa-magnifying-glass', - name: 'muc-note-search-for-occupant' - }) - } + buttons.push({ + i18n_text: i18nSearch, + handler: async (ev) => { + ev.preventDefault() + await api.livechat_notes.searchNotesAbout(messageModel.occupant) + }, + button_class: '', + icon_class: 'fa fa-magnifying-glass', + name: 'muc-note-search-for-occupant' + }) return buttons } diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index f5290ffd..e761bdc6 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -59,7 +59,8 @@ const locKeys = [ 'moderator_note_create_for_participant', 'moderator_note_search_for_participant', 'moderator_note_filters', - 'moderator_note_original_nick' + 'moderator_note_original_nick', + 'search_occupant_message' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index ba9b46e1..4db677b6 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -604,3 +604,5 @@ moderator_note_create_for_participant: 'Create a new note about this participant moderator_note_search_for_participant: 'Search notes about this participant' moderator_note_filters: 'Search filters' moderator_note_original_nick: 'Nickname of the participant at the time of the note creation' + +search_occupant_message: 'Search all message from this participant' diff --git a/prosody-modules/mod_muc_mam_search/README.markdown b/prosody-modules/mod_muc_mam_search/README.markdown new file mode 100644 index 00000000..0ca73b79 --- /dev/null +++ b/prosody-modules/mod_muc_mam_search/README.markdown @@ -0,0 +1,23 @@ + +# mod_muc_mam_search + +With this module you can make some advanced search in MAM (MUC Archive Management - XEP-0313). + +This module is part of peertube-plugin-livechat, and is under AGPL-3.0.-only license. +This module can work on any Prosody server (version >= 0.12.x). +This module is still experimental. + +## Configuration + +Just enable the module on your MUC component. + +The feature will be announced using Service Discovery (XEP-0030). + +TODO: document the Disco namespace. + +You can then query archives using query similar to those for XEP-0313. + +TODO: document available queries. diff --git a/prosody-modules/mod_muc_mam_search/archive.lib.lua b/prosody-modules/mod_muc_mam_search/archive.lib.lua new file mode 100644 index 00000000..d26be1e6 --- /dev/null +++ b/prosody-modules/mod_muc_mam_search/archive.lib.lua @@ -0,0 +1,25 @@ +-- SPDX-FileCopyrightText: 2024 John Livingston +-- SPDX-License-Identifier: AGPL-3.0-only + +-- FIXME: these imports are copied from mod_muc_mam, we should avoid that. +local log_all_rooms = module:get_option_boolean("muc_log_all_rooms", false); +local log_by_default = module:get_option_boolean("muc_log_by_default", true); + +-- FIXME: this function is copied from mod_muc_mam. We should not do so, and use directly the original function. +local function archiving_enabled(room) + if log_all_rooms then + module:log("debug", "Archiving all rooms"); + return true; + end + local enabled = room._data.archiving; + if enabled == nil then + module:log("debug", "Default is %s (for %s)", log_by_default, room.jid); + return log_by_default; + end + module:log("debug", "Logging in room %s is %s", room.jid, enabled); + return enabled; +end + +return { + archiving_enabled = archiving_enabled; +}; diff --git a/prosody-modules/mod_muc_mam_search/filter.lib.lua b/prosody-modules/mod_muc_mam_search/filter.lib.lua new file mode 100644 index 00000000..e202c54f --- /dev/null +++ b/prosody-modules/mod_muc_mam_search/filter.lib.lua @@ -0,0 +1,24 @@ +-- SPDX-FileCopyrightText: 2024 John Livingston +-- SPDX-License-Identifier: AGPL-3.0-only + +-- Perform the search criteria. +-- Returns true if the item match. +-- Note: there is a logical OR between search_from and search_occupant_id +local function item_match(id, item, search_from, search_occupant_id) + if (search_from ~= nil) then + if (search_from == item.attr.from) then + return true; + end + end + if (search_occupant_id ~= nil) then + local occupant_id = item:get_child("occupant-id", "urn:xmpp:occupant-id:0"); + if (occupant_id and occupant_id.attr.id == search_occupant_id) then + return true; + end + end + return false; +end + +return { + item_match = item_match; +}; diff --git a/prosody-modules/mod_muc_mam_search/mod_muc_mam_search.lua b/prosody-modules/mod_muc_mam_search/mod_muc_mam_search.lua new file mode 100644 index 00000000..6a92c2aa --- /dev/null +++ b/prosody-modules/mod_muc_mam_search/mod_muc_mam_search.lua @@ -0,0 +1,154 @@ +-- mod_muc_mam_search +-- +-- SPDX-FileCopyrightText: 2024 John Livingston +-- SPDX-License-Identifier: AGPL-3.0-only +-- + +local archiving_enabled = module:require("archive").archiving_enabled; +local item_match = module:require("filter").item_match; +local jid_split = require "util.jid".split; +local jid_bare = require "util.jid".bare; +local st = require "util.stanza"; +local datetime = require"util.datetime"; +local dataform = require "util.dataforms".new; +local get_form_type = require "util.dataforms".get_type; + +local mod_muc = module:depends"muc"; +local get_room_from_jid = mod_muc.get_room_from_jid; +local muc_log_archive = module:open_store("muc_log", "archive"); + +local xmlns_mam = "urn:xmpp:mam:2"; +local xmlns_mam_search = "urn:xmpp:mam:2#x-search"; +local xmlns_delay = "urn:xmpp:delay"; +local xmlns_forward = "urn:xmpp:forward:0"; + +module:hook("muc-disco#info", function(event) + if archiving_enabled(event.room) then + event.reply:tag("feature", {var=xmlns_mam_search}):up(); + end +end); + +local query_form = dataform { + { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam_search }; + { name = "from"; type = "jid-single" }; + { name = "occupant_id"; type = "text-single" }; +}; + +-- Serve form +module:hook("iq-get/bare/"..xmlns_mam_search..":query", function(event) + local origin, stanza = event.origin, event.stanza; + origin.send(st.reply(stanza):query(xmlns_mam_search):add_child(query_form:form())); + return true; +end); + +-- Handle archive queries +module:hook("iq-set/bare/"..xmlns_mam_search..":query", function(event) + local origin, stanza = event.origin, event.stanza; + local room_jid = stanza.attr.to; + local room_node = jid_split(room_jid); + local orig_from = stanza.attr.from; + local query = stanza.tags[1]; + + local room = get_room_from_jid(room_jid); + if not room then + origin.send(st.error_reply(stanza, "cancel", "item-not-found")) + return true; + end + local from = jid_bare(orig_from); + + -- Must be room admin or owner. + local from_affiliation = room:get_affiliation(from); + if (from_affiliation ~= "owner" and from_affiliation ~= "admin") then + origin.send(st.error_reply(stanza, "auth", "forbidden")) + return true; + end + + local qid = query.attr.queryid; + + -- Search query parameters + local search_from; + local search_occupant_id; + local form = query:get_child("x", "jabber:x:data"); + if form then + local form_type, err = get_form_type(form); + if not form_type then + origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid dataform: "..err)); + return true; + elseif form_type ~= xmlns_mam_search then + origin.send(st.error_reply(stanza, "modify", "bad-request", "Unexpected FORM_TYPE, expected '"..xmlns_mam_search.."'")); + return true; + end + form, err = query_form:data(form); + if err then + origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); + return true; + end + + search_from = form["from"]; + search_occupant_id = form["occupant_id"]; + else + module:log("debug", "Missing query form, forbidden.") + origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform")); + return true; + end + + -- TODO: handle RSM (pagination)? + module:log("debug", "Archive query by %s id=%s", from, qid); + + -- Load all the data! + local data, err = muc_log_archive:find(room_node, { + start = nil; ["end"] = nil; + with = "message tag, containing the original senders JID, unless the room makes this public. + -- but we only allow this feature to owner and admin, so we don't need to remove this. + + item.attr.to = nil; + item.attr.xmlns = "jabber:client"; + fwd_st:add_child(item); + + origin.send(fwd_st); + end + end + + origin.send(st.reply(stanza) + -- The result uses xmlns_mam and not xmlns_mam_search, so that the frontend handles this in the same way than xmlns_mam. + :tag("fin", { xmlns = xmlns_mam, complete = "true" })); + + -- That's all folks! + module:log("debug", "Archive query id=%s completed, %d items returned", qid or stanza.attr.id, count); + return true; +end); diff --git a/server/lib/prosody/config/content.ts b/server/lib/prosody/config/content.ts index b827e329..21081a9b 100644 --- a/server/lib/prosody/config/content.ts +++ b/server/lib/prosody/config/content.ts @@ -258,6 +258,8 @@ class ProsodyConfigContent { this.muc.add('modules_enabled', 'muc_anonymize_moderation_actions') this.muc.set('anonymize_moderation_actions_form_position', 117) + + this.muc.add('modules_enabled', 'muc_mam_search') } useAnonymous (autoBanIP: boolean): void { From dd030758315930e076e0358ed04a570a09e8abec Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 1 Aug 2024 17:14:07 +0200 Subject: [PATCH 065/136] Fix naming. --- .../notes/components/muc-note-app-view.js | 4 ++-- .../tasks/components/muc-task-app-view.js | 4 ++-- .../custom/shared/components/muc-app/index.js | 16 ++++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/conversejs/custom/plugins/notes/components/muc-note-app-view.js b/conversejs/custom/plugins/notes/components/muc-note-app-view.js index 92ac6295..4747fab0 100644 --- a/conversejs/custom/plugins/notes/components/muc-note-app-view.js +++ b/conversejs/custom/plugins/notes/components/muc-note-app-view.js @@ -10,8 +10,8 @@ import { tplMUCNoteApp } from '../templates/muc-note-app.js' * Custom Element to display the Notes Application. */ export default class MUCNoteApp extends MUCApp { - enableSettingName = 'livechat_note_app_restore' - sessionStorangeShowKey = 'livechat-converse-note-app-show' + restoreSettingName = 'livechat_note_app_restore' + sessionStorageRestoreKey = 'livechat-converse-note-app-show' render () { return tplMUCNoteApp(this, this.model) diff --git a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js index c7ad938a..d1b8378e 100644 --- a/conversejs/custom/plugins/tasks/components/muc-task-app-view.js +++ b/conversejs/custom/plugins/tasks/components/muc-task-app-view.js @@ -10,8 +10,8 @@ import { tplMUCTaskApp } from '../templates/muc-task-app.js' * Custom Element to display the Task Application. */ export default class MUCTaskApp extends MUCApp { - enableSettingName = 'livechat_task_app_restore' - sessionStorangeShowKey = 'livechat-converse-task-app-show' + restoreSettingName = 'livechat_task_app_restore' + sessionStorageRestoreKey = 'livechat-converse-task-app-show' render () { return tplMUCTaskApp(this, this.model) diff --git a/conversejs/custom/shared/components/muc-app/index.js b/conversejs/custom/shared/components/muc-app/index.js index a532391a..6c794868 100644 --- a/conversejs/custom/shared/components/muc-app/index.js +++ b/conversejs/custom/shared/components/muc-app/index.js @@ -11,8 +11,8 @@ import './styles/muc-app.scss' * This is an abstract class, should not be called directly. */ export class MUCApp extends CustomElement { - enableSettingName = undefined // must be overloaded - sessionStorangeShowKey = undefined // must be overloaded + restoreSettingName = undefined // must be overloaded + sessionStorageRestoreKey = undefined // must be overloaded static get properties () { return { @@ -23,10 +23,10 @@ export class MUCApp extends CustomElement { async initialize () { this.classList.add('livechat-converse-muc-app') - this.show = this.enableSettingName && - api.settings.get(this.enableSettingName) && - this.sessionStorangeShowKey && - (window.sessionStorage?.getItem?.(this.sessionStorangeShowKey) === '1') + this.show = this.restoreSettingName && + api.settings.get(this.restoreSettingName) && + this.sessionStorageRestoreKey && + (window.sessionStorage?.getItem?.(this.sessionStorageRestoreKey) === '1') // we listen for livechatSizeChanged event, // and close all apps except the first if small or medium width. @@ -63,8 +63,8 @@ export class MUCApp extends CustomElement { toggleApp () { this.show = !this.show - if (this.sessionStorangeShowKey) { - window.sessionStorage?.setItem?.(this.sessionStorangeShowKey, this.show ? '1' : '') + if (this.sessionStorageRestoreKey) { + window.sessionStorage?.setItem?.(this.sessionStorageRestoreKey, this.show ? '1' : '') } if ( From 4181661fafa1742f2b8c785dfb63fed0a8e297ad Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 1 Aug 2024 18:58:25 +0200 Subject: [PATCH 066/136] Search user messages WIP (#145) --- assets/styles/elements/_spinner.scss | 4 +- conversejs/builtin.ts | 14 ++--- conversejs/custom/plugins/mam-search/api.js | 16 ++++- .../components/muc-mam-search-app-view.js | 55 ++++++++++++++++ .../muc-mam-search-occupant-view.js | 27 ++++++++ conversejs/custom/plugins/mam-search/index.js | 57 +++-------------- .../styles/muc-mam-search-occupant.scss | 36 +++++++++++ .../templates/muc-mam-search-app.js | 63 +++++++++++++++++++ .../templates/muc-mam-search-occupant.js | 32 ++++++++++ conversejs/custom/plugins/mam-search/utils.js | 57 +++++++++++++++++ conversejs/custom/templates/muc-chatarea.js | 5 ++ conversejs/loc.keys.js | 3 +- languages/en.yml | 3 +- 13 files changed, 308 insertions(+), 64 deletions(-) create mode 100644 conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js create mode 100644 conversejs/custom/plugins/mam-search/components/muc-mam-search-occupant-view.js create mode 100644 conversejs/custom/plugins/mam-search/styles/muc-mam-search-occupant.scss create mode 100644 conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js create mode 100644 conversejs/custom/plugins/mam-search/templates/muc-mam-search-occupant.js create mode 100644 conversejs/custom/plugins/mam-search/utils.js diff --git a/assets/styles/elements/_spinner.scss b/assets/styles/elements/_spinner.scss index 672bf01c..9fa9e39d 100644 --- a/assets/styles/elements/_spinner.scss +++ b/assets/styles/elements/_spinner.scss @@ -15,9 +15,9 @@ livechat-spinner, height: 48px; margin: 20px; /* stylelint-disable-next-line custom-property-pattern */ - border: 5px solid var(--greyBackgroundColor); + border: 5px solid var(--greyBackgroundColor) !important; // !important is required for it to work in ConverseJS /* stylelint-disable-next-line custom-property-pattern */ - border-bottom-color: var(--mainColor); + border-bottom-color: var(--mainColor) !important; // !important is required for it to work in ConverseJS border-radius: 50%; display: inline-block; box-sizing: border-box; diff --git a/conversejs/builtin.ts b/conversejs/builtin.ts index 2f6c3928..9cb1cc5a 100644 --- a/conversejs/builtin.ts +++ b/conversejs/builtin.ts @@ -220,27 +220,23 @@ async function initConverse ( // Technically it would work in 'chat-only' mode, but i don't want to add too many things to test // (and i now there is some CSS bugs in the task list). // Same for the moderator notes app. - let enableTask = false - let enableModeratorNotes = false + let enableApps = false if (chatIncludeMode === 'peertube-video' || chatIncludeMode === 'peertube-fullpage') { - enableTask = true - enableModeratorNotes = true + enableApps = true } else if ( chatIncludeMode === 'chat-only' && usedLivechatToken && !initConverseParams.transparent && !initConverseParams.forceReadonly ) { - enableTask = true - enableModeratorNotes = true + enableApps = true } - if (enableTask) { + if (enableApps) { params.livechat_task_app_enabled = true params.livechat_task_app_restore = chatIncludeMode === 'peertube-fullpage' || chatIncludeMode === 'chat-only' - } - if (enableModeratorNotes) { params.livechat_note_app_enabled = true params.livechat_note_app_restore = chatIncludeMode === 'peertube-fullpage' || chatIncludeMode === 'chat-only' + params.livechat_mam_search_app_enabled = true } try { diff --git a/conversejs/custom/plugins/mam-search/api.js b/conversejs/custom/plugins/mam-search/api.js index 93f7e2be..77fe71fe 100644 --- a/conversejs/custom/plugins/mam-search/api.js +++ b/conversejs/custom/plugins/mam-search/api.js @@ -95,6 +95,18 @@ async function query (options) { return { messages } } -export default { - query +async function showMessagesFrom (occupant) { + const appElement = document.querySelector('livechat-converse-muc-mam-search-app') + if (!appElement) { + throw new Error('Cant find Search App Element') + } + appElement.searchFrom(occupant) + await appElement.showApp() + await appElement.updateComplete // waiting for the app to be open + return appElement +} + +export default { + query, + showMessagesFrom } diff --git a/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js b/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js new file mode 100644 index 00000000..3b3585f0 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { api } from '@converse/headless' +import { Collection } from '@converse/skeletor' +import { parseMUCMessage } from '@converse/headless/plugins/muc/parsers.js' +import { MUCApp } from '../../../shared/components/muc-app/index.js' +import { tplMamSearchApp } from '../templates/muc-mam-search-app.js' + +/** + * Custom Element to display the Mam Search Application. + */ +export default class MUCMamSearchApp extends MUCApp { + restoreSettingName = undefined + sessionStorageRestoreKey = undefined + + static get properties () { + return { + model: { type: Object, attribute: true }, // the muc model + occupant: { type: Object, attribute: true }, // the occupant to search (can be undefined if no current search) + results: { type: Object, attribute: true } // a Collection with the results. + } + } + + render () { + return tplMamSearchApp(this, this.model, this.occupant) + } + + searchFrom (occupant) { + this.results = undefined + this.occupant = occupant + const p = api.livechat_mam_search.query({ + room: this.model.get('jid'), + // FIXME: shouldn't we escape the nick? cant see any code that escapes it in Converse. + from: occupant.get('from') || this.model.get('jid') + '/' + (occupant.get('nick') ?? ''), + occupant_id: occupant.get('occupant_id') + }) + + // don't wait the result to show something! (there will be a spinner) + p.then(async (results) => { + this.occupant = occupant // in case user did simultaneous requests + + const messages = await Promise.all(results.messages.map(s => parseMUCMessage(s, this.model))) + const col = new Collection() + for (const message of messages) { + // FIXME: this does not work for now, the collection is not properly initiated (no storage engine) + col.create(message) + } + this.results = col + }) + } +} + +api.elements.define('livechat-converse-muc-mam-search-app', MUCMamSearchApp) diff --git a/conversejs/custom/plugins/mam-search/components/muc-mam-search-occupant-view.js b/conversejs/custom/plugins/mam-search/components/muc-mam-search-occupant-view.js new file mode 100644 index 00000000..c88f60dd --- /dev/null +++ b/conversejs/custom/plugins/mam-search/components/muc-mam-search-occupant-view.js @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { CustomElement } from 'shared/components/element.js' +import { tplMucMamSearchOccupant } from '../templates/muc-mam-search-occupant' +import { api } from '@converse/headless' + +import '../styles/muc-mam-search-occupant.scss' + +export default class MUCMamSearchOccupantView extends CustomElement { + static get properties () { + return { + model: { type: Object, attribute: true } + } + } + + async initialize () { + this.listenTo(this.model, 'change', () => this.requestUpdate()) + } + + render () { + return tplMucMamSearchOccupant(this, this.model) + } +} + +api.elements.define('livechat-converse-muc-mam-search-occupant', MUCMamSearchOccupantView) diff --git a/conversejs/custom/plugins/mam-search/index.js b/conversejs/custom/plugins/mam-search/index.js index 17ca2551..d5efd510 100644 --- a/conversejs/custom/plugins/mam-search/index.js +++ b/conversejs/custom/plugins/mam-search/index.js @@ -3,9 +3,11 @@ // SPDX-License-Identifier: AGPL-3.0-only import { api, converse } from '../../../src/headless/index.js' -import { XMLNS_MAM_SEARCH } from './constants.js' +import { getMessageActionButtons } from './utils.js' import mamSearchApi from './api.js' -import { __ } from 'i18n' + +import './components/muc-mam-search-app-view.js' +import './components/muc-mam-search-occupant-view.js' converse.plugins.add('livechat-converse-mam-search', { dependencies: ['converse-muc', 'converse-muc-views'], @@ -16,56 +18,13 @@ converse.plugins.add('livechat-converse-mam-search', { livechat_mam_search: mamSearchApi }) + _converse.api.settings.extend({ + livechat_mam_search_app_enabled: false + }) + // Adding buttons on message: _converse.api.listen.on('getMessageActionButtons', getMessageActionButtons) // FIXME: should we listen to any event (feature/affiliation change?, mam_enabled?) to refresh messageActionButtons? } }) - -function getMessageActionButtons (messageActionsEl, buttons) { - const messageModel = messageActionsEl.model - if (messageModel.get('type') !== 'groupchat') { - // only on groupchat message. - return buttons - } - - if (!messageModel.occupant) { - return buttons - } - - const muc = messageModel.collection?.chatbox - if (!muc) { - return buttons - } - - if (!muc.features?.get?.(XMLNS_MAM_SEARCH)) { - return buttons - } - - const myself = muc.getOwnOccupant() - if (!myself || !['admin', 'owner'].includes(myself.get('affiliation'))) { - return buttons - } - - // eslint-disable-next-line no-undef - const i18nSearch = __(LOC_search_occupant_message) - - buttons.push({ - i18n_text: i18nSearch, - handler: async (ev) => { - ev.preventDefault() - console.log(await api.livechat_mam_search.query({ - room: muc.get('jid'), - // FIXME: shouldn't we escape the nick? cant see any code that escapes it in Converse. - from: messageModel.occupant.get('from') || muc.get('jid') + '/' + (messageModel.occupant.get('nick') ?? ''), - occupant_id: messageModel.occupant.get('occupant_id') - })) - }, - button_class: '', - icon_class: 'fa fa-magnifying-glass', - name: 'muc-mam-search' - }) - - return buttons -} diff --git a/conversejs/custom/plugins/mam-search/styles/muc-mam-search-occupant.scss b/conversejs/custom/plugins/mam-search/styles/muc-mam-search-occupant.scss new file mode 100644 index 00000000..2678b926 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/styles/muc-mam-search-occupant.scss @@ -0,0 +1,36 @@ +/* + * SPDX-FileCopyrightText: 2024 John Livingston + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +.conversejs { + livechat-converse-muc-mam-search-occupant { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + padding: 0.25em; + + & > a { + display: flex; + flex-flow: row nowrap; + align-items: center; + + span { + font-weight: bold; + margin-left: 0.5em; + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + } + } + + & > ul { + font-weight: lighter; + font-size: 0.75em; + list-style: none; + text-align: right; + } + } +} diff --git a/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js new file mode 100644 index 00000000..c4ee4371 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { converseLocalizedHelpUrl } from '../../../shared/lib/help' +import { tplMUCApp } from '../../../shared/components/muc-app/templates/muc-app.js' +import { html } from 'lit' +import { repeat } from 'lit/directives/repeat.js' +import { __ } from 'i18n' + +function tplContent (el, mucModel, occupantModel) { + return html` + ${ + occupantModel + ? html` + + ` + : '' + } + ${ + el.results + ? repeat(el.results, (message) => message.id, message => tplMessage(message)) + : html`` + } + ` +} + +function tplMessage (model) { + return html` + ` +} + +export function tplMamSearchApp (el, mucModel, occupantModel) { + if (!mucModel) { + // should not happen + return html`` + } + + if (!el.show) { + return html`` + } + + // eslint-disable-next-line no-undef + const i18nSearch = __(LOC_message_search) + // eslint-disable-next-line no-undef + const i18nHelp = __(LOC_online_help) + const helpUrl = converseLocalizedHelpUrl({ + page: 'documentation/user/streamers/moderation' + }) + + return tplMUCApp( + el, + i18nSearch, + helpUrl, + i18nHelp, + tplContent(el, mucModel, occupantModel) + ) +} diff --git a/conversejs/custom/plugins/mam-search/templates/muc-mam-search-occupant.js b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-occupant.js new file mode 100644 index 00000000..408dcb18 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-occupant.js @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { html } from 'lit' +import { api } from '@converse/headless' +import { getAuthorStyle } from '../../../../src/utils/color.js' +import { __ } from 'i18n' + +export function tplMucMamSearchOccupant (el, occupant) { + const authorStyle = getAuthorStyle(occupant) + const jid = occupant.get('jid') + const occupantId = occupant.get('occupant_id') + + return html` + { + api.modal.show('converse-muc-occupant-modal', { model: occupant }, ev) + }}> + + + ${occupant.getDisplayName()} + +

    ` +} diff --git a/conversejs/custom/plugins/mam-search/utils.js b/conversejs/custom/plugins/mam-search/utils.js new file mode 100644 index 00000000..baaf7788 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/utils.js @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { api } from '../../../src/headless/index.js' +import { XMLNS_MAM_SEARCH } from './constants.js' +import { __ } from 'i18n' + +function getMessageActionButtons (messageActionsEl, buttons) { + const messageModel = messageActionsEl.model + if (!api.settings.get('livechat_mam_search_app_enabled')) { + return buttons + } + + if (messageModel.get('type') !== 'groupchat') { + // only on groupchat message. + return buttons + } + + if (!messageModel.occupant) { + return buttons + } + + const muc = messageModel.collection?.chatbox + if (!muc) { + return buttons + } + + if (!muc.features?.get?.(XMLNS_MAM_SEARCH)) { + return buttons + } + + const myself = muc.getOwnOccupant() + if (!myself || !['admin', 'owner'].includes(myself.get('affiliation'))) { + return buttons + } + + // eslint-disable-next-line no-undef + const i18nSearch = __(LOC_search_occupant_message) + + buttons.push({ + i18n_text: i18nSearch, + handler: async (ev) => { + ev.preventDefault() + api.livechat_mam_search.showMessagesFrom(messageModel.occupant) + }, + button_class: '', + icon_class: 'fa fa-magnifying-glass', + name: 'muc-mam-search' + }) + + return buttons +} + +export { + getMessageActionButtons +} diff --git a/conversejs/custom/templates/muc-chatarea.js b/conversejs/custom/templates/muc-chatarea.js index 6980b17f..d2067c4e 100644 --- a/conversejs/custom/templates/muc-chatarea.js +++ b/conversejs/custom/templates/muc-chatarea.js @@ -18,5 +18,10 @@ export default (o) => { ? html`` : '' } + ${ + o?.model && api.settings.get('livechat_mam_search_app_enabled') + ? html`` + : '' + } ${tplMUCChatarea(o)}` } diff --git a/conversejs/loc.keys.js b/conversejs/loc.keys.js index e761bdc6..8cdd6edc 100644 --- a/conversejs/loc.keys.js +++ b/conversejs/loc.keys.js @@ -60,7 +60,8 @@ const locKeys = [ 'moderator_note_search_for_participant', 'moderator_note_filters', 'moderator_note_original_nick', - 'search_occupant_message' + 'search_occupant_message', + 'message_search' ] module.exports = locKeys diff --git a/languages/en.yml b/languages/en.yml index 4db677b6..47c850d4 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -605,4 +605,5 @@ moderator_note_search_for_participant: 'Search notes about this participant' moderator_note_filters: 'Search filters' moderator_note_original_nick: 'Nickname of the participant at the time of the note creation' -search_occupant_message: 'Search all message from this participant' +search_occupant_message: 'Search all messages from this participant' +message_search: 'Message search' \ No newline at end of file From 966669ebbc2a742a1c8c785634ea57dbbf61bb94 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 5 Aug 2024 11:44:11 +0200 Subject: [PATCH 067/136] Search user messages WIP (#145) --- .../components/muc-mam-search-app-view.js | 11 +-- .../components/muc-mam-search-message-view.js | 82 +++++++++++++++++++ conversejs/custom/plugins/mam-search/index.js | 1 + .../styles/muc-mam-search-message.scss | 31 +++++++ .../templates/muc-mam-search-app.js | 15 ++-- .../templates/muc-mam-search-message.js | 31 +++++++ 6 files changed, 155 insertions(+), 16 deletions(-) create mode 100644 conversejs/custom/plugins/mam-search/components/muc-mam-search-message-view.js create mode 100644 conversejs/custom/plugins/mam-search/styles/muc-mam-search-message.scss create mode 100644 conversejs/custom/plugins/mam-search/templates/muc-mam-search-message.js diff --git a/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js b/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js index 3b3585f0..71150f30 100644 --- a/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js +++ b/conversejs/custom/plugins/mam-search/components/muc-mam-search-app-view.js @@ -3,7 +3,6 @@ // SPDX-License-Identifier: AGPL-3.0-only import { api } from '@converse/headless' -import { Collection } from '@converse/skeletor' import { parseMUCMessage } from '@converse/headless/plugins/muc/parsers.js' import { MUCApp } from '../../../shared/components/muc-app/index.js' import { tplMamSearchApp } from '../templates/muc-mam-search-app.js' @@ -42,12 +41,10 @@ export default class MUCMamSearchApp extends MUCApp { this.occupant = occupant // in case user did simultaneous requests const messages = await Promise.all(results.messages.map(s => parseMUCMessage(s, this.model))) - const col = new Collection() - for (const message of messages) { - // FIXME: this does not work for now, the collection is not properly initiated (no storage engine) - col.create(message) - } - this.results = col + // Note: we are not using MUCMessage objects, because we don't want the objects + // used here to interract with objects in the chat rooms. + // We could have a lot of unwanted sideeffects. + this.results = messages.reverse() }) } } diff --git a/conversejs/custom/plugins/mam-search/components/muc-mam-search-message-view.js b/conversejs/custom/plugins/mam-search/components/muc-mam-search-message-view.js new file mode 100644 index 00000000..60023641 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/components/muc-mam-search-message-view.js @@ -0,0 +1,82 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { CustomElement } from 'shared/components/element.js' +import { tplMucMamSearchMessage } from '../templates/muc-mam-search-message.js' +import { api } from '@converse/headless' + +import '../styles/muc-mam-search-message.scss' + +export default class MUCMamSearchMessageView extends CustomElement { + static get properties () { + return { + message: { type: Object, attribute: true }, // /!\ this is not a model + mucModel: { type: Object, attribute: true }, + searchOccupantModel: { type: Object, attribute: true } + } + } + + async initialize () { + this.listenTo(this.mucModel, 'change', () => this.requestUpdate()) + this.listenTo(this.searchOccupantModel, 'change', () => this.requestUpdate()) + } + + render () { + return tplMucMamSearchMessage(this, this.mucModel, this.searchOccupantModel, this.message) + } + + getMessageOccupant () { + const occupants = this.mucModel?.occupants + if (!occupants?.findOccupant) { return undefined } + + const nick = this.message.nick + const jid = this.message.from + const occupantId = this.message.occupant_id + + if (!nick && !jid && !occupantId) { + return undefined + } + + if (occupantId) { + const o = occupants.findOccupant({ occupant_id: occupantId }) + if (o) { + return o + } + } + + if (jid) { + const o = occupants.findOccupant({ + jid, + nick + }) + if (o) { + return o + } + } + + // If we don't find it, maybe it is a user that has spoken a long time ago (or never spoked). + // In such case, we must create a dummy occupant: + const o = occupants.create({ + nick, + occupant_id: occupantId, + jid + }) + return o + } + + getDateTime () { + if (!this.message.time) { + return undefined + } + try { + const d = new Date(this.message.time) + return d.toLocaleDateString() + ' - ' + d.toLocaleTimeString() + } catch (err) { + console.log(err) + return undefined + } + } +} + +api.elements.define('livechat-converse-muc-mam-search-message', MUCMamSearchMessageView) diff --git a/conversejs/custom/plugins/mam-search/index.js b/conversejs/custom/plugins/mam-search/index.js index d5efd510..edaf3faa 100644 --- a/conversejs/custom/plugins/mam-search/index.js +++ b/conversejs/custom/plugins/mam-search/index.js @@ -8,6 +8,7 @@ import mamSearchApi from './api.js' import './components/muc-mam-search-app-view.js' import './components/muc-mam-search-occupant-view.js' +import './components/muc-mam-search-message-view.js' converse.plugins.add('livechat-converse-mam-search', { dependencies: ['converse-muc', 'converse-muc-views'], diff --git a/conversejs/custom/plugins/mam-search/styles/muc-mam-search-message.scss b/conversejs/custom/plugins/mam-search/styles/muc-mam-search-message.scss new file mode 100644 index 00000000..2001bad6 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/styles/muc-mam-search-message.scss @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: 2024 John Livingston + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +.conversejs { + livechat-converse-muc-mam-search-message { + border: 1px solid var(--chatroom-head-bg-color); + border-radius: 4px; + display: block; + margin: 0.25em 0; + padding: 0.25em; + width: 100%; + + converse-rich-text { + color: var(--message-text-color); + font-size: var(--message-font-size); + padding: 0; + white-space: pre-wrap; + word-wrap: break-word; + word-break: break-word; + } + + .livechat-message-date { + font-size: 0.75em; + list-style: none; + text-align: right; + } + } +} diff --git a/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js index c4ee4371..8e3a9e10 100644 --- a/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js +++ b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-app.js @@ -19,22 +19,19 @@ function tplContent (el, mucModel, occupantModel) { ` : '' } +
    ${ el.results - ? repeat(el.results, (message) => message.id, message => tplMessage(message)) + ? repeat(el.results, (message) => message.id, message => { + return html`` + }) : html`` } ` } -function tplMessage (model) { - return html` - ` -} - export function tplMamSearchApp (el, mucModel, occupantModel) { if (!mucModel) { // should not happen diff --git a/conversejs/custom/plugins/mam-search/templates/muc-mam-search-message.js b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-message.js new file mode 100644 index 00000000..48f5b5a5 --- /dev/null +++ b/conversejs/custom/plugins/mam-search/templates/muc-mam-search-message.js @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 John Livingston +// +// SPDX-License-Identifier: AGPL-3.0-only + +import { html } from 'lit' + +/** + * Renders the message as a search result. + * @param el The message element + * @param mucModel The MUC model + * @param searchOccupantModel The model of the occupant for which we are searching + * @param message The message (warning: this is not a model) + * @returns TemplateResult (or equivalent) + */ +export function tplMucMamSearchMessage (el, mucModel, searchOccupantModel, message) { + const occupant = el.getMessageOccupant() + return html` + ${ + occupant + ? html` + ` + : '' + } + + +
    ${el.getDateTime()}
    ` +} From e665823f5b1feaca77cdbff4122a91493d74e39e Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 5 Aug 2024 12:08:45 +0200 Subject: [PATCH 068/136] Message search documentation (#145) --- CHANGELOG.md | 2 + .../user/streamers/moderation.md | 21 +++++++ .../content/en/images/message_search.png | Bin 0 -> 151861 bytes support/documentation/po/livechat.ar.po | 46 ++++++++++++--- support/documentation/po/livechat.ca.po | 46 ++++++++++++--- support/documentation/po/livechat.cs.po | 46 ++++++++++++--- support/documentation/po/livechat.de.po | 49 +++++++++++++--- support/documentation/po/livechat.el.po | 46 ++++++++++++--- support/documentation/po/livechat.en.pot | 53 +++++++++++++++--- support/documentation/po/livechat.eo.po | 46 ++++++++++++--- support/documentation/po/livechat.es.po | 46 ++++++++++++--- support/documentation/po/livechat.eu.po | 46 ++++++++++++--- support/documentation/po/livechat.fa.po | 46 ++++++++++++--- support/documentation/po/livechat.fi.po | 46 ++++++++++++--- support/documentation/po/livechat.fr.po | 49 +++++++++++++--- support/documentation/po/livechat.gd.po | 46 ++++++++++++--- support/documentation/po/livechat.gl.po | 46 ++++++++++++--- support/documentation/po/livechat.hr.po | 48 +++++++++++++--- support/documentation/po/livechat.hu.po | 46 ++++++++++++--- support/documentation/po/livechat.is.po | 46 ++++++++++++--- support/documentation/po/livechat.it.po | 46 ++++++++++++--- support/documentation/po/livechat.ja.po | 48 +++++++++++++--- support/documentation/po/livechat.kab.po | 46 ++++++++++++--- support/documentation/po/livechat.nb.po | 46 ++++++++++++--- support/documentation/po/livechat.nl.po | 46 ++++++++++++--- support/documentation/po/livechat.nn.po | 46 ++++++++++++--- support/documentation/po/livechat.oc.po | 46 ++++++++++++--- support/documentation/po/livechat.pl.po | 46 ++++++++++++--- support/documentation/po/livechat.pt.po | 46 ++++++++++++--- support/documentation/po/livechat.ru.po | 46 ++++++++++++--- support/documentation/po/livechat.sq.po | 46 ++++++++++++--- support/documentation/po/livechat.sv.po | 46 ++++++++++++--- support/documentation/po/livechat.th.po | 46 ++++++++++++--- support/documentation/po/livechat.tok.po | 46 ++++++++++++--- support/documentation/po/livechat.tr.po | 44 +++++++++++++-- support/documentation/po/livechat.uk.po | 46 ++++++++++++--- support/documentation/po/livechat.vi.po | 46 ++++++++++++--- support/documentation/po/livechat.zh-Hans.po | 46 ++++++++++++--- support/documentation/po/livechat.zh-Hant.po | 46 ++++++++++++--- 39 files changed, 1442 insertions(+), 252 deletions(-) create mode 100644 support/documentation/content/en/images/message_search.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 00debd69..277296f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 11.0.0 (Not Released Yet) +TODO: actions related to #144 and #145 must be added in the occupant list (waiting for some work on Converse to do this). + ### New features * Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features. diff --git a/support/documentation/content/en/documentation/user/streamers/moderation.md b/support/documentation/content/en/documentation/user/streamers/moderation.md index 36954b97..7eff8b86 100644 --- a/support/documentation/content/en/documentation/user/streamers/moderation.md +++ b/support/documentation/content/en/documentation/user/streamers/moderation.md @@ -86,6 +86,27 @@ In the form, you will find a "{{% livechat_label livechat_configuration_channel_ You can choose to enable or disable this feature for new chatrooms on the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel). +## Participant message history search + +{{% notice info %}} +This feature comes with the livechat plugin version 11.0.0. +{{% /notice %}} + +As a room admin or owner, you can search all messages sent by a given participant. + +To do so, you have several ways: + +* using the "{{% livechat_label search_occupant_message %}}" action in the dropdown menu besides chat messages + +![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px) + +{{% notice tip %}} +To have more space and better readability, open the chat in full-page mode. +{{% /notice %}} + +The search result will also include all messages related to participants who had the same nickname. +You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html). + ## Delete room content You can delete old rooms: join the room, and use the menu on the top to destroy the room. diff --git a/support/documentation/content/en/images/message_search.png b/support/documentation/content/en/images/message_search.png new file mode 100644 index 0000000000000000000000000000000000000000..8177be9b49c639fedca77b550a8b6c9735fb0faf GIT binary patch literal 151861 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 z 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 literal 0 HcmV?d00001 diff --git a/support/documentation/po/livechat.ar.po b/support/documentation/po/livechat.ar.po index b4ed0913..40ae42f3 100644 --- a/support/documentation/po/livechat.ar.po +++ b/support/documentation/po/livechat.ar.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-01-17 11:38+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Arabic \n" @@ -3360,6 +3360,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3472,12 +3510,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.ca.po b/support/documentation/po/livechat.ca.po index 6b3af074..d2f3d63f 100644 --- a/support/documentation/po/livechat.ca.po +++ b/support/documentation/po/livechat.ca.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.cs.po b/support/documentation/po/livechat.cs.po index 5504d7aa..20a4c0a9 100644 --- a/support/documentation/po/livechat.cs.po +++ b/support/documentation/po/livechat.cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index 49c8ca78..f2303545 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-07-30 06:49+0000\n" "Last-Translator: Victor Hampel \n" "Language-Team: German \n" @@ -3433,6 +3433,47 @@ msgstr "Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\"." +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy, no-wrap +#| msgid "Participants list" +msgid "Participant message history search" +msgstr "Teilnehmerliste" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "![Poll start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat im neuen Fenster." + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3565,12 +3606,6 @@ msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.p msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat im neuen Fenster." - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.el.po b/support/documentation/po/livechat.el.po index 4b910182..ba16947e 100644 --- a/support/documentation/po/livechat.el.po +++ b/support/documentation/po/livechat.el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.en.pot b/support/documentation/po/livechat.en.pot index 36609a90..428b083e 100644 --- a/support/documentation/po/livechat.en.pot +++ b/support/documentation/po/livechat.en.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3784,6 +3784,50 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +#, markdown-text +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, markdown-text +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, markdown-text, no-wrap @@ -3911,13 +3955,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -#, markdown-text -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.eo.po b/support/documentation/po/livechat.eo.po index a387c5bf..9da7dab8 100644 --- a/support/documentation/po/livechat.eo.po +++ b/support/documentation/po/livechat.eo.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.es.po b/support/documentation/po/livechat.es.po index 8e7dcb08..1b5700bc 100644 --- a/support/documentation/po/livechat.es.po +++ b/support/documentation/po/livechat.es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-04-16 21:38+0000\n" "Last-Translator: rnek0 \n" "Language-Team: Spanish \n" @@ -3391,6 +3391,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3503,12 +3541,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.eu.po b/support/documentation/po/livechat.eu.po index 332251e9..6074dfa2 100644 --- a/support/documentation/po/livechat.eu.po +++ b/support/documentation/po/livechat.eu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.fa.po b/support/documentation/po/livechat.fa.po index b1d7c9b4..e0795513 100644 --- a/support/documentation/po/livechat.fa.po +++ b/support/documentation/po/livechat.fa.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.fi.po b/support/documentation/po/livechat.fi.po index 83a728ff..25df7a60 100644 --- a/support/documentation/po/livechat.fi.po +++ b/support/documentation/po/livechat.fi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Finnish \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.fr.po b/support/documentation/po/livechat.fr.po index d0abf56c..57d355a1 100644 --- a/support/documentation/po/livechat.fr.po +++ b/support/documentation/po/livechat.fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-07-18 15:05+0000\n" "Last-Translator: John Livingston \n" "Language-Team: French \n" @@ -3455,6 +3455,47 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "Pour activer ou désactiver cette fonctionnalité, utilisez le [menu déroulant du chat](/peertube-plugin-livechat/fr/documentation/user/viewers), puis ouvrez le menu \"configurer\". Dans le formulaire, vous trouverez une case à cocher \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"." +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy, no-wrap +#| msgid "Participants list" +msgid "Participant message history search" +msgstr "Liste des participant⋅es" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "![Poll start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "![Début du sondage](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "Pour avoir plus d'espace et une meilleure lisibilité, ouvrez le tchat en mode pleine page." + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3587,12 +3628,6 @@ msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_video_1 msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![Application Tâches](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "Pour avoir plus d'espace et une meilleure lisibilité, ouvrez le tchat en mode pleine page." - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.gd.po b/support/documentation/po/livechat.gd.po index 2eaf62f4..2432068f 100644 --- a/support/documentation/po/livechat.gd.po +++ b/support/documentation/po/livechat.gd.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Gaelic \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.gl.po b/support/documentation/po/livechat.gl.po index 3aa07751..d1590484 100644 --- a/support/documentation/po/livechat.gl.po +++ b/support/documentation/po/livechat.gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.hr.po b/support/documentation/po/livechat.hr.po index 15b49299..2cae3fa5 100644 --- a/support/documentation/po/livechat.hr.po +++ b/support/documentation/po/livechat.hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-07-19 17:45+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -3358,6 +3358,46 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3479,12 +3519,6 @@ msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_ msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![Timer odgode moderiranja](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.hu.po b/support/documentation/po/livechat.hu.po index 8bb78363..de58c11e 100644 --- a/support/documentation/po/livechat.hu.po +++ b/support/documentation/po/livechat.hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.is.po b/support/documentation/po/livechat.is.po index 48265ac1..e8119c43 100644 --- a/support/documentation/po/livechat.is.po +++ b/support/documentation/po/livechat.is.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Icelandic \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.it.po b/support/documentation/po/livechat.it.po index c70e2691..cba34373 100644 --- a/support/documentation/po/livechat.it.po +++ b/support/documentation/po/livechat.it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 14:21+0000\n" "Last-Translator: John Livingston \n" "Language-Team: Italian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.ja.po b/support/documentation/po/livechat.ja.po index 971bd21a..f5ed7e29 100644 --- a/support/documentation/po/livechat.ja.po +++ b/support/documentation/po/livechat.ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-03-10 20:38+0000\n" "Last-Translator: \"T.S\" \n" "Language-Team: Japanese \n" @@ -3457,6 +3457,46 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "PeerTube ライブチャットプラグイン" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, fuzzy +#| msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3577,12 +3617,6 @@ msgstr "![チャット画面のスクリーンショット](/peertube-plugin-liv msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "![チャット画面のスクリーンショット](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.kab.po b/support/documentation/po/livechat.kab.po index 9cc219b2..d8012f8f 100644 --- a/support/documentation/po/livechat.kab.po +++ b/support/documentation/po/livechat.kab.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.nb.po b/support/documentation/po/livechat.nb.po index 3179f6aa..e95c8723 100644 --- a/support/documentation/po/livechat.nb.po +++ b/support/documentation/po/livechat.nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Bokmål \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.nl.po b/support/documentation/po/livechat.nl.po index 20ea3bbe..b76d0dce 100644 --- a/support/documentation/po/livechat.nl.po +++ b/support/documentation/po/livechat.nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dutch \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.nn.po b/support/documentation/po/livechat.nn.po index 43a27627..421cd464 100644 --- a/support/documentation/po/livechat.nn.po +++ b/support/documentation/po/livechat.nn.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian Nynorsk \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.oc.po b/support/documentation/po/livechat.oc.po index 63e49190..690eaafb 100644 --- a/support/documentation/po/livechat.oc.po +++ b/support/documentation/po/livechat.oc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Occitan \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.pl.po b/support/documentation/po/livechat.pl.po index e9fdc6a4..5f513979 100644 --- a/support/documentation/po/livechat.pl.po +++ b/support/documentation/po/livechat.pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Polish \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.pt.po b/support/documentation/po/livechat.pt.po index ce97709c..563389b6 100644 --- a/support/documentation/po/livechat.pt.po +++ b/support/documentation/po/livechat.pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.ru.po b/support/documentation/po/livechat.ru.po index 1a394cd1..875241af 100644 --- a/support/documentation/po/livechat.ru.po +++ b/support/documentation/po/livechat.ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Russian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.sq.po b/support/documentation/po/livechat.sq.po index 4e6c077a..48538659 100644 --- a/support/documentation/po/livechat.sq.po +++ b/support/documentation/po/livechat.sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.sv.po b/support/documentation/po/livechat.sv.po index 3a5bdf4e..552f777b 100644 --- a/support/documentation/po/livechat.sv.po +++ b/support/documentation/po/livechat.sv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.th.po b/support/documentation/po/livechat.th.po index 2e4bb942..c91b64ff 100644 --- a/support/documentation/po/livechat.th.po +++ b/support/documentation/po/livechat.th.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:52+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.tok.po b/support/documentation/po/livechat.tok.po index e906b4f2..46a81b59 100644 --- a/support/documentation/po/livechat.tok.po +++ b/support/documentation/po/livechat.tok.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Toki Pona \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.tr.po b/support/documentation/po/livechat.tr.po index ff09d94b..6f059bb6 100644 --- a/support/documentation/po/livechat.tr.po +++ b/support/documentation/po/livechat.tr.po @@ -3333,6 +3333,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3445,12 +3483,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.uk.po b/support/documentation/po/livechat.uk.po index a3c584e7..b571d3d9 100644 --- a/support/documentation/po/livechat.uk.po +++ b/support/documentation/po/livechat.uk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.vi.po b/support/documentation/po/livechat.vi.po index 1a06eafa..d288a221 100644 --- a/support/documentation/po/livechat.vi.po +++ b/support/documentation/po/livechat.vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.zh-Hans.po b/support/documentation/po/livechat.zh-Hans.po index 1488034b..9daf43a9 100644 --- a/support/documentation/po/livechat.zh-Hans.po +++ b/support/documentation/po/livechat.zh-Hans.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md diff --git a/support/documentation/po/livechat.zh-Hant.po b/support/documentation/po/livechat.zh-Hant.po index 108c27c3..65b70262 100644 --- a/support/documentation/po/livechat.zh-Hant.po +++ b/support/documentation/po/livechat.zh-Hant.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: peertube-plugin-livechat-documentation VERSION\n" -"POT-Creation-Date: 2024-07-31 23:19+0200\n" +"POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2023-07-17 10:53+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Traditional) \n" @@ -3352,6 +3352,44 @@ msgstr "" msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." msgstr "" +#. type: Title ## +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#, no-wrap +msgid "Participant message history search" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "To do so, you have several ways:" +msgstr "" + +#. type: Bullet: '* ' +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md +#: support/documentation/content/en/documentation/user/streamers/tasks.md +msgid "To have more space and better readability, open the chat in full-page mode." +msgstr "" + +#. type: Plain text +#: build/documentation/pot_in/documentation/user/streamers/moderation.md +msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgstr "" + #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, no-wrap @@ -3464,12 +3502,6 @@ msgstr "" msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" msgstr "" -#. type: Plain text -#: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "" - #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/polls.md From d412f86577ca705ddcd6a0b0d5af22bb50938f07 Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Mon, 5 Aug 2024 09:46:47 +0000 Subject: [PATCH 069/136] Translated using Weblate (German) Currently translated at 100.0% (282 of 282 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/de/ --- languages/de.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/languages/de.yml b/languages/de.yml index b4578675..0b952aac 100644 --- a/languages/de.yml +++ b/languages/de.yml @@ -562,3 +562,14 @@ livechat_configuration_channel_anonymize_moderation_label: Moderationsaktionen a livechat_configuration_channel_anonymize_moderation_desc: "Moderationsaktionen anonymisieren Standardwert für neue Räume.\nWenn dies aktiviert ist, werden Moderationsaktionen anonymisiert, um zu vermeiden, dass bekannt wird, wer Teilnehmer bannt/verweist/....\n" +moderator_notes_create_error: Fehler beim Speichern der Notiz +moderator_note_description: Beschreibung +moderator_note_delete: Notiz löschen +moderator_note_create_for_participant: Erstellen Sie eine neue Notiz zu diesem Teilnehmer +moderator_note_search_for_participant: Suche Notizen zu diesem Teilnehmer +moderator_note_filters: Suchfilter +moderator_note_original_nick: Nickname des Teilnehmers zum Zeitpunkt der Erstellung + der Notiz +moderator_note_create: Eine neue Notiz erstellen +moderator_note_delete_confirm: Sind Sie sicher, dass Sie diese Notiz löschen wollen? +moderator_notes: Moderatornotizen From 9746f3d86ef293a4beb4f47d8a94a77450e7f1fa Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 5 Aug 2024 12:36:13 +0000 Subject: [PATCH 070/136] Translated using Weblate (English) Currently translated at 100.0% (284 of 284 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/en/ --- languages/en.yml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/languages/en.yml b/languages/en.yml index 47c850d4..ef661f5c 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -568,18 +568,23 @@ livechat_configuration_channel_terms_desc: | new_poll: Create a new poll poll: Poll poll_title: New poll -poll_instructions: Complete and submit this form to create a new poll. This will end and replace any existing poll. +poll_instructions: Complete and submit this form to create a new poll. This will end + and replace any existing poll. poll_question: Question poll_duration: Poll duration (in minutes) poll_anonymous_results: Anonymous results poll_choice_n: 'Choice {{N}}:' poll_end: 'Poll ends at:' -poll_vote_instructions: "To vote, click on your choice or send a message with an exclamation mark followed by your choice number (Example: !1)." -poll_vote_instructions_xmpp: "Send a message with an exclamation mark followed by your choice number to vote. Example: !1" +poll_vote_instructions: "To vote, click on your choice or send a message with an exclamation + mark followed by your choice number (Example: !1)." +poll_vote_instructions_xmpp: "Send a message with an exclamation mark followed by + your choice number to vote. Example: !1" poll_is_over: This poll is now over. poll_choice_invalid: This choice is not valid. -poll_anonymous_vote_ok: Your vote is taken into account. Votes are anonymous, they will not be shown to other participants. -poll_vote_ok: Your vote has been taking into account, the counters will be updated in a moment. +poll_anonymous_vote_ok: Your vote is taken into account. Votes are anonymous, they + will not be shown to other participants. +poll_vote_ok: Your vote has been taking into account, the counters will be updated + in a moment. moderation_delay: Moderation delay livechat_configuration_channel_moderation_delay_desc: | @@ -591,10 +596,10 @@ livechat_configuration_channel_moderation_delay_desc: | livechat_configuration_channel_anonymize_moderation_label: "Anonymize moderation actions" livechat_configuration_channel_anonymize_moderation_desc: | - Anonymize moderation actions default value for new rooms. - When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants. + Anonymize moderation actions default value for new rooms. + When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants. -moderator_notes: Moderator notes +moderator_notes: Moderation notes moderator_notes_create_error: 'Error when saving the note' moderator_note_create: 'Create a new note' moderator_note_description: 'Description' @@ -603,7 +608,8 @@ moderator_note_delete_confirm: 'Are you sure you want to delete this note?' moderator_note_create_for_participant: 'Create a new note about this participant' moderator_note_search_for_participant: 'Search notes about this participant' moderator_note_filters: 'Search filters' -moderator_note_original_nick: 'Nickname of the participant at the time of the note creation' +moderator_note_original_nick: 'Nickname of the participant at the time of the note + creation' search_occupant_message: 'Search all messages from this participant' -message_search: 'Message search' \ No newline at end of file +message_search: 'Message search' From 631d8c7a6b2caad4841d006f3afae78c41dd4c3a Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 5 Aug 2024 12:34:52 +0000 Subject: [PATCH 071/136] Translated using Weblate (French) Currently translated at 100.0% (284 of 284 strings) Translation: PeerTube LiveChat/Peertube Plugin LiveChat Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/fr/ --- languages/fr.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/languages/fr.yml b/languages/fr.yml index e2062864..3616b09b 100644 --- a/languages/fr.yml +++ b/languages/fr.yml @@ -574,3 +574,22 @@ livechat_configuration_channel_moderation_delay_desc: "Valeur par défaut du dé qu'un utilisateur⋅rice ne puisse le lire.\n\n" moderation_delay: Délai de modération avatar_set_option_none: Aucun +livechat_configuration_channel_anonymize_moderation_label: Anonymiser les actions + de modération +livechat_configuration_channel_anonymize_moderation_desc: "Anonymiser les actions + de modération : valeur par défaut pour les nouveaux salons.\nLorsque cette option + est activée, les actions de modération sont rendues anonymes, afin d'éviter de révéler + qui bannit/expulse/... les occupants.\n" +moderator_notes_create_error: Erreur lors de l'enregistrement de la note +moderator_note_description: Description +moderator_note_delete: Supprimer la note +moderator_note_delete_confirm: Êtes-vous sûr de vouloir supprimer cette note ? +moderator_note_search_for_participant: Recherche de notes sur ce⋅tte participant⋅e +moderator_note_filters: Filtres de recherche +moderator_note_original_nick: Pseudonyme du participant⋅e au moment de la création + de la note +moderator_note_create: Créer une nouvelle note +moderator_note_create_for_participant: Créer une nouvelle note sur ce⋅tte participant⋅e +moderator_notes: Notes de modération +message_search: Recherche de messages +search_occupant_message: Rechercher tous les messages de ce⋅tte participant⋅e From 5d843ebf926d5231d35d7308c83a5a5b45347d26 Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Mon, 5 Aug 2024 09:48:10 +0000 Subject: [PATCH 072/136] Translated using Weblate (German) Currently translated at 100.0% (851 of 851 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/ --- support/documentation/po/livechat.de.po | 5150 ++++++++++++++++++----- 1 file changed, 4046 insertions(+), 1104 deletions(-) diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index f2303545..1f445708 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -9,8 +9,10 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-08-05 12:07+0200\n" "PO-Revision-Date: 2024-07-30 06:49+0000\n" -"Last-Translator: Victor Hampel \n" -"Language-Team: German \n" +"Last-Translator: Victor Hampel \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,13 +34,26 @@ msgstr "Kontaktieren Sie mich" #. type: Plain text #: support/documentation/content/en/contact/_index.md -msgid "If you have any question, or if you want to talk about this plugin, you can join this XMPP room with any Jabber client: [plugin-livechat-support@room.im.yiny.org](xmpp:plugin-livechat-support@room.im.yiny.org?join)." -msgstr "Wenn Sie eine Frage haben oder über dieses Plugin sprechen möchten, können Sie diesem XMPP-Raum mit einem beliebigen Jabber-Client beitreten: [plugin-livechat-support@room.im.yiny.org](xmpp:plugin-livechat-support@room.im.yiny.org?join)." +msgid "" +"If you have any question, or if you want to talk about this plugin, you can " +"join this XMPP room with any Jabber client: [plugin-livechat-support@room.im." +"yiny.org](xmpp:plugin-livechat-support@room.im.yiny.org?join)." +msgstr "" +"Wenn Sie eine Frage haben oder über dieses Plugin sprechen möchten, können " +"Sie diesem XMPP-Raum mit einem beliebigen Jabber-Client beitreten: [plugin-" +"livechat-support@room.im.yiny.org](xmpp:plugin-livechat-support@room.im.yiny." +"org?join)." #. type: Plain text #: support/documentation/content/en/contact/_index.md -msgid "If you want to support the project financially, you can contact me by mail at git.[at].john-livingston.fr, or check my [Liberapay profile](https://liberapay.com/JohnLivingston/)." -msgstr "Wenn Sie das Projekt finanziell unterstützen möchten, können Sie mich per E-Mail unter git.[at].john-livingston.fr kontaktieren oder mein [Liberapay-Profil](https://liberapay.com/JohnLivingston/) ansehen." +msgid "" +"If you want to support the project financially, you can contact me by mail " +"at git.[at].john-livingston.fr, or check my [Liberapay profile](https://" +"liberapay.com/JohnLivingston/)." +msgstr "" +"Wenn Sie das Projekt finanziell unterstützen möchten, können Sie mich per E-" +"Mail unter git.[at].john-livingston.fr kontaktieren oder mein [Liberapay-" +"Profil](https://liberapay.com/JohnLivingston/) ansehen." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/contributing/codeofconduct/_index.md @@ -54,8 +69,26 @@ msgstr "Verhaltenskodex" #. type: Plain text #: support/documentation/content/en/contributing/codeofconduct/_index.md -msgid "This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). Translations are available at [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement by mail at git.[at].john-livingston.fr." -msgstr "Dieser Verhaltenskodex basiert auf dem [Contributor Covenant](https://www.contributor-covenant.org), Version 2.1, verfügbar unter [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). Übersetzungen sind unter [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations) verfügbar. Fälle von beleidigendem, belästigendem oder anderweitig inakzeptablem Verhalten können den für die Durchsetzung verantwortlichen Gemeinschaftsleitern per E-Mail an git.[at].john-livingston.fr gemeldet werden." +msgid "" +"This Code of Conduct is adapted from the [Contributor Covenant](https://www." +"contributor-covenant.org), version 2.1, available at [https://www." +"contributor-covenant.org/version/2/1/code_of_conduct.html](https://www." +"contributor-covenant.org/version/2/1/code_of_conduct.html). Translations " +"are available at [https://www.contributor-covenant.org/translations](https://" +"www.contributor-covenant.org/translations). Instances of abusive, " +"harassing, or otherwise unacceptable behavior may be reported to the " +"community leaders responsible for enforcement by mail at git.[at].john-" +"livingston.fr." +msgstr "" +"Dieser Verhaltenskodex basiert auf dem [Contributor Covenant](https://www." +"contributor-covenant.org), Version 2.1, verfügbar unter [https://www." +"contributor-covenant.org/version/2/1/code_of_conduct.html](https://www." +"contributor-covenant.org/version/2/1/code_of_conduct.html). Übersetzungen " +"sind unter [https://www.contributor-covenant.org/translations](https://www." +"contributor-covenant.org/translations) verfügbar. Fälle von beleidigendem, " +"belästigendem oder anderweitig inakzeptablem Verhalten können den für die " +"Durchsetzung verantwortlichen Gemeinschaftsleitern per E-Mail an git.[at]." +"john-livingston.fr gemeldet werden." #. type: Title ## #: support/documentation/content/en/contributing/develop/_index.md @@ -65,8 +98,16 @@ msgstr "Entwickeln" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Always talk about features you want to develop by creating/finding and commenting the issue tackling your problem before you start working on it, and inform the community that you begin coding by claiming the issue." -msgstr "Sprechen Sie immer über die Funktionen, die Sie entwickeln wollen, indem Sie das Issue, das Ihr Problem behandelt, erstellen/finden und kommentieren bevor Sie mit der Arbeit daran beginnen und informieren Sie die Gemeinschaft darüber, dass Sie mit der Programmierung beginnen, indem Sie das Thema für sich beanspruchen." +msgid "" +"Always talk about features you want to develop by creating/finding and " +"commenting the issue tackling your problem before you start working on it, " +"and inform the community that you begin coding by claiming the issue." +msgstr "" +"Sprechen Sie immer über die Funktionen, die Sie entwickeln wollen, indem Sie " +"das Issue, das Ihr Problem behandelt, erstellen/finden und kommentieren " +"bevor Sie mit der Arbeit daran beginnen und informieren Sie die Gemeinschaft " +"darüber, dass Sie mit der Programmierung beginnen, indem Sie das Thema für " +"sich beanspruchen." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md @@ -75,8 +116,12 @@ msgstr "Bitte benutzen Sie den `main` Zweig." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Until march 2023, contribution were made on the `develop` branch. This procedure is now deprecated." -msgstr "Bis März 2023 wurden die Beiträge auf dem `develop` Zweig erstellt. Dieses Verfahren ist nun veraltet." +msgid "" +"Until march 2023, contribution were made on the `develop` branch. This " +"procedure is now deprecated." +msgstr "" +"Bis März 2023 wurden die Beiträge auf dem `develop` Zweig erstellt. Dieses " +"Verfahren ist nun veraltet." #. type: Title ## #: support/documentation/content/en/contributing/develop/_index.md @@ -87,7 +132,8 @@ msgstr "Voraussetzung für die Erstellung dieses Plugins" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md msgid "It is highly recommended to be familiar with following concepts:" -msgstr "Es wird dringend empfohlen, mit den folgenden Konzepten vertraut zu sein:" +msgstr "" +"Es wird dringend empfohlen, mit den folgenden Konzepten vertraut zu sein:" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/develop/_index.md @@ -151,13 +197,26 @@ msgstr "`reuse`" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Please note that this plugin needs an AppImage for the Prosody XMPP server. This AppImage is provided by the [Prosody AppImage](https://github.com/JohnXLivingston/prosody-appimage) sideproject. The `build-prosody.sh` script download binaries attached to this remote repository, and checks that their sha256 hashsum are correct." -msgstr "Bitte beachten Sie, dass dieses Plugin ein AppImage für den Prosody XMPP Server benötigt. Dieses AppImage wird vom [Prosody AppImage](https://github.com/JohnXLivingston/prosody-appimage) Seitenprojekt bereitgestellt. Das Skript `build-prosody.sh` lädt Binärdateien herunter, die an dieses entfernte Repository angehängt sind, und überprüft, ob ihre sha256-Hashsumme korrekt ist." +msgid "" +"Please note that this plugin needs an AppImage for the Prosody XMPP server. " +"This AppImage is provided by the [Prosody AppImage](https://github.com/" +"JohnXLivingston/prosody-appimage) sideproject. The `build-prosody.sh` " +"script download binaries attached to this remote repository, and checks that " +"their sha256 hashsum are correct." +msgstr "" +"Bitte beachten Sie, dass dieses Plugin ein AppImage für den Prosody XMPP " +"Server benötigt. Dieses AppImage wird vom [Prosody AppImage](https://github." +"com/JohnXLivingston/prosody-appimage) Seitenprojekt bereitgestellt. Das " +"Skript `build-prosody.sh` lädt Binärdateien herunter, die an dieses " +"entfernte Repository angehängt sind, und überprüft, ob ihre sha256-Hashsumme " +"korrekt ist." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md msgid "Clone the repository, buid the plugin, and create your feature branch:" -msgstr "Klonen Sie das Repository, bauen Sie das Plugin, und erstellen Sie Ihren Feature-Zweig:" +msgstr "" +"Klonen Sie das Repository, bauen Sie das Plugin, und erstellen Sie Ihren " +"Feature-Zweig:" #. type: Fenced code block (bash) #: support/documentation/content/en/contributing/develop/_index.md @@ -205,23 +264,45 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Once you are ready to show your code to ask for feedback, submit a *draft* Pull Request. Once you are ready for a code review before merge, submit a Pull Request. In any case, please link your PR to the issues it solves by using the GitHub syntax: \"fixes #issue_number\"." -msgstr "Sobald Sie bereit sind, Ihren Code zu zeigen und um Feedback zu bitten, reichen Sie einen *Entwurf* für einen Pull Request ein. Sobald Sie bereit für eine Codeüberprüfung vor der Zusammenführung sind, reichen Sie einen Pull Request ein. In jedem Fall sollten Sie Ihren PR mit dem Problem, die er behebt, verlinken, indem Sie die GitHub-Syntax verwenden: \"fixes #issue_number\"." +msgid "" +"Once you are ready to show your code to ask for feedback, submit a *draft* " +"Pull Request. Once you are ready for a code review before merge, submit a " +"Pull Request. In any case, please link your PR to the issues it solves by " +"using the GitHub syntax: \"fixes #issue_number\"." +msgstr "" +"Sobald Sie bereit sind, Ihren Code zu zeigen und um Feedback zu bitten, " +"reichen Sie einen *Entwurf* für einen Pull Request ein. Sobald Sie bereit " +"für eine Codeüberprüfung vor der Zusammenführung sind, reichen Sie einen " +"Pull Request ein. In jedem Fall sollten Sie Ihren PR mit dem Problem, die er " +"behebt, verlinken, indem Sie die GitHub-Syntax verwenden: \"fixes " +"#issue_number\"." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "The front-end code is in the `client` folder, the back-end code in `server`. There are some shared code in `shared` folder." -msgstr "Der Front-End-Code befindet sich im Ordner `client`, der Back-End-Code im Ordner `server`. Es gibt einige gemeinsam genutzte Codes im `shared` Ordner." +msgid "" +"The front-end code is in the `client` folder, the back-end code in `server`. " +"There are some shared code in `shared` folder." +msgstr "" +"Der Front-End-Code befindet sich im Ordner `client`, der Back-End-Code im " +"Ordner `server`. Es gibt einige gemeinsam genutzte Codes im `shared` Ordner." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "For general instructions (developping plugins, building, installation, ...), please refer to the [Peertube documentation](https://docs.joinpeertube.org/contribute-plugins?id=write-a-plugintheme)." -msgstr "Für allgemeine Anweisungen (Entwicklung von Plugins, Erstellung, Installation, ...), lesen Sie bitte die [Peertube Dokumentation](https://docs.joinpeertube.org/contribute-plugins?id=write-a-plugintheme)." +msgid "" +"For general instructions (developping plugins, building, installation, ...), " +"please refer to the [Peertube documentation](https://docs.joinpeertube.org/" +"contribute-plugins?id=write-a-plugintheme)." +msgstr "" +"Für allgemeine Anweisungen (Entwicklung von Plugins, Erstellung, " +"Installation, ...), lesen Sie bitte die [Peertube Dokumentation](https://" +"docs.joinpeertube.org/contribute-plugins?id=write-a-plugintheme)." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md msgid "You can build the plugin with extra debug features simply by using:" -msgstr "Sie können das Plugin mit zusätzlichen Debug-Funktionen bauen, indem Sie es einfach benutzen:" +msgstr "" +"Sie können das Plugin mit zusätzlichen Debug-Funktionen bauen, indem Sie es " +"einfach benutzen:" #. type: Fenced code block (bash) #: support/documentation/content/en/contributing/develop/_index.md @@ -231,8 +312,23 @@ msgstr "NODE_ENV=dev npm run build\n" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "This plugin is [REUSE](https://reuse.software/) compliant: it uses SPDX headers to identify licensing information of its source code. More information on the [REUSE](https://reuse.software/) website. You can use the [reuse](https://reuse.readthedocs.io/en/stable/readme.html#) command line tool to help you update headers. The `npm run lint` command will use the `reuse` command to check compliance. Don't forget to add your copyright information in SPDX headers when you modify some code." -msgstr "Dieses Plugin ist [REUSE](https://reuse.software/) konform: Es verwendet SPDX-Header, um die Lizenzinformationen seines Quellcodes zu identifizieren. Weitere Informationen finden Sie auf der [REUSE](https://reuse.software/) Website. Sie können das [reuse](https://reuse.readthedocs.io/en/stable/readme.html#) Kommandozeilenwerkzeug verwenden, um die Header zu aktualisieren. Der Befehl `npm run lint` verwendet den Befehl `reuse`, um die Einhaltung zu überprüfen. Vergessen Sie nicht, Ihre Copyright-Informationen in die SPDX-Header einzufügen, wenn Sie Code ändern." +msgid "" +"This plugin is [REUSE](https://reuse.software/) compliant: it uses SPDX " +"headers to identify licensing information of its source code. More " +"information on the [REUSE](https://reuse.software/) website. You can use " +"the [reuse](https://reuse.readthedocs.io/en/stable/readme.html#) command " +"line tool to help you update headers. The `npm run lint` command will use " +"the `reuse` command to check compliance. Don't forget to add your copyright " +"information in SPDX headers when you modify some code." +msgstr "" +"Dieses Plugin ist [REUSE](https://reuse.software/) konform: Es verwendet " +"SPDX-Header, um die Lizenzinformationen seines Quellcodes zu " +"identifizieren. Weitere Informationen finden Sie auf der [REUSE](https://" +"reuse.software/) Website. Sie können das [reuse](https://reuse.readthedocs." +"io/en/stable/readme.html#) Kommandozeilenwerkzeug verwenden, um die Header " +"zu aktualisieren. Der Befehl `npm run lint` verwendet den Befehl `reuse`, " +"um die Einhaltung zu überprüfen. Vergessen Sie nicht, Ihre Copyright-" +"Informationen in die SPDX-Header einzufügen, wenn Sie Code ändern." #. type: Title ## #: support/documentation/content/en/contributing/develop/_index.md @@ -242,8 +338,23 @@ msgstr "ESBuild vs Typescript" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "This plugin uses ESBuild for frontend code generation, as the official `peertube-plugin-quickstart` plugin. ESBuild can handle Typescript, but does not check types (see [ESBuild documentation](https://esbuild.github.io/content-types/#typescript)). That's why we first compile Typescript with the `-noEmit` option, just to check types (`check:client:ts` in package.json file). Then, if everything is okay, we run ESBuild to generate the compiled javascript." -msgstr "Dieses Plugin verwendet ESBuild für die Generierung von Frontend-Code, wie das offizielle `peertube-plugin-quickstart` Plugin. ESBuild kann mit Typescript umgehen, prüft aber keine Typen (siehe [ESBuild-Dokumentation](https://esbuild.github.io/content-types/#typescript)). Deshalb kompilieren wir Typescript zuerst mit der Option `-noEmit`, nur um die Typen zu überprüfen (`check:client:ts` in der package.json Datei). Dann, wenn alles in Ordnung ist, führen wir ESBuild aus, um das kompilierte Javascript zu erzeugen." +msgid "" +"This plugin uses ESBuild for frontend code generation, as the official " +"`peertube-plugin-quickstart` plugin. ESBuild can handle Typescript, but " +"does not check types (see [ESBuild documentation](https://esbuild.github.io/" +"content-types/#typescript)). That's why we first compile Typescript with " +"the `-noEmit` option, just to check types (`check:client:ts` in package.json " +"file). Then, if everything is okay, we run ESBuild to generate the compiled " +"javascript." +msgstr "" +"Dieses Plugin verwendet ESBuild für die Generierung von Frontend-Code, wie " +"das offizielle `peertube-plugin-quickstart` Plugin. ESBuild kann mit " +"Typescript umgehen, prüft aber keine Typen (siehe [ESBuild-Dokumentation]" +"(https://esbuild.github.io/content-types/#typescript)). Deshalb kompilieren " +"wir Typescript zuerst mit der Option `-noEmit`, nur um die Typen zu " +"überprüfen (`check:client:ts` in der package.json Datei). Dann, wenn alles " +"in Ordnung ist, führen wir ESBuild aus, um das kompilierte Javascript zu " +"erzeugen." #. type: Title ## #: support/documentation/content/en/contributing/develop/_index.md @@ -253,28 +364,59 @@ msgstr "Debug Modus" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "There is a debug mode for this plugin, that shorten some delay. For example, some log files will rotate every two minutes, instead of once per day. This permit to test more easily certain actions, for which it could normally take hours or days to wait." -msgstr "Es gibt einen Debug Modus für dieses Plugin, der einige Verzögerungen verkürzt. Zum Beispiel werden einige Protokolldateien alle zwei Minuten erneuert, anstatt einmal pro Tag. Dies ermöglicht es, bestimmte Aktionen, für die man normalerweise Stunden oder Tage warten müsste, leichter zu testen." +msgid "" +"There is a debug mode for this plugin, that shorten some delay. For " +"example, some log files will rotate every two minutes, instead of once per " +"day. This permit to test more easily certain actions, for which it could " +"normally take hours or days to wait." +msgstr "" +"Es gibt einen Debug Modus für dieses Plugin, der einige Verzögerungen " +"verkürzt. Zum Beispiel werden einige Protokolldateien alle zwei Minuten " +"erneuert, anstatt einmal pro Tag. Dies ermöglicht es, bestimmte Aktionen, " +"für die man normalerweise Stunden oder Tage warten müsste, leichter zu " +"testen." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "To enable this mode, you juste have to create the `/var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode` file (replacing `/var/www/peertube/storage/` by the correct path on your installation)." -msgstr "Um diesen Modus zu aktivieren, müssen Sie lediglich die Datei `/var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode` erstellen (ersetzen Sie `/var/www/peertube/storage/` durch den richtigen Pfad Ihrer Installation)." +msgid "" +"To enable this mode, you juste have to create the `/var/www/peertube/storage/" +"plugins/data/peertube-plugin-livechat/debug_mode` file (replacing `/var/www/" +"peertube/storage/` by the correct path on your installation)." +msgstr "" +"Um diesen Modus zu aktivieren, müssen Sie lediglich die Datei `/var/www/" +"peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode` erstellen " +"(ersetzen Sie `/var/www/peertube/storage/` durch den richtigen Pfad Ihrer " +"Installation)." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "The simple existence of this file is sufficient to trigger the debug mode. To make sure it's taken into account, you can restart your Peertube instance." -msgstr "Das einfache Vorhandensein dieser Datei reicht aus, um den Debug Modus zu aktivieren. Um sicherzustellen, dass sie berücksichtigt wird, können Sie Ihre Peertube Instanz neu starten." +msgid "" +"The simple existence of this file is sufficient to trigger the debug mode. " +"To make sure it's taken into account, you can restart your Peertube instance." +msgstr "" +"Das einfache Vorhandensein dieser Datei reicht aus, um den Debug Modus zu " +"aktivieren. Um sicherzustellen, dass sie berücksichtigt wird, können Sie " +"Ihre Peertube Instanz neu starten." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "This file can contain some JSON to enable more advanced options. To have a list of existing parameters, check `server/lib/debug.ts`. Restart Peertube after each content modification." -msgstr "Diese Datei kann einige JSON enthalten, um erweiterte Optionen zu ermöglichen. Eine Liste der vorhandenen Parameter finden Sie in `server/lib/debug.ts`. Starten Sie Peertube nach jeder Änderung des Inhalts neu." +msgid "" +"This file can contain some JSON to enable more advanced options. To have a " +"list of existing parameters, check `server/lib/debug.ts`. Restart Peertube " +"after each content modification." +msgstr "" +"Diese Datei kann einige JSON enthalten, um erweiterte Optionen zu " +"ermöglichen. Eine Liste der vorhandenen Parameter finden Sie in `server/lib/" +"debug.ts`. Starten Sie Peertube nach jeder Änderung des Inhalts neu." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Don't enable this mode on a production server, neither on a public server. This could cause security issues." -msgstr "Aktivieren Sie diesen Modus nicht auf einem Produktionsserver und auch nicht auf einem öffentlichen Server. Dies könnte Sicherheitsprobleme verursachen." +msgid "" +"Don't enable this mode on a production server, neither on a public server. " +"This could cause security issues." +msgstr "" +"Aktivieren Sie diesen Modus nicht auf einem Produktionsserver und auch nicht " +"auf einem öffentlichen Server. Dies könnte Sicherheitsprobleme verursachen." #. type: Title ### #: support/documentation/content/en/contributing/develop/_index.md @@ -284,8 +426,18 @@ msgstr "Prosody neustarten" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "When debug mode is enabled, you can restart Prosody using this API call: `http://your_instance.tld/plugins/livechat/router/api/restart_prosody`. This call don't need any authentificaiton. It can be done from a command line, for example using `curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody`." -msgstr "Wenn der Debug Modus aktiviert ist, können Sie Prosody mit diesem API-Aufruf neu starten: `http://your_instance.tld/plugins/livechat/router/api/restart_prosody`. Für diesen Aufruf ist keine Authentifizierung erforderlich. Er kann von einer Befehlszeile aus erfolgen, zum Beispiel mit `curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody`." +msgid "" +"When debug mode is enabled, you can restart Prosody using this API call: " +"`http://your_instance.tld/plugins/livechat/router/api/restart_prosody`. " +"This call don't need any authentificaiton. It can be done from a command " +"line, for example using `curl http://your_instance.tld/plugins/livechat/" +"router/api/restart_prosody`." +msgstr "" +"Wenn der Debug Modus aktiviert ist, können Sie Prosody mit diesem API-Aufruf " +"neu starten: `http://your_instance.tld/plugins/livechat/router/api/" +"restart_prosody`. Für diesen Aufruf ist keine Authentifizierung " +"erforderlich. Er kann von einer Befehlszeile aus erfolgen, zum Beispiel mit " +"`curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody`." #. type: Title ### #: support/documentation/content/en/contributing/develop/_index.md @@ -295,13 +447,23 @@ msgstr "Prosody Debugger" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "It is possible to connect the Prosody AppImage to a remote debugger using [MobDebug](https://luarocks.org/modules/paulclinger/mobdebug)." -msgstr "Es ist möglich, das Prosody AppImage mit Hilfe von [MobDebug](https://luarocks.org/modules/paulclinger/mobdebug) mit einem externen Debugger zu verbinden." +msgid "" +"It is possible to connect the Prosody AppImage to a remote debugger using " +"[MobDebug](https://luarocks.org/modules/paulclinger/mobdebug)." +msgstr "" +"Es ist möglich, das Prosody AppImage mit Hilfe von [MobDebug](https://" +"luarocks.org/modules/paulclinger/mobdebug) mit einem externen Debugger zu " +"verbinden." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "To do so, you have to setup MobDebug in a folder that can be accessed by the `peertube` user. Then, add this in the `debub_mode` file:" -msgstr "Dazu müssen Sie MobDebug in einem Ordner einrichten, auf den der Benutzer `peertube` zugreifen kann. Dann fügen Sie dies in der Datei `debub_mode` hinzu:" +msgid "" +"To do so, you have to setup MobDebug in a folder that can be accessed by the " +"`peertube` user. Then, add this in the `debub_mode` file:" +msgstr "" +"Dazu müssen Sie MobDebug in einem Ordner einrichten, auf den der Benutzer " +"`peertube` zugreifen kann. Dann fügen Sie dies in der Datei `debub_mode` " +"hinzu:" #. type: Fenced code block (json) #: support/documentation/content/en/contributing/develop/_index.md @@ -325,8 +487,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "`host` and `port` are optional. `debugger_path` must point to the folder where the `MobDebug` `.lua` file is." -msgstr "`host` und `port` sind optional. `debugger_path` muss auf den Ordner zeigen, in dem sich die `MobDebug` `.lua` Datei befindet." +msgid "" +"`host` and `port` are optional. `debugger_path` must point to the folder " +"where the `MobDebug` `.lua` file is." +msgstr "" +"`host` und `port` sind optional. `debugger_path` muss auf den Ordner zeigen, " +"in dem sich die `MobDebug` `.lua` Datei befindet." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md @@ -340,8 +506,21 @@ msgstr "Starten Sie Ihren Debugger-Server." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "For Prosody to connect to the debugger, call the API `http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true`. This call does not need any authentication. It can be done from a command line, for example with `curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true`. You can even configure your debug server to launch this request automatically." -msgstr "Damit Prosody eine Verbindung mit dem Debugger herstellen kann, rufen Sie die API `http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true` auf. Dieser Aufruf erfordert keine Authentifizierung. Er kann von einer Kommandozeile aus erfolgen, zum Beispiel mit `curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true`. Sie können sogar Ihren Debug Server so konfigurieren, dass er diese Anfrage automatisch startet." +msgid "" +"For Prosody to connect to the debugger, call the API `http://your_instance." +"tld/plugins/livechat/router/api/restart_prosody?debugger=true`. This call " +"does not need any authentication. It can be done from a command line, for " +"example with `curl http://your_instance.tld/plugins/livechat/router/api/" +"restart_prosody?debugger=true`. You can even configure your debug server to " +"launch this request automatically." +msgstr "" +"Damit Prosody eine Verbindung mit dem Debugger herstellen kann, rufen Sie " +"die API `http://your_instance.tld/plugins/livechat/router/api/" +"restart_prosody?debugger=true` auf. Dieser Aufruf erfordert keine " +"Authentifizierung. Er kann von einer Kommandozeile aus erfolgen, zum " +"Beispiel mit `curl http://your_instance.tld/plugins/livechat/router/api/" +"restart_prosody?debugger=true`. Sie können sogar Ihren Debug Server so " +"konfigurieren, dass er diese Anfrage automatisch startet." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md @@ -356,18 +535,40 @@ msgstr "Schnelle Entwicklungsumgebung mit Docker" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "There is a tutorial, in french, on the [Peertube forum](https://framacolibri.org/t/tutoriel-creer-un-environnement-de-developpement-de-plugin-peertube-rapidement-en-utilisant-docker-et-qui-permet-de-tester-la-federation/17631) that explains how to quickly build a dev env using Docker." -msgstr "Es gibt eine Anleitung in französischer Sprache auf dem [le Peertube forum](https://framacolibri.org/t/tutoriel-creer-un-environnement-de-developpement-de-plugin-peertube-rapidement-en-utilisant-docker-et-qui-permet-de-tester-la-federation/17631) das erklärt, wie man schnell eine Entwicklungsumgebung mit Docker erstellt." +msgid "" +"There is a tutorial, in french, on the [Peertube forum](https://framacolibri." +"org/t/tutoriel-creer-un-environnement-de-developpement-de-plugin-peertube-" +"rapidement-en-utilisant-docker-et-qui-permet-de-tester-la-federation/17631) " +"that explains how to quickly build a dev env using Docker." +msgstr "" +"Es gibt eine Anleitung in französischer Sprache auf dem [le Peertube forum]" +"(https://framacolibri.org/t/tutoriel-creer-un-environnement-de-developpement-" +"de-plugin-peertube-rapidement-en-utilisant-docker-et-qui-permet-de-tester-la-" +"federation/17631) das erklärt, wie man schnell eine Entwicklungsumgebung mit " +"Docker erstellt." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "A repo was made out of it, check out [pt-plugin-dev](https://codeberg.org/mose/pt-plugin-dev)." -msgstr "Es wurde ein Repo daraus gemacht, siehe [pt-plugin-dev](https://codeberg.org/mose/pt-plugin-dev)." +msgid "" +"A repo was made out of it, check out [pt-plugin-dev](https://codeberg.org/" +"mose/pt-plugin-dev)." +msgstr "" +"Es wurde ein Repo daraus gemacht, siehe [pt-plugin-dev](https://codeberg.org/" +"mose/pt-plugin-dev)." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "Note: for an unknown reason, Prosody can't resolve containers DNS address when using the lua-unbound library. There is a dirty hack in the plugin: just create a `/data/plugins/data/peertube-plugin-livechat/no_lua_unbound` file in your docker-volumes, then restart containers." -msgstr "Hinweis: Aus einem unbekannten Grund kann Prosody die DNS-Adresse von Containern nicht auflösen, wenn die lua-unbound-Bibliothek verwendet wird. Es gibt einen unsaubere Lösung dafür im Plugin: Erstellen Sie einfach eine `/data/plugins/data/peertube-plugin-livechat/no_lua_unbound` Datei in deinen docker-volumes, dann starten Sie die Container neu." +msgid "" +"Note: for an unknown reason, Prosody can't resolve containers DNS address " +"when using the lua-unbound library. There is a dirty hack in the plugin: " +"just create a `/data/plugins/data/peertube-plugin-livechat/no_lua_unbound` " +"file in your docker-volumes, then restart containers." +msgstr "" +"Hinweis: Aus einem unbekannten Grund kann Prosody die DNS-Adresse von " +"Containern nicht auflösen, wenn die lua-unbound-Bibliothek verwendet wird. " +"Es gibt einen unsaubere Lösung dafür im Plugin: Erstellen Sie einfach eine `/" +"data/plugins/data/peertube-plugin-livechat/no_lua_unbound` Datei in deinen " +"docker-volumes, dann starten Sie die Container neu." #. type: Title ## #: support/documentation/content/en/contributing/develop/_index.md @@ -377,28 +578,53 @@ msgstr "Schnelles Neuerstellen und Installieren des Plugins" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "When you do modification, you don't have to always rebuild the full project, and reinstall the plugin on your dev environment. You can build only the modified part (for example, if you only modified client files: `npm run build:client`). Check the `package.json` files for available build scripts." -msgstr "Wenn Sie Änderungen vornehmen, müssen Sie nicht immer das gesamte Projekt neu erstellen und das Plugin in Ihrer Entwicklungsumgebung neu installieren. Sie können nur den geänderten Teil bauen (zum Beispiel, wenn Sie nur die Client-Dateien geändert haben: `npm run build:client`). Prüfen Sie die `package.json` Dateien auf verfügbare Build-Skripte." +msgid "" +"When you do modification, you don't have to always rebuild the full project, " +"and reinstall the plugin on your dev environment. You can build only the " +"modified part (for example, if you only modified client files: `npm run " +"build:client`). Check the `package.json` files for available build scripts." +msgstr "" +"Wenn Sie Änderungen vornehmen, müssen Sie nicht immer das gesamte Projekt " +"neu erstellen und das Plugin in Ihrer Entwicklungsumgebung neu " +"installieren. Sie können nur den geänderten Teil bauen (zum Beispiel, wenn " +"Sie nur die Client-Dateien geändert haben: `npm run build:client`). Prüfen " +"Sie die `package.json` Dateien auf verfügbare Build-Skripte." #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "When the plugin is already installed on your dev instance, and you haven't changed any dependency, you can quickly install your work by following these steps:" -msgstr "Wenn das Plugin bereits auf Ihrer Entwicklungsinstanz installiert ist und Sie keine Abhängigkeiten geändert haben, können Sie Ihre Arbeit schnell installieren, indem Sie diese Schritte ausführen:" +msgid "" +"When the plugin is already installed on your dev instance, and you haven't " +"changed any dependency, you can quickly install your work by following these " +"steps:" +msgstr "" +"Wenn das Plugin bereits auf Ihrer Entwicklungsinstanz installiert ist und " +"Sie keine Abhängigkeiten geändert haben, können Sie Ihre Arbeit schnell " +"installieren, indem Sie diese Schritte ausführen:" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/develop/_index.md msgid "re-build necessary parts of the plugin (client, styles, ...)," -msgstr "die notwendigen Teile des Plugins (Client, Stile, ...) neu zu erstellen," +msgstr "" +"die notwendigen Teile des Plugins (Client, Stile, ...) neu zu erstellen," #. type: Bullet: '* ' #: support/documentation/content/en/contributing/develop/_index.md -msgid "overwrite the `data/plugins/node_modules/peertube-plugin-livechat/dist/` content of your dev instance by the content of the plugin's `dist` folder," -msgstr "den Inhalt von `data/plugins/node_modules/peertube-plugin-livechat/dist/` Ihrer Dev-Instanz mit dem Inhalt des `dist`-Ordners des Plugins überschreiben," +msgid "" +"overwrite the `data/plugins/node_modules/peertube-plugin-livechat/dist/` " +"content of your dev instance by the content of the plugin's `dist` folder," +msgstr "" +"den Inhalt von `data/plugins/node_modules/peertube-plugin-livechat/dist/` " +"Ihrer Dev-Instanz mit dem Inhalt des `dist`-Ordners des Plugins " +"überschreiben," #. type: Bullet: '* ' #: support/documentation/content/en/contributing/develop/_index.md -msgid "change recursively `plugins/node_modules/peertube-plugin-livechat/dist/` files owner to your `peertube` user," -msgstr "rekursiv die Besitzerrechte der `plugins/node_modules/peertube-plugin-livechat/dist/` Dateien auf Ihren `peertube` Benutzer ändern," +msgid "" +"change recursively `plugins/node_modules/peertube-plugin-livechat/dist/` " +"files owner to your `peertube` user," +msgstr "" +"rekursiv die Besitzerrechte der `plugins/node_modules/peertube-plugin-" +"livechat/dist/` Dateien auf Ihren `peertube` Benutzer ändern," #. type: Bullet: '* ' #: support/documentation/content/en/contributing/develop/_index.md @@ -413,8 +639,15 @@ msgstr "Leistungstests" #. type: Plain text #: support/documentation/content/en/contributing/develop/_index.md -msgid "The [livechat-perf-test](https://github.com/JohnXLivingston/livechat-perf-test) repository contains some tools to make performance tests. It can be used to evaluate code improvements, or find bottlenecks." -msgstr "Das [livechat-perf-test](https://github.com/JohnXLivingston/livechat-perf-test) Repository enthält einige Werkzeuge zur Durchführung von Leistungstests. Sie können verwendet werden, um Code-Verbesserungen zu bewerten oder Engpässe zu finden." +msgid "" +"The [livechat-perf-test](https://github.com/JohnXLivingston/livechat-perf-" +"test) repository contains some tools to make performance tests. It can be " +"used to evaluate code improvements, or find bottlenecks." +msgstr "" +"Das [livechat-perf-test](https://github.com/JohnXLivingston/livechat-perf-" +"test) Repository enthält einige Werkzeuge zur Durchführung von " +"Leistungstests. Sie können verwendet werden, um Code-Verbesserungen zu " +"bewerten oder Engpässe zu finden." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/contributing/document/_index.md @@ -437,8 +670,15 @@ msgstr "Allgemeine Informationen" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Always inform the community before working (by creating a new issue, or commenting an existing one). This is to avoid that two persons are working on the same thing, and prevent conflicts." -msgstr "Informieren Sie die Community immer vor der Arbeit (indem Sie ein neues Problem erstellen oder ein bestehendes kommentieren). Damit soll vermieden werden, dass zwei Personen an der gleichen Sache arbeiten, und Konflikte zu verhindern." +msgid "" +"Always inform the community before working (by creating a new issue, or " +"commenting an existing one). This is to avoid that two persons are working " +"on the same thing, and prevent conflicts." +msgstr "" +"Informieren Sie die Community immer vor der Arbeit (indem Sie ein neues " +"Problem erstellen oder ein bestehendes kommentieren). Damit soll vermieden " +"werden, dass zwei Personen an der gleichen Sache arbeiten, und Konflikte zu " +"verhindern." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md @@ -447,23 +687,45 @@ msgstr "Bitte benutzen Sie den `main`-Zweig." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "The documentation source code is in the `support/documentation/content` folder." -msgstr "Der Quellcode der Dokumentation befindet sich im Ordner `support/documentation/content`." +msgid "" +"The documentation source code is in the `support/documentation/content` " +"folder." +msgstr "" +"Der Quellcode der Dokumentation befindet sich im Ordner `support/" +"documentation/content`." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "The documentation is generated using [Hugo](https://gohugo.io/). You have to install it on your computer if you want to preview your work." -msgstr "Die Dokumentation wird mit [Hugo](https://gohugo.io/) erstellt. Sie müssen es auf Ihrem Computer installieren, wenn Sie eine Vorschau Ihrer Arbeit sehen wollen." +msgid "" +"The documentation is generated using [Hugo](https://gohugo.io/). You have " +"to install it on your computer if you want to preview your work." +msgstr "" +"Die Dokumentation wird mit [Hugo](https://gohugo.io/) erstellt. Sie müssen " +"es auf Ihrem Computer installieren, wenn Sie eine Vorschau Ihrer Arbeit " +"sehen wollen." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "The used theme is [hugo-theme-learn](https://learn.netlify.app/). You should read its documentation before starting editing the documentation." -msgstr "Das verwendete Thema ist [hugo-theme-learn](https://learn.netlify.app/). Sie sollten dessen Dokumentation lesen, bevor Sie mit der Bearbeitung der Dokumentation beginnen." +msgid "" +"The used theme is [hugo-theme-learn](https://learn.netlify.app/). You " +"should read its documentation before starting editing the documentation." +msgstr "" +"Das verwendete Thema ist [hugo-theme-learn](https://learn.netlify.app/). Sie " +"sollten dessen Dokumentation lesen, bevor Sie mit der Bearbeitung der " +"Dokumentation beginnen." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "When a new plugin version is released, or when documentation is updated, plugin maintainers will merge the `main` branch to the `documentation` branch. This will trigger github and gitlab pipelines, and update published documentation." -msgstr "Wenn eine neue Pluginversion veröffentlicht oder die Dokumentation aktualisiert wird, führen die Plugin Verwalter den `main`-Zweig mit dem `documentation`-Zweig zusammen. Dadurch werden Github- und Gitlab-Pipelines ausgelöst und die veröffentlichte Dokumentation aktualisiert." +msgid "" +"When a new plugin version is released, or when documentation is updated, " +"plugin maintainers will merge the `main` branch to the `documentation` " +"branch. This will trigger github and gitlab pipelines, and update published " +"documentation." +msgstr "" +"Wenn eine neue Pluginversion veröffentlicht oder die Dokumentation " +"aktualisiert wird, führen die Plugin Verwalter den `main`-Zweig mit dem " +"`documentation`-Zweig zusammen. Dadurch werden Github- und Gitlab-Pipelines " +"ausgelöst und die veröffentlichte Dokumentation aktualisiert." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -478,13 +740,25 @@ msgstr "Die Hauptsprache ist Englisch (Code `en`)." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "The `support/documentation/content/en` folder contains only english documentation files." -msgstr "Der Ordner `support/documentation/content/en` enthält nur englische Dokumentationsdateien." +msgid "" +"The `support/documentation/content/en` folder contains only english " +"documentation files." +msgstr "" +"Der Ordner `support/documentation/content/en` enthält nur englische " +"Dokumentationsdateien." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Documentation is translated using Weblate (see the [translation documentation](/peertube-plugin-livechat/contributing/translate/)). To do so, we use the [po4a tool](https://po4a.org/), as we will se later in this page." -msgstr "Die Dokumentation wird mit Weblate übersetzt (siehe die [Übersetzungsdokumentation](/peertube-plugin-livechat/de/contributing/translate/)). Um dies zu tun, verwenden wir das [po4a tool](https://po4a.org/), wie wir später auf dieser Seite sehen werden." +msgid "" +"Documentation is translated using Weblate (see the [translation " +"documentation](/peertube-plugin-livechat/contributing/translate/)). To do " +"so, we use the [po4a tool](https://po4a.org/), as we will se later in this " +"page." +msgstr "" +"Die Dokumentation wird mit Weblate übersetzt (siehe die " +"[Übersetzungsdokumentation](/peertube-plugin-livechat/de/contributing/" +"translate/)). Um dies zu tun, verwenden wir das [po4a tool](https://po4a." +"org/), wie wir später auf dieser Seite sehen werden." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -494,13 +768,21 @@ msgstr "Eine neue Sprache hinzufügen" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "In the `support/documentation/config.toml` file, please copy and modify the `[Languages.fr]` section." -msgstr "Kopieren und ändern Sie den Abschnitt `[Languages.fr]` in der Datei `support/documentation/config.toml`." +msgid "" +"In the `support/documentation/config.toml` file, please copy and modify the " +"`[Languages.fr]` section." +msgstr "" +"Kopieren und ändern Sie den Abschnitt `[Languages.fr]` in der Datei `support/" +"documentation/config.toml`." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "If the translations are not complete, it does not matter, english will be used for missing strings." -msgstr "Wenn die Übersetzungen nicht vollständig sind, macht das nichts, die fehlenden Zeichenfolgen werden auf Englisch angezeigt." +msgid "" +"If the translations are not complete, it does not matter, english will be " +"used for missing strings." +msgstr "" +"Wenn die Übersetzungen nicht vollständig sind, macht das nichts, die " +"fehlenden Zeichenfolgen werden auf Englisch angezeigt." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -511,7 +793,9 @@ msgstr "Vorschau" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md msgid "To preview your modifications, just run:" -msgstr "Um eine Vorschau Ihrer Änderungen zu sehen, führen Sie einfach diesen Befehl aus:" +msgstr "" +"Um eine Vorschau Ihrer Änderungen zu sehen, führen Sie einfach diesen Befehl " +"aus:" #. type: Fenced code block (bash) #: support/documentation/content/en/contributing/document/_index.md @@ -521,8 +805,15 @@ msgstr "hugo serve -s support/documentation/\n" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Then open your browser on the address [http://localhost:1313/peertube-plugin-livechat/](http://localhost:1313/peertube-plugin-livechat/). This page will automatically refresh on each modification." -msgstr "Öffnen Sie dann Ihren Browser und gehen Sie auf die Adresse [http://localhost:1313/peertube-plugin-livechat/](http://localhost:1313/peertube-plugin-livechat/). Diese Seite wird bei jeder Änderung automatisch aktualisiert." +msgid "" +"Then open your browser on the address [http://localhost:1313/peertube-plugin-" +"livechat/](http://localhost:1313/peertube-plugin-livechat/). This page will " +"automatically refresh on each modification." +msgstr "" +"Öffnen Sie dann Ihren Browser und gehen Sie auf die Adresse [http://" +"localhost:1313/peertube-plugin-livechat/](http://localhost:1313/peertube-" +"plugin-livechat/). Diese Seite wird bei jeder Änderung automatisch " +"aktualisiert." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -532,8 +823,14 @@ msgstr "Aktualisierung von Lokalisierungsdateien und Erstellung von Dokumentatio #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "For now, you only have the english version. To update documentation strings, and generate translations, you have to run the `doc-translate.sh` script." -msgstr "Im Moment haben Sie nur die englische Version. Um die Dokumentationszeichenketten zu aktualisieren und Übersetzungen zu erstellen, müssen Sie das Skript `doc-translate.sh` ausführen." +msgid "" +"For now, you only have the english version. To update documentation " +"strings, and generate translations, you have to run the `doc-translate.sh` " +"script." +msgstr "" +"Im Moment haben Sie nur die englische Version. Um die " +"Dokumentationszeichenketten zu aktualisieren und Übersetzungen zu erstellen, " +"müssen Sie das Skript `doc-translate.sh` ausführen." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md @@ -543,8 +840,19 @@ msgstr "Stellen Sie dazu sicher, dass Sie `po4a` (Version >= 0.69) auf Ihrem Com #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Some linux distro (like Debian Bullseye for example) have too old version of `po4a`. Please make sure to install a compatible version. If you are using Debian Bullseye for example, you can download the Bookworm po4a.deb file from [https://packages.debian.org](https://packages.debian.org/bookworm/all/po4a/download), and install it manually." -msgstr "Einige Linux-Distributionen (wie Debian Bullseye zum Beispiel) haben eine zu alte Version von `po4a`. Bitte stellen Sie sicher, dass Sie eine kompatible Version installieren. Wenn Sie zum Beispiel Debian Bullseye benutzen, können Sie die Bookworm po4a.deb Datei von [https://packages.debian.org](https://packages.debian.org/bookworm/all/po4a/download) herunterladen und manuell installieren." +msgid "" +"Some linux distro (like Debian Bullseye for example) have too old version of " +"`po4a`. Please make sure to install a compatible version. If you are using " +"Debian Bullseye for example, you can download the Bookworm po4a.deb file " +"from [https://packages.debian.org](https://packages.debian.org/bookworm/all/" +"po4a/download), and install it manually." +msgstr "" +"Einige Linux-Distributionen (wie Debian Bullseye zum Beispiel) haben eine zu " +"alte Version von `po4a`. Bitte stellen Sie sicher, dass Sie eine kompatible " +"Version installieren. Wenn Sie zum Beispiel Debian Bullseye benutzen, können " +"Sie die Bookworm po4a.deb Datei von [https://packages.debian.org](https://" +"packages.debian.org/bookworm/all/po4a/download) herunterladen und manuell " +"installieren." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md @@ -559,8 +867,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "You can then preview the result using `hugo serve -s support/documentation/`, and using the language selector." -msgstr "Sie können dann eine Vorschau des Ergebnisses mit `hugo serve -s support/documentation/` und unter Verwendung der Sprachauswahl anzeigen." +msgid "" +"You can then preview the result using `hugo serve -s support/documentation/" +"`, and using the language selector." +msgstr "" +"Sie können dann eine Vorschau des Ergebnisses mit `hugo serve -s support/" +"documentation/` und unter Verwendung der Sprachauswahl anzeigen." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -571,42 +883,82 @@ msgstr "Dokumentation schreiben" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md msgid "Just edit the english files in `support/documentation/content/en`." -msgstr "Bearbeiten Sie einfach die englischen Dateien in `support/documentation/content/en`." +msgstr "" +"Bearbeiten Sie einfach die englischen Dateien in `support/documentation/" +"content/en`." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Then, before commiting, always run `npm run doc:translate`, so that changes in english files can be propagated to the `support/documentation/po/livechat.en.pot` file." -msgstr "Führen Sie dann vor dem Commit immer `npm run doc:translate` aus, so dass Änderungen in den englischen Dateien in die Datei `support/documentation/po/livechat.en.pot` übertragen werden können." +msgid "" +"Then, before commiting, always run `npm run doc:translate`, so that changes " +"in english files can be propagated to the `support/documentation/po/livechat." +"en.pot` file." +msgstr "" +"Führen Sie dann vor dem Commit immer `npm run doc:translate` aus, so dass " +"Änderungen in den englischen Dateien in die Datei `support/documentation/po/" +"livechat.en.pot` übertragen werden können." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "You can use the `livechat_label` short code to use application strings. See here: [Documentation translation](/peertube-plugin-livechat/contributing/translate/#documentation-translation)." -msgstr "Du kannst den Shortcode `livechat_label` verwenden, um Anwendungsstrings zu verwenden. Siehe hier: [Dokumentation übersetzen](/peertube-plugin-livechat/de/contributing/translate/#documentation-translation)." +msgid "" +"You can use the `livechat_label` short code to use application strings. See " +"here: [Documentation translation](/peertube-plugin-livechat/contributing/" +"translate/#documentation-translation)." +msgstr "" +"Du kannst den Shortcode `livechat_label` verwenden, um Anwendungsstrings zu " +"verwenden. Siehe hier: [Dokumentation übersetzen](/peertube-plugin-livechat/" +"de/contributing/translate/#documentation-translation)." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "It is possible to prevent a file from beeing translating, using `livechatnotranslation: true` in the Yaml Font Matter section. See here: [Documentation translation](/peertube-plugin-livechat/contributing/translate/#documentation-translation)." -msgstr "Es ist möglich zu verhindern, dass eine Datei übersetzt wird, indem man `livechatnotranslation: true` in der Yaml Font Matter Sektion benutzt. Siehe hier: [Dokumentation übersetzen](/peertube-plugin-livechat/de/contributing/translate/#documentation-translation)." +msgid "" +"It is possible to prevent a file from beeing translating, using " +"`livechatnotranslation: true` in the Yaml Font Matter section. See here: " +"[Documentation translation](/peertube-plugin-livechat/contributing/translate/" +"#documentation-translation)." +msgstr "" +"Es ist möglich zu verhindern, dass eine Datei übersetzt wird, indem man " +"`livechatnotranslation: true` in der Yaml Font Matter Sektion benutzt. Siehe " +"hier: [Dokumentation übersetzen](/peertube-plugin-livechat/de/contributing/" +"translate/#documentation-translation)." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Please use the `livechatnotranslation` option for technical documentation. We don't want technical documentation to be translated, to avoid issues because of a wrong translation." -msgstr "Bitte verwenden Sie die Option `livechatnotranslation` für technische Dokumentation. Wir möchten nicht, dass die technische Dokumentation übersetzt wird, um Probleme aufgrund einer falschen Übersetzung zu vermeiden." +msgid "" +"Please use the `livechatnotranslation` option for technical documentation. " +"We don't want technical documentation to be translated, to avoid issues " +"because of a wrong translation." +msgstr "" +"Bitte verwenden Sie die Option `livechatnotranslation` für technische " +"Dokumentation. Wir möchten nicht, dass die technische Dokumentation " +"übersetzt wird, um Probleme aufgrund einer falschen Übersetzung zu vermeiden." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md msgid "To facilitate translators work, avoid making too long paragraphs." -msgstr "Um den Übersetzern die Arbeit zu erleichtern, sollten Sie zu lange Absätze vermeiden." +msgstr "" +"Um den Übersetzern die Arbeit zu erleichtern, sollten Sie zu lange Absätze " +"vermeiden." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "For now, it is not possible to use Markdown tables: the translation tools will break them." -msgstr "Im Moment ist es nicht möglich, Markdown-Tabellen zu verwenden: Die Übersetzungswerkzeuge würden sie nicht korrekt darstellen." +msgid "" +"For now, it is not possible to use Markdown tables: the translation tools " +"will break them." +msgstr "" +"Im Moment ist es nicht möglich, Markdown-Tabellen zu verwenden: Die " +"Übersetzungswerkzeuge würden sie nicht korrekt darstellen." #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "There may be links to documentation elsewhere on the web. Try not to change the urls of the documentation pages. Or at the very least, put links to the new location on the previous url." -msgstr "Möglicherweise gibt es Links zur Dokumentation an anderer Stelle im Web. Versuchen Sie nicht, die URLs der Dokumentationsseiten zu ändern. Oder setzen Sie zumindest Links zum neuen Ort auf die vorherige URL." +msgid "" +"There may be links to documentation elsewhere on the web. Try not to change " +"the urls of the documentation pages. Or at the very least, put links to the " +"new location on the previous url." +msgstr "" +"Möglicherweise gibt es Links zur Dokumentation an anderer Stelle im Web. " +"Versuchen Sie nicht, die URLs der Dokumentationsseiten zu ändern. Oder " +"setzen Sie zumindest Links zum neuen Ort auf die vorherige URL." #. type: Title ### #: support/documentation/content/en/contributing/document/_index.md @@ -616,8 +968,13 @@ msgstr "Was ist, wenn ich hugo und/oder po4a nicht verwenden kann?" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Just edit english markdown files, and specify that you can't build translations when you make your Pull Request." -msgstr "Bearbeiten Sie einfach die englischen Markdown-Dateien und geben Sie an, dass Sie keine Übersetzungen erstellen können, wenn Sie Ihren Pull Request stellen." +msgid "" +"Just edit english markdown files, and specify that you can't build " +"translations when you make your Pull Request." +msgstr "" +"Bearbeiten Sie einfach die englischen Markdown-Dateien und geben Sie an, " +"dass Sie keine Übersetzungen erstellen können, wenn Sie Ihren Pull Request " +"stellen." #. type: Title ## #: support/documentation/content/en/contributing/document/_index.md @@ -627,8 +984,12 @@ msgstr "Veröffentlichung" #. type: Plain text #: support/documentation/content/en/contributing/document/_index.md -msgid "Publishing the documentation is automatic, as soon as the changes are merged into the `documentation` branch." -msgstr "Die Veröffentlichung der Dokumentation erfolgt automatisch, sobald die Änderungen in den `documentation` Zweig eingefügt wurden." +msgid "" +"Publishing the documentation is automatic, as soon as the changes are merged " +"into the `documentation` branch." +msgstr "" +"Die Veröffentlichung der Dokumentation erfolgt automatisch, sobald die " +"Änderungen in den `documentation` Zweig eingefügt wurden." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/contributing/feedback/_index.md @@ -638,8 +999,16 @@ msgstr "Geben Sie Ihr Feedback" #. type: Plain text #: support/documentation/content/en/contributing/feedback/_index.md -msgid "You don't need to know how to code to start contributing to this plugin! Other contributions are very valuable too, among which: you can test the software and report bugs, you can give feedback, features that you are interested in, user interface, design, ..." -msgstr "Sie müssen keine Programmierkenntnisse haben, um zu diesem Plugin beizutragen! Andere Beiträge sind auch sehr wertvoll, darunter: Sie können die Software testen und Fehler melden, Sie können Feedback geben, Funktionen die Sie interessieren, Benutzeroberfläche, Design, ..." +msgid "" +"You don't need to know how to code to start contributing to this plugin! " +"Other contributions are very valuable too, among which: you can test the " +"software and report bugs, you can give feedback, features that you are " +"interested in, user interface, design, ..." +msgstr "" +"Sie müssen keine Programmierkenntnisse haben, um zu diesem Plugin " +"beizutragen! Andere Beiträge sind auch sehr wertvoll, darunter: Sie können " +"die Software testen und Fehler melden, Sie können Feedback geben, Funktionen " +"die Sie interessieren, Benutzeroberfläche, Design, ..." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/contributing/_index.md @@ -666,13 +1035,23 @@ msgstr "Übersätzen" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "You can contribute to this plugin translation. Translations are handled using the [Weblate](https://weblate.org/) software, using [Framasoft Weblate instance](https://weblate.framasoft.org/)." -msgstr "Sie können zur Übersetzung dieses Plugins beitragen. Die Übersetzungen werden mit der Software [Weblate](https://weblate.org/) unter Verwendung der [Framasoft Weblate Instanz](https://weblate.framasoft.org/) bearbeitet." +msgid "" +"You can contribute to this plugin translation. Translations are handled " +"using the [Weblate](https://weblate.org/) software, using [Framasoft Weblate " +"instance](https://weblate.framasoft.org/)." +msgstr "" +"Sie können zur Übersetzung dieses Plugins beitragen. Die Übersetzungen " +"werden mit der Software [Weblate](https://weblate.org/) unter Verwendung der " +"[Framasoft Weblate Instanz](https://weblate.framasoft.org/) bearbeitet." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Never modify directly files in the `languages` folder, this could lead to conflicts." -msgstr "Ändern Sie niemals direkt Dateien im Ordner `languages`, dies könnte zu Konflikten führen." +msgid "" +"Never modify directly files in the `languages` folder, this could lead to " +"conflicts." +msgstr "" +"Ändern Sie niemals direkt Dateien im Ordner `languages`, dies könnte zu " +"Konflikten führen." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -683,7 +1062,8 @@ msgstr "Wie funktioniert es" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md msgid "Create an account: https://weblate.framasoft.org/accounts/register/" -msgstr "Erstellen Sie ein Konto: https://weblate.framasoft.org/accounts/register/" +msgstr "" +"Erstellen Sie ein Konto: https://weblate.framasoft.org/accounts/register/" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md @@ -697,8 +1077,12 @@ msgstr "Erstellen Sie Ihr Passwort und richten Sie Ihr Konto ein" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md -msgid "Go to the plugin project page: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/" -msgstr "Rufen Sie die Projektseite des Plugins auf: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat/" +msgid "" +"Go to the plugin project page: https://weblate.framasoft.org/projects/" +"peertube-livechat/peertube-plugin-livechat/" +msgstr "" +"Rufen Sie die Projektseite des Plugins auf: https://weblate.framasoft.org/" +"projects/peertube-livechat/peertube-plugin-livechat/" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md @@ -707,13 +1091,23 @@ msgstr "Wählen Sie die Sprache, die Sie übersetzen möchten" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md -msgid "Just translate missing sentences, or correct the ones that seems incorrect to you." -msgstr "Übersetzen Sie einfach die fehlenden Sätze, oder korrigieren Sie die Sätze, die Ihnen falsch erscheinen." +msgid "" +"Just translate missing sentences, or correct the ones that seems incorrect " +"to you." +msgstr "" +"Übersetzen Sie einfach die fehlenden Sätze, oder korrigieren Sie die Sätze, " +"die Ihnen falsch erscheinen." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "There might be some «very technical» strings. If you are not 100% sure of the meaning, or of your translation, you better not translate it, so it will display in english." -msgstr "Es könnte einige «sehr technische» Zeichenfolgen geben. Wenn Sie sich der Bedeutung oder Ihrer Übersetzung nicht 100%ig sicher sind, sollten Sie sie besser nicht übersetzen, damit sie in Englisch angezeigt werden." +msgid "" +"There might be some «very technical» strings. If you are not 100% sure of " +"the meaning, or of your translation, you better not translate it, so it will " +"display in english." +msgstr "" +"Es könnte einige «sehr technische» Zeichenfolgen geben. Wenn Sie sich der " +"Bedeutung oder Ihrer Übersetzung nicht 100%ig sicher sind, sollten Sie sie " +"besser nicht übersetzen, damit sie in Englisch angezeigt werden." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -723,8 +1117,20 @@ msgstr "ConverseJS Übersetzungen" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "This plugin relies on [ConverseJS](https://conversejs.org/) for the chat front-end. ConverseJS has its own translations, on its own [weblate instance](https://hosted.weblate.org/projects/conversejs/#languages). You can also translate directly in the code repository. For more information, check [ConverseJS translations documentation](https://conversejs.org/docs/html/translations.html)." -msgstr "Dieses Plugin verlässt sich auf [ConverseJS](https://conversejs.org/) für das Chat-Frontend. ConverseJS hat seine eigenen Übersetzungen, in seiner eigenen [Weblateinstanz](https://hosted.weblate.org/projects/conversejs/#languages). Sie können auch direkt im Code-Repository übersetzen. Weitere Informationen finden Sie in der [ConverseJS Übersetzungsdokumentation](https://conversejs.org/docs/html/translations.html)." +msgid "" +"This plugin relies on [ConverseJS](https://conversejs.org/) for the chat " +"front-end. ConverseJS has its own translations, on its own [weblate " +"instance](https://hosted.weblate.org/projects/conversejs/#languages). You " +"can also translate directly in the code repository. For more information, " +"check [ConverseJS translations documentation](https://conversejs.org/docs/" +"html/translations.html)." +msgstr "" +"Dieses Plugin verlässt sich auf [ConverseJS](https://conversejs.org/) für " +"das Chat-Frontend. ConverseJS hat seine eigenen Übersetzungen, in seiner " +"eigenen [Weblateinstanz](https://hosted.weblate.org/projects/conversejs/" +"#languages). Sie können auch direkt im Code-Repository übersetzen. Weitere " +"Informationen finden Sie in der [ConverseJS Übersetzungsdokumentation]" +"(https://conversejs.org/docs/html/translations.html)." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -734,8 +1140,15 @@ msgstr "Eine neues Sprachgebiet hinzufügen" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "If you think there is a missing locale, please check first if it is handled in Peertube. If so, you can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to ask for it." -msgstr "Wenn Sie glauben, dass eine Sprache fehlt, prüfen Sie bitte zuerst, ob sie von Peertube unterstützt wird. Wenn ja, können Sie [ein Problem erstellen](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues), um danach zu fragen." +msgid "" +"If you think there is a missing locale, please check first if it is handled " +"in Peertube. If so, you can [open an issue](https://github.com/" +"JohnXLivingston/peertube-plugin-livechat/issues) to ask for it." +msgstr "" +"Wenn Sie glauben, dass eine Sprache fehlt, prüfen Sie bitte zuerst, ob sie " +"von Peertube unterstützt wird. Wenn ja, können Sie [ein Problem erstellen]" +"(https://github.com/JohnXLivingston/peertube-plugin-livechat/issues), um " +"danach zu fragen." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -745,18 +1158,35 @@ msgstr "Hinzufügen neuer Zeichenfolgen / Verwendung von Übersetzungen im Code" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "If you are working on new features, and need new strings, you can create them directly in Weblate. The english version is mandatory. Start with it." -msgstr "Wenn Sie an neuen Funktionen arbeiten und neue Zeichenketten benötigen, können Sie diese direkt in Weblate erstellen. Die englische Version ist obligatorisch. Beginnen Sie mit ihr." +msgid "" +"If you are working on new features, and need new strings, you can create " +"them directly in Weblate. The english version is mandatory. Start with it." +msgstr "" +"Wenn Sie an neuen Funktionen arbeiten und neue Zeichenketten benötigen, " +"können Sie diese direkt in Weblate erstellen. Die englische Version ist " +"obligatorisch. Beginnen Sie mit ihr." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Each string is linked to a key (for example `use_chat`). Choose an explicit key in english, lower case." -msgstr "Jede Zeichenfolge ist mit einem Schlüssel verknüpft (z. B. `use_chat`). Wählen Sie einen expliziten Schlüssel in Englisch und nutzen Sie nur Kleinbuchstaben." +msgid "" +"Each string is linked to a key (for example `use_chat`). Choose an explicit " +"key in english, lower case." +msgstr "" +"Jede Zeichenfolge ist mit einem Schlüssel verknüpft (z. B. `use_chat`). " +"Wählen Sie einen expliziten Schlüssel in Englisch und nutzen Sie nur " +"Kleinbuchstaben." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "If you have to test new strings without waiting for a Weblate merge, you can modify `languages/*.yml` files, but avoid to commit these changes (to minimize conflict risks)." -msgstr "Wenn Sie neue Zeichenketten testen müssen, ohne auf einen Weblate-Zusammenschluss zu warten, können Sie die Dateien `languages/*.yml` ändern, aber vermeiden Sie es, diese Änderungen zu übertragen (um das Konfliktrisiko zu minimieren)." +msgid "" +"If you have to test new strings without waiting for a Weblate merge, you can " +"modify `languages/*.yml` files, but avoid to commit these changes (to " +"minimize conflict risks)." +msgstr "" +"Wenn Sie neue Zeichenketten testen müssen, ohne auf einen Weblate-" +"Zusammenschluss zu warten, können Sie die Dateien `languages/*.yml` ändern, " +"aber vermeiden Sie es, diese Änderungen zu übertragen (um das Konfliktrisiko " +"zu minimieren)." #. type: Title ### #: support/documentation/content/en/contributing/translate/_index.md @@ -766,8 +1196,13 @@ msgstr "Übersetzungen im Front-End-Code verwenden" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Before using a string in front-end, you need to declare a new constant in `client/@types/global.d.ts`. The constant name must:" -msgstr "Bevor Sie eine Zeichenkette im Frontend verwenden, müssen Sie eine neue Konstante in `client/@types/global.d.ts` deklarieren. Der Name der Konstante muss:" +msgid "" +"Before using a string in front-end, you need to declare a new constant in " +"`client/@types/global.d.ts`. The constant name must:" +msgstr "" +"Bevor Sie eine Zeichenkette im Frontend verwenden, müssen Sie eine neue " +"Konstante in `client/@types/global.d.ts` deklarieren. Der Name der " +"Konstante muss:" #. type: Bullet: '* ' #: support/documentation/content/en/contributing/translate/_index.md @@ -797,13 +1232,21 @@ msgstr "declare const LOC_USE_CHAT: string\n" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "The `build-client.js` script will read the `client/@types/global.d.ts`, search for such constants, and load their values from the languages files." -msgstr "Das Skript `build-client.js` liest die `client/@types/global.d.ts`, sucht nach solchen Konstanten und lädt deren Werte aus den Sprachdateien." +msgid "" +"The `build-client.js` script will read the `client/@types/global.d.ts`, " +"search for such constants, and load their values from the languages files." +msgstr "" +"Das Skript `build-client.js` liest die `client/@types/global.d.ts`, sucht " +"nach solchen Konstanten und lädt deren Werte aus den Sprachdateien." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Now, you can simply call `peertubeHelpers.translate(LOC_USE_CHAT)` in your code." -msgstr "Jetzt können Sie einfach `peertubeHelpers.translate(LOC_USE_CHAT)` in Ihrem Code aufrufen." +msgid "" +"Now, you can simply call `peertubeHelpers.translate(LOC_USE_CHAT)` in your " +"code." +msgstr "" +"Jetzt können Sie einfach `peertubeHelpers.translate(LOC_USE_CHAT)` in Ihrem " +"Code aufrufen." #. type: Title ### #: support/documentation/content/en/contributing/translate/_index.md @@ -813,18 +1256,34 @@ msgstr "Übersetzungen im Backend-Code verwenden" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "In theory, the only parts of the backend code where you need localization is the settings declaration and standardized data (ActivityPub, RSS, ...). Here we need to get english strings from the translation key." -msgstr "Theoretisch sind die einzigen Teile des Backend-Codes, für die eine Lokalisierung erforderlich ist, die Deklaration der Einstellungen und standardisierte Daten (ActivityPub, RSS, ...). Hier müssen wir englische Zeichenketten aus dem Übersetzungsschlüssel holen." +msgid "" +"In theory, the only parts of the backend code where you need localization is " +"the settings declaration and standardized data (ActivityPub, RSS, ...). " +"Here we need to get english strings from the translation key." +msgstr "" +"Theoretisch sind die einzigen Teile des Backend-Codes, für die eine " +"Lokalisierung erforderlich ist, die Deklaration der Einstellungen und " +"standardisierte Daten (ActivityPub, RSS, ...). Hier müssen wir englische " +"Zeichenketten aus dem Übersetzungsschlüssel holen." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Note: you should never need another language translation from backend code. Localization must be done on front-end." -msgstr "Hinweis: Sie sollten nie eine weitere Sprachübersetzung vom Backend-Code benötigen. Die Lokalisierung muss im Frontend erfolgen." +msgid "" +"Note: you should never need another language translation from backend code. " +"Localization must be done on front-end." +msgstr "" +"Hinweis: Sie sollten nie eine weitere Sprachübersetzung vom Backend-Code " +"benötigen. Die Lokalisierung muss im Frontend erfolgen." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "There is a `lib/loc.ts` module providing a `loc()` function. Just pass it the key to have the english string: `loc('diagnostic')`'." -msgstr "Es gibt ein `lib/loc.ts` Modul, das eine `loc()` Funktion bereitstellt. Übergeben Sie ihr einfach den Schlüssel, um die englische Zeichenkette zu erhalten: `loc('diagnostic')`'." +msgid "" +"There is a `lib/loc.ts` module providing a `loc()` function. Just pass it " +"the key to have the english string: `loc('diagnostic')`'." +msgstr "" +"Es gibt ein `lib/loc.ts` Modul, das eine `loc()` Funktion bereitstellt. " +"Übergeben Sie ihr einfach den Schlüssel, um die englische Zeichenkette zu " +"erhalten: `loc('diagnostic')`'." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -834,13 +1293,25 @@ msgstr "Übersätzungs-Dokumentation" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "The documentation translation is done using the corresponding Weblate component." -msgstr "Die Übersetzung der Dokumentation erfolgt mit Hilfe der entsprechenden Weblate-Komponente." +msgid "" +"The documentation translation is done using the corresponding Weblate " +"component." +msgstr "" +"Die Übersetzung der Dokumentation erfolgt mit Hilfe der entsprechenden " +"Weblate-Komponente." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "There is a specific \"Hugo shortcodes\" you can use to display an application string. Saying you want to display the name of the button \"open_chat_new_window\", you can use this in the documentation markdown file:" -msgstr "Es gibt einen speziellen \"Hugo Shortcode\", den Sie verwenden können, um eine Anwendungszeichenkette anzuzeigen. Wenn Sie beispielsweise den Namen der Schaltfläche \"open_chat_new_window\" anzeigen möchten, können Sie dies in der Markdown-Datei der Dokumentation verwenden:" +msgid "" +"There is a specific \"Hugo shortcodes\" you can use to display an " +"application string. Saying you want to display the name of the button " +"\"open_chat_new_window\", you can use this in the documentation markdown " +"file:" +msgstr "" +"Es gibt einen speziellen \"Hugo Shortcode\", den Sie verwenden können, um " +"eine Anwendungszeichenkette anzuzeigen. Wenn Sie beispielsweise den Namen " +"der Schaltfläche \"open_chat_new_window\" anzeigen möchten, können Sie dies " +"in der Markdown-Datei der Dokumentation verwenden:" #. type: Fenced code block (hugo) #: support/documentation/content/en/contributing/translate/_index.md @@ -850,8 +1321,12 @@ msgstr "{{%/* livechat_label open_chat_new_window */%}}\n" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "You can also prevent a whole page from being translating by adding `livechatnotranslation: true` in the Yaml Font Matter section:" -msgstr "Sie können auch verhindern, dass eine ganze Seite übersetzt wird, indem Sie `livechatnotranslation: true` in der Yaml Font Matter Sektion hinzufügen:" +msgid "" +"You can also prevent a whole page from being translating by adding " +"`livechatnotranslation: true` in the Yaml Font Matter section:" +msgstr "" +"Sie können auch verhindern, dass eine ganze Seite übersetzt wird, indem Sie " +"`livechatnotranslation: true` in der Yaml Font Matter Sektion hinzufügen:" #. type: Fenced code block (yaml) #: support/documentation/content/en/contributing/translate/_index.md @@ -875,33 +1350,74 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Never translate a string in the `livechat.en.pot` file, it would be ignored. Instead, edit directly the markdown files." -msgstr "Übersetze niemals eine Zeichenkette in der Datei `livechat.en.pot`, sie würde ignoriert werden. Bearbeiten Sie stattdessen direkt die Markdown-Dateien." +msgid "" +"Never translate a string in the `livechat.en.pot` file, it would be " +"ignored. Instead, edit directly the markdown files." +msgstr "" +"Übersetze niemals eine Zeichenkette in der Datei `livechat.en.pot`, sie " +"würde ignoriert werden. Bearbeiten Sie stattdessen direkt die Markdown-" +"Dateien." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "If a string contains a link, you can change it for the correct link in the translated language. For example, for a link to this documentation, you can add the language code in the url." -msgstr "Wenn eine Zeichenfolge einen Link enthält, können Sie ihn in den richtigen Link in der übersetzten Sprache ändern. Zum Beispiel können Sie für einen Link zu dieser Dokumentation den Sprachcode in die URL einfügen." +msgid "" +"If a string contains a link, you can change it for the correct link in the " +"translated language. For example, for a link to this documentation, you can " +"add the language code in the url." +msgstr "" +"Wenn eine Zeichenfolge einen Link enthält, können Sie ihn in den richtigen " +"Link in der übersetzten Sprache ändern. Zum Beispiel können Sie für einen " +"Link zu dieser Dokumentation den Sprachcode in die URL einfügen." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Some strings are block of code. Don't translate code. But you can translate comments, or parameters if relevant." -msgstr "Einige Zeichenfolgen sind Code-Blöcke. Übersetzen Sie den Code nicht. Aber Sie können Kommentare oder Parameter übersetzen, wenn sie relevant sind." +msgid "" +"Some strings are block of code. Don't translate code. But you can " +"translate comments, or parameters if relevant." +msgstr "" +"Einige Zeichenfolgen sind Code-Blöcke. Übersetzen Sie den Code nicht. Aber " +"Sie können Kommentare oder Parameter übersetzen, wenn sie relevant sind." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md msgid "If you are not sure, just don't translate, and ask what to do." -msgstr "Wenn Sie sich nicht sicher sind, übersetzen Sie einfach nicht und fragen Sie, was zu tun ist." +msgstr "" +"Wenn Sie sich nicht sicher sind, übersetzen Sie einfach nicht und fragen " +"Sie, was zu tun ist." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "The tool I use to handle translations for the documentation can have strange behaviours. When I add sentences that looks like other existing sentences, it sometimes copies existing translations. So, when you have translations marked as \"to check\", please make sure it doesn't copy a string that has nothing to do with the english one before validating." -msgstr "Das Tool, mit dem ich die Übersetzungen für die Dokumentation bearbeite, verhält sich manchmal seltsam. Wenn ich Sätze hinzufüge, die anderen bestehenden Sätzen ähneln, kopiert es manchmal bestehende Übersetzungen. Wenn Sie also Übersetzungen als \"zu prüfen\" markiert haben, stellen Sie bitte sicher, dass es vor der Validierung keine Zeichenfolge kopiert, die nichts mit der englischen zu tun hat." +msgid "" +"The tool I use to handle translations for the documentation can have strange " +"behaviours. When I add sentences that looks like other existing sentences, " +"it sometimes copies existing translations. So, when you have translations " +"marked as \"to check\", please make sure it doesn't copy a string that has " +"nothing to do with the english one before validating." +msgstr "" +"Das Tool, mit dem ich die Übersetzungen für die Dokumentation bearbeite, " +"verhält sich manchmal seltsam. Wenn ich Sätze hinzufüge, die anderen " +"bestehenden Sätzen ähneln, kopiert es manchmal bestehende Übersetzungen. " +"Wenn Sie also Übersetzungen als \"zu prüfen\" markiert haben, stellen Sie " +"bitte sicher, dass es vor der Validierung keine Zeichenfolge kopiert, die " +"nichts mit der englischen zu tun hat." #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "If you are now sure about the context of a string, you can check the string location in the weblate's right pane, and open the corresponding documentation page. For example, for a string located in the file `support/documentation/content/en/documentation/user/streamers.md`, the corresponding url is `https://livingston.frama.io/peertube-plugin-livechat/documentation/user/streamers/`." -msgstr "Wenn Sie sich nun über den Kontext einer Zeichenkette sicher sind, können Sie die Position der Zeichenkette im rechten Fensterbereich von weblate überprüfen und die entsprechende Dokumentationsseite öffnen. Für eine Zeichenfolge in der Datei `support/documentation/content/de/documentation/user/streamers.md` lautet die entsprechende URL beispielsweise `https://livingston.frama.io/peertube-plugin-livechat/de/documentation/user/streamers/`." +msgid "" +"If you are now sure about the context of a string, you can check the string " +"location in the weblate's right pane, and open the corresponding " +"documentation page. For example, for a string located in the file `support/" +"documentation/content/en/documentation/user/streamers.md`, the corresponding " +"url is `https://livingston.frama.io/peertube-plugin-livechat/documentation/" +"user/streamers/`." +msgstr "" +"Wenn Sie sich nun über den Kontext einer Zeichenkette sicher sind, können " +"Sie die Position der Zeichenkette im rechten Fensterbereich von weblate " +"überprüfen und die entsprechende Dokumentationsseite öffnen. Für eine " +"Zeichenfolge in der Datei `support/documentation/content/de/documentation/" +"user/streamers.md` lautet die entsprechende URL beispielsweise `https://" +"livingston.frama.io/peertube-plugin-livechat/de/documentation/user/streamers/" +"`." #. type: Title ## #: support/documentation/content/en/contributing/translate/_index.md @@ -911,8 +1427,12 @@ msgstr "Allgemeine Empfehlungen" #. type: Plain text #: support/documentation/content/en/contributing/translate/_index.md -msgid "Please be inclusive in your wordings, and please respect the [code of coduct](/peertube-plugin-livechat/contributing/codeofconduct/)." -msgstr "Bitte formulieren Sie umfassend und beachten Sie den [Verhaltenskodex](/peertube-plugin-livechat/de/contributing/codeofconduct/)." +msgid "" +"Please be inclusive in your wordings, and please respect the [code of coduct]" +"(/peertube-plugin-livechat/contributing/codeofconduct/)." +msgstr "" +"Bitte formulieren Sie umfassend und beachten Sie den [Verhaltenskodex](/" +"peertube-plugin-livechat/de/contributing/codeofconduct/)." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/credits/_index.md @@ -928,48 +1448,100 @@ msgstr "Impressum" #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "[package.json](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/package.json), [COPYRIGHT](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/COPYRIGHT.md) and [LICENSE](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/LICENSE) files contain the license information for this software and its dependencies." -msgstr "[package.json](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/package.json), [COPYRIGHT](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/COPYRIGHT.md) and [LICENSE](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/LICENSE) Dateien beinhalten die Lizenzinformationen für dieses Programm und seiner Abhängigkeiten." +msgid "" +"[package.json](https://github.com/JohnXLivingston/peertube-plugin-livechat/" +"blob/main/package.json), [COPYRIGHT](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/blob/main/COPYRIGHT.md) and [LICENSE](https://" +"github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/LICENSE) files " +"contain the license information for this software and its dependencies." +msgstr "" +"[package.json](https://github.com/JohnXLivingston/peertube-plugin-livechat/" +"blob/main/package.json), [COPYRIGHT](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/blob/main/COPYRIGHT.md) and [LICENSE](https://" +"github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/LICENSE) " +"Dateien beinhalten die Lizenzinformationen für dieses Programm und seiner " +"Abhängigkeiten." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "The plugin is maintained by [John Livingston](https://www.john-livingston.fr/)." -msgstr "Das Plugin wird von [John Livingston](https://www.john-livingston.fr/) betrieben." +msgid "" +"The plugin is maintained by [John Livingston](https://www.john-livingston." +"fr/)." +msgstr "" +"Das Plugin wird von [John Livingston](https://www.john-livingston.fr/) " +"betrieben." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "Thanks to David Revoy for his work on Peertube's mascot, [Sepia](https://www.davidrevoy.com/index.php?tag/peertube). The character design is under CC-By licence, and the SVG files used to create some logo and avatars in this plugin are GPLv3.0. PNG files are under CC-By licences, and comes from the [online Sepia Avatar Generator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/)." -msgstr "Vielen Dank an David Revoy für seine Arbeit am Peertube-Maskottchen, [Sepia] (https://www.davidrevoy.com/index.php?tag/peertube). Das Charakterdesign steht unter CC-By-Lizenz, und die SVG-Dateien, die zur Erstellung einiger Logos und Avatare in diesem Plugin verwendet wurden, stehen unter GPLv3.0. Die PNG-Dateien stehen unter CC-By-Lizenzen und stammen aus dem [online Sepia Avatar Generator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/)." +msgid "" +"Thanks to David Revoy for his work on Peertube's mascot, [Sepia](https://www." +"davidrevoy.com/index.php?tag/peertube). The character design is under CC-By " +"licence, and the SVG files used to create some logo and avatars in this " +"plugin are GPLv3.0. PNG files are under CC-By licences, and comes from the " +"[online Sepia Avatar Generator](https://www.peppercarrot.com/extras/" +"html/2023_peertube-generator/)." +msgstr "" +"Vielen Dank an David Revoy für seine Arbeit am Peertube-Maskottchen, [Sepia] " +"(https://www.davidrevoy.com/index.php?tag/peertube). Das Charakterdesign " +"steht unter CC-By-Lizenz, und die SVG-Dateien, die zur Erstellung einiger " +"Logos und Avatare in diesem Plugin verwendet wurden, stehen unter GPLv3.0. " +"Die PNG-Dateien stehen unter CC-By-Lizenzen und stammen aus dem [online " +"Sepia Avatar Generator](https://www.peppercarrot.com/extras/" +"html/2023_peertube-generator/)." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "Thanks to [Framasoft](https://framasoft.org) for making [Peertube](https://joinpeertube.org/) possible, for the financial support, and for hosting the project translations on their [Weblate instance](https://weblate.framasoft.org)." -msgstr "Vielen Dank an [Framasoft](https://framasoft.org)für die Ermöglichung von [Peertube](https://joinpeertube.org/), für die finanzielle Unterstützung, und für das [Weblate](https://weblate.framasoft.org)." +msgid "" +"Thanks to [Framasoft](https://framasoft.org) for making [Peertube](https://" +"joinpeertube.org/) possible, for the financial support, and for hosting the " +"project translations on their [Weblate instance](https://weblate.framasoft." +"org)." +msgstr "" +"Vielen Dank an [Framasoft](https://framasoft.org)für die Ermöglichung von " +"[Peertube](https://joinpeertube.org/), für die finanzielle Unterstützung, " +"und für das [Weblate](https://weblate.framasoft.org)." #. type: Plain text #: support/documentation/content/en/credits/_index.md msgid "Thanks to [ritimo](https://www.ritimo.org/) for the financial support." -msgstr "Vielen Dank an [ritimo](https://www.ritimo.org/) für die finanzielle Unterstützung." +msgstr "" +"Vielen Dank an [ritimo](https://www.ritimo.org/) für die finanzielle " +"Unterstützung." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "Thanks to [Code Lutin](https://www.codelutin.com/) and [Rétribution Copie Publique](https://copiepublique.fr/) for the financial support." -msgstr "Vielen Dank an [Code Lutin](https://www.codelutin.com/) und [Rétribution Copie Publique](https://copiepublique.fr/) für die finanzielle Unterstützung." +msgid "" +"Thanks to [Code Lutin](https://www.codelutin.com/) and [Rétribution Copie " +"Publique](https://copiepublique.fr/) for the financial support." +msgstr "" +"Vielen Dank an [Code Lutin](https://www.codelutin.com/) und [Rétribution " +"Copie Publique](https://copiepublique.fr/) für die finanzielle Unterstützung." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "Thanks to [NlNet](https://nlnet.nl/) and the [NGI0 Entrust fund](https://nlnet.nl/entrust/) for the financial support." -msgstr "Vielen Dank an [NlNet](https://nlnet.nl/) und die [NGI0 Entrust fund](https://nlnet.nl/entrust/) für die finanzielle Unterstützung." +msgid "" +"Thanks to [NlNet](https://nlnet.nl/) and the [NGI0 Entrust fund](https://" +"nlnet.nl/entrust/) for the financial support." +msgstr "" +"Vielen Dank an [NlNet](https://nlnet.nl/) und die [NGI0 Entrust fund]" +"(https://nlnet.nl/entrust/) für die finanzielle Unterstützung." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "Thanks to [Octopuce](https://www.octopuce.fr/) for the financial support." -msgstr "Vielen Dank an [Octopuce](https://www.octopuce.fr/) für die finanzielle Unterstützung." +msgid "" +"Thanks to [Octopuce](https://www.octopuce.fr/) for the financial support." +msgstr "" +"Vielen Dank an [Octopuce](https://www.octopuce.fr/) für die finanzielle " +"Unterstützung." #. type: Plain text #: support/documentation/content/en/credits/_index.md -msgid "And thanks to all individual contributors who have made a donation via my [liberapay page](https://liberapay.com/JohnLivingston/)." -msgstr "Und vielen Dank an alle Einzelspender, die über meine [Liberapay Seite] (https://liberapay.com/JohnLivingston/) gespendet haben." +msgid "" +"And thanks to all individual contributors who have made a donation via my " +"[liberapay page](https://liberapay.com/JohnLivingston/)." +msgstr "" +"Und vielen Dank an alle Einzelspender, die über meine [Liberapay Seite] " +"(https://liberapay.com/JohnLivingston/) gespendet haben." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/admin/advanced/_index.md @@ -997,8 +1569,14 @@ msgstr "Matterbridge benutzen" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "The following is based on a tutorial to use Matterbridge with the plugin: [Matterbridge + Peertube](https://gitlab.com/refrac/obs-matterbridge-overlay/-/blob/master/documentation/peertube.md)" -msgstr "Das Folgende basiert auf einem Tutorial zur Verwendung von Matterbridge mit dem Plugin: [Matterbridge + Peertube](https://gitlab.com/refrac/obs-matterbridge-overlay/-/blob/master/documentation/peertube.md)" +msgid "" +"The following is based on a tutorial to use Matterbridge with the plugin: " +"[Matterbridge + Peertube](https://gitlab.com/refrac/obs-matterbridge-" +"overlay/-/blob/master/documentation/peertube.md)" +msgstr "" +"Das Folgende basiert auf einem Tutorial zur Verwendung von Matterbridge mit " +"dem Plugin: [Matterbridge + Peertube](https://gitlab.com/refrac/obs-" +"matterbridge-overlay/-/blob/master/documentation/peertube.md)" #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1008,18 +1586,30 @@ msgstr "Anforderungen" #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "[PeerTube plugin livechat](https://github.com/JohnXLivingston/peertube-plugin-livechat) version 3.2.0 or later." -msgstr "[PeerTube plugin livechat](https://github.com/JohnXLivingston/peertube-plugin-livechat) Version 3.2.0 oder höher." +msgid "" +"[PeerTube plugin livechat](https://github.com/JohnXLivingston/peertube-" +"plugin-livechat) version 3.2.0 or later." +msgstr "" +"[PeerTube plugin livechat](https://github.com/JohnXLivingston/peertube-" +"plugin-livechat) Version 3.2.0 oder höher." #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "[Matterbridge](https://github.com/42wim/matterbridge) version 1.22.4 or later." -msgstr "[Matterbridge](https://github.com/42wim/matterbridge) Version 1.22.4 oder höher." +msgid "" +"[Matterbridge](https://github.com/42wim/matterbridge) version 1.22.4 or " +"later." +msgstr "" +"[Matterbridge](https://github.com/42wim/matterbridge) Version 1.22.4 oder " +"höher." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "The easiest is if the PeerTube instance and Matterbridge run on the same server." -msgstr "Am einfachsten ist es, wenn die PeerTube-Instanz und Matterbridge auf demselben Server laufen." +msgid "" +"The easiest is if the PeerTube instance and Matterbridge run on the same " +"server." +msgstr "" +"Am einfachsten ist es, wenn die PeerTube-Instanz und Matterbridge auf " +"demselben Server laufen." #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1029,18 +1619,26 @@ msgstr "Nur interne Verbindungen (EInfach)" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "You will need to enable `{{% livechat_label prosody_c2s_label %}}` in the livechat plugin settings." -msgstr "Sie müssen `{{% livechat_label prosody_c2s_label %}}` in den Einstellungen des Livechat-Plugins aktivieren." +msgid "" +"You will need to enable `{{% livechat_label prosody_c2s_label %}}` in the " +"livechat plugin settings." +msgstr "" +"Sie müssen `{{% livechat_label prosody_c2s_label %}}` in den Einstellungen " +"des Livechat-Plugins aktivieren." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "This will allow localhost XMPP clients to connect to the Prosody XMPP server." -msgstr "Dadurch können XMPP-Clients von localhost eine Verbindung zum Prosody XMPP-Server herstellen." +msgid "" +"This will allow localhost XMPP clients to connect to the Prosody XMPP server." +msgstr "" +"Dadurch können XMPP-Clients von localhost eine Verbindung zum Prosody XMPP-" +"Server herstellen." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md msgid "You may need to add some line to your `/etc/hosts`:" -msgstr "Möglicherweise müssen Sie eine Zeile in Ihre Datei `/etc/hosts` hinzufügen:" +msgstr "" +"Möglicherweise müssen Sie eine Zeile in Ihre Datei `/etc/hosts` hinzufügen:" #. type: Fenced code block #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1050,8 +1648,13 @@ msgstr "127.0.0.1 anon.example.org raum.example.org\n" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "Replace `example.org` by your actual instance domain name. Afterwards you can continue with the Matterbridge configuration below." -msgstr "Ersetzen Sie `example.org` durch den Namen Ihrer tatsächlichen Instanzdomäne. Danach können Sie mit der Matterbridge-Konfiguration fortfahren." +msgid "" +"Replace `example.org` by your actual instance domain name. Afterwards you " +"can continue with the Matterbridge configuration below." +msgstr "" +"Ersetzen Sie `example.org` durch den Namen Ihrer tatsächlichen " +"Instanzdomäne. Danach können Sie mit der Matterbridge-Konfiguration " +"fortfahren." #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1061,8 +1664,12 @@ msgstr "Externe Verbindungen zulassen (Fortgeschritten)" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "By default, the internal Prosody XMPP server only listens on localhost (127.0.0.1)." -msgstr "Standardmäßig lauscht der interne Prosody XMPP-Server nur auf localhost (127.0.0.1)." +msgid "" +"By default, the internal Prosody XMPP server only listens on localhost " +"(127.0.0.1)." +msgstr "" +"Standardmäßig lauscht der interne Prosody XMPP-Server nur auf localhost " +"(127.0.0.1)." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1072,28 +1679,59 @@ msgstr "Dem Livechat Plugin Versionen >= 10.1.0 wurde eine neue Option `Client z #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "It allows to add a list of IPs to listen on, coma separated (spaces will be stripped)." -msgstr "Es ermöglicht das Hinzufügen einer Liste von IPs, die abgehört werden sollen, durch Kommata getrennt (Leerzeichen werden entfernt)." +msgid "" +"It allows to add a list of IPs to listen on, coma separated (spaces will be " +"stripped)." +msgstr "" +"Es ermöglicht das Hinzufügen einer Liste von IPs, die abgehört werden " +"sollen, durch Kommata getrennt (Leerzeichen werden entfernt)." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "You can also use `*` to listen on all IPv4 interfaces, and `::` for all IPv6. Doing so allows external access to the client to server interface." -msgstr "Sie können auch `*` verwenden, um an allen IPv4-Schnittstellen zu lauschen, und `::` für alle IPv6-Schnittstellen. Dadurch wird der externe Zugriff auf die Schnittstelle zwischen Client und Server ermöglicht." +msgid "" +"You can also use `*` to listen on all IPv4 interfaces, and `::` for all " +"IPv6. Doing so allows external access to the client to server interface." +msgstr "" +"Sie können auch `*` verwenden, um an allen IPv4-Schnittstellen zu lauschen, " +"und `::` für alle IPv6-Schnittstellen. Dadurch wird der externe Zugriff auf " +"die Schnittstelle zwischen Client und Server ermöglicht." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "Then you need to open the C2S port (by default `52822`, but check the plugin settings to get the current value) in your firewall so that it can be reached from the internet. If you don't want to use C2S connections for anything else than your Matterbridge service, you should restrict access to this port to your Matterbridge server IP." -msgstr "Dann müssen Sie den C2S-Port (standardmäßig `52822`, aber überprüfen Sie die Plugin-Einstellungen, um den aktuellen Wert zu erhalten) in Ihrer Firewall öffnen, damit er vom Internet aus erreicht werden kann. Wenn Sie C2S-Verbindungen nur für Ihren Matterbridge-Dienst verwenden möchten, sollten Sie den Zugriff auf diesen Port auf die IP Ihres Matterbridge-Servers beschränken." +msgid "" +"Then you need to open the C2S port (by default `52822`, but check the plugin " +"settings to get the current value) in your firewall so that it can be " +"reached from the internet. If you don't want to use C2S connections for " +"anything else than your Matterbridge service, you should restrict access to " +"this port to your Matterbridge server IP." +msgstr "" +"Dann müssen Sie den C2S-Port (standardmäßig `52822`, aber überprüfen Sie die " +"Plugin-Einstellungen, um den aktuellen Wert zu erhalten) in Ihrer Firewall " +"öffnen, damit er vom Internet aus erreicht werden kann. Wenn Sie C2S-" +"Verbindungen nur für Ihren Matterbridge-Dienst verwenden möchten, sollten " +"Sie den Zugriff auf diesen Port auf die IP Ihres Matterbridge-Servers " +"beschränken." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "You also need to add DNS records (A and AAAA) for `anon.example.org` and `room.example.org` (replace `example.org` by your actual domain name)." -msgstr "Sie müssen auch DNS-Einträge (A und AAAA) für `anon.example.org` und `room.example.org` hinzufügen (ersetzen Sie `example.org` durch Ihren tatsächlichen Domänennamen)." +msgid "" +"You also need to add DNS records (A and AAAA) for `anon.example.org` and " +"`room.example.org` (replace `example.org` by your actual domain name)." +msgstr "" +"Sie müssen auch DNS-Einträge (A und AAAA) für `anon.example.org` und `room." +"example.org` hinzufügen (ersetzen Sie `example.org` durch Ihren " +"tatsächlichen Domänennamen)." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "In case you are using a port other than `5222` (XMPP standard port) you also need to set the [xmpp-client SRV record](https://prosody.im/doc/dns#srv_records) to the correct port." -msgstr "Falls Sie einen anderen Port als `5222` (XMPP-Standardport) verwenden, müssen Sie auch den [xmpp-client SRV record](https://prosody.im/doc/dns#srv_records) auf den richtigen Port setzen." +msgid "" +"In case you are using a port other than `5222` (XMPP standard port) you also " +"need to set the [xmpp-client SRV record](https://prosody.im/doc/" +"dns#srv_records) to the correct port." +msgstr "" +"Falls Sie einen anderen Port als `5222` (XMPP-Standardport) verwenden, " +"müssen Sie auch den [xmpp-client SRV record](https://prosody.im/doc/" +"dns#srv_records) auf den richtigen Port setzen." #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1103,8 +1741,13 @@ msgstr "Matterbridge konfigurieren" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "In the version 1.22.4, Matterbridge added support for XMPP anonymous connections needed to connect to the built-in prosody." -msgstr "In der Version 1.22.4 hat Matterbridge Unterstützung für anonyme XMPP-Verbindungen hinzugefügt, die für die Verbindung mit der eingebauten Prosody benötigt werden." +msgid "" +"In the version 1.22.4, Matterbridge added support for XMPP anonymous " +"connections needed to connect to the built-in prosody." +msgstr "" +"In der Version 1.22.4 hat Matterbridge Unterstützung für anonyme XMPP-" +"Verbindungen hinzugefügt, die für die Verbindung mit der eingebauten Prosody " +"benötigt werden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1134,12 +1777,15 @@ msgstr "" #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md msgid "Replace `example.org` by your actual instance domain name." -msgstr "Ersetzen Sie `example.org` durch den Namen Ihrer tatsächlichen Instanzdomäne." +msgstr "" +"Ersetzen Sie `example.org` durch den Namen Ihrer tatsächlichen Instanzdomäne." #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md msgid "Replace `52822` by the actual port if you changed it." -msgstr "Ersetzen Sie \"52822\" durch den tatsächlichen Port, wenn Sie ihn geändert haben." +msgstr "" +"Ersetzen Sie \"52822\" durch den tatsächlichen Port, wenn Sie ihn geändert " +"haben." #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md @@ -1148,23 +1794,56 @@ msgstr "`mypeertube` kann durch einen anderen Namen ersetzt werden." #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "Using `peertube` as the Nick will provide put PeerTube icon for overlay messages, can be also done with overlay config modification." -msgstr "Die Verwendung von `peertube` als Nick stellt ein PeerTube-Symbol für Overlay-Nachrichten zur Verfügung, kann aber auch mit einer Overlay-Konfigurationsänderung durchgeführt werden." +msgid "" +"Using `peertube` as the Nick will provide put PeerTube icon for overlay " +"messages, can be also done with overlay config modification." +msgstr "" +"Die Verwendung von `peertube` als Nick stellt ein PeerTube-Symbol für " +"Overlay-Nachrichten zur Verfügung, kann aber auch mit einer Overlay-" +"Konfigurationsänderung durchgeführt werden." #. type: Bullet: '- ' #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "The setting `NoTLS=true` allows connecting to a server with self-signed certificates." -msgstr "Die Einstellung `NoTLS=true` ermöglicht die Verbindung zu einem Server mit selbstsignierten Zertifikaten." +msgid "" +"The setting `NoTLS=true` allows connecting to a server with self-signed " +"certificates." +msgstr "" +"Die Einstellung `NoTLS=true` ermöglicht die Verbindung zu einem Server mit " +"selbstsignierten Zertifikaten." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "Now you can add this account to gateways and bridge specific live-chat channels." -msgstr "Jetzt können Sie dieses Konto zu Gateways hinzufügen und bestimmte Live-Übertragungskanäle weiterleiten." +msgid "" +"Now you can add this account to gateways and bridge specific live-chat " +"channels." +msgstr "" +"Jetzt können Sie dieses Konto zu Gateways hinzufügen und bestimmte Live-" +"Übertragungskanäle weiterleiten." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/matterbridge.md -msgid "This documentation use an anonymous account to connect the bridge to the chat. But since the livechat v10.1.0, there is a new way to generate long term authentication token, that allows to connect using your account. This is used for [OBS docks](/peertube-plugin-livechat/documentation/user/obs). Using this feature for other purposes is not documented and not officially supported yet. If you want to use it anyway, you can request a token by calling then `/plugins/livechat/router/api/auth/tokens` endpoint. To get needed headers and request body, just check what happens when you generate a new token for OBS docks." -msgstr "In dieser Dokumentation wird ein anonymes Konto verwendet, um die Brücke mit dem Chat zu verbinden. Aber seit dem Livechat v10.1.0 gibt es eine neue Möglichkeit, ein langfristiges Authentifizierungs-Token zu generieren, das es erlaubt, sich mit dem eigenen Konto zu verbinden. Dies wird für [OBS docks](/peertube-plugin-livechat/de/documentation/user/obs) verwendet. Die Verwendung dieser Funktion für andere Zwecke ist nicht dokumentiert und wird noch nicht offiziell unterstützt. Wenn Sie es trotzdem benutzen wollen, können Sie ein Token anfordern, indem Sie den Endpunkt `/plugins/livechat/router/api/auth/tokens` aufrufen. Um die benötigten Header und den Request Body zu erhalten, prüfe einfach, was passiert, wenn du ein neues Token für OBS Docks generierst." +msgid "" +"This documentation use an anonymous account to connect the bridge to the " +"chat. But since the livechat v10.1.0, there is a new way to generate long " +"term authentication token, that allows to connect using your account. This " +"is used for [OBS docks](/peertube-plugin-livechat/documentation/user/obs). " +"Using this feature for other purposes is not documented and not officially " +"supported yet. If you want to use it anyway, you can request a token by " +"calling then `/plugins/livechat/router/api/auth/tokens` endpoint. To get " +"needed headers and request body, just check what happens when you generate a " +"new token for OBS docks." +msgstr "" +"In dieser Dokumentation wird ein anonymes Konto verwendet, um die Brücke mit " +"dem Chat zu verbinden. Aber seit dem Livechat v10.1.0 gibt es eine neue " +"Möglichkeit, ein langfristiges Authentifizierungs-Token zu generieren, das " +"es erlaubt, sich mit dem eigenen Konto zu verbinden. Dies wird für [OBS " +"docks](/peertube-plugin-livechat/de/documentation/user/obs) verwendet. Die " +"Verwendung dieser Funktion für andere Zwecke ist nicht dokumentiert und wird " +"noch nicht offiziell unterstützt. Wenn Sie es trotzdem benutzen wollen, " +"können Sie ein Token anfordern, indem Sie den Endpunkt `/plugins/livechat/" +"router/api/auth/tokens` aufrufen. Um die benötigten Header und den Request " +"Body zu erhalten, prüfe einfach, was passiert, wenn du ein neues Token für " +"OBS Docks generierst." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1180,18 +1859,40 @@ msgstr "XMPP-Clients" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "This chat module is based on the XMPP protocol, also known as Jabber. It is therefore possible to connect to the chats using [XMPP client software](https://en.wikipedia.org/wiki/XMPP#Clients). This can for example be useful to facilitate moderation operations." -msgstr "Dieses Chatmodul basiert auf dem XMPP-Protokoll, das auch als Jabber bekannt ist. Es ist daher möglich, sich mit Hilfe von [XMPP-Client-Software](https://en.wikipedia.org/wiki/XMPP#Clients) mit den Chats zu verbinden. Dies kann zum Beispiel nützlich sein, um Moderationsvorgänge zu erleichtern." +msgid "" +"This chat module is based on the XMPP protocol, also known as Jabber. It is " +"therefore possible to connect to the chats using [XMPP client software]" +"(https://en.wikipedia.org/wiki/XMPP#Clients). This can for example be " +"useful to facilitate moderation operations." +msgstr "" +"Dieses Chatmodul basiert auf dem XMPP-Protokoll, das auch als Jabber bekannt " +"ist. Es ist daher möglich, sich mit Hilfe von [XMPP-Client-Software](https://" +"en.wikipedia.org/wiki/XMPP#Clients) mit den Chats zu verbinden. Dies kann " +"zum Beispiel nützlich sein, um Moderationsvorgänge zu erleichtern." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "For the user documentation associated with these features, please refer to the [user documentation page](/peertube-plugin-livechat/documentation/user/xmpp_clients/)." -msgstr "Die Benutzerdokumentation zu diesen Funktionen finden Sie auf der Seite [Benutzerdokumentation](/peertube-plugin-livechat/de/documentation/user/xmpp_clients/)." +msgid "" +"For the user documentation associated with these features, please refer to " +"the [user documentation page](/peertube-plugin-livechat/documentation/user/" +"xmpp_clients/)." +msgstr "" +"Die Benutzerdokumentation zu diesen Funktionen finden Sie auf der Seite " +"[Benutzerdokumentation](/peertube-plugin-livechat/de/documentation/user/" +"xmpp_clients/)." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Enabling these features requires configuration changes on the server, and on the DNS records. It is not possible to configure this only from the Peertube interface, and it requires some basic system some basic system admin skills." -msgstr "Die Aktivierung dieser Funktionen erfordert Konfigurationsänderungen auf dem Server und in den DNS-Einträgen. Es ist nicht möglich, dies nur über die Peertube-Schnittstelle zu konfigurieren, und es erfordert einige grundlegende Systemadministrationskenntnisse." +msgid "" +"Enabling these features requires configuration changes on the server, and on " +"the DNS records. It is not possible to configure this only from the " +"Peertube interface, and it requires some basic system some basic system " +"admin skills." +msgstr "" +"Die Aktivierung dieser Funktionen erfordert Konfigurationsänderungen auf dem " +"Server und in den DNS-Einträgen. Es ist nicht möglich, dies nur über die " +"Peertube-Schnittstelle zu konfigurieren, und es erfordert einige " +"grundlegende Systemadministrationskenntnisse." #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1203,8 +1904,12 @@ msgstr "Melden Sie sich bei Ihrem Peertube-Konto an" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "This feature is not yet available, and will come in a future version of the plugin." -msgstr "Diese Funktion ist noch nicht verfügbar und wird in einer zukünftigen Version des Plugins enthalten sein." +msgid "" +"This feature is not yet available, and will come in a future version of the " +"plugin." +msgstr "" +"Diese Funktion ist noch nicht verfügbar und wird in einer zukünftigen " +"Version des Plugins enthalten sein." #. type: Title ## #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1215,8 +1920,14 @@ msgstr "Verbindung über ein externes XMPP-Konto" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "To enable this feature, you will need to set up your server and DNS records, so that XMPP clients can find and access the [Prosody server](https://prosody.im) that this plugin uses internally." -msgstr "Um diese Funktion zu aktivieren, müssen Sie Ihren Server und Ihre DNS-Einträge so einrichten, dass XMPP-Clients den [Prosody-Server](https://prosody.im) finden und erreichen können, den dieses Plugin intern verwendet." +msgid "" +"To enable this feature, you will need to set up your server and DNS records, " +"so that XMPP clients can find and access the [Prosody server](https://" +"prosody.im) that this plugin uses internally." +msgstr "" +"Um diese Funktion zu aktivieren, müssen Sie Ihren Server und Ihre DNS-" +"Einträge so einrichten, dass XMPP-Clients den [Prosody-Server](https://" +"prosody.im) finden und erreichen können, den dieses Plugin intern verwendet." #. type: Title ### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1226,23 +1937,60 @@ msgstr "Plugin Einstellungen" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Start by going to the livechat plugin settings of your instance, then enable the setting \"Enable connection to room using external XMPP accounts\". By checking this setting, new settings appear below." -msgstr "Beginne mit den Einstellungen des Livechat-Plugins deiner Instanz und aktiviere die Einstellung \"Verbindung zum Raum über externe XMPP-Konten aktivieren\". Wenn Sie diese Einstellung aktivieren, erscheinen unterhalb neue Einstellungen." +msgid "" +"Start by going to the livechat plugin settings of your instance, then enable " +"the setting \"Enable connection to room using external XMPP accounts\". By " +"checking this setting, new settings appear below." +msgstr "" +"Beginne mit den Einstellungen des Livechat-Plugins deiner Instanz und " +"aktiviere die Einstellung \"Verbindung zum Raum über externe XMPP-Konten " +"aktivieren\". Wenn Sie diese Einstellung aktivieren, erscheinen unterhalb " +"neue Einstellungen." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "First of all, the \"Prosody server to server port\" field. This one defaults to 5269, which is the standard port for this service. You can however change to another port, if this is already in use on your server." -msgstr "Zunächst einmal das Feld \"Prosody-Server-zu-Server-Port\". Dieses Feld ist standardmäßig auf 5269 voreingestellt, dem Standardport für diesen Dienst. Sie können jedoch einen anderen Port wählen, wenn dieser bereits auf Ihrem Server verwendet wird." +msgid "" +"First of all, the \"Prosody server to server port\" field. This one " +"defaults to 5269, which is the standard port for this service. You can " +"however change to another port, if this is already in use on your server." +msgstr "" +"Zunächst einmal das Feld \"Prosody-Server-zu-Server-Port\". Dieses Feld ist " +"standardmäßig auf 5269 voreingestellt, dem Standardport für diesen Dienst. " +"Sie können jedoch einen anderen Port wählen, wenn dieser bereits auf Ihrem " +"Server verwendet wird." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Next, the field \"Server to server network interfaces\" field allows you to specify which network interfaces the server should listen on. The default value \"*, ::\" indicates to listen on all IP addresses. You can change these values, if you wish to listen on only certain IP addresses. The syntax is explained next to the setting." -msgstr "Anschließend können Sie im Feld \"Netzwerkschnittstellen zwischen Server und Server\" angeben, welche Netzwerkschnittstellen der Server abhören soll. Der Standardwert \"*, ::\" bedeutet, dass alle IP-Adressen abgehört werden sollen. Sie können diese Werte ändern, wenn Sie nur bestimmte IP-Adressen abhören möchten. Die Syntax wird neben der Einstellung erklärt." +msgid "" +"Next, the field \"Server to server network interfaces\" field allows you to " +"specify which network interfaces the server should listen on. The default " +"value \"*, ::\" indicates to listen on all IP addresses. You can change " +"these values, if you wish to listen on only certain IP addresses. The " +"syntax is explained next to the setting." +msgstr "" +"Anschließend können Sie im Feld \"Netzwerkschnittstellen zwischen Server und " +"Server\" angeben, welche Netzwerkschnittstellen der Server abhören soll. Der " +"Standardwert \"*, ::\" bedeutet, dass alle IP-Adressen abgehört werden " +"sollen. Sie können diese Werte ändern, wenn Sie nur bestimmte IP-Adressen " +"abhören möchten. Die Syntax wird neben der Einstellung erklärt." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "For the \"Certificate folder\" setting, you can leave it empty. In this case, the plugin will automatically generate self-signed certificates. Some XMPP servers may refuse to connect, depending on their configuration. In this case, you can indicate here a path on the server, in which you must place certificates to be used by the module. It is up to you to generate and renew them. See bellow for more information." -msgstr "Die Einstellung \"Zertifikatsordner\" können Sie leer lassen. In diesem Fall wird das Plugin automatisch selbstsignierte Zertifikate erzeugen. Einige XMPP-Server verweigern je nach ihrer Konfiguration möglicherweise die Verbindung. In diesem Fall können Sie hier einen Pfad auf dem Server angeben, in dem Sie die vom Modul zu verwendenden Zertifikate ablegen müssen. Es liegt an Ihnen, diese zu erzeugen und zu erneuern. Für weitere Informationen siehe unten." +msgid "" +"For the \"Certificate folder\" setting, you can leave it empty. In this " +"case, the plugin will automatically generate self-signed certificates. Some " +"XMPP servers may refuse to connect, depending on their configuration. In " +"this case, you can indicate here a path on the server, in which you must " +"place certificates to be used by the module. It is up to you to generate " +"and renew them. See bellow for more information." +msgstr "" +"Die Einstellung \"Zertifikatsordner\" können Sie leer lassen. In diesem Fall " +"wird das Plugin automatisch selbstsignierte Zertifikate erzeugen. Einige " +"XMPP-Server verweigern je nach ihrer Konfiguration möglicherweise die " +"Verbindung. In diesem Fall können Sie hier einen Pfad auf dem Server " +"angeben, in dem Sie die vom Modul zu verwendenden Zertifikate ablegen " +"müssen. Es liegt an Ihnen, diese zu erzeugen und zu erneuern. Für weitere " +"Informationen siehe unten." #. type: Title ### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1253,12 +2001,20 @@ msgstr "Firewall" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md msgid "You must open the configured port (5269 by default) on your firewall." -msgstr "Sie müssen den konfigurierten Port (standardmäßig 5269) in Ihrer Firewall öffnen." +msgstr "" +"Sie müssen den konfigurierten Port (standardmäßig 5269) in Ihrer Firewall " +"öffnen." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "If you are using Docker for your Peertube, you need to modify the `docker-compose.yml` file to open port 5269 of the `peertube` container, so that the outer world can connect to it." -msgstr "Wenn Sie Docker für Ihren Peertube verwenden, müssen Sie die Datei `docker-compose.yml` ändern, um Port 5269 des `Peertube`-Containers zu öffnen, damit sich die Außenwelt mit ihm verbinden kann." +msgid "" +"If you are using Docker for your Peertube, you need to modify the `docker-" +"compose.yml` file to open port 5269 of the `peertube` container, so that the " +"outer world can connect to it." +msgstr "" +"Wenn Sie Docker für Ihren Peertube verwenden, müssen Sie die Datei `docker-" +"compose.yml` ändern, um Port 5269 des `Peertube`-Containers zu öffnen, damit " +"sich die Außenwelt mit ihm verbinden kann." #. type: Title ### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1268,18 +2024,32 @@ msgstr "DNS" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "You need to add [DNS records](https://prosody.im/doc/dns) allowing remote servers to find \"room.your_instance.tld\" and \"external.your_instance.tld\" components." -msgstr "Sie müssen [DNS-Einträge](https://prosody.im/doc/dns) hinzufügen, die es entfernten Servern ermöglicht, die Komponenten \"room.your_instance.tld\" und \"external.your_instance.tld\" zu finden." +msgid "" +"You need to add [DNS records](https://prosody.im/doc/dns) allowing remote " +"servers to find \"room.your_instance.tld\" and \"external.your_instance." +"tld\" components." +msgstr "" +"Sie müssen [DNS-Einträge](https://prosody.im/doc/dns) hinzufügen, die es " +"entfernten Servern ermöglicht, die Komponenten \"room.your_instance.tld\" " +"und \"external.your_instance.tld\" zu finden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "The easiest way to do this is to add SRV records for the \"room\" and \"external\" [subdomain](https://prosody.im/doc/dns#subdomains):" -msgstr "Am einfachsten ist es, SRV-Einträge für die [Subdomänen](https://prosody.im/doc/dns#subdomains) \"room\" und \"external\" hinzuzufügen:" +msgid "" +"The easiest way to do this is to add SRV records for the \"room\" and " +"\"external\" [subdomain](https://prosody.im/doc/dns#subdomains):" +msgstr "" +"Am einfachsten ist es, SRV-Einträge für die [Subdomänen](https://prosody.im/" +"doc/dns#subdomains) \"room\" und \"external\" hinzuzufügen:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "record name: _xmpp-server._tcp.room.your_instance.tld. (replace «your_instance.tld» by your instance uri)" -msgstr "record name: _xmpp-server._tcp.room.ihre_instanz.tld. (ersetzen Sie «ihre_instanz.tld» mit ihrer Instanz Uri)" +msgid "" +"record name: _xmpp-server._tcp.room.your_instance.tld. (replace " +"«your_instance.tld» by your instance uri)" +msgstr "" +"record name: _xmpp-server._tcp.room.ihre_instanz.tld. (ersetzen Sie " +"«ihre_instanz.tld» mit ihrer Instanz Uri)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1318,18 +2088,27 @@ msgstr "Ziel: ihre_instanz.tld. (durch Ihre Instanz-URI ersetzen)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "record name: _xmpp-server._tcp.external.your_instance.tld. (replace «your_instance.tld» by your instance uri)" -msgstr "record name: _xmpp-server._tcp.external.ihre_instanz.tld. (ersetzen Sie «ihre_instanz.tld» mit ihrer Instanz Uri)" +msgid "" +"record name: _xmpp-server._tcp.external.your_instance.tld. (replace " +"«your_instance.tld» by your instance uri)" +msgstr "" +"record name: _xmpp-server._tcp.external.ihre_instanz.tld. (ersetzen Sie " +"«ihre_instanz.tld» mit ihrer Instanz Uri)" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md msgid "Be careful to keep the dot after \"your_instance.tld\"." -msgstr "Achten Sie darauf, dass der Punkt nach \"ihre_instanz.tld\" erhalten bleibt." +msgstr "" +"Achten Sie darauf, dass der Punkt nach \"ihre_instanz.tld\" erhalten bleibt." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Using the `dig` command to check your records, you should get a result similar to this:" -msgstr "Wenn Sie den Befehl `dig` verwenden, um Ihren Datensätze zu überprüfen, sollten Sie ein ähnliches Ergebnis wie dieses erhalten:" +msgid "" +"Using the `dig` command to check your records, you should get a result " +"similar to this:" +msgstr "" +"Wenn Sie den Befehl `dig` verwenden, um Ihren Datensätze zu überprüfen, " +"sollten Sie ein ähnliches Ergebnis wie dieses erhalten:" #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1349,8 +2128,17 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "If you are **not using the standard `5269` port**, you must also add a SRV record for `_xmpp-server._tcp.your_instance.tld.` (same as above, just without the `room.` prefix). Of course, you can also add this record if you use the standard port. It will also work." -msgstr "Wenn Sie **nicht den Standardport `5269` verwenden**, müssen Sie auch einen SRV-Eintrag für `_xmpp-server._tcp.ihre_instanz.tld.` hinzufügen (wie oben, nur ohne das Präfix `room.`). Natürlich können Sie diesen Eintrag auch hinzufügen, wenn Sie den Standard-Port verwenden. Das wird auch funktionieren." +msgid "" +"If you are **not using the standard `5269` port**, you must also add a SRV " +"record for `_xmpp-server._tcp.your_instance.tld.` (same as above, just " +"without the `room.` prefix). Of course, you can also add this record if you " +"use the standard port. It will also work." +msgstr "" +"Wenn Sie **nicht den Standardport `5269` verwenden**, müssen Sie auch einen " +"SRV-Eintrag für `_xmpp-server._tcp.ihre_instanz.tld.` hinzufügen (wie oben, " +"nur ohne das Präfix `room.`). Natürlich können Sie diesen Eintrag auch " +"hinzufügen, wenn Sie den Standard-Port verwenden. Das wird auch " +"funktionieren." #. type: Title ### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1360,13 +2148,35 @@ msgstr "Verwendung vertrauenswürdiger Zertifikate" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "The self-signed certificates that this plugin uses by default can be rejected by some XMPP servers, for security reasons." -msgstr "Die selbstsignierten Zertifikate, die dieses Plugin standardmäßig verwendet, können von einigen XMPP-Servern aus Sicherheitsgründen abgelehnt werden." +msgid "" +"The self-signed certificates that this plugin uses by default can be " +"rejected by some XMPP servers, for security reasons." +msgstr "" +"Die selbstsignierten Zertifikate, die dieses Plugin standardmäßig verwendet, " +"können von einigen XMPP-Servern aus Sicherheitsgründen abgelehnt werden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "It is possible to use certificates validated by a certification authority. However, this requires advanced system administration knowledge. Indeed, due to the multitude of possible use cases, it is impossible to document all situations here. This documentation will therefore only explain the goal to be reached, and give an example which will only be suitable for a \"basic\" situation (manual installation of Peertube, using letsencrypt). If you are in another situation (Docker installation, certificates signed by another authority, etc...), you will have to adapt this approach by yourself." -msgstr "Es ist möglich, von einer Zertifizierungsstelle validierte Zertifikate zu verwenden. Dies erfordert jedoch fortgeschrittene Kenntnisse in der Systemverwaltung. Aufgrund der Vielzahl möglicher Anwendungsfälle ist es in der Tat unmöglich, hier alle Situationen zu dokumentieren. Diese Dokumentation wird daher nur das zu erreichende Ziel erläutern und ein Beispiel geben, das nur für eine \"einfache\" Situation geeignet ist (manuelle Installation von Peertube unter Verwendung von letsencrypt). Wenn Sie sich in einer anderen Situation befinden (Docker-Installation, von einer anderen Autorität signierte Zertifikate, etc...), müssen Sie diesen Ansatz selbst anpassen." +msgid "" +"It is possible to use certificates validated by a certification authority. " +"However, this requires advanced system administration knowledge. Indeed, " +"due to the multitude of possible use cases, it is impossible to document all " +"situations here. This documentation will therefore only explain the goal to " +"be reached, and give an example which will only be suitable for a \"basic\" " +"situation (manual installation of Peertube, using letsencrypt). If you are " +"in another situation (Docker installation, certificates signed by another " +"authority, etc...), you will have to adapt this approach by yourself." +msgstr "" +"Es ist möglich, von einer Zertifizierungsstelle validierte Zertifikate zu " +"verwenden. Dies erfordert jedoch fortgeschrittene Kenntnisse in der " +"Systemverwaltung. Aufgrund der Vielzahl möglicher Anwendungsfälle ist es in " +"der Tat unmöglich, hier alle Situationen zu dokumentieren. Diese " +"Dokumentation wird daher nur das zu erreichende Ziel erläutern und ein " +"Beispiel geben, das nur für eine \"einfache\" Situation geeignet ist " +"(manuelle Installation von Peertube unter Verwendung von letsencrypt). Wenn " +"Sie sich in einer anderen Situation befinden (Docker-Installation, von einer " +"anderen Autorität signierte Zertifikate, etc...), müssen Sie diesen Ansatz " +"selbst anpassen." #. type: Title #### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1376,23 +2186,51 @@ msgstr "Grundlegendes Prinzip" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "It is up to you to generate valid certificates for domains `your_instance.tld` and `room.your_instance.tld`. You can use any [method supported by Prosody](https://prosody.im/doc/certificates)." -msgstr "Es liegt an Ihnen, gültige Zertifikate für die Domänen `ihre_instanz.tld` und `room.ihre_instanz.tld` zu erzeugen. Sie können jede [von Prosody unterstützte Methode](https://prosody.im/doc/certificates) verwenden." +msgid "" +"It is up to you to generate valid certificates for domains `your_instance." +"tld` and `room.your_instance.tld`. You can use any [method supported by " +"Prosody](https://prosody.im/doc/certificates)." +msgstr "" +"Es liegt an Ihnen, gültige Zertifikate für die Domänen `ihre_instanz.tld` " +"und `room.ihre_instanz.tld` zu erzeugen. Sie können jede [von Prosody " +"unterstützte Methode](https://prosody.im/doc/certificates) verwenden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "You must then place these certificates in a folder that will be accessible to the `peertube` user, and specify this folder in the plugin setting \"Certificate folder\"." -msgstr "Sie müssen diese Zertifikate dann in einem Ordner ablegen, auf den der `peertube`-Benutzer zugreifen kann, und diesen Ordner in der Plugin Einstellung \"Certificate folder\" angeben." +msgid "" +"You must then place these certificates in a folder that will be accessible " +"to the `peertube` user, and specify this folder in the plugin setting " +"\"Certificate folder\"." +msgstr "" +"Sie müssen diese Zertifikate dann in einem Ordner ablegen, auf den der " +"`peertube`-Benutzer zugreifen kann, und diesen Ordner in der Plugin " +"Einstellung \"Certificate folder\" angeben." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "If you want to use the ProsodyCtl utility to import certificates, this utility is available (once Peertube is started) using the following command (adapting the path to your Peertube data folder, and replacing \"xxx\" with the arguments you wish to pass to prosodyctl): `sudo -u peertube /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl xxx`" -msgstr "Wenn Sie das Programm ProsodyCtl verwenden möchten, um Zertifikate zu importieren, ist es (sobald Peertube gestartet ist) mit folgendem Befehl verfügbar (passen Sie den Pfad zu Ihrem Peertube-Datenordner an und ersetzen Sie \"xxx\" durch die Argumente, die Sie an prosodyctl übergeben wollen): `sudo -u peertube /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl xxx`" +msgid "" +"If you want to use the ProsodyCtl utility to import certificates, this " +"utility is available (once Peertube is started) using the following command " +"(adapting the path to your Peertube data folder, and replacing \"xxx\" with " +"the arguments you wish to pass to prosodyctl): `sudo -u peertube /var/www/" +"peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/" +"squashfs-root/AppRun prosodyctl xxx`" +msgstr "" +"Wenn Sie das Programm ProsodyCtl verwenden möchten, um Zertifikate zu " +"importieren, ist es (sobald Peertube gestartet ist) mit folgendem Befehl " +"verfügbar (passen Sie den Pfad zu Ihrem Peertube-Datenordner an und ersetzen " +"Sie \"xxx\" durch die Argumente, die Sie an prosodyctl übergeben wollen): " +"`sudo -u peertube /var/www/peertube/storage/plugins/data/peertube-plugin-" +"livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl xxx`" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "The plugin will check once a day to see if any files have been modified in this folder, and reload Prosody if necessary." -msgstr "Das Plugin prüft einmal am Tag, ob Dateien in diesem Ordner geändert wurden, und lädt Prosody gegebenenfalls neu." +msgid "" +"The plugin will check once a day to see if any files have been modified in " +"this folder, and reload Prosody if necessary." +msgstr "" +"Das Plugin prüft einmal am Tag, ob Dateien in diesem Ordner geändert wurden, " +"und lädt Prosody gegebenenfalls neu." #. type: Title #### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1402,23 +2240,49 @@ msgstr "Methode für den einfachen Fall" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "We assume here that your Peertube installation is \"classic\" (no use of Docker), and that the certificates are generated by letsencrypt, using the certbot tool." -msgstr "Wir gehen hier davon aus, dass Ihre Peertube Installation \"klassisch\" ist (keine Verwendung von Docker) und dass die Zertifikate von letsencrypt mit dem Werkzeug certbot erzeugt werden." +msgid "" +"We assume here that your Peertube installation is \"classic\" (no use of " +"Docker), and that the certificates are generated by letsencrypt, using the " +"certbot tool." +msgstr "" +"Wir gehen hier davon aus, dass Ihre Peertube Installation \"klassisch\" ist " +"(keine Verwendung von Docker) und dass die Zertifikate von letsencrypt mit " +"dem Werkzeug certbot erzeugt werden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "First of all, we'll have to create a certificate for the subdomain `room.your_instance.tld` : this is the uri of the MUC (XMPP chat rooms) component. Even if the connections are made on `your_instance.tld`, we will need a valid certificate for this subdomain." -msgstr "Als erstes müssen wir ein Zertifikat für die Subdomain `room.ihre_instanz.tld` erstellen: dies ist die Uri der MUC (XMPP chat rooms) Komponente. Auch wenn die Verbindungen über `ihre_instanz.tld` hergestellt werden, benötigen wir ein gültiges Zertifikat für diese Subdomain." +msgid "" +"First of all, we'll have to create a certificate for the subdomain `room." +"your_instance.tld` : this is the uri of the MUC (XMPP chat rooms) " +"component. Even if the connections are made on `your_instance.tld`, we will " +"need a valid certificate for this subdomain." +msgstr "" +"Als erstes müssen wir ein Zertifikat für die Subdomain `room.ihre_instanz." +"tld` erstellen: dies ist die Uri der MUC (XMPP chat rooms) Komponente. Auch " +"wenn die Verbindungen über `ihre_instanz.tld` hergestellt werden, benötigen " +"wir ein gültiges Zertifikat für diese Subdomain." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "So start by setting up a DNS entry for `room.your_instance.tld`, which points to your server. You can use a CNAME entry (or an A entry and a AAAA entry)." -msgstr "Beginnen Sie also damit, einen DNS-Eintrag für `room.ihre_instanz.tld` einzurichten, der auf Ihren Server verweist. Sie können einen CNAME-Eintrag verwenden (oder einen A-Eintrag und einen AAAA-Eintrag)." +msgid "" +"So start by setting up a DNS entry for `room.your_instance.tld`, which " +"points to your server. You can use a CNAME entry (or an A entry and a AAAA " +"entry)." +msgstr "" +"Beginnen Sie also damit, einen DNS-Eintrag für `room.ihre_instanz.tld` " +"einzurichten, der auf Ihren Server verweist. Sie können einen CNAME-Eintrag " +"verwenden (oder einen A-Eintrag und einen AAAA-Eintrag)." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Next, we'll use nginx (already installed for your Peertube) to generate the certbot certificate. We will create a new site. In the file `/etc/nginx/site-available/room.peertube`, add:" -msgstr "Als Nächstes verwenden wir nginx (bereits für Ihr Peertube installiert), um das certbot-Zertifikat zu erzeugen. Wir werden eine neue Website erstellen. In der Datei `/etc/nginx/site-available/room.peertube` fügen Sie hinzu:" +msgid "" +"Next, we'll use nginx (already installed for your Peertube) to generate the " +"certbot certificate. We will create a new site. In the file `/etc/nginx/" +"site-available/room.peertube`, add:" +msgstr "" +"Als Nächstes verwenden wir nginx (bereits für Ihr Peertube installiert), um " +"das certbot-Zertifikat zu erzeugen. Wir werden eine neue Website erstellen. " +"In der Datei `/etc/nginx/site-available/room.peertube` fügen Sie hinzu:" #. type: Fenced code block (nginx) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1463,8 +2327,17 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Then we prepare the folder in which we will later import the certificates. We assume here that you already have the plugin active. We will create the following folder (if it doesn't already exist), with the user `peertube` to make sure there are no permissions issues:" -msgstr "Dann bereiten wir den Ordner vor, in den wir später die Zertifikate importieren werden. Wir gehen hier davon aus, dass Sie das Plugin bereits aktiv haben. Wir erstellen den folgenden Ordner (falls er noch nicht existiert), mit dem Benutzer `peertube`, um sicherzustellen, dass es keine Probleme mit den Berechtigungen gibt:" +msgid "" +"Then we prepare the folder in which we will later import the certificates. " +"We assume here that you already have the plugin active. We will create the " +"following folder (if it doesn't already exist), with the user `peertube` to " +"make sure there are no permissions issues:" +msgstr "" +"Dann bereiten wir den Ordner vor, in den wir später die Zertifikate " +"importieren werden. Wir gehen hier davon aus, dass Sie das Plugin bereits " +"aktiv haben. Wir erstellen den folgenden Ordner (falls er noch nicht " +"existiert), mit dem Benutzer `peertube`, um sicherzustellen, dass es keine " +"Probleme mit den Berechtigungen gibt:" #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1474,23 +2347,43 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Now you have to configure this folder in the plugin settings, for the parameter \"Certificate folders\". It's important to do this now, otherwise the certificate import script will put the certificates in the wrong folder." -msgstr "Nun müssen Sie diesen Ordner in den Plugin-Einstellungen für den Parameter \"Zertifikatsordner\" konfigurieren. Es ist wichtig, dies jetzt zu tun, da sonst das Skript für den Zertifikatsimport die Zertifikate in den falschen Ordner legt." +msgid "" +"Now you have to configure this folder in the plugin settings, for the " +"parameter \"Certificate folders\". It's important to do this now, otherwise " +"the certificate import script will put the certificates in the wrong folder." +msgstr "" +"Nun müssen Sie diesen Ordner in den Plugin-Einstellungen für den Parameter " +"\"Zertifikatsordner\" konfigurieren. Es ist wichtig, dies jetzt zu tun, da " +"sonst das Skript für den Zertifikatsimport die Zertifikate in den falschen " +"Ordner legt." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "We will configure certbot to import the generated certificates into the Prosody folder. We can use the ProsodyCtl utility packaged in the plugin." -msgstr "Wir werden certbot so konfigurieren, dass die generierten Zertifikate in den Prosody Ordner importiert werden. Wir können das Programm ProsodyCtl verwenden, das im Plugin enthalten ist." +msgid "" +"We will configure certbot to import the generated certificates into the " +"Prosody folder. We can use the ProsodyCtl utility packaged in the plugin." +msgstr "" +"Wir werden certbot so konfigurieren, dass die generierten Zertifikate in den " +"Prosody Ordner importiert werden. Wir können das Programm ProsodyCtl " +"verwenden, das im Plugin enthalten ist." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Note: for it to be available, the plugin must have been started at least once." -msgstr "Hinweis: Damit es verfügbar ist, muss das Plugin mindestens einmal gestartet worden sein." +msgid "" +"Note: for it to be available, the plugin must have been started at least " +"once." +msgstr "" +"Hinweis: Damit es verfügbar ist, muss das Plugin mindestens einmal gestartet " +"worden sein." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "We will create a file `/etc/letsencrypt/renewal-hooks/deploy/prosody.sh` containing:" -msgstr "Wir werden eine Datei `/etc/letsencrypt/renewal-hooks/deploy/prosody.sh` erstellen, die Folgendes enthält:" +msgid "" +"We will create a file `/etc/letsencrypt/renewal-hooks/deploy/prosody.sh` " +"containing:" +msgstr "" +"Wir werden eine Datei `/etc/letsencrypt/renewal-hooks/deploy/prosody.sh` " +"erstellen, die Folgendes enthält:" #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1523,18 +2416,28 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "If certbot offers you several methods to generate the certificate, choose \"nginx\"." -msgstr "Wenn certbot Ihnen mehrere Methoden zur Erstellung des Zertifikats anbietet, wählen Sie \"nginx\"." +msgid "" +"If certbot offers you several methods to generate the certificate, choose " +"\"nginx\"." +msgstr "" +"Wenn certbot Ihnen mehrere Methoden zur Erstellung des Zertifikats anbietet, " +"wählen Sie \"nginx\"." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md msgid "Normally you should now find the certificates in the configured folder." -msgstr "Normalerweise sollten Sie die Zertifikate nun in dem konfigurierten Ordner finden." +msgstr "" +"Normalerweise sollten Sie die Zertifikate nun in dem konfigurierten Ordner " +"finden." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Note: the first time you do this, you will have to reload Prosody. The easiest way to do this is to restart Peertube." -msgstr "Hinweis: Wenn Sie dies zum ersten Mal tun, müssen Sie Prosody neu laden. Der einfachste Weg, dies zu tun, ist, Peertube neu zu starten." +msgid "" +"Note: the first time you do this, you will have to reload Prosody. The " +"easiest way to do this is to restart Peertube." +msgstr "" +"Hinweis: Wenn Sie dies zum ersten Mal tun, müssen Sie Prosody neu laden. Der " +"einfachste Weg, dies zu tun, ist, Peertube neu zu starten." #. type: Title #### #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1544,18 +2447,33 @@ msgstr "Methode für das Docker-Verfahren" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "This method works with the officially supported [Docker guide](https://docs.joinpeertube.org/install/docker) from PeerTube." -msgstr "Diese Methode funktioniert mit dem offiziell unterstützten [Docker Guide](https://docs.joinpeertube.org/install/docker) von PeerTube." +msgid "" +"This method works with the officially supported [Docker guide](https://docs." +"joinpeertube.org/install/docker) from PeerTube." +msgstr "" +"Diese Methode funktioniert mit dem offiziell unterstützten [Docker Guide]" +"(https://docs.joinpeertube.org/install/docker) von PeerTube." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "First, ensure you create a DNS entry for `room.your_instance.tld`, which points to your server. You can use a CNAME entry (or an A entry and a AAAA entry). This is necessary for Let's Encrypt to validate the domain for certificate generation." -msgstr "Stellen Sie zunächst sicher, dass Sie einen DNS-Eintrag für \"room.ihre_instanz.tld\" erstellen, der auf Ihren Server verweist. Sie können einen CNAME-Eintrag (oder einen A-Eintrag und einen AAAA-Eintrag) verwenden. Dies ist erforderlich, damit Let's Encrypt die Domäne für die Zertifikatserstellung validieren kann." +msgid "" +"First, ensure you create a DNS entry for `room.your_instance.tld`, which " +"points to your server. You can use a CNAME entry (or an A entry and a AAAA " +"entry). This is necessary for Let's Encrypt to validate the domain for " +"certificate generation." +msgstr "" +"Stellen Sie zunächst sicher, dass Sie einen DNS-Eintrag für \"room." +"ihre_instanz.tld\" erstellen, der auf Ihren Server verweist. Sie können " +"einen CNAME-Eintrag (oder einen A-Eintrag und einen AAAA-Eintrag) verwenden. " +"Dies ist erforderlich, damit Let's Encrypt die Domäne für die " +"Zertifikatserstellung validieren kann." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md msgid "Enter the directory where your `docker-compose.yml` file exists." -msgstr "Geben Sie das Verzeichnis an, in dem sich Ihre Datei `docker-compose.yml` befindet." +msgstr "" +"Geben Sie das Verzeichnis an, in dem sich Ihre Datei `docker-compose.yml` " +"befindet." #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1581,8 +2499,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "You will be presented with a series of prompts. Enter `2` for the authentication type:" -msgstr "Es wird eine Reihe von Eingabeaufforderungen angezeigt. Geben Sie `2` für den Authentifizierungstyp ein:" +msgid "" +"You will be presented with a series of prompts. Enter `2` for the " +"authentication type:" +msgstr "" +"Es wird eine Reihe von Eingabeaufforderungen angezeigt. Geben Sie `2` für " +"den Authentifizierungstyp ein:" #. type: Fenced code block (text) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1605,8 +2527,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Enter the directory where the PeerTube webserver serves requests for Let's Encrypt, `/var/www/certbot`:" -msgstr "Geben Sie das Verzeichnis an, in dem der PeerTube-Webserver Anfragen für Let's Encrypt bedient, `/var/www/certbot`:" +msgid "" +"Enter the directory where the PeerTube webserver serves requests for Let's " +"Encrypt, `/var/www/certbot`:" +msgstr "" +"Geben Sie das Verzeichnis an, in dem der PeerTube-Webserver Anfragen für " +"Let's Encrypt bedient, `/var/www/certbot`:" #. type: Fenced code block (text) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1630,8 +2556,18 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Run the below command inside the certbot container to give read access to the new certs and private keys to the peertube group. *Note*: This will also make the files readable to the group with id 999 on the host system. Check the groups on your system to assess this as a risk before running this command." -msgstr "Führen Sie den folgenden Befehl innerhalb des certbot-Containers aus, um der peertube-Gruppe Lesezugriff auf die neuen Zertifikate und privaten Schlüssel zu geben. *Hinweis*: Dadurch werden die Dateien auch für die Gruppe mit der ID 999 auf dem Host-System lesbar. Überprüfen Sie die Gruppen auf Ihrem System, um dieses Risiko einzuschätzen, bevor Sie diesen Befehl ausführen." +msgid "" +"Run the below command inside the certbot container to give read access to " +"the new certs and private keys to the peertube group. *Note*: This will " +"also make the files readable to the group with id 999 on the host system. " +"Check the groups on your system to assess this as a risk before running this " +"command." +msgstr "" +"Führen Sie den folgenden Befehl innerhalb des certbot-Containers aus, um der " +"peertube-Gruppe Lesezugriff auf die neuen Zertifikate und privaten Schlüssel " +"zu geben. *Hinweis*: Dadurch werden die Dateien auch für die Gruppe mit der " +"ID 999 auf dem Host-System lesbar. Überprüfen Sie die Gruppen auf Ihrem " +"System, um dieses Risiko einzuschätzen, bevor Sie diesen Befehl ausführen." #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1657,8 +2593,14 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Modify your `docker-compose.yml` file, changing the `entrypoint` line under the `certbot` service to the following. This is the same as the above, but to be automatically executed after every certificate renewal." -msgstr "Ändern Sie Ihre Datei `docker-compose.yml`, indem Sie die Zeile `entrypoint` unter dem Dienst `certbot` wie folgt ändern. Dies ist das Gleiche wie oben, soll aber automatisch nach jeder Zertifikatserneuerung ausgeführt werden." +msgid "" +"Modify your `docker-compose.yml` file, changing the `entrypoint` line under " +"the `certbot` service to the following. This is the same as the above, but " +"to be automatically executed after every certificate renewal." +msgstr "" +"Ändern Sie Ihre Datei `docker-compose.yml`, indem Sie die Zeile `entrypoint` " +"unter dem Dienst `certbot` wie folgt ändern. Dies ist das Gleiche wie oben, " +"soll aber automatisch nach jeder Zertifikatserneuerung ausgeführt werden." #. type: Fenced code block (text) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1668,8 +2610,13 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "Continuing to modify `docker-compose.yml`, add the certbot certificate volume into the peertube container. It should look something like this:" -msgstr "Fahren Sie mit der Änderung der Datei `docker-compose.yml` fort und fügen Sie das certbot-Zertifikatsvolumen in den Peertube-Container ein. Es sollte in etwa so aussehen:" +msgid "" +"Continuing to modify `docker-compose.yml`, add the certbot certificate " +"volume into the peertube container. It should look something like this:" +msgstr "" +"Fahren Sie mit der Änderung der Datei `docker-compose.yml` fort und fügen " +"Sie das certbot-Zertifikatsvolumen in den Peertube-Container ein. Es sollte " +"in etwa so aussehen:" #. type: Fenced code block (text) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1692,8 +2639,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "In the livechat plugin settings from your PeerTube administration settings, set the certificate directory to the following:" -msgstr "Setzen Sie in den Livechat-Plugin-Einstellungen in den PeerTube-Administrationseinstellungen den Zertifikatsordner auf den folgenden Wert:" +msgid "" +"In the livechat plugin settings from your PeerTube administration settings, " +"set the certificate directory to the following:" +msgstr "" +"Setzen Sie in den Livechat-Plugin-Einstellungen in den PeerTube-" +"Administrationseinstellungen den Zertifikatsordner auf den folgenden Wert:" #. type: Fenced code block (text) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1704,7 +2655,9 @@ msgstr "/etc/letsencrypt/live\n" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md msgid "Save the plugin settings and verify Prosody can see the certificates:" -msgstr "Speichern Sie die Plugin Einstellungen und überprüfen Sie, ob Prosody die Zertifikate erkennen kann:" +msgstr "" +"Speichern Sie die Plugin Einstellungen und überprüfen Sie, ob Prosody die " +"Zertifikate erkennen kann:" #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md @@ -1728,8 +2681,14 @@ msgstr "Fehlerbehebung" #. type: Plain text #: support/documentation/content/en/documentation/admin/advanced/xmpp_clients.md -msgid "If you can't make it work, you can use the diagnostic tool (there is a button on top of the plugin settings page), and take a close look on the «Prosody check» section." -msgstr "Wenn Sie es nicht hinbekommen, können Sie das Diagnosetool verwenden (es gibt eine Schaltfläche oben auf der Seite mit den Plugin-Einstellungen) und sich den Abschnitt «Prosody check» genau ansehen." +msgid "" +"If you can't make it work, you can use the diagnostic tool (there is a " +"button on top of the plugin settings page), and take a close look on the " +"«Prosody check» section." +msgstr "" +"Wenn Sie es nicht hinbekommen, können Sie das Diagnosetool verwenden (es " +"gibt eine Schaltfläche oben auf der Seite mit den Plugin-Einstellungen) und " +"sich den Abschnitt «Prosody check» genau ansehen." #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1746,45 +2705,82 @@ msgstr "Externe Authentifizierung" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Users that are not connected to your Peertube instance are joining the chat using \"anonymous accounts\" (they can freely choose a nickname, and will be assigned a random avatar)." -msgstr "Benutzer, die nicht mit Ihrer Peertube-Instanz verbunden sind, treten dem Chat mit \"anonymen Konten\" bei (sie können einen Spitznamen frei wählen und bekommen einen zufälligen Avatar zugewiesen)." +msgid "" +"Users that are not connected to your Peertube instance are joining the chat " +"using \"anonymous accounts\" (they can freely choose a nickname, and will be " +"assigned a random avatar)." +msgstr "" +"Benutzer, die nicht mit Ihrer Peertube-Instanz verbunden sind, treten dem " +"Chat mit \"anonymen Konten\" bei (sie können einen Spitznamen frei wählen " +"und bekommen einen zufälligen Avatar zugewiesen)." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "You can enable some external authentication methods to allow user to create chat accounts. In such case their nickname and avatar will be automatically initialized with the remote account information." -msgstr "Sie können einige externe Authentifizierungsmethoden aktivieren, damit die Benutzer Chat-Konten erstellen können. In diesem Fall werden ihr Nickname und Avatar automatisch mit den Informationen des entfernten Kontos initialisiert." +msgid "" +"You can enable some external authentication methods to allow user to create " +"chat accounts. In such case their nickname and avatar will be automatically " +"initialized with the remote account information." +msgstr "" +"Sie können einige externe Authentifizierungsmethoden aktivieren, damit die " +"Benutzer Chat-Konten erstellen können. In diesem Fall werden ihr Nickname " +"und Avatar automatisch mit den Informationen des entfernten Kontos " +"initialisiert." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Such \"external account users\" will be easier to moderate than anonymous accounts." -msgstr "Solche \"Nutzer mit externen Konten\" sind leichter zu moderieren als anonyme Konten." +msgid "" +"Such \"external account users\" will be easier to moderate than anonymous " +"accounts." +msgstr "" +"Solche \"Nutzer mit externen Konten\" sind leichter zu moderieren als " +"anonyme Konten." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "This also allows user to join the chat without creating Peertube account (in case your instance has closed registration for example, or without waiting for account approval)." -msgstr "Dies ermöglicht es den Nutzern auch, dem Chat beizutreten, ohne ein Peertube-Konto zu erstellen (z. B. wenn Ihre Instanz die Registrierung geschlossen hat, oder ohne auf die Genehmigung des Kontos zu warten)." +msgid "" +"This also allows user to join the chat without creating Peertube account (in " +"case your instance has closed registration for example, or without waiting " +"for account approval)." +msgstr "" +"Dies ermöglicht es den Nutzern auch, dem Chat beizutreten, ohne ein Peertube-" +"Konto zu erstellen (z. B. wenn Ihre Instanz die Registrierung geschlossen " +"hat, oder ohne auf die Genehmigung des Kontos zu warten)." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md #: support/documentation/content/en/documentation/user/viewers.md -msgid "![External login button](/peertube-plugin-livechat/images/external_login_button.png?classes=shadow,border&height=200px)" -msgstr "![Externes Anmelden Schaltfläche](/peertube-plugin-livechat/images/external_login_button.png?classes=shadow,border&height=200px)" +msgid "" +"![External login button](/peertube-plugin-livechat/images/" +"external_login_button.png?classes=shadow,border&height=200px)" +msgstr "" +"![Externes Anmelden Schaltfläche](/peertube-plugin-livechat/images/" +"external_login_button.png?classes=shadow,border&height=200px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md #: support/documentation/content/en/documentation/user/viewers.md -msgid "![External login dialog - OpenID Connect](/peertube-plugin-livechat/images/external_login_dialog_oidc.png?classes=shadow,border&height=200px)" -msgstr "![Externer Anmeldedialog - OpenID Connect](/peertube-plugin-livechat/images/external_login_dialog_oidc.png?classes=shadow,border&height=200px)" +msgid "" +"![External login dialog - OpenID Connect](/peertube-plugin-livechat/images/" +"external_login_dialog_oidc.png?classes=shadow,border&height=200px)" +msgstr "" +"![Externer Anmeldedialog - OpenID Connect](/peertube-plugin-livechat/images/" +"external_login_dialog_oidc.png?classes=shadow,border&height=200px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md msgid "This page will describe available authentication methods." -msgstr "Auf dieser Seite werden die verfügbaren Authentifizierungsmethoden beschrieben." +msgstr "" +"Auf dieser Seite werden die verfügbaren Authentifizierungsmethoden " +"beschrieben." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "For the user documentation, see [user documentation](/peertube-plugin-livechat/documentation/user/viewers/)" -msgstr "Für die Benutzerdokumentation, siehe [Benutzerdokumentation](/peertube-plugin-livechat/de/documentation/user/viewers/)" +msgid "" +"For the user documentation, see [user documentation](/peertube-plugin-" +"livechat/documentation/user/viewers/)" +msgstr "" +"Für die Benutzerdokumentation, siehe [Benutzerdokumentation](/peertube-" +"plugin-livechat/de/documentation/user/viewers/)" #. type: Title ## #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1804,28 +2800,56 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "You can configure one external [OpenID Connect](https://openid.net/developers/how-connect-works/) compatible provider." -msgstr "Sie können einen externen [OpenID Connect](https://openid.net/developers/how-connect-works/) kompatiblen Anbieter konfigurieren." +msgid "" +"You can configure one external [OpenID Connect](https://openid.net/" +"developers/how-connect-works/) compatible provider." +msgstr "" +"Sie können einen externen [OpenID Connect](https://openid.net/developers/how-" +"connect-works/) kompatiblen Anbieter konfigurieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md msgid "Doing so, you can for example use your website for Single Sign-On." -msgstr "Auf diese Weise können Sie Ihre Website beispielsweise für Single Sign-On nutzen." +msgstr "" +"Auf diese Weise können Sie Ihre Website beispielsweise für Single Sign-On " +"nutzen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Popular CMS softwares (Wordpess, ...) offers plugins implementing OpenID Connect." -msgstr "Gängige CMS-Software (Wordpess, ...) bietet Plugins an, die OpenID Connect implementieren." +msgid "" +"Popular CMS softwares (Wordpess, ...) offers plugins implementing OpenID " +"Connect." +msgstr "" +"Gängige CMS-Software (Wordpess, ...) bietet Plugins an, die OpenID Connect " +"implementieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "To enable this feature, first you have to create a client on your provider side (check the related documentation for enabling OpenID Connect). Then go to the [plugin settings](/peertube-plugin-livechat/documentation/admin/settings), and enable \"{{% livechat_label external_auth_custom_oidc_label %}}\"." -msgstr "Um diese Funktion zu aktivieren, müssen Sie zunächst einen Client auf Ihrer Provider-Seite erstellen (lesen Sie die zugehörige Dokumentation zur Aktivierung von OpenID Connect). Gehen Sie dann zu den [Plugin-Einstellungen](/peertube-plugin-livechat/de/documentation/admin/settings), und aktivieren Sie \"{{% livechat_label external_auth_custom_oidc_label %}}\"." +msgid "" +"To enable this feature, first you have to create a client on your provider " +"side (check the related documentation for enabling OpenID Connect). Then go " +"to the [plugin settings](/peertube-plugin-livechat/documentation/admin/" +"settings), and enable \"{{% livechat_label external_auth_custom_oidc_label " +"%}}\"." +msgstr "" +"Um diese Funktion zu aktivieren, müssen Sie zunächst einen Client auf Ihrer " +"Provider-Seite erstellen (lesen Sie die zugehörige Dokumentation zur " +"Aktivierung von OpenID Connect). Gehen Sie dann zu den [Plugin-" +"Einstellungen](/peertube-plugin-livechat/de/documentation/admin/settings), " +"und aktivieren Sie \"{{% livechat_label external_auth_custom_oidc_label " +"%}}\"." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Note: if you want to restrict allowed redirection urls on the provider side (best security practice), the plugin will show you the url to allow. Just copy it in your OpenID Connect application configuration." -msgstr "Hinweis: Wenn Sie zulässige Umleitungsurls auf der Anbieterseite einschränken möchten (beste Sicherheitspraxis), zeigt Ihnen das Plugin die zuzulassende Url an. Kopieren Sie sie einfach in die Konfiguration Ihrer OpenID Connect-Anwendung." +msgid "" +"Note: if you want to restrict allowed redirection urls on the provider side " +"(best security practice), the plugin will show you the url to allow. Just " +"copy it in your OpenID Connect application configuration." +msgstr "" +"Hinweis: Wenn Sie zulässige Umleitungsurls auf der Anbieterseite " +"einschränken möchten (beste Sicherheitspraxis), zeigt Ihnen das Plugin die " +"zuzulassende Url an. Kopieren Sie sie einfach in die Konfiguration Ihrer " +"OpenID Connect-Anwendung." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1835,7 +2859,8 @@ msgstr "Sie müssen nun einige Einstellungen vornehmen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md msgid "This is the button label in the following screenshot:" -msgstr "Dies ist die Beschriftung der Schaltfläche auf dem folgenden Bildschirmfoto:" +msgstr "" +"Dies ist die Beschriftung der Schaltfläche auf dem folgenden Bildschirmfoto:" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1844,13 +2869,26 @@ msgstr "Zurzeit ist es nicht möglich, diesen Text zu übersetzen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Your OpenID Connect provider must implement the [discovery URL](https://openid.net/specs/openid-connect-discovery-1_0.html). Just set here the discovery url, that should be something like `https://example.com/.well-known/openid-configuration`." -msgstr "Ihr OpenID Connect-Anbieter muss die [discovery URL](https://openid.net/specs/openid-connect-discovery-1_0.html) implementieren. Legen Sie hier einfach die Discovery Url fest, diese sollte ungefähr `https://example.com/.well-known/openid-configuration` sein." +msgid "" +"Your OpenID Connect provider must implement the [discovery URL](https://" +"openid.net/specs/openid-connect-discovery-1_0.html). Just set here the " +"discovery url, that should be something like `https://example.com/.well-" +"known/openid-configuration`." +msgstr "" +"Ihr OpenID Connect-Anbieter muss die [discovery URL](https://openid.net/" +"specs/openid-connect-discovery-1_0.html) implementieren. Legen Sie hier " +"einfach die Discovery Url fest, diese sollte ungefähr `https://example.com/." +"well-known/openid-configuration` sein." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Note: if your provider use the standard `/.well-known/openid-configuration` path, you can omit it. For example `https://accounts.google.com` will work." -msgstr "Hinweis: Wenn Ihr Anbieter den Standardpfad `/.well-known/openid-configuration` verwendet, können Sie ihn weglassen. Zum Beispiel wird `https://accounts.google.com` funktionieren." +msgid "" +"Note: if your provider use the standard `/.well-known/openid-configuration` " +"path, you can omit it. For example `https://accounts.google.com` will work." +msgstr "" +"Hinweis: Wenn Ihr Anbieter den Standardpfad `/.well-known/openid-" +"configuration` verwendet, können Sie ihn weglassen. Zum Beispiel wird " +"`https://accounts.google.com` funktionieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1870,33 +2908,69 @@ msgstr "Google, Facebook, ..." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "In addition to that, you can also configure one or several \"standard\" Open ID Connect provider (Google, Facebook, ...)." -msgstr "Darüber hinaus können Sie auch einen oder mehrere \"Standard\"-Open ID Connect-Anbieter (Google, Facebook, ...) konfigurieren." +msgid "" +"In addition to that, you can also configure one or several \"standard\" Open " +"ID Connect provider (Google, Facebook, ...)." +msgstr "" +"Darüber hinaus können Sie auch einen oder mehrere \"Standard\"-Open ID " +"Connect-Anbieter (Google, Facebook, ...) konfigurieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "For these providers, discovery url and button label are preset. You just have to create an OAuth2 application on the provider side, and configure Client ID and Client Secret." -msgstr "Bei diesen Anbietern sind die Discovery-Url und die Schaltflächenbeschriftung voreingestellt. Sie müssen lediglich eine OAuth2-Anwendung auf der Anbieterseite erstellen und Client ID und Client Secret konfigurieren." +msgid "" +"For these providers, discovery url and button label are preset. You just " +"have to create an OAuth2 application on the provider side, and configure " +"Client ID and Client Secret." +msgstr "" +"Bei diesen Anbietern sind die Discovery-Url und die " +"Schaltflächenbeschriftung voreingestellt. Sie müssen lediglich eine OAuth2-" +"Anwendung auf der Anbieterseite erstellen und Client ID und Client Secret " +"konfigurieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "If you think of a standard provider that is not available, you can ask for implementation by [opening a new issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues)." -msgstr "Wenn Ihnen ein Standardanbieter einfällt, der noch nicht verfügbar ist, können Sie um die Implementierung bitten, indem Sie [eine neues Problem] (https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) eröffnen." +msgid "" +"If you think of a standard provider that is not available, you can ask for " +"implementation by [opening a new issue](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/issues)." +msgstr "" +"Wenn Ihnen ein Standardanbieter einfällt, der noch nicht verfügbar ist, " +"können Sie um die Implementierung bitten, indem Sie [eine neues Problem] " +"(https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) " +"eröffnen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "If the button does not appear for end users, there might be a configuration issue. You can try the [diagnostic tool](/peertube-plugin-livechat/documentation/installation/troubleshooting/) to get more information." -msgstr "Wenn die Schaltfläche für Endbenutzer nicht angezeigt wird, liegt möglicherweise ein Konfigurationsproblem vor. Sie können das [Diagnose-Tool](/peertube-plugin-livechat/de/documentation/installation/troubleshooting/) ausprobieren, um weitere Informationen zu erhalten." +msgid "" +"If the button does not appear for end users, there might be a configuration " +"issue. You can try the [diagnostic tool](/peertube-plugin-livechat/" +"documentation/installation/troubleshooting/) to get more information." +msgstr "" +"Wenn die Schaltfläche für Endbenutzer nicht angezeigt wird, liegt " +"möglicherweise ein Konfigurationsproblem vor. Sie können das [Diagnose-Tool]" +"(/peertube-plugin-livechat/de/documentation/installation/troubleshooting/) " +"ausprobieren, um weitere Informationen zu erhalten." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "Note: if you are connected to your Peertube account, the button will never show. So use a private browser window to test." -msgstr "Hinweis: Wenn Sie mit Ihrem Peertube-Konto verbunden sind, wird die Schaltfläche nicht angezeigt. Verwenden Sie also ein privates Browserfenster zum Testen." +msgid "" +"Note: if you are connected to your Peertube account, the button will never " +"show. So use a private browser window to test." +msgstr "" +"Hinweis: Wenn Sie mit Ihrem Peertube-Konto verbunden sind, wird die " +"Schaltfläche nicht angezeigt. Verwenden Sie also ein privates Browserfenster " +"zum Testen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md -msgid "If the button is displayed but is not working, check your Peertube logs. It could be because the remote service does not use standard scopes or attribute names." -msgstr "Wenn die Schaltfläche angezeigt wird, aber nicht funktioniert, überprüfen Sie Ihre Peertube-Protokolle. Es könnte daran liegen, dass der entfernte Dienst keine Standard-Scopes oder Attributnamen verwendet." +msgid "" +"If the button is displayed but is not working, check your Peertube logs. It " +"could be because the remote service does not use standard scopes or " +"attribute names." +msgstr "" +"Wenn die Schaltfläche angezeigt wird, aber nicht funktioniert, überprüfen " +"Sie Ihre Peertube-Protokolle. Es könnte daran liegen, dass der entfernte " +"Dienst keine Standard-Scopes oder Attributnamen verwendet." #. type: Title ## #: build/documentation/pot_in/documentation/admin/external_auth.md @@ -1907,7 +2981,8 @@ msgstr "Weiteres folgt" #. type: Plain text #: build/documentation/pot_in/documentation/admin/external_auth.md msgid "Other authentication methods will be implemented in the future." -msgstr "Andere Authentifizierungsmethoden werden in Zukunft implementiert werden." +msgstr "" +"Andere Authentifizierungsmethoden werden in Zukunft implementiert werden." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/admin/_index.md @@ -1940,18 +3015,32 @@ msgstr "Dieser Abschnitt beschreibt die Seite mit den Plugin Einstellungen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "For more information on this feature, check the documentation for [channel's terms & conditions](/peertube-plugin-livechat/documentation/user/streamers/terms)." -msgstr "Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation zu den [Kanal-Nutzungsbedingungen](/peertube-plugin-livechat/de/documentation/user/streamers/terms)." +msgid "" +"For more information on this feature, check the documentation for [channel's " +"terms & conditions](/peertube-plugin-livechat/documentation/user/streamers/" +"terms)." +msgstr "" +"Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation zu " +"den [Kanal-Nutzungsbedingungen](/peertube-plugin-livechat/de/documentation/" +"user/streamers/terms)." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "Changing this setting will restart the chat server, and all users will be disconnected for a short time." -msgstr "Wenn Sie diese Einstellung ändern, wird der Chatserver neu gestartet, und alle Benutzer werden für kurze Zeit getrennt." +msgid "" +"Changing this setting will restart the chat server, and all users will be " +"disconnected for a short time." +msgstr "" +"Wenn Sie diese Einstellung ändern, wird der Chatserver neu gestartet, und " +"alle Benutzer werden für kurze Zeit getrennt." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "When pressing the «List rooms» button, all existing chatrooms will be listed. You can then find them and moderated them." -msgstr "Wenn Sie auf die Schaltfläche «Räume auflisten» klicken, werden alle bestehenden Chaträume aufgelistet. Sie können sie dann finden und moderieren." +msgid "" +"When pressing the «List rooms» button, all existing chatrooms will be " +"listed. You can then find them and moderated them." +msgstr "" +"Wenn Sie auf die Schaltfläche «Räume auflisten» klicken, werden alle " +"bestehenden Chaträume aufgelistet. Sie können sie dann finden und moderieren." #. type: Title ## #: build/documentation/pot_in/documentation/admin/settings.md @@ -1962,8 +3051,12 @@ msgstr "Föderation" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "Following settings concern the federation with other Peertube instances, and other fediverse softwares." -msgstr "Die folgenden Einstellungen betreffen die Föderation mit anderen Peertube Instanzen und anderer Fediverse-Software." +msgid "" +"Following settings concern the federation with other Peertube instances, and " +"other fediverse softwares." +msgstr "" +"Die folgenden Einstellungen betreffen die Föderation mit anderen Peertube " +"Instanzen und anderer Fediverse-Software." #. type: Title ## #: build/documentation/pot_in/documentation/admin/settings.md @@ -1973,8 +3066,12 @@ msgstr "Authentifizierung" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "In case you have any trouble with the long term authentication tokens, you can disable the feature here." -msgstr "Falls Sie Probleme mit den Langzeit-Authentifizierungs-Tokens haben, können Sie diese Funktion hier deaktivieren." +msgid "" +"In case you have any trouble with the long term authentication tokens, you " +"can disable the feature here." +msgstr "" +"Falls Sie Probleme mit den Langzeit-Authentifizierungs-Tokens haben, können " +"Sie diese Funktion hier deaktivieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -1983,8 +3080,12 @@ msgstr "Siehe die ausführliche Dokumentationsseite:" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "[External Authentication](/peertube-plugin-livechat/documentation/admin/external_auth/)" -msgstr "[Externe Authentifizierung](/peertube-plugin-livechat/documentation/admin/external_auth/)" +msgid "" +"[External Authentication](/peertube-plugin-livechat/documentation/admin/" +"external_auth/)" +msgstr "" +"[Externe Authentifizierung](/peertube-plugin-livechat/documentation/admin/" +"external_auth/)" #. type: Title ## #: build/documentation/pot_in/documentation/admin/settings.md @@ -1994,13 +3095,18 @@ msgstr "Erweiterte Kanaleinstellungen" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "Following settings concern the advanced channel options: users will be able to add some customization on their channels, activate the moderation bot, ..." -msgstr "Die folgenden Einstellungen betreffen die erweiterten Kanaloptionen: Nutzer können ihre Kanäle individuell anpassen, den Moderationsbot aktivieren, ..." +msgid "" +"Following settings concern the advanced channel options: users will be able " +"to add some customization on their channels, activate the moderation bot, ..." +msgstr "" +"Die folgenden Einstellungen betreffen die erweiterten Kanaloptionen: Nutzer " +"können ihre Kanäle individuell anpassen, den Moderationsbot aktivieren, ..." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md msgid "If you encounter any issue with this feature, you can disable it." -msgstr "Wenn Sie Probleme mit dieser Funktion haben, können Sie sie deaktivieren." +msgstr "" +"Wenn Sie Probleme mit dieser Funktion haben, können Sie sie deaktivieren." #. type: Title ## #: build/documentation/pot_in/documentation/admin/settings.md @@ -2010,18 +3116,31 @@ msgstr "Chatverhalten" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "This feature enables a «share chat link» modal. With this modal, you can generate URLs to join the chat. The chat can be customized (readonly mode, use the current theme, ...)." -msgstr "Diese Funktion fügt eine «Chat-Link teilen» Schaltfläche hinzu. Mit dieser Schaltfläche können Sie URLs generieren, um dem Chat beizutreten. Der Chat kann angepasst werden (schreibgeschützter Modus, Verwendung des aktuellen Themas, ...)." +msgid "" +"This feature enables a «share chat link» modal. With this modal, you can " +"generate URLs to join the chat. The chat can be customized (readonly mode, " +"use the current theme, ...)." +msgstr "" +"Diese Funktion fügt eine «Chat-Link teilen» Schaltfläche hinzu. Mit dieser " +"Schaltfläche können Sie URLs generieren, um dem Chat beizutreten. Der Chat " +"kann angepasst werden (schreibgeschützter Modus, Verwendung des aktuellen " +"Themas, ...)." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "You can for example generate a readonly URL and use it in OBS to integrate the chat in your live stream!" -msgstr "Sie können zum Beispiel eine schreibgeschützte URL generieren und diese in OBS verwenden, um den Chat in Ihren Live-Stream zu integrieren!" +msgid "" +"You can for example generate a readonly URL and use it in OBS to integrate " +"the chat in your live stream!" +msgstr "" +"Sie können zum Beispiel eine schreibgeschützte URL generieren und diese in " +"OBS verwenden, um den Chat in Ihren Live-Stream zu integrieren!" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md msgid "This setting allows you to choose who can access this modal." -msgstr "Mit dieser Einstellung können Sie festlegen, wer auf diese Schaltfläche zugreifen kann." +msgstr "" +"Mit dieser Einstellung können Sie festlegen, wer auf diese Schaltfläche " +"zugreifen kann." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -2030,8 +3149,17 @@ msgstr "Der Eigentümer des Videos kann Webchats aktivieren." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "Note: for now this feature simply hide the chat. In a future release, the chat will be replaced by a message saying «please log in to [...]». See [v5.7.0 Release Notes](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/CHANGELOG.md#570) for more information." -msgstr "Hinweis: Im Moment blendet diese Funktion einfach den Chat aus. In einer zukünftigen Version wird der Chat durch eine Meldung ersetzt, die besagt «Bitte melden Sie sich an, um [...]». Siehe [v5.7.0 Release Notes](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/CHANGELOG.md#570) für weitere Informationen." +msgid "" +"Note: for now this feature simply hide the chat. In a future release, the " +"chat will be replaced by a message saying «please log in to [...]». See " +"[v5.7.0 Release Notes](https://github.com/JohnXLivingston/peertube-plugin-" +"livechat/blob/main/CHANGELOG.md#570) for more information." +msgstr "" +"Hinweis: Im Moment blendet diese Funktion einfach den Chat aus. In einer " +"zukünftigen Version wird der Chat durch eine Meldung ersetzt, die besagt " +"«Bitte melden Sie sich an, um [...]». Siehe [v5.7.0 Release Notes](https://" +"github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/CHANGELOG." +"md#570) für weitere Informationen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -2053,73 +3181,146 @@ msgstr "Farbthemen" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "You can choose from several different sets the default avatars that will be used for chat users." -msgstr "Sie können aus mehreren verschiedenen Sets von Standard-Avataren wählen, die für Chat-Benutzer verwendet werden sollen." +msgid "" +"You can choose from several different sets the default avatars that will be " +"used for chat users." +msgstr "" +"Sie können aus mehreren verschiedenen Sets von Standard-Avataren wählen, die " +"für Chat-Benutzer verwendet werden sollen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube avatar generator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -msgstr "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube Avatargenerator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube " +"avatar generator](https://www.peppercarrot.com/extras/html/2023_peertube-" +"generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" +msgstr "" +"{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube " +"Avatargenerator](https://www.peppercarrot.com/extras/html/2023_peertube-" +"generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Sepia](/peertube-plugin-livechat/images/avatar_sepia.png?classes=shadow,border&height=40px)" -msgstr "![Sepia](/peertube-plugin-livechat/images/avatar_sepia.png?classes=shadow,border&height=40px)" +msgid "" +"![Sepia](/peertube-plugin-livechat/images/avatar_sepia.png?classes=shadow," +"border&height=40px)" +msgstr "" +"![Sepia](/peertube-plugin-livechat/images/avatar_sepia.png?classes=shadow," +"border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_cat %}}: [David Revoy's cat avatar generator](https://www.peppercarrot.com/extras/html/2016_cat-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -msgstr "{{% livechat_label avatar_set_option_cat %}}: [David Revoy's Katzen Avatargenerator](https://www.peppercarrot.com/extras/html/2016_cat-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_cat %}}: [David Revoy's cat avatar " +"generator](https://www.peppercarrot.com/extras/html/2016_cat-generator/), " +"[CC-By](https://creativecommons.org/licenses/by/4.0/) license" +msgstr "" +"{{% livechat_label avatar_set_option_cat %}}: [David Revoy's Katzen " +"Avatargenerator](https://www.peppercarrot.com/extras/html/2016_cat-" +"generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Cats](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow,border&height=40px)" -msgstr "![Katzen](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow,border&height=40px)" +msgid "" +"![Cats](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow," +"border&height=40px)" +msgstr "" +"![Katzen](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow," +"border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's bird avatar generator](https://www.peppercarrot.com/extras/html/2019_bird-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -msgstr "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's Vögel Avatargenerator](https://www.peppercarrot.com/extras/html/2019_bird-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_bird %}}: [David Revoy's bird avatar " +"generator](https://www.peppercarrot.com/extras/html/2019_bird-generator/), " +"[CC-By](https://creativecommons.org/licenses/by/4.0/) license" +msgstr "" +"{{% livechat_label avatar_set_option_bird %}}: [David Revoy's Vögel " +"Avatargenerator](https://www.peppercarrot.com/extras/html/2019_bird-" +"generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Birds](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow,border&height=40px)" -msgstr "![Vögel](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow,border&height=40px)" +msgid "" +"![Birds](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow," +"border&height=40px)" +msgstr "" +"![Vögel](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow," +"border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's fenec/mobilizon avatar generator](https://www.peppercarrot.com/extras/html/2020_mobilizon-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -msgstr "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's Fenec/Mobilizon Avatargenerator](https://www.peppercarrot.com/extras/html/2020_mobilizon-generator/), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's fenec/" +"mobilizon avatar generator](https://www.peppercarrot.com/extras/" +"html/2020_mobilizon-generator/), [CC-By](https://creativecommons.org/" +"licenses/by/4.0/) license" +msgstr "" +"{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's Fenec/" +"Mobilizon Avatargenerator](https://www.peppercarrot.com/extras/" +"html/2020_mobilizon-generator/), [CC-By](https://creativecommons.org/" +"licenses/by/4.0/) Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow,border&height=40px)" -msgstr "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow,border&height=40px)" +msgid "" +"![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow," +"border&height=40px)" +msgstr "" +"![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow," +"border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_abstract %}}: [David Revoy's Abstract avatar generator](https://www.peppercarrot.com/extras/html/2017_abstract-generator/index.php), [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -msgstr "{{% livechat_label avatar_set_option_abstract %}}: [David Revoy's Abstrakt Avatargenerator](https://www.peppercarrot.com/extras/html/2017_abstract-generator/index.php), [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_abstract %}}: [David Revoy's Abstract " +"avatar generator](https://www.peppercarrot.com/extras/html/2017_abstract-" +"generator/index.php), [CC-By](https://creativecommons.org/licenses/by/4.0/) " +"license" +msgstr "" +"{{% livechat_label avatar_set_option_abstract %}}: [David Revoy's Abstrakt " +"Avatargenerator](https://www.peppercarrot.com/extras/html/2017_abstract-" +"generator/index.php), [CC-By](https://creativecommons.org/licenses/by/4.0/) " +"Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Abstracts](/peertube-plugin-livechat/images/avatar_abstract.png?classes=shadow,border&height=40px)" -msgstr "![Abstrakt](/peertube-plugin-livechat/images/avatar_abstract.png?classes=shadow,border&height=40px)" +msgid "" +"![Abstracts](/peertube-plugin-livechat/images/avatar_abstract.png?" +"classes=shadow,border&height=40px)" +msgstr "" +"![Abstrakt](/peertube-plugin-livechat/images/avatar_abstract.png?" +"classes=shadow,border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "{{% livechat_label avatar_set_option_legacy %}}: Based on [David Revoy' work](https://www.davidrevoy.com), [AGPL-v3](https://www.gnu.org/licenses/agpl-3.0.en.html) license" -msgstr "{{% livechat_label avatar_set_option_legacy %}}: Basierend auf [David Revoys Arbeit](https://www.davidrevoy.com), [AGPL-v3](https://www.gnu.org/licenses/agpl-3.0.en.html) Lizenz" +msgid "" +"{{% livechat_label avatar_set_option_legacy %}}: Based on [David Revoy' work]" +"(https://www.davidrevoy.com), [AGPL-v3](https://www.gnu.org/licenses/" +"agpl-3.0.en.html) license" +msgstr "" +"{{% livechat_label avatar_set_option_legacy %}}: Basierend auf [David Revoys " +"Arbeit](https://www.davidrevoy.com), [AGPL-v3](https://www.gnu.org/licenses/" +"agpl-3.0.en.html) Lizenz" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "![Legacy](/peertube-plugin-livechat/images/avatar_legacy.jpg?classes=shadow,border&height=40px)" -msgstr "![Alte Avatare](/peertube-plugin-livechat/images/avatar_legacy.jpg?classes=shadow,border&height=40px)" +msgid "" +"![Legacy](/peertube-plugin-livechat/images/avatar_legacy.jpg?classes=shadow," +"border&height=40px)" +msgstr "" +"![Alte Avatare](/peertube-plugin-livechat/images/avatar_legacy.jpg?" +"classes=shadow,border&height=40px)" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "If you can't see the change immediatly, it could be because of your browser cache. Just clear your browser session storage, or restart it." -msgstr "Wenn Sie die Änderung nicht sofort sehen können, könnte es an Ihrem Browser-Cache liegen. Löschen Sie einfach den Sitzungsspeicher Ihres Browsers, oder starten Sie ihn neu." +msgid "" +"If you can't see the change immediatly, it could be because of your browser " +"cache. Just clear your browser session storage, or restart it." +msgstr "" +"Wenn Sie die Änderung nicht sofort sehen können, könnte es an Ihrem Browser-" +"Cache liegen. Löschen Sie einfach den Sitzungsspeicher Ihres Browsers, oder " +"starten Sie ihn neu." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -2128,8 +3329,12 @@ msgstr "Sie können wählen, welches Thema Sie für ConverseJS verwenden möchte #. type: Bullet: '- ' #: build/documentation/pot_in/documentation/admin/settings.md -msgid "Peertube theme: this is a special theme, made especially for peertube's integration." -msgstr "Peertube theme: Dies ist ein spezielles Thema, das speziell für die Integration von Peertube entwickelt wurde." +msgid "" +"Peertube theme: this is a special theme, made especially for peertube's " +"integration." +msgstr "" +"Peertube theme: Dies ist ein spezielles Thema, das speziell für die " +"Integration von Peertube entwickelt wurde." #. type: Bullet: '- ' #: build/documentation/pot_in/documentation/admin/settings.md @@ -2139,7 +3344,8 @@ msgstr "Default ConverseJS theme: Dies ist das standard ConverseJS Thema." #. type: Bullet: '- ' #: build/documentation/pot_in/documentation/admin/settings.md msgid "ConverseJS concord theme: this is a theme provided by ConverseJS." -msgstr "ConverseJS concord theme: Dies ist ein von ConverseJS bereitgestelltes Thema." +msgstr "" +"ConverseJS concord theme: Dies ist ein von ConverseJS bereitgestelltes Thema." #. type: Title ## #: build/documentation/pot_in/documentation/admin/settings.md @@ -2149,13 +3355,25 @@ msgstr "Erweiterte Einstellungen des Chatservers" #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "The plugin comes with an AppImage that is used to run the [Prosody XMPP server](https://prosody.im). If this AppImage is not working, you can fallback to the Prosody that is packaged for your server. Just install the `prosody` package." -msgstr "Das Plugin wird mit einem AppImage geliefert, das zum Ausführen des [Prosody XMPP-Servers](https://prosody.im) verwendet wird. Wenn dieses AppImage nicht funktioniert, können Sie auf das Prosody-Paket zurückgreifen, das für Ihren Server gepackt ist. Installieren Sie einfach das Paket `prosody`." +msgid "" +"The plugin comes with an AppImage that is used to run the [Prosody XMPP " +"server](https://prosody.im). If this AppImage is not working, you can " +"fallback to the Prosody that is packaged for your server. Just install the " +"`prosody` package." +msgstr "" +"Das Plugin wird mit einem AppImage geliefert, das zum Ausführen des [Prosody " +"XMPP-Servers](https://prosody.im) verwendet wird. Wenn dieses AppImage nicht " +"funktioniert, können Sie auf das Prosody-Paket zurückgreifen, das für Ihren " +"Server gepackt ist. Installieren Sie einfach das Paket `prosody`." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "This setting should only be used if the plugin is broken, and waiting for a patch." -msgstr "Diese Einstellung sollte nur verwendet werden, wenn das Plugin defekt ist und auf einen Patch wartet." +msgid "" +"This setting should only be used if the plugin is broken, and waiting for a " +"patch." +msgstr "" +"Diese Einstellung sollte nur verwendet werden, wenn das Plugin defekt ist " +"und auf einen Patch wartet." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md @@ -2165,33 +3383,76 @@ msgstr "Wenn diese Einstellung leer gelassen wird und Sie Peertube >= 5.1 oder s #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "In last resort, it will use your Peertube public URI. So, any API Call will go throught your Nginx server. This could fail in some case: for example if you are in a Docker container, where the public hostname does not resolve to the correct IP. In such case, try changing the \"{{% livechat_label prosody_peertube_uri_label %}}\" settings, by setting `http://127.0.0.1:9000` (assuming 9000 is the port on which Peertube listen, ask your instance administrators if you don't know)." -msgstr "Schlussendlich wird es Ihre öffentliche Peertube-URI verwenden. So wird jeder API-Aufruf über Ihren Nginx-Server laufen. Dies kann in einigen Fällen fehlschlagen: z.B. wenn Sie sich in einem Docker-Container befinden, wo der öffentliche Hostname nicht zur richtigen IP aufgelöst wird. Versuchen Sie in diesem Fall, die \"{{% livechat_label prosody_peertube_uri_label %}}\" Einstellungen zu ändern, indem Sie `http://127.0.0.1:9000` einstellen (unter der Annahme, dass 9000 der Port ist, auf dem Peertube lauscht; fragen Sie Ihre Instanzadministratoren, wenn Sie es nicht wissen)." +msgid "" +"In last resort, it will use your Peertube public URI. So, any API Call will " +"go throught your Nginx server. This could fail in some case: for example if " +"you are in a Docker container, where the public hostname does not resolve to " +"the correct IP. In such case, try changing the \"{{% livechat_label " +"prosody_peertube_uri_label %}}\" settings, by setting " +"`http://127.0.0.1:9000` (assuming 9000 is the port on which Peertube listen, " +"ask your instance administrators if you don't know)." +msgstr "" +"Schlussendlich wird es Ihre öffentliche Peertube-URI verwenden. So wird " +"jeder API-Aufruf über Ihren Nginx-Server laufen. Dies kann in einigen " +"Fällen fehlschlagen: z.B. wenn Sie sich in einem Docker-Container befinden, " +"wo der öffentliche Hostname nicht zur richtigen IP aufgelöst wird. " +"Versuchen Sie in diesem Fall, die \"{{% livechat_label " +"prosody_peertube_uri_label %}}\" Einstellungen zu ändern, indem Sie " +"`http://127.0.0.1:9000` einstellen (unter der Annahme, dass 9000 der Port " +"ist, auf dem Peertube lauscht; fragen Sie Ihre Instanzadministratoren, wenn " +"Sie es nicht wissen)." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "This setting enable XMPP clients to connect to the built-in Prosody server. For now, this option **only allows connections from localhost clients**." -msgstr "Diese Einstellung ermöglicht es XMPP-Clients, sich mit dem eingebauten Prosody-Server zu verbinden. Im Moment erlaubt diese Option **nur Verbindungen von localhost-Clients**." +msgid "" +"This setting enable XMPP clients to connect to the built-in Prosody server. " +"For now, this option **only allows connections from localhost clients**." +msgstr "" +"Diese Einstellung ermöglicht es XMPP-Clients, sich mit dem eingebauten " +"Prosody-Server zu verbinden. Im Moment erlaubt diese Option **nur " +"Verbindungen von localhost-Clients**." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "As example, this option can allow an instance of Matterbridge (once it could use anonymous login) *on the same machine* to bridge your chat with another services like a Matrix room." -msgstr "Zum Beispiel kann diese Option einer Instanz von Matterbridge (sobald sie einen anonymen Login verwenden kann) *auf demselben Rechner* erlauben, Ihren Chat mit einem anderen Dienst wie einem Matrix-Raum zu verbinden." +msgid "" +"As example, this option can allow an instance of Matterbridge (once it could " +"use anonymous login) *on the same machine* to bridge your chat with another " +"services like a Matrix room." +msgstr "" +"Zum Beispiel kann diese Option einer Instanz von Matterbridge (sobald sie " +"einen anonymen Login verwenden kann) *auf demselben Rechner* erlauben, Ihren " +"Chat mit einem anderen Dienst wie einem Matrix-Raum zu verbinden." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "This setting enable XMPP external components to connect to the server. By default, this option **only allows connections from localhost components**. You have to change the \"{{% livechat_label prosody_components_interfaces_label %}}\" value to listen on other network interfaces." -msgstr "Diese Einstellung ermöglicht es externen XMPP-Komponenten, sich mit dem Server zu verbinden. Standardmäßig erlaubt diese Option **nur Verbindungen von localhost-Komponenten**. Sie müssen den Wert \"{{% livechat_label prosody_components_interfaces_label %}}\" ändern, um an anderen Netzwerkschnittstellen zu lauschen." +msgid "" +"This setting enable XMPP external components to connect to the server. By " +"default, this option **only allows connections from localhost components**. " +"You have to change the \"{{% livechat_label " +"prosody_components_interfaces_label %}}\" value to listen on other network " +"interfaces." +msgstr "" +"Diese Einstellung ermöglicht es externen XMPP-Komponenten, sich mit dem " +"Server zu verbinden. Standardmäßig erlaubt diese Option **nur Verbindungen " +"von localhost-Komponenten**. Sie müssen den Wert \"{{% livechat_label " +"prosody_components_interfaces_label %}}\" ändern, um an anderen " +"Netzwerkschnittstellen zu lauschen." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md msgid "This feature could be used to connect bridges or bots." -msgstr "Diese Funktion könnte für die Verbindung von Brücken oder Bots genutzt werden." +msgstr "" +"Diese Funktion könnte für die Verbindung von Brücken oder Bots genutzt " +"werden." #. type: Plain text #: build/documentation/pot_in/documentation/admin/settings.md -msgid "More informations on Prosody external components [here](https://prosody.im/doc/components)." -msgstr "Weitere Informationen zu den externen Komponenten von Prosody finden Sie [hier](https://prosody.im/doc/components)." +msgid "" +"More informations on Prosody external components [here](https://prosody.im/" +"doc/components)." +msgstr "" +"Weitere Informationen zu den externen Komponenten von Prosody finden Sie " +"[hier](https://prosody.im/doc/components)." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/_index.md @@ -2213,13 +3474,22 @@ msgstr "Bekannte Probleme: CPU Kompatibilität" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "The Prosody AppImage included in the plugin will only work on x86_64 and arm64 CPU. It is not compatible with other CPU architectures." -msgstr "Das im Plugin enthaltene Prosody AppImage funktioniert nur mit x86_64 und arm64 CPU Architekturen. Es ist nicht kompatibel mit anderen CPU-Architekturen." +msgid "" +"The Prosody AppImage included in the plugin will only work on x86_64 and " +"arm64 CPU. It is not compatible with other CPU architectures." +msgstr "" +"Das im Plugin enthaltene Prosody AppImage funktioniert nur mit x86_64 und " +"arm64 CPU Architekturen. Es ist nicht kompatibel mit anderen CPU-" +"Architekturen." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "To use the plugin, you will have to manually install Prosody on your server (see below)." -msgstr "Um das Plugin zu verwenden, müssen Sie Prosody manuell auf Ihrem Server installieren (siehe unten)." +msgid "" +"To use the plugin, you will have to manually install Prosody on your server " +"(see below)." +msgstr "" +"Um das Plugin zu verwenden, müssen Sie Prosody manuell auf Ihrem Server " +"installieren (siehe unten)." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2233,8 +3503,12 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "Once it is done, you have to check `Use system Prosody` in the plugin settings." -msgstr "Sobald dies geschehen ist, müssen Sie in den Plugin-Einstellungen das Häkchen bei `Use system Prosody` setzen." +msgid "" +"Once it is done, you have to check `Use system Prosody` in the plugin " +"settings." +msgstr "" +"Sobald dies geschehen ist, müssen Sie in den Plugin-Einstellungen das " +"Häkchen bei `Use system Prosody` setzen." #. type: Title ## #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2244,8 +3518,12 @@ msgstr "Nicht-Docker Peertube installation" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "For standard installation, you just have to install the official `prosody` package for your linux distribution." -msgstr "Für die Standardinstallation müssen Sie nur das offizielle `prosody`-Paket für Ihre Linux-Distribution installieren." +msgid "" +"For standard installation, you just have to install the official `prosody` " +"package for your linux distribution." +msgstr "" +"Für die Standardinstallation müssen Sie nur das offizielle `prosody`-Paket " +"für Ihre Linux-Distribution installieren." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2260,8 +3538,16 @@ msgstr "sudo apt install prosody\n" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "You can then disable the service that starts automatically when you install Prosody (the plugin will launch a Prosody process, there is no need for the service to run). For example, on Debian/Ubuntu (and other Systemd based linux distributions):" -msgstr "Sie können dann den Dienst deaktivieren, der automatisch startet, wenn Sie Prosody installieren (das Plugin startet einen Prosody-Prozess, der Dienst muss nicht dauerhaft laufen). Zum Beispiel unter Debian/Ubuntu (und anderen Systemd-basierten Linux-Distributionen):" +msgid "" +"You can then disable the service that starts automatically when you install " +"Prosody (the plugin will launch a Prosody process, there is no need for the " +"service to run). For example, on Debian/Ubuntu (and other Systemd based " +"linux distributions):" +msgstr "" +"Sie können dann den Dienst deaktivieren, der automatisch startet, wenn Sie " +"Prosody installieren (das Plugin startet einen Prosody-Prozess, der Dienst " +"muss nicht dauerhaft laufen). Zum Beispiel unter Debian/Ubuntu (und anderen " +"Systemd-basierten Linux-Distributionen):" #. type: Fenced code block (bash) #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2271,8 +3557,12 @@ msgstr "sudo systemctl disable prosody && sudo systemctl stop prosody\n" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "Warning: do not disable Prosody if it is used for another service on your server, like for example Jitsi." -msgstr "Achtung: Deaktivieren Sie Prosody nicht, wenn es für einen anderen Dienst auf Ihrem Server verwendet wird, wie zum Beispiel Jitsi." +msgid "" +"Warning: do not disable Prosody if it is used for another service on your " +"server, like for example Jitsi." +msgstr "" +"Achtung: Deaktivieren Sie Prosody nicht, wenn es für einen anderen Dienst " +"auf Ihrem Server verwendet wird, wie zum Beispiel Jitsi." #. type: Title ## #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2282,13 +3572,25 @@ msgstr "Docker" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "You will have to generate a Peertube image that includes Prosody in the same container that Peertube. I know this is not the standard way to do this with Docker, but keep in mind it is a temporary workaround." -msgstr "Sie müssen ein Peertube-Image generieren, das Prosody in demselben Container enthält, der auch Peertube beinhaltet. Ich weiß, dass dies nicht der Standardweg ist, um dies mit Docker zu tun, aber bedenken Sie, dass eine vorübergehende Lösung ist." +msgid "" +"You will have to generate a Peertube image that includes Prosody in the same " +"container that Peertube. I know this is not the standard way to do this " +"with Docker, but keep in mind it is a temporary workaround." +msgstr "" +"Sie müssen ein Peertube-Image generieren, das Prosody in demselben Container " +"enthält, der auch Peertube beinhaltet. Ich weiß, dass dies nicht der " +"Standardweg ist, um dies mit Docker zu tun, aber bedenken Sie, dass eine " +"vorübergehende Lösung ist." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "To generate and use such an image, please refer to the Docker documentation. The Docker file to generate the image should be:" -msgstr "Um ein solches Image zu erzeugen und zu verwenden, lesen Sie bitte die Docker-Dokumentation. Die Docker-Datei, um das Paket zu erzeugen, sollte wie folgt sein:" +msgid "" +"To generate and use such an image, please refer to the Docker " +"documentation. The Docker file to generate the image should be:" +msgstr "" +"Um ein solches Image zu erzeugen und zu verwenden, lesen Sie bitte die " +"Docker-Dokumentation. Die Docker-Datei, um das Paket zu erzeugen, sollte wie " +"folgt sein:" #. type: Fenced code block (Docker) #: support/documentation/content/en/documentation/installation/cpu_compatibility.md @@ -2310,18 +3612,33 @@ msgstr "Yunohost" #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "You have to disable `metronome` (the XMPP server provided by Yunohost), and install `prosody`." -msgstr "Sie müssen `metronome` (der von Yunohost bereitgestellte XMPP-Server) deaktivieren, und `prosody` installieren." +msgid "" +"You have to disable `metronome` (the XMPP server provided by Yunohost), and " +"install `prosody`." +msgstr "" +"Sie müssen `metronome` (der von Yunohost bereitgestellte XMPP-Server) " +"deaktivieren, und `prosody` installieren." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "This is already done by the Yunohost Peertube application, as it was required for the plugin before the v6.0.0." -msgstr "Dies wird bereits von der Yunohost Peertube Anwendung gemacht, da es für das Plugin vor v6.0.0 erforderlich war." +msgid "" +"This is already done by the Yunohost Peertube application, as it was " +"required for the plugin before the v6.0.0." +msgstr "" +"Dies wird bereits von der Yunohost Peertube Anwendung gemacht, da es für das " +"Plugin vor v6.0.0 erforderlich war." #. type: Plain text #: support/documentation/content/en/documentation/installation/cpu_compatibility.md -msgid "But it may be removed in a near feature (to avoid drawbacks of this method). I have to discuss with Yunohost team, to decide how we can do to minimize drawbacks, and maximize compatibility." -msgstr "Es kann aber sein, dass es in naher Zukunft entfernt wird (um die Nachteile dieser Methode zu vermeiden). Ich muss mit dem Yunohost Team diskutieren, um zu entscheiden, wie wir die Nachteile minimieren können, und die Kompatibilität zu maximieren." +msgid "" +"But it may be removed in a near feature (to avoid drawbacks of this " +"method). I have to discuss with Yunohost team, to decide how we can do to " +"minimize drawbacks, and maximize compatibility." +msgstr "" +"Es kann aber sein, dass es in naher Zukunft entfernt wird (um die Nachteile " +"dieser Methode zu vermeiden). Ich muss mit dem Yunohost Team diskutieren, um " +"zu entscheiden, wie wir die Nachteile minimieren können, und die " +"Kompatibilität zu maximieren." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/installation/_index.md @@ -2338,13 +3655,24 @@ msgstr "Installationsanleitung" #. type: Plain text #: support/documentation/content/en/documentation/installation/_index.md #: support/documentation/content/en/_index.md -msgid "Before updating to a major release, please read the release notes and breaking changes list : [CHANGELOG](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/CHANGELOG.md)." -msgstr "Bevor Sie auf eine Hauptversion aktualisieren, lesen Sie bitte die Versionshinweise und die Liste der wichtigsten Änderungen : [CHANGELOG](https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/CHANGELOG.md)." +msgid "" +"Before updating to a major release, please read the release notes and " +"breaking changes list : [CHANGELOG](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/blob/main/CHANGELOG.md)." +msgstr "" +"Bevor Sie auf eine Hauptversion aktualisieren, lesen Sie bitte die " +"Versionshinweise und die Liste der wichtigsten Änderungen : [CHANGELOG]" +"(https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/" +"CHANGELOG.md)." #. type: Plain text #: support/documentation/content/en/documentation/installation/_index.md -msgid "To install or update the plugin, **just use the Peertube web admin interface**." -msgstr "Um das Plugin zu installieren oder zu aktualisieren **einfach das Peertube Web-Admin-Interface benutzen**." +msgid "" +"To install or update the plugin, **just use the Peertube web admin " +"interface**." +msgstr "" +"Um das Plugin zu installieren oder zu aktualisieren **einfach das Peertube " +"Web-Admin-Interface benutzen**." #. type: Plain text #: support/documentation/content/en/documentation/installation/_index.md @@ -2365,8 +3693,15 @@ msgstr "Ich habe das Plugin gerade installiert/aktualisiert, aber es passiert ni #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "If you have just installed/upgraded the plugin, but nothing happens (no chat, no settings, buttons in the settings page does not work, ...), just try to reload the page." -msgstr "Wenn Sie das Plugin gerade installiert/aktualisiert haben, aber nichts passiert (kein Chat, keine Einstellungen, Schaltflächen auf der Einstellungsseite funktionieren nicht, ...), versuchen Sie einfach, die Seite neu zu laden." +msgid "" +"If you have just installed/upgraded the plugin, but nothing happens (no " +"chat, no settings, buttons in the settings page does not work, ...), just " +"try to reload the page." +msgstr "" +"Wenn Sie das Plugin gerade installiert/aktualisiert haben, aber nichts " +"passiert (kein Chat, keine Einstellungen, Schaltflächen auf der " +"Einstellungsseite funktionieren nicht, ...), versuchen Sie einfach, die " +"Seite neu zu laden." #. type: Title ## #: support/documentation/content/en/documentation/installation/troubleshooting.md @@ -2376,28 +3711,50 @@ msgstr "Diagnosewerkzeug" #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "If the chat does not work, there is a diagnostic tool in the plugin's settings pages." -msgstr "Wenn der Chat nicht funktioniert, gibt es ein Diagnosetool auf den Einstellungsseiten des Plugins." +msgid "" +"If the chat does not work, there is a diagnostic tool in the plugin's " +"settings pages." +msgstr "" +"Wenn der Chat nicht funktioniert, gibt es ein Diagnosetool auf den " +"Einstellungsseiten des Plugins." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "Open the plugin settings, and click on the \"launch diagnostic\" button." -msgstr "Öffnen Sie die Plugin-Einstellungen, und klicken Sie auf die Schaltfläche \"Diagnose starten\"." +msgid "" +"Open the plugin settings, and click on the \"launch diagnostic\" button." +msgstr "" +"Öffnen Sie die Plugin-Einstellungen, und klicken Sie auf die Schaltfläche " +"\"Diagnose starten\"." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "![Launch diagnostic](/peertube-plugin-livechat/images/launch_diagnostic.png?classes=shadow,border&height=200px)" -msgstr "![Diagnose starten](/peertube-plugin-livechat/images/launch_diagnostic.png?classes=shadow,border&height=200px)" +msgid "" +"![Launch diagnostic](/peertube-plugin-livechat/images/launch_diagnostic.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Diagnose starten](/peertube-plugin-livechat/images/launch_diagnostic.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "If there is any error in the diagnostic page, you can search in this page for a solution, or refer to the [Bug tracking documentation page](/peertube-plugin-livechat/issues/) if you can't find any response." -msgstr "Wenn auf der Diagnoseseite ein Fehler auftritt, können Sie auf dieser Seite nach einer Lösung suchen oder auf der [Bugtracking Dokumentationsseite](/peertube-plugin-livechat/de/issues/) nachsehen, wenn Sie keine Antwort finden." +msgid "" +"If there is any error in the diagnostic page, you can search in this page " +"for a solution, or refer to the [Bug tracking documentation page](/peertube-" +"plugin-livechat/issues/) if you can't find any response." +msgstr "" +"Wenn auf der Diagnoseseite ein Fehler auftritt, können Sie auf dieser Seite " +"nach einer Lösung suchen oder auf der [Bugtracking Dokumentationsseite](/" +"peertube-plugin-livechat/de/issues/) nachsehen, wenn Sie keine Antwort " +"finden." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "![Diagnostic result](/peertube-plugin-livechat/images/diagnostic.png?classes=shadow,border&height=200px)" -msgstr "![Diagnoseergebnis](/peertube-plugin-livechat/images/diagnostic.png?classes=shadow,border&height=200px)" +msgid "" +"![Diagnostic result](/peertube-plugin-livechat/images/diagnostic.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Diagnoseergebnis](/peertube-plugin-livechat/images/diagnostic.png?" +"classes=shadow,border&height=200px)" #. type: Title ## #: support/documentation/content/en/documentation/installation/troubleshooting.md @@ -2419,13 +3776,26 @@ msgstr "In manchen Fällen (z. B. bei einer Docker-Peertube-Installation) zeigen #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "In such case, try changing the \"{{% livechat_label prosody_peertube_uri_label %}}\" settings, by setting `http://127.0.0.1:9000` (assuming 9000 is the port on which Peertube listen, ask your instance administrators if you don't know)." -msgstr "Versuchen Sie in diesem Fall, die \"{{% livechat_label prosody_peertube_uri_label %}}\" Einstellungen zu ändern, indem Sie `http://127.0.0.1:9000` einstellen (unter der Annahme, dass 9000 der Port ist, auf dem Peertube lauscht, fragen Sie Ihre Instanzadministratoren, wenn Sie es nicht wissen)." +msgid "" +"In such case, try changing the \"{{% livechat_label " +"prosody_peertube_uri_label %}}\" settings, by setting " +"`http://127.0.0.1:9000` (assuming 9000 is the port on which Peertube listen, " +"ask your instance administrators if you don't know)." +msgstr "" +"Versuchen Sie in diesem Fall, die \"{{% livechat_label " +"prosody_peertube_uri_label %}}\" Einstellungen zu ändern, indem Sie " +"`http://127.0.0.1:9000` einstellen (unter der Annahme, dass 9000 der Port " +"ist, auf dem Peertube lauscht, fragen Sie Ihre Instanzadministratoren, wenn " +"Sie es nicht wissen)." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "Check the help for [this setting](/peertube-plugin-livechat/documentation/admin/settings/) for more information." -msgstr "Weitere Informationen finden Sie in der Hilfe für [diese Einstellung](/peertube-plugin-livechat/de/documentation/admin/settings/)." +msgid "" +"Check the help for [this setting](/peertube-plugin-livechat/documentation/" +"admin/settings/) for more information." +msgstr "" +"Weitere Informationen finden Sie in der Hilfe für [diese Einstellung](/" +"peertube-plugin-livechat/de/documentation/admin/settings/)." #. type: Title ### #: support/documentation/content/en/documentation/installation/troubleshooting.md @@ -2435,18 +3805,48 @@ msgstr "Websocket" #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "If everything is fine in the diagnostic tools, but chat windows remains empty: it can be a Websocket issue. Since Peertube version 5.0.0, there are some additional configuration to do on the server side. Check with the instance administrators that they did not forgot to apply changes listed in the [Peertube v5.0.0 release notes](https://github.com/Chocobozzz/PeerTube/blob/master/CHANGELOG.md#v500)." -msgstr "Wenn in den Diagnosetools alles in Ordnung ist, aber die Chat-Fenster leer bleiben: Es kann ein Websocket-Problem sein. Seit Peertube Version 5.0.0 müssen einige zusätzliche Konfigurationen auf der Serverseite vorgenommen werden. Vergewissern Sie sich bei den Instanzadministratoren, dass sie nicht vergessen haben, die in den [Peertube v5.0.0 release notes](https://github.com/Chocobozzz/PeerTube/blob/master/CHANGELOG.md#v500) aufgeführten Änderungen anzuwenden." +msgid "" +"If everything is fine in the diagnostic tools, but chat windows remains " +"empty: it can be a Websocket issue. Since Peertube version 5.0.0, there are " +"some additional configuration to do on the server side. Check with the " +"instance administrators that they did not forgot to apply changes listed in " +"the [Peertube v5.0.0 release notes](https://github.com/Chocobozzz/PeerTube/" +"blob/master/CHANGELOG.md#v500)." +msgstr "" +"Wenn in den Diagnosetools alles in Ordnung ist, aber die Chat-Fenster leer " +"bleiben: Es kann ein Websocket-Problem sein. Seit Peertube Version 5.0.0 " +"müssen einige zusätzliche Konfigurationen auf der Serverseite vorgenommen " +"werden. Vergewissern Sie sich bei den Instanzadministratoren, dass sie " +"nicht vergessen haben, die in den [Peertube v5.0.0 release notes](https://" +"github.com/Chocobozzz/PeerTube/blob/master/CHANGELOG.md#v500) aufgeführten " +"Änderungen anzuwenden." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "You can confirm that it is a Websocket issue by opening your browser console, and checking for error logs talking about failed Websocket connection." -msgstr "Sie können bestätigen, dass es sich um ein Websocket-Problem handelt, indem Sie Ihre Browserkonsole öffnen und nach Fehlerprotokollen suchen, in denen von einer fehlgeschlagenen Websocket-Verbindung die Rede ist." +msgid "" +"You can confirm that it is a Websocket issue by opening your browser " +"console, and checking for error logs talking about failed Websocket " +"connection." +msgstr "" +"Sie können bestätigen, dass es sich um ein Websocket-Problem handelt, indem " +"Sie Ihre Browserkonsole öffnen und nach Fehlerprotokollen suchen, in denen " +"von einer fehlgeschlagenen Websocket-Verbindung die Rede ist." #. type: Plain text #: support/documentation/content/en/documentation/installation/troubleshooting.md -msgid "If you can't fix this immediatly, you can disable Websocket by unchecking \"{{% livechat_label disable_websocket_label %}}\" in the plugin setting page. In such case, you should also check \"{{% livechat_label federation_dont_publish_remotely_label %}}\", as chat federation won't work without Websocket." -msgstr "Wenn Sie dies nicht sofort beheben können, können Sie Websocket deaktivieren, indem Sie das Häkchen bei \"{{% livechat_label disable_websocket_label %}}\" auf der Plugin Einstellungsseite entfernen. In diesem Fall sollten Sie auch das Häkchen bei \"{{% livechat_label federation_dont_publish_remotely_label %}}\" setzen, da die Chat-Föderation ohne Websocket nicht funktioniert." +msgid "" +"If you can't fix this immediatly, you can disable Websocket by unchecking " +"\"{{% livechat_label disable_websocket_label %}}\" in the plugin setting " +"page. In such case, you should also check \"{{% livechat_label " +"federation_dont_publish_remotely_label %}}\", as chat federation won't work " +"without Websocket." +msgstr "" +"Wenn Sie dies nicht sofort beheben können, können Sie Websocket " +"deaktivieren, indem Sie das Häkchen bei \"{{% livechat_label " +"disable_websocket_label %}}\" auf der Plugin Einstellungsseite entfernen. " +"In diesem Fall sollten Sie auch das Häkchen bei \"{{% livechat_label " +"federation_dont_publish_remotely_label %}}\" setzen, da die Chat-Föderation " +"ohne Websocket nicht funktioniert." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/installation/upgrade_before_6.0.0.md @@ -2468,18 +3868,29 @@ msgstr "WICHTIGER HINWEIS" #. type: Plain text #: support/documentation/content/en/documentation/installation/upgrade_before_6.0.0.md -msgid "Since version v6.0.0, this plugin does not need any Prosody installation." -msgstr "Seit Version v6.0.0 benötigt dieses Plugin keine andere Prosody-Installation." +msgid "" +"Since version v6.0.0, this plugin does not need any Prosody installation." +msgstr "" +"Seit Version v6.0.0 benötigt dieses Plugin keine andere Prosody-Installation." #. type: Plain text #: support/documentation/content/en/documentation/installation/upgrade_before_6.0.0.md -msgid "If you were using this plugin before this version, and if you had installed Prosody manually, you can safely uninstall Prosody." -msgstr "Falls Sie dieses Plugin vor dieser Version benutzt haben und Sie Prosody manuell installiert haben, können Sie Prosody sicher deinstallieren." +msgid "" +"If you were using this plugin before this version, and if you had installed " +"Prosody manually, you can safely uninstall Prosody." +msgstr "" +"Falls Sie dieses Plugin vor dieser Version benutzt haben und Sie Prosody " +"manuell installiert haben, können Sie Prosody sicher deinstallieren." #. type: Plain text #: support/documentation/content/en/documentation/installation/upgrade_before_6.0.0.md -msgid "If you were using the custom Peertube docker image that is embedding Prosody, you can switch back to the official Peertube image." -msgstr "Falls Sie ein eigenes Peertube Docker Paket genutzt haben, welches Prosody eingebettet hatte, können Sie zu den offiziellen Peertube Paketen zurück wechseln." +msgid "" +"If you were using the custom Peertube docker image that is embedding " +"Prosody, you can switch back to the official Peertube image." +msgstr "" +"Falls Sie ein eigenes Peertube Docker Paket genutzt haben, welches Prosody " +"eingebettet hatte, können Sie zu den offiziellen Peertube Paketen zurück " +"wechseln." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/_index.md @@ -2507,8 +3918,15 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "[OBS](https://obsproject.com) is a popular Free And Open Source streaming software, with advanced capacities for your live streams. In the current page, you will find some advices to handle your live chats using OBS." -msgstr "[OBS](https://obsproject.com) ist eine beliebte kostenlose and quellcodeoffene Streaming Software, mit erweiterten Funktionen für Ihre Live-Streams. Auf dieser Seite finden Sie einige Ratschläge, wie Sie Ihre Live-Chats mit OBS verwalten können." +msgid "" +"[OBS](https://obsproject.com) is a popular Free And Open Source streaming " +"software, with advanced capacities for your live streams. In the current " +"page, you will find some advices to handle your live chats using OBS." +msgstr "" +"[OBS](https://obsproject.com) ist eine beliebte kostenlose and " +"quellcodeoffene Streaming Software, mit erweiterten Funktionen für Ihre Live-" +"Streams. Auf dieser Seite finden Sie einige Ratschläge, wie Sie Ihre Live-" +"Chats mit OBS verwalten können." #. type: Title ## #: support/documentation/content/en/documentation/user/obs.md @@ -2524,24 +3942,41 @@ msgstr "Sie können den Chat ganz einfach in Ihren Videostream integrieren." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md #: support/documentation/content/en/intro/_index.md -msgid "![Embeding the chat in a live stream](/peertube-plugin-livechat/images/embed_chat_in_livestream.png?classes=shadow,border&height=200px)" -msgstr "![Einbetten des Chats in einen Live-Stream](/peertube-plugin-livechat/images/embed_chat_in_livestream.png?classes=shadow,border&height=200px)" +msgid "" +"![Embeding the chat in a live stream](/peertube-plugin-livechat/images/" +"embed_chat_in_livestream.png?classes=shadow,border&height=200px)" +msgstr "" +"![Einbetten des Chats in einen Live-Stream](/peertube-plugin-livechat/images/" +"embed_chat_in_livestream.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "You can use the \"{{% livechat_label share_chat_link %}}\" feature to generate an URL to your chat. This button should be near the chat if you are the video owner (unless it was desactivated by your server admins)." -msgstr "Sie können die Funktion \"{{% livechat_label share_chat_link %}}\" verwenden, um eine URL zu Ihrem Chat zu generieren. Diese Schaltfläche sollte sich in der Nähe des Chats befinden, wenn Sie der Videoeigentümer sind (es sei denn, sie wurde von Ihren Serveradministratoren deaktiviert)." +msgid "" +"You can use the \"{{% livechat_label share_chat_link %}}\" feature to " +"generate an URL to your chat. This button should be near the chat if you " +"are the video owner (unless it was desactivated by your server admins)." +msgstr "" +"Sie können die Funktion \"{{% livechat_label share_chat_link %}}\" " +"verwenden, um eine URL zu Ihrem Chat zu generieren. Diese Schaltfläche " +"sollte sich in der Nähe des Chats befinden, wenn Sie der Videoeigentümer " +"sind (es sei denn, sie wurde von Ihren Serveradministratoren deaktiviert)." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md msgid "Check the \"{{% livechat_label read_only %}}\" checkbox in the modal." -msgstr "Aktivieren Sie das Kontrollkästchen \"{{% livechat_label read_only %}}\" im Fenster." +msgstr "" +"Aktivieren Sie das Kontrollkästchen \"{{% livechat_label read_only %}}\" im " +"Fenster." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Share link popup](/peertube-plugin-livechat/images/share_readonly.png?classes=shadow,border&height=200px)" -msgstr "![Link Teilen Popup](/peertube-plugin-livechat/images/share_readonly.png?classes=shadow,border&height=200px)" +msgid "" +"![Share link popup](/peertube-plugin-livechat/images/share_readonly.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Link Teilen Popup](/peertube-plugin-livechat/images/share_readonly.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md @@ -2551,13 +3986,25 @@ msgstr "Verwenden Sie dann diesen Link als \"Webbrowser-Quelle\" in OBS." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md #: support/documentation/content/en/intro/_index.md -msgid "![Embeding the chat in OBS](/peertube-plugin-livechat/images/embed_chat_in_obs.png?classes=shadow,border&height=200px)" -msgstr "![Den Chat in OBS einbetten](/peertube-plugin-livechat/images/embed_chat_in_obs.png?classes=shadow,border&height=200px)" +msgid "" +"![Embeding the chat in OBS](/peertube-plugin-livechat/images/" +"embed_chat_in_obs.png?classes=shadow,border&height=200px)" +msgstr "" +"![Den Chat in OBS einbetten](/peertube-plugin-livechat/images/" +"embed_chat_in_obs.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "You can use the \"{{% livechat_label transparent_background %}}\" option to have a transparent background in OBS. If you want to customize the background transparency, you can add this CSS in your OBS browser source's settings:" -msgstr "Sie können die \"{{% livechat_label transparent_background %}}\" Option verwenden, um einen transparenten Hintergrund in OBS zu erhalten. Wenn Sie die Hintergrundtransparenz anpassen möchten, können Sie dieses CSS in den Einstellungen Ihrer OBS-Browserquelle hinzufügen:" +msgid "" +"You can use the \"{{% livechat_label transparent_background %}}\" option to " +"have a transparent background in OBS. If you want to customize the " +"background transparency, you can add this CSS in your OBS browser source's " +"settings:" +msgstr "" +"Sie können die \"{{% livechat_label transparent_background %}}\" Option " +"verwenden, um einen transparenten Hintergrund in OBS zu erhalten. Wenn Sie " +"die Hintergrundtransparenz anpassen möchten, können Sie dieses CSS in den " +"Einstellungen Ihrer OBS-Browserquelle hinzufügen:" #. type: Fenced code block (css) #: support/documentation/content/en/documentation/user/obs.md @@ -2570,13 +4017,26 @@ msgstr "" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "In the previous CSS snippet, you can of course change the color or the transparency, by adapting the color values." -msgstr "Im vorherigen CSS-Schnipsel können Sie natürlich die Farbe oder die Transparenz ändern, indem Sie die Farbwerte anpassen." +msgid "" +"In the previous CSS snippet, you can of course change the color or the " +"transparency, by adapting the color values." +msgstr "" +"Im vorherigen CSS-Schnipsel können Sie natürlich die Farbe oder die " +"Transparenz ändern, indem Sie die Farbwerte anpassen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "Note: you can entirely customize chat colors. This is undocumented yet, but you can try this: in the modal, check «use curent theme colors», then you can try to manually change color values in the URL. You must use valid CSS color values, and they must be properly URL encoded." -msgstr "Hinweis: Sie können vollständig die Chat-Farben anpassen. Dies ist noch nicht dokumentiert, aber Sie können dies versuchen: Aktivieren Sie im Fenster die Option \"Aktuelle Themenfarben verwenden\", und versuchen Sie dann, die Farbwerte in der URL manuell zu ändern. Sie müssen gültige CSS-Farbwerte verwenden, und diese müssen in der URL korrekt kodiert sein." +msgid "" +"Note: you can entirely customize chat colors. This is undocumented yet, but " +"you can try this: in the modal, check «use curent theme colors», then you " +"can try to manually change color values in the URL. You must use valid CSS " +"color values, and they must be properly URL encoded." +msgstr "" +"Hinweis: Sie können vollständig die Chat-Farben anpassen. Dies ist noch " +"nicht dokumentiert, aber Sie können dies versuchen: Aktivieren Sie im " +"Fenster die Option \"Aktuelle Themenfarben verwenden\", und versuchen Sie " +"dann, die Farbwerte in der URL manuell zu ändern. Sie müssen gültige CSS-" +"Farbwerte verwenden, und diese müssen in der URL korrekt kodiert sein." #. type: Title ## #: support/documentation/content/en/documentation/user/obs.md @@ -2588,74 +4048,137 @@ msgstr "OBS Dock" #: support/documentation/content/en/documentation/user/obs.md #: build/documentation/pot_in/documentation/user/streamers/emojis.md msgid "This feature comes with the livechat plugin version 10.1.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.1.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 10.1.0 verfügbar sein." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md #: support/documentation/content/en/documentation/user/viewers.md msgid "This feature can be disabled by the instance's adminitrators." -msgstr "Diese Funktion kann von den Administratoren der Instanz deaktiviert werden." +msgstr "" +"Diese Funktion kann von den Administratoren der Instanz deaktiviert werden." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "You can use OBS \"Custom browser docks\" to integrate the chat in your OBS while you are streaming. The livechat plugin offers a way to create long term token that can identify you automatically to join the chat, so you don't have to enter your password in OBS." -msgstr "Sie können OBS \"Benutzerdefinierte Browser-Docks\" verwenden, um den Chat in OBS zu integrieren, während Sie streamen. Das Livechat-Plugin bietet eine Möglichkeit, ein langfristiges Token zu erstellen, das Sie automatisch identifiziert, um dem Chat beizutreten, so dass Sie Ihr Passwort nicht in OBS eingeben müssen." +msgid "" +"You can use OBS \"Custom browser docks\" to integrate the chat in your OBS " +"while you are streaming. The livechat plugin offers a way to create long " +"term token that can identify you automatically to join the chat, so you " +"don't have to enter your password in OBS." +msgstr "" +"Sie können OBS \"Benutzerdefinierte Browser-Docks\" verwenden, um den Chat " +"in OBS zu integrieren, während Sie streamen. Das Livechat-Plugin bietet " +"eine Möglichkeit, ein langfristiges Token zu erstellen, das Sie automatisch " +"identifiziert, um dem Chat beizutreten, so dass Sie Ihr Passwort nicht in " +"OBS eingeben müssen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "To do so, just use the \"{{% livechat_label share_chat_link %}}\" feature, and open the \"{{% livechat_label share_chat_dock %}}\" tab. From there, you can create a new token using the \"+\" button." -msgstr "Verwenden Sie dazu einfach die \"{{% livechat_label share_chat_link %}}\" Funktion, und öffnen Sie die Registerkarte \"{{% livechat_label share_chat_dock %}}\". Von dort aus können Sie mit der Schaltfläche \"+\" ein neuen Token erstellen." +msgid "" +"To do so, just use the \"{{% livechat_label share_chat_link %}}\" feature, " +"and open the \"{{% livechat_label share_chat_dock %}}\" tab. From there, " +"you can create a new token using the \"+\" button." +msgstr "" +"Verwenden Sie dazu einfach die \"{{% livechat_label share_chat_link %}}\" " +"Funktion, und öffnen Sie die Registerkarte \"{{% livechat_label " +"share_chat_dock %}}\". Von dort aus können Sie mit der Schaltfläche \"+\" " +"ein neuen Token erstellen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Share link popup - dock tab](/peertube-plugin-livechat/images/share_dock.png?classes=shadow,border&height=200px)" -msgstr "![Link teilen Fenster - Dock Reiter](/peertube-plugin-livechat/images/share_dock.png?classes=shadow,border&height=200px)" +msgid "" +"![Share link popup - dock tab](/peertube-plugin-livechat/images/share_dock." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Link teilen Fenster - Dock Reiter](/peertube-plugin-livechat/images/" +"share_dock.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "Then, copy the url, and use the \"Docks / Custom browser docks\" menu from your OBS to add a dock with this URL." -msgstr "Kopieren Sie dann die URL und verwenden Sie das Menü \"Docks / Benutzerdefinierte Browser-Docks\" in Ihrem OBS, um ein Dock mit dieser URL hinzuzufügen." +msgid "" +"Then, copy the url, and use the \"Docks / Custom browser docks\" menu from " +"your OBS to add a dock with this URL." +msgstr "" +"Kopieren Sie dann die URL und verwenden Sie das Menü \"Docks / " +"Benutzerdefinierte Browser-Docks\" in Ihrem OBS, um ein Dock mit dieser URL " +"hinzuzufügen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "![OBS - Dock menu](/peertube-plugin-livechat/images/obs_dock_menu.png?classes=shadow,border&height=200px)" -msgstr "![OBS - Dock Menü](/peertube-plugin-livechat/images/obs_dock_menu.png?classes=shadow,border&height=200px)" +msgid "" +"![OBS - Dock menu](/peertube-plugin-livechat/images/obs_dock_menu.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![OBS - Dock Menü](/peertube-plugin-livechat/images/obs_dock_menu.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "![OBS - Dock dialog](/peertube-plugin-livechat/images/obs_dock_dialog.png?classes=shadow,border&height=200px)" -msgstr "![OBS - Dock-Dialog](/peertube-plugin-livechat/images/obs_dock_dialog.png?classes=shadow,border&height=200px)" +msgid "" +"![OBS - Dock dialog](/peertube-plugin-livechat/images/obs_dock_dialog.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![OBS - Dock-Dialog](/peertube-plugin-livechat/images/obs_dock_dialog.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "Once you have done, you will have a new dock connected to the chat with your account." -msgstr "Danach haben Sie ein neues Dock, das mit dem Chat und Ihrem Konto verbunden ist." +msgid "" +"Once you have done, you will have a new dock connected to the chat with your " +"account." +msgstr "" +"Danach haben Sie ein neues Dock, das mit dem Chat und Ihrem Konto verbunden " +"ist." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "![OBS - Dock](/peertube-plugin-livechat/images/obs_dock.png?classes=shadow,border&height=200px)" -msgstr "![OBS - Dock](/peertube-plugin-livechat/images/obs_dock.png?classes=shadow,border&height=200px)" +msgid "" +"![OBS - Dock](/peertube-plugin-livechat/images/obs_dock.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![OBS - Dock](/peertube-plugin-livechat/images/obs_dock.png?classes=shadow," +"border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "Tokens are valid to join any chat room. You don't have to generate separate tokens for each of your rooms. You can also customize the nickame that will be used by changing the `n` parameter in the url." -msgstr "Die Token sind für die Teilnahme an jedem Chatraum gültig. Sie müssen nicht für jeden Ihrer Räume ein eigenes Token erstellen. Sie können auch den Spitznamen, der verwendet wird, anpassen, indem Sie den Parameter `n` in der URL ändern." +msgid "" +"Tokens are valid to join any chat room. You don't have to generate separate " +"tokens for each of your rooms. You can also customize the nickame that will " +"be used by changing the `n` parameter in the url." +msgstr "" +"Die Token sind für die Teilnahme an jedem Chatraum gültig. Sie müssen nicht " +"für jeden Ihrer Räume ein eigenes Token erstellen. Sie können auch den " +"Spitznamen, der verwendet wird, anpassen, indem Sie den Parameter `n` in der " +"URL ändern." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "Don't share these links to anyone, as it would allow them to connect as yourself." -msgstr "Geben Sie diese Links nicht weiter, da sie es anderen Personen ermöglichen würden, eine Verbindung mit Ihrem Konto herzustellen." +msgid "" +"Don't share these links to anyone, as it would allow them to connect as " +"yourself." +msgstr "" +"Geben Sie diese Links nicht weiter, da sie es anderen Personen ermöglichen " +"würden, eine Verbindung mit Ihrem Konto herzustellen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md msgid "If a token is compromised, or no more needed, you can revoke them." -msgstr "Wenn ein Token kompromittiert ist oder nicht mehr benötigt wird, können Sie ihn widerrufen." +msgstr "" +"Wenn ein Token kompromittiert ist oder nicht mehr benötigt wird, können Sie " +"ihn widerrufen." #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "These tokens can be used for other purposes, as connecting to your account with XMPP bots or clients. This feature is not documented yet, and not officially supported. So use with care." -msgstr "Diese Token können für andere Zwecke verwendet werden, z. B. für die Verbindung mit XMPP-Bots oder -Clients zu Ihrem Konto. Diese Funktion ist noch nicht dokumentiert und wird offiziell nicht unterstützt. Verwenden Sie sie also mit Vorsicht." +msgid "" +"These tokens can be used for other purposes, as connecting to your account " +"with XMPP bots or clients. This feature is not documented yet, and not " +"officially supported. So use with care." +msgstr "" +"Diese Token können für andere Zwecke verwendet werden, z. B. für die " +"Verbindung mit XMPP-Bots oder -Clients zu Ihrem Konto. Diese Funktion ist " +"noch nicht dokumentiert und wird offiziell nicht unterstützt. Verwenden Sie " +"sie also mit Vorsicht." #. type: Title ## #: support/documentation/content/en/documentation/user/obs.md @@ -2665,8 +4188,18 @@ msgstr "Mischen mehrerer Chats in Ihrem Live-Stream" #. type: Plain text #: support/documentation/content/en/documentation/user/obs.md -msgid "You can use the [social_stream browser extension](https://github.com/steveseguin/social_stream#readme) to mix multiple chat source (from Peertube, Twitch, Youtube, Facebook, ...) and include their contents in your live stream. The compatibility with this plugin was added in recent versions." -msgstr "Sie können die [social_stream Browsererweiterung](https://github.com/steveseguin/social_stream#readme) verwenden, um mehrere Chat-Quellen (von Peertube, Twitch, Youtube, Facebook, ...) zu mischen und deren Inhalte in Ihren Live-Stream einzubinden. Die Kompatibilität mit diesem Plugin wurde in den letzten Versionen hinzugefügt." +msgid "" +"You can use the [social_stream browser extension](https://github.com/" +"steveseguin/social_stream#readme) to mix multiple chat source (from " +"Peertube, Twitch, Youtube, Facebook, ...) and include their contents in your " +"live stream. The compatibility with this plugin was added in recent " +"versions." +msgstr "" +"Sie können die [social_stream Browsererweiterung](https://github.com/" +"steveseguin/social_stream#readme) verwenden, um mehrere Chat-Quellen (von " +"Peertube, Twitch, Youtube, Facebook, ...) zu mischen und deren Inhalte in " +"Ihren Live-Stream einzubinden. Die Kompatibilität mit diesem Plugin wurde in " +"den letzten Versionen hinzugefügt." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2688,33 +4221,61 @@ msgstr "Aktivieren Sie den Chat für Ihre Live-Streams" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "Instance administrators can choose to disable or enable chat in specific cases. Information in this section are only true in the default case." -msgstr "Instanzadministratoren können den Chat in bestimmten Fällen deaktivieren oder aktivieren. Die Informationen in diesem Abschnitt gelten nur für den Standardfall." +msgid "" +"Instance administrators can choose to disable or enable chat in specific " +"cases. Information in this section are only true in the default case." +msgstr "" +"Instanzadministratoren können den Chat in bestimmten Fällen deaktivieren " +"oder aktivieren. Die Informationen in diesem Abschnitt gelten nur für den " +"Standardfall." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "When you create or modify a Peertube live, there is a \"plugin settings\" tab:" -msgstr "Wenn Sie eine Peertube Live-Stream erstellen oder ändern, gibt es eine Registerkarte \"Plugin-Einstellungen\":" +msgid "" +"When you create or modify a Peertube live, there is a \"plugin settings\" " +"tab:" +msgstr "" +"Wenn Sie eine Peertube Live-Stream erstellen oder ändern, gibt es eine " +"Registerkarte \"Plugin-Einstellungen\":" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![New live](/peertube-plugin-livechat/images/new_live.png?classes=shadow,border&height=200px)" -msgstr "![Neuer Live-Stream](/peertube-plugin-livechat/images/new_live.png?classes=shadow,border&height=200px)" +msgid "" +"![New live](/peertube-plugin-livechat/images/new_live.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Neuer Live-Stream](/peertube-plugin-livechat/images/new_live.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "In the \"plugin settings\" tab, there is a \"{{% livechat_label use_chat %}}\" checkbox. Just check or uncheck it to enable or disable the chat associated to your video." -msgstr "Auf der Registerkarte \"Plugin-Einstellungen\" gibt es ein Kontrollkästchen \"{{% livechat_label use_chat %}}\". Aktivieren oder deaktivieren Sie es einfach, um den mit Ihrem Video verbundenen Chat zu aktivieren oder zu deaktivieren." +msgid "" +"In the \"plugin settings\" tab, there is a \"{{% livechat_label use_chat " +"%}}\" checkbox. Just check or uncheck it to enable or disable the chat " +"associated to your video." +msgstr "" +"Auf der Registerkarte \"Plugin-Einstellungen\" gibt es ein Kontrollkästchen " +"\"{{% livechat_label use_chat %}}\". Aktivieren oder deaktivieren Sie es " +"einfach, um den mit Ihrem Video verbundenen Chat zu aktivieren oder zu " +"deaktivieren." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Activate the chat](/peertube-plugin-livechat/images/new_live_activate_chat.png?classes=shadow,border&height=200px)" -msgstr "![Den Chat aktivieren](/peertube-plugin-livechat/images/new_live_activate_chat.png?classes=shadow,border&height=200px)" +msgid "" +"![Activate the chat](/peertube-plugin-livechat/images/new_live_activate_chat." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Den Chat aktivieren](/peertube-plugin-livechat/images/" +"new_live_activate_chat.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "There can be other settings in this tab, depending on plugins installed on your Peertube instance." -msgstr "Je nachdem, welche Plugins auf Ihrer Peertube-Instanz installiert sind, können sich auf dieser Registerkarte weitere Einstellungen befinden." +msgid "" +"There can be other settings in this tab, depending on plugins installed on " +"your Peertube instance." +msgstr "" +"Je nachdem, welche Plugins auf Ihrer Peertube-Instanz installiert sind, " +"können sich auf dieser Registerkarte weitere Einstellungen befinden." #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2724,8 +4285,16 @@ msgstr "Chat pro Kanal" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "On the instance level, Peertube's administrators can choose if chat rooms are unique per video, or if there will be an unique chat room per channel. Please contact your instance's administrators for more information on how they configure the livechat plugin." -msgstr "Auf der Instanz-Ebene können die Peertube-Administratoren wählen, ob die Chat-Räume pro Video einzigartig sind, oder ob es einen einzigartigen Chat-Raum pro Kanal gibt. Bitte kontaktieren Sie die Administratoren Ihrer Instanz für weitere Informationen zur Konfiguration des Livechat-Plugins." +msgid "" +"On the instance level, Peertube's administrators can choose if chat rooms " +"are unique per video, or if there will be an unique chat room per channel. " +"Please contact your instance's administrators for more information on how " +"they configure the livechat plugin." +msgstr "" +"Auf der Instanz-Ebene können die Peertube-Administratoren wählen, ob die " +"Chat-Räume pro Video einzigartig sind, oder ob es einen einzigartigen Chat-" +"Raum pro Kanal gibt. Bitte kontaktieren Sie die Administratoren Ihrer " +"Instanz für weitere Informationen zur Konfiguration des Livechat-Plugins." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2735,18 +4304,30 @@ msgstr "Teilen Sie den Chat" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "On top of the chat, there is a \"{{% livechat_label share_chat_link %}}\" button." -msgstr "Oben auf dem Chat gibt es eine Schaltfläche \"{{% livechat_label share_chat_link %}}\"." +msgid "" +"On top of the chat, there is a \"{{% livechat_label share_chat_link %}}\" " +"button." +msgstr "" +"Oben auf dem Chat gibt es eine Schaltfläche \"{{% livechat_label " +"share_chat_link %}}\"." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "This button opens a popup, where you can obtain an url to join the chat. This url can be shared." -msgstr "Diese Schaltfläche öffnet ein Popup-Fenster, in dem Sie eine URL erhalten, mit der Sie dem Chat beitreten können. Diese Url kann weitergegeben werden." +msgid "" +"This button opens a popup, where you can obtain an url to join the chat. " +"This url can be shared." +msgstr "" +"Diese Schaltfläche öffnet ein Popup-Fenster, in dem Sie eine URL erhalten, " +"mit der Sie dem Chat beitreten können. Diese Url kann weitergegeben werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "The \"{{% livechat_label share_chat_embed %}}\" tab provide some links to embed the chat in websites, or in your live stream." -msgstr "Auf der Registerkarte \"{{% livechat_label share_chat_embed %}}\" finden Sie einige Links zum Einbetten des Chats in Websites oder in Ihre Livestream." +msgid "" +"The \"{{% livechat_label share_chat_embed %}}\" tab provide some links to " +"embed the chat in websites, or in your live stream." +msgstr "" +"Auf der Registerkarte \"{{% livechat_label share_chat_embed %}}\" finden Sie " +"einige Links zum Einbetten des Chats in Websites oder in Ihre Livestream." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2755,43 +4336,96 @@ msgstr "Sie können einige Optionen individuell anpassen:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "{{% livechat_label read_only %}}: you will only be able to read the chat, not write. This is useful to include the chat content in your live stream (see the [OBS documentation](/peertube-plugin-livechat/documentation/user/obs))." -msgstr "{{% livechat_label read_only %}}: Sie können den Chat nur lesen, nicht schreiben. Dies ist nützlich, um den Inhalt des Chats in Ihren Live-Stream einzubinden (siehe die [OBS Dokumentation](/peertube-plugin-livechat/de/documentation/user/obs))." +msgid "" +"{{% livechat_label read_only %}}: you will only be able to read the chat, " +"not write. This is useful to include the chat content in your live stream " +"(see the [OBS documentation](/peertube-plugin-livechat/documentation/user/" +"obs))." +msgstr "" +"{{% livechat_label read_only %}}: Sie können den Chat nur lesen, nicht " +"schreiben. Dies ist nützlich, um den Inhalt des Chats in Ihren Live-Stream " +"einzubinden (siehe die [OBS Dokumentation](/peertube-plugin-livechat/de/" +"documentation/user/obs))." #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "{{% livechat_label use_current_theme_color %}}: if checked, your current theme colors will be added to the url, so that any user that opens the link will have the same color set." -msgstr "{{% livechat_label use_current_theme_color %}}: wenn diese Option aktiviert ist, werden die Farben des aktuellen Themas zur URL hinzugefügt, so dass jeder Benutzer, der den Link öffnet, dieselbe Farbe erhält." +msgid "" +"{{% livechat_label use_current_theme_color %}}: if checked, your current " +"theme colors will be added to the url, so that any user that opens the link " +"will have the same color set." +msgstr "" +"{{% livechat_label use_current_theme_color %}}: wenn diese Option aktiviert " +"ist, werden die Farben des aktuellen Themas zur URL hinzugefügt, so dass " +"jeder Benutzer, der den Link öffnet, dieselbe Farbe erhält." #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "{{% livechat_label generate_iframe %}}: instead of an url, you will obtain an HTML snippet that you can add to your website to embed the chat." -msgstr "{{% livechat_label generate_iframe %}}: Anstelle einer URL erhalten Sie ein HTML-Snippet, das Sie in Ihre Website einfügen können, um den Chat einzubetten." +msgid "" +"{{% livechat_label generate_iframe %}}: instead of an url, you will obtain " +"an HTML snippet that you can add to your website to embed the chat." +msgstr "" +"{{% livechat_label generate_iframe %}}: Anstelle einer URL erhalten Sie ein " +"HTML-Snippet, das Sie in Ihre Website einfügen können, um den Chat " +"einzubetten." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "For more information on the \"{{% livechat_label share_chat_dock %}}\" tab, check the [OBS documentation](/peertube-plugin-livechat/documentation/user/obs)." -msgstr "Weitere Informationen über die Registerkarte \"{{% livechat_label share_chat_dock %}}\" finden Sie in der [OBS-Dokumentation](/peertube-plugin-livechat/de/documentation/user/obs)." +msgid "" +"For more information on the \"{{% livechat_label share_chat_dock %}}\" tab, " +"check the [OBS documentation](/peertube-plugin-livechat/documentation/user/" +"obs)." +msgstr "" +"Weitere Informationen über die Registerkarte \"{{% livechat_label " +"share_chat_dock %}}\" finden Sie in der [OBS-Dokumentation](/peertube-plugin-" +"livechat/de/documentation/user/obs)." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "In the \"{{% livechat_label web %}}\" tab, the provided url opens the chat in the Peertube interface. You can share this link to other users to invite them to join the chat." -msgstr "Auf der Registerkarte \"{{% livechat_label web %}}\" öffnet die angegebene URL den Chat in der Peertube-Oberfläche. Sie können diesen Link an andere Benutzer weitergeben, um sie zum Chat einzuladen." +msgid "" +"In the \"{{% livechat_label web %}}\" tab, the provided url opens the chat " +"in the Peertube interface. You can share this link to other users to invite " +"them to join the chat." +msgstr "" +"Auf der Registerkarte \"{{% livechat_label web %}}\" öffnet die angegebene " +"URL den Chat in der Peertube-Oberfläche. Sie können diesen Link an andere " +"Benutzer weitergeben, um sie zum Chat einzuladen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Share link popup - web tab](/peertube-plugin-livechat/images/share_web.png?classes=shadow,border&height=200px)" -msgstr "![Link teilen Fenster - Web Reiter](/peertube-plugin-livechat/images/share_web.png?classes=shadow,border&height=200px)" +msgid "" +"![Share link popup - web tab](/peertube-plugin-livechat/images/share_web.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Link teilen Fenster - Web Reiter](/peertube-plugin-livechat/images/" +"share_web.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "The \"{{% livechat_label share_chat_link %}}\" popup can also contain a \"{{% livechat_label connect_using_xmpp %}}\" tab. This will only be available if your instance's administators have enabled an correctly configured this option. Using this option, you can provide a link to join the chat using any [XMPP client software](https://en.wikipedia.org/wiki/XMPP#Clients). Using such softwares can for example facilitate moderation actions." -msgstr "Das \"{{% livechat_label share_chat_link %}}\" Popup-Fenster kann auch einen \"{{% livechat_label connect_using_xmpp %}}\" Reiter enthalten. Dieser ist nur verfügbar, wenn die Administratoren Ihrer Instanz diese Option aktiviert und korrekt konfiguriert haben. Mit dieser Option können Sie einen Link bereitstellen, um dem Chat mit einer beliebigen [XMPP-Client-Software](https://en.wikipedia.org/wiki/XMPP#Clients) beizutreten. Die Verwendung solcher Software kann zum Beispiel Moderationsmaßnahmen erleichtern." +msgid "" +"The \"{{% livechat_label share_chat_link %}}\" popup can also contain a " +"\"{{% livechat_label connect_using_xmpp %}}\" tab. This will only be " +"available if your instance's administators have enabled an correctly " +"configured this option. Using this option, you can provide a link to join " +"the chat using any [XMPP client software](https://en.wikipedia.org/wiki/" +"XMPP#Clients). Using such softwares can for example facilitate moderation " +"actions." +msgstr "" +"Das \"{{% livechat_label share_chat_link %}}\" Popup-Fenster kann auch einen " +"\"{{% livechat_label connect_using_xmpp %}}\" Reiter enthalten. Dieser ist " +"nur verfügbar, wenn die Administratoren Ihrer Instanz diese Option aktiviert " +"und korrekt konfiguriert haben. Mit dieser Option können Sie einen Link " +"bereitstellen, um dem Chat mit einer beliebigen [XMPP-Client-Software]" +"(https://en.wikipedia.org/wiki/XMPP#Clients) beizutreten. Die Verwendung " +"solcher Software kann zum Beispiel Moderationsmaßnahmen erleichtern." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Share link popup - xmpp tab](/peertube-plugin-livechat/images/share_xmpp_dialog.png?classes=shadow,border&height=200px)" -msgstr "![Link teilen Fenster - xmpp Reiter](/peertube-plugin-livechat/images/share_xmpp_dialog.png?classes=shadow,border&height=200px)" +msgid "" +"![Share link popup - xmpp tab](/peertube-plugin-livechat/images/" +"share_xmpp_dialog.png?classes=shadow,border&height=200px)" +msgstr "" +"![Link teilen Fenster - xmpp Reiter](/peertube-plugin-livechat/images/" +"share_xmpp_dialog.png?classes=shadow,border&height=200px)" #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2803,8 +4437,12 @@ msgstr "Moderation" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "Please refer to the [moderation documentation](/peertube-plugin-livechat/documentation/user/streamers/moderation)." -msgstr "Bitte lesen Sie die [Moderationsdokumentation](/peertube-plugin-livechat/de/documentation/user/streamers/moderation)." +msgid "" +"Please refer to the [moderation documentation](/peertube-plugin-livechat/" +"documentation/user/streamers/moderation)." +msgstr "" +"Bitte lesen Sie die [Moderationsdokumentation](/peertube-plugin-livechat/de/" +"documentation/user/streamers/moderation)." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2814,8 +4452,12 @@ msgstr "Einbindung des Chats in den Videostream" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "Please refer to the [OBS documentation](/peertube-plugin-livechat/documentation/user/obs)." -msgstr "Bitte lesen Sie die [OBS-Dokumentation](/peertube-plugin-livechat/de/documentation/user/obs)." +msgid "" +"Please refer to the [OBS documentation](/peertube-plugin-livechat/" +"documentation/user/obs)." +msgstr "" +"Bitte lesen Sie die [OBS-Dokumentation](/peertube-plugin-livechat/de/" +"documentation/user/obs)." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2826,20 +4468,36 @@ msgstr "Chat Dauerhaftigkeit" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "By default, the chat is persistent. This means that the room content will be kept for a while. User joining will see messages posted before their arrival." -msgstr "Standardmäßig ist der Chat dauerhaft. Das bedeutet, dass der Inhalt des Raums eine Zeit lang erhalten bleibt. Benutzer, die dem Raum beitreten, sehen Nachrichten, die vor ihrer Ankunft gesendet wurden." +msgid "" +"By default, the chat is persistent. This means that the room content will " +"be kept for a while. User joining will see messages posted before their " +"arrival." +msgstr "" +"Standardmäßig ist der Chat dauerhaft. Das bedeutet, dass der Inhalt des " +"Raums eine Zeit lang erhalten bleibt. Benutzer, die dem Raum beitreten, " +"sehen Nachrichten, die vor ihrer Ankunft gesendet wurden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "You can change the persistence behaviour. [Open the chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), and click on \"Configure\"." -msgstr "Sie können das Dauerhaftigkeitsverhalten ändern. [Öffnen Sie das Chat Dropdownmenü](/peertube-plugin-livechat/de/documentation/user/viewers), und klicken Sie auf \"Konfigurieren\"." +msgid "" +"You can change the persistence behaviour. [Open the chat dropdown menu](/" +"peertube-plugin-livechat/documentation/user/viewers), and click on " +"\"Configure\"." +msgstr "" +"Sie können das Dauerhaftigkeitsverhalten ändern. [Öffnen Sie das Chat " +"Dropdownmenü](/peertube-plugin-livechat/de/documentation/user/viewers), und " +"klicken Sie auf \"Konfigurieren\"." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md #: build/documentation/pot_in/documentation/user/streamers/moderation.md #: support/documentation/content/en/documentation/user/viewers.md -msgid "![Chat menu](/peertube-plugin-livechat/images/top_menu.png?classes=shadow,border&height=200px)" -msgstr "![Chat Menü](/peertube-plugin-livechat/images/top_menu.png?classes=shadow,border&height=200px)" +msgid "" +"![Chat menu](/peertube-plugin-livechat/images/top_menu.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Chat Menü](/peertube-plugin-livechat/images/top_menu.png?classes=shadow," +"border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2848,23 +4506,41 @@ msgstr "Es gibt mehrere Optionen, die geändert werden können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "![Configure chat room](/peertube-plugin-livechat/images/configure.png?classes=shadow,border&height=200px)" -msgstr "![Chatraum konfigurieren](/peertube-plugin-livechat/images/configure.png?classes=shadow,border&height=200px)" +msgid "" +"![Configure chat room](/peertube-plugin-livechat/images/configure.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Chatraum konfigurieren](/peertube-plugin-livechat/images/configure.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "You can for example set the default and maximum number of messages to return to 0, so that new incomers won't see any previously sent message." -msgstr "Sie können z. B. die Standard- und Höchstzahl der zurückzusendenden Nachrichten auf 0 setzen, so dass neue Empfänger keine zuvor gesendeten Nachrichten sehen." +msgid "" +"You can for example set the default and maximum number of messages to return " +"to 0, so that new incomers won't see any previously sent message." +msgstr "" +"Sie können z. B. die Standard- und Höchstzahl der zurückzusendenden " +"Nachrichten auf 0 setzen, so dass neue Empfänger keine zuvor gesendeten " +"Nachrichten sehen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "You can also uncheck \"enable archiving\": if unchecked, messages will be pruned if the server restarts." -msgstr "Sie können auch die Option \"Archivierung aktivieren\" deaktivieren: Wenn diese Option nicht aktiviert ist, werden die Nachrichten beim Neustart des Servers gelöscht." +msgid "" +"You can also uncheck \"enable archiving\": if unchecked, messages will be " +"pruned if the server restarts." +msgstr "" +"Sie können auch die Option \"Archivierung aktivieren\" deaktivieren: Wenn " +"diese Option nicht aktiviert ist, werden die Nachrichten beim Neustart des " +"Servers gelöscht." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "By unchecking \"Persistent\", the room will be cleared if there is no more participant." -msgstr "Wenn Sie das Häkchen bei \"Dauerhaft\" entfernen, wird der Raum gelöscht, wenn es keinen Teilnehmer mehr gibt." +msgid "" +"By unchecking \"Persistent\", the room will be cleared if there is no more " +"participant." +msgstr "" +"Wenn Sie das Häkchen bei \"Dauerhaft\" entfernen, wird der Raum gelöscht, " +"wenn es keinen Teilnehmer mehr gibt." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/basics.md @@ -2874,13 +4550,26 @@ msgstr "Löschen des Chat Inhalts" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "If you want to delete the chat content, [open the chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), then click on \"Destroy\". A popup will open, asking a confirmation." -msgstr "Wenn Sie den Inhalt des Chats löschen möchten, [öffnen Sie deas Dropdown Menü des Chats](/peertube-plugin-livechat/de/documentation/user/viewers) und klicken Sie auf \"Löschen\". Es öffnet sich ein Popup-Fenster, das eine Bestätigung verlangt." +msgid "" +"If you want to delete the chat content, [open the chat dropdown menu](/" +"peertube-plugin-livechat/documentation/user/viewers), then click on " +"\"Destroy\". A popup will open, asking a confirmation." +msgstr "" +"Wenn Sie den Inhalt des Chats löschen möchten, [öffnen Sie deas Dropdown " +"Menü des Chats](/peertube-plugin-livechat/de/documentation/user/viewers) und " +"klicken Sie auf \"Löschen\". Es öffnet sich ein Popup-Fenster, das eine " +"Bestätigung verlangt." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/basics.md -msgid "The chat will be automatically recreated each time someone tries to join it as long as the video exists, and has the \"{{% livechat_label use_chat %}}\" feature activated." -msgstr "Der Chat wird automatisch neu erstellt, wenn jemand versucht, ihm beizutreten, solange das Video existiert und die Funktion \"{{% livechat_label use_chat %}}\" aktiviert ist." +msgid "" +"The chat will be automatically recreated each time someone tries to join it " +"as long as the video exists, and has the \"{{% livechat_label use_chat %}}\" " +"feature activated." +msgstr "" +"Der Chat wird automatisch neu erstellt, wenn jemand versucht, ihm " +"beizutreten, solange das Video existiert und die Funktion \"{{% " +"livechat_label use_chat %}}\" aktiviert ist." #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/bot/commands.md @@ -2896,8 +4585,12 @@ msgstr "Befehle" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/commands.md -msgid "![Commands configuration](/peertube-plugin-livechat/images/bot_commands.png?classes=shadow,border&height=400px)" -msgstr "![Befehlskonfiguration](/peertube-plugin-livechat/images/bot_commands.png?classes=shadow,border&height=400px)" +msgid "" +"![Commands configuration](/peertube-plugin-livechat/images/bot_commands.png?" +"classes=shadow,border&height=400px)" +msgstr "" +"![Befehlskonfiguration](/peertube-plugin-livechat/images/bot_commands.png?" +"classes=shadow,border&height=400px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/commands.md @@ -2918,64 +4611,131 @@ msgstr "Verbotene Wörter" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "![Forbidden words configuration](/peertube-plugin-livechat/images/bot_forbidden_words.png?classes=shadow,border&height=400px)" -msgstr "![Konfiguration der verbotenen Wörter](/peertube-plugin-livechat/images/bot_forbidden_words.png?classes=shadow,border&height=400px)" +msgid "" +"![Forbidden words configuration](/peertube-plugin-livechat/images/" +"bot_forbidden_words.png?classes=shadow,border&height=400px)" +msgstr "" +"![Konfiguration der verbotenen Wörter](/peertube-plugin-livechat/images/" +"bot_forbidden_words.png?classes=shadow,border&height=400px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "![Deleted message](/peertube-plugin-livechat/images/bot_deleted_message.png?classes=shadow,border&height=100px)" -msgstr "![Gelöschte Nachricht](/peertube-plugin-livechat/images/bot_deleted_message.png?classes=shadow,border&height=100px)" +msgid "" +"![Deleted message](/peertube-plugin-livechat/images/bot_deleted_message.png?" +"classes=shadow,border&height=100px)" +msgstr "" +"![Gelöschte Nachricht](/peertube-plugin-livechat/images/bot_deleted_message." +"png?classes=shadow,border&height=100px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "You can fill several \"{{% livechat_label livechat_configuration_channel_forbidden_words_label %}}\" fields. When a user sends a message that match the configured criteria, the message will automatically be deleted." -msgstr "Sie können mehrere \"{{% livechat_label livechat_configuration_channel_forbidden_words_label %}}\"-Felder ausfüllen. Wenn ein Benutzer eine Nachricht sendet, die den konfigurierten Kriterien entspricht, wird die Nachricht automatisch gelöscht." +msgid "" +"You can fill several \"{{% livechat_label " +"livechat_configuration_channel_forbidden_words_label %}}\" fields. When a " +"user sends a message that match the configured criteria, the message will " +"automatically be deleted." +msgstr "" +"Sie können mehrere \"{{% livechat_label " +"livechat_configuration_channel_forbidden_words_label %}}\"-Felder " +"ausfüllen. Wenn ein Benutzer eine Nachricht sendet, die den konfigurierten " +"Kriterien entspricht, wird die Nachricht automatisch gelöscht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "In this field, you can set several words, group of words, or \"regular expressions\"." -msgstr "In diesem Feld können Sie mehrere Wörter, Wortgruppen oder \"reguläre Ausdrücke\" (regex) eingeben." +msgid "" +"In this field, you can set several words, group of words, or \"regular " +"expressions\"." +msgstr "" +"In diesem Feld können Sie mehrere Wörter, Wortgruppen oder \"reguläre " +"Ausdrücke\" (regex) eingeben." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "Each time a user sends a message, these words will be tested. If the message containes one of them, the message will be deleted." -msgstr "Jedes Mal, wenn ein Benutzer eine Nachricht sendet, werden diese Wörter getestet. Wenn die Nachricht eines dieser Wörter enthält, wird die Nachricht gelöscht." +msgid "" +"Each time a user sends a message, these words will be tested. If the " +"message containes one of them, the message will be deleted." +msgstr "" +"Jedes Mal, wenn ein Benutzer eine Nachricht sendet, werden diese Wörter " +"getestet. Wenn die Nachricht eines dieser Wörter enthält, wird die " +"Nachricht gelöscht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "You can for example fill this field with a swear words list." -msgstr "Sie können dieses Feld zum Beispiel mit einer Liste von Schimpfwörtern füllen." +msgstr "" +"Sie können dieses Feld zum Beispiel mit einer Liste von Schimpfwörtern " +"füllen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "To get some examples, please check these [forbidden words suggestions](https://framagit.org/Livingston/peertube-plugin-livechat/-/tree/main/support/forbidden_words)." -msgstr "Einige Beispiele finden Sie in den [Vorschlägen für verbotene Wörter](https://framagit.org/Livingston/peertube-plugin-livechat/-/tree/main/support/forbidden_words)." +msgid "" +"To get some examples, please check these [forbidden words suggestions]" +"(https://framagit.org/Livingston/peertube-plugin-livechat/-/tree/main/" +"support/forbidden_words)." +msgstr "" +"Einige Beispiele finden Sie in den [Vorschlägen für verbotene Wörter]" +"(https://framagit.org/Livingston/peertube-plugin-livechat/-/tree/main/" +"support/forbidden_words)." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "If you have some usefull words lists, you are welcome to contribute to this suggestion page. There are in the `support/forbidden_words` folder of the livechat source code. See the [contribution guide](/peertube-plugin-livechat/contributing/) for more information." -msgstr "Wenn Sie einige nützliche Wörterlisten haben, können Sie die gerne zu dieser Vorschlagsseite beitragen. Sie befinden sich im Ordner `support/forbidden_words` des Livechat-Quellcodes. Siehe die [Beitragen Seite](/peertube-plugin-livechat/de/contributing/) für weitere Informationen." +msgid "" +"If you have some usefull words lists, you are welcome to contribute to this " +"suggestion page. There are in the `support/forbidden_words` folder of the " +"livechat source code. See the [contribution guide](/peertube-plugin-" +"livechat/contributing/) for more information." +msgstr "" +"Wenn Sie einige nützliche Wörterlisten haben, können Sie die gerne zu dieser " +"Vorschlagsseite beitragen. Sie befinden sich im Ordner `support/" +"forbidden_words` des Livechat-Quellcodes. Siehe die [Beitragen Seite](/" +"peertube-plugin-livechat/de/contributing/) für weitere Informationen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md msgid "These words are case insensitive." -msgstr "Bei diesen Wörtern wird die Groß- und Kleinschreibung nicht berücksichtigt." +msgstr "" +"Bei diesen Wörtern wird die Groß- und Kleinschreibung nicht berücksichtigt." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "You can combine a short [moderation delay](/peertube-plugin-livechat/documentation/user/streamers/moderation_delay) (1 second for example) with the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/bot) to delete messages containing swear words before any non-moderator user will see them." -msgstr "Sie können eine kurze [Moderationsverzögerung](/peertube-plugin-livechat/de/documentation/user/streamers/moderation_delay) (z.B. 1 Sekunde) mit dem [Moderations-Chatbot](/peertube-plugin-livechat/de/documentation/user/streamers/bot) kombinieren, um Nachrichten mit Schimpfwörtern zu löschen, bevor ein Nicht-Moderator sie sieht." +msgid "" +"You can combine a short [moderation delay](/peertube-plugin-livechat/" +"documentation/user/streamers/moderation_delay) (1 second for example) with " +"the [moderation bot](/peertube-plugin-livechat/documentation/user/streamers/" +"bot) to delete messages containing swear words before any non-moderator user " +"will see them." +msgstr "" +"Sie können eine kurze [Moderationsverzögerung](/peertube-plugin-livechat/de/" +"documentation/user/streamers/moderation_delay) (z.B. 1 Sekunde) mit dem " +"[Moderations-Chatbot](/peertube-plugin-livechat/de/documentation/user/" +"streamers/bot) kombinieren, um Nachrichten mit Schimpfwörtern zu löschen, " +"bevor ein Nicht-Moderator sie sieht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "This features is still experimental. There might be some issues with non-latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) to report your problems." -msgstr "Diese Funktion ist noch experimentell. Es könnte einige Probleme mit nicht-lateinischen Alphabeten geben. Sie können [ein Problem öffnen](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues), um Ihre Probleme zu melden." +msgid "" +"This features is still experimental. There might be some issues with non-" +"latin alphabets. You can [open an issue](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/issues) to report your problems." +msgstr "" +"Diese Funktion ist noch experimentell. Es könnte einige Probleme mit nicht-" +"lateinischen Alphabeten geben. Sie können [ein Problem öffnen](https://" +"github.com/JohnXLivingston/peertube-plugin-livechat/issues), um Ihre " +"Probleme zu melden." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/forbidden_words.md -msgid "By checking this option, each line of the \"{{% livechat_label livechat_configuration_channel_forbidden_words_label %}}\" field will be considered as a [regular expression](https://en.wikipedia.org/wiki/Regular_expression)." -msgstr "Wenn Sie diese Option aktivieren, wird jede Zeile des Feldes \"{{% livechat_label livechat_configuration_channel_forbidden_words_label %}}\" als [regulärer Ausdruck](https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck) betrachtet." +msgid "" +"By checking this option, each line of the \"{{% livechat_label " +"livechat_configuration_channel_forbidden_words_label %}}\" field will be " +"considered as a [regular expression](https://en.wikipedia.org/wiki/" +"Regular_expression)." +msgstr "" +"Wenn Sie diese Option aktivieren, wird jede Zeile des Feldes \"{{% " +"livechat_label livechat_configuration_channel_forbidden_words_label %}}\" " +"als [regulärer Ausdruck](https://de.wikipedia.org/wiki/" +"Regul%C3%A4rer_Ausdruck) betrachtet." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/bot/_index.md @@ -2993,29 +4753,48 @@ msgstr "Chatbot" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "This feature comes with the livechat plugin version 8.0.0, and can be disabled by your instance's admins." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 8.0.0 geliefert und kann von den Administratoren Ihrer Instanz deaktiviert werden." +msgid "" +"This feature comes with the livechat plugin version 8.0.0, and can be " +"disabled by your instance's admins." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 8.0.0 geliefert und kann " +"von den Administratoren Ihrer Instanz deaktiviert werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md -msgid "You can enable a chat bot on your chatrooms. The bot configuration is made channel per channel, and will apply to all related videos' chatrooms." -msgstr "Sie können einen Chatbot für Ihre Chaträume aktivieren. Die Chatbotkonfiguration wird für jeden Kanal vorgenommen und gilt für alle Chaträume der zugehörigen Videos." +msgid "" +"You can enable a chat bot on your chatrooms. The bot configuration is made " +"channel per channel, and will apply to all related videos' chatrooms." +msgstr "" +"Sie können einen Chatbot für Ihre Chaträume aktivieren. Die " +"Chatbotkonfiguration wird für jeden Kanal vorgenommen und gilt für alle " +"Chaträume der zugehörigen Videos." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "![Channel configuration](/peertube-plugin-livechat/images/channel_configuration.png?classes=shadow,border&height=400px)" -msgstr "![Kanalkonfiguration](/peertube-plugin-livechat/images/channel_configuration.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration](/peertube-plugin-livechat/images/" +"channel_configuration.png?classes=shadow,border&height=400px)" +msgstr "" +"![Kanalkonfiguration](/peertube-plugin-livechat/images/channel_configuration." +"png?classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md -msgid "To access this page, check the [channel configuration documentation](/peertube-plugin-livechat/documentation/user/streamers/channel)." -msgstr "Um auf diese Seite zuzugreifen, sehen Sie sich die [Kanal Konfigurations Dokumentation](/peertube-plugin-livechat/de/documentation/user/streamers/channel) an." +msgid "" +"To access this page, check the [channel configuration documentation](/" +"peertube-plugin-livechat/documentation/user/streamers/channel)." +msgstr "" +"Um auf diese Seite zuzugreifen, sehen Sie sich die [Kanal Konfigurations " +"Dokumentation](/peertube-plugin-livechat/de/documentation/user/streamers/" +"channel) an." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md msgid "Once there, you can enable the bot, and setup several options:" -msgstr "Dort können Sie den Chatbot aktivieren und verschiedene Optionen einstellen:" +msgstr "" +"Dort können Sie den Chatbot aktivieren und verschiedene Optionen einstellen:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/bot/_index.md @@ -3037,12 +4816,18 @@ msgstr "Timer" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/quotes.md msgid "If there is no user in the chatroom, the bot won't send any message." -msgstr "Wenn sich kein Benutzer im Chatraum befindet, sendet der Chatbot keine Nachricht." +msgstr "" +"Wenn sich kein Benutzer im Chatraum befindet, sendet der Chatbot keine " +"Nachricht." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/bot/quotes.md -msgid "![Timers configuration](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" -msgstr "[Konfiguration der Timer](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" +msgid "" +"![Timers configuration](/peertube-plugin-livechat/images/bot_quotes.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"[Konfiguration der Timer](/peertube-plugin-livechat/images/bot_quotes.png?" +"classes=shadow,border&height=200px)" #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/channel.md @@ -3058,18 +4843,32 @@ msgstr "Kanalkonfiguration" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "In the Peertube left menu, there is a \"{{% livechat_label menu_configuration_label %}}\" entry:" -msgstr "Im linken Menü von Peertube gibt es einen Eintrag \"{{% livechat_label menu_configuration_label %}}\":" +msgid "" +"In the Peertube left menu, there is a \"{{% livechat_label " +"menu_configuration_label %}}\" entry:" +msgstr "" +"Im linken Menü von Peertube gibt es einen Eintrag \"{{% livechat_label " +"menu_configuration_label %}}\":" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "![Chatrooms menu](/peertube-plugin-livechat/images/chatrooms_menu.png?classes=shadow,border&height=400px)" -msgstr "![Chaträume Menü](/peertube-plugin-livechat/images/chatrooms_menu.png?classes=shadow,border&height=400px)" +msgid "" +"![Chatrooms menu](/peertube-plugin-livechat/images/chatrooms_menu.png?" +"classes=shadow,border&height=400px)" +msgstr "" +"![Chaträume Menü](/peertube-plugin-livechat/images/chatrooms_menu.png?" +"classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "This \"{{% livechat_label menu_configuration_label %}}\" link takes you to a list of your channels. By clicking on a channel, you will then be able to setup some options for your channels:" -msgstr "Dieser \"{{% livechat_label menu_configuration_label %}}\" Link führt Sie zu einer Liste Ihrer Kanäle. Wenn Sie auf einen Kanal klicken, können Sie einige Optionen für Ihre Kanäle einrichten:" +msgid "" +"This \"{{% livechat_label menu_configuration_label %}}\" link takes you to a " +"list of your channels. By clicking on a channel, you will then be able to " +"setup some options for your channels:" +msgstr "" +"Dieser \"{{% livechat_label menu_configuration_label %}}\" Link führt Sie zu " +"einer Liste Ihrer Kanäle. Wenn Sie auf einen Kanal klicken, können Sie " +"einige Optionen für Ihre Kanäle einrichten:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/channel.md @@ -3078,28 +4877,48 @@ msgstr "Hier können Sie konfigurieren:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "[{{% livechat_label livechat_configuration_channel_terms_label %}}](/peertube-plugin-livechat/documentation/user/streamers/terms)" -msgstr "[{{% livechat_label livechat_configuration_channel_terms_label %}}](/peertube-plugin-livechat/de/documentation/user/streamers/terms)" +msgid "" +"[{{% livechat_label livechat_configuration_channel_terms_label %}}](/" +"peertube-plugin-livechat/documentation/user/streamers/terms)" +msgstr "" +"[{{% livechat_label livechat_configuration_channel_terms_label %}}](/" +"peertube-plugin-livechat/de/documentation/user/streamers/terms)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}](/peertube-plugin-livechat/documentation/user/streamers/moderation) default value" -msgstr "[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}](/peertube-plugin-livechat/de/documentation/user/streamers/moderation) Standardwert" +msgid "" +"[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}]" +"(/peertube-plugin-livechat/documentation/user/streamers/moderation) default " +"value" +msgstr "" +"[{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}]" +"(/peertube-plugin-livechat/de/documentation/user/streamers/moderation) " +"Standardwert" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "[The slow mode](/peertube-plugin-livechat/documentation/user/streamers/slow_mode)" -msgstr "[Der langsame Modus](/peertube-plugin-livechat/de/documentation/user/streamers/slow_mode)" +msgid "" +"[The slow mode](/peertube-plugin-livechat/documentation/user/streamers/" +"slow_mode)" +msgstr "" +"[Der langsame Modus](/peertube-plugin-livechat/de/documentation/user/" +"streamers/slow_mode)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "[The chat bot](/peertube-plugin-livechat/documentation/user/streamers/bot)" -msgstr "[Den Chatbot](/peertube-plugin-livechat/de/documentation/user/streamers/bot)" +msgid "" +"[The chat bot](/peertube-plugin-livechat/documentation/user/streamers/bot)" +msgstr "" +"[Den Chatbot](/peertube-plugin-livechat/de/documentation/user/streamers/bot)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md -msgid "[Custom emojis](/peertube-plugin-livechat/documentation/user/streamers/emojis)" -msgstr "[Benutzerdefinierte Emojis](/peertube-plugin-livechat/de/documentation/user/streamers/emojis)" +msgid "" +"[Custom emojis](/peertube-plugin-livechat/documentation/user/streamers/" +"emojis)" +msgstr "" +"[Benutzerdefinierte Emojis](/peertube-plugin-livechat/de/documentation/user/" +"streamers/emojis)" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/channel.md @@ -3131,18 +4950,34 @@ msgstr "Streamer können benutzerdefinierte Emojis zu ihren Kanälen hinzufügen #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "On the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel), open the \"{{% livechat_label livechat_configuration_channel_emojis_title %}}\" tab:" -msgstr "Öffnen Sie auf der [Kanal Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/streamers/channel) die Registerkarte \"{{% livechat_label livechat_configuration_channel_emojis_title %}}\":" +msgid "" +"On the [channel configuration page](/peertube-plugin-livechat/documentation/" +"user/streamers/channel), open the \"{{% livechat_label " +"livechat_configuration_channel_emojis_title %}}\" tab:" +msgstr "" +"Öffnen Sie auf der [Kanal Konfigurationsseite](/peertube-plugin-livechat/de/" +"documentation/user/streamers/channel) die Registerkarte \"{{% livechat_label " +"livechat_configuration_channel_emojis_title %}}\":" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "![Channel configuration / Channel emojis configuration](/peertube-plugin-livechat/images/channel_custom_emojis_configuration.png?classes=shadow,border&height=400px)" -msgstr "![Kanal-Konfiguration / Kanal-Emojis-Konfiguration](/peertube-plugin-livechat/images/channel_custom_emojis_configuration.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration / Channel emojis configuration](/peertube-plugin-" +"livechat/images/channel_custom_emojis_configuration.png?classes=shadow," +"border&height=400px)" +msgstr "" +"![Kanal-Konfiguration / Kanal-Emojis-Konfiguration](/peertube-plugin-" +"livechat/images/channel_custom_emojis_configuration.png?classes=shadow," +"border&height=400px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "![Channel configuration / Channel emojis](/peertube-plugin-livechat/images/channel_custom_emojis.png?classes=shadow,border&height=400px)" -msgstr "![Kanal-Konfiguration / Kanal-Emojis](/peertube-plugin-livechat/images/channel_custom_emojis.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration / Channel emojis](/peertube-plugin-livechat/images/" +"channel_custom_emojis.png?classes=shadow,border&height=400px)" +msgstr "" +"![Kanal-Konfiguration / Kanal-Emojis](/peertube-plugin-livechat/images/" +"channel_custom_emojis.png?classes=shadow,border&height=400px)" #. type: Title ### #: build/documentation/pot_in/documentation/user/streamers/emojis.md @@ -3152,13 +4987,28 @@ msgstr "Importieren / Exportieren" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "On the channel configuration page, there are an \"{{% livechat_label action_import %}}\" and an \"{{% livechat_label action_export %}}\" button. The \"{{% livechat_label action_export %}}\" button generates a file than you can then import on another channel." -msgstr "Auf der Kanalkonfigurationsseite gibt es eine \"{{% livechat_label action_import %}}\"- und eine \"{{% livechat_label action_export %}}\"-Schaltfläche. Die \"{{% livechat_label action_export %}}\"-Schaltfläche generiert eine Datei, die in einen anderen Kanal importiert werden kann." +msgid "" +"On the channel configuration page, there are an \"{{% livechat_label " +"action_import %}}\" and an \"{{% livechat_label action_export %}}\" button. " +"The \"{{% livechat_label action_export %}}\" button generates a file than " +"you can then import on another channel." +msgstr "" +"Auf der Kanalkonfigurationsseite gibt es eine \"{{% livechat_label " +"action_import %}}\"- und eine \"{{% livechat_label action_export %}}\"-" +"Schaltfläche. Die \"{{% livechat_label action_export %}}\"-Schaltfläche " +"generiert eine Datei, die in einen anderen Kanal importiert werden kann." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "You can also generate a file to import from any other source (for example you can import your Twitch custom emojis). The file must be a valid JSON file, using the following format:" -msgstr "Sie können auch eine Datei generieren, die Sie aus einer anderen Quelle importieren (z. B. können Sie Ihre benutzerdefinierten Twitch-Emojis importieren). Bei der Datei muss es sich um eine gültige JSON-Datei handeln, die das folgende Format hat:" +msgid "" +"You can also generate a file to import from any other source (for example " +"you can import your Twitch custom emojis). The file must be a valid JSON " +"file, using the following format:" +msgstr "" +"Sie können auch eine Datei generieren, die Sie aus einer anderen Quelle " +"importieren (z. B. können Sie Ihre benutzerdefinierten Twitch-Emojis " +"importieren). Bei der Datei muss es sich um eine gültige JSON-Datei " +"handeln, die das folgende Format hat:" #. type: Fenced code block (json) #: build/documentation/pot_in/documentation/user/streamers/emojis.md @@ -3180,8 +5030,16 @@ msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/emojis.md -msgid "The `sn` attribute is the short name code. The `url` attribute can be any image url than your browser can access, or a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) representing the file you want to import." -msgstr "Das Attribut `sn` ist der Kurznamencode. Das Attribut \"url\" kann eine beliebige Bild-URL sein, auf die Ihr Browser zugreifen kann, oder eine [Daten-URL] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs), die die zu importierende Datei darstellt." +msgid "" +"The `sn` attribute is the short name code. The `url` attribute can be any " +"image url than your browser can access, or a [Data URL](https://developer." +"mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) representing the " +"file you want to import." +msgstr "" +"Das Attribut `sn` ist der Kurznamencode. Das Attribut \"url\" kann eine " +"beliebige Bild-URL sein, auf die Ihr Browser zugreifen kann, oder eine " +"[Daten-URL] (https://developer.mozilla.org/en-US/docs/Web/HTTP/" +"Basics_of_HTTP/Data_URLs), die die zu importierende Datei darstellt." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/_index.md @@ -3210,7 +5068,8 @@ msgstr "Moderationsverzögerung" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md msgid "This feature comes with the livechat plugin version 10.3.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.3.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 10.3.0 verfügbar sein." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3224,18 +5083,34 @@ msgstr "Einführung" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "As a streamer, you can choose to delay messages in the chat, to let some time to moderators to delete messages before they can even be read by other participants." -msgstr "Als Streamer können Sie Nachrichten im Chat verzögern, um Moderatoren etwas Zeit zu geben, Nachrichten zu löschen, bevor sie von anderen Teilnehmern gelesen werden können." +msgid "" +"As a streamer, you can choose to delay messages in the chat, to let some " +"time to moderators to delete messages before they can even be read by other " +"participants." +msgstr "" +"Als Streamer können Sie Nachrichten im Chat verzögern, um Moderatoren etwas " +"Zeit zu geben, Nachrichten zu löschen, bevor sie von anderen Teilnehmern " +"gelesen werden können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "When this feature is enabled, moderators will see all messages without any delay. Chat participants won't see that their own messages are delayed." -msgstr "Wenn diese Funktion aktiviert ist, sehen die Moderatoren alle Nachrichten ohne Verzögerung. Die Chat-Teilnehmer sehen nicht, dass ihre eigenen Nachrichten verzögert sind." +msgid "" +"When this feature is enabled, moderators will see all messages without any " +"delay. Chat participants won't see that their own messages are delayed." +msgstr "" +"Wenn diese Funktion aktiviert ist, sehen die Moderatoren alle Nachrichten " +"ohne Verzögerung. Die Chat-Teilnehmer sehen nicht, dass ihre eigenen " +"Nachrichten verzögert sind." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "Please note that messages sent by moderators will also be delayed, to avoid them to respond to messages that are not even visible by other participants." -msgstr "Bitte beachten Sie, dass Nachrichten, die von Moderatoren gesendet werden, ebenfalls verzögert werden, um zu vermeiden, dass sie auf Nachrichten antworten, die für andere Teilnehmer gar nicht sichtbar sind." +msgid "" +"Please note that messages sent by moderators will also be delayed, to avoid " +"them to respond to messages that are not even visible by other participants." +msgstr "" +"Bitte beachten Sie, dass Nachrichten, die von Moderatoren gesendet werden, " +"ebenfalls verzögert werden, um zu vermeiden, dass sie auf Nachrichten " +"antworten, die für andere Teilnehmer gar nicht sichtbar sind." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3245,18 +5120,30 @@ msgstr "Moderationverzögerungs-Optionen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "On the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel), you can set the \"{{% livechat_label moderation_delay %}}\" option:" -msgstr "Auf der [Kanal Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/streamers/channel) können Sie die Option \"{{% livechat_label moderation_delay %}}\" einstellen:" +msgid "" +"On the [channel configuration page](/peertube-plugin-livechat/documentation/" +"user/streamers/channel), you can set the \"{{% livechat_label " +"moderation_delay %}}\" option:" +msgstr "" +"Auf der [Kanal Konfigurationsseite](/peertube-plugin-livechat/de/" +"documentation/user/streamers/channel) können Sie die Option \"{{% " +"livechat_label moderation_delay %}}\" einstellen:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" -msgstr "![Kanalkonfiguration / Moderationsverzögerung](/peertube-plugin-livechat/images/moderation_delay_channel_option.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration / Moderation delay](/peertube-plugin-livechat/images/" +"moderation_delay_channel_option.png?classes=shadow,border&height=400px)" +msgstr "" +"![Kanalkonfiguration / Moderationsverzögerung](/peertube-plugin-livechat/" +"images/moderation_delay_channel_option.png?classes=shadow," +"border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "This value will apply as a default value for all your channel's chatrooms." +msgid "" +"This value will apply as a default value for all your channel's chatrooms." msgstr "Dieser Wert gilt als Standardwert für alle Chaträume deines Kanals." #. type: Plain text @@ -3267,18 +5154,38 @@ msgstr "Wird der Wert auf \"0\" gesetzt, wird die Funktion deaktiviert." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "Setting the value to a positive integer will set the delay, in seconds, to apply to messages. Please avoid setting the value too high. Ideally it should not exceed a few seconds (4 or 5 seconds for example)." -msgstr "Wenn Sie den Wert auf eine positive ganze Zahl setzen, wird die Verzögerung in Sekunden festgelegt, die für die Nachrichten gelten soll. Der Wert sollte nicht zu hoch angesetzt werden. Idealerweise sollte er nicht mehr als ein paar Sekunden betragen (z. B. 4 oder 5 Sekunden)." +msgid "" +"Setting the value to a positive integer will set the delay, in seconds, to " +"apply to messages. Please avoid setting the value too high. Ideally it " +"should not exceed a few seconds (4 or 5 seconds for example)." +msgstr "" +"Wenn Sie den Wert auf eine positive ganze Zahl setzen, wird die Verzögerung " +"in Sekunden festgelegt, die für die Nachrichten gelten soll. Der Wert " +"sollte nicht zu hoch angesetzt werden. Idealerweise sollte er nicht mehr " +"als ein paar Sekunden betragen (z. B. 4 oder 5 Sekunden)." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "To modify the value for an already existing room, just open the room \"configuration\" menu (on top of the chat window), and change the moderation delay value in the configuration form." -msgstr "Um den Wert für einen bereits bestehenden Raum zu ändern, öffnen Sie einfach das Raum-Konfigurationsmenü (oben im Chat-Fenster) und ändern Sie den Wert für die Moderationsverzögerung im Konfigurationsformular." +msgid "" +"To modify the value for an already existing room, just open the room " +"\"configuration\" menu (on top of the chat window), and change the " +"moderation delay value in the configuration form." +msgstr "" +"Um den Wert für einen bereits bestehenden Raum zu ändern, öffnen Sie einfach " +"das Raum-Konfigurationsmenü (oben im Chat-Fenster) und ändern Sie den Wert " +"für die Moderationsverzögerung im Konfigurationsformular." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "Currently, this feature has one known bug: users that join the chat will get all messages, even messages that are still pending for other participants. However, messages sent after they joined will be delayed correctly." -msgstr "Derzeit gibt es bei dieser Funktion einen bekannten Fehler: Benutzer, die dem Chat beitreten, erhalten alle Nachrichten, auch solche, die noch für andere Teilnehmer ausstehen. Allerdings werden Nachrichten, die nach dem Beitritt gesendet werden, korrekt verzögert." +msgid "" +"Currently, this feature has one known bug: users that join the chat will get " +"all messages, even messages that are still pending for other participants. " +"However, messages sent after they joined will be delayed correctly." +msgstr "" +"Derzeit gibt es bei dieser Funktion einen bekannten Fehler: Benutzer, die " +"dem Chat beitreten, erhalten alle Nachrichten, auch solche, die noch für " +"andere Teilnehmer ausstehen. Allerdings werden Nachrichten, die nach dem " +"Beitritt gesendet werden, korrekt verzögert." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md @@ -3288,13 +5195,21 @@ msgstr "Im Chat" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "As a moderator, you will see the remaining time (in seconds) before the message is broadcasted, just besides the message datetime." -msgstr "Als Moderator sehen Sie neben dem Datum der Nachricht auch die verbleibende Zeit (in Sekunden), bevor die Nachricht veröffentlicht wird." +msgid "" +"As a moderator, you will see the remaining time (in seconds) before the " +"message is broadcasted, just besides the message datetime." +msgstr "" +"Als Moderator sehen Sie neben dem Datum der Nachricht auch die verbleibende " +"Zeit (in Sekunden), bevor die Nachricht veröffentlicht wird." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_delay.md -msgid "![Moderation delay timer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" -msgstr "![Moderationsverzögerungstimer](/peertube-plugin-livechat/images/moderation_delay_timer.png?classes=shadow,border)" +msgid "" +"![Moderation delay timer](/peertube-plugin-livechat/images/" +"moderation_delay_timer.png?classes=shadow,border)" +msgstr "" +"![Moderationsverzögerungstimer](/peertube-plugin-livechat/images/" +"moderation_delay_timer.png?classes=shadow,border)" #. type: Yaml Front Matter Hash Value: description #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3325,8 +5240,14 @@ msgstr "Der Chatbot" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can use a chat bot, that will help you for moderation. Check [the chat bot documentation](/peertube-plugin-livechat/documentation/user/streamers/bot) for more information." -msgstr "Sie können einen Chatbot verwenden, der Sie bei der Moderation unterstützt. Weitere Informationen finden Sie in der [Chatbot Dokumentation](/peertube-plugin-livechat/de/documentation/user/streamers/bot)." +msgid "" +"You can use a chat bot, that will help you for moderation. Check [the chat " +"bot documentation](/peertube-plugin-livechat/documentation/user/streamers/" +"bot) for more information." +msgstr "" +"Sie können einen Chatbot verwenden, der Sie bei der Moderation unterstützt. " +"Weitere Informationen finden Sie in der [Chatbot Dokumentation](/peertube-" +"plugin-livechat/de/documentation/user/streamers/bot)." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3336,70 +5257,141 @@ msgstr "Zugang zu den Moderationswerkzeugen" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can access room settings and moderation tools using the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers) at the top of the chat." -msgstr "Über das [Chat Dropdown Menü](/peertube-plugin-livechat/de/documentation/user/viewers) am oberen Rand des Chats haben Sie Zugriff auf die Raumeinstellungen und Moderationswerkzeuge." +msgid "" +"You can access room settings and moderation tools using the [chat dropdown " +"menu](/peertube-plugin-livechat/documentation/user/viewers) at the top of " +"the chat." +msgstr "" +"Über das [Chat Dropdown Menü](/peertube-plugin-livechat/de/documentation/" +"user/viewers) am oberen Rand des Chats haben Sie Zugriff auf die " +"Raumeinstellungen und Moderationswerkzeuge." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "The video owner will be owner of the chat room. This means they can configure the room, delete it, promote other users as admins, ..." -msgstr "Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den Raum konfigurieren, löschen, andere Benutzer als Administratoren befördern, ..." +msgid "" +"The video owner will be owner of the chat room. This means they can " +"configure the room, delete it, promote other users as admins, ..." +msgstr "" +"Der Videobesitzer ist der Besitzer des Chatraums. Das bedeutet, er kann den " +"Raum konfigurieren, löschen, andere Benutzer als Administratoren " +"befördern, ..." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "Starting with livechat v10.0.0, Peertube instance's admins and moderators have no special rights on rooms by default. However, they have a special button available on top of the chat: \"{{% livechat_label promote %}}\". Clicking this button will give them owner access on the room." -msgstr "Ab livechat v10.0.0 haben Admins und Moderatoren der Peertube-Instanz standardmäßig keine besonderen Rechte für Räume. Sie haben jedoch einen speziellen Button oben im Chat zur Verfügung: \"{{% livechat_label promote %}}\". Wenn sie auf diese Schaltfläche klicken, erhalten sie Besitzerrechte für den Raum." +msgid "" +"Starting with livechat v10.0.0, Peertube instance's admins and moderators " +"have no special rights on rooms by default. However, they have a special " +"button available on top of the chat: \"{{% livechat_label promote %}}\". " +"Clicking this button will give them owner access on the room." +msgstr "" +"Ab livechat v10.0.0 haben Admins und Moderatoren der Peertube-Instanz " +"standardmäßig keine besonderen Rechte für Räume. Sie haben jedoch einen " +"speziellen Button oben im Chat zur Verfügung: \"{{% livechat_label promote " +"%}}\". Wenn sie auf diese Schaltfläche klicken, erhalten sie Besitzerrechte " +"für den Raum." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can use [ConverseJS moderation commands](https://conversejs.org/docs/html/features.html#moderating-chatrooms) to moderate the room. When you open the chat room in full screen, there will also be a menu with dedicated commands on the top right." -msgstr "Sie können [ConverseJS Moderationsbefehle](https://conversejs.org/docs/html/features.html#moderating-chatrooms) verwenden, um den Raum zu moderieren. Wenn Sie den Chat-Raum im Vollbildmodus öffnen, finden Sie oben rechts ein Menü mit speziellen Befehlen." +msgid "" +"You can use [ConverseJS moderation commands](https://conversejs.org/docs/" +"html/features.html#moderating-chatrooms) to moderate the room. When you " +"open the chat room in full screen, there will also be a menu with dedicated " +"commands on the top right." +msgstr "" +"Sie können [ConverseJS Moderationsbefehle](https://conversejs.org/docs/html/" +"features.html#moderating-chatrooms) verwenden, um den Raum zu moderieren. " +"Wenn Sie den Chat-Raum im Vollbildmodus öffnen, finden Sie oben rechts ein " +"Menü mit speziellen Befehlen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md #: support/documentation/content/en/documentation/user/streamers/polls.md #: support/documentation/content/en/documentation/user/streamers/terms.md msgid "This feature comes with the livechat plugin version 10.2.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.2.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 10.2.0 verfügbar sein." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can prevent anonymous users to send messages. In such case, only registered users will be able to talk in the chat." -msgstr "Sie können anonyme Benutzer daran hindern, Nachrichten zu senden. In diesem Fall können nur registrierte Benutzer im Chat schreiben." +msgid "" +"You can prevent anonymous users to send messages. In such case, only " +"registered users will be able to talk in the chat." +msgstr "" +"Sie können anonyme Benutzer daran hindern, Nachrichten zu senden. In diesem " +"Fall können nur registrierte Benutzer im Chat schreiben." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" checkbox." -msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"." +msgid "" +"To enable or disable this feature, use the [chat dropdown menu](/peertube-" +"plugin-livechat/documentation/user/viewers), open the \"configure\" menu. " +"In the form, you will find a \"{{% livechat_label " +"livechat_configuration_channel_mute_anonymous_label %}}\" checkbox." +msgstr "" +"Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das " +"[Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/" +"viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie " +"eine Checkbox \"{{% livechat_label " +"livechat_configuration_channel_mute_anonymous_label %}}\"." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "![Room configuration / Mute anonymous users](/peertube-plugin-livechat/images/configure_mute_anonymous.png?classes=shadow,border&height=400px)" -msgstr "![Raumkonfiguration / Anonyme Benutzer stummschalten](/peertube-plugin-livechat/images/configure_mute_anonymous.png?classes=shadow,border&height=400px)" +msgid "" +"![Room configuration / Mute anonymous users](/peertube-plugin-livechat/" +"images/configure_mute_anonymous.png?classes=shadow,border&height=400px)" +msgstr "" +"![Raumkonfiguration / Anonyme Benutzer stummschalten](/peertube-plugin-" +"livechat/images/configure_mute_anonymous.png?classes=shadow," +"border&height=400px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "Anonymous users won't have the message field, and will see following prompt: \"{{% livechat_label muted_anonymous_message %}}\"" -msgstr "Anonyme Benutzer haben das Nachrichtenfeld nicht und sehen folgende Aufforderung: \"{{% livechat_label muted_anonymous_message %}}\"" +msgid "" +"Anonymous users won't have the message field, and will see following prompt: " +"\"{{% livechat_label muted_anonymous_message %}}\"" +msgstr "" +"Anonyme Benutzer haben das Nachrichtenfeld nicht und sehen folgende " +"Aufforderung: \"{{% livechat_label muted_anonymous_message %}}\"" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "![Room configuration / Muted anonymous users](/peertube-plugin-livechat/images/anonymous_muted.png?classes=shadow,border&height=400px)" -msgstr "![Raumkonfiguration / Stummgeschaltete anonyme Benutzer](/peertube-plugin-livechat/images/anonymous_muted.png?classes=shadow,border&height=400px)" +msgid "" +"![Room configuration / Muted anonymous users](/peertube-plugin-livechat/" +"images/anonymous_muted.png?classes=shadow,border&height=400px)" +msgstr "" +"![Raumkonfiguration / Stummgeschaltete anonyme Benutzer](/peertube-plugin-" +"livechat/images/anonymous_muted.png?classes=shadow,border&height=400px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "When this feature is enabled, anonymous users will be assigned the \"visitor\" role. You can change their role to \"participant\" if you want to allow some of them to talk." -msgstr "Wenn diese Funktion aktiviert ist, wird anonymen Benutzern die Rolle \"Besucher\" zugewiesen. Sie können deren Rolle in \"Teilnehmer\" ändern, wenn Sie einigen von ihnen erlauben wollen, zu schreiben." +msgid "" +"When this feature is enabled, anonymous users will be assigned the " +"\"visitor\" role. You can change their role to \"participant\" if you want " +"to allow some of them to talk." +msgstr "" +"Wenn diese Funktion aktiviert ist, wird anonymen Benutzern die Rolle " +"\"Besucher\" zugewiesen. Sie können deren Rolle in \"Teilnehmer\" ändern, " +"wenn Sie einigen von ihnen erlauben wollen, zu schreiben." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "If you change the room configuration, all anonymous users will be muted or unmuted." -msgstr "Wenn Sie die Raumkonfiguration ändern, werden alle anonymen Benutzer stummgeschaltet oder die Stummschaltung aufgehoben." +msgid "" +"If you change the room configuration, all anonymous users will be muted or " +"unmuted." +msgstr "" +"Wenn Sie die Raumkonfiguration ändern, werden alle anonymen Benutzer " +"stummgeschaltet oder die Stummschaltung aufgehoben." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can choose to enable or disable this feature for new chatrooms on the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel)." -msgstr "Sie können diese Funktion für neue Chaträume auf der [Kanal-Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/streamers/channel) aktivieren oder deaktivieren." +msgid "" +"You can choose to enable or disable this feature for new chatrooms on the " +"[channel configuration page](/peertube-plugin-livechat/documentation/user/" +"streamers/channel)." +msgstr "" +"Sie können diese Funktion für neue Chaträume auf der [Kanal-" +"Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/" +"streamers/channel) aktivieren oder deaktivieren." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3409,40 +5401,60 @@ msgstr "Rollen und Zugehörigkeiten" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "There are several roles that can be assignated to users in chat rooms: owner, moderators, member, ..." -msgstr "Es gibt verschiedene Rollen, die Benutzern in Chaträumen zugewiesen werden können: Eigentümer, Moderatoren, Mitglieder, ..." +msgid "" +"There are several roles that can be assignated to users in chat rooms: " +"owner, moderators, member, ..." +msgstr "" +"Es gibt verschiedene Rollen, die Benutzern in Chaträumen zugewiesen werden " +"können: Eigentümer, Moderatoren, Mitglieder, ..." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "You can promote users as moderators, if you need some help." -msgstr "Sie können Benutzer zu Moderatoren befördern, wenn Sie Hilfe benötigen." +msgstr "" +"Sie können Benutzer zu Moderatoren befördern, wenn Sie Hilfe benötigen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "This feature comes with the livechat plugin version 11.0.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 11.0.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 11.0.0 verfügbar sein." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "It is possible to anonymize moderation actions, to avoid disclosing who is banning/kicking/… occupants.\"" -msgstr "Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, dass bekannt wird, wer Teilnehmer bannt/verweist/....\"" +msgid "" +"It is possible to anonymize moderation actions, to avoid disclosing who is " +"banning/kicking/… occupants.\"" +msgstr "" +"Es ist möglich, Moderationsaktionen zu anonymisieren, um zu vermeiden, dass " +"bekannt wird, wer Teilnehmer bannt/verweist/....\"" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "To enable or disable this feature, use the [chat dropdown menu](/peertube-plugin-livechat/documentation/user/viewers), open the \"configure\" menu. In the form, you will find a \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." -msgstr "Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das [Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie eine Checkbox \"{{% livechat_label livechat_configuration_channel_anonymize_moderation_label %}}\"." +msgid "" +"To enable or disable this feature, use the [chat dropdown menu](/peertube-" +"plugin-livechat/documentation/user/viewers), open the \"configure\" menu. " +"In the form, you will find a \"{{% livechat_label " +"livechat_configuration_channel_anonymize_moderation_label %}}\" checkbox." +msgstr "" +"Um diese Funktion zu aktivieren oder zu deaktivieren, verwenden Sie das " +"[Chat-Dropdown-Menü](/peertube-plugin-livechat/de/documentation/user/" +"viewers), öffnen Sie das Menü \"Konfigurieren\". In dem Formular finden Sie " +"eine Checkbox \"{{% livechat_label " +"livechat_configuration_channel_anonymize_moderation_label %}}\"." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, fuzzy, no-wrap -#| msgid "Participants list" msgid "Participant message history search" msgstr "Teilnehmerliste" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "As a room admin or owner, you can search all messages sent by a given participant." +msgid "" +"As a room admin or owner, you can search all messages sent by a given " +"participant." msgstr "" #. type: Plain text @@ -3452,26 +5464,38 @@ msgstr "" #. type: Bullet: '* ' #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "using the \"{{% livechat_label search_occupant_message %}}\" action in the dropdown menu besides chat messages" +msgid "" +"using the \"{{% livechat_label search_occupant_message %}}\" action in the " +"dropdown menu besides chat messages" msgstr "" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md #, fuzzy -#| msgid "![Poll start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" -msgid "![Message history search](/peertube-plugin-livechat/images/message_search.png?classes=shadow,border&height=200px)" -msgstr "![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" +msgid "" +"![Message history search](/peertube-plugin-livechat/images/message_search." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To have more space and better readability, open the chat in full-page mode." -msgstr "Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat im neuen Fenster." +msgid "" +"To have more space and better readability, open the chat in full-page mode." +msgstr "" +"Um mehr Platz und eine bessere Lesbarkeit zu erhalten, öffnen Sie den Chat " +"im neuen Fenster." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "The search result will also include all messages related to participants who had the same nickname. You can differenciate them by comparing [JID](https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp.org/extensions/xep-0421.html)." +msgid "" +"The search result will also include all messages related to participants who " +"had the same nickname. You can differenciate them by comparing [JID]" +"(https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp." +"org/extensions/xep-0421.html)." msgstr "" #. type: Title ## @@ -3482,8 +5506,12 @@ msgstr "Rauminhalt löschen" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can delete old rooms: join the room, and use the menu on the top to destroy the room." -msgstr "Sie können alte Räume löschen: Treten Sie dem Raum bei, und verwenden Sie das Menü oben, um den Raum zu löschen." +msgid "" +"You can delete old rooms: join the room, and use the menu on the top to " +"destroy the room." +msgstr "" +"Sie können alte Räume löschen: Treten Sie dem Raum bei, und verwenden Sie " +"das Menü oben, um den Raum zu löschen." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -3493,56 +5521,72 @@ msgstr "Instanz-Moderation" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "As Peertube instance moderator or administrator, you will probably need to check that your users are not behaving badly." -msgstr "Als Moderator oder Administrator einer Peertube-Instanz müssen Sie wahrscheinlich überprüfen, dass sich Ihre Benutzer nicht schlecht benehmen." +msgid "" +"As Peertube instance moderator or administrator, you will probably need to " +"check that your users are not behaving badly." +msgstr "" +"Als Moderator oder Administrator einer Peertube-Instanz müssen Sie " +"wahrscheinlich überprüfen, dass sich Ihre Benutzer nicht schlecht benehmen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "You can list all existing chatrooms: in the plugin settings screen, there is a button «List rooms»." -msgstr "Sie können alle bestehenden Chaträume auflisten: in den Einstellungen des Plugins gibt es eine Schaltfläche «Räume auflisten»." +msgid "" +"You can list all existing chatrooms: in the plugin settings screen, there is " +"a button «List rooms»." +msgstr "" +"Sie können alle bestehenden Chaträume auflisten: in den Einstellungen des " +"Plugins gibt es eine Schaltfläche «Räume auflisten»." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -msgid "From there, you can also promote yourself as room moderator by using the \"{{% livechat_label promote %}}\" button on the right." -msgstr "Von dort aus kannst du dich auch als Moderator des Raums bewerben, indem du die Schaltfläche \"{{% livechat_label promote %}}\" auf der rechten Seite benutzt." +msgid "" +"From there, you can also promote yourself as room moderator by using the " +"\"{{% livechat_label promote %}}\" button on the right." +msgstr "" +"Von dort aus kannst du dich auch als Moderator des Raums bewerben, indem du " +"die Schaltfläche \"{{% livechat_label promote %}}\" auf der rechten Seite " +"benutzt." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy, no-wrap -#| msgid "Plugin peertube-plugin-livechat moderation delay" +#, no-wrap msgid "Plugin peertube-plugin-livechat moderation notes" -msgstr "Plugin peertube-plugin-livechat Moderationsverzögerung" +msgstr "Plugin peertube-plugin-livechat Moderationnotizen" #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy, no-wrap -#| msgid "Moderation" +#, no-wrap msgid "Moderation notes" -msgstr "Moderation" +msgstr "Moderationsnotizen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "The livechat plugin includes a Task Application: a kind of \"to-do list\" feature where you can create task lists and add tasks to them. Every room's admins have access to these tasks, so you can edit them collaboratively." -msgid "The livechat plugin includes a Moderator Notes Application: you can write some notes, that could be associated to chat participants. Every room's admins have access to these notes, so they can edit them collaboratively." -msgstr "Das Livechat Plugin enthält eine Aufgabenanwendung: eine Art \"To-Do-Liste\", mit der Sie Aufgabenlisten erstellen und Aufgaben zu ihnen hinzufügen können. Die Administratoren eines jeden Raums haben Zugriff auf diese Aufgaben, sodass Sie sie gemeinsam bearbeiten können." +msgid "" +"The livechat plugin includes a Moderator Notes Application: you can write " +"some notes, that could be associated to chat participants. Every room's " +"admins have access to these notes, so they can edit them collaboratively." +msgstr "" +"Das Livechat Plugin enthält eine Anwendung für Moderator-Notizen: Sie können " +"einige Notizen schreiben, die den Chat-Teilnehmern zugeordnet werden " +"können. Die Administratoren jedes Raums haben Zugriff auf diese Notizen, so " +"dass sie diese gemeinsam bearbeiten können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "You can for example use the Task Application to:" msgid "You can for example use this Application to:" -msgstr "Sie können die Aufgabenanwendung zum Beispiel verwenden, um:" +msgstr "Sie können diese Anwendung zum Beispiel verwenden, um:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "share some notes between moderators" -msgstr "" +msgstr "einige Notizen zwischen Moderatoren austauschen" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "take notes about participants that were kicked or caused troubles" msgstr "" +"Notizen über Teilnehmer machen, die aus dem Chat geworfen wurden oder " +"Probleme verursachten" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md @@ -3552,59 +5596,67 @@ msgstr "..." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy, no-wrap -#| msgid "Using the Task Application" +#, no-wrap msgid "Using the Moderator Notes Application" -msgstr "Aufgabenanwendung nutzen" +msgstr "Verwendung der Anwendung Moderationsnotizen" #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy, no-wrap -#| msgid "Opening the Task Application" +#, no-wrap msgid "Opening the Moderator Notes Application" -msgstr "Aufgabenanwendung öffnen" +msgstr "Öffnen der Anwendung Moderationsnotizen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "To open the Task Application, there is a \"{{% livechat_label \"tasks\" %}}\" button in the top chat menu:" -msgid "To open the Moderator Notes Application, there is a \"{{% livechat_label \"moderator_notes\" %}}\" button in the top chat menu:" -msgstr "Um die Aufgabenanwendung zu öffnen, gibt es eine Schaltfläche \"{{% livechat_label \"Aufgaben\" %}}\" im oberen Chatmenü:" +msgid "" +"To open the Moderator Notes Application, there is a \"{{% livechat_label " +"\"moderator_notes\" %}}\" button in the top chat menu:" +msgstr "" +"Um die Anwendung Moderationsnotizen zu öffnen, gibt es eine Schaltfläche " +"\"{{% livechat_label \"moderator_notes\" %}}\" im oberen Chatmenü:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" -msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" -msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" +msgid "" +"![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/" +"moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" +"[Öffnen der Moderationsnotizen-Anwendung](/peertube-plugin-livechat/images/" +"moderation_notes_open_app_video.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" -msgid "![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" -msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgid "" +"![Opening the Moderator Notes Application](/peertube-plugin-livechat/images/" +"moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" +"[Öffnen der Anwendung Moderationsnotizen](/peertube-plugin-livechat/images/" +"moderation_notes_open_app_fullpage.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "Clicking this button will toggle the Task Application display:" msgid "Clicking this button will toggle the Application display:" -msgstr "Wenn Sie auf diese Schaltfläche klicken, wird die Anzeige der Aufgabenanwendung umgeschaltet:" +msgstr "" +"Wenn Sie auf diese Schaltfläche klicken, wird die Anzeige der Anwendung " +"umgeschaltet:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" -msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Moderator Notes Application](/peertube-plugin-livechat/images/" +"moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" +msgstr "" +"![Moderationsnotizen Anwendung](/peertube-plugin-livechat/images/" +"moderator_notes_app_video_1.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -msgid "![Moderator Notes Application](/peertube-plugin-livechat/images/moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Moderator Notes Application](/peertube-plugin-livechat/images/" +"moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgstr "" +"![Moderationsnotizen Anwendung](/peertube-plugin-livechat/images/" +"moderator_notes_app_fullpage_1.png?classes=shadow,border&height=200px)" #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md @@ -3616,38 +5668,57 @@ msgstr "Zugriffsrechte" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "Every room's admins have access to the Task Application (read and write access)." -msgid "Every room's admins have access to this Application (read and write access)." -msgstr "Die Administratoren eines jeden Raums haben Zugriff auf die Aufgabenanwendung (Lese- und Schreibzugriff)." +msgid "" +"Every room's admins have access to this Application (read and write access)." +msgstr "" +"Die Administratoren jedes Raums haben Zugriff auf diese Anwendung (Lese- und " +"Schreibzugriff)." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "When you promote someone as room admin or owner, they gets instant access to the Task Application. When you remove admin or owner rights to someone, they instantly lose access to the Task Application." -msgid "When you promote someone as room admin or owner, they gets instant access to this Application. When you remove admin or owner rights to someone, they instantly lose access to this Application." -msgstr "Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält dieser sofortigen Zugriff auf die Aufgabenanwendung. Wenn Sie jemandem die Admin- oder Eigentümerrechte entziehen, verliert er sofort den Zugang zur Aufgabenanwendung." +msgid "" +"When you promote someone as room admin or owner, they gets instant access to " +"this Application. When you remove admin or owner rights to someone, they " +"instantly lose access to this Application." +msgstr "" +"Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält er " +"sofortigen Zugang zu dieser Anwendung. Wenn Sie jemandem die Admin- oder " +"Eigentümerrechte entziehen, verliert er sofort den Zugang zu dieser " +"Anwendung." #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap msgid "Scope" -msgstr "" +msgstr "Umfang" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "Notes are only available in the room in which you have created them." -msgstr "" +msgstr "Notizen sind nur in dem Raum verfügbar, in dem Sie sie erstellt haben." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "Chatrooms can be releated to video or channel. If you want to keep notes from one video to another, please consider using rooms associated to channels." +msgid "" +"Chatrooms can be releated to video or channel. If you want to keep notes " +"from one video to another, please consider using rooms associated to " +"channels." msgstr "" +"Chaträume können einem Video oder einem Kanal zugeordnet werden. Wenn Sie " +"Notizen von einem Video zum anderen aufbewahren möchten, sollten Sie Räume " +"verwenden, die mit Kanälen verbunden sind." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "Currently the video vs channel rooms is an instance-wide settings. Only Peertube admins can change it, and it applies to all chatrooms. In the future, this choice will be added in your channel's options." +msgid "" +"Currently the video vs channel rooms is an instance-wide settings. Only " +"Peertube admins can change it, and it applies to all chatrooms. In the " +"future, this choice will be added in your channel's options." msgstr "" +"Derzeit ist die Einstellung Video vs. Kanalräume eine instanzweite " +"Einstellung. Nur Peertube-Administratoren können diese Einstellung ändern, " +"und sie gilt für alle Chaträume. In der Zukunft wird diese Wahl in den " +"Optionen Ihres Channels hinzugefügt werden." #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md @@ -3657,109 +5728,166 @@ msgstr "Hinweise" #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy, no-wrap -#| msgid "Create tasks" +#, no-wrap msgid "Create/Edit Notes" -msgstr "Aufgaben erstellen" +msgstr "Notizen erstellen/bearbeiten" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "You can use the form at the bottom to create a new task list. You can also edit existing task lists using the edit button, or delete any task list. Deleting a task list will also delete all its tasks." -msgid "You can use the plus button on the top to create a new note. You can also edit existing notes using the edit button, or delate any note." -msgstr "Mit dem Formular am unteren Rand können Sie eine neue Aufgabenliste erstellen. Sie können auch bestehende Aufgabenlisten über die Schaltfläche bearbeiten oder eine Aufgabenliste löschen. Wenn Sie eine Aufgabenliste löschen, werden auch alle dazugehörigen Aufgaben gelöscht." +msgid "" +"You can use the plus button on the top to create a new note. You can also " +"edit existing notes using the edit button, or delate any note." +msgstr "" +"Mit der Plus-Schaltfläche am oberen Rand können Sie eine neue Notiz " +"erstellen. Sie können auch bestehende Notizen mit der Schaltfläche " +"\"Bearbeiten\" bearbeiten oder jede Notiz löschen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "All modification are instantly visible in all your browser tabs, and for all room's admins." -msgstr "Alle Änderungen sind sofort in allen Registerkarten Ihres Browsers und für alle Raumadministratoren sichtbar." +msgid "" +"All modification are instantly visible in all your browser tabs, and for all " +"room's admins." +msgstr "" +"Alle Änderungen sind sofort in allen Registerkarten Ihres Browsers und für " +"alle Raumadministratoren sichtbar." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "You can create a note associated to a participant in several ways:" msgstr "" +"Sie können eine Notiz zu einem Teilnehmer auf verschiedene Weise erstellen:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "using the \"{{% livechat_label moderator_note_create_for_participant %}}\" action in the dropdown menu besides chat messages" +msgid "" +"using the \"{{% livechat_label moderator_note_create_for_participant %}}\" " +"action in the dropdown menu besides chat messages" msgstr "" +"Verwendung der Aktion \"{{% livechat_label " +"moderator_note_create_for_participant %}}\" im Dropdown-Menü neben den Chat-" +"Nachrichten" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "When a note is associated to a participant, you will see their nickname and avatar on the top of the note." +msgid "" +"When a note is associated to a participant, you will see their nickname and " +"avatar on the top of the note." msgstr "" +"Wenn eine Notiz mit einem Teilnehmer verknüpft ist, sehen Sie dessen " +"Spitznamen und Avatar oben in der Notiz." #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap msgid "Notes filtering" -msgstr "" +msgstr "Notizen filtern" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "You can filter notes to find all notes related to a given participant in several ways:" +msgid "" +"You can filter notes to find all notes related to a given participant in " +"several ways:" msgstr "" +"Sie können die Notizen filtern, um alle Notizen zu einem bestimmten " +"Teilnehmer zu finden, und haben dabei mehrere Möglichkeiten:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button that is available on notes to find all notes related to the same participant" +msgid "" +"click on the \"{{% livechat_label moderator_note_search_for_participant " +"%}}\" button that is available on notes to find all notes related to the " +"same participant" msgstr "" +"Klicken Sie auf die Schaltfläche \"{{% livechat_label " +"moderator_note_search_for_participant %}}\", die auf den Notizen verfügbar " +"ist, um alle Notizen zu finden, die sich auf denselben Teilnehmer beziehen" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "click on the \"{{% livechat_label moderator_note_search_for_participant %}}\" button in the dropdown menu besides chat messages" +msgid "" +"click on the \"{{% livechat_label moderator_note_search_for_participant " +"%}}\" button in the dropdown menu besides chat messages" msgstr "" +"Klicken Sie auf die Schaltfläche \"{{% livechat_label " +"moderator_note_search_for_participant %}}\" im Dropdown-Menü neben den Chat-" +"Nachrichten" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md msgid "You can remove the filter by clicking on the close button." msgstr "" +"Sie können den Filter entfernen, indem Sie auf die Schaltfläche " +"\"Schließen\" klicken." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "![Timers configuration](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" -msgid "![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/moderation_notes_filters.png?classes=shadow,border&height=200px)" -msgstr "[Konfiguration der Timer](/peertube-plugin-livechat/images/bot_quotes.png?classes=shadow,border&height=200px)" +msgid "" +"![Moderator Notes Application - filtering](/peertube-plugin-livechat/images/" +"moderation_notes_filters.png?classes=shadow,border&height=200px)" +msgstr "" +"![Moderationsnotizen Anwendung - Filtern](/peertube-plugin-livechat/images/" +"moderation_notes_filters.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "When you filters notes on a participant, there are several informations that are shown at the right of the participant nickname:" +msgid "" +"When you filters notes on a participant, there are several informations that " +"are shown at the right of the participant nickname:" msgstr "" +"Wenn Sie Notizen zu einem Teilnehmer filtern, werden rechts neben dem " +"Spitznamen des Teilnehmers verschiedene Informationen angezeigt:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "if the current nickname is different than the nickname when you created the note, the original nickname will be shown" +msgid "" +"if the current nickname is different than the nickname when you created the " +"note, the original nickname will be shown" msgstr "" +"wenn der aktuelle Spitzname nicht mit dem Spitznamen übereinstimmt, unter " +"dem Sie die Notiz erstellt haben, wird der ursprüngliche Spitzname angezeigt" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) of the participant" +msgid "" +"you will see the [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029." +"html) of the participant" msgstr "" +"sehen Sie die [JID (Jabber ID)](https://xmpp.org/extensions/xep-0029.html) " +"des Teilnehmers" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421.html) of the participant" +msgid "" +"you will also see the [occupant-id](https://xmpp.org/extensions/xep-0421." +"html) of the participant" msgstr "" +"Sie sehen auch die [occupant-id](https://xmpp.org/extensions/xep-0421.html) " +"des Teilnehmers" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -msgid "The search result will also include all notes related to participants who had the same nickname. So you can also take note for anonymous users (who don't have any consistent JID or occupant-id). You can differenciate them by comparing JID and occupant-id." +msgid "" +"The search result will also include all notes related to participants who " +"had the same nickname. So you can also take note for anonymous users (who " +"don't have any consistent JID or occupant-id). You can differenciate them " +"by comparing JID and occupant-id." msgstr "" +"Das Suchergebnis enthält auch alle Notizen zu Teilnehmern, die denselben " +"Spitznamen hatten. Sie können also auch anonyme Benutzer (die keine " +"einheitliche JID oder occupant-id haben) notieren. Sie können sie durch den " +"Vergleich von JID und occupant-id unterscheiden." #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md #, no-wrap msgid "Sorting notes" -msgstr "" +msgstr "Notizen sortieren" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/moderation_notes.md -#, fuzzy -#| msgid "You can sort tasks, or move tasks from one list to another, simply using drag & drop." msgid "You can sort notes simply using drag & drop." -msgstr "Sie können Aufgaben sortieren oder von einer Liste in eine andere verschieben, indem Sie sie einfach per Drag & Drop ziehen." +msgstr "Sie können Notizen einfach per Drag & Drop sortieren." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/polls.md @@ -3781,18 +5909,35 @@ msgstr "Eine Umfrage erstellen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "You can create a new poll by using the \"{{% livechat_label new_poll %}}\" action in the chat top menu:" -msgstr "Sie können eine neue Umfrage erstellen, indem Sie die Aktion \"{{% livechat_label new_poll %}}\" im oberen Menü des Chats verwenden:" +msgid "" +"You can create a new poll by using the \"{{% livechat_label new_poll %}}\" " +"action in the chat top menu:" +msgstr "" +"Sie können eine neue Umfrage erstellen, indem Sie die Aktion \"{{% " +"livechat_label new_poll %}}\" im oberen Menü des Chats verwenden:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "![Poll form](/peertube-plugin-livechat/images/polls_form.png?classes=shadow,border&height=200px)" -msgstr "![Umfrageformular](/peertube-plugin-livechat/images/polls_form.png?classes=shadow,border&height=200px)" +msgid "" +"![Poll form](/peertube-plugin-livechat/images/polls_form.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Umfrageformular](/peertube-plugin-livechat/images/polls_form.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "This poll feature should not be considered as a reliable voting system. It is easy to cheat. There is no mechanism to prevent anonymous users to vote multiple times by just reloading the chat. Votes are never fully anonymous, someone having access to the server could see who voted for what choice." -msgstr "Diese Abstimmungsfunktion sollte nicht als zuverlässiges Abstimmungssystem betrachtet werden. Es ist leicht zu betrügen. Es gibt keinen Mechanismus, der anonyme Benutzer daran hindert, mehrfach abzustimmen, indem sie einfach den Chat neu laden. Abstimmungen sind nie vollständig anonym, jemand mit Zugang zum Server könnte sehen, wer für welche Wahl gestimmt hat." +msgid "" +"This poll feature should not be considered as a reliable voting system. It " +"is easy to cheat. There is no mechanism to prevent anonymous users to vote " +"multiple times by just reloading the chat. Votes are never fully anonymous, " +"someone having access to the server could see who voted for what choice." +msgstr "" +"Diese Abstimmungsfunktion sollte nicht als zuverlässiges Abstimmungssystem " +"betrachtet werden. Es ist leicht zu betrügen. Es gibt keinen Mechanismus, " +"der anonyme Benutzer daran hindert, mehrfach abzustimmen, indem sie einfach " +"den Chat neu laden. Abstimmungen sind nie vollständig anonym, jemand mit " +"Zugang zum Server könnte sehen, wer für welche Wahl gestimmt hat." #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/polls.md @@ -3807,23 +5952,35 @@ msgstr "Füllen Sie die Formularfelder aus:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "\"{{% livechat_label poll_question %}}\": the question to ask to you viewers" -msgstr "\"{{% livechat_label poll_question %}}\": die Frage, die den Zuschauern gestellt werden soll" +msgid "" +"\"{{% livechat_label poll_question %}}\": the question to ask to you viewers" +msgstr "" +"\"{{% livechat_label poll_question %}}\": die Frage, die den Zuschauern " +"gestellt werden soll" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "\"{{% livechat_label poll_duration %}}\": the duration for which viewers can vote" -msgstr "\"{{% livechat_label poll_duration %}}\": die Dauer, in der die Zuschauer abstimmen können" +msgid "" +"\"{{% livechat_label poll_duration %}}\": the duration for which viewers can " +"vote" +msgstr "" +"\"{{% livechat_label poll_duration %}}\": die Dauer, in der die Zuschauer " +"abstimmen können" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "\"{{% livechat_label poll_anonymous_results %}}\": if checked, votes won't be publicly visible in the chat" -msgstr "\"{{% livechat_label poll_anonymous_results %}}\": wenn ausgewählt, werden Abstimmungen im Chat nicht öffentlich sichtbar sein" +msgid "" +"\"{{% livechat_label poll_anonymous_results %}}\": if checked, votes won't " +"be publicly visible in the chat" +msgstr "" +"\"{{% livechat_label poll_anonymous_results %}}\": wenn ausgewählt, werden " +"Abstimmungen im Chat nicht öffentlich sichtbar sein" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "\"Choice N\": choices that will be presented to viewers" -msgstr "\"Auswahl N\": Auswahlmöglichkeiten, die den Zuschauern präsentiert werden" +msgstr "" +"\"Auswahl N\": Auswahlmöglichkeiten, die den Zuschauern präsentiert werden" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md @@ -3837,28 +5994,51 @@ msgstr "Sobald Sie das Formular abschicken, wird die Umfrage sofort gestartet." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "If there was a previous unfinished poll, it will end and its result will be shown." -msgstr "Wenn es eine vorherige, noch nicht beendete Umfrage gab, wird diese beendet und ihr Ergebnis angezeigt." +msgid "" +"If there was a previous unfinished poll, it will end and its result will be " +"shown." +msgstr "" +"Wenn es eine vorherige, noch nicht beendete Umfrage gab, wird diese beendet " +"und ihr Ergebnis angezeigt." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Every room's admins can create a new poll." -msgstr "Die Administratoren eines jeden Raums können eine neue Umfrage erstellen." +msgstr "" +"Die Administratoren eines jeden Raums können eine neue Umfrage erstellen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "When you promote someone as room admin or owner, they gets instant access to the \"{{% livechat_label new_poll %}}\" action." -msgstr "Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält er sofortigen Zugriff auf die Aktion \"{{% livechat_label new_poll %}}\"." +msgid "" +"When you promote someone as room admin or owner, they gets instant access to " +"the \"{{% livechat_label new_poll %}}\" action." +msgstr "" +"Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält er " +"sofortigen Zugriff auf die Aktion \"{{% livechat_label new_poll %}}\"." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "When you remove admin or owner rights to someone, they can't create new poll. But any existing poll will continue until it ends." -msgstr "Wenn Sie jemandem die Administrator- oder Eigentümerrechte entziehen, kann er keine neue Umfrage mehr erstellen. Bestehende Umfragen werden jedoch fortgesetzt, bis sie beendet werden." +msgid "" +"When you remove admin or owner rights to someone, they can't create new " +"poll. But any existing poll will continue until it ends." +msgstr "" +"Wenn Sie jemandem die Administrator- oder Eigentümerrechte entziehen, kann " +"er keine neue Umfrage mehr erstellen. Bestehende Umfragen werden jedoch " +"fortgesetzt, bis sie beendet werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "Every user that is not muted can vote. This means that you can prevent anonymous users to vote by using the [\"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\" feature](/peertube-plugin-livechat/documentation/user/streamers/moderation)." -msgstr "Jeder Benutzer, der nicht stummgeschaltet ist, kann abstimmen. Das bedeutet, dass Sie anonyme Benutzer an der Abstimmung hindern können, indem Sie die Funktion [\"{{% livechat_label livechat_configuration_channel_mute_anonymous_label %}}\"](/peertube-plugin-livechat/de/documentation/user/streamers/moderation) verwenden." +msgid "" +"Every user that is not muted can vote. This means that you can prevent " +"anonymous users to vote by using the [\"{{% livechat_label " +"livechat_configuration_channel_mute_anonymous_label %}}\" feature](/peertube-" +"plugin-livechat/documentation/user/streamers/moderation)." +msgstr "" +"Jeder Benutzer, der nicht stummgeschaltet ist, kann abstimmen. Das " +"bedeutet, dass Sie anonyme Benutzer an der Abstimmung hindern können, indem " +"Sie die Funktion [\"{{% livechat_label " +"livechat_configuration_channel_mute_anonymous_label %}}\"](/peertube-plugin-" +"livechat/de/documentation/user/streamers/moderation) verwenden." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/polls.md @@ -3868,23 +6048,39 @@ msgstr "Umfrageablauf" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "When the polls starts, a first message will be sent in the chat, from the account of the user creating the poll." -msgstr "Wenn die Umfrage beginnt, wird eine erste Nachricht im Chat vom Konto des Benutzers, der die Umfrage erstellt, gesendet." +msgid "" +"When the polls starts, a first message will be sent in the chat, from the " +"account of the user creating the poll." +msgstr "" +"Wenn die Umfrage beginnt, wird eine erste Nachricht im Chat vom Konto des " +"Benutzers, der die Umfrage erstellt, gesendet." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "A banner will also appear to show the poll, and will be updated regularly with the current votes." -msgstr "Außerdem wird ein Banner erscheinen, das die Umfrage anzeigt und regelmäßig mit den aktuellen Stimmen aktualisiert wird." +msgid "" +"A banner will also appear to show the poll, and will be updated regularly " +"with the current votes." +msgstr "" +"Außerdem wird ein Banner erscheinen, das die Umfrage anzeigt und regelmäßig " +"mit den aktuellen Stimmen aktualisiert wird." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "![Poll start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" -msgstr "![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?classes=shadow,border&height=200px)" +msgid "" +"![Poll start](/peertube-plugin-livechat/images/polls_start.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "Viewers can then vote by clicking on their choice, or by sending message like \"!1\" in the chat." -msgstr "Die Zuschauer können dann abstimmen, indem sie auf ihre Wahl klicken oder eine Nachricht wie \"!1\" in den Chat schicken." +msgid "" +"Viewers can then vote by clicking on their choice, or by sending message " +"like \"!1\" in the chat." +msgstr "" +"Die Zuschauer können dann abstimmen, indem sie auf ihre Wahl klicken oder " +"eine Nachricht wie \"!1\" in den Chat schicken." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md @@ -3893,43 +6089,80 @@ msgstr "Die Anzahl der Stimmen wird regelmäßig im Banner aktualisiert." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "Viewers can change their vote at any time, just by making a new choice. Their precedent choice will be replaced by the new one." -msgstr "Die Zuschauer können ihre Wahl jederzeit ändern, indem sie einfach eine neue Wahl treffen. Die vorherige Wahl wird dann durch die neue ersetzt." +msgid "" +"Viewers can change their vote at any time, just by making a new choice. " +"Their precedent choice will be replaced by the new one." +msgstr "" +"Die Zuschauer können ihre Wahl jederzeit ändern, indem sie einfach eine neue " +"Wahl treffen. Die vorherige Wahl wird dann durch die neue ersetzt." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "![Poll votes](/peertube-plugin-livechat/images/polls_votes.png?classes=shadow,border&height=200px)" -msgstr "![Abstimmungen](/peertube-plugin-livechat/images/polls_votes.png?classes=shadow,border&height=200px)" +msgid "" +"![Poll votes](/peertube-plugin-livechat/images/polls_votes.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Abstimmungen](/peertube-plugin-livechat/images/polls_votes.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md msgid "Anonymous viewers can only vote once they have choosen their nickname." -msgstr "Anonyme Nutzer können nur abstimmen, wenn sie ihren Nicknamen gewählt haben." +msgstr "" +"Anonyme Nutzer können nur abstimmen, wenn sie ihren Nicknamen gewählt haben." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "If \"{{% livechat_label poll_anonymous_results %}}\" is checked, votes won't be shown to other users. If unchecked, votes will be publicly visible as you will see message like \"!1\" in the chat." -msgstr "Wenn \"{{% livechat_label poll_anonymous_results %}}\" aktiviert ist, werden die Stimmen anderen Benutzern nicht angezeigt. Wenn diese Option nicht aktiviert ist, sind die Abstimmungen öffentlich sichtbar, da Ihnen Meldungen wie \"!1\" im Chat angezeigt werden." +msgid "" +"If \"{{% livechat_label poll_anonymous_results %}}\" is checked, votes won't " +"be shown to other users. If unchecked, votes will be publicly visible as " +"you will see message like \"!1\" in the chat." +msgstr "" +"Wenn \"{{% livechat_label poll_anonymous_results %}}\" aktiviert ist, werden " +"die Stimmen anderen Benutzern nicht angezeigt. Wenn diese Option nicht " +"aktiviert ist, sind die Abstimmungen öffentlich sichtbar, da Ihnen Meldungen " +"wie \"!1\" im Chat angezeigt werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "For viewers using XMPP clients or outdated livechat plugin versions, the banner will not be visible. But they will see the message in the chat and will be able to vote by sending messages with their choices." -msgstr "Für Nutzer, die XMPP-Clients oder veraltete Livechat-Plugin-Versionen verwenden, wird das Banner nicht sichtbar sein. Sie sehen jedoch die Nachricht im Chat und können ihre Stimme abgeben, indem sie Nachrichten mit ihrer Wahl senden." +msgid "" +"For viewers using XMPP clients or outdated livechat plugin versions, the " +"banner will not be visible. But they will see the message in the chat and " +"will be able to vote by sending messages with their choices." +msgstr "" +"Für Nutzer, die XMPP-Clients oder veraltete Livechat-Plugin-Versionen " +"verwenden, wird das Banner nicht sichtbar sein. Sie sehen jedoch die " +"Nachricht im Chat und können ihre Stimme abgeben, indem sie Nachrichten mit " +"ihrer Wahl senden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "When the poll ends, a new message will be sent in the chat, with the results." -msgstr "Wenn die Umfrage beendet ist, wird im Chat eine neue Nachricht mit den Ergebnissen gesendet." +msgid "" +"When the poll ends, a new message will be sent in the chat, with the results." +msgstr "" +"Wenn die Umfrage beendet ist, wird im Chat eine neue Nachricht mit den " +"Ergebnissen gesendet." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "![Poll end](/peertube-plugin-livechat/images/polls_end.png?classes=shadow,border&height=200px)" -msgstr "![Umfrageende](/peertube-plugin-livechat/images/polls_end.png?classes=shadow,border&height=200px)" +msgid "" +"![Poll end](/peertube-plugin-livechat/images/polls_end.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Umfrageende](/peertube-plugin-livechat/images/polls_end.png?classes=shadow," +"border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/polls.md -msgid "The only way to get old polls results is to search for the poll end message in the chat. For now, polls results are not saved by any other means. So don't forget to note polls results if you want to keep them." -msgstr "Die einzige Möglichkeit, alte Umfrageergebnisse zu erhalten, ist die Suche nach der Nachricht über das Ende der Umfrage im Chat. Im Moment werden die Umfrageergebnisse nicht auf andere Weise gespeichert. Vergessen Sie also nicht, die Umfrageergebnisse zu notieren, wenn Sie sie behalten wollen." +msgid "" +"The only way to get old polls results is to search for the poll end message " +"in the chat. For now, polls results are not saved by any other means. So " +"don't forget to note polls results if you want to keep them." +msgstr "" +"Die einzige Möglichkeit, alte Umfrageergebnisse zu erhalten, ist die Suche " +"nach der Nachricht über das Ende der Umfrage im Chat. Im Moment werden die " +"Umfrageergebnisse nicht auf andere Weise gespeichert. Vergessen Sie also " +"nicht, die Umfrageergebnisse zu notieren, wenn Sie sie behalten wollen." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/slow_mode.md @@ -3946,12 +6179,17 @@ msgstr "Langsamer Modus" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md msgid "This feature comes with the livechat plugin version 8.3.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 8.3.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 8.3.0 verfügbar sein." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "As a streamer, you can choose to rate limit your viewers messages in the chat." -msgstr "Als Streamer haben Sie die Möglichkeit, die Anzahl der Nachrichten Ihrer Zuschauer im Chat zeitlich zu begrenzen." +msgid "" +"As a streamer, you can choose to rate limit your viewers messages in the " +"chat." +msgstr "" +"Als Streamer haben Sie die Möglichkeit, die Anzahl der Nachrichten Ihrer " +"Zuschauer im Chat zeitlich zu begrenzen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md @@ -3970,8 +6208,12 @@ msgstr "einen unleserlichen Chat vermeiden, wenn viele Zuschauer schreiben" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "You can set a number of seconds that users will have to wait after sending a message, before sending another." -msgstr "Sie können eine Anzahl von Sekunden festlegen, die die Benutzer nach dem Senden einer Nachricht warten müssen, bevor sie eine weitere senden können." +msgid "" +"You can set a number of seconds that users will have to wait after sending a " +"message, before sending another." +msgstr "" +"Sie können eine Anzahl von Sekunden festlegen, die die Benutzer nach dem " +"Senden einer Nachricht warten müssen, bevor sie eine weitere senden können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md @@ -3986,23 +6228,42 @@ msgstr "Langsamer Modus Option" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "On the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel), you can set the slow mode option:" -msgstr "Auf der [Kanal Konfigurations Seite](/peertube-plugin-livechat/de/documentation/user/streamers/channel) können Sie den langsamen Modus einstellen:" +msgid "" +"On the [channel configuration page](/peertube-plugin-livechat/documentation/" +"user/streamers/channel), you can set the slow mode option:" +msgstr "" +"Auf der [Kanal Konfigurations Seite](/peertube-plugin-livechat/de/" +"documentation/user/streamers/channel) können Sie den langsamen Modus " +"einstellen:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "![Channel configuration / Slow Mode](/peertube-plugin-livechat/images/slow_mode_channel_option.png?classes=shadow,border&height=400px)" -msgstr "![Kanalkonfiguration / Langsamer Modus](/peertube-plugin-livechat/images/slow_mode_channel_option.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration / Slow Mode](/peertube-plugin-livechat/images/" +"slow_mode_channel_option.png?classes=shadow,border&height=400px)" +msgstr "" +"![Kanalkonfiguration / Langsamer Modus](/peertube-plugin-livechat/images/" +"slow_mode_channel_option.png?classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "Setting the value to a positive integer will set the period during which users will not be able to post additional messages." -msgstr "Wenn Sie den Wert auf eine positive ganze Zahl setzen, wird der Zeitraum festgelegt, in dem die Benutzer keine weiteren Nachrichten senden können." +msgid "" +"Setting the value to a positive integer will set the period during which " +"users will not be able to post additional messages." +msgstr "" +"Wenn Sie den Wert auf eine positive ganze Zahl setzen, wird der Zeitraum " +"festgelegt, in dem die Benutzer keine weiteren Nachrichten senden können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "To modify the value for an already existing room, just open the room \"configuration\" menu (on top of the chat window), and change the slow mode value in the configuration form." -msgstr "Um den Wert für einen bereits existierenden Raum zu ändern, öffnen Sie einfach das Raum-Konfigurationsmenü (oben im Chatfenster) und ändern Sie den Wert für den langsamen Modus im Konfigurationsformular." +msgid "" +"To modify the value for an already existing room, just open the room " +"\"configuration\" menu (on top of the chat window), and change the slow mode " +"value in the configuration form." +msgstr "" +"Um den Wert für einen bereits existierenden Raum zu ändern, öffnen Sie " +"einfach das Raum-Konfigurationsmenü (oben im Chatfenster) und ändern Sie den " +"Wert für den langsamen Modus im Konfigurationsformular." #. type: Yaml Front Matter Hash Value: title #: support/documentation/content/en/documentation/user/streamers/slow_mode.md @@ -4014,17 +6275,27 @@ msgstr "Für Zuschauer" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md msgid "If the slow mode is enabled, users will be informed by a message." -msgstr "Wenn der langsame Modus aktiviert ist, wird der Benutzer durch eine Nachricht informiert." +msgstr "" +"Wenn der langsame Modus aktiviert ist, wird der Benutzer durch eine " +"Nachricht informiert." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "![Slow mode infobox](/peertube-plugin-livechat/images/slow_mode.png?classes=shadow,border&height=400px)" -msgstr "![Infobox Langsamer Modus](/peertube-plugin-livechat/images/slow_mode.png?classes=shadow,border&height=400px)" +msgid "" +"![Slow mode infobox](/peertube-plugin-livechat/images/slow_mode.png?" +"classes=shadow,border&height=400px)" +msgstr "" +"![Infobox Langsamer Modus](/peertube-plugin-livechat/images/slow_mode.png?" +"classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/slow_mode.md -msgid "When they send a message, the input field will be disabled for X seconds (where X is the slow mode duration)." -msgstr "Wenn sie eine Nachricht senden, wird das Eingabefeld für X Sekunden deaktiviert (wobei X die Dauer des langsamen Modus ist)." +msgid "" +"When they send a message, the input field will be disabled for X seconds " +"(where X is the slow mode duration)." +msgstr "" +"Wenn sie eine Nachricht senden, wird das Eingabefeld für X Sekunden " +"deaktiviert (wobei X die Dauer des langsamen Modus ist)." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4041,12 +6312,20 @@ msgstr "Aufgaben / To-do-Listen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "This feature comes with the livechat plugin version 10.0.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 10.0.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 10.0.0 verfügbar sein." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "The livechat plugin includes a Task Application: a kind of \"to-do list\" feature where you can create task lists and add tasks to them. Every room's admins have access to these tasks, so you can edit them collaboratively." -msgstr "Das Livechat Plugin enthält eine Aufgabenanwendung: eine Art \"To-Do-Liste\", mit der Sie Aufgabenlisten erstellen und Aufgaben zu ihnen hinzufügen können. Die Administratoren eines jeden Raums haben Zugriff auf diese Aufgaben, sodass Sie sie gemeinsam bearbeiten können." +msgid "" +"The livechat plugin includes a Task Application: a kind of \"to-do list\" " +"feature where you can create task lists and add tasks to them. Every room's " +"admins have access to these tasks, so you can edit them collaboratively." +msgstr "" +"Das Livechat Plugin enthält eine Aufgabenanwendung: eine Art \"To-Do-" +"Liste\", mit der Sie Aufgabenlisten erstellen und Aufgaben zu ihnen " +"hinzufügen können. Die Administratoren eines jeden Raums haben Zugriff auf " +"diese Aufgaben, sodass Sie sie gemeinsam bearbeiten können." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4055,13 +6334,21 @@ msgstr "Sie können die Aufgabenanwendung zum Beispiel verwenden, um:" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "prepare a list of themes you want to discuss during your livestream, so you can be sure you won't forget anything" -msgstr "eine Liste der Themen vorzubereiten, die Sie während Ihres Livestreams besprechen möchten, damit Sie nichts vergessen" +msgid "" +"prepare a list of themes you want to discuss during your livestream, so you " +"can be sure you won't forget anything" +msgstr "" +"eine Liste der Themen vorzubereiten, die Sie während Ihres Livestreams " +"besprechen möchten, damit Sie nichts vergessen" #. type: Bullet: '* ' #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "highlight questions from your viewers, so you can come back to them later without forgetting to answer them" -msgstr "Fragen Ihrer Zuschauer markieren, damit Sie später darauf zurückkommen können, ohne zu vergessen, sie zu beantworten" +msgid "" +"highlight questions from your viewers, so you can come back to them later " +"without forgetting to answer them" +msgstr "" +"Fragen Ihrer Zuschauer markieren, damit Sie später darauf zurückkommen " +"können, ohne zu vergessen, sie zu beantworten" #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4077,43 +6364,76 @@ msgstr "Aufgabenanwendung öffnen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "To open the Task Application, there is a \"{{% livechat_label \"tasks\" %}}\" button in the top chat menu:" -msgstr "Um die Aufgabenanwendung zu öffnen, gibt es eine Schaltfläche \"{{% livechat_label \"Aufgaben\" %}}\" im oberen Chatmenü:" +msgid "" +"To open the Task Application, there is a \"{{% livechat_label \"tasks\" " +"%}}\" button in the top chat menu:" +msgstr "" +"Um die Aufgabenanwendung zu öffnen, gibt es eine Schaltfläche \"{{% " +"livechat_label \"Aufgaben\" %}}\" im oberen Chatmenü:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" -msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_video.png?classes=shadow,border&height=200px)" +msgid "" +"![Opening the Task Application](/peertube-plugin-livechat/images/" +"task_open_app_video.png?classes=shadow,border&height=200px)" +msgstr "" +"[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/" +"task_open_app_video.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Opening the Task Application](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" -msgstr "[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/task_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgid "" +"![Opening the Task Application](/peertube-plugin-livechat/images/" +"task_open_app_fullpage.png?classes=shadow,border&height=200px)" +msgstr "" +"[Öffnen der Aufgabenanwendung](/peertube-plugin-livechat/images/" +"task_open_app_fullpage.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Clicking this button will toggle the Task Application display:" -msgstr "Wenn Sie auf diese Schaltfläche klicken, wird die Anzeige der Aufgabenanwendung umgeschaltet:" +msgstr "" +"Wenn Sie auf diese Schaltfläche klicken, wird die Anzeige der " +"Aufgabenanwendung umgeschaltet:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task Application](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Task Application](/peertube-plugin-livechat/images/task_app_video_1.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_video_1.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Task Application](/peertube-plugin-livechat/images/task_app_fullpage_1.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabenanwendung](/peertube-plugin-livechat/images/task_app_fullpage_1." +"png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "Every room's admins have access to the Task Application (read and write access)." -msgstr "Die Administratoren eines jeden Raums haben Zugriff auf die Aufgabenanwendung (Lese- und Schreibzugriff)." +msgid "" +"Every room's admins have access to the Task Application (read and write " +"access)." +msgstr "" +"Die Administratoren eines jeden Raums haben Zugriff auf die " +"Aufgabenanwendung (Lese- und Schreibzugriff)." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "When you promote someone as room admin or owner, they gets instant access to the Task Application. When you remove admin or owner rights to someone, they instantly lose access to the Task Application." -msgstr "Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält dieser sofortigen Zugriff auf die Aufgabenanwendung. Wenn Sie jemandem die Admin- oder Eigentümerrechte entziehen, verliert er sofort den Zugang zur Aufgabenanwendung." +msgid "" +"When you promote someone as room admin or owner, they gets instant access to " +"the Task Application. When you remove admin or owner rights to someone, " +"they instantly lose access to the Task Application." +msgstr "" +"Wenn Sie jemanden zum Raumadministrator oder -besitzer befördern, erhält " +"dieser sofortigen Zugriff auf die Aufgabenanwendung. Wenn Sie jemandem die " +"Admin- oder Eigentümerrechte entziehen, verliert er sofort den Zugang zur " +"Aufgabenanwendung." #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4123,13 +6443,23 @@ msgstr "Aufgabenlisten" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "By default, there is one task list that has the same name as your livestream." -msgstr "Standardmäßig gibt es eine Aufgabenliste, die denselben Namen wie Ihr Livestream hat." +msgid "" +"By default, there is one task list that has the same name as your livestream." +msgstr "" +"Standardmäßig gibt es eine Aufgabenliste, die denselben Namen wie Ihr " +"Livestream hat." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "You can use the form at the bottom to create a new task list. You can also edit existing task lists using the edit button, or delete any task list. Deleting a task list will also delete all its tasks." -msgstr "Mit dem Formular am unteren Rand können Sie eine neue Aufgabenliste erstellen. Sie können auch bestehende Aufgabenlisten über die Schaltfläche bearbeiten oder eine Aufgabenliste löschen. Wenn Sie eine Aufgabenliste löschen, werden auch alle dazugehörigen Aufgaben gelöscht." +msgid "" +"You can use the form at the bottom to create a new task list. You can also " +"edit existing task lists using the edit button, or delete any task list. " +"Deleting a task list will also delete all its tasks." +msgstr "" +"Mit dem Formular am unteren Rand können Sie eine neue Aufgabenliste " +"erstellen. Sie können auch bestehende Aufgabenlisten über die Schaltfläche " +"bearbeiten oder eine Aufgabenliste löschen. Wenn Sie eine Aufgabenliste " +"löschen, werden auch alle dazugehörigen Aufgaben gelöscht." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4138,8 +6468,12 @@ msgstr "Die Aufgabenlisten sind alphabetisch sortiert." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenlisten](/peertube-plugin-livechat/images/task_app_task_lists.png?classes=shadow,border&height=200px)" +msgid "" +"![Task lists](/peertube-plugin-livechat/images/task_app_task_lists.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabenlisten](/peertube-plugin-livechat/images/task_app_task_lists.png?" +"classes=shadow,border&height=200px)" #. type: Title ### #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4155,18 +6489,32 @@ msgstr "Aufgaben erstellen" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "You can create a task using the button on the right of task lists. This opens a form with two fields: a mandatory task name, and an optional description." -msgstr "Sie können eine Aufgabe über die Schaltfläche rechts neben der Aufgabenliste erstellen. Es öffnet sich ein Formular mit zwei Feldern: einem obligatorischen Aufgabennamen und einer optionalen Beschreibung." +msgid "" +"You can create a task using the button on the right of task lists. This " +"opens a form with two fields: a mandatory task name, and an optional " +"description." +msgstr "" +"Sie können eine Aufgabe über die Schaltfläche rechts neben der Aufgabenliste " +"erstellen. Es öffnet sich ein Formular mit zwei Feldern: einem " +"obligatorischen Aufgabennamen und einer optionalen Beschreibung." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task form](/peertube-plugin-livechat/images/task_app_task_form.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenformular](/peertube-plugin-livechat/images/task_app_task_form.png?classes=shadow,border&height=200px)" +msgid "" +"![Task form](/peertube-plugin-livechat/images/task_app_task_form.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabenformular](/peertube-plugin-livechat/images/task_app_task_form.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task created](/peertube-plugin-livechat/images/task_app_task_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabe erstellt](/peertube-plugin-livechat/images/task_app_task_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Task created](/peertube-plugin-livechat/images/task_app_task_1.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabe erstellt](/peertube-plugin-livechat/images/task_app_task_1.png?" +"classes=shadow,border&height=200px)" #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4177,17 +6525,27 @@ msgstr "Aufgaben bearbeiten" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md msgid "Tasks can be edited by using the edit button on the right." -msgstr "Aufgaben können über die Schaltfläche \"Bearbeiten\" auf der rechten Seite bearbeitet werden." +msgstr "" +"Aufgaben können über die Schaltfläche \"Bearbeiten\" auf der rechten Seite " +"bearbeitet werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "Tasks can be marked complete (or uncomplete) by clicking directly on the checkbox in the list." -msgstr "Aufgaben können durch direktes Anklicken des Kontrollkästchens in der Liste als erledigt (oder nicht erledigt) markiert werden." +msgid "" +"Tasks can be marked complete (or uncomplete) by clicking directly on the " +"checkbox in the list." +msgstr "" +"Aufgaben können durch direktes Anklicken des Kontrollkästchens in der Liste " +"als erledigt (oder nicht erledigt) markiert werden." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Tasks](/peertube-plugin-livechat/images/task_app_task_2.png?classes=shadow,border&height=200px)" -msgstr "![Aufgaben](/peertube-plugin-livechat/images/task_app_task_2.png?classes=shadow,border&height=200px)" +msgid "" +"![Tasks](/peertube-plugin-livechat/images/task_app_task_2.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Aufgaben](/peertube-plugin-livechat/images/task_app_task_2.png?" +"classes=shadow,border&height=200px)" #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4197,18 +6555,31 @@ msgstr "Aufgaben sortieren / Aufgabenliste ändern" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "You can sort tasks, or move tasks from one list to another, simply using drag & drop." -msgstr "Sie können Aufgaben sortieren oder von einer Liste in eine andere verschieben, indem Sie sie einfach per Drag & Drop ziehen." +msgid "" +"You can sort tasks, or move tasks from one list to another, simply using " +"drag & drop." +msgstr "" +"Sie können Aufgaben sortieren oder von einer Liste in eine andere " +"verschieben, indem Sie sie einfach per Drag & Drop ziehen." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Drag and drop to sort](/peertube-plugin-livechat/images/task_drag_drop.png?classes=shadow,border&height=200px)" -msgstr "![Drag und Drop zum Sortieren](/peertube-plugin-livechat/images/task_drag_drop.png?classes=shadow,border&height=200px)" +msgid "" +"![Drag and drop to sort](/peertube-plugin-livechat/images/task_drag_drop.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Drag und Drop zum Sortieren](/peertube-plugin-livechat/images/" +"task_drag_drop.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Drag and drop to move to another list](/peertube-plugin-livechat/images/task_drag_drop_task_list.png?classes=shadow,border&height=200px)" -msgstr "![Drag und Drop zum Verschieben zu einer anderen Liste](/peertube-plugin-livechat/images/task_drag_drop_task_list.png?classes=shadow,border&height=200px)" +msgid "" +"![Drag and drop to move to another list](/peertube-plugin-livechat/images/" +"task_drag_drop_task_list.png?classes=shadow,border&height=200px)" +msgstr "" +"![Drag und Drop zum Verschieben zu einer anderen Liste](/peertube-plugin-" +"livechat/images/task_drag_drop_task_list.png?classes=shadow," +"border&height=200px)" #. type: Title #### #: support/documentation/content/en/documentation/user/streamers/tasks.md @@ -4218,28 +6589,57 @@ msgstr "Erstellen einer Aufgabe aus einer Chat-Nachricht" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "You can create a task from a message in a chat, using the \"{{% livechat_label \"task_create\" %}}\" button in the dropdown menu at the right of the message. This will open a dialog box where you can choose which task list you want to add the task into. The task name will be the user nickname, and the task description the message content." -msgstr "Sie können eine Aufgabe aus einer Nachricht in einem Chat erstellen, indem Sie die Schaltfläche \"{{% livechat_label \"task_create\" %}}\" im Dropdown-Menü rechts neben der Nachricht verwenden. Daraufhin öffnet sich ein Dialogfeld, in dem Sie auswählen können, in welche Aufgabenliste Sie die Aufgabe aufnehmen möchten. Der Aufgabenname ist der Spitzname des Benutzers und die Aufgabenbeschreibung der Inhalt der Nachricht." +msgid "" +"You can create a task from a message in a chat, using the \"{{% " +"livechat_label \"task_create\" %}}\" button in the dropdown menu at the " +"right of the message. This will open a dialog box where you can choose " +"which task list you want to add the task into. The task name will be the " +"user nickname, and the task description the message content." +msgstr "" +"Sie können eine Aufgabe aus einer Nachricht in einem Chat erstellen, indem " +"Sie die Schaltfläche \"{{% livechat_label \"task_create\" %}}\" im Dropdown-" +"Menü rechts neben der Nachricht verwenden. Daraufhin öffnet sich ein " +"Dialogfeld, in dem Sie auswählen können, in welche Aufgabenliste Sie die " +"Aufgabe aufnehmen möchten. Der Aufgabenname ist der Spitzname des Benutzers " +"und die Aufgabenbeschreibung der Inhalt der Nachricht." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Create task from message](/peertube-plugin-livechat/images/task_from_message_1.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabe aus einer Nachricht erstellen](/peertube-plugin-livechat/images/task_from_message_1.png?classes=shadow,border&height=200px)" +msgid "" +"![Create task from message](/peertube-plugin-livechat/images/" +"task_from_message_1.png?classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabe aus einer Nachricht erstellen](/peertube-plugin-livechat/images/" +"task_from_message_1.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Choose the task list](/peertube-plugin-livechat/images/task_from_message_2.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabenliste auswählen](/peertube-plugin-livechat/images/task_from_message_2.png?classes=shadow,border&height=200px)" +msgid "" +"![Choose the task list](/peertube-plugin-livechat/images/task_from_message_2." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabenliste auswählen](/peertube-plugin-livechat/images/" +"task_from_message_2.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "![Task created](/peertube-plugin-livechat/images/task_from_message_3.png?classes=shadow,border&height=200px)" -msgstr "![Aufgabe erstellt](/peertube-plugin-livechat/images/task_from_message_3.png?classes=shadow,border&height=200px)" +msgid "" +"![Task created](/peertube-plugin-livechat/images/task_from_message_3.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Aufgabe erstellt](/peertube-plugin-livechat/images/task_from_message_3.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/tasks.md -msgid "Using this feature, for example, you can ask your moderators to highlight all chat questions, so you can see them at a glance during your livestream, and check them as answered." -msgstr "Mit dieser Funktion können Sie z. B. Ihre Moderatoren bitten, alle Chat-Fragen zu markieren, damit Sie sie während Ihres Livestreams auf einen Blick sehen und als beantwortet markieren können." +msgid "" +"Using this feature, for example, you can ask your moderators to highlight " +"all chat questions, so you can see them at a glance during your livestream, " +"and check them as answered." +msgstr "" +"Mit dieser Funktion können Sie z. B. Ihre Moderatoren bitten, alle Chat-" +"Fragen zu markieren, damit Sie sie während Ihres Livestreams auf einen Blick " +"sehen und als beantwortet markieren können." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/streamers/terms.md @@ -4261,23 +6661,41 @@ msgstr "Konfiguration" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "You can add terms & conditions to your channel. These terms will be shown to all users joining the chat." -msgstr "Sie können Ihrem Kanal Nutzungsbedingungen hinzufügen. Diese Nutzungsbedingungen werden allen Benutzern angezeigt, die den Chat betreten." +msgid "" +"You can add terms & conditions to your channel. These terms will be shown " +"to all users joining the chat." +msgstr "" +"Sie können Ihrem Kanal Nutzungsbedingungen hinzufügen. Diese " +"Nutzungsbedingungen werden allen Benutzern angezeigt, die den Chat betreten." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "To configure the terms & conditions, go to the [channel configuration page](/peertube-plugin-livechat/documentation/user/streamers/channel):" -msgstr "Um die Nutzungsbedingungen zu konfigurieren, gehen Sie auf die [Kanal-Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/streamers/channel):" +msgid "" +"To configure the terms & conditions, go to the [channel configuration page](/" +"peertube-plugin-livechat/documentation/user/streamers/channel):" +msgstr "" +"Um die Nutzungsbedingungen zu konfigurieren, gehen Sie auf die [Kanal-" +"Konfigurationsseite](/peertube-plugin-livechat/de/documentation/user/" +"streamers/channel):" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "![Channel configuration / Terms](/peertube-plugin-livechat/images/channel_terms_config.png?classes=shadow,border&height=400px)" -msgstr "![Kanalkonfiguration / Nutzungsbedingungen](/peertube-plugin-livechat/images/channel_terms_config.png?classes=shadow,border&height=400px)" +msgid "" +"![Channel configuration / Terms](/peertube-plugin-livechat/images/" +"channel_terms_config.png?classes=shadow,border&height=400px)" +msgstr "" +"![Kanalkonfiguration / Nutzungsbedingungen](/peertube-plugin-livechat/images/" +"channel_terms_config.png?classes=shadow,border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "URL in the message will be clickable. You can also do some styling: [Message Styling](https://xmpp.org/extensions/xep-0393.html)." -msgstr "Die URL in der Nachricht wird anklickbar sein. Sie können die Nachricht auch etwas gestalten: [Message Styling](https://xmpp.org/extensions/xep-0393.html)." +msgid "" +"URL in the message will be clickable. You can also do some styling: " +"[Message Styling](https://xmpp.org/extensions/xep-0393.html)." +msgstr "" +"Die URL in der Nachricht wird anklickbar sein. Sie können die Nachricht " +"auch etwas gestalten: [Message Styling](https://xmpp.org/extensions/xep-0393." +"html)." #. type: Title ## #: support/documentation/content/en/documentation/user/streamers/terms.md @@ -4292,33 +6710,66 @@ msgstr "Wenn Sie dem Chat beitreten, sehen die Zuschauer die Bedingungen:" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "![Terms](/peertube-plugin-livechat/images/terms.png?classes=shadow,border&height=400px)" -msgstr "![Bedingungen](/peertube-plugin-livechat/images/terms.png?classes=shadow,border&height=400px)" +msgid "" +"![Terms](/peertube-plugin-livechat/images/terms.png?classes=shadow," +"border&height=400px)" +msgstr "" +"![Bedingungen](/peertube-plugin-livechat/images/terms.png?classes=shadow," +"border&height=400px)" #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "Peertube instance's admin can also set global terms & conditions. If so, these terms will be shown above your channel's terms." -msgstr "Der Administrator der Peertube-Instanz kann auch globale Nutzungsbedingungen festlegen. Wenn dies der Fall ist, werden diese Bedingungen über den Bedingungen Ihres Kanals angezeigt." +msgid "" +"Peertube instance's admin can also set global terms & conditions. If so, " +"these terms will be shown above your channel's terms." +msgstr "" +"Der Administrator der Peertube-Instanz kann auch globale Nutzungsbedingungen " +"festlegen. Wenn dies der Fall ist, werden diese Bedingungen über den " +"Bedingungen Ihres Kanals angezeigt." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "Anonymous users will only see the terms & conditions once they have chosen their nickname (in other words: once they are able to talk)." -msgstr "Anonyme Nutzer sehen die Nutzungsbedingungen erst, wenn sie ihren Nickname gewählt haben (mit anderen Worten: wenn sie schreiben können)." +msgid "" +"Anonymous users will only see the terms & conditions once they have chosen " +"their nickname (in other words: once they are able to talk)." +msgstr "" +"Anonyme Nutzer sehen die Nutzungsbedingungen erst, wenn sie ihren Nickname " +"gewählt haben (mit anderen Worten: wenn sie schreiben können)." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "You can change the terms content at any time, it will be instantly updated for all viewers." -msgstr "Sie können den Inhalt der Nutzungsbedingungen jederzeit ändern, er wird dann sofort für alle Betrachter aktualisiert." +msgid "" +"You can change the terms content at any time, it will be instantly updated " +"for all viewers." +msgstr "" +"Sie können den Inhalt der Nutzungsbedingungen jederzeit ändern, er wird dann " +"sofort für alle Betrachter aktualisiert." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "Users can hide the terms & conditions. When doing so, terms won't be shown again, unless you change the content." -msgstr "Benutzer können die Nutzungsbedingungen ausblenden. Wenn Sie dies tun, werden die Bedingungen nicht mehr angezeigt, es sei denn, Sie ändern den Inhalt." +msgid "" +"Users can hide the terms & conditions. When doing so, terms won't be shown " +"again, unless you change the content." +msgstr "" +"Benutzer können die Nutzungsbedingungen ausblenden. Wenn Sie dies tun, " +"werden die Bedingungen nicht mehr angezeigt, es sei denn, Sie ändern den " +"Inhalt." #. type: Plain text #: support/documentation/content/en/documentation/user/streamers/terms.md -msgid "If your Peertube instance allows joining chat with [XMPP clients](https://livingston.frama.io/peertube-plugin-livechat/documentation/admin/advanced/xmpp_clients/), users using such clients will see the terms as chat messages, coming from a \"Peertube\" account. When you update terms, they will receive a new message with the update terms content." -msgstr "Wenn Ihre Peertube-Instanz die Teilnahme am Chat mit [XMPP-Clients] (https://livingston.frama.io/peertube-plugin-livechat/de/documentation/admin/advanced/xmpp_clients/) erlaubt, sehen die Benutzer, die solche Clients verwenden, die Bedingungen als Chat-Nachrichten, die von einem \"Peertube\"-Konto kommen. Wenn Sie die Bedingungen aktualisieren, erhalten sie eine neue Nachricht mit dem Inhalt der aktualisierten Bedingungen." +msgid "" +"If your Peertube instance allows joining chat with [XMPP clients](https://" +"livingston.frama.io/peertube-plugin-livechat/documentation/admin/advanced/" +"xmpp_clients/), users using such clients will see the terms as chat " +"messages, coming from a \"Peertube\" account. When you update terms, they " +"will receive a new message with the update terms content." +msgstr "" +"Wenn Ihre Peertube-Instanz die Teilnahme am Chat mit [XMPP-Clients] (https://" +"livingston.frama.io/peertube-plugin-livechat/de/documentation/admin/advanced/" +"xmpp_clients/) erlaubt, sehen die Benutzer, die solche Clients verwenden, " +"die Bedingungen als Chat-Nachrichten, die von einem \"Peertube\"-Konto " +"kommen. Wenn Sie die Bedingungen aktualisieren, erhalten sie eine neue " +"Nachricht mit dem Inhalt der aktualisierten Bedingungen." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/documentation/user/viewers.md @@ -4334,20 +6785,33 @@ msgstr "Chaträumen beitreten" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "When you are watching a Peertube video that has the chat activated, you will see the chat next to the video:" -msgstr "Wenn Sie ein Peertube-Video ansehen, bei dem der Chat aktiviert ist, sehen Sie den Chat neben dem Video:" +msgid "" +"When you are watching a Peertube video that has the chat activated, you will " +"see the chat next to the video:" +msgstr "" +"Wenn Sie ein Peertube-Video ansehen, bei dem der Chat aktiviert ist, sehen " +"Sie den Chat neben dem Video:" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md #: support/documentation/content/en/_index.md #: support/documentation/content/en/intro/_index.md -msgid "![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" -msgstr "![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px)" +msgid "" +"![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow," +"border&height=200px)" +msgstr "" +"![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow," +"border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "There are two slightly different use cases, depending on wether or not you have an account on the Peertube instance. See bellow for more informations." -msgstr "Es gibt zwei leicht unterschiedliche Anwendungsfälle, je nachdem, ob Sie ein Konto auf der Peertube-Instanz haben oder nicht. Siehe unten für weitere Informationen." +msgid "" +"There are two slightly different use cases, depending on wether or not you " +"have an account on the Peertube instance. See bellow for more informations." +msgstr "" +"Es gibt zwei leicht unterschiedliche Anwendungsfälle, je nachdem, ob Sie ein " +"Konto auf der Peertube-Instanz haben oder nicht. Siehe unten für weitere " +"Informationen." #. type: Title ### #: support/documentation/content/en/documentation/user/viewers.md @@ -4357,23 +6821,41 @@ msgstr "Wenn Sie kein Peertube-Konto haben" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "If you are not logged in on the Peertube instance where you are watching the video, you will automatically join the chat. You will be assigned a random nickname (something like \"Anonymous 12345\")." -msgstr "Wenn Sie auf der Peertube-Instanz, auf der Sie das Video ansehen, nicht eingeloggt sind, treten Sie automatisch dem Chat bei. Ihnen wird ein zufälliger Spitzname zugewiesen (z. B. \"Anonymous 12345\")." +msgid "" +"If you are not logged in on the Peertube instance where you are watching the " +"video, you will automatically join the chat. You will be assigned a random " +"nickname (something like \"Anonymous 12345\")." +msgstr "" +"Wenn Sie auf der Peertube-Instanz, auf der Sie das Video ansehen, nicht " +"eingeloggt sind, treten Sie automatisch dem Chat bei. Ihnen wird ein " +"zufälliger Spitzname zugewiesen (z. B. \"Anonymous 12345\")." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "![Chat with an anonymous user](/peertube-plugin-livechat/images/chat_with_anonymous.png?classes=shadow,border&height=200px)" -msgstr "![Chat mit einem anonymen Benutzer](/peertube-plugin-livechat/images/chat_with_anonymous.png?classes=shadow,border&height=200px)" +msgid "" +"![Chat with an anonymous user](/peertube-plugin-livechat/images/" +"chat_with_anonymous.png?classes=shadow,border&height=200px)" +msgstr "" +"![Chat mit einem anonymen Benutzer](/peertube-plugin-livechat/images/" +"chat_with_anonymous.png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "Before being able to speak in the chat room, you have to enter a nickname in the field on the bottom of the window." -msgstr "Bevor Sie im Chatraum sprechen können, müssen Sie einen Spitznamen in das Feld am unteren Rand des Fensters eingeben." +msgid "" +"Before being able to speak in the chat room, you have to enter a nickname in " +"the field on the bottom of the window." +msgstr "" +"Bevor Sie im Chatraum sprechen können, müssen Sie einen Spitznamen in das " +"Feld am unteren Rand des Fensters eingeben." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "![Joining chat when not connected](/peertube-plugin-livechat/images/chat_anonymous.png?classes=shadow,border&height=200px)" -msgstr "![Dem Chat beitreten, wenn nicht verbunden](/peertube-plugin-livechat/images/chat_anonymous.png?classes=shadow,border&height=200px)" +msgid "" +"![Joining chat when not connected](/peertube-plugin-livechat/images/" +"chat_anonymous.png?classes=shadow,border&height=200px)" +msgstr "" +"![Dem Chat beitreten, wenn nicht verbunden](/peertube-plugin-livechat/images/" +"chat_anonymous.png?classes=shadow,border&height=200px)" #. type: Title #### #: support/documentation/content/en/documentation/user/viewers.md @@ -4383,13 +6865,31 @@ msgstr "Anmeldung über einen externen Authentifizierungsanbieter" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "The Peertube instance can configure external authentication providers (Mastodon accounts, Google accounts, ...). In such case, you will see a \"{{% livechat_label login_using_external_account %}}\" button, that will open a dialog modal. In this dialog modal, there will be some buttons to connect using a remote account." -msgstr "Die Peertube-Instanz kann externe Authentifizierungsanbieter konfigurieren (Mastodon-Konten, Google-Konten, ...). In diesem Fall sehen Sie eine \"{{% livechat_label login_using_external_account %}}\" Schaltfläche, die ein Dialogfenster öffnet. In diesem Dialogfenster gibt es einige Schaltflächen, um eine Verbindung mit einem externen Konto herzustellen." +msgid "" +"The Peertube instance can configure external authentication providers " +"(Mastodon accounts, Google accounts, ...). In such case, you will see a " +"\"{{% livechat_label login_using_external_account %}}\" button, that will " +"open a dialog modal. In this dialog modal, there will be some buttons to " +"connect using a remote account." +msgstr "" +"Die Peertube-Instanz kann externe Authentifizierungsanbieter konfigurieren " +"(Mastodon-Konten, Google-Konten, ...). In diesem Fall sehen Sie eine \"{{% " +"livechat_label login_using_external_account %}}\" Schaltfläche, die ein " +"Dialogfenster öffnet. In diesem Dialogfenster gibt es einige Schaltflächen, " +"um eine Verbindung mit einem externen Konto herzustellen." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "Once you signed in the remote account, and have granted access, your nickname and avatar (if available) will be automatically fetched. No other data will be stored. These data will be automatically deleted several hours after your quit the chat." -msgstr "Sobald Sie sich bei dem entfernten Konto angemeldet und der Zugang gewährt wurde, werden Ihr Nickname und Ihr Avatar (falls vorhanden) automatisch abgerufen. Es werden keine weiteren Daten gespeichert. Diese Daten werden einige Stunden nach Beendigung des Chats automatisch gelöscht." +msgid "" +"Once you signed in the remote account, and have granted access, your " +"nickname and avatar (if available) will be automatically fetched. No other " +"data will be stored. These data will be automatically deleted several hours " +"after your quit the chat." +msgstr "" +"Sobald Sie sich bei dem entfernten Konto angemeldet und der Zugang gewährt " +"wurde, werden Ihr Nickname und Ihr Avatar (falls vorhanden) automatisch " +"abgerufen. Es werden keine weiteren Daten gespeichert. Diese Daten werden " +"einige Stunden nach Beendigung des Chats automatisch gelöscht." #. type: Title ### #: support/documentation/content/en/documentation/user/viewers.md @@ -4399,13 +6899,28 @@ msgstr "Wenn Sie ein Peertube-Konto haben" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "If you are connected with your Peertube account, you will automatically join the room, using your Peertube nickname and avatar." -msgstr "Wenn Sie mit Ihrem Peertube-Konto verbunden sind, treten Sie dem Raum automatisch bei, indem Sie Ihren Peertube Spitznamen und Avatar verwenden." +msgid "" +"If you are connected with your Peertube account, you will automatically join " +"the room, using your Peertube nickname and avatar." +msgstr "" +"Wenn Sie mit Ihrem Peertube-Konto verbunden sind, treten Sie dem Raum " +"automatisch bei, indem Sie Ihren Peertube Spitznamen und Avatar verwenden." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "If you are watching a live on an instance on which you have no account, but you have an account on another instance: if the livechat plugin is installed on both instances, it is possible to join the chat using your account. To do so, just open the video on your instance (you can for example copy/paste the video url in the search field of your instance)." -msgstr "Wenn Sie ein Live-Video auf einer Instanz ansehen, auf der Sie kein Konto haben, aber ein Konto auf einer anderen Instanz: Wenn das Livechat-Plugin auf beiden Instanzen installiert ist, ist es möglich, dem Chat mit Ihrem Konto beizutreten. Öffnen Sie dazu einfach das Video auf Ihrer Instanz (Sie können zum Beispiel die Video-URL in das Suchfeld Ihrer Instanz kopieren/einfügen)." +msgid "" +"If you are watching a live on an instance on which you have no account, but " +"you have an account on another instance: if the livechat plugin is installed " +"on both instances, it is possible to join the chat using your account. To " +"do so, just open the video on your instance (you can for example copy/paste " +"the video url in the search field of your instance)." +msgstr "" +"Wenn Sie ein Live-Video auf einer Instanz ansehen, auf der Sie kein Konto " +"haben, aber ein Konto auf einer anderen Instanz: Wenn das Livechat-Plugin " +"auf beiden Instanzen installiert ist, ist es möglich, dem Chat mit Ihrem " +"Konto beizutreten. Öffnen Sie dazu einfach das Video auf Ihrer Instanz (Sie " +"können zum Beispiel die Video-URL in das Suchfeld Ihrer Instanz kopieren/" +"einfügen)." #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4416,17 +6931,35 @@ msgstr "Wenn Sie ein Peertube Konto auf einer anderen Peertube Instanz haben" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md msgid "This feature comes with the livechat plugin version 9.0.0." -msgstr "Diese Funktion wird mit dem Livechatplugin Version 9.0.0 verfügbar sein." +msgstr "" +"Diese Funktion wird mit dem Livechatplugin Version 9.0.0 verfügbar sein." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "If you have a Peertube account, but not on the current instance, there is a \"{{% livechat_label login_using_external_account %}}\" button. This button will open a dialog where you can enter your Peertube instance URL. Once you entered it, it will check if the livechat plugin is available on the remote instance, and if the video is available. If it is the case, you will be redirected to the video on the remote instance." -msgstr "Wenn Sie ein Peertube Konto haben, aber nicht auf der aktuellen Instanz, gibt es einen \"{{% livechat_label login_using_external_account %}}\"-Button. Diese Schaltfläche öffnet einen Dialog, in dem Sie die URL Ihrer Peertube Instanz eingeben können. Sobald Sie diese eingegeben haben, wird geprüft, ob das Livechatplugin auf der entfernten Instanz verfügbar ist und ob das Video verfügbar ist. Wenn dies der Fall ist, werden Sie zu dem Video auf der entfernten Instanz weitergeleitet." +msgid "" +"If you have a Peertube account, but not on the current instance, there is a " +"\"{{% livechat_label login_using_external_account %}}\" button. This button " +"will open a dialog where you can enter your Peertube instance URL. Once you " +"entered it, it will check if the livechat plugin is available on the remote " +"instance, and if the video is available. If it is the case, you will be " +"redirected to the video on the remote instance." +msgstr "" +"Wenn Sie ein Peertube Konto haben, aber nicht auf der aktuellen Instanz, " +"gibt es einen \"{{% livechat_label login_using_external_account %}}\"-" +"Button. Diese Schaltfläche öffnet einen Dialog, in dem Sie die URL Ihrer " +"Peertube Instanz eingeben können. Sobald Sie diese eingegeben haben, wird " +"geprüft, ob das Livechatplugin auf der entfernten Instanz verfügbar ist und " +"ob das Video verfügbar ist. Wenn dies der Fall ist, werden Sie zu dem Video " +"auf der entfernten Instanz weitergeleitet." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "![External login dialog](/peertube-plugin-livechat/images/external_login_dialog.png?classes=shadow,border&height=200px)" -msgstr "![Externer Anmeldedialog](/peertube-plugin-livechat/images/external_login_dialog.png?classes=shadow,border&height=200px)" +msgid "" +"![External login dialog](/peertube-plugin-livechat/images/" +"external_login_dialog.png?classes=shadow,border&height=200px)" +msgstr "" +"![Externer Anmeldedialog](/peertube-plugin-livechat/images/" +"external_login_dialog.png?classes=shadow,border&height=200px)" #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4436,23 +6969,48 @@ msgstr "Chatten" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "To send messages, just type them in the \"message\" field on the bottom of the screen. You can send them by pressing the enter key on your keyboard, or by clicking on the \"send\" button." -msgstr "Um Nachrichten zu senden, geben Sie sie einfach in das Feld \"Nachricht\" am unteren Rand des Bildschirms ein. Sie können sie durch Drücken der Eingabetaste auf Ihrer Tastatur oder durch Klicken auf die Schaltfläche \"Senden\" senden." +msgid "" +"To send messages, just type them in the \"message\" field on the bottom of " +"the screen. You can send them by pressing the enter key on your keyboard, " +"or by clicking on the \"send\" button." +msgstr "" +"Um Nachrichten zu senden, geben Sie sie einfach in das Feld \"Nachricht\" am " +"unteren Rand des Bildschirms ein. Sie können sie durch Drücken der " +"Eingabetaste auf Ihrer Tastatur oder durch Klicken auf die Schaltfläche " +"\"Senden\" senden." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "If you want to add line breaks in your messages, you can use the \"shift+enter\" key combination." -msgstr "Wenn Sie in Ihren Nachrichten Zeilenumbrüche einfügen möchten, können Sie die Tastenkombination \"Umschalt+Eingabe\" verwenden." +msgid "" +"If you want to add line breaks in your messages, you can use the " +"\"shift+enter\" key combination." +msgstr "" +"Wenn Sie in Ihren Nachrichten Zeilenumbrüche einfügen möchten, können Sie " +"die Tastenkombination \"Umschalt+Eingabe\" verwenden." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "You can add emojis to your messages. You can for example use the emojis menu, or directly type emojis shortcuts like `:smiley:`." -msgstr "Sie können Emojis zu Ihren Nachrichten hinzufügen. Sie können zum Beispiel das Emojis-Menü verwenden oder direkt Emojis-Kurzbefehle wie `:smiley:` eingeben." +msgid "" +"You can add emojis to your messages. You can for example use the emojis " +"menu, or directly type emojis shortcuts like `:smiley:`." +msgstr "" +"Sie können Emojis zu Ihren Nachrichten hinzufügen. Sie können zum Beispiel " +"das Emojis-Menü verwenden oder direkt Emojis-Kurzbefehle wie `:smiley:` " +"eingeben." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "You can mention other participants. To do so, you can type the first nickname letters, then press the tab key. You can also type `@`: this will directly open the menu. You can also click on a nickname in the participants list to insert it in the message field." -msgstr "Sie können andere Teilnehmer erwähnen. Dazu können Sie die ersten Buchstaben des Spitznamens eingeben und dann die Tabulatortaste drücken. Sie können auch \"@\" tippen: Damit öffnen Sie direkt das Menü. Sie können auch auf einen Spitznamen in der Teilnehmerliste klicken, um ihn in das Nachrichtenfeld einzufügen." +msgid "" +"You can mention other participants. To do so, you can type the first " +"nickname letters, then press the tab key. You can also type `@`: this will " +"directly open the menu. You can also click on a nickname in the " +"participants list to insert it in the message field." +msgstr "" +"Sie können andere Teilnehmer erwähnen. Dazu können Sie die ersten " +"Buchstaben des Spitznamens eingeben und dann die Tabulatortaste drücken. " +"Sie können auch \"@\" tippen: Damit öffnen Sie direkt das Menü. Sie können " +"auch auf einen Spitznamen in der Teilnehmerliste klicken, um ihn in das " +"Nachrichtenfeld einzufügen." #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4463,17 +7021,26 @@ msgstr "Teilnehmerliste" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md msgid "To see the list of participants, just open the right menu:" -msgstr "Um die Liste der Teilnehmer zu sehen, öffnen Sie einfach das rechte Menü:" +msgstr "" +"Um die Liste der Teilnehmer zu sehen, öffnen Sie einfach das rechte Menü:" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "![Participants list](/peertube-plugin-livechat/images/open_participants_list.png?classes=shadow,border&height=200px)" -msgstr "![Teilnehmerliste](/peertube-plugin-livechat/images/open_participants_list.png?classes=shadow,border&height=200px)" +msgid "" +"![Participants list](/peertube-plugin-livechat/images/open_participants_list." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Teilnehmerliste](/peertube-plugin-livechat/images/open_participants_list." +"png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "You can see that some participants have special rights (moderator, owner, ...)." -msgstr "Sie können sehen, dass einige Teilnehmer besondere Rechte haben (Moderator, Eigentümer, ...)." +msgid "" +"You can see that some participants have special rights (moderator, " +"owner, ...)." +msgstr "" +"Sie können sehen, dass einige Teilnehmer besondere Rechte haben (Moderator, " +"Eigentümer, ...)." #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4483,8 +7050,17 @@ msgstr "Chat Dropdown Menü" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "There is a dropdown menu on the top of the chat, with some advanced features. This is especially useful for [moderation features](/peertube-plugin-livechat/documentation/user/streamers/moderation). Available features depends on your access level." -msgstr "Es gibt ein Dropdownmenü am oberen Rand des Chats, das einige erweiterte Funktionen enthält. Dies ist besonders nützlich für die [Moderationsfunktionen](/peertube-plugin-livechat/de/documentation/user/streamers/moderation). Die verfügbaren Funktionen hängen von Ihrer Zugriffsstufe ab." +msgid "" +"There is a dropdown menu on the top of the chat, with some advanced " +"features. This is especially useful for [moderation features](/peertube-" +"plugin-livechat/documentation/user/streamers/moderation). Available " +"features depends on your access level." +msgstr "" +"Es gibt ein Dropdownmenü am oberen Rand des Chats, das einige erweiterte " +"Funktionen enthält. Dies ist besonders nützlich für die " +"[Moderationsfunktionen](/peertube-plugin-livechat/de/documentation/user/" +"streamers/moderation). Die verfügbaren Funktionen hängen von Ihrer " +"Zugriffsstufe ab." #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4494,19 +7070,29 @@ msgstr "Vollbild öffnen" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "On top of the chat, there is a button to open the chat in fullscreen. This will open a new browser tab with the following content:" -msgstr "Oben im Chat gibt es eine Schaltfläche, um den Chat im Vollbildmodus zu öffnen. Dadurch wird eine neue Browser-Registerkarte mit dem folgenden Inhalt geöffnet:" +msgid "" +"On top of the chat, there is a button to open the chat in fullscreen. This " +"will open a new browser tab with the following content:" +msgstr "" +"Oben im Chat gibt es eine Schaltfläche, um den Chat im Vollbildmodus zu " +"öffnen. Dadurch wird eine neue Browser-Registerkarte mit dem folgenden " +"Inhalt geöffnet:" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md #: support/documentation/content/en/intro/_index.md -msgid "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" -msgstr "![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px)" +msgid "" +"![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen." +"png?classes=shadow,border&height=200px)" +msgstr "" +"![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen." +"png?classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md msgid "It can be easier to chat using a full browser tab." -msgstr "Es kann einfacher sein, in einer seperaten Browser-Registerkarte zu chatten." +msgstr "" +"Es kann einfacher sein, in einer seperaten Browser-Registerkarte zu chatten." #. type: Title ## #: support/documentation/content/en/documentation/user/viewers.md @@ -4516,8 +7102,12 @@ msgstr "Spitznamen ändern" #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md -msgid "You can change your nickname by typing `/nick your_new_nickname` in the message field." -msgstr "Sie können Ihren Spitznamen ändern, indem Sie `/nick ihr_neuer_spitzname` in das Nachrichtenfeld eingeben." +msgid "" +"You can change your nickname by typing `/nick your_new_nickname` in the " +"message field." +msgstr "" +"Sie können Ihren Spitznamen ändern, indem Sie `/nick ihr_neuer_spitzname` in " +"das Nachrichtenfeld eingeben." #. type: Plain text #: support/documentation/content/en/documentation/user/viewers.md @@ -4538,33 +7128,66 @@ msgstr "XMPP Clients" #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "This chat plugin relies on the XMPP protocol (also known as Jabber). It is therefore possible to connect to the chats using [XMPP client software](https://en.wikipedia.org/wiki/XMPP#Clients). This can be useful for example to facilitate moderation operations." -msgstr "Dieses Chat-Plugin basiert auf dem XMPP-Protokoll (auch bekannt als Jabber). Es ist daher möglich, eine Verbindung zu den Chats herzustellen mit [XMPP-Client-Software](https://en.wikipedia.org/wiki/XMPP#Clients). Dies kann zum Beispiel nützlich sein, um Moderationsvorgänge zu erleichtern." +msgid "" +"This chat plugin relies on the XMPP protocol (also known as Jabber). It is " +"therefore possible to connect to the chats using [XMPP client software]" +"(https://en.wikipedia.org/wiki/XMPP#Clients). This can be useful for " +"example to facilitate moderation operations." +msgstr "" +"Dieses Chat-Plugin basiert auf dem XMPP-Protokoll (auch bekannt als Jabber). " +"Es ist daher möglich, eine Verbindung zu den Chats herzustellen mit [XMPP-" +"Client-Software](https://en.wikipedia.org/wiki/XMPP#Clients). Dies kann zum " +"Beispiel nützlich sein, um Moderationsvorgänge zu erleichtern." #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "The features described on this page must be enabled and configured by your Peertube instance's administrators. You may therefore not have access to them." -msgstr "Die auf dieser Seite beschriebenen Funktionen müssen von den Administratoren Ihrer Peertube-Instanz aktiviert und konfiguriert werden. Sie haben daher möglicherweise keinen Zugriff auf sie." +msgid "" +"The features described on this page must be enabled and configured by your " +"Peertube instance's administrators. You may therefore not have access to " +"them." +msgstr "" +"Die auf dieser Seite beschriebenen Funktionen müssen von den Administratoren " +"Ihrer Peertube-Instanz aktiviert und konfiguriert werden. Sie haben daher " +"möglicherweise keinen Zugriff auf sie." #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "If this feature is enabled on your instance, you can connect to Peertube chats using any XMPP account." -msgstr "Wenn diese Funktion in Ihrer Instanz aktiviert ist, können Sie mit jedem XMPP-Konto eine Verbindung zu Peertube Chats über ein beliebiges XMPP-Konto verbinden." +msgid "" +"If this feature is enabled on your instance, you can connect to Peertube " +"chats using any XMPP account." +msgstr "" +"Wenn diese Funktion in Ihrer Instanz aktiviert ist, können Sie mit jedem " +"XMPP-Konto eine Verbindung zu Peertube Chats über ein beliebiges XMPP-Konto " +"verbinden." #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "To get the address of the room you want to join, you can use the \"share chat\" button that is located above the chat:" -msgstr "Um die Adresse des Raums, dem Sie beitreten möchten, zu erhalten, können Sie die Schaltfläche \"Chat teilen\" verwenden die sich über dem Chat befindet:" +msgid "" +"To get the address of the room you want to join, you can use the \"share " +"chat\" button that is located above the chat:" +msgstr "" +"Um die Adresse des Raums, dem Sie beitreten möchten, zu erhalten, können Sie " +"die Schaltfläche \"Chat teilen\" verwenden die sich über dem Chat befindet:" #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "![Share button](/peertube-plugin-livechat/images/share_button.png?classes=shadow,border&height=200px)" -msgstr "![Teilen Schaltfläche](/peertube-plugin-livechat/images/share_button.png?classes=shadow,border&height=200px)" +msgid "" +"![Share button](/peertube-plugin-livechat/images/share_button.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Teilen Schaltfläche](/peertube-plugin-livechat/images/share_button.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "By default, the share button is only visible to the owner of the video, and the admins/moderators of the instance. However, admins can decide to display this button for everyone." -msgstr "Standardmäßig ist die Schaltfläche \"Freigeben\" nur für den Eigentümer des Videos und die Admins/Moderatoren der Instanz. Administratoren können jedoch festlegen, dass diese Schaltfläche für alle angezeigt wird." +msgid "" +"By default, the share button is only visible to the owner of the video, and " +"the admins/moderators of the instance. However, admins can decide to " +"display this button for everyone." +msgstr "" +"Standardmäßig ist die Schaltfläche \"Freigeben\" nur für den Eigentümer des " +"Videos und die Admins/Moderatoren der Instanz. Administratoren können jedoch " +"festlegen, dass diese Schaltfläche für alle angezeigt wird." #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md @@ -4573,13 +7196,22 @@ msgstr "Wählen Sie dann \"Verbinden über XMPP\":" #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "![Share XMPP](/peertube-plugin-livechat/images/share_xmpp_dialog.png?classes=shadow,border&height=200px)" -msgstr "![XMPP Link teilen](/peertube-plugin-livechat/images/share_xmpp_dialog.png?classes=shadow,border&height=200px)" +msgid "" +"![Share XMPP](/peertube-plugin-livechat/images/share_xmpp_dialog.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![XMPP Link teilen](/peertube-plugin-livechat/images/share_xmpp_dialog.png?" +"classes=shadow,border&height=200px)" #. type: Plain text #: support/documentation/content/en/documentation/user/xmpp_clients.md -msgid "Then you just have to click on \"open\" or copy/paste the address of the chat room into your XMPP client (using the \"join a room\" feature)." -msgstr "Dann müssen Sie nur noch auf \"Öffnen\" klicken oder die Adresse des Chatraums in Ihren XMPP-Client kopieren/einfügen (mit der Funktion \"einem Raum beitreten\")." +msgid "" +"Then you just have to click on \"open\" or copy/paste the address of the " +"chat room into your XMPP client (using the \"join a room\" feature)." +msgstr "" +"Dann müssen Sie nur noch auf \"Öffnen\" klicken oder die Adresse des " +"Chatraums in Ihren XMPP-Client kopieren/einfügen (mit der Funktion \"einem " +"Raum beitreten\")." #. type: Title # #: support/documentation/content/en/_index.md @@ -4589,8 +7221,15 @@ msgstr "PeerTube plugin livechat" #. type: Plain text #: support/documentation/content/en/_index.md -msgid "You can use the language selector in the left menu to view this documentation in different languages. Some translations are missing or incomplete. In this case, you'll see the English version of the text." -msgstr "Sie können die Sprachauswahl im linken Menü verwenden, um diese Dokumentation in verschiedenen Sprachen anzuzeigen. Einige Übersetzungen fehlen oder sind unvollständig. In diesem Fall sehen Sie die englische Version des Textes." +msgid "" +"You can use the language selector in the left menu to view this " +"documentation in different languages. Some translations are missing or " +"incomplete. In this case, you'll see the English version of the text." +msgstr "" +"Sie können die Sprachauswahl im linken Menü verwenden, um diese " +"Dokumentation in verschiedenen Sprachen anzuzeigen. Einige Übersetzungen " +"fehlen oder sind unvollständig. In diesem Fall sehen Sie die englische " +"Version des Textes." #. type: Plain text #: support/documentation/content/en/_index.md @@ -4599,18 +7238,37 @@ msgstr "Willkommen in der **Peertube Livechat Plugin** Dokumentation." #. type: Plain text #: support/documentation/content/en/_index.md -msgid "[Peertube](https://joinpeertube.org/) is a decentralized streaming platform, that can provide both live streaming and VOD (Video On Demand) features. The present plugin adds chatting capatibilities to your Peertube installation, allowing viewers to interract with streamers." -msgstr "[Peertube](https://joinpeertube.org/) ist eine dezentrale Streaming-Plattform, die sowohl Live-Streaming als auch VOD (Video On Demand) anbieten kann. Das vorliegende Plugin fügt Ihrer Peertube-Installation Chat-Funktionen hinzu, die es den Zuschauern ermöglichen, sich mit den Streamern auszutauschen." +msgid "" +"[Peertube](https://joinpeertube.org/) is a decentralized streaming platform, " +"that can provide both live streaming and VOD (Video On Demand) features. " +"The present plugin adds chatting capatibilities to your Peertube " +"installation, allowing viewers to interract with streamers." +msgstr "" +"[Peertube](https://joinpeertube.org/) ist eine dezentrale Streaming-" +"Plattform, die sowohl Live-Streaming als auch VOD (Video On Demand) anbieten " +"kann. Das vorliegende Plugin fügt Ihrer Peertube-Installation Chat-" +"Funktionen hinzu, die es den Zuschauern ermöglichen, sich mit den Streamern " +"auszutauschen." #. type: Plain text #: support/documentation/content/en/_index.md -msgid "To have a glimpse on this plugin capabilities, checkout the [introduction](/peertube-plugin-livechat/intro/). For more precise informations, please find bellow the summary of this documentation." -msgstr "Um einen Einblick in die Fähigkeiten dieses Plugins zu bekommen, schauen Sie sich die [Einführung](/peertube-plugin-livechat/de/intro/) an. Für genauere Informationen, finden Sie unten die Zusammenfassung dieser Dokumentation." +msgid "" +"To have a glimpse on this plugin capabilities, checkout the [introduction](/" +"peertube-plugin-livechat/intro/). For more precise informations, please find " +"bellow the summary of this documentation." +msgstr "" +"Um einen Einblick in die Fähigkeiten dieses Plugins zu bekommen, schauen Sie " +"sich die [Einführung](/peertube-plugin-livechat/de/intro/) an. Für genauere " +"Informationen, finden Sie unten die Zusammenfassung dieser Dokumentation." #. type: Plain text #: support/documentation/content/en/_index.md -msgid "You can use the searchbox in the left menu to quickly find specific documentation parts." -msgstr "Sie können das Suchfeld im linken Menü verwenden, um bestimmte Teile der Dokumentation schnell zu finden." +msgid "" +"You can use the searchbox in the left menu to quickly find specific " +"documentation parts." +msgstr "" +"Sie können das Suchfeld im linken Menü verwenden, um bestimmte Teile der " +"Dokumentation schnell zu finden." #. type: Title ## #: support/documentation/content/en/intro/_index.md @@ -4620,33 +7278,61 @@ msgstr "Was ist das Livechat Plugin?" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "This [Peertube](https://joinpeertube.org/) plugin is meant to provide a chat system for Peertube videos." -msgstr "Dieses [Peertube](https://joinpeertube.org/) Plugin ist dafür gedacht, ein Chatsystem für Peertube-Videos bereitzustellen." +msgid "" +"This [Peertube](https://joinpeertube.org/) plugin is meant to provide a chat " +"system for Peertube videos." +msgstr "" +"Dieses [Peertube](https://joinpeertube.org/) Plugin ist dafür gedacht, ein " +"Chatsystem für Peertube-Videos bereitzustellen." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "By default, once you have installed the plugin on your Peertube instance, a chat room will automatically be created for each live stream." -msgstr "Sobald Sie das Plugin auf Ihrer Peertube-Instanz installiert haben, wird standardmäßig für jeden Live-Stream automatisch ein Chatroom erstellt." +msgid "" +"By default, once you have installed the plugin on your Peertube instance, a " +"chat room will automatically be created for each live stream." +msgstr "" +"Sobald Sie das Plugin auf Ihrer Peertube-Instanz installiert haben, wird " +"standardmäßig für jeden Live-Stream automatisch ein Chatroom erstellt." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "On the following screenshot, you can see a classic Peertube video page, with a chat room on the right (click on the picture to view it full screen):" -msgstr "Auf dem folgenden Bildschirmfoto sehen Sie eine klassische Peertube-Videoseite mit einem Chatroom auf der rechten Seite (klicken Sie auf das Bild, um es im Vollbildmodus anzuzeigen):" +msgid "" +"On the following screenshot, you can see a classic Peertube video page, with " +"a chat room on the right (click on the picture to view it full screen):" +msgstr "" +"Auf dem folgenden Bildschirmfoto sehen Sie eine klassische Peertube-" +"Videoseite mit einem Chatroom auf der rechten Seite (klicken Sie auf das " +"Bild, um es im Vollbildmodus anzuzeigen):" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "The chat room will be accessible for all viewers, even those who don't have an account on your instance. Those \"anonymous\" users just have to choose a nickname before they can begin talking in the chat." -msgstr "Der Chat-Raum wird für alle Zuschauer zugänglich sein, auch für diejenigen, die kein Konto auf Ihrer Instanz haben. Diese \"anonymen\" Benutzer müssen nur einen Spitznamen wählen, bevor sie im Chat sprechen können." +msgid "" +"The chat room will be accessible for all viewers, even those who don't have " +"an account on your instance. Those \"anonymous\" users just have to choose a " +"nickname before they can begin talking in the chat." +msgstr "" +"Der Chat-Raum wird für alle Zuschauer zugänglich sein, auch für diejenigen, " +"die kein Konto auf Ihrer Instanz haben. Diese \"anonymen\" Benutzer müssen " +"nur einen Spitznamen wählen, bevor sie im Chat sprechen können." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "By default, the chat is displayed next to the video. But you can open it in another browser tab, using the button on top of it :" -msgstr "Standardmäßig wird der Chat neben dem Video angezeigt. Sie können ihn aber in einem anderen Browser-Tab öffnen, indem Sie die Schaltfläche oben verwenden:" +msgid "" +"By default, the chat is displayed next to the video. But you can open it in " +"another browser tab, using the button on top of it :" +msgstr "" +"Standardmäßig wird der Chat neben dem Video angezeigt. Sie können ihn aber " +"in einem anderen Browser-Tab öffnen, indem Sie die Schaltfläche oben " +"verwenden:" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "You can test the livechat plugin with this [demo page](https://www.yiny.org/w/399a8d13-d4cf-4ef2-b843-98530a8ccbae)." -msgstr "Sie können das Livechat-Plugin mit dieser [Demo-Seite](https://www.yiny.org/w/399a8d13-d4cf-4ef2-b843-98530a8ccbae) testen." +msgid "" +"You can test the livechat plugin with this [demo page](https://www.yiny.org/" +"w/399a8d13-d4cf-4ef2-b843-98530a8ccbae)." +msgstr "" +"Sie können das Livechat-Plugin mit dieser [Demo-Seite](https://www.yiny.org/" +"w/399a8d13-d4cf-4ef2-b843-98530a8ccbae) testen." #. type: Title ## #: support/documentation/content/en/intro/_index.md @@ -4656,13 +7342,25 @@ msgstr "Installation" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "As a Peertube administrator, you can setup this plugin on your instance simply by using the Peertube plugin marketplace included in the administration interface. Search for \"livechat\", then click \"install\": that's it!" -msgstr "Als Peertube-Administrator können Sie dieses Plugin auf Ihrer Instanz einrichten, indem Sie einfach den Peertube-Plugin-Marktplatz in der Administrationsoberfläche nutzen. Suchen Sie nach \"livechat\" und klicken Sie dann auf \"installieren\": Das war's!" +msgid "" +"As a Peertube administrator, you can setup this plugin on your instance " +"simply by using the Peertube plugin marketplace included in the " +"administration interface. Search for \"livechat\", then click \"install\": " +"that's it!" +msgstr "" +"Als Peertube-Administrator können Sie dieses Plugin auf Ihrer Instanz " +"einrichten, indem Sie einfach den Peertube-Plugin-Marktplatz in der " +"Administrationsoberfläche nutzen. Suchen Sie nach \"livechat\" und klicken " +"Sie dann auf \"installieren\": Das war's!" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "![Livechat installation](/peertube-plugin-livechat/images/installation.png?classes=shadow,border&height=200px)" -msgstr "![Livechat-Installation](/peertube-plugin-livechat/images/installation.png?classes=shadow,border&height=200px)" +msgid "" +"![Livechat installation](/peertube-plugin-livechat/images/installation.png?" +"classes=shadow,border&height=200px)" +msgstr "" +"![Livechat-Installation](/peertube-plugin-livechat/images/installation.png?" +"classes=shadow,border&height=200px)" #. type: Title ## #: support/documentation/content/en/intro/_index.md @@ -4672,48 +7370,105 @@ msgstr "Livechat Funktionen" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "The plugin has many advanced features. As it is using the [XMPP](https://xmpp.org/) standard \"under the hood\", it is possible for Peertube administrators to allow advanced usages (connection using XMPP clients, chatbots, bridge to other chat protocols, ...). More information in the relevant sections of this documentation." -msgstr "Das Plugin hat viele erweiterte Funktionen. Da es den [XMPP](https://xmpp.org/)-Standard \"unter der Haube\" verwendet, ist es für Peertube-Administratoren möglich, fortgeschrittene Nutzungen zu ermöglichen (Verbindung über XMPP-Clients, Chatbots, Brücken zu anderen Chat-Protokollen, ...). Weitere Informationen finden Sie in den entsprechenden Abschnitten dieser Dokumentation." +msgid "" +"The plugin has many advanced features. As it is using the [XMPP](https://" +"xmpp.org/) standard \"under the hood\", it is possible for Peertube " +"administrators to allow advanced usages (connection using XMPP clients, " +"chatbots, bridge to other chat protocols, ...). More information in the " +"relevant sections of this documentation." +msgstr "" +"Das Plugin hat viele erweiterte Funktionen. Da es den [XMPP](https://xmpp." +"org/)-Standard \"unter der Haube\" verwendet, ist es für Peertube-" +"Administratoren möglich, fortgeschrittene Nutzungen zu ermöglichen " +"(Verbindung über XMPP-Clients, Chatbots, Brücken zu anderen Chat-" +"Protokollen, ...). Weitere Informationen finden Sie in den entsprechenden " +"Abschnitten dieser Dokumentation." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "Peertube is part of the fediverse: you can create a network of Peertube instances, sharing content between them." -msgstr "Peertube ist Teil des fediverse: Sie können ein Netzwerk von Peertube-Instanzen erstellen und Inhalte zwischen ihnen austauschen." +msgid "" +"Peertube is part of the fediverse: you can create a network of Peertube " +"instances, sharing content between them." +msgstr "" +"Peertube ist Teil des fediverse: Sie können ein Netzwerk von Peertube-" +"Instanzen erstellen und Inhalte zwischen ihnen austauschen." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "This plugin can handle federation: when viewing a livestream from a remote instance, you will join the chat room with your local account. You will be automatically connected with your current nickname and avatar." -msgstr "Dieses Plugin kann Föderation handhaben: Wenn Sie einen Livestream von einer entfernten Instanz ansehen, werden Sie dem Chatraum mit Ihrem lokalen Konto beitreten. Sie werden automatisch mit Ihrem aktuellen Nickname und Avatar verbunden." +msgid "" +"This plugin can handle federation: when viewing a livestream from a remote " +"instance, you will join the chat room with your local account. You will be " +"automatically connected with your current nickname and avatar." +msgstr "" +"Dieses Plugin kann Föderation handhaben: Wenn Sie einen Livestream von einer " +"entfernten Instanz ansehen, werden Sie dem Chatraum mit Ihrem lokalen Konto " +"beitreten. Sie werden automatisch mit Ihrem aktuellen Nickname und Avatar " +"verbunden." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "Of course, for the federation to work, the plugin must be installed on both instances." -msgstr "Damit der Zusammenschluss funktioniert, muss das Plugin natürlich auf beiden Instanzen installiert sein." +msgid "" +"Of course, for the federation to work, the plugin must be installed on both " +"instances." +msgstr "" +"Damit der Zusammenschluss funktioniert, muss das Plugin natürlich auf beiden " +"Instanzen installiert sein." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "Some times, you have to protect your community from bad people. As an instance administrator, you can choose to disallow federation for the livechat plugin. If remote actors behave badly, streamers, moderators and administrators can ban or mute users." -msgstr "Manchmal muss man seine Community vor bösen Menschen schützen. Als Instanzadministrator können Sie die Föderation für das Livechat-Plugin deaktivieren. Wenn sich entfernte Akteure schlecht benehmen, können Streamer, Moderatoren und Administratoren Nutzer sperren oder stummschalten." +msgid "" +"Some times, you have to protect your community from bad people. As an " +"instance administrator, you can choose to disallow federation for the " +"livechat plugin. If remote actors behave badly, streamers, moderators and " +"administrators can ban or mute users." +msgstr "" +"Manchmal muss man seine Community vor bösen Menschen schützen. Als " +"Instanzadministrator können Sie die Föderation für das Livechat-Plugin " +"deaktivieren. Wenn sich entfernte Akteure schlecht benehmen, können " +"Streamer, Moderatoren und Administratoren Nutzer sperren oder stummschalten." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "This plugin comes with a built-in [chat bot](/peertube-plugin-livechat/documentation/user/streamers/bot/). Check its documentation for more information." -msgstr "Dieses Plugin verfügt über einen eingebauten [Chatbot](/peertube-plugin-livechat/de/documentation/user/streamers/bot). Weitere Informationen dazu finden Sie in der Dokumentation." +msgid "" +"This plugin comes with a built-in [chat bot](/peertube-plugin-livechat/" +"documentation/user/streamers/bot/). Check its documentation for more " +"information." +msgstr "" +"Dieses Plugin verfügt über einen eingebauten [Chatbot](/peertube-plugin-" +"livechat/de/documentation/user/streamers/bot). Weitere Informationen dazu " +"finden Sie in der Dokumentation." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "You can also plug in any other XMPP chat bot, using [XMPP External Components](https://prosody.im/doc/components). To do so, you just have to configure External Components access in the [plugin settings](/peertube-plugin-livechat/documentation/admin/settings)." -msgstr "Sie können auch jeden anderen XMPP-Chatbot einbinden, indem Sie [XMPP External Components](https://prosody.im/doc/components) verwenden. Dazu müssen Sie nur den Zugriff auf externe Komponenten in den [Plugin-Einstellungen](/peertube-plugin-livechat/de/documentation/admin/settings) konfigurieren." +msgid "" +"You can also plug in any other XMPP chat bot, using [XMPP External " +"Components](https://prosody.im/doc/components). To do so, you just have to " +"configure External Components access in the [plugin settings](/peertube-" +"plugin-livechat/documentation/admin/settings)." +msgstr "" +"Sie können auch jeden anderen XMPP-Chatbot einbinden, indem Sie [XMPP " +"External Components](https://prosody.im/doc/components) verwenden. Dazu " +"müssen Sie nur den Zugriff auf externe Komponenten in den [Plugin-" +"Einstellungen](/peertube-plugin-livechat/de/documentation/admin/settings) " +"konfigurieren." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "When joining a room, you will see previous messages. Even those sent before you joined the room." -msgstr "Wenn Sie einem Raum beitreten, sehen Sie frühere Nachrichten. Auch solche, die gesendet wurden, bevor Sie dem Raum beigetreten sind." +msgid "" +"When joining a room, you will see previous messages. Even those sent before " +"you joined the room." +msgstr "" +"Wenn Sie einem Raum beitreten, sehen Sie frühere Nachrichten. Auch solche, " +"die gesendet wurden, bevor Sie dem Raum beigetreten sind." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "This behaviour can be changed room by room, and default retention duration can be chosen by instance's administrators." -msgstr "Dieses Verhalten kann von Raum zu Raum geändert werden, und die Standardverweildauer kann von den Instanzadministratoren festgelegt werden." +msgid "" +"This behaviour can be changed room by room, and default retention duration " +"can be chosen by instance's administrators." +msgstr "" +"Dieses Verhalten kann von Raum zu Raum geändert werden, und die " +"Standardverweildauer kann von den Instanzadministratoren festgelegt werden." #. type: Title ## #: support/documentation/content/en/intro/_index.md @@ -4723,18 +7478,34 @@ msgstr "Integrieren Sie den Chat in Ihren Live-Stream" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "When using software as [OBS](https://obsproject.com) for you live stream, you can embed the chat in the video stream. This is for example useful for replays." -msgstr "Wenn Sie Software wie [OBS](https://obsproject.com) für Ihren Live-Stream verwenden, können Sie den Chat in den Videostream einbetten. Dies ist zum Beispiel für Wiederholungen nützlich." +msgid "" +"When using software as [OBS](https://obsproject.com) for you live stream, " +"you can embed the chat in the video stream. This is for example useful for " +"replays." +msgstr "" +"Wenn Sie Software wie [OBS](https://obsproject.com) für Ihren Live-Stream " +"verwenden, können Sie den Chat in den Videostream einbetten. Dies ist zum " +"Beispiel für Wiederholungen nützlich." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "In the following screenshot, you can see a live replay, where the chat content is embeded on bottom of the video:" -msgstr "Im folgenden Screenshot sehen Sie eine Live-Wiedergabe, bei der der Chat-Inhalt am unteren Rand des Videos eingebettet ist:" +msgid "" +"In the following screenshot, you can see a live replay, where the chat " +"content is embeded on bottom of the video:" +msgstr "" +"Im folgenden Screenshot sehen Sie eine Live-Wiedergabe, bei der der Chat-" +"Inhalt am unteren Rand des Videos eingebettet ist:" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "In the following screenshot, you can see an OBS setup, where the chat is included as a source in the current scene (background color can be changed, and can be transparent):" -msgstr "Im folgenden Screenshot sehen Sie ein OBS-Setup, bei dem der Chat als Quelle in die aktuelle Szene eingebunden ist (die Hintergrundfarbe kann geändert werden und kann transparent sein):" +msgid "" +"In the following screenshot, you can see an OBS setup, where the chat is " +"included as a source in the current scene (background color can be changed, " +"and can be transparent):" +msgstr "" +"Im folgenden Screenshot sehen Sie ein OBS-Setup, bei dem der Chat als Quelle " +"in die aktuelle Szene eingebunden ist (die Hintergrundfarbe kann geändert " +"werden und kann transparent sein):" #. type: Title ## #: support/documentation/content/en/intro/_index.md @@ -4744,18 +7515,34 @@ msgstr "Andere Verwendungen" #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "By default, each streamer will be able to activate/deactivate the chat for their live streams." -msgstr "Standardmäßig kann jeder Streamer den Chat für seine Live-Streams aktivieren/deaktivieren." +msgid "" +"By default, each streamer will be able to activate/deactivate the chat for " +"their live streams." +msgstr "" +"Standardmäßig kann jeder Streamer den Chat für seine Live-Streams aktivieren/" +"deaktivieren." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "But on the instance level, administrators can choose to activate the chat for all videos (live and/or VOD)." -msgstr "Auf der Instanzebene können Administratoren jedoch den Chat für alle Videos (live und/oder VOD) aktivieren." +msgid "" +"But on the instance level, administrators can choose to activate the chat " +"for all videos (live and/or VOD)." +msgstr "" +"Auf der Instanzebene können Administratoren jedoch den Chat für alle Videos " +"(live und/oder VOD) aktivieren." #. type: Plain text #: support/documentation/content/en/intro/_index.md -msgid "You can even activate the chat for specific VOD videos. This is how the [demo](https://www.yiny.org/w/399a8d13-d4cf-4ef2-b843-98530a8ccbae) page works: it is not a live stream, but I have activated the chat specifically for this video." -msgstr "Sie können den Chat sogar für bestimmte VOD-Videos aktivieren. So funktioniert die [Demonstrationsseite](https://www.yiny.org/w/399a8d13-d4cf-4ef2-b843-98530a8ccbae): Es handelt sich nicht um einen Live-Stream, aber ich habe den Chat speziell für dieses Video aktiviert." +msgid "" +"You can even activate the chat for specific VOD videos. This is how the " +"[demo](https://www.yiny.org/w/399a8d13-d4cf-4ef2-b843-98530a8ccbae) page " +"works: it is not a live stream, but I have activated the chat specifically " +"for this video." +msgstr "" +"Sie können den Chat sogar für bestimmte VOD-Videos aktivieren. So " +"funktioniert die [Demonstrationsseite](https://www.yiny.org/w/399a8d13-" +"d4cf-4ef2-b843-98530a8ccbae): Es handelt sich nicht um einen Live-Stream, " +"aber ich habe den Chat speziell für dieses Video aktiviert." #. type: Yaml Front Matter Hash Value: description #: support/documentation/content/en/issues/_index.md @@ -4771,28 +7558,44 @@ msgstr "Fehlerverfolgung (Bug tracking) und neue Funktionen" #. type: Plain text #: support/documentation/content/en/issues/_index.md -msgid "If you have new feature requests, bugs, or difficulties to setup the plugin, you can use the [Github issue tracker](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues). If possible, try using english or french." -msgstr "Wenn Sie neue Funktionswünsche, Fehler (Bugs) oder Schwierigkeiten bei der Einrichtung des Plugins haben, können Sie den [Github issue tracker](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues) verwenden." +msgid "" +"If you have new feature requests, bugs, or difficulties to setup the plugin, " +"you can use the [Github issue tracker](https://github.com/JohnXLivingston/" +"peertube-plugin-livechat/issues). If possible, try using english or french." +msgstr "" +"Wenn Sie neue Funktionswünsche, Fehler (Bugs) oder Schwierigkeiten bei der " +"Einrichtung des Plugins haben, können Sie den [Github issue tracker](https://" +"github.com/JohnXLivingston/peertube-plugin-livechat/issues) verwenden." #. type: Plain text #: support/documentation/content/en/issues/_index.md -msgid "To have a glimpse to the roadmap for upcoming features, please refer to:" +msgid "" +"To have a glimpse to the roadmap for upcoming features, please refer to:" msgstr "Einen Einblick in die Roadmap für kommende Funktionen finden Sie hier:" #. type: Bullet: '- ' #: support/documentation/content/en/issues/_index.md -msgid "this [github project](https://github.com/users/JohnXLivingston/projects/1)." +msgid "" +"this [github project](https://github.com/users/JohnXLivingston/projects/1)." msgstr "[Github Project](https://github.com/users/JohnXLivingston/projects/1)." #. type: Bullet: '- ' #: support/documentation/content/en/issues/_index.md -msgid "the [milestones on github](https://github.com/JohnXLivingston/peertube-plugin-livechat/milestones)." -msgstr "[Meilensteine auf Github](https://github.com/JohnXLivingston/peertube-plugin-livechat/milestones)." +msgid "" +"the [milestones on github](https://github.com/JohnXLivingston/peertube-" +"plugin-livechat/milestones)." +msgstr "" +"[Meilensteine auf Github](https://github.com/JohnXLivingston/peertube-plugin-" +"livechat/milestones)." #. type: Plain text #: support/documentation/content/en/issues/_index.md -msgid "If you are a webdesigner or a ConverseJS/Prosody/XMPP expert, and want to help improve this plugin, you are welcome." -msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind und helfen wollen, dieses Plugin zu verbessern, sind Sie gerne willkommen." +msgid "" +"If you are a webdesigner or a ConverseJS/Prosody/XMPP expert, and want to " +"help improve this plugin, you are welcome." +msgstr "" +"Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind und " +"helfen wollen, dieses Plugin zu verbessern, sind Sie gerne willkommen." #, fuzzy, no-wrap #~ msgid "" @@ -4801,33 +7604,55 @@ msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind u #~ msgstr "Das Plugin wird von [John Livingston](https://www.john-livingston.fr/) betrieben." #, fuzzy -#~ msgid "title: \"External Authentication\" description: \"Plugin Peertube Livechat settings - External Authentication\" weight: 15 chapter: false" +#~ msgid "" +#~ "title: \"External Authentication\" description: \"Plugin Peertube " +#~ "Livechat settings - External Authentication\" weight: 15 chapter: false" #~ msgstr "Plugin Peertube Livechat Einstellungen - Externe Authentifizierung" #, fuzzy -#~ msgid "title: \"User documentation\" description: \"Plugin peertube-plugin-livechat user documentation\" weight: 10 chapter: false" -#~ msgstr "Für die Benutzerdokumentation, siehe [Benutzerdokumentation](/peertube-plugin-livechat/de/documentation/user/viewers/)" +#~ msgid "" +#~ "title: \"User documentation\" description: \"Plugin peertube-plugin-" +#~ "livechat user documentation\" weight: 10 chapter: false" +#~ msgstr "" +#~ "Für die Benutzerdokumentation, siehe [Benutzerdokumentation](/peertube-" +#~ "plugin-livechat/de/documentation/user/viewers/)" #, fuzzy -#~ msgid "title: \"Some basics\" description: \"Some basics about how to setup and use the chat for your live stream\" weight: 10 chapter: false" -#~ msgstr "Einige grundlegende Informationen zur Einrichtung und Nutzung des Chats für Ihren Livestream" +#~ msgid "" +#~ "title: \"Some basics\" description: \"Some basics about how to setup and " +#~ "use the chat for your live stream\" weight: 10 chapter: false" +#~ msgstr "" +#~ "Einige grundlegende Informationen zur Einrichtung und Nutzung des Chats " +#~ "für Ihren Livestream" #, fuzzy -#~ msgid "title: \"Timers\" description: \"The bot can send periodically some messages.\" weight: 20 chapter: false" -#~ msgstr "Der Chatbot kann in regelmäßigen Abständen einige Nachrichten senden." +#~ msgid "" +#~ "title: \"Timers\" description: \"The bot can send periodically some " +#~ "messages.\" weight: 20 chapter: false" +#~ msgstr "" +#~ "Der Chatbot kann in regelmäßigen Abständen einige Nachrichten senden." #, fuzzy -#~ msgid "title: \"Moderation\" description: \"Plugin peertube-plugin-livechat advanced moderation features\" weight: 60 chapter: false" +#~ msgid "" +#~ "title: \"Moderation\" description: \"Plugin peertube-plugin-livechat " +#~ "advanced moderation features\" weight: 60 chapter: false" #~ msgstr "Plugin peertube-plugin-livechat Erweiterte Moderationsfunktionen" -#~ msgid "All instance moderators and admins will be owner of created chat rooms. The video owner will be admin in the chat room." -#~ msgstr "Alle Instanzmoderatoren und Admins sind Eigentümer der erstellten Chaträume. Der Eigentümer des Videos wird der Administrator des Chatraums sein." +#~ msgid "" +#~ "All instance moderators and admins will be owner of created chat rooms. " +#~ "The video owner will be admin in the chat room." +#~ msgstr "" +#~ "Alle Instanzmoderatoren und Admins sind Eigentümer der erstellten " +#~ "Chaträume. Der Eigentümer des Videos wird der Administrator des " +#~ "Chatraums sein." #~ msgid "So can also use provider such as Google, Facebook, ..." #~ msgstr "So können auch Anbieter wie Google, Facebook, ... genutzt werden." #~ msgid "This features comes with the livechat plugin version 8.3.0." -#~ msgstr "Diese Funktionen werden mit dem Livechatplugin Version 8.3.0 verfügbar sein." +#~ msgstr "" +#~ "Diese Funktionen werden mit dem Livechatplugin Version 8.3.0 verfügbar " +#~ "sein." #, no-wrap #~ msgid "Default channel value" @@ -4837,11 +7662,38 @@ msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind u #~ msgid "Modifying the value for an existing chatroom" #~ msgstr "Ändern des Wertes für einen bestehenden Chatraum" -#~ msgid "As there was a security issue with livechat plugin v8.3.1 (leaking the full list of instance moderator and administrators), the following only works for users that are also administrator or moderator on the Peertube instance. An alternative method to set this for existing chatrooms will be provided in a later livechat version, when the issue will be properly fixed. For now, if you are not moderator or administrator on the Peertube instance, you can change the slow mode setting by deleting your room (it will be recreated with the value set in the channel options). This solution is not optimal, and we apologize for the inconvenience." -#~ msgstr "Da es ein Sicherheitsproblem mit dem Livechat-Plugin v8.3.1 gab (Die vollständigen Liste der Moderatoren und Administratoren der Instanz wurde angezeigt), funktioniert das Folgende nur für Benutzer, die auch Administrator oder Moderator der Peertube-Instanz sind. Eine alternative Methode, um dies für bestehende Chaträume einzustellen, wird in einer späteren Livechat-Version zur Verfügung gestellt werden, wenn das Problem richtig behoben ist. Im Moment können Sie, wenn Sie nicht Moderator oder Administrator auf der Peertube-Instanz sind, die Einstellung des langsamen Modus nur ändern, indem Sie Ihren Raum löschen (er wird mit dem in den Kanaloptionen eingestellten Wert neu erstellt). Diese Lösung ist nicht optimal, und wir entschuldigen uns für die Unannehmlichkeiten." +#~ msgid "" +#~ "As there was a security issue with livechat plugin v8.3.1 (leaking the " +#~ "full list of instance moderator and administrators), the following only " +#~ "works for users that are also administrator or moderator on the Peertube " +#~ "instance. An alternative method to set this for existing chatrooms will " +#~ "be provided in a later livechat version, when the issue will be properly " +#~ "fixed. For now, if you are not moderator or administrator on the " +#~ "Peertube instance, you can change the slow mode setting by deleting your " +#~ "room (it will be recreated with the value set in the channel options). " +#~ "This solution is not optimal, and we apologize for the inconvenience." +#~ msgstr "" +#~ "Da es ein Sicherheitsproblem mit dem Livechat-Plugin v8.3.1 gab (Die " +#~ "vollständigen Liste der Moderatoren und Administratoren der Instanz wurde " +#~ "angezeigt), funktioniert das Folgende nur für Benutzer, die auch " +#~ "Administrator oder Moderator der Peertube-Instanz sind. Eine alternative " +#~ "Methode, um dies für bestehende Chaträume einzustellen, wird in einer " +#~ "späteren Livechat-Version zur Verfügung gestellt werden, wenn das Problem " +#~ "richtig behoben ist. Im Moment können Sie, wenn Sie nicht Moderator oder " +#~ "Administrator auf der Peertube-Instanz sind, die Einstellung des " +#~ "langsamen Modus nur ändern, indem Sie Ihren Raum löschen (er wird mit dem " +#~ "in den Kanaloptionen eingestellten Wert neu erstellt). Diese Lösung ist " +#~ "nicht optimal, und wir entschuldigen uns für die Unannehmlichkeiten." -#~ msgid "To modify the slow mode duration for an existing chatroom, you first have to open it in [full screen mode](/peertube-plugin-livechat/documentation/user/viewers). Then, open the top menu and click on \"configure\"." -#~ msgstr "Um die Dauer des langsamen Modus für einen bestehenden Chatroom zu ändern, müssen Sie ihn zunächst im [Vollbildmodus](/peertube-plugin-livechat/de/documentation/user/viewers) öffnen. Öffnen Sie dann das obere Menü und klicken Sie auf \"Konfigurieren\"." +#~ msgid "" +#~ "To modify the slow mode duration for an existing chatroom, you first have " +#~ "to open it in [full screen mode](/peertube-plugin-livechat/documentation/" +#~ "user/viewers). Then, open the top menu and click on \"configure\"." +#~ msgstr "" +#~ "Um die Dauer des langsamen Modus für einen bestehenden Chatroom zu " +#~ "ändern, müssen Sie ihn zunächst im [Vollbildmodus](/peertube-plugin-" +#~ "livechat/de/documentation/user/viewers) öffnen. Öffnen Sie dann das " +#~ "obere Menü und klicken Sie auf \"Konfigurieren\"." #~ msgid "You just have to change the \"slow mode\" field value." #~ msgstr "Sie müssen nur den Wert des Feldes \"langsamer Modus\" ändern." @@ -4849,47 +7701,118 @@ msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind u #~ msgid "The modification will immediatly apply." #~ msgstr "Die Änderung wird sofort wirksam." -#~ msgid "This value will apply as the default value for new chatrooms. It will not apply on already existing chatrooms." -#~ msgstr "Dieser Wert gilt als Standardwert für neue Chaträume. Er gilt nicht für bereits bestehende Chaträume." +#~ msgid "" +#~ "This value will apply as the default value for new chatrooms. It will " +#~ "not apply on already existing chatrooms." +#~ msgstr "" +#~ "Dieser Wert gilt als Standardwert für neue Chaträume. Er gilt nicht für " +#~ "bereits bestehende Chaträume." -#~ msgid "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube avatar generator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/) license" -#~ msgstr "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube Avatargenerator](https://www.peppercarrot.com/extras/html/2023_peertube-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" +#~ msgid "" +#~ "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube " +#~ "avatar generator](https://www.peppercarrot.com/extras/html/2023_peertube-" +#~ "generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/) license" +#~ msgstr "" +#~ "{{% livechat_label avatar_set_option_sepia %}}: [David Revoy's Peertube " +#~ "Avatargenerator](https://www.peppercarrot.com/extras/html/2023_peertube-" +#~ "generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/) Lizenz" -#~ msgid "![Cats](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow,border&height=40px) license" -#~ msgstr "![Katzen](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow,border&height=40px) Lizenz" +#~ msgid "" +#~ "![Cats](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow," +#~ "border&height=40px) license" +#~ msgstr "" +#~ "![Katzen](/peertube-plugin-livechat/images/avatar_cat.png?classes=shadow," +#~ "border&height=40px) Lizenz" -#~ msgid "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's bird avatar generator](https://www.peppercarrot.com/extras/html/2019_bird-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/)" -#~ msgstr "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's Vögel Avatargenerator](https://www.peppercarrot.com/extras/html/2019_bird-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/)" +#~ msgid "" +#~ "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's bird avatar " +#~ "generator](https://www.peppercarrot.com/extras/html/2019_bird-generator/) " +#~ "[CC-By](https://creativecommons.org/licenses/by/4.0/)" +#~ msgstr "" +#~ "{{% livechat_label avatar_set_option_bird %}}: [David Revoy's Vögel " +#~ "Avatargenerator](https://www.peppercarrot.com/extras/html/2019_bird-" +#~ "generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/)" -#~ msgid "![Birds](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow,border&height=40px) license" -#~ msgstr "![Vögel](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow,border&height=40px) Lizenz" +#~ msgid "" +#~ "![Birds](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow," +#~ "border&height=40px) license" +#~ msgstr "" +#~ "![Vögel](/peertube-plugin-livechat/images/avatar_bird.png?classes=shadow," +#~ "border&height=40px) Lizenz" -#~ msgid "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's fenec/mobilizon avatar generator](https://www.peppercarrot.com/extras/html/2020_mobilizon-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/)" -#~ msgstr "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's Fenec/Mobilizon Avatargenerator](https://www.peppercarrot.com/extras/html/2020_mobilizon-generator/) [CC-By](https://creativecommons.org/licenses/by/4.0/)" +#~ msgid "" +#~ "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's fenec/" +#~ "mobilizon avatar generator](https://www.peppercarrot.com/extras/" +#~ "html/2020_mobilizon-generator/) [CC-By](https://creativecommons.org/" +#~ "licenses/by/4.0/)" +#~ msgstr "" +#~ "{{% livechat_label avatar_set_option_fenec %}}: [David Revoy's Fenec/" +#~ "Mobilizon Avatargenerator](https://www.peppercarrot.com/extras/" +#~ "html/2020_mobilizon-generator/) [CC-By](https://creativecommons.org/" +#~ "licenses/by/4.0/)" -#~ msgid "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow,border&height=40px) license" -#~ msgstr "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?classes=shadow,border&height=40px) Lizenz" +#~ msgid "" +#~ "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?" +#~ "classes=shadow,border&height=40px) license" +#~ msgstr "" +#~ "![Fenecs](/peertube-plugin-livechat/images/avatar_fenec.png?" +#~ "classes=shadow,border&height=40px) Lizenz" -#~ msgid "Thanks to David Revoy for his work on Peertube's mascot, [Sepia](https://www.davidrevoy.com/index.php?tag/peertube). The character design is under CC-By licence, and the SVG files used to create some logo and avatars in this plugin are GPLv3.0." -#~ msgstr "Vielen Dank an David Revoy für seine Arbeit am Peertube-Maskottchen, [Sepia] (https://www.davidrevoy.com/index.php?tag/peertube). Das Charakterdesign steht unter CC-By-Lizenz, und die SVG-Dateien, die zur Erstellung einiger Logos und Avatare in diesem Plugin verwendet wurden, stehen unter GPLv3.0." +#~ msgid "" +#~ "Thanks to David Revoy for his work on Peertube's mascot, [Sepia](https://" +#~ "www.davidrevoy.com/index.php?tag/peertube). The character design is " +#~ "under CC-By licence, and the SVG files used to create some logo and " +#~ "avatars in this plugin are GPLv3.0." +#~ msgstr "" +#~ "Vielen Dank an David Revoy für seine Arbeit am Peertube-Maskottchen, " +#~ "[Sepia] (https://www.davidrevoy.com/index.php?tag/peertube). Das " +#~ "Charakterdesign steht unter CC-By-Lizenz, und die SVG-Dateien, die zur " +#~ "Erstellung einiger Logos und Avatare in diesem Plugin verwendet wurden, " +#~ "stehen unter GPLv3.0." #, fuzzy -#~ msgid "{{% livechat_label avatar_set_option_sepia %}}: ![Sepia](/peertube-plugin-livechat/images/avatar_sepia.png?classes=shadow,border&height=40px)" -#~ msgstr "![Livechat-Installation](/peertube-plugin-livechat/images/installation.png?classes=shadow,border&height=200px)" +#~ msgid "" +#~ "{{% livechat_label avatar_set_option_sepia %}}: ![Sepia](/peertube-plugin-" +#~ "livechat/images/avatar_sepia.png?classes=shadow,border&height=40px)" +#~ msgstr "" +#~ "![Livechat-Installation](/peertube-plugin-livechat/images/installation." +#~ "png?classes=shadow,border&height=200px)" #, fuzzy -#~ msgid "{{% livechat_label avatar_set_option_legacy %}}: ![Legacy](/peertube-plugin-livechat/images/avatar_legacy.jpg?classes=shadow,border&height=40px)" -#~ msgstr "![Livechat-Installation](/peertube-plugin-livechat/images/installation.png?classes=shadow,border&height=200px)" +#~ msgid "" +#~ "{{% livechat_label avatar_set_option_legacy %}}: ![Legacy](/peertube-" +#~ "plugin-livechat/images/avatar_legacy.jpg?classes=shadow," +#~ "border&height=40px)" +#~ msgstr "" +#~ "![Livechat-Installation](/peertube-plugin-livechat/images/installation." +#~ "png?classes=shadow,border&height=200px)" #, no-wrap #~ msgid "Pre-recorded messages" #~ msgstr "Aufgezeichnete Nachrichten" -#~ msgid "The plugin needs to build an AppImage for the Prosody XMPP server. It appears that the way this AppImage is build requires `apt` and `dpkg` commands. So it will only work \"out of the box\" on Debian-like systems. If you are using another Linux distribution, you can try to install `apt` and `dpkg` manually. See for example this [Github issue](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues/200). We will provide another solution as soon as possible." -#~ msgstr "Das Plugin muss ein AppImage für den Prosody XMPP-Server erstellen. Es scheint, dass die Art und Weise, wie dieses AppImage erstellt wird, `apt`- und `dpkg`-Befehle erfordert. Daher wird es nur auf Debian-ähnlichen Systemen funktionieren. Wenn Sie eine andere Linux-Distribution verwenden, können Sie versuchen, `apt` und `dpkg` manuell zu installieren. Siehe zum Beispiel dieses [Github issue] (https://github.com/JohnXLivingston/peertube-plugin-livechat/issues/200). Wir werden so bald wie möglich eine andere Lösung anbieten." +#~ msgid "" +#~ "The plugin needs to build an AppImage for the Prosody XMPP server. It " +#~ "appears that the way this AppImage is build requires `apt` and `dpkg` " +#~ "commands. So it will only work \"out of the box\" on Debian-like " +#~ "systems. If you are using another Linux distribution, you can try to " +#~ "install `apt` and `dpkg` manually. See for example this [Github issue]" +#~ "(https://github.com/JohnXLivingston/peertube-plugin-livechat/" +#~ "issues/200). We will provide another solution as soon as possible." +#~ msgstr "" +#~ "Das Plugin muss ein AppImage für den Prosody XMPP-Server erstellen. Es " +#~ "scheint, dass die Art und Weise, wie dieses AppImage erstellt wird, " +#~ "`apt`- und `dpkg`-Befehle erfordert. Daher wird es nur auf Debian-" +#~ "ähnlichen Systemen funktionieren. Wenn Sie eine andere Linux-" +#~ "Distribution verwenden, können Sie versuchen, `apt` und `dpkg` manuell zu " +#~ "installieren. Siehe zum Beispiel dieses [Github issue] (https://github." +#~ "com/JohnXLivingston/peertube-plugin-livechat/issues/200). Wir werden so " +#~ "bald wie möglich eine andere Lösung anbieten." #~ msgid "Building this AppImage also requires following packages:" -#~ msgstr "Für die Erstellung dieses AppImage sind außerdem folgende Pakete erforderlich:" +#~ msgstr "" +#~ "Für die Erstellung dieses AppImage sind außerdem folgende Pakete " +#~ "erforderlich:" #~ msgid "`python3-venv`" #~ msgstr "`python3-venv`" @@ -4897,22 +7820,41 @@ msgstr "Wenn Sie ein Webdesigner oder ein ConverseJS/Prosody/XMPP-Experte sind u #~ msgid "`squashfs-tools`" #~ msgstr "`squashfs-tools`" -#~ msgid "These dependencies were tested on a Debian Bullseye. If there is some dependencies issues on your UNIX/Linux system, please open an issue on Github." -#~ msgstr "Diese Abhängigkeiten wurden auf dem Betriebssystem Debian Bullseye getestet. Wenn es Probleme mit den Abhängigkeiten auf Ihrem UNIX/Linux-System gibt, öffnen Sie bitte einen Eintrag auf Github." +#~ msgid "" +#~ "These dependencies were tested on a Debian Bullseye. If there is some " +#~ "dependencies issues on your UNIX/Linux system, please open an issue on " +#~ "Github." +#~ msgstr "" +#~ "Diese Abhängigkeiten wurden auf dem Betriebssystem Debian Bullseye " +#~ "getestet. Wenn es Probleme mit den Abhängigkeiten auf Ihrem UNIX/Linux-" +#~ "System gibt, öffnen Sie bitte einen Eintrag auf Github." #, fuzzy -#~ msgid "| | | |---|---| | ![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px) | ![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px) |" +#~ msgid "" +#~ "| | | |---|---| | ![Chat screenshot](/peertube-plugin-livechat/images/" +#~ "chat.png?classes=shadow,border&height=200px) | ![Fullscreen chat " +#~ "screenshot](/peertube-plugin-livechat/images/fullscreen.png?" +#~ "classes=shadow,border&height=200px) |" #~ msgstr "" #~ "| | |\n" #~ "|---|---|\n" -#~ "| ![Chat screenshot](/peertube-plugin-livechat/images/chat.png?classes=shadow,border&height=200px) | ![Fullscreen chat screenshot](/peertube-plugin-livechat/images/fullscreen.png?classes=shadow,border&height=200px) |\n" +#~ "| ![Chat screenshot](/peertube-plugin-livechat/images/chat.png?" +#~ "classes=shadow,border&height=200px) | ![Fullscreen chat screenshot](/" +#~ "peertube-plugin-livechat/images/fullscreen.png?classes=shadow," +#~ "border&height=200px) |\n" #, fuzzy -#~ msgid "Avoid adding line breaks in middle of a sentence. But add a line break after each sentence in a paragraph. This is to facilitate the work for translators: so then can easily check that they don't miss a sentence when translating a parapraph." +#~ msgid "" +#~ "Avoid adding line breaks in middle of a sentence. But add a line break " +#~ "after each sentence in a paragraph. This is to facilitate the work for " +#~ "translators: so then can easily check that they don't miss a sentence " +#~ "when translating a parapraph." #~ msgstr "" #~ "Vermeiden Sie Zeilenumbrüche in der Mitte eines Satzes.\n" #~ "Fügen Sie jedoch nach jedem Satz eines Absatzes einen Zeilenumbruch ein.\n" -#~ "Dies soll den Übersetzern die Arbeit erleichtern: So können sie leicht überprüfen, dass sie beim Übersetzen eines Absatzes keinen Satz übersehen.\n" +#~ "Dies soll den Übersetzern die Arbeit erleichtern: So können sie leicht " +#~ "überprüfen, dass sie beim Übersetzen eines Absatzes keinen Satz " +#~ "übersehen.\n" #, no-wrap #~ msgid "you must have `npm` installed\n" From c2c1211b9a23cd279d823a96a06546a414f8848f Mon Sep 17 00:00:00 2001 From: Victor Hampel Date: Tue, 6 Aug 2024 07:53:57 +0000 Subject: [PATCH 073/136] Translated using Weblate (German) Currently translated at 100.0% (857 of 857 strings) Translation: PeerTube LiveChat/Peertube Plugin Livechat Documentation Translate-URL: https://weblate.framasoft.org/projects/peertube-livechat/peertube-plugin-livechat-documentation/de/ --- support/documentation/po/livechat.de.po | 29 +++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/support/documentation/po/livechat.de.po b/support/documentation/po/livechat.de.po index 1f445708..41f86da4 100644 --- a/support/documentation/po/livechat.de.po +++ b/support/documentation/po/livechat.de.po @@ -8,11 +8,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-08-05 12:07+0200\n" -"PO-Revision-Date: 2024-07-30 06:49+0000\n" -"Last-Translator: Victor Hampel \n" -"Language-Team: German \n" +"PO-Revision-Date: 2024-08-06 09:45+0000\n" +"Last-Translator: Victor Hampel " +"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -5446,9 +5446,9 @@ msgstr "" #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md -#, fuzzy, no-wrap +#, no-wrap msgid "Participant message history search" -msgstr "Teilnehmerliste" +msgstr "Im Nachrichtenverlauf eines Teilnehmers suchen" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -5456,11 +5456,13 @@ msgid "" "As a room admin or owner, you can search all messages sent by a given " "participant." msgstr "" +"Als Raumadministrator oder -besitzer können Sie alle von einem bestimmten " +"Teilnehmer gesendeten Nachrichten durchsuchen." #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md msgid "To do so, you have several ways:" -msgstr "" +msgstr "Dazu haben Sie mehrere Möglichkeiten:" #. type: Bullet: '* ' #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -5468,16 +5470,17 @@ msgid "" "using the \"{{% livechat_label search_occupant_message %}}\" action in the " "dropdown menu besides chat messages" msgstr "" +"die Aktion \"{{% livechat_label search_occupant_message %}}\" im Dropdown-" +"Menü neben den Chat-Nachrichten verwenden" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md -#, fuzzy msgid "" "![Message history search](/peertube-plugin-livechat/images/message_search." "png?classes=shadow,border&height=200px)" msgstr "" -"![Umfrage Start](/peertube-plugin-livechat/images/polls_start.png?" -"classes=shadow,border&height=200px)" +"![Nachrichtenverlaufssuche](/peertube-plugin-livechat/images/message_search." +"png?classes=shadow,border&height=200px)" #. type: Plain text #: build/documentation/pot_in/documentation/user/streamers/moderation.md @@ -5497,6 +5500,10 @@ msgid "" "(https://xmpp.org/extensions/xep-0029.html) and [occupant-id](https://xmpp." "org/extensions/xep-0421.html)." msgstr "" +"Das Suchergebnis enthält auch alle Nachrichten, die sich auf Teilnehmer " +"beziehen, die denselben Spitznamen hatten. Sie können sie unterscheiden, " +"indem Sie [JID](https://xmpp.org/extensions/xep-0029.html) und [occupant-" +"id](https://xmpp.org/extensions/xep-0421.html) vergleichen." #. type: Title ## #: build/documentation/pot_in/documentation/user/streamers/moderation.md From 003cb24dd85d946b1f117cf1a932c7abda5927dc Mon Sep 17 00:00:00 2001 From: John Livingston Date: Mon, 5 Aug 2024 15:54:03 +0200 Subject: [PATCH 074/136] Updating Converse upstream (with bootstrap5): * bootstrap 5 compatibility * other Converse updates integration * hack to get the sidebar work as with Converse v10. * modal onHide was renamed close. * fix slow mode infobox margin. * fix margin * shorter action label, for better dropdown UX. --- conversejs/build-conversejs.sh | 10 +++-- conversejs/custom/index.js | 4 +- .../plugins/notes/templates/muc-note.js | 6 +-- .../plugins/poll/components/poll-form-view.js | 2 +- .../custom/plugins/poll/modals/poll-form.js | 4 +- .../plugins/poll/templates/poll-form.js | 2 +- .../tasks/modals/templates/pick-task-list.js | 32 +++++++-------- .../plugins/tasks/templates/muc-task-lists.js | 4 +- .../plugins/tasks/templates/muc-task.js | 6 +-- .../shared/modals/livechat-external-login.js | 4 +- .../custom/shared/styles/_peertubetheme.scss | 3 +- .../custom/shared/styles/_variables.scss | 10 ++--- conversejs/custom/shared/styles/livechat.scss | 41 +++++++++++++++++-- .../custom/templates/muc-bottom-panel.js | 4 +- conversejs/custom/templates/muc.js | 4 +- conversejs/lib/converse-params.ts | 3 +- .../lib/plugins/livechat-specific/toolbar.ts | 27 ++++-------- languages/en.yml | 6 +-- 18 files changed, 99 insertions(+), 73 deletions(-) diff --git a/conversejs/build-conversejs.sh b/conversejs/build-conversejs.sh index 9ebdedbf..1b16123e 100644 --- a/conversejs/build-conversejs.sh +++ b/conversejs/build-conversejs.sh @@ -18,10 +18,8 @@ set -x CONVERSE_VERSION="v11.0.0" CONVERSE_REPO="https://github.com/conversejs/converse.js.git" # You can eventually set CONVERSE_COMMIT to a specific commit ID, if you want to apply some patches. -# 2024-07-31: using Converse upstream (v11 WIP). -CONVERSE_COMMIT="2f8cfc02d04bb6191b3b9facb706e475836279f5" -# # 2024-07-31: testing the jcbrand/bootstrap5 branch -# CONVERSE_COMMIT="e5edeec997d53a8720470a49685be123e8688e1c" +# 2024-08-05: using Converse upstream (v11 WIP). +CONVERSE_COMMIT="5017efb780973d704f237c478ba52b23d901e1bf" # It is possible to use another repository, if we want some customization that are not upstream (yet): # CONVERSE_VERSION="livechat" @@ -29,6 +27,10 @@ CONVERSE_COMMIT="2f8cfc02d04bb6191b3b9facb706e475836279f5" # CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js" # CONVERSE_COMMIT="xxxx" +# 2024-08-06: including fix waiting for merge: +CONVERSE_VERSION="livechat_converse_11" +CONVERSE_COMMIT="f69b96439ac15d0fc9c138319e2d635ab28be071" + rootdir="$(pwd)" src_dir="$rootdir/conversejs" converse_src_dir="$rootdir/vendor/conversejs-$CONVERSE_VERSION" diff --git a/conversejs/custom/index.js b/conversejs/custom/index.js index 08033a19..fdc969e9 100644 --- a/conversejs/custom/index.js +++ b/conversejs/custom/index.js @@ -8,14 +8,14 @@ * @description This files will override the original ConverseJS index.js file. */ +import 'shared/styles/index.scss' + import './i18n/index.js' import 'shared/registry.js' import { CustomElement } from 'shared/components/element' import { VIEW_PLUGINS } from './shared/constants.js' import { _converse, converse } from '@converse/headless' -import 'shared/styles/index.scss' - /* START: Removable plugins * ------------------------ * Any of the following plugin imports may be removed if the plugin is not needed diff --git a/conversejs/custom/plugins/notes/templates/muc-note.js b/conversejs/custom/plugins/notes/templates/muc-note.js index 92c85ee0..3ef2a6d4 100644 --- a/conversejs/custom/plugins/notes/templates/muc-note.js +++ b/conversejs/custom/plugins/notes/templates/muc-note.js @@ -67,7 +67,7 @@ export function tplMucNote (el, note) { : '' } ${_tplNoteForm(note)} -
    +
    + return html`

    5hvP*ckJegk;AgBfi5Qqgx(O9(*>2q&0Y0`Vu}Z5~KWSY5 z9%9G|xG(zhsz;T#=Zc*K`gwfJ36|xyP_HuKFbY+bJ{_I$ds4uhr>J~AhJzpM4hdAw zPPF?c(Q+}5z+Jed1LrEbJ)K6VO zJ_ZjJ%r^wXyfW*^TI~r30vQO9pMH|~ok$dc#V8vh5oV>JIR23t2AOuR#!r6<(&M{5 z>W_F0*~l)Z9;gm%FZhhrQPIsB2}>X|82c;d2kQA(_K9!huO<$~uOT};)_wRho!rvD zb18#-$>!ABU>N)W;G<2wAB_a9|leK@<`V{{~x@Q(+*AP4i^z z`M0lEyCgjh622F7+pi3B z?!IqQJxYF-NFy73^Jnd@4{1yDlV7Yl+3kH168;v3G6q$At0Z?wIObLXEL>sjF_y2( zETsm*y0O;1^&~ILQtv(+yYbqv zqr?6N7mxgH_p#E;kF~nn3tVmb@^~F`3@w7LpEQc=>P+B<$bw_o6L84BruvNJTV;xzs1XlO0#y6cWZDty%i8Lb)td^sWsFIp`GoYeP&KNe%(q3oJbas26^tzf2nh50uYc7Nl{- zfoz2o5vNOAIPBF!&00A|yINU8nqLy9s?U3O)UZu~C&RGZaa5|`Wqf_SZ=F9{zKlI` zBOC-Bc9nA|b)>UK@~N8B^CX%{!iuo)7dVyHI<*?jYt^0y^8}HITr9@*M)Y8$hHLNZ zOW9kb>jzRoUxZMl7Qq6_B@B|k zI}Uz=x3|XW-@tf3@7xI|Xt*=W9s^qNNrOE`jd`h4tFHEm!n&fFgUEZ@&pA@alj*wr z37(c-yRCk@i`+H4%dUZYe)u=@9e*~&n~g^@VUhx>I$arWM8 z?KS88=+}gz4?3zU>8O2%1_)k6k(dUXi(pd)*=(S^a`D7UpMv(oJ8V_eG&E!yDR#~} z3`5A_eXGyZV6E%rXyAK#$WqXS#U~U=zI4D-lylBvP)Q?2M_RIHPwS|n8|#7RVvre5 z)U0HW4?00{I4x3%`w)k&CMPm*fV?)EpEdF=CaqEZ8 zFBh2oa8HA!DsUVP90fyXZ9^ioZf6spJ&&)_P=lE%sy=5MFnuosvEfI~%j|d@B2kWV zzhX6fO12`=E8BjMQptHLA9nM;Bs8 z79ek+)L?SKK}ie6-J}}-OYqxo1n(lsGi5~c?C9?Y+tWHoPRqtJ_h&0sGTy0Z%PKG( z#K+;S3!IW1iWB#A+y;S(4APl|;swd@|HKGlXok|_>-Iks7acAkNN|G=!w`c3HIL_? z5&KlFE+`T6I)lcm8Y%)lrFo+My0tyW%@(@6c?qx3s4hMYkD563mg8fr5+()X!rQ+* z|6J|GzMhGH{}^?xUB^g&q16(kCI~*#pdqF4F-y5Wr;mnWSfQ(GmFp)pwy~|^wmZl4 z2Um*uw7lro=?B*a16B2F>=OKwl!jNh2^*%zbE6)OQQ^2~oToj-O0`6UHcj_*s3jB|BNyzp$Tf8c+S34(HRw|4NwgESsb9pid zm`k!81Q8o{I5&#E`wquq{nozdAwCYeyL_BuW%W2;%zs$M#|#StLnP!XRvCf@F34w$ z{!Uh+4ZS>G3R+#Y2h~3F)19f7#SQ={{P>mcfcVDLM2e$GG`+c^au3=gVF7R z=e~ncr8Gvpqr;35K5@#4uuOt^h)ZYHrn@e=+atHu(Z zefOyd%)xFyp-Hf_t!8onmAdn=>(UoLkXh`{EieY0ImxeK#A#QZLTjswXpw+&!foXj zhiz<{$Npf%t)a+5j1AUZnN<6ZWcLs(?-WH1B_XbY`oV1El#yl$Vq$qJq=45QR{ollaLJ*x7Q)A*_x7#4B@;H_f=*HW6W*0GB6HSaMDbjxN* zNia^3`JGi#p=krk%NtPLxkZCBqT(0JGT*GJ+ zqRwNZ;)Rn3{KQb;Cg0m7B|uKBH=LAeFV*%y!`1lv{bo`rFB19KGtIjO@&Y=u_~3`h zr|v{}+IAmx;7%aV1y#)=NCAd`%bPayCU6Qp5t}PJl&h`{8J~y<9f5WVI!sjTESrjg zVRni|FX?TMfubxQ0inCaj@lhADjYmhJ+-`Q8bcu@PzXE>=7T*b@Qy5^EK=Hl2c-Qa z{zgkq=<}^848}wzqM8O;(uIcrb(TW?iKj4vum#!YVJ9jZqu}wIqq<3}IEYGPi35rS zR=PhwCETh&=yk3_vfGokWG~k=I4O9zCcH#{k(v6Y86pNXTN$IOOiQ_Du(D#^0+J~n z>F!jY$#p?TAKab=L{<4^@alr!I++Xe3BM}h3j{Ge8n!c3H8kNzI(RZZ(*%?VgK-r2 ziRXz3d@0-@q|M^@MI6DybBSvaxrnc2ssRMlfxIyu!3y^g1%x-T9NG-X+8}bKch9|C zo;dbk=+(kAGIyPR42_3-w*KP8jsGvEMpj=lK zC~z8Fm#UF3H*^`&Kbs%7T~yU|K0lAQ^)v{n*x5^QjmJbOrSaIJA;-x?QPqEmpt26c zqOsP-cEJO>VQ^Cl=_DFnD~Ul=7|YE5Kd1Rub?!6QiP^Y1+;0zSR$BqRc6~}>4EZ>J6* zV4j`B;xjRnN`;8G`Z<-=49pzA%DcBTue=ib{~OLQ>bqH=q^0%1V%FjN7>E&ed=iBP zGyb4Ph(yNqH@;R>(D1rk(^FM_S)XjK)>QC+UJ@31`1OyN`{VD#kF0SSnH@&G#=R(w z1iPF50dW-h%r`)?;Bh{GxLY)&MjT{%`ADy-diGZ1%PgN6M7pP)#nNZTglRN2u!QO# zU!t~=K>YLbV@<8%?hYX~PENB{ANZEs9a}y$G7EK6g72qCvk3x*AZ(}2j`57Rz7E%W zSx3j^&Cct^9~ya^f8A=-BPqnw=x?V7#4{N5-H#S=jT-A43ayVH@_=k>4NPPcRwPkK ziqvtLRzu&*vY}CA>{ocVdW$>(AODLjvj}By*z&!pj54E3hBZR>?`bG9yoKKhITaac zb(16A)t<(iRayMA-| z+aFRr2!ddN}AH_KpNsg(&J{_;_w(k#4WFzba_lLix2ak?*ce#5SdEM{7C7O zw5WT_z7H4ASGk>0i3D7T=YPi4fbjtcG?BrBkPm%yEM~L*XGA8INUz({ENchxB|Zk7 z2-?0dbJ8?KEW)a4KbJ1S*1vDWi|z^S$dE+bnVh!jD89n#$3{ml$1Xhr^fiH?EL)ti zy;@{xO-ht~WPN&&p5+s;Q{M7MXXRSIY{2GX}^OD>W}K+jn}izh@a` z-XE^S0fBnvXo!R`D7$4ke*V44lopq90gSQ`waso$x($CPrt@G=8~Up?>v^wB5}7RY zd);~87odn&e&m71nou9?hc1MV(lKBc!u6v4MiYd93qTvFhwB|)(^XWBB{3}7SeCoB zo+9=7=kq%@^RRZwV~6t_0t-WF^s zjQlRkvSnge(D-b|)kJ{wHNAeyjNNq3N zfntNk)1~ApR1``t#LQl>g2s6_s zn^k76s`JFXU|(LE`8$WgHaypXYf=A@`Xrj-hedE#nASi$pChdf;=tG5aydXYNEd9J5Saq+I_ozUA~Y*Fb#wF*T5`x zdvOyQl7zg<*7O@x0VAH@On}!GClx>cEBx(>{`P9!={FBa40$MqwBzZ5puKMTF;?wa zbo}nOjry)~PnGalj#i_Y{GVN(0iR(g#6fRx8FC9AVeGYRu3al%)1-DTm>GzgaO)kDXL~fUn%s zp}F*(x?rk+>r!SY34~@}`D+ms4Z@9;s$XQ@G}s33_2EjRlw~iu&C(@|f`?&@M4FVY z>$4YT$Hxh|a4;)M8m|O4315{I7u-LIH9MzPyRpe-$QKn+70(w{9^1I>kJuNf1Q{Do zXWWbCq_V^HyeSa7#?sG#m1$u90I)!~kVJQPzd+is*|?g1nZ?K$Trz?)g?7Kw74042 z7{BDd=F3)7M(iit!;;VZ1-4dWG(#zeC6kH+p+@qC<+61YIbB%kNM#BXZ^V@!+xWNy zvlwXj#{pNJ$Fg!0#b#vl%tr9IqF@x12ZO`$0e(fW9T=@%GaK7EuaOpmWugZs>qwze z4DU_<27Oozw>T!ZpBMB{1e^<2&fDaDhL9Atz5O17MIl}uF7X!~wj$-!GEMHUmhMua z3YIIADZ;^xPY8#6AFu9D$koyr4C!#Nn9Bi|{_zo3`gbr9Sy_2U$C&*{Mpkd>PoFy> z*-Bk;T`V*A$Br8aXylI1k5?`KK231=T|^gPpuJt;Cb2ZGY+S{H=JwhzY#m9ucMN@?L(<)R~f(x6oh`_C(jmMMD3d(cybX zhe7w_kDU&m-QbTErE?Y7M!J$@_(v0(?$e@BQOc_79dzW;;1KetcMH zY9Rs6Ix%%JR9FlQ488(;N01lnNZ1nuTHzd{U)&%w>8vxkNx_d!rgaYnQK&b-A zAw8DUpulN8Y(K@{zfeu}<^BK7B9v?|WmYy|xr?|>kwCc0%y#sNF2=>>=6WWN8tzfp zc_%zZZ9GY$}@WImV`I?$J2{l>p2A&pLR@{ z6+R6s4x(j_JJE|ze?=Fo$JsB%ymh0WzO7C>z4_5&-6Qc!9%l2UQBg?5DsxT@t!CI7 z-_UI#wJ@kMQF{z*>B3jr%%nz^>~pe=H8^UKR48yn=*AE*&}qo&ug{${1q2RnwgXieoHnZV6Rq;neWiv!v|@iYBIa0|f; zVgH7O78*-4Z?`!N<% z9JZU4DyiiNLhlr0bT1LuR=$GS3vz8XLhJ{py$~lr3C^20=BD%w@A%2UC@jgDvEcfnOI zqDkgncHppG{p(+Fy_UsZy^W#w({aCKA^+)l^VAU7O3!vy+Q16`+Mafn;DV+Kc^%eU zKEhyt1wN3{wSiw0MFAQi>9AgFI=pD#@syJ6`8c}B9&dH(sTxivZl^4xnDM=lY*#i0 zTT%8TU2%vi_--=z)<*Gbl=;=y2AC=f5Y2q!=Fq!+4$X1wA?2r*l6}7NyG|tXyUykm zetHWmn0ais#hLBf0i@+XHZ^BMP@j=Qmmyaq>j;k9d?FmF^atjtqf~&;VUyExo$eI_ z@HelPTknk0^&9@)y%OiHR+@w*3i}5gdhP5wQE;J)32?rTPpr2&7=E6Rqx^5@kk9!j~s>z8aFfn7s3Og>T3_Cus|sT!(B)EdI2!%0NY&%{<$u195wGcj%!z)>FR> zp$L)Y7-m1m4r(CRu?_#`jG&z!;LteC-C3^hGa0X0>)eeE1=?W$$|c9Hm`X5}xPFvx zeNMq&nHttTs>A=;K}q7$(#j~BaVm7bUUiF$2K-+40CnuE8f*imwk%cTj)3S5HRizu zq50IaWm{&07YiDUj=O0z5Q%<&&EKO2SXHvPqTkTEAtjcs9(}^f+S>CiYYMyYna1*) z+>QchwFcd~3lqm8Y!6mdC;ChdA8(1FMg7rez>N|V8W^INWWiTN(nxK0*0h;m9uf76 zQi>&6ULU&4sZ#__TMls3V0?X*_ae_wJe8~+CA9VCnd!x_qak!+&0X*~SDz~vA8IkX zKc&qFOe~nYi184+VmxQZVt=&^eTG@$RZ70POo#B)^J}0p^2C`U0wLgJDIlJ(!A`nx z!>Err!(T;Jd%nyJ8#5OCX0f@|@~0+Bu-5&>M(6S0kP<^DL>>Vq4p~tZ z&11rI)ayuiYu%}l-+G~YpD-$g(FZorPX9N`mlPU9Z?l(1MfyVMOo-l z2{KbYTdpH!K)^aWu2`(o*bYNH7)fLwf3Y0)l0O7td=L7!CqTw)cXS7TTwNVn6AoQ;t5e@&zWPvsAPjQ=y7MNh zrql!wKOu5Is85M&{9(fpaw>`&j)@nEza$(8Rvr(EyL&w@VpG`b%?4L*T*5BAT% zgU^pExeTUvDWaXv?{C-qpH54;>FEzMoV0y~#-AZ!WkSSgr;#pyXH6D3UjN~*_NuLP zA?5JNZ6F(z3*S%Gd*H!@%w(f&^h&|ssxu0!@>J}@}F<)?{-&-XS>T`qV(b3gTo z{=0t1P+cjFEJ#yO0D~v3H zH)?Ss8v(?`e#$Cb}I)!w~IjcYF)H35}_8h=lpsLdMB6Tn^kZ9sr z`(-*uMMFWrthn4&IG#*9ljC&2nB?!;F+xA=uCZeir!;0T>YxfTNI5xVTZZHbA)fab zhL$o~Ie#$^4Gjzd%O4LOYIK_&8pPAAkorC6S8g<&x;?|tyf`#?{+*(W3Y>uc zeU||`wY+wd@j%!8xv801aWUC@ps)zng$V9W-y>P@pFd|Fs%L;}iwkvr01V%NZ}5D& zI~z<85?|KT)IN`I$vuHREKq4^ba`A`>dap*6M64~jjV<$3ICp9 zM)9GeN0`pxo@qObMkA+4rT}j|F7O*@f(Y_`G+;rdiLYwk5mHxqdV9XRPnzbnLM$um zU2EP^)p#^Z6t+Z%wA$+Sf;rx3cM=YGX@SC_U^ITb+R6Zu4Yb+=-Q79RqGyZ5r54}` zdAyYeAtC!6PuCU>U26@0^0Bj*yfK2CoG;e~2I=H*IdJ@j5>Z(MFfME5jVABVda@gB z13rqH%lpG|P{-{Ly-*~H5xXYMG!+zFWq1^*i(rPjn$QEy&2B2;PfyhN{W*+ll1r4S>JN|AeCIf)Ur2{qIO&kRi z3v0^fQK{kg9(kmjRrVz%4VwTIIndd|53vACSbk%1+H2dxtA?uz0(xg||Hza4>$gr< z$}m>XOWp0+4Va)t>pcbT?WBT&Pp?}TF2}`6i#RMVM8db4d$ZAaWN7gPD*-oJ!S~rc z@}SHc`yHX5d9$bw{>Ezz&<`|>f^EG z5(KQk4=ofteDr3gosY?kdV3%xt&zGytFGRtFVNF-I{)YE`~ovXCZEMEpm^KKy9@kk zc?8g6c5?WYR_;G7`Xb=&@X@%Chu#uM)gQI;=G|{u9xu6zWZ26BOFFuUI_z!e#h@;> ze>!1?*6O|sq7x(`0%F73(o%646pdw2sEWYjo{}6 z`<5?91YNfzi8je}DF+6&;a+aF5>Ni^rvY%YkIUzh69l}|M>IGU~-rw$E5{M$h<>n@~ z{mnFKFtT~w%4uma=D~p2MsXF5?^V7eo*Rjv*^9`Rm>3O!(*w??fh^tP2=$whePICX zn_rJ%t*xoPp`qt?tA0uw#kfd(qj(fDYdJ@y5pl3hHX)zqZf?C^dvA{afw)!eDp3z17wdO#v3)2vA2LJlpHGaE!-Y>*pE| zM#b7r-HQjkU1V%rWMsZS(HYj~7|Y^70$0u>^2j45ew+K{IoT`&$V38TI94Dt<6H|% z!{6i6GSyjAogibqCf(Mv0ppVjbZW@sKl(V+C-InXjiVFd6kUxolZ3v=ot)=EUzkY(zbrEuAY} zf6&sgk!r40`$gg~xa3KYGSk)@%eBrnKxP_+0u)3nNdH&@ z869ZX)3`1B-nVWsr>$rYs}?E;Px{J%0NGrtTg3(p zim&y2TK5%hMn=X?tK6}YPjm;nIA7o8*gy2XhU4H%5eAGziuo|3@U)^$pMMIQ!nN@AX5Dq?j+Iz@D|! z&p!1&D<{KHJGtt(rkc7@_iYMy=I98s=WSxr7xSI5^FYz^gb?cy9bPXE)Q$<+N5Pjrg6CJwS%q&AF(hnT|m18 ze!)W^a?}GZ6;wo47ekN^?h43xR1m(2K?jS*&95hW6v;VK8~YjqU8jsfdC-RyrhsG5 zMa}B^=VOrtt#b9yQjYoLdG~sX1`qzOYdd#sy@fN{$&WOW;C@)pU5I?ne#FJp<vB0RtgK)(pL_0ln^v?!-4POQl94ef|FzWQ}Ytn(n>oiO@}GSXi#8K zrNNuQAp3qu9%(3y-gmWwHSyOUTg>qJxX6=7GHo-DiUPiA1q97%K_j2}*cI?cCi?G&#AL9sfjJLk z?M6sK1#^t)vwU_?I2U?dZ^&=-1-`Q(>ycIxaYD%bM1lv77AFg4-ku)jLV<6h!z>Zo8Uw` z>i){yFU2OkJ;avYs?0`(Nk{@AdY5Hnk+D|o(Y9?wCKsfB?gpdH^zgsdd^ge&NV7}x zZdtcN$@R9~Oq0uC?;rRgQf94MGS{pm{L}U@*28WEuM6$(D`wqV3JHB~JCw>={)vv@%Pn?YbUs$Pfd zIePg$XC$%P>#f5tsC826?#S@-KGIS_t6pF8`TqDIDi0<1j@u~c{`ZPe?dBqY%e>n9 z_;CpQ3p*6{1d-1Hn6*n^DApC$2V$!a_?b!4xteeI_Kx z1(sYD)59L5EfxdA3}ud?c?9zt>J4E!dRq2UlcFCMaXG>t)*r)n8B~hi65JB;gg#;G zKLUS4+a+EYrgsaW^s+(nu59~wDdu=yQY+>AA5CSs-e6ebvwS$f;l3|6s;I zOfFEv4@BFOjpltNF*VM02@XzDSc4kY5osh9XUyU3t92@Pe@(pD2tt*IqJ*y{Qeg<5 zkVpWPLVA-W!FGVC%FN?Kq6bVt1D=r=6eXlJZoj~oLdQYV+LDBH_RI$=A{5Gh54Cmz zo)5iHLHb;2Bqn-5arlOAq{( zX%@LUHC`_5Ea0Tbty;Eo*TtX2YN^+kFYyPKg=HkS`Sa;ON%;Mr+6b=9%ThS`2u?^~ zRUJ4u>=(?8ooB78RY~R_Q0py&5MtCP<+w;81zu7J@81Fvsg*PESp$;ruK(2qe!SrviW?R9b$Ovm%n z!@qvD*srOoe80_CPTTVHdY$l3w*bv@M9@va9@i^lNZp~6j7-S$Rpo#sn8x&HvYLT0 z7&QIja%j+A_25yZDE|CWvxoTbE`}iu84QmfA=7UPLfsuZyvUx=7-{N+WswU}=Ot$u z$xO9Y1cQo*hTI=u($bbz+_g5KiJ?M3y$fR?%Rv}TNrnWcP>E&@UL)Cbd))d;GZya5 zFarpl1pps&vt=*OK@~3kaxFKKIC!~5RlFRu2$yXm-)#=+x+;)xUoA+< z(~@CC)Rrpped+j^t|D}p@zarz1cxQVrNrk_+^=|0h-zq%H95cqQ$$nrtAEcahy310OA=a46a425JM62h$cO8K zbc(TaC&oq_p@R?^>;Ptw^oA#V3Iz)lhUAASE^9D`Bq=zA*_2O(2&kDs4R)zXei}0c z)ZbZn3s-PR6H5m+-Qh;Bq1&*6|3eY6+JSw9CpjFscZI{`PeI?s;!?R>g>cWyV5^(X zonesE!N)hzjIA=Q`cWePlW*-iEQ|+}^}U*yt=EhJQt?Ebo{QRH4AgF4{ry8tvK2eB z%WXnLqTQx(VMut|9mYW$oh{Y7Xjg+%^K1)|@UWFkjP|&Z|20(D_v{7=6F zZgNUeAt64#vzq$8ypLZ8UI}j=W7e5K1$G$zZHT4M4Awa0u7l-z^_BilwOE=Mrbp^| zt@h6*z*r2t@SBZhqxBCR-Z!donvCZwHD3Q#S*=(mBPzA}dPjzzf zuU77%2>%jUB4UO2rI1_-Jl$~BsdriUZh3YA~*4Vo<#1Tk6|CfDBc{YIYO z2VRLYGXrT6lw;#U-H!c%?zZ`)d8WX7|0V{ViqmoaDaWZdCJyM$cVQvLfy_N#w-+F^ zECXz@N=*uOuhI(?4NzHuj0Yx0IOx#bc$!K*o83REofg&raFR>R^)cT8GT1aYhlevs z@k<Yl_*1xS*eHe_5)4r-#7>9q@i0Ww!GE*$OW#P1Gk z*qO7OOJN|7gW+@}?^J2rAv;LCXPXp8c+8CDzpMpYWDdvUB!eZP%@5$nI?uCJ~#1#L;;p@SC zq8+R3@TPVtL4*#Yr0hL8sXRFuOHmc3)Bm+ptzjmQf$_&KJ1HfBNN~Bz?HJ#w=k#Rm z;IJGkDOX*5VG)RJ*G_-0$$mJee$HY*-T)#JSH=lmdY1C*;j!#=2n%<@5>f^^7O^-qQ;6RNjQCks)fiODMPpG=B z_QSL9(Vg(UC$koW>GdHyf9`dEAI@mjs@3MYzZu02Y@>i|-U$ZtrQxu=$ozPBvfHdg zJCGk-=6D34ozN&mE#5#x{7&9b|LyH9V7#-XqO>SADu+KU=DR-=?U*)_Y0n!A#Tjd` z`0q3sX>#g&3tYl`UQw0JeR?(r(h-dUPKTqY6)JT~M*8|3fU^V{?tf>Av$-{Hfq{0@ z*E(8>K#=uZ>00%5kg>k|`Lfv#5I<3=Dhn+ZfeSEm=dfyZJ%gWSm>FLjmP~J|N_*u(o zs&MY>nnxWRwBjfVae}LqCKsl0(&q5i@pSpX*U{-bf*AxJl4O7|jE(#*(@a{ z7FtcG#m+7YZv17w?c3DUWXccU`!lpZSMPpbYADw$y@}Ytn!r4{E(w4vJpRF~FiB8S zu0A`kpYYRDqr$Smj$j0XHdrpWfK}$W;D4S@Je|u=R|JMuT_NNxCTVSQsB@@yYo=Wz ziVY$Te(J!H-Ur`goz?D@w6pIt5)~PwN(18~O}~*n|006AiqF9*^NW|f3PfQ31(D?U zUjs1N5HYF_WAGGK@RHl!W{V{L@h<~arc4$VxAfDU)s<})a;G@OiszJ8prP1n|DAyI zxW#_jkx~+~1YdZsDNY46(xFK78+sjccZn!uLd*#MQ2w&A59L|w*$&aLuSj3MeBs%> z?@&`yn<)_1QckL;RSrJlj-_(}HIqtS^07)##*?GM9vx#+QZB{Te=*X&uyStlC^U;g zjzp7{xbBQ$<#|#pL zSGU9T=Z7JFm~{1F_$Im&X~o642@t-|Mh2pZcT#hv=Jl)rrR;LONcpuA`p&=mPf4ms~J$b!Uv+~!(3zatu zv=$yk1w>>xTyF~o2GM4kH}J|M=ZyK=EW5?$6fiuIn1iMeRFwXzlQAo^E>n#@HTRvPS9{)sZ)p2J(=lyf%1g6_ZVBbv4s(i2b%j4oc*H;D*f6db!voY*F(!|B9TA zZnvjw$=7dy$nV_KuHH8IQ5*h_(@#jV@MJuD8Cwf)vHi{0)wlFCruVe)H zc+D>gMQ`UO3*+%)IrLx19Rk5XplpTqE+vNJs`+JIa-O9uu~(^V&5x z-UUdn%k5U9$0*eeFFa2BG;qm`NQcQi@~;$BRONXx^fU}VI`}^Yq@s8A+U)1Vi}ZZm zi33Mj1~5r6zSle^_6d`cdal$7QVy5pjzPWlKM-?%SIQQUNokN~EnPlX4ta-3fK*$l z-4QVtr)vO{;}hM5Hg*f7d{;FoV)gtNmc$Y^Ha-6BTQ%F&m0t~|hOiqIBOBE+mBS{4 z+LxLNpyDpFX+HYx*g@K z=u>boAE?~y>M)ELB`Xm%4}h+{_60D*-^5AA0U;lN?Ct<3jN=k^DJLVN`|S05TMGz) zvzu+C*KYZ_8#P=0j>ViLCnNisK!8h#-fVueKNUYopd7K@d|kT}c=xT`rog}JZ(Cq{ zk*O?JFhGswE2`Glz+yJkZ#SIig@B2UOZG~DqD%eTSZ2h~C_gC~n?rVxJT?~jn?jpa zHjJiC;Vx#BDDQFnEm7#B!y#&Mp+eE~df8*Dat;cr)2Wwpqlq!Ns&GrMox^^8H*UBf z;O^4vG-F%rEVGh7a&wweNl`K3TZ~(`KCmY<(a@00zTBU?xw=veqZj>XyEr}KIaQcGf&UQ=(t(9A;H3QbWKVH+Xh_^9AdYLLH-*}oy8sY zaaaucJmzCbQB=Tu%{-Z%oQaCcaI?4Jd{dI2^`yH#S=B>~Kbw8DW~;V(sA! zR+?R>(cPir-1NRY`v2QE(q!^H5;7U*9^2b zKkpy(%58W&1A!*2?Q+xQ-|8FyT$gFGU!X&HA_}lS0TqhS*c{KR zs@ifpu5$=pBCaj(OCs=l**?D5Io)5(S-n2g8fMh2)CTZ*UMQ=d__;l7gnTJbmlU;R z4K|)t0!Y#fg|8jENnafmJ=e3`KsaG?8eER+-fzEdz#v}hH(FfQZZXkRk{`GE73sXs z^LVpXnhL>VqMcH4PzPMmpZcaH(kN!~gdYnWhlOPT{JDwAUQidN2_QNKuJ#MWKS2xr z;r3!!r2IW^DCyNUX-mt+BmeLjow|4IL$QLFo4uTdnvfQdPa-MUV&usTWXZbxZ)8iU z#nd55mKEzf_BMG1Q7On$C=|}0=1N*^sc3WUV##p)9!@Lr6oSSp3K$^?p5^qX$2tO2 z70grJ)1yylK;zPxc`xhfiaA~tj+oEy@xyP)f0*fh-X)+JE*+|t1dj~9C-EOaIK9DZ4YGOd zM=5^=lL2wmX9~V@p5$xW|DP71NnC;}S;ia_+W=pnL%0xxhUgMHY%Qk2v617EXTB=mHxD8~q4&lLhb=>vPxJ^EC^3s{_*&23Y3#xU zl;;@}%(=XIDe6nV_t2bOIxx{rZ+mYh>`SJox_jd5^xj`ldOo-tEGBc}-UkAr5}Xx6 zO7ef95n|p)L{UoRTN5ZtBwh)HR)M}+o@GAJOG$#_^8U^3qef% z5H#3K29(7|wR~xPv*!8OM){YyHInKV?V%}57MN4-)*&1CWuj0J7$jd3XubeXYr-s1 zNK674NL5$KcQQGc9N=dY@CI)3y7#Ap(LNFi;@}cPFr&i#lgKl;cNvUe7r}ErGU{98 z>378sss6M|ce^jS@v{K3UV>hW-i@X|dmleEf7{sDd`_do-35jJ_4srmyWmB<>y8BD z6Ps;m#%7+%W0x`+B(vc=ZNTM_6dz+^VoFi1uEt|S1ZlCc>$W=zI`{YIWOKJO+I@b! z<8wJS$Rj`wH9?vIl5oHCZ`|}18)(sVY^((Qfrz2(EZ{;PPX|C}-M3C>u%bbNr}F!r z${=1nf+y2~CIoLh23PV_>I70W>*W`@-7?d8<~kEA>E2Y9o3P_r;L#f|I8PKLL&jK} zSf1ZwZ<*S0j$;=sZIva7vggfwnF4-0P`FvAZkR3=K7@I;59{%L;ffFO!B-Ut`#Av% zX(eCKYB^kfCD>(Ct*fryu>JV%(#Yl^Rfm{L(0?tN@jhTu|2)XS9onMMI@C>?a z_{w)f!eDmt1z-QnP^;|C?d8_$w$ia5&_!$f>%$0*__sTrN}Xp0d{_;HbQQ4R20;%fG2pc8SBe#)ycBf`AX+S4uH-kVpdq zJv;j(?qHZtBvCJ?&gl3M9#ri8-vD0el2SmX^E2@C2q-)4V7jhyqLy^Ov@9KUT-B17+eh0A%}~#SA?m zCZ>iosa&FO*@zt3Trq=qvEd}rHvl+SsEY$$AAT6T{-m|{4&f>6qjAO-oBO2S0=l^W zok{huat-eYg+aTNo9@Ef|DqOXJ`<~SW6jJi@XGc-`%Z+1Gs+P1rvrKOEW*T`yG_=d z)md>uVABn7Wy)z|O?1AG9||yeDWg=00TYExMh9BToBQ~+v_oIR9yMp%wCxBWJHPegEO#v3yBT||AA#YQYd?{ z&VAX@Q~~>}$_dLQV`Ee=O9ojfWN!6K5Ox#Nn|_0Cl{4aUQ4UMw3I?8xV~+w8Hj+Um z39%3lZ9jdr@~h8q1%`!If7b+puii>;(vo)qrw$Ry*r!Ni%A6KgW@3hvhnHyQvFl1OmMl3J^!O1#>sSfDYmyMclA7 zPH0q0(ifG01P5EC0&yF&S3(jtm{k|HKxP-8c7eo#H=qe5pX_}JZIj?0nODu zbBIF-h{<>jlZq6SunLKR4Wa^JvgEnr#qOpvZq4N@j|H1RpoZ4SOHanDZ$@as&WSL# zWNm)TUc8Ti<<6?ZftcE7kv6Ib5cR_l(})#Ac2T+PG3h2OY|Ee~YrH#mg|?1q*h#^h zNnhshmS7ftR_n*jOHN;K*n`!9f|ZT=4K10ok?edvD%eM6NYga7rE}>AxoXE?>vw3x zF<6i}uVu&K%gC>|-%jgPCKA3CRhRW?yayHB0Z?e>x2S~o0!!f709xA@rS^Sc@iMFx z;om!W&$)n&MPTF3OZutnllw;RTW63Kp#Q%6Y@ecn@FTz+Z*X}MCKVeEKg1~e)SQsX zr<-UE9rW+UK#dKLqmNa`oL5)XnAhK=lvXLEAlv&iyY4w)q@C#b^sAoXeVm@k1GB`T zu)c-v49kEr99>mPX-&6Pys- z2@)hg(BKZigS)%CdvFUD+}+*XEx5b8yW3lG@Av)nzj{<1>eTL@*=g_T>FJhaQZr_m zV8}Gll_v?(yv5f&zz$^ZR{9r9V-#kT+tr= zc3wVCt(RWCp)d}r1R?q=dh=G8V~@IXb6<7t)v>PT5yx%)-}ziIKA(fe`!EAhLG$asR=RYVCnFge+z>! zbV^BTY{qAMnKdpbGPBqlklNEpwU#r62t_xRt~KJQHU?39*LG}R@z^z6M5sFCH|n|W zN;4Xo?xof*SWl6%fW?f*^1>d2IKh{A^lk`5&K%z^9X8BifSaFuK9{KbA~e(MZLbdkska3}?8ihj?k5gB1jy9o0|VmF>v4GXAm+4*Ys z=cmB~=XnPN;KL_oTUYI`J7|fG%V7h4dkW94+inF{-2rkb2VK*tTD-I-OE3&a0#umb z6vhSgw@LmZ)cLa-k(A4M=D@IIbY$(9JI}k;;@Ou=j8+vNu8KV{YGn6EzWfN*KC9%W z8{9c{_mSb5mli*vIT` zg*tit-&iinZj@SI%f!9id>lGx#vv6UkozzDnbh10Ewhb#s;xv*!<1Mo{TfSkto9`| zLKoCBl8J_N9J@k%C9hyPnnMe|*#;gOI8M>|G=o8y2VV4NI{2+`gj{?~^o}a*Se{IK zB+e^`K7}-Fx!a;d0pIFy#8UhGv0w!u71B_=ERmM6ik*I`(4Kv&9xNFQ;<(|Zn_%K} zn7d}fvE~et1e0k{v*ytz5qrr@x3^3OW{MHnf5UYiG1Bol4^jhup&lErVkE)+VrZ}Z zZ6&?=merW0(wt3-4Sg@gZq}*IZlRyYbx4v`TNhl1-Qt5D{Zb!o^CqQqKlK=!`NBP6 zeElhl#5V4`vhx+Ie4++M(0!IDRGTH$+RLaj;ZsHN8Q_vmWg?4p@|E(i3aGb2` zt?9PCeYWvbwZ_P1p!53)B3 zVPuyDmr(ucVeIu@Z7reg$`Q7r8|nL1$;92dS;nc$NLd#}%dh2Nn=H@DHr6t8WYR6PxpVYjGq3ITqVLq@< zwA>Z(>LT=3=>Uo7)lc2cH*^mNC?s1LeNHM39t_@b`r3Tg?6gU>uBZ(@kBBC{;@J$L zI0VPcn5y=6hM|sN4p|44H^FY!zY|zv-YxZ3#^`q9+h7WPs>&ptF#nX}!6GG5ip(Oh z=wLhw&g&gKxD)<_bL7%lPcw?NpGWx3G_kn?_&NF9T*fM<#heEy_qG0e>uPlE&LZH>bR!+^vjOFHR_bgbAe!M;pQPl8*UHL(l{@o5X8gC5qB6?Qhtu-jo5f0)KGD=ogKRG&o4`gpLru zqQO4}V1f$M7$GZf4K1w0;nl1>a((4K%oT7lki59Cprv0pJ#?B(mK3wt#vEd*tO7|g zH}rLSBULuT_VjfK_#7|mJtD6sX~>=^Aj1k>jM;(dB8&4}x--w=N?ae9DYN)51m7)| zK;Q}F$28jLk_I5CZA6jWBOH=`lh*C6^DwI*lEt(aM z!QX3+WyD!wY2CN80?O2`)`g-64u*}A->eb2eqnZn*9ZN8oxlGmWKggL+h1XWhN4RY zx3!8-HI(sd!9!m^nmv^HiZ#IR=v)+3Ie#xM(C=nZ}0a`Ozw zH_wYjcr zO(I!1vm;FK%n!3Xh{;CYq8Q2;i^JUKsWz&?T8C!Bz|oz?({#q=r{;+Hp14|4-9(B5 zGw1E{w6@{|WLWS0@S}wq21tU#!zJ{~IA3=%DKrY)xHnZ#m#SZNWtu3~k%c2#F4h-S zS_zm!92-xPE{PkIb{uJlsRZlGn9g|K%or1XaOLDaL=Ai*KNS8toPE5HAF+Rtr@4GV z3V6iGXP3iW6@3GFvuu6{FRBr{E2g}eVn|b0!5Rs;^BR`i+?k|#WKmcoCrCfzBmxo% zKay@SqicM>`12)I`?`A$YbO`Uf|V&>_*SB*VHny+vR)(V*vCu59iJptBCm%iD*xLD zLE7Oa#xx$AzAL3p7BGJ)zBgEo%0hcz|3KNRI{s}e@k zxt!XCrGJNjpe+&)wy7Myxw@Bls}&>;{m3%HI+57MQ?j8oW0+EleOY!EBVQ?z3pXbg zXVKlb9fT(Zpo}B2M;cTNjP;Zk6Vi1HNLzPZCR;;CKp_9t^rRW=1?)qMD)@Z zGsVRVTSf+#BSYAq1+H z(Ai(mRI*tx^9(IZ`!wmqiqd}-+hm3OmORZ-%;UIs7q?+AGrQlwxv2btJ`?tNB2=*# zoKmVSRuiezTFLZh`L7*el$NVRv?NJbD1#8!I7KP1qOaKAKS5YW+UiASP*k2&<@`w> zBK3YxC_BIEl%i2|QiXtW-@~QdKb`cbe`jy9_>wvP z*NJOhIWaUl62J#P;vQT*@QC$$%$el~yUAR`e&@16DhB{}26TN#iHU(Pu)sg|!2f>X z2ZZC_6@FN-RDplrs{GH-(jSLck$LDJ+z+SH@oRm+a+J2qy z)VAkw=05h6wN-0Y|F#g}^#}gEuD<>1dCUv7<8o)nY0aXZhvUVBj{OQMTzKvFB*N=* z%5Kem)nM&SsvY%%iY{R4{!NHR5y|tKkLT$kqV2Wzjs3`fjOWcx%XuSI^J9QcJ3ouX zA`@W~D&Ut6{|5wY?B0itHe;qFvpLIl$CF#Pv)Z|hKz!FjIqCLup4TgvF|KSnVqDfq zHd4rczxh;=t>_IX1KL}!?atTifZnm!2v-R@+uLQk2stV4gRF9|&yVcP%pR+1Yp?U& z5uEqqpI;AZ-%=!yJzqn$xOe?xkl44+jd<>$+Mj1)%Q^1C%Uxa?>(@L*qQ@QDn_nj) zJeIA>TTdya->!U-xk!>io|iG(?7Ie~+0TJ{v)E(Jmw$^v%PxEAw<~Wl?M;_|1%2XE zUy8guyORUezWdRT+9Q2H`oqbB-_2g6q}r|D){e^Mvyx;Yq#|2R(si^B)%oS#=N zo)Hsl-8Are8-PGIu2oHDwR+vo=dl|FD#~ofq*XjwHmAN^dO0s|1bS@irGw6w8D9_I zUe4&f5{|2`1w-upQYr5mq_VhB9{yJ^t@zgBs@zqvAlkw@Uk6JA|BUaA0 z)oBZ%`luJ}1ymrt;p%kYY-r>DW`2s}VQ&1(`7gSZwd^!M^F(WNJ=m5FL@TUXxPMX| z8mlvc_j>w>>uG&p;N|%^1%`KBAi{mW{bSu)p}z{#j}4c_{sDGyd%<^{i~g^GSs3FsgN5bN~ZB zwVT+w6ADv#=mhZ}=R#*5efDQw)yto1J8OG-12j3N=MGQ0*KTM8+v7mHdtW-l_uc($ zB#&caudB&;jf?8^HHW#CwYSdPwbxN6u#~q4I?u=Iy){5c2-MqOi;Bw^Eb2ADj;qJG zomL#~q&;1GOY2t^C3Jg3(7j%=7}uWK?!4Y$;#V*Fc|6a%30pUfc-{irpOW|I0FC6; z^`XCg$KuTSaVm|$`U6Upe}_SCH?gWJ@4E`*f6NUu$c+W_^cb;vS7`=AeSp5YYkxSx zY`rhR6qbI$*5ke!jA(!Ic)Pt+YI8L;ecX6DdAjp@Vg;o+Uj|!w?YVJZM@2ZXr+y}I zns0Br(*XVE*xl#hc{%WUnv5@3t-Z`De>M6Rs{}BuMV-pcyKY>4I(6IjfpI^$O247_ z@OBAo(=Dw%&;s@WGQ;l2zljMCb_|KFIiDWAe~NV_B_vu-T3B0w&jW?iia~sY*S2qC zWM9Hv+Y|no#~nvjIiLmK0&&Z)Ac6)$$JnoWjZ#&T#@|&#W`xJFrrW7XIy`@!`~Pwy zL%cz5_KpwC?91+=8PChY70<;4a)c@-e*oyeHh@8F*0SBh!~3LOtC~LPdgyA*{i5}5 zMmQBN=597m%K1Q3~!2n0R&7$D^2Z`@a|c_{|+uHv{!; z7qv3QyaV)^cHbcza1sCMxQ-gtQfZIP?CjZJC|yb_2)>TZ_$Q%4|KNuu4*k@`B(OdT zY;vD>!Hbkaz5fKbg@6Qb+_*8*;>m46?YnOWT#M{{AGV}+#L#Y9^*_dqe_(x_4G(-) z6&1S{<3CTKFnqU1+7m;81pTkQ!(e{Df)xP5L2Uc<->0gA-Uk!hzDj?4{=eQJf0MlS zy!-#V_#bKkbNGMRRo*@8hJvD^->UHc%qBnV0WN!>z*dUgXfV<~$-B+fr`89W_y8$z z01jxr9L<%dCnR9iV(1$KlgEkIbSWK_dPg-}=P& zIp0AqDlU7xt#9`@EX@C{iu#XsxnmCPFGX)RA?fbxIdZEm!x!bvR}nmKy<^-gRHd*g z)7E)r--Ci2{_A{1`tKzbx5H|$1={7LMS=meVsa0RgqL^o|u4!H);xDABT zzV=PMZ6?0-k>t?b4{wbBoPnopSnolT#>2(Mt)>0PC*mnF>DRPQU(nEym-NcF>Q*ev z-A*5G(0Lv@er|gKcB$diY0m4oyRru82QI?3TS2Jt*s9^QVDRPg!vgsGtbY;R|5a+c zY#j5joDM)EhorO1_)v3{TXgIB1rR=4<+?1EIJy!_uJZ9cWOGqFnaTB)+NE;ga z>A?Pe`45I2XdADqkUjUa(;ucOJa4KAS(Cz%y{@+uh}-X8#8)3q?>w#r2pb;bl{jxB z`&-sa+S5`~NBkcyp)lJ3d)D$idG@Z_+Z-?E0%_ADSKm>Q#bv^M---NRjzD36e1Atj zzJvKS+iQ+o^i}#(SG=bEEd1Sy(V1|z%`Ci@^`HSyN%VOxJgxg}_3LE^#4Yl#^_{o# zJ6wWA>xZ|O@0h!US`N2>=?0R#4uJ|;mvL&A_)YHou7N{hfx_1T-J!Hi`+!X$_%A*6 z%kb>3WzL@C>xKK}rsOD6u5MHWS*%N}^8(Wzccm zk|iKw(hBQ9r>4Qdkt>Sy$g+3Acs-)dno|w?iTzLP8AO1du8XxxBKLd^zMG4#nGgnN6!v^~dGaZtNa#j-HCC%OTJE-xGpvIY3Of;oC0lhS}KoJa=qk zubc67_a|26h~4L{Z;!7E#ftactw?DVhWT60!3anI~cbksN;D2eqbK|=X zaoL!rNWFZVOS?*%Yu(5YK=L{m8f|;|%>hce_d}z7e4O)gdO-xGxgS#Qwceb7q}U#E zSYNM>G#zh?fudkRX5~*Sn4@p@#WOe(uR0N2`rUnq@2<@rKz6F{Wi0xD1au;MT5m^* z?4AzKnRmIdg8d~qi@;}DKiu=@u*j%hVLe;*o3p^F{TLc4e4bpGJZcO%_ggipxBrNB zL!-p@rFsgw@zJHJJ76Nm^D0E)>7|YKWXZDG;%>!Bi{9gL^Q)E1kjq{wtM&D}1cxz> zVx_T%1~*C<7u|gssc;@@%&v@FeZJk;^N;L>H$n=OzzQf;3}yW9!YHyAz|4kSFS-&C zvhhQyB3-w|tm0)#8mfyH{IC!WaIX6(+a6xS9KmnEZURllpuv7EA_G>O_qh3tas}dR z@c%rvj{zuq6;9)k{L^}wBgr_de(sHMc+QA9V_J^e4_4{}pFS*H0^{j7II#ej@AU<* z+s)RkSAL6JJ@}}%r-8(EL>7PM)o}p7PQsEjbj!1TU9D;RFxrgAzGi}2)nFW^>O&^9 zjU6&@ke~i~Q|{$4efUnqn;-Eyx}{GJ+pokby2mX;nO-+7p~8SIRRatk;I2iMeuA** zoQ1@y&#b&bS|3>M&MTct0hS*ifQ`wEs7PiPx1FbP-W7H1@pKxylZ%EoKJD}Ox|KS` zKJ^rVMDgRka?fZEy)c)XVy&+vt(?z5pS36CGyn=389)Ii7O+0{v9{TCBeGU(0ZOWh zth!{yQ?B*sF3O26lIkTJ_sVD#=xMaab>`A%%>%^`iw&$x1;}wK^v47NyMkJgkd9;i ziOH%~HTx%^DPCW%nd7QyD7DT!u<1*e;{SU z4QbEcSVbHwKz;39Vuz_`7xfn-UxDF=p+M+~P_-Tv3q>JMfWEdj3d^pY(v&~JMe zHnsbK#5K6Lc1{!bMgi~ddkAUQ7wGl|coh2y{~3jrI+ZT^mC|!2lS!oT-D|57G^teu z4FC64Nmyb#|E~uvfOcrfTQFa=o_2j_Iq@jq)Das_AUZ1dyV14t8Qo|>bC5qSeV_jZ z0}Bgu#)L88_{ki-Kl~os4h?#~jBkh3J}FT6hi42%Mn;M>XA&cLfRM@nqP662E{EvS zQ&P6GQGhuPpqQ{AdcTwKori%Z3{+rO@7nGv_eg-d0Rz*2@NscDfYc&%!0M8x>-xCIY-10s_;tAud31dGzcL4tzK(KZ- zSeS|Da@6U+1UeW$c=t#V{-Y!ZCf|X}E&|cl5}cU8W`MqjzB^yTA5fWa5J_KXfbrM> z8u}=^9NeYZ&7J(fh`$_pcSZ;B?(^qbg$4Jq0WzXw+BNVVe{Z%qJAhec^{-(3{7#3C z`-X1;%@gm?{=3idFy2K^WS)XXfPa^h z1K)wCYHz5dhOO~_4X!%(9x5Po746IY7hH!~ox|k~&GU6+=0t_JgIEfnUyf7ONgEWb zcSYmjgO^?RUki~^Gyvty0LoGN2GTZ$89kq_EZFgBDain!9)&?*NewP3U=5&FDd|4^(lbB|&|qwx=nzazRPn}V#yW6@%cutEnviEr2F zUzF?z7aUU@(8BMx(rJZVKh{uL48UlJsohW{pTg5}cy@jtk(af8jDtu6p!~rzyxwL& z?ey5}m1GgtNtE+02HknzOrh#96#aN{jdj*w&epctV6-6}r`g|CYiJNiDV&vV$wmo_ zm-tv1;OTi_3&@l`}0zAPEZH;tv;&IT)R$}@yH?K6-d{H6u6NA-Q zfq1yOKRa?ciS6zFM$8?-P3l;9y5nI9)UTo+iI7eD#qknjmDX_pfEVEyZx*>{WJp=v>U0cGt~_Q%vTXLgJ~{=H_Zv4Z_v2&w@#8wg zTB@joPDNGut7|^{l&0TqN{6qJaknt>?6*gjI1zq~MCP%XSRR_|OE{>2 z8~046-Ym?oa23a7tLB`#8jYI;^`+_2jFqai&d|KYXekG~{Zur6g@HvAp~_%Z5wL_g zH01H7!Ic*M+!sY>oVr&lurx_mCOTo`jt7f8PSqVb6qJ4lXs8F9TO(`W{!rSqr-Wxh zRULw?Nh+RtdQa)x&k2LG-!*voVH1@CYKTWVaO0+b3}xZ8Bl1&qhZKE^{~~rP5&nB+ zcHh9Wyb3`Gazf5_L3@*e)|&|SVtdK!ZK~O_U+SqtOmx*%v|QxSZuN7pUlNp5@6gm7 zgf^6q;}C1-QL+47zt!GXUk3Gu*82zM&PNT-WrwepbFuop@F z$UkevTGn=&U-c%`UPpvJ3hzTbFt-=yn-{qDAf|4QVZ0 z6yzsS2BjA~B~4wGp_u z6yLoxk$+1tkS$W4154YsvdFRt2$__>9O*$Rm!ZoN!#|*ksKiw8AkLk$`H}6m18xc( z+tOJ*TuTjoBvW6e2dAL*gsw?dx++sH`3>jscU3LAiWmcDLPdk=#)h;ZbmxqJ1X8tB*aC{^;f$xPgy@*B zofZ(neZWY)D=WOg*hA=-w{W%Gx=<-R4MwC4g7aMHq**bEjKFVKb<9{?kJAHBOO9?B zgoQV|lTR;0>x5){4pma66s}!;ZM9ul*REP!uoZaFzwWwL6F>=cApeXL%P+PZG(>7m z&hbQ~F(l4E0XhDNxV6zL<5%i#@(vFhH|L^}G33U3%4$^Ai^pUv@MoamW*@I*{!vg4 z>Lsj|XjSJbw3#d_SUcBoL9FZYa&QFuX63;-9vK(>9wnQ~eCfXd69} z6@qC`-y~K5mtmk_d`c@k63Iua3{%mm!NK$V#&!8EvA6_;QUC>1V;}4X^=U9e!1nl+ z=}|X{;oO;;fJ5te*X`+IgErX({b6z7KAYGQfcFIOnqXx6m2{a>ah_O^vAFQFE}ppC zJB0K@EMUhB6mJ#5GUJDjE$I58$cnrTiTT!%S`dJEmn(}@K`i+6XnPhyh|#f4b1Z&B zL%gUB<+}11!G6k0V5U!4 zF?ftvTDw)lb4SV9(FZe~!bVh3hPd#k$oWaiHC{0qS6YpLFwF}^ZxbIMC%<`s$)PpJ zcC#(!08+b1Lx%W~;+oj?G3iE64mnvv5n~PqONP~x1Ep6isxg`w8cnyiR34E77Ug9z z20XZOGooP|T3q5I?<9L3x~O@A-ZFg&t#dVSBfkAG>^Zb#vytbPng>& zuZ5vUxxhb9j?82TgZc5IRCVF!ZwLP2zKQG*Qsiytq9*@%1@uvzgl zrtVMkq)w~!3bXZcQ3b?Pe{pG>jPy}@vb_}DW@CRlU}LkqH!E=WGA z@t9_m5HaOiWc)>99O}D>Gz$SUzU6~(I5j4pdVt0jO{*Fy6hxm1Eqg^QsZ9QSs2X>C z0@R}K@(1;SB$@95egvpSk@c=uvS<6tU+o!CG}PWZ_4RL2;$h z-aodV3^=9B>Cw-vgdq^UL5mV)wH?W5Bl#I5QP#=mLl)$)#486&1#LG+5q?2OJ~LQe zt-cn&p~B-n^yZz^)K`%JFA~^QG+TjdqEtnguS4ygyo$y{RHXv(W3tCVzk*jI?v&2t11+e4D+WcpPCq5d9xYEF8WDks@#f1uMN55 z{oopfe4ho|Y?upstNydInAat!AJCvlP&8tR=33qbELc_>HLo3wqop1;TTD9`WFpAq zLR7ELWifoHKG7nCnOC6tcSBbYi+8~86Q>c-FBQ@|WLxnCmWcrh!Z^cpvqD!r7Q;x- z1r>dif!-UHNwNarV@E<)@n4dq??0K$UA*w1jET0E#B5WJgFfO;7E;j4sNmLuV@=7M zd}`gQI}DFZ_WnsMiZe3M0pq|(~A$CI_ z$3LLLVr+fdo|H`Nhf!u~%}||eYm2{C{bM_Dlx5I)g)%3=VTvmhvu(WUxB29AO6Qm3qiAs?GdcSp(n`-@>2MA>L?zHBu|(hw zO01gk#f>|TlN(=)dUR%9HB{9~U5O!W9*#yOBj0(Xo}${>MWAMgq5_0(fX@esDI!~M zGL)d=(I{4|aGoG4LCI)#K_VYi87u|AO;<+Ly()O7pG*iimQ>%00(5&C+U9~xSgIZ_ zsRCuDm|(T_2qzyVZR!N3{$v<1ne1kiy%vDelVh2g5akNQP*F+p3CL$f;qbX$^=Fg^%N@bzPK=cnt_{j9hqVo}yjMy~~Y?^oN z6N3Cms#ys1Ajf?iGw_A>OEjq`3RJz)9 zi8h91v`GvbD&V2VCRy~Jf#d~Y`$8T_=;_+@Zs0}=cdCm|n)2dSKpTU?osSjK#!8`> zh{K=%*vmuqfuKK;%*i)Cmo5vm&+@a=f6dqlhoPuX$y(tx8Xn4+T72tJ(Y0*9 zKbEFFOY6iStoIS^Q4p*4>P2kWqtRK*I{}@PAbHB6fHST>X{_h|p2rKfV$pi*(X3r) z5GrP_aZ97;KBq#!CX zD;sSMmIG#zMC2`)76!(I^AMCOfK>^dgaGB@OQ!41i_!pvL5^dO`hkhSG~99gw;>&^|eB2BiHBk1O=_o6s6e zH!Kht2SrsuI6f2hY}&T9#4sC0?vM zqL1O6E_X%t>UtZOv5-M@`Vf=+OaECgP@ zeGsm%F`sp}q?tJIM^f_?#MEzUFNEPtu)>Sw8F7~6J5K6Ru#8YC!TG8WVohzQ;4F4LY!x9F{0$YS z($fM0$@+zpZ&k8reHvU00iugap(k@$I^mDi_3~%=X?jZ|Ig{B2PFYLDq z=?mFhA`P2Q4?Y(uydXj7K>e3`(i;?ER8rc43yeDEO*qVmMvN`0jEfX~b2QR1Z>)}< zI1lp^mqU^64jC9L3r<};H?hrU9e;2>waigAd!Q1}Qi*0;bo*wB*%`vJxA<`cS!aqJ zb=w*NCCiDSdJGN6-U9ff-v=JPfZfc*VIo~Un}Pi$C=i|vi2;3KFTTFalMPGyiYwWXu+5n=lNy$) zj71@dx&|h*EFArk<1TTGDLAT=VZuj-mbppgn`{tXZQe6uV8T*MIq8=ee&oa{hTgC` zFw&A=CbQ4U1VzKtq{F_NlB`9+ghYd(sE16I_N~6`Do4~a=xy(SS27&DQm)ED585X# z)&&1TG8eUEyZ8k=wWTF`zz`@shLMGm=PgFaI!pEbe<{LD?H^Y8)BQ zf(XjWg{^AtecUaxgU%{0Jc#CY-kUPRWA8^O`)um`n$vK=um{#Ru@bF|9^``)wD+y4 zHmPuL*Ic8ZUQsIi$}2k8&YG*35I$`f8ii{R%^x|Xc00~Dgpp$g@lkAjySZliK_e<0 zC(&%PWvU^GJvQ2R8thW;0%`f9On!B6DzAf-_9tGPis0;h$^i5STk-gGs<14bmJgO= z?i0rblAPVkq{&*W?wCVOL$ss#Vt5;VJtUMjBh%EGDRw(<)tk9#?$2WC}ugPQh_1kr6b@CphZHsbkRCYu*Yg}1 zYnTXvVHh~s&u*xIEY(KB^k?^6GtK0>`^hQ|56eq1}h<+U0PyXa7MoJnT z#dUVqR{#ra2B9Ndr**3{?y*`}pJabEOMWIpnK&f!nfdO#sPz4bL5m{kK~4jF)O5>jM7x~ z*Jesh&v*pupC1G?RhGlNp!!AH#85d&m~-?6B>L!-?{1BjUlSF?IdS<;7rLIa!#qVy zb?=xjbUrq#RfB={XmQHVn5A6wi#{zY4c_)$2v`l)H6{Jl0XB38Gp?{U=%Nsp6Mu=9 zEO0QL|6P?9xf1RD6;pMcTCnVMGh%&4*FsO8+$dPTDf-ru9=FGr3zOTXh}upQ6PhiG zKSXX?-C2b9LyJp(AcC83gF=vV~d00MO%L%YB3XZ%kqDa%(-Xo2(h;)vY z@vx^g;G{P8Hm03$vCMVUn|>xQrit197*A(Q6kg9e-PA|qCHdT}zA|!{1Xrv{b7WDc zP*QLx8`V`_W`bU>0XEsp$%a8Eci{5YCpvk#6qwWKn;aXG1nZTaX8fXgDQ9aI?7AuI z;q%4aR*O=5%cZ>`IOunF<~QkvbfbjpMBbZI!mq7s(Lp*T$>}wus4vYc!D9Z!S3S|B z&-NR5z2-|;lHt2n4&`4M$n>_h`7vdmNvfpOlyonibJo5nE7yM!ZW&a%kP|iab^;O} z+OW5r1pA(5B4WFn;>OC?h8^+k%&Yw!mc zS6K^J(QJD$#eWAY<&B#9w5fBaXAj6SsX__?@2Ie*i1e8fji(}A@WMU3t1(DHlGo$H z(BX%rb^BvCE~DsZaJkXu_Pscnof=Clu|I@>yKeQ-edYln+}{61t>7+aU!V z%w_4_hTNy3h4xC8R~8L$!O^mjdp&F=v6T^m2exymM+bg*1;G_^nN=zJVEqYxe$UC= zhr+*UU%$u97Unmy%W7!$Vldn_yK?=C=OZmPeZlM8k>Ns~jnKp!qU^R3u~U7DukELr z8Cscv?~TTlkW#{TWdrsRf5Tyx2Dmn7Q$6FUl4$XYc57MmS$rtfsuceVGalV}mQZq& z_(9?27o?C2X5slVM(|w1jAK6Ywyj*c&nlE+`=_F1u9&X!mFS<_G5ezZI1fVjVjS*X zN{_Oxbj80K7dTXHIHiZD@aMBjj|i_n=JtbQn^ep0JdsJMivGbd@mDTnjPrOjv6OW7 z`k@%ET#S?NG+K6m(VcN(!{#qL5pu;fNQvR)F{YRww71y!oX62g8uB<8%i^kfU&~9Y z&D9E-JjbB}wx|#6w)woKcCRKjOYd745?OwR8S$qK4Z`6ltP#O2@TFFHiDIq}lUs6j zRa&qXnqDfa>eC(&C|L%zvPY>r}ia>=+g>8C6Cn!!5AW+U&*0~>N3u!|YWq(QO`%%bgL zPS$HVKaJ%6Nj0wyai+Uy)almcY)-M0CtmL=sYa}}d4_F8*n4W&7}MyQ6lMr(D1#cR z=bsZvfg5l52I9tEK>9!weSzJVh1{H8tg?7h-N(#Q# z&&3C{43$uF9Q?GkbZU3~TzXa&8M1~Z7^Zs&W>*?FlUKtJDLe{fHT_arc3MRNCU#PK z*Tb3@8(|DRiZC)p2#tvSS49+HV(@+XM=t*83>hzSvBrptk~&8AeZn~-!ow@7(ZYjd z3?S8~8KrV9nO-fJWb#6%z8LyO-xRUl{YI4#-Sw=3eZ8v6-SmdTd&akDwgvcHZskMM zrWec7cy+oiv=0*v%8%nQcBqoyTIxgimhUwRAyV8W3CO&i3_>I=xdhIg57|piFA~2r zZd80xJa8V@hQMXRX469TFGv4vHsi(?C{PoVKZm7=^hWk=nPIvnpebrPi6CQ~Sz)!s z6YU88LfX+{&9xJGcg}wj8g79`(CevT<4GnArOJU3W)Ee7yrh4$Zcj6>7%C_!plmZR z>ma$Ztf(}d%B-3+!L@(F$BCSfi*-{a+d@d?kMf+qb|Q9{Z0^(H!csx`#&Y z2cR4I8A@DpA3CaC5^2A{HS$yLv`CbDq;2z5M8b%W)^EidC>k~`J&D`o*^cWhYdTS6 zPHqM)J51+f>R=Lk&6MPbVe-Tb&$2JC@&%%Le5u@K+zkGh zJ_xAWt2)+i(=k-(F!cKywsW&r#pZr#iKkMZZb?6$om-it2WqZ7;@dWpD zEsi4Bgw==9%Jk8%5+^!H6`=*PmAUrl+zH?cNY=nPz8;_9*63>F$E^5sySfI9UtoXm zwrR1DAk1$l2g*dgOtsuC+qZ(bUh?d9EVFX>YvI^^V#XxB%hg@2arzplNC7X}hv=_1 zom^&sex`HR)B3~n_Y;`#=d?WmY7t0ZB*wn zMQ8^C^JTq#rPxioXY8Oi^o{I=0~2aes;@P&$+!ezV)xvCFD<5UEHvY|u$TL(F9%`I zTYv9V>|0vYMD_gq=m<6`K6~L)88Q`|F4|^UC)vRVWa)!nb+azT(a}R#Xnlj z`F1tI;o7FmKFGiIevLcPSN__-i4qUk6Ao_PV! z0xJ%eSl?voZCJ-LR!nfTd#KdwJp0q)NlGQvK>Ny&>rlAu=gPMBKkh<0VqYEjUhZG# ze#nI{jXT$Ts{HbHaj#o!3OA$^a^I?`u#m%1RWy|0wqi3%5jHc`k{plWA3xF{@r*71 z#)a{^lnis_%}5s|{ppgTf~1leEhA`%m3sjFV~aw|s#)7+dUPuM_D;3 zkjbd}yE7s$Q2$h2umz7=fg~|fAip1xnUuIc5t1^mB$3Zedn$}y%E|j;i`i&Bk;PGe zWEhuw@KjgtKV)co1y=gEETny)*@HYvy_HaF2t?7wCE4&_gq`tv2}^E)*DQf898Np`?>L>2}A}b&1(V= zOWnqkCUJ+y_@sS_Z%m%Lq?uS%5>mnjgG>Gn*9veKmABJA3L$@Q2P^%RmshK6j&9p1 z|Egc6=r(Sc{!uWKPobP@X=#AF^EDn@>M@(;|0{|cl(iv?lY!}$i&fd@URaghlqQJW ztM!RwWtw(G`$8f%c-HD79=q~}&(w2dh2orAWMM_)lvx4$wpUrj-wqz7#H=8uznT%p z^|6PCjNN%dCJtXeJJd{LeGU5Ko4mq}?TGn=Rsr>GT3MAoj{=h5MH|jK25o8K!v6t| zKykkwLj?K4C^XS=@aP~Jw}RK;pgJR-CN(QW6rLKUx@~kSl{}-L4N&g!%s;tyx1O5H z)K{OFq%}uhZbW592w9}e=X(xwlzN8!G?a>-ZRxp@@lpMgBSm_9NNzDx-|?3InwSd% zyiy{f=ou16sed*1`Zwr>S~L_(Y<`qa{I05BZM5=Y-ioeAQ+Z2c6gn@iqN-7KQFK9D zzJ@)sh-wWXWT~)#&fyY+O*SEfEH<`;4ao>0gpe(kftKAt74U|jIDmBVn##v z7s%(ROCbQLdjDaK&NWZ)6weG$ATv_co9xxdBVD^l+D(_@xaITgd_ zq$L4zkK7@7C^~tVd>Er+edPkx`BKCUKru=`iY&k<$?F0z@SW3djus&~-E(D7Jc&Yp zTiI1@tVgCRJFT5R)6n@F%FTT~3zi7!moFYsOpKSw#k&}Z>7+!E+2 zZBe%Xi(2`G!MTF5Ti9)Lq7kydUKd#$Y-!cB8@*TH#g;Qd$SCRCIn?4{7+aks#=sU+ z?-5n!R&A6ukBk7;xTS&$FDBWF;5Y~&q<6R>&C-HBKp)UJBm=>UL$)IPjd#sJduFS9 zT_Intx1`XXUdTxZS$r($Glx0q9=+@BnZvqA7&H?yUHa<6mpuMgc-T)pY01mD@*gcp zH}kdhA%tAW(&OxbEz3@(D5~RTj_cDcEzj;6LqI1t-NG3+VDph4ObJn__ zk_D0e>(k1XN|!5~ExVF1-QFdaPq9pR<}w%4Rh0f-4BP!`7BsAvHo&L%xHXDt;S37$ zQ7fct#!K}?+3`pzE!5)Ig;ArdUY6AF;!mYlK6kRdm8p+jlUDylG;q})EX{ekyL!2 zH*=V@s*>G>MJv9R^#Y3SOfcTEo8R zv7og4xR=Cx6koL222d?`vR=J@ORiMI+^_I9f$#%J;lNiTS7+y9823UCO<#Eo|H^B6 zK5eghxL$q`zlF?)>1`LMdRN20LwcQr>MaY=Ybr8%>8B9#np8!})VI0c@3mzhgZfLQ z@g!R|rO9TpHr&=s-Id6l@#;cf*%hyc9-wpSw`d2u6ho{UiE(A~)>Nf&RoQ9`6IJCb zA|XqOft*80CtA|>$ZM?%zE?IP(v#v`3F`tV3VvhOT(>TK)D=VrVZpeGQxoqK89jcN zl&Is`h-p_-P$LpzoIe@aBGIS(r3zVdy>vy66g(2ihL9+UM5JUCmgEBFTKpcKsHyBi ziXO24RsA|+;%g5ZUj(&rRq!RNl&$)^Jmbh|VQxSJ*O(Ez0RZRv7 zvioerKPLOhMj9H3aRRH!tCp+OJ)nt7Hje1)R{RvR?*A>`vziU#TVK9gRq94W`N%~t zhN%*g(>Zsby?ty}89zm>&9ASde~`06OD$(9E4)8AKE%^1#i>NLj zYojcomnCkw)nk4r9crjD?n|jDu~LsWCwXftaI$4#y@4S@x=_DvYj~-!HWISv>3_G< z;ia8<>d*g_J^NQO^OQ7px$*Bp#Qfi?w34T~N{vqctM@na0>e__g{14`mlRXxuqt>i z=`D<0sm+s3T`T}CocDjV@!&|+EI}^`72lw!$Q~CJC_Pg(`{qSSt4>Z-^uMNmi?NH- zBc+n6PR`{sM{3lY@1zG)b^aB|C9(jwQ?bJ3ZnJ*#nu}X{ZKLlcI%tV{iA>3+qGhU9 zy&bns%iKZo-ERR(T7$9_v|2({#7fB)aO-w*327#gGUW@J^!=G9<{_0_tu5A-`6gF| zwA-27NjKLwER`3)Kjedmge+d>cSD-|!o|6_M{`^pLI@#bF~Y{5Z1vRN0b7(eMi-Hg z#miis!}6v|M=>%-2q9!i!mfmnZq&JsijlZ!s!IQmkVQxT%SvY7vk zg7q>;(0kFTlc`C4@)IhgQvAJ2u4pPbqGSiW9xHvO8fG;psi)a9Ii-s-%jBo)NUQ5& zO>HY4*M#p?#wUIwe0<myeUq;zA)>hOeYv5dmN8W~$vW(iq@Xq87gqS-=1$YN(s&Y>0uvATvYJDDGN z%)Zz?ce3A^Lw|q`ewf-p)XG6x^=1_`GrL$K!JA#o4`h}e*OWssN+DmRL#rk4t0)a$ zC9Ri1-+X|Y@yWtmOr^lW#Zl)z_Bi~h?mw;A7NVGZx!B@>t@p`GmNM~O>l(6uk(U`~ z1cm7EUR;)yP*t0&6sgW)9lfMdm2{7ERj*%x^|?SHxnVIkfpb(RlQWI~me`HOcA%g@ z@-~^i?#R+IEHDA z?iAIu4+E!FB~S||E0XA%a&E|exTVt9lF^dDlj}RzeLuYGdVAOP0L)JN2fI9~ao~v< zALVPo30b_D-5x!D#s{P^w)q`L&r#IemX($@3zh3mt2+FVqYxSVRl|hz0IS!6z+xt3 z_>{W4^G5VaO}-JK2g=JxW2>gu@N-dMQ2(&~^RG;QU76*8#}Hn(;F}&^YAu zVQWgrQbs1$jGca7^Qh-TjBdDR?gEFftTaD=Sldu2^6gXU%wgqE-G)YsZC_4ud0PIP ze{vmPZf3Ih1Y`a1ZX%)h7^D}byv+P^D9(jyK3KULg|y1US4qps?9#Wmhc$ag{iE7} zhf2#NH_Gb1#w8_%@I|@qlUK$`sEOG9RThyP<6c^AYHMyTli32vT>CBVv6C^`2Su6Sqo2 z70F`=0!iLEWIZACOfHKUbZ9$QJCPOJyUe0K-Ik2z9?YM=k@*20DV+V@2WGzZrgCYU z9+>*n^T*HlK=ara4M#sh78c#~Ka(Pdg{5dY@6srG!;Kr zsRPH1J(i@oj*#rHzE>k9ExJnfyvFMeBU8p8{hEA?_t!sZJRv9^tJ9%$I8C4e5!Z%# zxyZ_hKQ?LDqqh)8=9a`iS%n2cMd%&-LafVmqEe()u63J8uQK_i6q}zG+SR!khKW-@zMiuu z29ckQo?D-n6P^o}TQyLuOUYN86^IIjrQ#T_3GhtHl256qBsnQ_3rmlE<)v`-OEuSQ z6i=pV>es7gu4j#-kR01WNJW03d#sw2G!cnX1~A3zSV5eF+!|`l{F)@1$h4Ym_mFRm zC2EAd@=UK@U)F7z{%NnFnFg@eTO(Jc<7Bj?YL&!QmjM?gZNj|`vHXiuaDN4zJO=fu2dO~_f<5WuaOYyoAwfSGteAV3N-N*&+r84y1 zsA?hD04`dwVf2bTZ)GK^6{4gD+c3JF5;c39=~dP6cb8Ooh6&UE@#^rFUkpPpLgs|t zf9s}y-hbwQ-cWPK$KHM8rZ*it{pFWWfBEH`-gL0uf9t%e7d-s973cnR?3wS8W!toW z_{pf94F7c9+$Hzz9A+#SEjeGeA6*pE-+)dt!~GeVp3RhZ%Un+swRFYT1t%X{Xh4%Q zY51J-PKb4%=ncbK&?nvG(q__)VxjQK$&b}bR6IQ3L!NYIQdvlJ?rV|CsDl3yo{(HrI(LaAmZ2Z zUhYZP^r-l~SI0{-lCQ;@nyBG_yuA1U zON1AqXihl1jFm;nTtff6r+KcFis}1_6w@iyH}`945qAAlF>u7ve3eG2nKJ1sxq1l$ z;762_N>^G7{a~@XPSMiiy4ao)ovg3o@lBlY@rBUiDGCY;40`x@O@3x}(%x9I6 zVt3TDjsw%n`qIvC{?|VE$9Nik<=W=4FK++n)4J*Y;#d2}Yr;QV5$tp1e5y=HCA#kR z&Hwr&edulgt&?9Nt9L7&0igH&p?&#h0L)zcmgX^M*$sF5LhJ*#1DLt^t(e&~d&$RI zC%#lx?><+}n&YigUNv^gE74pAKxe0>KJo14Eh^jokz||tN3-~mR0Av@5A}4%_E;X_SAoF9&rZBz5?i6_k$6rNJ!)v zzW0gx&|Lspr@e0MFaD)?CJHIr?`3v>41mVr&jips_^G~}<{_s8Xde0(0RBIFZysk? zQRa<*tIoZBdrPnBB#@=E0|^8$1QZYf0fPexo1lV&;;YOk?@vYnWkzrY(HR&A!4>rf ziin7cOHd%FjEE!>$qpeQdqQXJB%Myu%f0v1^Zrq%>eN~9(l_Z2obRVU$+>l&dg?i~ zK2JThSQBOq+%im^I=Ajii!=XlyJHz1?Ckm4g?z;1^gBPSX~fp$155=2@f^A?7V>Y> z^G%6`I~8?ouVWBqZx}}4nP7}|68h&M$w)4Yp=SzEhf`RhCNUYr>cPXx_q~CS_0y2& z(PbFgl^Y)w3GcuV6e)auIR?ekhlB^FY9rG!%aC~}{kdUInNkR6w}5?r2$@JFPaN-q zSB!8PRU!P$ed&@@cm0x37`=)@K>`_WBpUBIjFLS}y6{>Tq!0ZIMXB`hqQ)cs^NUZe zc$7+C1ivC(5yemznP(<(4Ci8M3Ic@?OemO~NgNb_B82od(YPvOepi8N7?jdaP_XgD zybb+`g85o%t1GFoMU_JoB?>VNaxMlXHKcNzoQzkJAI(>8Ww_}Jrs%5|W=L4Xpie%E zfD8dD=sXN{6~_AyX}@!hA_2L-{S>|r>45+MAOJ~3K~$+s?&Y7#5Z_N!$N`cdLCNUp zI`rQcNDpCV&Ye}WZwU#}V65)*e-^ve^N~{kq~HB<(X}nN@G)4a^t-N0pY>4y)z^Ki z>Vp5vM@}7xP<+(X>JQy-O*vbKh}|1|AGm}ykEy=;UL8o?J1N^Ukc1>kzsf@Y=Q9XH z1B3s14Mjqv?H6Ml>eLFXAk}0(ZrUJpzb7C}(98>Ri&$0~G%N$z=RAi998?C(gb?!9 z6s!WEfSuxl?<5a|jawlDAr&{G7BPwvJf9n*z?j)rl$LAO<{%jX=Caa|<#JvoCiCF= zCqCmaSnxiz!dD}Wm2t%whe0uY&!P081fhS?85WXOYz7zL9Fs!@F_0)lqEz~5Hbq*7 z1+~qB4X+rHeZ?5XEvgck1c)sMiY5y-xzK7$1ZK2`s5(et_Mr#9#6rF~AYjm3Brkgk z6(m3g-;fZK1R^Qp@;FqCQ1~cgXo{)##W#;qTV08?rJ8m{MhVvbV%CKhY*z+N$a+y> zRArOK*c1Z_8MiBi(Az8`uejirOVhn8`}93gKLJ4GD=24z1cw9JKR?(%?{4&Uqq?E~ zuI1=In4WoMX70ZO5O1!eeOpmgd+^Sa(RTo~P1Tp(l|K8UWu%gs`=zRj{zYynl(07~ z?)~-^EK^_e&rg`mN>t)B8kFrh^o&Q+p+eryF6b?cQ5gy*=i3UX|H6zzKaH2t9CVy; zQs;@lFb&8^H|UD=4wnTzhdwdY)#wQx4t7ppFteiq1z9bYQ9y^^~!%Hv5lWAfUM`LGP6i}p8#Is;=OsEvBhXq<}m20F#_O@ zt!S!Y72kPSynV=9+6_qyNW$ADRz|)A2}(k3Q{An9l#59F=iLP>U3KASf+3Q&|5sl` zJ`14cAHUQ4gX`?IF9Bdp$HLChf!zSCspr)E2ffUwGYoaqH<53@S=LE<8bk1PKxh z2}E7_ko4+<29I4Hss)A46NG7EF|XW^!=P4$US$ysv`#ozKUaVFfvWd^-h5m2{x4Kt z^ELf5HSK~*ikKil(O@m(>Tdl5Ydi)(|F7@J{^5aOh(nsn07#wu5BA1aq-6+zy0%Hn z5P<#0U&OZ8tP{=$04rUdJiXt(vge-n>)n-L?5NtQJKZq z<$4ay`9~P5_Kdk8kN3s8J{zk*{k>$^_QI&OrtaI=J%^s~Fjt%BZJ}kQ z{;5j+)%s0XAMFy5cg2YD))P0tghHNN@ghhI@C-{MV(!nMd=dV@I0ps*a=nGVfzCIB z8k9j#JVYHp3b;2MQeYa^t-k&d){xDlF};z#xL#3-y!<^v2NDf>4pq&F@f^a-CX8#a zhJ>}BuzFGqS!foP#4r@a&;*H#p(&DEktm+h8!6rcQH+10pwBSM8CZ}Y>Mguk7%bi( z88d4u`QyrqXTieRnqv5xklDV8zqECn%bAc}E3O-xfMhDp3^0C6z$wm`LsnyI`b zX*6=hL0=W6ayKN8yh-~B;`6oKj1OlO`?5$MphWQw!y;F8$4~|fKdNb|e_23}GNUu* zeMK%yO?#N80gCY-rlwuMhL4w*zxDm(G zI{v)FBWZ#Jg~3|J)qQUMq5rvv_V4Kb^&RP%SA>O(t^eXe(YcuqAK&|h5=i7eeF%c2F|1iLl zy!rtJ0udxIUO^KCX!JWWWN=@RSB8MCh+v}TTQy>au1W>MB=L%*SG4*fnruVklSv$! ztHD>HMG*C~;E)|Z=obb7KPs1n`w|IhVL&xFZiqOC^Hwp*_t>o&Y zNd+=bT)!d^&}@T4z4_p;c{<#vre@6xlKWU{0udk!t+k;9MUsW07&4#OQ8b86C^Wek zvQoJfB&!gpkdj&8ZA3>=WD!M8u7pN+!gc3HVQ-nAb7-~owW6q`!`enjNYu~LODU#3 zM74pKwh<#{OmYUCt(Lx5`T`}U%s;vROb6;L_GP61F+5T7zGA^xrc_~XWe^1uHEke) zvJulNbXxH=n$pPB0yGp&MqbL8Sr)h{`VGQBgJiz9%oDC>>fN7}K;*{47+C3=4}YWQ z8*>1luez81UPG@1fGabpNoZ4Scf>RLV&|0}k-bA6 zh1sPrz5?Wk4gFK)MsRo}B^VJ)QX6v}GNvj@U^tZ#Nvld^NDgmy8o5gZH~)h9O^OCaR+_8? zz&-gu1`|eJwr0Ka{cCbCZERnKi}*v}8E~752rIfE!Z4zh{KJ1&CC^psegkB`Js~x_oB+)gN&9_u=>VG4ew8# zNukVx#8QmVX&#}N2moGzg>oATFLM>bgb|{K84nqA|5&JmzFZ4?CF_mntM%S;aw?WD zB1JswAhUmng6})xX$E3p#wTP}O_@}HCcJX0P{zDDL@pCwHt30hN?Bb#`>+`2p>^DQ zGIQ_h|LvX5+dZ3eFFoRmQvIQ?TjNiwkcT2uKqvQ#D_>^KJZ`pSDy=Il0Nw# zDl3&W;dJ?sTl54S+><{0qpYeH0PWvFJzW(^qAbs$X%iB_Kyu`ly&Df(Wy-uJqUHvt z8z;rwKlBkm5Ym2AgNQqfcx^?YbUCdb2!dcBz?OrBvJ?c|Kad;f8{D+jz~S)G>6#ix zsJ{_jTh#bq=l|fGI%#`V3L}L#e)>lUa#=BeGlhF!DJiy zIp$maOU)(uTT&nqNz4e$(@u<5f{<3?OVnFgU1Dv&5x~hw%gldb4gq6s{nqcfH_%iO znbuzoi5+`Y_p8kPDDr*7g%czB9MZY1I!q9Mg^sf7O%5^9HBB+LCHE#5tev3- zp|88pqmXZG@p1D?D;qw+m|U>{v$?50K`U%NqjBIU!#=FK=rgRLt?w7Nq3?jd-0E7Y zulshY(#mv#1cw{e_|uN?jE22sS>L0df}P9$?knl{e4^?-pR~6utrYWemzA1b7#ZPk zyDi6d@Qx{dHzOjJlB#FjZ3I`D!bcxA-ulcoCnR(+s!41}>ko%FJj~zd^E&#H@FX1g zB9o72BrxcG96YZ=yZqo#T5x3WjY$&B2rmW&QzY{#Y6uOB7Wb(H1Xrs@4b{Y4ZLBuq|pgh6p(_oZP#JAPr zqf`jwt+>7r9T;O+MiKaWiKvL)x8bunq1D|>5Yi6?7xt1n_XKSvRyuc!u@8Mnzw^VX zlV;nmKX30?BRXDXR@ypt8XtXP>V)%=sjIMj2@<@uVDDT@-Me}p{2=Tc0O~uCoqu0; z{(TipVxY@P{m<|W(XM@n0GXzZH4gPdf&>Z5MACi|BuFqI1kKb0l>zylLajkx_M0Z3 zQ6|hgW$z0y-H8?1&1V{cW!Q(Tt|fKaRayrvdHZ651aDX5U-{+1SAKa|lPKMDsQ(Sx zgv>j03a=^XBU8W3O@JYuLmlYdf*4{S?Nn0U4bdy7I5jm!&4Hxw~%V`3HaHU{x;ONpn7-ycX(P78ezwo#$vp1@EhAsoV( zhZakyFi~uM|C&F2iAL4UQ2LN+7xh-MO+1j3R= zSa?)mL3)IR#J?@IMU~o+%56U;gMw>KLkaX3#CYUmB1Sb!M1K=SChGSY5)fRu?F}(~ zhKxn43MC@OK8&F(k03#U1V;?z?>U4Xv-Dj{U!q0lilzO>BG*Mj*2;fd?!xi{+qzv99@{@Wmtk9p`%lQ`;C z0cnC`W0X4P9SmKoGG=r&=soq%H(CaV==f!&=H`shFDLISpA2TwKIN92&ktEv$_x&^ zZy|4rI$|N?Fc2fI*#u=T`)!b*V7M<+LuzxO@X%@*^9qGxMWJAFl|xwL32zJ`fxfM~ zaGFIFhd>L73^Y@WFBYF{-fA5Z7))KuU^3MIA~1ny61!}f8!O19^b!lL{h=+bV0c8J zlSf9NmNI<)sEo!IUv5DTQTgBti3$%*D+;C37eagw5N|Zb3|29*LYr<>ioWU?Tf3)9vbfY>Rphc#zauer zT-72GsblvH*~0f6dc!>yDS3HnZh8a{czxVhgo}9P1_d@PMGb@D915zzv3m}Eqo1o+g(|l}uZGTXBP5ui@yd`sa5jYAsHbE$ z8{eM8pk_-3TVHsraflF3L0Q6SLSMy%2QwqI{uCdMfJg(0Qe>a46_iTUd(10(l@)zGRM{EDCqB_gW* z#QcTEiVqBm99oIPLgH*iO%M^C5Qu0{vd}>#s{ND^5|6UV3eg5${Pw~ae_)Jt7xk*B zt-#(?6gSu23)qc5x1n#Q?fH%Z2+uV>aRyw{XqS4oTk_hu0hR5<*76vPixPgoz7>b=9 z%Hijxb@E2+z z)vOrIFZc5I37|?n&e5Wh@Rc$7IG6&P1i|oV_ z2T|}OFqrpyCFbUP_b77V07V9aL)T@>+Tz6y=#Yz~%r=!5Q)J%J2l9Ij~A3o}to zAG(w@SbwA3kENGkR4WQ?c*VCyUmzkVqv959Z=qkI(@{*AZ*-B_#+}ZPyjNU=a`Oa6 zCmI*AB$O3Bs?`M>hM7oIn~CzpN43u=kznMy@jsa~LVzzs4P-InvmWU@vB(q4 z{I1}#QvZrpugp3$%5&)X%s_V>I(mDaBK92mA`ra71rdxMe5Tl+KA~gM@+TcL!1_Ko zbfVQ4!U8WNMqLWkii66ndEhq%qR9L;W2py^N4JlMeUw*_#)PcGT^>tO!<`94yHJy@R&L5eF zBg@CAwjGtR#gG+^VC~mji}xi4tA0$lw}lo6_tnlo>k2u0#y6B1QNoQtqpA2WMI0DH z?ZaZ|6C_A5lrf-XrOpFaV}b5)2rwNXnmEV`;btLp2m{EylggwFk;=T6ekpTL*RCW5{gA3X)=eRp7lG6@!1P>f=TV_g}O6It1igA?RxyoOzfKz{u0c%n1H$$n0iWpxv?a7q3XSv4d&-Cp=QgN`;!Ip z){GepH=hc6VVL*HRgP6Zzh2VRIZ`kuqC=~)!e7^8M2gwPkTE~&nq}(Z zdl^x{ot))fHIWerWgVSG+m^-zjEmCK;%jg5l7Ou?>*|1zgRAmm+5p@4gFv8qC)JYS0vXKYM zrx1LX$TKkR_NR_-jR7`Dc78s4U>w9iwj+j{eP+vNo}X^> zX8;3ZPUj|jEfUWB7imLOH3n&3$fTLB{mkj>2%dF~WHug|noQVI{grO8=5zr!WY#?h zGYV5Ka1|gegYKwREYgaF5!=mp=DgD3W{b0Ou zM=CP7Sx$&=Qp1%|`x~|OXm}ticv>kC=R8cM%5gs=NRZ$N;k%3?`hs$omBMi#kyMN= zf4Aw<+eU}4dMh$cje|1YY(kD9D=j5cm12$!DTfa|bO7KgTqteBRwkbS7&!z?+C{?A zlSnBj4B+I95sbmszDm`N+knj+<)0XGKwf1611!rKTr7eukhPsLn!%aamb#tnlx;Z4 zajCHhKuV}ObX(adc?>m3Dz=sy%e_t|(sRblFg4A3L=FLCAP!gtC3C5? zZOI4_>Z@#rhE!oP$sr9&1D0!=I&V_xdq zW4fr-%(|Tdx154>6dG=52SVAOwkxgEgk-f^86+UnjiLA?J!z zc4-OiKtu#QqQd*^RsKVwlkum&RMk+yTswzzcRGRT^Oe-Jl%yo43WNcwQWfoQHVZi(Zs=AH*aDWS@}_Ym81euIGQzO{b?Tt-PbPpI z0SqbTe4TF6S_#%wPs$^d7~Ci~0=S-!QjRw#_n;aXoOI=Iz*XOMxEGJui zGj|4ER|cW_E2C$2x+4qVpd26!D^9g*X4o{^8_5VvxYh=A1-0CUK^772*9v;gqoJB-Vq2Z8-FqHwjY1X>i$1 zS%@(Ubx1y+2mE&!#`^{n&tZZDM+Px%t@L>vIWAaAoo4QU=*|@y$|XT{OiYan41&2n zKz9=$Ay)&hY(nB5mP|O>fPa}R z151H%rJ(3?)uU5N3E-=WYDnZZDDUWxPP*J3_yKp6Bl#6fnUOwza&n!FB9|;lRVl+k z2Pprz8c|)vRVOReFUxqVwF#+C*-BttrL;iN=^loG@Hr7~w6wbQ%9 zN2shI<-Req)0ewJi$$m7bBZ98-aH-Bw>j8YJVpe;+~{WNrc1ylC-bIj_T{t5jRLQXXJW8P*+>95EXB$-fm8?USUb}4 zQEIIumYzC`fdeT9CY)FLQ)GW4%Z(dZMXJ-56KY_F|4_NlGlF%KEs&XB2`biPILmy0H}*{ruAXwGhBgyZTIzMA4Su+q$1My@E{2lu!9 zv%Q(2R(iOyGQ)G21Ej%Y)_(PtRQ1xwy*P;qKz6WsBOmo28GV!*MVRemB2-p-##6J3 z3zb=VEhrqTf{bruw)#@_r)R`S7%N-UBp^3ErM8;q(y7B+6z~ijT3?Z6FMl#$0jMs8 zSt_HLYd@QvycE@q&YU);d763YgD=qEJCTRX$He#3?2F8XVb(%36|?Km;rdz69|n_9 zpQu}{`{1^ykZ&yyq#mShB%JMOq?g?iIEMhhzzIC%&Q+5QK@hf+Zv;0{1`tPHtDs7E71|@B(StsgW)z zjg=W2ILsBcBpsDxto7o6<=WLuc^Eub5ExaQlqnDb<)L=Bjw$U}Cg&E1_U{`y4O102 z$lJ^|Q=#@j_=R=t44s!Y+$MUbX$8240_Y( zHr=;+j^9+NO*xG=;rwe_OQx<)N@dkz`+7Fxr)og15QWxAX>ElrSP#F{aLUd_PWj?TAFQvPSIO@&eAWnP79 z`_7<-lC);#SSCi6NJ&-M+s4Re!pFx3HS@fbInpHe~O$f^e>$Da3{n-reY?i8Zs&BdVj=CjT);mJ$ix4K=8oOFc| zQFl#BPw@0(s;&i(oNcX)c}FEjo{%RsL$A}-A^|ob z#gsy;Ch~RaIUp-s-BK8%tpIGHcJ#q9(qO9t512Fh%e{Y)`*t`4hn-gPGvr8Zi6jt^ z=g!_9NaoB@F5KK;?&v3^G07p+2-IsqNM*wY2$mZ4Yyu~D^C44N&sbKk-6gG$x_Q|T z>Q_IQnuyi7LR->zFPmm!V zsYOb9Y`2uvENd`RI-jw4)g|yw`LY~%4&bhZ#*BPm7N`oyf~B26>40Sh0ZSWxPD`~V z3xMN{X8FKmiB4VC@pOpyk{Qz#BJXO4a%r`+LIeY)mCdI8ep1ylPqu*ahU*!3W@s?X zQ&$|tg*mHjp(N5SDq%a!83X4Kc(ayHt_FC|+hN$5368*MKk; zW38nz@3XEu2vBNm%x!^wP1}=@uRAlDYvCC{5P;2)We}=NnEGy}G(t|Wm}5;bfDtTm zmLbSR3UXB^(<>v46>2GlG?0=}4AV<8=SGK_GMkXvrkG+N221tcocy0-sZX{TDDRyr zfjd7Svn{7KV9V~&Qfurj=J0XMRNY(v&fOL!3t8xL=1#3=@OSdE7I1-#fCX?7GWw)= z$mTdd!j)U@)*Poyb>%dNSLu1nhV)&Gz_Uml1kZvCHGL@Cg&a-uKn_fgZ+c0pZB!tx z#3N%ePGwE!=0!xGPV5SD37KO4DEE_BZkwZQQo&ste&mj?* zfDmf)WRSf8%Yw|I+nYMG0SlCkh@OMULfC5MEtHef>HOtsAS_zF=fjc%T}eoTmH)cE}XF$aOOR^nla=Ao_A`H z9{qGC>9I&nt1@P|lhyFWEHzbV0mK+%#F)`6^QZ(4hx0H&f&_z$l8wW4d!`BoVG*Uk zGAT+iFyfpu#u(=Sh>`r42%Ix_YZ7MyusLjoyt8}G0|90eybDkqFfbtq1Pa`(=S<2o zx$K77?q)I$cYg#4FdLKu<+%mM7~?ROUVvaTmUWg?0#Z*WXXO zCYWo5z*%^!O++mZR3_+8hLHnKVgTbTrJiM==3{%dIC?;u1(^BU4>|MhZw#7+Hkp}A z4`mh+S?f~P8ypN7nb}eiC$(M3QkF5`s-v!vXaj(-mGZ5Mi>apJn*2IxQp>6#A4t*& z8-kck5P}F?IOPXR5R+v}+7M8wOJ!1!vsO?j%}&Vxo9vvilSoaeK&yg6_Z5r*B*^af zEI71n=YauCASIPX0VZHEj2iLX6x(MJvj|*(Il?m%K)wn#7lgd}YECRA46i7u{31a@ zKnOv32th<-3kcyX?PSo~!eryL7-L}EvKX^0CKD4Rh-A4sc`LZ1waT^+2Bxh<#=sbX zF~>cq7A0^cT^dYoljTH~GdJW`Y3{T=!5vq=6J7PFj5C(vEX`fhOK$ddx-P2PoUYki zRg+@X7NZmcCs@k&?UW9eJq6=HiZjb-JJRJzAP%K9GNzqnvW7Co7zwFArx>&3Tnl6J z8`F$gL`pyRG#k~F>;P}w7UCJ1gbRmT`- zV2rq9_3AC>1ZTqq&u;1&lX=1eoI@s6q9jte^_hzr4-M#?#7oT(Ne1hWOt zlO;G~7Ay{nfpe0?+-3}^DzZ}YtJL_-EDkX43|}b_1d;Or%;JnO&UCw95SHg9pd_=f zBx^7+9TOxNT$F4a&i>dN&hZn>-Gbn@Vma!O@)km=Fi=AYGkk7QP@|_O1hH{gbSx2| zjOlaqt6*Bph#OE6T${qjN>N_bfR8pg)93EIzOkav)O6jg5QeR&7Z~cq%?I*+Xq7;3 z3YigIjaQ!c=&bXps>U%6SqjJk0=BlnwLPXLFP(wK_l5eaxEss)c5;-uP%!SXU|f0S zTP=frfT8-ZVY$pXkMAGXQw^7n!KL<v=ln%ZzOlc3fLHxaa=14uaY^-T4T@J)_sFQJ_9XU>=SHjX;=QTb%t zKqGbe)AbLS%}P@!0rc)Tvxr$l@tC@rd2E*p>+!ChjCMDf!hA zY|g}~O4Ciey{G!ZyE^K6GKR&awo-WNv{|7MEC54VpTIuz%vUV>LjrxLLu*zBuiqXF z$iuP^RgL@M%(K>BGG}W|6=T(4(&I*q1%>yCDgr&E`4)z;7lgQ}p=M-5jj=Mt*O-k! zC(nFsK|iR7dL(v+g@`J_d_TBPP&ZT<;)N)|-k>P<4wYB=rE0LAllIf^9(rl{ z2_IXYYEo-pjBOG@vmDhl!HGT<&qE)zx8y0=`>REaRR zW#JLUcpj8IQOAUB$h7?6yo(pLi~wiIlRh*Bi1pYPkLaw(q@8o%3dZ*Fa3)Ct6R_@S z=Mk~uBq~xvF%*%QLtH{3-E=Z70>IsC%JeJefxwvOfF14PtE|CRw(~Ht8xtfLvN*bo z!=oDH>@i_J3smj{DPnXlR$o{CNdg!$`JJD9{N9c2Q=UC(JUEcrk6g3It8%!F!-6Q3 zR*u`mm34SHjKd_;Fe+ui;-Q(IAn1)P+?bnG__p87{wuI-MI%H z6LQ!ye9W>BeQNEA7b4BoIXYo!4kT}*<2rj=;+G*9|3FCc z_jD65Szz90$1_rzB~s#$*I*1s@kEKL|MY2$Hnd z;!YBZ;&hL9e>T4u$Ez!3p67m;=Fsf^*h*h+pEW-sGaryfLL*1Vr7;>9`*gzN;EL^{h{2aWl{9V=%B1Jo91FJoP zH*r}h%$EbmEq~)p+n!nACoS95=gG$~w&VYqZIP~tMd7I?77}i{BP_^lWbYA&2r2f* zFXDjEAIu0Y)cG{I+*M-fbj}f)Qwx{dYzi^UGnMfe>Z#>li~|*bS!)Wg9q9fgAG>ZL zPTZT-_OaAW{UbZujDpEw*r&-Q^)K}5;UpVq}cW%uy~p>)=OhvYxybX@#-KlpW?psO++iJN^rN0nV@_gUZS00_qKt&4Z)mJ zLa!Co_)W%doFLp=)~?M4OvDebvIwZEQ1RaJ9lpmIGwzucC-4uDG=YN)*Ysra;VotM z6X?{)!y$9$x~fjwY^D65C>lKR(BqlR-fydWe#tmBv!b)Q-xk8bA?S0IiM+TAR^XC4Tc}*KytU1cL@uC4g zLhTOTbmP<`$RVPJ3uKS%&qu+;C&vTg@yIfUJ`UoHezV0e6mxanO+>GFS*bGjA5a@r zrQqK(e_{&qk6NGwl7DkW5Biilv{i`;nHdx|-r-EXM}Mf#j!TNj5>OL7eL|FLK-to9yrtxRO7GcC55BFam3zQCUk7isYsnfOlz)9orxcwMm!)ZAeWnh8l&7YymX|&dvlfdd90%C zB_g6?WrnYGe#TW2^ikd4G|x`-osK3C!(mzo;yKZ_?FmEg#B`sje^ZLq(P!4CZJMD} zDfkfQ%^Do68V5H-oEk~?gvolladYAnh>m@|u_<;gBSQX)ww~HtUAwiLHK||u)5GD> zA@{<`XnJ~jGb&d$_}kLiPY~pEf4<%hd#j}`5BzbdzpZVx%+7Xnr~0@2_525@hQ{wv z;pUs;gJH7=YwM%ldZpS@e7}`uSC^BO^s&7l98k2Vt%pG3$vni_*Hvp!Hi}rdyv=8x zYFi=zQIaCe;TGaAW?}?eE}&fU?)@ZMK_0B0-AgMS3#?49Rf5R5qaxTIMD65#rR%D<*3^W9YL4+nhzB(Jy5 zP&Urkm|0)z)KV_;KXyJSy&Si*lS~}1$aAQRJ6gGoU$S*BAx{+ico&L9o6&V4CTZdq z8sM5-1dQ@~SAXA_kgKZzrWxk3$2#0r*}S?Wro^Sjxa`$}55qTN%|R#a+;n1DO*Osd z5+`%EWawghMNv^>MTJ)I>B18K*KUTPY9bSbs1al=7hWEoB?&U2?|+Q7O~4AQe(Frl z`{P;pyanjX5xS@=A2KLI-;pzdgBaD_xX#_tF52_ zri(v-LW|1EN~AU4NuOy-d?lmc$9Ts1EQa>7mU4$JBxpM!>O+87i6F+x)SOdMEgjkA z`16}iSFjXsrW^$3{qCsu|} zzjQ*YXA?AM4K#VW@_TomRtz4RVG0(REjbmEuP6@rr)x}224(%>K9-e%e-{r2p2yb% zD%sX*a<%Vp?R;(WIcBNR=^>@AB!wh3M%WC)q||Bb1W?LDtD_(s2rFoMcII@xPB?kY ze|%|4&A$0LA; zhXj{Vpx8wV+$6%%gnhpY6S-pHQr-_K1;3JQJr!XpA7cre`$*Q!okzF#R?X7NX0_T` zjVV#KU`n8}9AfKs6q=uJ7B6W4UfB*)!zSBbZLox1;VJH>#gI53hvMe&fDPNNVbQ(8 z`3B9dWW3HPJ!Reoo-pVVI+a>tQSqS7YKwnpZzP45Mk21n`{1qoG%BrZz$;FL_J#*b zP(Xlb=#2G;NATin!ENES`_nEO^yf}lrPa24@6Aw5n&2M=;(=LB$88YGK7Fa{CrR~| ztVkzEoP|z;O$J1Byc8+Jv4xXPg6;jTJDus>S9+m2IM+{nyRW8iupwkfoeL#XV|+e~ zMGDuLIK63`>&|25xfAN#7Dd=(rc0JtxXypP_D@bkF05tIQ-bKkot-g>Qc`r~19o?3 z$(tc_)3av99Du@c&u|O3hDa-WKUK=p(OB#4Wvq-SuqK)2O=$pDg3b=Hgb_2~k!dVF z9z2NOTTVKpaPGAfRo#t5mzng{I*rD2=b^s-NPSM$#`<%Ne6GF1Y^do6W|ym}m5RpB zC?@@XfPqNjsKZ$A^6hX|A-yUG0@p1zyb|$icqK7nQz<7be1GW=-}Gz(fxPWS_ZAZ*Vf!o{&8N-Zw zHSUOW>N#yI$Q2kfOkC`ig$#pXKyaj}S=ydWoG7bqNq?~RPlSkGuOrJOGLwTt=8r>) zcGkZPWr;J!V&bs$!7mF~U4<)o-DnC%kt289Kbmc|S zi3Zw=l$O>?ZhK(hd3(2BKqNtp`bluWs?+&~5!kyRh3%c87+bhw(W2ydV70(b#}fGK}G5we{TownR)Cf9KQM&soNiKX5*LVq=6YB;(pX(Lg!zQriY35 zQ0Yj;zR8&5a|jI*59k7CVKyQCyP?a!+sQ337QrJ}k^PYD13eWey6O42w7{p@;Ue%Z zXFhAu_#)o~`_+Wzv1A2~@Y~-#48%G=3mr`T?>#(%5~mv`f1V=T|A!OPAr$_HSyQ?* zA994256@zK{ATlZrvUXMi}*Mbn_W=?uip1^c%{ydt2YDa1t!G#@NtiY(O=@D|_ zO6p+sQCzWk-~{5N&Z+mtatTCtrV>oAZ&DfZ3iWlg#Xr1`{i6yjLNtgZ%T=O=Q?z1V zW>b#@HCb0Ut&W@S&H6;Xo#0>m5f_WCjIU$Plf&|Hb8rh3^CRl+tg{y#20e6( z3biKBxafbkv=i7`b{O^(`hvMCRORO>tE#dYjq$;lw08YT20KmKUeEFCt!Nfhwe^D61}1z zy0ky%_Vobbk9VnwEBg16 zO$M&R=k^4^P84$LdoF9V&Irs$h$97$_A5M zwLdKmOalUi1Jn4V@GLBT^GRWMkIyHt@#1RF;?bv{!#-?X4#WSf`7?d|5~8{V^#59F&q4dGc7`+2=YLXQ-EAD6h3z3qDnC)~X)w!SbT!Y7oHGNDV#1PL}# z1rojO1CyCb18G-~4Usw`bSZM}j3|6X13o)3Jz8~@7H zzdXTQU0kqa4}Szux0d4fF2Co0F|0h`uDYtINOzy0dQgr7$mpjy)19~cWwr9}v~&_s zJ(Xc(#ip!wJds||X{S{Sa<~AR=niGJ3AI#GTi?FvgOMoE&FNaZ*+>ckG8P6z+0MGV z0TIvcUnmCdt3JLoLD!R=WTR)wmvc(dm%B0KPkuDm**R9S=_dMP8EShk)kS%CeQHXy zXX49F4ASouD>-7f0TKoX5%sl99W(m(k1+Bx`RiMyWkhNouRRfv!YQBkrszt`*XOCR zt9*h?caaPD$PS`k36Yo!9Ibb^=Xfb3%}q@pE^h89a>1J!EhBQ9ELkxy7`i`^LrOyO zs=uJQxj82%r=XzVt!iRm_qJT@I%}A?p6258^c7Iv`Kh?1ya@_f;sGymX@4dA5a@xm z^L60MsjQU>Dd*~ET*86MFZykwMxnj}MHVbw_?VfOv#&>}`GLLL>HSTOO8O4ecEiU|Ffj zWh+hQ?VQ|yL0A~HKVEWog9Q~c1R#*zEN8t#)!BnG1uEU@Z>WBkqk?v~XB$u`6atQ+ z6m6@ocfCHGSy@^6!RknsFaLXTc9zFpWMpK7o10rMnT?#U1nuoVD-oZ^hkj42F`)Y4 zUZ(GJ+rx?HSts)4ombDDC{WRtch${g80Fj_+e^%Y9otnZ3AuXP=H$!aBO$-W@Bn#4 z*56A%s$60gM}!~U$|?a|ECMa>Lw}&pKb`KM48J@D=^vdXVvejAiO+lg(l=FMixXld z9H^ee!B6`VhpZ<+H~Lcx{rbDE5FFZ1a+!TBT{dRnVGTA7QJY1=XYXMR%1P<~ht#vh zxs%mO^OpwSyT|E`vP&SN#Jo}RqvaBt)?YM!F1571AUE5ag(=byT$4zYj(z$J#*8k; zG6khHUTbZp#5bGeYSGB!=|ilC^Q%is=wBXgpkOdqEngmvDzLD;JcHYMHv3aVu2B_{ ze5Oe2c13uvbw#UYY<^xIQpfH{YR!Vp0;-0Fwn_Qg|HlGo)YaG5Lm+g#Xa6BH(IbK- z$M0ci{hEmD$+DhZtMfv&X`<;fP;C8d<r%JFEHl2u%sWL3EpOkaCG2eHKEXTBPEya()Q@Je5rFhZ%3P;{3MB} zD)owU_ZbQGm?bve3zs8ILtxQrQAG6e62{VI?s|G6{Z`fYeVo|@A_A@w2QDsZ;$S!x zdt4sbMaY5^-^DVz+4A+;49#cw`SU(=DTDW<_REPCvs_R5k;`X8d(YRA@uKdJ-IN(m z(J}3}gOma;@P0UdIIweN97g+pWyNWHe6_!>di?uANz_uC>AL%#Rmt|y?P__7(#;vl zYpCZc6I@>M%1_JCJ?I0E>0rV@JUzQ^t;O+tl}T?T|J`;xpqF=V?*NGtvdfE?YFA}b zMVab=cx;!YKlV|0mSVgEiW+7+J3IgTBV%Y40wy&nZEantF74#T!V?8h$Bq`G&4J+q zc(JwsNSKioLeT_U^<-}T?gMZ`_O{ziVc4?MUb?I1GC#l5?r`&I+XGO?e67_JRu2^a zrhK{W6HmeR-j~b-GMmtma~7LFk+QFO_xbm*>xs?Ejx<1{8IuivmX|@@+&hO{SIthB z4SUiwgmk{#5}Ug`g2gGm1U{pDjbahUpgbS-eW|E2Pme!6HG(~?u|15jn_lq4UtD9> zv|Y`ho_c4d4}sHO9!y<*e^x&cFi-mKKl+ZM`U^3u9}|0lA2QniJs`q@r1e2eX3j+R1)5X3V9m@r!Dp-7QW$wdlK?J+ySN; z0*+Fula3gO@ef+%;FB1<%`k=FgEgTS^w=)_9gJMP7>IRfx~_GFw3sBZ}ffXnyq7(lrVkE{K+c!`W?)cFdjJdWGa@dJa2%#t~gl%hU=15xkIO-#0m zHA=WLt9vLucIzdEjr^wS{PU%dCKmNEp*nA#H#oFxF?#*WuERltJQXq2!KGH&qDT5 zMdN+;>C|_l`|jSU8|-N<^`(;^qY^~APfzwRT4U67 zw1%=zn}$Q>bMwO~Q1_zC&*$$$+w+(5_R}!twaoIe=KVH17-fs;j`xd9hv$jApI@e- zh@hI0@2UYTGSzb?wcQOveehXw{nzu!Z@K5ej%T;$H^|niQdf%Q-*hY+rEf+OBkF(d zjYGr{1vf=N?h^(|*u9DkH{><8#gsf&ry1Ai&yIbaPv|9_>tvDQC|6gTlO@lS(?SO% z5|owo=BJyygud78M&3Dln7RJdLQ3E|@a69C(qyZt&C@*Vir((XZ{EFnCl{C-RML|8 zW@E8vZuR@DLJrC2vQvHEJ||a}PlZ+?RH4_pj7R$-e3*h=qEpeVIs&5V=W>`57fdEtQdsFcBWpevnke`)p*i9-Jw1 zvH0Re>%0F&!z3cXTxRK)#;L%|V#J;ypYbwrU+v1{8ojrt=jJ+mT%rc`3*+|cGZy1l#3pUJ|>7_`|RR-?9 zoizqEH8;DSx|H+{|K@}%)vaSn9!h-ocvR6Y5=)~Lf=Nmj)wTKL1{8Xb5c^lgp(NIaU0Q!zNGINrlgK2?%1d;MhxSuJ5|yJju7* z;IPG7zkIPBuVm;6t!uySVbAco7#QNvz8HD={e9x0uf_LdP>M3+x%0^Ib};#dRp%R= z?{mGLt#(6;+2HwtbIFt#MWt>qZ>05FosGkrEXrR5pO>3muER204jQn%ZV3r9bcB5- zKh%u6-Il89?3Ej?SHM=ipABG-&?6XEB&q1lu&Xbu)OEbm7VGiiVu2fj8-u4qmh__M z_J?QHZ4YZ1O>)|Ij^aacsp3Au0SyAvw*%E2;t=5ktPQ@>SWc9Hzjfcm_fMrHFZuTj z+)g_YnhkxSzqblnPdE8vgr0LaYZ^ztlVDUL-9Jzx613cQxDtrob5yC+<=Fb3LPdW) z{D3{439s*Lf71gmwKQJNp6Ge@MYysw*mjnUt=;dq`nsB+&?V}t!w&|2fM;8UXy zs2_o!3fhV+{mM!(7S57t$GgWbf%E1By3}0nX=jpg{hG)h6j8-A%0hh$vRW^^WQVWx zy)L$a`GCGHm9$-prdPDEtfAHAx-8LBYAf@qmM(d01UhIbk<=Ue!g!M^+DtYk-ILQ? zuX7#Ne6OQs9&QNZ$vAC5ZyR%B*)ref)2h)T)JQD1eF;0-nu_<%M)b_DW5QfdKH?eD zrm?ne^Ia7jqgc?*>CFag*X@rNL*Cxrpnnt=_#JgGqKn7*N~NhuoSy<-n!K)efi42- z*@Fi#_ZNWiGW!7wai-%S7(ayP zf$1}B>Y_@?S0SD~)fmc1-(V*Pi%oeu-SIn+crxQ|V)GO2w&~FubSiRj8w5cDc8}{m z>;tLiI#davxlI+gF z`D5al6r;F}{#u(Hf#}+*6R43znh)LMs>}ERFX1uqQc5{5{xR_iInmoLL=+Ar5!hY_ zzJhJt9?Zf2f|V$Zy{r^G-~Z(;DL(9tZm(^pgh1_M3Cw(bVb8}m;HRaeWBrS>zajJx z#oEA~D=PKBM!?G2!n|9y(tHzKU>92q!Px{pwVPd`z<=vzY8$(GVteWe^wHO+Vtnt_ zlza|TeSr#b`6rVD$pXxxs2;y1U5#KjZT{h|i@&CPD%X*DMI3Xc4wgQDhufYANQ%}I zD7R?eTsX=wcs|%^Z@Smon%o*kzS<}b(`r4dBINOM>B?4OyT3)Hl%kC7Id-TqYCX_6 z?CN)7YdUUBrt^JNn`1LF61+y#J7+s(=WN03n5-?( z1tlru5%OS({*rxhuzYj zF+~(Ovi@DN&GqWZx6g_;wzs{_N)Kn#=kC-Lx{aS-`Rt|X)O@aGTWoRO_#1>y$hO?% zY^|rabWo7V7KkHJYS5e%N~f6SwrE*^Ny;OS4@Wy8rXoZsBlGcsKXZ&QGklqbCUE>g zU?{#O;61ppyBxsI!rs_RGAm$v_is-NFiF#%)23g-o;SckFY>s7{c@n>OM;S_l$6A~ z=B4(s-0WHb;XiGE@lmL;TNAmH7aLn`?TX1vvbBX9Z??0GN-;WFspp-VOhMqIMkl)* zt${p3Xhu zl6STz_S80zkf499b^AmnGQ z*t#1YQodjF(B{6t+b+Dflq}+S&^;T5J?y={732MQ$D5JK@3A{3@?6uSN65a^Du4gF zi1Mk?%h_qD^5$H$ao^^6AzhQL_kxPhF4!ohvr=?rysykA-$Toc=>Fkn-;W`!6|Sv@ zq{CrGRt4Xswxi!sdhBGb!`s34Zjl`6Cz3xG0Nt__nYyo_7z_{a*NaOya-C~ z+Xgu{Pv{1+nxDpGh=VuL4`HXh)nlizoAj=vs8lq8@%z~`CPY}=;7whO3Ez>{z5LjH7u`Su6S8ZO|+R(BG^NYQC&`J zo=Zi0%ggARnMFoz&UaG2k1Bt*8PUWyv+}ToZx&751y4WH?~Lcnt-gbOr4M zZNMF$oxnBVCGR_tZ{sU-m=bc}hzU{w?D~;5=q|dgnT^=yPOMWT1yqrXpF#4f>Ql`1 zA7nkx2=20=z?#e#(`2n3z zQb`>^M%gfo>Fh|8i@h;TS^dQU4L`K%+WG?!k)59b~=w93U#cc}Hh{go2CZ>@r(hySoDo6>G|SBX*iG+E(uU6oTc5W4;~; z@DM9Ky-&m`ArwR4Ka>SFtMjnOQ|z{OGlMB@?GSgz5DwpXc77EP-qiBzOM zauqMing8^}{(SJ6`r@Qo6>e0`JRR2Bo6nd!`?3mo$emz7B-;9ztBJ(XKfoAQp>H=H zK-m8B)DzPxVKK;M;Ie5twtO|*v)1mW<)h`0yvJ7we)zc))6kx{r#yv_zX#8-mX*h&(2R_`)|YCs(X zl{;@}N58$M3Bchd2pR4blaqF+@1lR}uC6@_`Kh=hp$%A%1VpFPj3yEXLN@hMw1~_v zK9^f)bpF+zJjh{blfkwhFfGK8Wc}wGc^BG;!;R(pu(Y=7zL%aT9Q#TPz>t508!+?K zzg-5lfi6=Dya$;zW+Q-AE-c3E?qY}2eDo1me^O|!UPpWPSw>L07gjjU`KJpmDhh+Q zk`%})gJUenIBoaB^FSAY4yOXmCI?@C4!uTzYsKw`?;kwJov(6SsQj5TnG+3Ns8Rqy zPk%Yv!^$O>1YOGYSNS{u2l#BWdA)*#P3HK_dA?YYTq}qHOp7@$4KrVB1wU1;y=;yn zKf8MhAdF%iRZn(1X;Z|pFcaFDj%9&iB7&!bFe9GRG<1sRwL9K@)4Y#GPHb)sMec)B z?Z4wk1_d$5x=z>qM>oKDs54Jb-bLRL{3JsJ>WV9pb8ld-Q0Pk2n|Tk5qrpAR49@E` zYo*4Uqlh+??FKAzA{$M`PV~t{bX0EQzoVoZF zRmSSRMM>tO=s@H)2tDcD?mFoH;l6_ZJjGYw0od8)#IP(uF!+aGhP_Jnt~2Q^6N0rGIJ3(7kh<&bc39GcAh?+>DbC+GM0J5mPnHSwZ+^!J z%+B)XM3Tig;UH*hHa&G@ZRw^$yboza_3CbFd_7P*CZWxsG~SzEdl1`6p=}L+z*3zc zQd=`BU_F??2x@9-lD*g>zeBK8u3)zV_6Oe5l2?u$zc@#iFD~E<;W7~95V{SH<}^OkjtaGc?`4>MAC*sc6-WtN zZrfg3PO**JXr{*9PQXU`kMWe6{w}O{59Qn?>`f2tFK0V~DSgqY?kiF+USr8R#3HoB z{*2tA2<{G(5Y`Gi?THni%`Ev|?vG4uFXO@ge30m2&2{pzVC01P`qx+#^H0<9PHc@| zR~re1AL|KEK~#t@zQ-%BUU)l{$Y-Zcu8p||hP8gR%74Tdm2W6GOleRCaZFJ{QBdB# z#X@{40utd??$Atef+FX_0Ib%JgrF@uIz$^$bn8Y zXu_fC%I~Y|B|Iyc*+Y6B2&CWOOa14g7-j`YUsv=TlL0!2O{f9%ZmZ>YZ=}jGYX+p5 zxPviAoeqR0mOLRZN<)_9%<9Q=$b#e6bNL1oDjQjRq~-cj_q0cmhCt4DISRK57lV!f zBK~oo%ZoU&B~-kg|Fr{kE*lqm&@FBQfFa@e3lyTciAxF8IJMYP}nI3w6QqsaEs6 z3!_ufB#WOnE2x4u>Ð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