代码之家  ›  专栏  ›  技术社区  ›  DevelJoe

防止在通过gettext的msginit程序生成的新PO文件中预填充msgstr值

  •  0
  • DevelJoe  · 技术社区  · 1 年前

    默认情况下,使用生成PO文件时 msginit 的命令 gettext 根据他们的包装 source 这个 msgstr 值预先填充了相应的 msgid 值,所以你在你的PO文件中得到这样的东西..:

    #. Message for unknown errors
    #: /Http/Response.php:367
    msgid "An unknown error occurred."
    msgstr "An unknown error occurred."
    

    使用如下命令创建:

    msginit --input=mydomain_source.pot \
          --locale=fr_FR.UTF-8 \
          --no-wrap \
          --no-translator \
          --output-file="mydomain-fr_FR.po"
    

    .pot文件当然不包含任何 消息str 值,并且已使用生成 xgettext 命令

    相反,所需的输出不应包含任何 消息str 值:

    #. Message for unknown errors
    #: /Http/Response.php:367
    msgid "An unknown error occurred."
    msgstr ""
    

    有没有办法在gettext中防止这种情况,或者这是一个bug?或者实际上是有意的行为??我们只在 消息初始化 命令,使用时 msgmerge 命令,则不会粘贴默认的msgstr值。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Guido Flohr    1 年前

    msginit 没有按照你描述的方式行事。如果你 .po 文件包含 msgstr 您以另一种方式创建的条目。您参考的文档也没有说明 消息初始化 预填充 消息str 除了元信息之外的条目。元信息(有时称为po头)是 消息str 对于 msgid “”“”(空字符串),但这不是你的问题。

    此外 消息初始化 msgmerge 命令具有完全不同的用途。您使用 消息初始化 为您支持的新语言创建一个新的空翻译文件。这个 消息合并 命令用于更新现有 .po 具有来自的新可翻译字符串的文件 .pot 文件,一个po模板文件。