1
1
Fork 0
mirror of https://github.com/pbatard/rufus.git synced 2024-08-14 23:57:05 +00:00

[loc] finalize new translations for 3.2

* Also fix a MinGW warning
This commit is contained in:
Pete Batard 2018-07-18 16:59:35 +01:00
parent 1004a6e066
commit 1612064c66
5 changed files with 94 additions and 48 deletions

View file

@ -5,15 +5,27 @@ When editing an existing translation, make sure to follow:
https://github.com/pbatard/rufus/wiki/Localization#Editing_a_translation https://github.com/pbatard/rufus/wiki/Localization#Editing_a_translation
o v3.2 (2018.??.??) o v3.2 (2018.??.??)
- *NEW* MSG_087 The following appears in Advanced format options → Check device for bad blocks → dropdown menu with
*NEW* MSG_123 %s being replaced with SLC, MLC or TLC, which is a type of flash memory. In other words, this message
*NEW* MSG_124 should mean "for a flash memory device of type %s". *Please* try to keep the translation as short as
*NEW* MSG_125 possible so that it won't result in an overly large dropdown...
*NEW* MSG_126 - *NEW* MSG_087 "for %s devices"
*NEW* MSG_127 The following 4 messages can be tested using https://github.com/pbatard/rufus/raw/master/res/loc/test/casper_test.iso
- *NEW* MSG_172 - *NEW* MSG_123 "Persistent partition size"
- *NEW* MSG_240 - *NEW* MSG_124 "No persistence"
- *NEW* MSG_125 "Set the size of the persistent partition for live USB media. Setting the size to 0 disables the persistent partition."
- *NEW* MSG_126 "Set the partition size units."
As of Rufus 3.2, *ALL* downloads from the servers are digitally signed, and their signature is validated using the
public key that is embedded in the application. This message appears in an error dialog if the validation fails.
- *NEW* MSG_172 "Invalid download signature"
This message was present in 3.0, but I forgot to mention it then. It has to do with the signature
validation that Rufus uses when downloading an update.
- *NEW* MSG_240 "The signature for the downloaded update can not be validated (...)"
You can see this status message by pressing <Ctrl>-<Alt>-<Z> and then selecting Start.
It's the same as MSG_286 but with a process that *may* be faster, hence the name.
- *NEW* MSG_306 - *NEW* MSG_306
Note: Because this is the introduction of a new translation framework, and I am a bit short of time for that
unification of MSG_084/MSG_104/MSG_114/MSG_116 will happen in another translation round...
o v3.0 (2018.03.27) o v3.0 (2018.03.27)
- All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign - All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign

View file

