Skip to content

Navigation Menu

Toggle navigation

Sign in

Appearance settings

Platform

AI CODE CREATION

GitHub CopilotWrite better code with AI

GitHub Copilot appDirect agents from issue to merge

MCP RegistryNewIntegrate external tools

DEVELOPER WORKFLOWS

ActionsAutomate any workflow

CodespacesInstant dev environments

IssuesPlan and track work

Code ReviewManage code changes

Code QualityEnforce quality at merge

APPLICATION SECURITY

GitHub Advanced SecurityFind and fix vulnerabilities

Code securitySecure your code as you build

Secret protectionStop leaks before they start

EXPLORE

Why GitHub

Documentation

Blog

Changelog

Marketplace

View all features

Solutions

BY COMPANY SIZE

Enterprises

Small and medium teams

Startups

Nonprofits

BY USE CASE

App Modernization

DevSecOps

DevOps

CI/CD

View all use cases

BY INDUSTRY

Healthcare

Financial services

Manufacturing

Government

View all industries

View all solutions

Resources

EXPLORE BY TOPIC

AI

Software Development

DevOps

Security

View all topics

EXPLORE BY TYPE

Customer stories

Events & webinars

Ebooks & reports

Business insights

GitHub Skills

SUPPORT & SERVICES

Documentation

Customer support

Community forum

Trust center

Partners

View all resources

Open Source

COMMUNITY

GitHub SponsorsFund open source developers

PROGRAMS

Security Lab

Maintainer Community

Accelerator

GitHub Stars

Archive Program

REPOSITORIES

Topics

Trending

Collections

Enterprise

ENTERPRISE SOLUTIONS

Enterprise platformAI-powered developer platform

AVAILABLE ADD-ONS

GitHub Advanced SecurityEnterprise-grade security features

Copilot for BusinessEnterprise-grade AI features

Premium SupportEnterprise-grade 24/7 support

Pricing

Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

Cancel

Create saved search

Sign in

Sign up

Appearance settings

Resetting focus

BCUninstaller

/

Bulk-Crap-Uninstaller

Public

Notifications
You must be signed in to change notification settings

Fork
888

Star
20.4k

Code

Issues
145

Pull requests
8

Discussions

Actions

Wiki

Security and quality

Insights

Additional navigation options

Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also compare across forks
or
learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks
.
Learn more about diff comparisons here.

base repository:
BCUninstaller/Bulk-Crap-Uninstaller

Failed to load repositories. Confirm that selected base ref is valid, then try again.

Loading

base:
v6.1

Choose a base ref

Branches
Tags

Loading

...

head repository:
BCUninstaller/Bulk-Crap-Uninstaller

Failed to load repositories. Confirm that selected head ref is valid, then try again.

Loading

compare:
v6.2

Choose a head ref

Branches
Tags

Loading

8
contributors

Commits
27

Files changed
107

Commits on Mar 6, 2026

Pin System.* packages at 8.* to fix portable self-contained build

…

Fixes #864
Root issue: dotnet/runtime#29663

Klocman

committed
Mar 6, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for 05f2c74

Browse repository at this point

Copy the full SHA

05f2c74

View commit details

Browse the repository at this point in the history

Commits on Mar 7, 2026

Merge French localization update by Thierry

Klocman

committed
Mar 7, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for 3d53b17

Browse repository at this point

Copy the full SHA

3d53b17

View commit details

Browse the repository at this point in the history

Fix : Swedish translation causes UI overflow in some windows #810 (#865)

Leise-Shadow

authored
Mar 7, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 4ecea11

Browse repository at this point

Copy the full SHA

4ecea11

View commit details

Browse the repository at this point in the history

Commits on Jun 8, 2026

