Skip to content

[BUG] Homebrew 安装版 Web UI 缺失中文语言选项 #2389

@thetapilla

Description

@thetapilla

请确认以下事项

  • 我已确认阅读并同意 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.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") 只扫一级,匹配到 eni18n 两个目录,但 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 / 简体中文 / 繁體中文                                                                                                                                                     

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions