定制 Weblate
使用 Django 和 Python 进行扩展和定制。将你的更改贡献给上游,让每个人都能受益。这降低了您的维护成本;当改变内部接口或重构代码时,Weblate 的代码会被照顾到。
警告
内部界面与模板都不被认为是稳定的 API。请对每次升级都复查自己的定制,接口或其语义可能未经通知就进行更改。
建立 Python 模块
如果不熟悉 Python,你可以查看 适合初学者的 Python(英文) ,它解释了其基本内容并指向了高级教程。
要写入有定制 Python 代码(被称为模块)的文件,需要一个地方存储它,或者在系统路径(通常像 /usr/lib/python3.9/site-packages/
的地方),或者在 Weblate 目录下,同样也添加到解释程序搜索路径下。
在 3.8-5 版本加入: 使用 using Docker 时,你可将 Python 模块置于 /app/data/python/
(见 Docker 容器卷) 以便它们可以由 Weblate 从 :ref:`settings override file <docker-settings-override>`等处进行加载。
更好地是,将你的定制化转变为适当的 Python 包:
为你的包建立文件夹(我们会使用 weblate_customization )。
在里面新建`setup.py` 文件来描述包:
from setuptools import setup setup( name="weblate_customization", version="0.0.1", author="Your name", author_email="yourname@example.com", description="Sample Custom check for Weblate.", license="GPLv3+", keywords="Weblate check example", packages=["weblate_customization"], )
建立定制代码的 Python 模块( 也被成为
weblate_customization
)的文件夹。在里面建立
__init__.py
文件来确认 Python 可以导入模块。现在可以使用 pip install -e 安装这个包。更多信息可以在 Editable installs 中找到。
模块一旦安装,就可以用在 Webalte 配置中(例如
weblate_customization.checks.FooCheck
)。
你的包结构应该看起来像这样:
weblate_customization
├── setup.py
└── weblate_customization
├── __init__.py
├── addons.py
└── checks.py
可以在 <https://github.com/WeblateOrg/customize-example> 找到定制 Weblate 的示例,它涵盖了下面描述的所有题目。
更改标志
建立简单的 Django app 来包含想要覆盖的静态文件(请参见 建立 Python 模块 )。
品牌出现在后面的文件中:
icons/weblate.svg
导航栏中显示的标志。
logo-*.png
网页图标取决于屏幕分辨率和浏览器。
favicon.ico
传统浏览器使用的网页图标。
weblate-*.png
机器人或匿名用户使用的头像。一些浏览器将这些图标用作快捷方式图标。
email-logo.png
在通知电子邮件中使用。
把它添加到:setting:django:INSTALLED_APPS:
INSTALLED_APPS = ( # Add your customization as first "weblate_customization", # Weblate apps are here… )
运行
weblate collectstatic --noinput
,来收集提供给客户端的静态文件。
定制的质量检查、附加组件和自动修复
要在 Weblate 中安装你的 定制的自动修正,编写自己的检查 或 编写附加组件 代码:
将文件放进你的包含 Weblate 定制的 Python 模块中(请参见 建立 Python 模块 )。
在专用设置(
WEBLATE_ADDONS
、CHECK_LIST
或AUTOFIX_LIST
)中将其完全合法的路径添加到 Python 类中:
# Checks
CHECK_LIST += ("weblate_customization.checks.FooCheck",)
# Autofixes
AUTOFIX_LIST += ("weblate_customization.autofix.FooFixer",)
# Add-ons
WEBLATE_ADDONS += ("weblate_customization.addons.ExamplePreAddon",)