Improved publish script (#868)

tsiakoulias

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 5cf83c4

Browse repository at this point

Copy the full SHA

5cf83c4

View commit details

Browse the repository at this point in the history

Updated Hungarian translation (#875)

…

I've translated the last few strings that were not yet translated. The Hungarian translation is now complete.

titanicbobo

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for e6c4d31

Browse repository at this point

Copy the full SHA

e6c4d31

View commit details

Browse the repository at this point in the history

Improve Scoop custom path detection (#892)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 2dcf118

Browse repository at this point

Copy the full SHA

2dcf118

View commit details

Browse the repository at this point in the history

Improve uninstall list load error handling (#895)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for f0e57a5

Browse repository at this point

Copy the full SHA

f0e57a5

View commit details

Browse the repository at this point in the history

Fix tweak visibility filtering (#898)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for fb8f5ad

Browse repository at this point

Copy the full SHA

fb8f5ad

View commit details

Browse the repository at this point in the history

Fix orphaned-only view preset (#899)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 1059816

Browse repository at this point

Copy the full SHA

1059816

View commit details

Browse the repository at this point in the history

Add invalid-uninstaller view preset (#903)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 744c367

Browse repository at this point

Copy the full SHA

744c367

View commit details

Browse the repository at this point in the history

Stabilize icon handle ownership (#902)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for af9780a

Browse repository at this point

Copy the full SHA

af9780a

View commit details

Browse the repository at this point in the history

Fix: Use Directory.GetLastWriteTime instead of GetCreationTime for in…

…

…stall date (#908)

When InstallDate is not available in the registry, BCU falls back to using
file/directory timestamps. The directory's last write time is more accurate
than creation time as it reflects when files were added during installation.

This improves accuracy for applications like Google Web Designer where the
registry InstallDate value is not set.

Fixes #886

AniketDeshmane

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for af1bd83

Browse repository at this point

Copy the full SHA

af1bd83

View commit details

Browse the repository at this point in the history

Updated Vietnamese translations (#918)

wanwanvxt

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for baae38f

Browse repository at this point

Copy the full SHA

baae38f

View commit details

Browse the repository at this point in the history

Do not offer to send "no way to uninstall" error messages (#922)

Klocman

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for a07ac72

Browse repository at this point

Copy the full SHA

a07ac72

View commit details

Browse the repository at this point in the history

Ignore ERROR_BAD_CONFIGURATION when listing MSI components (#924)

Klocman

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for e3eb03c

Browse repository at this point

Copy the full SHA

e3eb03c

View commit details

Browse the repository at this point in the history

Eat InvalidOperationException coming from ListViewGroupAccessibleObje…

…

…ct (#925)

Klocman

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 83983c2

Browse repository at this point

Copy the full SHA

83983c2

View commit details

Browse the repository at this point in the history

Guard against midway crashes in MsiTools.InitLookups

Klocman

committed
Jun 8, 2026

Configuration menu

View commit details

Copy full SHA for c50c461

Browse repository at this point

Copy the full SHA

c50c461

View commit details

Browse the repository at this point in the history

Ignore disposed owners in LoadingDialog

Klocman

committed
Jun 8, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for 8bdabe2

Browse repository at this point

Copy the full SHA

8bdabe2

View commit details

Browse the repository at this point in the history

Harden BCU console export and size detection (#897)

breshinotestachegira

authored
Jun 8, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 7a80f0f

Browse repository at this point

Copy the full SHA

7a80f0f

View commit details

Browse the repository at this point in the history

Commits on Jun 9, 2026

Harden registry factory parsing (#893)

breshinotestachegira

authored
Jun 9, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 9d73ccb

Browse repository at this point

Copy the full SHA

9d73ccb

View commit details

Browse the repository at this point in the history

Guard startup uninstall list loading (#927)

breshinotestachegira

authored
Jun 9, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for c8b37bc

Browse repository at this point

Copy the full SHA

c8b37bc

View commit details

Browse the repository at this point in the history

Add certificate and integrity columns to app list (#894)

…

* Add text status column to app list

* Remove trailing whitespace from status column designer

* Add status column regression tests

* Split status column into certificate and integrity

* Fix build

* Tweak status naming

* Hide the Certificate column if the feature is disabled
TODO: Split the column from highlighting logic

* Reorder and resize new columns

* Move new strings to resources

* Fix tests

---------

Co-authored-by: Marcin Szeniak <[email-masked]>

breshinotestachegira
and
Klocman

authored
Jun 9, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 0a457dd

Browse repository at this point

Copy the full SHA

0a457dd

View commit details

Browse the repository at this point in the history

Build tests on debug and launcher on release

Klocman

committed
Jun 9, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for 290748b

Browse repository at this point

Copy the full SHA

290748b

View commit details

Browse the repository at this point in the history

Version up to 6.2

Klocman

committed
Jun 9, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for d4f2e1f

Browse repository at this point

Copy the full SHA

d4f2e1f

View commit details

Browse the repository at this point in the history

Installer - Clean up log, caches and settings on BCU uninstallation

…

Fixes #896

Klocman

committed
Jun 9, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for b391b5b

Browse repository at this point

Copy the full SHA

b391b5b

View commit details

Browse the repository at this point in the history

Add building launcher to CI as a test; Undo building launcher in sln …

…

…on Release

Klocman

committed
Jun 9, 2026

Loading

Loading status checks…

Configuration menu

View commit details

Copy full SHA for f188909

Browse repository at this point

Copy the full SHA

f188909

View commit details

Browse the repository at this point in the history

BugFix #896 Clean generated files on uninstall (#928)

…

* Clean generated files on uninstall

* Simplify the file list

* Re-add CleanLogs.bat

---------

Co-authored-by: <[email-masked]>

One-Simon

authored
Jun 9, 2026

Loading

Loading status checks…

Verified

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

GPG key ID: B5690EEEBB952194

Verified

Learn about vigilant mode

Configuration menu

View commit details

Copy full SHA for 51d6ca7

Browse repository at this point

Copy the full SHA

51d6ca7

View commit details

Browse the repository at this point in the history

Split

Unified

Showing

107 changed files

with
2,508 additions
and 1,129 deletions.

+4

−0

.github/workflows/ci.yaml

+63

−0

installer/BcuSetup.iss

+88

−13

publish.bat

+1

−0

source/BulkCrapUninstaller.sln

+15

−11

source/BulkCrapUninstaller/BulkCrapUninstaller.csproj

+3

−2

source/BulkCrapUninstaller/Controls/AdvancedClipboardCopy.vi.resx

+2

−2

source/BulkCrapUninstaller/Controls/FileTargeter.vi.resx

+1

−1

source/BulkCrapUninstaller/Controls/ListLegend.fr.resx

+5

−5

source/BulkCrapUninstaller/Controls/ListLegend.vi.resx

+3

−3

source/BulkCrapUninstaller/Controls/RelatedUninstallerAdder.vi.resx

+10

−10

source/BulkCrapUninstaller/Controls/Settings/AdvancedFilters.cs

+1

−1

source/BulkCrapUninstaller/Controls/Settings/AdvancedFilters.vi.resx

+1

−1

source/BulkCrapUninstaller/Controls/Settings/CacheSettings.fr.resx

+5

−5

source/BulkCrapUninstaller/Controls/Settings/CacheSettings.vi.resx

+13

−11

source/BulkCrapUninstaller/Controls/Settings/PropertiesSidebar.fr.resx

+22

−22

source/BulkCrapUninstaller/Controls/Settings/PropertiesSidebar.vi.resx

+4

−1

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.fr.resx

+1

−1

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.sv.resx

+19

−16

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.vi.resx

+3

−3

source/BulkCrapUninstaller/Controls/UninstallConfirmation.vi.resx

+7

−6

source/BulkCrapUninstaller/EntryPoint.cs

+7

−7

source/BulkCrapUninstaller/Forms/Helpers/FeedbackBox.fr.resx

+7

−7

source/BulkCrapUninstaller/Forms/Helpers/FeedbackBox.vi.resx

+28

−28

source/BulkCrapUninstaller/Forms/Helpers/FeedbackWindow.fr.resx

+1

−1

source/BulkCrapUninstaller/Forms/Helpers/FeedbackWindow.vi.resx

+9

−9

source/BulkCrapUninstaller/Forms/Helpers/NewsPopup.fr.resx

+7

−7

source/BulkCrapUninstaller/Forms/Helpers/NewsPopup.vi.resx

+2

−2

source/BulkCrapUninstaller/Forms/Helpers/PropertiesWindow.vi.resx

+2

−2

source/BulkCrapUninstaller/Forms/Helpers/RatingPopup.fr.resx

+2

−2

source/BulkCrapUninstaller/Forms/Helpers/RatingPopup.vi.resx

+3

−3

source/BulkCrapUninstaller/Forms/Helpers/TargetWindow.fr.resx

+5

−5

source/BulkCrapUninstaller/Forms/Helpers/TargetWindow.vi.resx

+6

−2

source/BulkCrapUninstaller/Forms/Windows/AboutBox.fr.resx

+5

−4

source/BulkCrapUninstaller/Forms/Windows/AboutBox.vi.resx

+8

−8

source/BulkCrapUninstaller/Forms/Windows/JunkRemoveWindow.vi.resx

+52

−30

source/BulkCrapUninstaller/Forms/Windows/MainWindow.Designer.cs

+53

−32

source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs

+20

−17

source/BulkCrapUninstaller/Forms/Windows/MainWindow.fr.resx

+53

−17

source/BulkCrapUninstaller/Forms/Windows/MainWindow.resx

+97

−94

source/BulkCrapUninstaller/Forms/Windows/MainWindow.vi.resx

+3

−3

source/BulkCrapUninstaller/Forms/Windows/SettingsWindow.fr.resx

+34

−34

source/BulkCrapUninstaller/Forms/Windows/SettingsWindow.vi.resx

+3

−3

source/BulkCrapUninstaller/Forms/Windows/UninstallProgressWindow.fr.resx

+11

−11

source/BulkCrapUninstaller/Forms/Windows/UninstallProgressWindow.vi.resx

+2

−11

source/BulkCrapUninstaller/Forms/Wizards/BeginUninstallTaskWizard.fr.resx

+15

−15

source/BulkCrapUninstaller/Forms/Wizards/BeginUninstallTaskWizard.vi.resx

+9

−9

source/BulkCrapUninstaller/Forms/Wizards/FirstStartBox.fr.resx

+41

−42

source/BulkCrapUninstaller/Forms/Wizards/FirstStartBox.vi.resx

+53

−19

source/BulkCrapUninstaller/Functions/ApplicationList/ApplicationListConstants.cs

+19

−18

source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs

+34

−0

source/BulkCrapUninstaller/Functions/Tools/StartupArgumentTools.cs

+54

−0

source/BulkCrapUninstaller/Properties/Localisable.Designer.cs

+34

−30

source/BulkCrapUninstaller/Properties/Localisable.fr.resx

+15

−0

source/BulkCrapUninstaller/Properties/Localisable.hu.resx

+18

−0

source/BulkCrapUninstaller/Properties/Localisable.resx

+162

−157

source/BulkCrapUninstaller/Properties/Localisable.vi.resx

+44

−0

source/BulkCrapUninstallerTests/ApplicationEntrySerializerTests.cs

+24

−0

source/BulkCrapUninstallerTests/ApplicationUninstallerEntryTests.cs

+26

−0

source/BulkCrapUninstallerTests/DrawingToolsTests.cs

+153

−0

source/BulkCrapUninstallerTests/Functions/ApplicationListConstantsTests.cs

+55

−0

source/BulkCrapUninstallerTests/Functions/StartupArgumentToolsTests.cs

+54

−0

source/BulkCrapUninstallerTests/UninstallListTests.cs

+1

−1

source/Directory.Build.props

+1

−1

source/KlocTools/Controls/WindowTargeter.vi.resx

+12

−0

source/KlocTools/Forms/LoadingDialog.cs

+1

−1

source/KlocTools/Forms/ProcessWaiter.vi.resx

+2

−2

source/KlocTools/Forms/ProcessWaiterControl.vi.resx

+3

−3

source/KlocTools/Forms/Tools/Buttons.vi.resx

+7

−1

source/KlocTools/Forms/Tools/PremadeDialogs.cs

+5

−3

source/KlocTools/IO/MsiTools.cs

+1

−1

source/KlocTools/KlocTools.csproj

+14

−14

source/KlocTools/Properties/Localisation.fr.resx

+31

−31

source/KlocTools/Properties/Localisation.vi.resx

+27

−2

source/KlocTools/Tools/DrawingTools.cs

+39

−1

source/KlocTools/Tools/SerializationTools.cs

+1

−1

source/NBug_custom/Core/UI/WinForms/Full.fr.resx

+1

−1

source/NBug_custom/Core/UI/WinForms/Full.vi.resx

+17

−17

source/NBug_custom/Properties/Localization.vi.resx

+13

−0

source/ObjectListView/ObjectListView.cs

+1

−1

source/OculusHelper/OculusHelper.csproj

+96

−17

source/UninstallTools/ApplicationEntrySerializer.cs

+15

−10

source/UninstallTools/ApplicationUninstallerEntry.cs

+3

−3

source/UninstallTools/Controls/FilterEditor.vi.resx

+10

−10

source/UninstallTools/Controls/UninstallListEditor.vi.resx

+7

−6

source/UninstallTools/Dialogs/StartupManagerWindow.fr.resx

+22

−21

source/UninstallTools/Dialogs/StartupManagerWindow.vi.resx

+48

−39

source/UninstallTools/Factory/InfoAdders/FastSizeGenerator.cs

+1

−1

source/UninstallTools/Factory/InfoAdders/InstallDateAdder.cs

+41

−24

source/UninstallTools/Factory/RegistryFactory.cs

+88

−3

source/UninstallTools/Factory/ScoopFactory.cs

+101

−27

source/UninstallTools/Lists/UninstallList.cs

+11

−8

source/UninstallTools/Properties/Localisation.fr.resx

+10

−0

source/UninstallTools/Properties/Localisation.hu.resx

+92

−89

source/UninstallTools/Properties/Localisation.vi.resx

+1

−1

source/UninstallTools/UninstallTools.csproj

+10

−0

source/UninstallTools/Uninstaller/NoWayToUninstallException.cs

+7

−8

source/UninstallTools/Uninstaller/UninstallManager.cs

+9

−0

source/UninstallerAutomatizer/Forms/MainWindow.hu.resx

+1

−1

source/UninstallerAutomatizer/Forms/MainWindow.vi.resx

+217

−0

source/UninstallerAutomatizer/Properties/Localization.hu.resx

+22

−22

source/UninstallerAutomatizer/Properties/Localization.vi.resx

+1

−1

source/UninstallerAutomatizer/UninstallerAutomatizer.csproj

+3

−0

source/UniversalUninstaller/Properties/Localisation.hu.resx

+2

−2

source/UniversalUninstaller/Properties/Localisation.vi.resx

+1

−1

source/UniversalUninstaller/TargetList.vi.resx

+9

−9

source/UniversalUninstaller/UninstallSelection.cs

+2

−2

source/UniversalUninstaller/UninstallSelection.vi.resx

4 changes: 4 additions & 0 deletions

4

.github/workflows/ci.yaml

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -24,6 +24,10 @@ jobs:

msbuild source\BulkCrapUninstaller.sln /t:Publish /p:Configuration=Release /p:Platform="Any CPU" /verbosity:minimal

/p:filealignment=512 /p:DeployOnBuild=true /p:PublishSingleFile=False /p:SelfContained=False /p:PublishReadyToRun=false /p:PublishTrimmed=False

/p:PublishProtocol=FileSystem /p:PublishDir="${{ github.workspace }}\bin\publish"

- name: Build launcher

run: >

msbuild "source\BCU-launcher\BCU-launcher.vcxproj" /t:Build /p:Configuration=Release /p:Platform=Win32 /m /verbosity:minimal

- uses: actions/upload-artifact@v4

with:

Expand Down

63 changes: 63 additions & 0 deletions

63

installer/BcuSetup.iss

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -134,6 +134,25 @@ Name: {app}\BCU-launcher.exe; Type: files

Name: {app}\win-x64; Type: filesandordirs

Name: {app}\win-x86; Type: filesandordirs

[UninstallDelete]

; Remove files generated by BCU itself. Installed files are removed automatically by Inno Setup.

Type: files; Name: "{app}\CleanLogs.bat"

Type: files; Name: "{app}\BCUninstaller.settings"

Type: files; Name: "{app}\*.log"

Type: files; Name: "{app}\Exception_*.zip"

Type: files; Name: "{app}\InfoCache.xml"

Type: files; Name: "{app}\CertCache.xml"

Type: files; Name: "{app}\UsageStatistics.xml"

Type: files; Name: "{app}\RatingCashe*"

Type: files; Name: "{app}\*\CleanLogs.bat"

Type: files; Name: "{app}\*\BCUninstaller.settings"

Type: files; Name: "{app}\*\*.log"

Type: files; Name: "{app}\*\Exception_*.zip"

Type: files; Name: "{app}\*\InfoCache.xml"

Type: files; Name: "{app}\*\CertCache.xml"

Type: files; Name: "{app}\*\UsageStatistics.xml"

Type: files; Name: "{app}\*\RatingCashe*"

[Tasks]

Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; Check: IsNotPortable

Expand Down

Expand Up

@@ -163,6 +182,50 @@ begin

end;

#endif

// The same as CleanLogs.bat except ran at the end of uninstallation

// TODO: Test, fix issues and enable

//procedure DeinitializeUninstall();

//var

// AppDataSafe: string;

// MicrosoftPath: string;

// SettingsDir: string;

// ResultCode: Integer;

// Cmd: string;

//begin

// // Choose LOCALAPPDATA if available, otherwise fall back to APPDATA

// if DirExists(ExpandConstant('{localappdata}')) then

// AppDataSafe := ExpandConstant('{localappdata}')

// else

// AppDataSafe := ExpandConstant('{userappdata}');

//

// // Delete .NET Assembly Usage Logs under %LOCALAPPDATA%\Microsoft (recursively)

// MicrosoftPath := AppDataSafe + '\\Microsoft';

// if DirExists(MicrosoftPath) then

// begin

// Cmd := '/C del /f /s BCUninstaller.exe.log SteamHelper.exe.log StoreAppHelper.exe.log UninstallerAutomatizer.exe.log UpdateHelper.exe.log';

// Exec(ExpandConstant('{cmd}'), Cmd, MicrosoftPath, SW_HIDE, ewWaitUntilTerminated, ResultCode);

// end;

//

// // Remove settings directories created by .NET under %LOCALAPPDATA%\\Marcin_Szeniak\\BCUninstaller*

// SettingsDir := AppDataSafe + '\\Marcin_Szeniak';

// if DirExists(SettingsDir) then

// begin

// // Remove matching directories

// Cmd := '/C for /d %G in ("' + SettingsDir + '\\BCUninstaller*") do rd /s /q "%G"';

// Exec(ExpandConstant('{cmd}'), Cmd, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

//

// // If the settings dir is now empty, remove it

// try

// if RemoveDir(SettingsDir) then

// begin

// // removed

// end;

// except

// // ignore

// end;

// end;

//end;

[CustomMessages]

en.MainFiles=Main Files

pl.MainFiles=Główne pliki

Expand Down

101 changes: 88 additions & 13 deletions

101

publish.bat

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -5,31 +5,45 @@ rem Release Debug

set config=Release

set msbuild="D:\Applications\VS2022\MSBuild\Current\Bin\amd64\MSBuild.exe"

if not exist %msbuild% call :findMsbuild

if not exist %msbuild% (

echo Failed to locate MSBuild.exe. Update publish.bat.

pause

exit /b 1

)

set solutionDir=%CD%\source

set publish=%CD%\bin\publish

set netVer=net8.0

set netVerFull=net8.0-windows10.0.18362.0

rmdir /q /s "%publish%"

if errorlevel 1 (pause)

rmdir /q /s bin\launcher

if errorlevel 1 (pause)

if exist "%publish%" (

rmdir /q /s "%publish%"

if errorlevel 1 (pause & exit /b 1)

)

if exist bin\launcher (

rmdir /q /s bin\launcher

if errorlevel 1 (pause & exit /b 1)

)

set platform=x64

call :publish

if errorlevel 1 (pause & exit /b 1)

rem Since BCU is now on .NET8, realistically only Arm64 and x64 Windows systems are supported now, so there's no point in building x86

rem set platform=x86

rem call :publish

copy bin\launcher\BCU-launcher.exe %publish%\BCUninstaller.exe

copy bin\launcher\BCU-launcher.exe "%publish%\BCUninstaller.exe"

if errorlevel 1 (echo Failed to copy BCU-launcher.exe & pause & exit /b 1)

copy "%target%\BCU_manual.html" "%publish%\BCU_manual.html"

copy "%target%\Licence.txt" "%publish%\Licence.txt"

copy "%target%\PrivacyPolicy.txt" "%publish%\PrivacyPolicy.txt"

copy "%target%\NOTICE" "%publish%\NOTICE"

rmdir /q /s bin\launcher

if exist bin\launcher rmdir /q /s bin\launcher

IF %config%==Release (del /f /s /q "%publish%\*.pdb")

Expand All

@@ -38,17 +52,25 @@ rem --- AnyCPU --------------------------------------------------

set target=%CD%\bin\publish-AnyCPU-%netVer%

rmdir /q /s "%target%"

if errorlevel 1 (pause)

if exist "%target%" (

rmdir /q /s "%target%"

if errorlevel 1 (pause & exit /b 1)

)

set platform=Any CPU

set selfContained=False

set runtime=

echo ====== Building AnyCPU ======

%msbuild% "source\BulkCrapUninstaller.sln" /p:filealignment=512 /t:Publish /p:DeployOnBuild=true /p:PublishSingleFile=False /p:SelfContained=False /p:PublishProtocol=FileSystem /p:Configuration=%config% /p:Platform="Any CPU" /p:TargetFrameworks=%netVerFull% /p:PublishDir="%target%" /p:PublishReadyToRun=false /p:PublishTrimmed=False /verbosity:minimal

call :publishProjects

if errorlevel 1 (pause & exit /b 1)

IF %config%==Release (del /f /s /q "%target%\*.pdb")

echo ====== Publishing finished! ======

pause

exit

exit /b 0

Expand All

@@ -57,13 +79,66 @@ rem -------------------------------------------------------------

:publish

set identifier=win-%platform%

set target=%CD%\bin\publish\%identifier%

set selfContained=True

set runtime=/p:RuntimeIdentifier=%identifier%

echo ====== Building %identifier% ======

%msbuild% "source\BulkCrapUninstaller.sln" /p:filealignment=512 /t:Restore;Rebuild /p:DeployOnBuild=true /p:PublishSingleFile=False /p:SelfContained=True /p:PublishProtocol=FileSystem /p:Configuration=%config% /p:Platform=%platform% /p:TargetFrameworks=%netVerFull% /p:PublishDir="%target%" /p:RuntimeIdentifier=%identifier% /p:PublishReadyToRun=false /p:PublishTrimmed=False /verbosity:minimal

call :buildLauncher

if errorlevel 1 goto :eof

call :publishProjects

goto :eof

rem -------------------------------------------------------------

:publishProjects

for /r "%solutionDir%" %%F in (*.csproj) do (

call :publishProjectIfEligible "%%~fF"

if errorlevel 1 goto :eof

)

%msbuild% "source\BulkCrapUninstaller.sln" /p:filealignment=512 /t:Publish /p:DeployOnBuild=true /p:PublishSingleFile=False /p:SelfContained=True /p:PublishProtocol=FileSystem /p:Configuration=%config% /p:Platform=%platform% /p:TargetFrameworks=%netVerFull% /p:PublishDir="%target%" /p:RuntimeIdentifier=%identifier% /p:PublishReadyToRun=false /p:PublishTrimmed=False /verbosity:minimal

exit /b 0

:publishProjectIfEligible

findstr /i /c:"exe</OutputType>" "%~1" >nul

if errorlevel 1 exit /b 0

call :publishProject "%~1"

if errorlevel 1 exit /b 1

exit /b 0

:publishProject

%msbuild% "%~1" /restore /m /p:filealignment=512 /t:Publish /p:DeployOnBuild=true /p:PublishSingleFile=False /p:SelfContained=%selfContained% /p:PublishProtocol=FileSystem /p:Configuration=%config% /p:Platform="%platform%" /p:TargetFramework=%netVerFull% /p:PublishDir="%target%" %runtime% /p:PublishReadyToRun=false /p:PublishTrimmed=False /verbosity:minimal

goto :eof

rem -------------------------------------------------------------

rem -------------------------------------------------------------

:buildLauncher

rem Build via solution so platform mapping is respected automatically.

%msbuild% "source\BulkCrapUninstaller.sln" /t:BCU-launcher /m /p:Configuration=%config% /p:Platform=%platform% "/p:SolutionDir=%solutionDir%\\" /verbosity:minimal

goto :eof

rem -------------------------------------------------------------

:findMsbuild

set vswhere=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe

if exist "%vswhere%" (

for /f "delims=" %%I in ('"%vswhere%" -latest -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\amd64\MSBuild.exe') do (

set msbuild="%%~fI"

goto :eof

)

)

for /f "delims=" %%I in ('where msbuild 2^>nul') do (

set msbuild="%%~fI"

goto :eof

)

goto :eof

rem -------------------------------------------------------------

1 change: 1 addition & 0 deletions

1

source/BulkCrapUninstaller.sln

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -143,6 +143,7 @@ Global

{4F843421-01D4-48E8-B88B-CDF30DD671A4}.Release|x86.ActiveCfg = Release|x86

{4F843421-01D4-48E8-B88B-CDF30DD671A4}.Release|x86.Build.0 = Release|x86

{C631EFBE-0463-417D-AEBE-A4BE3E660C43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

{C631EFBE-0463-417D-AEBE-A4BE3E660C43}.Debug|Any CPU.Build.0 = Debug|Any CPU

{C631EFBE-0463-417D-AEBE-A4BE3E660C43}.Debug|ARM64.ActiveCfg = Debug|ARM64

{C631EFBE-0463-417D-AEBE-A4BE3E660C43}.Debug|ARM64.Build.0 = Debug|ARM64

{C631EFBE-0463-417D-AEBE-A4BE3E660C43}.Debug|x64.ActiveCfg = Debug|x64

Expand Down

26 changes: 15 additions & 11 deletions

26

source/BulkCrapUninstaller/BulkCrapUninstaller.csproj

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -47,19 +47,23 @@

</None>

</ItemGroup>

<ItemGroup>

<ProjectReference Include="..\KlocTools\KlocTools.csproj" />

<ProjectReference Include="..\NBug_custom\NBug.csproj" />

<ProjectReference Include="..\NetSettingBinder\NetSettingBinder.csproj" />

<ItemGroup>

<ProjectReference Include="..\KlocTools\KlocTools.csproj" />

<ProjectReference Include="..\NBug_custom\NBug.csproj" />

<ProjectReference Include="..\NetSettingBinder\NetSettingBinder.csproj" />

<ProjectReference Include="..\ObjectListView\ObjectListView.csproj" />

<ProjectReference Include="..\PortableSettingsProvider\PortableSettingsProvider.csproj" />

<ProjectReference Include="..\SimpleTreeMap\SimpleTreeMap.csproj" />

<ProjectReference Include="..\UninstallTools\UninstallTools.csproj" />

</ItemGroup>

<ItemGroup>

<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" />

</ItemGroup>

<ProjectReference Include="..\UninstallTools\UninstallTools.csproj" />

</ItemGroup>

<ItemGroup>

<InternalsVisibleTo Include="BulkCrapUninstallerTests" />

</ItemGroup>

<ItemGroup>

<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" />

</ItemGroup>

<ItemGroup>

<Compile Update="Properties\Localisable.Designer.cs">

Expand All

@@ -84,4 +88,4 @@

<LastGenOutput>Resources.Designer.cs</LastGenOutput>

</EmbeddedResource>

</ItemGroup>

</Project>

</Project>

5 changes: 3 additions & 2 deletions

5

source/BulkCrapUninstaller/Controls/AdvancedClipboardCopy.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -119,15 +119,16 @@

</resheader>

<data name="comboBoxInsert.Items" xml:space="preserve">

<value>Chèn...</value>

<comment>...</comment>

</data>

<data name="checkBoxUnescape.Text" xml:space="preserve">

<value>Cho phép ký tự thoát</value>

<value>Cho phép ký tự thoát (Unescape)</value>

</data>

<data name="buttonHelp.Text" xml:space="preserve">

<value>Trợ giúp</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Định dạng</value>

<value>Chuỗi regex</value>

</data>

<data name="groupBox2.Text" xml:space="preserve">

<value>Kết quả</value>

Expand Down

4 changes: 2 additions & 2 deletions

4

source/BulkCrapUninstaller/Controls/FileTargeter.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -121,12 +121,12 @@

<value>Thư mục cài đặt...</value>

</data>

<data name="openFileDialog1.Title" xml:space="preserve">

<value>Chọn bất kỳ tệp nào liên quan đến ứng dụng</value>

<value>Chọn bất kỳ tệp tin nào thuộc về ứng dụng</value>

</data>

<data name="openFileDialog1.Filter" xml:space="preserve">

<value>Tất cả tệp|*.*</value>

</data>

<data name="button1.Text" xml:space="preserve">

<value>Đường dẫn hoặc tệp tin ứng dụng...</value>

<value>Đường dẫn hoặc tệp tin của ứng dụng...</value>

</data>

</root>

2 changes: 1 addition & 1 deletion

2

source/BulkCrapUninstaller/Controls/ListLegend.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,7 +124,7 @@

<value>Application non enregistrée</value>

</data>

<data name="labelInvalid.Text" xml:space="preserve">

<value>Désinstalleur invalide</value>

<value>Désinstalleur manquant</value>

</data>

<data name="labelUnverified.Text" xml:space="preserve">

<value>Certificat non vérifié</value>

Expand Down

10 changes: 5 additions & 5 deletions

10

source/BulkCrapUninstaller/Controls/ListLegend.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,22 +118,22 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="labelWinFeature.Text" xml:space="preserve">

<value>Windows Feature</value>

<value>Tính năng Windows (Windows Features)</value>

</data>

<data name="labelOrphaned.Text" xml:space="preserve">

<value>Ứng dụng chưa đăng ký</value>

<value>Không có thông tin đăng ký</value>

</data>

<data name="labelInvalid.Text" xml:space="preserve">

<value>Thiếu trình gỡ cài đặt</value>

</data>

<data name="labelUnverified.Text" xml:space="preserve">

<value>Chứng chỉ chưa được xác minh</value>

<value>Chứng chỉ chưa xác minh</value>

</data>

<data name="labelVerified.Text" xml:space="preserve">

<value>Chứng chỉ đã được xác minh</value>

<value>Chứng chỉ đã xác minh</value>

</data>

<data name="labelLegend.Text" xml:space="preserve">

<value>Chú thích màu</value>

<value>Đánh dấu bằng màu sắc</value>

</data>

<data name="labelStoreApp.Text" xml:space="preserve">

<value>Ứng dụng từ Windows Store</value>

Expand Down

6 changes: 3 additions & 3 deletions

6

source/BulkCrapUninstaller/Controls/RelatedUninstallerAdder.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,7 +118,7 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="olvColumnName.Text" xml:space="preserve">

<value>Tên trình gỡ cài có đặt liên quan</value>

<value>Tên trình gỡ cài đặt liên quan</value>

</data>

<data name="olvColumnEnabled.Text" xml:space="preserve">

<value>Thêm vào danh sách tác vụ</value>

Expand All

@@ -127,9 +127,9 @@

<value>Liên quan đến: </value>

</data>

<data name="labelInfo.Text" xml:space="preserve">

<value>Đây là danh sách các ứng dụng có thể liên quan đến ứng các dụng bạn đã chọn để gỡ cài đặt. Bằng cách kiểm tra các ứng dụng này, bạn có thể thêm chúng vào hàng đợi gỡ cài đặt.</value>

<value>Đây là danh sách các ứng dụng có thể liên quan đến các ứng dụng bạn đã chọn để gỡ cài đặt. Bạn có thể thêm vào hàng đợi gỡ cài đặt bằng cách tích chọn chúng.</value>

</data>

<data name="labelInfo2.Text" xml:space="preserve">

<value>Hãy cẩn thận để không gỡ cài đặt phần mềm quan trọng mà các ứng dụng khác có thể cần để hoạt động bình thường.</value>

<value>Hãy đảm bảo rằng bạn không gỡ cài đặt các phần mềm quan trọng mà các ứng dụng khác có thể vẫn cần để hoạt động bình thường.</value>

</data>

</root>

20 changes: 10 additions & 10 deletions

20

source/BulkCrapUninstaller/Controls/Settings/AdvancedFilters.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -110,16 +110,16 @@ public void LoadUninstallList(string fileName)

uninstallListEditor1.CurrentList = result;

UnsavedChanges = false;

}

catch (SecurityException ex)

{

PremadeDialogs.GenericError(ex);

}

catch (Exception ex)

{

PremadeDialogs.GenericError("File is not an uninstall list or it can't be opened",

"Please note that uninstall lists are saved in the \"Advanced filtering\" view, not by exporting. Lists should have the .bcul extension.\n\nError message: " + ex.Message);

}

}

catch (SecurityException ex)

{

PremadeDialogs.GenericError(ex);

}

catch (Exception ex)

{

MessageBoxes.OpenUninstallListError(

Localisable.MessageBoxes_Error_details + ex.Message);

}

}

/// <summary>

/// Show file select gui

Expand Down

2 changes: 1 addition & 1 deletion

2

source/BulkCrapUninstaller/Controls/Settings/AdvancedFilters.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -130,7 +130,7 @@

<value>Lưu thành...</value>

</data>

<data name="toolStripButtonSaveUlDef.Text" xml:space="preserve">

<value>Lưu làm mặc định</value>

<value>Lưu thành mặc định</value>

</data>

<data name="toolStripButtonDelete.Text" xml:space="preserve">

<value>Xoá danh sách mặc định</value>

Expand Down

2 changes: 1 addition & 1 deletion

2

source/BulkCrapUninstaller/Controls/Settings/CacheSettings.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,7 +118,7 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label1.Text" xml:space="preserve">

<value>La mise en cache peut beaucoup réduire le temps de recherche, mais si une application est modifiée, BCU pourrait ne pas noter le changement (ex. la taille). NOTE: pour être effectifs, ces paramètres peuvent requérir le redémarrage de BCU.</value>

<value>La mise en cache peut beaucoup réduire le temps de recherche, mais si une application est modifiée, BCU pourrait ne pas noter le changement (ex. la taille). NOTE : pour prendre effet, ces paramètres peuvent requérir le redémarrage de BCU.</value>

</data>

<data name="checkBoxCerts.Text" xml:space="preserve">

<value>Mettre en cache les résultats de scan de certificat d'application</value>

Expand Down

10 changes: 5 additions & 5 deletions

10

source/BulkCrapUninstaller/Controls/Settings/CacheSettings.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,19 +118,19 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label1.Text" xml:space="preserve">

<value>Bộ nhớ đệm có thể giảm đáng kể thời gian tìm kiếm nhưng BCU có thể không biết những thay đổi đối với ứng dụng của bạn.

Lưu ý: Bạn có thể cần phải khởi động lại BCU để các cài đặt này có hiệu lực.</value>

<value>Việc lưu bộ nhớ đệm có thể giảm đáng kể thời gian tìm kiếm nhưng nếu một ứng dụng có sự thay đổi thì BCU có thể sẽ không nhận biết được.

LƯU Ý: Bạn có thể cần phải khởi động lại BCU để các cài đặt này có hiệu lực.</value>

</data>

<data name="checkBoxCerts.Text" xml:space="preserve">

<value>Lưu trữ tạm thời các kết quả quét chứng chỉ ứng dụng</value>

<value>Lưu bộ nhớ đệm kết quả quét chứng chỉ ứng dụng</value>

</data>

<data name="checkBoxInfo.Text" xml:space="preserve">

<value>Lưu trữ tạm thời thông tin bị thiếu được thu thập</value>

<value>Lưu bộ nhớ đệm các thông tin còn thiếu đã thu thập được</value>

</data>

<data name="button1.Text" xml:space="preserve">

<value>Xoá bộ nhớ đệm</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Bộ nhớ đệm</value>

<value>Bộ nhớ đệm (Cache)</value>

</data>

</root>

24 changes: 13 additions & 11 deletions

24

source/BulkCrapUninstaller/Controls/Settings/PropertiesSidebar.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -136,7 +136,8 @@ Attention : vérifiez à deux fois avant de supprimer ces applications, elles po

<value>Surligner les désinstalleurs certifiés</value>

</data>

<data name="checkBoxCertTest.ToolTip" xml:space="preserve">

<value>Utiliser des couleurs pour identifier les désinstalleurs certifiés. Si le certificat a été vérifié avec succès, il utilise la couleur grise, autrement il utilise la couleur bleue.

<value>Utiliser des couleurs pour identifier les désinstalleurs certifiés.

Si le certificat a été vérifié avec succès utiliser la couleur verte, autrement utiliser la couleur bleue.

Attention : la vérification peut mettre longtemps à se terminer.</value>

</data>

Expand All

@@ -147,20 +148,21 @@ Attention : la vérification peut mettre longtemps à se terminer.</value>

<value>Filtrer tout ce qui a été publié par Microsoft. C'est aussi simple que cela.</value>

</data>

<data name="checkBoxListSysComp.Text" xml:space="preserve">

<value>Montrer les composants système</value>

<value>Afficher les composants système</value>

</data>

<data name="checkBoxListSysComp.ToolTip" xml:space="preserve">

<value>Quelques désinstalleurs peuvent être marqués comme "composants système" pour les masquer dans la

liste Ajout/Suppression de programmes. Les pilotes sont souvent marqués avec cette balise.</value>

liste Ajout/Suppression de programmes.

Les pilotes sont souvent marqués avec cette balise.</value>

</data>

<data name="checkBoxListProtected.Text" xml:space="preserve">

<value>Montrer les éléments protégés</value>

<value>Afficher les éléments protégés</value>

</data>

<data name="checkBoxListProtected.ToolTip" xml:space="preserve">

<value>Les éléments protégés sont marqués avec la balise "NoRemove", signifiant que l'éditeur ne veut pas que vous les enleviez.</value>

</data>

<data name="checkBoxShowUpdates.Text" xml:space="preserve">

<value>Montrer les mises à jour</value>

<value>Afficher les mises à jour</value>

</data>

<data name="checkBoxShowUpdates.ToolTip" xml:space="preserve">

<value>Mises à jour d'autres applications. En général elles sont désinstallées ensemble avec leur application parente, ainsi elles peuvent être ignorées.</value>

Expand All

@@ -172,12 +174,12 @@ liste Ajout/Suppression de programmes. Les pilotes sont souvent marqués avec ce

<value>Sélectionnner par cases à cocher</value>

</data>

<data name="checkBoxViewCheckboxes.ToolTip" xml:space="preserve">

<value>Changer le style de sélection de la liste en cases à cocher. Elles sont plus fiables car un simple clic ne peut désélectionner tout.

<value>Change le style de sélection de la liste en cases à cocher. Elles sont plus fiables car un simple clic ne peut désélectionner tout.

Vous pouvez cocher de multiples éléments en les surlignant et en pressant la barre d'espace.</value>

</data>

<data name="checkBoxViewGroups.Text" xml:space="preserve">

<value>Montrer les éléments en groupes</value>

<value>Afficher les éléments en groupes</value>

</data>

<data name="checkBoxViewGroups.ToolTip" xml:space="preserve">

<value>Grouper les éléments en fonction de la colonne

Expand All

@@ -188,18 +190,18 @@ Le groupage de la plupart des colonnes utilise un tri intelligent.</value>

<value>Réglages de la vue liste</value>

</data>

<data name="checkBoxShowStoreApps.Text" xml:space="preserve">

<value>Montrer les applis du Windows Store</value>

<value>Afficher les applis du Windows Store</value>

</data>

<data name="checkBoxWinFeature.Text" xml:space="preserve">

<value>Montrer les fonctionalités Windows</value>

<value>Afficher les fonctionnalités Windows</value>

</data>

<data name="checkBoxHighlightSpecial.Text" xml:space="preserve">

<value>Surligner les désinstalleurs spéciaux</value>

</data>

<data name="checkBoxHighlightSpecial.ToolTip" xml:space="preserve">

<value>Utiliser des couleurs pour différencier les applications spéciales, par exemple les applis du store et les Fonctionnalités Windows</value>

<value>Utiliser des couleurs pour différencier les applications spéciales, par exemple les applis du Store et les Fonctionnalités Windows.</value>

</data>

<data name="checkBoxTweaks.Text" xml:space="preserve">

<value>Montrer les perfectionnements</value>

<value>Afficher les perfectionnements</value>

</data>

</root>

44 changes: 22 additions & 22 deletions

44

source/BulkCrapUninstaller/Controls/Settings/PropertiesSidebar.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,30 +118,30 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="checkBoxOrphans.Text" xml:space="preserve">

<value>Hiển thị các ứng dụng chưa đăng ký</value>

<value>Hiển thị các ứng dụng không có thông tin đăng ký</value>

</data>

<data name="checkBoxOrphans.ToolTip" xml:space="preserve">

<value>Hiển thị các ứng dụng chưa có bất kỳ trình gỡ cài đặt được đăng ký nào. Chúng không hiển thị trong hầu hết các trình quản lý gỡ cài đặt nhưng vẫn chiếm dung lượng. Các mục chưa đăng ký được đánh dấu bằng màu đỏ.

<value>Hiển thị các ứng dụng không đăng ký bất kỳ trình gỡ cài đặt nào với hệ thống. Chúng thường không xuất hiện trong hầu hết các trình quản lý gỡ cài đặt nhưng vẫn chiếm dung lượng ổ cứng. Các mục này được đánh dấu bằng màu đỏ.

Cảnh báo: Hãy kiểm tra kỹ trước khi xóa các ứng dụng này, chúng có thể vẫn cần thiết!</value>

</data>

<data name="checkBoxInvalidTest.Text" xml:space="preserve">

<value>Đánh dấu các mục thiếu trình gỡ cài đặt</value>

<value>Đánh dấu các ứng dụng thiếu trình gỡ cài đặt</value>

</data>

<data name="checkBoxInvalidTest.ToolTip" xml:space="preserve">

<value>Dùng màu xám để xác định trình gỡ cài đặt bị hỏng hoặc bị thiếu.</value>

<value>Sử dụng màu xám để đánh dấu trình gỡ cài đặt bị hỏng hoặc bị thiếu.</value>

</data>

<data name="checkBoxCertTest.Text" xml:space="preserve">

<value>Đánh dấu trình gỡ cài đặt đã đạt chứng chỉ</value>

<value>Đánh dấu trình gỡ cài đặt có chứng chỉ</value>

</data>

<data name="checkBoxCertTest.ToolTip" xml:space="preserve">

<value>Sử dụng màu sắc để xác định trình gỡ cài đặt đã đạt chứng chỉ.

Màu xanh lục nếu chứng chỉ đã được xác minh thành công, ngược lại là màu xanh lam.

<value>Sử dụng màu sắc để đánh dấu các trình gỡ cài đặt có chứng chỉ.

Nếu chứng chỉ được xác minh thành công sẽ là màu xanh lá, ngược lại sẽ là màu xanh dương.

Cảnh báo: Quá trình xác minh có thể mất nhiều thời gian để hoàn tất.</value>

Cảnh báo: Quá trình xác minh có thể mất nhiều thời gian.</value>

</data>

<data name="checkBoxListHideMicrosoft.Text" xml:space="preserve">

<value>Ẩn mọi thứ do Microsoft phát hành</value>

<value>Ẩn ứng dụng do Microsoft phát hành</value>

</data>

<data name="checkBoxListHideMicrosoft.ToolTip" xml:space="preserve">

<value>Lọc bỏ mọi thứ do Microsoft phát hành. Chỉ thế thôi.</value>

Expand All

@@ -150,26 +150,26 @@ Cảnh báo: Quá trình xác minh có thể mất nhiều thời gian để ho

<value>Hiển thị các thành phần hệ thống</value>

</data>

<data name="checkBoxListSysComp.ToolTip" xml:space="preserve">

<value>Một số trình gỡ cài đặt có thể được đánh dấu là "thành phần hệ thống" và bị ẩn khỏi danh sách Thêm/Xóa phần mềm.

Các "Driver" thường được đánh dấu bằng thẻ này.</value>

<value>Một số trình gỡ cài đặt có thể được đánh dấu là "thành phần hệ thống" để ẩn chúng khỏi danh sách "Add/Remove Programs" mặc định của Windows.

Các trình điều khiển (Driver) thường được đánh dấu bằng thẻ này.</value>

</data>

<data name="checkBoxListProtected.Text" xml:space="preserve">

<value>Hiển thị các mục được bảo vệ</value>

</data>

<data name="checkBoxListProtected.ToolTip" xml:space="preserve">

<value>Các mục được bảo vệ được đánh dấu bằng thẻ "NoRemove", có nghĩa là nhà phát hành không muốn bạn xóa chúng.</value>

<value>Các mục được bảo vệ sẽ có thẻ "NoRemove", nghĩa là nhà phát hành không muốn bạn gỡ bỏ chúng.</value>

</data>

<data name="checkBoxTweaks.Text" xml:space="preserve">

<value>Hiển thị các tinh chỉnh</value>

<value>Hiển thị các bản tinh chỉnh (Tweaks)</value>

</data>

<data name="checkBoxShowUpdates.Text" xml:space="preserve">

<value>Hiển thị các ứng dụng cập nhật</value>

</data>

<data name="checkBoxShowUpdates.ToolTip" xml:space="preserve">

<value>Các ứng dụng dùng để cập nhật các ứng dụng khác. Chúng thường được gỡ cài đặt cùng với ứng dụng gốc nên có thể yên tâm bỏ qua.</value>

<value>Các bản cập nhật của những ứng dụng khác. Thông thường chúng sẽ bị gỡ bỏ cùng với ứng dụng gốc, vì vậy bạn có thể bỏ qua chúng.</value>

</data>

<data name="checkBoxWinFeature.Text" xml:space="preserve">

<value>Hiển thị Windows features</value>

<value>Hiển thị tính năng Windows (Windows Features)</value>

</data>

<data name="checkBoxShowStoreApps.Text" xml:space="preserve">

<value>Hiển thị ứng dụng từ Windows Store</value>

Expand All

@@ -178,27 +178,27 @@ Các "Driver" thường được đánh dấu bằng thẻ này.</value>

<value>Bộ lọc</value>

</data>

<data name="checkBoxViewCheckboxes.Text" xml:space="preserve">

<value>Chọn bằng cách tích vào hộp kiểm</value>

<value>Chọn bằng ô tích (checkbox)</value>

</data>

<data name="checkBoxViewCheckboxes.ToolTip" xml:space="preserve">

<value>Thay đổi kiểu lựa chọn của danh sách thành bằng cách tích các hộp kiểm. Chúng an toàn hơn vì không thể bỏ chọn mọi thứ bằng một cú nhấp chuột.

<value>Thay đổi kiểu chọn của danh sách sang dạng ô tích chọn. Cách này an toàn hơn vì chỉ một cú nhấp chuột sẽ không làm mất chọn tất cả các mục trước đó.

Bạn có thể kiểm tra nhiều mục bằng cách tích chúng và nhấn phím cách.</value>

Bạn có thể tích chọn nhiều mục bằng cách bôi đen chúng rồi nhấn phím Cách.</value>

</data>

<data name="checkBoxViewGroups.Text" xml:space="preserve">

<value>Hiển thị các mục theo nhóm</value>

</data>

<data name="checkBoxViewGroups.ToolTip" xml:space="preserve">

<value>Nhóm các mục trong danh sách theo các cột được sắp xếp.

Việc nhóm hầu hết các cột sử dụng bộ lọc thông minh.</value>

<value>Nhóm các mục lại dựa theo cột được chọn.

Việc nhóm phần lớn các cột đều sử dụng bộ lọc thông minh.</value>

</data>

<data name="checkBoxHighlightSpecial.Text" xml:space="preserve">

<value>Đánh dấu các trình gỡ cài đặt đặc biệt</value>

</data>

<data name="checkBoxHighlightSpecial.ToolTip" xml:space="preserve">

<value>Dùng màu sắc để phân biệt các ứng dụng đặc biệt, ví dụ như Store Apps và Windows Features.</value>

<value>Sử dụng màu sắc để phân biệt các ứng dụng đặc biệt, ví dụ như Store Apps và Windows Features.</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Cài đặt chế độ xem</value>

<value>Chế độ hiển thị danh sách</value>

</data>

</root>

5 changes: 4 additions & 1 deletion

5

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -169,7 +169,10 @@

<value>Créer un point de restauration avant désinstallation</value>

</data>

<data name="checkBoxRestorePoint.ToolTip" xml:space="preserve">

<value>Vous pouvez créer un point de restauration système pour sauvegarder le registre, certains paramètres et fichiers. Il est recommandé de créer un point de restauration avant de supprimer des pilotes et des applications système importantes.</value>

<value>Vous pouvez créer un point de restauration système pour sauvegarder le registre, certains paramètres et fichiers.

Il est recommandé de créer un point de restauration avant de supprimer des pilotes et des applications système importantes.

Si ce paramètre est grisé, les Points de Restauration sont désactivés ou indisponibles. Dans ce cas, aucun point de restauration ne sera créé !</value>

</data>

<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

<value>True</value>

Expand Down

2 changes: 1 addition & 1 deletion

2

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.sv.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -166,7 +166,7 @@

<value>Automatisk avslutning vid väntan på användarindata</value>

</data>

<data name="checkBoxAutoDaemon.Text" xml:space="preserve">

<value>Bevaka "tysta" avinstallationsprogram för popup-fönster eller andra hinder och automatisera dem (kör automatizer daemon).</value>

<value>Automatisera tysta popup-fönster för avinstallation via daemon.</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Tyst avinstallation</value>

Expand Down

35 changes: 19 additions & 16 deletions

35

source/BulkCrapUninstaller/Controls/Settings/UninstallationSettings.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,35 +118,38 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="checkBoxManualNoCollisionProtection.Text" xml:space="preserve">

<value>Tắt tính năng chống xung đột khi chạy trình gỡ

cài đặt theo cách thủ công</value>

<value>Tắt tính năng chống xung đột khi chạy trình

gỡ cài đặt theo cách thủ công</value>

</data>

<data name="checkBoxConcurrentOneLoud.Text" xml:space="preserve">

<value>Mỗi lần chỉ chạy một trình gỡ cài đặt</value>

<value>Mỗi lần chỉ chạy một trình gỡ cài đặt có giao diện (Loud)</value>

</data>

<data name="checkBoxConcurrent.Text" xml:space="preserve">

<value>Tự động chạy đồng thời các trình gỡ cài đặt (nếu có thể)</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Số trình gỡ cài đặt tối đa chạy đồng thời:</value>

<value>Số trình gỡ cài đặt tối đa được chạy cùng lúc:</value>

</data>

<data name="groupBox3.Text" xml:space="preserve">

<value>Gỡ cài đặt đồng thời</value>

</data>

<data name="checkBoxShutdown.Text" xml:space="preserve">

<value>Ngăn chặn việc tắt/khởi động lại hệ thống</value>

<value>Ngăn hệ thống tắt nguồn/khởi động lại</value>

</data>

<data name="checkBoxRestorePoint.Text" xml:space="preserve">

<value>Tạo điểm khôi phục trước khi gỡ cài đặt</value>

<value>Tạo điểm khôi phục (Restore Point) trước khi gỡ cài đặt</value>

</data>

<data name="checkBoxRestorePoint.ToolTip" xml:space="preserve">

<value>Bạn có thể sao lưu registry, một số cài đặt và tệp bằng cách tạo điểm khôi phục hệ thống. Bạn nên tạo điểm khôi phục trước khi xóa driver và các ứng dụng hệ thống quan trọng.</value>

<value>Bạn có thể tạo một điểm khôi phục hệ thống để sao lưu registry, một số cài đặt và các tệp tin.

Khuyến nghị nên tạo điểm khôi phục trước khi gỡ bỏ các trình điều khiển (Driver) và các ứng dụng hệ thống quan trọng.

Nếu cài đặt này bị mờ đi thì tức là tính năng Điểm khôi phục (Restore Points) trên Windows đã bị tắt hoặc không khả dụng. Trong trường hợp đó, không có điểm khôi phục nào được tạo!</value>

</data>

<data name="checkBoxBatchSortQuiet.Text" xml:space="preserve">

<value>Sắp xếp trình gỡ cài đặt một cách thông minh</value>

</data>

<data name="checkBoxDiisableProtection.Text" xml:space="preserve">

<value>Vô hiệu hóa bảo vệ</value>

<value>Tắt tính năng bảo vệ</value>

</data>

<data name="checkBoxSimulate.Text" xml:space="preserve">

<value>Mô phỏng quá trình gỡ cài đặt</value>

Expand All

@@ -155,23 +158,23 @@ cài đặt theo cách thủ công</value>

<value>Cài đặt chung</value>

</data>

<data name="checkBoxAutoKillQuiet.Text" xml:space="preserve">

<value>Tự động huỷ các trình gỡ cài đặt âm thầm bị lỗi</value>

<value>Tự động dừng các trình gỡ cài đặt yên lặng (Quiet) bị treo</value>

</data>

<data name="checkBoxRetryQuiet.Text" xml:space="preserve">

<value>Thử lại các trình gỡ cài đặt âm thầm không thành công một lần nữa</value>

<value>Thử lại một lần nếu bộ gỡ cài đặt yên lặng (Quiet) bị lỗi</value>

</data>

<data name="checkBoxGenerate.Text" xml:space="preserve">

<value>Tạo trình gỡ cài đặt âm thầm bị thiếu nếu có thể</value>

<value>Tự động tạo lệnh gỡ cài đặt yên lặng (Quiet) nếu có thể</value>

</data>

<data name="checkBoxGenerateStuck.Text" xml:space="preserve">

<value>Tự động huỷ trình gỡ cài đặt nếu nó bị kẹt khi chờ thao tác của người dùng</value>

<value>Tự động dừng nếu trình gỡ cài đặt bị treo khi chờ người dùng nhập liệu</value>

</data>

<data name="checkBoxAutoDaemon.Text" xml:space="preserve">

<value>Giám sát các trình gỡ cài đặt "im lặng" bật lên cửa sổ

không mong muốn hoặc treo máy, và tự động hóa chúng

(chạy trình nền tự động)</value>

<value>Giám sát các trình gỡ cài đặt "im lặng" (Silent) để phát

hiện cửa sổ bật lên (popup) hoặc lỗi trì hoãn và tự động

xử lý chúng</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Gỡ cài đặt âm thầm</value>

<value>Gỡ cài đặt yên lặng (Quiet)</value>

</data>

</root>

6 changes: 3 additions & 3 deletions

6

source/BulkCrapUninstaller/Controls/UninstallConfirmation.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,10 +118,10 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="labelInfo2.Text" xml:space="preserve">

<value>Thứ tự sắp xếp ban đầu tùy thuộc vào tuỳ chọn gỡ cài đặt của bạn nhưng có thể thay đổi bằng cách kéo các mục. Lưu ý: BCU có thể thay đổi thứ tự nếu bật tính năng gỡ cài đặt đồng thời.</value>

<value>Thứ tự ban đầu phụ thuộc vào cài đặt gỡ bỏ của bạn nhưng bạn có thể thay đổi bằng cách kéo thả các mục. Lưu ý: BCU có thể tự động thay đổi thứ tự này nếu tính năng gỡ cài đặt đồng thời được bật.</value>

</data>

<data name="labelInfo.Text" xml:space="preserve">

<value>Đây là danh sách các ứng dụng sẽ được gỡ cài đặt, theo thứ tự từ trên xuống dưới. Nếu bạn bỏ tích trường "Gỡ cài đặt", ứng dụng sẽ không được gỡ cài đặt. Nếu tính năng "Gỡ cài đặt âm thầm" không khả dụng cho một ứng dụng thì bạn không thể tích vào trường này.</value>

<value>Đây là danh sách các ứng dụng sẽ bị gỡ cài đặt, theo thứ tự từ trên xuống dưới. Nếu bạn bỏ chọn ở cột "Gỡ cài đặt", ứng dụng đó sẽ không bị gỡ. Nếu một ứng dụng không hỗ trợ gỡ cài đặt qua "Chế độ yên lặng (Quiet)", bạn sẽ không thể tích chọn ô đó.</value>

<comment>jp translator: I don't know the difference between Quiet Uninstall and Silent Uninstall. Can I translate them to mean the same meaning? At this stage, we are trying to separate the two, but Quiet Uninstall is not very familiar to Japanese people.</comment>

</data>

<data name="buttonSmartSort.Text" xml:space="preserve">

Expand All

@@ -131,7 +131,7 @@

<value>Vị trí cài đặt</value>

</data>

<data name="olvColumnQuiet.Text" xml:space="preserve">

<value>Gỡ cài đặt âm thầm</value>

<value>Chế độ yên lặng (Quiet)</value>

</data>

<data name="olvColumnEnabled.Text" xml:space="preserve">

<value>Gỡ cài đặt</value>

Expand Down

13 changes: 7 additions & 6 deletions

13

source/BulkCrapUninstaller/EntryPoint.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -17,6 +17,7 @@ Apache License Version 2.0

using Klocman.Extensions;

using Klocman.Forms;

using Klocman.Forms.Tools;

using Klocman.Tools;

using UninstallTools.Dialogs;

namespace BulkCrapUninstaller

Expand Down

Expand Up

@@ -136,11 +137,11 @@ private static void HandleBeingSecondInstance()

}

else

{

CustomMessageBox.ShowDialog(null, new CmbBasicSettings("BCUninstaller is already running", "BCUninstaller is already running", "You can start only one instance of BCUninstaller. Close previous instances and try again. If you don't see the BCUninstaller window or it's not responding, try closing it with Task Manager.", Icon.ExtractAssociatedIcon(location), "OK"));

}

}

catch (Exception ex)

{

CustomMessageBox.ShowDialog(null, new CmbBasicSettings("BCUninstaller is already running", "BCUninstaller is already running", "You can start only one instance of BCUninstaller. Close previous instances and try again. If you don't see the BCUninstaller window or it's not responding, try closing it with Task Manager.", DrawingTools.ExtractAssociatedIcon(location), "OK"));

}

}

catch (Exception ex)

{

Console.WriteLine(ex);

}

}

Expand All

@@ -166,4 +167,4 @@ private static void SetupDependancies()

//}

}

}

}

}

14 changes: 7 additions & 7 deletions

14

source/BulkCrapUninstaller/Forms/Helpers/FeedbackBox.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -121,10 +121,10 @@

<value>Merci d'utiliser BCUninstaller !</value>

</data>

<data name="p1welcomeSubheading.Text" xml:space="preserve">

<value>Si vous aimez cet outil open-source gratuit, n'hésitez pas à en parler à vos amis, à le partager sur les réseaux sociaux, ou donnez vos impressions - tout compte !</value>

<value>Si vous trouvez cet outil open-source gratuit utile, merci de prendre une minute pour aider ! Parlez-en à vos amis, partagez-le sur les réseaux sociaux, donnez un retour - chaque petit geste compte !</value>

</data>

<data name="buttonSendFeedback2.Text" xml:space="preserve">

<value>Envoyer vos impressions</value>

<value>Envoyer un retour</value>

</data>

<data name="buttonRate.Text" xml:space="preserve">

<value>Évaluer (en bas de la page)</value>

Expand All

@@ -136,16 +136,16 @@

<value>Des problèmes ou des fonctions manquantes ?</value>

</data>

<data name="p1FeedbackDesc.Text" xml:space="preserve">

<value>Si vous avez des problèmes avec BCU ou si vous souhaitez suggérer une nouvelle fonction, voyez ces liens :</value>

<value>Si vous avez des problèmes avec BCU ou si vous souhaitez suggérer une nouvelle fonction, merci de vérifier ces liens :</value>

</data>

<data name="buttonSubmitGithub.Text" xml:space="preserve">

<value>Soumettre sur GitHub (Nécessite un compte)</value>

</data>

<data name="buttonSendFeedback.Text" xml:space="preserve">

<value>Envoyer vos impressions</value>

<value>Envoyer un retour</value>

</data>

<data name="p1HelpHeading.Text" xml:space="preserve">

<value>Vous souhaitez aider BCU ?</value>

<value>Voulez-vous aider ?</value>

</data>

<data name="p1HelpDesc.Text" xml:space="preserve">

<value>Vous n'avez pas à être un programmeur pour aider ! Vous pouvez faire un don pour accélérer les mises à jour, ou traduire BCU dans votre langue maternelle. Toute aide est grandement appréciée, même petite !</value>

Expand All

@@ -157,12 +157,12 @@

<value>Problèmes sur GitHub</value>

</data>

<data name="checkBoxNeverShow.Text" xml:space="preserve">

<value>Ne plus jamais montrer cette fenêtre, jamais.</value>

<value>Ne plus jamais montrer cette fenêtre, jamais</value>

</data>

<data name="buttonClose.Text" xml:space="preserve">

<value>Fermer</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Envoyer vos impressions</value>

<value>Envoyer un retour</value>

</data>

</root>

14 changes: 7 additions & 7 deletions

14

source/BulkCrapUninstaller/Forms/Helpers/FeedbackBox.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -121,7 +121,7 @@

<value>Cảm ơn bạn đã sử dụng BCUninstaller!</value>

</data>

<data name="p1welcomeSubheading.Text" xml:space="preserve">

<value>Bạn đã thấy công cụ mã nguồn mở miễn phí này hữu ích chứ? Nếu có, hãy dành một phút để giúp chúng tôi nhé! Hãy giới thiệu nó với bạn bè của bạn, chia sẻ nó lên mạng xã hội, hay cung cấp phản hồi - mọi đóng góp nhỏ đều có giá trị!</value>

<value>Bạn đã thấy công cụ mã nguồn mở miễn phí này hữu ích chưa? Nếu có, hãy dành một phút để giúp chúng tôi nhé! Hãy giới thiệu nó với bạn bè của bạn, chia sẻ nó lên mạng xã hội, hay cung cấp phản hồi - mọi đóng góp nhỏ đều có giá trị!</value>

</data>

<data name="buttonSendFeedback2.Text" xml:space="preserve">

<value>Gửi phản hồi</value>

Expand All

@@ -133,10 +133,10 @@

<value>Chia sẻ lên Twitter</value>

</data>

<data name="p1FeedbackHeading.Text" xml:space="preserve">

<value>Có bất kỳ trục trặc gì hay thiếu tính năng nào không?</value>

<value>Có trục trặc hay là thiếu tính năng?</value>

</data>

<data name="p1FeedbackDesc.Text" xml:space="preserve">

<value>Nếu bạn gặp phải bất kỳ sự cố nào với BCU hoặc muốn đề xuất tính năng mới, vui lòng kiểm tra các liên kết này:</value>

<value>Nếu bạn gặp phải bất kỳ sự cố nào với BCU hoặc muốn đề xuất tính năng mới, vui lòng truy cập các liên kết này:</value>

</data>

<data name="buttonSubmitGithub.Text" xml:space="preserve">

<value>Gửi lên GitHub (Cần có tài khoản)</value>

Expand All

@@ -145,19 +145,19 @@

<value>Gửi phản hồi</value>

</data>

<data name="p1HelpHeading.Text" xml:space="preserve">

<value>Bạn có muốn góp sức không?</value>

<value>Bạn có muốn góp chút công không?</value>

</data>

<data name="p1HelpDesc.Text" xml:space="preserve">

<value>Bạn không cần phải là lập trình viên để góp sức! Bạn có thể quyên góp để đẩy nhanh quá trình cập nhật hoặc dịch BCU sang tiếng mẹ đẻ của bạn. Mọi sự giúp đỡ đều được trân trọng, dù là nhỏ nhất!</value>

<value>Bạn không cần phải là một lập trình viên thì mới có thể giúp đỡ! Bạn có thể quyên góp (donate) để tiến độ cập nhật nhanh hơn, hoặc dịch BCU sang ngôn ngữ mẹ đẻ của mình. Mọi sự giúp đỡ đều rất đáng trân quý, bất kể lớn nhỏ!</value>

</data>

<data name="buttonTranslate.Text" xml:space="preserve">

<value>Dịch BCU</value>

<value>Đóng góp dịch thuật</value>

</data>

<data name="buttonIssues.Text" xml:space="preserve">

<value>Báo cáo lỗi trên GitHub</value>

</data>

<data name="checkBoxNeverShow.Text" xml:space="preserve">

<value>Không bao giờ hiển thị lại cửa sổ này nữa</value>

<value>Không hiện lại cửa sổ này nữa</value>

</data>

<data name="buttonClose.Text" xml:space="preserve">

<value>Đóng</value>

Expand Down

56 changes: 28 additions & 28 deletions

56

source/BulkCrapUninstaller/Forms/Helpers/FeedbackWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -1,17 +1,17 @@

<?xml version="1.0" encoding="utf-8"?>

<root>

<!--

Microsoft ResX Schema

<!--

Microsoft ResX Schema

Version 2.0

The primary goals of this format is to allow a simple XML format

that is mostly human readable. The generation and parsing of the

various data types are done through the TypeConverter classes

The primary goals of this format is to allow a simple XML format

that is mostly human readable. The generation and parsing of the

various data types are done through the TypeConverter classes

associated with the data types.

Example:

... ado.net/XML headers & schema ...

<resheader name="resmimetype">text/microsoft-resx</resheader>

<resheader name="version">2.0</resheader>

Expand All

@@ -26,36 +26,36 @@

<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>

<comment>This is a comment</comment>

</data>

There are any number of "resheader" rows that contain simple

There are any number of "resheader" rows that contain simple

name/value pairs.

Each data row contains a name, and value. The row also contains a

type or mimetype. Type corresponds to a .NET class that support

text/value conversion through the TypeConverter architecture.

Classes that don't support this are serialized and stored with the

Each data row contains a name, and value. The row also contains a

type or mimetype. Type corresponds to a .NET class that support

text/value conversion through the TypeConverter architecture.

Classes that don't support this are serialized and stored with the

mimetype set.

The mimetype is used for serialized objects, and tells the

ResXResourceReader how to depersist the object. This is currently not

The mimetype is used for serialized objects, and tells the

ResXResourceReader how to depersist the object. This is currently not

extensible. For a given mimetype the value must be set accordingly:

Note - application/x-microsoft.net.object.binary.base64 is the format

that the ResXResourceWriter will generate, however the reader can

Note - application/x-microsoft.net.object.binary.base64 is the format

that the ResXResourceWriter will generate, however the reader can

read any of the formats listed below.

mimetype: application/x-microsoft.net.object.binary.base64

value : The object must be serialized with

value : The object must be serialized with

: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.soap.base64

value : The object must be serialized with

value : The object must be serialized with

: System.Runtime.Serialization.Formatters.Soap.SoapFormatter

: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.bytearray.base64

value : The object must be serialized into a byte array

value : The object must be serialized into a byte array

: using a System.ComponentModel.TypeConverter

: and then encoded with base64 encoding.

-->

Expand Down

Expand Up

@@ -147,6 +147,6 @@

<value>4, 3, 4, 3</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Soumettre une impression</value>

<value>Soumettre un retour</value>

</data>

</root>

2 changes: 1 addition & 1 deletion

2

source/BulkCrapUninstaller/Forms/Helpers/FeedbackWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,7 +118,7 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="loadingLabel.Text" xml:space="preserve">

<value>Đang nạp, vui lòng đợi...</value>

<value>Đang tải, vui lòng đợi...</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Gửi phản hồi</value>

Expand Down

18 changes: 9 additions & 9 deletions

18

source/BulkCrapUninstaller/Forms/Helpers/NewsPopup.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,33 +118,33 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label1.Text" xml:space="preserve">

<value>(Cliquez n'importe où pour fermer ce message)</value>

<value>(Cliquez n'importe où pour fermer cette fenêtre)</value>

</data>

<data name="linkLabel7.Text" xml:space="preserve">

<value>Don (Paypal, Bitcoin, Steam gift)</value>

<value>Donner (Paypal, Bitcoin, cadeaux Steam)</value>

</data>

<data name="linkLabel6.Text" xml:space="preserve">

<value>Envoyez vos impressions</value>

<value>Envoyez un retour / Contacter le développeur</value>

</data>

<data name="linkLabel5.Text" xml:space="preserve">

<value>Aide</value>

<value>Lire le fichier d'aide</value>

</data>

<data name="linkLabel4.Text" xml:space="preserve">

<value>Politique de confidentialité</value>

<value>Lire la politique de confidentialité</value>

</data>

<data name="linkLabel3.Text" xml:space="preserve">

<value>Licence du programme</value>

<value>Lire la licence</value>

</data>

<data name="linkLabel2.Text" xml:space="preserve">

<value>Voir le code source ou contribuer</value>

</data>

<data name="linkLabel1.Text" xml:space="preserve">

<value>Voir les notes de mise à jour</value>

<value>Voir les notes de mise à jour et le journal de modifications</value>

</data>

<data name="label3.Text" xml:space="preserve">

<value>Les donations m'aident à financer ce projet, dont les certificats de signature, l'hébergement et autres nécessités.</value>

<value>Les dons me permettent de rester intéressé par ce projet et de financer les certificats de signature de code, l'hébergement et autres dépenses nécessaires.</value>

</data>

<data name="checkBoxNeverShow.Text" xml:space="preserve">

<value>Ne plus jamais montrer cette fenêtre, jamais.</value>

<value>Ne plus jamais montrer cette fenêtre.</value>

</data>

</root>

14 changes: 7 additions & 7 deletions

14

source/BulkCrapUninstaller/Forms/Helpers/NewsPopup.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,22 +118,22 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label3.Text" xml:space="preserve">

<value>Các khoản tài trợ giúp tôi duy trì sự hứng thú với dự án này, đồng thời cũng để thanh toán chi phí cho chứng chỉ ký code, lưu trữ và các nhu cầu cần thiết khác.</value>

<value>Các khoản quyên góp giúp tôi duy trì niềm đam mê với dự án này, cũng như có chi phí để chi trả cho chứng chỉ ký mã nguồn (code signing certificate), dịch vụ lưu trữ (hosting) và các nhu cầu thiết yếu khác.</value>

</data>

<data name="linkLabel1.Text" xml:space="preserve">

<value>Xem các bản ghi chú phát hành và nhật ký thay đổi</value>

<value>Xem ghi chú phát hành và nhật ký thay đổi (changelog)</value>

</data>

<data name="linkLabel2.Text" xml:space="preserve">

<value>Xem mã nguồn hoặc đóng góp</value>

<value>Xem mã nguồn hoặc đóng góp cho dự án</value>

</data>

<data name="linkLabel3.Text" xml:space="preserve">

<value>Đọc giấy phép</value>

<value>Đọc điều khoản giấy phép</value>

</data>

<data name="linkLabel4.Text" xml:space="preserve">

<value>Đọc chính sách bảo mật</value>

</data>

<data name="linkLabel5.Text" xml:space="preserve">

<value>Đọc tệp tin trợ giúp</value>

<value>Đọc tài liệu hướng dẫn</value>

</data>

<data name="linkLabel6.Text" xml:space="preserve">

<value>Gửi phản hồi / Liên hệ với nhà phát triển</value>

Expand All

@@ -142,9 +142,9 @@

<value>Quyên góp (PayPal, Bitcoin, Steam gifts)</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>(Nhấp chuột vào bất cứ đâu để đóng hộp thoại này)</value>

<value>(Nhấp vào bất kỳ đâu để đóng hộp thoại này)</value>

</data>

<data name="checkBoxNeverShow.Text" xml:space="preserve">

<value>Không bao giờ hiển thị lại cửa sổ này nữa</value>

<value>Không hiện lại cửa sổ này nữa</value>

</data>

</root>

4 changes: 2 additions & 2 deletions

4

source/BulkCrapUninstaller/Forms/Helpers/PropertiesWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -134,13 +134,13 @@

<value>Tổng quan</value>

</data>

<data name="tabPageFileInfo.Text" xml:space="preserve">

<value>Thông tin trình gỡ cài đặt</value>

<value>Trình gỡ cài đặt</value>

</data>

<data name="tabPageRegistry.Text" xml:space="preserve">

<value>Registry</value>

</data>

<data name="tabPageCertificate.Text" xml:space="preserve">

<value>Giấy chứng chỉ</value>

<value>Chứng chỉ (Certificate)</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Thông tin chi tiết </value>

Expand Down

4 changes: 2 additions & 2 deletions

4

source/BulkCrapUninstaller/Forms/Helpers/RatingPopup.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -130,10 +130,10 @@

<value>Douteux | Mauvaise qualité</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Partager votre note avec d'autres</value>

<value>Partager votre note avec d'autres utilisateurs</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Note</value>

<value>Noter</value>

</data>

<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

<value>True</value>

Expand Down

4 changes: 2 additions & 2 deletions

4

source/BulkCrapUninstaller/Forms/Helpers/RatingPopup.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,13 +124,13 @@

<value>Hữu ích | Chất lượng tốt</value>

</data>

<data name="buttonNormal.Text" xml:space="preserve">

<value>Có vấn đề | Chất lượng kém</value>

<value>Đáng ngờ | Chất lượng kém</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Đánh giá</value>

</data>

<data name="buttonBad.Text" xml:space="preserve">

<value>Rác | Nguy hiểm tiềm tàng</value>

<value>Rác rưởi | Nguy hiểm tiềm tàng</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Chia sẻ đánh giá của bạn với người dùng khác</value>

Expand Down

6 changes: 3 additions & 3 deletions

6

source/BulkCrapUninstaller/Forms/Helpers/TargetWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,14 +124,14 @@

<value>Sélectionner en utilisant une fenêtre</value>

</data>

<data name="groupBox2.Text" xml:space="preserve">

<value>Sélectionner en utilisant le dossier d'installation ou les fichiers programmes</value>

<value>Sélectionner en utilisant le dossier d'installation ou les fichiers de programmes</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Note: assurez-vous que tous les fichiers sélectionnés sont dans le dossier d'installation de l'application.

<value>Note : assurez-vous que tous les fichiers sélectionnés sont dans le dossier d'installation de l'application.

Vous pouvez sélectionner un dossier qui contient de multiples applications pour les désinstaller toutes.</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Détruire une application</value>

<value>Cibler une application</value>

</data>

</root>

10 changes: 5 additions & 5 deletions

10

source/BulkCrapUninstaller/Forms/Helpers/TargetWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,20 +118,20 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="groupBox1.Text" xml:space="preserve">

<value>Chọn một cửa sổ</value>

<value>Chọn bằng cửa sổ ứng dụng</value>

</data>

<data name="groupBox2.Text" xml:space="preserve">

<value>Chọn thư mục cài đặt hoặc tệp tin ứng dụng</value>

<value>Chọn bằng thư mục cài đặt hoặc tệp tin chương trình</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>Tìm và gỡ cài đặt một ứng dụng dựa vào một trong các thông tin sau: cửa sổ, lối tắt hoặc vị trí cài đặt hoặc tệp .exe của ứng dụng đó.</value>

<value>Tìm và gỡ cài đặt một ứng dụng dựa trên: cửa sổ, lối tắt (shortcut), vị trí cài đặt hoặc tệp tin ".exe".</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Lưu ý: Hãy đảm bảo bất kỳ tệp bạn chọn phải nằm trong thư mục cài đặt ứng dụng.

<value>Hãy đảm bảo rằng bất kỳ tệp tin nào bạn chọn phải nằm bên trong thư mục cài đặt của ứng dụng.

Bạn có thể chọn một thư mục chứa nhiều ứng dụng để gỡ cài đặt tất cả chúng cùng một lúc.</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Nhắm mục tiêu ứng dụng</value>

<value>Định vị ứng dụng</value>

</data>

</root>

8 changes: 6 additions & 2 deletions

8

source/BulkCrapUninstaller/Forms/Windows/AboutBox.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -136,14 +136,15 @@

<value>Version du programme</value>

</data>

<data name="linkLabel5.Text" xml:space="preserve">

<value>NBug par Teoman Soygul</value>

<value>NBug</value>

<comment>I have translated it directly in Japanese, but it may not convey the meaning very well.</comment>

</data>

<data name="linkLabel3.Text" xml:space="preserve">

<value>Icônes Modern UI</value>

<comment>Si "Modern UI Icons" significa "Iconos de Interfaz de Usuario Moderno" la traducción será "Iconos Modernos de Interface de Usuario"</comment>

</data>

<data name="linkLabel2.Text" xml:space="preserve">

<value>PortableSettingsProvider par CodeChimp</value>

<value>PortableSettingsProvider</value>

<comment>1</comment>

</data>

<data name="groupBox2.Text" xml:space="preserve">

Expand All

@@ -169,6 +170,7 @@

</data>

<data name="linkLabel6.Text" xml:space="preserve">

<value>DotNetZip</value>

<comment>jp translator: what's this?</comment>

</data>

<data name="labelName.Text" xml:space="preserve">

<value>BCUninstaller (Bulk Crap Uninstaller)</value>

Expand All

@@ -182,8 +184,10 @@

</data>

<data name="linkLabel8.Text" xml:space="preserve">

<value>TestStack.White</value>

<comment>I have translated it directly in Japanese, but it may not convey the meaning very well.</comment>

</data>

<data name="linkLabel9.Text" xml:space="preserve">

<value>es.exe (CLI pour Everything)</value>

<comment>Almost all the translations here were in English</comment>

</data>

</root>

9 changes: 5 additions & 4 deletions

9

source/BulkCrapUninstaller/Forms/Windows/AboutBox.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -130,13 +130,13 @@

<value>Tác giả</value>

</data>

<data name="labelis64.Text" xml:space="preserve">

<value>Phiên bản 64bit: </value>

<value>Bản 64bit: </value>

</data>

<data name="labelPortable.Text" xml:space="preserve">

<value>Được cài bằng trình cài đặt: </value>

<value>Trạng thái cài đặt:</value>

</data>

<data name="labelArchitecture.Text" xml:space="preserve">

<value>Cấu trúc: </value>

<value>Kiến trúc phần cứng:</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Phiên bản ứng dụng</value>

Expand All

@@ -147,6 +147,7 @@

</data>

<data name="linkLabel9.Text" xml:space="preserve">

<value>es.exe (CLI for Everything)</value>

<comment>Almost all the translations here were in English</comment>

</data>

<data name="linkLabel3.Text" xml:space="preserve">

<value>Modern UI Icons</value>

Expand All

@@ -172,7 +173,7 @@

<comment>I have translated it directly in Japanese, but it may not convey the meaning very well.</comment>

</data>

<data name="groupBox2.Text" xml:space="preserve">

<value>Thành phần được sử dụng</value>

<value>Thư viện và tài nguyên sử dụng</value>

</data>

<data name="button1.Text" xml:space="preserve">

<value>Đóng</value>

Expand Down

16 changes: 8 additions & 8 deletions

16

source/BulkCrapUninstaller/Forms/Windows/JunkRemoveWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,28 +118,28 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="detailsToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Chi tiết</value>

<value>Chi tiết (&amp;D)</value>

</data>

<data name="copyToClipboardToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Sao chép vào bảng nhớ tạm</value>

<value>Sao chép vào bảng nhớ tạm (&amp;C)</value>

</data>

<data name="openToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Mở</value>

<value>Mở (&amp;O)</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Dọn dẹp những thứ còn sót lại</value>

<value>Dọn dẹp tàn dư</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Danh sách các tệp tin và/hoặc mã registry còn lại sau khi gỡ cài đặt</value>

<value>Danh sách các tệp tin và/hoặc các khóa registry còn sót lại sau khi gỡ cài đặt</value>

</data>

<data name="headerConfInfo.Text" xml:space="preserve">

<value>Việc phát hiện những mục dư thừa này là một quá trình phức tạp và có thể mắc sai sót. Do đó, tất cả các mục đều được đánh giá mức độ tin cậy và quyết định cuối cùng thuộc về bạn. Những mục có mức độ tin cậy tốt và rất tốt thường an toàn để xóa, nhưng bạn vẫn nên kiểm tra lại chúng.</value>

<value>Việc phát hiện các tàn dư này là một quá trình phức tạp và có thể xảy ra sai sót. Do đó, tất cả các mục đều được gắn một mức độ tin cậy và quyết định cuối cùng thuộc về bạn. Các mục có độ tin cậy tốt và rất tốt thường an toàn để xóa nhưng vẫn nên kiểm tra kỹ lại chúng.</value>

</data>

<data name="headerConfTitle.Text" xml:space="preserve">

<value>Mức độ tin cậy</value>

</data>

<data name="headerIntro.Text" xml:space="preserve">

<value>Các mục sau đây dường như bị trình gỡ cài đặt của chúng bỏ lại. Một số trình gỡ cài đặt có thể không xóa được một số mục, và có thể dẫn đến chiếm dung lượng ổ đĩa. Tuy nhiên, hầu hết các mục này có thể là cài đặt của ứng dụng, thường chiếm rất ít dung lượng và vô hại.</value>

<value>Các mục sau đây dường như bị trình gỡ cài đặt của chúng bỏ lại. Một số trình gỡ cài đặt có thể không xóa sạch hoàn toàn, dẫn đến việc lãng phí dung lượng ổ cứng. Tuy nhiên, hầu hết các mục này có khả năng chỉ là các tệp cài đặt của ứng dụng, thường chiếm rất ít dung lượng và vô hại.</value>

</data>

<data name="olvColumnUninstallerName.Text" xml:space="preserve">

<value>Tên trình gỡ cài đặt</value>

Expand All

@@ -163,7 +163,7 @@

<value>Huỷ</value>

</data>

<data name="exportDialog.Title" xml:space="preserve">

<value>Xuất danh sách các mục còn sót lại</value>

<value>Xuất danh sách tệp tàn dư</value>

<comment>leftover=rimanenti</comment>

</data>

<data name="exportDialog.Filter" xml:space="preserve">

Expand Down

82 changes: 52 additions & 30 deletions

82

source/BulkCrapUninstaller/Forms/Windows/MainWindow.Designer.cs

Show comments

View file

Edit file

Delete file

Load diff

85 changes: 53 additions & 32 deletions

85

source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -354,8 +354,21 @@ private void DisposeListPostProcessor(object x, FormClosedEventArgs y)

_uninstallerListPostProcesser.Dispose();

}

private static bool _certificateColumnWasEnabled = true;

private void OnTestCertificatesChanged(object x, SettingChangedEventArgs<bool> y)

{

if (!y.NewValue)

{

_certificateColumnWasEnabled = olvColumnCertificate.IsVisible;

olvColumnCertificate.IsVisible = false;

uninstallerObjectListView.RebuildColumns();

}

else

{

olvColumnCertificate.IsVisible = _certificateColumnWasEnabled;

uninstallerObjectListView.RebuildColumns();

}

if (!_listView.FirstRefreshCompleted)

return;

if (y.NewValue) _uninstallerListPostProcesser.StartProcessingThread(_listView.FilteredUninstallers);

Expand Down

Expand Up

@@ -1419,7 +1432,7 @@ private void listView_ListRefreshIsRunningChanged(object sender,

_anySysComponents = _listView.AllUninstallers.Any(x => x.SystemComponent);

_anyUpdates = _listView.AllUninstallers.Any(x => x.IsUpdate);

_anyInvalid = _listView.AllUninstallers.Any(x => !x.IsValid);

_anyTweaks = _listView.AllUninstallers.Any(x => x.RatingId != null && x.RatingId.StartsWith("tweak", StringComparison.OrdinalIgnoreCase));

_anyTweaks = _listView.AllUninstallers.Any(x => x.IsScriptTweak);

propertiesSidebar.StoreAppsEnabled = _anyStoreApps;

propertiesSidebar.WinFeaturesEnabled = _anyWinFeatures;

Expand All

@@ -1435,13 +1448,12 @@ private void listView_ListRefreshIsRunningChanged(object sender,

{

_setMan.LoadSorting();

var args = Environment.GetCommandLineArgs();

var dir = args.Skip(1).FirstOrDefault();

if (!string.IsNullOrEmpty(dir))

{

try

{

advancedFilters1.LoadUninstallList(dir);

var dir = StartupArgumentTools.GetStartupUninstallListPath(Environment.GetCommandLineArgs());

if (!string.IsNullOrEmpty(dir))

{

try

{

advancedFilters1.LoadUninstallList(dir);

}

catch (Exception ex)

{ PremadeDialogs.GenericError(ex); }

Expand Down

Expand Up

@@ -1608,11 +1620,18 @@ private void runToolStripMenuItem_DropDownItemClicked(object sender, ToolStripIt

PremadeDialogs.StartProcessSafely(e.ClickedItem.Text);

}

private void viewUpdatesToolStripMenuItem_Click(object sender, EventArgs e)

{

_setMan.Selected.Settings.FilterShowUpdates = true;

filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsUpdate));

}

private void viewUpdatesToolStripMenuItem_Click(object sender, EventArgs e)

{

_setMan.Selected.Settings.FilterShowUpdates = true;

filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsUpdate));

}

private void viewInvalidToolStripMenuItem_Click(object sender, EventArgs e)

{

everythingToolStripMenuItem_Click(sender, e);

_setMan.Selected.Settings.AdvancedTestInvalid = true;

filterEditor1.Search(false.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsValid));

}

private void filterEditor1_FocusSearchTarget(object sender, EventArgs e)

{

Expand Down

Expand Up

@@ -1682,11 +1701,12 @@ private void AddSelectedAsAdvancedFilters(bool exclude)

advancedFilters1.RepopulateList();

}

private void viewUnregisteredToolStripMenuItem_Click(object sender, EventArgs e)

{

_setMan.Selected.Settings.AdvancedDisplayOrphans = true;

filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsOrphaned));

}

private void viewUnregisteredToolStripMenuItem_Click(object sender, EventArgs e)

{

everythingToolStripMenuItem_Click(sender, e);

_setMan.Selected.Settings.AdvancedDisplayOrphans = true;

filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsOrphaned));

}

private void viewToolStripMenuItem_DropDownOpening(object sender, EventArgs e)

{

Expand Down

Expand Up

@@ -1762,15 +1782,16 @@ private void troubleshootUninstallProblemsToolStripMenuItem_Click(object sender,

PremadeDialogs.StartProcessSafely(toolPath);

}

private void filteringToolStripMenuItem_DropDownOpening(object sender, EventArgs e)

{

var isSimpleFiltering = !IsAdvancedFilteringEnabled;

viewUnregisteredToolStripMenuItem.Enabled = isSimpleFiltering;

viewUpdatesToolStripMenuItem.Enabled = isSimpleFiltering;

viewWindowsStoreAppsToolStripMenuItem.Enabled = isSimpleFiltering;

viewWindowsFeaturesToolStripMenuItem.Enabled = isSimpleFiltering;

}

private void filteringToolStripMenuItem_DropDownOpening(object sender, EventArgs e)

{

var isSimpleFiltering = !IsAdvancedFilteringEnabled;

viewUnregisteredToolStripMenuItem.Enabled = isSimpleFiltering;

viewUpdatesToolStripMenuItem.Enabled = isSimpleFiltering;

viewInvalidToolStripMenuItem.Enabled = isSimpleFiltering;

viewWindowsStoreAppsToolStripMenuItem.Enabled = isSimpleFiltering;

viewWindowsFeaturesToolStripMenuItem.Enabled = isSimpleFiltering;

}

private void automaticallyStartedToolStripMenuItem_Click(object sender, EventArgs e)

{

Expand Down

Expand Up

@@ -1856,11 +1877,11 @@ private void onlyWebBrowsersToolStripMenuItem_Click(object sender, EventArgs e)

s.FilterShowTweaks = true;

}

private void viewTweaksToolStripMenuItem_Click(object sender, EventArgs e)

{

everythingToolStripMenuItem_Click(sender, e);

filterEditor1.Search(@"\Resources\Scripts\Tweak", ComparisonMethod.Contains, nameof(ApplicationUninstallerEntry.UninstallString));

}

private void viewTweaksToolStripMenuItem_Click(object sender, EventArgs e)

{

everythingToolStripMenuItem_Click(sender, e);

filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsScriptTweak));

}

private void createRestorePointToolStripMenuItem_Click(object sender, EventArgs e)

{

Expand Down

37 changes: 20 additions & 17 deletions

37

source/BulkCrapUninstaller/Forms/Windows/MainWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -232,7 +232,7 @@

<value>Ouvrir dans l'&amp;explorateur...</value>

</data>

<data name="openWebPageContextMenuStripItem.Text" xml:space="preserve">

<value>Ouvrir la page &amp;web</value>

<value>Ouvrir la Page &amp;Web</value>

</data>

<data name="lookUpOnlineToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Rechercher en ligne</value>

Expand All

@@ -247,10 +247,10 @@

<value>&amp;Recharger les désinstalleurs</value>

</data>

<data name="loadUninstallerListToolStripMenuItem.Text" xml:space="preserve">

<value>Charger la/les &amp;listes de désinstallation...</value>

<value>&amp;Ouvrir la Liste de Désinstallation...</value>

</data>

<data name="exportSelectedToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Exporter la sélection...</value>

<value>&amp;Exporter les données des désinstalleurs sélectionnés...</value>

</data>

<data name="exitToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Quitter</value>

Expand All

@@ -259,16 +259,16 @@

<value>&amp;Fichier</value>

</data>

<data name="showColorLegendToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer la légende des couleurs</value>

<value>Afficher la légende des couleurs</value>

</data>

<data name="displayToolbarToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer la barre d'ou&amp;tils</value>

<value>Afficher la barre d'ou&amp;tils</value>

</data>

<data name="displayStatusbarToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer la &amp;barre d'état</value>

<value>Afficher la &amp;barre d'état</value>

</data>

<data name="displaySettingsToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer la barre latérale des réglage&amp;s</value>

<value>Afficher la barre latérale des réglage&amp;s</value>

</data>

<data name="useSystemThemeToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Utiliser le thème système</value>

Expand Down

Expand Up

@@ -316,13 +316,13 @@

<value>Ouvrir dans l'&amp;explorateur...</value>

</data>

<data name="toolStripMenuItem14.Text" xml:space="preserve">

<value>Ouvrir la page &amp;web</value>

<value>Ouvrir la Page &amp;Web</value>

</data>

<data name="onlineSearchToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Rechercher en ligne</value>

</data>

<data name="propertiesToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer les &amp;propriétés</value>

<value>Afficher les &amp;propriétés</value>

</data>

<data name="basicOperationsToolStripMenuItem.Text" xml:space="preserve">

<value>Opérations &amp;basiques</value>

Expand Down

Expand Up

@@ -358,7 +358,7 @@

<value>Opérations a&amp;vancées</value>

</data>

<data name="cleanUpProgramFilesToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Nettoyer Program Files</value>

<value>&amp;Nettoyer les dossiers "Program Files"...</value>

</data>

<data name="openProgramsAndFeaturesToolStripMenuItem.Text" xml:space="preserve">

<value>Ouvrir "&amp;Programmes et Fonctionnalités"</value>

Expand All

@@ -379,7 +379,7 @@

<value>Vérifier les mises à jour</value>

</data>

<data name="submitFeedbackToolStripMenuItem.Text" xml:space="preserve">

<value>Soumettre une réaction...</value>

<value>Soumettre un retour...</value>

</data>

<data name="resetSettingsToolStripMenuItem.Text" xml:space="preserve">

<value>Réinitialiser les réglages</value>

Expand Down

Expand Up

@@ -409,10 +409,10 @@

<value>Réglages</value>

</data>

<data name="toolStripButtonSelAll.Text" xml:space="preserve">

<value>Sélectionner tous les éléments</value>

<value>Sélectionner tout</value>

</data>

<data name="toolStripButtonSelNone.Text" xml:space="preserve">

<value>Désélectionner tous les éléments</value>

<value>Désélectionner tout</value>

</data>

<data name="toolStripButtonSelInv.Text" xml:space="preserve">

<value>Inverser la sélection</value>

Expand All

@@ -439,7 +439,7 @@

<value>Noter...</value>

</data>

<data name="rateToolStripMenuItem1.Text" xml:space="preserve">

<value>Passez en revue...</value>

<value>Noter...</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Bulk Crap Uninstaller</value>

Expand All

@@ -466,7 +466,7 @@

<value>Google</value>

</data>

<data name="toolStripMenuItem16.Text" xml:space="preserve">

<value>AlternativeTo</value>

<value>AlternativeTo.net</value>

</data>

<data name="viewUpdatesToolStripMenuItem.Text" xml:space="preserve">

<value>Voir les Mises à jour</value>

Expand Down

Expand Up

@@ -523,7 +523,7 @@

<value>Inclure</value>

</data>

<data name="showTreemapToolStripMenuItem.Text" xml:space="preserve">

<value>Montrer la &amp;carte en arbre</value>

<value>Afficher la &amp;carte arborescente</value>

</data>

<data name="viewUnregisteredToolStripMenuItem.Text" xml:space="preserve">

<value>Voir les Non Enregistrés</value>

Expand Down

Expand Up

@@ -562,7 +562,7 @@

<value>Filtres &amp;Rapides</value>

</data>

<data name="troubleshootUninstallProblemsToolStripMenuItem.Text" xml:space="preserve">

<value>Résolutions de problèmes de désinstallation...</value>

<value>Résoudre les problèmes de désinstallation...</value>

</data>

<data name="startDiskCleanupToolStripMenuItem.Text" xml:space="preserve">

<value>Lancer le Nettoyage de disque</value>

Expand All

@@ -588,4 +588,7 @@

<data name="takeOwnershipToolStripMenuItem.Text" xml:space="preserve">

<value>Devenir propriétaire</value>

</data>

<data name="autosizeAllColumnsToolStripMenuItem.Text" xml:space="preserve">

<value>Redimensionner auto toutes les colonnes</value>

</data>

</root>

70 changes: 53 additions & 17 deletions

70

source/BulkCrapUninstaller/Forms/Windows/MainWindow.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -199,6 +199,12 @@

<data name="olvColumnPublisher.Width" type="System.Int32, mscorlib">

<value>160</value>

</data>

<data name="olvColumnCertificate.Text" xml:space="preserve">

<value>Certificate</value>

</data>

<data name="olvColumnCertificate.Width" type="System.Int32, mscorlib">

<value>70</value>

</data>

<data name="olvColumnRating.Text" xml:space="preserve">

<value>User rating</value>

</data>

Expand Down

Expand Up

@@ -265,6 +271,12 @@

<data name="olvColumnSystemComponent.Width" type="System.Int32, mscorlib">

<value>40</value>

</data>

<data name="olvColumnIntegrity.Text" xml:space="preserve">

<value>Integrity</value>

</data>

<data name="olvColumnIntegrity.Width" type="System.Int32, mscorlib">

<value>85</value>

</data>

<data name="olvColumnProtected.Text" xml:space="preserve">

<value>Protected</value>

</data>

Expand Down

Expand Up

@@ -299,7 +311,7 @@

<value>4, 3, 4, 3</value>

</data>

<data name="uninstallerObjectListView.Size" type="System.Drawing.Size, System.Drawing">

<value>377, 485</value>

<value>377, 482</value>

</data>

<data name="uninstallerObjectListView.TabIndex" type="System.Int32, mscorlib">

<value>0</value>

Expand All

@@ -326,7 +338,7 @@

<value>4, 3, 4, 3</value>

</data>

<data name="listViewPanel.Size" type="System.Drawing.Size, System.Drawing">

<value>379, 487</value>

<value>379, 484</value>

</data>

<data name="listViewPanel.TabIndex" type="System.Int32, mscorlib">

<value>6</value>

Expand Down

Expand Up

@@ -365,7 +377,7 @@

<value>5, 3, 5, 3</value>

</data>

<data name="treeMap1.Size" type="System.Drawing.Size, System.Drawing">

<value>379, 56</value>

<value>379, 59</value>

</data>

<data name="treeMap1.TabIndex" type="System.Int32, mscorlib">

<value>1</value>

Expand Down

Expand Up

@@ -398,7 +410,7 @@

<value>379, 548</value>

</data>

<data name="splitContainerListAndMap.SplitterDistance" type="System.Int32, mscorlib">

<value>487</value>

<value>484</value>

</data>

<data name="splitContainerListAndMap.SplitterWidth" type="System.Int32, mscorlib">

<value>5</value>

Expand Down

Expand Up

@@ -1489,12 +1501,18 @@

<data name="viewUpdatesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">

<value>213, 22</value>

</data>

<data name="viewUpdatesToolStripMenuItem.Text" xml:space="preserve">

<value>View Updates</value>

</data>

<data name="viewWindowsFeaturesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">

<value>213, 22</value>

</data>

<data name="viewUpdatesToolStripMenuItem.Text" xml:space="preserve">

<value>View Updates</value>

</data>

<data name="viewInvalidToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">

<value>213, 22</value>

</data>

<data name="viewInvalidToolStripMenuItem.Text" xml:space="preserve">

<value>View Invalid</value>

</data>

<data name="viewWindowsFeaturesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">

<value>213, 22</value>

</data>

<data name="viewWindowsFeaturesToolStripMenuItem.Text" xml:space="preserve">

<value>View Windows Features</value>

</data>

Expand Down

Expand Up

@@ -2192,6 +2210,12 @@

<data name="&gt;&gt;olvColumnPublisher.Type" xml:space="preserve">

<value>BrightIdeasSoftware.OLVColumn, ObjectListView, Culture=neutral, PublicKeyToken=null</value>

</data>

<data name="&gt;&gt;olvColumnCertificate.Name" xml:space="preserve">

<value>olvColumnCertificate</value>

</data>

<data name="&gt;&gt;olvColumnCertificate.Type" xml:space="preserve">

<value>BrightIdeasSoftware.OLVColumn, ObjectListView, Culture=neutral, PublicKeyToken=null</value>

</data>

<data name="&gt;&gt;olvColumnRating.Name" xml:space="preserve">

<value>olvColumnRating</value>

</data>

Expand Down

Expand Up

@@ -2264,6 +2288,12 @@

<data name="&gt;&gt;olvColumnSystemComponent.Type" xml:space="preserve">

<value>BrightIdeasSoftware.OLVColumn, ObjectListView, Culture=neutral, PublicKeyToken=null</value>

</data>

<data name="&gt;&gt;olvColumnIntegrity.Name" xml:space="preserve">

<value>olvColumnIntegrity</value>

</data>

<data name="&gt;&gt;olvColumnIntegrity.Type" xml:space="preserve">

<value>BrightIdeasSoftware.OLVColumn, ObjectListView, Culture=neutral, PublicKeyToken=null</value>

</data>

<data name="&gt;&gt;olvColumnProtected.Name" xml:space="preserve">

<value>olvColumnProtected</value>

</data>

Expand Down

Expand Up

@@ -2843,12 +2873,18 @@

<data name="&gt;&gt;viewUpdatesToolStripMenuItem.Name" xml:space="preserve">

<value>viewUpdatesToolStripMenuItem</value>

</data>

<data name="&gt;&gt;viewUpdatesToolStripMenuItem.Type" xml:space="preserve">

<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</data>

<data name="&gt;&gt;viewWindowsFeaturesToolStripMenuItem.Name" xml:space="preserve">

<value>viewWindowsFeaturesToolStripMenuItem</value>

</data>

<data name="&gt;&gt;viewUpdatesToolStripMenuItem.Type" xml:space="preserve">

<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</data>

<data name="&gt;&gt;viewInvalidToolStripMenuItem.Name" xml:space="preserve">

<value>viewInvalidToolStripMenuItem</value>

</data>

<data name="&gt;&gt;viewInvalidToolStripMenuItem.Type" xml:space="preserve">

<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</data>

<data name="&gt;&gt;viewWindowsFeaturesToolStripMenuItem.Name" xml:space="preserve">

<value>viewWindowsFeaturesToolStripMenuItem</value>

</data>

<data name="&gt;&gt;viewWindowsFeaturesToolStripMenuItem.Type" xml:space="preserve">

<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</data>

Expand Down

Expand Up

@@ -3344,4 +3380,4 @@

<metadata name="usageTracker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

<value>17, 60</value>

</metadata>

</root>

</root>

191 changes: 97 additions & 94 deletions

191

source/BulkCrapUninstaller/Forms/Windows/MainWindow.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions

6

source/BulkCrapUninstaller/Forms/Windows/SettingsWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -175,7 +175,7 @@ BCU attendra la fin de la commande courante avant d'exécuter la suivante.</valu

<value>Divers</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Réglages de BCUninstaller</value>

<value>Réglages de Bulk Crap Uninstaller</value>

</data>

<data name="tabPageFolders.Text" xml:space="preserve">

<value>Dossiers</value>

Expand All

@@ -200,7 +200,7 @@ Utilisez des chemins complets de dossiers, un chemin par ligne. Les chemins inva

<value>Toujours montrer les résidus avec faible confiance</value>

</data>

<data name="checkBoxNeverFeedback.Text" xml:space="preserve">

<value>Ne jamais demander les impressions ou de l'aide</value>

<value>Ne jamais demander les retours ou de l'aide</value>

</data>

<data name="checkBoxScanSteam.Text" xml:space="preserve">

<value>Steam</value>

Expand Down

Expand Up

@@ -251,7 +251,7 @@ Utilisez des chemins complets de dossiers, un chemin par ligne. Les chemins inva

<value>Sauvegarder avant la suppression des résidus</value>

</data>

<data name="groupBoxLanguage.Text" xml:space="preserve">

<value>Langue</value>

<value>Langage</value>

</data>

<data name="tabPageInterface.Text" xml:space="preserve">

<value>Interface</value>

Expand Down

68 changes: 34 additions & 34 deletions

68

source/BulkCrapUninstaller/Forms/Windows/SettingsWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,17 +118,17 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label5.Text" xml:space="preserve">

<value>Câu lệnh trước khi bắt đầu gỡ cài đặt</value>

<value>Câu lệnh thực thi trước khi bắt đầu gỡ cài đặt</value>

</data>

<data name="label6.Text" xml:space="preserve">

<value>Câu lệnh sau khi gỡ cài đặt kết thúc</value>

<value>Câu lệnh thực thi sau khi bắt đầu gỡ cài đặt</value>

</data>

<data name="checkBoxColorblind.Text" xml:space="preserve">

<value>Chế độ mù màu</value>

<value>Chế độ cho người mù màu</value>

<comment>Switches colors to be better for color-blind people</comment>

</data>

<data name="checkBoxDpiaware.Text" xml:space="preserve">

<value>Bật tính năng tỷ lệ giao diện hỗ trợ DPI</value>

<value>Bật tính năng DPI-aware</value>

</data>

<data name="label3.Text" xml:space="preserve">

<value>Nhấp đúp vào danh sách ứng dụng</value>

Expand All

@@ -137,13 +137,13 @@

<value>Lặt vặt</value>

</data>

<data name="checkBoxAutoLoad.Text" xml:space="preserve">

<value>Tự động nạp danh sách bộ lọc gỡ cài đặt có tên "Default.bcul" khi khởi động</value>

<value>Tự động tải Danh sách bộ lọc gỡ cài đặt "Default.bcul" khi khởi động</value>

</data>

<data name="checkBoxRatings.Text" xml:space="preserve">

<value>Hiển thị xếp hạng người dùng cho ứng dụng</value>

<value>Bật tính năng hiển thị đánh giá ứng dụng từ người dùng</value>

</data>

<data name="checkBoxUpdateSearch.Text" xml:space="preserve">

<value>Kiểm tra các bản cập nhật khi khởi động</value>

<value>Tự động kiểm tra cập nhật khi khởi động</value>

</data>

<data name="checkBoxSendStats.Text" xml:space="preserve">

<value>Gửi số liệu thống kê sử dụng ẩn danh</value>

Expand All

@@ -152,54 +152,54 @@

<value>Ngôn ngữ ứng dụng:</value>

</data>

<data name="label10.Text" xml:space="preserve">

<value>Ứng dụng phải được khởi động lại để thay đổi ngôn ngữ có hiệu lực.</value>

<value>Ứng dụng sẽ phải khởi động lại để thay đổi ngôn ngữ có hiệu lực.</value>

</data>

<data name="radioButtonBackupAsk.Text" xml:space="preserve">

<value>Luôn yêu cầu tạo</value>

<value>Luôn hỏi trước khi tạo</value>

</data>

<data name="radioButtonBackupNever.Text" xml:space="preserve">

<value>Không bao giờ yêu cầu tạo</value>

<value>Không bao giờ hỏi</value>

</data>

<data name="radioButtonBackupAuto.Text" xml:space="preserve">

<value>Tự động tạo trong thư mục:</value>

</data>

<data name="groupBoxBackup.Text" xml:space="preserve">

<value>Sao lưu trước khi xóa phần còn sót lại</value>

<value>Sao lưu trước khi dọn dẹp tàn dư</value>

</data>

<data name="checkBoxShowAllBadJunk.Text" xml:space="preserve">

<value>Luôn hiển thị nội dung rác với độ tin cậy thấp</value>

<value>Luôn hiển thị dữ liệu rác có độ tin cậy thấp</value>

</data>

<data name="checkBoxLoud.Text" xml:space="preserve">

<value>Yêu cầu xóa trình gỡ cài đặt gốc khỏi tác vụ âm thầm</value>

<value>Hỏi trước khi xóa các trình gỡ có giao diện (Loud) khỏi tác vụ yên lặng</value>

</data>

<data name="checkBoxNeverFeedback.Text" xml:space="preserve">

<value>Không bao giờ yêu cầu phản hồi hoặc trợ giúp</value>

<value>Không bao giờ hỏi xin phản hồi hoặc trợ giúp</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>Tìm kiếm rác sau khi gỡ cài đặt</value>

<value>Tìm kiếm dữ liệu rác sau khi gỡ cài đặt</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Tạo điểm khôi phục trước khi gỡ cài đặt</value>

<value>Tạo điểm khôi phục (Restore point) trước khi gỡ cài đặt</value>

</data>

<data name="groupBoxMessages.Text" xml:space="preserve">

<value>Hộp tin nhắn</value>

<value>Hộp thoại thông báo</value>

</data>

<data name="checkBoxEnableExternal.Text" xml:space="preserve">

<value>Cho phép thực thi các ứng dụng bên ngoài</value>

</data>

<data name="label7.Text" xml:space="preserve">

<value>Bạn có thể chỉ định các câu lệnh sẽ thực thi trước và sau khi gỡ cài đặt. Mỗi dòng tương ứng với một lệnh và được thực thi như thể sử dụng hộp thoại "Khởi chạy...".

<value>Bạn có thể chỉ định các lệnh sẽ chạy trước và sau khi gỡ cài đặt. Mỗi dòng tương đương với một lệnh và sẽ được thực thi tương tự như khi bạn dùng hộp thoại "Run..." của Windows.

BCU sẽ đợi cho đến khi lệnh hiện đang thực thi hoàn tất trước khi thực thi lệnh tiếp theo.</value>

BCU sẽ đợi cho đến khi lệnh hiện tại chạy xong rồi mới thực hiện lệnh tiếp theo.</value>

</data>

<data name="groupBoxExternal.Text" xml:space="preserve">

<value>Ứng dụng bên ngoài</value>

</data>

<data name="button2.Text" xml:space="preserve">

<value>Đó&amp;ng</value>

<value>Đóng (&amp;C)</value>

</data>

<data name="tabPageGeneral.Text" xml:space="preserve">

<value>Chung</value>

<value>Tổng quan</value>

</data>

<data name="groupBoxLanguage.Text" xml:space="preserve">

<value>Ngôn ngữ</value>

Expand All

@@ -211,13 +211,13 @@ BCU sẽ đợi cho đến khi lệnh hiện đang thực thi hoàn tất trư

<value>Gỡ cài đặt</value>

</data>

<data name="labelWinUpdateInfo.Text" xml:space="preserve">

<value>Phát hiện Windows Updates sử dụng WUA, vốn khá chậm. Quá trình này có thể mất vài phút để hoàn tất.</value>

<value>Việc phát hiện các bản cập nhật Windows sử dụng dịch vụ WUA nên khá chậm. Quá trình này có thể mất vài phút để hoàn thành.</value>

</data>

<data name="checkBoxScanWinUpdates.Text" xml:space="preserve">

<value>Windows Update</value>

</data>

<data name="labelWinFeatureInfo.Text" xml:space="preserve">

<value>Phát hiện Windows Features sử dụng WMI và trên một số hệ thống quá trình này có thể chậm hoặc thậm chí thất bại (thường là dấu hiệu cho thấy hệ thống bị lỗi).</value>

<value>Việc phát hiện các Tính năng Windows (Windows Features) sử dụng dịch vụ WMI nên có thể chạy chậm hoặc thậm chí bị lỗi trên một số hệ thống (thường là dấu hiệu hệ thống đã bị lỗi/hỏng tệp).</value>

</data>

<data name="checkBoxScanWinFeatures.Text" xml:space="preserve">

<value>Windows Features</value>

Expand All

@@ -238,39 +238,39 @@ BCU sẽ đợi cho đến khi lệnh hiện đang thực thi hoàn tất trư

<value>Chocolatey</value>

</data>

<data name="groupBoxAppStores.Text" xml:space="preserve">

<value>Kho ứng dụng để quét</value>

<value>Các chợ ứng dụng cần quét</value>

</data>

<data name="checkBoxScanRegistry.Text" xml:space="preserve">

<value>Registry (khuyến khích bật)</value>

<value>Registry (khuyến nghị nên bật)</value>

</data>

<data name="checkBoxScanDrives.Text" xml:space="preserve">

<value>Ổ đĩa (phát hiện các ứng dụng chưa đăng ký)</value>

<value>Ổ đĩa (Để phát hiện các ứng dụng không có thông tin đăng ký)</value>

</data>

<data name="checkBoxPreDefined.Text" xml:space="preserve">

<value>Dựa trên các quy tắc được xác định trước</value>

<value>Dựa trên các quy tắc đã định nghĩa trước</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Tìm kiếm ứng dụng trong...</value>

</data>

<data name="tabPageDetection.Text" xml:space="preserve">

<value>Phát hiện</value>

<value>Quét &amp; Phát hiện</value>

</data>

<data name="tabPageExternal.Text" xml:space="preserve">

<value>Công cụ bên ngoài</value>

</data>

<data name="checkBoxRemovable.Text" xml:space="preserve">

<value>Quét các ổ đĩa di động</value>

<value>Quét các ổ đĩa di động (USB, ổ cứng ngoài)</value>

<comment>Scan pendrives, USB hard drives, SD Cards, etc.</comment>

</data>

<data name="checkBoxAutoInstallFolderDetect.Text" xml:space="preserve">

<value>Cố gắng tự động phát hiện các thư mục cài đặt tùy chỉnh</value>

</data>

<data name="labelProgramFolders.Text" xml:space="preserve">

<value>Bạn có thể thiết lập các thư mục cài đặt ứng dụng tùy chỉnh (ví dụ: D:\Applications). Những thư mục đó sẽ được BCU sẽ sử dụng các thư mục này để tìm kiếm các tệp sót lại sau khi gỡ cài đặt, các ứng dụng chưa đăng ký và một vài thứ khác. Mặc dù không bắt buộc, nhưng việc cung cấp danh sách các thư mục này sẽ giúp BCU hoạt động hiệu quả hơn.

<value>Bạn có thể chỉ định các thư mục tùy chỉnh mà bạn thường cài đặt ứng dụng vào đó (ví dụ: D:\Applications). BCU sẽ sử dụng các thư mục này để tìm kiếm tàn dư gỡ cài đặt, các ứng dụng không đăng ký và một số thứ khác. Mặc dù không bắt buộc, danh sách các thư mục này sẽ giúp BCU hoạt động hiệu quả hơn.

Các thư mục mặc định của Windows luôn được quét, bạn không cần đưa chúng vào danh sách này.

Các thư mục mặc định của Windows luôn được tự động quét, bạn không cần thêm chúng vào danh sách này.

Hãy sử dụng đường dẫn thư mục đầy đủ, một dòng một đường dân. Đường dẫn không hợp lệ và thư mục không tồn tại sẽ bị bỏ qua.</value>

Sử dụng đường dẫn thư mục đầy đủ, mỗi dòng một đường dẫn. Các đường dẫn không hợp lệ hoặc thư mục không tồn tại sẽ bị bỏ qua.</value>

</data>

<data name="groupBoxProgramFolders.Text" xml:space="preserve">

<value>Thư mục cài đặt ứng dụng</value>

Expand All

@@ -279,10 +279,10 @@ Hãy sử dụng đường dẫn thư mục đầy đủ, một dòng một đư

<value>Thư mục</value>

</data>

<data name="groupBox2.Text" xml:space="preserve">

<value>Khởi động cùng hệ thống</value>

<value>Khởi động cùng hệ thống (Startup)</value>

</data>

<data name="groupBox3.Text" xml:space="preserve">

<value>Mạng</value>

<value>Mạng (Network)</value>

</data>

<data name="tabPageMisc.Text" xml:space="preserve">

<value>Lặt vặt</value>

Expand Down

6 changes: 3 additions & 3 deletions

6

source/BulkCrapUninstaller/Forms/Windows/UninstallProgressWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -134,7 +134,7 @@

</data>

<data name="label3.Text" xml:space="preserve">

<value>Les désinstalleurs sélectionnés vont maintenant être exécutés un à la fois.

Si le processus semble bloqué, vous pouvez cliquer sur le bouton "Passer" pour éviter d'attendre qu'il se termine. Cela peut arriver si le désinstalleur plante ou démarre un nouveau processus et ne le ferme pas. </value>

Si le processus semble bloqué, vous pouvez cliquer sur le bouton "Passer" pour éviter d'attendre qu'il se termine. Cela peut arriver si le désinstalleur plante ou démarre un nouveau processus et ne le ferme pas.</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Liste de désinstalleurs</value>

Expand All

@@ -152,13 +152,13 @@ Si le processus semble bloqué, vous pouvez cliquer sur le bouton "Passer" pour

<value>Id</value>

</data>

<data name="toolStripButtonRun.Text" xml:space="preserve">

<value>Lancer le désinstalleur maintenant</value>

<value>Lancer le désinstalleur</value>

</data>

<data name="toolStripButtonTerminate.Text" xml:space="preserve">

<value>Interrompre</value>

</data>

<data name="toolStripButtonFolderOpen.Text" xml:space="preserve">

<value>Ouvrir le l'emplacement d'installation</value>

<value>Ouvrir l'emplacement d'installation</value>

</data>

<data name="toolStripButtonProperties.Text" xml:space="preserve">

<value>Propriétés</value>

Expand Down

22 changes: 11 additions & 11 deletions

22

source/BulkCrapUninstaller/Forms/Windows/UninstallProgressWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -127,7 +127,7 @@

<value>Trạng thái</value>

</data>

<data name="olvColumnIsSilent.Text" xml:space="preserve">

<value>Gỡ âm thầm</value>

<value>Chế độ yên lặng (Quiet)</value>

</data>

<data name="olvColumnName.Text" xml:space="preserve">

<value>Tên</value>

Expand All

@@ -139,10 +139,10 @@

<value>Bỏ qua</value>

</data>

<data name="terminateToolStripMenuItem.Text" xml:space="preserve">

<value>Chấm dứt</value>

<value>Buộc dừng (Terminate)</value>

</data>

<data name="runNowToolStripMenuItem.Text" xml:space="preserve">

<value>Khởi chạy ngay bây giờ</value>

<value>Gỡ ngay bây giờ</value>

</data>

<data name="manualUninstallToolStripMenuItem.Text" xml:space="preserve">

<value>Gỡ cài đặt thủ công</value>

Expand All

@@ -151,20 +151,20 @@

<value>Mở thư mục cài đặt</value>

</data>

<data name="propertiesToolStripMenuItem.Text" xml:space="preserve">

<value>Thuộc tính</value>

<value>Chi tiết</value>

</data>

<data name="label3.Text" xml:space="preserve">

<value>Các trình gỡ cài đặt đã chọn sẽ được chạy lần lượt.

Nếu quá trình dường như bị kẹt, bạn có thể nhấp vào nút "Bỏ qua" để tránh phải đợi nó hoàn thành. Điều này có thể xảy ra nếu trình gỡ cài đặt bị lỗi hoặc khởi chạy một tiến trình mới và không đóng nó lại.</value>

<value>Các bộ gỡ cài đặt được chọn sẽ lần lượt được thực thi theo thứ tự.

Nếu quá trình có vẻ bị treo, bạn có thể nhấp vào nút "Bỏ qua" để tránh phải chờ đợi tốn thời gian. Điều này có thể xảy ra nếu bộ gỡ cài đặt bị lỗi (crash) hoặc khởi chạy một tiến trình mới mà không tự đóng lại.</value>

</data>

<data name="toolStripButtonRun.Text" xml:space="preserve">

<value>Khởi chạy trình gỡ cài đặt</value>

<value>Chạy trình gỡ cài đặt</value>

</data>

<data name="toolStripButtonSkip.Text" xml:space="preserve">

<value>Bỏ qua</value>

</data>

<data name="toolStripButtonTerminate.Text" xml:space="preserve">

<value>Chấm dứt</value>

<value>Buộc dừng (Terminate)</value>

</data>

<data name="toolStripButtonManualUninstall.Text" xml:space="preserve">

<value>Gỡ cài đặt thủ công</value>

Expand All

@@ -173,7 +173,7 @@ Nếu quá trình dường như bị kẹt, bạn có thể nhấp vào nút "B

<value>Mở thư mục cài đặt</value>

</data>

<data name="toolStripButtonProperties.Text" xml:space="preserve">

<value>Thuộc tính</value>

<value>Chi tiết</value>

</data>

<data name="toolStripButtonSettings.Text" xml:space="preserve">

<value>Cài đặt</value>

Expand All

@@ -182,13 +182,13 @@ Nếu quá trình dường như bị kẹt, bạn có thể nhấp vào nút "B

<value>Trợ giúp</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Chúng sẽ được gỡ cài đặt theo thứ tự từ trên xuống.</value>

<value>Các mục trong danh sách này sẽ bị gỡ cài đặt theo thứ tự từ trên xuống dưới.</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Danh sách trình gỡ cài đặt</value>

</data>

<data name="checkBoxFinishSleep.Text" xml:space="preserve">

<value>Thiết lập PC của bạn vào chế độ ngủ khi hoàn tất</value>

<value>Chuyển PC của bạn sang chế độ ngủ (Sleep) khi hoàn tất</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Tiến trình gỡ cài đặt</value>

Expand Down

13 changes: 2 additions & 11 deletions

13

source/BulkCrapUninstaller/Forms/Wizards/BeginUninstallTaskWizard.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -145,16 +145,7 @@

<value>Certaines applications doivent peut-être être fermées avant désinstallation</value>

</data>

<data name="tabPage3.Text" xml:space="preserve">

<value>En cours</value>

</data>

<data name="label3.Text" xml:space="preserve">

<value>Créer un point de restauration avant désinstallation</value>

</data>

<data name="label4.Text" xml:space="preserve">

<value>Vous pouvez créer un point de restauration système pour sauvegarder le registre, certains paramètres et fichiers. Il est recommandé de créer un point de restauration avant de supprimer des pilotes et des applications système importantes.</value>

</data>

<data name="label8.Text" xml:space="preserve">

<value>Attention: la restauration système doit être activée pour que cela fonctionne!</value>

<value>Applis en cours</value>

</data>

<data name="label5.Text" xml:space="preserve">

<value>Changer les réglages de désinstallation</value>

Expand Down

Expand Up

@@ -208,7 +199,7 @@

<value>COMMENCER LA DESINSTALLATION</value>

</data>

<data name="label6.Text" xml:space="preserve">

<value>Assurez-vous que les informations suivantes sont correctes avant de commencer la désinstallation. C'est la dernière chance!</value>

<value>Assurez-vous que les informations suivantes sont correctes avant de commencer la désinstallation. C'est la dernière chance !</value>

</data>

<data name="tabPage5.Text" xml:space="preserve">

<value>Final</value>

Expand Down

30 changes: 15 additions & 15 deletions

30

source/BulkCrapUninstaller/Forms/Wizards/BeginUninstallTaskWizard.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,10 +124,10 @@

<value>Huỷ</value>

</data>

<data name="buttonPrev.Text" xml:space="preserve">

<value>Trờ về</value>

<value>Quay lại</value>

</data>

<data name="buttonNext.Text" xml:space="preserve">

<value>Tiếp tục</value>

<value>Kế tiếp</value>

</data>

<data name="tabPage1.Text" xml:space="preserve">

<value>Có liên quan đến</value>

Expand All

@@ -136,7 +136,7 @@

<value>Xác nhận</value>

</data>

<data name="tabPage3.Text" xml:space="preserve">

<value>Các ứng dụng đang khởi chạy</value>

<value>Ứng dụng đang chạy</value>

</data>

<data name="tabPage4.Text" xml:space="preserve">

<value>Cài đặt</value>

Expand All

@@ -151,60 +151,60 @@

<value>l</value>

</data>

<data name="label17.Text" xml:space="preserve">

<value>Cho phép gỡ cài đặt đồng thời</value>

<value>Tính năng gỡ cài đặt đồng thời đang được bật</value>

</data>

<data name="labelWillBeSilent.Text" xml:space="preserve">

<value>l</value>

</data>

<data name="label15.Text" xml:space="preserve">

<value>Gỡ cài đặt âm thầm</value>

<value>Quá trình gỡ cài đặt sẽ chạy ở chế độ im lặng (Silent)</value>

</data>

<data name="labelRestorePointCreated.Text" xml:space="preserve">

<value>l</value>

</data>

<data name="label13.Text" xml:space="preserve">

<value>Tạo một điểm khôi phục mới</value>

<value>Tạo một điểm khôi phục (Restore point) mới</value>

</data>

<data name="labelFilesStillUsed.Text" xml:space="preserve">

<value>l</value>

</data>

<data name="label11.Text" xml:space="preserve">

<value>Đang được sử dụng bởi tiến trình khác</value>

<value>Các tệp tin vẫn đang được sử dụng bởi các tiến trình khác</value>

</data>

<data name="labelTotalSize.Text" xml:space="preserve">

<value>l</value>

</data>

<data name="label9.Text" xml:space="preserve">

<value>Ước tính kích thước tổng</value>

<value>Tổng dung lượng ước tính</value>

</data>

<data name="labelApps.Text" xml:space="preserve">

<value>l</value>

</data>

<data name="label7.Text" xml:space="preserve">

<value>Các ứng dụng cần gỡ cài đặt</value>

<value>Các ứng dụng sẽ gỡ cài đặt</value>

</data>

<data name="button2.Text" xml:space="preserve">

<value>BẮT ĐẦU QUÁ TRÌNH GỠ CÀI ĐẶT</value>

</data>

<data name="tabPage5.Text" xml:space="preserve">

<value>Phần cuối</value>

<value>Xác nhận cuối cùng</value>

</data>

<data name="p1Heading.Text" xml:space="preserve">

<value>Các ứng dụng có liên quan mà bạn có thể muốn gỡ cài đặt</value>

<value>Các ứng dụng liên quan có thể bạn muốn gỡ cài đặt</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>Xác nhận rằng những mục dưới đây không có vấn đề gì khi gỡ cài đặt</value>

<value>Xác nhận rằng tất cả các mục dưới đây đều an toàn để gỡ cài đặt</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Một số ứng dụng có thể cần được đóng lại trước khi gỡ cài đặt</value>

<value>Một số ứng dụng có thể cần phải đóng lại trước khi tiến hành gỡ cài đặt</value>

</data>

<data name="label5.Text" xml:space="preserve">

<value>Thay đổi cài đặt mặc định của bạn</value>

</data>

<data name="label6.Text" xml:space="preserve">

<value>Vui lòng xác nhận rằng tất cả thông tin dưới đây là chính xác trước khi bắt đầu gỡ cài đặt. Đây là lần cơ hội cuối cùng của bạn!</value>

<value>Vui lòng đảm bảo các thông tin sau đây đã chính xác trước khi bắt đầu. Đây là cơ hội cuối cùng của bạn!</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Bắt đầu quá trình gỡ cài đặt mới</value>

<value>Bắt đầu tác vụ gỡ cài đặt mới</value>

</data>

</root>

18 changes: 9 additions & 9 deletions

18

source/BulkCrapUninstaller/Forms/Wizards/FirstStartBox.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -127,10 +127,10 @@

<value>Continuer</value>

</data>

<data name="buttonFinish.Text" xml:space="preserve">

<value>Quitter l'assistant</value>

<value>Terminer l'installation</value>

</data>

<data name="p5finishContact.Text" xml:space="preserve">

<value>Vous pouvez maintenant utiliser BCUninstaller. Si vous avez toute question ou souhaiteriez suggérer une nouvelle fonction, visitez le lien ci-dessous.</value>

<value>Vous pouvez maintenant utiliser BCUninstaller. Si vous des questions ou souhaiteriez suggérer une nouvelle fonction, visitez le lien ci-dessous.</value>

</data>

<data name="p5LinkContact.Text" xml:space="preserve">

<value>Ouvrir le formulaire de contact</value>

Expand Down

Expand Up

@@ -170,7 +170,7 @@ de l'application</value>

<value>Vous pouvez chercher manuellement les mises à jour depuis la barre de menus.</value>

</data>

<data name="checkBoxSendStats.Text" xml:space="preserve">

<value>Envoyer automatiquement les statistiques d'utilisation</value>

<value>Envoyer automatiquement les statistiques anonymes d'utilisation</value>

</data>

<data name="p4netUsageAdd.Text" xml:space="preserve">

<value>L'envoi de ces statistiques aidera à améliorer BCUninstaller.</value>

Expand Down

Expand Up

@@ -219,7 +219,7 @@ Si le désinstalleur d'origine est introuvable, vous devrez utiliser l'option "D

<value>Les applications marquées comme "composants système" sont cachées de la plupart des gestionnaires basiques de désinstallation. Cette balise ne signifie PAS que l'application fait partie du système d'exploitation.</value>

</data>

<data name="checkBoxListSysComp.Text" xml:space="preserve">

<value>Montrer les désinstalleurs marqués comme

<value>Afficher les désinstalleurs marqués comme

"composants système"</value>

</data>

<data name="p3advProtectTitle.Text" xml:space="preserve">

Expand All

@@ -229,7 +229,7 @@ Si le désinstalleur d'origine est introuvable, vous devrez utiliser l'option "D

<value>Les éléments protégés sont marqués avec la balise "NoRemove", qui signifie que l'éditeur ne veut pas que vous les supprimiez. Cette balise est souvent utilisée par des grands ensembles de logiciels pour vous empêcher de désinstaller leurs parties individuelles.</value>

</data>

<data name="checkBoxListProtected.Text" xml:space="preserve">

<value>Montrer les désinstalleurs marqués comme "protégés"</value>

<value>Afficher les désinstalleurs marqués comme "protégés"</value>

</data>

<data name="checkBoxDiisableProtection.Text" xml:space="preserve">

<value>Désactiver la protection des désinstalleurs marqués

Expand All

@@ -254,7 +254,7 @@ comme "protégés"</value>

<value>● Grouper les désinstalleurs similaires.</value>

</data>

<data name="checkBoxGroups.Text" xml:space="preserve">

<value>Montrer les désinstalleurs en groupes</value>

<value>Afficher les désinstalleurs en groupes</value>

</data>

<data name="checkBoxCheckboxes.Text" xml:space="preserve">

<value>Sélectionnner par cases à cocher</value>

Expand All

@@ -279,16 +279,16 @@ Attention : la vérification peut mettre longtemps.</value>

<value>Cet assistant vous fera faire un tour rapide et aidera à configurer l'application.</value>

</data>

<data name="p1languageHeading.Text" xml:space="preserve">

<value>Langage sélectionné</value>

<value>Langue sélectionnée</value>

</data>

<data name="p1languageDesc.Text" xml:space="preserve">

<value>Vous pouvez forcer BCUninstaller à utiliser une localisation spécifique si le langage par défaut est incorrect. Un redémarrage sera réalisé pour appliquer le nouveau langage. </value>

<value>Vous pouvez forcer BCUninstaller à utiliser une localisation spécifique si la langue par défaut est incorrecte. Un redémarrage sera réalisé pour appliquer la nouvelle langue. </value>

</data>

<data name="buttonLanguageApply.Text" xml:space="preserve">

<value>Appliquer</value>

</data>

<data name="p1languageExtradetails.Text" xml:space="preserve">

<value>Si vous souhaitez aider à traduire BCUninstaller dans votre langage, cliquez sur le lien ci-dessous pour me contacter. Toute aide est grandement appréciée !</value>

<value>Si vous souhaitez aider à traduire BCUninstaller dans votre langue, cliquez sur le lien ci-dessous pour me contacter. Toute aide est grandement appréciée !</value>

</data>

<data name="p1linkLabelContact.Text" xml:space="preserve">

<value>Ouvrir le formulaire de contact</value>

Expand Down

83 changes: 41 additions & 42 deletions

83

source/BulkCrapUninstaller/Forms/Wizards/FirstStartBox.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

Large diffs are not rendered by default.

72 changes: 53 additions & 19 deletions

72

source/BulkCrapUninstaller/Functions/ApplicationList/ApplicationListConstants.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -3,20 +3,54 @@

Apache License Version 2.0

*/

using System.Drawing;

using BulkCrapUninstaller.Properties;

using UninstallTools;

namespace BulkCrapUninstaller.Functions.ApplicationList

{

internal static class ApplicationListConstants

{

public static ApplicationListColors Colors => Settings.Default.MiscColorblind ? ApplicationListColors.ColorBlind : ApplicationListColors.Normal;

public static Color GetApplicationBackColor(ApplicationUninstallerEntry entry)

{

if (Settings.Default.AdvancedHighlightSpecial)

{

using System.Drawing;

using BulkCrapUninstaller.Properties;

using Klocman.Resources;

using UninstallTools;

namespace BulkCrapUninstaller.Functions.ApplicationList

{

internal static class ApplicationListConstants

{

public static ApplicationListColors Colors => Settings.Default.MiscColorblind ? ApplicationListColors.ColorBlind : ApplicationListColors.Normal;

public static string GetApplicationCertificateText(ApplicationUninstallerEntry entry)

{

if (entry == null) return Localisable.Empty;

if (!Settings.Default.AdvancedTestCertificates)

return CommonStrings.Unknown;

var result = entry.IsCertificateValid(true);

if (!result.HasValue)

return Localisable.CertificateColumn_NotFound;

return result.Value ? Localisable.CertificateColumn_Verified : Localisable.CertificateColumn_Unverified;

}

public static object GetApplicationIntegrityText(ApplicationUninstallerEntry entry)

{

if (entry == null) return Localisable.Empty;

var missingRegistry = entry.IsOrphaned || !entry.IsRegistered;

var missingUninstaller = !entry.IsValid;

if (missingRegistry && missingUninstaller)

return new[] { Localisable.IntegrityColumn_Invalid, Localisable.IntegrityColumn_Unregistered };

if (missingRegistry)

return Localisable.IntegrityColumn_Unregistered;

if (missingUninstaller)

return Localisable.IntegrityColumn_Invalid;

return Localisable.IntegrityColumn_Good;

}

public static Color GetApplicationBackColor(ApplicationUninstallerEntry entry)

{

if (Settings.Default.AdvancedHighlightSpecial)

{

if (entry.UninstallerKind == UninstallerType.WindowsFeature)

return Colors.WindowsFeatureColor;

Expand Down

Expand Up

@@ -64,8 +98,8 @@ public static Color GetApplicationTreemapColor(ApplicationUninstallerEntry entry

? Colors.VerifiedColor

: Colors.UnverifiedColor;

}

return Color.White;

}

}

}

return Color.White;

}

}

}

37 changes: 19 additions & 18 deletions

37

source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -111,10 +111,9 @@ public IEnumerable<Filter> GenerateEquivalentFilter()

results.Add(new Filter("Updates", true, new FilterCondition(true.ToString(),

ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsUpdate))));

// TODO Better detection, can lead to bugs down the line

if (!_settings.Settings.FilterShowTweaks)

results.Add(new Filter("Tweaks", true, new FilterCondition(@"\Resources\Scripts\Tweak",

ComparisonMethod.Contains, nameof(ApplicationUninstallerEntry.UninstallString))));

if (!_settings.Settings.FilterShowTweaks)

results.Add(new Filter("Tweaks", true, new FilterCondition(true.ToString(),

ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsScriptTweak))));

return results;

}

Expand Down

Expand Up

@@ -143,13 +142,10 @@ private bool ListViewFilter(object obj)

if (!_settings.Settings.FilterShowUpdates && entry.IsUpdate) return false;

if (entry.RatingId != null)

{

if (!_settings.Settings.FilterShowTweaks && entry.RatingId.StartsWith("tweak", StringComparison.Ordinal))

return false;

}

if (string.IsNullOrEmpty(_filteringFilterCondition.FilterText)) return true;

if (!_settings.Settings.FilterShowTweaks && entry.IsScriptTweak)

return false;

if (string.IsNullOrEmpty(_filteringFilterCondition.FilterText)) return true;

return _filteringFilterCondition.TestEntry(entry) == true;

}

Expand Down

Expand Up

@@ -201,12 +197,17 @@ public void SetupListView()

_reference.olvColumnGuid.AspectGetter = ListViewDelegates.ColumnGuidAspectGetter;

_reference.olvColumnGuid.GroupKeyGetter = ListViewDelegates.ColumnGuidGroupKeyGetter;

_reference.olvColumnSystemComponent.AspectName = RegistryFactory.RegistryNameSystemComponent;

_reference.olvColumnSystemComponent.AspectToStringConverter = ListViewDelegates.BoolToYesNoAspectConverter;

_reference.olvColumnSystemComponent.GroupKeyToTitleConverter = ListViewDelegates.BoolToYesNoAspectConverter;

_reference.olvColumnIs64.AspectGetter =

y => (y as ApplicationUninstallerEntry)?.Is64Bit.GetLocalisedName();

_reference.olvColumnSystemComponent.AspectName = RegistryFactory.RegistryNameSystemComponent;

_reference.olvColumnSystemComponent.AspectToStringConverter = ListViewDelegates.BoolToYesNoAspectConverter;

_reference.olvColumnSystemComponent.GroupKeyToTitleConverter = ListViewDelegates.BoolToYesNoAspectConverter;

_reference.olvColumnCertificate.AspectGetter = y => ApplicationListConstants.GetApplicationCertificateText(y as ApplicationUninstallerEntry);

_reference.olvColumnIntegrity.AspectGetter = y => ApplicationListConstants.GetApplicationIntegrityText(y as ApplicationUninstallerEntry);

_reference.olvColumnIntegrity.AspectToStringConverter = x => x is string[] arr ? string.Join(", ", arr) : x?.ToString();

_reference.olvColumnIs64.AspectGetter =

y => (y as ApplicationUninstallerEntry)?.Is64Bit.GetLocalisedName();

_reference.olvColumnProtected.AspectToStringConverter = ListViewDelegates.BoolToYesNoAspectConverter;

_reference.olvColumnProtected.GroupKeyToTitleConverter = ListViewDelegates.BoolToYesNoAspectConverter;

Expand Down

Expand Up

@@ -267,4 +268,4 @@ public void UpdateColumnFiltering(bool anyUninstallers)

_updateThrottleTimer.Start();

}

}

}

}

