i18n.merge_file 无法翻译桌面文件

i18n.merge_file can't translate desktop file

我正在尝试将 autotools 项目转换为 Meson 并停留在桌面文件的翻译上。
创建所有.mo文件没有问题。
根据 manual.
,POTFILES 和 LINGUAS 位于 'po' 文件夹中 唯一的问题是 i18n.merge_file 没有生成带有翻译的文件。 我的 meson.build 看起来像

    ...
    package = meson.project_name()
    i18n = import('i18n')
    add_project_arguments('-DGETTEXT_PACKAGE="@0@"'.format(package), language:'c')
    subdir('po')
    i18n.merge_file(
      input: 'data/clipit.desktop.in',
      output: 'clipit.desktop',
      type: 'desktop',
      po_dir: 'po',
      install: true,
      install_dir: '/usr/share/applications'
    )
    ...

po/meson.build

    i18n.gettext(package, preset: 'glib')

clipit.desktop.in

[Desktop Entry]
_Name=ClipIt
_Comment=Clipboard Manager
Icon=clipit-trayicon-offline
Exec=clipit
Terminal=false
Type=Application
Categories=GTK;GNOME;Application;Utility;

ninja 安装后输出为:

[Desktop Entry]
Icon=clipit-trayicon-offline
Exec=clipit
Terminal=false
Type=Application
Categories=GTK;GNOME;Application;Utility;

它基于(https://mesonbuild.com/Porting-from-autotools.html)但也尝试遵循'eye of gnome' meson.build。运气不好。
github.

上的当前代码版本

编辑: 留下可以使用的片段,因为介子文档不包括使用 intltool。

custom_target('clipit.desktop',
  input : 'data/clipit.desktop.in',
  output : 'clipit.desktop',
  command: [intltool_merge, '-d', '-u', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'],
  install : true,
  install_dir : get_option('datadir') / 'applications')

这不起作用的原因是这不是 gettext 的有效输入:) _Name_Comment字段开头的下划线是因为intltool,另一个类似于gettext的翻译工具。要解决这个问题,只需删除这些字段的下划线即可。这将适用于 .desktop 个文件。有关更多信息,您还可以从 https://wiki.gnome.org/MigratingFromIntltoolToGettext

中获取一些提示

附带说明一下,您不应直接安装到“/usr/share/applications”,因为有人可能想要选择自定义前缀或数据目录(有关详细信息,请参阅 Meson - Built-in options)。最好用install_dir: get_option('datadir') / 'applications'.