aboutsummaryrefslogtreecommitdiff
0 files changed, 0 insertions, 0 deletions
, and we need your help to make it grow! Please get in touch with us on @email{guix-devel@@gnu.org} and @code{#guix} on the Libera Chat IRC network. We welcome ideas, bug reports, patches, and anything that may be helpful to the project. We particularly welcome help on packaging (@pxref{Packaging Guidelines})." msgstr "这个项目是大家合作的成果,需要你的帮助才能发展壮大!请通过 @email{guix-devel@@gnu.org} 和 Libera Chat IRC 上的 @code{#guix} 联系我们。我们欢迎各种想法、bug 反馈、补丁以及任何对项目有帮助的内容,尤其是打包方面的帮助(@pxref{Packaging Guidelines})。" #. type: cindex #: guix-git/doc/contributing.texi:10 #, no-wrap msgid "code of conduct, of contributors" msgstr "行为准则和贡献者" #. type: cindex #: guix-git/doc/contributing.texi:11 #, no-wrap msgid "contributor covenant" msgstr "贡献者契约" #. type: Plain text #: guix-git/doc/contributing.texi:17 msgid "We want to provide a warm, friendly, and harassment-free environment, so that anyone can contribute to the best of their abilities. To this end our project uses a ``Contributor Covenant'', which was adapted from @url{https://contributor-covenant.org/}. You can find a local version in the @file{CODE-OF-CONDUCT} file in the source tree." msgstr "我们希望提供一个温暖、友好、无骚扰的环境,让任何人都能尽其所能贡献。为此,我们的项目采用了“贡献者契约”,该契约改编自 @url{https://contributor-covenant.org/}。在源代码目录里的 @file{CODE-OF-CONDUCT} 文件中可以找到一份本地版。" #. type: Plain text #: guix-git/doc/contributing.texi:21 msgid "Contributors are not required to use their legal name in patches and on-line communication; they can use any name or pseudonym of their choice." msgstr "贡献者不必在提交补丁和在线交流时使用法定姓名。他们可以使用自己选择的任何名字或者笔名。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:45 #: guix-git/doc/contributing.texi:46 #, no-wrap msgid "Requirements" msgstr "需求" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Software needed to build and run Guix." msgstr "构建和运行 Guix 需要的软件。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:133 #: guix-git/doc/contributing.texi:134 #, no-wrap msgid "Building from Git" msgstr "从 Git 构建" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "The latest and greatest." msgstr "最新的并且最好的。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:325 #: guix-git/doc/contributing.texi:326 #, no-wrap msgid "Running the Test Suite" msgstr "运行测试套件" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Testing Guix." msgstr "测试 Guix。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:436 #: guix-git/doc/contributing.texi:437 #, no-wrap msgid "Running Guix Before It Is Installed" msgstr "在安装之前运行 Guix" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Hacker tricks." msgstr "黑客技巧。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:526 #: guix-git/doc/contributing.texi:527 #, no-wrap msgid "The Perfect Setup" msgstr "完美的配置" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "The right tools." msgstr "正确的工具。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:703 #: guix-git/doc/contributing.texi:704 #, no-wrap msgid "Alternative Setups" msgstr "替代配置" #. type: menuentry #: guix-git/doc/contributing.texi:43 #, fuzzy msgid "Other possible tools that do the job." msgstr "其他可能有用处的工具。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:780 #: guix-git/doc/contributing.texi:781 #, no-wrap msgid "Source Tree Structure" msgstr "源码树结构" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Source code guided tour." msgstr "源码导览。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:1031 #: guix-git/doc/contributing.texi:1032 #, no-wrap msgid "Packaging Guidelines" msgstr "打包指导" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Growing the distribution." msgstr "帮助发行版成长。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:1752 #: guix-git/doc/contributing.texi:1753 #, no-wrap msgid "Coding Style" msgstr "代码风格" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Hygiene of the contributor." msgstr "贡献者代码卫生守则。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:1859 #: guix-git/doc/contributing.texi:1860 #, no-wrap msgid "Submitting Patches" msgstr "提交补丁" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Share your work." msgstr "分享你的工作。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:2243 #: guix-git/doc/contributing.texi:2244 #, no-wrap msgid "Tracking Bugs and Changes" msgstr "跟踪程序漏洞及改动" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Keeping it all organized." msgstr "保持井井有条。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:2659 #: guix-git/doc/contributing.texi:2660 #, no-wrap msgid "Teams" msgstr "" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Coordinating efforts." msgstr "" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:2736 #: guix-git/doc/contributing.texi:2737 #, no-wrap msgid "Making Decisions" msgstr "" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Collectively choosing the way forward." msgstr "" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:2755 #: guix-git/doc/contributing.texi:2756 #, no-wrap msgid "Commit Access" msgstr "提交权利" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Pushing to the official repository." msgstr "推送到官方仓库。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:2985 #: guix-git/doc/contributing.texi:2986 #, no-wrap msgid "Reviewing the Work of Others" msgstr "审阅他人的工作" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Some guidelines for sharing reviews." msgstr "分享评论的一些指导方针。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:3084 #: guix-git/doc/contributing.texi:3085 #, no-wrap msgid "Updating the Guix Package" msgstr "更新 Guix 软件包" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Updating the Guix package definition." msgstr "更新 Guix 的软件包定义。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:3121 #: guix-git/doc/contributing.texi:3122 #, no-wrap msgid "Deprecation Policy" msgstr "" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Commitments and tools for deprecation." msgstr "" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:3312 #: guix-git/doc/contributing.texi:3313 #, no-wrap msgid "Writing Documentation" msgstr "撰写文档" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Improving documentation in GNU Guix." msgstr "完善 GNU Guix 中的文档。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:3356 #: guix-git/doc/contributing.texi:3357 #, no-wrap msgid "Translating Guix" msgstr "翻译 Guix" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Make Guix speak your native language." msgstr "用您的母语翻译 Guix。" #. type: section #: guix-git/doc/contributing.texi:43 guix-git/doc/contributing.texi:3639 #: guix-git/doc/contributing.texi:3640 #, no-wrap msgid "Contributing to Guix's Infrastructure" msgstr "" #. type: menuentry #: guix-git/doc/contributing.texi:43 msgid "Make Guix ecosystem work better." msgstr "" #. type: Plain text #: guix-git/doc/contributing.texi:50 msgid "You can easily hack on Guix itself using Guix and Git, which we use for version control (@pxref{Building from Git})." msgstr "你可以轻松地使用 Guix 和 Git 来折腾 Guix 本身,我们将其用于版本控制。(@pxref{Building from Git})。" #. type: Plain text #: guix-git/doc/contributing.texi:55 msgid "But when packaging Guix for foreign distros or when bootstrapping on systems without Guix, and if you decide to not just trust and install our readily made binary (@pxref{Binary Installation}), you can download a release version of our reproducible source tarball and read on." msgstr "但是,在为外国发行版打包 Guix 或在没有 Guix 的系统上引导时,如果您决定不要直接信任并安装我们现成的二进制文件(@pxref{Binary Installation}),您可以下载一份我们可复现的源码包的发布版并继续阅读。" #. type: Plain text #: guix-git/doc/contributing.texi:60 msgid "This section lists requirements when building Guix from source. The build procedure for Guix is the same as for other GNU software, and is not covered here. Please see the files @file{README} and @file{INSTALL} in the Guix source tree for additional details." msgstr "这个小节列举了从源代码构建 Guix 的要求。构建 Guix 的步骤和其它 GNU 软件相同,这里不介绍。请阅读 Guix 源码树里的 @file{README} 和 @file{INSTALL} 文件以了解更多细节。" #. type: cindex #: guix-git/doc/contributing.texi:61 #, no-wrap msgid "official website" msgstr "官方网站" #. type: Plain text #: guix-git/doc/contributing.texi:64 msgid "GNU Guix is available for download from its website at @url{https://www.gnu.org/software/guix/}." msgstr "GNU Guix 可以从它的网站下载 @url{https://www.gnu.org/software/guix/}。" #. type: Plain text #: guix-git/doc/contributing.texi:66 msgid "GNU Guix depends on the following packages:" msgstr "GNU Guix 依赖以下软件包:" #. type: item #: guix-git/doc/contributing.texi:68 #, no-wrap msgid "@url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x," msgstr "@url{https://gnu.org/software/guile/, GNU Guile},版本 3.0.x," #. type: itemize #: guix-git/doc/contributing.texi:70 msgid "version 3.0.3 or later;" msgstr "版本 3.0.3 或更新;" #. type: item #: guix-git/doc/contributing.texi:70 #, no-wrap msgid "@url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version" msgstr "@url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt},版本" #. type: itemize #: guix-git/doc/contributing.texi:72 msgid "0.1.0 or later;" msgstr "0.1.0 或更新;" #. type: itemize #: guix-git/doc/contributing.texi:78 msgid "@uref{https://gitlab.com/gnutls/guile/, Guile-GnuTLS} (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile})@footnote{The Guile bindings to @uref{https://gnutls.org/, GnuTLS} were distributed as part of GnuTLS until version 3.7.8 included.};" msgstr "@uref{https://gitlab.com/gnutls/guile/, Guile-GnuTLS}(@pxref{Guile 准备工作, 如何为 Guile 安装 GnuTLS 绑定,, gnutls-guile, GnuTLS-Guile})@footnote{关于 @uref{https://gnutls.org/, GnuTLS} 的 Guile 绑定作为 GnuTLS 直到(含)版本 3.7.8 的一部分分发。};" #. type: itemize #: guix-git/doc/contributing.texi:81 msgid "@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0 or later;" msgstr "@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, 版本 0.1.0 或更新;" #. type: item #: guix-git/doc/contributing.texi:81 #, no-wrap msgid "@uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib}," msgstr "@uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib}," #. type: itemize #: guix-git/doc/contributing.texi:83 msgid "version 0.1.0 or later;" msgstr "版本 0.1.0 或更新;" #. type: item #: guix-git/doc/contributing.texi:83 #, no-wrap msgid "@uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};" msgstr "@uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};" #. type: item #: guix-git/doc/contributing.texi:84 #, no-wrap msgid "@uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};" msgstr "@uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};" #. type: itemize #: guix-git/doc/contributing.texi:88 msgid "@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.5.0 or later;" msgstr "@uref{https://gitlab.com/guile-git/guile-git, Guile-Git},版本 0.5.0 或更新;" #. type: item #: guix-git/doc/contributing.texi:88 #, no-wrap msgid "@uref{https://git-scm.com, Git} (yes, both!);" msgstr "@uref{https://git-scm.com, Git}(是的,两个都是!);" #. type: item #: guix-git/doc/contributing.texi:89 #, no-wrap msgid "@uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}" msgstr "@uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}" #. type: itemize #: guix-git/doc/contributing.texi:91 msgid "4.3.0 or later;" msgstr "4.3.0 或更新;" #. type: item #: guix-git/doc/contributing.texi:91 #, no-wrap msgid "@url{https://www.gnu.org/software/make/, GNU Make}." msgstr "@url{https://www.gnu.org/software/make/, GNU Make}." #. type: Plain text #: guix-git/doc/contributing.texi:95 msgid "The following dependencies are optional:" msgstr "这些依赖是可选的:" #. type: itemize #: guix-git/doc/contributing.texi:103 msgid "Support for build offloading (@pxref{Daemon Offload Setup}) and @command{guix copy} (@pxref{Invoking guix copy}) depends on @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version 0.13.0 or later." msgstr "对构建下发(@pxref{Daemon Offload Setup})和 @command{guix copy} (@pxref{Invoking guix copy})的支持依赖于 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},版本 0.13.0 或更新。" #. type: itemize #: guix-git/doc/contributing.texi:108 msgid "@uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd}, for zstd compression and decompression in @command{guix publish} and for substitutes (@pxref{Invoking guix publish})." msgstr "@uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd},用于在 @command{guix publish} 中进行 zstd 压缩和解压缩,以及用于 substitutes (@pxref{Invoking guix publish})。" #. type: itemize #: guix-git/doc/contributing.texi:112 msgid "@uref{https://ngyro.com/software/guile-semver.html, Guile-Semver} for the @code{crate} importer (@pxref{Invoking guix import})." msgstr "@uref{https://ngyro.com/software/guile-semver.html, Guile-Semver} 用于 @code{crate} 导入器(@pxref{Invoking guix import})。" #. type: itemize #: guix-git/doc/contributing.texi:117 msgid "@uref{https://www.nongnu.org/guile-lib/doc/ref/htmlprag/, Guile-Lib} for the @code{go} importer (@pxref{Invoking guix import}) and for some of the ``updaters'' (@pxref{Invoking guix refresh})." msgstr "@uref{https://www.nongnu.org/guile-lib/doc/ref/htmlprag/, Guile-Lib} 用于 @code{go} 导入器(@pxref{Invoking guix import})以及一些“升级器”(@pxref{Invoking guix refresh})。" #. type: itemize #: guix-git/doc/contributing.texi:121 msgid "When @url{http://www.bzip.org, libbz2} is available, @command{guix-daemon} can use it to compress build logs." msgstr "当 @url{http://www.bzip.org, libbz2} 可用时,@command{guix-daemon} 可以用它来压缩构建日志。" #. type: Plain text #: guix-git/doc/contributing.texi:125 msgid "Unless @option{--disable-daemon} was passed to @command{configure}, the following packages are also needed:" msgstr "除非 @option{--disable-daemon} 被传给 @command{configure},以下软件包也被需要:" #. type: item #: guix-git/doc/contributing.texi:127 #, no-wrap msgid "@url{https://gnupg.org/, GNU libgcrypt};" msgstr "@url{https://gnupg.org/, GNU libgcrypt};" #. type: item #: guix-git/doc/contributing.texi:128 #, no-wrap msgid "@url{https://sqlite.org, SQLite 3};" msgstr "@url{https://sqlite.org, SQLite 3};" #. type: item #: guix-git/doc/contributing.texi:129 #, no-wrap msgid "@url{https://gcc.gnu.org, GCC's g++}, with support for the" msgstr "@url{https://gcc.gnu.org, GCC's g++},带有支持对于" #. type: itemize #: guix-git/doc/contributing.texi:131 msgid "C++11 standard." msgstr "C++11 标准。" #. type: Plain text #: guix-git/doc/contributing.texi:138 msgid "If you want to hack Guix itself, it is recommended to use the latest version from the Git repository:" msgstr "如果你想折腾 Guix 本身,建议使用 Git 仓库里最新的版本:" #. type: example #: guix-git/doc/contributing.texi:141 #, no-wrap msgid "git clone https://git.savannah.gnu.org/git/guix.git\n" msgstr "git clone https://git.savannah.gnu.org/git/guix.git\n" #. type: cindex #: guix-git/doc/contributing.texi:143 #, no-wrap msgid "authentication, of a Guix checkout" msgstr "Guix 签出的身份认证" #. type: Plain text #: guix-git/doc/contributing.texi:148 msgid "How do you ensure that you obtained a genuine copy of the repository? To do that, run @command{guix git authenticate}, passing it the commit and OpenPGP fingerprint of the @dfn{channel introduction} (@pxref{Invoking guix git authenticate}):" msgstr "如何确保已获得存储库的真实副本?为此请运行 @command{guix git authenticate},将 @dfn{channel introduction}(@pxref{Invoking guix git authenticate})的提交和 OpenPGP 指纹传给它:" #. type: example #: guix-git/doc/contributing.texi:155 #, no-wrap msgid "" "git fetch origin keyring:keyring\n" "guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" msgstr "" "git fetch origin keyring:keyring\n" "guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:160 msgid "This command completes with exit code zero on success; it prints an error message and exits with a non-zero code otherwise." msgstr "此命令完成后,若成功则退出代码为零;否则打印一条错误消息,以非零代码退出。" #. type: Plain text #: guix-git/doc/contributing.texi:167 msgid "As you can see, there is a chicken-and-egg problem: you first need to have Guix installed. Typically you would install Guix System (@pxref{System Installation}) or Guix on top of another distro (@pxref{Binary Installation}); in either case, you would verify the OpenPGP signature on the installation medium. This ``bootstraps'' the trust chain." msgstr "正如你所看到的,这里存在一个先决条件的问题:你首先需要安装 Guix。典型地,你会安装 Guix 系统(@pxref{System Installation})或在 另一个发行版上安装 Guix(@pxref{Binary Installation});无论哪种情况,你 都需要在安装介质上验证 OpenPGP 签名。这“引导”了信任链。" #. type: Plain text #: guix-git/doc/contributing.texi:172 msgid "The easiest way to set up a development environment for Guix is, of course, by using Guix! The following command starts a new shell where all the dependencies and appropriate environment variables are set up to hack on Guix:" msgstr "设置 Guix 开发环境的最简单的方式当然是使用 Guix!下面这些命令启动一个 shell,所有的依赖和环境变量都为折腾 Guix 设置好了:" #. type: example #: guix-git/doc/contributing.texi:175 #, no-wrap msgid "guix shell -D guix -CPW\n" msgstr "guix shell -D guix -CPW\n" #. type: Plain text #: guix-git/doc/contributing.texi:178 msgid "or even, from within a Git worktree for Guix:" msgstr "或者,从一个 Git worktree 内部使用 Guix:" #. type: example #: guix-git/doc/contributing.texi:181 #, no-wrap msgid "guix shell -CPW\n" msgstr "guix shell -CPW\n" #. type: Plain text #: guix-git/doc/contributing.texi:186 msgid "If @option{-C} (short for @option{--container}) is not supported on your system, try @command{--pure} instead of @option{-CPW}. @xref{Invoking guix shell}, for more information on that command." msgstr "如果 @option{-C}(@option{--container} 的缩写)在你的系统上不被支持,请尝试使用 @command{--pure} 来代替 @option{-CPW}。有关该命令的更多信息见 @xref{Invoking guix shell}。" #. type: Plain text #: guix-git/doc/contributing.texi:190 msgid "If you are unable to use Guix when building Guix from a checkout, the following are the required packages in addition to those mentioned in the installation instructions (@pxref{Requirements})." msgstr "如果在从检出中构建 Guix 时无法使用 Guix,则除了安装说明中提到的 软件包(@pxref{Requirements})外,以下是所需的软件包。" #. type: item #: guix-git/doc/contributing.texi:192 #, no-wrap msgid "@url{https://gnu.org/software/autoconf/, GNU Autoconf};" msgstr "@url{https://gnu.org/software/autoconf/, GNU Autoconf};" #. type: item #: guix-git/doc/contributing.texi:193 #, no-wrap msgid "@url{https://gnu.org/software/automake/, GNU Automake};" msgstr "@url{https://gnu.org/software/automake/, GNU Automake};" #. type: item #: guix-git/doc/contributing.texi:194 #, no-wrap msgid "@url{https://gnu.org/software/gettext/, GNU Gettext};" msgstr "@url{https://gnu.org/software/gettext/, GNU Gettext};" #. type: item #: guix-git/doc/contributing.texi:195 #, no-wrap msgid "@url{https://gnu.org/software/texinfo/, GNU Texinfo};" msgstr "@url{https://gnu.org/software/texinfo/, GNU Texinfo};" #. type: item #: guix-git/doc/contributing.texi:196 #, no-wrap msgid "@url{https://www.graphviz.org/, Graphviz};" msgstr "@url{https://www.graphviz.org/, Graphviz};" #. type: item #: guix-git/doc/contributing.texi:197 #, no-wrap msgid "@url{https://www.gnu.org/software/help2man/, GNU Help2man (optional)}." msgstr "@url{https://www.gnu.org/software/help2man/, GNU Help2man(可选)}。" #. type: Plain text #: guix-git/doc/contributing.texi:202 msgid "On Guix, extra dependencies can be added by instead running @command{guix shell}:" msgstr "在 Guix 上,额外的依赖也可以通过 @command{guix shell} 添加:" #. type: example #: guix-git/doc/contributing.texi:205 #, no-wrap msgid "guix shell -D guix help2man git strace --pure\n" msgstr "guix shell -D guix help2man git strace --pure\n" #. type: Plain text #: guix-git/doc/contributing.texi:209 msgid "From there you can generate the build system infrastructure using Autoconf and Automake:" msgstr "在这里你可以使用 Autoconf 和 Automake 生成构建系统的基础设施:" #. type: example #: guix-git/doc/contributing.texi:212 #, no-wrap msgid "./bootstrap\n" msgstr "./bootstrap\n" #. type: Plain text #: guix-git/doc/contributing.texi:215 msgid "If you get an error like this one:" msgstr "若你得到一个像这样的错误:" #. type: example #: guix-git/doc/contributing.texi:218 #, no-wrap msgid "configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES\n" msgstr "configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES\n" #. type: Plain text #: guix-git/doc/contributing.texi:227 msgid "it probably means that Autoconf couldn’t find @file{pkg.m4}, which is provided by pkg-config. Make sure that @file{pkg.m4} is available. The same holds for the @file{guile.m4} set of macros provided by Guile. For instance, if you installed Automake in @file{/usr/local}, it wouldn’t look for @file{.m4} files in @file{/usr/share}. In that case, you have to invoke the following command:" msgstr "它可能意味着 Autoconf 无法找到由 pkg-config 提供的 @file{pkg.m4}。请确保 @file{pkg.m4} 可用。由 Guile 提供的 @file{guile.m4} 宏也类似。假如你的 Automake 安装在 @file{/usr/local},那么它不会从 @file{/usr/share} 里寻找 @file{.m4} 文件。这种情况下,你必须执行下面这个命令:" #. type: example #: guix-git/doc/contributing.texi:230 #, no-wrap msgid "export ACLOCAL_PATH=/usr/share/aclocal\n" msgstr "export ACLOCAL_PATH=/usr/share/aclocal\n" #. type: Plain text #: guix-git/doc/contributing.texi:234 msgid "@xref{Macro Search Path,,, automake, The GNU Automake Manual}, for more information." msgstr "更多信息请参考 @xref{Macro Search Path,,, automake, The GNU Automake Manual}." #. type: cindex #: guix-git/doc/contributing.texi:235 #, no-wrap msgid "state directory" msgstr "state 目录" #. type: cindex #: guix-git/doc/contributing.texi:236 #, no-wrap msgid "localstatedir" msgstr "localstatedir" #. type: cindex #: guix-git/doc/contributing.texi:237 #, no-wrap msgid "system configuration directory" msgstr "系统配置目录" #. type: cindex #: guix-git/doc/contributing.texi:238 #, no-wrap msgid "sysconfdir" msgstr "sysconfdir" #. type: Plain text #: guix-git/doc/contributing.texi:240 msgid "Then, run:" msgstr "然后,运行:" #. type: example #: guix-git/doc/contributing.texi:243 #, no-wrap msgid "./configure\n" msgstr "./configure\n" #. type: Plain text #: guix-git/doc/contributing.texi:253 #, fuzzy msgid "Optionally, @code{--localstatedir} and @code{--sysconfdir} can also be provided as arguments. By default, @code{localstatedir} is @file{/var} (@pxref{The Store}, for information about this) and @code{sysconfdir} is @file{/etc}. Note that you will probably not run @command{make install} at the end (you don't have to) but it's still important to pass the right @code{localstatedir} and @code{sysconfdir} values, which get recorded in the @code{(guix config)} Guile module." msgstr "... 这里的 @file{/var} 是普通的 @code{localstatedir} 值 (@pxref{The Store}, 获取更多信息)。 请注意,即使在最后不运行 @command{make install}, 也要传递正确的参数 @code{localstatedir}。" #. type: Plain text #: guix-git/doc/contributing.texi:256 msgid "Finally, you can build Guix and, if you feel so inclined, run the tests (@pxref{Running the Test Suite}):" msgstr "最后,你可以构建 Guix。若你希望,还可以运行测试 (@pxref{运行测试套件}):" #. type: example #: guix-git/doc/contributing.texi:260 #, no-wrap msgid "" "make\n" "make check\n" msgstr "" "make\n" "make check\n" #. type: Plain text #: guix-git/doc/contributing.texi:266 msgid "If anything fails, take a look at installation instructions (@pxref{Installation}) or send a message to the @email{guix-devel@@gnu.org, mailing list}." msgstr "如果遇到任何错误,请参考“安装指导”(@pxref{Installation})或者给@email{guix-devel@@gnu.org, 邮件列表}发邮件。" #. type: Plain text #: guix-git/doc/contributing.texi:269 msgid "From there on, you can authenticate all the commits included in your checkout by running:" msgstr "从这开始,你可以运行下面的命令认证检出中的所有提交:" #. type: example #: guix-git/doc/contributing.texi:274 #, no-wrap msgid "" "guix git authenticate \\\n" " 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" msgstr "" "guix git authenticate \\\n" " 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:281 msgid "The first run takes a couple of minutes, but subsequent runs are faster. On subsequent runs, you can run the command without any arguments since the @dfn{introduction} (the commit ID and OpenPGP fingerprints above) will have been recorded@footnote{This requires a recent version of Guix, from May 2024 or more recent.}:" msgstr "" #. type: example #: guix-git/doc/contributing.texi:284 guix-git/doc/contributing.texi:2870 #, no-wrap msgid "guix git authenticate\n" msgstr "guix git authenticate\n" #. type: Plain text #: guix-git/doc/contributing.texi:291 msgid "When your configuration for your local Git repository doesn't match the default one, you can provide the reference for the @code{keyring} branch @i{via} the @option{-k} option. The following example assumes that you have a Git remote called @samp{myremote} pointing to the official repository:" msgstr "或者,当你的本地 Git 仓库与默认的不符时,你可以通过环境变量 @code{GUIX_GIT_KEYRING} 提供一个对@code{keyring} 分支的引用。下面的例子假设你有一个名为 @samp{myremote} 的 Git 远程分支,它指向官方仓库:" #. type: example #: guix-git/doc/contributing.texi:297 #, no-wrap msgid "" "guix git authenticate \\\n" " -k myremote/keyring \\\n" " 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" msgstr "" "guix git authenticate \\\n" " -k myremote/keyring \\\n" " 9edb3f66fd807b096b48283debdcddccfea34bad \\\n" " \"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:301 msgid "@xref{Invoking guix git authenticate}, for more information on this command." msgstr "@xref{Invoking guix git authenticate},以获得关于此命令的更多信息。" #. type: quotation #: guix-git/doc/contributing.texi:302 guix-git/doc/contributing.texi:1490 #: guix-git/doc/contributing.texi:2104 guix-git/doc/contributing.texi:2149 #: guix-git/doc/contributing.texi:2172 guix-git/doc/contributing.texi:2197 #: guix-git/doc/contributing.texi:2843 guix-git/doc/guix.texi:816 #: guix-git/doc/guix.texi:842 guix-git/doc/guix.texi:1213 #: guix-git/doc/guix.texi:1238 guix-git/doc/guix.texi:1311 #: guix-git/doc/guix.texi:1698 guix-git/doc/guix.texi:1922 #: guix-git/doc/guix.texi:1997 guix-git/doc/guix.texi:2185 #: guix-git/doc/guix.texi:2407 guix-git/doc/guix.texi:3703 #: guix-git/doc/guix.texi:4108 guix-git/doc/guix.texi:4628 #: guix-git/doc/guix.texi:4642 guix-git/doc/guix.texi:4725 #: guix-git/doc/guix.texi:4740 guix-git/doc/guix.texi:4803 #: guix-git/doc/guix.texi:5033 guix-git/doc/guix.texi:5947 #: guix-git/doc/guix.texi:5980 guix-git/doc/guix.texi:6608 #: guix-git/doc/guix.texi:6887 guix-git/doc/guix.texi:7021 #: guix-git/doc/guix.texi:7050 guix-git/doc/guix.texi:7091 #: guix-git/doc/guix.texi:7137 guix-git/doc/guix.texi:7144 #: guix-git/doc/guix.texi:7188 guix-git/doc/guix.texi:8839 #: guix-git/doc/guix.texi:11191 guix-git/doc/guix.texi:11340 #: guix-git/doc/guix.texi:11410 guix-git/doc/guix.texi:13381 #: guix-git/doc/guix.texi:13421 guix-git/doc/guix.texi:13521 #: guix-git/doc/guix.texi:13689 guix-git/doc/guix.texi:13796 #: guix-git/doc/guix.texi:13808 guix-git/doc/guix.texi:14711 #: guix-git/doc/guix.texi:16689 guix-git/doc/guix.texi:17219 #: guix-git/doc/guix.texi:17277 guix-git/doc/guix.texi:17310 #: guix-git/doc/guix.texi:17388 guix-git/doc/guix.texi:17789 #: guix-git/doc/guix.texi:18804 guix-git/doc/guix.texi:19374 #: guix-git/doc/guix.texi:19928 guix-git/doc/guix.texi:19989 #: guix-git/doc/guix.texi:22538 guix-git/doc/guix.texi:23460 #: guix-git/doc/guix.texi:23643 guix-git/doc/guix.texi:23704 #: guix-git/doc/guix.texi:24180 guix-git/doc/guix.texi:29230 #: guix-git/doc/guix.texi:29847 guix-git/doc/guix.texi:33301 #: guix-git/doc/guix.texi:37755 guix-git/doc/guix.texi:41138 #: guix-git/doc/guix.texi:43145 guix-git/doc/guix.texi:43219 #: guix-git/doc/guix.texi:43261 guix-git/doc/guix.texi:43607 #: guix-git/doc/guix.texi:43790 guix-git/doc/guix.texi:43803 #: guix-git/doc/guix.texi:43971 guix-git/doc/guix.texi:44078 #: guix-git/doc/guix.texi:44124 guix-git/doc/guix.texi:44181 #: guix-git/doc/guix.texi:44208 guix-git/doc/guix.texi:44546 #: guix-git/doc/guix.texi:45958 guix-git/doc/guix.texi:46008 #: guix-git/doc/guix.texi:46064 guix-git/doc/guix.texi:46172 #: guix-git/doc/guix.texi:48074 guix-git/doc/guix.texi:48120 #: guix-git/doc/guix.texi:48214 guix-git/doc/guix.texi:48279 #: guix-git/doc/guix.texi:48675 guix-git/doc/guix.texi:48719 #, no-wrap msgid "Note" msgstr "注" #. type: quotation #: guix-git/doc/contributing.texi:306 msgid "By default, hooks are installed such that @command{guix git authenticate} is invoked anytime you run @command{git pull} or @command{git push}." msgstr "" #. type: Plain text #: guix-git/doc/contributing.texi:310 msgid "After updating the repository, @command{make} might fail with an error similar to the following example:" msgstr "在每次更新仓库后,@command{make} 可能会因为一个错误而失败,就像下面的例子:" #. type: example #: guix-git/doc/contributing.texi:314 #, no-wrap msgid "" "error: failed to load 'gnu/packages/linux.scm':\n" "ice-9/eval.scm:293:34: In procedure abi-check: #<record-type <origin>>: record ABI mismatch; recompilation needed\n" msgstr "" "error: failed to load 'gnu/packages/linux.scm':\n" "ice-9/eval.scm:293:34: In procedure abi-check: #<record-type <origin>>: record ABI mismatch; recompilation needed\n" #. type: Plain text #: guix-git/doc/contributing.texi:320 msgid "This means that one of the record types that Guix defines (in this example, the @code{origin} record) has changed, and all of guix needs to be recompiled to take that change into account. To do so, run @command{make clean-go} followed by @command{make}." msgstr "它的意思是 Guix 定义的一个记录类型变动了(在这个例子中,为 @code{origin} 记录),并且全部 guix 都需要重编译来让这个变动生效。运行 @command{make clean-go} 和 @command{make} 来重新编译。" #. type: Plain text #: guix-git/doc/contributing.texi:324 msgid "Should @command{make} fail with an Automake error message after updating, you need to repeat the steps outlined in this section, commencing with @command{./bootstrap}." msgstr "" #. type: cindex #: guix-git/doc/contributing.texi:328 #, no-wrap msgid "test suite" msgstr "测试套件" #. type: Plain text #: guix-git/doc/contributing.texi:334 msgid "After a successful @command{configure} and @code{make} run, it is a good idea to run the test suite. It can help catch issues with the setup or environment, or bugs in Guix itself---and really, reporting test failures is a good way to help improve the software. To run the test suite, type:" msgstr "成功执行 @command{configure} 和 @code{make} 之后,最好运行测试套件。它可以帮助查找设置和环境的错误,或者是 Guix 自身的 bug--并且,报告测试错误是帮助改进软件的好方法。输入下面的命令以运行测试套件:" #. type: example #: guix-git/doc/contributing.texi:337 #, no-wrap msgid "make check\n" msgstr "make check\n" #. type: Plain text #: guix-git/doc/contributing.texi:344 msgid "Test cases can run in parallel: you can use the @code{-j} option of GNU@tie{}make to speed things up. The first run may take a few minutes on a recent machine; subsequent runs will be faster because the store that is created for test purposes will already have various things in cache." msgstr "测试用例可以并行运行:你可以用 GNU@tie{}make 的 @code{-j} 参数来加速运行。在一台较新的机器上第一次运行可能会花几分钟,后续的运行会更快,因为为测试创建的仓库已经包含了各种缓存。" #. type: Plain text #: guix-git/doc/contributing.texi:347 msgid "It is also possible to run a subset of the tests by defining the @code{TESTS} makefile variable as in this example:" msgstr "你还可以通过定义 makefile 的 @code{TESTS} 变量来运行测试的一个子集,如同以下示例:" #. type: example #: guix-git/doc/contributing.texi:350 #, no-wrap msgid "make check TESTS=\"tests/store.scm tests/cpio.scm\"\n" msgstr "make check TESTS=\"tests/store.scm tests/cpio.scm\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:355 msgid "By default, tests results are displayed at a file level. In order to see the details of every individual test cases, it is possible to define the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:" msgstr "默认情况下,测试结果只展示到文件层级。为了查看每个独立的测试用例的详情,可以像这样定义 @code{SCM_LOG_DRIVER_FLAGS} makefile 变量:" #. type: example #: guix-git/doc/contributing.texi:358 #, no-wrap msgid "make check TESTS=\"tests/base64.scm\" SCM_LOG_DRIVER_FLAGS=\"--brief=no\"\n" msgstr "make check TESTS=\"tests/base64.scm\" SCM_LOG_DRIVER_FLAGS=\"--brief=no\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:366 msgid "The underlying SRFI 64 custom Automake test driver used for the 'check' test suite (located at @file{build-aux/test-driver.scm}) also allows selecting which test cases to run at a finer level, via its @option{--select} and @option{--exclude} options. Here's an example, to run all the test cases from the @file{tests/packages.scm} test file whose names start with ``transaction-upgrade-entry'':" msgstr "" #. type: example #: guix-git/doc/contributing.texi:370 #, no-wrap msgid "" "export SCM_LOG_DRIVER_FLAGS=\"--select=^transaction-upgrade-entry\"\n" "make check TESTS=\"tests/packages.scm\"\n" msgstr "" "export SCM_LOG_DRIVER_FLAGS=\"--select=^transaction-upgrade-entry\"\n" "make check TESTS=\"tests/packages.scm\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:376 msgid "Those wishing to inspect the results of failed tests directly from the command line can add the @option{--errors-only=yes} option to the @code{SCM_LOG_DRIVER_FLAGS} makefile variable and set the @code{VERBOSE} Automake makefile variable, as in:" msgstr "" #. type: example #: guix-git/doc/contributing.texi:379 #, no-wrap msgid "make check SCM_LOG_DRIVER_FLAGS=\"--brief=no --errors-only=yes\" VERBOSE=1\n" msgstr "make check SCM_LOG_DRIVER_FLAGS=\"--brief=no --errors-only=yes\" VERBOSE=1\n" #. type: Plain text #: guix-git/doc/contributing.texi:384 msgid "The @option{--show-duration=yes} option can be used to print the duration of the individual test cases, when used in combination with @option{--brief=no}:" msgstr "" #. type: example #: guix-git/doc/contributing.texi:387 #, no-wrap msgid "make check SCM_LOG_DRIVER_FLAGS=\"--brief=no --show-duration=yes\"\n" msgstr "make check SCM_LOG_DRIVER_FLAGS=\"--brief=no --show-duration=yes\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:391 msgid "@xref{Parallel Test Harness,,,automake,GNU Automake} for more information about the Automake Parallel Test Harness." msgstr "" #. type: Plain text #: guix-git/doc/contributing.texi:396 msgid "Upon failure, please email @email{bug-guix@@gnu.org} and attach the @file{test-suite.log} file. Please specify the Guix version being used as well as version numbers of the dependencies (@pxref{Requirements}) in your message." msgstr "遇到错误时,请给 @email{bug-guix@@gnu.org} 发邮件,并附带 @file{test-suite.log} 文件。请在消息里说明使用的 Guix 的版本信息和依赖(@pxref{Requirements})的版本信息。" #. type: Plain text #: guix-git/doc/contributing.texi:400 msgid "Guix also comes with a whole-system test suite that tests complete Guix System instances. It can only run on systems where Guix is already installed, using:" msgstr "Guix 还附带了一个可以测试整个 Guix 系统实例的全系统测试套件。它只能在已经安装 Guix 的系统上运行,使用:" #. type: example #: guix-git/doc/contributing.texi:403 #, no-wrap msgid "make check-system\n" msgstr "make check-system\n" #. type: Plain text #: guix-git/doc/contributing.texi:407 msgid "or, again, by defining @code{TESTS} to select a subset of tests to run:" msgstr "或者再次,通过定义 @code{TESTS} 选择测试的一个子集来运行:" #. type: example #: guix-git/doc/contributing.texi:410 #, no-wrap msgid "make check-system TESTS=\"basic mcron\"\n" msgstr "make check-system TESTS=\"basic mcron\"\n" #. type: Plain text #: guix-git/doc/contributing.texi:418 msgid "These system tests are defined in the @code{(gnu tests @dots{})} modules. They work by running the operating systems under test with lightweight instrumentation in a virtual machine (VM). They can be computationally intensive or rather cheap, depending on whether substitutes are available for their dependencies (@pxref{Substitutes}). Some of them require a lot of storage space to hold VM images." msgstr "这些系统测试在 @code{(gnu tests @dots{})} 模块中定义。原理是,在一个虚拟机(virtual machine, VM)中,以轻量级的仪表运行待测试的操作系统。它们的计算密集程度可能很高,也可能相对较低,这取决于其依赖项是否有 substitues 可用(@pxref{Substitutes})。其中一些需要大量存储空间来保存 VM 镜像。" #. type: Plain text #: guix-git/doc/contributing.texi:420 msgid "If you encounter an error like:" msgstr "若你遇到一个像这样的错误:" #. type: example #: guix-git/doc/contributing.texi:426 #, no-wrap msgid "" "Compiling Scheme modules...\n" "ice-9/eval.scm:142:16: In procedure compile-top-call:\n" "error: all-system-tests: unbound variable\n" "hint: Did you forget `(use-modules (gnu tests))'?\n" msgstr "" #. type: Plain text #: guix-git/doc/contributing.texi:432 msgid "there may be inconsistencies in the work tree from previous builds. To resolve this, try running @command{make clean-go} followed by @command{make}." msgstr "工作树中可能存在来自先前构建的不一致处。要解决此问题,尝试运行 @command{make clean-go},再运行 @command{make}。" #. type: Plain text #: guix-git/doc/contributing.texi:435 msgid "Again in case of test failures, please send @email{bug-guix@@gnu.org} all the details." msgstr "再次,若遇到测试错误,请向 @email{bug-guix@@gnu.org} 发送所有细节信息。" #. type: Plain text #: guix-git/doc/contributing.texi:443 msgid "In order to keep a sane working environment, you will find it useful to test the changes made in your local source tree checkout without actually installing them. So that you can distinguish between your ``end-user'' hat and your ``motley'' costume." msgstr "为了保持一个正常的工作环境,你会发现在不实际安装的情况下测试本地源码树签出中的更改是非常有用的。这样你可以更好地区分自己作为“最终用户”和“测试员”的角色。" #. type: Plain text #: guix-git/doc/contributing.texi:453 msgid "To that end, all the command-line tools can be used even if you have not run @code{make install}. To do that, you first need to have an environment with all the dependencies available (@pxref{Building from Git}), and then simply prefix each command with @command{./pre-inst-env} (the @file{pre-inst-env} script lives in the top build tree of Guix; @pxref{Building from Git} to generate it). As an example, here is how you would build the @code{hello} package as defined in your working tree (this assumes @command{guix-daemon} is already running on your system; it's OK if it's a different version):" msgstr "这样,即使你没有运行 @code{make install},所有的命令行工具都可以使用。为此,你先要有一个全部依赖都可用的环境(@pxref{从 Git 构建}),然后简单地为每个命令添加前缀 @command{./pre-inst-env}(@file{pre-inst-env} 脚本在 Guix 构建树的最顶层,@pxref{从 Git 构建}来生成它)。作为例子,以下是你如何构建 @code{hello} 包,如同在你的工作树中定义的那样(这假设了 @command{guix-daemon} 正在运行于你的系统上;如果是不同的版本也可以):" #. type: example #: guix-git/doc/contributing.texi:456 #, no-wrap msgid "$ ./pre-inst-env guix build hello\n" msgstr "$ ./pre-inst-env guix build hello\n" #. type: Plain text #: guix-git/doc/contributing.texi:460 msgid "Similarly, an example for a Guile session using the Guix modules:" msgstr "类似地,一个使用 Guix 模块的 Guile 会话的例子:" #. type: example #: guix-git/doc/contributing.texi:463 #, no-wrap msgid "" "$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'\n" "\n" msgstr "" "$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'\n" "\n" #. type: example #: guix-git/doc/contributing.texi:465 #, no-wrap msgid ";;; (\"x86_64-linux\")\n" msgstr ";;; (\"x86_64-linux\")\n" #. type: cindex #: guix-git/doc/contributing.texi:468 #, no-wrap msgid "REPL" msgstr "REPL" #. type: cindex #: guix-git/doc/contributing.texi:469 #, no-wrap msgid "read-eval-print loop" msgstr "读取-估值-打印(read-eval-print)循环" #. type: Plain text #: guix-git/doc/contributing.texi:471 msgid "@dots{} and for a REPL (@pxref{Using Guix Interactively}):" msgstr "@dots{} 以及为了一个 REPL(@pxref{Using Guix Interactively}):" #. type: example #: guix-git/doc/contributing.texi:486 #, no-wrap msgid "" "$ ./pre-inst-env guile\n" "scheme@@(guile-user)> ,use(guix)\n" "scheme@@(guile-user)> ,use(gnu)\n" "scheme@@(guile-user)> (define snakes\n" " (fold-packages\n" " (lambda (package lst)\n" " (if (string-prefix? \"python\"\n" " (package-name package))\n" " (cons package lst)\n" " lst))\n" " '()))\n" "scheme@@(guile-user)> (length snakes)\n" "$1 = 361\n" msgstr "" "$ ./pre-inst-env guile\n" "scheme@@(guile-user)> ,use(guix)\n" "scheme@@(guile-user)> ,use(gnu)\n" "scheme@@(guile-user)> (define snakes\n" " (fold-packages\n" " (lambda (package lst)\n" " (if (string-prefix? \"python\"\n" " (package-name package))\n" " (cons package lst)\n" " lst))\n" " '()))\n" "scheme@@(guile-user)> (length snakes)\n" "$1 = 361\n" #. type: Plain text #: guix-git/doc/contributing.texi:494 msgid "If you are hacking on the daemon and its supporting code or if @command{guix-daemon} is not already running on your system, you can launch it straight from the build tree@footnote{The @option{-E} flag to @command{sudo} guarantees that @code{GUILE_LOAD_PATH} is correctly set such that @command{guix-daemon} and the tools it uses can find the Guile modules they need.}:" msgstr "如果你在折腾守护进程及其支持代码,或者 @command{guix-daemon} 尚未在系统中运行,你可以直接从构建树中启动它@footnote{@command{sudo} 的 @option{-E} 选项保证了 @code{GUILE_LOAD_PATH} 被正确设置,以便 @command{guix-daemon} 及其使用的工具可以找到它们所需的 Guile 模块。}:" #. type: example #: guix-git/doc/contributing.texi:497 #, no-wrap msgid "$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild\n" msgstr "$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild\n" #. type: Plain text #: guix-git/doc/contributing.texi:501 msgid "The @command{pre-inst-env} script sets up all the environment variables necessary to support this, including @env{PATH} and @env{GUILE_LOAD_PATH}." msgstr "@command{pre-inst-env} 脚本设置好了为了支持这个的所有必要的环境变量,包括 @env{PATH} 和 @env{GUILE_LOAD_PATH}。" #. type: Plain text #: guix-git/doc/contributing.texi:506 msgid "Note that @command{./pre-inst-env guix pull} does @emph{not} upgrade the local source tree; it simply updates the @file{~/.config/guix/current} symlink (@pxref{Invoking guix pull}). Run @command{git pull} instead if you want to upgrade your local source tree." msgstr "注意,@command{./pre-inst-env guix pull} @emph{不}会更新本地源代码树;它只是简单地更新 @file{~/.config/guix/current} 符号链接(@pxref{Invoking guix pull})。如果你想更新本地源码树,请运行 @command{git pull}。" #. type: Plain text #: guix-git/doc/contributing.texi:510 msgid "Sometimes, especially if you have recently updated your repository, running @command{./pre-inst-env} will print a message similar to the following example:" msgstr "有时,特别是刚刚更新过你的仓库时,运行 @command{./pre-inst-env} 将会打印一个消息,类似于下面的例子:" #. type: example #: guix-git/doc/contributing.texi:514 #, no-wrap msgid "" ";;; note: source file /home/user/projects/guix/guix/progress.scm\n" ";;; newer than compiled /home/user/projects/guix/guix/progress.go\n" msgstr "" ";;; note: source file /home/user/projects/guix/guix/progress.scm\n" ";;; newer than compiled /home/user/projects/guix/guix/progress.go\n" #. type: Plain text #: guix-git/doc/contributing.texi:520 msgid "This is only a note and you can safely ignore it. You can get rid of the message by running @command{make -j4}. Until you do, Guile will run slightly slower because it will interpret the code instead of using prepared Guile object (@file{.go}) files." msgstr "这仅仅是一个提示,你可以安全地忽略它,可以通过运行 @command{make -j4} 来避免这条消息。若你不这么做,Guile 就会运行的稍微慢一些,因为它会解释代码而不是使用预备的 Guile 对象 (@file{.go}) 文件。" #. type: Plain text #: guix-git/doc/contributing.texi:525 msgid "You can run @command{make} automatically as you work using @command{watchexec} from the @code{watchexec} package. For example, to build again each time you update a package file, run @samp{watchexec -w gnu/packages -- make -j4}." msgstr "你可以使用 @code{watchexec} 包中的 @command{watchexec} 在你干活时自动运行 @command{make}。例如,若要在每次更新一个包文件后都再次构建,运行@samp{watchexec -w gnu/packages -- make -j4}。" #. type: Plain text #: guix-git/doc/contributing.texi:534 msgid "The Perfect Setup to hack on Guix is basically the perfect setup used for Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile Reference Manual}). First, you need more than an editor, you need @url{https://www.gnu.org/software/emacs, Emacs}, empowered by the wonderful @url{https://nongnu.org/geiser/, Geiser}. To set that up, run:" msgstr "折腾 Guix 的完美配置也是折腾 Guile 的完美配置 @pxref{Using Guile in Emacs,,, guile, Guile Reference Manual})。首先,你需要的不仅是一个编辑器,你需要 @url{https://www.gnu.org/software/emacs, Emacs},以及美妙的 @url{http://nongnu.org/geiser/, Geiser}。为此,运行:" #. type: example #: guix-git/doc/contributing.texi:537 #, no-wrap msgid "guix install emacs guile emacs-geiser emacs-geiser-guile\n" msgstr "guix install emacs guile emacs-geiser emacs-geiser-guile\n" #. type: Plain text #: guix-git/doc/contributing.texi:547 #, fuzzy msgid "Geiser allows for interactive and incremental development from within Emacs: code compilation and evaluation from within buffers, access to on-line documentation (docstrings), context-sensitive completion, @kbd{M-.} to jump to an object definition, a REPL to try out your code, and more (@pxref{Introduction,,, geiser, Geiser User Manual}). If you allow Emacs to load the @file{.dir-locals.el} file at the root of the project checkout, it will cause Geiser to automatically add the local Guix sources to the Guile load path." msgstr "Geiser 允许在 Emacs 里进行交互式的、增长式的开发:buffer 里的代码补全和执行,获取一行的文档 (docstrings),上下文敏感的补全,@kbd{M-.} 跳转到对象定义,测试代码的 REPL,及更多(@pxref{Introduction,,, geiser, Geiser User Manual})。为了方便的 Guix 开发,请确保修改 Guile 的加载路径 (load path) 以使其能从你的项目里找到源代码文件:" #. type: Plain text #: guix-git/doc/contributing.texi:554 msgid "To actually edit the code, Emacs already has a neat Scheme mode. But in addition to that, you must not miss @url{https://www.emacswiki.org/emacs/ParEdit, Paredit}. It provides facilities to directly operate on the syntax tree, such as raising an s-expression or wrapping it, swallowing or rejecting the following s-expression, etc." msgstr "真正编辑代码时别忘了 Emacs 自带了方便的 Scheme 模式。而且,一定不要错过 @url{https://www.emacswiki.org/emacs/ParEdit, Paredit}。它提供了直接操作语法树的的功能,例如,用 S- 表达式替换父节点,为 S- 表达式添加、删除前后的括号,删除后面的 S- 表达式,等等。" #. type: cindex #: guix-git/doc/contributing.texi:555 #, no-wrap msgid "code snippets" msgstr "代码片段" #. type: cindex #: guix-git/doc/contributing.texi:556 #, no-wrap msgid "templates" msgstr "模板" #. type: cindex #: guix-git/doc/contributing.texi:557 #, no-wrap msgid "reducing boilerplate" msgstr "减少样板" #. type: Plain text #: guix-git/doc/contributing.texi:567 #, fuzzy msgid "We also provide templates for common git commit messages and package definitions in the @file{etc/snippets} directory. These templates can be used to expand short trigger strings to interactive text snippets. If you use @url{https://joaotavora.github.io/yasnippet/, YASnippet}, you may want to add the @file{etc/snippets/yas} snippets directory to the @var{yas-snippet-dirs} variable. If you use @url{https://github.com/minad/tempel/, Tempel}, you may want to add the @file{etc/snippets/tempel/*} path to the @var{tempel-path} variable in Emacs." msgstr "在@file{etc/snippets}文件夹里,我们还为普通的git commit信息和软件包定义提供模板。这些模板可以通过@url{http://joaotavora.github.io/yasnippet/, YASnippet}使用,它可以把短的触发字符串扩展成交互式的文字片段。你可能希望将这个文件夹添加到Emacs的@var{yas-snippet-dirs}变量里。" #. type: lisp #: guix-git/doc/contributing.texi:579 #, no-wrap msgid "" ";; @r{Assuming the Guix checkout is in ~/src/guix.}\n" ";; @r{Yasnippet configuration}\n" "(with-eval-after-load 'yasnippet\n" " (add-to-list 'yas-snippet-dirs \"~/src/guix/etc/snippets/yas\"))\n" ";; @r{Tempel configuration}\n" "(with-eval-after-load 'tempel\n" " ;; Ensure tempel-path is a list -- it may also be a string.\n" " (unless (listp 'tempel-path)\n" " (setq tempel-path (list tempel-path)))\n" " (add-to-list 'tempel-path \"~/src/guix/etc/snippets/tempel/*\"))\n" msgstr "" ";; @r{假设 Guix 签出在 ~/src/guix 中。}\n" ";; @r{Yasnippet 配置}\n" "(with-eval-after-load 'yasnippet\n" " (add-to-list 'yas-snippet-dirs \"~/src/guix/etc/snippets/yas\"))\n" ";; @r{Tempel 配置}\n" "(with-eval-after-load 'tempel\n" " ;; 确保 tempel-path 是一个列表——它也可以是一个字符串。\n" " (unless (listp 'tempel-path)\n" " (setq tempel-path (list tempel-path)))\n" " (add-to-list 'tempel-path \"~/src/guix/etc/snippets/tempel/*\"))\n" #. type: Plain text #: guix-git/doc/contributing.texi:587 msgid "The commit message snippets depend on @url{https://magit.vc/, Magit} to display staged files. When editing a commit message type @code{add} followed by @kbd{TAB} to insert a commit message template for adding a package; type @code{update} followed by @kbd{TAB} to insert a template for updating a package; type @code{https} followed by @kbd{TAB} to insert a template for changing the home page URI of a package to HTTPS." msgstr "commit信息片段显示staged文件需要依赖@url{https://magit.vc/, Magit}。编辑commit信息时,输入@code{add},然后按@kbd{TAB}就可以插入一段用于新增软件包的模板;输入@code{update},然后按@kbd{TAB}可以插入一段更新软件包的模板;输入@code{https}然后按@kbd{TAB}可以插入一段修改主页URI为HTTPS的模板。" #. type: Plain text #: guix-git/doc/contributing.texi:593 msgid "The main snippet for @code{scheme-mode} is triggered by typing @code{package...} followed by @kbd{TAB}. This snippet also inserts the trigger string @code{origin...}, which can be expanded further. The @code{origin} snippet in turn may insert other trigger strings ending on @code{...}, which also can be expanded further." msgstr "@code{scheme-mode}最重要的模板可以通过输入@code{package...},然后按@kbd{TAB}触发。这个片段还插入了触发字符串@code{origin...},以进一步展开。@code{origin}片段更进一步的可能插入其它以@code{...}结尾的触发字符串,它们可以被继续展开。" #. type: cindex #: guix-git/doc/contributing.texi:594 #, no-wrap msgid "insert or update copyright" msgstr "插入或更新版权" #. type: code{#1} #: guix-git/doc/contributing.texi:595 #, no-wrap msgid "M-x guix-copyright" msgstr "M-x guix-copyright" #. type: code{#1} #: guix-git/doc/contributing.texi:596 #, no-wrap msgid "M-x copyright-update" msgstr "M-x copyright-update" #. type: Plain text #: guix-git/doc/contributing.texi:600 msgid "We additionally provide insertion and automatic update of a copyright in @file{etc/copyright.el}. You may want to set your full name, mail, and load a file." msgstr "我们在@file{etc/copyright.el} 中额外提供了版权的插入和自动更新。你也许会想要设置你的全名,邮箱以及加载一个文件。" #. type: lisp #: guix-git/doc/contributing.texi:606 #, no-wrap msgid "" "(setq user-full-name \"Alice Doe\")\n" "(setq user-mail-address \"alice@@mail.org\")\n" ";; @r{Assuming the Guix checkout is in ~/src/guix.}\n" "(load-file \"~/src/guix/etc/copyright.el\")\n" msgstr "" "(setq user-full-name \"Alice Doe\")\n" "(setq user-mail-address \"alice@@mail.org\")\n" ";; @r{假设 Guix 签出在 ~/src/guix。}\n" "(load-file \"~/src/guix/etc/copyright.el\")\n" #. type: Plain text #: guix-git/doc/contributing.texi:609 msgid "To insert a copyright at the current line invoke @code{M-x guix-copyright}." msgstr "要在当前行插入版权信息,调用@code{M-x guix-copyright}。" #. type: Plain text #: guix-git/doc/contributing.texi:611 msgid "To update a copyright you need to specify a @code{copyright-names-regexp}." msgstr "要更新一个版权信息,你需要指定 @code{copyright-names-regexp}。" #. type: lisp #: guix-git/doc/contributing.texi:615 #, no-wrap msgid "" "(setq copyright-names-regexp\n" " (format \"%s <%s>\" user-full-name user-mail-address))\n" msgstr "" "(setq copyright-names-regexp\n" " (format \"%s <%s>\" user-full-name user-mail-address))\n" #. type: Plain text #: guix-git/doc/contributing.texi:621 msgid "You can check if your copyright is up to date by evaluating @code{M-x copyright-update}. If you want to do it automatically after each buffer save then add @code{(add-hook 'after-save-hook 'copyright-update)} in Emacs." msgstr "你可以通过执行 @code{M-x copyright-update} 检查版权信息是否已更新。若你想要在每次缓存区保存后自动做这件事,就在 Emacs 中添加 @code{(add-hook 'after-save-hook 'copyright-update)}。" #. type: subsection #: guix-git/doc/contributing.texi:622 guix-git/doc/contributing.texi:623 #, no-wrap msgid "Viewing Bugs within Emacs" msgstr "在Emacs内部浏览漏洞" #. type: Plain text #: guix-git/doc/contributing.texi:633 msgid "Emacs has a nice minor mode called @code{bug-reference}, which, when combined with @samp{emacs-debbugs} (the Emacs package), can be used to open links such as @samp{<https://bugs.gnu.org/58697>} or @samp{<https://issues.guix.gnu.org/58697>} as bug report buffers. From there you can easily consult the email thread via the Gnus interface, reply or modify the bug status, all without leaving the comfort of Emacs! Below is a sample configuration to add to your @file{~/.emacs} configuration file:" msgstr "" #. type: lisp #: guix-git/doc/contributing.texi:642 #, fuzzy, no-wrap msgid "" ";;; Bug references.\n" "(require 'bug-reference)\n" "(add-hook 'prog-mode-hook #'bug-reference-prog-mode)\n" "(add-hook 'gnus-mode-hook #'bug-reference-mode)\n" "(add-hook 'erc-mode-hook #'bug-reference-mode)\n" "(add-hook 'gnus-summary-mode-hook #'bug-reference-mode)\n" "(add-hook 'gnus-article-mode-hook #'bug-reference-mode)\n" "\n" msgstr "" ";;; Bug references.\n" "(require 'bug-reference)\n" "(add-hook 'prog-mode-hook #'bug-reference-prog-mode)\n" "(add-hook 'gnus-mode-hook #'bug-reference-mode)\n" "(add-hook 'erc-mode-hook #'bug-reference-mode)\n" "(add-hook 'gnus-summary-mode-hook #'bug-reference-mode)\n" "(add-hook 'gnus-article-mode-hook #'bug-reference-mode)\n" "\n" #. type: lisp #: guix-git/doc/contributing.texi:674 #, no-wrap msgid "" ";;; This extends the default expression (the top-most, first expression\n" ";;; provided to 'or') to also match URLs such as\n" ";;; <https://issues.guix.gnu.org/58697> or <https://bugs.gnu.org/58697>.\n" ";;; It is also extended to detect \"Fixes: #NNNNN\" git trailers.\n" "(setq bug-reference-bug-regexp\n" " (rx (group (or (seq word-boundary\n" " (or (seq (char \"Bb\") \"ug\"\n" " (zero-or-one \" \")\n" &q