34 changes: 34 additions & 0 deletions

34

source/BulkCrapUninstaller/Functions/Tools/StartupArgumentTools.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,34 @@

/*

Copyright (c) 2017 Marcin Szeniak (https://github.com/Klocman/)

Apache License Version 2.0

*/

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

namespace BulkCrapUninstaller.Functions.Tools

{

public static class StartupArgumentTools

{

public static string GetStartupUninstallListPath(IEnumerable<string> commandLineArgs)

{

var candidate = commandLineArgs?.Skip(1).FirstOrDefault();

if (string.IsNullOrWhiteSpace(candidate))

return null;

try

{

if (!candidate.EndsWith(".bcul", StringComparison.OrdinalIgnoreCase))

return null;

return File.Exists(candidate) ? candidate : null;

}

catch (Exception ex) when (ex is ArgumentException or NotSupportedException or PathTooLongException)

{

return null;

}

}

}

}

54 changes: 54 additions & 0 deletions

54

source/BulkCrapUninstaller/Properties/Localisable.Designer.cs

Show comments

View file

Edit file

Delete file

Load diff

64 changes: 34 additions & 30 deletions

64

source/BulkCrapUninstaller/Properties/Localisable.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,7 +124,7 @@

<value>Recherche de vestiges...</value>

</data>

