|
楼主 我是高山说: 本帖最后由 我是高山 于 2022-3-6 18:15 编辑
写在前面的话:论坛自动在行首加了一个空格,所以代码部分自己斟酌,附件有代码有插件模板AddonTemplate-master,
-------
写一个HelloWorld的NVDA插件-2022.1
搭建NVDA插件开发环境
要为NVDA创建插件,请确保您的系统满足以下要求:
• NVDA:
◦ 您的计算机上提供了NVDA版本(便携式或已安装的版本都可以使用,但是我们强烈建议您在开发计算机上安装NVDA的副本)。我安装 的是2019.3.1
◦ 更好的是:我们建议安装最新的master(alpha)或beta开发版本,以与核心API更改保持同步。您可以从https://community.nvda-project.org/wiki/Snapshots下载最新的快照。##我不下载.
• python (蟒蛇:)
• 於 2019.3 後的 NVDA 已改用 python 3.7 開發且python 2 於 2020 年 1 月 停止支援了,故要入門就直接學 python3 吧
◦ 适用于Windows的Python 3.7系列,版本3.7.5 32位(适用于Windows):
https://www.python.org/downloads/release/python-375/
点击 :Windows x86 executable installer链接下载,
安装 的时候:Add Python 3.7 to PATH复选框已选中Alt+p
• 用于生成插件程序 包的SCons 3 3.0.1版或更高版本:
http://www.scons.org/
点击 download,在SCons Package下面点击.zip后缀的链接下载,
解压scons-版本号.zip,
CMD命令行切到刚才解压得到的文件夹,
输入python setup.py install
默认安装 到:Python37-32安装 目录\Lib\site-packages\
看看python安装目录\Scripts有没添加到环境变量,
输入scons -v,可以看到版本,
• Markdown 2.0.1或更高版本,用于生成附加文档:
可以在CMD命令行输入,
pip install markdown
• Windows的GNU Gettext包,用于消息本地化支持。需要msgfmt.exe, xgettext.exe两个文件,下载后不要安装 !!
这两个文件可以到NVDA的github代码仓库下载,,
NVDA代码仓库:https://github.com/nvaccess/nvda
两个文件在 miscDeps \ tools文件夹中,
• 如果要开发对程序,语音合成器或盲文显示器的支持,请安装所需的软件和硬件。
• 可选项目:
◦ 如果您希望将插件上传到Bitbucket或Github之类的存储库(可选,),请使用Git 1.7.9或更高版本。您可以使用各种Git客户端,例如Git Bash,Cygwin's Git和TortoiseGit。
◦ NVDA社区插件模板,便于附加文件和文件夹的包装和管理(可选)的。我下载。
https://github.com/nvdaaddons/AddonTemplate/archive/master.zip
也 可以用 git 克隆 :git clone https://github.com/nvdaaddons/AddonTemplate
参考资料:
NVDA addon 開發小教學 - NVDA中文站 改变,从这里开始 - Google Chrome
https://www.nvdacn.com/archives/NVDA-addon-development.html
生成Pot文件时出错。 - Google Chrome
https://nvda-addons.groups.io/g/nvda-addons/topic/7916852?p=,,,20,0,0,0::Created,,scons+pot,20,2,0,7916852,ct=1&ct=1
写一个nvda的HelloWorld插件
这是我记录和整理的笔记,方便日后查看,
先创建一个文件夹:HelloWorld
解压 AddonTemplate-master.zip
可以看看readme.me的内容,
将 site_scons 文件夹和以下文件复制到HelloWorld文件夹中: buildVars.py , manifest.ini.tpl , manifest-translated.ini.tpl , sconstruct ,.gitignore 和.gitattributes
style.css.也 就是除了,COPYING.txt,readme.md外,,
可以直接把解压 出来的AddonTemplate-文件夹重命名为HelloWorld,再把不要的文件删除,
在HelloWorld文件夹中创建addon 文件夹。在 addon 文件夹中为附加模块创建所需的文件夹globalPlugins文件夹,
在HelloWord文件夹里的 buildVars.py 文件中,修改插件信息(名称,摘要,描述,版本,作者和url)** addon_info **变量。,.py文件可以用记事本或者notepad++打开
省略内容……
addon_info = {
# for previously unpublished addons, please follow the community guidelines at:
# https://bitbucket.org/nvdaaddont ... ster/guidelines.txt
# add-on Name, internal for nvda
"addon_name" : "HelloWorld",
# Add-on summary, usually the user visible name of the addon.
# Translators: Summary for this add-on to be shown on installation and add-on information.
"addon_summary" : _("HelloWorld"),
# Add-on description
# Translators: Long description to be shown for this add-on on add-on information from add-ons manager
"addon_description" : _("""say Hello to the world.
this is my first addon"""),
# version
"addon_version" : "1.0",
# Author(s)
"addon_author" : u"ZhangSan <XXX@YYY.com>",
# URL for the add-on documentation support
"addon_url" : "www......",
# Documentation file name
"addon_docFileName" : "readme.html",
# Minimum NVDA version supported (e.g. "2018.3.0", minor version is optional)
"addon_minimumNVDAVersion" : "2019.3",
# Last NVDA version supported/tested (e.g. "2018.4.0", ideally more recent than minimum version)
"addon_lastTestedNVDAVersion" : "2019.3",
# Add-on update channel (default is None, denoting stable releases, and for development releases, use "dev"; do not change unless you know what you are doing)
"addon_updateChannel" : None,
}
省略内容……
看看上面的代码
"addon_name" : "HelloWorld",,插件在nvda内部的名字,
"addon_summary" : _("HelloWorld"),显示 给用户的名称,
"addon_description" : _("""say Hello to the world.,插件的摘要,
"addon_url" : "www......",,插件的地址,
"addon_docFileName" : "readme.html",插件的帮助文档
在globalPlugins目录创建一个HelloWorld.py文件,
可以先创建一个.txt文件,然后重命名为 .py文件,
再用记事本或者notepad++方式打开,输入下面内容
import globalPluginHandler
import ui
class GlobalPlugin(globalPluginHandler.GlobalPlugin):
scriptCategory='a global plugin'
def script_toBeep(self,gesture):
ui.message("Hello world!")
script_toBeep.__doc__="say hello word"
# script_toBeep.category="a global plugin"
__gestures={
"kb:nvda+a":"toBeep"
}
下面整一个记事本插件,
在addon文件夹里创建appModules文件夹,这个是应用插件的文件夹,globalPlugins文件夹是全局插件文件夹,
在appModules文件夹里创建txt,再重命名为notepad.py,
在notepad.py里输入下面代码,
import appModuleHandler
import ui
from scriptHandler import script
class AppModule(appModuleHandler.AppModule):
scriptCategory='notepad addon'
@script(
description='say hello notepad',
# category='notepad addon',
gesture='kb:nvda+z'
)
def script_demo(self, gesture):
ui.message('hello notepad')
编写帮助文档
在HelloWorld文件夹里创建一个readme.txt文件 ,重命名为readme.md
在里面编写帮助内容:
#HelloWorld
这是一个和世界打招呼的插件
##快捷键:
nvda+a::Hello world!
nvda+z:hello notepad,记事本界面,
打包插件,
打开cmd命令行,切到HelloWorld目录,输入scons回车,
不出意外,你会在HelloWorld文件夹里发现:HelloWorld-1.0.nvda-addon
安装 插件
打开HelloWorld-1.0.nvda-addon,
点击 :关于插件(A)...按钮Alt+a,可以看到插件的信息,
插件信息对话框HelloWorld (HelloWorld)
版本: 1.0
作者: ZhangSan <XXX@YYY.com>
描述: say Hello to the world.
this is my first addon
网址: www......
NVDA版本最低要求: 2019.3
最近测试的 NVDA 版本
确认按钮
安装 重启nvda后,按nvda+a 你会听到Hello world!
切换到记事本界面,按nvda +z,NVDA朗读hello notepad,
在插件管理器会看到HelloWorld插件,可以点击 插件帮助查看帮助,
还可以看看NVDA菜单的选项的输入手势,
语言本地化
是本地化还是国际化呢?如果插件不给外国人用,直接用中文得了!
具体如下:
把msgfmt.exe,xgettext.exe两个文件拷贝到HelloWorld文件夹里,或者直接放在python.exe所在的文件夹,
编辑buildVars.py对应位置的内容,
#包含要翻译的文本的文件
i18nSources = pythonSources + ["buildVars.py", "addon\*\*.py"]
编辑HelloWorld.py的内容
import globalPluginHandler
import ui
import addonHandler
_=lambda x:x
addonHandler.initTranslation()
class GlobalPlugin(globalPluginHandler.GlobalPlugin):
scriptCategory=_('a global plugin')
def script_toBeep(self,gesture):
ui.message(_("Hello world!"))
script_toBeep.__doc__=_("say hello word")
# script_toBeep.category=_("a global plugin")
__gestures={
"kb:nvda+a":"toBeep"
}
修改notepad.py内容:
import appModuleHandler
import ui
import addonHandler
_=lambda x:x
addonHandler.initTranslation()
from scriptHandler import script
class AppModule(appModuleHandler.AppModule):
scriptCategory=_('notepad addon')
@script(
description=_('say hello notepad'),
# category=_('notepad addon'),
gesture='kb:nvda+z'
)
def script_demo(self, gesture):
ui.message(_('hello notepad'))
在cmd命令行切到HelloWorld目录,输入scons pot回车,
这时会生成一个HelloWorld.pot文件,把这个文件相应内容翻译,
当然是翻译成中文先!!,修改这个文件里对应的内容,
"Language: zh_CN\n"
...省略内容,
"Content-Type: text/plain; charset=utf-8\n"
#: buildVars.py:17
msgid "HelloWorld"
msgstr "你好世界"
#. Add-on description
#. Translators: Long description to be shown for this add-on on add-on information from add-ons manager
#: buildVars.py:20
msgid ""
"say Hello to the world.\n"
"this is my first addon"
msgstr ""
"和世界打个招呼,\n"
"这是我的第一个插件。"
#: addon\appModules\notepad.py:11
msgid "notepad addon"
msgstr "记事本插件"
#: addon\appModules\notepad.py:14
msgid "say hello notepad"
msgstr "说你好记事本"
#: addon\appModules\notepad.py:19
msgid "hello notepad"
msgstr "你好记事本"
#: addon\globalPlugins\HelloWord.py:9
msgid "a global plugin"
msgstr "一个全局插件"
#: addon\globalPlugins\HelloWord.py:12
msgid "Hello world!"
msgstr "你好世界!"
#: addon\globalPlugins\HelloWord.py:14
msgid "say hello word"
msgstr "说你好世界!"
在addon文件夹下创建文件夹
locale\zh_CN\LC_MESSAGES
再把HelloWorld.pot拷贝到这个文件夹里,并重命名为nvda.po,
在cmd命令行切换到HelloWorld目录输入scons回车打包插件,
安装 这个新生成的插件,按nvda+a nvda会说你好!世界!
在记事本界面,按nvda+z,NVDA会朗读:你好记事本!
在插件管理器看到的插件名称也 是中文的,
还可以看看NVDA菜单的选项的输入手势,
如果 在.pot填写相应的阿拉伯语,
然后把.po放到addon\locale\ar\LC_MESSAGES\里,打包安装 插件后,如果 nvda选择了阿拉伯语,插件里相应的中文内容会翻译成为阿拉伯语!
帮助文档语言本地化
我们打开HelloWord\addon\doc\en,
看到两个文件:
readme.html
readme.md
他们对应的是HelloWord文件夹里的readme.md,所以HelloWord文件夹里的readme.md应该是英文版的,
可以在addon\doc下创建zh_CN文件夹,在里面创建中文内容的readme.md
打包插件的时候会生成一个readme.html,
还可以
在en下创建英文内容的readme.md
在 fr下创建法语内容的readme.md
nvda使用哪种 语言,点击 插件帮助会显示 哪种 语言的内容!这个我没试,!
修改插件内容后,要重新打包,安装,重启NVDA,
是比较麻烦了!我发现,修改插件内容后可以把C:\Users\XXX\AppData\Roaming\nvda\addons\HelloWord里的内容删除掉,
然后把HelloWord\addon里的内容复制到C:\Users\XXX\AppData\Roaming\nvda\addons\HelloWord里,
重启NVDA,测试插件,最后再打包生成插件,
我不知道这样操作会不会有什么问题,
有时候你觉得你没有什么错误的地方,可是插件还是有问题,你可以把插件卸载掉,把插件安装包删除掉,再打包安装,
比较好的开发流程是什么样呢?
更多资料:
NVDA附加开发指南
https://github.com/nvdaaddons/De ... n-Development-Guide
nvda插件开发论坛
https://nvda-addons.groups.io/g/nvda-addons
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|