Skip to content

fix(windows): declare PerMonitorV2 DPI awareness so the GUI isn't bitmap-scaled at non-100% scaling - #780

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/windows-permon-dpi-awareness
May 31, 2026
Merged

fix(windows): declare PerMonitorV2 DPI awareness so the GUI isn't bitmap-scaled at non-100% scaling#780
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/windows-permon-dpi-awareness

Conversation

@got3nks

@got3nks got3nks commented May 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #777. The Windows build embeds wx's default manifest via #include <wx/msw/wx.rc> in amule.rc, which declares only "System DPI aware". On any non-system per-monitor DPI (e.g. 150% global scaling, multi-monitor setups with mixed scales) Windows applies its bitmap-scaling compatibility shim and the GUI renders blurry — exactly the screenshot in #777.

Fix

Embed an explicit application manifest declaring PerMonitorV2 (Win10 1703+) with a PerMonitor fallback via <dpiAwareness>, plus the legacy <dpiAware>True/PM</dpiAware> for older Windows that doesn't honour the 2016 manifest namespace. Both forms are inert when not understood, so layering them is safe.

amule.rc pulls our manifest in before wx.rc, so the RC compiler keeps our resource (ID 1, type 24) and ignores wx's duplicate; wxUSE_RC_MANIFEST=0 additionally tells wx not to emit one on toolchains that respect the knob.