<data name="LoadingDialogTitlePopulatingList" xml:space="preserve">

<value>Création de la liste des programmes installés...</value>

<value>Remplissage de la liste de désinstalleurs...</value>

</data>

<data name="LoadingDialogTitleRemovingJunk" xml:space="preserve">

<value>Suppression des vestiges...</value>

Expand All

@@ -133,10 +133,10 @@

<value>Recherche de mises à jour...</value>

</data>

<data name="SearchNothingFoundMessage" xml:space="preserve">

<value>Il n'y a pas d'entrée correspondant à votre chaîne de recherche.</value>

<value>Il n'y a pas d'entrée correspondant à votre critère de recherche.</value>

</data>

<data name="StrExportHeader" xml:space="preserve">

<value>Exportation BCUninstaller

<value>Export BCUninstaller

Éditeur | Version | Date | Taille | Registre | Type de désinstalleur | Chaîne de désinstallation | Chaîne de désinstallation silencieuse | Commentaires</value>

</data>

<data name="StrIsPortable" xml:space="preserve">

Expand All

@@ -147,10 +147,10 @@

<value>Échec en appelant l'API</value>

</data>

<data name="MessageBoxes_BackupFailedQuestion_Message" xml:space="preserve">

<value>Échec en sauvegardant le registre, voulez-vous continuer tout de même ?</value>

<value>Échec en sauvegarde du registre, voulez-vous continuer tout de même ?</value>

</data>

<data name="MessageBoxes_BackupFailedQuestion_Details" xml:space="preserve">

<value>Détails de l'erreur : </value>

<value>Détails d'erreur : </value>

</data>

<data name="MessageBoxes_Title_Leftover_removal" xml:space="preserve">

<value>Suppression des vestiges</value>

Expand All

@@ -171,7 +171,7 @@ Détails de l'erreur :

Fichiers et dossiers seront déplacés dans la corbeille, vous pouvez les restaurer à partir d'ici.</value>

</data>

<data name="MessageBoxes_CanSelectOnlyOneItemInfo_Title" xml:space="preserve">

<value>Échec de l'action</value>

<value>Action échouée</value>

</data>

<data name="MessageBoxes_CanSelectOnlyOneItemInfo_Message" xml:space="preserve">

<value>Vous devez ne sélectionner qu'une entrée pour cette action</value>

Expand All

@@ -186,40 +186,38 @@ Fichiers et dossiers seront déplacés dans la corbeille, vous pouvez les restau

<value>Ouvrir du contenu en ligne</value>

</data>

<data name="MessageBoxes_NoNetworkConnected_Message" xml:space="preserve">

<value>Connection à internet impossible, il n'y a pas de réseau disponible.</value>

