From 2c987d291251182bb58ba0c95e238c764f46876a Mon Sep 17 00:00:00 2001 From: watchha <56636928+watchha@users.noreply.github.com> Date: Sat, 21 Nov 2020 18:42:16 +0100 Subject: [PATCH] French translation (#451) * french translation * Update main.cpp * Update main.cpp Co-authored-by: watchha --- app/gui/AppView.qml | 12 +- app/gui/CliQuitStreamSegue.qml | 4 +- app/gui/CliStartStreamSegue.qml | 6 +- app/gui/PcView.qml | 40 +-- app/gui/QuitSegue.qml | 2 +- app/gui/SettingsView.qml | 100 +++--- app/gui/StreamSegue.qml | 12 +- app/gui/main.qml | 40 +-- app/main.cpp | 6 +- app/resources.qrc | 2 + languages/qml_fr.qm | Bin 0 -> 21625 bytes languages/qml_fr.ts | 563 ++++++++++++++++++++++++++++++++ moonlight-qt.pro | 1 + 13 files changed, 679 insertions(+), 109 deletions(-) create mode 100644 languages/qml_fr.qm create mode 100644 languages/qml_fr.ts diff --git a/app/gui/AppView.qml b/app/gui/AppView.qml index 6397f313..67e8ee65 100644 --- a/app/gui/AppView.qml +++ b/app/gui/AppView.qml @@ -115,7 +115,7 @@ CenteredGridView { launchOrResumeSelectedApp() } - ToolTip.text: "Resume Game" + ToolTip.text: qsTr("Resume Game") ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered @@ -143,7 +143,7 @@ CenteredGridView { doQuitGame() } - ToolTip.text: "Quit Game" + ToolTip.text: qsTr("Quit Game") ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered @@ -242,12 +242,12 @@ CenteredGridView { id: appContextMenu NavigableMenuItem { parentMenu: appContextMenu - text: model.running ? "Resume Game" : "Launch Game" + text: model.running ? qsTr("Resume Game") : qsTr("Launch Game") onTriggered: launchOrResumeSelectedApp() } NavigableMenuItem { parentMenu: appContextMenu - text: "Quit Game" + text: qsTr("Quit Game") onTriggered: doQuitGame() visible: model.running } @@ -255,7 +255,7 @@ CenteredGridView { parentMenu: appContextMenu checkable: true checked: model.hidden - text: "Hide Game" + text: qsTr("Hide Game") onTriggered: appModel.setAppHidden(model.index, !model.hidden) visible: !model.running || model.hidden } @@ -268,7 +268,7 @@ CenteredGridView { property bool segueToStream : false property string nextAppName: "" property int nextAppIndex: 0 - text:"Are you sure you want to quit " + appName +"? Any unsaved progress will be lost." + text:qsTr("Are you sure you want to quit " + appName +"? Any unsaved progress will be lost.") standardButtons: Dialog.Yes | Dialog.No function quitApp() { diff --git a/app/gui/CliQuitStreamSegue.qml b/app/gui/CliQuitStreamSegue.qml index 27e03974..2a964fe0 100644 --- a/app/gui/CliQuitStreamSegue.qml +++ b/app/gui/CliQuitStreamSegue.qml @@ -6,11 +6,11 @@ import Session 1.0 Item { function onSearchingComputer() { - stageLabel.text = "Establishing connection to PC..." + stageLabel.text = qsTr("Establishing connection to PC...") } function onQuittingApp() { - stageLabel.text = "Quitting app..." + stageLabel.text = qsTr("Quitting app...") } function onFailure(message) { diff --git a/app/gui/CliStartStreamSegue.qml b/app/gui/CliStartStreamSegue.qml index 9f0570b6..ce796b02 100644 --- a/app/gui/CliStartStreamSegue.qml +++ b/app/gui/CliStartStreamSegue.qml @@ -6,11 +6,11 @@ import SdlGamepadKeyNavigation 1.0 Item { function onSearchingComputer() { - stageLabel.text = "Establishing connection to PC..." + stageLabel.text = qsTr("Establishing connection to PC...") } function onSearchingApp() { - stageLabel.text = "Loading app list..." + stageLabel.text = qsTr("Loading app list...") } function onSessionCreated(appName, session) { @@ -78,7 +78,7 @@ Item { NavigableMessageDialog { id: quitAppDialog - text:"Are you sure you want to quit " + appName +"? Any unsaved progress will be lost." + text:qsTr("Are you sure you want to quit " + appName +"? Any unsaved progress will be lost.") standardButtons: Dialog.Yes | Dialog.No property string appName : "" diff --git a/app/gui/PcView.qml b/app/gui/PcView.qml index af5fddf9..314f80a4 100644 --- a/app/gui/PcView.qml +++ b/app/gui/PcView.qml @@ -17,7 +17,7 @@ CenteredGridView { topMargin: 20 bottomMargin: 5 cellWidth: 310; cellHeight: 330; - objectName: "Computers" + objectName: qsTr("Computers") Component.onCompleted: { // Don't show any highlighted item until interacting with them. @@ -64,13 +64,13 @@ CenteredGridView { function addComplete(success, detectedPortBlocking) { if (!success) { - errorDialog.text = "Unable to connect to the specified PC." + errorDialog.text = qsTr("Unable to connect to the specified PC.") if (detectedPortBlocking) { - errorDialog.text += "\n\nThis PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network." + errorDialog.text += qsTr("\n\nThis PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network.") } else { - errorDialog.helpText = "Click the Help button for possible solutions." + errorDialog.helpText = qsTr("Click the Help button for possible solutions.") } errorDialog.open() @@ -99,8 +99,8 @@ CenteredGridView { Label { height: searchSpinner.height elide: Label.ElideRight - text: StreamingPreferences.enableMdns ? "Searching for PCs with NVIDIA GameStream enabled..." - : "Automatic PC discovery is disabled. Add your PC manually." + text: StreamingPreferences.enableMdns ? qsTr("Searching for PCs with NVIDIA GameStream enabled...") + : qsTr("Automatic PC discovery is disabled. Add your PC manually.") font.pointSize: 20 verticalAlignment: Text.AlignVCenter wrapMode: Text.Wrap @@ -164,7 +164,7 @@ CenteredGridView { id: pcContextMenu NavigableMenuItem { parentMenu: pcContextMenu - text: "View Apps" + text: qsTr("View Apps") onTriggered: { var component = Qt.createComponent("AppView.qml") var appView = component.createObject(stackView, {"computerIndex": index, "objectName": model.name}) @@ -174,7 +174,7 @@ CenteredGridView { } NavigableMenuItem { parentMenu: pcContextMenu - text: "View Hidden Apps" + text: qsTr("View Hidden Apps") onTriggered: { var component = Qt.createComponent("AppView.qml") var appView = component.createObject(stackView, {"computerIndex": index, "objectName": model.name, "showHiddenGames": true}) @@ -184,13 +184,13 @@ CenteredGridView { } NavigableMenuItem { parentMenu: pcContextMenu - text: "Wake PC" + text: qsTr("Wake PC") onTriggered: computerModel.wakeComputer(index) visible: !model.online && model.wakeable } NavigableMenuItem { parentMenu: pcContextMenu - text: "Test Network" + text: qsTr("Test Network") onTriggered: { computerModel.testConnectionForComputer(index) testConnectionDialog.open() @@ -199,7 +199,7 @@ CenteredGridView { NavigableMenuItem { parentMenu: pcContextMenu - text: "Rename PC" + text: qsTr("Rename PC") onTriggered: { renamePcDialog.pcIndex = index renamePcDialog.originalName = model.name @@ -208,7 +208,7 @@ CenteredGridView { } NavigableMenuItem { parentMenu: pcContextMenu - text: "Delete PC" + text: qsTr("Delete PC") onTriggered: { deletePcDialog.pcIndex = index // get confirmation first, actual closing is called from the dialog @@ -238,7 +238,7 @@ CenteredGridView { } else { // cannot pair while something is streaming or attempting to pair - errorDialog.text = "You cannot pair while a previous session is still running on the host PC. Quit any running games or reboot the host PC, then try pairing again." + errorDialog.text = qsTr("You cannot pair while a previous session is still running on the host PC. Quit any running games or reboot the host PC, then try pairing again.") errorDialog.helpText = "" errorDialog.open() } @@ -293,7 +293,7 @@ CenteredGridView { // don't allow edits to the rest of the window while open property string pin : "0000" - text:"Please enter " + pin + " on your GameStream PC. This dialog will close when pairing is completed." + text:qsTr("Please enter " + pin + " on your GameStream PC. This dialog will close when pairing is completed.") standardButtons: Dialog.Cancel onRejected: { // FIXME: We should interrupt pairing here @@ -304,7 +304,7 @@ CenteredGridView { id: deletePcDialog // don't allow edits to the rest of the window while open property int pcIndex : -1; - text:"Are you sure you want to remove this PC?" + text:qsTr("Are you sure you want to remove this PC?") standardButtons: Dialog.Yes | Dialog.No function deletePc() { @@ -321,22 +321,22 @@ CenteredGridView { standardButtons: Dialog.Ok onAboutToShow: { - testConnectionDialog.text = "Moonlight is testing your network connection to determine if NVIDIA GameStream is blocked.\n\nThis may take a few seconds…" + testConnectionDialog.text = qsTr("Moonlight is testing your network connection to determine if NVIDIA GameStream is blocked.\n\nThis may take a few seconds…") showSpinner = true } function connectionTestComplete(result, blockedPorts) { if (result === -1) { - text = "The network test could not be performed because none of Moonlight's connection testing servers were reachable from this PC. Check your Internet connection or try again later." + text = qsTr("The network test could not be performed because none of Moonlight's connection testing servers were reachable from this PC. Check your Internet connection or try again later.") imageSrc = "qrc:/res/baseline-warning-24px.svg" } else if (result === 0) { - text = "This network does not appear to be blocking Moonlight. If you still have trouble connecting, check your PC's firewall settings.\n\nIf you are trying to stream over the Internet, install the Moonlight Internet Hosting Tool on your gaming PC and run the included Internet Streaming Tester to check your gaming PC's Internet connection." + text = qsTr("This network does not appear to be blocking Moonlight. If you still have trouble connecting, check your PC's firewall settings.\n\nIf you are trying to stream over the Internet, install the Moonlight Internet Hosting Tool on your gaming PC and run the included Internet Streaming Tester to check your gaming PC's Internet connection.") imageSrc = "qrc:/res/baseline-check_circle_outline-24px.svg" } else { - text = "Your PC's current network connection seems to be blocking Moonlight. Streaming over the Internet may not work while connected to this network.\n\nThe following network ports were blocked:\n" + text = qsTr("Your PC's current network connection seems to be blocking Moonlight. Streaming over the Internet may not work while connected to this network.\n\nThe following network ports were blocked:\n") text += blockedPorts imageSrc = "qrc:/res/baseline-error_outline-24px.svg" } @@ -348,7 +348,7 @@ CenteredGridView { NavigableDialog { id: renamePcDialog - property string label: "Enter the new name for this PC:" + property string label: qsTr("Enter the new name for this PC:") property string originalName property int pcIndex : -1; diff --git a/app/gui/QuitSegue.qml b/app/gui/QuitSegue.qml index 068a5760..4896fe37 100644 --- a/app/gui/QuitSegue.qml +++ b/app/gui/QuitSegue.qml @@ -9,7 +9,7 @@ Item { property Session nextSession : null property string nextAppName : "" - property string stageText : "Quitting " + appName + "..." + property string stageText : qsTr("Quitting " + appName + "...") function quitAppCompleted(error) { diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 7f7f3ae6..a0c80f2b 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -8,7 +8,7 @@ import SystemProperties 1.0 Flickable { id: settingsPage - objectName: "Settings" + objectName: qsTr("Settings") boundsBehavior: Flickable.OvershootBounds @@ -50,7 +50,7 @@ Flickable { id: basicSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "Basic Settings" + title: qsTr("Basic Settings") font.pointSize: 12 Column { @@ -215,16 +215,16 @@ Flickable { var max_fps = SystemProperties.maximumStreamingFrameRate // Default entries - fpsListModel.append({"text": "30 FPS", "video_fps": "30"}) - fpsListModel.append({"text": "60 FPS", "video_fps": "60"}) + fpsListModel.append({"text": qsTr("30 FPS"), "video_fps": "30"}) + fpsListModel.append({"text": qsTr("60 FPS"), "video_fps": "60"}) // Add unsupported FPS values that come before the display max FPS if (StreamingPreferences.unsupportedFps) { if (max_fps > 90) { - fpsListModel.append({"text": "90 FPS (Unsupported)", "video_fps": "90"}) + fpsListModel.append({"text": qsTr("90 FPS (Unsupported)"), "video_fps": "90"}) } if (max_fps > 120) { - fpsListModel.append({"text": "120 FPS (Unsupported)", "video_fps": "120"}) + fpsListModel.append({"text": qsTr("120 FPS (Unsupported)"), "video_fps": "120"}) } } @@ -233,7 +233,7 @@ Flickable { if (max_fps > 64) { // Mark any FPS value greater than 120 as unsupported if (StreamingPreferences.unsupportedFps && max_fps > 120) { - fpsListModel.append({"text": max_fps+" FPS (Unsupported)", "video_fps": ""+max_fps}) + fpsListModel.append({"text": max_fps+qsTr(" FPS (Unsupported)"), "video_fps": ""+max_fps}) } else if (max_fps > 120) { fpsListModel.append({"text": "120 FPS", "video_fps": "120"}) @@ -246,10 +246,10 @@ Flickable { // Add unsupported FPS values that come after the display max FPS if (StreamingPreferences.unsupportedFps) { if (max_fps < 90) { - fpsListModel.append({"text": "90 FPS (Unsupported)", "video_fps": "90"}) + fpsListModel.append({"text":qsTr( "90 FPS (Unsupported)"), "video_fps": "90"}) } if (max_fps < 120) { - fpsListModel.append({"text": "120 FPS (Unsupported)", "video_fps": "120"}) + fpsListModel.append({"text":qsTr( "120 FPS (Unsupported)"), "video_fps": "120"}) } } @@ -328,7 +328,7 @@ Flickable { width: Math.min(bitrateDesc.implicitWidth, parent.width) onValueChanged: { - bitrateTitle.text = "Video bitrate: " + (value / 1000.0) + " Mbps" + bitrateTitle.text = qsTr("Video bitrate: " + (value / 1000.0) + " Mbps") StreamingPreferences.bitrateKbps = value } } @@ -348,7 +348,7 @@ Flickable { for (var i = 0; i < windowModeListModel.count; i++) { var thisWm = windowModeListModel.get(i).val; if (thisWm === StreamingPreferences.recommendedFullScreenMode) { - windowModeListModel.get(i).text += " (Recommended)" + windowModeListModel.get(i).text += qsTr(" (Recommended)") windowModeListModel.move(i, 0, 1); break } @@ -377,15 +377,15 @@ Flickable { model: ListModel { id: windowModeListModel ListElement { - text: "Full-screen" + text: qsTr("Full-screen") val: StreamingPreferences.WM_FULLSCREEN } ListElement { - text: "Borderless windowed" + text: qsTr("Borderless windowed") val: StreamingPreferences.WM_FULLSCREEN_DESKTOP } ListElement { - text: "Windowed" + text: qsTr("Windowed") val: StreamingPreferences.WM_WINDOWED } } @@ -396,7 +396,7 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "Full-screen generally provides the best performance, but borderless windowed may work better with features like macOS Spaces, Alt+Tab, screenshot tools, on-screen overlays, etc." + ToolTip.text: qsTr("Full-screen generally provides the best performance, but borderless windowed may work better with features like macOS Spaces, Alt+Tab, screenshot tools, on-screen overlays, etc.") } CheckBox { @@ -413,14 +413,14 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "Disabling V-Sync allows sub-frame rendering latency, but it can display visible tearing" + ToolTip.text: qsTr("Disabling V-Sync allows sub-frame rendering latency, but it can display visible tearing") } CheckBox { id: framePacingCheck width: parent.width hoverEnabled: true - text: "Frame pacing" + text: qsTr("Frame pacing") font.pointSize: 12 enabled: StreamingPreferences.enableVsync checked: StreamingPreferences.enableVsync && StreamingPreferences.framePacing @@ -430,7 +430,7 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "Frame pacing reduces micro-stutter by delaying frames that come in too early" + ToolTip.text: qsTr("Frame pacing reduces micro-stutter by delaying frames that come in too early") } } } @@ -440,7 +440,7 @@ Flickable { id: audioSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "Audio Settings" + title: qsTr("Audio Settings") font.pointSize: 12 Column { @@ -500,7 +500,7 @@ Flickable { id: uiSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "UI Settings" + title: qsTr("UI Settings") font.pointSize: 12 Column { @@ -510,7 +510,7 @@ Flickable { CheckBox { id: startMaximizedCheck width: parent.width - text: "Maximize Moonlight window on startup" + text: qsTr("Maximize Moonlight window on startup") font.pointSize: 12 enabled: SystemProperties.hasWindowManager checked: !StreamingPreferences.startWindowed || !SystemProperties.hasWindowManager @@ -522,7 +522,7 @@ Flickable { CheckBox { id: connectionWarningsCheck width: parent.width - text: "Show connection quality warnings" + text: qsTr("Show connection quality warnings") font.pointSize: 12 checked: StreamingPreferences.connectionWarnings onCheckedChanged: { @@ -534,7 +534,7 @@ Flickable { visible: SystemProperties.hasDiscordIntegration id: discordPresenceCheck width: parent.width - text: "Discord Rich Presence integration" + text: qsTr("Discord Rich Presence integration") font.pointSize: 12 checked: StreamingPreferences.richPresence onCheckedChanged: { @@ -544,7 +544,7 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "Updates your Discord status to display the name of the game you're streaming." + ToolTip.text: qsTr("Updates your Discord status to display the name of the game you're streaming.") } } } @@ -562,7 +562,7 @@ Flickable { id: gamepadSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "Input Settings" + title: qsTr("Input Settings") font.pointSize: 12 Column { @@ -572,7 +572,7 @@ Flickable { CheckBox { id: singleControllerCheck width: parent.width - text: "Force gamepad #1 always present" + text: qsTr("Force gamepad #1 always present") font.pointSize: 12 checked: !StreamingPreferences.multiController onCheckedChanged: { @@ -582,15 +582,15 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.\n" + - "Only enable this option when streaming a game that doesn't support gamepads being connected after startup." + ToolTip.text: qsTr("Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.\n") + + qsTr("Only enable this option when streaming a game that doesn't support gamepads being connected after startup.") } CheckBox { id: absoluteMouseCheck hoverEnabled: true width: parent.width - text: "Optimize mouse for remote desktop instead of games" + text: qsTr("Optimize mouse for remote desktop instead of games") font.pointSize: 12 enabled: SystemProperties.hasWindowManager checked: StreamingPreferences.absoluteMouseMode && SystemProperties.hasWindowManager @@ -601,15 +601,15 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "This enables mouse control without capturing the client's mouse cursor. It will not work in most games.\n - You can toggle this while streaming using Ctrl+Alt+Shift+M." + ToolTip.text: qsTr("This enables mouse control without capturing the client's mouse cursor. It will not work in most games.\n + You can toggle this while streaming using Ctrl+Alt+Shift+M.") } CheckBox { id: absoluteTouchCheck hoverEnabled: true width: parent.width - text: "Use touchscreen as a trackpad" + text: qsTr("Use touchscreen as a trackpad") font.pointSize: 12 checked: !StreamingPreferences.absoluteTouchMode onCheckedChanged: { @@ -619,14 +619,14 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer." + ToolTip.text: qsTr("When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.") } CheckBox { id: gamepadMouseCheck hoverEnabled: true width: parent.width - text: "Gamepad mouse mode support" + text: qsTr("Gamepad mouse mode support") font.pointSize: 12 checked: StreamingPreferences.gamepadMouse onCheckedChanged: { @@ -636,14 +636,14 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "When enabled, holding the Start button will toggle mouse mode" + ToolTip.text: qsTr("When enabled, holding the Start button will toggle mouse mode") } CheckBox { id: swapMouseButtonsCheck hoverEnabled: true width: parent.width - text: "Swap mouse buttons" + text: qsTr("Swap mouse buttons") font.pointSize: 12 checked: StreamingPreferences.swapMouseButtons onCheckedChanged: { @@ -653,7 +653,7 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "When checked, swap the left and right mouse buttons" + ToolTip.text: qsTr("When checked, swap the left and right mouse buttons") } } } @@ -662,7 +662,7 @@ Flickable { id: hostSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "Host Settings" + title: qsTr("Host Settings") font.pointSize: 12 Column { @@ -672,7 +672,7 @@ Flickable { CheckBox { id: optimizeGameSettingsCheck width: parent.width - text: "Optimize game settings for streaming" + text: qsTr("Optimize game settings for streaming") font.pointSize: 12 checked: StreamingPreferences.gameOptimizations onCheckedChanged: { @@ -683,7 +683,7 @@ Flickable { CheckBox { id: audioPcCheck width: parent.width - text: "Play audio on host PC" + text: qsTr("Play audio on host PC") font.pointSize: 12 checked: StreamingPreferences.playAudioOnHost onCheckedChanged: { @@ -694,7 +694,7 @@ Flickable { CheckBox { id: quitAppAfter width: parent.width - text: "Quit app on host PC after ending stream" + text: qsTr("Quit app on host PC after ending stream") font.pointSize: 12 checked: StreamingPreferences.quitAppAfter onCheckedChanged: { @@ -704,7 +704,7 @@ Flickable { ToolTip.delay: 1000 ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!" + ToolTip.text: qsTr("This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!") } } } @@ -713,7 +713,7 @@ Flickable { id: advancedSettingsGroupBox width: (parent.width - (parent.leftPadding + parent.rightPadding)) padding: 12 - title: "Advanced Settings" + title: qsTr("Advanced Settings") font.pointSize: 12 Column { @@ -748,15 +748,15 @@ Flickable { model: ListModel { id: decoderListModel ListElement { - text: "Automatic (Recommended)" + text: qsTr("Automatic (Recommended)") val: StreamingPreferences.VDS_AUTO } ListElement { - text: "Force software decoding" + text: qsTr("Force software decoding") val: StreamingPreferences.VDS_FORCE_SOFTWARE } ListElement { - text: "Force hardware decoding" + text: qsTr("Force hardware decoding") val: StreamingPreferences.VDS_FORCE_HARDWARE } } @@ -794,7 +794,7 @@ Flickable { model: ListModel { id: codecListModel ListElement { - text: "Automatic (Recommended)" + text: qsTr("Automatic (Recommended)") val: StreamingPreferences.VCC_AUTO } ListElement { @@ -819,7 +819,7 @@ Flickable { CheckBox { id: unlockUnsupportedFps width: parent.width - text: "Unlock unsupported FPS options" + text: qsTr("Unlock unsupported FPS options") font.pointSize: 12 checked: StreamingPreferences.unsupportedFps onCheckedChanged: { @@ -838,7 +838,7 @@ Flickable { CheckBox { id: enableMdns width: parent.width - text: "Automatically find PCs on the local network (Recommended)" + text: qsTr("Automatically find PCs on the local network (Recommended)") font.pointSize: 12 checked: StreamingPreferences.enableMdns onCheckedChanged: { @@ -863,7 +863,7 @@ Flickable { CheckBox { id: detectNetworkBlocking width: parent.width - text: "Automatically detect blocked connections (Recommended)" + text: qsTr("Automatically detect blocked connections (Recommended)") font.pointSize: 12 checked: StreamingPreferences.detectNetworkBlocking onCheckedChanged: { diff --git a/app/gui/StreamSegue.qml b/app/gui/StreamSegue.qml index 47a8155b..784094af 100644 --- a/app/gui/StreamSegue.qml +++ b/app/gui/StreamSegue.qml @@ -8,19 +8,19 @@ import Session 1.0 Item { property Session session property string appName - property string stageText : "Starting " + appName + "..." + property string stageText : qsTr("Starting " + appName + "...") property bool quitAfter : false function stageStarting(stage) { // Update the spinner text - stageText = "Starting " + stage + "..." + stageText = qsTr("Starting " + stage + "...") } function stageFailed(stage, errorCode) { // Display the error dialog after Session::exec() returns - streamSegueErrorDialog.text = "Starting " + stage + " failed: Error " + errorCode + streamSegueErrorDialog.text = qsTr("Starting " + stage + " failed: Error " + errorCode) } function connectionStarted() @@ -65,7 +65,7 @@ Item { function sessionFinished(portTestResult) { if (portTestResult !== 0 && portTestResult !== -1 && streamSegueErrorDialog.text) { - streamSegueErrorDialog.text += "\n\nThis PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network." + streamSegueErrorDialog.text += qsTr("\n\nThis PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network.") } // Enable GUI gamepad usage now @@ -148,8 +148,8 @@ Item { // with Session.exec() which requires no concurrent // gamepad usage. hintText.text = SdlGamepadKeyNavigation.getConnectedGamepads() > 0 ? - "Tip: Press Start+Select+L1+R1 to disconnect your session" : - "Tip: Press Ctrl+Alt+Shift+Q to disconnect your session" + qsTr("Tip: Press Start+Select+L1+R1 to disconnect your session") : + qsTr("Tip: Press Ctrl+Alt+Shift+Q to disconnect your session") // Stop GUI gamepad usage now SdlGamepadKeyNavigation.disable() diff --git a/app/gui/main.qml b/app/gui/main.qml index 12d73066..0b8492aa 100644 --- a/app/gui/main.qml +++ b/app/gui/main.qml @@ -223,7 +223,7 @@ ApplicationWindow { Label { id: versionLabel - visible: stackView.currentItem.objectName === "Settings" + visible: stackView.currentItem.objectName === qsTr("Settings") text: "Version " + SystemProperties.versionString font.pointSize: 12 horizontalAlignment: Qt.AlignRight @@ -233,14 +233,14 @@ ApplicationWindow { NavigableToolButton { id: discordButton visible: SystemProperties.hasBrowser && - stackView.currentItem.objectName === "Settings" + stackView.currentItem.objectName === qsTr("Settings") iconSource: "qrc:/res/Discord-Logo-White.svg" ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "Join our community on Discord" + ToolTip.text: qsTr("Join our community on Discord") // TODO need to make sure browser is brought to foreground. onClicked: Qt.openUrlExternally("https://moonlight-stream.org/discord"); @@ -252,14 +252,14 @@ ApplicationWindow { NavigableToolButton { id: addPcButton - visible: stackView.currentItem.objectName === "Computers" + visible: stackView.currentItem.objectName === qsTr("Computers") iconSource: "qrc:/res/ic_add_to_queue_white_48px.svg" ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "Add PC manually" + (newPcShortcut.nativeText ? (" ("+newPcShortcut.nativeText+")") : "") + ToolTip.text: qsTr("Add PC manually") + (newPcShortcut.nativeText ? (" ("+newPcShortcut.nativeText+")") : "") Shortcut { id: newPcShortcut @@ -299,7 +299,7 @@ ApplicationWindow { function updateAvailable(version, url) { - ToolTip.text = "Update available for Moonlight: Version " + version + ToolTip.text = qsTr("Update available for Moonlight: Version ") + version updateButton.browserUrl = url updateButton.visible = true } @@ -323,7 +323,7 @@ ApplicationWindow { ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "Help" + (helpShortcut.nativeText ? (" ("+helpShortcut.nativeText+")") : "") + ToolTip.text: qsTr("Help") + (helpShortcut.nativeText ? (" ("+helpShortcut.nativeText+")") : "") Shortcut { id: helpShortcut @@ -362,7 +362,7 @@ ApplicationWindow { iconSource: "qrc:/res/settings.svg" - onClicked: navigateTo("qrc:/gui/SettingsView.qml", "Settings") + onClicked: navigateTo("qrc:/gui/SettingsView.qml", qsTr("Settings")) Keys.onDownPressed: { stackView.currentItem.forceActiveFocus(Qt.TabFocus) @@ -377,31 +377,31 @@ ApplicationWindow { ToolTip.delay: 1000 ToolTip.timeout: 3000 ToolTip.visible: hovered - ToolTip.text: "Settings" + (settingsShortcut.nativeText ? (" ("+settingsShortcut.nativeText+")") : "") + ToolTip.text: qsTr("Settings") + (settingsShortcut.nativeText ? (" ("+settingsShortcut.nativeText+")") : "") } } } ErrorMessageDialog { id: noHwDecoderDialog - text: "No functioning hardware accelerated H.264 video decoder was detected by Moonlight. " + - "Your streaming performance may be severely degraded in this configuration." - helpText: "Click the Help button for more information on solving this problem." + text: qsTr("No functioning hardware accelerated H.264 video decoder was detected by Moonlight. ") + + qsTr("Your streaming performance may be severely degraded in this configuration.") + helpText: qsTr("Click the Help button for more information on solving this problem.") helpUrl: "https://github.com/moonlight-stream/moonlight-docs/wiki/Fixing-Hardware-Decoding-Problems" } ErrorMessageDialog { id: xWaylandDialog - text: "Hardware acceleration doesn't work on XWayland. Continuing on XWayland may result in poor streaming performance. " + - "Try running with QT_QPA_PLATFORM=wayland or switch to X11." - helpText: "Click the Help button for more information." + text: qsTr("Hardware acceleration doesn't work on XWayland. Continuing on XWayland may result in poor streaming performance. ") + + qsTr("Try running with QT_QPA_PLATFORM=wayland or switch to X11.") + helpText: qsTr("Click the Help button for more information.") helpUrl: "https://github.com/moonlight-stream/moonlight-docs/wiki/Fixing-Hardware-Decoding-Problems" } NavigableMessageDialog { id: wow64Dialog standardButtons: Dialog.Ok | Dialog.Cancel - text: "This PC is running a 64-bit version of Windows. Please download the x64 version of Moonlight for the best streaming performance." + text: qsTr("This PC is running a 64-bit version of Windows. Please download the x64 version of Moonlight for the best streaming performance.") onAccepted: { Qt.openUrlExternally("https://github.com/moonlight-stream/moonlight-qt/releases"); } @@ -410,9 +410,9 @@ ApplicationWindow { ErrorMessageDialog { id: unmappedGamepadDialog property string unmappedGamepads : "" - text: "Moonlight detected gamepads without a mapping:\n" + unmappedGamepads + text: qsTr("Moonlight detected gamepads without a mapping:\n") + unmappedGamepads helpTextSeparator: "\n\n" - helpText: "Click the Help button for information on how to map your gamepads." + helpText: qsTr("Click the Help button for information on how to map your gamepads.") helpUrl: "https://github.com/moonlight-stream/moonlight-docs/wiki/Gamepad-Mapping" } @@ -420,7 +420,7 @@ ApplicationWindow { NavigableMessageDialog { id: quitConfirmationDialog standardButtons: Dialog.Yes | Dialog.No - text: "Are you sure you want to quit?" + text: qsTr("Are you sure you want to quit?") // For keyboard/gamepad navigation onAccepted: Qt.quit() } @@ -450,7 +450,7 @@ ApplicationWindow { NavigableDialog { id: addPcDialog - property string label: "Enter the IP address of your GameStream PC:" + property string label: qsTr("Enter the IP address of your GameStream PC:") standardButtons: Dialog.Ok | Dialog.Cancel diff --git a/app/main.cpp b/app/main.cpp index 326c8988..8e2c7769 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -11,6 +11,7 @@ #include #include #include +#include // Don't let SDL hook our main function, since Qt is already // doing the same thing. This needs to be before any headers @@ -419,6 +420,10 @@ int main(int argc, char *argv[]) QGuiApplication app(argc, argv); + QTranslator translator; + qDebug() <<"loaded: " <res/baseline-error_outline-24px.svg res/baseline-check_circle_outline-24px.svg res/Discord-Logo-White.svg + ../languages/qml_fr.ts + ../languages/qml_fr.qm SDL_GameControllerDB/gamecontrollerdb.txt diff --git a/languages/qml_fr.qm b/languages/qml_fr.qm new file mode 100644 index 0000000000000000000000000000000000000000..9de44f6b5235e60142fbb4d3a270e298707dd9b5 GIT binary patch literal 21625 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 literal 0 HcmV?d00001 diff --git a/languages/qml_fr.ts b/languages/qml_fr.ts new file mode 100644 index 00000000..df6aa473 --- /dev/null +++ b/languages/qml_fr.ts @@ -0,0 +1,563 @@ + + + + + AppView + + + + Resume Game + Reprendre le jeu + + + + + Quit Game + Quitter le jeu + + + + Launch Game + Lancer le jeu + + + + Hide Game + Cacher le jeu + + + + CliQuitStreamSegue + + + Establishing connection to PC... + connexion au PC... + + + + Quitting app... + Fermeture de l'app... + + + + CliStartStreamSegue + + + Establishing connection to PC... + connexion au PC... + + + + Loading app list... + Chargement de la liste des applications... + + + + PcView + + + Computers + Ordinateurs + + + + Unable to connect to the specified PC. + Impossible de se connecter au PC spécifié. + + + + + +This PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network. + + +La connexion Internet de ce PC bloque Moonlight. Le streaming sur Internet peut ne pas fonctionner lorsqu'il est connecté à ce réseau. + + + + Click the Help button for possible solutions. + Cliquez sur le bouton Aide pour connaître les solutions possibles. + + + + Searching for PCs with NVIDIA GameStream enabled... + La recherche de PC avec NVIDIA GameStream activé... + + + + Automatic PC discovery is disabled. Add your PC manually. + La découverte automatique des PC est désactivée. Ajoutez votre PC manuellement. + + + + View Apps + Voir les applications + + + + View Hidden Apps + Voir les applications cachées + + + + Wake PC + Réveiller le PC + + + + Test Network + Test Réseau + + + + Rename PC + Renommer le PC + + + + Delete PC + Supprimer le PC + + + + You cannot pair while a previous session is still running on the host PC. Quit any running games or reboot the host PC, then try pairing again. + Vous ne pouvez pas effectuer de couplage alors qu'une session précédente est encore en cours sur le PC hôte. Fermez les jeux en cours ou redémarrez le PC hôte, puis essayez à nouveau d'effectuer l'appariement. + + + + Are you sure you want to remove this PC? + Êtes-vous sûr de vouloir supprimer ce PC ? + + + + Moonlight is testing your network connection to determine if NVIDIA GameStream is blocked. + +This may take a few seconds… + Moonlight teste votre connexion réseau pour déterminer si NVIDIA GameStream est bloqué + +This may take a few seconds… + + + + The network test could not be performed because none of Moonlight's connection testing servers were reachable from this PC. Check your Internet connection or try again later. + Le test de réseau n'a pas pu être effectué car aucun des serveurs de test de connexion de Moonlight n'était accessible depuis ce PC. Vérifiez votre connexion Internet ou réessayez plus tard. + + + + This network does not appear to be blocking Moonlight. If you still have trouble connecting, check your PC's firewall settings. + +If you are trying to stream over the Internet, install the Moonlight Internet Hosting Tool on your gaming PC and run the included Internet Streaming Tester to check your gaming PC's Internet connection. + Ce réseau ne semble pas bloquer Moonlight. Si vous avez toujours des problèmes de connexion, vérifiez les paramètres du pare-feu de votre PC. + +Si vous essayez d'utiliser la diffusion en continu sur Internet, installez l'outil d'hébergement Internet Moonlight sur votre PC de jeu et exécutez le testeur de diffusion en continu sur Internet inclus pour vérifier la connexion Internet de votre PC de jeu. + + + + Your PC's current network connection seems to be blocking Moonlight. Streaming over the Internet may not work while connected to this network. + +The following network ports were blocked: + + La connexion réseau actuelle de votre PC semble bloquer le Moonlight. Il se peut que la diffusion en continu sur Internet ne fonctionne pas lorsque vous êtes connecté à ce réseau. + +Les ports de réseau suivants ont été bloqués : + + + + + Enter the new name for this PC: + Saisissez le nouveau nom de ce PC : + + + + SettingsView + + + Settings + Paramètres + + + + <font color="skyblue">Basic Settings</font> + <font color="skyblue">Paramètres de base</font> + + + + Resolution and FPS + Résolution et FPS + + + + Setting values too high for your PC or network connection may cause lag, stuttering, or errors. + Le fait de fixer des valeurs trop élevées pour votre PC ou votre connexion réseau peut entraîner un décalage, des bégaiements ou des erreurs. + + + + 30 FPS + 30 FPS + + + + 60 FPS + 60 FPS + + + + + 90 FPS (Unsupported) + 90 FPS (Non supporté) + + + + + 120 FPS (Unsupported) + 120 FPS (Non supporté) + + + + FPS (Unsupported) + FPS (Non supporté) + + + + Video bitrate: + Bitrate vidéo : + + + + Lower the bitrate on slower connections. Raise the bitrate to increase image quality. + Baissez le débit binaire sur les connexions plus lentes. Augmentez le débit binaire pour améliorer la qualité de l'image. + + + + Display mode + Mode d'affichage + + + + (Recommended) + (Recommandé) + + + + Full-screen + Plein écran + + + + Borderless windowed + fenêtré sans bordure + + + + Windowed + Fenêtré + + + + Full-screen generally provides the best performance, but borderless windowed may work better with features like macOS Spaces, Alt+Tab, screenshot tools, on-screen overlays, etc. + Le plein écran offre généralement les meilleures performances, mais les fenêtres sans bordure peuvent fonctionner mieux avec des fonctionnalités telles que MacOS Spaces, Alt+Tab, les outils de capture d'écran, les superpositions à l'écran, etc. + + + + Disabling V-Sync allows sub-frame rendering latency, but it can display visible tearing + La désactivation de V-Sync permet une latence de rendu des sous-images plus faible, mais elle peut afficher des déchirures visibles + + + + Frame pacing + Frame pacing + + + + Frame pacing reduces micro-stutter by delaying frames that come in too early + Frame pacing réduit les micro-bégaiements en retardant les images qui arrivent trop tôt + + + + <font color="skyblue">Audio Settings</font> + <font color="skyblue">Réglages audio</font> + + + + Audio configuration + Configuration audio + + + + <font color="skyblue">UI Settings</font> + <font color="skyblue">Réglages de l'interface utilisateur</font> + + + + Maximize Moonlight window on startup + Maximiser la fenêtre Moonlight au démarrage + + + + Show connection quality warnings + Afficher les avertissements sur la qualité de la connexion + + + + Discord Rich Presence integration + Intégration de la présence Discord Rich + + + + Updates your Discord status to display the name of the game you're streaming. + Met à jour votre statut Discord pour afficher le nom du jeu que vous diffusez en continu. + + + + <font color="skyblue">Input Settings</font> + <font color="skyblue">Paramètres d'entrée</font> + + + + Force gamepad #1 always present + Forcé la manette de jeu Force #1 à être toujours présente + + + + Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC. + + Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC. + + + + + Only enable this option when streaming a game that doesn't support gamepads being connected after startup. + N'activez cette option que lorsque vous diffusez en continu un jeu qui ne prend pas en charge la connexion des manettes de jeu après le démarrage. + + + + Optimize mouse for remote desktop instead of games + Optimiser la souris pour le bureau à distance plutôt que pour les jeux + + + + This enables mouse control without capturing the client's mouse cursor. It will not work in most games. + + You can toggle this while streaming using Ctrl+Alt+Shift+M. + Cela permet de contrôler la souris sans avoir à capturer le curseur du client. Cela ne fonctionne pas dans la plupart des jeux. + + Vous pouvez le basculer pendant la diffusion en utilisant Ctrl+Alt+Shift+M. + + + + Use touchscreen as a trackpad + Utiliser l'écran tactile comme trackpad + + + + When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer. + Lorsqu'on le vérifie, l'écran tactile agit comme un pavé tactile. Lorsqu'il n'est pas coché, l'écran tactile contrôle directement le pointeur de la souris. + + + + Gamepad mouse mode support + Prise en charge du mode souris de la manette de jeu + + + + When enabled, holding the Start button will toggle mouse mode + Lorsqu'il est activé, le maintien du bouton "Start" permet de passer en mode souris + + + + Swap mouse buttons + Échanger les boutons de la souris + + + + When checked, swap the left and right mouse buttons + Lorsque la case est cochée, permuter les boutons gauche et droit de la souris + + + + <font color="skyblue">Host Settings</font> + <font color="skyblue">Paramètres de l'hôte</font> + + + + Optimize game settings for streaming + Optimiser les paramètres du jeu pour la diffusion en continu + + + + Play audio on host PC + Lecture audio sur le PC hôte + + + + Quit app on host PC after ending stream + Quitter l'application sur le PC hôte après avoir terminé le flux + + + + This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress! + Cela fermera l'application ou le jeu que vous êtes en train de diffuser lorsque vous aurez terminé votre flux. Vous perdrez tout progrès non sauvegardé ! + + + + <font color="skyblue">Advanced Settings</font> + <font color="skyblue">Paramètres avancés</font> + + + + Video decoder + Décodeur vidéo + + + + + Automatic (Recommended) + Automatique (recommandé) + + + + Force software decoding + Forcer le décodage des logiciels + + + + Force hardware decoding + Forcer le décodage du matériel + + + + Video codec + Codec vidéo + + + + Unlock unsupported FPS options + Débloquer les options non supportées du FPS + + + + Automatically find PCs on the local network (Recommended) + Trouver automatiquement les PC sur le réseau local (recommandé) + + + + Automatically detect blocked connections (Recommended) + Détecter automatiquement les connexions bloquées (recommandé) + + + + StreamSegue + + + + +This PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network. + + +La connexion Internet de ce PC bloque Moonlight. Le streaming sur Internet peut ne pas fonctionner lorsqu'il est connecté à ce réseau. + + + + Tip: Press Start+Select+L1+R1 to disconnect your session + Tip: Appuyez sur Start+Select+L1+R1 pour déconnecter votre session + + + + Tip: Press Ctrl+Alt+Shift+Q to disconnect your session + Tip: Appuyez sur Ctrl + Alt + Shift + Q pour déconnecter votre session + + + + main + + + + + + Settings + Paramètres + + + + Join our community on Discord + Rejoignez notre communauté sur Discord + + + + Computers + Ordinateurs + + + + Add PC manually + Ajouter un PC manuellement + + + + Update available for Moonlight: Version + Mise à jour disponible pour Moonlight : Version + + + + Help + Aide + + + + No functioning hardware accelerated H.264 video decoder was detected by Moonlight. + Aucun décodeur vidéo H.264 accéléré par le matériel n'a été détecté par Moonlight. + + + + Your streaming performance may be severely degraded in this configuration. + Dans cette configuration, les performances de votre streaming peuvent être fortement dégradées. + + + + Click the Help button for more information on solving this problem. + Cliquez sur le bouton Aide pour obtenir plus d'informations sur la manière de résoudre ce problème. + + + + Hardware acceleration doesn't work on XWayland. Continuing on XWayland may result in poor streaming performance. + L'accélération matérielle ne fonctionne pas sur XWayland. Continuer sur XWayland peut entraîner de mauvaises performances de streaming. + + + + Try running with QT_QPA_PLATFORM=wayland or switch to X11. + Essayez de fonctionner avec QT_QPA_PLATFORM=wayland ou passez à X11. + + + + Click the Help button for more information. + Cliquez sur le bouton Aide pour plus d'informations. + + + + This PC is running a 64-bit version of Windows. Please download the x64 version of Moonlight for the best streaming performance. + Ce PC fonctionne avec une version 64 bits de Windows. Veuillez télécharger la version x64 de Moonlight pour obtenir les meilleures performances de diffusion en continu. + + + + Moonlight detected gamepads without a mapping: + + Moonlight a détecté des manettes de jeu san configuration: + + + + + Click the Help button for information on how to map your gamepads. + Cliquez sur le bouton Aide pour obtenir des informations sur la configuration de vos manettes de jeu. + + + + Are you sure you want to quit? + Vous êtes sûr de vouloir quitter? + + + + Enter the IP address of your GameStream PC: + Saisissez l'adresse IP de votre PC GameStream : + + + diff --git a/moonlight-qt.pro b/moonlight-qt.pro index a13627df..d05cd196 100644 --- a/moonlight-qt.pro +++ b/moonlight-qt.pro @@ -1,3 +1,4 @@ +TRANSLATIONS += languages/qml_fr.ts TEMPLATE = subdirs SUBDIRS = \ moonlight-common-c \