From 7c076d02013d6f4d9dcb870c8b454684946c0eae Mon Sep 17 00:00:00 2001 From: Micheline Wu <69046953+michelinewu@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:02:24 -0400 Subject: [PATCH 01/27] Hide optimizer/auto-config. (#4758) --- .../windows/settings/General.tsx | 13 +- app/services/auto-config/index.ts | 120 +++++++++--------- app/services/onboarding.ts | 28 ++-- test/regular/obs-importer.ts | 5 +- test/regular/onboarding.ts | 7 +- test/screentest/tests/onboarding.ts | 11 +- 6 files changed, 99 insertions(+), 85 deletions(-) diff --git a/app/components-react/windows/settings/General.tsx b/app/components-react/windows/settings/General.tsx index 408961ce0ae4..9c0e82efd09d 100644 --- a/app/components-react/windows/settings/General.tsx +++ b/app/components-react/windows/settings/General.tsx @@ -74,12 +74,13 @@ function ExtraSettings() { })); // HDR Settings are not compliant with the auto-optimizer - const canRunOptimizer = - !SettingsService.views.hasHDRSettings && - isTwitch && - !isRecordingOrStreaming && - protectedMode && - isSimpleOutputMode; + // temporarily disable auto config until migrate to new api + const canRunOptimizer = false; + // !SettingsService.views.hasHDRSettings && + // isTwitch && + // !isRecordingOrStreaming && + // protectedMode && + // isSimpleOutputMode; function restartStreamlabelsSession() { StreamlabelsService.restartSession().then(result => { diff --git a/app/services/auto-config/index.ts b/app/services/auto-config/index.ts index f681eb2e230c..bb4fe693f892 100644 --- a/app/services/auto-config/index.ts +++ b/app/services/auto-config/index.ts @@ -32,67 +32,73 @@ export class AutoConfigService extends Service { configProgress = new Subject(); async start() { - try { - if (this.userService.views.isTwitchAuthed) { - const service = getPlatformService('twitch') as TwitchService; - const key = await service.fetchStreamKey(); - this.streamSettingsService.setSettings({ key, platform: 'twitch' }); - } else if (this.userService.views.isYoutubeAuthed) { - const service = getPlatformService('youtube') as YoutubeService; - await service.beforeGoLive({ - platforms: { - youtube: { - enabled: true, - useCustomFields: false, - title: 'bandwidthTest', - description: 'bandwidthTest', - privacyStatus: 'private', - categoryId: '1', - }, - }, - advancedMode: true, - customDestinations: [], - }); - } - } catch (e: unknown) { - console.error('Failure fetching stream key for auto config'); - this.handleProgress({ event: 'error', description: 'error_fetching_stream_key' }); - return; - } - - /** - * Using the optimizer when two contexts are active is tricky because the optimizer - * works with the last context created. If the app has opened a dual output scene at any - * point during the current session, the vertical context exists. The optimizer - * should only run on the horizontal context. Until output settings and streaming are migrated, - * some non-optimal trickery is necessary. - * - * By design, the only difference in settings between the horizontal and vertical contexts is - * the base width/height and output width/height. So before running the optimizer, - * confirm that horizontal base width/height and output width/height are on the Video property. - */ - if (this.videoSettingsService.contexts?.vertical) { - this.videoSettingsService.confirmVideoSettingDimensions(); - } - - obs.NodeObs.InitializeAutoConfig( - (progress: IConfigProgress) => { - this.handleProgress(progress); - this.configProgress.next(progress); - }, - { continent: '', service_name: '' }, - ); - - obs.NodeObs.StartBandwidthTest(); + // temporarily disable auto config until migrate to new api + + return; + // try { + // if (this.userService.views.isTwitchAuthed) { + // const service = getPlatformService('twitch') as TwitchService; + // const key = await service.fetchStreamKey(); + // this.streamSettingsService.setSettings({ key, platform: 'twitch' }); + // } else if (this.userService.views.isYoutubeAuthed) { + // const service = getPlatformService('youtube') as YoutubeService; + // await service.beforeGoLive({ + // platforms: { + // youtube: { + // enabled: true, + // useCustomFields: false, + // title: 'bandwidthTest', + // description: 'bandwidthTest', + // privacyStatus: 'private', + // categoryId: '1', + // }, + // }, + // advancedMode: true, + // customDestinations: [], + // }); + // } + // } catch (e: unknown) { + // console.error('Failure fetching stream key for auto config'); + // this.handleProgress({ event: 'error', description: 'error_fetching_stream_key' }); + // return; + // } + + // /** + // * Using the optimizer when two contexts are active is tricky because the optimizer + // * works with the last context created. If the app has opened a dual output scene at any + // * point during the current session, the vertical context exists. The optimizer + // * should only run on the horizontal context. Until output settings and streaming are migrated, + // * some non-optimal trickery is necessary. + // * + // * By design, the only difference in settings between the horizontal and vertical contexts is + // * the base width/height and output width/height. So before running the optimizer, + // * confirm that horizontal base width/height and output width/height are on the Video property. + // */ + // if (this.videoSettingsService.contexts?.vertical) { + // this.videoSettingsService.confirmVideoSettingDimensions(); + // } + + // obs.NodeObs.InitializeAutoConfig( + // (progress: IConfigProgress) => { + // this.handleProgress(progress); + // this.configProgress.next(progress); + // }, + // { continent: '', service_name: '' }, + // ); + + // obs.NodeObs.StartBandwidthTest(); } async startRecording() { - obs.NodeObs.InitializeAutoConfig( - (progress: IConfigProgress) => this.handleRecordingProgress(progress), - { continent: '', service_name: '' }, - ); + // temporarily disable auto config until migrate to new api + + return; + // obs.NodeObs.InitializeAutoConfig( + // (progress: IConfigProgress) => this.handleRecordingProgress(progress), + // { continent: '', service_name: '' }, + // ); - obs.NodeObs.StartRecordingEncoderTest(); + // obs.NodeObs.StartRecordingEncoderTest(); } handleProgress(progress: IConfigProgress) { diff --git a/app/services/onboarding.ts b/app/services/onboarding.ts index d3ba5d2f04ef..4923d0dacdce 100644 --- a/app/services/onboarding.ts +++ b/app/services/onboarding.ts @@ -23,7 +23,8 @@ enum EOnboardingSteps { ObsImport = 'ObsImport', HardwareSetup = 'HardwareSetup', ThemeSelector = 'ThemeSelector', - Optimize = 'Optimize', + // temporarily disable auto config until migrate to new api + // Optimize = 'Optimize', Prime = 'Prime', } @@ -84,13 +85,14 @@ export const ONBOARDING_STEPS = () => ({ hideButton: true, label: $t('Add a Theme'), }, - [EOnboardingSteps.Optimize]: { - component: 'Optimize', - disableControls: false, - hideSkip: false, - hideButton: true, - label: $t('Optimize'), - }, + // temporarily disable auto config until migrate to new api + // [EOnboardingSteps.Optimize]: { + // component: 'Optimize', + // disableControls: false, + // hideSkip: false, + // hideButton: true, + // label: $t('Optimize'), + // }, [EOnboardingSteps.Prime]: { component: 'Prime', disableControls: false, @@ -165,7 +167,8 @@ class OnboardingViews extends ViewHandler { return ONBOARDING_STEPS()[EOnboardingSteps.Connect]; } - if (this.state.options.isOptimize) return ONBOARDING_STEPS()[EOnboardingSteps.Optimize]; + // temporarily disable auto config until migrate to new api + // if (this.state.options.isOptimize) return ONBOARDING_STEPS()[EOnboardingSteps.Optimize]; if (this.state.options.isHardware) return ONBOARDING_STEPS()[EOnboardingSteps.HardwareSetup]; if (this.state.options.isImport) return ONBOARDING_STEPS()[EOnboardingSteps.ObsImport]; } @@ -209,9 +212,10 @@ class OnboardingViews extends ViewHandler { steps.push(ONBOARDING_STEPS()[EOnboardingSteps.ThemeSelector]); } - if (userViews.isTwitchAuthed || userViews.isYoutubeAuthed || recordingModeEnabled) { - steps.push(ONBOARDING_STEPS()[EOnboardingSteps.Optimize]); - } + // temporarily disable auto config until migrate to new api + // if (userViews.isTwitchAuthed || userViews.isYoutubeAuthed || recordingModeEnabled) { + // steps.push(ONBOARDING_STEPS()[EOnboardingSteps.Optimize]); + // } if (!userViews.isPrime) { steps.push(ONBOARDING_STEPS()[EOnboardingSteps.Prime]); diff --git a/test/regular/obs-importer.ts b/test/regular/obs-importer.ts index 289fb806c26d..56decf63653a 100644 --- a/test/regular/obs-importer.ts +++ b/test/regular/obs-importer.ts @@ -58,8 +58,9 @@ test('OBS Importer', async t => { await click('div=Start'); // auto config - await waitForDisplayed('h1=Optimize'); - await (await t.context.app.client.$('button=Skip')).click(); + // temporarily disable auto config until migrate to new api + // await waitForDisplayed('h1=Optimize'); + // await (await t.context.app.client.$('button=Skip')).click(); await (await t.context.app.client.$('div=Choose Starter')).click(); await waitForDisplayed('[data-name=SceneSelector]'); diff --git a/test/regular/onboarding.ts b/test/regular/onboarding.ts index 87c62150ff5a..1b98df16034c 100644 --- a/test/regular/onboarding.ts +++ b/test/regular/onboarding.ts @@ -43,10 +43,11 @@ test('Go through the onboarding and autoconfig', async t => { } // Start auto config - t.true(await (await app.client.$('button=Start')).isExisting()); - await (await app.client.$('button=Start')).click(); + // temporarily disable auto config until migrate to new api + // t.true(await (await app.client.$('button=Start')).isExisting()); + // await (await app.client.$('button=Start')).click(); - await (await t.context.app.client.$('div=Choose Starter')).waitForDisplayed({ timeout: 60000 }); + // await (await t.context.app.client.$('div=Choose Starter')).waitForDisplayed({ timeout: 60000 }); // Skip purchasing prime if (await (await t.context.app.client.$('div=Choose Starter')).isExisting()) { await (await t.context.app.client.$('div=Choose Starter')).click(); diff --git a/test/screentest/tests/onboarding.ts b/test/screentest/tests/onboarding.ts index 0d49ffcf5342..a6501287883c 100644 --- a/test/screentest/tests/onboarding.ts +++ b/test/screentest/tests/onboarding.ts @@ -33,11 +33,12 @@ test('Onboarding steps', async t => { await makeScreenshots(t, 'Add a Theme'); await (await app.client.$('button=Skip')).click(); - await (await app.client.$('h1=Optimize')).waitForDisplayed(); - await makeScreenshots(t, 'Before optimize'); - await (await app.client.$('button=Start')).click(); - await (await app.client.$('h1=Optimizing... 33%')).waitForDisplayed(); - await makeScreenshots(t, 'Optimization progress'); + // temporarily disable auto config until migrate to new api + // await (await app.client.$('h1=Optimize')).waitForDisplayed(); + // await makeScreenshots(t, 'Before optimize'); + // await (await app.client.$('button=Start')).click(); + // await (await app.client.$('h1=Optimizing... 33%')).waitForDisplayed(); + // await makeScreenshots(t, 'Optimization progress'); await (await app.client.$('h1=Choose your Streamlabs plan')).waitForDisplayed({ timeout: 15000 }); await makeScreenshots(t, 'Ultra'); From e0464e0d01adcbf424ef0d0c886fcb09fcea2a5e Mon Sep 17 00:00:00 2001 From: Micheline Wu <69046953+michelinewu@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:38:40 -0400 Subject: [PATCH 02/27] Restore add destination button to single output go live window. (#4759) --- app/components-react/windows/go-live/GoLiveSettings.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/components-react/windows/go-live/GoLiveSettings.tsx b/app/components-react/windows/go-live/GoLiveSettings.tsx index 5426a64b9a6d..2820acc79be7 100644 --- a/app/components-react/windows/go-live/GoLiveSettings.tsx +++ b/app/components-react/windows/go-live/GoLiveSettings.tsx @@ -47,8 +47,7 @@ export default function GoLiveSettings() { get canAddDestinations() { const linkedPlatforms = module.state.linkedPlatforms; const customDestinations = module.state.customDestinations; - const isPrime = UserService.views.isPrime; - return !isPrime && linkedPlatforms.length + customDestinations.length < 5; + return linkedPlatforms.length + customDestinations.length < 5; }, addDestination() { @@ -60,7 +59,7 @@ export default function GoLiveSettings() { } }, - shouldShowPrimeLabel: !RestreamService.state.grandfathered, + shouldShowPrimeLabel: !RestreamService.state.grandfathered && !UserService.views.isPrime, canUseOptimizedProfile: VideoEncodingOptimizationService.state.canSeeOptimizedProfile || @@ -83,7 +82,7 @@ export default function GoLiveSettings() { {shouldShowAddDestButton && ( - {$t('Add Destination')} + {$t('Add Destination')} {shouldShowPrimeLabel && ( } /> )} From 2748c09039a2586e0ac0d5d851d87388636af4d3 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Mon, 16 Oct 2023 13:47:06 -0700 Subject: [PATCH 03/27] Release version 1.14.1-preview.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c0ee9e0c6fbe..c68b90fb0e20 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.14.1-preview.5", + "version": "1.14.1-preview.6", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From a2202eccac4ccd43fd63aa4c137fd3efd2d3492d Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Tue, 17 Oct 2023 11:23:14 -0700 Subject: [PATCH 04/27] Release version 1.14.1-preview.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c68b90fb0e20..6d3f0b4ff37b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.14.1-preview.6", + "version": "1.14.1-preview.7", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 1a8da733e126d68ee9d4961d5b600687d5dab54f Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Mon, 30 Oct 2023 09:40:58 -0700 Subject: [PATCH 05/27] Release version 1.14.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d3f0b4ff37b..59a29fd177c3 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.14.1-preview.7", + "version": "1.14.0", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 4e7674096ec64b89e16c80ec195a72a88208a96e Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko <86602590+avoitenko-logitech@users.noreply.github.com> Date: Wed, 1 Nov 2023 02:08:48 +0300 Subject: [PATCH 06/27] Fixed video files playback in studio mode (#4740) * Fixed video files playback in studio mode * Fixed adding new media source in studio mode --- app/services/sources/source.ts | 11 ++++++++ app/services/transitions.ts | 47 ++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/app/services/sources/source.ts b/app/services/sources/source.ts index 0c9d20a12abf..24aa6903d8ab 100644 --- a/app/services/sources/source.ts +++ b/app/services/sources/source.ts @@ -17,6 +17,7 @@ import omitBy from 'lodash/omitBy'; import omit from 'lodash/omit'; import { assertIsDefined } from '../../util/properties-type-guards'; import { SourceFiltersService } from '../source-filters'; +import { TransitionsService } from 'services/transitions'; @ServiceHelper('SourcesService') export class Source implements ISourceApi { @@ -44,6 +45,7 @@ export class Source implements ISourceApi { @Inject() private scenesService: ScenesService; @Inject() private sourceFiltersService: SourceFiltersService; + @Inject() private transitionsService: TransitionsService; /** * Should only be called by functions with the ExecuteInWorkerProcess() decorator @@ -186,6 +188,15 @@ export class Source implements ISourceApi { const manager = this.sourcesService.propertiesManagers[this.sourceId].manager; manager.setPropertiesFormData(properties); this.sourcesService.sourceUpdated.next(this.state); + + // In studio mode if user sets path to newly created source, we need to start playback manually, + // because source in studio mode is not active. + if (this.transitionsService.state.studioMode && properties.length === 1) { + const settings = properties.at(0); + if (settings?.enabled && settings?.name === 'local_file' && this.type === 'ffmpeg_source') { + this.getObsInput().play(); + } + } } duplicate(newSourceId?: string): Source | null { diff --git a/app/services/transitions.ts b/app/services/transitions.ts index 64e1254ce591..5d84c4843cf0 100644 --- a/app/services/transitions.ts +++ b/app/services/transitions.ts @@ -5,6 +5,7 @@ import { TObsValue, TObsFormData } from 'components/obs/inputs/ObsInput'; import { IListOption } from 'components/shared/inputs'; import { WindowsService } from 'services/windows'; import { ScenesService } from 'services/scenes'; +import { Scene } from 'services/scenes/scene'; import uuid from 'uuid/v4'; import { SceneCollectionsService } from 'services/scene-collections'; import { $t } from 'services/i18n'; @@ -137,6 +138,11 @@ export class TransitionsService extends StatefulService { */ sceneDuplicate: obs.IScene; + /** + * This is an application's id of duplicated scene from above + */ + currentSceneId: string; + /** * Used to prevent studio mode transitions before the current * one is complete. @@ -181,6 +187,7 @@ export class TransitionsService extends StatefulService { this.studioModeChanged.next(true); if (!this.studioModeTransition) this.createStudioModeTransition(); + this.currentSceneId = this.scenesService.views.activeScene.id; const currentScene = this.scenesService.views.activeScene.getObsScene(); this.sceneDuplicate = currentScene.duplicate(uuid(), obs.ESceneDupType.Copy); @@ -209,10 +216,14 @@ export class TransitionsService extends StatefulService { this.studioModeLocked = true; - const currentScene = this.scenesService.views.activeScene.getObsScene(); + const currentScene = this.scenesService.views.activeScene; + + if (this.currentSceneId !== currentScene.id) { + this.playFfmpegSources(currentScene, false); + } const oldDuplicate = this.sceneDuplicate; - this.sceneDuplicate = currentScene.duplicate(uuid(), obs.ESceneDupType.Copy); + this.sceneDuplicate = currentScene.getObsScene().duplicate(uuid(), obs.ESceneDupType.Copy); // TODO: Make this a dropdown box const transition = this.getDefaultTransition(); @@ -228,6 +239,7 @@ export class TransitionsService extends StatefulService { setTimeout(() => { oldDuplicate.release(); this.studioModeLocked = false; + this.currentSceneId = this.scenesService.views.activeScene.id; }, Math.min(transition.duration, TRANSITION_DURATION_MAX)); } @@ -265,10 +277,41 @@ export class TransitionsService extends StatefulService { } } + // This sould be used in 'Studio mode' only. + // As ffmpeg sources do not start playing because they are not active when user switches scenes, + // we are bypassing this limitation here by forcing to start and stop playback of video files + playFfmpegSources(scene: Scene, play: boolean) { + if (!this.state.studioMode) { + return; + } + + for (const source of scene.getNestedSources()) { + const settings = source.getSettings(); + if (settings['restart_on_activate'] !== true) { + continue; + } + + if (source.type === 'ffmpeg_source') { + if (play) { + source.getObsInput().play(); + } else { + source.getObsInput().stop(); + } + } + } + } + transition(sceneAId: string | null, sceneBId: string) { if (this.state.studioMode) { + if (sceneAId && sceneAId !== this.currentSceneId) { + const prevScene = this.scenesService.views.getScene(sceneAId); + this.playFfmpegSources(prevScene, false); + } + const scene = this.scenesService.views.getScene(sceneBId); this.studioModeTransition.set(scene.getObsScene()); + this.playFfmpegSources(scene, true); + return; } From 8ecee0e8047a6a0086929cc9636415254fbfae1f Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 31 Oct 2023 16:09:01 -0700 Subject: [PATCH 07/27] Update osn to v0.23.102 (#4766) --- scripts/repositories.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/repositories.json b/scripts/repositories.json index 0173b62d52c4..ba611e2e267e 100644 --- a/scripts/repositories.json +++ b/scripts/repositories.json @@ -4,7 +4,7 @@ "name": "obs-studio-node", "url": "https://s3-us-west-2.amazonaws.com/obsstudionodes3.streamlabs.com/", "archive": "osn-[VERSION]-release-[OS][ARCH].tar.gz", - "version": "0.23.100", + "version": "0.23.102", "win64": true, "osx": true }, From 5f5a6d3f1e233ecbfebc2afa7364d3570c40bd96 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Tue, 31 Oct 2023 16:10:44 -0700 Subject: [PATCH 08/27] Release version 1.15.0-preview.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 91a555e7d41d..085991a43c45 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.14.0", + "version": "1.15.0-preview.0", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From aa63aa9c44ba481982c6229180c4480d704cb8a2 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Wed, 1 Nov 2023 13:51:05 -0700 Subject: [PATCH 09/27] New Crowdin updates (#4756) * New translations hotkeys.json (French) * New translations hotkeys.json (Spanish) * New translations hotkeys.json (Arabic) * New translations hotkeys.json (Czech) * New translations hotkeys.json (Danish) * New translations hotkeys.json (German) * New translations hotkeys.json (Hungarian) * New translations hotkeys.json (Italian) * New translations hotkeys.json (Japanese) * New translations hotkeys.json (Korean) * New translations hotkeys.json (Macedonian) * New translations hotkeys.json (Dutch) * New translations hotkeys.json (Polish) * New translations hotkeys.json (Portuguese) * New translations hotkeys.json (Russian) * New translations hotkeys.json (Slovak) * New translations hotkeys.json (Slovenian) * New translations hotkeys.json (Swedish) * New translations hotkeys.json (Turkish) * New translations hotkeys.json (Chinese Simplified) * New translations hotkeys.json (Chinese Traditional) * New translations hotkeys.json (Vietnamese) * New translations hotkeys.json (Portuguese, Brazilian) * New translations hotkeys.json (Indonesian) * New translations hotkeys.json (Thai) * Update source file hotkeys.json * New translations notifications.json (German) * New translations onboarding.json (German) * New translations overlays.json (German) * New translations scenes.json (German) * New translations settings.json (German) * New translations sources.json (German) * New translations streaming.json (German) * New translations widgets.json (German) * New translations promotional-copy.json (German) * New translations highlighter.json (German) * New translations guest-cam.json (German) * New translations notifications.json (French) * New translations onboarding.json (French) * New translations overlays.json (French) * New translations scenes.json (French) * New translations settings.json (French) * New translations sources.json (French) * New translations streaming.json (French) * New translations widgets.json (French) * New translations promotional-copy.json (French) * New translations guest-cam.json (French) * New translations notifications.json (Spanish) * New translations onboarding.json (Spanish) * New translations overlays.json (Spanish) * New translations scenes.json (Spanish) * New translations settings.json (Spanish) * New translations sources.json (Spanish) * New translations streaming.json (Spanish) * New translations widgets.json (Spanish) * New translations promotional-copy.json (Spanish) * New translations highlighter.json (Spanish) * New translations guest-cam.json (Spanish) * New translations notifications.json (Italian) * New translations onboarding.json (Italian) * New translations overlays.json (Italian) * New translations scenes.json (Italian) * New translations settings.json (Italian) * New translations sources.json (Italian) * New translations streaming.json (Italian) * New translations widgets.json (Italian) * New translations promotional-copy.json (Italian) * New translations highlighter.json (Italian) * New translations guest-cam.json (Italian) * New translations notifications.json (Japanese) * New translations onboarding.json (Japanese) * New translations overlays.json (Japanese) * New translations scenes.json (Japanese) * New translations settings.json (Japanese) * New translations sources.json (Japanese) * New translations streaming.json (Japanese) * New translations widgets.json (Japanese) * New translations promotional-copy.json (Japanese) * New translations highlighter.json (Japanese) * New translations guest-cam.json (Japanese) * New translations notifications.json (Dutch) * New translations onboarding.json (Dutch) * New translations overlays.json (Dutch) * New translations scenes.json (Dutch) * New translations settings.json (Dutch) * New translations sources.json (Dutch) * New translations streaming.json (Dutch) * New translations widgets.json (Dutch) * New translations promotional-copy.json (Dutch) * New translations highlighter.json (Dutch) * New translations guest-cam.json (Dutch) * New translations notifications.json (Polish) * New translations onboarding.json (Polish) * New translations overlays.json (Polish) * New translations scenes.json (Polish) * New translations settings.json (Polish) * New translations sources.json (Polish) * New translations streaming.json (Polish) * New translations promotional-copy.json (Polish) * New translations highlighter.json (Polish) * New translations guest-cam.json (Polish) * New translations notifications.json (Portuguese) * New translations onboarding.json (Portuguese) * New translations overlays.json (Portuguese) * New translations scenes.json (Portuguese) * New translations settings.json (Portuguese) * New translations sources.json (Portuguese) * New translations streaming.json (Portuguese) * New translations widgets.json (Portuguese) * New translations promotional-copy.json (Portuguese) * New translations highlighter.json (Portuguese) * New translations guest-cam.json (Portuguese) * New translations notifications.json (Russian) * New translations onboarding.json (Russian) * New translations overlays.json (Russian) * New translations scenes.json (Russian) * New translations settings.json (Russian) * New translations sources.json (Russian) * New translations streaming.json (Russian) * New translations widgets.json (Russian) * New translations promotional-copy.json (Russian) * New translations highlighter.json (Russian) * New translations guest-cam.json (Russian) * New translations notifications.json (Turkish) * New translations onboarding.json (Turkish) * New translations overlays.json (Turkish) * New translations scenes.json (Turkish) * New translations settings.json (Turkish) * New translations sources.json (Turkish) * New translations streaming.json (Turkish) * New translations widgets.json (Turkish) * New translations promotional-copy.json (Turkish) * New translations highlighter.json (Turkish) * New translations guest-cam.json (Turkish) * New translations notifications.json (Chinese Simplified) * New translations onboarding.json (Chinese Simplified) * New translations overlays.json (Chinese Simplified) * New translations scenes.json (Chinese Simplified) * New translations settings.json (Chinese Simplified) * New translations sources.json (Chinese Simplified) * New translations streaming.json (Chinese Simplified) * New translations widgets.json (Chinese Simplified) * New translations promotional-copy.json (Chinese Simplified) * New translations highlighter.json (Chinese Simplified) * New translations guest-cam.json (Chinese Simplified) * New translations notifications.json (Chinese Traditional) * New translations onboarding.json (Chinese Traditional) * New translations overlays.json (Chinese Traditional) * New translations scenes.json (Chinese Traditional) * New translations settings.json (Chinese Traditional) * New translations sources.json (Chinese Traditional) * New translations streaming.json (Chinese Traditional) * New translations widgets.json (Chinese Traditional) * New translations promotional-copy.json (Chinese Traditional) * New translations highlighter.json (Chinese Traditional) * New translations guest-cam.json (Chinese Traditional) * New translations notifications.json (Portuguese, Brazilian) * New translations onboarding.json (Portuguese, Brazilian) * New translations overlays.json (Portuguese, Brazilian) * New translations scenes.json (Portuguese, Brazilian) * New translations settings.json (Portuguese, Brazilian) * New translations sources.json (Portuguese, Brazilian) * New translations streaming.json (Portuguese, Brazilian) * New translations widgets.json (Portuguese, Brazilian) * New translations promotional-copy.json (Portuguese, Brazilian) * New translations highlighter.json (Portuguese, Brazilian) * New translations guest-cam.json (Portuguese, Brazilian) --- app/i18n/ar-SA/hotkeys.json | 3 +- app/i18n/cs-CZ/hotkeys.json | 3 +- app/i18n/da-DK/hotkeys.json | 3 +- app/i18n/de-DE/guest-cam.json | 2 +- app/i18n/de-DE/highlighter.json | 20 +++++----- app/i18n/de-DE/hotkeys.json | 3 +- app/i18n/de-DE/notifications.json | 6 +-- app/i18n/de-DE/onboarding.json | 8 ++-- app/i18n/de-DE/overlays.json | 24 ++++++------ app/i18n/de-DE/promotional-copy.json | 2 +- app/i18n/de-DE/scenes.json | 14 +++---- app/i18n/de-DE/settings.json | 6 +-- app/i18n/de-DE/sources.json | 6 +-- app/i18n/de-DE/streaming.json | 54 +++++++++++++-------------- app/i18n/de-DE/widgets.json | 2 +- app/i18n/es-ES/guest-cam.json | 2 +- app/i18n/es-ES/highlighter.json | 20 +++++----- app/i18n/es-ES/hotkeys.json | 3 +- app/i18n/es-ES/notifications.json | 6 +-- app/i18n/es-ES/onboarding.json | 6 +-- app/i18n/es-ES/overlays.json | 24 ++++++------ app/i18n/es-ES/promotional-copy.json | 2 +- app/i18n/es-ES/scenes.json | 14 +++---- app/i18n/es-ES/settings.json | 6 +-- app/i18n/es-ES/sources.json | 6 +-- app/i18n/es-ES/streaming.json | 54 +++++++++++++-------------- app/i18n/es-ES/widgets.json | 2 +- app/i18n/fr-FR/guest-cam.json | 2 +- app/i18n/fr-FR/hotkeys.json | 3 +- app/i18n/fr-FR/notifications.json | 6 +-- app/i18n/fr-FR/onboarding.json | 8 ++-- app/i18n/fr-FR/overlays.json | 24 ++++++------ app/i18n/fr-FR/promotional-copy.json | 2 +- app/i18n/fr-FR/scenes.json | 14 +++---- app/i18n/fr-FR/settings.json | 6 +-- app/i18n/fr-FR/sources.json | 6 +-- app/i18n/fr-FR/streaming.json | 52 +++++++++++++------------- app/i18n/fr-FR/widgets.json | 2 +- app/i18n/hu-HU/hotkeys.json | 3 +- app/i18n/id-ID/hotkeys.json | 3 +- app/i18n/it-IT/guest-cam.json | 2 +- app/i18n/it-IT/highlighter.json | 20 +++++----- app/i18n/it-IT/hotkeys.json | 3 +- app/i18n/it-IT/notifications.json | 6 +-- app/i18n/it-IT/onboarding.json | 8 ++-- app/i18n/it-IT/overlays.json | 24 ++++++------ app/i18n/it-IT/promotional-copy.json | 2 +- app/i18n/it-IT/scenes.json | 14 +++---- app/i18n/it-IT/settings.json | 6 +-- app/i18n/it-IT/sources.json | 6 +-- app/i18n/it-IT/streaming.json | 56 ++++++++++++++-------------- app/i18n/it-IT/widgets.json | 2 +- app/i18n/ja-JP/guest-cam.json | 2 +- app/i18n/ja-JP/highlighter.json | 22 +++++------ app/i18n/ja-JP/hotkeys.json | 3 +- app/i18n/ja-JP/notifications.json | 6 +-- app/i18n/ja-JP/onboarding.json | 8 ++-- app/i18n/ja-JP/overlays.json | 24 ++++++------ app/i18n/ja-JP/promotional-copy.json | 2 +- app/i18n/ja-JP/scenes.json | 14 +++---- app/i18n/ja-JP/settings.json | 6 +-- app/i18n/ja-JP/sources.json | 6 +-- app/i18n/ja-JP/streaming.json | 56 ++++++++++++++-------------- app/i18n/ja-JP/widgets.json | 2 +- app/i18n/ko-KR/hotkeys.json | 3 +- app/i18n/mk-MK/hotkeys.json | 3 +- app/i18n/nl-NL/guest-cam.json | 2 +- app/i18n/nl-NL/highlighter.json | 20 +++++----- app/i18n/nl-NL/hotkeys.json | 3 +- app/i18n/nl-NL/notifications.json | 6 +-- app/i18n/nl-NL/onboarding.json | 6 +-- app/i18n/nl-NL/overlays.json | 24 ++++++------ app/i18n/nl-NL/promotional-copy.json | 2 +- app/i18n/nl-NL/scenes.json | 14 +++---- app/i18n/nl-NL/settings.json | 6 +-- app/i18n/nl-NL/sources.json | 6 +-- app/i18n/nl-NL/streaming.json | 56 ++++++++++++++-------------- app/i18n/nl-NL/widgets.json | 2 +- app/i18n/pl-PL/guest-cam.json | 2 +- app/i18n/pl-PL/highlighter.json | 22 +++++------ app/i18n/pl-PL/hotkeys.json | 3 +- app/i18n/pl-PL/notifications.json | 6 +-- app/i18n/pl-PL/onboarding.json | 8 ++-- app/i18n/pl-PL/overlays.json | 24 ++++++------ app/i18n/pl-PL/promotional-copy.json | 2 +- app/i18n/pl-PL/scenes.json | 14 +++---- app/i18n/pl-PL/settings.json | 6 +-- app/i18n/pl-PL/sources.json | 6 +-- app/i18n/pl-PL/streaming.json | 56 ++++++++++++++-------------- app/i18n/pt-BR/guest-cam.json | 2 +- app/i18n/pt-BR/highlighter.json | 22 +++++------ app/i18n/pt-BR/hotkeys.json | 3 +- app/i18n/pt-BR/notifications.json | 6 +-- app/i18n/pt-BR/onboarding.json | 8 ++-- app/i18n/pt-BR/overlays.json | 24 ++++++------ app/i18n/pt-BR/promotional-copy.json | 2 +- app/i18n/pt-BR/scenes.json | 14 +++---- app/i18n/pt-BR/settings.json | 6 +-- app/i18n/pt-BR/sources.json | 6 +-- app/i18n/pt-BR/streaming.json | 54 +++++++++++++-------------- app/i18n/pt-BR/widgets.json | 2 +- app/i18n/pt-PT/guest-cam.json | 2 +- app/i18n/pt-PT/highlighter.json | 20 +++++----- app/i18n/pt-PT/hotkeys.json | 3 +- app/i18n/pt-PT/notifications.json | 6 +-- app/i18n/pt-PT/onboarding.json | 8 ++-- app/i18n/pt-PT/overlays.json | 24 ++++++------ app/i18n/pt-PT/promotional-copy.json | 2 +- app/i18n/pt-PT/scenes.json | 14 +++---- app/i18n/pt-PT/settings.json | 6 +-- app/i18n/pt-PT/sources.json | 6 +-- app/i18n/pt-PT/streaming.json | 54 +++++++++++++-------------- app/i18n/pt-PT/widgets.json | 2 +- app/i18n/ru-RU/guest-cam.json | 2 +- app/i18n/ru-RU/highlighter.json | 22 +++++------ app/i18n/ru-RU/hotkeys.json | 3 +- app/i18n/ru-RU/notifications.json | 6 +-- app/i18n/ru-RU/onboarding.json | 8 ++-- app/i18n/ru-RU/overlays.json | 24 ++++++------ app/i18n/ru-RU/promotional-copy.json | 2 +- app/i18n/ru-RU/scenes.json | 14 +++---- app/i18n/ru-RU/settings.json | 6 +-- app/i18n/ru-RU/sources.json | 6 +-- app/i18n/ru-RU/streaming.json | 56 ++++++++++++++-------------- app/i18n/ru-RU/widgets.json | 2 +- app/i18n/sk-SK/hotkeys.json | 3 +- app/i18n/sl-SI/hotkeys.json | 3 +- app/i18n/sv-SE/hotkeys.json | 3 +- app/i18n/th-TH/hotkeys.json | 3 +- app/i18n/tr-TR/guest-cam.json | 2 +- app/i18n/tr-TR/highlighter.json | 22 +++++------ app/i18n/tr-TR/hotkeys.json | 3 +- app/i18n/tr-TR/notifications.json | 6 +-- app/i18n/tr-TR/onboarding.json | 8 ++-- app/i18n/tr-TR/overlays.json | 24 ++++++------ app/i18n/tr-TR/promotional-copy.json | 2 +- app/i18n/tr-TR/scenes.json | 14 +++---- app/i18n/tr-TR/settings.json | 6 +-- app/i18n/tr-TR/sources.json | 6 +-- app/i18n/tr-TR/streaming.json | 56 ++++++++++++++-------------- app/i18n/tr-TR/widgets.json | 2 +- app/i18n/vi-VN/hotkeys.json | 3 +- app/i18n/zh-CN/guest-cam.json | 2 +- app/i18n/zh-CN/highlighter.json | 20 +++++----- app/i18n/zh-CN/hotkeys.json | 3 +- app/i18n/zh-CN/notifications.json | 6 +-- app/i18n/zh-CN/onboarding.json | 8 ++-- app/i18n/zh-CN/overlays.json | 24 ++++++------ app/i18n/zh-CN/promotional-copy.json | 2 +- app/i18n/zh-CN/scenes.json | 14 +++---- app/i18n/zh-CN/settings.json | 6 +-- app/i18n/zh-CN/sources.json | 6 +-- app/i18n/zh-CN/streaming.json | 56 ++++++++++++++-------------- app/i18n/zh-CN/widgets.json | 2 +- app/i18n/zh-TW/guest-cam.json | 2 +- app/i18n/zh-TW/highlighter.json | 22 +++++------ app/i18n/zh-TW/hotkeys.json | 3 +- app/i18n/zh-TW/notifications.json | 6 +-- app/i18n/zh-TW/onboarding.json | 8 ++-- app/i18n/zh-TW/overlays.json | 24 ++++++------ app/i18n/zh-TW/promotional-copy.json | 2 +- app/i18n/zh-TW/scenes.json | 14 +++---- app/i18n/zh-TW/settings.json | 6 +-- app/i18n/zh-TW/sources.json | 6 +-- app/i18n/zh-TW/streaming.json | 56 ++++++++++++++-------------- app/i18n/zh-TW/widgets.json | 2 +- 166 files changed, 986 insertions(+), 961 deletions(-) diff --git a/app/i18n/ar-SA/hotkeys.json b/app/i18n/ar-SA/hotkeys.json index 9d4fda97dae2..c2e5b0a87930 100644 --- a/app/i18n/ar-SA/hotkeys.json +++ b/app/i18n/ar-SA/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Skip Alert" + "Skip Alert": "Skip Alert", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/cs-CZ/hotkeys.json b/app/i18n/cs-CZ/hotkeys.json index 78c86b605448..f80ab5ab5c05 100644 --- a/app/i18n/cs-CZ/hotkeys.json +++ b/app/i18n/cs-CZ/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Další snímek", "Previous Slide": "Předchozí snímek", "Toggle Performance Mode": "Aktivovat režim výkonu", - "Skip Alert": "Přeskočit upozornění" + "Skip Alert": "Přeskočit upozornění", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/da-DK/hotkeys.json b/app/i18n/da-DK/hotkeys.json index 67c731df8d5b..3e3ab6604c7e 100644 --- a/app/i18n/da-DK/hotkeys.json +++ b/app/i18n/da-DK/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Næste dias", "Previous Slide": "Forrige dias", "Toggle Performance Mode": "Performancetilstand til/fra", - "Skip Alert": "Spring over" + "Skip Alert": "Spring over", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/de-DE/guest-cam.json b/app/i18n/de-DE/guest-cam.json index 4303014a6163..02140db9308c 100644 --- a/app/i18n/de-DE/guest-cam.json +++ b/app/i18n/de-DE/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Quelle erforderlich für Collab Cam", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Für die Verwendung von Collab Cam ist mindestens eine Collab Cam Quelle erforderlich. Möchten Sie sie jetzt hinzufügen?", "You now have access to Collab Cam!": "Sie haben jetzt Zugriff auf Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Sie müssen eingeloggt sein, um Collab Cam zu nutzen." } diff --git a/app/i18n/de-DE/highlighter.json b/app/i18n/de-DE/highlighter.json index 4cb51446ff03..1be422c66b27 100644 --- a/app/i18n/de-DE/highlighter.json +++ b/app/i18n/de-DE/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Fehler beim Lesen von Audio aus %{file}", "An error occurred while mixing audio": "Fehler beim Mischen von Audio", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Bearbeiten Sie Ihre Replays mit Highlighter, einem in Streamlabs integrierten kostenlosen Editor.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "Hochladen nach", + "Upload": "Hochladen", + "This feature requires a Streamlabs ID": "Diese Funktion erfordert eine Streamlabs ID", + "Sign up for Streamlabs ID": "Registrieren für Streamlabs ID", + "Add subtitles, transcribe, and more": "Untertitel hinzufügen, transkribieren und mehr", + "Convert to mobile-friendly short video": "In für Mobilgeräte geeignete Kurzvideos umwandeln", + "YouTube (private video)": "YouTube (privates Video)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "Transkribieren", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Zeichnen Sie Ihren Bildschirm mit Streamlabs Desktop auf. Sobald die Aufnahme abgeschlossen ist, wird sie hier angezeigt. Greifen Sie auf Ihre Dateien zu oder bearbeiten Sie sie weiter mit den Streamlabs-Tools.", + "Recordings": "Aufzeichnungen" } \ No newline at end of file diff --git a/app/i18n/de-DE/hotkeys.json b/app/i18n/de-DE/hotkeys.json index 5700a0a456b6..07bd688608e0 100644 --- a/app/i18n/de-DE/hotkeys.json +++ b/app/i18n/de-DE/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Nächstes Bild", "Previous Slide": "Vorheriges Bild", "Toggle Performance Mode": "Performance-Modus ein/aus", - "Skip Alert": "Benachrichtigung überspringen" + "Skip Alert": "Benachrichtigung überspringen", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/de-DE/notifications.json b/app/i18n/de-DE/notifications.json index 3a98ac8c9ca0..45dd539f2954 100644 --- a/app/i18n/de-DE/notifications.json +++ b/app/i18n/de-DE/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "In Ordner anzeigen", "Recordings": "Aufzeichnungen", "Marker %{label} added at %{timestamp}": "Markierung %{label} hinzugefügt bei %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Datei ist zu groß zum Hochladen", + "File type %{extension} is not supported": "Der Dateityp %{extension} wird nicht unterstützt", + "Upload already in progress": "Upload läuft bereits" } diff --git a/app/i18n/de-DE/onboarding.json b/app/i18n/de-DE/onboarding.json index dd52dd4c8ab4..91fc91302e28 100644 --- a/app/i18n/de-DE/onboarding.json +++ b/app/i18n/de-DE/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Basic Chatbot", "Basic Features": "Grundfunktionen", "Access to All Overlays and Themes (%{themeNumber})": "Zugriff auf alle Overlays und Themen (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Bis zu 11 Gäste oder Kameras hinzufügen", "Access Full App Library (%{appNumber})": "Zugriff auf vollständige App-Bibliothek (%{appNumber})", "Custom Tip Page and Domain": "Benutzerdefinierte Spendenseite und Domäne", "Custom Named Chatbot": "Chatbot mit benutzerdefiniertem Namen", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Für Streamlabs Desktop benötigen Sie ein verbundenes Plattformkonto, um alle Funktionen nutzen zu können. Wenn Sie diesen Schritt überspringst, werden Sie ausgeloggt und einige Funktionen sind dann eventuell nicht verfügbar.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Mit Ihrem Streamlabs Konto sind mehrere Inhaltsplattformen verbunden. Bitte wählen Sie die primäre Plattform, auf der Sie mit Streamlabs Desktop streamen wollen.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Für Streamlabs Desktop müssen Sie eine Inhaltsplattform mit Ihrem Streamlabs Konto verbinden.", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Fehler", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Beim Optimierungsversuch ist ein Fehler aufgetreten. Nur Standardeinstellungen werden angewendet" } diff --git a/app/i18n/de-DE/overlays.json b/app/i18n/de-DE/overlays.json index ac86c28b6df1..9f345e7714af 100644 --- a/app/i18n/de-DE/overlays.json +++ b/app/i18n/de-DE/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} erfolgreich gespeichert", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} wurde konvertiert", + "Successfully saved %{filename} to %{filepath}": "%{filename} wurde unter %{filepath} gespeichert", "Successfully loaded %{filename}.overlay": "%{filename}.overlay erfolgreich geladen", "This is an experimental feature. Use at your own risk.": "Diese Funktion befindet sich noch im Versuchsstadium, Verwendung auf eigene Gefahr.", "Export Overlay File": "Overlay-Datei exportieren", "Import Overlay File": "Overlay-Datei importieren", "Import Widget File in Current Scene": "Widget-Datei in aktuelle Szene importieren", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "Die aktive Szenensammlung ist keine Szenensammlung mit Dual Output.", + "Convert to Vanilla Scene": "In Vanilla-Szene konvertieren", + "Convert": "Konvertieren", + "Convert and Export Overlay": "Overlay konvertieren und exportieren", + "Assign": "Zuweisen", + "Assign and Export Overlay": "Overlay zuweisen und exportieren", + "Assign Vertical Sources to Horizontal Display": "Vertikale Quellen der horizontalen Anzeige zuordnen", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Im Folgenden wird eine Kopie der aktiven Szenensammlung erstellt und die Kopie als aktive Sammlung festgelegt. Anschließend wird die Funktion angewendet.", + "Manage Dual Output Scene": "Verwalten der Dual Output Szene", + "Unable to convert dual output collection.": "Die Dual Output Sammlung kann nicht konvertiert werden." } diff --git a/app/i18n/de-DE/promotional-copy.json b/app/i18n/de-DE/promotional-copy.json index b89bf0396322..0d1643d3c5e7 100644 --- a/app/i18n/de-DE/promotional-copy.json +++ b/app/i18n/de-DE/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 Stunde Videos + 250 GB Speicherplatz + mehr", "Highest Profit Margins": "Höchste Profitmargen", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/Mon. oder %{yearlyPrice}/Jahr", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Textbasierte Bearbeitung von VOD-Inhalten" } diff --git a/app/i18n/de-DE/scenes.json b/app/i18n/de-DE/scenes.json index 787b080d4299..f140d8229afe 100644 --- a/app/i18n/de-DE/scenes.json +++ b/app/i18n/de-DE/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Name für Szenen-Sammlung eingeben", "Copy of %{collectionName}": "Kopie von %{collectionName}", "Your Scene Collections": "Ihre Szenen-Sammlungen", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output Modus", + "Horizontal Output": "Horizontale Ausgabe", + "Vertical Output": "Vertikale Ausgabe", + "Arrange sources here for a vertical scene layout.": "Quellen für vertikales Szenenlayout hier anordnen.", + "Arrange sources here for a horizontal scene layout.": "Quellen für horizontales Szenenlayout hier anordnen.", + "Toggle Dual Output Mode.": "Dual Output Modus ein/aus.", + "Cannot hide dual output toggles in dual output mode.": "Im Dual Output Modus können die Umschalter für Dual Output nicht ausgeblendet werden." } diff --git a/app/i18n/de-DE/settings.json b/app/i18n/de-DE/settings.json index 6b259434b316..3e4060c98c94 100644 --- a/app/i18n/de-DE/settings.json +++ b/app/i18n/de-DE/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Diese Zahl ist zu groß für den FPS-Zähler %{fpsNum}. Bitte kleineren Wert angeben oder größeren Zähler festlegen.", "FPS Value must be between 1 and 1000": "FPS-Wert muss zwischen 1 und 1000 liegen.", "%{fieldName} must be greater than 0": "%{fieldName} muss größer sein als 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Markierungen", + "Manage Dual Output": "Verwalten von Dual Output", + "Auto optimizer disabled for dual output scenes": "Automatischer Optimierer für Dual Output Szenen deaktiviert" } diff --git a/app/i18n/de-DE/sources.json b/app/i18n/de-DE/sources.json index fd18fbc42433..1fbce06ddeca 100644 --- a/app/i18n/de-DE/sources.json +++ b/app/i18n/de-DE/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Skalierungsfilter „Bilinear“ festlegen", "Set scale filter 'Lanczos'": "Skalierungsfilter „Lanczos“ festlegen", "Set scale filter 'Area'": "Skalierungsfilter „Bereich“ festlegen", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Sie haben derzeit dieselbe Quelle für beide Arbeitsflächen ausgewählt. Bitte wählen Sie die Quelle in der Arbeitsfläche aus, um sie unabhängig zu bearbeiten.", + "Selective Recording can only be used with horizontal sources.": "Die selektive Aufzeichnung kann nur mit horizontalen Quellen verwendet werden.", + "Cannot move source outside canvas in Dual Output Mode.": "Die Quelle kann im Dual Output Modus nicht aus der Arbeitsfläche heraus verschoben werden." } diff --git a/app/i18n/de-DE/streaming.json b/app/i18n/de-DE/streaming.json index 3ff4241c57d1..38c96eeb8a2f 100644 --- a/app/i18n/de-DE/streaming.json +++ b/app/i18n/de-DE/streaming.json @@ -123,7 +123,7 @@ "Go back": "Zurück", "Show Advanced Settings": "Erweiterte Einstellungen anzeigen", "Configure the Multistream service": "Multistream-Dienst konfigurieren", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Konfigurieren des Dual Output Dienstes", "Apply optimized settings": "Optimierte Einstellungen übernehmen", "Start video transmission": "Videoübertragung starten", "Publish Youtube broadcast": "YouTube-Broadcast veröffentlichen", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Plattformeinstellungen konnten nicht aktualisiert werden", "The Multistream server is temporarily unavailable": "Der Multistream-Server ist vorübergehend nicht verfügbar", "Failed to configure the Multistream server": "Multistream-Server konnte nicht konfiguriert werden", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Die Konfiguration des Dual Output Dienstes ist fehlgeschlagen", + "The Multistream server is temporarily unavailable for Dual Output": "Der Multistream-Server ist für Dual Output vorübergehend nicht verfügbar", "Your YouTube account is not enabled for live streaming": "Das YouTube-Konto ist nicht für Live-Streaming aktiviert", "Failed to publish the YouTube broadcast": "YouTube-Broadcast konnte nicht veröffentlicht werden", "Failed to post the Tweet": "Tweet konnte nicht gepostet werden", @@ -180,30 +180,30 @@ "New features coming soon!": "Neue Funktionen in Kürze erhältlich!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Streamen Sie auf mehreren Plattformen gleichzeitig mit Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Streamen Sie gleichzeitig auf horizontale und vertikale Plattformen. Die Aufnahmen sind nur im horizontalen Format verfügbar.", + "Dual Output Settings": "Einstellungen für Dual Output", + "Enable Dual Output": "Dual Output aktivieren", + "Set your default output mode for each platform.": "Legen Sie den Standard-Ausgabemodus für jede Plattform fest.", + "Set Dual Output Settings": "Einstellungen für Dual Output festlegen", + "Mode:": "Modus:", "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "You can select which one to stream with in the Go Live window.": "Im Go Live-Fenster können Sie wählen, wie Sie streamen möchten.", + "Video Output Orientation": "Ausrichtung der Videoausgabe", + "Show horizontal display.": "Horizontale Darstellung anzeigen.", + "Show vertical display.": "Vertikale Darstellung anzeigen.", + "Hide horizontal display.": "Horizontale Darstellung ausblenden.", + "Hide vertical display.": "Vertikale Darstellung ausblenden.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Gönnen Sie sich ein Upgrade für Ihren Stream mit Premium-Themen mit Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Sie können diese Einstellungen nicht ändern, während Sie live sind.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output ist aktiviert – Sie müssen auf eine horizontale und eine vertikale Plattform streamen.", + "Other": "Sonstige", + "Add Destination with Ultra": "Ziel hinzufügen mit Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Bitte loggen Sie sich ein, um Dual Output zu aktivieren. Möchten Sie sich jetzt einloggen?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Um Dual Output zu nutzen, müssen Sie auf mindestens eine horizontale und eine vertikale Plattform streamen.", + "Cannot toggle Dual Output while live.": "Dual Output kann während Live-Stream nicht umgeschaltet werden.", + "Cannot toggle Dual Output while in Studio Mode.": "Dual Output kann im Studiomodus nicht umgeschaltet werden.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output kann nicht angezeigt werden – die selektive Aufnahme funktioniert nur mit horizontalen Quellen und deaktiviert die Bearbeitung der vertikalen Ausgangsszene. Bitte deaktivieren Sie die selektive Aufnahme von Quellen, um Dual Output einzurichten.", + "Selective Recording can only be used with horizontal sources.": "Die selektive Aufzeichnung kann nur mit horizontalen Quellen verwendet werden.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Richten Sie die Go Live-Einstellungen für den Dual Output Modus im Go Live-Fenster ein.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Der Studiomodus kann im Dual Output Modus nicht umgeschaltet werden." } diff --git a/app/i18n/de-DE/widgets.json b/app/i18n/de-DE/widgets.json index 89810d88c099..0f3c6e930364 100644 --- a/app/i18n/de-DE/widgets.json +++ b/app/i18n/de-DE/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Gesendete Sparks: genau ", "Ember amount is at least ": "Ember-Betrag: mindestens ", "Ember amount is exactly ": "Ember-Betrag: genau ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Ermöglichen Sie es Ihren Viewern, über Spenden Medien in Ihrem Stream freizugeben.", "Twitch Subscribers": "Twitch-Abonnenten", "YouTube Members": "YouTube-Mitglieder", "Media Share": "Medienfreigabe", diff --git a/app/i18n/es-ES/guest-cam.json b/app/i18n/es-ES/guest-cam.json index 6933001cbf33..249c96e6588c 100644 --- a/app/i18n/es-ES/guest-cam.json +++ b/app/i18n/es-ES/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam requiere una fuente", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Hace falta al menos una fuente de Collab Cam para usar Collab Cam. ¿Quiere agregar una ahora?", "You now have access to Collab Cam!": "¡Ahora tiene acceso a Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Debe haber iniciado sesión para utilizar Collab Cam." } diff --git a/app/i18n/es-ES/highlighter.json b/app/i18n/es-ES/highlighter.json index b14a09e1fd8f..14e2ab0f9d63 100644 --- a/app/i18n/es-ES/highlighter.json +++ b/app/i18n/es-ES/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Se produjo un error al leer audio desde %{file}", "An error occurred while mixing audio": "Se produjo un error al mezclar audio", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Edite sus repeticiones con el marcador de resaltado, un editor gratis integrado en Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "Cargar a", + "Upload": "Cargar", + "This feature requires a Streamlabs ID": "Esta función requiere un Streamlabs ID", + "Sign up for Streamlabs ID": "Regístrese en Streamlabs ID", + "Add subtitles, transcribe, and more": "Puede agregar subtítulos, crear transcripciones y mucho más", + "Convert to mobile-friendly short video": "Convertir a vídeo corto apto para dispositivos móviles", + "YouTube (private video)": "YouTube (vídeo privado)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "Transcribir", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Grabe su pantalla con Streamlabs Desktop. Una vez finalizada la grabación, se mostrará aquí. Acceda a sus archivos o edítelos aún más con las herramientas de Streamlabs.", + "Recordings": "Grabaciones" } \ No newline at end of file diff --git a/app/i18n/es-ES/hotkeys.json b/app/i18n/es-ES/hotkeys.json index 90a8bbaa71d9..87c4c2847b9f 100644 --- a/app/i18n/es-ES/hotkeys.json +++ b/app/i18n/es-ES/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Siguiente diapositiva", "Previous Slide": "Diapositiva anterior", "Toggle Performance Mode": "Alternar modo Rendimiento", - "Skip Alert": "Omitir alerta" + "Skip Alert": "Omitir alerta", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/es-ES/notifications.json b/app/i18n/es-ES/notifications.json index 83c05e832232..e2bce1418aa5 100644 --- a/app/i18n/es-ES/notifications.json +++ b/app/i18n/es-ES/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Mostrar en carpeta", "Recordings": "Grabaciones", "Marker %{label} added at %{timestamp}": "Marcador %{label} añadido a %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "El archivo es demasiado grande para cargarlo", + "File type %{extension} is not supported": "No se admite el tipo de archivo %{extension}", + "Upload already in progress": "Carga ya en curso" } diff --git a/app/i18n/es-ES/onboarding.json b/app/i18n/es-ES/onboarding.json index 13d34a29f055..b67b5aa80c81 100644 --- a/app/i18n/es-ES/onboarding.json +++ b/app/i18n/es-ES/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Chatbot básico", "Basic Features": "Funciones básicas", "Access to All Overlays and Themes (%{themeNumber})": "Acceso a todas las superposiciones y temas (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Adición de hasta 11 invitados o cámaras", "Access Full App Library (%{appNumber})": "Acceso a biblioteca de aplicaciones completa (%{appNumber})", "Custom Tip Page and Domain": "Dominio y página de propinas personalizados\t", "Custom Named Chatbot": "Chatbot con nombre personalizado", @@ -138,6 +138,6 @@ "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Tu cuenta de Streamlabs tiene varias plataformas de contenido conectadas. Selecciona la plataforma principal a la que harás streaming usando Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop requiere que conectes una plataforma de contenido a tu cuenta de Streamlabs", "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Ok": "Aceptar", + "An error has occurred during optimization attempt. Only default settings are applied": "Se ha producido un error al intentar optimizar. Sólo se aplican los ajustes predeterminados" } diff --git a/app/i18n/es-ES/overlays.json b/app/i18n/es-ES/overlays.json index acb9c3ef379d..704a10af9ab5 100644 --- a/app/i18n/es-ES/overlays.json +++ b/app/i18n/es-ES/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} se ha guardado correctamente", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} se ha convertido correctamente", + "Successfully saved %{filename} to %{filepath}": "%{filename} se ha guardado correctamente en %{filepath}", "Successfully loaded %{filename}.overlay": "%{filename}.overlay se ha cargado correctamente", "This is an experimental feature. Use at your own risk.": "Ésta es una característica experimental. Si la usa, es por su cuenta y riesgo.", "Export Overlay File": "Exportar archivo de superposición", "Import Overlay File": "Importar archivo de superposición", "Import Widget File in Current Scene": "Importar archivo de widget en escena actual", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "La colección de escenas activa no es una colección de escenas Dual Output.", + "Convert to Vanilla Scene": "Convertir a escena básica", + "Convert": "Convertir", + "Convert and Export Overlay": "Convertir y exportar superposición", + "Assign": "Asignar", + "Assign and Export Overlay": "Asignar y exportar superposición", + "Assign Vertical Sources to Horizontal Display": "Asignar fuentes verticales a pantalla horizontal", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Lo siguiente creará una copia de la colección de escenas activa, establecerá la copia como colección activa y aplicará la función.", + "Manage Dual Output Scene": "Gestionar escena Dual Output", + "Unable to convert dual output collection.": "No se puede convertir la colección Dual Output." } diff --git a/app/i18n/es-ES/promotional-copy.json b/app/i18n/es-ES/promotional-copy.json index cf75c557c35f..749f6ab5db6b 100644 --- a/app/i18n/es-ES/promotional-copy.json +++ b/app/i18n/es-ES/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "Vídeos de 1 hora + 250 GB de almacenamiento + Más", "Highest Profit Margins": "Márgenes de beneficio más altos", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/mes o %{yearlyPrice}/año", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Edición de contenidos VBD basada en texto" } diff --git a/app/i18n/es-ES/scenes.json b/app/i18n/es-ES/scenes.json index 388e5c74940a..b435c6a0c67c 100644 --- a/app/i18n/es-ES/scenes.json +++ b/app/i18n/es-ES/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Introduzca un nombre de colección de escenas", "Copy of %{collectionName}": "Copia de %{collectionName}", "Your Scene Collections": "Sus colecciones de escenas", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Modo Dual Output", + "Horizontal Output": "Salida horizontal", + "Vertical Output": "Salida vertical", + "Arrange sources here for a vertical scene layout.": "Organice las fuentes aquí para una distribución de escenas vertical.", + "Arrange sources here for a horizontal scene layout.": "Organice las fuentes aquí para una distribución de escenas horizontal.", + "Toggle Dual Output Mode.": "Conmutar el modo Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "No se pueden ocultar los conmutadores de Dual Output en el modo Dual Output." } diff --git a/app/i18n/es-ES/settings.json b/app/i18n/es-ES/settings.json index 41dda74b6a34..bec245e790f9 100644 --- a/app/i18n/es-ES/settings.json +++ b/app/i18n/es-ES/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Este número es demasiado grande para un numerador de FPS de %{fpsNum}, redúzcalo o aumente el numerador", "FPS Value must be between 1 and 1000": "Valor de FPS debe estar entre 1 y 1000", "%{fieldName} must be greater than 0": "%{fieldName} debe ser mayor que 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Marcadores", + "Manage Dual Output": "Gestionar Dual Output", + "Auto optimizer disabled for dual output scenes": "Optimizador automático desactivado para escenas Dual Output" } diff --git a/app/i18n/es-ES/sources.json b/app/i18n/es-ES/sources.json index 08d901b5c9bd..468627ed3f41 100644 --- a/app/i18n/es-ES/sources.json +++ b/app/i18n/es-ES/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Establecer filtro de escala 'Bilineal'", "Set scale filter 'Lanczos'": "Establecer filtro de escala 'Lanczos'", "Set scale filter 'Area'": "Establecer filtro de escala 'Área'", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Actualmente tiene seleccionada la misma fuente en ambos lienzos. Seleccione la fuente en el lienzo para editarla independientemente.", + "Selective Recording can only be used with horizontal sources.": "La grabación selectiva sólo se puede utilizar con fuentes horizontales.", + "Cannot move source outside canvas in Dual Output Mode.": "No se puede mover la fuente fuera del lienzo en modo Dual Output." } diff --git a/app/i18n/es-ES/streaming.json b/app/i18n/es-ES/streaming.json index eb065d543e41..3342905d5612 100644 --- a/app/i18n/es-ES/streaming.json +++ b/app/i18n/es-ES/streaming.json @@ -123,7 +123,7 @@ "Go back": "Regresar", "Show Advanced Settings": "Mostrar ajustes avanzados", "Configure the Multistream service": "Configurar el servicio Multistream", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Configurar el servicio Dual Output", "Apply optimized settings": "Aplicar ajustes optimizados", "Start video transmission": "Iniciar transmisión de vídeo", "Publish Youtube broadcast": "Publicar transmisión de YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "No se pudieron actualizar ajustes de plataforma", "The Multistream server is temporarily unavailable": "El servidor Multistream no está disponible temporalmente", "Failed to configure the Multistream server": "No se pudo configurar el servidor Multistream", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Error al configurar el servicio Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "El servidor Multistream no está disponible temporalmente para Dual Output", "Your YouTube account is not enabled for live streaming": "Su cuenta de YouTube no está activada para streaming de vídeo en tiempo real", "Failed to publish the YouTube broadcast": "No se pudo publicar la transmisión de YouTube", "Failed to post the Tweet": "No se pudo publicar el tuit", @@ -180,30 +180,30 @@ "New features coming soon!": "¡Funciones nuevas próximamente!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Haga streaming a múltiples plataformas a la vez con Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Streaming a plataformas horizontales y verticales simultáneamente. Las grabaciones serán sólo en horizontal.", + "Dual Output Settings": "Ajustes de Dual Output", + "Enable Dual Output": "Activar Dual Output", + "Set your default output mode for each platform.": "Configure el modo de salida predeterminado para cada plataforma.", + "Set Dual Output Settings": "Configurar ajustes de Dual Output", + "Mode:": "Modo:", "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "You can select which one to stream with in the Go Live window.": "Puede seleccionar con cuál hacer streaming en la ventana Transmitir en directo.", + "Video Output Orientation": "Orientación de salida de vídeo", + "Show horizontal display.": "Mostrar visualización horizontal.", + "Show vertical display.": "Mostrar visualización vertical.", + "Hide horizontal display.": "Ocultar visualización horizontal.", + "Hide vertical display.": "Ocultar visualización vertical.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Actualiza tu stream con temas premium usando Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "No puede cambiar estos ajustes estando en directo.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "La función Dual Output está activada. Debe hacer streaming a una plataforma horizontal y a otra vertical.", + "Other": "Otros", + "Add Destination with Ultra": "Agregar destino con Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Inicie sesión para activar Dual Output. ¿Quiere iniciar sesión ahora?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Para utilizar Dual Output debe hacer streaming al menos a una plataforma horizontal y a otra vertical.", + "Cannot toggle Dual Output while live.": "No se puede conmutar el estado de Dual Output estando en directo.", + "Cannot toggle Dual Output while in Studio Mode.": "No se puede conmutar el modo Dual Output estando en modo Studio.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "No se puede mostrar Dual Output. La grabación selectiva sólo funciona con fuentes horizontales y desactiva la edición de escenas de salida vertical. Desactive la grabación selectiva de fuentes para configurar Dual Output.", + "Selective Recording can only be used with horizontal sources.": "La grabación selectiva sólo se puede utilizar con fuentes horizontales.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Configure los ajustes de transmisión en directo para el modo Dual Output en la ventana Transmitir en directo.", + "Cannot toggle Studio Mode in Dual Output Mode.": "No se puede conmutar el modo Studio en modo Dual Output." } diff --git a/app/i18n/es-ES/widgets.json b/app/i18n/es-ES/widgets.json index 5caf17853027..12537c4ce766 100644 --- a/app/i18n/es-ES/widgets.json +++ b/app/i18n/es-ES/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Las chispas enviadas son exactamente ", "Ember amount is at least ": "La cantidad de brasas es al menos ", "Ember amount is exactly ": "La cantidad de brasas es exactamente ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Permite que sus espectadores donen para compartir medios en su stream.", "Twitch Subscribers": "Suscriptores de Twitch", "YouTube Members": "Miembros de YouTube", "Media Share": "Compartir medios", diff --git a/app/i18n/fr-FR/guest-cam.json b/app/i18n/fr-FR/guest-cam.json index b8d0666fc5da..8c0b68255009 100644 --- a/app/i18n/fr-FR/guest-cam.json +++ b/app/i18n/fr-FR/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam nécessite une source", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Au moins une source Collab Cam est nécessaire pour utiliser Collab Cam. Voulez-vous en ajouter une maintenant?", "You now have access to Collab Cam!": "Vous avez maintenant accès à Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Vous devez être connectés pour utiliser Collab Cam." } diff --git a/app/i18n/fr-FR/hotkeys.json b/app/i18n/fr-FR/hotkeys.json index 40c8689fa29b..8c47ec0497bd 100644 --- a/app/i18n/fr-FR/hotkeys.json +++ b/app/i18n/fr-FR/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Diapositive suivante", "Previous Slide": "Diapositive précédente", "Toggle Performance Mode": "Activer/désactiver le mode Performance", - "Skip Alert": "Passer l'alerte" + "Skip Alert": "Passer l'alerte", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/fr-FR/notifications.json b/app/i18n/fr-FR/notifications.json index 39e40cadc701..f90ec3e429a5 100644 --- a/app/i18n/fr-FR/notifications.json +++ b/app/i18n/fr-FR/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Afficher dans le dossier", "Recordings": "Enregistrements", "Marker %{label} added at %{timestamp}": "Marqueur %{label} ajouté à %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Le fichier est trop volumineux pour être téléchargé", + "File type %{extension} is not supported": "Le type de fichier %{extension} n'est pas pris en charge", + "Upload already in progress": "Le téléchargement est déjà en cours" } diff --git a/app/i18n/fr-FR/onboarding.json b/app/i18n/fr-FR/onboarding.json index d2e50e24e84a..60b6271b554f 100644 --- a/app/i18n/fr-FR/onboarding.json +++ b/app/i18n/fr-FR/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Chatbot de base", "Basic Features": "Fonctionnalités de base", "Access to All Overlays and Themes (%{themeNumber})": "Accès à toutes les superpositions et thèmes (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Ajoutez jusqu'à 11 invités ou caméras", "Access Full App Library (%{appNumber})": "Accès complet à la bibliothèque d'applications (%{appNumber})", "Custom Tip Page and Domain": "Page de dons et domaine personnalisés", "Custom Named Chatbot": "Chatbot au nom personnalisé", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Pour pouvoir utiliser toutes les fonctionnalités de Streamlabs Desktop, vous devez connecter un compte de plateforme. Si vous ignorez cette étape, vous serez déconnecté et certaines fonctionnalités pourront ne pas être disponibles.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Plusieurs plateformes de contenu sont connectées à votre compte Streamlabs. Sélectionnez la plateforme principale sur laquelle vous diffuserez à l’aide de Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Pour utiliser Streamlabs Desktop, vous devez connecter une plateforme de contenu à votre compte Streamlabs.", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Erreur", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Une erreur s'est produite pendant la tentative d'optimisation. Seuls les paramètres par défaut sont appliqués" } diff --git a/app/i18n/fr-FR/overlays.json b/app/i18n/fr-FR/overlays.json index f4b884d5d39c..cec3563513b8 100644 --- a/app/i18n/fr-FR/overlays.json +++ b/app/i18n/fr-FR/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} sauvegardé avec succès", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "Conversion réussie %{filename}", + "Successfully saved %{filename} to %{filepath}": "%{filename} sauvegardé dans %{filepath} avec succès", "Successfully loaded %{filename}.overlay": "%{filename}.overlay chargé avec succès", "This is an experimental feature. Use at your own risk.": "Cette fonctionnalité est expérimentale. Vous l'utilisez à vos propres risques.", "Export Overlay File": "Exporter un fichier de superposition", "Import Overlay File": "Importer un fichier de superposition", "Import Widget File in Current Scene": "Importer un fichier Widget dans la scène actuelle", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "La collection de scènes active n'est pas une collection de scènes Dual Output.", + "Convert to Vanilla Scene": "Convertir en scène Vanilla", + "Convert": "Convertir", + "Convert and Export Overlay": "Convertir et exporter l’overlay", + "Assign": "Assigner", + "Assign and Export Overlay": "Assigner et exporter l’overlay", + "Assign Vertical Sources to Horizontal Display": "Assigner les sources verticales à l'affichage horizontal", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "La procédure ci-dessous crée une copie de la collection de scènes active, définit la copie comme collection active, puis applique la fonction.", + "Manage Dual Output Scene": "Gérer la scène Dual Output", + "Unable to convert dual output collection.": "Impossible de convertir la collection Dual Output." } diff --git a/app/i18n/fr-FR/promotional-copy.json b/app/i18n/fr-FR/promotional-copy.json index 4d96613dfa4a..2d08e6c0a616 100644 --- a/app/i18n/fr-FR/promotional-copy.json +++ b/app/i18n/fr-FR/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 heure de vidéos + 250 Go de stockage et bien plus encore", "Highest Profit Margins": "Marges bénéficiaires les plus élevées", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice} par mois ou %{yearlyPrice} par an", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Édition de texte pour le contenu VOD" } diff --git a/app/i18n/fr-FR/scenes.json b/app/i18n/fr-FR/scenes.json index 25ad8932e057..3dc862dcb144 100644 --- a/app/i18n/fr-FR/scenes.json +++ b/app/i18n/fr-FR/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Entrez un nom de collection de scènes", "Copy of %{collectionName}": "Copie de %{collectionName}", "Your Scene Collections": "Votre collection de scènes", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Mode Dual Output", + "Horizontal Output": "Sortie horizontale", + "Vertical Output": "Sortie verticale", + "Arrange sources here for a vertical scene layout.": "Disposer les sources ici pour un format vertical de la scène.", + "Arrange sources here for a horizontal scene layout.": "Disposer les sources ici pour un format horizontal de la scène.", + "Toggle Dual Output Mode.": "Basculer sur le mode Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Impossible de cacher les basculements Dual Output en mode Dual Output." } diff --git a/app/i18n/fr-FR/settings.json b/app/i18n/fr-FR/settings.json index 107b1f269829..aed1d46b099b 100644 --- a/app/i18n/fr-FR/settings.json +++ b/app/i18n/fr-FR/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Ce nombre est trop élevé pour un numérateur de FPS de %{fpsNum}, veuillez réduire ce nombre ou augmenter le numérateur", "FPS Value must be between 1 and 1000": "La valeur de FPS doit être comprise entre 1 et 1 000", "%{fieldName} must be greater than 0": "%{fieldName} doit être supérieur à 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Marqueurs", + "Manage Dual Output": "Gérer Dual Output", + "Auto optimizer disabled for dual output scenes": "Optimiseur automatique désactivé pour les scènes Dual Output" } diff --git a/app/i18n/fr-FR/sources.json b/app/i18n/fr-FR/sources.json index 8c864c61d37a..0705cf51d1ee 100644 --- a/app/i18n/fr-FR/sources.json +++ b/app/i18n/fr-FR/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Définir le filtre d'échelle sur 'Bilinear'", "Set scale filter 'Lanczos'": "Définir le filtre d'échelle sur 'Lanczos'", "Set scale filter 'Area'": "Définir le filtre d'échelle sur 'Zone'", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Vous avez actuellement la même source sur les deux canevas sélectionnés. Veuillez sélectionner la source dans le canevas pour le modifier indépendamment.", + "Selective Recording can only be used with horizontal sources.": "L'enregistrement sélectif ne peut être utilisé qu'avec des sources horizontales.", + "Cannot move source outside canvas in Dual Output Mode.": "Impossible de déplacer la source à l'extérieur du canevas en mode Dual Output." } diff --git a/app/i18n/fr-FR/streaming.json b/app/i18n/fr-FR/streaming.json index 2963c5b7527a..e031527df752 100644 --- a/app/i18n/fr-FR/streaming.json +++ b/app/i18n/fr-FR/streaming.json @@ -123,7 +123,7 @@ "Go back": "Retour", "Show Advanced Settings": "Afficher les paramètres avancés", "Configure the Multistream service": "Configurer le service Multistream", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Configurer le service Dual Output", "Apply optimized settings": "Application des paramètres optimisés", "Start video transmission": "Lancement de la transmission vidéo", "Publish Youtube broadcast": "Publier une diffusion YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Échec de la mise à jour des paramètres de la plateforme", "The Multistream server is temporarily unavailable": "Le serveur Multistream est temporairement indisponible", "Failed to configure the Multistream server": "Échec de la configuration du serveur Multistream", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Échec de la configuration du service Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "Le serveur de multistreaming est temporairement non disponible pour Dual Output", "Your YouTube account is not enabled for live streaming": "La diffusion en direct n'est pas activée sur votre compte YouTube", "Failed to publish the YouTube broadcast": "Échec de la publication de la diffusion YouTube", "Failed to post the Tweet": "Échec de la publication du tweet", @@ -180,30 +180,30 @@ "New features coming soon!": "De nouvelles fonctionnalités arriveront très bientôt!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Streamez sur plusieurs plateformes simultanément avec Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Streamez vers des plateformes horizontales et verticales simultanément. Les enregistrements seront uniquement horizontaux.", + "Dual Output Settings": "Paramètres de Dual Output", + "Enable Dual Output": "Activer Dual Output", + "Set your default output mode for each platform.": "Définissez votre mode de sortie par défaut pour chaque plateforme.", + "Set Dual Output Settings": "Paramètres de Dual Output", "Mode:": "Mode:", "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "You can select which one to stream with in the Go Live window.": "Vous pouvez sélectionner le mode avec lequel vous souhaitez streamer dans la fenêtre Diffuser en direct.", + "Video Output Orientation": "Orientation de la sortie vidéo", + "Show horizontal display.": "Montrer l'affichage horizontal.", + "Show vertical display.": "Montrer l'affichage vertical.", + "Hide horizontal display.": "Masquer l'affichage horizontal.", + "Hide vertical display.": "Masquer l'affichage vertical.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Améliorez vos streams grâce aux thèmes premium de Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Vous ne pouvez pas modifier ces paramètres lorsque vous êtes en direct.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output est activé: vous devez streamer sur une plateforme horizontale et une plateforme verticale.", + "Other": "Autre", + "Add Destination with Ultra": "Ajouter une destination avec Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Connectez-vous pour activer Dual Output. Souhaitez-vous vous connecter maintenant?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Pour utiliser Dual Output, vous devez streamer sur au moins une plateforme horizontale et une plateforme verticale.", + "Cannot toggle Dual Output while live.": "Impossible de basculer sur Dual Output pendant une diffusion en direct.", + "Cannot toggle Dual Output while in Studio Mode.": "Impossible de basculer sur Dual Output en étant en mode studio.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output ne s'affiche pas: l'enregistrement sélectif n'est compatible qu'avec les sources horizontales et désactive la modification de la scène de sortie verticale. Veuillez désactiver l'enregistrement sélectif des sources pour configurer Dual Output.", + "Selective Recording can only be used with horizontal sources.": "L'enregistrement sélectif ne peut être utilisé qu'avec des sources horizontales.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Configurez la fonction Diffuser en direct pour le mode Dual Output dans la fenêtre Diffuser en direct.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Impossible de basculer sur le mode Studio en étant en mode Dual Output." } diff --git a/app/i18n/fr-FR/widgets.json b/app/i18n/fr-FR/widgets.json index b8665dffac5b..977e2c3cfdbd 100644 --- a/app/i18n/fr-FR/widgets.json +++ b/app/i18n/fr-FR/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "La quantité de Sparks envoyés est d'exactement ", "Ember amount is at least ": "La quantité d'Ember est d'au moins ", "Ember amount is exactly ": "La quantité d'Ember est d'exactement ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Permettez à vos viewers de verser des dons pour partager du contenu sur votre stream.", "Twitch Subscribers": "Abonnés Twitch", "YouTube Members": "Membres YouTube", "Media Share": "Partage multimédia", diff --git a/app/i18n/hu-HU/hotkeys.json b/app/i18n/hu-HU/hotkeys.json index 8da437741f17..aecc5d5dbde1 100644 --- a/app/i18n/hu-HU/hotkeys.json +++ b/app/i18n/hu-HU/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Következő dia", "Previous Slide": "Előző dia", "Toggle Performance Mode": "Teljesítmény mód bekapcsolása", - "Skip Alert": "Értesítés átugrása" + "Skip Alert": "Értesítés átugrása", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/id-ID/hotkeys.json b/app/i18n/id-ID/hotkeys.json index 1b754d1a716d..d1d50d6ac76c 100644 --- a/app/i18n/id-ID/hotkeys.json +++ b/app/i18n/id-ID/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Slide Berikutnya", "Previous Slide": "Slide Sebelumnya", "Toggle Performance Mode": "Toggle Mode Performance", - "Skip Alert": "Lewati Peringatan" + "Skip Alert": "Lewati Peringatan", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/it-IT/guest-cam.json b/app/i18n/it-IT/guest-cam.json index 16a651a736ec..4000ce03e0d4 100644 --- a/app/i18n/it-IT/guest-cam.json +++ b/app/i18n/it-IT/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam richiede una sorgente", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Per usare Collab Cam è richiesta almeno una sorgente. Vuoi aggiungerne una subito?", "You now have access to Collab Cam!": "Ore puoi accedere a Collab Cam.", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Devi aver effettuato l’accesso per utilizzare Collab Cam." } diff --git a/app/i18n/it-IT/highlighter.json b/app/i18n/it-IT/highlighter.json index 54d2594492ee..35be7883e1bb 100644 --- a/app/i18n/it-IT/highlighter.json +++ b/app/i18n/it-IT/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Si è verificato un errore durante la lettura dell’audio da %{file}", "An error occurred while mixing audio": "Si è verificato un errore durante il mix dell’audio", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Modifica le tue riproduzioni con Highlighter, lo strumento di modifica gratuito integrato a Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "Carica su", + "Upload": "Carica", + "This feature requires a Streamlabs ID": "Questa funzionalità richiede uno Streamlabs ID", + "Sign up for Streamlabs ID": "Iscriviti a Streamlabs ID", + "Add subtitles, transcribe, and more": "Aggiungi sottotitoli, trascrivi e altro ancora", + "Convert to mobile-friendly short video": "Converti in video brevi adatti ai dispositivi mobili", + "YouTube (private video)": "YouTube (video privato)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "Trascrivi", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Registra il tuo schermo con Streamlabs Desktop. La registrazione completata verrà visualizzata qui. Accedi ai tuoi file o modificali ulteriormente con gli strumenti Streamlabs.", + "Recordings": "Registrazioni" } \ No newline at end of file diff --git a/app/i18n/it-IT/hotkeys.json b/app/i18n/it-IT/hotkeys.json index 307b3dcc4579..53ec0c15097f 100644 --- a/app/i18n/it-IT/hotkeys.json +++ b/app/i18n/it-IT/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Prossima diapositiva", "Previous Slide": "Diapositiva precedente", "Toggle Performance Mode": "Attiva/Disattiva modalità prestazioni", - "Skip Alert": "Salta l'avviso" + "Skip Alert": "Salta l'avviso", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/it-IT/notifications.json b/app/i18n/it-IT/notifications.json index 7803cfc484e4..dc0cf62728c3 100644 --- a/app/i18n/it-IT/notifications.json +++ b/app/i18n/it-IT/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Mostra nella cartella", "Recordings": "Registrazioni", "Marker %{label} added at %{timestamp}": "Marcatore %{label} aggiunto a %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Il file è troppo grande per essere caricato", + "File type %{extension} is not supported": "Il tipo di file %{extension} non è supportato", + "Upload already in progress": "Caricamento già in corso" } diff --git a/app/i18n/it-IT/onboarding.json b/app/i18n/it-IT/onboarding.json index 42457068b6ef..5554cfd4b4f1 100644 --- a/app/i18n/it-IT/onboarding.json +++ b/app/i18n/it-IT/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Chatbot di base", "Basic Features": "Funzioni di base", "Access to All Overlays and Themes (%{themeNumber})": "Accesso a tutte le sovrapposizioni e a tutti i temi (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Aggiungi fino a 11 ospiti o videocamere", "Access Full App Library (%{appNumber})": "Accedi alla libreria delle app completa (%{appNumber})", "Custom Tip Page and Domain": "Pagina donazioni personalizzata e dominio", "Custom Named Chatbot": "Chatbot denominato personalizzato", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop richiede un account collegato alla piattaforma per poter utilizzare tutte le funzioni. Saltando questo passaggio, verrai disconnesso e alcune funzioni potrebbero non essere disponibili.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Il tuo account Streamlabs ha più piattaforme di contenuti connesse. Seleziona la piattaforma principale su cui eseguirai lo streaming con Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop ti richiede di connettere una piattaforma di contenuti al tuo account Streamlabs", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Errore", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Si è verificato un errore durante il tentativo di ottimizzazione. Sono state applicate solo le impostazioni predefinite" } diff --git a/app/i18n/it-IT/overlays.json b/app/i18n/it-IT/overlays.json index 2ca132e9c98d..6d3e4ca14fc2 100644 --- a/app/i18n/it-IT/overlays.json +++ b/app/i18n/it-IT/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} salvato con successo", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "Convertito con successo %{filename}", + "Successfully saved %{filename} to %{filepath}": "Salvato correttamente %{filename} di %{filepath}", "Successfully loaded %{filename}.overlay": "%{filename}.overlay caricato con successo", "This is an experimental feature. Use at your own risk.": "Questa funzione è sperimentale. Utilizzala a tuo rischio e pericolo.", "Export Overlay File": "Esporta file di overlay", "Import Overlay File": "Importa file di overlay", "Import Widget File in Current Scene": "Importa file widget nella scena corrente", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "La raccolta di scene attiva non è Dual Output.", + "Convert to Vanilla Scene": "Convertire in scena Vanilla", + "Convert": "Converti", + "Convert and Export Overlay": "Converti ed esporta overlay", + "Assign": "Assegna", + "Assign and Export Overlay": "Assegna ed esporta overlay", + "Assign Vertical Sources to Horizontal Display": "Assegna sorgenti verticali al display orizzontale", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Quanto segue creerà una copia della raccolta di scene attiva, imposterà la copia come raccolta attiva e quindi applicherà la funzione.", + "Manage Dual Output Scene": "Gestisci scena Dual Output", + "Unable to convert dual output collection.": "Impossibile convertire la raccolta Dual Output." } diff --git a/app/i18n/it-IT/promotional-copy.json b/app/i18n/it-IT/promotional-copy.json index 3fc5f6d00e6e..3cf2ac0d6d63 100644 --- a/app/i18n/it-IT/promotional-copy.json +++ b/app/i18n/it-IT/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 ora di video + 250 GB di spazio di archiviazione + altro ancora", "Highest Profit Margins": "Margini di profitto più elevati", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/mese o %{yearlyPrice}/anno", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Editing basato su testo di contenuti VOD" } diff --git a/app/i18n/it-IT/scenes.json b/app/i18n/it-IT/scenes.json index e19397696b7e..e2c1773f2545 100644 --- a/app/i18n/it-IT/scenes.json +++ b/app/i18n/it-IT/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Inserisci un nome per la collezione di scene", "Copy of %{collectionName}": "Copia di %{collectionName}", "Your Scene Collections": "Le tue raccolte scene", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Modalità Dual Output", + "Horizontal Output": "Uscita orizzontale", + "Vertical Output": "Uscita verticale", + "Arrange sources here for a vertical scene layout.": "Disponi le sorgenti in questo punto per un layout verticale della scena.", + "Arrange sources here for a horizontal scene layout.": "Disponi le sorgenti in questo punto per un layout orizzontale della scena.", + "Toggle Dual Output Mode.": "Alterna modalità Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Impossibile nascondere le levette del Dual Output in modalità Dual Output." } diff --git a/app/i18n/it-IT/settings.json b/app/i18n/it-IT/settings.json index cd7f7c5144ef..9d29c783a7cb 100644 --- a/app/i18n/it-IT/settings.json +++ b/app/i18n/it-IT/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Questo numero è troppo elevato per un numeratore FPS di %{fpsNum}. Diminuiscilo o incrementa il numeratore", "FPS Value must be between 1 and 1000": "Il valore FPS deve essere compreso tra 1 e 1000", "%{fieldName} must be greater than 0": "%{fieldName} deve essere maggiore di 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Marcatori", + "Manage Dual Output": "Gestisci Dual Output", + "Auto optimizer disabled for dual output scenes": "Ottimizzatore automatico disabilitato per le scene Dual Output" } diff --git a/app/i18n/it-IT/sources.json b/app/i18n/it-IT/sources.json index 030e69d08eda..4e94c81cd5bd 100644 --- a/app/i18n/it-IT/sources.json +++ b/app/i18n/it-IT/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Imposta filtro scala “Bilineare”", "Set scale filter 'Lanczos'": "Imposta filtro scala “Lanczos”", "Set scale filter 'Area'": "Imposta filtro scala “Area”", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Attualmente è selezionata la stessa sorgente su entrambi canvas. Seleziona la sorgente nel canvas per modificarla in modo indipendente.", + "Selective Recording can only be used with horizontal sources.": "La registrazione selettiva può essere utilizzata solo con sorgenti orizzontali.", + "Cannot move source outside canvas in Dual Output Mode.": "Impossibile spostare la sorgente all'esterno del canvas in modalità Dual Output." } diff --git a/app/i18n/it-IT/streaming.json b/app/i18n/it-IT/streaming.json index 18e129345c32..fac917715a87 100644 --- a/app/i18n/it-IT/streaming.json +++ b/app/i18n/it-IT/streaming.json @@ -123,7 +123,7 @@ "Go back": "Indietro", "Show Advanced Settings": "Mostra impostazioni avanzate", "Configure the Multistream service": "Configura il servizio multistreaming", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Configura il servizio Dual Output", "Apply optimized settings": "Applica impostazioni ottimizzate", "Start video transmission": "Inizia la trasmissione video", "Publish Youtube broadcast": "Pubblica una trasmissione YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Impossibile aggiornare le impostazioni della piattaforma", "The Multistream server is temporarily unavailable": "Il server Multistream è temporaneamente non disponibile", "Failed to configure the Multistream server": "Impossibile configurare il server Multistream", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Impossibile configurare il servizio Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "Il server Multistream è temporaneamente non disponibile per Dual Output", "Your YouTube account is not enabled for live streaming": "Account YouTube non abilitato per lo streaming in diretta", "Failed to publish the YouTube broadcast": "Impossibile pubblicare la trasmissione YouTube", "Failed to post the Tweet": "Impossibile postare il tweet", @@ -180,30 +180,30 @@ "New features coming soon!": "Nuove funzionalità in arrivo!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Fai streaming contemporaneamente su più piattaforme con i widget di Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Trasmetti in streaming su piattaforme orizzontali e verticali contemporaneamente. Le registrazioni saranno solo in orizzontale.", + "Dual Output Settings": "Impostazioni Dual Output", + "Enable Dual Output": "Abilita Dual Output", + "Set your default output mode for each platform.": "Imposta la modalità di uscita predefinita per ogni piattaforma.", + "Set Dual Output Settings": "Imposta le impostazioni Dual Output", + "Mode:": "Modalità:", + "Horizontal": "Orizzontale", + "You can select which one to stream with in the Go Live window.": "Puoi selezionare con quale trasmettere nella finestra Vai in diretta.", + "Video Output Orientation": "Orientamento uscita video", + "Show horizontal display.": "Mostra display orizzontale.", + "Show vertical display.": "Mostra display verticale.", + "Hide horizontal display.": "Nascondi display orizzontale.", + "Hide vertical display.": "Nascondi display verticale.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Aggiorna il tuo streaming con temi premium con Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Non puoi modificare queste impostazioni quando sei in diretta", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output è abilitata: devi trasmettere su una piattaforma orizzontale e una verticale.", + "Other": "Altro", + "Add Destination with Ultra": "Aggiungi destinazione con Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Accedi per abilitare Dual Output. Desideri accedere ora?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Per utilizzare Dual Output devi trasmettere su almeno una piattaforma orizzontale e una verticale.", + "Cannot toggle Dual Output while live.": "Impossibile attivare Dual Output in diretta.", + "Cannot toggle Dual Output while in Studio Mode.": "Impossibile attivare Dual Output in modalità Studio.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Impossibile visualizzare Dual Output.La registrazione selettiva funziona solo con sorgenti orizzontali e disabilita la modifica della scena di uscita verticale. Disabilita la registrazione selettiva dalle sorgenti per impostare Dual Output.", + "Selective Recording can only be used with horizontal sources.": "La registrazione selettiva può essere utilizzata solo con sorgenti orizzontali.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Configura le impostazioni Vai in diretta per la modalità Dual Output nella finestra Vai in diretta.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Impossibile attivare la modalità Studio in modalità Dual Output." } diff --git a/app/i18n/it-IT/widgets.json b/app/i18n/it-IT/widgets.json index 43aa2f063592..ea27acd134f0 100644 --- a/app/i18n/it-IT/widgets.json +++ b/app/i18n/it-IT/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Le spark inviate sono esattamente ", "Ember amount is at least ": "La quantità di Ember è almeno ", "Ember amount is exactly ": "La quantità di Ember è esattamente ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Consenti ai tuoi spettatori di donare e condividere contenuti multimediali nel tuo streaming.", "Twitch Subscribers": "Iscritti Twitch", "YouTube Members": "Membri YouTube", "Media Share": "Condivisione contenuti multimediali", diff --git a/app/i18n/ja-JP/guest-cam.json b/app/i18n/ja-JP/guest-cam.json index f47316058a1b..95ba8e02e909 100644 --- a/app/i18n/ja-JP/guest-cam.json +++ b/app/i18n/ja-JP/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam ではソースが必要です", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Collab Cam を使用するには、最低 1 つの Collab Cam ソースが必要です。ソースを今すぐ追加しますか?", "You now have access to Collab Cam!": "Collab Cam にアクセスできるようになりました!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Collab Cam を使用するには、ログインする必要があります。" } diff --git a/app/i18n/ja-JP/highlighter.json b/app/i18n/ja-JP/highlighter.json index 5b564ce011da..0fdb139ad070 100644 --- a/app/i18n/ja-JP/highlighter.json +++ b/app/i18n/ja-JP/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "%{file} からのオーディオ読み込み中にエラーが発生しました", "An error occurred while mixing audio": "オーディオのミキシング中にエラーが発生しました", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Streamlabs 内蔵の無料エディタ Highlighter でリプレイを編集しましょう。", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "アップロード先", + "Upload": "アップロード", + "This feature requires a Streamlabs ID": "この機能には Streamlabs ID が必要です", + "Sign up for Streamlabs ID": "Streamlabs ID にサインアップ", + "Add subtitles, transcribe, and more": "字幕の追加、文字起こしなど", + "Convert to mobile-friendly short video": "モバイル対応のビデオクリップに変換", + "YouTube (private video)": "YouTube(プライベート動画)", + "Clip": "クリップ", + "Transcribe": "文字起こし", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Streamlabs Desktop を使って画面を録画。録画が完了すると、ここに表示されます。ファイルにアクセス、または Streamlabs ツールを使ってさらに編集。", + "Recordings": "録画" } \ No newline at end of file diff --git a/app/i18n/ja-JP/hotkeys.json b/app/i18n/ja-JP/hotkeys.json index e5a19d012ac2..c991f91cb4e5 100644 --- a/app/i18n/ja-JP/hotkeys.json +++ b/app/i18n/ja-JP/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "次のスライダー", "Previous Slide": "前のスライダー", "Toggle Performance Mode": "パフォーマンスモードを切り替え", - "Skip Alert": "警告をスキップする" + "Skip Alert": "警告をスキップする", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/ja-JP/notifications.json b/app/i18n/ja-JP/notifications.json index c2dee37e2024..ab625d601cbc 100644 --- a/app/i18n/ja-JP/notifications.json +++ b/app/i18n/ja-JP/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "フォルダーに表示", "Recordings": "録画", "Marker %{label} added at %{timestamp}": "マーカー %{label} が %{timestamp} に追加されました", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "ファイルが大きすぎるためアップロードできません", + "File type %{extension} is not supported": "ファイルタイプ %{extension} はサポートされていません", + "Upload already in progress": "アップロードは既に進行中です" } diff --git a/app/i18n/ja-JP/onboarding.json b/app/i18n/ja-JP/onboarding.json index be6edabca500..deb64c092b58 100644 --- a/app/i18n/ja-JP/onboarding.json +++ b/app/i18n/ja-JP/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "基本チャットボット", "Basic Features": "基本機能", "Access to All Overlays and Themes (%{themeNumber})": "すべてのオーバーレイとテーマ(%{themeNumber})へのアクセス", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "最大 11 人のゲストまたは 11 台のカメラを追加", "Access Full App Library (%{appNumber})": "すべてのアプリライブラリ(%{appNumber})へのアクセス", "Custom Tip Page and Domain": "カスタムチップページとドメイン", "Custom Named Chatbot": "名前付きのカスタムチャットボット", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop では、すべての機能を使用するには、接続されたプラットフォームアカウントを保有する必要があります。このステップをスキップすると、ログアウトし、一部の機能が利用できなくなることがあります。", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "お使いの Streamlabs アカウントには、複数の接続されたコンテンツプラットフォームがあります。Streamlabs Desktop を使ってストリーミングするプライマリプラットフォームを選択してください。", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop では、コンテンツ プラットフォームを Streamlabs アカウントに接続する必要があります", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "エラー", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "最適化の試行中にエラーが発生しました。デフォルト設定のみが適用されます" } diff --git a/app/i18n/ja-JP/overlays.json b/app/i18n/ja-JP/overlays.json index d74897801310..1debff40455a 100644 --- a/app/i18n/ja-JP/overlays.json +++ b/app/i18n/ja-JP/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} が正常に保存されました", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} が変換されました", + "Successfully saved %{filename} to %{filepath}": "%{filename} が %{filepath} に保存されました", "Successfully loaded %{filename}.overlay": "%{filename}.オーバーレイが正常に読み込まれました", "This is an experimental feature. Use at your own risk.": "これは実験的な機能です。自己責任で使用してください。", "Export Overlay File": "オーバーレイ ファイルをエクスポート", "Import Overlay File": "オーバーレイ ファイルをインポート", "Import Widget File in Current Scene": "現在のシーンのウィジェットファイルをインポート", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "アクティブなシーンコレクションは Dual Output シーンコレクションではありません。", + "Convert to Vanilla Scene": "Vanilla シーンに変換", + "Convert": "変換", + "Convert and Export Overlay": "オーバーレイの変換とエクスポート", + "Assign": "割り当てる", + "Assign and Export Overlay": "オーバーレイの割り当てとエクスポート", + "Assign Vertical Sources to Horizontal Display": "縦方向ソースを横方向ディスプレイに割り当てる", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "以下では、アクティブなシーンコレクションのコピーを作成し、コピーをアクティブなコレクションとして設定してから、機能を適用します。", + "Manage Dual Output Scene": "Dual Output シーンを管理", + "Unable to convert dual output collection.": "Dual Output コレクションを変換できません。" } diff --git a/app/i18n/ja-JP/promotional-copy.json b/app/i18n/ja-JP/promotional-copy.json index f2d6da24b202..dd084f519190 100644 --- a/app/i18n/ja-JP/promotional-copy.json +++ b/app/i18n/ja-JP/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 時間の動画 + 250GB のストレージ + その他", "Highest Profit Margins": "最高の利益幅", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/月または %{yearlyPrice}/年", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "VOD コンテンツのテキストベースの編集" } diff --git a/app/i18n/ja-JP/scenes.json b/app/i18n/ja-JP/scenes.json index 41d60e50f5a1..2ccaf5faf4b2 100644 --- a/app/i18n/ja-JP/scenes.json +++ b/app/i18n/ja-JP/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "シーンコレクション名を入力", "Copy of %{collectionName}": "%{collectionName} のコピー", "Your Scene Collections": "あなたのシーンコレクション", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output モード", + "Horizontal Output": "横方向出力", + "Vertical Output": "縦方向出力", + "Arrange sources here for a vertical scene layout.": "縦方向シーンレイアウト用のソースをここに配置します。", + "Arrange sources here for a horizontal scene layout.": "横方向シーンレイアウト用のソースをここに配置します。", + "Toggle Dual Output Mode.": "Dual Output モードを切り替えます。", + "Cannot hide dual output toggles in dual output mode.": "Dual Output モードでは Dual Output トグルを非表示にできません。" } diff --git a/app/i18n/ja-JP/settings.json b/app/i18n/ja-JP/settings.json index 8f8fb882a282..07e54cf3265d 100644 --- a/app/i18n/ja-JP/settings.json +++ b/app/i18n/ja-JP/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "この数字は、%{fpsNum} の FPS 分子には大きすぎます。これを小さくするか、または分子を大きくしてください", "FPS Value must be between 1 and 1000": "FPS 値は 1~1000 にしてください", "%{fieldName} must be greater than 0": "%{fieldName} は 0 より大きい数字にしてください", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "マーカー", + "Manage Dual Output": "Dual Output の管理", + "Auto optimizer disabled for dual output scenes": "Dual Output シーンでは、自動オプティマイザーが無効になっています" } diff --git a/app/i18n/ja-JP/sources.json b/app/i18n/ja-JP/sources.json index 03d0622b602a..04a9a9fbbfc4 100644 --- a/app/i18n/ja-JP/sources.json +++ b/app/i18n/ja-JP/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "スケールフィルターを「バイリニア」に設定", "Set scale filter 'Lanczos'": "スケールフィルターを「ランチョス」に設定", "Set scale filter 'Area'": "スケールフィルターを「面積」に設定", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "現在、両方のキャンバスで同じソースが選択されています。キャンバス内でソースを選択して、ソースを個別に編集してください。", + "Selective Recording can only be used with horizontal sources.": "セレクティブレコーディングは横方向ソースでのみ使用できます。", + "Cannot move source outside canvas in Dual Output Mode.": "Dual Output モードでは、ソースをキャンバス外に移動できません。" } diff --git a/app/i18n/ja-JP/streaming.json b/app/i18n/ja-JP/streaming.json index 470fcce39e7b..392ce7a9f800 100644 --- a/app/i18n/ja-JP/streaming.json +++ b/app/i18n/ja-JP/streaming.json @@ -123,7 +123,7 @@ "Go back": "戻る", "Show Advanced Settings": "詳細設定を表示", "Configure the Multistream service": "マルチストリームサービスを構成", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Dual Output サービスを構成する", "Apply optimized settings": "最適化された設定を適用", "Start video transmission": "ビデオ送信を開始", "Publish Youtube broadcast": "YouTube ブロードキャストを公開", @@ -145,8 +145,8 @@ "Failed to update platform settings": "プラットフォーム設定を更新できませんでした", "The Multistream server is temporarily unavailable": "マルチストリームサーバーは一時的に利用できません", "Failed to configure the Multistream server": "マルチストリームサーバーを構成できませんでした", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Dual Output サービスを構成できませんでした", + "The Multistream server is temporarily unavailable for Dual Output": "マルチストリームサーバーは、Dual Output で一時的に利用できません", "Your YouTube account is not enabled for live streaming": "YouTube アカウントがライブストリーミング用に有効化されていません", "Failed to publish the YouTube broadcast": "YouTube ブロードキャストを公開できませんでした", "Failed to post the Tweet": "ツイートを投稿できませんでした", @@ -180,30 +180,30 @@ "New features coming soon!": "新機能がまもなく登場します!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Streamlabs Ultra を使って、複数のプラットフォームに同時にストリーム。", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "横方向プラットフォームと縦方向プラットフォームに同時ストリーム。録画は横方向のみで行われます。", + "Dual Output Settings": "Dual Output 設定", + "Enable Dual Output": "Dual Output を有効化", + "Set your default output mode for each platform.": "各プラットフォームのデフォルト出力モードを設定します。", + "Set Dual Output Settings": "Dual Output 設定を行う", + "Mode:": "モード:", + "Horizontal": "横方向", + "You can select which one to stream with in the Go Live window.": "[ライブ配信を開始する] ウィンドウで、ストリーム方法を選択できます。", + "Video Output Orientation": "ビデオ出力の向き", + "Show horizontal display.": "横方向ディスプレイを表示します。", + "Show vertical display.": "縦方向ディスプレイを表示します。", + "Hide horizontal display.": "横方向ディスプレイを非表示にします。", + "Hide vertical display.": "縦方向ディスプレイを非表示にします。", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Streamlabs Ultra を使って、プレミアムテーマでストリームをアップグレードしましょう。", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "ライブ中はこれらの設定を変更できません。", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output が有効です - 1 台の横方向プラットフォームと 1 台の縦方向プラットフォームにストリームする必要があります。", + "Other": "その他", + "Add Destination with Ultra": "Ultra で行き先を追加", + "Please log in to enable dual output. Would you like to log in now?": "ログインして、Dual Output を有効化してください。今すぐログインしますか?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Dual Output を使用するには、最低 1 つの横方向プラットフォームと 1 つの縦方向プラットフォームにストリームする必要があります。", + "Cannot toggle Dual Output while live.": "ライブ中は Dual Output を切り替えられません。", + "Cannot toggle Dual Output while in Studio Mode.": "スタジオモード中は Dual Output を切り替えられません。", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output を表示できません - セレクティブレコーディングは横方向ソースでのみ動作し、縦方向の出力シーンの編集が無効になります。[ソース] からセレクティブレコーディングを無効にして、Dual Output をセットアップしてください。", + "Selective Recording can only be used with horizontal sources.": "セレクティブレコーディングは横方向ソースでのみ使用できます。", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "[ライブ配信] ウィンドウで、Dual Output モードのライブ配信設定をセットアップします。", + "Cannot toggle Studio Mode in Dual Output Mode.": "Dual Output モードではスタジオモードを切り替えることができません。" } diff --git a/app/i18n/ja-JP/widgets.json b/app/i18n/ja-JP/widgets.json index 4661816e7cae..c995652d6f77 100644 --- a/app/i18n/ja-JP/widgets.json +++ b/app/i18n/ja-JP/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "送信されたスパークはちょうど です", "Ember amount is at least ": "エンバー量は最低 です", "Ember amount is exactly ": "エンバー量はちょうど です", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "視聴者が寄付をして、あなたのストリーム上でメディアを共有するのを許可します。", "Twitch Subscribers": "Twitch サブスクライバー", "YouTube Members": "YouTube メンバー", "Media Share": "共有", diff --git a/app/i18n/ko-KR/hotkeys.json b/app/i18n/ko-KR/hotkeys.json index 8c726c0174a2..497090f1bc4a 100644 --- a/app/i18n/ko-KR/hotkeys.json +++ b/app/i18n/ko-KR/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "다음 슬라이드", "Previous Slide": "이전 슬라이드", "Toggle Performance Mode": "성능 모드 토글", - "Skip Alert": "알림 건너뛰기" + "Skip Alert": "알림 건너뛰기", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/mk-MK/hotkeys.json b/app/i18n/mk-MK/hotkeys.json index 9d4fda97dae2..c2e5b0a87930 100644 --- a/app/i18n/mk-MK/hotkeys.json +++ b/app/i18n/mk-MK/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Skip Alert" + "Skip Alert": "Skip Alert", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/nl-NL/guest-cam.json b/app/i18n/nl-NL/guest-cam.json index 20b6af5f1ade..6c376101470d 100644 --- a/app/i18n/nl-NL/guest-cam.json +++ b/app/i18n/nl-NL/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam vereist een bron", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Er is ten minste één Collab Cam-bron nodig om Collab Cam te gebruiken. Wilt u er nu een toevoegen?", "You now have access to Collab Cam!": "U heeft nu toegang tot Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "U moet aangemeld zijn om Collab Cam te gebruiken." } diff --git a/app/i18n/nl-NL/highlighter.json b/app/i18n/nl-NL/highlighter.json index 29e01a4fdc40..2736aa471fbc 100644 --- a/app/i18n/nl-NL/highlighter.json +++ b/app/i18n/nl-NL/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Er is een fout opgetreden bij het lezen van audio uit %{file}", "An error occurred while mixing audio": "Er is een fout opgetreden bij het mengen van audio", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Bewerk uw replays met Highlighter, een gratis editor ingebouwd in Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "Uploaden naar", + "Upload": "Uploaden", + "This feature requires a Streamlabs ID": "Deze functie vereist een Streamlabs ID", + "Sign up for Streamlabs ID": "Aanmelden voor Streamlabs ID", + "Add subtitles, transcribe, and more": "Ondertiteling toevoegen, transcriberen en meer", + "Convert to mobile-friendly short video": "Converteren naar mobielvriendelijke korte video", + "YouTube (private video)": "YouTube (privévideo)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "Transcriberen", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Neem uw scherm op met Streamlabs Desktop. Zodra de opname is voltooid, wordt deze hier weergegeven. Open uw bestanden of bewerk ze verder met Streamlabs-tools.", + "Recordings": "Opnames" } \ No newline at end of file diff --git a/app/i18n/nl-NL/hotkeys.json b/app/i18n/nl-NL/hotkeys.json index f8f2392bf910..e9beda52bfad 100644 --- a/app/i18n/nl-NL/hotkeys.json +++ b/app/i18n/nl-NL/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Volgende dia", "Previous Slide": "Vorige dia", "Toggle Performance Mode": "Prestatiemodus schakelen", - "Skip Alert": "Melding overslaan" + "Skip Alert": "Melding overslaan", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/nl-NL/notifications.json b/app/i18n/nl-NL/notifications.json index 74becaaed41e..292e413ebda8 100644 --- a/app/i18n/nl-NL/notifications.json +++ b/app/i18n/nl-NL/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Weergeven in map", "Recordings": "Opnames", "Marker %{label} added at %{timestamp}": "Markering %{label} toegevoegd op %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Bestand is te groot om te uploaden", + "File type %{extension} is not supported": "Bestandstype %{extension} wordt niet ondersteund", + "Upload already in progress": "Uploaden is al in voortgang" } diff --git a/app/i18n/nl-NL/onboarding.json b/app/i18n/nl-NL/onboarding.json index 9ddd9892eed6..1692717a56ec 100644 --- a/app/i18n/nl-NL/onboarding.json +++ b/app/i18n/nl-NL/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Basischatbot", "Basic Features": "Basisfuncties", "Access to All Overlays and Themes (%{themeNumber})": "Toegang tot alle overlays en thema's (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Tot 11 gasten of camera's toevoegen", "Access Full App Library (%{appNumber})": "Toegang tot volledige Appbibliotheek (%{appNumber})", "Custom Tip Page and Domain": "Aangepaste fooienpagina en domein", "Custom Named Chatbot": "Chatbot met aangepaste naam", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Voor Streamlabs Desktop moet u een verbonden platformaccount hebben om alle functies te kunnen gebruiken. Als u deze stap overslaat, wordt u afgemeld en is het mogelijk dat sommige functies niet beschikbaar zijn.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Uw Streamlabs-account heeft meerdere verbonden contentplatforms. Selecteer het primaire platform waarnaar u met Streamlabs Desktop wilt streamen.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Voor Streamlabs Desktop moet u een contentplatform verbinden met uw Streamlabs-account", - "Error": "Error", + "Error": "Fout", "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "An error has occurred during optimization attempt. Only default settings are applied": "Er is een fout opgetreden tijdens de optimalisatiepoging. Alleen standaardinstellingen worden toegepast" } diff --git a/app/i18n/nl-NL/overlays.json b/app/i18n/nl-NL/overlays.json index 68e4729f0ba5..55b1af0e3dda 100644 --- a/app/i18n/nl-NL/overlays.json +++ b/app/i18n/nl-NL/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} is opgeslagen", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} is geconverteerd", + "Successfully saved %{filename} to %{filepath}": "%{filename} is opgeslagen naar %{filepath}", "Successfully loaded %{filename}.overlay": "%{filename}.overlay is geladen", "This is an experimental feature. Use at your own risk.": "Dit is een experimentele functie. Op eigen risico gebruiken.", "Export Overlay File": "Overlaybestand exporteren", "Import Overlay File": "Overlaybestand importeren", "Import Widget File in Current Scene": "Widgetbestand importeren in huidige scène", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "De actieve scèneverzameling is geen Dual Output-scèneverzameling.", + "Convert to Vanilla Scene": "Converteren naar lege scène", + "Convert": "Converteren", + "Convert and Export Overlay": "Overlay converteren en exporteren", + "Assign": "Toewijzen", + "Assign and Export Overlay": "Overlay toewijzen en exporteren", + "Assign Vertical Sources to Horizontal Display": "Verticale bronnen aan horizontale weergave toewijzen", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Hiermee wordt een kopie van de actieve scèneverzameling gemaakt, de kopie ingesteld als de actieve verzameling en de functie toegepast.", + "Manage Dual Output Scene": "Dual Output-scène beheren", + "Unable to convert dual output collection.": "Kan Dual Output-verzameling niet converteren." } diff --git a/app/i18n/nl-NL/promotional-copy.json b/app/i18n/nl-NL/promotional-copy.json index 7d9add84a80a..21eb6a0b6d52 100644 --- a/app/i18n/nl-NL/promotional-copy.json +++ b/app/i18n/nl-NL/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "Video's van 1 uur + 250 GB opslag + meer", "Highest Profit Margins": "Hoogste winstmarges", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/mnd of %{yearlyPrice}/jaar", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Tekstgebaseerde bewerking van VOD-content" } diff --git a/app/i18n/nl-NL/scenes.json b/app/i18n/nl-NL/scenes.json index 4902be024467..a75702a21427 100644 --- a/app/i18n/nl-NL/scenes.json +++ b/app/i18n/nl-NL/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Voer een naam voor de scèneverzameling in", "Copy of %{collectionName}": "Kopie van %{collectionName}", "Your Scene Collections": "Uw scèneverzamelingen", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output-modus", + "Horizontal Output": "Horizontale uitvoer", + "Vertical Output": "Verticale uitvoer", + "Arrange sources here for a vertical scene layout.": "Rangschik bronnen hier voor een verticale scènelay-out.", + "Arrange sources here for a horizontal scene layout.": "Rangschik bronnen hier voor een horizontale scènelay-out.", + "Toggle Dual Output Mode.": "Schakel de Dual Output-modus in of uit.", + "Cannot hide dual output toggles in dual output mode.": "Kan de Dual Output-schakelaars niet verbergen in de Dual Output-modus." } diff --git a/app/i18n/nl-NL/settings.json b/app/i18n/nl-NL/settings.json index d10b35ec61b0..79610cf60afc 100644 --- a/app/i18n/nl-NL/settings.json +++ b/app/i18n/nl-NL/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Dit cijfer is te hoog voor een FPS-teller van %{fpsNum}. Verlaag het of verhoog de teller.", "FPS Value must be between 1 and 1000": "De FPS-waarde moet tussen 1 en 1000 zijn", "%{fieldName} must be greater than 0": "%{fieldName} moet groter dan 0 zijn", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Markeringen", + "Manage Dual Output": "Dual Output beheren", + "Auto optimizer disabled for dual output scenes": "Automatische optimalisatie uitgeschakeld voor Dual Output-scènes" } diff --git a/app/i18n/nl-NL/sources.json b/app/i18n/nl-NL/sources.json index 1ef00285044d..87a573fe7d6d 100644 --- a/app/i18n/nl-NL/sources.json +++ b/app/i18n/nl-NL/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Schaalfilter 'Bilineair' instellen", "Set scale filter 'Lanczos'": "Schaalfilter 'Lanczos' instellen", "Set scale filter 'Area'": "Schaalfilter 'Area' instellen", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "U heeft momenteel dezelfde bron op beide canvassen geselecteerd. Selecteer de bron op het canvas om deze onafhankelijk te bewerken.", + "Selective Recording can only be used with horizontal sources.": "Selectieve opname kan alleen worden gebruikt met horizontale bronnen.", + "Cannot move source outside canvas in Dual Output Mode.": "Kan bron niet buiten canvas verplaatsen in de Dual Output-modus." } diff --git a/app/i18n/nl-NL/streaming.json b/app/i18n/nl-NL/streaming.json index 2b1931025c2f..56f271780de9 100644 --- a/app/i18n/nl-NL/streaming.json +++ b/app/i18n/nl-NL/streaming.json @@ -123,7 +123,7 @@ "Go back": "Terug", "Show Advanced Settings": "Geavanceerde instellingen weergeven", "Configure the Multistream service": "De multi-streamingservice configureren", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "De Dual Output-service configureren", "Apply optimized settings": "Geoptimaliseerde instellingen toepassen", "Start video transmission": "Videotransmissie starten", "Publish Youtube broadcast": "YouTube-uitzending publiceren", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Kan platforminstellingen niet bijwerken", "The Multistream server is temporarily unavailable": "De multi-streamingserver is tijdelijk niet beschikbaar", "Failed to configure the Multistream server": "Kan de multi-streamingservice niet configureren", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "De Dual Output-service is niet geconfigureerd", + "The Multistream server is temporarily unavailable for Dual Output": "De Multistream-server is tijdelijk niet beschikbaar voor Dual Output", "Your YouTube account is not enabled for live streaming": "Uw YouTube-account is niet ingeschakeld voor livestreaming", "Failed to publish the YouTube broadcast": "Kan niet publiceren naar de YouTube-uitzending", "Failed to post the Tweet": "Kan de tweet niet posten", @@ -180,30 +180,30 @@ "New features coming soon!": "Binnenkort nieuwe functies beschikbaar!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Stream op meerdere platforms tegelijk met Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream tegelijkertijd naar horizontale en verticale platforms. Opnames zijn alleen horizontaal.", + "Dual Output Settings": "Dual Output-instellingen", + "Enable Dual Output": "Dual Output inschakelen", + "Set your default output mode for each platform.": "Stel de standaard uitvoermodus voor elk platform in.", + "Set Dual Output Settings": "Dual Output-instellingen configureren", + "Mode:": "Modus:", + "Horizontal": "Horizontaal", + "You can select which one to stream with in the Go Live window.": "U kunt kiezen met welke u wilt streamen in het venster Live gaan.", + "Video Output Orientation": "Richting van video-uitvoer", + "Show horizontal display.": "Toon horizontale weergave.", + "Show vertical display.": "Toon verticale weergave.", + "Hide horizontal display.": "Verberg horizontale weergave.", + "Hide vertical display.": "Verberg verticale weergave.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Upgrade uw stream met premiumthema's met Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "U kunt deze instellingen niet wijzigen wanneer u live bent.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is ingeschakeld: u moet naar één horizontaal en één verticaal platform streamen.", + "Other": "Overig", + "Add Destination with Ultra": "Bestemming toevoegen met Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Log in om Dual Output in te schakelen. Wilt u nu inloggen?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Om Dual Output te gebruiken moet u naar ten minste één horizontaal en één verticaal platform streamen.", + "Cannot toggle Dual Output while live.": "Kan Dual Output niet in- of uitschakelen terwijl u live bent.", + "Cannot toggle Dual Output while in Studio Mode.": "Kan Dual Output niet in- of uitschakelen in de Studiomodus.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output kan niet worden weergegeven: Selectieve opname werkt alleen met horizontale bronnen en bewerking van de verticale uitvoerscène wordt uitgeschakeld. Schakel Selectieve opname uit via Bronnen om Dual Output in te stellen.", + "Selective Recording can only be used with horizontal sources.": "Selectieve opname kan alleen worden gebruikt met horizontale bronnen.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Stel de instellingen voor Live gaan in voor de Dual Output-modus in het venster Live gaan.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Kan Studiomodus niet in- of uitschakelen in de Dual Output-modus." } diff --git a/app/i18n/nl-NL/widgets.json b/app/i18n/nl-NL/widgets.json index caf88e15e573..1771979bf993 100644 --- a/app/i18n/nl-NL/widgets.json +++ b/app/i18n/nl-NL/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Verzonden sparks zijn exact ", "Ember amount is at least ": "Ember-hoeveelheid is ten minste ", "Ember amount is exactly ": "Ember-hoeveelheid is exact ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Geef kijkers de mogelijkheid om te doneren en media in uw stream te delen.", "Twitch Subscribers": "Twitch-abonnees", "YouTube Members": "YouTube-leden", "Media Share": "Mediashare", diff --git a/app/i18n/pl-PL/guest-cam.json b/app/i18n/pl-PL/guest-cam.json index 36982bb0fea9..d2a9321a8518 100644 --- a/app/i18n/pl-PL/guest-cam.json +++ b/app/i18n/pl-PL/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Funkcja współpracy przez Collab Cam wymaga źródła", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Przynajmniej jedno źródło Collab Cam jest niezbędne do użytkowania funkcji Collab Cam. Czy chcesz teraz je dodać?", "You now have access to Collab Cam!": "Nie masz dostępu do funkcji Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Musisz się zalogować, aby używać Collab Cam." } diff --git a/app/i18n/pl-PL/highlighter.json b/app/i18n/pl-PL/highlighter.json index a5eb17a8343b..3735363105d1 100644 --- a/app/i18n/pl-PL/highlighter.json +++ b/app/i18n/pl-PL/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Podczas odczytu dźwięku z pliku %{file} wystąpił błąd", "An error occurred while mixing audio": "Podczas miksowania dźwięku wystąpił błąd", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Montuj swoje powtórki z użyciem Highlighter, bezpłatnego edytora wbudowanego w aplikację Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "Prześlij na", + "Upload": "Prześlij", + "This feature requires a Streamlabs ID": "Ta funkcja wymaga identyfikatora Streamlabs ID", + "Sign up for Streamlabs ID": "Zarejestruj się w Streamlabs ID", + "Add subtitles, transcribe, and more": "Dodawaj napisy, transkrybuj i nie tylko", + "Convert to mobile-friendly short video": "Konwertuj na krótkie wideo przyjazne dla urządzeń mobilnych", + "YouTube (private video)": "YouTube (prywatne wideo)", + "Clip": "Przytnij", + "Transcribe": "Transkrybuj", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Nagrywaj swój ekran za pomocą Streamlabs Desktop. Po zakończeniu nagrywania zostanie ono wyświetlone tutaj. Uzyskaj dostęp do swoich plików lub edytuj je za pomocą narzędzi Streamlabs.", + "Recordings": "Nagrania" } \ No newline at end of file diff --git a/app/i18n/pl-PL/hotkeys.json b/app/i18n/pl-PL/hotkeys.json index 54a6e82d96a3..c8b9f7da8dc0 100644 --- a/app/i18n/pl-PL/hotkeys.json +++ b/app/i18n/pl-PL/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Kolejny slajd", "Previous Slide": "Poprzedni slajd", "Toggle Performance Mode": "Przełącz Tryb wydajności", - "Skip Alert": "Pomiń powiadomienie" + "Skip Alert": "Pomiń powiadomienie", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/pl-PL/notifications.json b/app/i18n/pl-PL/notifications.json index 5d4d7204700d..e3fa5190040c 100644 --- a/app/i18n/pl-PL/notifications.json +++ b/app/i18n/pl-PL/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Pokaż w folderze", "Recordings": "Nagrania", "Marker %{label} added at %{timestamp}": "Marker %{label} dodany w %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Plik jest zbyt duży, aby go przesłać", + "File type %{extension} is not supported": "Typ pliku %{extension} nie jest obsługiwany", + "Upload already in progress": "Przesyłanie w toku" } diff --git a/app/i18n/pl-PL/onboarding.json b/app/i18n/pl-PL/onboarding.json index f7a2265f969c..cc66835dc1e3 100644 --- a/app/i18n/pl-PL/onboarding.json +++ b/app/i18n/pl-PL/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Podstawowy czatbot", "Basic Features": "Podstawowe funkcje", "Access to All Overlays and Themes (%{themeNumber})": "Dostęp do wszystkich nakładek i motywów (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Dodaj nawet 11 gości lub kamer", "Access Full App Library (%{appNumber})": "Dostęp do pełnej biblioteki aplikacji (%{appNumber})", "Custom Tip Page and Domain": "Niestandardowa strona do napiwków i domena", "Custom Named Chatbot": "Niestandardowa nazwa czatbota", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop wymaga posiadania konta na platformie, aby móc korzystać ze wszystkich jego funkcji. Pomijając ten krok, nastąpi wylogowanie, a niektóre funkcje mogą być niedostępne.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Twoje konto Streamlabs ma wiele podłączonych platform z treściami. Wybierz główną platformę, na którą będziesz streamować za pomocą Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop wymaga podłączenia platformy z treścią do konta Streamlabs", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Błąd", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Podczas próby optymalizacji wystąpił błąd. Zastosowano tylko ustawienia domyślne" } diff --git a/app/i18n/pl-PL/overlays.json b/app/i18n/pl-PL/overlays.json index 26d6692008f8..ba29c75fcb03 100644 --- a/app/i18n/pl-PL/overlays.json +++ b/app/i18n/pl-PL/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "Pomyślnie zapisano %{filename}", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "Pomyślnie przekonwertowano %{filename}", + "Successfully saved %{filename} to %{filepath}": "Pomyślnie zapisano %{filename} w %{filepath}", "Successfully loaded %{filename}.overlay": "Pomyślnie załadowano %{filename}.overlay", "This is an experimental feature. Use at your own risk.": "Ta funkcja jest eksperymentalna. Użycie na własne ryzyko.", "Export Overlay File": "Eksportuj plik nakładki", "Import Overlay File": "Importuj plik nakładki", "Import Widget File in Current Scene": "Importuj plik widżetu do bieżącej sceny", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "Aktywna kolekcja scen nie jest kolekcją scen Dual Output.", + "Convert to Vanilla Scene": "Konwertuj na scenę Vanilla", + "Convert": "Konwertuj", + "Convert and Export Overlay": "Konwertuj i eksportuj nakładkę", + "Assign": "Przypisz", + "Assign and Export Overlay": "Przypisz i eksportuj nakładkę", + "Assign Vertical Sources to Horizontal Display": "Przypisz źródła pionowe do wyświetlacza poziomego", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Poniższa funkcja utworzy kopię aktywnej kolekcji scen, ustawi kopię jako aktywną kolekcję, a następnie zastosuje funkcję.", + "Manage Dual Output Scene": "Zarządzaj sceną Dual Output", + "Unable to convert dual output collection.": "Nie można przekonwertować kolekcji Dual Output." } diff --git a/app/i18n/pl-PL/promotional-copy.json b/app/i18n/pl-PL/promotional-copy.json index af553662ccc2..e40637520f5f 100644 --- a/app/i18n/pl-PL/promotional-copy.json +++ b/app/i18n/pl-PL/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 godzina wideo + 250 GB przechowywania + więcej", "Highest Profit Margins": "Najwyższe marże zysku", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/miesięcznie lub %{yearlyPrice}/rocznie", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Tekstowa edycja treści VOD" } diff --git a/app/i18n/pl-PL/scenes.json b/app/i18n/pl-PL/scenes.json index b7f7e5c30b33..656836bea891 100644 --- a/app/i18n/pl-PL/scenes.json +++ b/app/i18n/pl-PL/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Wpisz nazwę kolekcji scen", "Copy of %{collectionName}": "Kopia %{collectionName}", "Your Scene Collections": "Twoja kolekcja scen", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Tryb Dual Output", + "Horizontal Output": "Tryb poziomy", + "Vertical Output": "Tryb pionowy", + "Arrange sources here for a vertical scene layout.": "W tym miejscu ułóż źródła dla pionowego układu sceny.", + "Arrange sources here for a horizontal scene layout.": "W tym miejscu ułóż źródła dla poziomego układu sceny.", + "Toggle Dual Output Mode.": "Przełącz tryb Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Nie można ukryć przełączników Dual Output w trybie Dual Output." } diff --git a/app/i18n/pl-PL/settings.json b/app/i18n/pl-PL/settings.json index f9fa6e996957..856e1ce2f3af 100644 --- a/app/i18n/pl-PL/settings.json +++ b/app/i18n/pl-PL/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Ta liczba jest zbyt duża, żeby być FPS w liczniku dla wartości %{fpsNum}, zmniejsz tę wartość lub zwiększ licznik", "FPS Value must be between 1 and 1000": "Wartość FPS musi zawierać się między 1 a 1000", "%{fieldName} must be greater than 0": "Wartość w polu %{fieldName} musi być większa od 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Znaczniki", + "Manage Dual Output": "Zarządzaj Dual Output", + "Auto optimizer disabled for dual output scenes": "Automatyczny optymalizator wyłączony dla scen Dual Output" } diff --git a/app/i18n/pl-PL/sources.json b/app/i18n/pl-PL/sources.json index 37531acf2d1c..d2534dbcee54 100644 --- a/app/i18n/pl-PL/sources.json +++ b/app/i18n/pl-PL/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Ustaw filtr skalowania w trybie „Dwuliniowy”", "Set scale filter 'Lanczos'": "Ustaw filtr skalowania w trybie „Lanczos”", "Set scale filter 'Area'": "Ustaw filtr skalowania w trybie „Powierzchnia”", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Obecnie masz wybrane to samo źródło na obu kanwach. Wybierz źródło w kanwie, aby edytować je niezależnie.", + "Selective Recording can only be used with horizontal sources.": "Nagrywanie selektywne może być używane tylko ze źródłami poziomymi.", + "Cannot move source outside canvas in Dual Output Mode.": "Nie można przenieść źródła poza kanwę w trybie Dual Output." } diff --git a/app/i18n/pl-PL/streaming.json b/app/i18n/pl-PL/streaming.json index d97bc699c820..1320bc3f424d 100644 --- a/app/i18n/pl-PL/streaming.json +++ b/app/i18n/pl-PL/streaming.json @@ -123,7 +123,7 @@ "Go back": "Powrót", "Show Advanced Settings": "Pokaż ustawienia zaawansowane", "Configure the Multistream service": "Konfiguracja usługi Multistream", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Skonfiguruj usługę Dual Output", "Apply optimized settings": "Zastosuj ustawienia zoptymalizowane", "Start video transmission": "Start transmisji wideo", "Publish Youtube broadcast": "Opublikuj transmisję YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Nie udało się zaktualizować ustawień platformy", "The Multistream server is temporarily unavailable": "Serwer Multistream jest chwilowo niedostępny", "Failed to configure the Multistream server": "Nieudana konfiguracja serwera Multistream", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Nie udało się skonfigurować usługi Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "Serwer Multistream jest chwilowo niedostępny dla Dual Output", "Your YouTube account is not enabled for live streaming": "Twoje konto YouTube nie ma włączonej opcji transmisji na żywo", "Failed to publish the YouTube broadcast": "Nie udało się opublikować transmisji YouTube", "Failed to post the Tweet": "Nie udało się zamieścić Tweeta", @@ -180,30 +180,30 @@ "New features coming soon!": "Wkrótce będą dostępne nowe funkcje!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Streamuj na wielu platformach jednocześnie dzięki Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Streamuj jednocześnie na platformy poziome i pionowe. Nagrania będą prowadzone wyłącznie w trybie poziomym.", + "Dual Output Settings": "Ustawienia Dual Output", + "Enable Dual Output": "Włącz Dual Output", + "Set your default output mode for each platform.": "Ustaw domyślny tryb wyjścia dla każdej platformy.", + "Set Dual Output Settings": "Wprowadź ustawienia Dual Output", + "Mode:": "Tryb:", + "Horizontal": "Poziomy", + "You can select which one to stream with in the Go Live window.": "Możesz wybrać, który z nich ma być streamowany w oknie Go Live.", + "Video Output Orientation": "Orientacja wyjścia wideo", + "Show horizontal display.": "Pokaż ekran poziomy.", + "Show vertical display.": "Pokaż ekran pionowy.", + "Hide horizontal display.": "Ukryj ekran poziomy.", + "Hide vertical display.": "Ukryj ekran pionowy.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Ulepsz swój stream dzięki motywom premium w programie Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Nie można zmieniać tych ustawień podczas transmisji na żywo.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output jest włączony – musisz streamować na jedną platformę poziomą i jedną pionową.", + "Other": "Pozostałe", + "Add Destination with Ultra": "Dodaj miejsce docelowe za pomocą Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Zaloguj się, aby włączyć Dual Output. Czy chcesz się teraz zalogować?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Aby korzystać z funkcji Dual Output, musisz streamować na co najmniej jedną platformę poziomą i jedną pionową.", + "Cannot toggle Dual Output while live.": "Nie można przełączyć Dual Output nadając na żywo.", + "Cannot toggle Dual Output while in Studio Mode.": "Nie można przełączyć Dual Output w trybie studia.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Nie można wyświetlić Dual Output – nagrywanie selektywne działa tylko ze źródłami poziomymi i wyłącza edycję pionowej sceny wyjściowej. Wyłącz selektywne nagrywanie ze źródeł, aby skonfigurować Dual Output.", + "Selective Recording can only be used with horizontal sources.": "Nagrywanie selektywne może być używane tylko ze źródłami poziomymi.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Skonfiguruj ustawienia Go Live dla trybu Dual Output w oknie Go Live.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Nie można przełączyć trybu studia w trybie Dual Output." } diff --git a/app/i18n/pt-BR/guest-cam.json b/app/i18n/pt-BR/guest-cam.json index 3fa67d784555..bd0ee168e6c2 100644 --- a/app/i18n/pt-BR/guest-cam.json +++ b/app/i18n/pt-BR/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "A Collab Cam requer uma fonte", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "A Collab Cam Cam requer ao menos uma fonte da Collab Cam para ser usada. Gostaria de adicionar uma agora?", "You now have access to Collab Cam!": "Agora você tem acesso à Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Você deve estar logado para usar a Collab Cam" } diff --git a/app/i18n/pt-BR/highlighter.json b/app/i18n/pt-BR/highlighter.json index 95f034f0cd5d..5a42f0b079b1 100644 --- a/app/i18n/pt-BR/highlighter.json +++ b/app/i18n/pt-BR/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Um erro ocorreu durante a leitura do áudio de %{file}", "An error occurred while mixing audio": "Um erro ocorreu enquanto o áudio era mixado", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Edite suas reprises com Highlighter, um editor gratuito incluído no Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "Carregar em", + "Upload": "Carregar", + "This feature requires a Streamlabs ID": "Este recurso requer uma Streamlabs ID", + "Sign up for Streamlabs ID": "Inscreva-se na Streamlabs ID", + "Add subtitles, transcribe, and more": "Adicionar legendas, transcrição e muito mais", + "Convert to mobile-friendly short video": "Converter vídeos curtos compatíveis com dispositivos móveis", + "YouTube (private video)": "YouTube (vídeo privado)", + "Clip": "Clipe", + "Transcribe": "Transcrever", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Grave sua tela com o Streamlabs Desktop. Assim que a gravação for concluída, ela será exibida aqui. Acesse seus arquivos ou edite mais com as ferramentas Streamlabs.", + "Recordings": "Gravações" } \ No newline at end of file diff --git a/app/i18n/pt-BR/hotkeys.json b/app/i18n/pt-BR/hotkeys.json index 924c100029e7..6ef90518841e 100644 --- a/app/i18n/pt-BR/hotkeys.json +++ b/app/i18n/pt-BR/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Próximo slide", "Previous Slide": "Slide anterior", "Toggle Performance Mode": "Alternar o modo de desempenho", - "Skip Alert": "Pular alerta" + "Skip Alert": "Pular alerta", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/pt-BR/notifications.json b/app/i18n/pt-BR/notifications.json index 802ae83f9f58..89b0b0fb1bf9 100644 --- a/app/i18n/pt-BR/notifications.json +++ b/app/i18n/pt-BR/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Exibir na pasta", "Recordings": "Gravações", "Marker %{label} added at %{timestamp}": "Marcador %{label} adicionado às %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "O arquivo é muito grande para ser carregado", + "File type %{extension} is not supported": "Tipo de arquivo %{extension} não é compatível", + "Upload already in progress": "Upload em andamento" } diff --git a/app/i18n/pt-BR/onboarding.json b/app/i18n/pt-BR/onboarding.json index b417ce4c779c..a886f5a282c4 100644 --- a/app/i18n/pt-BR/onboarding.json +++ b/app/i18n/pt-BR/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Chatbot básico", "Basic Features": "Recursos básicos", "Access to All Overlays and Themes (%{themeNumber})": "Acesso a todas as sobreposições e temas (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Adicione até 11 convidados ou câmeras", "Access Full App Library (%{appNumber})": "Acesse toda a biblioteca de aplicativos (%{appNumber})", "Custom Tip Page and Domain": "Página de doações e domínio personalizados", "Custom Named Chatbot": "Chatbot com nome personalizado", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "O Streamlabs Desktop exige que você tenha uma conta de plataforma conectada para poder usar todos os recursos. Ao ignorar essa etapa, você será desconectado e alguns recursos podem ficar indisponíveis.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Sua conta do Streamlabs tem várias plataformas de conteúdo conectadas. Selecione a plataforma principal na qual você fará streaming usando o Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "O Streamlabs Desktop exige que você se conecte a uma plataforma de conteúdo com sua conta Streamlabs", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Erro", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Ocorreu um erro durante a tentativa de otimização. Somente as configurações padrão são aplicadas" } diff --git a/app/i18n/pt-BR/overlays.json b/app/i18n/pt-BR/overlays.json index a1bb24e61492..f8cce354e28f 100644 --- a/app/i18n/pt-BR/overlays.json +++ b/app/i18n/pt-BR/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} salvo com sucesso", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "Convertido com sucesso %{filename}", + "Successfully saved %{filename} to %{filepath}": "%{filename} salvo com sucesso para %{filepath}", "Successfully loaded %{filename}.overlay": "%{filename} carregado com sucesso", "This is an experimental feature. Use at your own risk.": "Este é um recurso experimental. Use por sua conta e risco.", "Export Overlay File": "Exportar Arquivo de Overlay", "Import Overlay File": "Importar Arquivo de Overlay", "Import Widget File in Current Scene": "Importar Arquivo de Widget na cena atual", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "A coleção de cenas ativa não é uma coleção de cenas de Dual Output.", + "Convert to Vanilla Scene": "Converter em Vanilla Scene", + "Convert": "Converter", + "Convert and Export Overlay": "Converter e exportar sobreposição", + "Assign": "Atribuir", + "Assign and Export Overlay": "Atribuir e exportar sobreposição", + "Assign Vertical Sources to Horizontal Display": "Atribuir fontes verticais para exibição horizontal", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "O abaixo criará uma cópia da coleção de cenas ativa, definirá a cópia como a coleção ativa e, em seguida, aplicará a função.", + "Manage Dual Output Scene": "Gerenciar cena de Dual Output", + "Unable to convert dual output collection.": "Não é possível converter a coleção de Dual Output." } diff --git a/app/i18n/pt-BR/promotional-copy.json b/app/i18n/pt-BR/promotional-copy.json index 8765b48694d1..4c4d022ab048 100644 --- a/app/i18n/pt-BR/promotional-copy.json +++ b/app/i18n/pt-BR/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 hora de vídeos + 250 GB de armazenamento e mais", "Highest Profit Margins": "Margens de lucro maiores", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/mês ou %{yearlyPrice}/ano", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Edição de conteúdo VOD com base em texto" } diff --git a/app/i18n/pt-BR/scenes.json b/app/i18n/pt-BR/scenes.json index 46428d601e79..f6e0db90374d 100644 --- a/app/i18n/pt-BR/scenes.json +++ b/app/i18n/pt-BR/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Digite o nome de uma coleção de cenas", "Copy of %{collectionName}": "Cópia de %{collectionName}", "Your Scene Collections": "Suas Coleções de cena", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Modo de Dual Output", + "Horizontal Output": "Saída horizontal", + "Vertical Output": "Saída vertical", + "Arrange sources here for a vertical scene layout.": "Organize as fontes aqui para um layout de cena vertical.", + "Arrange sources here for a horizontal scene layout.": "Organize as fontes aqui para um layout de cena horizontal.", + "Toggle Dual Output Mode.": "Alterne o modo Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Não é possível ocultar a alternância de Dual Output no modo Dual Output." } diff --git a/app/i18n/pt-BR/settings.json b/app/i18n/pt-BR/settings.json index 6f9b5890c012..4f33a96ff365 100644 --- a/app/i18n/pt-BR/settings.json +++ b/app/i18n/pt-BR/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Este número é grande demais para um Numerador de FPS de %{fpsNum}; reduza ou aumente o Numerador", "FPS Value must be between 1 and 1000": "O valor de FPS deve estar entre 1 e 1.000", "%{fieldName} must be greater than 0": "%{fieldName} deve ser maior que 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Marcadores", + "Manage Dual Output": "Gerenciar Dual Output", + "Auto optimizer disabled for dual output scenes": "Otimizador automático desativado para cenas de Dual Output" } diff --git a/app/i18n/pt-BR/sources.json b/app/i18n/pt-BR/sources.json index 48a7a0a36881..26020abac03c 100644 --- a/app/i18n/pt-BR/sources.json +++ b/app/i18n/pt-BR/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Definir filtro de escala “Bilinear”", "Set scale filter 'Lanczos'": "Definir filtro de escala “Lanczos”", "Set scale filter 'Area'": "Definir filtro de escala “Área”", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Atualmente, você tem a mesma fonte em ambas as telas selecionadas. Selecione a fonte na tela para editá-la de forma independente.", + "Selective Recording can only be used with horizontal sources.": "A gravação seletiva só pode ser usada com fontes horizontais.", + "Cannot move source outside canvas in Dual Output Mode.": "Não é possível mover a fonte para fora da tela no modo Dual Output." } diff --git a/app/i18n/pt-BR/streaming.json b/app/i18n/pt-BR/streaming.json index 95da0339df6d..88dbd4b388c8 100644 --- a/app/i18n/pt-BR/streaming.json +++ b/app/i18n/pt-BR/streaming.json @@ -123,7 +123,7 @@ "Go back": "Voltar", "Show Advanced Settings": "Exibir Configurações avançadas", "Configure the Multistream service": "Configurar o serviço de Transmissão múltipla", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Configure o serviço Dual Output", "Apply optimized settings": "Aplicar configurações otimizadas", "Start video transmission": "Iniciar a transmissão de vídeo", "Publish Youtube broadcast": "Publicar a transmissão no YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Falha na atualização das configurações da plataforma", "The Multistream server is temporarily unavailable": "O servidor de Transmissão múltipla está temporariamente indisponível", "Failed to configure the Multistream server": "Falha ao configurar o servidor de Transmissão múltipla", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Falha ao configurar o serviço Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "O servidor de Transmissão múltipla está temporariamente indisponível no Dual Output", "Your YouTube account is not enabled for live streaming": "Sua conta do YouTube não está habilitada para transmissão ao vivo", "Failed to publish the YouTube broadcast": "Falha ao publicar a transmissão no YouTube", "Failed to post the Tweet": "Falha ao postar o Tweet", @@ -180,30 +180,30 @@ "New features coming soon!": "Novos recursos em breve!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Transmita para várias plataformas ao mesmo tempo com Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Transmissão para plataformas horizontais e verticais simultaneamente. As gravações serão apenas na horizontal.", + "Dual Output Settings": "Configurações de Dual Output", + "Enable Dual Output": "Ativar Dual Output", + "Set your default output mode for each platform.": "Defina o modo de saída padrão para cada plataforma.", + "Set Dual Output Settings": "Definir configurações de Dual Output", + "Mode:": "Modo:", "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "You can select which one to stream with in the Go Live window.": "Você pode selecionar com qual deles transmitir na janela Transmitir ao vivo.", + "Video Output Orientation": "Orientação de saída de vídeo", + "Show horizontal display.": "Mostrar exibição horizontal.", + "Show vertical display.": "Mostrar exibição vertical.", + "Hide horizontal display.": "Ocultar exibição horizontal.", + "Hide vertical display.": "Ocultar exibição vertical.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Melhore suas transmissões usando temas premium com o Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Você não pode alterar essas configurações enquanto estiver ao vivo.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "O Dual Output está ativado - você deve transmitir para uma plataforma horizontal e uma vertical.", + "Other": "Outros", + "Add Destination with Ultra": "Adicionar destino com Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Faça login para ativar o Dual Output. Você gostaria de fazer login agora?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Para usar o Dual Output, você deve transmitir para pelo menos uma plataforma horizontal e uma vertical.", + "Cannot toggle Dual Output while live.": "Não é possível alternar o Dual Output enquanto estiver ao vivo.", + "Cannot toggle Dual Output while in Studio Mode.": "Não é possível alternar o Dual Output enquanto estiver no modo Studio.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "O Dual Output não pode ser exibido - A gravação seletiva funciona apenas com fontes horizontais e desativa a edição da cena de saída vertical. Desative a gravação seletiva de Fontes para configurar o Dual Output.", + "Selective Recording can only be used with horizontal sources.": "A gravação seletiva só pode ser usada com fontes horizontais.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Defina as configurações de Transmitir ao vivo para o modo Dual Output na janela Transmitir ao vivo.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Não é possível alternar o modo Studio no modo Dual Output." } diff --git a/app/i18n/pt-BR/widgets.json b/app/i18n/pt-BR/widgets.json index c50242f63698..8151c7a18beb 100644 --- a/app/i18n/pt-BR/widgets.json +++ b/app/i18n/pt-BR/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Sparks enviados são exatamente ", "Ember amount is at least ": "Ember enviados são pelo menos ", "Ember amount is exactly ": "Ember enviados são exatamente ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Permita que seus espectadores doem para compartilhar mídia em seu stream.", "Twitch Subscribers": "Inscritos no Twitch", "YouTube Members": "Membros do YouTube", "Media Share": "Compartilhamento de mídia", diff --git a/app/i18n/pt-PT/guest-cam.json b/app/i18n/pt-PT/guest-cam.json index c4e70c956a3c..d92f77b83fff 100644 --- a/app/i18n/pt-PT/guest-cam.json +++ b/app/i18n/pt-PT/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "A Collab Cam requer uma fonte", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "É requerida pelo menos uma fonte Collab Cam para usar a Collab Cam. Pretende adicionar uma agora?", "You now have access to Collab Cam!": "Já tem acesso à Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Tem de ter sessão iniciada para usar o Collab Cam." } diff --git a/app/i18n/pt-PT/highlighter.json b/app/i18n/pt-PT/highlighter.json index 5ac75ce2f890..f68291513fb1 100644 --- a/app/i18n/pt-PT/highlighter.json +++ b/app/i18n/pt-PT/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Ocorreu um erro de leitura do áudio em %{file}", "An error occurred while mixing audio": "Ocorreu um erro de mistura do áudio", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Edite as suas repetições com o Realce, um editor gratuito integrado no Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "Carregar para", + "Upload": "Carregar", + "This feature requires a Streamlabs ID": "Esta funcionalidade requer uma Streamlabs ID", + "Sign up for Streamlabs ID": "Inscreva-se na Streamlabs ID", + "Add subtitles, transcribe, and more": "Adicione legendas, transcreva e muito mais", + "Convert to mobile-friendly short video": "Converta para um vídeo curto compatível com dispositivos móveis", + "YouTube (private video)": "YouTube (vídeo privado)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "Transcrever", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Grave o seu ecrã com o Streamlabs Desktop. Quando a gravação estiver concluída, será apresentada aqui. Aceda aos seus ficheiros ou edite-os com as ferramentas do Streamlabs.", + "Recordings": "Gravações" } \ No newline at end of file diff --git a/app/i18n/pt-PT/hotkeys.json b/app/i18n/pt-PT/hotkeys.json index 287d1813727d..70ed21d67646 100644 --- a/app/i18n/pt-PT/hotkeys.json +++ b/app/i18n/pt-PT/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Diapositivo seguinte", "Previous Slide": "Diapositivo anterior", "Toggle Performance Mode": "Ativar/Desativar modo de desempenho", - "Skip Alert": "Pular alerta" + "Skip Alert": "Pular alerta", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/pt-PT/notifications.json b/app/i18n/pt-PT/notifications.json index 5027a454a22c..44eccd847a76 100644 --- a/app/i18n/pt-PT/notifications.json +++ b/app/i18n/pt-PT/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Mostrar numa pasta", "Recordings": "Gravações", "Marker %{label} added at %{timestamp}": "Marcador %{label} adicionado em %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "O ficheiro é demasiado grande para carregar", + "File type %{extension} is not supported": "O tipo de ficheiro %{extension} não é suportado", + "Upload already in progress": "O carregamento já está em curso" } diff --git a/app/i18n/pt-PT/onboarding.json b/app/i18n/pt-PT/onboarding.json index b9a568adf118..76281224c43b 100644 --- a/app/i18n/pt-PT/onboarding.json +++ b/app/i18n/pt-PT/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Chatbot básico", "Basic Features": "Funcionalidades básicas", "Access to All Overlays and Themes (%{themeNumber})": "Acesso a todas as sobreposições e temas (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Adicione até 11 convidados ou câmaras", "Access Full App Library (%{appNumber})": "Acesso à Biblioteca completa de aplicações (%{appNumber})", "Custom Tip Page and Domain": "Página de gorjetas e domínio personalizados", "Custom Named Chatbot": "Chatbot com nome personalizado", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "O Streamlabs Desktop necessita que tenhas uma conta da plataforma associada para poder usares todas as suas funcionalidades. Ao ignorar este passo, a tua sessão terminará e algumas funcionalidades podem estar indisponíveis.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "A tua conta Streamlabs tem várias plataformas de conteúdos associadas. Selecciona a plataforma primária com que transmitirás para usar o Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "O Streamlabs Desktop necessita que associes uma plataforma de conteúdos à tua conta Streamlabs.", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Erro", + "Ok": "OK", + "An error has occurred during optimization attempt. Only default settings are applied": "Ocorreu um erro durante a tentativa de otimização. Apenas são aplicadas as predefinições" } diff --git a/app/i18n/pt-PT/overlays.json b/app/i18n/pt-PT/overlays.json index 07d3e7a46edf..af7e7adb9946 100644 --- a/app/i18n/pt-PT/overlays.json +++ b/app/i18n/pt-PT/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} guardado com êxito", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} convertido com sucesso", + "Successfully saved %{filename} to %{filepath}": "%{filename} guardado com êxito em %{filepath}", "Successfully loaded %{filename}.overlay": "%{filename}.overlay carregado com êxito", "This is an experimental feature. Use at your own risk.": "Esta é uma funcionalidade experimental. Use por sua conta e risco.", "Export Overlay File": "Exportar ficheiro de sobreposição", "Import Overlay File": "Importar ficheiro de sobreposição", "Import Widget File in Current Scene": "Importar ficheiro de widget na cena atual", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "A coleção de cenas ativa não é uma coleção de cenas de Dual Output.", + "Convert to Vanilla Scene": "Converter para Vanilla Scene", + "Convert": "Converter", + "Convert and Export Overlay": "Converter e exportar sobreposição", + "Assign": "Atribuir", + "Assign and Export Overlay": "Atribuir e exportar sobreposição", + "Assign Vertical Sources to Horizontal Display": "Atribuir fontes verticais ao ecrã horizontal", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "O procedimento abaixo cria uma cópia da coleção de cenas ativas, define a cópia como a coleção ativa e, em seguida, aplica a função.", + "Manage Dual Output Scene": "Gerir a cena de Dual Output", + "Unable to convert dual output collection.": "Não é possível converter a coleção de Dual Output." } diff --git a/app/i18n/pt-PT/promotional-copy.json b/app/i18n/pt-PT/promotional-copy.json index 7a16ff8e8f55..e0c5accc53bf 100644 --- a/app/i18n/pt-PT/promotional-copy.json +++ b/app/i18n/pt-PT/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "Vídeos de 1 hora mais 250 GB de armazenamento e muito mais", "Highest Profit Margins": "As margens de lucro mais altas", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/mês ou %{yearlyPrice}/ano", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Edição de texto em conteúdo VOD" } diff --git a/app/i18n/pt-PT/scenes.json b/app/i18n/pt-PT/scenes.json index 8b4de127aebc..99648de5736c 100644 --- a/app/i18n/pt-PT/scenes.json +++ b/app/i18n/pt-PT/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Introduza o nome de uma coleção de cenas", "Copy of %{collectionName}": "Cópia de %{collectionName}", "Your Scene Collections": "As suas coleções de cenas", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Modo Dual Output", + "Horizontal Output": "Saída horizontal", + "Vertical Output": "Saída vertical", + "Arrange sources here for a vertical scene layout.": "Organize as fontes aqui para um esquema de cena vertical.", + "Arrange sources here for a horizontal scene layout.": "Organize as fontes aqui para um esquema de cena horizontal.", + "Toggle Dual Output Mode.": "Alterna o modo Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Não é possível ocultar os comutadores de Dual Output no modo Dual Output." } diff --git a/app/i18n/pt-PT/settings.json b/app/i18n/pt-PT/settings.json index 1f0ef8dfbd8a..076b30dd9bc3 100644 --- a/app/i18n/pt-PT/settings.json +++ b/app/i18n/pt-PT/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "O número é demasiado grande para um Numerador de FPS de %{fpsNum}, diminua-o ou aumente o Numerador", "FPS Value must be between 1 and 1000": "O valor de FPS tem de estar entre 1 e 1000", "%{fieldName} must be greater than 0": "%{fieldName} tem de ser superior a 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Marcadores", + "Manage Dual Output": "Gerir Dual Output", + "Auto optimizer disabled for dual output scenes": "Otimizador automático desativado para cenas de Dual Output" } diff --git a/app/i18n/pt-PT/sources.json b/app/i18n/pt-PT/sources.json index dc886cab98b2..c4d4814bfbda 100644 --- a/app/i18n/pt-PT/sources.json +++ b/app/i18n/pt-PT/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Definir filtro de proporção \"Bilinear\"", "Set scale filter 'Lanczos'": "Definir filtro de proporção \"Lanczos\"", "Set scale filter 'Area'": "Definir filtro de proporção \"Área\"", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Atualmente, tem a mesma fonte em ambas as telas selecionadas. Selecione a fonte na tela para a editar de forma independente.", + "Selective Recording can only be used with horizontal sources.": "A gravação seletiva apenas pode ser utilizada com fontes horizontais.", + "Cannot move source outside canvas in Dual Output Mode.": "Não pode mover a fonte para fora da tela no modo Dual Output." } diff --git a/app/i18n/pt-PT/streaming.json b/app/i18n/pt-PT/streaming.json index c06846eba3b2..1353804acfc4 100644 --- a/app/i18n/pt-PT/streaming.json +++ b/app/i18n/pt-PT/streaming.json @@ -123,7 +123,7 @@ "Go back": "Retroceder", "Show Advanced Settings": "Mostrar definições avançadas", "Configure the Multistream service": "Configurar o serviço de multitransmissão", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Configurar o serviço Dual Output", "Apply optimized settings": "Aplicar definições otimizadas", "Start video transmission": "Iniciar transmissão de vídeo", "Publish Youtube broadcast": "Publicar transmissão no YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Falha ao atualizar definições da plataforma", "The Multistream server is temporarily unavailable": "O servidor de Multitransmissão está temporariamente indisponível", "Failed to configure the Multistream server": "Falha ao configurar o servidor de multitransmissão", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Falha ao configurar o serviço Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "O servidor Multitransmissão está temporariamente indisponível para Dual Output", "Your YouTube account is not enabled for live streaming": "A sua conta do YouTube não está ativada para a transmissão ao vivo", "Failed to publish the YouTube broadcast": "Falha ao publicar a transmissão do YouTube", "Failed to post the Tweet": "Falha ao publicar o tweet", @@ -180,30 +180,30 @@ "New features coming soon!": "Novas funcionalidades em breve!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Transmita para várias plataformas ao mesmo tempo com o Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Transmite para plataformas horizontais e verticais em simultâneo. As gravações apenas serão na horizontal.", + "Dual Output Settings": "Definições de Dual Output", + "Enable Dual Output": "Ativar Dual Output", + "Set your default output mode for each platform.": "Defina o seu modo de saída predefinido para cada plataforma.", + "Set Dual Output Settings": "Configurar definições de Dual Output", + "Mode:": "Modo:", "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "You can select which one to stream with in the Go Live window.": "Pode selecionar com qual quer transmitir na janela Transmitir em direto.", + "Video Output Orientation": "Orientação da saída de vídeo", + "Show horizontal display.": "Mostra a visualização horizontal.", + "Show vertical display.": "Mostra a visualização vertical.", + "Hide horizontal display.": "Oculta a visualização horizontal.", + "Hide vertical display.": "Oculta a visualização vertical.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Actualiza a tua transmissão com os temas premium do Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Não pode alterar estas definições quando transmite em direto.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output está ativado - tem de transmitir para uma plataforma horizontal e outra vertical.", + "Other": "Outros", + "Add Destination with Ultra": "Adicionar destino com o Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Inicie sessão para ativar Dual Output. Quer iniciar sessão agora?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Para utilizar Dual Output, tem de transmitir para, pelo menos, uma plataforma horizontal e uma vertical.", + "Cannot toggle Dual Output while live.": "Não é possível alternar Dual Output em direto.", + "Cannot toggle Dual Output while in Studio Mode.": "Não é possível alternar Dual Output no modo Studio.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Não é possível apresentar Dual Output - A gravação seletiva apenas funciona com fontes horizontais e desativa a edição da cena de saída vertical. Desative a gravação seletiva das fontes para configurar Dual Output.", + "Selective Recording can only be used with horizontal sources.": "A gravação seletiva apenas pode ser utilizada com fontes horizontais.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Configure as definições Transmitir em direto para o modo Dual Output na janela Transmitir em direto.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Não é possível alternar o modo Studio no modo Dual Output." } diff --git a/app/i18n/pt-PT/widgets.json b/app/i18n/pt-PT/widgets.json index 66bed8bdd828..86bf415b90e6 100644 --- a/app/i18n/pt-PT/widgets.json +++ b/app/i18n/pt-PT/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Os Sparks enviados são exatamente ", "Ember amount is at least ": "O valor mínimo de Embers é ", "Ember amount is exactly ": "O valor de Embers é exatamente ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Permita que os seus espetadores façam doações para partilhar multimédia na sua transmissão.", "Twitch Subscribers": "Subscritores do Twitch", "YouTube Members": "Membros do YouTube", "Media Share": "Partilha de multimédia", diff --git a/app/i18n/ru-RU/guest-cam.json b/app/i18n/ru-RU/guest-cam.json index a3f28e41f52e..3fe4ccb84f29 100644 --- a/app/i18n/ru-RU/guest-cam.json +++ b/app/i18n/ru-RU/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Нужен источник для Collab Cam", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Чтобы воспользоваться Collab Cam, нужен хотя бы один источник. Добавить его сейчас?", "You now have access to Collab Cam!": "Теперь у вас есть доступ к Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Для использования Collab Cam необходимо войти в систему." } diff --git a/app/i18n/ru-RU/highlighter.json b/app/i18n/ru-RU/highlighter.json index 77ec4236bb4a..5ff94a3d66f8 100644 --- a/app/i18n/ru-RU/highlighter.json +++ b/app/i18n/ru-RU/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "Ошибка при чтении аудио из файла %{file}", "An error occurred while mixing audio": "Ошибка при сведении аудио", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Редактируйте повторы при помощи Highlighter — бесплатного встроенного редактора Streamlabs.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "Загрузить в", + "Upload": "Загрузить", + "This feature requires a Streamlabs ID": "Для работы этой функции необходим Streamlabs ID", + "Sign up for Streamlabs ID": "Регистрация для получения Streamlabs ID", + "Add subtitles, transcribe, and more": "Добавление субтитров, транскрипция и многое другое", + "Convert to mobile-friendly short video": "Конвертация в короткие видео, удобные для просмотра на мобильных устройствах", + "YouTube (private video)": "YouTube (личные видео)", + "Clip": "Клип", + "Transcribe": "Транскрипция", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Записываете экран с помощью Streamlabs Desktop. После завершения запись будет отображаться здесь. Просматривайте файлы или редактируйте их с помощью инструментов Streamlabs.", + "Recordings": "Записи" } \ No newline at end of file diff --git a/app/i18n/ru-RU/hotkeys.json b/app/i18n/ru-RU/hotkeys.json index fa386c4d42c0..206e9155538c 100644 --- a/app/i18n/ru-RU/hotkeys.json +++ b/app/i18n/ru-RU/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Следующий слайд", "Previous Slide": "Предыдущий слайд", "Toggle Performance Mode": "Включить режим повышенной производительности", - "Skip Alert": "Пропустить оповещение" + "Skip Alert": "Пропустить оповещение", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/ru-RU/notifications.json b/app/i18n/ru-RU/notifications.json index 4f3d8402d8ed..110813076323 100644 --- a/app/i18n/ru-RU/notifications.json +++ b/app/i18n/ru-RU/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Показать в папке", "Recordings": "Записи", "Marker %{label} added at %{timestamp}": "Маркер %{label} добавлен в %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Файл слишком велик для загрузки", + "File type %{extension} is not supported": "Тип файла %{extension} не поддерживается", + "Upload already in progress": "Загрузка уже началась" } diff --git a/app/i18n/ru-RU/onboarding.json b/app/i18n/ru-RU/onboarding.json index 138d720ce0d0..e0a07f422201 100644 --- a/app/i18n/ru-RU/onboarding.json +++ b/app/i18n/ru-RU/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Базовый чат-бот", "Basic Features": "Базовые функции", "Access to All Overlays and Themes (%{themeNumber})": "Доступ ко всем оверлеям и темам (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "Возможность добавить до 11 гостей или камер", "Access Full App Library (%{appNumber})": "Доступ ко всей библиотеке приложений (%{appNumber})", "Custom Tip Page and Domain": "Пользовательские домен и страница чаевых", "Custom Named Chatbot": "Выбор имени для чат-бота", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Для использования всех функций Streamlabs Desktop должна быть подключена учетная запись платформы. Если пропустить этот шаг, будет выполнен выход из системы и некоторые функции могут быть недоступны.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "К вашей учетной записи Streamlabs подключено несколько контент-платформ. Выберите основную платформу, с которой вы будете вести прямые трансляции с помощью Streamlabs Desktop.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Для полноценного использования Streamlabs Desktop необходимо подключить контент-платформу к учетной записи Streamlabs", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Ошибка", + "Ok": "ОК", + "An error has occurred during optimization attempt. Only default settings are applied": "Во время попытки оптимизация произошла ошибка. Применяются только стандартные настройки" } diff --git a/app/i18n/ru-RU/overlays.json b/app/i18n/ru-RU/overlays.json index fc51a5d48c99..227abfb7a7b7 100644 --- a/app/i18n/ru-RU/overlays.json +++ b/app/i18n/ru-RU/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "Успешно сохранен файл %{filename}", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "Успешно конвертировано: %{filename}", + "Successfully saved %{filename} to %{filepath}": "%{filename} успешно сохранен в %{filepath}", "Successfully loaded %{filename}.overlay": "Успешно загружен файл %{filename}.overlay", "This is an experimental feature. Use at your own risk.": "Это экспериментальная функция. Используйте на свой страх и риск.", "Export Overlay File": "Экспорт файла оверлея", "Import Overlay File": "Импорт файла оверлея", "Import Widget File in Current Scene": "Импортировать виджет в текущую сцену", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "Активная коллекция сцен не является коллекцией сцен Dual Output.", + "Convert to Vanilla Scene": "Конвертировать в Vanilla Scene", + "Convert": "Конвертировать", + "Convert and Export Overlay": "Конвертировать и экспортировать оверлей", + "Assign": "Назначить", + "Assign and Export Overlay": "Назначить и экспортировать оверлей", + "Assign Vertical Sources to Horizontal Display": "Назначить вертикальные источники горизонтальному отображению", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Описанные ниже действия создадут копию активной коллекции сцен, установят копию как активную коллекцию, а затем применят функцию.", + "Manage Dual Output Scene": "Управлять сценой Dual Output", + "Unable to convert dual output collection.": "Невозможно конвертировать коллекцию Dual Output." } diff --git a/app/i18n/ru-RU/promotional-copy.json b/app/i18n/ru-RU/promotional-copy.json index 27c147c36a1e..83b995e3a042 100644 --- a/app/i18n/ru-RU/promotional-copy.json +++ b/app/i18n/ru-RU/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 час видео + 250 ГБ для хранения + Дополнительно", "Highest Profit Margins": "Максимум прибыли", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/мес. или %{yearlyPrice}/год", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "Редактирование текста контента VOD" } diff --git a/app/i18n/ru-RU/scenes.json b/app/i18n/ru-RU/scenes.json index 6d198ced3cb5..0b59a1d45455 100644 --- a/app/i18n/ru-RU/scenes.json +++ b/app/i18n/ru-RU/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Ввести название для коллекции сцен", "Copy of %{collectionName}": "Копия %{collectionName}", "Your Scene Collections": "Ваши коллекции сцен", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Режим Dual Output", + "Horizontal Output": "Горизонтальный вывод", + "Vertical Output": "Вертикальный вывод", + "Arrange sources here for a vertical scene layout.": "Расположите источники здесь для вертикального макета сцены.", + "Arrange sources here for a horizontal scene layout.": "Расположите источники здесь для горизонтального макета сцены.", + "Toggle Dual Output Mode.": "Переключите режим Dual Output.", + "Cannot hide dual output toggles in dual output mode.": "Нельзя скрыть переключатели Dual Output в режиме Dual Output." } diff --git a/app/i18n/ru-RU/settings.json b/app/i18n/ru-RU/settings.json index 349dc6cd12aa..2fae3267e0f5 100644 --- a/app/i18n/ru-RU/settings.json +++ b/app/i18n/ru-RU/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Для числителя FPS, равного %{fpsNum}, это слишком большое значение. Уменьшите его или увеличьте числитель.", "FPS Value must be between 1 and 1000": "Значение FPS должно быть между 1 и 1000", "%{fieldName} must be greater than 0": "%{fieldName} должен быть больше нуля", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "Маркеры", + "Manage Dual Output": "Управление Dual Output", + "Auto optimizer disabled for dual output scenes": "Автоматическая оптимизация отключена для сцен Dual Output" } diff --git a/app/i18n/ru-RU/sources.json b/app/i18n/ru-RU/sources.json index 3aceb46762c7..549c75c0c9bb 100644 --- a/app/i18n/ru-RU/sources.json +++ b/app/i18n/ru-RU/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Фильтр масштаба «Билинейный»", "Set scale filter 'Lanczos'": "Фильтр масштаба «Ланцош»", "Set scale filter 'Area'": "Фильтр масштаба «Область»", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "В данный момент для обоих холстов выбран один и тот же источник. Выберите источник для холста, чтобы его можно было редактировать отдельно.", + "Selective Recording can only be used with horizontal sources.": "Выборочную запись можно использовать только с горизонтальными источниками.", + "Cannot move source outside canvas in Dual Output Mode.": "В режиме Dual Output невозможно сдвинуть источник вне холста." } diff --git a/app/i18n/ru-RU/streaming.json b/app/i18n/ru-RU/streaming.json index 59c33362ab81..c57c784196e7 100644 --- a/app/i18n/ru-RU/streaming.json +++ b/app/i18n/ru-RU/streaming.json @@ -123,7 +123,7 @@ "Go back": "Вернуться назад", "Show Advanced Settings": "Показать расширенные настройки", "Configure the Multistream service": "Настроить сервис многопоточных трансляций", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Настройка службы Dual Output", "Apply optimized settings": "Применить оптимизированные настройки", "Start video transmission": "Начать передачу видео", "Publish Youtube broadcast": "Опубликовать прямой эфир на YouTube", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Не удалось обновить настройки платформы", "The Multistream server is temporarily unavailable": "Сервер многопоточной трансляции временно недоступен", "Failed to configure the Multistream server": "Не удалось настроить сервис многопоточных трансляций", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Не удалось настроить службу Dual Output", + "The Multistream server is temporarily unavailable for Dual Output": "Сервер многопоточной трансляции временно недоступен для Dual Output", "Your YouTube account is not enabled for live streaming": "Аккаунт YouTube не настроен для прямых трансляций", "Failed to publish the YouTube broadcast": "Не удалось опубликовать прямой эфир YouTube", "Failed to post the Tweet": "Не удалось опубликовать твит", @@ -180,30 +180,30 @@ "New features coming soon!": "Новые функции уже скоро!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Ведите одновременную трансляцию на нескольких платформах с помощью Streamlabs Ultra.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Одновременно транслируйте на платформах с горизонтальной и вертикальной ориентацией. Записи будут только с горизонтальной ориентацией.", + "Dual Output Settings": "Настройки Dual Output", + "Enable Dual Output": "Включение Dual Output", + "Set your default output mode for each platform.": "Выберите режим вывода по умолчанию для каждой платформы.", + "Set Dual Output Settings": "Регулировка настроек Dual Output", + "Mode:": "Режим:", + "Horizontal": "Горизонтальный", + "You can select which one to stream with in the Go Live window.": "Можно выбрать, что транслировать, с помощью окна «Начать трансляцию».", + "Video Output Orientation": "Ориентация вывода видео", + "Show horizontal display.": "Показать горизонтальное отображение.", + "Show vertical display.": "Показать вертикальное отображение.", + "Hide horizontal display.": "Скрыть горизонтальное отображение.", + "Hide vertical display.": "Скрыть вертикальное отображение.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Улучшите свои трансляции с помощью премиальных тем из Streamlabs Ultra.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Эти настройки нельзя изменить во время трансляции.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output включена — следует транслировать на одну платформу с горизонтальной ориентацией и на одну с вертикальной ориентацией.", + "Other": "Другое", + "Add Destination with Ultra": "Добавление назначения с Ultra", + "Please log in to enable dual output. Would you like to log in now?": "Войдите в систему, чтобы включить Dual Output. Войти в систему сейчас?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Чтобы использовать Dual Output, следует транслировать хотя бы на одну платформу с горизонтальной ориентацией и на одну с вертикальной.", + "Cannot toggle Dual Output while live.": "Невозможно переключить Dual Output во время трансляции.", + "Cannot toggle Dual Output while in Studio Mode.": "Невозможно переключить Dual Output в режиме студии.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Невозможно отобразить Dual Output — выборочная запись работает только с горизонтальными источниками и исключает возможность редактирования сцен с вертикальным выводом. Отключите выборочную запись в разделе «Источник» настроек Dual Output.", + "Selective Recording can only be used with horizontal sources.": "Выборочную запись можно использовать только с горизонтальными источниками.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Задайте настройки начала трансляции для режима Dual Output в окне «Начать трансляцию».", + "Cannot toggle Studio Mode in Dual Output Mode.": "Невозможно переключиться на режим студии, находясь в режиме Dual Output." } diff --git a/app/i18n/ru-RU/widgets.json b/app/i18n/ru-RU/widgets.json index f87ba9166d68..d68182d0a633 100644 --- a/app/i18n/ru-RU/widgets.json +++ b/app/i18n/ru-RU/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Отправлено искр: ровно ", "Ember amount is at least ": "Количество угольков: не менее ", "Ember amount is exactly ": "Количество угольков: ровно ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Разрешить зрителям вносить пожертвования для демонстрации медиафайлов во время вашей трансляции.", "Twitch Subscribers": "Подписчики Twitch", "YouTube Members": "Спонсоры YouTube", "Media Share": "Обмен медиафайлами", diff --git a/app/i18n/sk-SK/hotkeys.json b/app/i18n/sk-SK/hotkeys.json index aa374567caa5..3476b0fa3269 100644 --- a/app/i18n/sk-SK/hotkeys.json +++ b/app/i18n/sk-SK/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Preskočiť upozornenie" + "Skip Alert": "Preskočiť upozornenie", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/sl-SI/hotkeys.json b/app/i18n/sl-SI/hotkeys.json index 9d4fda97dae2..c2e5b0a87930 100644 --- a/app/i18n/sl-SI/hotkeys.json +++ b/app/i18n/sl-SI/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Skip Alert" + "Skip Alert": "Skip Alert", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/sv-SE/hotkeys.json b/app/i18n/sv-SE/hotkeys.json index a21c397dcc44..fa668a1c1636 100644 --- a/app/i18n/sv-SE/hotkeys.json +++ b/app/i18n/sv-SE/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Skippa Notifikation" + "Skip Alert": "Skippa Notifikation", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/th-TH/hotkeys.json b/app/i18n/th-TH/hotkeys.json index 9d4fda97dae2..c2e5b0a87930 100644 --- a/app/i18n/th-TH/hotkeys.json +++ b/app/i18n/th-TH/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Skip Alert" + "Skip Alert": "Skip Alert", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/tr-TR/guest-cam.json b/app/i18n/tr-TR/guest-cam.json index 8e1d7ae49bdb..ef1ecc940d63 100644 --- a/app/i18n/tr-TR/guest-cam.json +++ b/app/i18n/tr-TR/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam bir kaynağa ihtiyaç duyar", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "Collab Cam’i kullanmak için en azından bir Collab Cam kaynağı gereklidir. Şimdi bir kaynak eklemek ister misiniz?", "You now have access to Collab Cam!": "Artık, Collab Cam’e erişebilirsiniz!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "Collab Cam’ı kullanmak için oturum açmanız gereklidir." } diff --git a/app/i18n/tr-TR/highlighter.json b/app/i18n/tr-TR/highlighter.json index 907061c7b1ac..4cd6d88ab70e 100644 --- a/app/i18n/tr-TR/highlighter.json +++ b/app/i18n/tr-TR/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "%{file} dosyasındaki ses okunurken bir hata oluştu", "An error occurred while mixing audio": "Ses mikslenirken bir hata oluştu", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "Streamlabs’e entegre edilmiş ücretsiz bir düzenleyici olan Highlighter ile tekrarlarınızı düzenleyin.", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "Şuraya Yükle:", + "Upload": "Yükle", + "This feature requires a Streamlabs ID": "Bu özellik için Streamlabs ID gereklidir", + "Sign up for Streamlabs ID": "Streamlabs ID’ye Kayıt Olun", + "Add subtitles, transcribe, and more": "Alt yazı ekleyin, metne dönüştürün ve daha fazlasını yapın", + "Convert to mobile-friendly short video": "Mobil uyumlu kısa videoya dönüştürün", + "YouTube (private video)": "YouTube (özel video)", + "Clip": "Klip", + "Transcribe": "Metne dönüştür", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Streamlabs Desktop ile ekranınızı kaydedin. Kayıt tamamlandıktan sonra burada görünecektir. Streamlabs araçları ile dosyalarınıza erişin veya düzenlemeye devam edin.", + "Recordings": "Kayıtlar" } \ No newline at end of file diff --git a/app/i18n/tr-TR/hotkeys.json b/app/i18n/tr-TR/hotkeys.json index 2589bb5e0c81..f82b4a4446f9 100644 --- a/app/i18n/tr-TR/hotkeys.json +++ b/app/i18n/tr-TR/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Sonraki Slayt", "Previous Slide": "Önceki Slayt", "Toggle Performance Mode": "Performans Moduna Geç", - "Skip Alert": "Uyarıyı Atla" + "Skip Alert": "Uyarıyı Atla", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/tr-TR/notifications.json b/app/i18n/tr-TR/notifications.json index 0dc1c596aaa6..8dc592d212d4 100644 --- a/app/i18n/tr-TR/notifications.json +++ b/app/i18n/tr-TR/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "Klasörde göster", "Recordings": "Kayıtlar", "Marker %{label} added at %{timestamp}": "%{label} İşareti %{timestamp} itibariyle eklendi", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "Dosya, yüklemek için çok büyük", + "File type %{extension} is not supported": "%{extension} dosya türü desteklenmemektedir", + "Upload already in progress": "Yükleme henüz tamamlanmadı" } diff --git a/app/i18n/tr-TR/onboarding.json b/app/i18n/tr-TR/onboarding.json index be3e4229dd7d..9cc6c287f7f8 100644 --- a/app/i18n/tr-TR/onboarding.json +++ b/app/i18n/tr-TR/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "Temel Sohbet Botu", "Basic Features": "Temel Özellikler", "Access to All Overlays and Themes (%{themeNumber})": "Ücretsiz Katmanlara ve Temalara Erişim (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "11’e Kadar Konuk veya Kamera Ekleyin", "Access Full App Library (%{appNumber})": "Tam Uygulama Kütüphanesine Erişin (%{appNumber})", "Custom Tip Page and Domain": "Özel Bahşiş Sayfası ve Etki Alanı", "Custom Named Chatbot": "Özel Adlı Sohbet Botu", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop’un tüm özelliklerini kullanmak için bir bağlı platform hesabına sahip olmanız gerekir. Bu adımı atladığınızda çıkış yapacaksınız; bazı özelliklere erişemeyebilirsiniz.", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "Streamlabs hesabınızda birden fazla bağlı içerik platformu bulunmaktadır. Streamlabs Desktop’u kullanarak yayın yapacağınız birinci platformu lütfen seçin.", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop, Streamlabs hesabınıza bir içerik platformu bağlamanızı gerektirir.", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "Hata", + "Ok": "Tamam", + "An error has occurred during optimization attempt. Only default settings are applied": "Optimize etmeye çalışırken hata oluştu. Yalnızca varsayılan ayarlar uygulandı" } diff --git a/app/i18n/tr-TR/overlays.json b/app/i18n/tr-TR/overlays.json index 6746d2f6e704..0bf86f18bbcf 100644 --- a/app/i18n/tr-TR/overlays.json +++ b/app/i18n/tr-TR/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "%{filename} başarıyla kaydedildi", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "%{filename} başarıyla dönüştürüldü", + "Successfully saved %{filename} to %{filepath}": "%{filename}, %{filepath} dizinine başarıyla kaydedildi", "Successfully loaded %{filename}.overlay": "%{filename}.overlay başarıyla yüklendi", "This is an experimental feature. Use at your own risk.": "Bu, deneysel bir özelliktir. Riski göz önünde bulundurarak kullanın.", "Export Overlay File": "Katman Dosyasını Dışa Aktar", "Import Overlay File": "Katman Dosyasını İçe Aktar", "Import Widget File in Current Scene": "Geçerli Sahneye Pencere Ögesi Dosyası Aktar", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "Aktif sahne koleksiyonu Dual Output sahne koleksiyonu değil.", + "Convert to Vanilla Scene": "Sade Sahne’ye Dönüştür", + "Convert": "Dönüştür", + "Convert and Export Overlay": "Katmanı Dönüştür ve Dışarı Aktar", + "Assign": "Ata", + "Assign and Export Overlay": "Katmanı Ata ve Dışa Aktar", + "Assign Vertical Sources to Horizontal Display": "Dikey Kaynakları Yatay Ekrana Ata", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "Aşağıda aktif sahne koleksiyonunun bir kopyası oluşturulup bu kopya aktif koleksiyon olarak ayarlandıktan sonra işlev uygulanır.", + "Manage Dual Output Scene": "Dual Output Sahnesini Yönet", + "Unable to convert dual output collection.": "Dual Output koleksiyonu dönüştürülemedi." } diff --git a/app/i18n/tr-TR/promotional-copy.json b/app/i18n/tr-TR/promotional-copy.json index a82d837447c1..30754c8fa592 100644 --- a/app/i18n/tr-TR/promotional-copy.json +++ b/app/i18n/tr-TR/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 Saatlik Videolar + 250GB Depolama + Dahası", "Highest Profit Margins": "En Yüksek Kâr Oranları", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "ayda %{monthlyPrice} veya yılda %{yearlyPrice}", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "VOD içeriği için metin tabanlı düzenleme" } diff --git a/app/i18n/tr-TR/scenes.json b/app/i18n/tr-TR/scenes.json index 06b159dec052..d0d2b34c41aa 100644 --- a/app/i18n/tr-TR/scenes.json +++ b/app/i18n/tr-TR/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "Sahne Koleksiyon Adı Girin", "Copy of %{collectionName}": "%{collectionName} Kopyası", "Your Scene Collections": "Sahne Koleksiyonlarınız", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output Modu", + "Horizontal Output": "Yatay Çıkış", + "Vertical Output": "Dikey Çıkış", + "Arrange sources here for a vertical scene layout.": "Dikey sahne düzeni için kaynakları buraya ekleyin.", + "Arrange sources here for a horizontal scene layout.": "Yatay sahne düzeni için kaynakları buraya ekleyin.", + "Toggle Dual Output Mode.": "Dual Output Modunu Değiştir.", + "Cannot hide dual output toggles in dual output mode.": "Dual Output modundayken Dual Output değişiklileri gizlenemez." } diff --git a/app/i18n/tr-TR/settings.json b/app/i18n/tr-TR/settings.json index 0629bffecef6..1e7397ad3900 100644 --- a/app/i18n/tr-TR/settings.json +++ b/app/i18n/tr-TR/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "Bu sayı, %{fpsNum} FPS Sayacı için çok büyük; lütfen azaltın veya Sayacı artırın", "FPS Value must be between 1 and 1000": "FPS Değeri 1 ila 1000 arasında olmalıdır", "%{fieldName} must be greater than 0": "%{fieldName}, 0’dan büyük olmalıdır", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "İşaretler", + "Manage Dual Output": "Dual Output’u Yönet", + "Auto optimizer disabled for dual output scenes": "Otomatik optimizasyon Dual Output sahneleri için devre dışı bırakıldı" } diff --git a/app/i18n/tr-TR/sources.json b/app/i18n/tr-TR/sources.json index fdb1c8c582c8..d7f50f92cca7 100644 --- a/app/i18n/tr-TR/sources.json +++ b/app/i18n/tr-TR/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "Ölçek filtresini “Bilineer” olarak ayarla", "Set scale filter 'Lanczos'": "Ölçek filtresini “Lanczos” olarak ayarla", "Set scale filter 'Area'": "Ölçek filtresini “Alan” olarak ayarla", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "Şu anda seçili olan her iki kanvasta da aynı kaynak mevcut. Bağımsız olarak düzenlemek için lütfen kanvastaki kaynağı seçin.", + "Selective Recording can only be used with horizontal sources.": "Seçici Kayıt yalnızca yatay kaynaklarla birlikte kullanılabilir.", + "Cannot move source outside canvas in Dual Output Mode.": "Dual Output Modunda kaynak, kanvasın dışına taşınamaz." } diff --git a/app/i18n/tr-TR/streaming.json b/app/i18n/tr-TR/streaming.json index 15c9f6860419..d809274e048c 100644 --- a/app/i18n/tr-TR/streaming.json +++ b/app/i18n/tr-TR/streaming.json @@ -123,7 +123,7 @@ "Go back": "Geri git", "Show Advanced Settings": "Gelişmiş Ayarları Göster", "Configure the Multistream service": "Çoklu Yayın hizmetini yapılandır", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "Dual Output hizmetini yapılandır", "Apply optimized settings": "Optimize edilmiş ayarları uygula", "Start video transmission": "Video aktarımını başlat", "Publish Youtube broadcast": "YouTube yayınını yayımla", @@ -145,8 +145,8 @@ "Failed to update platform settings": "Platform ayarları güncellenemedi", "The Multistream server is temporarily unavailable": "Çoklu yayın sunucusu geçici olarak kullanılamıyor", "Failed to configure the Multistream server": "Çoklu Yayın hizmeti yapılandırılamadı", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "Dual Output hizmeti yapılandırılamadı", + "The Multistream server is temporarily unavailable for Dual Output": "Çoklu yayın sunucusu Dual Output için geçici olarak kullanılamıyor", "Your YouTube account is not enabled for live streaming": "YouTube hesabınız canlı yayın yapmak için etkinleştirilmedi", "Failed to publish the YouTube broadcast": "YouTube yayının yayımlanamadı", "Failed to post the Tweet": "Tweet atılamadı", @@ -180,30 +180,30 @@ "New features coming soon!": "Yeni özellikler çok yakında!", "Stream to multiple platforms at once with Streamlabs Ultra.": "Streamlabs Ultra ile birden çok platforma aynı anda yayın yapın.", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Aynı anda yatay ve dikey platformlara yayın yapın. Kayıt yalnızca yatay moddayken yapılabilir.", + "Dual Output Settings": "Dual Output Ayarları", + "Enable Dual Output": "Dual Output’u Etkinleştir", + "Set your default output mode for each platform.": "Her platforma göre varsayılan çıkış modunuzu ayarlayın.", + "Set Dual Output Settings": "Dual Output Ayarlarını Belirle", + "Mode:": "Mod:", + "Horizontal": "Yatay", + "You can select which one to stream with in the Go Live window.": "Yayına Başla penceresindeyken hangisinde yayın yapacağınızı seçebilirsiniz.", + "Video Output Orientation": "Video Çıkış Yönü", + "Show horizontal display.": "Yatay ekranı göster.", + "Show vertical display.": "Dikey ekranı göster.", + "Hide horizontal display.": "Yatay ekranı gizle.", + "Hide vertical display.": "Dikey ekranı gizle.", "Upgrade your stream with premium themes with Streamlabs Ultra.": "Streamlabs Ultra ile premium temalar kullanarak yayınınızı yükseltin.", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "Canlı yayındayken bu ayarları değiştiremezsiniz.", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output etkinleştirildi. Hem yatay hem dikey platforma yayın yapmalısınız.", + "Other": "Diğer", + "Add Destination with Ultra": "Ultra ile Konum Ekle", + "Please log in to enable dual output. Would you like to log in now?": "Dual Output’u etkinleştirmek için lütfen oturum açın. Şimdi oturum açmak ister misiniz?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "Dual Output’u kullanmak için en az bir yatay ve bir dikey platforma yayın yapmalısınız.", + "Cannot toggle Dual Output while live.": "Canlı yayındayken Dual Output değiştirilemez.", + "Cannot toggle Dual Output while in Studio Mode.": "Stüdyo Modunda Dual Output değiştirilemez.", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output görüntülenemedi. Seçici Kayıt yalnızca yatay kaynaklarla birlikte kullanılır ve kayıt sırasında dikey çıkış sahnesini düzenleme özelliği devre dışı bırakılır. Dual Output ayarlarını yapmak için lütfen seçici kaydı Kaynaklardan devre dışı bırakın.", + "Selective Recording can only be used with horizontal sources.": "Seçici Kayıt yalnızca yatay kaynaklarla birlikte kullanılabilir.", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Yayına Başla penceresinde Dual Output Modu için Yayına Başla Ayarlarını tamamlayın.", + "Cannot toggle Studio Mode in Dual Output Mode.": "Dual Output Modundayken Stüdyo Modu değiştirilemez." } diff --git a/app/i18n/tr-TR/widgets.json b/app/i18n/tr-TR/widgets.json index 4d81980cc518..247b03c77158 100644 --- a/app/i18n/tr-TR/widgets.json +++ b/app/i18n/tr-TR/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "Gönderilen Spark miktarı tam olarak ", "Ember amount is at least ": "Ember miktarı en az ", "Ember amount is exactly ": "Ember miktarı tam olarak ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "Yayınınızda medya paylaşmak için izleyicilerinizin bağış yapmasına izin verin.", "Twitch Subscribers": "Twitch Aboneleri", "YouTube Members": "YouTube Üyeleri", "Media Share": "Medya Paylaşımı", diff --git a/app/i18n/vi-VN/hotkeys.json b/app/i18n/vi-VN/hotkeys.json index 32119f89d27a..acfed582b485 100644 --- a/app/i18n/vi-VN/hotkeys.json +++ b/app/i18n/vi-VN/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "Next Slide", "Previous Slide": "Previous Slide", "Toggle Performance Mode": "Toggle Performance Mode", - "Skip Alert": "Bỏ qua Alert" + "Skip Alert": "Bỏ qua Alert", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/zh-CN/guest-cam.json b/app/i18n/zh-CN/guest-cam.json index 21d75ba73334..6bc3a9a55eb0 100644 --- a/app/i18n/zh-CN/guest-cam.json +++ b/app/i18n/zh-CN/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam 需要源", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "至少需要一个 Collab Cam 源才能使用 Collab Cam。是否立即添加?", "You now have access to Collab Cam!": "您现在可以访问 Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "要使用 Collab Cam 必须先登录。" } diff --git a/app/i18n/zh-CN/highlighter.json b/app/i18n/zh-CN/highlighter.json index 7909b168f445..d9651d4b15e7 100644 --- a/app/i18n/zh-CN/highlighter.json +++ b/app/i18n/zh-CN/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "从 %{file}读取音频时发生错误", "An error occurred while mixing audio": "混合音频时发生错误", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "使用亮点选择器编辑您的回放视频,这是 Streamlabs 内置的免费编辑器。", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", + "Upload To": "上传至", + "Upload": "上传", + "This feature requires a Streamlabs ID": "此功能需要 Streamlabs ID", + "Sign up for Streamlabs ID": "注册 Streamlabs ID", + "Add subtitles, transcribe, and more": "添加字幕、转录等", + "Convert to mobile-friendly short video": "转换为适合移动设备使用的短视频", + "YouTube (private video)": "YouTube(私密视频)", "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Transcribe": "转录", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "使用 Streamlabs Desktop 录制屏幕。录制完成后将显示在此处。使用 Streamlabs 工具访问您的文件或进一步编辑。", + "Recordings": "录制" } \ No newline at end of file diff --git a/app/i18n/zh-CN/hotkeys.json b/app/i18n/zh-CN/hotkeys.json index c2190ebaaa17..18f6aeb9b936 100644 --- a/app/i18n/zh-CN/hotkeys.json +++ b/app/i18n/zh-CN/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "下一张幻灯片", "Previous Slide": "上一张幻灯片", "Toggle Performance Mode": "切换性能模式", - "Skip Alert": "跳过通知" + "Skip Alert": "跳过通知", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/zh-CN/notifications.json b/app/i18n/zh-CN/notifications.json index 664b40734543..ba92477360fc 100644 --- a/app/i18n/zh-CN/notifications.json +++ b/app/i18n/zh-CN/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "在文件夹中显示", "Recordings": "录制", "Marker %{label} added at %{timestamp}": "标记 %{label} 添加于 %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "文件过大,无法上传", + "File type %{extension} is not supported": "不支持文件类型 %{extension}", + "Upload already in progress": "正在上传" } diff --git a/app/i18n/zh-CN/onboarding.json b/app/i18n/zh-CN/onboarding.json index dece8ae01fac..6ead459f1268 100644 --- a/app/i18n/zh-CN/onboarding.json +++ b/app/i18n/zh-CN/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "基础聊天机器人", "Basic Features": "基础功能", "Access to All Overlays and Themes (%{themeNumber})": "访问所有叠加层和主题 (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "可添加多达 11 位访客或摄像头", "Access Full App Library (%{appNumber})": "访问完整的应用程序库 (%{appNumber})", "Custom Tip Page and Domain": "自定义打赏页面和域名", "Custom Named Chatbot": "自定义命名聊天机器人", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop 要求您拥有已连接的平台帐户才能使用其所有功能。跳过此步骤,您将被注销并且某些功能可能不可用。", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "您的 Streamlabs 帐户有多个已连接的内容平台。请选择您将使用 Streamlabs Desktop 直播的主要平台。", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop 需要您将内容平台连接到您的 Streamlabs 帐户", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "错误", + "Ok": "确定", + "An error has occurred during optimization attempt. Only default settings are applied": "尝试优化时出错。仅应用默认设置" } diff --git a/app/i18n/zh-CN/overlays.json b/app/i18n/zh-CN/overlays.json index 4aff988614ea..3b1952e1f65c 100644 --- a/app/i18n/zh-CN/overlays.json +++ b/app/i18n/zh-CN/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "成功保存 %{filename}", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "成功转换 %{filename}", + "Successfully saved %{filename} to %{filepath}": "成功保存 %{filename} 至 %{filepath}", "Successfully loaded %{filename}.overlay": "成功载入 %{filename}.叠加", "This is an experimental feature. Use at your own risk.": "这是一项实验功能。使用风险自负。", "Export Overlay File": "导出叠加文件", "Import Overlay File": "导入叠加文件", "Import Widget File in Current Scene": "在当前场景中导入小工具文件", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "活动场景集不是 Dual Output 场景集。", + "Convert to Vanilla Scene": "转换为原始场景", + "Convert": "转换", + "Convert and Export Overlay": "转换并导出叠加层", + "Assign": "分配", + "Assign and Export Overlay": "分配并导出叠加层", + "Assign Vertical Sources to Horizontal Display": "分配垂直源至水平显示", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "下面将创建活动场景集的副本,将副本设置为活动集,然后应用该功能。", + "Manage Dual Output Scene": "管理 Dual Output 场景", + "Unable to convert dual output collection.": "无法转换 Dual Output 集。" } diff --git a/app/i18n/zh-CN/promotional-copy.json b/app/i18n/zh-CN/promotional-copy.json index 7292f94d7e01..1df246a20eac 100644 --- a/app/i18n/zh-CN/promotional-copy.json +++ b/app/i18n/zh-CN/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 小时视频 + 250GB 存储空间 + 更多", "Highest Profit Margins": "更高利润率", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "%{monthlyPrice}/月或 %{yearlyPrice}/年", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "对 VOD 内容进行基于文本的编辑" } diff --git a/app/i18n/zh-CN/scenes.json b/app/i18n/zh-CN/scenes.json index c2a8eb658108..9dc7d643c4cc 100644 --- a/app/i18n/zh-CN/scenes.json +++ b/app/i18n/zh-CN/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "输入场景集名称", "Copy of %{collectionName}": "%{collectionName}副本", "Your Scene Collections": "您的场景集:", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output 模式", + "Horizontal Output": "水平输出", + "Vertical Output": "垂直输出", + "Arrange sources here for a vertical scene layout.": "在此处排列源,以实现垂直场景布局。", + "Arrange sources here for a horizontal scene layout.": "在此处排列源,以实现水平场景布局。", + "Toggle Dual Output Mode.": "切换 Dual Output 模式。", + "Cannot hide dual output toggles in dual output mode.": "无法在 Dual Output 模式下隐藏 Dual Output 切换。" } diff --git a/app/i18n/zh-CN/settings.json b/app/i18n/zh-CN/settings.json index e4ea3f7cf785..fceb4d09190c 100644 --- a/app/i18n/zh-CN/settings.json +++ b/app/i18n/zh-CN/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "这个数字对于 FPS 分子 %{fpsNum} 来说太大了,请减少值或增加分子", "FPS Value must be between 1 and 1000": "FPS 值必须介于 1 到 1000 之间", "%{fieldName} must be greater than 0": "%{fieldName} 必须大于 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "标记", + "Manage Dual Output": "管理 Dual Output", + "Auto optimizer disabled for dual output scenes": "Dual Output 场景禁用自动优化" } diff --git a/app/i18n/zh-CN/sources.json b/app/i18n/zh-CN/sources.json index f607dc9c2f98..2aedaef0566b 100644 --- a/app/i18n/zh-CN/sources.json +++ b/app/i18n/zh-CN/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "设置缩放滤镜“Bilinear”", "Set scale filter 'Lanczos'": "设置缩放滤镜“Lanczos”", "Set scale filter 'Area'": "设置缩放滤镜“区域”", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "您目前在两个画布上选择了相同的源。请在画布中选择源以单独编辑。", + "Selective Recording can only be used with horizontal sources.": "选择性录制仅可用于水平源。", + "Cannot move source outside canvas in Dual Output Mode.": "在 Dual Output 模式下无法将源移动到画布外。" } diff --git a/app/i18n/zh-CN/streaming.json b/app/i18n/zh-CN/streaming.json index 2e74b9908dc6..62477dcc47d0 100644 --- a/app/i18n/zh-CN/streaming.json +++ b/app/i18n/zh-CN/streaming.json @@ -123,7 +123,7 @@ "Go back": "返回", "Show Advanced Settings": "显示高级设置", "Configure the Multistream service": "配置多重直播服务", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "配置 Dual Output 服务", "Apply optimized settings": "应用优化设置", "Start video transmission": "开始视频传输", "Publish Youtube broadcast": "发布 YouTube 广播", @@ -145,8 +145,8 @@ "Failed to update platform settings": "无法更新平台设置", "The Multistream server is temporarily unavailable": "多重直播服务器暂时不可用", "Failed to configure the Multistream server": "配置多重直播服务器失败", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "无法配置 Dual Output 服务", + "The Multistream server is temporarily unavailable for Dual Output": "多重直播服务器暂时不可用于 Dual Output", "Your YouTube account is not enabled for live streaming": "您的 YouTube 帐户未启用直播功能", "Failed to publish the YouTube broadcast": "未能发布 YouTube 广播", "Failed to post the Tweet": "未能发布推文", @@ -180,30 +180,30 @@ "New features coming soon!": "新功能即将推出!", "Stream to multiple platforms at once with Streamlabs Ultra.": "订阅 Streamlabs Ultra,同时直播至多个平台。", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "同时直播至水平和垂直平台。录制将仅为水平的。", + "Dual Output Settings": "Dual Output 设置", + "Enable Dual Output": "启用 Dual Output", + "Set your default output mode for each platform.": "为每个平台设置默认输出模式。", + "Set Dual Output Settings": "设置 Dual Output 设置", + "Mode:": "模式:", + "Horizontal": "水平", + "You can select which one to stream with in the Go Live window.": "您可以在“开始直播”窗口中选择要直播的模式。", + "Video Output Orientation": "视频输出方向", + "Show horizontal display.": "展示水平显示。", + "Show vertical display.": "展示垂直显示。", + "Hide horizontal display.": "隐藏水平显示。", + "Hide vertical display.": "隐藏垂直显示。", "Upgrade your stream with premium themes with Streamlabs Ultra.": "加入 Streamlabs Ultra,获取高级主题升级您的直播。", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "直播时无法更改这些设置。", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output 已启用 - 您必须直播至一个水平画面平台和一个垂直画面平台。", + "Other": "其他", + "Add Destination with Ultra": "以 Ultra 身份添加目的地", + "Please log in to enable dual output. Would you like to log in now?": "请登录以启用 Dual Output。是否立即登录?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "要使用 Dual Output,必须至少直播到一个水平画面平台和一个垂直画面平台。", + "Cannot toggle Dual Output while live.": "直播时无法切换 Dual Output。", + "Cannot toggle Dual Output while in Studio Mode.": "在工作室模式下无法切换 Dual Output。", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "无法显示 Dual Output - 选择性录制仅适用于水平源,并禁用编辑垂直输出场景。请禁用源的选择性录制,以设置 Dual Output。", + "Selective Recording can only be used with horizontal sources.": "选择性录制仅可用于水平源。", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "在“开始直播”窗口中为 Dual Output 模式设置开始直播设置。", + "Cannot toggle Studio Mode in Dual Output Mode.": "无法在 Dual Output 模式下切换工作室模式。" } diff --git a/app/i18n/zh-CN/widgets.json b/app/i18n/zh-CN/widgets.json index 7dc567fc0f27..7911abbf20dc 100644 --- a/app/i18n/zh-CN/widgets.json +++ b/app/i18n/zh-CN/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "送出的火花恰好为 ", "Ember amount is at least ": "余烬至少为 ", "Ember amount is exactly ": "余烬恰好为 ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "允许您的观众通过捐赠以在您的直播中分享媒体。", "Twitch Subscribers": "Twitch 订阅者", "YouTube Members": "YouTube 会员", "Media Share": "媒体共享", diff --git a/app/i18n/zh-TW/guest-cam.json b/app/i18n/zh-TW/guest-cam.json index 42386709dba9..6525e757a4de 100644 --- a/app/i18n/zh-TW/guest-cam.json +++ b/app/i18n/zh-TW/guest-cam.json @@ -47,5 +47,5 @@ "Collab Cam requires a source": "Collab Cam 需要來源", "At least one Collab Cam source is required to use Collab Cam. Would you like to add one now?": "至少需要一個 Collab Cam 來源才能使用 Collab Cam。您要現在新增一個嗎?", "You now have access to Collab Cam!": "您現在已經存取 Collab Cam!", - "You must be logged in to use Collab Cam.": "You must be logged in to use Collab Cam." + "You must be logged in to use Collab Cam.": "您必須先登入才能使用 Collab Cam。" } diff --git a/app/i18n/zh-TW/highlighter.json b/app/i18n/zh-TW/highlighter.json index 04996db1107b..c64406c09d05 100644 --- a/app/i18n/zh-TW/highlighter.json +++ b/app/i18n/zh-TW/highlighter.json @@ -91,15 +91,15 @@ "An error occurred while reading audio from %{file}": "從 %{file} 讀取音訊時發生錯誤", "An error occurred while mixing audio": "混音音訊時發生錯誤", "Edit your replays with Highlighter, a free editor built in to Streamlabs.": "使用精彩片段工具編輯您的重播,這是內建於 Streamlabs 的免費編輯器。", - "Upload To": "Upload To", - "Upload": "Upload", - "This feature requires a Streamlabs ID": "This feature requires a Streamlabs ID", - "Sign up for Streamlabs ID": "Sign up for Streamlabs ID", - "Add subtitles, transcribe, and more": "Add subtitles, transcribe, and more", - "Convert to mobile-friendly short video": "Convert to mobile-friendly short video", - "YouTube (private video)": "YouTube (private video)", - "Clip": "Clip", - "Transcribe": "Transcribe", - "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.", - "Recordings": "Recordings" + "Upload To": "上傳到", + "Upload": "上傳", + "This feature requires a Streamlabs ID": "此功能需要 Streamlabs ID", + "Sign up for Streamlabs ID": "註冊 Streamlabs ID", + "Add subtitles, transcribe, and more": "新增字幕、轉錄等等", + "Convert to mobile-friendly short video": "轉換為適合行動裝置使用的短片", + "YouTube (private video)": "YouTube (私有視訊)", + "Clip": "剪輯", + "Transcribe": "轉錄", + "Record your screen with Streamlabs Desktop. Once recording is complete, it will be displayed here. Access your files or edit further with Streamlabs tools.": "使用 Streamlabs Desktop 錄製您的螢幕。錄製完成後會顯示在這裡。使用 Streamlabs 工具存取您的檔案或進一步編輯。", + "Recordings": "錄影" } \ No newline at end of file diff --git a/app/i18n/zh-TW/hotkeys.json b/app/i18n/zh-TW/hotkeys.json index f588004adc61..82e4d355eb55 100644 --- a/app/i18n/zh-TW/hotkeys.json +++ b/app/i18n/zh-TW/hotkeys.json @@ -23,5 +23,6 @@ "Next Slide": "下一個投影片", "Previous Slide": "上一個投影片", "Toggle Performance Mode": "切換效能模式", - "Skip Alert": "跳過通知" + "Skip Alert": "跳過通知", + "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop.": "To use hotkeys on Mac, go to System Settings > Security > Accessibility and toggle on for Streamlabs Desktop." } diff --git a/app/i18n/zh-TW/notifications.json b/app/i18n/zh-TW/notifications.json index 9ff0a28024b6..92caca1b13b0 100644 --- a/app/i18n/zh-TW/notifications.json +++ b/app/i18n/zh-TW/notifications.json @@ -25,7 +25,7 @@ "Show in folder": "在資料夾中顯示", "Recordings": "錄影", "Marker %{label} added at %{timestamp}": "標記 %{label} 已新增於 %{timestamp}", - "File is too large to upload": "File is too large to upload", - "File type %{extension} is not supported": "File type %{extension} is not supported", - "Upload already in progress": "Upload already in progress" + "File is too large to upload": "檔案太大,無法上傳", + "File type %{extension} is not supported": "不支援檔案類型 %{extension}", + "Upload already in progress": "上傳已在進行中" } diff --git a/app/i18n/zh-TW/onboarding.json b/app/i18n/zh-TW/onboarding.json index 9e4e87c69f34..443058ab6116 100644 --- a/app/i18n/zh-TW/onboarding.json +++ b/app/i18n/zh-TW/onboarding.json @@ -124,7 +124,7 @@ "Basic Chatbot": "基本聊天室機器人", "Basic Features": "基本功能", "Access to All Overlays and Themes (%{themeNumber})": "可以使用所有疊層與主題 (%{themeNumber})", - "Add Up To 11 Guests or Cameras": "Add Up To 11 Guests or Cameras", + "Add Up To 11 Guests or Cameras": "最多可加入 11 個來賓或攝影機", "Access Full App Library (%{appNumber})": "存取完整的應用程式庫 (%{appNumber})", "Custom Tip Page and Domain": "自訂小費頁面和網域", "Custom Named Chatbot": "自訂命名的聊天室機器人", @@ -137,7 +137,7 @@ "Streamlabs Desktop requires that you have a connected platform account in order to use all of its features. By skipping this step, you will be logged out and some features may be unavailable.": "Streamlabs Desktop 需要你擁有連線平台帳戶,以使用其所有功能。跳過此步驟,您就會登出且會不能使用某些功能。", "Your Streamlabs account has multiple connected content platforms. Please select the primary platform you will be streaming to using Streamlabs Desktop.": "你的 Streamlabs 帳戶有多個連線的內容平台。請選擇你要使用 Streamlabs Desktop 進行直播的主要平台。", "Streamlabs Desktop requires you to connect a content platform to your Streamlabs account": "Streamlabs Desktop 需要你將內容平台連線到你的 Streamlabs 帳戶", - "Error": "Error", - "Ok": "Ok", - "An error has occurred during optimization attempt. Only default settings are applied": "An error has occurred during optimization attempt. Only default settings are applied" + "Error": "錯誤", + "Ok": "確定", + "An error has occurred during optimization attempt. Only default settings are applied": "嘗試最佳化期間發生錯誤。僅套用預設設定" } diff --git a/app/i18n/zh-TW/overlays.json b/app/i18n/zh-TW/overlays.json index 5ae09a9ff04f..9d4f2c4a132a 100644 --- a/app/i18n/zh-TW/overlays.json +++ b/app/i18n/zh-TW/overlays.json @@ -1,20 +1,20 @@ { "Successfully saved %{filename}": "已成功儲存 %{filename}", - "Successfully converted %{filename}": "Successfully converted %{filename}", - "Successfully saved %{filename} to %{filepath}": "Successfully saved %{filename} to %{filepath}", + "Successfully converted %{filename}": "已成功轉換 %{filename}", + "Successfully saved %{filename} to %{filepath}": "已成功將 %{filename} 儲存到 %{filepath}", "Successfully loaded %{filename}.overlay": "已成功載入 %{filename}.疊層", "This is an experimental feature. Use at your own risk.": "這是實驗性功能。使用時需自行承擔風險。", "Export Overlay File": "匯出疊層檔案", "Import Overlay File": "匯入疊層檔案", "Import Widget File in Current Scene": "在目前的場景匯入小程式檔案", - "The active scene collection is not a dual output scene collection.": "The active scene collection is not a dual output scene collection.", - "Convert to Vanilla Scene": "Convert to Vanilla Scene", - "Convert": "Convert", - "Convert and Export Overlay": "Convert and Export Overlay", - "Assign": "Assign", - "Assign and Export Overlay": "Assign and Export Overlay", - "Assign Vertical Sources to Horizontal Display": "Assign Vertical Sources to Horizontal Display", - "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.", - "Manage Dual Output Scene": "Manage Dual Output Scene", - "Unable to convert dual output collection.": "Unable to convert dual output collection." + "The active scene collection is not a dual output scene collection.": "作用中的場景集合不是 Dual Output 場景集合。", + "Convert to Vanilla Scene": "轉換為 Vanilla 場景", + "Convert": "轉換", + "Convert and Export Overlay": "轉換與匯出疊層", + "Assign": "指派", + "Assign and Export Overlay": "指定與匯出疊層", + "Assign Vertical Sources to Horizontal Display": "將垂直來源指派到水平顯示器", + "The below will create a copy of the active scene collection, set the copy as the active collection, and then apply the function.": "下列項目會建立作用中場景集合的副本,將副本設定為作用中的集合,然後套用功能。", + "Manage Dual Output Scene": "管理 Dual Output 場景", + "Unable to convert dual output collection.": "無法轉換 Dual Output 集合。" } diff --git a/app/i18n/zh-TW/promotional-copy.json b/app/i18n/zh-TW/promotional-copy.json index 69ad12824a1f..1b4e2d199e10 100644 --- a/app/i18n/zh-TW/promotional-copy.json +++ b/app/i18n/zh-TW/promotional-copy.json @@ -71,5 +71,5 @@ "1 Hour Videos + 250GB Storage + More": "1 小時影片 + 250GB 儲存空間 + 更多功能", "Highest Profit Margins": "最高利潤", "%{monthlyPrice}/mo or %{yearlyPrice}/year": "每月 %{monthlyPrice} 或每年 %{yearlyPrice}", - "Text-based editing of VOD content": "Text-based editing of VOD content" + "Text-based editing of VOD content": "對 VOD 內容進行文字式編輯" } diff --git a/app/i18n/zh-TW/scenes.json b/app/i18n/zh-TW/scenes.json index 665998e9965b..7b41a1529c41 100644 --- a/app/i18n/zh-TW/scenes.json +++ b/app/i18n/zh-TW/scenes.json @@ -50,11 +50,11 @@ "Enter a Scene Collection Name": "輸入場景組合名稱", "Copy of %{collectionName}": "%{collectionName} 的副本", "Your Scene Collections": "您的場景組合", - "Dual Output Mode": "Dual Output Mode", - "Horizontal Output": "Horizontal Output", - "Vertical Output": "Vertical Output", - "Arrange sources here for a vertical scene layout.": "Arrange sources here for a vertical scene layout.", - "Arrange sources here for a horizontal scene layout.": "Arrange sources here for a horizontal scene layout.", - "Toggle Dual Output Mode.": "Toggle Dual Output Mode.", - "Cannot hide dual output toggles in dual output mode.": "Cannot hide dual output toggles in dual output mode." + "Dual Output Mode": "Dual Output 模式", + "Horizontal Output": "水平輸出", + "Vertical Output": "垂直輸出", + "Arrange sources here for a vertical scene layout.": "在此處將來源安排為垂直場景配置。", + "Arrange sources here for a horizontal scene layout.": "在此處將來源安排為水平場景配置。", + "Toggle Dual Output Mode.": "切換 Dual Output 模式。", + "Cannot hide dual output toggles in dual output mode.": "在 Dual Output 模式中無法隱藏 Dual Output 切換開關。" } diff --git a/app/i18n/zh-TW/settings.json b/app/i18n/zh-TW/settings.json index f0817ca048ed..32230c16e672 100644 --- a/app/i18n/zh-TW/settings.json +++ b/app/i18n/zh-TW/settings.json @@ -249,7 +249,7 @@ "This number is too large for a FPS Numerator of %{fpsNum}, please decrease it or increase the Numerator": "此數字對於 %{fpsNum} 的 FPS 分子而言太大,請將其減少或加大分子。", "FPS Value must be between 1 and 1000": "FPS 值必須介於 1 到 1000 之間", "%{fieldName} must be greater than 0": "%{fieldName} 必須大於 0", - "Markers": "Markers", - "Manage Dual Output": "Manage Dual Output", - "Auto optimizer disabled for dual output scenes": "Auto optimizer disabled for dual output scenes" + "Markers": "標記", + "Manage Dual Output": "管理 Dual Output", + "Auto optimizer disabled for dual output scenes": "對 Dual Output 場景停用自動最佳化" } diff --git a/app/i18n/zh-TW/sources.json b/app/i18n/zh-TW/sources.json index 49d01136d03c..055186ed8065 100644 --- a/app/i18n/zh-TW/sources.json +++ b/app/i18n/zh-TW/sources.json @@ -355,7 +355,7 @@ "Set scale filter 'Bilinear'": "設定縮放濾鏡 '雙線性插值'", "Set scale filter 'Lanczos'": "設定縮放濾鏡 '蘭佐斯算法'", "Set scale filter 'Area'": "設定縮放濾鏡 '區域'", - "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Cannot move source outside canvas in Dual Output Mode.": "Cannot move source outside canvas in Dual Output Mode." + "You currently have the same source on both canvases selected. Please select the source in the canvas to edit it independently.": "您目前在兩個選取的畫布上擁有相同的來源。請在畫布中選擇來源以獨立編輯。", + "Selective Recording can only be used with horizontal sources.": "選擇性錄製僅能搭配水平音源使用。", + "Cannot move source outside canvas in Dual Output Mode.": "在 Dual Output 模式中無法將來源移動到畫布外。" } diff --git a/app/i18n/zh-TW/streaming.json b/app/i18n/zh-TW/streaming.json index 55aec3a8565b..e7476058de89 100644 --- a/app/i18n/zh-TW/streaming.json +++ b/app/i18n/zh-TW/streaming.json @@ -123,7 +123,7 @@ "Go back": "返回", "Show Advanced Settings": "顯示進階設定", "Configure the Multistream service": "設定多點直播服務", - "Configure the Dual Output service": "Configure the Dual Output service", + "Configure the Dual Output service": "設定 Dual Output 服務", "Apply optimized settings": "套用最佳設定", "Start video transmission": "開始視訊傳輸", "Publish Youtube broadcast": "發佈 YouTube 直播", @@ -145,8 +145,8 @@ "Failed to update platform settings": "無法更新平台設定", "The Multistream server is temporarily unavailable": "多點直播伺服器暫時無法使用", "Failed to configure the Multistream server": "無法設定多點直播伺服器", - "Failed to configure the Dual Output service": "Failed to configure the Dual Output service", - "The Multistream server is temporarily unavailable for Dual Output": "The Multistream server is temporarily unavailable for Dual Output", + "Failed to configure the Dual Output service": "無法設定 Dual Output 服務", + "The Multistream server is temporarily unavailable for Dual Output": "多平台直播伺服器暫時無法供 Dual Output 使用", "Your YouTube account is not enabled for live streaming": "您的 YouTube 帳戶並未啟用即時直播功能", "Failed to publish the YouTube broadcast": "無法發佈到 YouTube 直播", "Failed to post the Tweet": "無法發佈到 Tweet", @@ -180,30 +180,30 @@ "New features coming soon!": "即將推出新功能!", "Stream to multiple platforms at once with Streamlabs Ultra.": "使用 Streamlabs Ultra 同時直播到多個平台。", "Dual Output": "Dual Output", - "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.", - "Dual Output Settings": "Dual Output Settings", - "Enable Dual Output": "Enable Dual Output", - "Set your default output mode for each platform.": "Set your default output mode for each platform.", - "Set Dual Output Settings": "Set Dual Output Settings", - "Mode:": "Mode:", - "Horizontal": "Horizontal", - "You can select which one to stream with in the Go Live window.": "You can select which one to stream with in the Go Live window.", - "Video Output Orientation": "Video Output Orientation", - "Show horizontal display.": "Show horizontal display.", - "Show vertical display.": "Show vertical display.", - "Hide horizontal display.": "Hide horizontal display.", - "Hide vertical display.": "Hide vertical display.", + "Stream to horizontal and vertical platforms simultaneously. Recordings will be in horizontal only.": "同時在水平和垂直平台上直播。只能以水平方向錄製。", + "Dual Output Settings": "Dual Output 設定", + "Enable Dual Output": "啟用 Dual Output", + "Set your default output mode for each platform.": "為每個平台設定您的預設輸出模式。", + "Set Dual Output Settings": "設定 Dual Output 設定", + "Mode:": "模式:", + "Horizontal": "水平", + "You can select which one to stream with in the Go Live window.": "您可以在「開始直播」視窗中,選擇要直播的節目。", + "Video Output Orientation": "視訊輸出方向", + "Show horizontal display.": "水平顯示。", + "Show vertical display.": "垂直顯示。", + "Hide horizontal display.": "隱藏水平顯示。", + "Hide vertical display.": "隱藏垂直顯示。", "Upgrade your stream with premium themes with Streamlabs Ultra.": "利用 Streamlabs Ultra 提供的優質主題,升級你的直播。", - "You cannot change these settings when you're live.": "You cannot change these settings when you're live.", - "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output is enabled - you must stream to one horizontal and one vertical platform.", - "Other": "Other", - "Add Destination with Ultra": "Add Destination with Ultra", - "Please log in to enable dual output. Would you like to log in now?": "Please log in to enable dual output. Would you like to log in now?", - "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "To use Dual Output you must stream to at least one horizontal and one vertical platform.", - "Cannot toggle Dual Output while live.": "Cannot toggle Dual Output while live.", - "Cannot toggle Dual Output while in Studio Mode.": "Cannot toggle Dual Output while in Studio Mode.", - "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.", - "Selective Recording can only be used with horizontal sources.": "Selective Recording can only be used with horizontal sources.", - "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "Set up Go Live Settings for Dual Output Mode in the Go Live window.", - "Cannot toggle Studio Mode in Dual Output Mode.": "Cannot toggle Studio Mode in Dual Output Mode." + "You cannot change these settings when you're live.": "直播時不能變更這些設定。", + "Dual Output is enabled - you must stream to one horizontal and one vertical platform.": "Dual Output 已啟用 - 您必須直播到一個水平和一個垂直平台。", + "Other": "其他", + "Add Destination with Ultra": "利用 Ultra 新增目的地", + "Please log in to enable dual output. Would you like to log in now?": "請登入以啟用 Dual Output。您要現在登入嗎?", + "To use Dual Output you must stream to at least one horizontal and one vertical platform.": "若要使用 Dual Output,您必須至少直播到一個水平和一個垂直平台。", + "Cannot toggle Dual Output while live.": "直播時無法切換 Dual Output。", + "Cannot toggle Dual Output while in Studio Mode.": "在工作室模式中無法切換 Dual Output。", + "Dual Output can’t be displayed - Selective Recording only works with horizontal sources and disables editing the vertical output scene. Please disable selective recording from Sources to set up Dual Output.": "無法顯示 Dual Output - 選擇性錄製僅適用於水平來源且會停用編輯垂直輸出場景。請停用來源的選擇性錄製以設定 Dual Output。", + "Selective Recording can only be used with horizontal sources.": "選擇性錄製僅能搭配水平音源使用。", + "Set up Go Live Settings for Dual Output Mode in the Go Live window.": "在「開始直播」視窗中設定 Dual Output 模式的「開始直播」設定。", + "Cannot toggle Studio Mode in Dual Output Mode.": "在 Dual Output 模式中無法切換工作室模式。" } diff --git a/app/i18n/zh-TW/widgets.json b/app/i18n/zh-TW/widgets.json index 0cf8d0cac90d..623d5974ba5c 100644 --- a/app/i18n/zh-TW/widgets.json +++ b/app/i18n/zh-TW/widgets.json @@ -69,7 +69,7 @@ "Sparks sent are exactly ": "傳送的 Spark 精確金額為 ", "Ember amount is at least ": "Ember 金額至少為 ", "Ember amount is exactly ": "Ember 的精確金額為 ", - "Allow your viewers to donate to share media on your stream.": "Allow your viewers to donate to share media on your stream.", + "Allow your viewers to donate to share media on your stream.": "讓你的觀眾可以對您的直播進行贊助與分享媒體。", "Twitch Subscribers": "Twitch 訂閱者", "YouTube Members": "YouTube 會員", "Media Share": "媒體分享", From bef567015da2d78d2fdc2d35fcc6236509f446c8 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Thu, 2 Nov 2023 12:12:40 -0700 Subject: [PATCH 10/27] electron 25 (#4600) * electron 25 * electron 25.8.0 --------- Co-authored-by: Sean Beyer --- package.json | 4 +- yarn.lock | 155 ++++++++++----------------------------------------- 2 files changed, 32 insertions(+), 127 deletions(-) diff --git a/package.json b/package.json index 085991a43c45..e0f2547dc85c 100644 --- a/package.json +++ b/package.json @@ -147,9 +147,9 @@ "css-element-queries": "1.2.3", "css-loader": "2.1.1", "dotenv": "8.2.0", - "electron": "17.4.11", + "electron": "25.8.0", "electron-builder": "22.14.5", - "electron-chromedriver": "17.0.0", + "electron-chromedriver": "25.1.1", "electron-devtools-installer": "3.1.1", "electron-notarize": "1.0.0", "eslint": "7.15.0", diff --git a/yarn.lock b/yarn.lock index c0035e98c0be..e1d40fd4a4fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1842,25 +1842,22 @@ __metadata: languageName: node linkType: hard -"@electron/get@npm:^1.12.4, @electron/get@npm:^1.13.0": - version: 1.14.1 - resolution: "@electron/get@npm:1.14.1" +"@electron/get@npm:^2.0.0, @electron/get@npm:^2.0.1": + version: 2.0.2 + resolution: "@electron/get@npm:2.0.2" dependencies: debug: ^4.1.1 env-paths: ^2.2.0 fs-extra: ^8.1.0 global-agent: ^3.0.0 - global-tunnel-ng: ^2.7.1 - got: ^9.6.0 + got: ^11.8.5 progress: ^2.0.3 semver: ^6.2.0 sumchecker: ^3.0.1 dependenciesMeta: global-agent: optional: true - global-tunnel-ng: - optional: true - checksum: 21fec5e82bbee8f9fa183b46e05675b137c3130c7999d3b2b34a0047d1a06ec3c76347b9bbdb9911ba9b2123697804e360a15dda9db614c0226d5d4dcc4d6d15 + checksum: 900845cc0b31b54761fc9b0ada2dea1e999e59aacc48999d53903bcb7c9a0a7356b5fe736cf610b2a56c5a21f5a3c0e083b2ed2b7e52c36a4d0f420d4b5ec268 languageName: node linkType: hard @@ -2763,13 +2760,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.6.2": - version: 14.18.47 - resolution: "@types/node@npm:14.18.47" - checksum: 249467fa37e60bb7ce631616a5fea53f3b957a6792c6a09f7db7cdff85a7410c9e657dd9fa54bcc9d878e58f35407ce35169b84556f46b2154f90bc71063e1d0 - languageName: node - linkType: hard - "@types/node@npm:^18.0.0": version: 18.15.11 resolution: "@types/node@npm:18.15.11" @@ -2777,6 +2767,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^18.11.18": + version: 18.16.18 + resolution: "@types/node@npm:18.16.18" + checksum: d32d8a0a04cd3f5ecb361bcb42f3a07623881ac90d680e06bf626defb3c663a94860d11690babe607cfe67265eceeb8a59ba5fe40c0e49f5a1b01e0088640469 + languageName: node + linkType: hard + "@types/normalize-package-data@npm:^2.4.0": version: 2.4.0 resolution: "@types/normalize-package-data@npm:2.4.0" @@ -5428,7 +5425,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:1.6.2, concat-stream@npm:^1.6.2": +"concat-stream@npm:1.6.2": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -5456,16 +5453,6 @@ __metadata: languageName: node linkType: hard -"config-chain@npm:^1.1.11": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" - dependencies: - ini: ^1.3.4 - proto-list: ~1.2.1 - checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab - languageName: node - linkType: hard - "configstore@npm:^5.0.1": version: 5.0.1 resolution: "configstore@npm:5.0.1" @@ -6327,15 +6314,15 @@ __metadata: languageName: node linkType: hard -"electron-chromedriver@npm:17.0.0": - version: 17.0.0 - resolution: "electron-chromedriver@npm:17.0.0" +"electron-chromedriver@npm:25.1.1": + version: 25.1.1 + resolution: "electron-chromedriver@npm:25.1.1" dependencies: - "@electron/get": ^1.12.4 + "@electron/get": ^2.0.1 extract-zip: ^2.0.0 bin: chromedriver: chromedriver.js - checksum: e498aff6fe3bfd95d7e5f9d1158bdad5147ebd18266292c62879b305720fe9e188eac62d1bf40e71267159a0a9a9d6a9539aed2dc6224efeafebf3bd7dcee3df + checksum: 9794ab16ca3f5186a1de27b01eb25846949cdaa3d93f3388165792499044348897d910e53e11f29e16c53a6e95631aaa9f079d2ad677c3baaf4dfac40bea8359 languageName: node linkType: hard @@ -6438,16 +6425,16 @@ __metadata: languageName: node linkType: hard -"electron@npm:17.4.11": - version: 17.4.11 - resolution: "electron@npm:17.4.11" +"electron@npm:25.8.0": + version: 25.8.0 + resolution: "electron@npm:25.8.0" dependencies: - "@electron/get": ^1.13.0 - "@types/node": ^14.6.2 - extract-zip: ^1.0.3 + "@electron/get": ^2.0.0 + "@types/node": ^18.11.18 + extract-zip: ^2.0.1 bin: electron: cli.js - checksum: 2aad627183577d514ad79cb3f99eaa24e8acdba74e464eb62e699ebfe0ce1c12a7890ee5d6f2d5ab32daed0e449f9e161a21fb61841b3931438f215e1ad8099e + checksum: 3d9c3dbf299ce4e0f2cd81f7836574d199b8fb5a3bab3f98c052f212f895183bc15c1509acf64b356cb4ea29f559cbd51ae456fc4caa66dae0cf224b3c987973 languageName: node linkType: hard @@ -6479,13 +6466,6 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:^1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - "encoding@npm:^0.1.12": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -7047,7 +7027,7 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:2.0.1, extract-zip@npm:^2.0.0": +"extract-zip@npm:2.0.1, extract-zip@npm:^2.0.0, extract-zip@npm:^2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" dependencies: @@ -7064,20 +7044,6 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:^1.0.3": - version: 1.7.0 - resolution: "extract-zip@npm:1.7.0" - dependencies: - concat-stream: ^1.6.2 - debug: ^2.6.9 - mkdirp: ^0.5.4 - yauzl: ^2.10.0 - bin: - extract-zip: cli.js - checksum: 011bab660d738614555773d381a6ba4815d98c1cfcdcdf027e154ebcc9fc8c9ef637b3ea5c9b2144013100071ee41722ed041fc9aacc60f6198ef747cac0c073 - languageName: node - linkType: hard - "extract-zip@npm:^1.6.7": version: 1.6.7 resolution: "extract-zip@npm:1.6.7" @@ -7724,18 +7690,6 @@ __metadata: languageName: node linkType: hard -"global-tunnel-ng@npm:^2.7.1": - version: 2.7.1 - resolution: "global-tunnel-ng@npm:2.7.1" - dependencies: - encodeurl: ^1.0.2 - lodash: ^4.17.10 - npm-conf: ^1.1.3 - tunnel: ^0.0.6 - checksum: b7e016093eab6058b5fdd8caea31c22dc1a607f0f0b41c001ade5e0227c5d74efe9ce9bae56316d794bc1cedd461a187b8b7e8f0a3eb4d194972cdfb9d860af2 - languageName: node - linkType: hard - "globals@npm:^11.1.0": version: 11.7.0 resolution: "globals@npm:11.7.0" @@ -7853,7 +7807,7 @@ __metadata: languageName: node linkType: hard -"got@npm:^11.0.2, got@npm:^11.8.1": +"got@npm:^11.0.2, got@npm:^11.8.1, got@npm:^11.8.5": version: 11.8.6 resolution: "got@npm:11.8.6" dependencies: @@ -8368,13 +8322,6 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.4": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - "ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.7 resolution: "ini@npm:1.3.7" @@ -9628,7 +9575,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.2.0, lodash@npm:^4.8.0": +"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.2.0, lodash@npm:^4.8.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -10231,17 +10178,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.4": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: ^1.2.6 - bin: - mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -10522,16 +10458,6 @@ __metadata: languageName: node linkType: hard -"npm-conf@npm:^1.1.3": - version: 1.1.3 - resolution: "npm-conf@npm:1.1.3" - dependencies: - config-chain: ^1.1.11 - pify: ^3.0.0 - checksum: 2d4e933b657623d98183ec408d17318547296b1cd17c4d3587e2920c554675f24f829d8f5f7f84db3a020516678fdcd01952ebaaf0e7fa8a17f6c39be4154bef - languageName: node - linkType: hard - "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -11086,13 +11012,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde - languageName: node - linkType: hard - "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -11438,13 +11357,6 @@ __metadata: languageName: node linkType: hard -"proto-list@npm:~1.2.1": - version: 1.2.4 - resolution: "proto-list@npm:1.2.4" - checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 - languageName: node - linkType: hard - "proxy-from-env@npm:1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -13229,9 +13141,9 @@ __metadata: css-element-queries: 1.2.3 css-loader: 2.1.1 dotenv: 8.2.0 - electron: 17.4.11 + electron: 25.8.0 electron-builder: 22.14.5 - electron-chromedriver: 17.0.0 + electron-chromedriver: 25.1.1 electron-devtools-installer: 3.1.1 electron-notarize: 1.0.0 electron-react-devtools: ^0.5.3 @@ -14404,13 +14316,6 @@ __metadata: languageName: node linkType: hard -"tunnel@npm:^0.0.6": - version: 0.0.6 - resolution: "tunnel@npm:0.0.6" - checksum: c362948df9ad34b649b5585e54ce2838fa583aa3037091aaed66793c65b423a264e5229f0d7e9a95513a795ac2bd4cb72cda7e89a74313f182c1e9ae0b0994fa - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" From 41ae63ed5705c1431f18da4b1cca13108f20a8cb Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 2 Nov 2023 12:12:56 -0700 Subject: [PATCH 11/27] Update native modules to electron 25 (#4735) * update node modules to version built for electron 25 * Update repositories.json * Update repositories.json * Update repositories.json * Update repositories.json * Update repositories.json --- scripts/repositories.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/repositories.json b/scripts/repositories.json index ba611e2e267e..4a2a9781b20f 100644 --- a/scripts/repositories.json +++ b/scripts/repositories.json @@ -12,7 +12,7 @@ "name": "node-libuiohook", "url": "https://slobs-node-libuiohook.s3-us-west-2.amazonaws.com/", "archive": "node-libuiohook-[VERSION]-[OS][ARCH].tar.gz", - "version": "1.1.13", + "version": "1.1.16", "win64": true, "osx": true }, @@ -20,7 +20,7 @@ "name": "node-fontinfo", "url": "https://slobs-node-fontinfo.s3-us-west-2.amazonaws.com/", "archive": "node-fontinfo-[VERSION]-[OS][ARCH].tar.gz", - "version": "1.1.8", + "version": "1.1.11", "win64": true, "osx": true }, @@ -28,7 +28,7 @@ "name": "font-manager", "url": "https://slobs-font-manager.s3-us-west-2.amazonaws.com/", "archive": "font-manager-[VERSION]-[OS][ARCH].tar.gz", - "version": "1.2.6", + "version": "1.2.9", "win64": true, "osx": true }, @@ -36,7 +36,7 @@ "name": "crash-handler", "url": "https://slobs-crash-handler.s3-us-west-2.amazonaws.com/", "archive": "crash-handler-[VERSION]-[OS][ARCH].tar.gz", - "version": "1.2.17", + "version": "1.2.20", "win64": true, "osx": true }, @@ -44,7 +44,7 @@ "name": "node-window-rendering", "url": "https://slobs-node-window-rendering.s3-us-west-2.amazonaws.com/", "archive": "node-window-rendering-[VERSION]-[OS][ARCH].tar.gz", - "version": "1.0.18", + "version": "1.0.19", "win64": false, "osx": true }, @@ -52,7 +52,7 @@ "name": "game_overlay", "url": "https://obs-studio-deployment.s3-us-west-2.amazonaws.com/", "archive": "game-overlay-[VERSION]-[OS].tar.gz", - "version": "0.0.59", + "version": "0.0.62", "win64": true, "osx": false }, @@ -60,9 +60,9 @@ "name": "color-picker", "url": "https://obs-studio-deployment.s3-us-west-2.amazonaws.com/", "archive": "color-picker-[VERSION]-[OS].tar.gz", - "version": "1.3.4", + "version": "1.3.10", "win64": true, "osx": false } ] -} \ No newline at end of file +} From 791d6c1b2d83e51bd15d9ce08cb02d8a1ba42b81 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 2 Nov 2023 12:13:23 -0700 Subject: [PATCH 12/27] Update osn to v0.23.104 (#4777) --- scripts/repositories.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/repositories.json b/scripts/repositories.json index 4a2a9781b20f..16e84eacb953 100644 --- a/scripts/repositories.json +++ b/scripts/repositories.json @@ -4,7 +4,7 @@ "name": "obs-studio-node", "url": "https://s3-us-west-2.amazonaws.com/obsstudionodes3.streamlabs.com/", "archive": "osn-[VERSION]-release-[OS][ARCH].tar.gz", - "version": "0.23.102", + "version": "0.23.104", "win64": true, "osx": true }, From 6e3a101a4e444bae51094f58dd278438ad281875 Mon Sep 17 00:00:00 2001 From: Aleksandr Voitenko <86602590+avoitenko-logitech@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:14:42 +0300 Subject: [PATCH 13/27] Importing groups from OBS + few fixes for scene items (#4723) --- app/services/obs-importer.ts | 401 +++++++++++++++++++++-------------- 1 file changed, 245 insertions(+), 156 deletions(-) diff --git a/app/services/obs-importer.ts b/app/services/obs-importer.ts index 10f43f19c79c..ffcdc2a3d04f 100644 --- a/app/services/obs-importer.ts +++ b/app/services/obs-importer.ts @@ -18,6 +18,8 @@ import { RunInLoadingMode } from 'services/app/app-decorators'; import defaultTo from 'lodash/defaultTo'; import { $t } from 'services/i18n'; import * as remote from '@electron/remote'; +import { SceneItemFolder } from 'services/scenes/scene-folder'; +import { SceneItem } from 'services/scenes/scene-item'; interface Source { name?: string; @@ -38,6 +40,9 @@ interface IOBSConfigFilter { interface IOBSConfigSceneItem { name: string; + source_uuid: string; + id: string; + rot: number; crop_top: number; crop_right: number; crop_bottom: number; @@ -45,16 +50,23 @@ interface IOBSConfigSceneItem { pos: IVec2; scale: IVec2; visible: boolean; + locked: boolean; bounds: IVec2; bounds_align: number; bounds_type: number; blend_type: string; blend_method: string; scale_filter: string; + private_settings: { + // TODO: unlike OBS, SL Desktop does not remember opened folder state between sessions. + // And if some day we want to support it, here is the appropriate option to import from OBS. + collapsed?: boolean; + }; } interface IOBSConfigSource { id: TSourceType; + uuid: string; name: string; settings: { shutdown?: boolean; @@ -77,12 +89,25 @@ interface IOBSConfigTransition { id: string; } +interface IOBSConfigGroup { + name: string; + uuid: string; + settings: { + items?: { + name: string; + source_uuid: string; + id: string; + }[]; + }; +} + interface IOBSConfigJSON { sources: IOBSConfigSource[]; current_scene: string; scene_order: { name: string }[]; transitions: IOBSConfigTransition[]; transition_duration: number; + groups: IOBSConfigGroup[]; } class ObsImporterViews extends ViewHandler<{ progress: number; total: number }> { @@ -114,6 +139,9 @@ export class ObsImporterService extends StatefulService<{ progress: number; tota @Inject() settingsService: SettingsService; @Inject() appService: AppService; + combinedIdToSceneItemMap = new Map(); + combinedIdToFolderMap = new Map(); + get views() { return new ObsImporterViews(this.state); } @@ -172,6 +200,7 @@ export class ObsImporterService extends StatefulService<{ progress: number; tota this.importSceneOrder(configJSON); this.importMixerSources(configJSON); this.importTransitions(configJSON); + this.importFolders(configJSON); return this.scenesService.views.scenes.length !== 0; }, @@ -280,178 +309,207 @@ export class ObsImporterService extends StatefulService<{ progress: number; tota importScenes(configJSON: IOBSConfigJSON) { const sourcesJSON = configJSON.sources; + const groupsJSON = configJSON.groups; const currentScene = configJSON.current_scene; // OBS uses unique scene names instead id // so create a mapping variable const nameToIdMap: Dictionary = {}; - if (Array.isArray(sourcesJSON)) { - // Create all the scenes - sourcesJSON.forEach(sourceJSON => { - if (sourceJSON.id === 'scene') { - const scene = this.scenesService.createScene(sourceJSON.name, { - makeActive: sourceJSON.name === currentScene, - }); - nameToIdMap[scene.name] = scene.id; + if (!Array.isArray(sourcesJSON)) { + return; + } + + if (!Array.isArray(groupsJSON)) { + return; + } + + // Create all the scenes + sourcesJSON.forEach(sourceJSON => { + if (sourceJSON.id === 'scene') { + const scene = this.scenesService.createScene(sourceJSON.name, { + makeActive: sourceJSON.name === currentScene, + }); + nameToIdMap[scene.name] = scene.id; + } + }); + + // Add all the sceneItems to every scene + sourcesJSON.forEach(sourceJSON => { + if (sourceJSON.id === 'scene') { + const scene = this.scenesService.views.getScene(nameToIdMap[sourceJSON.name]); + if (!scene) return; + + const sceneItems = sourceJSON.settings.items; + if (!Array.isArray(sceneItems)) { + return; } - }); - // Add all the sceneItems to every scene - sourcesJSON.forEach(sourceJSON => { - if (sourceJSON.id === 'scene') { - const scene = this.scenesService.views.getScene(nameToIdMap[sourceJSON.name]); - if (!scene) return; - - const sceneItems = sourceJSON.settings.items; - if (Array.isArray(sceneItems)) { - // Looking for the source to add to the scene - sceneItems.forEach(item => { - const sourceToAdd = this.sourcesService.views.getSources().find(source => { - return source.name === item.name; - }); - if (sourceToAdd) { - const sceneItem = scene.addSource(sourceToAdd.sourceId); - - const crop = { - bottom: item.crop_bottom, - left: item.crop_left, - right: item.crop_right, - top: item.crop_top, - }; - const pos = item.pos; - const scale = item.scale; - - if ( - item.bounds && - item.bounds.x && - item.bounds.y && - item.bounds_align === 0 && - [1, 2].includes(item.bounds_type) - ) { - // Stretch - scale.x = item.bounds.x / sourceToAdd.width; - scale.y = item.bounds.y / sourceToAdd.height; - - // Fit - if (item.bounds_type === 2) { - if (scale.x > scale.y) { - scale.x = scale.y; - - // Account for centering in the bounding box - const actualWidth = sourceToAdd.width * scale.x; - pos.x += (item.bounds.x - actualWidth) / 2; - } else { - scale.y = scale.x; - - // Account for centering in the bounding box - const actualHeight = sourceToAdd.height * scale.y; - pos.y += (item.bounds.y - actualHeight) / 2; - } - } - } + // Looking for the source to add to the scene + sceneItems.forEach(item => { + const sourceToAdd = this.sourcesService.views.getSources().find(source => { + return source.name === item.name; + }); - let blendingMode: obs.EBlendingMode; - switch (item.blend_type) { - case 'normal': { - blendingMode = obs.EBlendingMode.Normal; - break; - } - case 'additive': { - blendingMode = obs.EBlendingMode.Additive; - break; - } - case 'subtract': { - blendingMode = obs.EBlendingMode.Substract; - break; - } - case 'screen': { - blendingMode = obs.EBlendingMode.Screen; - break; - } - case 'multiply': { - blendingMode = obs.EBlendingMode.Multiply; - break; - } - case 'lighten': { - blendingMode = obs.EBlendingMode.Lighten; - break; - } - case 'darken': { - blendingMode = obs.EBlendingMode.Darken; - break; - } - default: { - blendingMode = obs.EBlendingMode.Normal; - break; - } - } + const obsGroupToAdd = groupsJSON.find(groupJSON => { + return groupJSON.uuid === item.source_uuid; + }); - let blendingMethod: obs.EBlendingMethod; - switch (item.blend_method) { - case 'default': { - blendingMethod = obs.EBlendingMethod.Default; - break; - } - case 'srgb_off': { - blendingMethod = obs.EBlendingMethod.SrgbOff; - break; - } - default: { - blendingMethod = obs.EBlendingMethod.Default; - break; - } + if (sourceToAdd) { + const sceneItem = scene.addSource(sourceToAdd.sourceId); + // Combined ID is needed to provide a true unicality for the object created. + // The main reason for this is presence of 'Use existing' feature for groups OBS, + // which allows to reference existing groups. Such feature currently is not available in SL Desktop. + const combinedId = scene.id + '&' + item.id + '&' + item.source_uuid; + this.combinedIdToSceneItemMap.set(combinedId, sceneItem); + + const crop = { + bottom: item.crop_bottom, + left: item.crop_left, + right: item.crop_right, + top: item.crop_top, + }; + const pos = item.pos; + const scale = item.scale; + const rot = item.rot; + + if ( + item.bounds && + item.bounds.x && + item.bounds.y && + item.bounds_align === 0 && + [1, 2].includes(item.bounds_type) + ) { + // Stretch + scale.x = item.bounds.x / sourceToAdd.width; + scale.y = item.bounds.y / sourceToAdd.height; + + // Fit + if (item.bounds_type === 2) { + if (scale.x > scale.y) { + scale.x = scale.y; + + // Account for centering in the bounding box + const actualWidth = sourceToAdd.width * scale.x; + pos.x += (item.bounds.x - actualWidth) / 2; + } else { + scale.y = scale.x; + + // Account for centering in the bounding box + const actualHeight = sourceToAdd.height * scale.y; + pos.y += (item.bounds.y - actualHeight) / 2; } + } + } - let scaleFilter: obs.EScaleType; - switch (item.scale_filter) { - case 'disable': { - scaleFilter = obs.EScaleType.Disable; - break; - } - case 'point': { - scaleFilter = obs.EScaleType.Point; - break; - } - case 'bilinear': { - scaleFilter = obs.EScaleType.Bilinear; - break; - } - case 'bicubic': { - scaleFilter = obs.EScaleType.Bicubic; - break; - } - case 'lanczos': { - scaleFilter = obs.EScaleType.Lanczos; - break; - } - case 'area': { - scaleFilter = obs.EScaleType.Area; - break; - } - default: { - scaleFilter = obs.EScaleType.Disable; - break; - } - } + let blendingMode: obs.EBlendingMode; + switch (item.blend_type) { + case 'normal': { + blendingMode = obs.EBlendingMode.Normal; + break; + } + case 'additive': { + blendingMode = obs.EBlendingMode.Additive; + break; + } + case 'subtract': { + blendingMode = obs.EBlendingMode.Substract; + break; + } + case 'screen': { + blendingMode = obs.EBlendingMode.Screen; + break; + } + case 'multiply': { + blendingMode = obs.EBlendingMode.Multiply; + break; + } + case 'lighten': { + blendingMode = obs.EBlendingMode.Lighten; + break; + } + case 'darken': { + blendingMode = obs.EBlendingMode.Darken; + break; + } + default: { + blendingMode = obs.EBlendingMode.Normal; + break; + } + } - sceneItem.setSettings({ - visible: item.visible, - transform: { - crop, - scale, - position: pos, - }, - blendingMode, - blendingMethod, - scaleFilter, - }); + let blendingMethod: obs.EBlendingMethod; + switch (item.blend_method) { + case 'default': { + blendingMethod = obs.EBlendingMethod.Default; + break; + } + case 'srgb_off': { + blendingMethod = obs.EBlendingMethod.SrgbOff; + break; + } + default: { + blendingMethod = obs.EBlendingMethod.Default; + break; + } + } + + let scaleFilter: obs.EScaleType; + switch (item.scale_filter) { + case 'disable': { + scaleFilter = obs.EScaleType.Disable; + break; + } + case 'point': { + scaleFilter = obs.EScaleType.Point; + break; } + case 'bilinear': { + scaleFilter = obs.EScaleType.Bilinear; + break; + } + case 'bicubic': { + scaleFilter = obs.EScaleType.Bicubic; + break; + } + case 'lanczos': { + scaleFilter = obs.EScaleType.Lanczos; + break; + } + case 'area': { + scaleFilter = obs.EScaleType.Area; + break; + } + default: { + scaleFilter = obs.EScaleType.Disable; + break; + } + } + + sceneItem.setSettings({ + visible: item.visible, + locked: item.locked, + transform: { + crop, + scale, + position: pos, + rotation: rot, + }, + blendingMode, + blendingMethod, + scaleFilter, }); + } else if (obsGroupToAdd) { + const folder = scene.createFolder(item.name); + this.combinedIdToFolderMap.set(scene.id + '&' + item.source_uuid, [ + folder, + item.locked, + item.visible, + ]); } - } - }); - } + }); + } + }); } importSceneOrder(configJSON: IOBSConfigJSON) { @@ -550,6 +608,37 @@ export class ObsImporterService extends StatefulService<{ progress: number; tota }); } + importFolders(configJSON: IOBSConfigJSON) { + if (configJSON.groups && configJSON.groups.length > 0) { + const groupsJSON = configJSON.groups; + + for (const [combinedId, folderTuple] of this.combinedIdToFolderMap) { + const [sceneId, obsGroupUuid] = combinedId.split('&'); + const [folder, locked, visible] = folderTuple; + + const groupJSON = groupsJSON.find(v => v.uuid === obsGroupUuid); + if (!groupJSON) { + continue; + } + + for (const item of groupJSON.settings.items) { + const combinedId = sceneId + '&' + item.id + '&' + item.source_uuid; + const sceneItem = this.combinedIdToSceneItemMap.get(combinedId); + if (sceneItem) { + sceneItem.setParent(folder.id); + if (locked) { + sceneItem.setSettings({ locked: true }); + } + + if (!visible) { + sceneItem.setSettings({ visible: false }); + } + } + } + } + } + } + getSceneCollections(): ISceneCollection[] { if (!this.views.isOBSinstalled()) return []; if (!fs.existsSync(this.views.sceneCollectionsDirectory)) return []; From 6d54487a75096ec7fda1934c1697bbc9f26a33c7 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Thu, 2 Nov 2023 12:17:52 -0700 Subject: [PATCH 14/27] Release version 1.15.0-preview.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e0f2547dc85c..b165f41aec17 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.0-preview.0", + "version": "1.15.0-preview.1", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From ba3d9bda7f600812e59a547ca3d7e42d26aa88a8 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Tue, 7 Nov 2023 10:36:23 -0800 Subject: [PATCH 15/27] Electron 25 fixes (#4780) * fix electron 25 issues and upgrade to 25.9.3 * fix SLOBS_PRODUCTION_DEBUG --- app/services/editor.ts | 2 +- app/util/menus/Menu.ts | 8 ++++++-- main.js | 26 +++++++++++++++++++++----- package.json | 2 +- yarn.lock | 10 +++++----- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/app/services/editor.ts b/app/services/editor.ts index 5f19f4b8acb3..404a1409779b 100644 --- a/app/services/editor.ts +++ b/app/services/editor.ts @@ -241,7 +241,7 @@ export class EditorService extends StatefulService { menu = new EditMenu({ selectedSceneId: this.scene.id, display: event.display }); } - menu.popup(); + menu.popup({ window: this.windowsService.windows.main, x: event.pageX, y: event.pageY }); } } diff --git a/app/util/menus/Menu.ts b/app/util/menus/Menu.ts index 9de5e28b207c..aa3ec1509996 100644 --- a/app/util/menus/Menu.ts +++ b/app/util/menus/Menu.ts @@ -9,8 +9,12 @@ export class Menu { this.menu = new remote.Menu(); } - popup() { - this.menu.popup({ window: remote.getCurrentWindow() }); + popup(opts?: { window: Electron.BrowserWindow; x: number; y: number }) { + if (opts) { + this.menu.popup(opts); + } else { + this.menu.popup({ window: remote.getCurrentWindow() }); + } } append(options: Electron.MenuItemConstructorOptions) { diff --git a/main.js b/main.js index b0b36bd06dfc..e902f4b15791 100644 --- a/main.js +++ b/main.js @@ -251,9 +251,9 @@ let appShutdownTimeout; global.indexUrl = `file://${__dirname}/index.html`; function openDevTools() { - childWindow.webContents.openDevTools({ mode: 'undocked' }); - mainWindow.webContents.openDevTools({ mode: 'undocked' }); - workerWindow.webContents.openDevTools({ mode: 'undocked' }); + childWindow.webContents.openDevTools({ mode: 'detach' }); + mainWindow.webContents.openDevTools({ mode: 'detach' }); + workerWindow.webContents.openDevTools({ mode: 'detach' }); } // TODO: Clean this up @@ -342,6 +342,12 @@ async function startApp() { workerWindow.loadURL(`${global.indexUrl}?windowId=worker`); // }, 10 * 1000); + if (process.env.SLOBS_PRODUCTION_DEBUG) { + workerWindow.webContents.once('dom-ready', () => { + workerWindow.webContents.openDevTools({ mode: 'detach' }); + }); + } + // All renderers should use ipcRenderer.sendTo to send to communicate with // the worker. This still gets proxied via the main process, but eventually // we will refactor this to not use electron IPC, which will make it much @@ -380,6 +386,12 @@ async function startApp() { mainWindow.loadURL(`${global.indexUrl}?windowId=main`); // }, 5 * 1000) + if (process.env.SLOBS_PRODUCTION_DEBUG) { + mainWindow.webContents.once('dom-ready', () => { + mainWindow.webContents.openDevTools({ mode: 'detach' }); + }); + } + mainWindowState.manage(mainWindow); mainWindow.removeMenu(); @@ -454,6 +466,12 @@ async function startApp() { childWindow.loadURL(`${global.indexUrl}?windowId=child`); + if (process.env.SLOBS_PRODUCTION_DEBUG) { + childWindow.webContents.once('dom-ready', () => { + childWindow.webContents.openDevTools({ mode: 'detach' }); + }); + } + // The child window is never closed, it just hides in the // background until it is needed. childWindow.on('close', e => { @@ -465,8 +483,6 @@ async function startApp() { } }); - if (process.env.SLOBS_PRODUCTION_DEBUG) openDevTools(); - // simple messaging system for services between windows // WARNING! renderer windows use synchronous requests and will be frozen // until the worker window's asynchronous response diff --git a/package.json b/package.json index b165f41aec17..0a6198ec7c3a 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "css-element-queries": "1.2.3", "css-loader": "2.1.1", "dotenv": "8.2.0", - "electron": "25.8.0", + "electron": "25.9.3", "electron-builder": "22.14.5", "electron-chromedriver": "25.1.1", "electron-devtools-installer": "3.1.1", diff --git a/yarn.lock b/yarn.lock index e1d40fd4a4fc..ae2a07e8d80b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6425,16 +6425,16 @@ __metadata: languageName: node linkType: hard -"electron@npm:25.8.0": - version: 25.8.0 - resolution: "electron@npm:25.8.0" +"electron@npm:25.9.3": + version: 25.9.3 + resolution: "electron@npm:25.9.3" dependencies: "@electron/get": ^2.0.0 "@types/node": ^18.11.18 extract-zip: ^2.0.1 bin: electron: cli.js - checksum: 3d9c3dbf299ce4e0f2cd81f7836574d199b8fb5a3bab3f98c052f212f895183bc15c1509acf64b356cb4ea29f559cbd51ae456fc4caa66dae0cf224b3c987973 + checksum: 855aff79ff14843ea8a853f534a7f442b02891b29037f0c21b52180ee36e827515dc0dd3e1e472e1041c2f2b4b23ebd319e7dd42a7c57955741071572003f11d languageName: node linkType: hard @@ -13141,7 +13141,7 @@ __metadata: css-element-queries: 1.2.3 css-loader: 2.1.1 dotenv: 8.2.0 - electron: 25.8.0 + electron: 25.9.3 electron-builder: 22.14.5 electron-chromedriver: 25.1.1 electron-devtools-installer: 3.1.1 From 0d48e0e777824c004c6cb8a705652dd7b87cd012 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Tue, 7 Nov 2023 10:38:50 -0800 Subject: [PATCH 16/27] Release version 1.15.0-preview.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a6198ec7c3a..ad3ebb379df8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.0-preview.1", + "version": "1.15.0-preview.2", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 0de51882c2ef20c76a91a0108941dc0da5439105 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 9 Nov 2023 14:26:32 -0800 Subject: [PATCH 17/27] Update osn to v0.23.106 (#4781) --- scripts/repositories.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/repositories.json b/scripts/repositories.json index 16e84eacb953..930b16cb1831 100644 --- a/scripts/repositories.json +++ b/scripts/repositories.json @@ -4,7 +4,7 @@ "name": "obs-studio-node", "url": "https://s3-us-west-2.amazonaws.com/obsstudionodes3.streamlabs.com/", "archive": "osn-[VERSION]-release-[OS][ARCH].tar.gz", - "version": "0.23.104", + "version": "0.23.106", "win64": true, "osx": true }, @@ -65,4 +65,4 @@ "osx": false } ] -} +} \ No newline at end of file From a2bf5d256799e4e7df1d6c95232e2098a21b44b9 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Thu, 9 Nov 2023 14:41:36 -0800 Subject: [PATCH 18/27] Release version 1.15.0-preview.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ad3ebb379df8..bc9b2d2d10f1 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.0-preview.2", + "version": "1.15.0-preview.3", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 2a6a32a9f07aa4d36c3f1af5b9f829b36a0f3cdf Mon Sep 17 00:00:00 2001 From: Micheline Wu <69046953+michelinewu@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:58:49 -0500 Subject: [PATCH 19/27] Mw add do tests 2 (#4772) * Remove scene id from source selector toggle and added dual output source selector tests. * Add Dual output display toggle test for show/hide displays and filter sources in source selector. * Fix for strictnulls test. --- .../elements/DualOutputSourceSelector.tsx | 16 +- .../editor/elements/SourceSelector.tsx | 8 +- .../api/external-api/scenes/scene-node.ts | 2 + app/services/api/external-api/scenes/scene.ts | 23 ++ .../api/external-api/scenes/scenes.ts | 7 + app/services/dual-output/dual-output.ts | 8 +- .../scene-collections/scene-collections.ts | 2 +- app/services/scenes/scenes.ts | 7 + test/helpers/modules/dual-output.ts | 22 +- test/helpers/scene-builder.ts | 77 ++++- test/regular/streaming/dual-output.ts | 287 ++++++++++-------- 11 files changed, 296 insertions(+), 163 deletions(-) diff --git a/app/components-react/editor/elements/DualOutputSourceSelector.tsx b/app/components-react/editor/elements/DualOutputSourceSelector.tsx index 2e3257b64a3e..c9ce70e3482b 100644 --- a/app/components-react/editor/elements/DualOutputSourceSelector.tsx +++ b/app/components-react/editor/elements/DualOutputSourceSelector.tsx @@ -6,7 +6,6 @@ import { SourceSelectorModule } from './SourceSelector'; interface IDualOutputSourceSelector { nodeId: string; - sceneId?: string; } export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { const { @@ -23,11 +22,8 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { DualOutputService.views.verticalNodeIds && horizontalActive ? DualOutputService.views.activeSceneNodeMap[p.nodeId] : p.nodeId, - isHorizontalVisible: - !isDualOutputLoading && DualOutputService.views.getIsHorizontalVisible(p.nodeId, p?.sceneId), - isVerticalVisible: - !isDualOutputLoading && DualOutputService.views.getIsVerticalVisible(p.nodeId, p?.sceneId), - isLoading: DualOutputService.views.isLoading && !DualOutputService.views.hasVerticalNodes, + isHorizontalVisible: DualOutputService.views.getIsHorizontalVisible(p.nodeId), + isVerticalVisible: DualOutputService.views.getIsVerticalVisible(p.nodeId), })); const showHorizontalToggle = useMemo(() => { @@ -46,7 +42,9 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { toggleVisibility(p.nodeId); makeActive(p.nodeId); }} - className={v.isHorizontalVisible ? 'icon-desktop' : 'icon-desktop-hide'} + className={`${ + v.isHorizontalVisible ? 'icon-desktop' : 'icon-desktop-hide' + } horizontal-source-icon`} /> )} @@ -56,7 +54,9 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { toggleVisibility(v.verticalNodeId); makeActive(v.verticalNodeId); }} - className={v.isVerticalVisible ? 'icon-phone-case' : 'icon-phone-case-hide'} + className={`${ + v.isVerticalVisible ? 'icon-phone-case' : 'icon-phone-case-hide' + } vertical-source-icon`} /> )} diff --git a/app/components-react/editor/elements/SourceSelector.tsx b/app/components-react/editor/elements/SourceSelector.tsx index 714315244a14..ef828a2657ba 100644 --- a/app/components-react/editor/elements/SourceSelector.tsx +++ b/app/components-react/editor/elements/SourceSelector.tsx @@ -37,7 +37,6 @@ interface ISourceMetadata { isFolder: boolean; canShowActions: boolean; parentId?: string; - sceneId?: string; toggleAll?: boolean; } @@ -89,7 +88,6 @@ export class SourceSelectorModule { 0, isFolder, toggleAll, @@ -776,7 +773,6 @@ const TreeNode = React.forwardRef( p: { title: string; id: string; - sceneId?: string; isLocked: boolean; isVisible: boolean; isStreamVisible: boolean; @@ -818,9 +814,7 @@ const TreeNode = React.forwardRef( {p.canShowActions && ( <> {p.isGuestCamActive && } - {p.isDualOutputActive && p.hasNodeMap && ( - - )} + {p.isDualOutputActive && p.hasNodeMap && } {p.selectiveRecordingEnabled && ( { + // only return vertical nodes if only the vertical display is active + if (populateWithVerticalNodes && node?.display === 'vertical') { + return node; + } + // return horizontal nodes if either only the horizontal display is active or both displays are active + if (!populateWithVerticalNodes && node?.display === 'horizontal') { + return node; + } + }); + + return nodes; + } } diff --git a/app/services/api/external-api/scenes/scenes.ts b/app/services/api/external-api/scenes/scenes.ts index 2d339edde8b4..49772c21927d 100644 --- a/app/services/api/external-api/scenes/scenes.ts +++ b/app/services/api/external-api/scenes/scenes.ts @@ -189,6 +189,13 @@ export class ScenesService { get activeSceneId(): string { return this.scenesService.views.activeSceneId; } + + /** + * Accessor for the scene node maps for dual output + */ + get sceneNodeMaps(): { [sceneId: string]: Dictionary } { + return this.scenesService.views.sceneNodeMaps; + } } export interface ISceneNodeAddOptions { diff --git a/app/services/dual-output/dual-output.ts b/app/services/dual-output/dual-output.ts index 688e9544f486..513affa4ace0 100644 --- a/app/services/dual-output/dual-output.ts +++ b/app/services/dual-output/dual-output.ts @@ -219,9 +219,9 @@ class DualOutputViews extends ViewHandler { * @param sceneId * @returns */ - getIsHorizontalVisible(nodeId: string, sceneId?: string) { + getIsHorizontalVisible(nodeId: string) { if (!this.hasVerticalNodes) return false; - return this.scenesService.views.getNodeVisibility(nodeId, sceneId ?? this.activeSceneId); + return this.scenesService.views.getNodeVisibility(nodeId, this.activeSceneId); } /** @@ -231,7 +231,7 @@ class DualOutputViews extends ViewHandler { * @param sceneId * @returns */ - getIsVerticalVisible(nodeId: string, sceneId?: string) { + getIsVerticalVisible(nodeId: string) { // in the source selector, the vertical node id is determined by the visible display if (!this.hasVerticalNodes) return false; @@ -240,7 +240,7 @@ class DualOutputViews extends ViewHandler { ? nodeId : this.activeSceneNodeMap[nodeId]; - return this.scenesService.views.getNodeVisibility(id, sceneId ?? this.activeSceneId); + return this.scenesService.views.getNodeVisibility(id, this.activeSceneId); } getCanStreamDualOutput() { diff --git a/app/services/scene-collections/scene-collections.ts b/app/services/scene-collections/scene-collections.ts index f06d1f0d5aa5..632d9d6e3415 100644 --- a/app/services/scene-collections/scene-collections.ts +++ b/app/services/scene-collections/scene-collections.ts @@ -515,7 +515,7 @@ export class SceneCollectionsService extends Service implements ISceneCollection } get sceneNodeMaps() { - return this.stateService.sceneNodeMaps; + return this.stateService?.sceneNodeMaps; } /* PRIVATE ----------------------------------------------------- */ diff --git a/app/services/scenes/scenes.ts b/app/services/scenes/scenes.ts index ecabbadf230b..0c19b4d86743 100644 --- a/app/services/scenes/scenes.ts +++ b/app/services/scenes/scenes.ts @@ -14,6 +14,7 @@ import uuid from 'uuid/v4'; import { DualOutputService } from 'services/dual-output'; import { TDisplayType } from 'services/settings-v2/video'; import { InitAfter, ViewHandler } from 'services/core'; +import { SceneCollectionsService } from 'app-services'; export type TSceneNodeModel = ISceneItem | ISceneItemFolder; @@ -169,6 +170,7 @@ export interface ISceneItemFolder extends ISceneItemNode { class ScenesViews extends ViewHandler { @Inject() private scenesService: ScenesService; + @Inject() private sceneCollectionsService: SceneCollectionsService; getScene(sceneId: string): Scene | null { const sceneModel = this.state.scenes[sceneId]; @@ -196,6 +198,11 @@ class ScenesViews extends ViewHandler { return this.state.displayOrder.map(id => this.getScene(id)!); } + // adding this getter here is in preparation for migrating the scene node maps property to the scenes service + get sceneNodeMaps(): { [sceneId: string]: Dictionary } | undefined { + return this.sceneCollectionsService?.sceneNodeMaps; + } + getSceneItems(): SceneItem[] { const sceneItems: SceneItem[] = []; this.scenes.forEach(scene => sceneItems.push(...scene.getItems())); diff --git a/test/helpers/modules/dual-output.ts b/test/helpers/modules/dual-output.ts index a909c97289f2..61752b66fb33 100644 --- a/test/helpers/modules/dual-output.ts +++ b/test/helpers/modules/dual-output.ts @@ -1,5 +1,7 @@ +import { TDisplayType } from 'services/settings-v2'; import { focusChild, click, clickCheckbox, clickButton, clickIfDisplayed } from './core'; import { showSettingsWindow } from './settings/settings'; +import { SceneNode } from 'services/api/external-api/scenes'; /** * Toggle dual output mode @@ -18,10 +20,28 @@ export async function toggleDualOutputMode(closeChildWindow: boolean = true) { /** * Toggle display */ -export async function toggleDisplay(display: 'horizontal' | 'vertical', wait: boolean = false) { +export async function toggleDisplay(display: TDisplayType, wait: boolean = false) { if (wait) { await clickIfDisplayed(`i#${display}-display-toggle`); } else { await click(`i#${display}-display-toggle`); } } + +export function confirmSelectorNodesDisplay(sceneNodes: SceneNode[], display: TDisplayType) { + return sceneNodes.reduce((hasCorrectDisplay: boolean, node: SceneNode) => { + if (node?.display !== display) { + hasCorrectDisplay = false; + } + return hasCorrectDisplay; + }, true); +} + +export function confirmHasDisplaysAssigned(sceneNodes: SceneNode[]) { + return sceneNodes.reduce((hasDisplay: boolean, node: SceneNode) => { + if (!node?.display) { + hasDisplay = false; + } + return hasDisplay; + }, true); +} diff --git a/test/helpers/scene-builder.ts b/test/helpers/scene-builder.ts index db9fbd5ce3c6..b25de46ebc41 100644 --- a/test/helpers/scene-builder.ts +++ b/test/helpers/scene-builder.ts @@ -7,6 +7,7 @@ import { SceneNode, } from '../../app/services/api/external-api/scenes'; import { TSourceType } from '../../app/services/sources'; +import { TDisplayType } from 'services/settings-v2'; interface ISceneBuilderNode { name: string; @@ -14,6 +15,7 @@ interface ISceneBuilderNode { sourceType?: TSourceType; id?: string; children?: ISceneBuilderNode[]; + display?: TDisplayType; } /** @@ -135,10 +137,10 @@ export class SceneBuilder { }; } - build(scetch: string): ISceneBuilderNode[] { + build(sketch: string, display?: TDisplayType): ISceneBuilderNode[] { this.scene.clear(); - const nodes = this.parse(scetch); - return this.buildNodes(nodes); + const nodes = this.parse(sketch); + return this.buildNodes(nodes, display); } isEqualTo(sketch: string): boolean { @@ -161,6 +163,7 @@ export class SceneBuilder { id: sceneNode.id, type: 'folder' as TSceneNodeType, children: this.getSceneSchema(sceneNode.id), + display: sceneNode?.display, }; } if (sceneNode.isItem()) { @@ -168,9 +171,8 @@ export class SceneBuilder { name: sceneNode.name, id: sceneNode.id, type: 'item' as TSceneNodeType, - sourceType: ( - sceneNode as SceneItem - ).getSource().type, + sourceType: (sceneNode as SceneItem).getSource().type, + display: sceneNode?.display, }; } }); @@ -205,7 +207,18 @@ export class SceneBuilder { return sketch; } - private buildNodes(nodes: ISceneBuilderNode[], parentId?: string): ISceneBuilderNode[] { + /** + * Private function to create the scene nodes + * @param nodes - nodes to create + * @param addDefaultDisplay - whether to add a value for the + * @param parentId + * @returns + */ + private buildNodes( + nodes: ISceneBuilderNode[], + display?: TDisplayType | undefined, + parentId?: string, + ): ISceneBuilderNode[] { nodes.reverse().forEach(node => { let sceneNode: SceneNode; @@ -213,13 +226,15 @@ export class SceneBuilder { sceneNode = this.scene.createAndAddSource(node.name, node.sourceType); if (node.sourceType === 'color_source') { - this.scene.getItem(sceneNode.id) - .getSource() - .updateSettings({ width: 400, height: 400 }); + this.scene.getItem(sceneNode.id).getSource().updateSettings({ width: 400, height: 400 }); } } else { sceneNode = this.scene.createFolder(node.name); - if (node.children.length) this.buildNodes(node.children, sceneNode.id); + if (node.children.length) this.buildNodes(node.children, display, sceneNode.id); + } + + if (display) { + node.display = display; } node.id = sceneNode.id; @@ -228,4 +243,44 @@ export class SceneBuilder { return nodes; } + + /** + * The functions below are primarily used for testing dual output + */ + + confirmDualOutputCollection(): boolean { + const nodes = this.getSceneSchema(); + + // if scene node map doesn't exist, return + const activeSceneId = this.scenesService.activeSceneId; + const sceneNodeMaps = this.scenesService?.sceneNodeMaps; + if (!sceneNodeMaps) return false; + + const nodeMap = sceneNodeMaps[activeSceneId]; + if (!nodeMap) return false; + + // confirm all horizontal nodes have a partner vertical node + return nodes.reduce((hasPartner: boolean, node: ISceneBuilderNode) => { + if (node?.display === 'horizontal' && !nodeMap[node.id]) { + hasPartner = false; + } + return hasPartner; + }, true); + } + + confirmVanillaCollection(): boolean { + const nodes = this.getSceneSchema(); + + // if the scene node map exists, return + const sceneNodeMaps = this.scenesService?.sceneNodeMaps; + if (sceneNodeMaps || Object.values(sceneNodeMaps).length > 0) return false; + + // confirm only horizonal nodes exist + return nodes.reduce((onlyHorizontal: boolean, node: ISceneBuilderNode) => { + if (node?.display !== 'horizontal') { + onlyHorizontal = false; + } + return onlyHorizontal; + }, true); + } } diff --git a/test/regular/streaming/dual-output.ts b/test/regular/streaming/dual-output.ts index 331d047113fe..3a3d5ae4a446 100644 --- a/test/regular/streaming/dual-output.ts +++ b/test/regular/streaming/dual-output.ts @@ -4,22 +4,24 @@ import { waitForSettingsWindowLoaded, } from '../../helpers/modules/streaming'; import { - click, clickIfDisplayed, focusChild, focusMain, - hoverElement, isDisplayed, selectElements, - useMainWindow, - waitForText, } from '../../helpers/modules/core'; import { logIn } from '../../helpers/modules/user'; -import { toggleDualOutputMode, toggleDisplay } from '../../helpers/modules/dual-output'; +import { + toggleDualOutputMode, + toggleDisplay, + confirmSelectorNodesDisplay, + confirmHasDisplaysAssigned, +} from '../../helpers/modules/dual-output'; import { getApiClient } from '../../helpers/api-client'; -import { releaseUserInPool, reserveUserFromPool } from '../../helpers/webdriver/user'; import { test, useWebdriver, TExecutionContext } from '../../helpers/webdriver'; import { SceneBuilder } from '../../helpers/scene-builder'; +import { addSource } from '../../helpers/modules/sources'; +import { ScenesService } from 'services/api/external-api/scenes'; useWebdriver(); @@ -32,181 +34,204 @@ test.skip('User must be logged in to use Dual Output', async (t: TExecutionConte t.true(await isDisplayed('form#login-modal', { timeout: 1000 })); }); -test.skip('Dual output checkbox toggles Dual Output mode', async (t: TExecutionContext) => { +test('Dual output checkbox toggles Dual Output mode and duplicates sources', async (t: TExecutionContext) => { await logIn(); + + const sceneBuilder = new SceneBuilder(await getApiClient()); + + await addSource('Color Block', 'Color Source'); + await addSource('Color Block', 'Color Source 2'); + await addSource('Color Block', 'Color Source 3'); + + t.true( + sceneBuilder.isEqualTo( + ` + Color Source 3: + Color Source 2: + Color Source: + `, + ), + ); + + // toggle dual output on and convert dual output scene collection await toggleDualOutputMode(); await focusMain(); // @@@ TODO check for property, not element t.true(await isDisplayed('div#vertical-display')); - + t.true( + sceneBuilder.isEqualTo( + ` + Color Source 3: + Color Source 2: + Color Source: + Color Source 3: + Color Source 2: + Color Source: + `, + ), + ); + + // toggle dual output off, vertical nodes persist await toggleDualOutputMode(); await focusMain(); t.false(await isDisplayed('div#vertical-display')); + t.true( + sceneBuilder.isEqualTo( + ` + Color Source 3: + Color Source 2: + Color Source: + Color Source 3: + Color Source 2: + Color Source: + `, + ), + ); + + // toggle dual output on, nodes do not duplicate + await toggleDualOutputMode(); + t.true( + sceneBuilder.isEqualTo( + ` + Color Source 3: + Color Source 2: + Color Source: + Color Source 3: + Color Source 2: + Color Source: + `, + ), + ); }); -/** - * Dual output displays - */ -test.skip('Dual output elements show on toggle', async (t: TExecutionContext) => { +test('Dual output display toggles show/hides displays and filters sources', async (t: TExecutionContext) => { await logIn(); - await toggleDualOutputMode(); - await focusMain(); - t.true(await isDisplayed('div#vertical-display')); - t.true(await isDisplayed('div#dual-output-header')); - t.true(await isDisplayed('i#horizontal-display-toggle')); - t.true(await isDisplayed('i#vertical-display-toggle')); -}); + const client = await getApiClient(); + const sceneBuilder = new SceneBuilder(client); + + await addSource('Color Block', 'Color Source'); + await addSource('Color Block', 'Color Source 2'); + await addSource('Color Block', 'Color Source 3'); -test.skip('Dual output toggles', async (t: TExecutionContext) => { - await logIn(); await toggleDualOutputMode(); await focusMain(); + t.true(sceneBuilder.confirmDualOutputCollection()); + + const scenesService = client.getResource('ScenesService'); + + let sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + let visibleHorizontalNodes: WebdriverIO.Element[] = []; + let visibleVerticalNodes: WebdriverIO.Element[] = []; + // check permutations of toggling on and off the displays + // toggle horizontal, vertical display active await clickIfDisplayed('i#horizontal-display-toggle'); t.false(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); + // should only show vertical sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(sceneNodes.length, visibleVerticalNodes.length); + t.is(visibleHorizontalNodes.length, 0); + t.is(confirmSelectorNodesDisplay(sceneNodes, 'vertical'), true); + + // toggle vertical, no displays active await toggleDisplay('vertical', true); t.false(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); + // should hide both horizontal and vertical sources in source selector + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(visibleHorizontalNodes.length, 0); + t.is(visibleVerticalNodes.length, 0); + + // toggle horizontal, only horizontal active await toggleDisplay('horizontal'); t.true(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); + // should only show horizontal sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(sceneNodes.length, visibleHorizontalNodes.length); + t.is(visibleVerticalNodes.length, 0); + t.is(confirmSelectorNodesDisplay(sceneNodes, 'horizontal'), true); + + // toggle vertical, both displays active await toggleDisplay('vertical'); t.true(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); + // should show both horizontal and vertical sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(sceneNodes.length, visibleHorizontalNodes.length); + t.is(sceneNodes.length, visibleVerticalNodes.length); + t.is(confirmHasDisplaysAssigned(sceneNodes), true); + + // toggle vertical, only horizontal active await toggleDisplay('vertical'); t.true(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); + // should only show horizontal sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(sceneNodes.length, visibleHorizontalNodes.length); + t.is(visibleVerticalNodes.length, 0); + t.is(confirmSelectorNodesDisplay(sceneNodes, 'horizontal'), true); + + // toggle horizontal, both displays inactive await toggleDisplay('horizontal'); t.false(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); + // should hide both horizontal and vertical sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + + t.is(visibleHorizontalNodes.length, 0); + t.is(visibleVerticalNodes.length, 0); + + // toggle vertical, only vertical active await toggleDisplay('vertical'); t.false(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); - await toggleDisplay('horizontal'); - t.true(await isDisplayed('div#horizontal-display')); - t.true(await isDisplayed('div#vertical-display')); -}); - -test.skip('Dual output toggle tooltip text', async t => { - // @@@ TODO hover selector working by tooltip still not showing - await logIn(); - await toggleDualOutputMode(); - - await useMainWindow(async () => { - await focusMain(); - - await isDisplayed('i#horizontal-display-toggle'); - await isDisplayed('i#horizontal-display-toggle'); - - // check tooltip text changes on hover - await hoverElement('i#horizontal-display-toggle', 50000); - t.true(await isDisplayed('div#toggle-horizontal-tooltip')); - t.true(await waitForText('Hide horizontal display')); - await toggleDisplay('horizontal'); - await hoverElement('i#horizontal-display-toggle', 50000); - t.true(await waitForText('Show horizontal display')); - - await hoverElement('i#vertical-display-toggle', 50000); - t.true(await waitForText('Hide vertical display')); - await toggleDisplay('vertical'); - await hoverElement('i#vertical-display-toggle', 50000); - t.true(await waitForText('Show vertical display')); - }); -}); - -test.skip('Dual output display toggles filter scene items in source selector', async t => { - // @@@ TODO scene items not auto duplicating when toggling + // should only show vertical sources in source selector + sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - /* This is not a perfectly precise assessment of whether the correct nodes are showing in the source selector. - * The more precise check of the data is in the dual output api tests. - */ + t.is(sceneNodes.length, visibleVerticalNodes.length); + t.is(visibleHorizontalNodes.length, 0); + t.is(confirmSelectorNodesDisplay(sceneNodes, 'vertical'), true); - const client = await getApiClient(); - const sceneBuilder = new SceneBuilder(client); - sceneBuilder.build(` - Folder1 - Folder2 - Item1: image - Item2: browser_source - Folder3 - Item3: - `); - - // the number of rows in the source selector should be constant when toggling displays or streaming modes - const numSourceRows = (await selectElements('div[data-role="source"]')).length; - - await logIn(); - await toggleDualOutputMode(); - await focusMain(); - // const sceneBuilder = new SceneBuilder(client); - // sceneBuilder.build(` - // Folder1 - // Folder2 - // Item1: image - // Item2: browser_source - // Folder3 - // Item3: - // `); - - // const numSourceRows = (await selectElements('div[data-role="source"]')).length; - await isDisplayed('i.horizontal-item', { timeout: 10000 }); - await isDisplayed('i.vertical-item', { timeout: 10000 }); - - // in dual output mode with both displays on - // show both horizontal and vertical scene items side by side - t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); - t.true((await selectElements('i.horizontal-item')).length === numSourceRows); - t.true((await selectElements('i.vertical-item')).length === numSourceRows); - - // in dual output mode with the horizontal display off - // show only vertical scene items - await toggleDisplay('horizontal'); - t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); - t.true((await selectElements('i.horizontal-item')).length === 0); - t.true((await selectElements('i.vertical-item')).length === numSourceRows); - - // in dual output mode with both displays off - // show both horizontal and vertical scene items side by side - await toggleDisplay('vertical'); - t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); - t.true((await selectElements('i.horizontal-item')).length === numSourceRows); - t.true((await selectElements('i.vertical-item')).length === numSourceRows); - - // in dual output mode with the vertical display off - // only show horizontal scene items + // toggle horizontal, both displays active await toggleDisplay('horizontal'); - t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); - t.true((await selectElements('i.horizontal-item')).length === numSourceRows); - t.true((await selectElements('i.vertical-item')).length === 0); + t.true(await isDisplayed('div#horizontal-display')); + t.true(await isDisplayed('div#vertical-display')); - // in single output mode, only show horizontal scene items - await toggleDualOutputMode(); - t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); - t.true((await selectElements('i.horizontal-item')).length === 0); - t.true((await selectElements('i.vertical-item')).length === 0); -}); + // should show both horizontal and vertical sources in source selector + visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); + visibleVerticalNodes = await selectElements('i.vertical-source-icon'); -test.skip('Dual output source toggles show/hide scene items in displays', async t => { - // const client = await getApiClient(); - // const dualOutputService = client.getResource('DualOutputService'); - // const horizontalNodeIds = dualOutputService.views.horizontalNodeIds; - // const verticalNodeIds = dualOutputService.views.verticalNodeIds; - // await logIn(); - // await toggleDualOutputMode(t, true); - // await focusMain(); - // data-role="source" - // vertical-item - // horizontal-item + t.is(sceneNodes.length, visibleHorizontalNodes.length); + t.is(sceneNodes.length, visibleVerticalNodes.length); }); // test('Dual output scene item toggles', async t => {}); From 7af918809a3bc291431f05564351b30c33676b90 Mon Sep 17 00:00:00 2001 From: Micheline Wu <69046953+michelinewu@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:59:37 -0500 Subject: [PATCH 20/27] Add dual output conversion dev tool to experimental tools. (#4774) --- .../windows/settings/Experimental.tsx | 94 +++++++++++++++++-- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/app/components-react/windows/settings/Experimental.tsx b/app/components-react/windows/settings/Experimental.tsx index a3c0c43c120f..5433ffaf2559 100644 --- a/app/components-react/windows/settings/Experimental.tsx +++ b/app/components-react/windows/settings/Experimental.tsx @@ -1,11 +1,15 @@ +// Experimental + import React from 'react'; import { Button } from 'antd'; import { ObsSettingsSection } from './ObsSettings'; import { Services } from '../../service-provider'; import { alertAsync } from '../../modals'; +import { CheckCircleOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; +import { $t } from 'services/i18n/index'; export function ExperimentalSettings() { - const { ScenesService, WindowsService } = Services; + const { ScenesService, WindowsService, SceneCollectionsService } = Services; function repairSceneCollection() { ScenesService.repair(); @@ -20,18 +24,94 @@ export function ExperimentalSettings() { }); } + /** + * Convert a dual output scene collection to a vanilla scene collection + * @param assignToHorizontal Boolean for if the vertical sources should be assigned to the + * horizontal display or should be deleted + * @param exportOverlay Boolean for is the scene collection should be exported upon completion + */ + async function convertDualOutputCollection(assignToHorizontal: boolean = false) { + // confirm that the active scene collection is a dual output collection + if ( + !SceneCollectionsService?.sceneNodeMaps || + (SceneCollectionsService?.sceneNodeMaps && + Object.values(SceneCollectionsService?.sceneNodeMaps).length === 0) + ) { + alertAsync({ + icon: , + getContainer: '#mainWrapper', + className: 'react', + title: $t('Invalid Scene Collection'), + content: $t('The active scene collection is not a dual output scene collection.'), + }); + return; + } + + await SceneCollectionsService.actions.return + .convertDualOutputCollection(assignToHorizontal) + .then((message: string) => { + const messageData = JSON.parse(message); + + const className = messageData.error ? 'react convert-error' : 'react convert-success'; + + const icon = messageData.error ? ( + + ) : ( + + ); + + const title = $t(messageData?.title) ?? 'Success'; + + const content = messageData?.content ?? $t('Successfully converted scene collection.'); + + alertAsync({ + icon, + getContainer: '#mainWrapper', + className, + title, + content, + }); + }); + } + return ( -
diff --git a/app/services/platforms/twitter.ts b/app/services/platforms/twitter.ts index 275373953f07..71a83b25d1bd 100644 --- a/app/services/platforms/twitter.ts +++ b/app/services/platforms/twitter.ts @@ -165,7 +165,9 @@ export class TwitterPlatformService } get chatUrl() { - return ''; + const broadcastId = this.state.broadcastId; + if (!broadcastId) return ''; + return `https://twitter.com/i/broadcasts/${broadcastId}/chat`; } @mutation()
+
+

