通过Weblate REST API添加Unit失败,返回403错误
你的怀疑完全合理——这种403报错大概率是团队里有人调整了Weblate的权限配置或者组件设置,导致API添加单元的操作被禁止了。我帮你梳理几个最可能的原因和排查方向:
可能的原因及排查步骤
API密钥绑定的用户权限不足
虽然你的密钥能通过身份验证(错误密钥会返回不同报错),但该密钥对应的用户账号可能没有在目标项目/组件下添加单元的权限。你可以登录Weblate后台,找到该用户的账号,查看它在目标项目中的角色——至少需要拥有「Translator」及以上权限,或者明确被授予「Add translation」的权限,才能通过API添加单元。组件层面禁用了API添加字符串
很多团队会为了管控字符串来源(比如只允许从版本控制系统同步,禁止手动/API添加),在组件设置里禁用了这个功能。你可以进入目标组件的「Settings」→「Translations」页面,检查是否有类似「Prevent adding new strings via API」或者「Only allow adding strings from version control」的选项,如果开启了,API添加单元就会被拒绝。项目层面的权限限制
项目的全局权限设置也可能限制了API操作。进入项目的「Permissions」页面,确认是否有针对API请求的权限规则,比如禁止了POST /api/translations/{project}/{component}/{language}/units/这个端点的访问。参数完整性(次要可能性)
虽然你的报错是权限类的403,但也可以检查下请求参数是否完整。Weblate的部分版本中,添加单元可能需要额外字段(比如context),不过如果是参数缺失通常会返回400而非403,这个可以作为补充排查点。
快速验证小技巧
你可以用同一个API密钥调用GET /api/users/me/接口,返回的用户信息里会包含该账号的权限范围,能快速确认是否有目标组件的操作权限。
备注:内容来源于stack exchange,提问作者Sten Heimbrodt

