Logs page renders blank when LANG is a CJK locale on Flatpak (monospace resolves to proportional Noto Sans CJK)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- rust, typescript
Hướng nghiên cứu
Bắt đầu với packages/ui/src/composables/terminal.ts, nơi issue cho biết terminal đặt họ phông chữ thành monospace chung; kiểm tra cách trang Logs cấu hình xterm.js và liệu các bài kiểm thử gần đó có bao quát việc hiển thị terminal hay không. Tái hiện lỗi với LANG CJK trong Flatpak và so sánh với en_US.UTF-8. Công việc hoàn tất khi cả nhật ký và trạng thái trống đều hiển thị trong locale CJK.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Please confirm the following
- I checked the existing issues for duplicate problems
- I have tried resolving the issue using the support portal
- I have ensured my Modrinth App installation is up to date
What version of the Modrinth App are you using?
0.22.0 (Flathub, com.modrinth.ModrinthApp, runtime org.gnome.Platform/x86_64/49)
What operating systems are you seeing the problem on?
Linux — Fedora 44, KDE Plasma (Wayland), system locale zh_CN.UTF-8
Describe the bug
When the system/process locale is Chinese (LANG=zh_CN.UTF-8), the instance Logs page renders an entirely blank terminal, even though the logs are read successfully.
The page chrome (search box, level filters, log-source dropdown) works, and the dropdown correctly lists latest.log, crash reports, and rotated .log.gz files. Selecting any of them still leaves the terminal blank. The empty-state message/frog does not appear either, which suggests the xterm.js terminal never renders any text.
Launching the same Flatpak with LANG=en_US.UTF-8 makes the Logs page work normally, so the data/back-end side is fine — this is a rendering issue.
The same instance shows:
LANG=zh_CN.UTF-8: an empty white terminal area
LANG=en_US.UTF-8: empty-state bubble and log contents render normally
Steps to reproduce
- Use a system with
LANG=zh_CN.UTF-8(or any CJK locale), and install Modrinth App from Flathub. - Open an instance that has logs (or launch the instance once so logs exist).
- Go to the instance Logs tab.
- Observe that the terminal area is completely blank, including no empty-state text.
Optional control:
flatpak run --env=LANG=en_US.UTF-8 com.modrinth.ModrinthApp
→ the Logs page renders correctly.
Expected behavior
The Logs page should display the live log / selected log file regardless of the system locale.
Additional context / root cause analysis
Inside the Flatpak sandbox, fontconfig resolves the generic monospace family differently depending on locale:
$ flatpak run --command=sh com.modrinth.ModrinthApp -c \
'LANG=en_US.UTF-8 fc-match monospace; LANG=zh_CN.UTF-8 fc-match monospace'
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"
NotoSansCJK-VF.ttc: "Noto Sans CJK SC" "Regular"
Noto Sans CJK SC is a proportional CJK font, not a monospace font. The console component hard-codes the generic family:
// packages/ui/src/composables/terminal.ts (v0.22.0)
fontFamily: 'monospace',
xterm.js requires a monospace font for its character-width measurement. When the generic monospace alias resolves to a proportional (and variable) CJK font, the terminal produces no visible output at all — not even the empty-state bubble.
Note that the actual monospace CJK font is present in the sandbox (fc-list shows Noto Sans Mono CJK SC); fontconfig just prefers the proportional Noto Sans CJK SC under zh_CN.
Workaround (app-local, does not affect other apps):
Create ~/.var/app/com.modrinth.ModrinthApp/config/fontconfig/fonts.conf:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<match target="pattern">
<test qual="any" name="family"><string>monospace</string></test>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
</fontconfig>
After this, LANG=zh_CN.UTF-8 fc-match monospace inside the sandbox returns DejaVu Sans Mono and the Logs page renders again (CJK characters fall back to Noto CJK automatically).
Suggested fix: don't rely on the bare generic monospace alias for the terminal. Use an explicit monospace stack, e.g.
fontFamily: "'DejaVu Sans Mono', 'Noto Sans Mono', 'Noto Sans Mono CJK SC', 'Liberation Mono', monospace",
and/or ship a known monospace font with the app. It may also be worth checking whether xterm.js needs a guard against a resolved proportional font.
- Ngôn ngữ chính
- Rust
- Star
- 2.5k
- Fork
- 663
- Merge trung bình
- 2 ngày 11 giờ
- Pull request đã merge (30 ngày)
- 122
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của modrinth/code
-
app
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
website
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
modrinth/code#8256 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
modrinth/code#8253 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Translation errorĐang mởwebsite
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 66/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Button reorder requestCó thể làm lại được @Ceebug đã nhận 17 ngày trước và không có pull request nào đang mở. Đang mở
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 70/100
modrinth/code#8136 · 10 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của modrinth/code
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Eyevinn/open-live-ingest#36 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug bug jury peripheral:i2s
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
esp-rs/esp-hal#6828 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ライブラリを追加Đang mởpriority middle
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
KATO-Hiro/AtCoderClans#13015 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
needs-review
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
UCS-Care-Group/mailcraft#1429 ·
Maintainer thường phản hồi trong vòng 1 ngày