<value>Connexion à internet impossible, il n'y a pas de réseau disponible.</value>

</data>

<data name="MessageBoxes_NoNetworkConnected_Details" xml:space="preserve">

<value>Vérifiez que le câble réseau est branché. Si vous utilisez le Wi-Fi vérifiez que vous avez une bonne force de signal.</value>

</data>

<data name="MessageBoxes_Title_Submit_feedback" xml:space="preserve">

<value>Soumettre une réaction</value>

<value>Soumettre un retour</value>

</data>

<data name="MessageBoxes_AskToSubmitFeedback_Message" xml:space="preserve">

<value>Voudriez-vous envoyer une réaction concernant BCU ?</value>

<value>Voudriez-vous envoyer un retour concernant BCU ?</value>

</data>

<data name="MessageBoxes_AskToSubmitFeedback_Details" xml:space="preserve">

<value>Cela prendra moins d'une minute mais aidera grandement le développement ! Toute réaction est appréciée, que ce soit un rapport de bogue, une demande de fonction ou un simple merci !

<value>Cela prendra moins d'une minute mais aidera grandement le développement ! Tout retour est apprécié, que ce soit un rapport de bogue, une demande de fonction ou un simple merci !

Vous pouvez l'envoyer plus tard à partir de la barre de menu du haut (Aide-&gt;Soumettre une réaction).</value>

Vous pouvez l'envoyer plus tard à partir de la barre de menu du haut (Aide-&gt;Soumettre un retour).</value>

</data>

<data name="MessageBoxes_UpdateUptodate_Message" xml:space="preserve">

<value>La version courante est à jour</value>

</data>

<data name="MessageBoxes_UpdateUptodate_Details" xml:space="preserve">

<value>Aucune mise à jour n'a été trouvée pour l'heure, vous avez la dernière version.

Vous voulez ajouter une fonctionnalité ou corriger une bogue ? Merci de m'envoyer votre réaction en utilisant le menu "Aide-&gt;Soumettre une réaction".</value>

Vous voulez ajouter une fonctionnalité ou corriger une bogue ? Merci de m'envoyer votre retour en utilisant le menu "Aide-&gt;Soumettre un retour".</value>

</data>

<data name="MessageBoxes_UpdateFailed_Message" xml:space="preserve">

<value>Erreur rencontrée en vérifiant les mises à jour</value>

</data>

<data name="MessageBoxes_UpdateFailed_Details" xml:space="preserve">

<value>Vérifiez que BCUninstaller n'est pas bloqué dans votre pare-feu et que vous avez une connection internet fonctionnelle.

</value>

<value>Vérifiez que BCUninstaller n'est pas bloqué dans votre pare-feu et que vous avez une connection internet fonctionnelle.</value>

</data>

<data name="MessageBoxes_UpdateAskToDownload_Message" xml:space="preserve">

<value>Une nouvelle version {0} est disponible, voulez-vous mettre à jour maintenant ?</value>

<value>Nouvelle version {0} disponible, voulez-vous mettre à jour maintenant ?</value>

<comment>0 is version number</comment>

</data>

<data name="MessageBoxes_UpdateAskToDownload_Details" xml:space="preserve">

Expand Down

Expand Up

@@ -260,14 +258,14 @@ Attention : pendant la mise à jour le dossier "Update" et le fichier "Update.zi

<comment>keep space in front</comment>

</data>

<data name="StrDebug" xml:space="preserve">

<value> DEBUG</value>

<value>DEBUG</value>

<comment>keep space in front</comment>

</data>

<data name="MessageBoxes_CanWalkAwayInfo_Title" xml:space="preserve">

<value>Progression de la désinstallation</value>

</data>

<data name="MessageBoxes_CanWalkAwayInfo_Message" xml:space="preserve">

<value>Vous pouvez maintenant laisser l'ordinateur opérer</value>

<value>Vous pouvez maintenant laisser l'ordinateur</value>

</data>

<data name="MessageBoxes_CanWalkAwayInfo_Details" xml:space="preserve">

<value>Les désinstalleurs restants devraient pouvoir terminer sans aucune intervention de l'utilisateur. Vous devriez quand même vérifier de temps en temps au cas où un des désinstalleurs plante.</value>

Expand Down

Expand Up

@@ -457,7 +455,7 @@ Voulez-vous utiliser les désinstalleurs "causants" pour ces éléments, ou doiv

<value>Le point de restauration N'A PAS ETE CRÉÉ, vous ne pourrez pas restaurer les changements ! Voulez-vous continuer quand même la désinstallation ?</value>

</data>

<data name="MainWindow_Rename_Description" xml:space="preserve">

<value>Renommer "{0}"</value>

<value>Renommage de "{0}"</value>

</data>

<data name="MainWindow_Rename_Title" xml:space="preserve">

<value>Renommer l'entrée sélectionnée</value>

Expand Down

Expand Up

@@ -534,10 +532,10 @@ Voulez-vous utiliser les désinstalleurs "causants" pour ces éléments, ou doiv

<value>Échec d'exécution externe</value>

</data>

<data name="MessageBoxes_RestartNeededForSettingChangeQuestion_Details" xml:space="preserve">

<value>Certains paramètres ne prendront effet jusqu'à ce que l'application soit relancée.</value>

<value>Certains paramètres ne prendront pas effet jusqu'à ce que l'application soit relancée.</value>

</data>

<data name="MessageBoxes_RestartNeededForSettingChangeQuestion_Message" xml:space="preserve">

<value>Voulez-vous redémarrer BCU à appliquer les nouveaux réglages</value>

<value>Voulez-vous redémarrer BCU à appliquer les nouveaux réglages ?</value>

</data>

<data name="MessageBoxes_RestartNeededForSettingChangeQuestion_Title" xml:space="preserve">

<value>Modifier les réglages de l'application</value>

Expand All

@@ -546,7 +544,7 @@ Voulez-vous utiliser les désinstalleurs "causants" pour ces éléments, ou doiv

<value>Certificat manquant</value>

</data>

<data name="MainWindow_Statusbar_ProcessingUninstallers" xml:space="preserve">

<value>Traitement des désinstalleurs ({0})</value>

<value>Traitement des applications détectées, ({0}) restantes...</value>

<comment>{1} = how many application uninstallers still need to be processed</comment>

</data>

<data name="MessageBoxes_TaskSkip_Details" xml:space="preserve">

Expand Down

Expand Up

@@ -679,16 +677,16 @@ Vous pouver tenter de désactiver la prévention de collision dans les réglages

<value>Extensions</value>

</data>

<data name="LocalizedX509Certificate2_FriendlyName" xml:space="preserve">

<value>Nom familier</value>

<value>Nom Familier</value>

</data>

<data name="LocalizedX509Certificate2_IssuerName" xml:space="preserve">

<value>Nom de l'émetteur</value>

<value>Nom de l'Emetteur</value>

</data>

<data name="LocalizedX509Certificate2_NotAfter" xml:space="preserve">

<value>Pas après</value>

<value>Pas Après</value>

</data>

<data name="LocalizedX509Certificate2_NotBefore" xml:space="preserve">

<value>Pas avant</value>

<value>Pas Avant</value>

</data>

<data name="LocalizedX509Certificate2_PrivateKey" xml:space="preserve">

<value>Clé Privée</value>

Expand All

@@ -700,10 +698,10 @@ Vous pouver tenter de désactiver la prévention de collision dans les réglages

<value>Clé Publique</value>

</data>

<data name="LocalizedX509Certificate2_RawData" xml:space="preserve">

<value>Données brutes</value>

<value>Données Brutes</value>

</data>

<data name="LocalizedX509Certificate2_SerialNumber" xml:space="preserve">

<value>Numéro de série</value>

<value>Numéro de Série</value>

</data>

<data name="LocalizedX509Certificate2_SubjectName" xml:space="preserve">

<value>Nom de sujet</value>

Expand Down

Expand Up

@@ -763,10 +761,10 @@ Vous pouver tenter de désactiver la prévention de collision dans les réglages

<value>Sélectionner où enregistrer la sauvegarde. Un nouveau dossier sera créé.</value>

</data>

<data name="NewsPopup_UpdatedTitle" xml:space="preserve">

<value>BCU a été mis à jour en v{0}!</value>

<value>BCU a été mis à jour en v{0} !</value>

</data>

<data name="NewsPopup_FirstStartTitle" xml:space="preserve">

<value>Bienvenue à BCU version {0}!</value>

<value>Bienvenue à BCU version {0} !</value>

</data>

<data name="UninstallProgressWindow_StatusPuttingToSleepInSeconds" xml:space="preserve">

<value>Mise en veille du PC dans {0}s. Décocher la case veille pour annuler.</value>

Expand All

@@ -783,4 +781,10 @@ Vous pouver tenter de désactiver la prévention de collision dans les réglages

<value>Désinstalle</value>

<comment>Option for "Double clicking in application list..."</comment>

</data>

<data name="MessageBoxes_CantRenameUninstallerKind_Title" xml:space="preserve">

<value>Ne peut renommer {0}</value>

</data>

<data name="MessageBoxes_CantRenameUninstallerKind_Details" xml:space="preserve">

<value>Ce type de désinstalleur ne supporte pas de renommer ({0}).</value>

</data>

</root>

15 changes: 15 additions & 0 deletions

15

source/BulkCrapUninstaller/Properties/Localisable.hu.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -768,4 +768,19 @@ A beállításoknál megpróbálhatja letiltani az összeütközések észlelés

<data name="JunkRemoveWindow_SelectBackupDirectoryTitle" xml:space="preserve">

<value>Válassza ki, hová szeretné menteni a biztonsági másolatot. Egy új könyvtár jön létre.</value>

</data>

<data name="MessageBoxes_ModifyCommandMissing_Details" xml:space="preserve">

<value>A kijelölt alkalmazáshoz nincs beállítva módosító parancs. Szükséges lehet eltávolítani, majd újra telepíteni az alkalmazást a telepítési beállítások módosításához.</value>

</data>

<data name="UninstallerListDoubleClickAction_DoNothing" xml:space="preserve">

<value>Nem csinál semmit</value>

<comment>Option for "Double clicking in application list..."</comment>

</data>

<data name="UninstallerListDoubleClickAction_Properties" xml:space="preserve">

<value>Megnyitja a tulajdonságokat</value>

<comment>Option for "Double clicking in application list..."</comment>

</data>

<data name="UninstallerListDoubleClickAction_Uninstall" xml:space="preserve">

<value>Eltávolít</value>

<comment>Option for "Double clicking in application list..."</comment>

</data>

</root>

18 changes: 18 additions & 0 deletions

18

source/BulkCrapUninstaller/Properties/Localisable.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -789,4 +789,22 @@ You can try disabling collision detection in the settings, but it is not recomme

<data name="MessageBoxes_CantRenameUninstallerKind_Details" xml:space="preserve">

<value>This uninstaller kind does not support renaming ({0}).</value>

</data>

<data name="CertificateColumn_NotFound" xml:space="preserve">

<value>Not found</value>

</data>

<data name="CertificateColumn_Verified" xml:space="preserve">

<value>Verified</value>

</data>

<data name="CertificateColumn_Unverified" xml:space="preserve">

<value>Unverified</value>

</data>

<data name="IntegrityColumn_Invalid" xml:space="preserve">

<value>No uninstaller</value>

</data>

<data name="IntegrityColumn_Unregistered" xml:space="preserve">

<value>No registry</value>

</data>

<data name="IntegrityColumn_Good" xml:space="preserve">

<value>Good</value>

</data>

</root>

319 changes: 162 additions & 157 deletions

319

source/BulkCrapUninstaller/Properties/Localisable.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

Large diffs are not rendered by default.

44 changes: 44 additions & 0 deletions

44

source/BulkCrapUninstallerTests/ApplicationEntrySerializerTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,44 @@

using System.IO;

using Klocman.Tools;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using UninstallTools;

namespace BulkCrapUninstallerTests

{

[TestClass]

public class ApplicationEntrySerializerTests

{

[TestMethod]

public void SerializeApplicationEntries_InvalidXmlCharactersAreRemoved_ValidUnicodeIsPreserved()

{

var path = Path.GetTempFileName();

try

{

var entry = new ApplicationUninstallerEntry

{

DisplayName = "Test app",

Publisher = "Pu\u0002blisher",

Comment = "Before\u0001after \U0001F600",

CacheIdOverride = "Id\u0003value"

};

ApplicationEntrySerializer.SerializeApplicationEntries(path, new[] { entry });

var result = SerializationTools.DeserializeFromXml<ApplicationEntrySerializer>(path);

Assert.IsNotNull(result);

Assert.AreEqual(1, result.Items.Count);

Assert.AreEqual("Publisher", result.Items[0].Publisher);

Assert.AreEqual("Beforeafter \U0001F600", result.Items[0].Comment);

Assert.AreEqual("Idvalue", result.Items[0].CacheIdOverride);

Assert.AreEqual("Pu\u0002blisher", entry.Publisher);

Assert.AreEqual("Before\u0001after \U0001F600", entry.Comment);

Assert.AreEqual("Id\u0003value", entry.CacheIdOverride);

}

finally

{

File.Delete(path);

}

}

}

}

24 changes: 24 additions & 0 deletions

24

source/BulkCrapUninstallerTests/ApplicationUninstallerEntryTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,24 @@

using Microsoft.VisualStudio.TestTools.UnitTesting;

using UninstallTools;

namespace BulkCrapUninstallerTests

{

[TestClass]

public class ApplicationUninstallerEntryTests

{

[DataTestMethod]

[DataRow("Tweak-TestEntry", true)]

[DataRow("tweak-TestEntry", true)]

[DataRow("Steam App 42", false)]

[DataRow(null, false)]

public void IsScriptTweak_MatchesCurrentTweakIdFormat(string ratingId, bool expected)

{

var entry = new ApplicationUninstallerEntry

{

RatingId = ratingId

};

Assert.AreEqual(expected, entry.IsScriptTweak);

}

}

}

26 changes: 26 additions & 0 deletions

26

source/BulkCrapUninstallerTests/DrawingToolsTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,26 @@

using System.Drawing;

using System.IO;

using Klocman.Tools;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BulkCrapUninstallerTests

{

[TestClass]

public class DrawingToolsTests

{

[TestMethod]

public void CreateOwnedIconFromHandle_ReturnsUsableClone()

{

using var sourceIcon = SystemIcons.Application;

var handle = sourceIcon.GetHicon();

using var ownedIcon = DrawingTools.CreateOwnedIconFromHandle(handle);

using var stream = new MemoryStream();

ownedIcon.Save(stream);

Assert.IsTrue(stream.Length > 0);

Assert.AreEqual(sourceIcon.Size, ownedIcon.Size);

}

}

}

153 changes: 153 additions & 0 deletions

153

source/BulkCrapUninstallerTests/Functions/ApplicationListConstantsTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,153 @@

using BulkCrapUninstaller.Functions.ApplicationList;

using BulkCrapUninstaller.Properties;

using Klocman.Resources;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using UninstallTools;

namespace BulkCrapUninstallerTests.Functions

{

[TestClass]

public class ApplicationListConstantsTests

{

private bool _advancedTestCertificates;

[TestInitialize]

public void TestInitialize()

{

_advancedTestCertificates = Settings.Default.AdvancedTestCertificates;

Settings.Default.AdvancedTestCertificates = true;

}

[TestCleanup]

public void TestCleanup()

{

Settings.Default.AdvancedTestCertificates = _advancedTestCertificates;

}

[TestMethod]

public void GetApplicationCertificateText_ReturnsNoneWhenCertificateIsMissing()

{

var entry = new ApplicationUninstallerEntry

{

IsValid = true

};

var result = ApplicationListConstants.GetApplicationCertificateText(entry);

Assert.AreEqual(Localisable.CertificateColumn_NotFound, result);

}

[TestMethod]

public void GetApplicationCertificateText_ReturnsVerifiedCertificateStatus()

{

var entry = new ApplicationUninstallerEntry

{

IsValid = true

};

entry.SetCertificate(null, true);

var result = ApplicationListConstants.GetApplicationCertificateText(entry);

Assert.AreEqual(Localisable.CertificateColumn_Verified, result);

}

[TestMethod]

public void GetApplicationCertificateText_ReturnsUnverifiedCertificateStatus()

{

var entry = new ApplicationUninstallerEntry

{

IsValid = true

};

entry.SetCertificate(null, false);

var result = ApplicationListConstants.GetApplicationCertificateText(entry);

Assert.AreEqual(Localisable.CertificateColumn_Unverified, result);

}

[TestMethod]

public void GetApplicationCertificateText_ReturnsEmptyWhenCertificateChecksAreDisabled()

{

var entry = new ApplicationUninstallerEntry

{

IsValid = true

};

Settings.Default.AdvancedTestCertificates = false;

var result = ApplicationListConstants.GetApplicationCertificateText(entry);

Assert.AreEqual(CommonStrings.Unknown, result);

}

[TestMethod]

public void GetApplicationIntegrityText_ReturnsGoodWhenEntryIsRegisteredAndValid()

{

var entry = new ApplicationUninstallerEntry

{

IsRegistered = true,

IsValid = true

};

var result = ApplicationListConstants.GetApplicationIntegrityText(entry);

Assert.AreEqual(UninstallTools.Properties.Localisation.Confidence_Good, result);

}

[TestMethod]

public void GetApplicationIntegrityText_ReturnsMissingUninstallerWhenEntryIsInvalid()

{

var entry = new ApplicationUninstallerEntry

{

IsRegistered = true,

IsValid = false

};

var result = ApplicationListConstants.GetApplicationIntegrityText(entry);

Assert.AreEqual(Localisable.IntegrityColumn_Invalid, result);

}

[TestMethod]

public void GetApplicationIntegrityText_ReturnsMissingRegistryWhenEntryIsUnregistered()

{

var entry = new ApplicationUninstallerEntry

{

IsRegistered = false,

IsValid = true

};

var result = ApplicationListConstants.GetApplicationIntegrityText(entry);

Assert.AreEqual(Localisable.IntegrityColumn_Unregistered, result);

}

[TestMethod]

public void GetApplicationIntegrityText_ReturnsMissingRegistryWhenEntryIsOrphaned()

{

var entry = new ApplicationUninstallerEntry

{

IsRegistered = true,

IsOrphaned = true,

IsValid = true

};

var result = ApplicationListConstants.GetApplicationIntegrityText(entry);

Assert.AreEqual(Localisable.IntegrityColumn_Unregistered, result);

}

[TestMethod]

public void GetApplicationIntegrityText_ReturnsMissingRegistryAndUninstallerWhenBothAreMissing()

{

var entry = new ApplicationUninstallerEntry

{

IsRegistered = false,

IsValid = false

};

var result = ApplicationListConstants.GetApplicationIntegrityText(entry);

CollectionAssert.AreEqual(new[] { Localisable.IntegrityColumn_Invalid, Localisable.IntegrityColumn_Unregistered }, (object[])result);

}

}

}

55 changes: 55 additions & 0 deletions

55

source/BulkCrapUninstallerTests/Functions/StartupArgumentToolsTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,55 @@

using System;

using System.IO;

using BulkCrapUninstaller.Functions.Tools;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BulkCrapUninstallerTests.Functions

{

[TestClass]

public class StartupArgumentToolsTests

{

[TestMethod]

public void GetStartupUninstallListPath_ReturnsNullWhenThereAreNoArguments()

{

var result = StartupArgumentTools.GetStartupUninstallListPath(Array.Empty<string>());

Assert.IsNull(result);

}

[TestMethod]

public void GetStartupUninstallListPath_ReturnsNullForNonBculArgument()

{

var result = StartupArgumentTools.GetStartupUninstallListPath(new[] { "BCUninstaller.exe", "/setup" });

Assert.IsNull(result);

}

[TestMethod]

public void GetStartupUninstallListPath_ReturnsNullForMissingBculFile()

{

var result = StartupArgumentTools.GetStartupUninstallListPath(new[] { "BCUninstaller.exe", @"C:\missing\Default.bcul" });

Assert.IsNull(result);

}

[TestMethod]

public void GetStartupUninstallListPath_ReturnsExistingBculPath()

{

var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".bcul");

try

{

File.WriteAllText(tempPath, "<UninstallList />");

var result = StartupArgumentTools.GetStartupUninstallListPath(new[] { "BCUninstaller.exe", tempPath });

Assert.AreEqual(tempPath, result);

}

finally

{

if (File.Exists(tempPath))

File.Delete(tempPath);

}

}

}

}

54 changes: 54 additions & 0 deletions

54

source/BulkCrapUninstallerTests/UninstallListTests.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -0,0 +1,54 @@

using System.IO;

using System.Text;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using UninstallTools.Lists;

namespace BulkCrapUninstallerTests

{

[TestClass]

public class UninstallListTests

{

[TestMethod]

public void ReadFromFile_EmptyFile_ThrowsInvalidDataException()

{

var path = Path.GetTempFileName();

try

{

File.WriteAllText(path, string.Empty);

var ex = Assert.ThrowsException<InvalidDataException>(() => UninstallList.ReadFromFile(path));

StringAssert.Contains(ex.Message, "empty");

}

finally

{

File.Delete(path);

}

}

[TestMethod]

public void ReadFromFile_LeadingBomAndWhitespace_LoadsList()

{

var path = Path.GetTempFileName();

try

{

var input = new UninstallList(new[] { new Filter("Test", "Example App") });

input.SaveToFile(path);

var originalContents = File.ReadAllText(path);

File.WriteAllText(path, "\uFEFF\r\n\t " + originalContents, Encoding.UTF8);

var result = UninstallList.ReadFromFile(path);

Assert.IsNotNull(result);

Assert.AreEqual(1, result.Filters.Count);

Assert.AreEqual("Test", result.Filters[0].Name);

Assert.AreEqual("Example App", result.Filters[0].ComparisonEntries[0].FilterText);

}

finally

{

File.Delete(path);

}

}

}

}

2 changes: 1 addition & 1 deletion

2

source/Directory.Build.props

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

@@ -1,6 +1,6 @@

<Project>

<PropertyGroup>

<Version>6.1</Version>

<Version>6.2</Version>

<Authors>https://github.com/Klocman/Bulk-Crap-Uninstaller</Authors>

