FreeCAD 工作台(Workbench)开发笔记『四』--多语言补充

前面几篇把工作台的开发流程基本学习完,本篇仅对多语言进行一个补充;

FreeCAD 本身是基于多语言的,界面使用 Qt 的多语言实现,所以工作台的多语言实现也基本遵循 Qt 的多语言方案。

一、准备工作

  • 增加一个 translations 目录,用于保存 .ts 文件(“源”翻译文件)和 .qm 文件(编译的翻译文件);
  • 安装 lupdatelconvertlreleasepylupdate 工具,他们用于提取和生成语言包;
    • 在 Linux 里,他们包含在 pyside-toolspyside2-tools 的包中;
    • 在 Windows 里,需要安装 PySide5PySide6,可使用:python -m pip install PySide5 进行安装;

二、修改 .py 文件

  • 首先需要定义:
    • translate():
      • 可以直接引用 FreeCAD 里的函数
        import FreeCAD
        translate = FreeCAD.Qt.translate
        
      • 该函数会在运行时使用当前语言替换字符串;
    • QT_TRANSLATE_NOOP():
      • 可以定义为
        def QT_TRANSLATE_NOOP(context, text):
          return text
        
      • 本函数不会在运行执行任何操作,仅作为提取字符串用,它需要和 translate 配合使用,比如当在 translate 函数调用时使用了变量时;
      • 本篇暂时不使用该函数;
  • 用法:
    # 原语句
    print("My text")
    
    # 修改为:
    print(translate("context", "My text"))
    
    • context: 表示上下文,可以理解为分组,相同的分组会在语言文件被放到一起;
    • My text: 表示需要被翻译的字符串
  • 将所有需要被翻译的地方,用 translate 函数来代替;
  • 在工作台初始化时增加以下代码:
    FreeCADGui.addLanguagePath("translations目录的绝对路径")
    FreeCADGui.updateLocale()
    

三、提取和编译翻译文件

  • 收集和提取字符串

    pylupdate *.py -ts translations/myproject.ts
    
  • 如果有多个 ts 文件,先把他们合并成一个

    lconvert -i translations/a.ts translations/b.ts -o translations/one.ts
    
  • 生成 ts 文件后,可以将他们上传到 CrowdinTransifex 等翻译平台,等翻译完成后,即可下载翻译完成的文件,通常为 zip 文件,包含一个或多个已翻译的 ts 文件;

  • 将这些 ts 文件放到 translations ,然后执行以下脚本进行编译

    lrelease "translations/Maze_zh-CN.ts"
    
  • 编译完成后,将产生一个同名的 .qm 文件,如 Maze_zh-CN.qm ,这个文件会被 FreeCAD 读取和使用。

小结

本节仅简单介绍了多语言需要的工具和函数,实际应用过程中通常可以将他们编写成自动化脚本进行操作,这里不再展开。

原始内容请参考:https://github.com/ronggang/study-freecad

参考资料

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容