@ -959,6 +959,7 @@ namespace pollock
[STAThread] [STAThread]
static void Main(string[] args) static void Main(string[] args)
{ {
bool use_local_loc = false;
Console.OutputEncoding = System.Text.Encoding.UTF8; Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e) { Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e) {
e.Cancel = true; e.Cancel = true;
@ -966,6 +967,11 @@ namespace pollock
}; };
Console.WriteLine($"{app_name} {version_str} - Poedit to rufus.loc conversion utility"); Console.WriteLine($"{app_name} {version_str} - Poedit to rufus.loc conversion utility");
Console.WriteLine(); Console.WriteLine();
foreach (var arg in args)
{
if (arg.Contains("l"))
use_local_loc = true;
}
if (AppDomain.CurrentDomain.FriendlyName.Contains('m')) if (AppDomain.CurrentDomain.FriendlyName.Contains('m'))
goto Maintainer_Mode; goto Maintainer_Mode;
@ -986,7 +992,7 @@ namespace pollock
if (ver == null) if (ver == null)
{ {
Console.WriteLine("ERROR: Could not access application data."); Console.WriteLine("ERROR: Could not access application data.");
goto Exit; goto Error;
} }
foreach (var line in ver.Split('\n')) foreach (var line in ver.Split('\n'))
{ {
@ -1010,7 +1016,7 @@ namespace pollock
if ((download_url == null) || (rufus_url == null) || (update_version[0] == 0)) if ((download_url == null) || (rufus_url == null) || (update_version[0] == 0))
{ {
Console.WriteLine("FAILED"); Console.WriteLine("FAILED");
goto Exit; goto Error;
} }
Console.WriteLine("DONE"); Console.WriteLine("DONE");
@ -1023,7 +1029,7 @@ namespace pollock
if (DownloadFile(download_url)) if (DownloadFile(download_url))
{ {
Console.WriteLine("Now re-launch this program using the latest version."); Console.WriteLine("Now re-launch this program using the latest version.");
goto Exit; goto Error;
} }
Console.WriteLine("Download failed."); Console.WriteLine("Download failed.");
} }
@ -1051,10 +1057,19 @@ namespace pollock
} }
} }
if (!use_local_loc)
{
// Download the latest loc file // Download the latest loc file
Console.Write("Downloading the latest loc file... "); Console.Write("Downloading the latest loc file... ");
if (!DownloadFile(loc_url)) if (!DownloadFile(loc_url))
goto Exit; goto Error;
}
else
{
var local_loc = @"C:\rufus\res\loc\rufus.loc";
Console.Write($"Copying loc file from '{local_loc}'... ");
File.Copy(local_loc, "rufus.loc", true);
}
var loc_file = loc_url.Split('/').Last(); var loc_file = loc_url.Split('/').Last();
// Convert to CRLF and get all the language ids // Convert to CRLF and get all the language ids
@ -1109,13 +1124,18 @@ Retry:
Console.WriteLine($"{list[index][0]} was selected."); Console.WriteLine($"{list[index][0]} was selected.");
Console.WriteLine(); Console.WriteLine();
po_file = $"{list[index][1]}.po"; po_file = $"{list[index][1]}.po";
if (File.Exists(po_file))
{
if (!PromptForQuestion($"A '{po_file}' file already exists. Do you want to overwrite it? (If unsure, answer 'y')"))
goto Error;
}
Language old_en_US = null; Language old_en_US = null;
if (list[index][2] == list[0][2]) if (list[index][2] == list[0][2])
{ {
Console.WriteLine("Note: This language is already at the most recent version!"); Console.WriteLine("Note: This language is already at the most recent version!");
if (!PromptForQuestion("Do you still want to edit it?")) if (!PromptForQuestion("Do you still want to edit it?"))
goto Exit; goto Error;
} }
else else
{ {
@ -1133,26 +1153,19 @@ Retry:
var url = "https://github.com/pbatard/rufus/releases/tag/v" + list[index][2]; var url = "https://github.com/pbatard/rufus/releases/tag/v" + list[index][2];
var str = DownloadString(url); var str = DownloadString(url);
if (str == null) if (str == null)
{ goto Error;
index = -1;
goto Exit;
}
var sha = str.Substring(str.IndexOf("/pbatard/rufus/commit/") + 22, 40); var sha = str.Substring(str.IndexOf("/pbatard/rufus/commit/") + 22, 40);
// TODO: Remove this once everyone has upgraded past 3.2 // TODO: Remove this once everyone has upgraded past 3.2
string loc_dir = ((list[index][2][0] == '2') || ((list[index][2][0] == '3') && (list[index][2][2] == '0'))) ? "localization" : "loc"; string loc_dir = ((list[index][2][0] == '2') || ((list[index][2][0] == '3') && (list[index][2][2] == '0'))) ? "localization" : "loc";
url = "https://github.com/pbatard/rufus/raw/" + sha + "/res/" + loc_dir + "/rufus.loc"; url = "https://github.com/pbatard/rufus/raw/" + sha + "/res/" + loc_dir + "/rufus.loc";
if (!DownloadFile(url, old_loc_file)) if (!DownloadFile(url, old_loc_file))
{ goto Error;
index = -1;
goto Exit;
}
} }
var old_langs = ParseLocFile(old_loc_file, "en-US"); var old_langs = ParseLocFile(old_loc_file, "en-US");
if ((old_langs == null) || (old_langs.Count != 1)) if ((old_langs == null) || (old_langs.Count != 1))
{ {
Console.WriteLine("Error: Unable to get en-US data from previous loc file."); Console.WriteLine("Error: Unable to get en-US data from previous loc file.");
index = -1; goto Error;
goto Exit;
} }
old_en_US = old_langs[0]; old_en_US = old_langs[0];
} }
@ -1160,8 +1173,7 @@ Retry:
if (CreatePoFiles(ParseLocFile(loc_file, list[index][1]), old_en_US) != 1) if (CreatePoFiles(ParseLocFile(loc_file, list[index][1]), old_en_US) != 1)
{ {
Console.WriteLine("Failed to create PO file"); Console.WriteLine("Failed to create PO file");
index = -1; goto Error;
goto Exit;
} }
// Watch for file modifications // Watch for file modifications
@ -1182,18 +1194,18 @@ Retry:
Console.WriteLine($"* The {list[index][0]} translation file ({list[index][1]}) is now ready to be edited in Poedit."); Console.WriteLine($"* The {list[index][0]} translation file ({list[index][1]}) is now ready to be edited in Poedit.");
Console.WriteLine("* Please look for entries highlited in orange - they are the ones requiring an update."); Console.WriteLine("* Please look for entries highlited in orange - they are the ones requiring an update.");
Console.WriteLine("*"); Console.WriteLine("*");
Console.WriteLine("* Whenever you save your changes in Poedit, an new 'rufus.loc' will be generated so"); Console.WriteLine("* Whenever you save your changes in Poedit, a new 'rufus.loc' will be generated so");
Console.WriteLine($"* that you can test your changes using '{rufus_file}' in the same directory."); Console.WriteLine($"* that you can test it with '{rufus_file}' in the same directory.");
Console.WriteLine("*"); Console.WriteLine("*");
Console.WriteLine("* PLEASE DO NOT CLOSE THIS CONSOLE APPLICATION - IT NEEDS TO RUN IN THE BACKGROUND!"); Console.WriteLine("* PLEASE DO NOT CLOSE THIS CONSOLE APPLICATION - IT NEEDS TO RUN IN THE BACKGROUND!");
Console.WriteLine("* Instead, when you are done editing your translation, simply close Poedit."); Console.WriteLine("* Instead, when you are done editing your translation, simply close Poedit.");
Console.WriteLine("*************************************************************************************"); Console.WriteLine("*************************************************************************************");
WaitForKey("Press any key to launch Poedit..."); WaitForKey($"Press any key to open '{po_file}' in Poedit...");
Process process = new Process(); Process process = new Process();
process.StartInfo.FileName = poedit; process.StartInfo.FileName = poedit;
process.StartInfo.WorkingDirectory = app_dir; process.StartInfo.WorkingDirectory = app_dir;
process.StartInfo.Arguments = $"{list[index][1]}.po"; process.StartInfo.Arguments = po_file;
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
if (!process.Start()) if (!process.Start())
{ {
@ -1213,7 +1225,7 @@ Retry:
else else
{ {
Console.WriteLine("Poedit was not found. You will have to launch it and open the"); Console.WriteLine("Poedit was not found. You will have to launch it and open the");
Console.WriteLine($"'{app_dir + list[index][1]}.po' file manually."); Console.WriteLine($"'{po_file}' file manually.");
} }
Exit: Exit:
@ -1223,11 +1235,15 @@ Exit:
{ {
Process.Start($"mailto:pete@akeo.ie?subject=Rufus {list[index][0]} translation v{list[0][2]} update" + Process.Start($"mailto:pete@akeo.ie?subject=Rufus {list[index][0]} translation v{list[0][2]} update" +
$"&body=Hi Pete,%0D%0A%0D%0APlease find attached the latest {list[index][0]} translation." + $"&body=Hi Pete,%0D%0A%0D%0APlease find attached the latest {list[index][0]} translation." +
$"%0D%0A%0D%0A<PLEASE ATTACH '{app_dir + list[index][1]}.po' AND REMOVE THIS LINE>" + $"%0D%0A%0D%0A<PLEASE ATTACH '{app_dir}{po_file}' AND REMOVE THIS LINE>" +
$"%0D%0A%0D%0ARegards,"); $"%0D%0A%0D%0ARegards,");
} }
return; return;
Error:
WaitForKey("Press any key to exit...");
return;
Maintainer_Mode: Maintainer_Mode:
string file_name; string file_name;
OpenFileDialog file_dialog = new OpenFileDialog(); OpenFileDialog file_dialog = new OpenFileDialog();

View file

@ -157,7 +157,8 @@ t MSG_032 "UEFI (non CSM)"
t MSG_033 "BIOS or UEFI" t MSG_033 "BIOS or UEFI"
# Number of bad block check passes (singular for 1 pass) # Number of bad block check passes (singular for 1 pass)
t MSG_034 "%d pass" t MSG_034 "%d pass"
# Number of bad block check passes (plural for 2 or more passes) # Number of bad block check passes (plural for 2 or more passes).
# See MSG_087 for the message that %s gets replaced with.
t MSG_035 "%d passes %s" t MSG_035 "%d passes %s"
t MSG_036 "ISO Image" t MSG_036 "ISO Image"
t MSG_037 "Application" t MSG_037 "Application"
@ -225,6 +226,11 @@ t MSG_084 "This ISO image seems to use an obsolete version of '%s'.\n"
"'%s' exists there, it will be reused automatically." "'%s' exists there, it will be reused automatically."
t MSG_085 "Downloading '%s'" t MSG_085 "Downloading '%s'"
t MSG_086 "No image selected" t MSG_086 "No image selected"
# This message appears in Advanced format options → Check device for bad blocks → dropdown menu
# %s will be replaced with SLC, MLC or TLC, which is a type of flash memory. In other words, this
# message should mean "for a flash memory device of type %s". *Please* try to keep the translation
# as short as possible so that it won't result in an overly large dropdown... It's okay to use a
# translation for "type" instead of "device" (e.g. "for TLC type"). See also MSG_035.
t MSG_087 "for %s devices" t MSG_087 "for %s devices"
t MSG_088 "Image is too big" t MSG_088 "Image is too big"
t MSG_089 "The image is too big for the selected target." t MSG_089 "The image is too big for the selected target."
@ -308,11 +314,18 @@ t MSG_119 "advanced drive properties"
t MSG_120 "advanced format options" t MSG_120 "advanced format options"
t MSG_121 "Show %s" t MSG_121 "Show %s"
t MSG_122 "Hide %s" t MSG_122 "Hide %s"
# A persistent partitions can be used with "Live" USB media to store data.
# It means that data can be preserved across reboots on "Live" USB drives.
# To test this feature, please download and select 'casper_test.iso' from:
# https://github.com/pbatard/rufus/raw/master/res/loc/test/casper_test.iso
t MSG_123 "Persistent partition size" t MSG_123 "Persistent partition size"
# This message appears in the persistence 'Size' control when the slider is set to 0.
# If running out of space, it is okay to use "No partition" or "None" to indicate that a persistent
# partition will not be created (because the 'Size' edit control is *not* adjusted for width).
t MSG_124 "No persistence" t MSG_124 "No persistence"
t MSG_125 "Use this slider to set the size of the persistent partition. Setting the size to 0 disables the persistent partition." # Tooltips used for the peristence size slider and edit control
t MSG_126 "Use this field to enter the size of the persistent partition. Setting the size to 0 disables the persistent partition." t MSG_125 "Set the size of the persistent partition for live USB media. Setting the size to 0 disables the persistent partition."
t MSG_127 "Set the persistent partition size unit." t MSG_126 "Set the partition size units."
t MSG_150 "Type of computer you plan to use this bootable drive with. It is your responsibility to determine whether " t MSG_150 "Type of computer you plan to use this bootable drive with. It is your responsibility to determine whether "
"your target is of BIOS or UEFI type before you start creating the drive, as it may fail to boot otherwise." "your target is of BIOS or UEFI type before you start creating the drive, as it may fail to boot otherwise."
# You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings. # You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings.
@ -340,6 +353,8 @@ t MSG_169 "Create an extra hidden partition and try to align partitions boundari
"This can improve boot detection for older BIOSes" "This can improve boot detection for older BIOSes"
t MSG_170 "Enable the listing of USB Hard Drive enclosures. USE AT YOUR OWN RISKS!!!" t MSG_170 "Enable the listing of USB Hard Drive enclosures. USE AT YOUR OWN RISKS!!!"
t MSG_171 "Start the formatting operation.\nThis will DESTROY any data on the target!" t MSG_171 "Start the formatting operation.\nThis will DESTROY any data on the target!"
# As of Rufus 3.2, *ALL* downloads from the servers are digitally signed, and their signature is validated using the
# public key that is embedded in the application. This message appears in an error dialog if the validation fails.
t MSG_172 "Invalid download signature" t MSG_172 "Invalid download signature"
t MSG_173 "Click to select..." t MSG_173 "Click to select..."
t MSG_174 "Rufus - The Reliable USB Formatting Utility" t MSG_174 "Rufus - The Reliable USB Formatting Utility"
@ -437,6 +452,7 @@ t MSG_237 "Bad Blocks: Testing with pattern 0x%02X"
# Example: "Partitioning (MBR)..." # Example: "Partitioning (MBR)..."
t MSG_238 "Partitioning (%s)..." t MSG_238 "Partitioning (%s)..."
t MSG_239 "Deleting partitions..." t MSG_239 "Deleting partitions..."
# This message has to do with the signature validation that Rufus uses when downloading an update.
t MSG_240 "The signature for the downloaded update can not be validated. This could mean that your " t MSG_240 "The signature for the downloaded update can not be validated. This could mean that your "
"system is improperly configured for signature validation or indicate a malicious download.\n\n" "system is improperly configured for signature validation or indicate a malicious download.\n\n"
"The download will be deleted. Please check the log for more details." "The download will be deleted. Please check the log for more details."
@ -521,6 +537,8 @@ t MSG_303 "Show the log"
t MSG_304 "Create a disk image of the selected device" t MSG_304 "Create a disk image of the selected device"
t MSG_305 "Use this option to indicate whether you want to use this device to install Windows on another disk, " t MSG_305 "Use this option to indicate whether you want to use this device to install Windows on another disk, "
"or if you want to run Windows directly from this drive (Windows To Go)." "or if you want to run Windows directly from this drive (Windows To Go)."
# You can see this status message by pressing <Ctrl>-<Alt>-<Z> and then selecting START.
# It's the same as MSG_286 but with a process that *may* be faster, hence the name.
t MSG_306 "Fast-zeroing drive: %0.1f%% completed" t MSG_306 "Fast-zeroing drive: %0.1f%% completed"
######################################################################### #########################################################################

View file

@ -1625,8 +1625,8 @@ static void InitDialog(HWND hDlg)
CreateTooltip(GetDlgItem(hDlg, IDS_CSM_HELP_TXT), lmprintf(MSG_151), 30000); CreateTooltip(GetDlgItem(hDlg, IDS_CSM_HELP_TXT), lmprintf(MSG_151), 30000);
CreateTooltip(GetDlgItem(hDlg, IDC_IMAGE_OPTION), lmprintf(MSG_305), 30000); CreateTooltip(GetDlgItem(hDlg, IDC_IMAGE_OPTION), lmprintf(MSG_305), 30000);
CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER), lmprintf(MSG_125), 30000); CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER), lmprintf(MSG_125), 30000);
CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), lmprintf(MSG_126), 30000); CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), lmprintf(MSG_125), 30000);
CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS), lmprintf(MSG_127), 30000); CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS), lmprintf(MSG_126), 30000);
if (!advanced_mode_device) // Hide as needed, since we display the advanced controls by default if (!advanced_mode_device) // Hide as needed, since we display the advanced controls by default
ToggleAdvancedDeviceOptions(FALSE); ToggleAdvancedDeviceOptions(FALSE);
@ -2050,7 +2050,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
lPos = (LONG)pos; lPos = (LONG)pos;
SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETPOS, TRUE, lPos); SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETPOS, TRUE, lPos);
if (persistence_size >= (SelectedDrive.DiskSize - img_report.projected_size)) { if (persistence_size >= (SelectedDrive.DiskSize - img_report.projected_size)) {
static_sprintf(tmp, "%d", lPos); static_sprintf(tmp, "%ld", lPos);
app_changed_size = TRUE; app_changed_size = TRUE;
SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp);
} }
@ -2420,7 +2420,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
if (lPos != 0) { if (lPos != 0) {
if (persistence_size == 0) if (persistence_size == 0)
TogglePersistenceControls(TRUE); TogglePersistenceControls(TRUE);
sprintf(tmp, "%ld", lPos); static_sprintf(tmp, "%ld", lPos);
} else { } else {
TogglePersistenceControls(FALSE); TogglePersistenceControls(FALSE);
static_sprintf(tmp, "0 (%s)", lmprintf(MSG_124)); static_sprintf(tmp, "0 (%s)", lmprintf(MSG_124));

View file

@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 232, 326 IDD_DIALOG DIALOGEX 12, 12, 232, 326
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Rufus 3.2.1342" CAPTION "Rufus 3.2.1343"
FONT 9, "Segoe UI Symbol", 400, 0, 0x0 FONT 9, "Segoe UI Symbol", 400, 0, 0x0
BEGIN BEGIN
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
@ -392,8 +392,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,2,1342,0 FILEVERSION 3,2,1343,0
PRODUCTVERSION 3,2,1342,0 PRODUCTVERSION 3,2,1343,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -411,13 +411,13 @@ BEGIN
VALUE "Comments", "https://akeo.ie" VALUE "Comments", "https://akeo.ie"
VALUE "CompanyName", "Akeo Consulting" VALUE "CompanyName", "Akeo Consulting"
VALUE "FileDescription", "Rufus" VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "3.2.1342" VALUE "FileVersion", "3.2.1343"
VALUE "InternalName", "Rufus" VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)" VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html" VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus-3.2.exe" VALUE "OriginalFilename", "rufus-3.2.exe"
VALUE "ProductName", "Rufus" VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "3.2.1342" VALUE "ProductVersion", "3.2.1343"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"