{$t('Repair Scene Collection')}

-
-
-
+
+
+

{$t('Convert Dual Output Scene Collection')}

+ + + {$t( + 'The below will create a copy of the active scene collection, set the copy as the active collection, and then remove all vertical sources.', + )} + +
+

{$t('Convert to Vanilla Scene')}

+ +
+
+

{$t('Assign Vertical Sources to Horizontal Display')}

+ +
+
+
+

{$t('Show Components Library')}

-
-
); From abc88373a962b066f0a5244654a2b6240f4f46be Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Tue, 14 Nov 2023 15:09:17 -0800 Subject: [PATCH 21/27] Revert "Add dual output conversion dev tool to experimental tools. (#4774)" This reverts commit 7af918809a3bc291431f05564351b30c33676b90. --- .../windows/settings/Experimental.tsx | 94 ++----------------- 1 file changed, 7 insertions(+), 87 deletions(-) diff --git a/app/components-react/windows/settings/Experimental.tsx b/app/components-react/windows/settings/Experimental.tsx index 5433ffaf2559..a3c0c43c120f 100644 --- a/app/components-react/windows/settings/Experimental.tsx +++ b/app/components-react/windows/settings/Experimental.tsx @@ -1,15 +1,11 @@ -// Experimental - import React from 'react'; import { Button } from 'antd'; import { ObsSettingsSection } from './ObsSettings'; import { Services } from '../../service-provider'; import { alertAsync } from '../../modals'; -import { CheckCircleOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; -import { $t } from 'services/i18n/index'; export function ExperimentalSettings() { - const { ScenesService, WindowsService, SceneCollectionsService } = Services; + const { ScenesService, WindowsService } = Services; function repairSceneCollection() { ScenesService.repair(); @@ -24,94 +20,18 @@ export function ExperimentalSettings() { }); } - /** - * Convert a dual output scene collection to a vanilla scene collection - * @param assignToHorizontal Boolean for if the vertical sources should be assigned to the - * horizontal display or should be deleted - * @param exportOverlay Boolean for is the scene collection should be exported upon completion - */ - async function convertDualOutputCollection(assignToHorizontal: boolean = false) { - // confirm that the active scene collection is a dual output collection - if ( - !SceneCollectionsService?.sceneNodeMaps || - (SceneCollectionsService?.sceneNodeMaps && - Object.values(SceneCollectionsService?.sceneNodeMaps).length === 0) - ) { - alertAsync({ - icon: , - getContainer: '#mainWrapper', - className: 'react', - title: $t('Invalid Scene Collection'), - content: $t('The active scene collection is not a dual output scene collection.'), - }); - return; - } - - await SceneCollectionsService.actions.return - .convertDualOutputCollection(assignToHorizontal) - .then((message: string) => { - const messageData = JSON.parse(message); - - const className = messageData.error ? 'react convert-error' : 'react convert-success'; - - const icon = messageData.error ? ( - - ) : ( - - ); - - const title = $t(messageData?.title) ?? 'Success'; - - const content = messageData?.content ?? $t('Successfully converted scene collection.'); - - alertAsync({ - icon, - getContainer: '#mainWrapper', - className, - title, - content, - }); - }); - } - return ( -
-

