请确认以下事项
OpenList 版本(必填)
v4.2.1
使用的存储驱动(必填)
N/A — 本问题与存储驱动无关
问题描述(必填)
现象
通过 brew install openlist 在 macOS 安装的 v4.2.1,运行 openlist server 打开 Web UI 后语言切换器中只有 English 一项;而同版本 GitHub Release 的 openlist-darwin-arm64.tar.gz 则正常提供 English / 简体中文 / 繁體中文 三项。
我观察到 brew 是官方文档中支持的安装方式,所以虽然严格意义上来说这不是软件包本体的问题(release),但是还请允许我当作 bug 来看待。
根因(已定位)
问题出在 homebrew-core 的 openlist.rb formula(不是 OpenList 本身的代码),具体位于 install 块的这一行:
resource("i18n").stage buildpath/"i18n"
resource("frontend").stage do
cp_r buildpath/"i18n", Pathname.pwd/"src/lang" # ← BUG
system "pnpm", "install"
system "pnpm", "build"
end
i18n.tar.gz 解压后根目录是 zh-CN/、zh-TW/
- Frontend 源码的
src/lang/en/ 已经存在
- Ruby
FileUtils.cp_r(src, existing_dest) 会把 src 整体嵌套进 dest,最终产物是:
src/lang/en/...(原有)
src/lang/i18n/zh-CN/... ← 多了一层 i18n/
src/lang/i18n/zh-TW/... ← 多了一层 i18n/
- 而
src/app/i18n.ts 的 Vite glob import.meta.glob("~/lang/*/index.json") 只扫一级,匹配到 en 和 i18n 两个目录,但 i18n 下没有 index.json,被静默丢弃。
- 结果:构建全程零报错,但最终 bundle 里只剩
en 一种语言。
证据
对比官方 release 与 brew 版二进制里 Vite 生成的 chunk 文件名:
| 二进制来源 |
语言相关 chunks |
GitHub Release openlist-darwin-arm64 |
en-*.js, zh-CN-CQIa8LaP.js, zh-TW-BdOC7TgM.js + legacy |
| Homebrew v4.2.1 (原版) |
仅 en-*.js |
| Homebrew v4.2.1 (formula 打 patch 后) |
en-*.js, zh-CN-CQIa8LaP.js, zh-TW-BdOC7TgM.js + legacy(hash 与官方 release 逐字节一致) |
影响范围
- 所有在 macOS 上通过
brew install openlist 安装的中文用户
临时解法(供其他 brew 用户)
降级到直接使用 GitHub Release 的 darwin-arm64 二进制,或本地应用 formula patch 后从源码构建:
# homebrew-core/Formula/o/openlist.rb 中替换这一行:
# cp_r buildpath/"i18n", Pathname.pwd/"src/lang"
cp_r Dir[buildpath/"i18n/*"], Pathname.pwd/"src/lang"
建议
本 issue 主要目的是告知 OpenList 团队此问题并帮助 brew 用户定位。彻底修复需向 homebrew-core 提 PR,烦请协助推动;或希望我直接去提 PR 也 OK,请在本 issue 下告知。
日志(必填)
本问题不产生运行时错误日志(构建期和运行期都零报错),属于"静默失败"类问题。以下是证据替代:
1. brew 原版二进制中缺失中文 chunk
$ strings /opt/homebrew/Cellar/openlist/4.2.1/bin/openlist | grep -oE "dist/assets/zh-[A-Z]+-[^.]+\.js" | sort -u
# (无输出)
2. 官方 release 二进制包含完整中文 chunk
$ strings openlist-darwin-arm64/openlist | grep -oE "dist/assets/zh-[A-Z]+-[^.]+\.js" | sort -u
dist/assets/zh-CN-CQIa8LaP.js
dist/assets/zh-CN-legacy-DKxDu12i.js
dist/assets/zh-TW-BdOC7TgM.js
dist/assets/zh-TW-legacy-DOQvhqWQ.js
3. Ruby cp_r 语义最小复现
$ mkdir -p /tmp/repro/src/lang/en /tmp/repro/i18n/zh-CN /tmp/repro/i18n/zh-TW
$ touch /tmp/repro/src/lang/en/index.json \
/tmp/repro/i18n/zh-CN/index.json \
/tmp/repro/i18n/zh-TW/index.json
$ cd /tmp/repro && ruby -e 'require "fileutils"; FileUtils.cp_r("i18n", "src/lang")'
$ find src/lang -type f | sort
src/lang/en/index.json
src/lang/i18n/zh-CN/index.json # ← 多了一层 i18n/
src/lang/i18n/zh-TW/index.json # ← 多了一层 i18n/
4. openlist version 输出(brew 原版)
$ /opt/homebrew/bin/openlist version
Built At: 2026-04-09T12:57:04Z
Go Version: go1.26.2 darwin/arm64
Author: Homebrew
Commit ID: Homebrew
Version: 4.2.1
WebVersion: 4.2.1
配置文件内容(必填)
首次启动自动生成的默认 data/config.json 内容无需修改即可复现。
复现链接(可选)
无外部复现链接。完整复现步骤:
# 1. 装 brew 版
brew install openlist
# 2. 启动
openlist server --data /tmp/openlist-test
# 3. 浏览器打开 http://127.0.0.1:5244/
# → 语言切换器只有 English
# 4. 对比下载官方 release
curl -LO "https://github.com/OpenListTeam/OpenList/releases/download/v4.2.1/openlist-darwin-arm64.tar.gz"
tar xzf openlist-darwin-arm64.tar.gz
./openlist server --data /tmp/openlist-test-release
# → 语言切换器有 English / 简体中文 / 繁體中文
请确认以下事项
我已确认阅读并同意 AGPL-3.0 第15条 。
本程序不提供任何明示或暗示的担保,使用风险由您自行承担。
我已确认阅读并同意 AGPL-3.0 第16条 。
无论何种情况,版权持有人或其他分发者均不对使用本程序所造成的任何损失承担责任。
我确认我的描述清晰,语法礼貌,能帮助开发者快速定位问题,并符合社区规则。
我已确认阅读了OpenList文档。
我已确认没有重复的问题或讨论。
我已确认是
OpenList的问题,而不是其他原因(例如 网络 ,依赖或操作)。我认为此问题必须由
OpenList处理,而非第三方。我已确认这个问题在最新版本中没有被修复。
我没有阅读这个清单,只是闭眼选中了所有的复选框,请关闭这个 Issue 。
OpenList 版本(必填)
v4.2.1
使用的存储驱动(必填)
N/A — 本问题与存储驱动无关
问题描述(必填)
现象
通过
brew install openlist在 macOS 安装的 v4.2.1,运行openlist server打开 Web UI 后语言切换器中只有 English 一项;而同版本 GitHub Release 的openlist-darwin-arm64.tar.gz则正常提供 English / 简体中文 / 繁體中文 三项。我观察到
brew是官方文档中支持的安装方式,所以虽然严格意义上来说这不是软件包本体的问题(release),但是还请允许我当作 bug 来看待。根因(已定位)
问题出在 homebrew-core 的
openlist.rbformula(不是 OpenList 本身的代码),具体位于install块的这一行:i18n.tar.gz解压后根目录是zh-CN/、zh-TW/src/lang/en/已经存在FileUtils.cp_r(src, existing_dest)会把 src 整体嵌套进 dest,最终产物是:src/lang/en/...(原有)src/lang/i18n/zh-CN/...← 多了一层i18n/src/lang/i18n/zh-TW/...← 多了一层i18n/src/app/i18n.ts的 Vite globimport.meta.glob("~/lang/*/index.json")只扫一级,匹配到en和i18n两个目录,但i18n下没有index.json,被静默丢弃。en一种语言。证据
对比官方 release 与 brew 版二进制里 Vite 生成的 chunk 文件名:
openlist-darwin-arm64en-*.js,zh-CN-CQIa8LaP.js,zh-TW-BdOC7TgM.js+ legacyen-*.jsen-*.js,zh-CN-CQIa8LaP.js,zh-TW-BdOC7TgM.js+ legacy(hash 与官方 release 逐字节一致)影响范围
brew install openlist安装的中文用户临时解法(供其他 brew 用户)
降级到直接使用 GitHub Release 的 darwin-arm64 二进制,或本地应用 formula patch 后从源码构建:
建议
本 issue 主要目的是告知 OpenList 团队此问题并帮助 brew 用户定位。彻底修复需向 homebrew-core 提 PR,烦请协助推动;或希望我直接去提 PR 也 OK,请在本 issue 下告知。
日志(必填)
本问题不产生运行时错误日志(构建期和运行期都零报错),属于"静默失败"类问题。以下是证据替代:
1. brew 原版二进制中缺失中文 chunk
2. 官方 release 二进制包含完整中文 chunk
3. Ruby cp_r 语义最小复现
4. openlist version 输出(brew 原版)
配置文件内容(必填)
首次启动自动生成的默认
data/config.json内容无需修改即可复现。复现链接(可选)
无外部复现链接。完整复现步骤: