如何添加 Weblate REST 翻译文件上传所需的权限?

Posted

技术标签:

【中文标题】如何添加 Weblate REST 翻译文件上传所需的权限?【英文标题】:How to add required permission for Weblate REST translations file upload? 【发布时间】:2022-01-12 17:07:23 【问题描述】:

我正在编写 Weblate(4.3.2 版)安装脚本,并且我已使用 curl 从 Weblate REST API 成功获取现有本地化,并从 Weblate 配置文件设置(登录、从右上角打开配置文件菜单,选择 Settings - API Access 并复制粘贴“个人 API 密钥”。

简而言之,GET /api/translations/(string:project)/(string:component)/(string:language)/file/ 请求根据https://docs.weblate.org/en/weblate-4.3.2/api.html#get--api-translations-(string-project)-(string-component)-(string-language)-file- 上的文档工作,我得到了预期的结果,性能非常好。

但是,https://docs.weblate.org/en/weblate-4.3.2/api.html#post--api-translations-(string-project)-(string-component)-(string-language)-file- 记录的 POST /api/translations/(string:project)/(string:component)/(string:language)/file/ 请求总是失败并导致以下响应:

HTTP/2 403 
server: WSGIServer/0.2 CPython/3.8.10
content-type: application/json
vary: Accept,Cookie
allow: GET, POST, PUT, HEAD, OPTIONS
x-ratelimit-limit: 5000
x-ratelimit-remaining: 4878
x-ratelimit-reset: 107
x-frame-options: DENY
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
referrer-policy: same-origin

响应正文

"detail":"You do not have permission to perform this action."

我正在尝试使用 Weblate 安装的默认管理员帐户,因此我希望它具有所有必需的权限。如果令牌不正确,我会收到不同的错误,所以我很确定这与令牌错误无关。响应中的 HTTP/2 状态是由我们的反向代理引起的,我假设 Weblate 通常只提供 HTTP/1.1 流量。

我还授予了项目中所有可能的权限-浏览所有项目-(项目名称)-管理(菜单)-用户;即“Administration”、“Glossary”、“Languages”、“Memory”、“Screenshots”、“Sources”、“Translate”、“VCS”。

此外,我还使用了后端 Django 管理界面,可通过右上角的扳手图标访问,然后选择工具和 Django 管理界面。我已授予所有我认为可能会影响权限的组。实际上,此用户帐户对“用户组”具有以下值:

Users,Viewers,All@Sources,All@Languages,All@Administration,All@Translate,All@Glossary,All@Memory,All@Screenshots,All@VCS

它已启用“活动”和“超级用户状态”的状态。

你能建议其他的尝试吗?我似乎很清楚权限问题,但我缺少什么?

【问题讨论】:

【参考方案1】:

很可能methodconflicts 参数错误。 API 代码在这些情况下会引发权限错误,但它应该告诉用户出了什么问题。

错误消息在下一个版本中应该会更有用,我在https://github.com/WeblateOrg/weblate/commit/4abf2193ed57cb7822db804376c6adde9cccb753中对此进行了改进

【讨论】:

谢谢,问题与github.com/WeblateOrg/weblate/issues/4199 类似,问题是我们的gettext 兼容.po.pot 文件并尝试使用method=source 更新基本字符串,导致以上问题。改用method=replace 效果很好,但需要在本地合并来自多个源的更改,因为replace 会覆盖所有更改。我成功创建了脚本来获取本地化,如果需要在本地合并并使用 method=replace 推送更改。 对了,你能解释一下method=addmethod=translate之间的区别吗?这些看起来和我很相似。 见docs.weblate.org/en/latest/user/files.html#import-methods translate: "导入的翻译作为翻译添加" vs add: "向翻译添加新字符串"。有什么区别? translate 翻译现有字符串,add 添加当前不存在的字符串

以上是关于如何添加 Weblate REST 翻译文件上传所需的权限?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 weblate 不能识别我的 pot 文件?

第一次提交在 Weblate 中为 iOS 添加翻译字符串失败

在 Weblate 中手动删除项目

weblate在线翻译平台搭建

将复杂的 Sphinx 翻译导入 Weblate

合并冲突的 Weblate 问题