{$t('Repair Scene Collection')}

+
-
-
-

{$t('Convert Dual Output Scene Collection')}

- - - {$t( - 'The below will create a copy of the active scene collection, set the copy as the active collection, and then remove all vertical sources.', - )} - -
-

{$t('Convert to Vanilla Scene')}

- -
-
-

{$t('Assign Vertical Sources to Horizontal Display')}

- -
-
-
-

{$t('Show Components Library')}

+
+
+
+
+
); From f6c509087523192e1ba0e958c6aef49b35767357 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Tue, 14 Nov 2023 15:09:31 -0800 Subject: [PATCH 22/27] Revert "Mw add do tests 2 (#4772)" This reverts commit 2a6a32a9f07aa4d36c3f1af5b9f829b36a0f3cdf. --- .../elements/DualOutputSourceSelector.tsx | 16 +- .../editor/elements/SourceSelector.tsx | 8 +- .../api/external-api/scenes/scene-node.ts | 2 - app/services/api/external-api/scenes/scene.ts | 23 -- .../api/external-api/scenes/scenes.ts | 7 - app/services/dual-output/dual-output.ts | 8 +- .../scene-collections/scene-collections.ts | 2 +- app/services/scenes/scenes.ts | 7 - test/helpers/modules/dual-output.ts | 22 +- test/helpers/scene-builder.ts | 77 +---- test/regular/streaming/dual-output.ts | 287 ++++++++---------- 11 files changed, 163 insertions(+), 296 deletions(-) diff --git a/app/components-react/editor/elements/DualOutputSourceSelector.tsx b/app/components-react/editor/elements/DualOutputSourceSelector.tsx index c9ce70e3482b..2e3257b64a3e 100644 --- a/app/components-react/editor/elements/DualOutputSourceSelector.tsx +++ b/app/components-react/editor/elements/DualOutputSourceSelector.tsx @@ -6,6 +6,7 @@ import { SourceSelectorModule } from './SourceSelector'; interface IDualOutputSourceSelector { nodeId: string; + sceneId?: string; } export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { const { @@ -22,8 +23,11 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { DualOutputService.views.verticalNodeIds && horizontalActive ? DualOutputService.views.activeSceneNodeMap[p.nodeId] : p.nodeId, - isHorizontalVisible: DualOutputService.views.getIsHorizontalVisible(p.nodeId), - isVerticalVisible: DualOutputService.views.getIsVerticalVisible(p.nodeId), + isHorizontalVisible: + !isDualOutputLoading && DualOutputService.views.getIsHorizontalVisible(p.nodeId, p?.sceneId), + isVerticalVisible: + !isDualOutputLoading && DualOutputService.views.getIsVerticalVisible(p.nodeId, p?.sceneId), + isLoading: DualOutputService.views.isLoading && !DualOutputService.views.hasVerticalNodes, })); const showHorizontalToggle = useMemo(() => { @@ -42,9 +46,7 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { toggleVisibility(p.nodeId); makeActive(p.nodeId); }} - className={`${ - v.isHorizontalVisible ? 'icon-desktop' : 'icon-desktop-hide' - } horizontal-source-icon`} + className={v.isHorizontalVisible ? 'icon-desktop' : 'icon-desktop-hide'} /> )} @@ -54,9 +56,7 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { toggleVisibility(v.verticalNodeId); makeActive(v.verticalNodeId); }} - className={`${ - v.isVerticalVisible ? 'icon-phone-case' : 'icon-phone-case-hide' - } vertical-source-icon`} + className={v.isVerticalVisible ? 'icon-phone-case' : 'icon-phone-case-hide'} /> )} diff --git a/app/components-react/editor/elements/SourceSelector.tsx b/app/components-react/editor/elements/SourceSelector.tsx index ef828a2657ba..714315244a14 100644 --- a/app/components-react/editor/elements/SourceSelector.tsx +++ b/app/components-react/editor/elements/SourceSelector.tsx @@ -37,6 +37,7 @@ interface ISourceMetadata { isFolder: boolean; canShowActions: boolean; parentId?: string; + sceneId?: string; toggleAll?: boolean; } @@ -88,6 +89,7 @@ export class SourceSelectorModule { 0, isFolder, toggleAll, @@ -773,6 +776,7 @@ const TreeNode = React.forwardRef( p: { title: string; id: string; + sceneId?: string; isLocked: boolean; isVisible: boolean; isStreamVisible: boolean; @@ -814,7 +818,9 @@ const TreeNode = React.forwardRef( {p.canShowActions && ( <> {p.isGuestCamActive && } - {p.isDualOutputActive && p.hasNodeMap && } + {p.isDualOutputActive && p.hasNodeMap && ( + + )} {p.selectiveRecordingEnabled && ( { - // only return vertical nodes if only the vertical display is active - if (populateWithVerticalNodes && node?.display === 'vertical') { - return node; - } - // return horizontal nodes if either only the horizontal display is active or both displays are active - if (!populateWithVerticalNodes && node?.display === 'horizontal') { - return node; - } - }); - - return nodes; - } } diff --git a/app/services/api/external-api/scenes/scenes.ts b/app/services/api/external-api/scenes/scenes.ts index 49772c21927d..2d339edde8b4 100644 --- a/app/services/api/external-api/scenes/scenes.ts +++ b/app/services/api/external-api/scenes/scenes.ts @@ -189,13 +189,6 @@ export class ScenesService { get activeSceneId(): string { return this.scenesService.views.activeSceneId; } - - /** - * Accessor for the scene node maps for dual output - */ - get sceneNodeMaps(): { [sceneId: string]: Dictionary } { - return this.scenesService.views.sceneNodeMaps; - } } export interface ISceneNodeAddOptions { diff --git a/app/services/dual-output/dual-output.ts b/app/services/dual-output/dual-output.ts index 513affa4ace0..688e9544f486 100644 --- a/app/services/dual-output/dual-output.ts +++ b/app/services/dual-output/dual-output.ts @@ -219,9 +219,9 @@ class DualOutputViews extends ViewHandler { * @param sceneId * @returns */ - getIsHorizontalVisible(nodeId: string) { + getIsHorizontalVisible(nodeId: string, sceneId?: string) { if (!this.hasVerticalNodes) return false; - return this.scenesService.views.getNodeVisibility(nodeId, this.activeSceneId); + return this.scenesService.views.getNodeVisibility(nodeId, sceneId ?? this.activeSceneId); } /** @@ -231,7 +231,7 @@ class DualOutputViews extends ViewHandler { * @param sceneId * @returns */ - getIsVerticalVisible(nodeId: string) { + getIsVerticalVisible(nodeId: string, sceneId?: string) { // in the source selector, the vertical node id is determined by the visible display if (!this.hasVerticalNodes) return false; @@ -240,7 +240,7 @@ class DualOutputViews extends ViewHandler { ? nodeId : this.activeSceneNodeMap[nodeId]; - return this.scenesService.views.getNodeVisibility(id, this.activeSceneId); + return this.scenesService.views.getNodeVisibility(id, sceneId ?? this.activeSceneId); } getCanStreamDualOutput() { diff --git a/app/services/scene-collections/scene-collections.ts b/app/services/scene-collections/scene-collections.ts index 632d9d6e3415..f06d1f0d5aa5 100644 --- a/app/services/scene-collections/scene-collections.ts +++ b/app/services/scene-collections/scene-collections.ts @@ -515,7 +515,7 @@ export class SceneCollectionsService extends Service implements ISceneCollection } get sceneNodeMaps() { - return this.stateService?.sceneNodeMaps; + return this.stateService.sceneNodeMaps; } /* PRIVATE ----------------------------------------------------- */ diff --git a/app/services/scenes/scenes.ts b/app/services/scenes/scenes.ts index 0c19b4d86743..ecabbadf230b 100644 --- a/app/services/scenes/scenes.ts +++ b/app/services/scenes/scenes.ts @@ -14,7 +14,6 @@ import uuid from 'uuid/v4'; import { DualOutputService } from 'services/dual-output'; import { TDisplayType } from 'services/settings-v2/video'; import { InitAfter, ViewHandler } from 'services/core'; -import { SceneCollectionsService } from 'app-services'; export type TSceneNodeModel = ISceneItem | ISceneItemFolder; @@ -170,7 +169,6 @@ export interface ISceneItemFolder extends ISceneItemNode { class ScenesViews extends ViewHandler { @Inject() private scenesService: ScenesService; - @Inject() private sceneCollectionsService: SceneCollectionsService; getScene(sceneId: string): Scene | null { const sceneModel = this.state.scenes[sceneId]; @@ -198,11 +196,6 @@ class ScenesViews extends ViewHandler { return this.state.displayOrder.map(id => this.getScene(id)!); } - // adding this getter here is in preparation for migrating the scene node maps property to the scenes service - get sceneNodeMaps(): { [sceneId: string]: Dictionary } | undefined { - return this.sceneCollectionsService?.sceneNodeMaps; - } - getSceneItems(): SceneItem[] { const sceneItems: SceneItem[] = []; this.scenes.forEach(scene => sceneItems.push(...scene.getItems())); diff --git a/test/helpers/modules/dual-output.ts b/test/helpers/modules/dual-output.ts index 61752b66fb33..a909c97289f2 100644 --- a/test/helpers/modules/dual-output.ts +++ b/test/helpers/modules/dual-output.ts @@ -1,7 +1,5 @@ -import { TDisplayType } from 'services/settings-v2'; import { focusChild, click, clickCheckbox, clickButton, clickIfDisplayed } from './core'; import { showSettingsWindow } from './settings/settings'; -import { SceneNode } from 'services/api/external-api/scenes'; /** * Toggle dual output mode @@ -20,28 +18,10 @@ export async function toggleDualOutputMode(closeChildWindow: boolean = true) { /** * Toggle display */ -export async function toggleDisplay(display: TDisplayType, wait: boolean = false) { +export async function toggleDisplay(display: 'horizontal' | 'vertical', wait: boolean = false) { if (wait) { await clickIfDisplayed(`i#${display}-display-toggle`); } else { await click(`i#${display}-display-toggle`); } } - -export function confirmSelectorNodesDisplay(sceneNodes: SceneNode[], display: TDisplayType) { - return sceneNodes.reduce((hasCorrectDisplay: boolean, node: SceneNode) => { - if (node?.display !== display) { - hasCorrectDisplay = false; - } - return hasCorrectDisplay; - }, true); -} - -export function confirmHasDisplaysAssigned(sceneNodes: SceneNode[]) { - return sceneNodes.reduce((hasDisplay: boolean, node: SceneNode) => { - if (!node?.display) { - hasDisplay = false; - } - return hasDisplay; - }, true); -} diff --git a/test/helpers/scene-builder.ts b/test/helpers/scene-builder.ts index b25de46ebc41..db9fbd5ce3c6 100644 --- a/test/helpers/scene-builder.ts +++ b/test/helpers/scene-builder.ts @@ -7,7 +7,6 @@ import { SceneNode, } from '../../app/services/api/external-api/scenes'; import { TSourceType } from '../../app/services/sources'; -import { TDisplayType } from 'services/settings-v2'; interface ISceneBuilderNode { name: string; @@ -15,7 +14,6 @@ interface ISceneBuilderNode { sourceType?: TSourceType; id?: string; children?: ISceneBuilderNode[]; - display?: TDisplayType; } /** @@ -137,10 +135,10 @@ export class SceneBuilder { }; } - build(sketch: string, display?: TDisplayType): ISceneBuilderNode[] { + build(scetch: string): ISceneBuilderNode[] { this.scene.clear(); - const nodes = this.parse(sketch); - return this.buildNodes(nodes, display); + const nodes = this.parse(scetch); + return this.buildNodes(nodes); } isEqualTo(sketch: string): boolean { @@ -163,7 +161,6 @@ export class SceneBuilder { id: sceneNode.id, type: 'folder' as TSceneNodeType, children: this.getSceneSchema(sceneNode.id), - display: sceneNode?.display, }; } if (sceneNode.isItem()) { @@ -171,8 +168,9 @@ export class SceneBuilder { name: sceneNode.name, id: sceneNode.id, type: 'item' as TSceneNodeType, - sourceType: (sceneNode as SceneItem).getSource().type, - display: sceneNode?.display, + sourceType: ( + sceneNode as SceneItem + ).getSource().type, }; } }); @@ -207,18 +205,7 @@ export class SceneBuilder { return sketch; } - /** - * Private function to create the scene nodes - * @param nodes - nodes to create - * @param addDefaultDisplay - whether to add a value for the - * @param parentId - * @returns - */ - private buildNodes( - nodes: ISceneBuilderNode[], - display?: TDisplayType | undefined, - parentId?: string, - ): ISceneBuilderNode[] { + private buildNodes(nodes: ISceneBuilderNode[], parentId?: string): ISceneBuilderNode[] { nodes.reverse().forEach(node => { let sceneNode: SceneNode; @@ -226,15 +213,13 @@ export class SceneBuilder { sceneNode = this.scene.createAndAddSource(node.name, node.sourceType); if (node.sourceType === 'color_source') { - this.scene.getItem(sceneNode.id).getSource().updateSettings({ width: 400, height: 400 }); + this.scene.getItem(sceneNode.id) + .getSource() + .updateSettings({ width: 400, height: 400 }); } } else { sceneNode = this.scene.createFolder(node.name); - if (node.children.length) this.buildNodes(node.children, display, sceneNode.id); - } - - if (display) { - node.display = display; + if (node.children.length) this.buildNodes(node.children, sceneNode.id); } node.id = sceneNode.id; @@ -243,44 +228,4 @@ export class SceneBuilder { return nodes; } - - /** - * The functions below are primarily used for testing dual output - */ - - confirmDualOutputCollection(): boolean { - const nodes = this.getSceneSchema(); - - // if scene node map doesn't exist, return - const activeSceneId = this.scenesService.activeSceneId; - const sceneNodeMaps = this.scenesService?.sceneNodeMaps; - if (!sceneNodeMaps) return false; - - const nodeMap = sceneNodeMaps[activeSceneId]; - if (!nodeMap) return false; - - // confirm all horizontal nodes have a partner vertical node - return nodes.reduce((hasPartner: boolean, node: ISceneBuilderNode) => { - if (node?.display === 'horizontal' && !nodeMap[node.id]) { - hasPartner = false; - } - return hasPartner; - }, true); - } - - confirmVanillaCollection(): boolean { - const nodes = this.getSceneSchema(); - - // if the scene node map exists, return - const sceneNodeMaps = this.scenesService?.sceneNodeMaps; - if (sceneNodeMaps || Object.values(sceneNodeMaps).length > 0) return false; - - // confirm only horizonal nodes exist - return nodes.reduce((onlyHorizontal: boolean, node: ISceneBuilderNode) => { - if (node?.display !== 'horizontal') { - onlyHorizontal = false; - } - return onlyHorizontal; - }, true); - } } diff --git a/test/regular/streaming/dual-output.ts b/test/regular/streaming/dual-output.ts index 3a3d5ae4a446..331d047113fe 100644 --- a/test/regular/streaming/dual-output.ts +++ b/test/regular/streaming/dual-output.ts @@ -4,24 +4,22 @@ import { waitForSettingsWindowLoaded, } from '../../helpers/modules/streaming'; import { + click, clickIfDisplayed, focusChild, focusMain, + hoverElement, isDisplayed, selectElements, + useMainWindow, + waitForText, } from '../../helpers/modules/core'; import { logIn } from '../../helpers/modules/user'; -import { - toggleDualOutputMode, - toggleDisplay, - confirmSelectorNodesDisplay, - confirmHasDisplaysAssigned, -} from '../../helpers/modules/dual-output'; +import { toggleDualOutputMode, toggleDisplay } from '../../helpers/modules/dual-output'; import { getApiClient } from '../../helpers/api-client'; +import { releaseUserInPool, reserveUserFromPool } from '../../helpers/webdriver/user'; import { test, useWebdriver, TExecutionContext } from '../../helpers/webdriver'; import { SceneBuilder } from '../../helpers/scene-builder'; -import { addSource } from '../../helpers/modules/sources'; -import { ScenesService } from 'services/api/external-api/scenes'; useWebdriver(); @@ -34,204 +32,181 @@ test.skip('User must be logged in to use Dual Output', async (t: TExecutionConte t.true(await isDisplayed('form#login-modal', { timeout: 1000 })); }); -test('Dual output checkbox toggles Dual Output mode and duplicates sources', async (t: TExecutionContext) => { +test.skip('Dual output checkbox toggles Dual Output mode', async (t: TExecutionContext) => { await logIn(); - - const sceneBuilder = new SceneBuilder(await getApiClient()); - - await addSource('Color Block', 'Color Source'); - await addSource('Color Block', 'Color Source 2'); - await addSource('Color Block', 'Color Source 3'); - - t.true( - sceneBuilder.isEqualTo( - ` - Color Source 3: - Color Source 2: - Color Source: - `, - ), - ); - - // toggle dual output on and convert dual output scene collection await toggleDualOutputMode(); await focusMain(); // @@@ TODO check for property, not element t.true(await isDisplayed('div#vertical-display')); - t.true( - sceneBuilder.isEqualTo( - ` - Color Source 3: - Color Source 2: - Color Source: - Color Source 3: - Color Source 2: - Color Source: - `, - ), - ); - - // toggle dual output off, vertical nodes persist + await toggleDualOutputMode(); await focusMain(); t.false(await isDisplayed('div#vertical-display')); - t.true( - sceneBuilder.isEqualTo( - ` - Color Source 3: - Color Source 2: - Color Source: - Color Source 3: - Color Source 2: - Color Source: - `, - ), - ); - - // toggle dual output on, nodes do not duplicate - await toggleDualOutputMode(); - t.true( - sceneBuilder.isEqualTo( - ` - Color Source 3: - Color Source 2: - Color Source: - Color Source 3: - Color Source 2: - Color Source: - `, - ), - ); }); -test('Dual output display toggles show/hides displays and filters sources', async (t: TExecutionContext) => { +/** + * Dual output displays + */ +test.skip('Dual output elements show on toggle', async (t: TExecutionContext) => { await logIn(); - - const client = await getApiClient(); - const sceneBuilder = new SceneBuilder(client); - - await addSource('Color Block', 'Color Source'); - await addSource('Color Block', 'Color Source 2'); - await addSource('Color Block', 'Color Source 3'); - await toggleDualOutputMode(); await focusMain(); - t.true(sceneBuilder.confirmDualOutputCollection()); - - const scenesService = client.getResource('ScenesService'); + t.true(await isDisplayed('div#vertical-display')); + t.true(await isDisplayed('div#dual-output-header')); + t.true(await isDisplayed('i#horizontal-display-toggle')); + t.true(await isDisplayed('i#vertical-display-toggle')); +}); - let sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - let visibleHorizontalNodes: WebdriverIO.Element[] = []; - let visibleVerticalNodes: WebdriverIO.Element[] = []; +test.skip('Dual output toggles', async (t: TExecutionContext) => { + await logIn(); + await toggleDualOutputMode(); + await focusMain(); // check permutations of toggling on and off the displays - // toggle horizontal, vertical display active await clickIfDisplayed('i#horizontal-display-toggle'); t.false(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); - // should only show vertical sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(sceneNodes.length, visibleVerticalNodes.length); - t.is(visibleHorizontalNodes.length, 0); - t.is(confirmSelectorNodesDisplay(sceneNodes, 'vertical'), true); - - // toggle vertical, no displays active await toggleDisplay('vertical', true); t.false(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); - // should hide both horizontal and vertical sources in source selector - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(visibleHorizontalNodes.length, 0); - t.is(visibleVerticalNodes.length, 0); - - // toggle horizontal, only horizontal active await toggleDisplay('horizontal'); t.true(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); - // should only show horizontal sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(sceneNodes.length, visibleHorizontalNodes.length); - t.is(visibleVerticalNodes.length, 0); - t.is(confirmSelectorNodesDisplay(sceneNodes, 'horizontal'), true); - - // toggle vertical, both displays active await toggleDisplay('vertical'); t.true(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); - // should show both horizontal and vertical sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(sceneNodes.length, visibleHorizontalNodes.length); - t.is(sceneNodes.length, visibleVerticalNodes.length); - t.is(confirmHasDisplaysAssigned(sceneNodes), true); - - // toggle vertical, only horizontal active await toggleDisplay('vertical'); t.true(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); - // should only show horizontal sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(sceneNodes.length, visibleHorizontalNodes.length); - t.is(visibleVerticalNodes.length, 0); - t.is(confirmSelectorNodesDisplay(sceneNodes, 'horizontal'), true); - - // toggle horizontal, both displays inactive await toggleDisplay('horizontal'); t.false(await isDisplayed('div#horizontal-display')); t.false(await isDisplayed('div#vertical-display')); - // should hide both horizontal and vertical sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(visibleHorizontalNodes.length, 0); - t.is(visibleVerticalNodes.length, 0); - - // toggle vertical, only vertical active await toggleDisplay('vertical'); t.false(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); - // should only show vertical sources in source selector - sceneNodes = scenesService.activeScene.getSourceSelectorNodes(); - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); - - t.is(sceneNodes.length, visibleVerticalNodes.length); - t.is(visibleHorizontalNodes.length, 0); - t.is(confirmSelectorNodesDisplay(sceneNodes, 'vertical'), true); - - // toggle horizontal, both displays active await toggleDisplay('horizontal'); t.true(await isDisplayed('div#horizontal-display')); t.true(await isDisplayed('div#vertical-display')); +}); + +test.skip('Dual output toggle tooltip text', async t => { + // @@@ TODO hover selector working by tooltip still not showing + await logIn(); + await toggleDualOutputMode(); + + await useMainWindow(async () => { + await focusMain(); + + await isDisplayed('i#horizontal-display-toggle'); + await isDisplayed('i#horizontal-display-toggle'); + + // check tooltip text changes on hover + await hoverElement('i#horizontal-display-toggle', 50000); + t.true(await isDisplayed('div#toggle-horizontal-tooltip')); + t.true(await waitForText('Hide horizontal display')); + await toggleDisplay('horizontal'); + await hoverElement('i#horizontal-display-toggle', 50000); + t.true(await waitForText('Show horizontal display')); + + await hoverElement('i#vertical-display-toggle', 50000); + t.true(await waitForText('Hide vertical display')); + await toggleDisplay('vertical'); + await hoverElement('i#vertical-display-toggle', 50000); + t.true(await waitForText('Show vertical display')); + }); +}); + +test.skip('Dual output display toggles filter scene items in source selector', async t => { + // @@@ TODO scene items not auto duplicating when toggling + + /* This is not a perfectly precise assessment of whether the correct nodes are showing in the source selector. + * The more precise check of the data is in the dual output api tests. + */ - // should show both horizontal and vertical sources in source selector - visibleHorizontalNodes = await selectElements('i.horizontal-source-icon'); - visibleVerticalNodes = await selectElements('i.vertical-source-icon'); + const client = await getApiClient(); + const sceneBuilder = new SceneBuilder(client); + sceneBuilder.build(` + Folder1 + Folder2 + Item1: image + Item2: browser_source + Folder3 + Item3: + `); + + // the number of rows in the source selector should be constant when toggling displays or streaming modes + const numSourceRows = (await selectElements('div[data-role="source"]')).length; + + await logIn(); + await toggleDualOutputMode(); + await focusMain(); + // const sceneBuilder = new SceneBuilder(client); + // sceneBuilder.build(` + // Folder1 + // Folder2 + // Item1: image + // Item2: browser_source + // Folder3 + // Item3: + // `); + + // const numSourceRows = (await selectElements('div[data-role="source"]')).length; + await isDisplayed('i.horizontal-item', { timeout: 10000 }); + await isDisplayed('i.vertical-item', { timeout: 10000 }); + + // in dual output mode with both displays on + // show both horizontal and vertical scene items side by side + t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); + t.true((await selectElements('i.horizontal-item')).length === numSourceRows); + t.true((await selectElements('i.vertical-item')).length === numSourceRows); + + // in dual output mode with the horizontal display off + // show only vertical scene items + await toggleDisplay('horizontal'); + t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); + t.true((await selectElements('i.horizontal-item')).length === 0); + t.true((await selectElements('i.vertical-item')).length === numSourceRows); + + // in dual output mode with both displays off + // show both horizontal and vertical scene items side by side + await toggleDisplay('vertical'); + t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); + t.true((await selectElements('i.horizontal-item')).length === numSourceRows); + t.true((await selectElements('i.vertical-item')).length === numSourceRows); + + // in dual output mode with the vertical display off + // only show horizontal scene items + await toggleDisplay('horizontal'); + t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); + t.true((await selectElements('i.horizontal-item')).length === numSourceRows); + t.true((await selectElements('i.vertical-item')).length === 0); + + // in single output mode, only show horizontal scene items + await toggleDualOutputMode(); + t.true((await selectElements('div[data-role="source"]')).length === numSourceRows); + t.true((await selectElements('i.horizontal-item')).length === 0); + t.true((await selectElements('i.vertical-item')).length === 0); +}); - t.is(sceneNodes.length, visibleHorizontalNodes.length); - t.is(sceneNodes.length, visibleVerticalNodes.length); +test.skip('Dual output source toggles show/hide scene items in displays', async t => { + // const client = await getApiClient(); + // const dualOutputService = client.getResource('DualOutputService'); + // const horizontalNodeIds = dualOutputService.views.horizontalNodeIds; + // const verticalNodeIds = dualOutputService.views.verticalNodeIds; + // await logIn(); + // await toggleDualOutputMode(t, true); + // await focusMain(); + // data-role="source" + // vertical-item + // horizontal-item }); // test('Dual output scene item toggles', async t => {}); From 26ee348f3a748237debe872b465a44f72da3aa08 Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Tue, 14 Nov 2023 15:13:42 -0800 Subject: [PATCH 23/27] Release version 1.15.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bc9b2d2d10f1..36598bf9b1c8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.0-preview.3", + "version": "1.15.0", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From cd7046a326d0b25715ba84a3f75dc554f5d57cf7 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Tue, 14 Nov 2023 16:05:31 -0800 Subject: [PATCH 24/27] Restore dual output loading state. (#4785) Co-authored-by: Micheline Wu <69046953+michelinewu@users.noreply.github.com> --- .../elements/DualOutputSourceSelector.tsx | 6 ++++-- app/services/dual-output/dual-output.ts | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/components-react/editor/elements/DualOutputSourceSelector.tsx b/app/components-react/editor/elements/DualOutputSourceSelector.tsx index 3ab23d9eb530..1796e9a75afb 100644 --- a/app/components-react/editor/elements/DualOutputSourceSelector.tsx +++ b/app/components-react/editor/elements/DualOutputSourceSelector.tsx @@ -20,9 +20,11 @@ export function DualOutputSourceSelector(p: IDualOutputSourceSelector) { ? DualOutputService.views.activeSceneNodeMap[p.nodeId] : p.nodeId, isHorizontalVisible: - !isDualOutputLoading && DualOutputService.views.getIsHorizontalVisible(p.nodeId, p?.sceneId), + !DualOutputService.views.isLoading && + DualOutputService.views.getIsHorizontalVisible(p.nodeId, p?.sceneId), isVerticalVisible: - !isDualOutputLoading && DualOutputService.views.getIsVerticalVisible(p.nodeId, p?.sceneId), + !DualOutputService.views.isLoading && + DualOutputService.views.getIsVerticalVisible(p.nodeId, p?.sceneId), isLoading: DualOutputService.views.isLoading && !DualOutputService.views.hasVerticalNodes, })); diff --git a/app/services/dual-output/dual-output.ts b/app/services/dual-output/dual-output.ts index f8234ffd53ff..47430c71d8fb 100644 --- a/app/services/dual-output/dual-output.ts +++ b/app/services/dual-output/dual-output.ts @@ -38,6 +38,7 @@ interface IDualOutputServiceState { destinationSettings: Dictionary; dualOutputMode: boolean; videoSettings: IDisplayVideoSettings; + isLoading: boolean; } class DualOutputViews extends ViewHandler { @@ -46,6 +47,10 @@ class DualOutputViews extends ViewHandler { @Inject() private sceneCollectionsService: SceneCollectionsService; @Inject() private streamingService: StreamingService; + get isLoading(): boolean { + return this.state.isLoading; + } + get activeSceneId(): string { return this.scenesService.views.activeSceneId; } @@ -291,6 +296,7 @@ export class DualOutputService extends PersistentStatefulService Date: Tue, 14 Nov 2023 16:18:54 -0800 Subject: [PATCH 25/27] Release version 1.15.1-preview.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36598bf9b1c8..a457253720ae 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.0", + "version": "1.15.1-preview.0", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 68cb09285e5ac6f422235ff9ade8005952ff630d Mon Sep 17 00:00:00 2001 From: SLOBS Release Date: Tue, 14 Nov 2023 16:51:53 -0800 Subject: [PATCH 26/27] Release version 1.15.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a457253720ae..36598bf9b1c8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Streamlabs streaming software", "author": "General Workings, Inc.", "license": "GPL-3.0", - "version": "1.15.1-preview.0", + "version": "1.15.0", "main": "main.js", "scripts": { "compile": "yarn clear && yarn compile:updater && yarn webpack-cli --progress --config ./webpack.dev.config.js", From 698c85dc52b22a77f9ef3c04ee9d8cedaaf7fc28 Mon Sep 17 00:00:00 2001 From: Andy Creeth Date: Wed, 15 Nov 2023 10:45:07 -0800 Subject: [PATCH 27/27] add X chat (#4770) --- app/components/LiveDock.vue | 4 ++-- app/services/platforms/twitter.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/components/LiveDock.vue b/app/components/LiveDock.vue index 8931db5b7af1..5e179a8319bf 100644 --- a/app/components/LiveDock.vue +++ b/app/components/LiveDock.vue @@ -84,14 +84,14 @@