Themed Common-Controls v6 (which wx.rc's manifest normally requests) is now declared in our manifest, since we're replacing wx's entirely.

Scope

  • amule.manifest — new file
  • amule.rc — embed the manifest before wx.rc, set the wx knob

Only the WIN32 targets that include amule.rc are affected (amule monolithic and amulegui). amuled / amulecmd / amuleweb are non-GUI and don't pull in the resource file.

Caveats

PerMonitorV2 only fixes the desktop manager's bitmap-scaling shim. wxWidgets 3.2's per-monitor DPI support is best-effort — layouts using hardcoded pixel sizes in muuli_wdr (e.g. the two sites adjusted in #737) may still look slightly off at high scales. That's follow-up work if it shows up.

Test plan

  • amule.manifest parses as well-formed XML
  • Build the Windows artifact (requires the Windows VM, currently off — verification deferred to reporters or next VM build)
  • Field verification by @ngosang and/or @mifritscher2 on 150% scaling — the originally reported repro

I can't compile-test the resource locally on macOS (windres / mingw-only). Asking the reporters to test once a built artifact is available.

              bitmap-scaled at non-100% display scaling (amule-project#777)

ngosang reported the aMule GUI rendering blurry on a 150% Windows
display scale.  Diagnosis confirmed by mifritscher2: amule.rc just
pulls in wx.rc's default manifest, which declares only "system DPI
aware" -- so Windows applies its bitmap-scaling compatibility shim
on any non-system per-monitor DPI, producing the smeared text and
controls in the screenshot.

Embed an explicit manifest declaring PerMonitorV2 (Win10 1703+) with
a PerMonitor fallback via the modern <dpiAwareness> entry, plus the
legacy <dpiAware>True/PM</dpiAware> for older Win10 builds and
pre-Win10 hosts that don't honour the 2016 namespace.  Both forms
are inert when not understood, so layering them is safe.

amule.rc:
  - Embed our manifest as resource ID 1 type 24 *before* the wx.rc
    include so the RC compiler keeps the first definition and
    ignores wx's duplicate.
  - Define wxUSE_RC_MANIFEST=0 to also tell wx not to emit one on
    toolchains that respect this knob.

The Common-Controls v6 dependency (themed visual styles) that wx.rc
normally provides is now expressed in our manifest, since we're
replacing wx's entirely.

Caveats:
  - PerMonitorV2 only fixes the Windows desktop manager's bitmap-
    scaling shim.  wxWidgets 3.2's per-monitor DPI support is
    best-effort: layouts driven by hardcoded pixel sizes in
    muuli_wdr (see amule-project#737 for two examples we've already adjusted)
    may still look slightly off at high scales, and would be
    follow-up work.
  - Only affects the WIN32 build targets that include amule.rc
    (amule monolithic and amulegui).  amuled / amulecmd / amuleweb
    are non-GUI and don't pull in the .rc.
@mrjimenez
mrjimenez merged commit a2968c3 into amule-project:master May 31, 2026
7 checks passed
mrjimenez pushed a commit that referenced this pull request May 31, 2026
#780 added an explicit application manifest for amule.exe so the
main GUI renders with themed Common Controls v6 (and survives
non-100% DPI scaling).  alc.exe and wxcas.exe weren't covered:
their .rc files (alc.rc / wxcas.rc) only did
`#include "wx/msw/wx.rc"`, and the manifest wxWidgets emits in
that header on our MinGW/CLANGARM64 build chain doesn't declare
the Microsoft.Windows.Common-Controls v6 dependency.  Result is
the classic Win95-style unthemed widgets reported in #792.

Verified empirically against the packaging-run artefacts: the
manifest embedded in alc.exe / wxcas.exe today contains only
trustInfo + the supportedOS compat list, while amule.exe has the
full Common-Controls + dpiAwareness block from amule.manifest.

A second pre-existing bug: alc.rc and wxcas.rc were sitting in
the tree but never compiled — CMake's target_sources only listed
${CMAKE_BINARY_DIR}/version.rc, so the wx.rc include they
contain was dead code.  This commit fixes that by adding the
.rc files to target_sources for the alc and wxcas targets;
alcc is CLI (wxUSE_GUI=0) so doesn't need the manifest.

Mirrors #780's pattern exactly: a per-binary .manifest file
embedded at resource ID 1 / type 24, with wxUSE_RC_MANIFEST=0
to prevent wx.rc from duplicating the slot.  Each manifest
sets assemblyIdentity name to "amule-project.alc" /
"amule-project.wxcas" for accurate side-by-side metadata.
@got3nks
got3nks deleted the fix/windows-permon-dpi-awareness branch June 3, 2026 14:16
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
mrjimenez pushed a commit that referenced this pull request Jun 4, 2026
Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for #785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), #794 (.dmg
  amuleweb path), #789 (<OS>-<arch> artifact naming), #780 / #796
  (Windows DPI + comctl32 manifest), #784 (FHS share/amule paths).

- Bug Fixes & Stability: post-#744 fixes including EC notification
  leak (#797), big-library scaling (#736, #840 superseding #728),
  amulegui ghost entries (#810, #819, #841, #824, #830, #760),
  PartFile early hash (#762), server protocol fixes (#835, #788,
  #721, #787), crypto stream UB (#779), UAF prevention (#756),
  Kad rotation (#795, #799/#805), GTK warning silencing (#833,
  #826/#836), and the clang-tidy worklist (#770, #772-#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (#753/#754/#776), Galician (#763), Slovenian (#771), pt-BR
  (#768/#775/#812), French (#811), plus man-page tooling for
  date+version drift (#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (#817/#818/#821/#828/#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with #746-#845 + #841.
got3nks referenced this pull request in amule-org/amule Jul 4, 2026
* fix(gui): scale main-toolbar icons on hi-DPI displays

The toolbar icons (Downloads, Shared Files, etc.) were stored in a
fixed 32x32 wxImageList and handed to wxToolBar as plain wxBitmaps.
Since the executable declares PerMonitorV2 DPI awareness (#780), those
bitmaps are drawn at 32 *physical* pixels, so on 4K / scaled displays
the icons render tiny and blurry while the rest of the UI scales.

Store each toolbar icon as a wxBitmapBundle instead (wx >= 3.2),
built from the original 32px art plus a wxIMAGE_QUALITY_HIGH 2x
upscale, converting the transparency mask to an alpha channel first
so the scaler doesn't smear the mask colour into the icon edges.
Drop the hard-coded SetToolBitmapSize(32,32) so the toolbar derives
the logical size from the bundles and scales it per monitor DPI.

SetMessagesTool gains a bounds guard because m_CurrentBlinkBitmap
starts as a stale sentinel (24) that the old wxImageList::GetBitmap
tolerated but vector indexing must not.

Co-Authored-By: Claude Fable 5 <[email protected]>

* refactor(gui): name toolbar icon indexes and drop dead code after review

Code-review follow-ups to the wxBitmapBundle toolbar change:

- Add ToolbarSkinEnum (mirroring ClientSkinEnum) so the m_tblist
  indexes duplicated across Apply_Toolbar_Skin, ShowConnectionState,
  OnGUITimer and the constructor are named instead of magic numbers
  whose meaning depends on the Add_Skin_Icon call order.
- Initialize m_CurrentBlinkBitmap to Toolbar_Messages instead of the
  stale sentinel 24 (a fossil amuleDlgImages() resource id, never a
  valid m_tblist index) and drop the SetMessagesTool bounds guard that
  existed only to defend against it; both callers assign a valid index
  right before calling, so behavior is identical.
- Remove the #ifdef __WXCOCOA__ branches in ShowConnectionState and
  SetMessagesTool: the old wxCocoa port was removed from wxWidgets
  before the 3.2 minimum this project requires (modern macOS defines
  __WXOSX_COCOA__), so those lines could never compile again.
- Use the two-bitmap wxBitmapBundle::FromBitmaps overload instead of
  building a wxVector by hand.

Co-Authored-By: Claude Fable 5 <[email protected]>

* style(gui): use emplace_back for the fallback toolbar bundle

Fixes the clang-tidy Tier-2 modernize-use-emplace warning on the
wxBitmapBundle fallback path in Add_Skin_Icon.

Co-Authored-By: Claude Fable 5 <[email protected]>

---------

Co-authored-by: Carlos Barrero <[email protected]>
Co-authored-by: Claude Fable 5 <[email protected]>
Cflsft referenced this pull request in Cflsft/amule Jul 6, 2026
* fix(gui): scale main-toolbar icons on hi-DPI displays

The toolbar icons (Downloads, Shared Files, etc.) were stored in a
fixed 32x32 wxImageList and handed to wxToolBar as plain wxBitmaps.
Since the executable declares PerMonitorV2 DPI awareness (amule-org#780), those
bitmaps are drawn at 32 *physical* pixels, so on 4K / scaled displays
the icons render tiny and blurry while the rest of the UI scales.

Store each toolbar icon as a wxBitmapBundle instead (wx >= 3.2),
built from the original 32px art plus a wxIMAGE_QUALITY_HIGH 2x
upscale, converting the transparency mask to an alpha channel first
so the scaler doesn't smear the mask colour into the icon edges.
Drop the hard-coded SetToolBitmapSize(32,32) so the toolbar derives
the logical size from the bundles and scales it per monitor DPI.

SetMessagesTool gains a bounds guard because m_CurrentBlinkBitmap
starts as a stale sentinel (24) that the old wxImageList::GetBitmap
tolerated but vector indexing must not.

Co-Authored-By: Claude Fable 5 <[email protected]>

* refactor(gui): name toolbar icon indexes and drop dead code after review

Code-review follow-ups to the wxBitmapBundle toolbar change:

- Add ToolbarSkinEnum (mirroring ClientSkinEnum) so the m_tblist
  indexes duplicated across Apply_Toolbar_Skin, ShowConnectionState,
  OnGUITimer and the constructor are named instead of magic numbers
  whose meaning depends on the Add_Skin_Icon call order.
- Initialize m_CurrentBlinkBitmap to Toolbar_Messages instead of the
  stale sentinel 24 (a fossil amuleDlgImages() resource id, never a
  valid m_tblist index) and drop the SetMessagesTool bounds guard that
  existed only to defend against it; both callers assign a valid index
  right before calling, so behavior is identical.
- Remove the #ifdef __WXCOCOA__ branches in ShowConnectionState and
  SetMessagesTool: the old wxCocoa port was removed from wxWidgets
  before the 3.2 minimum this project requires (modern macOS defines
  __WXOSX_COCOA__), so those lines could never compile again.
- Use the two-bitmap wxBitmapBundle::FromBitmaps overload instead of
  building a wxVector by hand.

Co-Authored-By: Claude Fable 5 <[email protected]>

* style(gui): use emplace_back for the fallback toolbar bundle

Fixes the clang-tidy Tier-2 modernize-use-emplace warning on the
wxBitmapBundle fallback path in Add_Skin_Icon.

Co-Authored-By: Claude Fable 5 <[email protected]>

---------

Co-authored-by: Carlos Barrero <[email protected]>
Co-authored-by: Claude Fable 5 <[email protected]>
got3nks pushed a commit to got3nks/amule that referenced this pull request Aug 3, 2026
Translated using Weblate (Tamil)
Currently translated at 0.8% (2 of 246 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/ta/

Translated using Weblate

Translated using Weblate (Tamil)
Currently translated at 1.2% (24 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ta/

Translated using Weblate

Translated using Weblate (Latvian)
Currently translated at 60.9% (150 of 246 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/lv/

Translated using Weblate

Translated using Weblate (Latvian)
Currently translated at 32.4% (621 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/lv/

Translated using Weblate

Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 86.8% (218 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/zh_Hant/

Translated using Weblate

Translated using Weblate (Turkish)
Currently translated at 98.0% (246 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/tr/

Translated using Weblate

Translated using Weblate (Russian)
Currently translated at 100.0% (251 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/ru/

Translated using Weblate

Translated using Weblate (Romanian)
Currently translated at 86.8% (218 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/ro/

Translated using Weblate

Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.2% (244 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/pt_BR/

Translated using Weblate

Translated using Weblate (Italian)
Currently translated at 100.0% (251 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/it/

Translated using Weblate

Translated using Weblate (Hungarian)
Currently translated at 86.8% (218 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/hu/

Translated using Weblate

Translated using Weblate (French)
Currently translated at 98.0% (246 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/fr/

Translated using Weblate

Translated using Weblate (Spanish)
Currently translated at 98.0% (246 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/es/

Translated using Weblate

Translated using Weblate (German)
Currently translated at 96.4% (242 of 251 strings)
Translation: aMule/Application Man Pages
Translate-URL: https://hosted.weblate.org/projects/amule/application-man-pages/de/

Translated using Weblate

Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 80.2% (1537 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/zh_Hant/

Translated using Weblate

Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1916 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/zh_Hans/

Translated using Weblate

Translated using Weblate (Ukrainian)
Currently translated at 73.9% (1416 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/uk/

Translated using Weblate

Translated using Weblate (Turkish)
Currently translated at 95.7% (1835 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/tr/

Translated using Weblate

Translated using Weblate (Swedish)
Currently translated at 80.8% (1550 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/sv/

Translated using Weblate

Translated using Weblate (Albanian)
Currently translated at 60.1% (1153 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/sq/

Translated using Weblate

Translated using Weblate (Slovenian)
Currently translated at 81.1% (1554 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/sl/

Translated using Weblate

Translated using Weblate (Russian)
Currently translated at 100.0% (1916 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ru/

Translated using Weblate

Translated using Weblate (Russian)
Currently translated at 100.0% (1916 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ru/

Translated using Weblate

Translated using Weblate (Romanian)
Currently translated at 80.8% (1549 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ro/

Translated using Weblate

Translated using Weblate (Portuguese (Portugal))
Currently translated at 80.0% (1534 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/pt_PT/

Translated using Weblate

Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1916 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/pt_BR/

Translated using Weblate

Translated using Weblate (Polish)
Currently translated at 78.1% (1497 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/pl/

Translated using Weblate

Translated using Weblate (Norwegian Nynorsk)
Currently translated at 67.2% (1288 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/nn/

Translated using Weblate

Translated using Weblate (Dutch)
Currently translated at 81.5% (1562 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/nl/

Translated using Weblate

Translated using Weblate (Lithuanian)
Currently translated at 67.2% (1288 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/lt/

Translated using Weblate

Translated using Weblate (Korean)
Currently translated at 55.8% (1070 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ko/

Translated using Weblate

Translated using Weblate (Japanese)
Currently translated at 61.5% (1179 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ja/

Translated using Weblate

Translated using Weblate (Italian)
Currently translated at 100.0% (1916 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/it/

Translated using Weblate

Translated using Weblate (Hungarian)
Currently translated at 85.5% (1640 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/hu/

Translated using Weblate

Translated using Weblate (Croatian)
Currently translated at 24.3% (466 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/hr/

Translated using Weblate

Translated using Weblate (Hebrew)
Currently translated at 43.9% (843 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/he/

Translated using Weblate

Translated using Weblate (Galician)
Currently translated at 85.4% (1637 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/gl/

Translated using Weblate

Translated using Weblate (French)
Currently translated at 97.3% (1865 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/fr/

Translated using Weblate

Translated using Weblate (Finnish)
Currently translated at 80.3% (1539 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/fi/

Translated using Weblate

Translated using Weblate (Basque)
Currently translated at 80.3% (1539 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/eu/

Translated using Weblate

Translated using Weblate (Estonian)
Currently translated at 79.2% (1518 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/et/

Translated using Weblate

Translated using Weblate (Spanish)
Currently translated at 95.5% (1830 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/es/

Translated using Weblate

Translated using Weblate (Spanish)
Currently translated at 95.5% (1830 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/es/

Translated using Weblate

Translated using Weblate (Greek)
Currently translated at 70.6% (1354 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/el/

Translated using Weblate

Translated using Weblate (German)
Currently translated at 86.6% (1661 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/de/

Translated using Weblate

Translated using Weblate (Danish)
Currently translated at 24.0% (460 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/da/

Translated using Weblate

Translated using Weblate (Czech)
Currently translated at 90.5% (1734 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/cs/

Translated using Weblate

Translated using Weblate (Catalan)
Currently translated at 81.7% (1566 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ca/

Translated using Weblate

Translated using Weblate (Bulgarian)
Currently translated at 13.4% (257 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/bg/

Translated using Weblate

Translated using Weblate (Asturian)
Currently translated at 74.7% (1432 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ast/

Translated using Weblate

Translated using Weblate (Arabic)
Currently translated at 15.8% (304 of 1916 strings)
Translation: aMule/Application
Translate-URL: https://hosted.weblate.org/projects/amule/amule-application/ar/

Co-authored-by: Andrei Stepanov <[email protected]>
Co-authored-by: Diego Heras <[email protected]>
Co-authored-by: danim7 <[email protected]>
Co-authored-by: தமிழ்நேரம் <[email protected]>
Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

aMule GUI is blured in Windows with display scale 150%

2 participants