puz_zle 您好,

感谢您报告的 bug。我进行了简单的排查,问题如论坛用户“依云”所说,是“coreutils 的 printf
不支持指定顺序”引起的。其实准确地说,打印这个出问题的字符串时调用的是 bash 自带的 printf 命令,不是来自 coreutils 的
/usr/bin/printf,不过两者都不支持指定顺序,这一点和 C 语言的 printf(通常由 glibc 实现)不一样,在国外用户提的问题
https://unix.stackexchange.com/questions/324930/handling-arguments-in-specified-order-in-usr-bin-printf-or-bash-printf
中可以看到更详细的例子。

指定顺序的功能可以让翻译更通顺,不过 printf
不支持的话,也没有什么办法,只能尽量在不改变顺序的前提下提供一个比较通顺的翻译,此字符串的翻译我已经改为“发现了 %s,位于 %s (%s)”。

另外,我检查了 grub 翻译文件中所有使用了指定顺序功能的字符串,它们总共使用了三种 printf 实现:

1 grub 自己实现的 printf,在引导阶段使用,因为此时无法使用 glibc 的 printf
2 glibc 的 printf,例如 grub 提供的各种用户空间工具命令调用的 printf 函数
3 bash printf,例如 os-prober 调用的 printf

其中只有 2 可以指定顺序。我已经修正了情况 1 和 3 的所有字符串。您可以在
https://translationproject.org/PO-files/zh_CN/grub-2.06-pre2.zh_CN.po
下载修改过的翻译文件并编译使用,看看问题是否已修正。但是上游可能要等到 grub 下个版本发布时才会使用修改过的翻译文件。

谢谢!
Wenbin Lv

On Wed, Aug 31, 2022 at 2:19 PM puz_zle <[email protected]> wrote:

> 维护者您好
> 我是在 https://archlinux.org/packages/core/x86_64/grub/ grub
> 2:2.06.r322.gd9b4638c5-3 中的 翻译文件中发现您是最后一位翻译人员
> 很抱歉打扰到您
>
> 目前 archlinux grub  包中采用 的是 您在 2022-06-19 13:53+0800 的翻译文件
>
> msgid ""
> msgstr ""
> "Project-Id-Version: grub 2.06-pre2\n"
> "Report-Msgid-Bugs-To: [email protected]\n"
> "PO-Revision-Date: 2022-06-19 13:53+0800\n"
> "Last-Translator: Wenbin Lv <[email protected]>\n"
> "Language-Team: Chinese (simplified) <[email protected]>\n"
> "Language: zh_CN\n"
> "MIME-Version: 1.0\n"
> "Content-Type: text/plain; charset=UTF-8\n"
> "Content-Transfer-Encoding: 8bit\n"
> "X-Bugs: Report translation errors to the Language-Team address.\n"
> "X-Generator: Poedit 3.1\n"
>
> 使用时候出现了问题
> 经过我的排查 觉得可能是翻译文件问题
> 可以的话 望回复
>
> 出现问题
>
> /usr/share/grub/grub-mkconfig_lib: 第 237 行:printf: “$”:无效格式字符
>
> 触发条件
> 包含win10系统
> 采用 grub-2:2.06.r261.g2f4430cc0 之后的包
>
> 尝试解决方案
>
> 采用 https://translationproject.org/PO-files/zh_CN/grub-2.06-pre1.zh_CN.po
>  翻译文件是正常的
>
> #: util/grub.d/10_windows.in:85
> #, c-format
> msgid "Found %s on %s (%s)\\n"
> msgstr "发现 %s 在 %s (%s)\\n"
>
> 发现 Windows Boot Manager 在 /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi ()
>
> 把 https://translationproject.org/PO-files/zh_CN/grub-2.06-pre2.zh_CN.po 翻译文件中的
>
> #: util/grub.d/10_windows.in:85
> #, c-format
> msgid "Found %s on %s (%s)\\n"
> msgstr "在 %2$s (%3$s) 中发现了 %1$s\\n"
>
> 修改成 删除了 $ 符
>
> #: util/grub.d/10_windows.in:85
> #, c-format
> msgid "Found %s on %s (%s)\\n"
> msgstr "在 %2s (%3s) 中发现了 %1s\\n"
>
> 后 运行正常
>
> 相关问题帖子
> https://bbs.archlinux.org/viewtopic.php?id=279042
> https://bbs.archlinuxcn.org/viewtopic.php?pid=52813
>
>

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“i18n-zh”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到[email protected]。
要在网络上查看此讨论,请访问 
https://groups.google.com/d/msgid/i18n-zh/CALbhe3oB_GU1Knb7HMGWJJ4mCgLq5A5HePN2umwJGPu%3D%2BUuw7w%40mail.gmail.com。

回复