From 83471bdacdde62e7bbe38d2a042638d885280926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20=22IlDucci?= Date: Sat, 18 Mar 2023 22:14:55 +0100 Subject: [PATCH] Qt:i18n: Adding I18N comments for translators, minor typo fixes (#8048) --- pcsx2-qt/AboutDialog.ui | 4 +- pcsx2-qt/Debugger/CpuWidget.cpp | 1 + pcsx2-qt/Debugger/CpuWidget.ui | 4 +- pcsx2-qt/Debugger/Models/BreakpointModel.cpp | 8 ++ pcsx2-qt/Debugger/Models/StackModel.cpp | 6 ++ pcsx2-qt/Debugger/Models/ThreadModel.cpp | 6 ++ pcsx2-qt/Debugger/Models/ThreadModel.h | 18 ++++ pcsx2-qt/Debugger/RegisterWidget.cpp | 1 + pcsx2-qt/GameList/EmptyGameListWidget.ui | 4 +- pcsx2-qt/GameList/GameListWidget.ui | 2 +- pcsx2-qt/MainWindow.cpp | 1 + pcsx2-qt/MainWindow.ui | 10 +-- pcsx2-qt/SettingWidgetBinder.h | 3 + .../Settings/AchievementSettingsWidget.cpp | 1 + .../Settings/AchievementSettingsWidget.ui | 4 +- pcsx2-qt/Settings/AdvancedSettingsWidget.cpp | 6 ++ pcsx2-qt/Settings/AdvancedSettingsWidget.ui | 16 ++-- pcsx2-qt/Settings/AudioSettingsWidget.cpp | 7 ++ pcsx2-qt/Settings/AudioSettingsWidget.ui | 8 +- pcsx2-qt/Settings/BIOSSettingsWidget.ui | 2 +- pcsx2-qt/Settings/ControllerBindingWidget.ui | 2 +- .../ControllerBindingWidget_DualShock2.ui | 90 +++++++++---------- .../Settings/ControllerBindingWidgets.cpp | 3 + .../ControllerGlobalSettingsWidget.ui | 2 +- .../Settings/ControllerMacroEditWidget.ui | 4 +- .../Settings/ControllerSettingsDialog.cpp | 5 ++ pcsx2-qt/Settings/DEV9SettingsWidget.ui | 8 +- pcsx2-qt/Settings/DebugSettingsWidget.ui | 2 +- pcsx2-qt/Settings/EmulationSettingsWidget.cpp | 6 ++ pcsx2-qt/Settings/EmulationSettingsWidget.ui | 4 +- pcsx2-qt/Settings/FolderSettingsWidget.ui | 2 +- pcsx2-qt/Settings/GameFixSettingsWidget.ui | 40 ++++----- pcsx2-qt/Settings/GameListSettingsWidget.ui | 2 +- pcsx2-qt/Settings/GameSummaryWidget.ui | 58 ++++++------ pcsx2-qt/Settings/GraphicsSettingsWidget.cpp | 19 +++- pcsx2-qt/Settings/GraphicsSettingsWidget.ui | 48 +++++----- pcsx2-qt/Settings/InterfaceSettingsWidget.cpp | 14 +++ pcsx2-qt/Settings/InterfaceSettingsWidget.ui | 2 +- pcsx2-qt/Settings/MemoryCardConvertDialog.cpp | 3 + .../Settings/MemoryCardSettingsWidget.cpp | 1 + pcsx2-qt/Settings/MemoryCardSettingsWidget.ui | 2 +- .../Settings/USBBindingWidget_DrivingForce.ui | 40 ++++----- pcsx2-qt/Settings/USBBindingWidget_GTForce.ui | 24 ++--- pcsx2-qt/Settings/USBDeviceWidget.ui | 2 +- .../InputRecording/NewInputRecordingDlg.ui | 4 +- 45 files changed, 303 insertions(+), 196 deletions(-) diff --git a/pcsx2-qt/AboutDialog.ui b/pcsx2-qt/AboutDialog.ui index 1212f95874..154a7bad4b 100644 --- a/pcsx2-qt/AboutDialog.ui +++ b/pcsx2-qt/AboutDialog.ui @@ -66,7 +66,7 @@ - SCM Version + SCM Version Qt::AlignCenter @@ -128,7 +128,7 @@ - TextLabel + TextLabel Qt::AlignCenter diff --git a/pcsx2-qt/Debugger/CpuWidget.cpp b/pcsx2-qt/Debugger/CpuWidget.cpp index f794e55b8e..08abead1c2 100644 --- a/pcsx2-qt/Debugger/CpuWidget.cpp +++ b/pcsx2-qt/Debugger/CpuWidget.cpp @@ -418,6 +418,7 @@ void CpuWidget::onFuncListContextMenu(QPoint pos) else m_funclistContextMenu->clear(); + //: "Demangling" is the opposite of "Name mangling", which is a process where a compiler takes function names and combines them with other characteristics of the function (e.g. what types of data it accepts) to ensure they stay unique even when multiple functions exist with the same name (but different inputs / const-ness). See here: https://en.wikipedia.org/wiki/Name_mangling#C++ QAction* demangleAction = new QAction(tr("Demangle Symbols"), m_ui.listFunctions); demangleAction->setCheckable(true); demangleAction->setChecked(m_demangleFunctions); diff --git a/pcsx2-qt/Debugger/CpuWidget.ui b/pcsx2-qt/Debugger/CpuWidget.ui index 19f3d0f09d..d6324a8eac 100644 --- a/pcsx2-qt/Debugger/CpuWidget.ui +++ b/pcsx2-qt/Debugger/CpuWidget.ui @@ -159,7 +159,7 @@ - 0x00 + 0x00 @@ -183,7 +183,7 @@ - 0x2000000 + 0x2000000 diff --git a/pcsx2-qt/Debugger/Models/BreakpointModel.cpp b/pcsx2-qt/Debugger/Models/BreakpointModel.cpp index c4f245685c..1299d15398 100644 --- a/pcsx2-qt/Debugger/Models/BreakpointModel.cpp +++ b/pcsx2-qt/Debugger/Models/BreakpointModel.cpp @@ -79,6 +79,7 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const QString type(""); type += (mc->cond & MEMCHECK_READ) ? tr("Read") : ""; type += ((mc->cond & MEMCHECK_BOTH) == MEMCHECK_BOTH) ? ", " : " "; + //: (C) = changes, as in "look for changes". type += (mc->cond & MEMCHECK_WRITE) ? (mc->cond & MEMCHECK_WRITE_ONCHANGE) ? tr("Write(C)") : tr("Write") : ""; return type; } @@ -169,18 +170,25 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i switch (section) { case BreakpointColumns::TYPE: + //: Warning: limited space available. Abbreviate if needed. return tr("TYPE"); case BreakpointColumns::OFFSET: + //: Warning: limited space available. Abbreviate if needed. return tr("OFFSET"); case BreakpointColumns::SIZE_LABEL: + //: Warning: limited space available. Abbreviate if needed. return tr("SIZE / LABEL"); case BreakpointColumns::OPCODE: + //: Warning: limited space available. Abbreviate if needed. return tr("INSTRUCTION"); case BreakpointColumns::CONDITION: + //: Warning: limited space available. Abbreviate if needed. return tr("CONDITION"); case BreakpointColumns::HITS: + //: Warning: limited space available. Abbreviate if needed. return tr("HITS"); case BreakpointColumns::ENABLED: + //: Warning: limited space available. Abbreviate if needed. return tr("ENABLED"); default: return QVariant(); diff --git a/pcsx2-qt/Debugger/Models/StackModel.cpp b/pcsx2-qt/Debugger/Models/StackModel.cpp index ff11fa16bb..b9176bdd19 100644 --- a/pcsx2-qt/Debugger/Models/StackModel.cpp +++ b/pcsx2-qt/Debugger/Models/StackModel.cpp @@ -87,16 +87,22 @@ QVariant StackModel::headerData(int section, Qt::Orientation orientation, int ro switch (section) { case StackColumns::ENTRY: + //: Warning: short space limit. Abbreviate if needed. return tr("ENTRY"); case StackColumns::ENTRY_LABEL: + //: Warning: short space limit. Abbreviate if needed. return tr("LABEL"); case StackColumns::PC: + //: Warning: short space limit. Abbreviate if needed. PC = Program Counter (location where the CPU is executing). return tr("PC"); case StackColumns::PC_OPCODE: + //: Warning: short space limit. Abbreviate if needed. return tr("INSTRUCTION"); case StackColumns::SP: + //: Warning: short space limit. Abbreviate if needed. return tr("STACK POINTER"); case StackColumns::SIZE: + //: Warning: short space limit. Abbreviate if needed. return tr("SIZE"); default: return QVariant(); diff --git a/pcsx2-qt/Debugger/Models/ThreadModel.cpp b/pcsx2-qt/Debugger/Models/ThreadModel.cpp index 65c16ce008..80e97741d7 100644 --- a/pcsx2-qt/Debugger/Models/ThreadModel.cpp +++ b/pcsx2-qt/Debugger/Models/ThreadModel.cpp @@ -110,16 +110,22 @@ QVariant ThreadModel::headerData(int section, Qt::Orientation orientation, int r switch (section) { case ThreadColumns::ID: + //: Warning: short space limit. Abbreviate if needed. return tr("ID"); case ThreadColumns::PC: + //: Warning: short space limit. Abbreviate if needed. PC = Program Counter (location where the CPU is executing). return tr("PC"); case ThreadColumns::ENTRY: + //: Warning: short space limit. Abbreviate if needed. return tr("ENTRY"); case ThreadColumns::PRIORITY: + //: Warning: short space limit. Abbreviate if needed. return tr("PRIORITY"); case ThreadColumns::STATE: + //: Warning: short space limit. Abbreviate if needed. return tr("STATE"); case ThreadColumns::WAIT_TYPE: + //: Warning: short space limit. Abbreviate if needed. return tr("WAIT TYPE"); default: return QVariant(); diff --git a/pcsx2-qt/Debugger/Models/ThreadModel.h b/pcsx2-qt/Debugger/Models/ThreadModel.h index 6d5f2d6c9b..4fabaee0b7 100644 --- a/pcsx2-qt/Debugger/Models/ThreadModel.h +++ b/pcsx2-qt/Debugger/Models/ThreadModel.h @@ -49,24 +49,42 @@ public: private: const std::map ThreadStateStrings{ + //ADDING I18N comments here because the context string added by QtLinguist does not mention that these are thread states. + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_BAD, tr("BAD")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_RUN, tr("RUN")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_READY, tr("READY")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_WAIT, tr("WAIT")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_SUSPEND, tr("SUSPEND")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_WAIT_SUSPEND, tr("WAIT SUSPEND")}, + //: Refers to a Thread State in the Debugger. {ThreadStatus::THS_DORMANT, tr("DORMANT")}, }; const std::map ThreadWaitStrings{ + //ADDING I18N comments here because the context string added by QtLinguist does not mention that these are thread wait states. + //: Refers to a Thread Wait State in the Debugger. {WaitState::NONE, tr("NONE")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::WAKEUP_REQ, tr("WAKEUP REQUEST")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::SEMA, tr("SEMAPHORE")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::SLEEP, tr("SLEEP")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::DELAY, tr("DELAY")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::EVENTFLAG, tr("EVENTFLAG")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::MBOX, tr("MBOX")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::VPOOL, tr("VPOOL")}, + //: Refers to a Thread Wait State in the Debugger. {WaitState::FIXPOOL, tr("FIXPOOL")}, }; diff --git a/pcsx2-qt/Debugger/RegisterWidget.cpp b/pcsx2-qt/Debugger/RegisterWidget.cpp index 2325cee76e..f53eb84e24 100644 --- a/pcsx2-qt/Debugger/RegisterWidget.cpp +++ b/pcsx2-qt/Debugger/RegisterWidget.cpp @@ -342,6 +342,7 @@ bool RegisterWidget::contextFetchNewValue(u64& out, u64 currentValue, bool segme else existingValue = existingValue.arg(bit_cast((u32)currentValue)); + //: Changing the value in a CPU register (e.g. "Change t0") QString input = QInputDialog::getText(this, tr("Change %1").arg(m_cpu->getRegisterName(categoryIndex, m_selectedRow)), "", QLineEdit::Normal, existingValue, &ok); diff --git a/pcsx2-qt/GameList/EmptyGameListWidget.ui b/pcsx2-qt/GameList/EmptyGameListWidget.ui index 53e8a99048..ebc1753c53 100644 --- a/pcsx2-qt/GameList/EmptyGameListWidget.ui +++ b/pcsx2-qt/GameList/EmptyGameListWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -40,7 +40,7 @@ - TextLabel + TextLabel Qt::AlignCenter diff --git a/pcsx2-qt/GameList/GameListWidget.ui b/pcsx2-qt/GameList/GameListWidget.ui index 7fa2956894..0602bcc743 100644 --- a/pcsx2-qt/GameList/GameListWidget.ui +++ b/pcsx2-qt/GameList/GameListWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/MainWindow.cpp b/pcsx2-qt/MainWindow.cpp index 4da243e734..cfa87bc466 100644 --- a/pcsx2-qt/MainWindow.cpp +++ b/pcsx2-qt/MainWindow.cpp @@ -1492,6 +1492,7 @@ void MainWindow::onGameListEntryContextMenuRequested(const QPoint& point) }); } + //: Refers to the directory where a game is contained. action = menu.addAction(tr("Open Containing Directory...")); connect(action, &QAction::triggered, [this, entry]() { const QFileInfo fi(QString::fromStdString(entry->path)); diff --git a/pcsx2-qt/MainWindow.ui b/pcsx2-qt/MainWindow.ui index 8b545b362a..44d3d35a55 100644 --- a/pcsx2-qt/MainWindow.ui +++ b/pcsx2-qt/MainWindow.ui @@ -664,7 +664,7 @@ .. - System &Display + System &Display @@ -787,7 +787,7 @@ false - New + New @@ -795,7 +795,7 @@ false - Play + Play @@ -803,7 +803,7 @@ false - Stop + Stop @@ -811,7 +811,7 @@ false - Settings + Settings diff --git a/pcsx2-qt/SettingWidgetBinder.h b/pcsx2-qt/SettingWidgetBinder.h index 7fa7903fec..21b5d313de 100644 --- a/pcsx2-qt/SettingWidgetBinder.h +++ b/pcsx2-qt/SettingWidgetBinder.h @@ -124,7 +124,9 @@ namespace SettingWidgetBinder static void setBoolValue(QComboBox* widget, bool value) { widget->setCurrentIndex(value ? 1 : 0); } static void makeNullableBool(QComboBox* widget, bool globalValue) { + //: THIS STRING IS SHARED ACROSS MULTIPLE OPTIONS. Be wary about gender/number. Also, ignore Crowdin's warning regarding [Enabled]: the text must be translated. widget->insertItem(0, globalValue ? qApp->translate("SettingsDialog", "Use Global Setting [Enabled]") : + //: THIS STRING IS SHARED ACROSS MULTIPLE OPTIONS. Be wary about gender/number. Also, ignore Crowdin's warning regarding [Disabled]: the text must be translated. qApp->translate("SettingsDialog", "Use Global Setting [Disabled]")); } @@ -1045,6 +1047,7 @@ namespace SettingWidgetBinder { QObject::connect(browse_button, &QAbstractButton::clicked, browse_button, [widget, key]() { const QString path(QDir::toNativeSeparators(QFileDialog::getExistingDirectory(QtUtils::GetRootWidget(widget), + //It seems that the latter half should show the types of folders that can be selected within Settings -> Folders, but right now it's broken. It would be best for localization purposes to duplicate this into multiple lines, each per type of folder. qApp->translate("SettingWidgetBinder", "Select folder for %1").arg(QString::fromStdString(key))))); if (path.isEmpty()) return; diff --git a/pcsx2-qt/Settings/AchievementSettingsWidget.cpp b/pcsx2-qt/Settings/AchievementSettingsWidget.cpp index eadba28b17..9e0297c98b 100644 --- a/pcsx2-qt/Settings/AchievementSettingsWidget.cpp +++ b/pcsx2-qt/Settings/AchievementSettingsWidget.cpp @@ -149,6 +149,7 @@ void AchievementSettingsWidget::updateLoginState() const u64 login_unix_timestamp = StringUtil::FromChars(Host::GetBaseStringSettingValue("Achievements", "LoginTimestamp", "0")).value_or(0); const QDateTime login_timestamp(QDateTime::fromSecsSinceEpoch(static_cast(login_unix_timestamp))); + //: Variable %1 is an username, variable %2 is a timestamp. m_ui.loginStatus->setText(tr("Username: %1\nLogin token generated on %2.") .arg(QString::fromStdString(username)) .arg(login_timestamp.toString(Qt::TextDate))); diff --git a/pcsx2-qt/Settings/AchievementSettingsWidget.ui b/pcsx2-qt/Settings/AchievementSettingsWidget.ui index 6be03ad319..d92c39cf88 100644 --- a/pcsx2-qt/Settings/AchievementSettingsWidget.ui +++ b/pcsx2-qt/Settings/AchievementSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -49,7 +49,7 @@ - Enable RA's Rich Presence + Enable RA's Rich Presence diff --git a/pcsx2-qt/Settings/AdvancedSettingsWidget.cpp b/pcsx2-qt/Settings/AdvancedSettingsWidget.cpp index 8ac6b5159f..5cf04952dc 100644 --- a/pcsx2-qt/Settings/AdvancedSettingsWidget.cpp +++ b/pcsx2-qt/Settings/AdvancedSettingsWidget.cpp @@ -74,15 +74,18 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsDialog* dialog, QWidget* dialog->registerWidgetHelp(m_ui.eeRecompiler, tr("Enable Recompiler"), tr("Checked"), tr("Performs just-in-time binary translation of 64-bit MIPS-IV machine code to x86.")); + //: Wait loop: When the game makes the CPU do nothing (loop/spin) while it waits for something to happen (usually an interrupt). dialog->registerWidgetHelp(m_ui.eeWaitLoopDetection, tr("Wait Loop Detection"), tr("Checked"), tr("Moderate speedup for some games, with no known side effects.")); dialog->registerWidgetHelp(m_ui.eeCache, tr("Enable Cache (Slow)"), tr("Unchecked"), tr("Interpreter only, provided for diagnostic.")); + //: INTC = Name of a PS2 register, leave as-is. "spin" = to make a cpu (or gpu) actively do nothing while you wait for something. Like spinning in a circle, you're moving but not actually going anywhere. dialog->registerWidgetHelp(m_ui.eeINTCSpinDetection, tr("INTC Spin Detection"), tr("Checked"), tr("Huge speedup for some games, with almost no compatibility side effects.")); dialog->registerWidgetHelp(m_ui.eeFastmem, tr("Enable Fast Memory Access"), tr("Checked"), + //: "Backpatching" = To edit previously generated code to change what it does (in this case, we generate direct memory accesses, then backpatch them to jump to a fancier handler function when we realize they need the fancier handler function) tr("Uses backpatching to avoid register flushing on every memory access.")); dialog->registerWidgetHelp(m_ui.pauseOnTLBMiss, tr("Pause On TLB Miss"), tr("Unchecked"), @@ -96,11 +99,14 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsDialog* dialog, QWidget* dialog->registerWidgetHelp(m_ui.vu0ClampMode, tr("VU0 Clamping Mode"), tr("Normal (Default)"), tr("")); dialog->registerWidgetHelp(m_ui.vu1ClampMode, tr("VU1 Clamping Mode"), tr("Normal (Default)"), tr("")); + //: VU0 = Vector Unit 0. One of the PS2's processors. dialog->registerWidgetHelp(m_ui.vu0Recompiler, tr("Enable VU0 Recompiler (Micro Mode)"), tr("Checked"), tr("Enables VU0 Recompiler.")); + //: VU1 = Vector Unit 1. One of the PS2's processors. dialog->registerWidgetHelp(m_ui.vu1Recompiler, tr("Enable VU1 Recompiler"), tr("Checked"), tr("Enables VU1 Recompiler.")); dialog->registerWidgetHelp( + //: mVU = PCSX2's recompiler for VU (Vector Unit) code (full name: microVU) m_ui.vuFlagHack, tr("mVU Flag Hack"), tr("Checked"), tr("Good speedup and high compatibility, may cause graphical errors.")); dialog->registerWidgetHelp(m_ui.iopRecompiler, tr("Enable Recompiler"), tr("Checked"), diff --git a/pcsx2-qt/Settings/AdvancedSettingsWidget.ui b/pcsx2-qt/Settings/AdvancedSettingsWidget.ui index e1c46c39b5..ff46be9e7d 100644 --- a/pcsx2-qt/Settings/AdvancedSettingsWidget.ui +++ b/pcsx2-qt/Settings/AdvancedSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -63,13 +63,13 @@ - EmotionEngine (MIPS-IV) + EmotionEngine (MIPS-IV) - Rounding Mode: + Rounding Mode: @@ -100,7 +100,7 @@ - Clamping Mode: + Clamping Mode: @@ -108,7 +108,7 @@ - None + None @@ -118,7 +118,7 @@ - Extra + Preserve Sign + Extra + Preserve Sign @@ -180,7 +180,7 @@ - Vector Units (VU) + Vector Units (VU) @@ -383,7 +383,7 @@ - hz + hz 0.010000000000000 diff --git a/pcsx2-qt/Settings/AudioSettingsWidget.cpp b/pcsx2-qt/Settings/AudioSettingsWidget.cpp index 3ca5444421..0df4921e56 100644 --- a/pcsx2-qt/Settings/AudioSettingsWidget.cpp +++ b/pcsx2-qt/Settings/AudioSettingsWidget.cpp @@ -40,8 +40,10 @@ static constexpr s32 DEFAULT_SOUNDTOUCH_SEEK_WINDOW = 20; static constexpr s32 DEFAULT_SOUNDTOUCH_OVERLAP = 10; static const char* s_output_module_entries[] = {QT_TRANSLATE_NOOP("AudioSettingsWidget", "No Sound (Emulate SPU2 only)"), + //: Cubeb is an audio engine name. Leave as-is. QT_TRANSLATE_NOOP("AudioSettingsWidget", "Cubeb (Cross-platform)"), #ifdef _WIN32 + //: XAudio2 is an audio engine name. Leave as-is. QT_TRANSLATE_NOOP("AudioSettingsWidget", "XAudio2"), #endif nullptr}; @@ -70,6 +72,7 @@ AudioSettingsWidget::AudioSettingsWidget(SettingsDialog* dialog, QWidget* parent SettingWidgetBinder::BindWidgetToEnumSetting( sif, m_ui.outputModule, "SPU2/Output", "OutputModule", s_output_module_entries, s_output_module_values, DEFAULT_OUTPUT_MODULE); SettingWidgetBinder::BindSliderToIntSetting( + //: Measuring unit that will appear after the number selected in its option. Adapt the space depending on your language's rules. sif, m_ui.targetLatency, m_ui.targetLatencyLabel, tr(" ms"), "SPU2/Output", "Latency", DEFAULT_TARGET_LATENCY); SettingWidgetBinder::BindSliderToIntSetting( sif, m_ui.outputLatency, m_ui.outputLatencyLabel, tr(" ms"), "SPU2/Output", "OutputLatency", DEFAULT_OUTPUT_LATENCY); @@ -113,6 +116,7 @@ AudioSettingsWidget::AudioSettingsWidget(SettingsDialog* dialog, QWidget* parent dialog->registerWidgetHelp(m_ui.expansionMode, tr("Expansion"), tr("Stereo (None, Default)"), tr("")); + //: Cubeb is an audio engine name. Leave as-is. dialog->registerWidgetHelp(m_ui.outputModule, tr("Output Module"), tr("Cubeb (Cross-platform)"), tr("")); dialog->registerWidgetHelp(m_ui.backend, tr("Output Backend"), tr("Default"), tr("")); @@ -126,6 +130,7 @@ AudioSettingsWidget::AudioSettingsWidget(SettingsDialog* dialog, QWidget* parent dialog->registerWidgetHelp(m_ui.sequenceLength, tr("Sequence Length"), tr("30 ms"), tr("")); + //: Seek Window: the region of samples (window) the audio stretching algorithm is allowed to search. dialog->registerWidgetHelp(m_ui.seekWindowSize, tr("Seek Window Size"), tr("20 ms"), tr("")); dialog->registerWidgetHelp(m_ui.overlap, tr("Overlap"), tr("10 ms"), tr("")); @@ -298,6 +303,7 @@ void AudioSettingsWidget::volumeContextMenuRequested(const QPoint& pt) void AudioSettingsWidget::updateVolumeLabel() { + //: Variable value that indicates a percentage. Preserve the %1 variable, adapt the latter % (and/or any possible spaces) to your language's ruleset. m_ui.volumeLabel->setText(tr("%1%").arg(m_ui.volume->value())); } @@ -316,6 +322,7 @@ void AudioSettingsWidget::updateLatencyLabels() { const bool minimal_output = m_dialog->getEffectiveBoolValue("SPU2/Output", "OutputLatencyMinimal", false); + //: Preserve the %1 variable, adapt the latter ms (and/or any possible spaces in between) to your language's ruleset. m_ui.outputLatencyLabel->setText(minimal_output ? tr("N/A") : tr("%1 ms").arg(m_ui.outputLatency->value())); const u32 output_latency_ms = diff --git a/pcsx2-qt/Settings/AudioSettingsWidget.ui b/pcsx2-qt/Settings/AudioSettingsWidget.ui index e215114a8d..ebce59879e 100644 --- a/pcsx2-qt/Settings/AudioSettingsWidget.ui +++ b/pcsx2-qt/Settings/AudioSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -337,7 +337,7 @@ - ProLogic Level: + ProLogic Level: @@ -350,12 +350,12 @@ - ProLogic Decoding (basic) + ProLogic Decoding (basic) - ProLogic II Decoding (gigaherz) + ProLogic II Decoding (gigaherz) diff --git a/pcsx2-qt/Settings/BIOSSettingsWidget.ui b/pcsx2-qt/Settings/BIOSSettingsWidget.ui index 8f9ca565e4..c5d888419b 100644 --- a/pcsx2-qt/Settings/BIOSSettingsWidget.ui +++ b/pcsx2-qt/Settings/BIOSSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/ControllerBindingWidget.ui b/pcsx2-qt/Settings/ControllerBindingWidget.ui index 6a7c9ced6b..9a7f1de4e4 100644 --- a/pcsx2-qt/Settings/ControllerBindingWidget.ui +++ b/pcsx2-qt/Settings/ControllerBindingWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/ControllerBindingWidget_DualShock2.ui b/pcsx2-qt/Settings/ControllerBindingWidget_DualShock2.ui index 1bd37f0553..a8850dd077 100644 --- a/pcsx2-qt/Settings/ControllerBindingWidget_DualShock2.ui +++ b/pcsx2-qt/Settings/ControllerBindingWidget_DualShock2.ui @@ -23,7 +23,7 @@ - Form + Form @@ -43,7 +43,7 @@ - D-Pad + D-Pad @@ -79,7 +79,7 @@ - PushButton + PushButton @@ -119,7 +119,7 @@ - PushButton + PushButton @@ -159,7 +159,7 @@ - PushButton + PushButton @@ -199,7 +199,7 @@ - PushButton + PushButton @@ -212,7 +212,7 @@ - Left Analog + Left Analog @@ -248,7 +248,7 @@ - PushButton + PushButton @@ -288,7 +288,7 @@ - PushButton + PushButton @@ -328,7 +328,7 @@ - PushButton + PushButton @@ -368,7 +368,7 @@ - PushButton + PushButton @@ -411,7 +411,7 @@ - PushButton + PushButton @@ -438,7 +438,7 @@ - L2 + L2 @@ -462,7 +462,7 @@ - PushButton + PushButton @@ -472,7 +472,7 @@ - R2 + R2 @@ -496,7 +496,7 @@ - PushButton + PushButton @@ -506,7 +506,7 @@ - L1 + L1 @@ -530,7 +530,7 @@ - PushButton + PushButton @@ -540,7 +540,7 @@ - R1 + R1 @@ -564,7 +564,7 @@ - PushButton + PushButton @@ -574,7 +574,7 @@ - Start + Start @@ -598,7 +598,7 @@ - PushButton + PushButton @@ -608,7 +608,7 @@ - Select + Select @@ -632,7 +632,7 @@ - PushButton + PushButton @@ -646,13 +646,13 @@ - Face Buttons + Face Buttons - Cross + Cross @@ -682,7 +682,7 @@ - PushButton + PushButton @@ -692,7 +692,7 @@ - Square + Square @@ -722,7 +722,7 @@ - PushButton + PushButton @@ -732,7 +732,7 @@ - Triangle + Triangle @@ -762,7 +762,7 @@ - PushButton + PushButton @@ -772,7 +772,7 @@ - Circle + Circle @@ -802,7 +802,7 @@ - PushButton + PushButton @@ -815,7 +815,7 @@ - Right Analog + Right Analog @@ -851,7 +851,7 @@ - PushButton + PushButton @@ -891,7 +891,7 @@ - PushButton + PushButton @@ -931,7 +931,7 @@ - PushButton + PushButton @@ -971,7 +971,7 @@ - PushButton + PushButton @@ -1014,7 +1014,7 @@ - PushButton + PushButton @@ -1109,7 +1109,7 @@ - L3 + L3 @@ -1139,7 +1139,7 @@ - PushButton + PushButton @@ -1149,7 +1149,7 @@ - R3 + R3 @@ -1179,7 +1179,7 @@ - PushButton + PushButton @@ -1213,7 +1213,7 @@ - PushButton + PushButton @@ -1235,7 +1235,7 @@ - PushButton + PushButton diff --git a/pcsx2-qt/Settings/ControllerBindingWidgets.cpp b/pcsx2-qt/Settings/ControllerBindingWidgets.cpp index 620b381700..f023c666f0 100644 --- a/pcsx2-qt/Settings/ControllerBindingWidgets.cpp +++ b/pcsx2-qt/Settings/ControllerBindingWidgets.cpp @@ -198,7 +198,9 @@ void ControllerBindingWidget::onAutomaticBindingClicked() void ControllerBindingWidget::onClearBindingsClicked() { + //: Binding: A pair of (host button, target button); Mapping: A list of bindings covering an entire controller. These are two different things (which might be the same in your language, please make sure to verify this). if (QMessageBox::question(QtUtils::GetRootWidget(this), tr("Clear Bindings"), + //: Binding: A pair of (host button, target button); Mapping: A list of bindings covering an entire controller. These are two different things (which might be the same in your language, please make sure to verify this). tr("Are you sure you want to clear all bindings for this controller? This action cannot be undone.")) != QMessageBox::Yes) { return; @@ -275,6 +277,7 @@ ControllerMacroWidget::~ControllerMacroWidget() = default; void ControllerMacroWidget::updateListItem(u32 index) { + //: This is the full text that appears in each option of the 16 available macros, and reads like this:\n\nMacro 1\nNot Configured/Buttons configured m_ui.portList->item(static_cast(index))->setText(tr("Macro %1\n%2").arg(index + 1).arg(m_macros[index]->getSummary())); } diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui index d0eeb25d33..412e2efe43 100644 --- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui +++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/ControllerMacroEditWidget.ui b/pcsx2-qt/Settings/ControllerMacroEditWidget.ui index ff5a27e4d1..31f3c5f44e 100644 --- a/pcsx2-qt/Settings/ControllerMacroEditWidget.ui +++ b/pcsx2-qt/Settings/ControllerMacroEditWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -119,7 +119,7 @@ - PushButton + PushButton diff --git a/pcsx2-qt/Settings/ControllerSettingsDialog.cpp b/pcsx2-qt/Settings/ControllerSettingsDialog.cpp index 031481a020..b6127c45f6 100644 --- a/pcsx2-qt/Settings/ControllerSettingsDialog.cpp +++ b/pcsx2-qt/Settings/ControllerSettingsDialog.cpp @@ -402,7 +402,9 @@ void ControllerSettingsDialog::createWidgets() const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); QListWidgetItem* item = new QListWidgetItem(); + //: Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual. item->setText(mtap_enabled[port] ? (tr("Controller Port %1%2\n%3").arg(port + 1).arg(s_mtap_slot_names[slot]).arg(display_name)) : + //: Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual. tr("Controller Port %1\n%2").arg(port + 1).arg(display_name)); item->setIcon(m_port_bindings[global_slot]->getIcon()); item->setData(Qt::UserRole, QVariant(global_slot)); @@ -455,7 +457,9 @@ void ControllerSettingsDialog::updateListDescription(u32 global_slot, Controller const PAD::ControllerInfo* ci = PAD::GetControllerInfo(widget->getControllerType()); const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); + //: Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual. item->setText(mtap_enabled ? (tr("Controller Port %1%2\n%3").arg(port + 1).arg(s_mtap_slot_names[slot]).arg(display_name)) : + //: Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual. tr("Controller Port %1\n%2").arg(port + 1).arg(display_name)); item->setIcon(widget->getIcon()); break; @@ -487,6 +491,7 @@ void ControllerSettingsDialog::refreshProfileList() QSignalBlocker sb(m_ui.currentProfile); m_ui.currentProfile->clear(); + //: "Shared" refers here to the shared input profile. m_ui.currentProfile->addItem(tr("Shared")); if (isEditingGlobalSettings()) m_ui.currentProfile->setCurrentIndex(0); diff --git a/pcsx2-qt/Settings/DEV9SettingsWidget.ui b/pcsx2-qt/Settings/DEV9SettingsWidget.ui index fb64505c54..c1a46faea3 100644 --- a/pcsx2-qt/Settings/DEV9SettingsWidget.ui +++ b/pcsx2-qt/Settings/DEV9SettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -68,7 +68,7 @@ - Enabled + Enabled true @@ -261,7 +261,7 @@ - Enabled + Enabled true @@ -344,7 +344,7 @@ - Enabled + Enabled true diff --git a/pcsx2-qt/Settings/DebugSettingsWidget.ui b/pcsx2-qt/Settings/DebugSettingsWidget.ui index 13be983b85..0a17f7828c 100644 --- a/pcsx2-qt/Settings/DebugSettingsWidget.ui +++ b/pcsx2-qt/Settings/DebugSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/EmulationSettingsWidget.cpp b/pcsx2-qt/Settings/EmulationSettingsWidget.cpp index 9214e8e29f..6660ff2898 100644 --- a/pcsx2-qt/Settings/EmulationSettingsWidget.cpp +++ b/pcsx2-qt/Settings/EmulationSettingsWidget.cpp @@ -90,8 +90,10 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsDialog* dialog, QWidget dialog->registerWidgetHelp(m_ui.normalSpeed, tr("Normal Speed"), "100%", tr("Sets the target emulation speed. It is not guaranteed that this speed will be reached, " "and if not, the emulator will run as fast as it can manage.")); + //: The "User Preference" string will appear after the text "Recommended Value:" dialog->registerWidgetHelp(m_ui.fastForwardSpeed, tr("Fast-Forward Speed"), tr("User Preference"), tr("Sets the fast-forward speed. This speed will be used when the fast-forward hotkey is pressed/toggled.")); + //: The "User Preference" string will appear after the text "Recommended Value:" dialog->registerWidgetHelp(m_ui.slowMotionSpeed, tr("Slow-Motion Speed"), tr("User Preference"), tr("Sets the slow-motion speed. This speed will be used when the slow-motion hotkey is pressed/toggled.")); dialog->registerWidgetHelp(m_ui.speedLimiter, tr("Speed Limiter"), tr("Checked"), @@ -102,9 +104,11 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsDialog* dialog, QWidget "Lower values will reduce the CPU load allowing lightweight games to run full speed on weaker CPUs.")); dialog->registerWidgetHelp(m_ui.eeCycleSkipping, tr("EE Cycle Skip"), tr("Disabled"), tr("Makes the emulated Emotion Engine skip cycles. " + //: SOTC = Shadow of the Colossus. A game's title, should not be translated unless an official translation exists. "Helps a small subset of games like SOTC. Most of the time it's harmful to performance.")); dialog->registerWidgetHelp(m_ui.affinityControl, tr("Affinity Control"), tr("Disabled"), tr("Sets the priority for specific threads in a specific order ignoring the system scheduler. " + //: P-Core = Performance Core, E-Core = Efficiency Core. See if Intel has official translations for these terms. "May help CPUs with big (P) and little (E) cores (e.g. Intel 12th or newer generation CPUs from Intel or other vendors such as AMD).")); dialog->registerWidgetHelp(m_ui.MTVU, tr("Enable Multithreaded VU1 (MTVU1)"), tr("Checked"), tr("Generally a speedup on CPUs with 3 or more threads. " @@ -161,9 +165,11 @@ void EmulationSettingsWidget::initializeSpeedCombo(QComboBox* cb, const char* se QVariant(static_cast(speed) / 100.0f)); } + //: Every case that uses this particular string seems to refer to speeds: Normal Speed/Fast Forward Speed/Slow Motion Speed. cb->addItem(tr("Unlimited"), QVariant(0.0f)); const int custom_index = cb->count(); + //: Every case that uses this particular string seems to refer to speeds: Normal Speed/Fast Forward Speed/Slow Motion Speed. cb->addItem(tr("Custom")); if (const int index = cb->findData(QVariant(value)); index >= 0) diff --git a/pcsx2-qt/Settings/EmulationSettingsWidget.ui b/pcsx2-qt/Settings/EmulationSettingsWidget.ui index a68b868a34..513e707485 100644 --- a/pcsx2-qt/Settings/EmulationSettingsWidget.ui +++ b/pcsx2-qt/Settings/EmulationSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -252,7 +252,7 @@ - frames + frames 1 diff --git a/pcsx2-qt/Settings/FolderSettingsWidget.ui b/pcsx2-qt/Settings/FolderSettingsWidget.ui index be953bd5c3..79d255fb53 100644 --- a/pcsx2-qt/Settings/FolderSettingsWidget.ui +++ b/pcsx2-qt/Settings/FolderSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/GameFixSettingsWidget.ui b/pcsx2-qt/Settings/GameFixSettingsWidget.ui index a55aef014f..640c7ea5d1 100644 --- a/pcsx2-qt/Settings/GameFixSettingsWidget.ui +++ b/pcsx2-qt/Settings/GameFixSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form @@ -62,133 +62,133 @@ - FPU Negative Divide Hack (For Gundam Games) + FPU Negative Divide Hack (For Gundam Games) - FPU Multiply Hack (For Tales of Destiny) + FPU Multiply Hack (For Tales of Destiny) - Use Software Renderer For FMVs + Use Software Renderer For FMVs - Skip MPEG Hack (Skips Videos/FMVs) + Skip MPEG Hack (Skips Videos/FMVs) - Preload TLB Hack (For Goemon) + Preload TLB Hack (For Goemon) - EE Timing Hack (General Purpose Timing Hack) + EE Timing Hack (General Purpose Timing Hack) - Instant DMA Hack (Good for cache emulation problems) + Instant DMA Hack (Good for cache emulation problems) - OPH Flag Hack (For Bleach Blade Battlers) + OPH Flag Hack (For Bleach Blade Battlers) - Emulate GIF FIFO (Correct But Slower) + Emulate GIF FIFO (Correct But Slower) - DMA Busy Hack (Deny Writes When Busy) + DMA Busy Hack (Deny Writes When Busy) - Delay VIF1 Stalls (For SOCOM 2 HUD/Spy Hunter) + Delay VIF1 Stalls (For SOCOM 2 HUD/Spy Hunter) - Emulate VIF FIFO (Correct But Slower) + Emulate VIF FIFO (Correct But Slower) - Full VU0 Synchronization (Correct But Slower) + Full VU0 Synchronization (Correct But Slower) - VU I Bit Hack (For Scarface The World is Yours/Crash Tag Team Racing) + VU I Bit Hack (For Scarface The World is Yours/Crash Tag Team Racing) - VU Add Hack (For Tri-Ace Games) + VU Add Hack (For Tri-Ace Games) - VU Overflow Hack (Superman Returns) + VU Overflow Hack (Superman Returns) - VU Sync (Run Behind, M-Bit games) + VU Sync (Run Behind, M-Bit games) - VU XGKick Sync (Correct But Slower) + VU XGKick Sync (Correct But Slower) - Force Blit Internal FPS Detection (When auto-detection fails) + Force Blit Internal FPS Detection (When auto-detection fails) diff --git a/pcsx2-qt/Settings/GameListSettingsWidget.ui b/pcsx2-qt/Settings/GameListSettingsWidget.ui index 9789e66165..01979ee6ed 100644 --- a/pcsx2-qt/Settings/GameListSettingsWidget.ui +++ b/pcsx2-qt/Settings/GameListSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/GameSummaryWidget.ui b/pcsx2-qt/Settings/GameSummaryWidget.ui index 7e8c2b25a3..0f23cb6fe8 100644 --- a/pcsx2-qt/Settings/GameSummaryWidget.ui +++ b/pcsx2-qt/Settings/GameSummaryWidget.ui @@ -155,37 +155,37 @@ - NTSC-B (Brazil) + NTSC-B (Brazil) - NTSC-C (China) + NTSC-C (China) - NTSC-HK (Hong Kong) + NTSC-HK (Hong Kong) - NTSC-J (Japan) + NTSC-J (Japan) - NTSC-K (Korea) + NTSC-K (Korea) - NTSC-T (Taiwan) + NTSC-T (Taiwan) - NTSC-U (US) + NTSC-U (US) @@ -195,107 +195,107 @@ - PAL-A (Australia) + PAL-A (Australia) - PAL-AF (South Africa) + PAL-AF (South Africa) - PAL-AU (Austria) + PAL-AU (Austria) - PAL-BE (Belgium) + PAL-BE (Belgium) - PAL-E (Europe/Australia) + PAL-E (Europe/Australia) - PAL-F (France) + PAL-F (France) - PAL-FI (Finland) + PAL-FI (Finland) - PAL-G (Germany) + PAL-G (Germany) - PAL-GR (Greece) + PAL-GR (Greece) - PAL-I (Italy) + PAL-I (Italy) - PAL-IN (India) + PAL-IN (India) - PAL-M (Europe/Australia) + PAL-M (Europe/Australia) - PAL-NL (Netherlands) + PAL-NL (Netherlands) - PAL-NO (Norway) + PAL-NO (Norway) - PAL-P (Portugal) + PAL-P (Portugal) - PAL-R (Russia) + PAL-R (Russia) - PAL-S (Spain) + PAL-S (Spain) - PAL-SC (Scandinavia) + PAL-SC (Scandinavia) - PAL-SW (Sweden) + PAL-SW (Sweden) - PAL-SWI (Switzerland) + PAL-SWI (Switzerland) - PAL-UK (United Kingdom) + PAL-UK (United Kingdom) @@ -375,7 +375,7 @@ - Shared + Shared diff --git a/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp b/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp index 9419c51f25..60d5d55306 100644 --- a/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp +++ b/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp @@ -47,19 +47,26 @@ struct RendererInfo static constexpr RendererInfo s_renderer_info[] = { {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Automatic (Default)"), GSRendererType::Auto}, #ifdef _WIN32 + //: Graphics backend/engine type. Leave as-is. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 11"), GSRendererType::DX11}, + //: Graphics backend/engine type. Leave as-is. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 12"), GSRendererType::DX12}, #endif #ifdef ENABLE_OPENGL + //: Graphics backend/engine type. Leave as-is. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "OpenGL"), GSRendererType::OGL}, #endif #ifdef ENABLE_VULKAN + //: Graphics backend/engine type. Leave as-is. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Vulkan"), GSRendererType::VK}, #endif #ifdef __APPLE__ + //: Graphics backend/engine type. Leave as-is. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Metal"), GSRendererType::Metal}, #endif + //: Graphics backend/engine type (refers to emulating the GS in software, on the CPU). Translate accordingly. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Software"), GSRendererType::SW}, + //: Null here means that this is a graphics backend that will show nothing. {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Null"), GSRendererType::Null}, }; @@ -379,6 +386,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* "positioning between pixels.")); dialog->registerWidgetHelp(m_ui.PCRTCOffsets, tr("Screen Offsets"), tr("Unchecked"), + //: PCRTC: Programmable CRT (Cathode Ray Tube) Controller. tr("Enables PCRTC Offsets which position the screen as the game requests. Useful for some games such as WipEout Fusion for its " "screen shake effect, but can make the picture blurry.")); @@ -440,7 +448,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* { // Hardware dialog->registerWidgetHelp(m_ui.upscaleMultiplier, tr("Internal Resolution"), tr("Native (PS2) (Default)"), - tr("Control the resolution at which games are rendered. High resolutions can impact performance on" + tr("Control the resolution at which games are rendered. High resolutions can impact performance on " "older or lower-end GPUs.
Non-native resolution may cause minor graphical issues in some games.
" "FMV resolution will remain unchanged, as the video files are pre-rendered.")); @@ -574,17 +582,22 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* "sprites.")); dialog->registerWidgetHelp(m_ui.textureOffsetX, tr("Texture Offsets X"), tr("0"), + //: ST and UV are different types of texture coordinates, like XY would be spatial coordinates. tr("Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment " "too.")); dialog->registerWidgetHelp(m_ui.textureOffsetY, tr("Texture Offsets Y"), tr("0"), + //: ST and UV are different types of texture coordinates, like XY would be spatial coordinates. tr("Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment " "too.")); dialog->registerWidgetHelp(m_ui.alignSprite, tr("Align Sprite"), tr("Unchecked"), + //: Namco: a game publisher and development company. Leave the name as-is. Ace Combat, Tekken, Soul Calibur: game names. Leave as-is or use official translations. tr("Fixes issues with upscaling (vertical lines) in Namco games like Ace Combat, Tekken, Soul Calibur, etc.")); + //: Wild Arms: name of a game series. Leave as-is or use an official translation. dialog->registerWidgetHelp(m_ui.wildHack, tr("Wild Arms Hack"), tr("Unchecked"), + //: Wild Arms: name of a game series. Leave as-is or use an official translation. tr("Lowers the GS precision to avoid gaps between pixels when upscaling. Fixes the text on Wild Arms games.")); dialog->registerWidgetHelp(m_ui.bilinearHack, tr("Bilinear Upscale"), tr("Unchecked"), @@ -611,6 +624,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* // Post Processing tab { + //: You might find an official translation for this on AMD's website (Spanish version linked): https://www.amd.com/es/technologies/radeon-software-fidelityfx dialog->registerWidgetHelp(m_ui.casMode, tr("Contrast Adaptive Sharpening"), tr("None (Default)"), tr("")); dialog->registerWidgetHelp(m_ui.casSharpness, tr("Sharpness"), tr("50%"), tr("")); @@ -694,7 +708,9 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* dialog->registerWidgetHelp(m_ui.gsDumpCompression, tr("GS Dump Compression"), tr("Zstandard (zst)"), tr("Change the compression algorithm used when creating a GS dump.")); + //: Blit = a data operation. You might want to write it as-is, but fully uppercased. More information: https://en.wikipedia.org/wiki/Bit_blit \nSwap chain: see Microsoft's Terminology Portal. dialog->registerWidgetHelp(m_ui.useBlitSwapChain, tr("Use Blit Swap Chain"), tr("Unchecked"), + //: Blit = a data operation. You might want to write it as-is, but fully uppercased. More information: https://en.wikipedia.org/wiki/Bit_blit tr("Uses a blit presentation model instead of flipping when using the Direct3D 11 " "renderer. This usually results in slower performance, but may be required for some " "streaming applications, or to uncap framerates on some systems.")); @@ -808,6 +824,7 @@ void GraphicsSettingsWidget::onCaptureContainerChanged() m_ui.videoCaptureCodec->disconnect(); m_ui.videoCaptureCodec->clear(); + //: This string refers to a default codec, whether it's an audio codec or a video codec. m_ui.videoCaptureCodec->addItem(tr("Default"), QString()); for (const auto& [format, name] : GSCapture::GetVideoCodecList(container.c_str())) { diff --git a/pcsx2-qt/Settings/GraphicsSettingsWidget.ui b/pcsx2-qt/Settings/GraphicsSettingsWidget.ui index a26b95fc91..6f3d99f1ed 100644 --- a/pcsx2-qt/Settings/GraphicsSettingsWidget.ui +++ b/pcsx2-qt/Settings/GraphicsSettingsWidget.ui @@ -11,7 +11,7 @@
- Form + Form @@ -161,42 +161,42 @@
- Weave (Top Field First, Sawtooth) + Weave (Top Field First, Sawtooth) - Weave (Bottom Field First, Sawtooth) + Weave (Bottom Field First, Sawtooth) - Bob (Top Field First, Full Frames) + Bob (Top Field First, Full Frames) - Bob (Bottom Field First, Full Frames) + Bob (Bottom Field First, Full Frames) - Blend (Top Field First, Merge 2 Fields) + Blend (Top Field First, Merge 2 Fields) - Blend (Bottom Field First, Merge 2 Fields) + Blend (Bottom Field First, Merge 2 Fields) - Adaptive (Top Field First, Similar to Bob + Weave) + Adaptive (Top Field First, Similar to Bob + Weave) - Adaptive (Bottom Field First, Similar to Bob + Weave) + Adaptive (Bottom Field First, Similar to Bob + Weave)
@@ -217,12 +217,12 @@
- Bilinear (Smooth) + Bilinear (Smooth) - Bilinear (Sharp) + Bilinear (Sharp) @@ -237,7 +237,7 @@ - % + % 1 @@ -259,7 +259,7 @@ - Left: + Left: @@ -276,7 +276,7 @@ - Top: + Top: @@ -293,7 +293,7 @@ - Right: + Right: @@ -310,7 +310,7 @@ - Bottom: + Bottom: @@ -907,7 +907,7 @@ - GPU Target CLUT: + GPU Target CLUT: @@ -1218,7 +1218,7 @@ - Wild Arms Hack + Wild Arms Hack @@ -1358,7 +1358,7 @@ - Contrast Adaptive Sharpening: + Contrast Adaptive Sharpening: @@ -1395,7 +1395,7 @@ - % + % 100 @@ -1461,7 +1461,7 @@ - Lottes CRT + Lottes CRT @@ -1865,7 +1865,7 @@ - kbps + kbps 100 @@ -1977,7 +1977,7 @@ - Advanced + Advanced @@ -2055,7 +2055,7 @@ - Use Blit Swap Chain + Use Blit Swap Chain diff --git a/pcsx2-qt/Settings/InterfaceSettingsWidget.cpp b/pcsx2-qt/Settings/InterfaceSettingsWidget.cpp index 20b6f86ba8..f52787a36b 100644 --- a/pcsx2-qt/Settings/InterfaceSettingsWidget.cpp +++ b/pcsx2-qt/Settings/InterfaceSettingsWidget.cpp @@ -23,17 +23,29 @@ static const char* THEME_NAMES[] = { QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Native"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Fusion [Light]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Dark Fusion (Gray) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Dark Fusion (Blue) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Untouched Lagoon (Grayish Green/-Blue ) [Light]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Baby Pastel (Pink) [Light]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "PCSX2 (White/Blue) [Light]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Scarlet Devil (Red/Purple) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Violet Angel (Blue/Purple) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Cobalt Sky (Royal Blue) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Ruby (Black/Red) [Dark]"), + //: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Sapphire (Black/Blue) [Dark]"), + //: "Custom.qss" must be kept as-is. QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Custom.qss [Drop in PCSX2 Folder]"), nullptr}; @@ -99,6 +111,7 @@ InterfaceSettingsWidget::InterfaceSettingsWidget(SettingsDialog* dialog, QWidget SettingWidgetBinder::BindWidgetToStringSetting(sif, m_ui.autoUpdateTag, "AutoUpdater", "UpdateTag", AutoUpdaterDialog::getDefaultTag()); + //: Variable %1 shows the version number and variable %2 shows a timestamp. m_ui.autoUpdateCurrentVersion->setText(tr("%1 (%2)").arg(AutoUpdaterDialog::getCurrentVersion()).arg(AutoUpdaterDialog::getCurrentVersionDate())); connect(m_ui.checkForUpdates, &QPushButton::clicked, this, []() { g_main_window->checkForUpdates(true, true); }); } @@ -140,6 +153,7 @@ InterfaceSettingsWidget::InterfaceSettingsWidget(SettingsDialog* dialog, QWidget tr("Pauses the emulator when you minimize the window or switch to another application, " "and unpauses when you switch back.")); dialog->registerWidgetHelp(m_ui.backupSaveStates, tr("Create Save State Backups"), tr("Unchecked"), + //: Do not translate the ".backup" extension. tr("Creates a backup copy of a save state if it already exists when the save is created. The backup copy has a .backup suffix.")); dialog->registerWidgetHelp(m_ui.startFullscreen, tr("Start Fullscreen"), tr("Unchecked"), tr("Automatically switches to fullscreen mode when a game is started.")); diff --git a/pcsx2-qt/Settings/InterfaceSettingsWidget.ui b/pcsx2-qt/Settings/InterfaceSettingsWidget.ui index bb7519608d..be2e5d615d 100644 --- a/pcsx2-qt/Settings/InterfaceSettingsWidget.ui +++ b/pcsx2-qt/Settings/InterfaceSettingsWidget.ui @@ -11,7 +11,7 @@
- Form + Form diff --git a/pcsx2-qt/Settings/MemoryCardConvertDialog.cpp b/pcsx2-qt/Settings/MemoryCardConvertDialog.cpp index 911ed42262..0312350300 100644 --- a/pcsx2-qt/Settings/MemoryCardConvertDialog.cpp +++ b/pcsx2-qt/Settings/MemoryCardConvertDialog.cpp @@ -67,11 +67,13 @@ MemoryCardConvertDialog::MemoryCardConvertDialog(QWidget* parent, QString select SetType(MemoryCardType::File, MemoryCardFileType::PS2_64MB, "8x larger than a standard Memory Card. Likely to have compatibility issues."); break; default: + //: MemoryCardType should be left as-is. QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); return; } break; default: + //: MemoryCardType should be left as-is. QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); return; } @@ -231,6 +233,7 @@ bool MemoryCardConvertDialog::SetupPicklist() break; default: + //: MemoryCardType should be left as-is. QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); return false; } diff --git a/pcsx2-qt/Settings/MemoryCardSettingsWidget.cpp b/pcsx2-qt/Settings/MemoryCardSettingsWidget.cpp index ddfc4d0f5b..2771436294 100644 --- a/pcsx2-qt/Settings/MemoryCardSettingsWidget.cpp +++ b/pcsx2-qt/Settings/MemoryCardSettingsWidget.cpp @@ -509,6 +509,7 @@ void MemoryCardSlotWidget::setCard(const std::optional& name) else { item->setIcon(QIcon::fromTheme("close-line")); + //: Ignore Crowdin's warning for [Missing], the text should be translated. item->setText(tr("%1 [Missing]").arg(QString::fromStdString(name.value()))); } } diff --git a/pcsx2-qt/Settings/MemoryCardSettingsWidget.ui b/pcsx2-qt/Settings/MemoryCardSettingsWidget.ui index 9031a9ec3c..8cc375f027 100644 --- a/pcsx2-qt/Settings/MemoryCardSettingsWidget.ui +++ b/pcsx2-qt/Settings/MemoryCardSettingsWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Settings/USBBindingWidget_DrivingForce.ui b/pcsx2-qt/Settings/USBBindingWidget_DrivingForce.ui index 04cb1024fc..f4a25f0c4e 100644 --- a/pcsx2-qt/Settings/USBBindingWidget_DrivingForce.ui +++ b/pcsx2-qt/Settings/USBBindingWidget_DrivingForce.ui @@ -17,7 +17,7 @@ - Form + Form @@ -86,7 +86,7 @@ - PushButton + PushButton @@ -136,7 +136,7 @@ - PushButton + PushButton @@ -176,7 +176,7 @@ - PushButton + PushButton @@ -216,7 +216,7 @@ - PushButton + PushButton @@ -256,7 +256,7 @@ - PushButton + PushButton @@ -299,7 +299,7 @@ - PushButton + PushButton @@ -339,7 +339,7 @@ - PushButton + PushButton @@ -392,7 +392,7 @@ - PushButton + PushButton @@ -451,7 +451,7 @@ - PushButton + PushButton @@ -491,7 +491,7 @@ - PushButton + PushButton @@ -587,7 +587,7 @@ - PushButton + PushButton @@ -633,7 +633,7 @@ - PushButton + PushButton @@ -698,7 +698,7 @@ - PushButton + PushButton @@ -738,7 +738,7 @@ - PushButton + PushButton @@ -778,7 +778,7 @@ - PushButton + PushButton @@ -818,7 +818,7 @@ - PushButton + PushButton @@ -861,7 +861,7 @@ - PushButton + PushButton @@ -901,7 +901,7 @@ - PushButton + PushButton @@ -954,7 +954,7 @@ - PushButton + PushButton diff --git a/pcsx2-qt/Settings/USBBindingWidget_GTForce.ui b/pcsx2-qt/Settings/USBBindingWidget_GTForce.ui index e5912ed9a0..677d08b07f 100644 --- a/pcsx2-qt/Settings/USBBindingWidget_GTForce.ui +++ b/pcsx2-qt/Settings/USBBindingWidget_GTForce.ui @@ -23,7 +23,7 @@ - Form + Form @@ -92,7 +92,7 @@ - PushButton + PushButton @@ -149,7 +149,7 @@ - PushButton + PushButton @@ -189,7 +189,7 @@ - PushButton + PushButton @@ -242,7 +242,7 @@ - PushButton + PushButton @@ -301,7 +301,7 @@ - PushButton + PushButton @@ -341,7 +341,7 @@ - PushButton + PushButton @@ -434,7 +434,7 @@ - PushButton + PushButton @@ -480,7 +480,7 @@ - PushButton + PushButton @@ -552,7 +552,7 @@ - PushButton + PushButton @@ -592,7 +592,7 @@ - PushButton + PushButton @@ -645,7 +645,7 @@ - PushButton + PushButton diff --git a/pcsx2-qt/Settings/USBDeviceWidget.ui b/pcsx2-qt/Settings/USBDeviceWidget.ui index 0bb31796a7..2a36f16d7e 100644 --- a/pcsx2-qt/Settings/USBDeviceWidget.ui +++ b/pcsx2-qt/Settings/USBDeviceWidget.ui @@ -11,7 +11,7 @@ - Form + Form diff --git a/pcsx2-qt/Tools/InputRecording/NewInputRecordingDlg.ui b/pcsx2-qt/Tools/InputRecording/NewInputRecordingDlg.ui index e1ab82d6af..1a1a9c4f45 100644 --- a/pcsx2-qt/Tools/InputRecording/NewInputRecordingDlg.ui +++ b/pcsx2-qt/Tools/InputRecording/NewInputRecordingDlg.ui @@ -36,7 +36,7 @@ - Power On + Power On true @@ -46,7 +46,7 @@ - Save State + Save State