<Copyright>Copyright Apache-2.0 © 2026</Copyright>

Expand Down

2 changes: 1 addition & 1 deletion

2

source/KlocTools/Controls/WindowTargeter.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,6 +118,6 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="label2.Text" xml:space="preserve">

<value>Nhấp và kéo trên cửa sổ để chọn</value>

<value>Nhấp và kéo chuột vào cửa sổ để chọn</value>

</data>

</root>

12 changes: 12 additions & 0 deletions

12

source/KlocTools/Forms/LoadingDialog.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -221,6 +221,12 @@ public static LoadingDialog Show(Form owner, string title, Action<LoadingDialogI

_startAutomatically = false,

};

if (loadBar.Owner != null && (loadBar.Owner.IsDisposed || !loadBar.Owner.IsHandleCreated))

{

// Owner is not valid, show the dialog without it

loadBar.Owner = null;

}

loadBar.Show(loadBar.Owner);

return loadBar;

}

Expand All

@@ -245,6 +251,12 @@ public static Exception ShowDialog(Form owner, string title, Action<LoadingDialo

_startAutomatically = true

})

{

if (loadBar.Owner != null && (loadBar.Owner.IsDisposed || !loadBar.Owner.IsHandleCreated))

{

// Owner is not valid, show the dialog without it

loadBar.Owner = null;

}

loadBar.ShowDialog(loadBar.Owner);

return loadBar.Error;

}

Expand Down

2 changes: 1 addition & 1 deletion

2

source/KlocTools/Forms/ProcessWaiter.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,6 +118,6 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="$this.Text" xml:space="preserve">

<value>Chờ cho quá trình kết thúc...</value>

<value>Đang chờ tiến trình kết thúc...</value>

</data>

</root>

4 changes: 2 additions & 2 deletions

4

source/KlocTools/Forms/ProcessWaiterControl.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -124,12 +124,12 @@

<value>Buộc dừng tất cả</value>

</data>

<data name="buttonIgnore.Text" xml:space="preserve">

<value>Phớt lờ</value>

<value>Bỏ qua</value>

</data>

<data name="buttonCancel.Text" xml:space="preserve">

<value>Huỷ</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>Các quy trình sau đây có thể đang sử dụng các tệp sẽ được gỡ cài đặt, vui lòng đóng chúng trước khi tiếp tục. Nếu bạn quyết định không đóng chúng, việc gỡ cài đặt một số mục có thể không thành công hoặc gây ra sự cố. Bạn cũng có thể mất mọi dữ liệu chưa lưu được mở trong các ứng dụng đó.</value>

<value>Các tiến trình sau đây có thể đang sử dụng những tệp tin chuẩn bị bị gỡ cài đặt, vui lòng đóng chúng lại trước khi tiếp tục. Nếu bạn quyết định không đóng, việc gỡ cài đặt một số mục có thể thất bại hoặc gây ra lỗi hệ thống. Bạn cũng có thể bị mất bất kỳ dữ liệu nào chưa kịp lưu trong các ứng dụng đó.</value>

</data>

</root>

6 changes: 3 additions & 3 deletions

6

source/KlocTools/Forms/Tools/Buttons.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -160,7 +160,7 @@

<value>Loại bỏ</value>

</data>

<data name="ButtonReset" xml:space="preserve">

<value>Cài lại</value>

<value>Đặt lại</value>

</data>

<data name="ButtonSkip" xml:space="preserve">

<value>Bỏ qua</value>

Expand All

@@ -180,10 +180,10 @@

<value>Gỡ cài đặt</value>

</data>

<data name="ButtonUseLoud" xml:space="preserve">

<value>Dùng chế độ ồn ào</value>

<value>Dùng chế độ thường (Loud)</value>

</data>

<data name="ButtonYes" xml:space="preserve">

<value>Đúng</value>

<value>Có</value>

</data>

<data name="ButtonDetails" xml:space="preserve">

<value>Chi tiết</value>

Expand Down

8 changes: 7 additions & 1 deletion

8

source/KlocTools/Forms/Tools/PremadeDialogs.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -67,6 +67,12 @@ public static bool StartProcessSafely(string command, string arguments)

return false;

}

/// <summary>

/// Exception that is not sendable to the error report system. This is used for exceptions that are expected to be thrown and don't contain useful information.

/// </summary>

/// <inheritdoc />

public class NotSendableException(string message) : Exception(message);

/// <summary>

/// Show a generic error message with supplied exception info. Shows all inner exceptions and stack traces as well as a

/// copy button.

Expand All

@@ -78,7 +84,7 @@ public static void GenericError(Exception ex)

Console.WriteLine(@"Showing error message: " + ex);

if (SendErrorAction != null)

if (SendErrorAction != null && ex is not NotSendableException)

SendErrorQuestion(ex);

else

GenericError(ex.Message, GetExceptionDetailString(ex));

Expand Down

8 changes: 5 additions & 3 deletions

8

source/KlocTools/IO/MsiTools.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -81,6 +81,8 @@ public static IEnumerable<string> GetAllComponents()

{

var ret = (ResultWin32)MsiWrapper.MsiEnumComponents(i, lpComponentBuf);

if (ret == ResultWin32.ERROR_NO_MORE_ITEMS) break;

// Some MSI products return ERROR_BAD_CONFIGURATION for whatever reason, safest to skip them

if (ret == ResultWin32.ERROR_BAD_CONFIGURATION) continue;

if (ret != 0) throw ret.ToException();

yield return lpComponentBuf.ToString();

}

Expand Down

Expand Up

@@ -111,7 +113,7 @@ public static string GetInstalledComponentPathRaw(string component)

{

if (ComponentPathLookup.TryGetValue(component, out var value))

return value;

InitLookups();

_reverseComponentLookup.TryGetValue(component, out var product);

Expand Down

Expand Up

@@ -162,7 +164,7 @@ public static MsiComponentPaths GetInstalledComponentPaths(Guid productCodeGuid)

#if RELEASE

_ => hiveId.ToString()

#else

_ => throw new ArgumentOutOfRangeException(nameof(hiveId), hiveId, @"Invalid hive")

_ => throw new ArgumentOutOfRangeException(nameof(hiveId), hiveId, @"Invalid hive")

#endif

};

path = hiveName + path[3..];

Expand Down

Expand Up

@@ -199,7 +201,7 @@ public static void InitLookups()

{

lock (GuidRegistryFormatPattern)

{

if (_componentLookup != null) return;

if (_reverseComponentLookup != null) return;

var sw = Stopwatch.StartNew();

Expand Down

2 changes: 1 addition & 1 deletion

2

source/KlocTools/KlocTools.csproj

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -11,7 +11,7 @@

</ItemGroup>

<ItemGroup>

<PackageReference Include="System.Management" Version="10.0.3" />

<PackageReference Include="System.Management" Version="[8.*,9)" />

</ItemGroup>

<ItemGroup>

Expand Down

28 changes: 14 additions & 14 deletions

28

source/KlocTools/Properties/Localisation.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -211,7 +211,7 @@

<value>Arrêter les processus en cours</value>

</data>

<data name="RegistryTools_AddRegToRegistry_FileNotExist" xml:space="preserve">

<value>Le nom de fichier ne pointe pas sur un fichier .reg valide</value>

<value>Le chemin ne pointe pas sur un fichier .reg valide</value>

</data>

<data name="RegistryTools_RemoveRegistryKey_PathEmptyNull" xml:space="preserve">

<value>Le chemin ne peut pas être vide ou nul</value>

Expand All

@@ -233,13 +233,13 @@ Vous pouvez copier les informations détaillées concernant cette erreur dans le

<value>Détails d'erreur: </value>

</data>

<data name="FileInfo_CreationTime" xml:space="preserve">

<value>Heure de création</value>

<value>Heure de Création</value>

</data>

<data name="FileInfo_LastAccessTime" xml:space="preserve">

<value>Heure de dernier accès</value>

<value>Heure de Dernier Accès</value>

</data>

<data name="FileInfo_LastWriteTime" xml:space="preserve">

<value>Heure de dernière écriture</value>

<value>Heure de Dernière Ecriture</value>

</data>

<data name="FileInfo_Attributes" xml:space="preserve">

<value>Attributs</value>

Expand All

@@ -248,10 +248,10 @@ Vous pouvez copier les informations détaillées concernant cette erreur dans le

<value>Est lecture seule</value>

</data>

<data name="FileInfo_FullName" xml:space="preserve">

<value>Nom complet</value>

<value>Nom Complet</value>

</data>

<data name="FileInfo_FileName" xml:space="preserve">

<value>Nom de fichier</value>

<value>Nom de Fichier</value>

</data>

<data name="FileInfo_Size" xml:space="preserve">

<value>Taille</value>

Expand All

@@ -266,33 +266,33 @@ Vous pouvez copier les informations détaillées concernant cette erreur dans le

<value>Commentaire</value>

</data>

<data name="FileInfo_CompanyName" xml:space="preserve">

<value>Nom de compagnie</value>

<value>Nom de Compagnie</value>

</data>

<data name="FileInfo_FileDescription" xml:space="preserve">

<value>Description</value>

</data>

<data name="FileInfo_FileVersion" xml:space="preserve">

<value>Version de fichier</value>

<value>Version de Fichier</value>

</data>

<data name="FileInfo_InternalName" xml:space="preserve">

<value>Nom interne</value>

<value>Nom Interne</value>

</data>

<data name="FileInfo_Language" xml:space="preserve">

<value>Langage</value>

<value>Langue</value>

</data>

<data name="FileInfo_LegalCopyright" xml:space="preserve">

<value>Copyright</value>

</data>

<data name="FileInfo_LegalTrademarks" xml:space="preserve">

<value>Marque déposée</value>

<value>Marques déposées</value>

</data>

<data name="FileInfo_OriginalFilename" xml:space="preserve">

<value>Nom de fichier d'origine</value>

<value>Nom de fichier Original</value>

</data>

<data name="FileInfo_ProductName" xml:space="preserve">

<value>Nom de produit</value>

<value>Nom de Produit</value>

</data>

<data name="FileInfo_ProductVersion" xml:space="preserve">

<value>Version de produit</value>

<value>Version de Produit</value>

</data>

</root>

62 changes: 31 additions & 31 deletions

62

source/KlocTools/Properties/Localisation.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,16 +118,16 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="Enums_YesNoAsk_Ask" xml:space="preserve">

<value>Yêu cầu</value>

<value>Hỏi</value>

</data>

<data name="Error_SeparateArgsFromCommand_Empty" xml:space="preserve">

<value>Tên tệp không được bỏ trống</value>

<value>Tên tệp tin không được để trống.</value>

</data>

<data name="Error_SeparateArgsFromCommand_MissingQuotationMark" xml:space="preserve">

<value>Dấu ngoặc kép ở cuối bị thiếu.</value>

<value>Thiếu dấu ngoặc kép đóng.</value>

</data>

<data name="Error_SeparateArgsFromCommand_NoDot" xml:space="preserve">

<value>Tên tệp phải có phần mở rộng được phân tách bằng dấu chấm.</value>

<value>Tên tệp tin phải chứa phần mở rộng được phân tách bằng dấu chấm.</value>

</data>

<data name="FileSize_GB_Long" xml:space="preserve">

<value>Gigabytes</value>

Expand Down

Expand Up

@@ -157,7 +157,7 @@

<value>Không</value>

</data>

<data name="Yes" xml:space="preserve">

<value>Đúng</value>

<value>Có</value>

</data>

<data name="ToFuzzyTimeSinceString_Days_Since" xml:space="preserve">

<value>{0} ngày trước</value>

Expand All

@@ -172,7 +172,7 @@

<value>Một giờ trước</value>

</data>

<data name="ToFuzzyTimeSinceString_JustNow" xml:space="preserve">

<value>Ngay bây giờ</value>

<value>Vừa xong</value>

</data>

<data name="ToFuzzyTimeSinceString_Minutes_Since" xml:space="preserve">

<value>{0} phút trước</value>

Expand All

@@ -193,28 +193,28 @@

<value>Một năm trước</value>

</data>

<data name="PremadeDialogs_GenericError_Heading" xml:space="preserve">

<value>Ứng dụng gặp lỗi không mong muốn</value>

<value>Ứng dụng đã gặp phải một lỗi không mong muốn</value>

</data>

<data name="PremadeDialogs_GenericError_Title" xml:space="preserve">

<value>Lỗi không mong muốn</value>

</data>

<data name="PremadeDialogs_KillRunningProcessesQuestion_Details" xml:space="preserve">

<value>Bạn có thể mất dữ liệu chưa được lưu. Vui lòng đóng ứng dụng theo cách thủ công để tránh mất dữ liệu.</value>

<value>Bạn có thể bị mất bất kỳ dữ liệu nào chưa lưu. Để tránh mất dữ liệu, hãy đóng các ứng dụng này thủ công.</value>

</data>

<data name="PremadeDialogs_KillRunningProcessesQuestion_Message" xml:space="preserve">

<value>Bạn có chắc là muốn chấm dứt tất cả các tiến trình không?</value>

<value>Bạn có chắc chắn muốn chấm dứt tất cả các tiến trình này không?</value>

</data>

<data name="PremadeDialogs_KillRunningProcessesQuestion_Title" xml:space="preserve">

<value>Chấm dứt tiến trình đang chạy</value>

<value>Chấm dứt các tiến trình đang chạy</value>

</data>

<data name="RegistryTools_AddRegToRegistry_FileNotExist" xml:space="preserve">

<value>Đường dẫn không trỏ đến tệp .reg hợp lệ.</value>

<value>Đường dẫn không trỏ tới một tệp .reg hợp lệ</value>

</data>

<data name="RegistryTools_RemoveRegistryKey_PathEmptyNull" xml:space="preserve">

<value>Đường dẫn không được bỏ trống hoặc NULL.</value>

<value>Đường dẫn không được để trống hoặc có giá trị null</value>

</data>

<data name="RegistryTools_RemoveRegistryKey_PointsAtRoot" xml:space="preserve">

<value>Đường dẫn không thể trỏ đến khóa gốc</value>

<value>Đường dẫn không được trỏ vào một khóa gốc (root key)</value>

</data>

<data name="RegistryTools_RemoveRegistryKey_RemoveDefault" xml:space="preserve">

<value>Không thể xóa giá trị mặc định</value>

Expand All

@@ -223,35 +223,35 @@

<value>Chi tiết lỗi: </value>

</data>

<data name="PremadeDialogs_GenericError_Details" xml:space="preserve">

<value>Lỗi này không yêu cầu phải tắt ứng dụng nhưng có thể khiến một số chức năng ngừng hoạt động. Hầu hết các lỗi liên quan đến hệ thống tập tin đều có thể được bỏ qua một cách an toàn.

<value>Mặc dù lỗi này không bắt buộc ứng dụng phải đóng lại, nhưng một số chức năng có thể sẽ ngừng hoạt động. Hầu hết các lỗi liên quan đến hệ thống tệp tin (filesystem) đều có thể bỏ qua một cách an toàn.

Thông báo lỗi: {0}

Bạn có thể sao chép thông tin chi tiết về lỗi này vào bảng nhớ tạm của mình bằng cách nhấp vào nút "Sao chép". Vui lòng xem xét gửi thông tin lỗi này cho nhà phát triển.</value>

Bạn có thể sao chép thông tin chi tiết về lỗi này vào bộ nhớ tạm bằng cách nhấp vào nút "Sao chép". Hãy cân nhắc việc gửi thông tin lỗi này cho nhà phát triển để cải thiện ứng dụng.</value>

</data>

<data name="FileInfo_CreationTime" xml:space="preserve">

<value>Thời điểm Tạo</value>

<value>Thời gian tạo</value>

</data>

<data name="FileInfo_LastAccessTime" xml:space="preserve">

<value>Lần Truy cập Cuối cùng</value>

<value>Thời gian truy cập cuối</value>

</data>

<data name="FileInfo_LastWriteTime" xml:space="preserve">

<value>Lần Thay đổi Cuối cùng</value>

<value>Thời gian chỉnh sửa cuối</value>

</data>

<data name="FileInfo_Attributes" xml:space="preserve">

<value>Thuộc tính</value>

<value>Thuộc tính tệp</value>

</data>

<data name="FileInfo_IsReadOnly" xml:space="preserve">

<value>Chỉ đọc</value>

<value>Chỉ đọc (Read-only)</value>

</data>

<data name="FileInfo_FullName" xml:space="preserve">

<value>Tên đầy đủ</value>

<value>Đường dẫn đầy đủ</value>

</data>

<data name="FileInfo_FileName" xml:space="preserve">

<value>Tên Tệp tin</value>

</data>

<data name="FileInfo_Size" xml:space="preserve">

<value>Kích thước</value>

<value>Dung lượng</value>

</data>

<data name="FileInfo_Directory" xml:space="preserve">

<value>Thư mục</value>

Expand All

@@ -260,19 +260,19 @@ Bạn có thể sao chép thông tin chi tiết về lỗi này vào bảng nh

<value>Tồn tại trên ổ đĩa</value>

</data>

<data name="FileInfo_Comments" xml:space="preserve">

<value>Chú thích</value>

<value>Ghi chú</value>

</data>

<data name="FileInfo_CompanyName" xml:space="preserve">

<value>Tên Công ty</value>

<value>Tên công ty phát triển</value>

</data>

<data name="FileInfo_FileDescription" xml:space="preserve">

<value>Mô tả</value>

<value>Mô tả tệp tin</value>

</data>

<data name="FileInfo_FileVersion" xml:space="preserve">

<value>Phiên bản Tệp tin</value>

<value>Phiên bản tệp tin</value>

</data>

<data name="FileInfo_InternalName" xml:space="preserve">

<value>Tên Nội địa</value>

<value>Tên nội bộ (Internal Name)</value>

</data>

<data name="FileInfo_Language" xml:space="preserve">

<value>Ngôn ngữ</value>

Expand All

@@ -284,15 +284,15 @@ Bạn có thể sao chép thông tin chi tiết về lỗi này vào bảng nh

<value>Thương hiệu</value>

</data>

<data name="FileInfo_OriginalFilename" xml:space="preserve">

<value>Tên Tệp tin Gốc</value>

<value>Tên tệp tin gốc</value>

</data>

<data name="FileInfo_ProductName" xml:space="preserve">

<value>Tên Sản phẩm</value>

<value>Tên sản phẩm</value>

</data>

<data name="FileInfo_ProductVersion" xml:space="preserve">

<value>Phiên bản Sản phẩm</value>

<value>Phiên bản sản phẩm</value>

</data>

<data name="PremadeDialogs_GenericError_InnerExceptionTitle" xml:space="preserve">

<value>Inner:</value>

<value>Lỗi nội bộ (Inner Exception):</value>

</data>

</root>

29 changes: 27 additions & 2 deletions

29

source/KlocTools/Tools/DrawingTools.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -51,11 +51,32 @@ public static Icon ExtractAssociatedIcon(string filePath)

var index = 0;

var handle = SafeNativeMethods.ExtractAssociatedIcon(new HandleRef(null, IntPtr.Zero), iconPath, ref index);

if (handle != IntPtr.Zero)

return Icon.FromHandle(handle);

return CreateOwnedIconFromHandle(handle);

}

return null;

}

/// <summary>

/// Clone an icon handle into a managed icon instance and release the original native handle.

/// </summary>

public static Icon CreateOwnedIconFromHandle(IntPtr handle)

{

if (handle == IntPtr.Zero)

throw new ArgumentException("Icon handle must not be zero", nameof(handle));

try

{

using (var temporaryIcon = Icon.FromHandle(handle))

{

return (Icon)temporaryIcon.Clone();

}

}

finally

{

SafeNativeMethods.DestroyIcon(handle);

}

}

/// <summary>

/// This class suppresses stack walks for unmanaged code permission.

Expand All

@@ -69,6 +90,10 @@ internal static class SafeNativeMethods

{

[DllImport("shell32.dll", EntryPoint = "ExtractAssociatedIcon", CharSet = CharSet.Auto)]

internal static extern IntPtr ExtractAssociatedIcon(HandleRef hInst, StringBuilder iconPath, ref int index);

[DllImport("user32.dll", SetLastError = true)]

[return: MarshalAs(UnmanagedType.Bool)]

internal static extern bool DestroyIcon(IntPtr hIcon);

}

public static Color ColorLerp(Color from, Color to, float ratio)

Expand Down

Expand Up

@@ -136,4 +161,4 @@ public static Icon IconFromImage(Image img)

return new Icon(ms);

}

}

}

}

40 changes: 39 additions & 1 deletion

40

source/KlocTools/Tools/SerializationTools.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -7,12 +7,40 @@ Apache License Version 2.0

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Xml.Serialization;

namespace Klocman.Tools

{

public static class SerializationTools

{

public static string SanitizeInvalidXmlCharacters(string input)

{

if (string.IsNullOrEmpty(input))

return input;

StringBuilder output = null;

var consumedUtf16Chars = 0;

foreach (var rune in input.EnumerateRunes())

{

if (IsValidXmlCharacter(rune))

{

output?.Append(rune.ToString());

}

else

{

output ??= new StringBuilder(input.Length);

if (consumedUtf16Chars > 0 && output.Length == 0)

output.Append(input, 0, consumedUtf16Chars);

}

consumedUtf16Chars += rune.Utf16SequenceLength;

}

return output?.ToString() ?? input;

}

public static T DeserializeFromXml<T>(string fullFilename)

{

var serializer = new XmlSerializer(typeof(T));

Expand Down

Expand Up

@@ -60,5 +88,15 @@ public DictSerializeData(TKey key, TValue data)

public TValue Data { get; set; }

public TKey Key { get; set; }

}

private static bool IsValidXmlCharacter(Rune value)

{

return value.Value == 0x9 ||

value.Value == 0xA ||

value.Value == 0xD ||

(value.Value >= 0x20 && value.Value <= 0xD7FF) ||

(value.Value >= 0xE000 && value.Value <= 0xFFFD) ||

(value.Value >= 0x10000 && value.Value <= 0x10FFFF);

}

}

}

}

2 changes: 1 addition & 1 deletion

2

source/NBug_custom/Core/UI/WinForms/Full.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,6 +118,6 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="warningLabel.Text" xml:space="preserve">

<value>L'application a planté et elle va maintenant être rejetée. Si vous cliquez sur Quitter, l'application se fermera immédiatement. Si vous cliquez sur Envoyer et Quitter, l'application se fermera et un rapport de bogue sera envoyé.</value>

<value>L'application a planté et elle va maintenant être arrêtée. Si vous cliquez sur Quitter, l'application se fermera immédiatement. Si vous cliquez sur Envoyer et Quitter, l'application se fermera et un rapport de bogue sera envoyé.</value>

</data>

</root>

2 changes: 1 addition & 1 deletion

2

source/NBug_custom/Core/UI/WinForms/Full.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,6 +118,6 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="warningLabel.Text" xml:space="preserve">

<value>Ứng dụng đã gặp sự cố và sẽ tự động đóng. Nếu bạn nhấp chuột vào nút "Thoát", ứng dụng sẽ đóng ngay lập tức. Nếu bạn nhấp chuột vào nút "Gửi và Thoát", ứng dụng sẽ đóng và đồng thời gửi một báo cáo lỗi về sự cố này.</value>

<value>Ứng dụng đã gặp sự cố và sẽ bị đóng. Nếu bạn nhấp vào "Thoát", ứng dụng sẽ đóng ngay lập tức. Nếu bạn nhấp vào "Gửi và Thoát", ứng dụng sẽ đóng và một báo cáo lỗi sẽ được gửi đi.</value>

</data>

</root>

34 changes: 17 additions & 17 deletions

34

source/NBug_custom/Properties/Localization.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,73 +118,73 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="UI_Console_Full_Message" xml:space="preserve">

<value>Lỗi ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<value>Đã xảy ra ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<comment>Unhandled exception occurred. Closing application.</comment>

</data>

<data name="UI_Console_Minimal_Message" xml:space="preserve">

<value>Lỗi ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<value>Đã xảy ra ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<comment>Unhandled exception occurred. Closing application.</comment>

</data>

<data name="UI_Console_Normal_Message" xml:space="preserve">

<value>Lỗi ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<value>Đã xảy ra ngoại lệ chưa được xử lý. Đang đóng ứng dụng.</value>

<comment>Unhandled exception occurred. Closing application.</comment>

</data>

<data name="UI_Dialog_Full_Exception_Tab" xml:space="preserve">

<value>Ngoại lệ</value>

<value>Ngoại lệ (Exception)</value>

<comment>Exception</comment>

</data>

<data name="UI_Dialog_Full_General_Tab" xml:space="preserve">

<value>Chung</value>

<value>Tổng quan</value>

<comment>General</comment>

</data>

<data name="UI_Dialog_Full_How_to_Reproduce_the_Error_Notification" xml:space="preserve">

<value>Vui lòng cung cấp một mô tả ngắn gọn đề tái hiện lỗi: </value>

<value>Vui lòng thêm mô tả ngắn gọn về cách chúng tôi có thể tái hiện lại lỗi này:</value>

<comment>Please add a brief description of how we can reproduce the error:</comment>

</data>

<data name="UI_Dialog_Full_Message" xml:space="preserve">

<value>Ứng dụng đã gặp sự cố và sẽ tự động đóng. Nếu bạn nhấp chuột vào nút "Thoát", ứng dụng sẽ đóng ngay lập tức. Nếu bạn nhấp chuột vào nút "Gửi và Thoát", ứng dụng sẽ đóng và đồng thời gửi một báo cáo lỗi về sự cố này.</value>

<value>Ứng dụng đã gặp sự cố và sẽ bị đóng. Nếu bạn nhấp vào "Thoát", ứng dụng sẽ đóng ngay lập tức. Nếu bạn nhấp vào "Gửi và Thoát", ứng dụng sẽ đóng và một báo cáo lỗi sẽ được gửi đi.</value>

<comment>The application has crashed and it will now be dismissed. If you click Quit, the application will close immediately. If you click Send and Quit, the application will close and a bug report will be send.</comment>

</data>

<data name="UI_Dialog_Full_Quit_Button" xml:space="preserve">

<value>&amp;Thoát</value>

<value>Thoát (&amp;Q)</value>

<comment>&amp;Quit</comment>

</data>

<data name="UI_Dialog_Full_Report_Contents_Tab" xml:space="preserve">

<value>Nội dung báo cáo</value>

<comment>Report Contents</comment>

</data>

<data name="UI_Dialog_Full_Send_and_Quit_Button" xml:space="preserve">

<value>&amp;Gửi và thoát</value>

<value>Gửi và thoát (&amp;S)</value>

<comment>&amp;Send and Quit</comment>

</data>

<data name="UI_Dialog_Full_Title" xml:space="preserve">

<value>Lỗi</value>

<value>Lỗi (Error)</value>

<comment>Error</comment>

</data>

<data name="UI_Dialog_Minimal_Message" xml:space="preserve">

<value>Ứng dụng đã gặp sự cố và sẽ bị đóng lại.

Một báo cáo lỗi đã được gửi đến nhà phát triển. Chúng tôi chân thành xin lỗi vì sự bất tiện này.</value>

<value>Ứng dụng đã gặp lỗi và sẽ bị đóng ngay bây giờ.

Một báo cáo lỗi đã được gửi tới các nhà phát triển. Chúng tôi thành thật xin lỗi vì sự bất tiện này.</value>

<comment>The application has crashed and it will now be dismissed.

A bug report has been sent to the developers. We apologize for the inconvenience.</comment>

</data>

<data name="UI_Dialog_Minimal_Title" xml:space="preserve">

<value>Lỗi</value>

<value>Lỗi (Error)</value>

<comment>Error</comment>

</data>

