Qt:i18n: Adding I18N comments for translators, minor typo fixes (#8048)

This commit is contained in:
Víctor "IlDucci 2023-03-18 22:14:55 +01:00 committed by GitHub
parent 18045c195a
commit 83471bdacd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 303 additions and 196 deletions

View File

@ -66,7 +66,7 @@
<item> <item>
<widget class="QLabel" name="scmversion"> <widget class="QLabel" name="scmversion">
<property name="text"> <property name="text">
<string>SCM Version</string> <string extracomment="SCM= Source Code Management">SCM Version</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
@ -128,7 +128,7 @@
<item> <item>
<widget class="QLabel" name="links"> <widget class="QLabel" name="links">
<property name="text"> <property name="text">
<string>TextLabel</string> <string notr="true">TextLabel</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>

View File

@ -418,6 +418,7 @@ void CpuWidget::onFuncListContextMenu(QPoint pos)
else else
m_funclistContextMenu->clear(); 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); QAction* demangleAction = new QAction(tr("Demangle Symbols"), m_ui.listFunctions);
demangleAction->setCheckable(true); demangleAction->setCheckable(true);
demangleAction->setChecked(m_demangleFunctions); demangleAction->setChecked(m_demangleFunctions);

View File

@ -159,7 +159,7 @@
<item row="4" column="1" colspan="3"> <item row="4" column="1" colspan="3">
<widget class="QLineEdit" name="txtSearchStart"> <widget class="QLineEdit" name="txtSearchStart">
<property name="text"> <property name="text">
<string>0x00</string> <string notr="true">0x00</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -183,7 +183,7 @@
<item row="5" column="1" colspan="3"> <item row="5" column="1" colspan="3">
<widget class="QLineEdit" name="txtSearchEnd"> <widget class="QLineEdit" name="txtSearchEnd">
<property name="text"> <property name="text">
<string>0x2000000</string> <string notr="true">0x2000000</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -79,6 +79,7 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
QString type(""); QString type("");
type += (mc->cond & MEMCHECK_READ) ? tr("Read") : ""; type += (mc->cond & MEMCHECK_READ) ? tr("Read") : "";
type += ((mc->cond & MEMCHECK_BOTH) == MEMCHECK_BOTH) ? ", " : " "; 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") : ""; type += (mc->cond & MEMCHECK_WRITE) ? (mc->cond & MEMCHECK_WRITE_ONCHANGE) ? tr("Write(C)") : tr("Write") : "";
return type; return type;
} }
@ -169,18 +170,25 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
switch (section) switch (section)
{ {
case BreakpointColumns::TYPE: case BreakpointColumns::TYPE:
//: Warning: limited space available. Abbreviate if needed.
return tr("TYPE"); return tr("TYPE");
case BreakpointColumns::OFFSET: case BreakpointColumns::OFFSET:
//: Warning: limited space available. Abbreviate if needed.
return tr("OFFSET"); return tr("OFFSET");
case BreakpointColumns::SIZE_LABEL: case BreakpointColumns::SIZE_LABEL:
//: Warning: limited space available. Abbreviate if needed.
return tr("SIZE / LABEL"); return tr("SIZE / LABEL");
case BreakpointColumns::OPCODE: case BreakpointColumns::OPCODE:
//: Warning: limited space available. Abbreviate if needed.
return tr("INSTRUCTION"); return tr("INSTRUCTION");
case BreakpointColumns::CONDITION: case BreakpointColumns::CONDITION:
//: Warning: limited space available. Abbreviate if needed.
return tr("CONDITION"); return tr("CONDITION");
case BreakpointColumns::HITS: case BreakpointColumns::HITS:
//: Warning: limited space available. Abbreviate if needed.
return tr("HITS"); return tr("HITS");
case BreakpointColumns::ENABLED: case BreakpointColumns::ENABLED:
//: Warning: limited space available. Abbreviate if needed.
return tr("ENABLED"); return tr("ENABLED");
default: default:
return QVariant(); return QVariant();

View File

@ -87,16 +87,22 @@ QVariant StackModel::headerData(int section, Qt::Orientation orientation, int ro
switch (section) switch (section)
{ {
case StackColumns::ENTRY: case StackColumns::ENTRY:
//: Warning: short space limit. Abbreviate if needed.
return tr("ENTRY"); return tr("ENTRY");
case StackColumns::ENTRY_LABEL: case StackColumns::ENTRY_LABEL:
//: Warning: short space limit. Abbreviate if needed.
return tr("LABEL"); return tr("LABEL");
case StackColumns::PC: case StackColumns::PC:
//: Warning: short space limit. Abbreviate if needed. PC = Program Counter (location where the CPU is executing).
return tr("PC"); return tr("PC");
case StackColumns::PC_OPCODE: case StackColumns::PC_OPCODE:
//: Warning: short space limit. Abbreviate if needed.
return tr("INSTRUCTION"); return tr("INSTRUCTION");
case StackColumns::SP: case StackColumns::SP:
//: Warning: short space limit. Abbreviate if needed.
return tr("STACK POINTER"); return tr("STACK POINTER");
case StackColumns::SIZE: case StackColumns::SIZE:
//: Warning: short space limit. Abbreviate if needed.
return tr("SIZE"); return tr("SIZE");
default: default:
return QVariant(); return QVariant();

View File

@ -110,16 +110,22 @@ QVariant ThreadModel::headerData(int section, Qt::Orientation orientation, int r
switch (section) switch (section)
{ {
case ThreadColumns::ID: case ThreadColumns::ID:
//: Warning: short space limit. Abbreviate if needed.
return tr("ID"); return tr("ID");
case ThreadColumns::PC: case ThreadColumns::PC:
//: Warning: short space limit. Abbreviate if needed. PC = Program Counter (location where the CPU is executing).
return tr("PC"); return tr("PC");
case ThreadColumns::ENTRY: case ThreadColumns::ENTRY:
//: Warning: short space limit. Abbreviate if needed.
return tr("ENTRY"); return tr("ENTRY");
case ThreadColumns::PRIORITY: case ThreadColumns::PRIORITY:
//: Warning: short space limit. Abbreviate if needed.
return tr("PRIORITY"); return tr("PRIORITY");
case ThreadColumns::STATE: case ThreadColumns::STATE:
//: Warning: short space limit. Abbreviate if needed.
return tr("STATE"); return tr("STATE");
case ThreadColumns::WAIT_TYPE: case ThreadColumns::WAIT_TYPE:
//: Warning: short space limit. Abbreviate if needed.
return tr("WAIT TYPE"); return tr("WAIT TYPE");
default: default:
return QVariant(); return QVariant();

View File

@ -49,24 +49,42 @@ public:
private: private:
const std::map<ThreadStatus, QString> ThreadStateStrings{ const std::map<ThreadStatus, QString> 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")}, {ThreadStatus::THS_BAD, tr("BAD")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_RUN, tr("RUN")}, {ThreadStatus::THS_RUN, tr("RUN")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_READY, tr("READY")}, {ThreadStatus::THS_READY, tr("READY")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_WAIT, tr("WAIT")}, {ThreadStatus::THS_WAIT, tr("WAIT")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_SUSPEND, tr("SUSPEND")}, {ThreadStatus::THS_SUSPEND, tr("SUSPEND")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_WAIT_SUSPEND, tr("WAIT SUSPEND")}, {ThreadStatus::THS_WAIT_SUSPEND, tr("WAIT SUSPEND")},
//: Refers to a Thread State in the Debugger.
{ThreadStatus::THS_DORMANT, tr("DORMANT")}, {ThreadStatus::THS_DORMANT, tr("DORMANT")},
}; };
const std::map<WaitState, QString> ThreadWaitStrings{ const std::map<WaitState, QString> 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")}, {WaitState::NONE, tr("NONE")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::WAKEUP_REQ, tr("WAKEUP REQUEST")}, {WaitState::WAKEUP_REQ, tr("WAKEUP REQUEST")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::SEMA, tr("SEMAPHORE")}, {WaitState::SEMA, tr("SEMAPHORE")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::SLEEP, tr("SLEEP")}, {WaitState::SLEEP, tr("SLEEP")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::DELAY, tr("DELAY")}, {WaitState::DELAY, tr("DELAY")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::EVENTFLAG, tr("EVENTFLAG")}, {WaitState::EVENTFLAG, tr("EVENTFLAG")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::MBOX, tr("MBOX")}, {WaitState::MBOX, tr("MBOX")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::VPOOL, tr("VPOOL")}, {WaitState::VPOOL, tr("VPOOL")},
//: Refers to a Thread Wait State in the Debugger.
{WaitState::FIXPOOL, tr("FIXPOOL")}, {WaitState::FIXPOOL, tr("FIXPOOL")},
}; };

View File

@ -342,6 +342,7 @@ bool RegisterWidget::contextFetchNewValue(u64& out, u64 currentValue, bool segme
else else
existingValue = existingValue.arg(bit_cast<float>((u32)currentValue)); existingValue = existingValue.arg(bit_cast<float>((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)), "", QString input = QInputDialog::getText(this, tr("Change %1").arg(m_cpu->getRegisterName(categoryIndex, m_selectedRow)), "",
QLineEdit::Normal, existingValue, &ok); QLineEdit::Normal, existingValue, &ok);

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
@ -40,7 +40,7 @@
<item> <item>
<widget class="QLabel" name="supportedFormats"> <widget class="QLabel" name="supportedFormats">
<property name="text"> <property name="text">
<string>TextLabel</string> <string notr="true">TextLabel</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing"> <property name="spacing">

View File

@ -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...")); action = menu.addAction(tr("Open Containing Directory..."));
connect(action, &QAction::triggered, [this, entry]() { connect(action, &QAction::triggered, [this, entry]() {
const QFileInfo fi(QString::fromStdString(entry->path)); const QFileInfo fi(QString::fromStdString(entry->path));

View File

@ -664,7 +664,7 @@
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>System &amp;Display</string> <string extracomment="This grayed-out at first option will become available while there is a game emulated and the game list is displayed over the actual emulation, to let users display the system emulation once more.">System &amp;Display</string>
</property> </property>
</action> </action>
<action name="actionViewGameProperties"> <action name="actionViewGameProperties">
@ -787,7 +787,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>New</string> <string extracomment="This section refers to the Input Recording submenu.">New</string>
</property> </property>
</action> </action>
<action name="actionInputRecPlay"> <action name="actionInputRecPlay">
@ -795,7 +795,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Play</string> <string extracomment="This section refers to the Input Recording submenu.">Play</string>
</property> </property>
</action> </action>
<action name="actionInputRecStop"> <action name="actionInputRecStop">
@ -803,7 +803,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Stop</string> <string extracomment="This section refers to the Input Recording submenu.">Stop</string>
</property> </property>
</action> </action>
<action name="actionInputRecOpenSettings"> <action name="actionInputRecOpenSettings">
@ -811,7 +811,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Settings</string> <string extracomment="This section refers to the Input Recording submenu.">Settings</string>
</property> </property>
</action> </action>
<action name="actionRecording_Console_Logs"> <action name="actionRecording_Console_Logs">

View File

@ -124,7 +124,9 @@ namespace SettingWidgetBinder
static void setBoolValue(QComboBox* widget, bool value) { widget->setCurrentIndex(value ? 1 : 0); } static void setBoolValue(QComboBox* widget, bool value) { widget->setCurrentIndex(value ? 1 : 0); }
static void makeNullableBool(QComboBox* widget, bool globalValue) 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]") : 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]")); qApp->translate("SettingsDialog", "Use Global Setting [Disabled]"));
} }
@ -1045,6 +1047,7 @@ namespace SettingWidgetBinder
{ {
QObject::connect(browse_button, &QAbstractButton::clicked, browse_button, [widget, key]() { QObject::connect(browse_button, &QAbstractButton::clicked, browse_button, [widget, key]() {
const QString path(QDir::toNativeSeparators(QFileDialog::getExistingDirectory(QtUtils::GetRootWidget(widget), 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))))); qApp->translate("SettingWidgetBinder", "Select folder for %1").arg(QString::fromStdString(key)))));
if (path.isEmpty()) if (path.isEmpty())
return; return;

View File

@ -149,6 +149,7 @@ void AchievementSettingsWidget::updateLoginState()
const u64 login_unix_timestamp = const u64 login_unix_timestamp =
StringUtil::FromChars<u64>(Host::GetBaseStringSettingValue("Achievements", "LoginTimestamp", "0")).value_or(0); StringUtil::FromChars<u64>(Host::GetBaseStringSettingValue("Achievements", "LoginTimestamp", "0")).value_or(0);
const QDateTime login_timestamp(QDateTime::fromSecsSinceEpoch(static_cast<qint64>(login_unix_timestamp))); const QDateTime login_timestamp(QDateTime::fromSecsSinceEpoch(static_cast<qint64>(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.") m_ui.loginStatus->setText(tr("Username: %1\nLogin token generated on %2.")
.arg(QString::fromStdString(username)) .arg(QString::fromStdString(username))
.arg(login_timestamp.toString(Qt::TextDate))); .arg(login_timestamp.toString(Qt::TextDate)));

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -49,7 +49,7 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="richPresence"> <widget class="QCheckBox" name="richPresence">
<property name="text"> <property name="text">
<string>Enable RA's Rich Presence</string> <string extracomment="This &quot;Rich Presence&quot; is not Discord's, but rather RetroAchivements own system.">Enable RA's Rich Presence</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -74,15 +74,18 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(SettingsDialog* dialog, QWidget*
dialog->registerWidgetHelp(m_ui.eeRecompiler, tr("Enable Recompiler"), tr("Checked"), 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.")); 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"), dialog->registerWidgetHelp(m_ui.eeWaitLoopDetection, tr("Wait Loop Detection"), tr("Checked"),
tr("Moderate speedup for some games, with no known side effects.")); 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.")); 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"), dialog->registerWidgetHelp(m_ui.eeINTCSpinDetection, tr("INTC Spin Detection"), tr("Checked"),
tr("Huge speedup for some games, with almost no compatibility side effects.")); tr("Huge speedup for some games, with almost no compatibility side effects."));
dialog->registerWidgetHelp(m_ui.eeFastmem, tr("Enable Fast Memory Access"), tr("Checked"), 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.")); tr("Uses backpatching to avoid register flushing on every memory access."));
dialog->registerWidgetHelp(m_ui.pauseOnTLBMiss, tr("Pause On TLB Miss"), tr("Unchecked"), 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.vu0ClampMode, tr("VU0 Clamping Mode"), tr("Normal (Default)"), tr(""));
dialog->registerWidgetHelp(m_ui.vu1ClampMode, tr("VU1 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.")); 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(m_ui.vu1Recompiler, tr("Enable VU1 Recompiler"), tr("Checked"), tr("Enables VU1 Recompiler."));
dialog->registerWidgetHelp( 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.")); 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"), dialog->registerWidgetHelp(m_ui.iopRecompiler, tr("Enable Recompiler"), tr("Checked"),

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin"> <property name="leftMargin">
@ -63,13 +63,13 @@
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>EmotionEngine (MIPS-IV)</string> <string extracomment="Emotion Engine = Commercial name of one of PS2's processors. Leave as-is unless there's an official name (like for Japanese).">EmotionEngine (MIPS-IV)</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="text"> <property name="text">
<string>Rounding Mode:</string> <string extracomment="Rounding refers here to the mathematical term.">Rounding Mode:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -100,7 +100,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="text"> <property name="text">
<string>Clamping Mode:</string> <string extracomment="Clamping: Forcing out of bounds things in bounds by changing them to the closest possible value. In this case, this refers to clamping large PS2 floating point values (which map to infinity or NaN in PCs' IEEE754 floats) to non-infinite ones.">Clamping Mode:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -108,7 +108,7 @@
<widget class="QComboBox" name="eeClampMode"> <widget class="QComboBox" name="eeClampMode">
<item> <item>
<property name="text"> <property name="text">
<string>None</string> <string comment="ClampMode">None</string>
</property> </property>
</item> </item>
<item> <item>
@ -118,7 +118,7 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Extra + Preserve Sign</string> <string extracomment="Sign: refers here to the mathematical meaning (plus/minus).">Extra + Preserve Sign</string>
</property> </property>
</item> </item>
<item> <item>
@ -180,7 +180,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_2"> <widget class="QGroupBox" name="groupBox_2">
<property name="title"> <property name="title">
<string>Vector Units (VU)</string> <string extracomment="Vector Unit/VU: refers to two of PS2's processors. Do not translate the full text or do so as a comment. Leave the acronym as-is.">Vector Units (VU)</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="2" column="0"> <item row="2" column="0">
@ -383,7 +383,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QDoubleSpinBox" name="palFrameRate"> <widget class="QDoubleSpinBox" name="palFrameRate">
<property name="suffix"> <property name="suffix">
<string> hz</string> <string extracomment="hz=Hertz, as in the measuring unit. Shown after the corresponding number. Those languages who'd need to remove the space or do something in between should do so."> hz</string>
</property> </property>
<property name="singleStep"> <property name="singleStep">
<double>0.010000000000000</double> <double>0.010000000000000</double>

View File

@ -40,8 +40,10 @@ static constexpr s32 DEFAULT_SOUNDTOUCH_SEEK_WINDOW = 20;
static constexpr s32 DEFAULT_SOUNDTOUCH_OVERLAP = 10; static constexpr s32 DEFAULT_SOUNDTOUCH_OVERLAP = 10;
static const char* s_output_module_entries[] = {QT_TRANSLATE_NOOP("AudioSettingsWidget", "No Sound (Emulate SPU2 only)"), 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)"), QT_TRANSLATE_NOOP("AudioSettingsWidget", "Cubeb (Cross-platform)"),
#ifdef _WIN32 #ifdef _WIN32
//: XAudio2 is an audio engine name. Leave as-is.
QT_TRANSLATE_NOOP("AudioSettingsWidget", "XAudio2"), QT_TRANSLATE_NOOP("AudioSettingsWidget", "XAudio2"),
#endif #endif
nullptr}; nullptr};
@ -70,6 +72,7 @@ AudioSettingsWidget::AudioSettingsWidget(SettingsDialog* dialog, QWidget* parent
SettingWidgetBinder::BindWidgetToEnumSetting( SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.outputModule, "SPU2/Output", "OutputModule", s_output_module_entries, s_output_module_values, DEFAULT_OUTPUT_MODULE); sif, m_ui.outputModule, "SPU2/Output", "OutputModule", s_output_module_entries, s_output_module_values, DEFAULT_OUTPUT_MODULE);
SettingWidgetBinder::BindSliderToIntSetting( 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); sif, m_ui.targetLatency, m_ui.targetLatencyLabel, tr(" ms"), "SPU2/Output", "Latency", DEFAULT_TARGET_LATENCY);
SettingWidgetBinder::BindSliderToIntSetting( SettingWidgetBinder::BindSliderToIntSetting(
sif, m_ui.outputLatency, m_ui.outputLatencyLabel, tr(" ms"), "SPU2/Output", "OutputLatency", DEFAULT_OUTPUT_LATENCY); 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("")); 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.outputModule, tr("Output Module"), tr("Cubeb (Cross-platform)"), tr(""));
dialog->registerWidgetHelp(m_ui.backend, tr("Output Backend"), tr("Default"), 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("")); 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.seekWindowSize, tr("Seek Window Size"), tr("20 ms"), tr(""));
dialog->registerWidgetHelp(m_ui.overlap, tr("Overlap"), tr("10 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() 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())); 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); 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())); m_ui.outputLatencyLabel->setText(minimal_output ? tr("N/A") : tr("%1 ms").arg(m_ui.outputLatency->value()));
const u32 output_latency_ms = const u32 output_latency_ms =

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin"> <property name="leftMargin">
@ -337,7 +337,7 @@
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_3b"> <widget class="QLabel" name="label_3b">
<property name="text"> <property name="text">
<string>ProLogic Level:</string> <string extracomment="ProLogic is a Dolby brand. Leave the name as-is unless there is an official translation for your language.">ProLogic Level:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -350,12 +350,12 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>ProLogic Decoding (basic)</string> <string extracomment="ProLogic is a Dolby brand. Leave the name as-is unless there is an official translation for your language.">ProLogic Decoding (basic)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>ProLogic II Decoding (gigaherz)</string> <string extracomment="ProLogic II is a Dolby brand. Leave the name as-is unless there is an official translation for your language. gigaherz is the nickname of one of PCSX2's developers. Leave as-is.">ProLogic II Decoding (gigaherz)</string>
</property> </property>
</item> </item>
</widget> </widget>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -23,7 +23,7 @@
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_35"> <layout class="QGridLayout" name="gridLayout_35">
<property name="leftMargin"> <property name="leftMargin">
@ -43,7 +43,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>D-Pad</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">D-Pad</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="3" column="1" colspan="2"> <item row="3" column="1" colspan="2">
@ -79,7 +79,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -119,7 +119,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -159,7 +159,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -199,7 +199,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -212,7 +212,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_6"> <widget class="QGroupBox" name="groupBox_6">
<property name="title"> <property name="title">
<string>Left Analog</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Left Analog</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_6"> <layout class="QGridLayout" name="gridLayout_6">
<item row="3" column="1" colspan="2"> <item row="3" column="1" colspan="2">
@ -248,7 +248,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -288,7 +288,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -328,7 +328,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -368,7 +368,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -411,7 +411,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -438,7 +438,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QGroupBox" name="groupBox_21"> <widget class="QGroupBox" name="groupBox_21">
<property name="title"> <property name="title">
<string>L2</string> <string extracomment="Leave this button name as-is.">L2</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_21"> <layout class="QGridLayout" name="gridLayout_21">
<property name="leftMargin"> <property name="leftMargin">
@ -462,7 +462,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -472,7 +472,7 @@
<item row="0" column="3"> <item row="0" column="3">
<widget class="QGroupBox" name="groupBox_23"> <widget class="QGroupBox" name="groupBox_23">
<property name="title"> <property name="title">
<string>R2</string> <string extracomment="Leave this button name as-is.">R2</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_23"> <layout class="QGridLayout" name="gridLayout_23">
<property name="leftMargin"> <property name="leftMargin">
@ -496,7 +496,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -506,7 +506,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QGroupBox" name="groupBox_22"> <widget class="QGroupBox" name="groupBox_22">
<property name="title"> <property name="title">
<string>L1</string> <string extracomment="Leave this button name as-is.">L1</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_22"> <layout class="QGridLayout" name="gridLayout_22">
<property name="leftMargin"> <property name="leftMargin">
@ -530,7 +530,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -540,7 +540,7 @@
<item row="1" column="3"> <item row="1" column="3">
<widget class="QGroupBox" name="groupBox_24"> <widget class="QGroupBox" name="groupBox_24">
<property name="title"> <property name="title">
<string>R1</string> <string extracomment="Leave this button name as-is.">R1</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_24"> <layout class="QGridLayout" name="gridLayout_24">
<property name="leftMargin"> <property name="leftMargin">
@ -564,7 +564,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -574,7 +574,7 @@
<item row="1" column="2"> <item row="1" column="2">
<widget class="QGroupBox" name="groupBox_26"> <widget class="QGroupBox" name="groupBox_26">
<property name="title"> <property name="title">
<string>Start</string> <string extracomment="Leave this button name as-is or uppercase it entirely.">Start</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_26"> <layout class="QGridLayout" name="gridLayout_26">
<property name="leftMargin"> <property name="leftMargin">
@ -598,7 +598,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -608,7 +608,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QGroupBox" name="groupBox_25"> <widget class="QGroupBox" name="groupBox_25">
<property name="title"> <property name="title">
<string>Select</string> <string extracomment="Leave this button name as-is or uppercase it entirely.">Select</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_25"> <layout class="QGridLayout" name="gridLayout_25">
<property name="leftMargin"> <property name="leftMargin">
@ -632,7 +632,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -646,13 +646,13 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_16"> <widget class="QGroupBox" name="groupBox_16">
<property name="title"> <property name="title">
<string>Face Buttons</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Face Buttons</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_16"> <layout class="QGridLayout" name="gridLayout_16">
<item row="3" column="1" colspan="2"> <item row="3" column="1" colspan="2">
<widget class="QGroupBox" name="groupBox_17"> <widget class="QGroupBox" name="groupBox_17">
<property name="title"> <property name="title">
<string>Cross</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Cross</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_17"> <layout class="QGridLayout" name="gridLayout_17">
<property name="leftMargin"> <property name="leftMargin">
@ -682,7 +682,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -692,7 +692,7 @@
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_18"> <widget class="QGroupBox" name="groupBox_18">
<property name="title"> <property name="title">
<string>Square</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Square</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_18"> <layout class="QGridLayout" name="gridLayout_18">
<property name="leftMargin"> <property name="leftMargin">
@ -722,7 +722,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -732,7 +732,7 @@
<item row="0" column="1" colspan="2"> <item row="0" column="1" colspan="2">
<widget class="QGroupBox" name="groupBox_19"> <widget class="QGroupBox" name="groupBox_19">
<property name="title"> <property name="title">
<string>Triangle</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Triangle</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_19"> <layout class="QGridLayout" name="gridLayout_19">
<property name="leftMargin"> <property name="leftMargin">
@ -762,7 +762,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -772,7 +772,7 @@
<item row="2" column="2" colspan="2"> <item row="2" column="2" colspan="2">
<widget class="QGroupBox" name="groupBox_20"> <widget class="QGroupBox" name="groupBox_20">
<property name="title"> <property name="title">
<string>Circle</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Circle</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_20"> <layout class="QGridLayout" name="gridLayout_20">
<property name="leftMargin"> <property name="leftMargin">
@ -802,7 +802,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -815,7 +815,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_11"> <widget class="QGroupBox" name="groupBox_11">
<property name="title"> <property name="title">
<string>Right Analog</string> <string extracomment="Try to use Sony's official terminology for this. A good place to start would be in the console or the DualShock 2's manual. If this element was officially translated to your language by Sony in later DualShocks, you may use that term.">Right Analog</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_11"> <layout class="QGridLayout" name="gridLayout_11">
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
@ -851,7 +851,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -891,7 +891,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -931,7 +931,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -971,7 +971,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1014,7 +1014,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1109,7 +1109,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QGroupBox" name="groupBox_27"> <widget class="QGroupBox" name="groupBox_27">
<property name="title"> <property name="title">
<string>L3</string> <string extracomment="Leave this button name as-is.">L3</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_28"> <layout class="QGridLayout" name="gridLayout_28">
<property name="leftMargin"> <property name="leftMargin">
@ -1139,7 +1139,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1149,7 +1149,7 @@
<item row="0" column="3"> <item row="0" column="3">
<widget class="QGroupBox" name="groupBox_28"> <widget class="QGroupBox" name="groupBox_28">
<property name="title"> <property name="title">
<string>R3</string> <string extracomment="Leave this button name as-is.">R3</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_29"> <layout class="QGridLayout" name="gridLayout_29">
<property name="leftMargin"> <property name="leftMargin">
@ -1179,7 +1179,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1213,7 +1213,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1235,7 +1235,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -198,7 +198,9 @@ void ControllerBindingWidget::onAutomaticBindingClicked()
void ControllerBindingWidget::onClearBindingsClicked() 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"), 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) tr("Are you sure you want to clear all bindings for this controller? This action cannot be undone.")) != QMessageBox::Yes)
{ {
return; return;
@ -275,6 +277,7 @@ ControllerMacroWidget::~ControllerMacroWidget() = default;
void ControllerMacroWidget::updateListItem(u32 index) 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<int>(index))->setText(tr("Macro %1\n%2").arg(index + 1).arg(m_macros[index]->getSummary())); m_ui.portList->item(static_cast<int>(index))->setText(tr("Macro %1\n%2").arg(index + 1).arg(m_macros[index]->getSummary()));
} }

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QGridLayout" name="mainLayout" columnstretch="1,0"> <layout class="QGridLayout" name="mainLayout" columnstretch="1,0">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -119,7 +119,7 @@
<item row="1" column="0" colspan="2"> <item row="1" column="0" colspan="2">
<widget class="InputBindingWidget" name="trigger"> <widget class="InputBindingWidget" name="trigger">
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -402,7 +402,9 @@ void ControllerSettingsDialog::createWidgets()
const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown"));
QListWidgetItem* item = new QListWidgetItem(); 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)) : 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)); tr("Controller Port %1\n%2").arg(port + 1).arg(display_name));
item->setIcon(m_port_bindings[global_slot]->getIcon()); item->setIcon(m_port_bindings[global_slot]->getIcon());
item->setData(Qt::UserRole, QVariant(global_slot)); 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 PAD::ControllerInfo* ci = PAD::GetControllerInfo(widget->getControllerType());
const QString display_name(ci ? QString::fromUtf8(ci->display_name) : QStringLiteral("Unknown")); 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)) : 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)); tr("Controller Port %1\n%2").arg(port + 1).arg(display_name));
item->setIcon(widget->getIcon()); item->setIcon(widget->getIcon());
break; break;
@ -487,6 +491,7 @@ void ControllerSettingsDialog::refreshProfileList()
QSignalBlocker sb(m_ui.currentProfile); QSignalBlocker sb(m_ui.currentProfile);
m_ui.currentProfile->clear(); m_ui.currentProfile->clear();
//: "Shared" refers here to the shared input profile.
m_ui.currentProfile->addItem(tr("Shared")); m_ui.currentProfile->addItem(tr("Shared"));
if (isEditingGlobalSettings()) if (isEditingGlobalSettings())
m_ui.currentProfile->setCurrentIndex(0); m_ui.currentProfile->setCurrentIndex(0);

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -68,7 +68,7 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="ethInterceptDHCP"> <widget class="QCheckBox" name="ethInterceptDHCP">
<property name="text"> <property name="text">
<string>Enabled</string> <string comment="InterceptDHCP">Enabled</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -261,7 +261,7 @@
<item row="0" column="0" colspan="3"> <item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="ethEnabled"> <widget class="QCheckBox" name="ethEnabled">
<property name="text"> <property name="text">
<string>Enabled</string> <string comment="InternalDNSTable">Enabled</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -344,7 +344,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QCheckBox" name="hddEnabled"> <widget class="QCheckBox" name="hddEnabled">
<property name="text"> <property name="text">
<string>Enabled</string> <string comment="HDD">Enabled</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -90,8 +90,10 @@ EmulationSettingsWidget::EmulationSettingsWidget(SettingsDialog* dialog, QWidget
dialog->registerWidgetHelp(m_ui.normalSpeed, tr("Normal Speed"), "100%", 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, " 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.")); "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"), 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.")); 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"), 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.")); 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"), 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.")); "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"), dialog->registerWidgetHelp(m_ui.eeCycleSkipping, tr("EE Cycle Skip"), tr("Disabled"),
tr("Makes the emulated Emotion Engine skip cycles. " 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.")); "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"), 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. " 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).")); "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"), dialog->registerWidgetHelp(m_ui.MTVU, tr("Enable Multithreaded VU1 (MTVU1)"), tr("Checked"),
tr("Generally a speedup on CPUs with 3 or more threads. " 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<float>(speed) / 100.0f)); QVariant(static_cast<float>(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)); cb->addItem(tr("Unlimited"), QVariant(0.0f));
const int custom_index = cb->count(); 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")); cb->addItem(tr("Custom"));
if (const int index = cb->findData(QVariant(value)); index >= 0) if (const int index = cb->findData(QVariant(value)); index >= 0)

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -252,7 +252,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSpinBox" name="maxFrameLatency"> <widget class="QSpinBox" name="maxFrameLatency">
<property name="suffix"> <property name="suffix">
<string> frames</string> <string extracomment="This string will appear next to the amount of frames selected, in a dropdown box."> frames</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
<property name="leftMargin"> <property name="leftMargin">
@ -62,133 +62,133 @@
<item> <item>
<widget class="QCheckBox" name="FpuNegDivHack"> <widget class="QCheckBox" name="FpuNegDivHack">
<property name="text"> <property name="text">
<string>FPU Negative Divide Hack (For Gundam Games)</string> <string extracomment="FPU = Floating Point Unit. A part of the PS2's CPU. Do not translate.\nNegative Divide: mathematical term.\nGundam: a multimedia franchise name. Leave as-is or use an official translation.">FPU Negative Divide Hack (For Gundam Games)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="FpuMulHack"> <widget class="QCheckBox" name="FpuMulHack">
<property name="text"> <property name="text">
<string>FPU Multiply Hack (For Tales of Destiny)</string> <string extracomment="FPU = Floating Point Unit. A part of the PS2's CPU. Do not translate.\nMultiply: mathematical term.\nTales of Destiny: a game's name. Leave as-is or use an official translation.">FPU Multiply Hack (For Tales of Destiny)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="SoftwareRendererFMVHack"> <widget class="QCheckBox" name="SoftwareRendererFMVHack">
<property name="text"> <property name="text">
<string>Use Software Renderer For FMVs</string> <string extracomment="FMV: Full Motion Video. Find the common used term in your language.">Use Software Renderer For FMVs</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="SkipMPEGHack"> <widget class="QCheckBox" name="SkipMPEGHack">
<property name="text"> <property name="text">
<string>Skip MPEG Hack (Skips Videos/FMVs)</string> <string extracomment="MPEG: video codec, leave as-is. FMV: Full Motion Video. Find the common used term in your language.">Skip MPEG Hack (Skips Videos/FMVs)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="GoemonTlbHack"> <widget class="QCheckBox" name="GoemonTlbHack">
<property name="text"> <property name="text">
<string>Preload TLB Hack (For Goemon)</string> <string extracomment="TLB: Translation Lookaside Buffer. Leave as-is. Goemon: name of a character from the series with his name. Leave as-is or use an official translation.">Preload TLB Hack (For Goemon)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="EETimingHack"> <widget class="QCheckBox" name="EETimingHack">
<property name="text"> <property name="text">
<string>EE Timing Hack (General Purpose Timing Hack)</string> <string extracomment="EE: Emotion Engine. Leave as-is.">EE Timing Hack (General Purpose Timing Hack)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="InstantDMAHack"> <widget class="QCheckBox" name="InstantDMAHack">
<property name="text"> <property name="text">
<string>Instant DMA Hack (Good for cache emulation problems)</string> <string extracomment="DMA: Direct Memory Access. Leave as-is.">Instant DMA Hack (Good for cache emulation problems)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="OPHFlagHack"> <widget class="QCheckBox" name="OPHFlagHack">
<property name="text"> <property name="text">
<string>OPH Flag Hack (For Bleach Blade Battlers)</string> <string extracomment="OPH: Name of a flag (Output PatH) in the GIF_STAT register in the EE. Leave as-is.\nBleach Blade Battles: a game's name. Leave as-is or use an official translation.">OPH Flag Hack (For Bleach Blade Battlers)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="GIFFIFOHack"> <widget class="QCheckBox" name="GIFFIFOHack">
<property name="text"> <property name="text">
<string>Emulate GIF FIFO (Correct But Slower)</string> <string extracomment="GIF = GS (Graphics Synthesizer, the GPU) Interface. Leave as-is.\nFIFO = First-In-First-Out, a type of buffer. Leave as-is.">Emulate GIF FIFO (Correct But Slower)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="DMABusyHack"> <widget class="QCheckBox" name="DMABusyHack">
<property name="text"> <property name="text">
<string>DMA Busy Hack (Deny Writes When Busy)</string> <string extracomment="DMA: Direct Memory Access. Leave as-is.">DMA Busy Hack (Deny Writes When Busy)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="VIF1StallHack"> <widget class="QCheckBox" name="VIF1StallHack">
<property name="text"> <property name="text">
<string>Delay VIF1 Stalls (For SOCOM 2 HUD/Spy Hunter)</string> <string extracomment="VIF = VU (Vector Unit) Interface. Leave as-is. SOCOM 2 and Spy Hunter: names of two different games. Leave as-is or use an official translation.\nHUD = Heads-Up Display. The games' interfaces.">Delay VIF1 Stalls (For SOCOM 2 HUD/Spy Hunter)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="VIFFIFOHack"> <widget class="QCheckBox" name="VIFFIFOHack">
<property name="text"> <property name="text">
<string>Emulate VIF FIFO (Correct But Slower)</string> <string extracomment="VIF = VU (Vector Unit) Interface. Leave as-is.\nFIFO = First-In-First-Out, a type of buffer. Leave as-is.">Emulate VIF FIFO (Correct But Slower)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="FullVU0SyncHack"> <widget class="QCheckBox" name="FullVU0SyncHack">
<property name="text"> <property name="text">
<string>Full VU0 Synchronization (Correct But Slower)</string> <string extracomment="VU0 = VU (Vector Unit) 0. Leave as-is.">Full VU0 Synchronization (Correct But Slower)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="IbitHack"> <widget class="QCheckBox" name="IbitHack">
<property name="text"> <property name="text">
<string>VU I Bit Hack (For Scarface The World is Yours/Crash Tag Team Racing)</string> <string extracomment="VU = Vector Unit. Leave as-is.\nI Bit = A bit referred as I, not as 1.\nScarface The World is Yours and Crash Tag Team Racing: names of two different games. Leave as-is or use an official translation.">VU I Bit Hack (For Scarface The World is Yours/Crash Tag Team Racing)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="VuAddSubHack"> <widget class="QCheckBox" name="VuAddSubHack">
<property name="text"> <property name="text">
<string>VU Add Hack (For Tri-Ace Games)</string> <string extracomment="VU = Vector Unit. Leave as-is.\nTri-Ace: a game development company name. Leave as-is.">VU Add Hack (For Tri-Ace Games)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="VUOverflowHack"> <widget class="QCheckBox" name="VUOverflowHack">
<property name="text"> <property name="text">
<string>VU Overflow Hack (Superman Returns)</string> <string extracomment="VU = Vector Unit. Leave as-is.\nSuperman Returns: a game's name. Leave as-is or use an official translation.">VU Overflow Hack (Superman Returns)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="VUSyncHack"> <widget class="QCheckBox" name="VUSyncHack">
<property name="text"> <property name="text">
<string>VU Sync (Run Behind, M-Bit games)</string> <string extracomment="VU = Vector Unit. Leave as-is.\nRun Behind: watch out for misleading capitalization for non-English: this refers to making the VUs run behind (delayed relative to) the EE.\nM-Bit: a bitflag in VU instructions that tells VU0 to synchronize with the EE. M-Bit Game: A game that uses instructions with the M-Bit enabled (unofficial PCSX2 name).">VU Sync (Run Behind, M-Bit games)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="XgKickHack"> <widget class="QCheckBox" name="XgKickHack">
<property name="text"> <property name="text">
<string>VU XGKick Sync (Correct But Slower)</string> <string extracomment="VU = Vector Unit. Leave as-is.\nXGKick: the name of one of the VU's instructions. Leave as-is.">VU XGKick Sync (Correct But Slower)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="BlitInternalFPSHack"> <widget class="QCheckBox" name="BlitInternalFPSHack">
<property name="text"> <property name="text">
<string>Force Blit Internal FPS Detection (When auto-detection fails)</string> <string extracomment="Blit = a data operation. You might want to write it as-is, but fully uppercased. More information: https://en.wikipedia.org/wiki/Bit_blit This option tells PCSX2 to estimate internal FPS by detecting blits (image copies) onto visible display memory.">Force Blit Internal FPS Detection (When auto-detection fails)</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,2,0,1,0"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,2,0,1,0">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -155,37 +155,37 @@
</property> </property>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-B (Brazil)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-B (Brazil)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-C (China)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-C (China)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-HK (Hong Kong)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-HK (Hong Kong)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-J (Japan)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-J (Japan)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-K (Korea)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-K (Korea)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-T (Taiwan)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-T (Taiwan)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>NTSC-U (US)</string> <string extracomment="Leave the code as-is, translate the country's name.">NTSC-U (US)</string>
</property> </property>
</item> </item>
<item> <item>
@ -195,107 +195,107 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-A (Australia)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-A (Australia)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-AF (South Africa)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-AF (South Africa)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-AU (Austria)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-AU (Austria)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-BE (Belgium)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-BE (Belgium)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-E (Europe/Australia)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-E (Europe/Australia)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-F (France)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-F (France)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-FI (Finland)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-FI (Finland)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-G (Germany)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-G (Germany)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-GR (Greece)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-GR (Greece)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-I (Italy)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-I (Italy)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-IN (India)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-IN (India)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-M (Europe/Australia)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-M (Europe/Australia)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-NL (Netherlands)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-NL (Netherlands)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-NO (Norway)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-NO (Norway)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-P (Portugal)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-P (Portugal)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-R (Russia)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-R (Russia)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-S (Spain)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-S (Spain)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-SC (Scandinavia)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-SC (Scandinavia)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-SW (Sweden)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-SW (Sweden)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-SWI (Switzerland)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-SWI (Switzerland)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>PAL-UK (United Kingdom)</string> <string extracomment="Leave the code as-is, translate the country's name.">PAL-UK (United Kingdom)</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -375,7 +375,7 @@
</property> </property>
<item> <item>
<property name="text"> <property name="text">
<string>Shared</string> <string extracomment="Refers to the shared settings profile.">Shared</string>
</property> </property>
</item> </item>
</widget> </widget>

View File

@ -47,19 +47,26 @@ struct RendererInfo
static constexpr RendererInfo s_renderer_info[] = { static constexpr RendererInfo s_renderer_info[] = {
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Automatic (Default)"), GSRendererType::Auto}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Automatic (Default)"), GSRendererType::Auto},
#ifdef _WIN32 #ifdef _WIN32
//: Graphics backend/engine type. Leave as-is.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 11"), GSRendererType::DX11}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 11"), GSRendererType::DX11},
//: Graphics backend/engine type. Leave as-is.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 12"), GSRendererType::DX12}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Direct3D 12"), GSRendererType::DX12},
#endif #endif
#ifdef ENABLE_OPENGL #ifdef ENABLE_OPENGL
//: Graphics backend/engine type. Leave as-is.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "OpenGL"), GSRendererType::OGL}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "OpenGL"), GSRendererType::OGL},
#endif #endif
#ifdef ENABLE_VULKAN #ifdef ENABLE_VULKAN
//: Graphics backend/engine type. Leave as-is.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Vulkan"), GSRendererType::VK}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Vulkan"), GSRendererType::VK},
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
//: Graphics backend/engine type. Leave as-is.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Metal"), GSRendererType::Metal}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Metal"), GSRendererType::Metal},
#endif #endif
//: Graphics backend/engine type (refers to emulating the GS in software, on the CPU). Translate accordingly.
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Software"), GSRendererType::SW}, {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}, {QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Null"), GSRendererType::Null},
}; };
@ -379,6 +386,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
"positioning between pixels.")); "positioning between pixels."));
dialog->registerWidgetHelp(m_ui.PCRTCOffsets, tr("Screen Offsets"), tr("Unchecked"), 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 " 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.")); "screen shake effect, but can make the picture blurry."));
@ -440,7 +448,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
{ {
// Hardware // Hardware
dialog->registerWidgetHelp(m_ui.upscaleMultiplier, tr("Internal Resolution"), tr("Native (PS2) (Default)"), 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.<br>Non-native resolution may cause minor graphical issues in some games.<br>" "older or lower-end GPUs.<br>Non-native resolution may cause minor graphical issues in some games.<br>"
"FMV resolution will remain unchanged, as the video files are pre-rendered.")); "FMV resolution will remain unchanged, as the video files are pre-rendered."));
@ -574,17 +582,22 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
"sprites.")); "sprites."));
dialog->registerWidgetHelp(m_ui.textureOffsetX, tr("Texture Offsets X"), tr("0"), 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 " tr("Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment "
"too.")); "too."));
dialog->registerWidgetHelp(m_ui.textureOffsetY, tr("Texture Offsets Y"), tr("0"), 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 " tr("Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment "
"too.")); "too."));
dialog->registerWidgetHelp(m_ui.alignSprite, tr("Align Sprite"), tr("Unchecked"), 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.")); 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"), 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.")); 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"), dialog->registerWidgetHelp(m_ui.bilinearHack, tr("Bilinear Upscale"), tr("Unchecked"),
@ -611,6 +624,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
// Post Processing tab // 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.casMode, tr("Contrast Adaptive Sharpening"), tr("None (Default)"), tr(""));
dialog->registerWidgetHelp(m_ui.casSharpness, tr("Sharpness"), tr("50%"), 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)"), dialog->registerWidgetHelp(m_ui.gsDumpCompression, tr("GS Dump Compression"), tr("Zstandard (zst)"),
tr("Change the compression algorithm used when creating a GS dump.")); 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"), 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 " 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 " "renderer. This usually results in slower performance, but may be required for some "
"streaming applications, or to uncap framerates on some systems.")); "streaming applications, or to uncap framerates on some systems."));
@ -808,6 +824,7 @@ void GraphicsSettingsWidget::onCaptureContainerChanged()
m_ui.videoCaptureCodec->disconnect(); m_ui.videoCaptureCodec->disconnect();
m_ui.videoCaptureCodec->clear(); 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()); m_ui.videoCaptureCodec->addItem(tr("Default"), QString());
for (const auto& [format, name] : GSCapture::GetVideoCodecList(container.c_str())) for (const auto& [format, name] : GSCapture::GetVideoCodecList(container.c_str()))
{ {

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -161,42 +161,42 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Weave (Top Field First, Sawtooth)</string> <string extracomment="Weave: deinterlacing method that can be translated or left as-is in English. Sawtooth: refers to the jagged effect weave deinterlacing has on motion.">Weave (Top Field First, Sawtooth)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Weave (Bottom Field First, Sawtooth)</string> <string extracomment="Weave: deinterlacing method that can be translated or left as-is in English. Sawtooth: refers to the jagged effect weave deinterlacing has on motion.">Weave (Bottom Field First, Sawtooth)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Bob (Top Field First, Full Frames)</string> <string extracomment="Bob: deinterlacing method that refers to the way it makes video look like it's bobbing up and down.">Bob (Top Field First, Full Frames)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Bob (Bottom Field First, Full Frames)</string> <string extracomment="Bob: deinterlacing method that refers to the way it makes video look like it's bobbing up and down.">Bob (Bottom Field First, Full Frames)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Blend (Top Field First, Merge 2 Fields)</string> <string extracomment="Blend: deinterlacing method that blends the colors of the two frames, can be translated or left as-is in English.">Blend (Top Field First, Merge 2 Fields)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Blend (Bottom Field First, Merge 2 Fields)</string> <string extracomment="Blend: deinterlacing method that blends the colors of the two frames, can be translated or left as-is in English.">Blend (Bottom Field First, Merge 2 Fields)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Adaptive (Top Field First, Similar to Bob + Weave)</string> <string extracomment="Adaptive: deinterlacing method that should be translated.">Adaptive (Top Field First, Similar to Bob + Weave)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Adaptive (Bottom Field First, Similar to Bob + Weave)</string> <string extracomment="Adaptive: deinterlacing method that should be translated.">Adaptive (Bottom Field First, Similar to Bob + Weave)</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -217,12 +217,12 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Bilinear (Smooth)</string> <string extracomment="Smooth: Refers to the texture clarity.">Bilinear (Smooth)</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Bilinear (Sharp)</string> <string extracomment="Sharp: Refers to the texture clarity.">Bilinear (Sharp)</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -237,7 +237,7 @@
<item row="6" column="1"> <item row="6" column="1">
<widget class="QSpinBox" name="stretchY"> <widget class="QSpinBox" name="stretchY">
<property name="suffix"> <property name="suffix">
<string>%</string> <string extracomment="Percentage sign that shows next to a value. You might want to add a space before if you language requires it.">%</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
@ -259,7 +259,7 @@
<item> <item>
<widget class="QLabel" name="label_39"> <widget class="QLabel" name="label_39">
<property name="text"> <property name="text">
<string>Left:</string> <string extracomment="Warning: short space constraints. Abbreviate if necessary.">Left:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -276,7 +276,7 @@
<item> <item>
<widget class="QLabel" name="label_25"> <widget class="QLabel" name="label_25">
<property name="text"> <property name="text">
<string>Top:</string> <string extracomment="Warning: short space constraints. Abbreviate if necessary.">Top:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -293,7 +293,7 @@
<item> <item>
<widget class="QLabel" name="label_40"> <widget class="QLabel" name="label_40">
<property name="text"> <property name="text">
<string>Right:</string> <string extracomment="Warning: short space constraints. Abbreviate if necessary.">Right:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -310,7 +310,7 @@
<item> <item>
<widget class="QLabel" name="label_41"> <widget class="QLabel" name="label_41">
<property name="text"> <property name="text">
<string>Bottom:</string> <string extracomment="Warning: short space constraints. Abbreviate if necessary.">Bottom:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -907,7 +907,7 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_47"> <widget class="QLabel" name="label_47">
<property name="text"> <property name="text">
<string>GPU Target CLUT:</string> <string extracomment="CLUT: Color Look Up Table, often referred to as a palette in non-PS2 things. GPU Target CLUT: GPU handling of when a game uses data from a render target as a CLUT.">GPU Target CLUT:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1218,7 +1218,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QCheckBox" name="wildHack"> <widget class="QCheckBox" name="wildHack">
<property name="text"> <property name="text">
<string>Wild Arms Hack</string> <string extracomment="Wild Arms: name of a game series. Leave as-is or use an official translation.">Wild Arms Hack</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1358,7 +1358,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_17"> <widget class="QLabel" name="label_17">
<property name="text"> <property name="text">
<string>Contrast Adaptive Sharpening:</string> <string extracomment="You might find an official translation for this on AMD's website (Spanish version linked): https://www.amd.com/es/technologies/radeon-software-fidelityfx">Contrast Adaptive Sharpening:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1395,7 +1395,7 @@
<item> <item>
<widget class="QSpinBox" name="casSharpness"> <widget class="QSpinBox" name="casSharpness">
<property name="suffix"> <property name="suffix">
<string>%</string> <string extracomment="Percentage sign that will appear next to a number. Add a space or whatever is needed before depending on your language.">%</string>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>100</number> <number>100</number>
@ -1461,7 +1461,7 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Lottes CRT</string> <string extracomment="Lottes = Timothy Lottes, the creator of the shader filter. Leave as-is. CRT= Cathode Ray Tube, an old type of television technology.">Lottes CRT</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -1865,7 +1865,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSpinBox" name="videoCaptureBitrate"> <widget class="QSpinBox" name="videoCaptureBitrate">
<property name="suffix"> <property name="suffix">
<string> kbps</string> <string extracomment="Unit that will appear next to a number. Alter the space or whatever is needed before the text depending on your language."> kbps</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>100</number> <number>100</number>
@ -1977,7 +1977,7 @@
</widget> </widget>
<widget class="QGroupBox" name="advancedTab"> <widget class="QGroupBox" name="advancedTab">
<attribute name="title"> <attribute name="title">
<string>Advanced</string> <string extracomment="Advanced here refers to the advanced graphics options.">Advanced</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
@ -2055,7 +2055,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QCheckBox" name="useBlitSwapChain"> <widget class="QCheckBox" name="useBlitSwapChain">
<property name="text"> <property name="text">
<string>Use Blit Swap Chain</string> <string extracomment="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.">Use Blit Swap Chain</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -23,17 +23,29 @@
static const char* THEME_NAMES[] = { static const char* THEME_NAMES[] = {
QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Native"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), 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]"), QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Custom.qss [Drop in PCSX2 Folder]"),
nullptr}; nullptr};
@ -99,6 +111,7 @@ InterfaceSettingsWidget::InterfaceSettingsWidget(SettingsDialog* dialog, QWidget
SettingWidgetBinder::BindWidgetToStringSetting(sif, m_ui.autoUpdateTag, "AutoUpdater", "UpdateTag", SettingWidgetBinder::BindWidgetToStringSetting(sif, m_ui.autoUpdateTag, "AutoUpdater", "UpdateTag",
AutoUpdaterDialog::getDefaultTag()); 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())); 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); }); 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, " tr("Pauses the emulator when you minimize the window or switch to another application, "
"and unpauses when you switch back.")); "and unpauses when you switch back."));
dialog->registerWidgetHelp(m_ui.backupSaveStates, tr("Create Save State Backups"), tr("Unchecked"), 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.")); 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"), dialog->registerWidgetHelp(m_ui.startFullscreen, tr("Start Fullscreen"), tr("Unchecked"),
tr("Automatically switches to fullscreen mode when a game is started.")); tr("Automatically switches to fullscreen mode when a game is started."));

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -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."); SetType(MemoryCardType::File, MemoryCardFileType::PS2_64MB, "8x larger than a standard Memory Card. Likely to have compatibility issues.");
break; break;
default: default:
//: MemoryCardType should be left as-is.
QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType"));
return; return;
} }
break; break;
default: default:
//: MemoryCardType should be left as-is.
QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType"));
return; return;
} }
@ -231,6 +233,7 @@ bool MemoryCardConvertDialog::SetupPicklist()
break; break;
default: default:
//: MemoryCardType should be left as-is.
QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType")); QMessageBox::critical(this, tr("Convert Memory Card Failed"), tr("Invalid MemoryCardType"));
return false; return false;
} }

View File

@ -509,6 +509,7 @@ void MemoryCardSlotWidget::setCard(const std::optional<std::string>& name)
else else
{ {
item->setIcon(QIcon::fromTheme("close-line")); 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()))); item->setText(tr("%1 [Missing]").arg(QString::fromStdString(name.value())));
} }
} }

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -17,7 +17,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_6"> <layout class="QGridLayout" name="gridLayout_6">
<property name="leftMargin"> <property name="leftMargin">
@ -86,7 +86,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -136,7 +136,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -176,7 +176,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -216,7 +216,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -256,7 +256,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -299,7 +299,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -339,7 +339,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -392,7 +392,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -451,7 +451,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -491,7 +491,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -587,7 +587,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -633,7 +633,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -698,7 +698,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -738,7 +738,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -778,7 +778,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -818,7 +818,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -861,7 +861,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -901,7 +901,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -954,7 +954,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -23,7 +23,7 @@
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<property name="leftMargin"> <property name="leftMargin">
@ -92,7 +92,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -149,7 +149,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -189,7 +189,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -242,7 +242,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -301,7 +301,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -341,7 +341,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -434,7 +434,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -480,7 +480,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -552,7 +552,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -592,7 +592,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -645,7 +645,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>PushButton</string> <string notr="true">PushButton</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string notr="true">Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1">
<property name="leftMargin"> <property name="leftMargin">

View File

@ -36,7 +36,7 @@
<item> <item>
<widget class="QRadioButton" name="m_recTypePowerOn"> <widget class="QRadioButton" name="m_recTypePowerOn">
<property name="text"> <property name="text">
<string>Power On</string> <string extracomment="Indicates that the input recording that is about to be started will be recorded from the moment the emulation boots on/starts.">Power On</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -46,7 +46,7 @@
<item> <item>
<widget class="QRadioButton" name="m_recTypeSaveState"> <widget class="QRadioButton" name="m_recTypeSaveState">
<property name="text"> <property name="text">
<string>Save State</string> <string extracomment="Indicates that the input recording that is about to be started will be recorded when an accompanying save state is saved.">Save State</string>
</property> </property>
</widget> </widget>
</item> </item>