<data name="UI_Dialog_Normal_Continue_Button" xml:space="preserve">

<value>Tiế&amp;p tục</value>

<value>Tiếp tục (&amp;C)</value>

<comment>&amp;Continue</comment>

</data>

<data name="UI_Dialog_Normal_Message" xml:space="preserve">

<value>Đã xảy ra một lỗi ngoại lệ chưa được xử lý trong ứng dụng. Nếu bạn chọn "Tiếp tục", ứng dụng sẽ bỏ qua lỗi này và cố gắng tiếp tục chạy. Nếu bạn chọn "Thoát", ứng dụng sẽ đóng ngay lập tức.</value>

<value>Đã xảy ra một ngoại lệ chưa được xử lý trong ứng dụng. Nếu bạn nhấn "Tiếp tục", ứng dụng sẽ bỏ qua lỗi này và cố gắng chạy tiếp. Nếu bạn nhấn "Thoát", ứng dụng sẽ đóng ngay lập tức.</value>

<comment>.</comment>

</data>

<data name="UI_Dialog_Normal_Quit_Button" xml:space="preserve">

<value>&amp;Thoát</value>

<value>Thoát (&amp;Q)</value>

<comment>&amp;Quit</comment>

</data>

<data name="UI_Dialog_Normal_Title" xml:space="preserve">

<value>Lỗi</value>

<value>Lỗi (Error)</value>

<comment>Error</comment>

</data>

</root>

13 changes: 13 additions & 0 deletions

13

source/ObjectListView/ObjectListView.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -6251,6 +6251,19 @@ protected override void WndProc(ref Message m)

}

}

protected override void OnGotFocus(EventArgs e)

{

try

{

base.OnGotFocus(e);

}

catch (InvalidOperationException)

{

// HACK: Eat InvalidOperationException coming from System.Windows.Forms.ListViewGroup.ListViewGroupAccessibleObject..ctor

// For some reason this started happening despite no code changes in ObjectListView. It seems to be caused by the move to newer .NET

}

}

/// <summary>

/// Handle the search for item m if possible.

/// </summary>

Expand Down

2 changes: 1 addition & 1 deletion

2

source/OculusHelper/OculusHelper.csproj

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -13,6 +13,6 @@

<ItemGroup>

<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />

<PackageReference Include="System.ServiceProcess.ServiceController" Version="10.0.3" />

<PackageReference Include="System.ServiceProcess.ServiceController" Version="[8.*,9)" />

</ItemGroup>

</Project>

113 changes: 96 additions & 17 deletions

113

source/UninstallTools/ApplicationEntrySerializer.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -3,18 +3,36 @@

Apache License Version 2.0

*/

using System.Collections.Generic;

using System.Linq;

using Klocman.Tools;

namespace UninstallTools

{

public sealed class ApplicationEntrySerializer

{

public static void SerializeApplicationEntries(string filename, IEnumerable<ApplicationUninstallerEntry> items)

{

SerializationTools.SerializeToXml(filename, new ApplicationEntrySerializer(items));

}

using System.Collections.Generic;

using System.Linq;

using System.Reflection;

using Klocman.Tools;

namespace UninstallTools

{

public sealed class ApplicationEntrySerializer

{

private static readonly PropertyInfo[] SanitizableProperties = typeof(ApplicationUninstallerEntry)

.GetProperties(BindingFlags.Instance | BindingFlags.Public)

.Where(x => x.CanRead && x.CanWrite && x.GetIndexParameters().Length == 0 &&

(x.PropertyType == typeof(string) || x.PropertyType == typeof(string[])))

.ToArray();

private static readonly MethodInfo MemberwiseCloneMethod = typeof(object)

.GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic);

private static readonly FieldInfo[] SanitizableFields = typeof(ApplicationUninstallerEntry)

.GetFields(BindingFlags.Instance | BindingFlags.Public)

.Where(x => x.FieldType == typeof(string) || x.FieldType == typeof(string[]))

.ToArray();

public static void SerializeApplicationEntries(string filename, IEnumerable<ApplicationUninstallerEntry> items)

{

var sanitizedItems = items?

.Select(CloneAndSanitizeForXmlExport)

.ToList() ?? new List<ApplicationUninstallerEntry>();

SerializationTools.SerializeToXml(filename, new ApplicationEntrySerializer(sanitizedItems));

}

public ApplicationEntrySerializer(IEnumerable<ApplicationUninstallerEntry> items)

{

Expand All

@@ -24,8 +42,69 @@ public ApplicationEntrySerializer(IEnumerable<ApplicationUninstallerEntry> items

// Needed for serialization

public ApplicationEntrySerializer()

{

}

public List<ApplicationUninstallerEntry> Items { get; set; }

}

}

}

public List<ApplicationUninstallerEntry> Items { get; set; }

private static ApplicationUninstallerEntry CloneAndSanitizeForXmlExport(ApplicationUninstallerEntry item)

{

if (item == null)

return null;

var clone = (ApplicationUninstallerEntry)MemberwiseCloneMethod.Invoke(item, null);

SanitizeForXmlExport(clone);

return clone;

}

private static void SanitizeForXmlExport(ApplicationUninstallerEntry item)

{

foreach (var property in SanitizableProperties)

{

if (property.PropertyType == typeof(string))

{

var currentValue = property.GetValue(item) as string;

var sanitizedValue = SerializationTools.SanitizeInvalidXmlCharacters(currentValue);

if (!string.Equals(currentValue, sanitizedValue, System.StringComparison.Ordinal))

property.SetValue(item, sanitizedValue);

}

else if (property.PropertyType == typeof(string[]))

{

var currentValue = property.GetValue(item) as string[];

if (currentValue == null)

continue;

var sanitizedValue = currentValue

.Select(SerializationTools.SanitizeInvalidXmlCharacters)

.ToArray();

if (!currentValue.SequenceEqual(sanitizedValue, System.StringComparer.Ordinal))

property.SetValue(item, sanitizedValue);

}

}

foreach (var field in SanitizableFields)

{

if (field.FieldType == typeof(string))

{

var currentValue = field.GetValue(item) as string;

var sanitizedValue = SerializationTools.SanitizeInvalidXmlCharacters(currentValue);

if (!string.Equals(currentValue, sanitizedValue, System.StringComparison.Ordinal))

field.SetValue(item, sanitizedValue);

}

else if (field.FieldType == typeof(string[]))

{

var currentValue = field.GetValue(item) as string[];

if (currentValue == null)

continue;

var sanitizedValue = currentValue

.Select(SerializationTools.SanitizeInvalidXmlCharacters)

.ToArray();

if (!currentValue.SequenceEqual(sanitizedValue, System.StringComparer.Ordinal))

field.SetValue(item, sanitizedValue);

}

}

}

}

}

25 changes: 15 additions & 10 deletions

25

source/UninstallTools/ApplicationUninstallerEntry.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -177,15 +177,20 @@ public string InstallSource

/// <summary>

/// True if this is an update for another product

/// </summary>

[ComparisonTarget]

[LocalisedName(typeof(Localisation), nameof(Localisation.IsUpdate))]

public bool IsUpdate { get; set; }

/// <summary>

/// True if the application can be uninstalled. False if the uninstaller is missing or is otherwise invalid.

/// </summary>

[ComparisonTarget]

[LocalisedName(typeof(Localisation), nameof(Localisation.IsValid))]

[ComparisonTarget]

[LocalisedName(typeof(Localisation), nameof(Localisation.IsUpdate))]

public bool IsUpdate { get; set; }

[XmlIgnore]

[ComparisonTarget]

public bool IsScriptTweak => !string.IsNullOrEmpty(RatingId) &&

RatingId.StartsWith("Tweak-", StringComparison.OrdinalIgnoreCase);

/// <summary>

/// True if the application can be uninstalled. False if the uninstaller is missing or is otherwise invalid.

/// </summary>

[ComparisonTarget]

[LocalisedName(typeof(Localisation), nameof(Localisation.IsValid))]

public bool IsValid { get; set; }

/// <summary>

Expand Down

Expand Up

@@ -523,4 +528,4 @@ private static string CleanupPath(string path, bool isFilename = false)

return path.TrimEnd('\\');

}

}

}

}

6 changes: 3 additions & 3 deletions

6

source/UninstallTools/Controls/FilterEditor.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,15 +118,15 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="labelText.Text" xml:space="preserve">

<value>Văn bản lọc</value>

<value>Từ khoá lọc</value>

</data>

<data name="label2.Text" xml:space="preserve">

<value>Phương thức so sánh</value>

</data>

<data name="label1.Text" xml:space="preserve">

<value>Thuộc tính mục tiêu</value>

<value>Thuộc tính áp dụng</value>

</data>

<data name="checkBoxInvert.Text" xml:space="preserve">

<value>Đảo ngược kết quả</value>

<value>Đảo ngược kết quả lọc</value>

</data>

</root>

20 changes: 10 additions & 10 deletions

20

source/UninstallTools/Controls/UninstallListEditor.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -121,16 +121,16 @@

<value>Tên bộ lọc</value>

</data>

<data name="columnHeaderType.Text" xml:space="preserve">

<value>Kiểu</value>

<value>Loại bộ lọc</value>

</data>

<data name="columnHeaderConditions.Text" xml:space="preserve">

<value>Điều kiện</value>

<value>Các điều kiện lọc</value>

</data>

<data name="toolStripButtonAddFilter.Text" xml:space="preserve">

<value>Thêm</value>

</data>

<data name="toolStripButtonRemoveFilter.Text" xml:space="preserve">

<value>Loại bỏ</value>

<value>Xoá</value>

</data>

<data name="toolStripButtonAddFiltersFromList.Text" xml:space="preserve">

<value>Thêm từ danh sách...</value>

Expand All

@@ -139,13 +139,13 @@

<value>Danh sách bộ lọc</value>

</data>

<data name="labelFilterType.Text" xml:space="preserve">

<value>Kiểu: </value>

<value>Loại:</value>

</data>

<data name="comboBoxFilterType.Items" xml:space="preserve">

<value>Bao gôm</value>

<value>Bao gồm</value>

</data>

<data name="comboBoxFilterType.Items1" xml:space="preserve">

<value>Ngoại trừ</value>

<value>Loại trừ</value>

</data>

<data name="labelFilterName.Text" xml:space="preserve">

<value>Tên: </value>

Expand All

@@ -157,18 +157,18 @@

<value>Thêm</value>

</data>

<data name="toolStripButtonRemoveCondition.Text" xml:space="preserve">

<value>Loại bỏ</value>

<value>Xoá</value>

</data>

<data name="groupBoxConditions.Text" xml:space="preserve">

<value>Điều kiện bộ lọc</value>

<value>Các điều kiện lọc</value>

</data>

<data name="groupBoxConditionEditor.Text" xml:space="preserve">

<value>Trình chỉnh sửa điều kiện</value>

</data>

<data name="openFileDialog.Filter" xml:space="preserve">

<value>Danh sách bộ lọc gỡ cài đặt (*.bcul)|*.bcul|Tất cả tệp|*.*</value>

<value>Danh sách bộ lọc gỡ cài đặt (*.bcul)|*.bcul|Tất cả các tệp|*.*</value>

</data>

<data name="openFileDialog.Title" xml:space="preserve">

<value>Làm mới danh sách bộ lọc gỡ cài đặt</value>

<value>Mở danh sách bộ lọc gỡ cài đặt</value>

</data>

</root>

13 changes: 7 additions & 6 deletions

13

source/UninstallTools/Dialogs/StartupManagerWindow.fr.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,19 +118,20 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="comboBoxFilter.Items" xml:space="preserve">

<value>Montrer tout</value>

<value>Afficher tout</value>

</data>

<data name="comboBoxFilter.Items1" xml:space="preserve">

<value>Montrer les entrées de démarrage</value>

<value>Afficher les entrées de démarrage</value>

</data>

<data name="comboBoxFilter.Items2" xml:space="preserve">

<value>Montrer les tâches</value>

<value>Afficher les tâches</value>

</data>

<data name="comboBoxFilter.Items3" xml:space="preserve">

<value>Montrer les extensions de navigateur</value>

<value>Afficher les extensions de navigateur</value>

</data>

<data name="buttonRefresh.Text" xml:space="preserve">

<value>Rafraîchir</value>

<comment>更新</comment>

</data>

<data name="buttonCancel.Text" xml:space="preserve">

<value>Fermer</value>

Expand All

@@ -139,7 +140,7 @@

<value>Exporter...</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Commandes se lançant pendant le démarrage du système ou la connection</value>

<value>Liste de commandes pouvant s'exécuter automatiquement sans intervention uyilisateur</value>

</data>

<data name="columnHeader1.Text" xml:space="preserve">

<value>Nom du programme</value>

Expand Down

Expand Up

@@ -175,7 +176,7 @@

<value>Déplacer vers le registre</value>

</data>

<data name="runForAllUsersToolStripMenuItem.Text" xml:space="preserve">

<value>Tout utilisateur</value>

<value>Lancer pour tous utilisateurs</value>

</data>

<data name="enableToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Activé</value>

Expand Down

43 changes: 22 additions & 21 deletions

43

source/UninstallTools/Dialogs/StartupManagerWindow.vi.resx

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -118,22 +118,23 @@

<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

</resheader>

<data name="comboBoxFilter.Items" xml:space="preserve">

<value>Hiển thị tất cả</value>

<value>Hiển thị tất cả mọi thứ</value>

</data>

<data name="comboBoxFilter.Items1" xml:space="preserve">

<value>Hiển thị các mục khởi động cùng hệ thống</value>

<value>Hiển thị các mục khởi động cùng hệ thống (Startup)</value>

</data>

<data name="comboBoxFilter.Items2" xml:space="preserve">

<value>Hiển thị các tác vụ</value>

<value>Hiển thị các tác vụ lịch trình (Tasks)</value>

</data>

<data name="comboBoxFilter.Items3" xml:space="preserve">

<value>Hiển thị các các tiện ích mở rộng của trình duyệt</value>

<value>Hiển thị các tiện ích mở rộng trình duyệt (Extensions)</value>

</data>

<data name="comboBoxFilter.Items4" xml:space="preserve">

<value>Hiển thị các dịch vụ</value>

<value>Hiển thị các dịch vụ hệ thống (Services)</value>

</data>

<data name="buttonRefresh.Text" xml:space="preserve">

<value>Làm mới</value>

<value>Tải lại</value>

<comment>更新</comment>

</data>

<data name="buttonCancel.Text" xml:space="preserve">

<value>Đóng</value>

Expand All

@@ -142,10 +143,10 @@

<value>Xuất...</value>

</data>

<data name="columnHeader1.Text" xml:space="preserve">

<value>Tên chường trình</value>

<value>Tên chương trình</value>

</data>

<data name="columnHeader5.Text" xml:space="preserve">

<value>Đã kích hoạt</value>

<value>Đang bật</value>

</data>

<data name="columnHeader2.Text" xml:space="preserve">

<value>Nhà phát hành</value>

Expand All

@@ -154,48 +155,48 @@

<value>Vị trí</value>

</data>

<data name="columnHeader4.Text" xml:space="preserve">

<value>Câu lệnh</value>

<value>Lệnh thực thi</value>

</data>

<data name="openFileLocationToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Mở vị trí tệp thực thi</value>

<value>Mở vị trí tệp thực thi (&amp;O)</value>

</data>

<data name="openLinkLocationToolStripMenuItem.Text" xml:space="preserve">

<value>Mở liên kết</value>

<value>Mở vị trí liên kết (Shortcut)</value>

</data>

<data name="runCommandToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Thực thi câu lệnh</value>

<value>Chạy lệnh này (&amp;R)</value>

</data>

<data name="copyToClipboardToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Sao chép vào bảng nhớ tạm</value>

<value>Sao chép vào bảng nhớ tạm (&amp;C)</value>

</data>

<data name="createBackupToolStripMenuItem.Text" xml:space="preserve">

<value>Tạo &amp;bản sao lưu</value>

<value>Tạo bản sao lưu (&amp;B)</value>

</data>

<data name="moveToRegistryToolStripMenuItem.Text" xml:space="preserve">

<value>Di chuyển đến registry</value>

<value>Chuyển vào Registry</value>

</data>

<data name="runForAllUsersToolStripMenuItem.Text" xml:space="preserve">

<value>Chạy cho tất cả người dùng</value>

</data>

<data name="enableToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Kích hoạt</value>

<value>Kích hoạt (&amp;E)</value>

</data>

<data name="deleteToolStripMenuItem.Text" xml:space="preserve">

<value>&amp;Xoá</value>

<value>Xoá (&amp;D)</value>

</data>

<data name="groupBox1.Text" xml:space="preserve">

<value>Danh sách các câu lệnh có thể được thực thi tự động mà không cần sự can thiệp của người dùng</value>

<value>Danh sách các lệnh có thể tự động thực thi mà không cần sự can thiệp của người dùng</value>

</data>

<data name="exportDialog.Filter" xml:space="preserve">

<value>Tệp văn bản|*.txt</value>

</data>

<data name="exportDialog.Title" xml:space="preserve">

<value>Xuất các mục khởi động cùng hệ thống...</value>

<value>Xuất các mục khởi động...</value>

</data>

<data name="folderBrowserDialog.Description" xml:space="preserve">

<value>Chọn một thư mục trống để sao lưu.</value>

<value>Vui lòng chọn một thư mục trống để lưu bản sao lưu.</value>

</data>

<data name="$this.Text" xml:space="preserve">

<value>Trình quản lý Khởi động cùng hệ thống</value>

<value>Trình quản lý khởi động (Startup Manager)</value>

</data>

</root>

87 changes: 48 additions & 39 deletions

87

source/UninstallTools/Factory/InfoAdders/FastSizeGenerator.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -31,18 +31,18 @@ static FastSizeGenerator()

Trace.WriteLine(@"FastSizeGenerator: Scripting.FileSystemObjectClass is not available - " + ex.Message);

}

try

{

if (EvGetSize(UninstallToolsGlobalConfig.AssemblyLocation).GetKbSize() == 0)

throw new SystemException("Test failed to get valid BCU directory size");

_everythingAvailable = true;

}

catch (SystemException ex)

{

_everythingAvailable = false;

Trace.WriteLine(@"FastSizeGenerator: Everything search engine is not available - " + ex.Message);

}

try

{

if (EvGetSize(UninstallToolsGlobalConfig.AssemblyLocation).GetKbSize() == 0)

throw new SystemException("Test failed to get valid BCU directory size");

_everythingAvailable = true;

}

catch (Exception ex)

{

_everythingAvailable = false;

Trace.WriteLine(@"FastSizeGenerator: Everything search engine is not available - " + ex.Message);

}

}

public void AddMissingInformation(ApplicationUninstallerEntry target)

Expand Down

Expand Up

@@ -99,44 +99,53 @@ private static async Task<string> StartHelperAndReadOutput(string args)

var esPath = Path.Combine(UninstallToolsGlobalConfig.AssemblyLocation, "es.exe");

if (!File.Exists(esPath)) throw new FileNotFoundException();

using (var process = Process.Start(new ProcessStartInfo(esPath, args)

{

UseShellExecute = false,

RedirectStandardOutput = true,

RedirectStandardError = false,

CreateNoWindow = true,

StandardOutputEncoding = Encoding.UTF8

}))

{

if (process == null) throw new InvalidOperationException("Could not start a new process");

var timeoutTask = Task.Delay(TimeSpan.FromSeconds(40));

var readOutputTask = process.StandardOutput.ReadToEndAsync();

await Task.WhenAny(readOutputTask, timeoutTask);

if (!readOutputTask.IsCompleted)

{

using (var process = Process.Start(new ProcessStartInfo(esPath, args)

{

UseShellExecute = false,

RedirectStandardOutput = true,

RedirectStandardError = true,

CreateNoWindow = true,

StandardOutputEncoding = Encoding.UTF8

}))

{

if (process == null) throw new InvalidOperationException("Could not start a new process");

var timeoutTask = Task.Delay(TimeSpan.FromSeconds(40));

var readOutputTask = process.StandardOutput.ReadToEndAsync();

var readErrorTask = process.StandardError.ReadToEndAsync();

await Task.WhenAny(readOutputTask, timeoutTask);

if (!readOutputTask.IsCompleted)

{

try

{

process.Kill();

}

catch

{

// Ignore exceptions from killing the process

}

throw new TimeoutException("es.exe appears to have hung");

}

if (process.ExitCode == 0) return await readOutputTask;

throw new IOException("es.exe failed to connect to Everything", process.ExitCode);

}

}

}

throw new TimeoutException("es.exe appears to have hung");

}

var output = await readOutputTask;

var errorOutput = await readErrorTask;

process.WaitForExit();

if (process.ExitCode == 0) return output;

var message = string.IsNullOrWhiteSpace(errorOutput)

? "es.exe failed to connect to Everything"

: "es.exe failed to connect to Everything: " + errorOutput.Trim();

throw new IOException(message, process.ExitCode);

}

}

public string[] RequiredValueNames { get; } = { nameof(ApplicationUninstallerEntry.InstallLocation) };

public bool RequiresAllValues { get; } = true;

public bool AlwaysRun { get; } = false;

public string[] CanProduceValueNames { get; } = { nameof(ApplicationUninstallerEntry.EstimatedSize) };

public InfoAdderPriority Priority { get; } = InfoAdderPriority.RunLast;

}

}

}

2 changes: 1 addition & 1 deletion

2

source/UninstallTools/Factory/InfoAdders/InstallDateAdder.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -17,7 +17,7 @@ public void AddMissingInformation(ApplicationUninstallerEntry target)

if (File.Exists(target.UninstallerFullFilename))

target.InstallDate = File.GetCreationTime(target.UninstallerFullFilename);

else if (Directory.Exists(target.InstallLocation))

target.InstallDate = Directory.GetCreationTime(target.InstallLocation);

target.InstallDate = Directory.GetLastWriteTime(target.InstallLocation);

}

catch

{

Expand Down

65 changes: 41 additions & 24 deletions

65

source/UninstallTools/Factory/RegistryFactory.cs

Show comments

View file

Edit file

Delete file

Original file line number

Diff line number

Diff line change

Expand Up

@@ -55,18 +55,27 @@ public IList<ApplicationUninstallerEntry> GetUninstallerEntries(ListGenerationPr

{

var uninstallerRegistryKeys = new List<KeyValuePair<RegistryKey, bool>>();

progressCallback(new ListGenerationProgress(0, -1, Localisation.Progress_Registry_Gathering));

foreach (var kvp in GetParentRegistryKeys())

{

uninstallerRegistryKeys.AddRange(

kvp.Key.GetSubKeyNames()

.Select(subkeyName => OpenSubKeySafe(kvp.Key, subkeyName))

.Where(subkey => subkey != null)

.Select(subkey => new KeyValuePair<RegistryKey, bool>(subkey, kvp.Value)));

kvp.Key.Close();

}

progressCallback(new ListGenerationProgress(0, -1, Localisation.Progress_Registry_Gathering));

foreach (var kvp in GetParentRegistryKeys())

{

try

{

uninstallerRegistryKeys.AddRange(

kvp.Key.GetSubKeyNames()

.Select(subkeyName => OpenSubKeySafe(kvp.Key, subkeyName))

.Where(subkey => subkey != null)

.Select(subkey => new KeyValuePair<RegistryKey, bool>(subkey, kvp.Value)));

}

catch (Exception ex) when (ex is SecurityException or UnauthorizedAccessException or IOException)

{

Trace.WriteLine($@"Failed to enumerate registry key {kvp.Key.Name} - {ex}");

}

finally

{

kvp.Key.Close();

}

}

void WorkLogic(KeyValuePair<RegistryKey, bool> data, List<ApplicationUninstallerEntry> state)

{

Expand Down

Expand Up

@@ -252,17 +261,25 @@ private static bool GetProtectedFlag(RegistryKey uninstallerKey)

return Convert.ToInt32(uninstallerKey.GetValue("NoRemove", 0)) != 0;

}

private static RegistryKey OpenSubKeySafe(RegistryKey baseKey, string name, bool writable = false)

{

try

{

return baseKey.OpenSubKey(name, writable);

}

catch (SecurityException)

{

return null;

}

}

private static RegistryKey OpenSubKeySafe(RegistryKey baseKey, string name, bool writable = false)

{

try

{

return baseKey.OpenSubKey(name, writable);

}

catch (SecurityException)

{

return null;

}

catch (UnauthorizedAccessException)

{

return null;

}

catch (IOException)

{

return null;

}

}

private static IEnumerable<KeyValuePair<RegistryKey, bool>> GetParentRegistryKeys()

{

Expand Down

Expand Up

@@ -366,4 +383,4 @@ private ApplicationUninstallerEntry TryCreateFromRegistry(RegistryKey uninstalle

return tempEntry;

}

}

}

}

91 changes: 88 additions & 3 deletions

91

source/UninstallTools/Factory/ScoopFactory.cs

Show comments

View file

Edit file

Delete file

Load diff

128 changes: 101 additions & 27 deletions

128

source/UninstallTools/Lists/UninstallList.cs

Show comments

View file

Edit file

Delete file

Load diff

19 changes: 11 additions & 8 deletions

19

source/UninstallTools/Properties/Localisation.fr.resx

Show comments

View file

Edit file

Delete file

Load diff

10 changes: 10 additions & 0 deletions

10

source/UninstallTools/Properties/Localisation.hu.resx

Show comments

View file

Edit file

Delete file

Load diff

181 changes: 92 additions & 89 deletions

181

source/UninstallTools/Properties/Localisation.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

2 changes: 1 addition & 1 deletion

2

source/UninstallTools/UninstallTools.csproj

Show comments

View file

Edit file

Delete file

Load diff

10 changes: 10 additions & 0 deletions

10

source/UninstallTools/Uninstaller/NoWayToUninstallException.cs

Show comments

View file

Edit file

Delete file

Load diff

15 changes: 7 additions & 8 deletions

15

source/UninstallTools/Uninstaller/UninstallManager.cs

Show comments

View file

Edit file

Delete file

Load diff

9 changes: 9 additions & 0 deletions

9

source/UninstallerAutomatizer/Forms/MainWindow.hu.resx

Show comments

View file

Edit file

Delete file

Load diff

2 changes: 1 addition & 1 deletion

2

source/UninstallerAutomatizer/Forms/MainWindow.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

217 changes: 217 additions & 0 deletions

217

source/UninstallerAutomatizer/Properties/Localization.hu.resx

Show comments

View file

Edit file

Delete file

Load diff

44 changes: 22 additions & 22 deletions

44

source/UninstallerAutomatizer/Properties/Localization.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

2 changes: 1 addition & 1 deletion

2

source/UninstallerAutomatizer/UninstallerAutomatizer.csproj

Show comments

View file

Edit file

Delete file

Load diff

3 changes: 3 additions & 0 deletions

3

source/UniversalUninstaller/Properties/Localisation.hu.resx

Show comments

View file

Edit file

Delete file

Load diff

4 changes: 2 additions & 2 deletions

4

source/UniversalUninstaller/Properties/Localisation.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

2 changes: 1 addition & 1 deletion

2

source/UniversalUninstaller/TargetList.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

18 changes: 9 additions & 9 deletions

18

source/UniversalUninstaller/UninstallSelection.cs

Show comments

View file

Edit file

Delete file

Load diff

4 changes: 2 additions & 2 deletions

4

source/UniversalUninstaller/UninstallSelection.vi.resx

Show comments

View file

Edit file

Delete file

Load diff

Toggle all file notes

Toggle all file annotations

Footer

© 2026 GitHub, Inc.

Footer navigation

Terms

Privacy

Security

Status

Community

Docs

Contact

Manage cookies

Do not share my personal information