From 3e7e05535507996d9ff22b5d77959c8bf191f881 Mon Sep 17 00:00:00 2001
From: illustager <112761682+illustager@users.noreply.github.com>
Date: Fri, 9 Feb 2024 15:56:57 +0800
Subject: [PATCH 01/12] update-zh-cn
---
po/zh-CN.po | 14584 +++++++++++++++++++++++---------------------------
1 file changed, 6693 insertions(+), 7891 deletions(-)
diff --git a/po/zh-CN.po b/po/zh-CN.po
index 0bfb62e2299c..cfbc826be473 100644
--- a/po/zh-CN.po
+++ b/po/zh-CN.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Comprehensive Rust 🦀\n"
-"POT-Creation-Date: 2024-01-25T10:09:28-08:00\n"
+"POT-Creation-Date: 2024-02-08T18:00:45+08:00\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Language zh-Hans\n"
@@ -100,16 +100,14 @@ msgstr "类型推导"
msgid "Exercise: Fibonacci"
msgstr "练习:Fibonacci"
-#: src/SUMMARY.md src/types-and-values/solution.md
-#: src/control-flow-basics/solution.md src/tuples-and-arrays/solution.md
-#: src/references/solution.md src/user-defined-types/solution.md
-#: src/pattern-matching/solution.md src/methods-and-traits/solution.md
-#: src/generics/solution.md src/std-types/solution.md
+#: src/SUMMARY.md src/types-and-values/solution.md src/control-flow-basics/solution.md
+#: src/tuples-and-arrays/solution.md src/references/solution.md
+#: src/user-defined-types/solution.md src/pattern-matching/solution.md
+#: src/methods-and-traits/solution.md src/generics/solution.md src/std-types/solution.md
#: src/std-traits/solution.md src/memory-management/solution.md
#: src/smart-pointers/solution.md src/borrowing/solution.md
-#: src/slices-and-lifetimes/solution.md src/iterators/solution.md
-#: src/modules/solution.md src/testing/solution.md
-#: src/error-handling/solution.md src/unsafe-rust/solution.md
+#: src/slices-and-lifetimes/solution.md src/iterators/solution.md src/modules/solution.md
+#: src/testing/solution.md src/error-handling/solution.md src/unsafe-rust/solution.md
msgid "Solution"
msgstr "解答"
@@ -125,6 +123,14 @@ msgstr "条件控制"
msgid "Loops"
msgstr "循环控制"
+#: src/SUMMARY.md src/control-flow-basics/loops/for.md
+msgid "`for`"
+msgstr "`for`"
+
+#: src/SUMMARY.md src/control-flow-basics/loops/loop.md
+msgid "`loop`"
+msgstr "`loop`"
+
#: src/SUMMARY.md src/control-flow-basics/break-continue.md
msgid "`break` and `continue`"
msgstr "`break` 和 `continue`"
@@ -149,8 +155,7 @@ msgstr "练习:考拉兹序列"
msgid "Day 1: Afternoon"
msgstr "第一天:下午"
-#: src/SUMMARY.md src/tuples-and-arrays.md
-#: src/tuples-and-arrays/tuples-and-arrays.md
+#: src/SUMMARY.md src/tuples-and-arrays.md src/tuples-and-arrays/tuples-and-arrays.md
msgid "Tuples and Arrays"
msgstr "元组和数组"
@@ -199,8 +204,7 @@ msgstr "结构体"
msgid "Tuple Structs"
msgstr "元组结构体"
-#: src/SUMMARY.md src/user-defined-types/enums.md
-#: src/pattern-matching/destructuring.md
+#: src/SUMMARY.md src/user-defined-types/enums.md src/pattern-matching/destructuring.md
msgid "Enums"
msgstr "枚举"
@@ -725,9 +729,9 @@ msgstr "为 Android 构建:Rust"
msgid "With Java"
msgstr "与 Java 交互"
-#: src/SUMMARY.md src/exercises/android/morning.md
-#: src/exercises/bare-metal/morning.md src/exercises/bare-metal/afternoon.md
-#: src/exercises/concurrency/morning.md src/exercises/concurrency/afternoon.md
+#: src/SUMMARY.md src/exercises/android/morning.md src/exercises/bare-metal/morning.md
+#: src/exercises/bare-metal/afternoon.md src/exercises/concurrency/morning.md
+#: src/exercises/concurrency/afternoon.md
msgid "Exercises"
msgstr "习题"
@@ -807,8 +811,7 @@ msgstr "添加第三方 Crate"
msgid "Configuring Cargo.toml"
msgstr "配置 Cargo.toml"
-#: src/SUMMARY.md
-#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
+#: src/SUMMARY.md src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
msgid "Configuring `gnrt_config.toml`"
msgstr "配置 `gnrt_config.toml`"
@@ -816,8 +819,7 @@ msgstr "配置 `gnrt_config.toml`"
msgid "Downloading Crates"
msgstr "下载 Crate"
-#: src/SUMMARY.md
-#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
+#: src/SUMMARY.md src/chromium/adding-third-party-crates/generating-gn-build-rules.md
msgid "Generating `gn` Build Rules"
msgstr "生成 `gn` 构建规则"
@@ -835,8 +837,7 @@ msgstr "构建用于生成代码的脚本"
msgid "Build Scripts Which Build C++ or Take Arbitrary Actions"
msgstr "构建用于构建 C++ 或执行任意操作的脚本"
-#: src/SUMMARY.md
-#: src/chromium/adding-third-party-crates/depending-on-a-crate.md
+#: src/SUMMARY.md src/chromium/adding-third-party-crates/depending-on-a-crate.md
msgid "Depending on a Crate"
msgstr "依赖于 Crate"
@@ -1057,8 +1058,7 @@ msgstr "`Arc`"
msgid "`Mutex`"
msgstr "互斥器(`Mutex`)"
-#: src/SUMMARY.md src/memory-management/review.md
-#: src/error-handling/try-conversions.md
+#: src/SUMMARY.md src/memory-management/review.md src/error-handling/try-conversions.md
#: src/concurrency/shared_state/example.md
msgid "Example"
msgstr "示例"
@@ -1163,46 +1163,44 @@ msgid "Credits"
msgstr "鸣谢"
#: src/index.md
-#, fuzzy
msgid ""
-"[![Build workflow](https://img.shields.io/github/actions/workflow/status/"
-"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!"
-"[GitHub contributors](https://img.shields.io/github/contributors/google/"
-"comprehensive-rust?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields."
-"io/github/stars/google/comprehensive-rust?style=flat-square)](https://github."
-"com/google/comprehensive-rust/stargazers)"
-msgstr ""
-"[![构建工作流](https://img.shields.io/github/actions/workflow/status/google/"
-"comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!"
-"[GitHub 贡献者](https://img.shields.io/github/contributors/google/"
-"comprehensive-rust?style=flat-square)](https://github.com/google/"
-"comprehensive-rust/graphs/contributors)"
+"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/"
+"comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/comprehensive-"
+"rust/actions/workflows/build.yml?query=branch%3Amain) [![GitHub contributors](https://"
+"img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://"
+"github.com/google/comprehensive-rust/graphs/contributors) [![GitHub stars](https://img."
+"shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/"
+"google/comprehensive-rust/stargazers)"
+msgstr ""
+"[![Build workflow](https://img.shields.io/github/actions/workflow/status/google/"
+"comprehensive-rust/build.yml?style=flat-square)](https://github.com/google/comprehensive-"
+"rust/actions/workflows/build.yml?query=branch%3Amain) [![GitHub contributors](https://"
+"img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://"
+"github.com/google/comprehensive-rust/graphs/contributors) [![GitHub stars](https://img."
+"shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/"
+"google/comprehensive-rust/stargazers)"
#: src/index.md
msgid ""
-"This is a free Rust course developed by the Android team at Google. The "
-"course covers the full spectrum of Rust, from basic syntax to advanced "
-"topics like generics and error handling."
+"This is a free Rust course developed by the Android team at Google. The course covers "
+"the full spectrum of Rust, from basic syntax to advanced topics like generics and error "
+"handling."
msgstr ""
-"这是由 Android 团队开发的免费 Rust 课程。该课程涵盖了 Rust 的全部范围,从基本"
-"语法到高级主题如泛型和错误处理。"
+"这是由 Android 团队开发的免费 Rust 课程。该课程涵盖了 Rust 的全部范围,从基本语法到高级主"
+"题如泛型和错误处理。"
#: src/index.md
msgid ""
-"The latest version of the course can be found at . If you are reading somewhere else, please check there "
-"for updates."
+"The latest version of the course can be found at . If you are reading somewhere else, please check there for updates."
msgstr ""
-"如需查看课程的最新版本,请访问 。如果你是在其他地方阅读,请查看此网址了解是否有更新。"
+"如需查看课程的最新版本,请访问 。如果你是在"
+"其他地方阅读,请查看此网址了解是否有更新。"
#: src/index.md
msgid ""
-"The goal of the course is to teach you Rust. We assume you don't know "
-"anything about Rust and hope to:"
+"The goal of the course is to teach you Rust. We assume you don't know anything about "
+"Rust and hope to:"
msgstr "本课程的目标是教授你 Rust。我们假设你对 Rust 一无所知,并希望能够:"
#: src/index.md
@@ -1218,53 +1216,46 @@ msgid "Show you common Rust idioms."
msgstr "展示常见的 Rust 习语。"
#: src/index.md
-#, fuzzy
msgid "We call the first four course days Rust Fundamentals."
-msgstr "我们将前三天的课程称为“Rust 基础知识”。"
+msgstr "我们将前四天的课程称为“Rust 基础知识”。"
#: src/index.md
-msgid ""
-"Building on this, you're invited to dive into one or more specialized topics:"
+msgid "Building on this, you're invited to dive into one or more specialized topics:"
msgstr "在此基础上,你可以选择深入学习一个或多个专门的主题:"
#: src/index.md
msgid ""
-"[Android](android.md): a half-day course on using Rust for Android platform "
-"development (AOSP). This includes interoperability with C, C++, and Java."
+"[Android](android.md): a half-day course on using Rust for Android platform development "
+"(AOSP). This includes interoperability with C, C++, and Java."
msgstr ""
-"[Android](android.md):为期半天的课程,介绍如何在 Android 平台开发中使用 Rust"
-"(AOSP)。课程内容包括与 C、C++ 和 Java 的互操作性。"
+"[Android](android.md):为期半天的课程,介绍如何在 Android 平台开发中使用 Rust(AOSP)。课"
+"程内容包括与 C、C++ 和 Java 的互操作性。"
#: src/index.md
-#, fuzzy
msgid ""
-"[Chromium](chromium.md): a half-day course on using Rust within Chromium "
-"based browsers. This includes interoperability with C++ and how to include "
-"third-party crates in Chromium."
+"[Chromium](chromium.md): a half-day course on using Rust within Chromium based browsers. "
+"This includes interoperability with C++ and how to include third-party crates in "
+"Chromium."
msgstr ""
-"[Rust 在 Chromium 中的用法](../chromium.md) 深析是一个为期半天的课程,主要介"
-"绍了如何在 Chromium 浏览器中使用 Rust。课程内容包括如何在 Chromium 的 `gn` 构"
-"建系统中使用 Rust,引入第三方库 (\"crates\"),以及 C++ 的互操作性。"
+"[Chromium](../chromium.md):为期半天的课程,介绍如何在 Chromium 浏览器中使用 Rust。课程内"
+"容包括与 C++ 的互操作性,以及如何包含第三方库。"
#: src/index.md
msgid ""
-"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal "
-"(embedded) development. Both microcontrollers and application processors are "
-"covered."
+"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal (embedded) "
+"development. Both microcontrollers and application processors are covered."
msgstr ""
-"[Bare-metal](bare-metal.md):为期一天的课程,介绍如何使用 Rust 进行裸机(嵌入"
-"式)开发。课程内容涵盖微控制器和应用处理器。"
+"[Bare-metal](bare-metal.md):为期一天的课程,介绍如何使用 Rust 进行裸机(嵌入式)开发。课"
+"程内容涵盖微控制器和应用处理器。"
#: src/index.md
msgid ""
-"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We "
-"cover both classical concurrency (preemptively scheduling using threads and "
-"mutexes) and async/await concurrency (cooperative multitasking using "
-"futures)."
+"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We cover both "
+"classical concurrency (preemptively scheduling using threads and mutexes) and async/"
+"await concurrency (cooperative multitasking using futures)."
msgstr ""
-"[并发](concurrency.md):为期一天的课程,介绍 Rust 中的并发性。我们将涵盖传统"
-"并发(使用线程和互斥锁进行抢占式调度)和 async/await 并发(使用 futures 进行"
-"协作式多任务处理)。"
+"[并发](concurrency.md):为期一天的课程,介绍 Rust 中的并发性。我们将涵盖传统并发(使用线"
+"程和互斥锁进行抢占式调度)和 async/await 并发(使用 futures 进行协作式多任务处理)。"
#: src/index.md
msgid "Non-Goals"
@@ -1272,20 +1263,19 @@ msgstr "非目标"
#: src/index.md
msgid ""
-"Rust is a large language and we won't be able to cover all of it in a few "
-"days. Some non-goals of this course are:"
-msgstr ""
-"Rust 是一门庞大的语言,我们无法在几天内涵盖所有内容。本课程的一些非目标包括:"
+"Rust is a large language and we won't be able to cover all of it in a few days. Some non-"
+"goals of this course are:"
+msgstr "Rust 是一门庞大的语言,我们无法在几天内涵盖所有内容。本课程的一些非目标包括:"
#: src/index.md
msgid ""
-"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]"
-"(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]"
-"(https://doc.rust-lang.org/rust-by-example/macros.html) instead."
+"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book](https://doc."
+"rust-lang.org/book/ch19-06-macros.html) and [Rust by Example](https://doc.rust-lang.org/"
+"rust-by-example/macros.html) instead."
msgstr ""
-"了解如何开发宏,请参阅 [Rust Book 中的第 19.5 章](https://doc.rust-lang.org/"
-"book/ch19-06-macros.html) 和 [Rust by Examples](https://doc.rust-lang.org/"
-"rust-by-example/macros.html)。"
+"了解如何开发宏,请参阅 [Rust Book 中的第 19.5 章](https://doc.rust-lang.org/book/ch19-06-"
+"macros.html) 和 [Rust by Examples](https://doc.rust-lang.org/rust-by-example/macros."
+"html)。"
#: src/index.md
msgid "Assumptions"
@@ -1293,29 +1283,29 @@ msgstr "前提假设"
#: src/index.md
msgid ""
-"The course assumes that you already know how to program. Rust is a "
-"statically-typed language and we will sometimes make comparisons with C and "
-"C++ to better explain or contrast the Rust approach."
+"The course assumes that you already know how to program. Rust is a statically-typed "
+"language and we will sometimes make comparisons with C and C++ to better explain or "
+"contrast the Rust approach."
msgstr ""
-"本课程假设你已经具备编程知识。Rust 是一种静态类型语言,我们有时会与 C 和 C++ "
-"进行比较,以更好地解释或对比 Rust 的方法。"
+"本课程假设你已经具备编程知识。Rust 是一种静态类型语言,我们有时会与 C 和 C++ 进行比较,以"
+"更好地解释或对比 Rust 的方法。"
#: src/index.md
msgid ""
-"If you know how to program in a dynamically-typed language such as Python or "
-"JavaScript, then you will be able to follow along just fine too."
+"If you know how to program in a dynamically-typed language such as Python or JavaScript, "
+"then you will be able to follow along just fine too."
msgstr ""
-"如果你已经了解如 Python 或 JavaScript 等动态类型语言的编程,那么你也能够很好"
-"地跟上本课程。"
+"如果你已经了解如 Python 或 JavaScript 等动态类型语言的编程,那么你也能够很好地跟上本课"
+"程。"
#: src/index.md
msgid ""
-"This is an example of a _speaker note_. We will use these to add additional "
-"information to the slides. This could be key points which the instructor "
-"should cover as well as answers to typical questions which come up in class."
+"This is an example of a _speaker note_. We will use these to add additional information "
+"to the slides. This could be key points which the instructor should cover as well as "
+"answers to typical questions which come up in class."
msgstr ""
-"这是演讲者备注的示例。我们将使用这些备注来为幻灯片添加额外的信息。这可能包括"
-"讲师应该涵盖的关键点,以及课堂上常见问题的答案。"
+"这是演讲者备注的示例。我们将使用这些备注来为幻灯片添加额外的信息。这可能包括讲师应该涵盖"
+"的关键点,以及课堂上常见问题的答案。"
#: src/running-the-course.md src/running-the-course/course-structure.md
msgid "This page is for the course instructor."
@@ -1323,22 +1313,18 @@ msgstr "本页面适用于课程教师。"
#: src/running-the-course.md
msgid ""
-"Here is a bit of background information about how we've been running the "
-"course internally at Google."
+"Here is a bit of background information about how we've been running the course "
+"internally at Google."
msgstr "以下是有关 Google 内部授课方式的一些背景信息。"
#: src/running-the-course.md
-#, fuzzy
msgid ""
-"We typically run classes from 9:00 am to 4:00 pm, with a 1 hour lunch break "
-"in the middle. This leaves 3 hours for the morning class and 3 hours for the "
-"afternoon class. Both sessions contain multiple breaks and time for students "
-"to work on exercises."
+"We typically run classes from 9:00 am to 4:00 pm, with a 1 hour lunch break in the "
+"middle. This leaves 3 hours for the morning class and 3 hours for the afternoon class. "
+"Both sessions contain multiple breaks and time for students to work on exercises."
msgstr ""
-"上课时间通常是从上午 10:00 到下午 4:00,中间有 1 小时的午餐休息时间。这样,上"
-"午和下午各留了 2.5 小时的上课时间。请注意,这仅是建议:您也可以上午上课 3 小"
-"时,让学员有更多的时间进行练习。上课时间较长的缺点是,学员上了整整 6 小时的"
-"课,到了下午可能会非常疲倦。"
+"上课时间通常是从上午 9:00 到下午 4:00,中间有 1 小时的午餐休息时间。这样,上午和下午各留"
+"了 3 小时的上课时间。两段课程都包含多个休息和学生练习的时间。"
#: src/running-the-course.md
msgid "Before you run the course, you will want to:"
@@ -1346,252 +1332,236 @@ msgstr "在授课之前,你需要完成以下事项:"
#: src/running-the-course.md
msgid ""
-"Make yourself familiar with the course material. We've included speaker "
-"notes to help highlight the key points (please help us by contributing more "
-"speaker notes!). When presenting, you should make sure to open the speaker "
-"notes in a popup (click the link with a little arrow next to \"Speaker "
-"Notes\"). This way you have a clean screen to present to the class."
+"Make yourself familiar with the course material. We've included speaker notes to help "
+"highlight the key points (please help us by contributing more speaker notes!). When "
+"presenting, you should make sure to open the speaker notes in a popup (click the link "
+"with a little arrow next to \"Speaker Notes\"). This way you have a clean screen to "
+"present to the class."
msgstr ""
-"熟悉课程资料。我们添加了演讲者备注,借此强调要点(请帮个忙,多多贡献演讲者备"
-"注!)。演示幻灯片时,你应确保在弹出式窗口中打开演讲者备注(点击对应的链接,"
-"在“演讲者备注”旁边有一个小箭头)。这样,你就可以确保屏幕整洁有序,更好地向全"
-"班学员展示课程内容。"
+"熟悉课程资料。我们添加了演讲者备注,借此强调要点(请帮个忙,多多贡献演讲者备注!)。演示"
+"幻灯片时,你应确保在弹出式窗口中打开演讲者备注(点击对应的链接,在“演讲者备注”旁边有一个"
+"小箭头)。这样,你就可以确保屏幕整洁有序,更好地向全班学员展示课程内容。"
#: src/running-the-course.md
-#, fuzzy
msgid ""
-"Decide on the dates. Since the course takes four days, we recommend that you "
-"schedule the days over two weeks. Course participants have said that they "
-"find it helpful to have a gap in the course since it helps them process all "
-"the information we give them."
+"Decide on the dates. Since the course takes four days, we recommend that you schedule "
+"the days over two weeks. Course participants have said that they find it helpful to have "
+"a gap in the course since it helps them process all the information we give them."
msgstr ""
-"确定培训日期。由于本课程至少需要三天的时间,因此我们建议你安排两周以上的时"
-"间。课程学员曾表示,在每堂课之间留一段间隔会很有帮助,因为这有利于他们吸收我"
-"们所提供的所有信息。"
+"确定培训日期。由于本课程至少需要四天的时间,我们建议你安排两周以上的时间。课程学员曾表"
+"示,在课程之间留一段间隔会很有帮助,因为这有利于他们吸收我们所提供的所有信息。"
#: src/running-the-course.md
msgid ""
-"Find a room large enough for your in-person participants. We recommend a "
-"class size of 15-25 people. That's small enough that people are comfortable "
-"asking questions --- it's also small enough that one instructor will have "
-"time to answer the questions. Make sure the room has _desks_ for yourself "
-"and for the students: you will all need to be able to sit and work with your "
-"laptops. In particular, you will be doing a lot of live-coding as an "
-"instructor, so a lectern won't be very helpful for you."
+"Find a room large enough for your in-person participants. We recommend a class size of "
+"15-25 people. That's small enough that people are comfortable asking questions --- it's "
+"also small enough that one instructor will have time to answer the questions. Make sure "
+"the room has _desks_ for yourself and for the students: you will all need to be able to "
+"sit and work with your laptops. In particular, you will be doing a lot of live-coding as "
+"an instructor, so a lectern won't be very helpful for you."
msgstr ""
-"找一间足以容纳全体线下学员的大教室。我们建议你将课程人数控制在 15-25 人之间。"
-"这样,人数足够少,不仅便于学员提问问题,配备的一位教师也有时间答疑解惑。确保"
-"教室备有供你和学生使用的“课桌”:你们都需要能够坐下来并操作各自的笔记本电脑。"
-"特别是身为教师,你现场要进行大量编码,所以讲台对你来说用处不大。"
+"找一间足以容纳全体线下学员的大教室。我们建议你将课程人数控制在 15-25 人之间。这样,人数足"
+"够少,不仅便于学员提问问题,配备的一位教师也有时间答疑解惑。确保教室备有供你和学生使用"
+"的“课桌”:你们都需要能够坐下来并操作各自的笔记本电脑。特别是身为教师,你现场要进行大量编"
+"码,所以讲台对你来说用处不大。"
#: src/running-the-course.md
msgid ""
-"On the day of your course, show up to the room a little early to set things "
-"up. We recommend presenting directly using `mdbook serve` running on your "
-"laptop (see the [installation instructions](https://github.com/google/"
-"comprehensive-rust#building)). This ensures optimal performance with no lag "
-"as you change pages. Using your laptop will also allow you to fix typos as "
-"you or the course participants spot them."
+"On the day of your course, show up to the room a little early to set things up. We "
+"recommend presenting directly using `mdbook serve` running on your laptop (see the "
+"[installation instructions](https://github.com/google/comprehensive-rust#building)). "
+"This ensures optimal performance with no lag as you change pages. Using your laptop will "
+"also allow you to fix typos as you or the course participants spot them."
msgstr ""
-"在开课当天,请提前一点到教室,设置好教学设备。我们建议你直接在笔记本电脑上运"
-"行 `mdbook serve` 来演示课程内容(请参阅[安装说明](https://github.com/google/"
-"comprehensive-rust#building))。这样可以确保你在切换页面时没有延迟,演示效果"
-"更好。当你或课程学员发现拼写错误时,你也可以使用笔记本电脑及时更正。"
+"在开课当天,请提前一点到教室,设置好教学设备。我们建议你直接在笔记本电脑上运行 `mdbook "
+"serve` 来演示课程内容(请参阅[安装说明](https://github.com/google/comprehensive-"
+"rust#building))。这样可以确保你在切换页面时没有延迟,演示效果更好。当你或课程学员发现拼"
+"写错误时,你也可以使用笔记本电脑及时更正。"
#: src/running-the-course.md
msgid ""
-"Let people solve the exercises by themselves or in small groups. We "
-"typically spend 30-45 minutes on exercises in the morning and in the "
-"afternoon (including time to review the solutions). Make sure to ask people "
-"if they're stuck or if there is anything you can help with. When you see "
-"that several people have the same problem, call it out to the class and "
-"offer a solution, e.g., by showing people where to find the relevant "
+"Let people solve the exercises by themselves or in small groups. We typically spend "
+"30-45 minutes on exercises in the morning and in the afternoon (including time to review "
+"the solutions). Make sure to ask people if they're stuck or if there is anything you can "
+"help with. When you see that several people have the same problem, call it out to the "
+"class and offer a solution, e.g., by showing people where to find the relevant "
"information in the standard library."
msgstr ""
-"让学员采取小组形式或独立解题。通常,我们会在上午和下午各安排 30-45 分钟的练习"
-"时间(包括查看解决方案的时间)。请务必询问学员是否遇到困难,或是否需要任何帮"
-"助。如果你看到多位学员遇到同样的问题,请在班级集体进行讲解,并提供相应的解决"
-"方案,例如告诉大家在标准库的什么位置可以找到相关信息。"
+"让学员采取小组形式或独立解题。通常,我们会在上午和下午各安排 30-45 分钟的练习时间(包括查"
+"看解决方案的时间)。请务必询问学员是否遇到困难,或是否需要任何帮助。如果你看到多位学员遇"
+"到同样的问题,请在班级集体进行讲解,并提供相应的解决方案,例如告诉大家在标准库的什么位置"
+"可以找到相关信息。"
#: src/running-the-course.md
msgid ""
-"That is all, good luck running the course! We hope it will be as much fun "
-"for you as it has been for us!"
+"That is all, good luck running the course! We hope it will be as much fun for you as it "
+"has been for us!"
msgstr "今天的分享就是这些,祝你授课顺利!希望你和我们一样,乐在其中!"
#: src/running-the-course.md
msgid ""
-"Please [provide feedback](https://github.com/google/comprehensive-rust/"
-"discussions/86) afterwards so that we can keep improving the course. We "
-"would love to hear what worked well for you and what can be made better. "
-"Your students are also very welcome to [send us feedback](https://github.com/"
-"google/comprehensive-rust/discussions/100)!"
+"Please [provide feedback](https://github.com/google/comprehensive-rust/discussions/86) "
+"afterwards so that we can keep improving the course. We would love to hear what worked "
+"well for you and what can be made better. Your students are also very welcome to [send "
+"us feedback](https://github.com/google/comprehensive-rust/discussions/100)!"
msgstr ""
-"欢迎你课后[提供反馈](https://github.com/google/comprehensive-rust/"
-"discussions/86),帮助我们不断改进课程。我们非常期待了解哪些方面做得不错,哪些"
-"方面还需要改进。同时非常欢迎学生们[向我们发送反馈](https://github.com/google/"
-"comprehensive-rust/discussions/100)!"
+"欢迎你课后[提供反馈](https://github.com/google/comprehensive-rust/discussions/86),帮助我"
+"们不断改进课程。我们非常期待了解哪些方面做得不错,哪些方面还需要改进。同时非常欢迎学生们"
+"[向我们发送反馈](https://github.com/google/comprehensive-rust/discussions/100)!"
#: src/running-the-course/course-structure.md
msgid "Rust Fundamentals"
msgstr "Rust 基础知识"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid ""
-"The first four days make up [Rust Fundamentals](../welcome-day-1.md). The "
-"days are fast paced and we cover a lot of ground!"
+"The first four days make up [Rust Fundamentals](../welcome-day-1.md). The days are fast "
+"paced and we cover a lot of ground!"
msgstr ""
-"我们会在头三天介绍 [Rust 基础知识](../welcome-day-1.md)。这几天的步调会稍快,"
-"因为我们要探讨许多层面:"
+"我们会在头四天介绍 [Rust 基础知识](../welcome-day-1.md)。这几天的步调稍快,我们将探讨许多"
+"方面:"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid "Course schedule:"
-msgstr "课程结构"
+msgstr "课程安排"
#: src/running-the-course/course-structure.md
-msgid "Day 1 Morning (3 hours, including breaks)"
-msgstr ""
+msgid "Day 1 Morning (2 hours and 40 minutes, including breaks)"
+msgstr "第一天上午(2h40min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Welcome](../welcome-day-1.md) (5 minutes)"
-msgstr ""
+msgstr "[欢迎](../welcome-day-1.md) (5 minutes)"
#: src/running-the-course/course-structure.md
msgid "[Hello, World](../hello-world.md) (20 minutes)"
-msgstr ""
+msgstr "[Hello, World](../hello-world.md) (20 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Types and Values](../types-and-values.md) (1 hour and 5 minutes)"
-msgstr ""
+msgid "[Types and Values](../types-and-values.md) (55 minutes)"
+msgstr "[类型和值](../types-and-values.md) (55 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Control Flow Basics](../control-flow-basics.md) (1 hour)"
-msgstr ""
+msgid "[Control Flow Basics](../control-flow-basics.md) (55 minutes)"
+msgstr "[控制流基础](../control-flow-basics.md) (55 minutes)"
#: src/running-the-course/course-structure.md
msgid "Day 1 Afternoon (2 hours and 55 minutes, including breaks)"
-msgstr ""
+msgstr "第一天下午(2h55min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Tuples and Arrays](../tuples-and-arrays.md) (1 hour)"
-msgstr ""
+msgstr "[元组和数组](../tuples-and-arrays.md) (1 hour)"
#: src/running-the-course/course-structure.md
msgid "[References](../references.md) (50 minutes)"
-msgstr ""
+msgstr "[引用](../references.md) (50 minutes)"
#: src/running-the-course/course-structure.md
msgid "[User-Defined Types](../user-defined-types.md) (50 minutes)"
-msgstr ""
+msgstr "[用户定义的类型](../user-defined-types.md) (50 minutes)"
#: src/running-the-course/course-structure.md
-msgid "Day 2 Morning (2 hours and 55 minutes, including breaks)"
-msgstr ""
+msgid "Day 2 Morning (2 hours and 40 minutes, including breaks)"
+msgstr "第二天上午(2h40min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Welcome](../welcome-day-2.md) (3 minutes)"
-msgstr ""
+msgstr "[欢迎](../welcome-day-2.md) (3 minutes)"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid "[Pattern Matching](../pattern-matching.md) (50 minutes)"
-msgstr ""
-"如需详细了解 Rust 中 的模式,请参阅[模式匹配](../pattern-matching.md)。"
+msgstr "[模式匹配](../pattern-matching.md) (50 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Methods and Traits](../methods-and-traits.md) (45 minutes)"
-msgstr ""
+msgid "[Methods and Traits](../methods-and-traits.md) (40 minutes)"
+msgstr "[方法和特征](../methods-and-traits.md) (40 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Generics](../generics.md) (45 minutes)"
-msgstr ""
+msgid "[Generics](../generics.md) (40 minutes)"
+msgstr "[泛型](../generics.md) (40 minutes)"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid "Day 2 Afternoon (3 hours, including breaks)"
-msgstr "第二天下午的练习"
+msgstr "第二天下午(3h,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Standard Library Types](../std-types.md) (1 hour and 10 minutes)"
-msgstr ""
+msgstr "[标准库类型](../std-types.md) (1 hour and 10 minutes)"
#: src/running-the-course/course-structure.md
msgid "[Standard Library Traits](../std-traits.md) (1 hour and 40 minutes)"
-msgstr ""
+msgstr "[标准库特征](../std-traits.md) (1 hour and 40 minutes)"
#: src/running-the-course/course-structure.md
-msgid "Day 3 Morning (2 hours and 25 minutes, including breaks)"
-msgstr ""
+msgid "Day 3 Morning (2 hours and 20 minutes, including breaks)"
+msgstr "第三天上午(2h20min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Welcome](../welcome-day-3.md) (3 minutes)"
-msgstr ""
+msgstr "[欢迎](../welcome-day-3.md) (3 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Memory Management](../memory-management.md) (1 hour and 10 minutes)"
-msgstr ""
+msgid "[Memory Management](../memory-management.md) (1 hour)"
+msgstr "[内存管理](../memory-management.md) (1 hour)"
#: src/running-the-course/course-structure.md
msgid "[Smart Pointers](../smart-pointers.md) (55 minutes)"
-msgstr ""
+msgstr "[智能指针](../smart-pointers.md) (55 minutes)"
#: src/running-the-course/course-structure.md
msgid "Day 3 Afternoon (2 hours and 20 minutes, including breaks)"
-msgstr ""
+msgstr "第三天下午(2h20min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Borrowing](../borrowing.md) (1 hour)"
-msgstr ""
+msgstr "[借用](../borrowing.md) (1 hour)"
#: src/running-the-course/course-structure.md
-msgid ""
-"[Slices and Lifetimes](../slices-and-lifetimes.md) (1 hour and 10 minutes)"
-msgstr ""
+msgid "[Slices and Lifetimes](../slices-and-lifetimes.md) (1 hour and 10 minutes)"
+msgstr "[切片与生命周期](../slices-and-lifetimes.md) (1 hour and 10 minutes)"
#: src/running-the-course/course-structure.md
-msgid "Day 4 Morning (3 hours and 5 minutes, including breaks)"
-msgstr ""
+msgid "Day 4 Morning (2 hours and 50 minutes, including breaks)"
+msgstr "第四天上午(2h50min,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Welcome](../welcome-day-4.md) (3 minutes)"
-msgstr ""
+msgstr "[欢迎](../welcome-day-4.md) (3 minutes)"
#: src/running-the-course/course-structure.md
msgid "[Iterators](../iterators.md) (45 minutes)"
-msgstr ""
+msgstr "[迭代器](../iterators.md) (45 minutes)"
#: src/running-the-course/course-structure.md
msgid "[Modules](../modules.md) (40 minutes)"
-msgstr ""
+msgstr "[模块](../modules.md) (40 minutes)"
#: src/running-the-course/course-structure.md
-msgid "[Testing](../testing.md) (1 hour and 5 minutes)"
-msgstr ""
+msgid "[Testing](../testing.md) (1 hour)"
+msgstr "[测试](../testing.md) (1 hour)"
#: src/running-the-course/course-structure.md
msgid "Day 4 Afternoon (2 hours, including breaks)"
-msgstr ""
+msgstr "第四天下午(2h,包含休息时间)"
#: src/running-the-course/course-structure.md
msgid "[Error Handling](../error-handling.md) (45 minutes)"
-msgstr ""
+msgstr "[错误处理](../error-handling.md) (45 minutes)"
#: src/running-the-course/course-structure.md
msgid "[Unsafe Rust](../unsafe-rust.md) (1 hour and 5 minutes)"
-msgstr ""
+msgstr "[不安全 Rust](../unsafe-rust.md) (1 hour and 5 minutes)"
#: src/running-the-course/course-structure.md
msgid "Deep Dives"
msgstr "深入探究"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid ""
-"In addition to the 4-day class on Rust Fundamentals, we cover some more "
-"specialized topics:"
-msgstr "除了为期 3 天的“Rust 基础知识”课程外,我们还推出了一些专题课程:"
+"In addition to the 4-day class on Rust Fundamentals, we cover some more specialized "
+"topics:"
+msgstr "除了为期 4 天的“Rust 基础知识”课程外,我们还推出了一些专题课程:"
#: src/running-the-course/course-structure.md
msgid "Rust in Android"
@@ -1599,62 +1569,57 @@ msgstr "Android 中的 Rust"
#: src/running-the-course/course-structure.md
msgid ""
-"The [Rust in Android](../android.md) deep dive is a half-day course on using "
-"Rust for Android platform development. This includes interoperability with "
-"C, C++, and Java."
+"The [Rust in Android](../android.md) deep dive is a half-day course on using Rust for "
+"Android platform development. This includes interoperability with C, C++, and Java."
msgstr ""
-"[深入探究 Android](../android.md)课程为期半天,旨在介绍如何使用 Rust 进行 "
-"Android 平台开发。其中包括与 C、C++ 和 Java 的互操作性。"
+"[Android 中的 Rust 深析](../android.md)课程为期半天,旨在介绍如何使用 Rust 进行 Android "
+"平台开发。其中包括与 C、C++ 和 Java 的互操作性。"
#: src/running-the-course/course-structure.md
msgid ""
-"You will need an [AOSP checkout](https://source.android.com/docs/setup/"
-"download/downloading). Make a checkout of the [course repository](https://"
-"github.com/google/comprehensive-rust) on the same machine and move the `src/"
-"android/` directory into the root of your AOSP checkout. This will ensure "
-"that the Android build system sees the `Android.bp` files in `src/android/`."
+"You will need an [AOSP checkout](https://source.android.com/docs/setup/download/"
+"downloading). Make a checkout of the [course repository](https://github.com/google/"
+"comprehensive-rust) on the same machine and move the `src/android/` directory into the "
+"root of your AOSP checkout. This will ensure that the Android build system sees the "
+"`Android.bp` files in `src/android/`."
msgstr ""
-"你将需要[签出 AOSP](https://source.android.com/docs/setup/download/"
-"downloading)。在同一机器上签出[课程库](https://github.com/google/"
-"comprehensive-rust), 然后将 `src/android/` 目录移至所签出的 AOSP 的根目录。"
-"这将确保 Android 构建系统能检测到 `src/android/` 中的 `Android.bp` 文件。"
+"你将需要[签出 AOSP](https://source.android.com/docs/setup/download/downloading)。在同一机"
+"器上签出[课程库](https://github.com/google/comprehensive-rust), 然后将 `src/android/` 目"
+"录移至所签出的 AOSP 的根目录。这将确保 Android 构建系统能检测到 `src/android/` 中的 "
+"`Android.bp` 文件。"
#: src/running-the-course/course-structure.md
msgid ""
-"Ensure that `adb sync` works with your emulator or real device and pre-build "
-"all Android examples using `src/android/build_all.sh`. Read the script to "
-"see the commands it runs and make sure they work when you run them by hand."
+"Ensure that `adb sync` works with your emulator or real device and pre-build all Android "
+"examples using `src/android/build_all.sh`. Read the script to see the commands it runs "
+"and make sure they work when you run them by hand."
msgstr ""
-"确保 `adb sync` 适用于你的模拟器或实际设备, 并使用 `src/android/build_all."
-"sh` 预构建所有 Android 示例。请阅读脚本, 查看它所运行的命令,并确保这些命令"
-"能在你手动运行时正确执行。"
+"确保 `adb sync` 适用于你的模拟器或实际设备, 并使用 `src/android/build_all.sh` 预构建所"
+"有 Android 示例。请阅读脚本, 查看它所运行的命令,并确保这些命令能在你手动运行时正确执"
+"行。"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid "Rust in Chromium"
-msgstr "在 Chromium 中使用 CXX"
+msgstr "Chromium 中的 Rust"
#: src/running-the-course/course-structure.md
-#, fuzzy
msgid ""
-"The [Rust in Chromium](../chromium.md) deep dive is a half-day course on "
-"using Rust as part of the Chromium browser. It includes using Rust in "
-"Chromium's `gn` build system, bringing in third-party libraries (\"crates\") "
-"and C++ interoperability."
+"The [Rust in Chromium](../chromium.md) deep dive is a half-day course on using Rust as "
+"part of the Chromium browser. It includes using Rust in Chromium's `gn` build system, "
+"bringing in third-party libraries (\"crates\") and C++ interoperability."
msgstr ""
-"[Rust 在 Chromium 中的用法](../chromium.md) 深析是一个为期半天的课程,主要介"
-"绍了如何在 Chromium 浏览器中使用 Rust。课程内容包括如何在 Chromium 的 `gn` 构"
-"建系统中使用 Rust,引入第三方库 (\"crates\"),以及 C++ 的互操作性。"
+"[Chromium 中的 Rust深析](../chromium.md) 课程为期半天,旨在介绍如何在 Chromium 浏览器中使"
+"用 Rust。课程内容包括如何在 Chromium 的 `gn` 构建系统中使用 Rust,引入第三方库 "
+"(\"crates\"),以及与 C++ 的互操作性。"
#: src/running-the-course/course-structure.md
msgid ""
-"You will need to be able to build Chromium --- a debug, component build is "
-"[recommended](../chromium/setup.md) for speed but any build will work. "
-"Ensure that you can run the Chromium browser that you've built."
+"You will need to be able to build Chromium --- a debug, component build is [recommended]"
+"(../chromium/setup.md) for speed but any build will work. Ensure that you can run the "
+"Chromium browser that you've built."
msgstr ""
-"您需要具备构建 Chromium 的能力。为了提高速度,[建议使用] 调试组件 build (../"
-"chromium/setup.md),但任何类型的 build 均可使用。请确保可以运行您所构建的 "
-"Chromium 浏览器。"
+"您需要具备构建 Chromium 的能力。为了提高速度,[建议使用] 调试组件 build (../chromium/"
+"setup.md),但任何类型的 build 均可使用。请确保可以运行您所构建的 Chromium 浏览器。"
#: src/running-the-course/course-structure.md
msgid "Bare-Metal Rust"
@@ -1662,23 +1627,21 @@ msgstr "裸金属 Rust"
#: src/running-the-course/course-structure.md
msgid ""
-"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on "
-"using Rust for bare-metal (embedded) development. Both microcontrollers and "
-"application processors are covered."
+"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on using Rust for "
+"bare-metal (embedded) development. Both microcontrollers and application processors are "
+"covered."
msgstr ""
-"[深入探究裸金属 Rust](../bare-metal.md)课程为期一天,旨在介绍如何使用 Rust 进"
-"行裸金属(嵌入式)开发。其中涵盖了微控制器和应用处理器。"
+"[裸金属 Rust 深析](../bare-metal.md)课程为期一天,旨在介绍如何使用 Rust 进行裸金属(嵌入"
+"式)开发。其中涵盖了微控制器和应用处理器。"
#: src/running-the-course/course-structure.md
msgid ""
-"For the microcontroller part, you will need to buy the [BBC micro:bit]"
-"(https://microbit.org/) v2 development board ahead of time. Everybody will "
-"need to install a number of packages as described on the [welcome page](../"
-"bare-metal.md)."
+"For the microcontroller part, you will need to buy the [BBC micro:bit](https://microbit."
+"org/) v2 development board ahead of time. Everybody will need to install a number of "
+"packages as described on the [welcome page](../bare-metal.md)."
msgstr ""
-"对于微控制器部分,你需要提前购买 [BBC micro:bit](https://microbit.org/) 第 2 "
-"版开发板。每个人都需要安装多个软件包, 具体如[欢迎页面](../bare-metal.md)中所"
-"述。"
+"对于微控制器部分,你需要提前购买 [BBC micro:bit](https://microbit.org/) 第 2 版开发板。每"
+"个人都需要安装多个软件包, 具体如[欢迎页面](../bare-metal.md)中所述。"
#: src/running-the-course/course-structure.md
msgid "Concurrency in Rust"
@@ -1686,20 +1649,19 @@ msgstr "Rust 中的并发"
#: src/running-the-course/course-structure.md
msgid ""
-"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class "
-"on classical as well as `async`/`await` concurrency."
+"The [Concurrency in Rust](../concurrency.md) deep dive is a full day class on classical "
+"as well as `async`/`await` concurrency."
msgstr ""
-"[深入探究并发](../concurrency.md)课程为期一天,旨在介绍传统并发和 `async`/"
-"`await` 并发。"
+"[Rust 中的并发深析](../concurrency.md)课程为期一天,旨在介绍传统并发和 `async`/`await` 并"
+"发。"
#: src/running-the-course/course-structure.md
msgid ""
-"You will need a fresh crate set up and the dependencies downloaded and ready "
-"to go. You can then copy/paste the examples into `src/main.rs` to experiment "
-"with them:"
+"You will need a fresh crate set up and the dependencies downloaded and ready to go. You "
+"can then copy/paste the examples into `src/main.rs` to experiment with them:"
msgstr ""
-"你需要设置一个新 crate,下载所需的依赖项, 做好课前准备。然后,你可以将示例复"
-"制/粘贴到 `src/main.rs` 中, 以便对以下代码进行实验:"
+"你需要设置一个新 crate,下载所需的依赖项, 做好课前准备。然后,你可以将示例复制/粘贴到 "
+"`src/main.rs` 中, 以便对以下代码进行实验:"
#: src/running-the-course/course-structure.md
msgid "Format"
@@ -1707,8 +1669,8 @@ msgstr "课程形式"
#: src/running-the-course/course-structure.md
msgid ""
-"The course is meant to be very interactive and we recommend letting the "
-"questions drive the exploration of Rust!"
+"The course is meant to be very interactive and we recommend letting the questions drive "
+"the exploration of Rust!"
msgstr "本课程的互动性非常强, 建议你以问题驱动探索 Rust!"
#: src/running-the-course/keyboard-shortcuts.md
@@ -1749,73 +1711,67 @@ msgstr ":激活搜索栏。"
#: src/running-the-course/translations.md
msgid ""
-"The course has been translated into other languages by a set of wonderful "
-"volunteers:"
+"The course has been translated into other languages by a set of wonderful volunteers:"
msgstr "一批优秀的志愿者已将本课程翻译成其他语言:"
#: src/running-the-course/translations.md
msgid ""
-"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) "
-"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
-"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes), and "
-"[@henrif75](https://github.com/henrif75)."
+"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) by "
+"[@rastringer](https://github.com/rastringer), [@hugojacob](https://github.com/"
+"hugojacob), [@joaovicmendes](https://github.com/joaovicmendes), and [@henrif75](https://"
+"github.com/henrif75)."
msgstr ""
"[巴西葡萄牙语版本](https://google.github.io/comprehensive-rust/pt-BR/) 译者:"
-"[@rastringer](https://github.com/rastringer)、[@hugojacob](https://github."
-"com/hugojacob)、[@joaovicmendes](https://github.com/joaovicmendes) 和 "
-"[@henrif75](https://github.com/henrif75)。"
+"[@rastringer](https://github.com/rastringer)、[@hugojacob](https://github.com/"
+"hugojacob)、[@joaovicmendes](https://github.com/joaovicmendes) 和 [@henrif75](https://"
+"github.com/henrif75)。"
#: src/running-the-course/translations.md
-#, fuzzy
msgid ""
-"[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-CN/) "
-"by [@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/"
-"wnghl), [@anlunx](https://github.com/anlunx), [@kongy](https://github.com/"
-"kongy), [@noahdragon](https://github.com/noahdragon), [@superwhd](https://"
-"github.com/superwhd), [@SketchK](https://github.com/SketchK), and [@nodmp]"
-"(https://github.com/nodmp)."
+"[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-CN/) by [@suetfei]"
+"(https://github.com/suetfei), [@wnghl](https://github.com/wnghl), [@anlunx](https://"
+"github.com/anlunx), [@kongy](https://github.com/kongy), [@noahdragon](https://github.com/"
+"noahdragon), [@superwhd](https://github.com/superwhd), [@SketchK](https://github.com/"
+"SketchK), and [@nodmp](https://github.com/nodmp)."
msgstr ""
-"[简体中文版本](https://google.github.io/comprehensive-rust/zh-CN/) 译者:"
-"[@suetfei](https://github.com/suetfei)、[@wnghl](https://github.com/wnghl), "
-"[@anlunx](https://github.com/anlunx)、[@kongy](https://github.com/kongy), "
-"[@noahdragon](https://github.com/noahdragon) 和 [@superwhd](https://github."
-"com/superwhd)。"
+"[简体中文版本](https://google.github.io/comprehensive-rust/zh-CN/) 译者:[@suetfei]"
+"(https://github.com/suetfei), [@wnghl](https://github.com/wnghl), [@anlunx](https://"
+"github.com/anlunx), [@kongy](https://github.com/kongy), [@noahdragon](https://github.com/"
+"noahdragon), [@superwhd](https://github.com/superwhd), [@SketchK](https://github.com/"
+"SketchK), and [@nodmp](https://github.com/nodmp)."
#: src/running-the-course/translations.md
-#, fuzzy
msgid ""
-"[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-TW/) "
-"by [@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/"
-"victorhsieh), [@mingyc](https://github.com/mingyc), [@kuanhungchen](https://"
-"github.com/kuanhungchen), and [@johnathan79717](https://github.com/"
-"johnathan79717)."
+"[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-TW/) by [@hueich]"
+"(https://github.com/hueich), [@victorhsieh](https://github.com/victorhsieh), [@mingyc]"
+"(https://github.com/mingyc), [@kuanhungchen](https://github.com/kuanhungchen), and "
+"[@johnathan79717](https://github.com/johnathan79717)."
msgstr ""
-"[繁体中文版本](https://google.github.io/comprehensive-rust/zh-TW/) 译者:"
-"[@hueich](https://github.com/hueich)、[@victorhsieh](https://github.com/"
-"victorhsieh)、[@mingyc](https://github.com/mingyc) 和 [@johnathan79717]"
-"(https://github.com/johnathan79717)。"
+"[繁体中文版本](https://google.github.io/comprehensive-rust/zh-TW/) 译者:[@hueich]"
+"(https://github.com/hueich), [@victorhsieh](https://github.com/victorhsieh), [@mingyc]"
+"(https://github.com/mingyc), [@kuanhungchen](https://github.com/kuanhungchen), and "
+"[@johnathan79717](https://github.com/johnathan79717)."
#: src/running-the-course/translations.md
msgid ""
-"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]"
-"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), and "
-"[@jooyunghan](https://github.com/jooyunghan)."
+"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace](https://github."
+"com/keispace), [@jiyongp](https://github.com/jiyongp), and [@jooyunghan](https://github."
+"com/jooyunghan)."
msgstr ""
-"[韩语版本](https://google.github.io/comprehensive-rust/ko/) 译者:[@keispace]"
-"(https://github.com/keispace)、[@jiyongp](https://github.com/jiyongp) 和 "
-"[@jooyunghan](https://github.com/jooyunghan)。"
+"[韩语版本](https://google.github.io/comprehensive-rust/ko/) 译者:[@keispace](https://"
+"github.com/keispace)、[@jiyongp](https://github.com/jiyongp) 和 [@jooyunghan](https://"
+"github.com/jooyunghan)。"
#: src/running-the-course/translations.md
msgid ""
-"[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid]"
-"(https://github.com/deavid)."
+"[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid](https://github."
+"com/deavid)."
msgstr ""
-"[西班牙语版本](https://google.github.io/comprehensive-rust/es/) 译者:"
-"[@deavid](https://github.com/deavid)。"
+"[西班牙语版本](https://google.github.io/comprehensive-rust/es/) 译者:[@deavid](https://"
+"github.com/deavid)。"
#: src/running-the-course/translations.md
-msgid ""
-"Use the language picker in the top-right corner to switch between languages."
+msgid "Use the language picker in the top-right corner to switch between languages."
msgstr "使用右上角的语言选择器切换语言。"
#: src/running-the-course/translations.md
@@ -1824,77 +1780,71 @@ msgstr "未完成的翻译"
#: src/running-the-course/translations.md
msgid ""
-"There is a large number of in-progress translations. We link to the most "
-"recently updated translations:"
+"There is a large number of in-progress translations. We link to the most recently "
+"updated translations:"
msgstr "多数语言版本仍在翻译中。我们会提供最近更新的翻译的链接:"
#: src/running-the-course/translations.md
msgid ""
-"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]"
-"(https://github.com/raselmandol)."
+"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol](https://"
+"github.com/raselmandol)."
msgstr ""
-"[孟加拉语版本](https://google.github.io/comprehensive-rust/bn/) 译者:"
-"[@raselmandol](https://github.com/raselmandol)。"
+"[孟加拉语版本](https://google.github.io/comprehensive-rust/bn/) 译者:[@raselmandol]"
+"(https://github.com/raselmandol)。"
#: src/running-the-course/translations.md
msgid ""
-"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]"
-"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)."
+"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS](https://github."
+"com/KookaS) and [@vcaen](https://github.com/vcaen)."
msgstr ""
-"[法语版本](https://google.github.io/comprehensive-rust/fr/) 译者:[@KookaS]"
-"(https://github.com/KookaS) 和 [@vcaen](https://github.com/vcaen)。"
+"[法语版本](https://google.github.io/comprehensive-rust/fr/) 译者:[@KookaS](https://"
+"github.com/KookaS) 和 [@vcaen](https://github.com/vcaen)。"
#: src/running-the-course/translations.md
msgid ""
-"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]"
-"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)."
+"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn](https://github."
+"com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)."
msgstr ""
-"[德语版本](https://google.github.io/comprehensive-rust/de/) 译者:[@Throvn]"
-"(https://github.com/Throvn) 和 [@ronaldfw](https://github.com/ronaldfw)。"
+"[德语版本](https://google.github.io/comprehensive-rust/de/) 译者:[@Throvn](https://"
+"github.com/Throvn) 和 [@ronaldfw](https://github.com/ronaldfw)。"
#: src/running-the-course/translations.md
msgid ""
-"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]"
-"(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/"
-"momotaro1105)."
+"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN](https://"
+"github.com/CoinEZ) and [@momotaro1105](https://github.com/momotaro1105)."
msgstr ""
-"[日语版本](https://google.github.io/comprehensive-rust/ja/) 译者:[@CoinEZ-"
-"JPN](https://github.com/CoinEZ) 和 [@momotaro1105](https://github.com/"
-"momotaro1105)。"
+"[日语版本](https://google.github.io/comprehensive-rust/ja/) 译者:[@CoinEZ-JPN](https://"
+"github.com/CoinEZ) 和 [@momotaro1105](https://github.com/momotaro1105)。"
#: src/running-the-course/translations.md
-#, fuzzy
msgid ""
-"[Italian](https://google.github.io/comprehensive-rust/it/) by "
-"[@henrythebuilder](https://github.com/henrythebuilder) and [@detro](https://"
-"github.com/detro)."
+"[Italian](https://google.github.io/comprehensive-rust/it/) by [@henrythebuilder](https://"
+"github.com/henrythebuilder) and [@detro](https://github.com/detro)."
msgstr ""
-"[德语版本](https://google.github.io/comprehensive-rust/de/) 译者:[@Throvn]"
-"(https://github.com/Throvn) 和 [@ronaldfw](https://github.com/ronaldfw)。"
+"[意大利语版本](https://google.github.io/comprehensive-rust/it/) 译者:[@henrythebuilder]"
+"(https://github.com/henrythebuilder) and [@detro](https://github.com/detro)."
#: src/running-the-course/translations.md
msgid ""
-"If you want to help with this effort, please see [our instructions](https://"
-"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to "
-"get going. Translations are coordinated on the [issue tracker](https://"
-"github.com/google/comprehensive-rust/issues/282)."
+"If you want to help with this effort, please see [our instructions](https://github.com/"
+"google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to get going. Translations "
+"are coordinated on the [issue tracker](https://github.com/google/comprehensive-rust/"
+"issues/282)."
msgstr ""
-"如果你想帮助我们,请参阅[我们的说明](https://github.com/google/comprehensive-"
-"rust/blob/main/TRANSLATIONS.md),了解如何开始翻译。翻译工作将通过[问题跟踪器]"
-"(https://github.com/google/comprehensive-rust/issues/282)跟踪。"
+"如果你想帮助我们,请参阅[我们的说明](https://github.com/google/comprehensive-rust/blob/"
+"main/TRANSLATIONS.md),了解如何开始翻译。翻译工作将通过[问题跟踪器](https://github.com/"
+"google/comprehensive-rust/issues/282)跟踪。"
#: src/cargo.md
msgid ""
-"When you start reading about Rust, you will soon meet [Cargo](https://doc."
-"rust-lang.org/cargo/), the standard tool used in the Rust ecosystem to build "
-"and run Rust applications. Here we want to give a brief overview of what "
-"Cargo is and how it fits into the wider ecosystem and how it fits into this "
-"training."
+"When you start reading about Rust, you will soon meet [Cargo](https://doc.rust-lang.org/"
+"cargo/), the standard tool used in the Rust ecosystem to build and run Rust "
+"applications. Here we want to give a brief overview of what Cargo is and how it fits "
+"into the wider ecosystem and how it fits into this training."
msgstr ""
-"开始了解 Rust 后,你很快就会遇到 [Cargo](https://doc.rust-lang.org/cargo/),"
-"这是 Rust 生态系统中用于构建和运行 Rust 应用的标准工具。在这里,我们想简要介"
-"绍一下什么是 Cargo、它如何融入更广泛的生态系统, 以及我们如何在本培训中合理利"
-"用 Cargo。"
+"开始了解 Rust 后,你很快就会遇到 [Cargo](https://doc.rust-lang.org/cargo/),这是 Rust 生"
+"态系统中用于构建和运行 Rust 应用的标准工具。在这里,我们想简要介绍一下什么是 Cargo、它如"
+"何融入更广泛的生态系统, 以及我们如何在本培训中合理利用 Cargo。"
#: src/cargo.md
msgid "Installation"
@@ -1906,79 +1856,73 @@ msgstr "**请按照 上的说明操作。**"
#: src/cargo.md
msgid ""
-"This will give you the Cargo build tool (`cargo`) and the Rust compiler "
-"(`rustc`). You will also get `rustup`, a command line utility that you can "
-"use to install to different compiler versions."
+"This will give you the Cargo build tool (`cargo`) and the Rust compiler (`rustc`). You "
+"will also get `rustup`, a command line utility that you can use to install to different "
+"compiler versions."
msgstr ""
-"这将为你提供 Cargo 构建工具 (`cargo`)和 Rust 编译器 (`rustc`)。你还将获得 "
-"`rustup`,这是一个命令行实用程序,你可以用它来安装不同的编译器版本。"
+"这将为你提供 Cargo 构建工具 (`cargo`)和 Rust 编译器 (`rustc`)。你还将获得 `rustup`,这是"
+"一个命令行实用程序,你可以用它来安装不同的编译器版本。"
#: src/cargo.md
msgid ""
-"After installing Rust, you should configure your editor or IDE to work with "
-"Rust. Most editors do this by talking to [rust-analyzer](https://rust-"
-"analyzer.github.io/), which provides auto-completion and jump-to-definition "
-"functionality for [VS Code](https://code.visualstudio.com/), [Emacs](https://"
-"rust-analyzer.github.io/manual.html#emacs), [Vim/Neovim](https://rust-"
-"analyzer.github.io/manual.html#vimneovim), and many others. There is also a "
-"different IDE available called [RustRover](https://www.jetbrains.com/rust/)."
-msgstr ""
-"安装Rust之后,你应当配置你的编辑器或 IDE 以开始使用 Rust。大多数编辑器使用"
-"[rust-analyzer](https://rust-analyzer.github.io/)以达成此目的。它为[VS Code]"
-"(https://code.visualstudio.com/)、[Emacs](https://rust-analyzer.github.io/"
-"manual.html#emacs)、[Vim/Neovim](https://rust-analyzer.github.io/manual."
-"html#vimneovim)及其他许多编辑器提供了自动补全及定义跳转的功能。同样也可以用一"
-"个叫[RustRover](https://www.jetbrains.com/rust/)的IDE。"
+"After installing Rust, you should configure your editor or IDE to work with Rust. Most "
+"editors do this by talking to [rust-analyzer](https://rust-analyzer.github.io/), which "
+"provides auto-completion and jump-to-definition functionality for [VS Code](https://code."
+"visualstudio.com/), [Emacs](https://rust-analyzer.github.io/manual.html#emacs), [Vim/"
+"Neovim](https://rust-analyzer.github.io/manual.html#vimneovim), and many others. There "
+"is also a different IDE available called [RustRover](https://www.jetbrains.com/rust/)."
+msgstr ""
+"安装Rust之后,你应当配置你的编辑器或 IDE 以开始使用 Rust。大多数编辑器使用[rust-analyzer]"
+"(https://rust-analyzer.github.io/)以达成此目的。它为[VS Code](https://code.visualstudio."
+"com/)、[Emacs](https://rust-analyzer.github.io/manual.html#emacs)、[Vim/Neovim](https://"
+"rust-analyzer.github.io/manual.html#vimneovim)及其他许多编辑器提供了自动补全及定义跳转的"
+"功能。同样也可以用一个叫[RustRover](https://www.jetbrains.com/rust/)的IDE。"
#: src/cargo.md
msgid ""
-"On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust "
-"formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this "
-"gets you an outdated rust version and may lead to unexpected behavior. The "
-"command would be:"
+"On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust formatter]"
+"(https://github.com/rust-lang/rustfmt) via `apt`. However, this gets you an outdated "
+"rust version and may lead to unexpected behavior. The command would be:"
msgstr ""
-"在 Debian/Ubuntu 上,你也可以通过 `apt` 安装 Cargo、Rust 源代码和 [Rust 格式"
-"化工具](https://github.com/rust-lang/rustfmt)。但是,这样会得到一个过时的 "
-"Rust 版本,这可能会导致意外的行为。命令如下:"
+"在 Debian/Ubuntu 上,你也可以通过 `apt` 安装 Cargo、Rust 源代码和 [Rust 格式化工具]"
+"(https://github.com/rust-lang/rustfmt)。但是,这样会得到一个过时的 Rust 版本,这可能会导"
+"致意外的行为。命令如下:"
#: src/cargo/rust-ecosystem.md
msgid "The Rust Ecosystem"
msgstr "Rust 生态系统"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"The Rust ecosystem consists of a number of tools, of which the main ones are:"
+msgid "The Rust ecosystem consists of a number of tools, of which the main ones are:"
msgstr "Rust 生态系统由许多工具组成,其中的主要工具包括:"
#: src/cargo/rust-ecosystem.md
msgid ""
-"`rustc`: the Rust compiler which turns `.rs` files into binaries and other "
-"intermediate formats."
+"`rustc`: the Rust compiler which turns `.rs` files into binaries and other intermediate "
+"formats."
msgstr "`rustc`:Rust 编译器,可将 `.rs` 文件转换为二进制文件和其他中间格式。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"`cargo`: the Rust dependency manager and build tool. Cargo knows how to "
-"download dependencies, usually hosted on , and it will "
-"pass them to `rustc` when building your project. Cargo also comes with a "
-"built-in test runner which is used to execute unit tests."
+"`cargo`: the Rust dependency manager and build tool. Cargo knows how to download "
+"dependencies, usually hosted on , and it will pass them to `rustc` "
+"when building your project. Cargo also comes with a built-in test runner which is used "
+"to execute unit tests."
msgstr ""
-"`cargo`:Rust 依赖项管理器和构建工具。Cargo 知道如何下载托管在 上的依赖项,并在构建项目时将它们传递给 `rustc`。Cargo 还附带一个内"
-"置的测试运行程序,用于执行单元测试。"
+"`cargo`:Rust 依赖项管理器和构建工具。Cargo 知道如何下载托管在 上的依"
+"赖项,并在构建项目时将它们传递给 `rustc`。Cargo 还附带一个内置的测试运行程序,用于执行单元"
+"测试。"
#: src/cargo/rust-ecosystem.md
-#, fuzzy
msgid ""
-"`rustup`: the Rust toolchain installer and updater. This tool is used to "
-"install and update `rustc` and `cargo` when new versions of Rust are "
-"released. In addition, `rustup` can also download documentation for the "
-"standard library. You can have multiple versions of Rust installed at once "
-"and `rustup` will let you switch between them as needed."
+"`rustup`: the Rust toolchain installer and updater. This tool is used to install and "
+"update `rustc` and `cargo` when new versions of Rust are released. In addition, `rustup` "
+"can also download documentation for the standard library. You can have multiple versions "
+"of Rust installed at once and `rustup` will let you switch between them as needed."
msgstr ""
-"`rustup`:Rust 工具链安装程序和更新程序。发布新版本 Rust 时,此工具用于安装并"
-"更新 `rustc` 和 `cargo`。 此外,`rustup` 还可以下载标准库的文档。你可以同时安"
-"装多个版本的 Rust,并且 `rustup` 可让你根据需要在这些版本之间切换。"
+"`rustup`:Rust 工具链安装程序和更新程序。发布新版本 Rust 时,此工具用于安装并更新 "
+"`rustc` 和 `cargo`。 此外,`rustup` 还可以下载标准库的文档。你可以同时安装多个版本的 "
+"Rust,而 `rustup` 可让你根据需要在这些版本之间切换。"
#: src/cargo/rust-ecosystem.md src/hello-world/hello-world.md
#: src/tuples-and-arrays/tuples-and-arrays.md src/references/exclusive.md
@@ -1990,76 +1934,68 @@ msgstr "关键点:"
#: src/cargo/rust-ecosystem.md
msgid ""
-"Rust has a rapid release schedule with a new release coming out every six "
-"weeks. New releases maintain backwards compatibility with old releases --- "
-"plus they enable new functionality."
+"Rust has a rapid release schedule with a new release coming out every six weeks. New "
+"releases maintain backwards compatibility with old releases --- plus they enable new "
+"functionality."
msgstr ""
-"Rust 有一个快速发布时间表,每六周就会发布一次 新版本。新版本保持与旧版本的向"
-"后兼容性,还添加了新功能。"
+"Rust 有一个快速发布时间表,每六周就会发布一次 新版本。新版本保持与旧版本的向后兼容性,还"
+"添加了新功能。"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"There are three release channels: \"stable\", \"beta\", and \"nightly\"."
+msgid "There are three release channels: \"stable\", \"beta\", and \"nightly\"."
msgstr "共有三个发布阶段:“稳定版”、“Beta 版”和“夜间版”。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"New features are being tested on \"nightly\", \"beta\" is what becomes "
-"\"stable\" every six weeks."
+"New features are being tested on \"nightly\", \"beta\" is what becomes \"stable\" every "
+"six weeks."
msgstr "我们会在“夜间版”上测试新功能,每六周将“Beta 版”升级为“稳定版”。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"Dependencies can also be resolved from alternative [registries](https://doc."
-"rust-lang.org/cargo/reference/registries.html), git, folders, and more."
+"Dependencies can also be resolved from alternative [registries](https://doc.rust-lang."
+"org/cargo/reference/registries.html), git, folders, and more."
msgstr ""
-"您也可以通过备用的[注册数据库](https://doc.rust-lang.org/cargo/reference/"
-"registries.html)、git及文件夹等资源来解析依赖项。"
+"您也可以通过备用的[注册数据库](https://doc.rust-lang.org/cargo/reference/registries."
+"html)、git及文件夹等资源来解析依赖项。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the "
-"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018."
+"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the current edition "
+"is Rust 2021. Previous editions were Rust 2015 and Rust 2018."
msgstr ""
-"Rust 也有三个\\[版本\\]:当前版本是 Rust 2021。之前的版本是 Rust 2015 和 "
-"Rust 2018。"
+"Rust 也有三个\\[版本\\]:当前版本是 Rust 2021。之前的版本是 Rust 2015 和 Rust 2018。"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"The editions are allowed to make backwards incompatible changes to the "
-"language."
+msgid "The editions are allowed to make backwards incompatible changes to the language."
msgstr "这些版本支持对语言进行向后不兼容的更改。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"To prevent breaking code, editions are opt-in: you select the edition for "
-"your crate via the `Cargo.toml` file."
+"To prevent breaking code, editions are opt-in: you select the edition for your crate via "
+"the `Cargo.toml` file."
msgstr ""
-"为防止破坏代码,你可以自行选择版本: 通过 `Cargo.toml` 文件为 crate 选择合适"
-"的版本。"
+"为防止破坏代码,你可以自行选择版本: 通过 `Cargo.toml` 文件为 crate 选择合适的版本。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"To avoid splitting the ecosystem, Rust compilers can mix code written for "
-"different editions."
+"To avoid splitting the ecosystem, Rust compilers can mix code written for different "
+"editions."
msgstr "为免分割生态系统,Rust 编译器可以混合使用为不同版本编写的代码。"
#: src/cargo/rust-ecosystem.md
msgid ""
-"Mention that it is quite rare to ever use the compiler directly not through "
-"`cargo` (most users never do)."
-msgstr ""
-"提及不通过 `cargo` 而直接使用编译器的情况相当少见(大多数用户从不这样做)。"
+"Mention that it is quite rare to ever use the compiler directly not through `cargo` "
+"(most users never do)."
+msgstr "提及不通过 `cargo` 而直接使用编译器的情况相当少见(大多数用户从不这样做)。"
#: src/cargo/rust-ecosystem.md
-#, fuzzy
msgid ""
-"It might be worth alluding that Cargo itself is an extremely powerful and "
-"comprehensive tool. It is capable of many advanced features including but "
-"not limited to:"
+"It might be worth alluding that Cargo itself is an extremely powerful and comprehensive "
+"tool. It is capable of many advanced features including but not limited to:"
msgstr ""
-"值得注意的是,Cargo 本身就是一个功能强大且全面的工具。它能够实现许多高级功"
-"能,包括但不限于:"
+"值得注意的是,Cargo 本身就是一个功能强大且全面的工具。它能够实现许多高级功能,包括但不限"
+"于:"
#: src/cargo/rust-ecosystem.md
msgid "Project/package structure"
@@ -2074,28 +2010,23 @@ msgid "Dev Dependencies and Runtime Dependency management/caching"
msgstr "开发依赖项和运行时依赖项管理/缓存"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts."
-"html)"
+msgid "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts.html)"
msgstr "\\[构建脚本\\]"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install."
-"html)"
+msgid "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install.html)"
msgstr "\\[全局安装\\] \\]"
#: src/cargo/rust-ecosystem.md
msgid ""
-"It is also extensible with sub command plugins as well (such as [cargo "
-"clippy](https://github.com/rust-lang/rust-clippy))."
+"It is also extensible with sub command plugins as well (such as [cargo clippy](https://"
+"github.com/rust-lang/rust-clippy))."
msgstr ""
-"它还可以使用子命令插件(例如 [cargo clippy](https://github.com/rust-lang/"
-"rust-clippy))进行扩展。"
+"它还可以使用子命令插件(例如 [cargo clippy](https://github.com/rust-lang/rust-clippy))进"
+"行扩展。"
#: src/cargo/rust-ecosystem.md
-msgid ""
-"Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)"
+msgid "Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)"
msgstr "如需了解详情,请参阅\\[ Cargo 官方图书\\]"
#: src/cargo/code-samples.md
@@ -2104,21 +2035,21 @@ msgstr "本培训中的代码示例"
#: src/cargo/code-samples.md
msgid ""
-"For this training, we will mostly explore the Rust language through examples "
-"which can be executed through your browser. This makes the setup much easier "
-"and ensures a consistent experience for everyone."
+"For this training, we will mostly explore the Rust language through examples which can "
+"be executed through your browser. This makes the setup much easier and ensures a "
+"consistent experience for everyone."
msgstr ""
-"在本培训中,我们将主要通过示例探索 Rust 语言,这些示例可通过浏览器执行。这能"
-"大大简化设置过程, 并确保所有人都能获得一致的体验。"
+"在本培训中,我们将主要通过示例探索 Rust 语言,这些示例可通过浏览器执行。这能大大简化设置"
+"过程, 并确保所有人都能获得一致的体验。"
#: src/cargo/code-samples.md
msgid ""
-"Installing Cargo is still encouraged: it will make it easier for you to do "
-"the exercises. On the last day, we will do a larger exercise which shows you "
-"how to work with dependencies and for that you need Cargo."
+"Installing Cargo is still encouraged: it will make it easier for you to do the "
+"exercises. On the last day, we will do a larger exercise which shows you how to work "
+"with dependencies and for that you need Cargo."
msgstr ""
-"我们仍然建议你安装 Cargo:它有助于你更轻松地完成练习。在最后一天,我们要做一"
-"个更大的练习, 向你展示如何使用依赖项,因此你需要安装 Cargo。"
+"我们仍然建议你安装 Cargo:它有助于你更轻松地完成练习。在最后一天,我们要做一个更大的练"
+"习, 向你展示如何使用依赖项,因此你需要安装 Cargo。"
#: src/cargo/code-samples.md
msgid "The code blocks in this course are fully interactive:"
@@ -2133,34 +2064,31 @@ msgid "You can use "
msgstr "当文本框为焦点时,你可以使用"
#: src/cargo/code-samples.md
-#, fuzzy
msgid " to execute the code when focus is in the text box."
msgstr "来执行代码。"
#: src/cargo/code-samples.md
msgid ""
-"Most code samples are editable like shown above. A few code samples are not "
-"editable for various reasons:"
-msgstr ""
-"大多数代码示例都可修改(如上图所示)。少数代码示例可能会因各种原因而不可修"
-"改:"
+"Most code samples are editable like shown above. A few code samples are not editable for "
+"various reasons:"
+msgstr "大多数代码示例都可修改(如上图所示)。少数代码示例可能会因各种原因而不可修改:"
#: src/cargo/code-samples.md
msgid ""
-"The embedded playgrounds cannot execute unit tests. Copy-paste the code and "
-"open it in the real Playground to demonstrate unit tests."
+"The embedded playgrounds cannot execute unit tests. Copy-paste the code and open it in "
+"the real Playground to demonstrate unit tests."
msgstr ""
-"嵌入式 Playground 无法执行单元测试。将代码复制并粘贴到实际 Playground 中,以"
-"演示单元测试。"
+"嵌入式 Playground 无法执行单元测试。将代码复制并粘贴到实际 Playground 中,以演示单元测"
+"试。"
#: src/cargo/code-samples.md
msgid ""
-"The embedded playgrounds lose their state the moment you navigate away from "
-"the page! This is the reason that the students should solve the exercises "
-"using a local Rust installation or via the Playground."
+"The embedded playgrounds lose their state the moment you navigate away from the page! "
+"This is the reason that the students should solve the exercises using a local Rust "
+"installation or via the Playground."
msgstr ""
-"嵌入式 Playground 会在你离开页面后立即丢失其状态!正因如此,学员应使用本地安"
-"装的 Rust 或通过 Playground 解题。"
+"嵌入式 Playground 会在你离开页面后立即丢失其状态!正因如此,学员应使用本地安装的 Rust 或"
+"通过 Playground 解题。"
#: src/cargo/running-locally.md
msgid "Running Code Locally with Cargo"
@@ -2168,51 +2096,45 @@ msgstr "使用 Cargo 在本地运行代码"
#: src/cargo/running-locally.md
msgid ""
-"If you want to experiment with the code on your own system, then you will "
-"need to first install Rust. Do this by following the [instructions in the "
-"Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). This "
-"should give you a working `rustc` and `cargo`. At the time of writing, the "
-"latest stable Rust release has these version numbers:"
+"If you want to experiment with the code on your own system, then you will need to first "
+"install Rust. Do this by following the [instructions in the Rust Book](https://doc.rust-"
+"lang.org/book/ch01-01-installation.html). This should give you a working `rustc` and "
+"`cargo`. At the time of writing, the latest stable Rust release has these version "
+"numbers:"
msgstr ""
-"如果你想在自己的系统上对代码进行实验, 则需要先安装 Rust。为此,请按照 [Rust "
-"图书中的说明](https://doc.rust-lang.org/book/ch01-01-installation.html)操作。"
-"这应会为你提供一个有效的 `rustc` 和 `cargo`。在撰写本文时,最新的 Rust 稳定版"
-"具有以下版本号:"
+"如果你想在自己的系统上对代码进行实验, 则需要先安装 Rust。为此,请按照 [Rust 图书中的说"
+"明](https://doc.rust-lang.org/book/ch01-01-installation.html)操作。这应会为你提供一个有效"
+"的 `rustc` 和 `cargo`。在撰写本文时,最新的 Rust 稳定版具有以下版本号:"
#: src/cargo/running-locally.md
-msgid ""
-"You can use any later version too since Rust maintains backwards "
-"compatibility."
+msgid "You can use any later version too since Rust maintains backwards compatibility."
msgstr "您也可以使用任何更高版本,因为 Rust 保持向后兼容性。"
#: src/cargo/running-locally.md
msgid ""
-"With this in place, follow these steps to build a Rust binary from one of "
-"the examples in this training:"
-msgstr ""
-"了解这些信息后,请按照以下步骤从本培训中的 一个示例中构建 Rust 二进制文件:"
+"With this in place, follow these steps to build a Rust binary from one of the examples "
+"in this training:"
+msgstr "了解这些信息后,请按照以下步骤从本培训中的 一个示例中构建 Rust 二进制文件:"
#: src/cargo/running-locally.md
msgid "Click the \"Copy to clipboard\" button on the example you want to copy."
msgstr "在你要复制的示例上点击“复制到剪贴板”按钮。"
#: src/cargo/running-locally.md
-msgid ""
-"Use `cargo new exercise` to create a new `exercise/` directory for your code:"
+msgid "Use `cargo new exercise` to create a new `exercise/` directory for your code:"
msgstr "使用 `cargo new exercise` 为你的代码新建一个 `exercise/` 目录:"
#: src/cargo/running-locally.md
-msgid ""
-"Navigate into `exercise/` and use `cargo run` to build and run your binary:"
+msgid "Navigate into `exercise/` and use `cargo run` to build and run your binary:"
msgstr "导航至 `exercise/` 并使用 `cargo run` 构建并运行你的二进制文件:"
#: src/cargo/running-locally.md
msgid ""
-"Replace the boiler-plate code in `src/main.rs` with your own code. For "
-"example, using the example on the previous page, make `src/main.rs` look like"
+"Replace the boiler-plate code in `src/main.rs` with your own code. For example, using "
+"the example on the previous page, make `src/main.rs` look like"
msgstr ""
-"将 `src/main.rs` 中的样板代码替换为你自己的代码。例如, 使用上一页中的示例,"
-"将 `src/main.rs` 改为:"
+"将 `src/main.rs` 中的样板代码替换为你自己的代码。例如, 使用上一页中的示例,将 `src/main."
+"rs` 改为:"
#: src/cargo/running-locally.md
msgid "Use `cargo run` to build and run your updated binary:"
@@ -2220,55 +2142,50 @@ msgstr "使用 `cargo run` 构建并运行你更新后的二进制文件:"
#: src/cargo/running-locally.md
msgid ""
-"Use `cargo check` to quickly check your project for errors, use `cargo "
-"build` to compile it without running it. You will find the output in `target/"
-"debug/` for a normal debug build. Use `cargo build --release` to produce an "
-"optimized release build in `target/release/`."
+"Use `cargo check` to quickly check your project for errors, use `cargo build` to compile "
+"it without running it. You will find the output in `target/debug/` for a normal debug "
+"build. Use `cargo build --release` to produce an optimized release build in `target/"
+"release/`."
msgstr ""
-"使用 `cargo check` 快速检查项目是否存在错误;使用 `cargo build` 只进行编译,"
-"而不运行。你可以在 `target/debug/` 中找到常规调试 build 的输出。使用 `cargo "
-"build --release` 在 `target/release/` 中生成经过优化的 发布 build。"
+"使用 `cargo check` 快速检查项目是否存在错误;使用 `cargo build` 只进行编译,而不运行。你"
+"可以在 `target/debug/` 中找到常规调试 build 的输出。使用 `cargo build --release` 在 "
+"`target/release/` 中生成经过优化的 发布 build。"
#: src/cargo/running-locally.md
msgid ""
-"You can add dependencies for your project by editing `Cargo.toml`. When you "
-"run `cargo` commands, it will automatically download and compile missing "
-"dependencies for you."
+"You can add dependencies for your project by editing `Cargo.toml`. When you run `cargo` "
+"commands, it will automatically download and compile missing dependencies for you."
msgstr ""
-"你可以通过修改 `Cargo.toml` 为项目添加依赖项。当你 运行 `cargo` 命令时,系统"
-"会自动为你下载和编译缺失 的依赖项。"
+"你可以通过修改 `Cargo.toml` 为项目添加依赖项。当你 运行 `cargo` 命令时,系统会自动为你下"
+"载和编译缺失 的依赖项。"
#: src/cargo/running-locally.md
msgid ""
-"Try to encourage the class participants to install Cargo and use a local "
-"editor. It will make their life easier since they will have a normal "
-"development environment."
+"Try to encourage the class participants to install Cargo and use a local editor. It will "
+"make their life easier since they will have a normal development environment."
msgstr ""
-"尽量鼓励全班学员安装 Cargo 并使用 本地编辑器。这能为他们营造常规 开发环境,让"
-"工作变得更加轻松。"
+"尽量鼓励全班学员安装 Cargo 并使用 本地编辑器。这能为他们营造常规 开发环境,让工作变得更加"
+"轻松。"
#: src/welcome-day-1.md
msgid "Welcome to Day 1"
msgstr "欢迎来到第一天"
#: src/welcome-day-1.md
-msgid ""
-"This is the first day of Rust Fundamentals. We will cover a lot of ground "
-"today:"
+msgid "This is the first day of Rust Fundamentals. We will cover a lot of ground today:"
msgstr "今天是学习 Comprehensive Rust 的第一天。我们会涉及很多内容:"
#: src/welcome-day-1.md
msgid ""
-"Basic Rust syntax: variables, scalar and compound types, enums, structs, "
-"references, functions, and methods."
+"Basic Rust syntax: variables, scalar and compound types, enums, structs, references, "
+"functions, and methods."
msgstr ""
-"Rust 基本语法:变量、标量(scalar)和复合(compound)类型、枚举(Enum)、结构"
-"体(struct)、引用、函数和方法。"
+"Rust 基本语法:变量、标量(scalar)和复合(compound)类型、枚举(Enum)、结构体"
+"(struct)、引用、函数和方法。"
#: src/welcome-day-1.md
-#, fuzzy
msgid "Types and type inference."
-msgstr "类型推导"
+msgstr "类型与类型推导"
#: src/welcome-day-1.md
msgid "Control flow constructs: loops, conditionals, and so on."
@@ -2282,17 +2199,15 @@ msgstr "用户定义的类型:结构体和枚举。"
msgid "Pattern matching: destructuring enums, structs, and arrays."
msgstr "模式匹配:解构枚举、结构体和数组(array)。"
-#: src/welcome-day-1.md src/welcome-day-2.md src/welcome-day-3.md
-#: src/welcome-day-4.md
+#: src/welcome-day-1.md src/welcome-day-2.md src/welcome-day-3.md src/welcome-day-4.md
msgid "Schedule"
msgstr "时间表"
#: src/welcome-day-1.md src/welcome-day-1-afternoon.md src/welcome-day-2.md
-#: src/welcome-day-2-afternoon.md src/welcome-day-3.md
-#: src/welcome-day-3-afternoon.md src/welcome-day-4.md
-#: src/welcome-day-4-afternoon.md
+#: src/welcome-day-2-afternoon.md src/welcome-day-3.md src/welcome-day-3-afternoon.md
+#: src/welcome-day-4.md src/welcome-day-4-afternoon.md
msgid "In this session:"
-msgstr ""
+msgstr "本课程中:"
#: src/welcome-day-1.md
msgid "[Welcome](./welcome-day-1.md) (5 minutes)"
@@ -2303,88 +2218,80 @@ msgid "[Hello, World](./hello-world.md) (20 minutes)"
msgstr ""
#: src/welcome-day-1.md
-msgid "[Types and Values](./types-and-values.md) (1 hour and 5 minutes)"
+msgid "[Types and Values](./types-and-values.md) (55 minutes)"
msgstr ""
#: src/welcome-day-1.md
-msgid "[Control Flow Basics](./control-flow-basics.md) (1 hour)"
+msgid "[Control Flow Basics](./control-flow-basics.md) (55 minutes)"
msgstr ""
-#: src/welcome-day-1.md src/welcome-day-2-afternoon.md
-msgid "Including 10 minute breaks, this session should take about 3 hours"
-msgstr ""
+#: src/welcome-day-1.md src/welcome-day-2.md
+msgid "Including 10 minute breaks, this session should take about 2 hours and 40 minutes"
+msgstr "包含 10 分钟休息时间,本课程应耗时约 2h40min"
#: src/welcome-day-1.md
msgid "Please remind the students that:"
msgstr "请提醒学生:"
#: src/welcome-day-1.md
-msgid ""
-"They should ask questions when they get them, don't save them to the end."
+msgid "They should ask questions when they get them, don't save them to the end."
msgstr "他们可以随时提问,不需要留到最后。"
#: src/welcome-day-1.md
-msgid ""
-"The class is meant to be interactive and discussions are very much "
-"encouraged!"
+msgid "The class is meant to be interactive and discussions are very much encouraged!"
msgstr "这个课程本应该是互动的,我们鼓励大家积极讨论。"
#: src/welcome-day-1.md
-#, fuzzy
msgid ""
-"As an instructor, you should try to keep the discussions relevant, i.e., "
-"keep the discussions related to how Rust does things vs some other language. "
-"It can be hard to find the right balance, but err on the side of allowing "
-"discussions since they engage people much more than one-way communication."
+"As an instructor, you should try to keep the discussions relevant, i.e., keep the "
+"discussions related to how Rust does things vs some other language. It can be hard to "
+"find the right balance, but err on the side of allowing discussions since they engage "
+"people much more than one-way communication."
msgstr ""
-"作为讲师,你应该尽量保证讨论话题的相关性,例如,讨论围绕Rust是如何做某些事"
-"情,而不是其他的语言如何如何。 这个平衡点不容易找到,但是尽量倾向于允许讨论,"
-"因为讨论比起单方面的灌输更有利于让大家投入。"
+"作为讲师,你应该尽量保证讨论话题的相关性,也就是保证讨论围在 Rust 如何做某些事情,相比于"
+"其它语言。 这个平衡点不容易找到,但是尽量倾向于允许讨论,因为讨论比起单方面的灌输更有利于"
+"使大家投入。"
#: src/welcome-day-1.md
-msgid ""
-"The questions will likely mean that we talk about things ahead of the slides."
+msgid "The questions will likely mean that we talk about things ahead of the slides."
msgstr "有些问题会导致我们提前谈到后面的内容。"
#: src/welcome-day-1.md
msgid ""
-"This is perfectly okay! Repetition is an important part of learning. "
-"Remember that the slides are just a support and you are free to skip them as "
-"you like."
+"This is perfectly okay! Repetition is an important part of learning. Remember that the "
+"slides are just a support and you are free to skip them as you like."
msgstr ""
-"这完全没有问题!重复是学习的一个重要方法。请记住,这些幻灯片只是一种辅助,你"
-"可以选择性地跳过。"
+"这完全没有问题!重复是学习的一个重要方法。请记住,这些幻灯片只是一种辅助,你可以选择性地"
+"跳过。"
#: src/welcome-day-1.md
msgid ""
-"The idea for the first day is to show the \"basic\" things in Rust that "
-"should have immediate parallels in other languages. The more advanced parts "
-"of Rust come on the subsequent days."
+"The idea for the first day is to show the \"basic\" things in Rust that should have "
+"immediate parallels in other languages. The more advanced parts of Rust come on the "
+"subsequent days."
msgstr ""
-"第一天的目标是展示 Rust 中与其他编程语言有明显相似之处的 “基础”内容。Rust 中"
-"更高级复杂的内容将在后续几天中逐步介绍。"
+"第一天的目标是展示 Rust 中与其他编程语言有明显相似之处的 “基础”内容。Rust 中更高级复杂的"
+"内容将在后续几天中逐步介绍。"
#: src/welcome-day-1.md
msgid ""
-"If you're teaching this in a classroom, this is a good place to go over the "
-"schedule. Note that there is an exercise at the end of each segment, "
-"followed by a break. Plan to cover the exercise solution after the break. "
-"The times listed here are a suggestion in order to keep the course on "
-"schedule. Feel free to be flexible and adjust as necessary!"
+"If you're teaching this in a classroom, this is a good place to go over the schedule. "
+"Note that there is an exercise at the end of each segment, followed by a break. Plan to "
+"cover the exercise solution after the break. The times listed here are a suggestion in "
+"order to keep the course on schedule. Feel free to be flexible and adjust as necessary!"
msgstr ""
-"如果您是在教室里授课,则这是一个好时机,可对课程时间表进行讲解。请注意,每节"
-"课结束之后会有练习内容,然后是休息时间。安排在休息结束后讲解练习内容的解答。"
-"为了确保课程按时间表进行,此处所列时间仅供参考。请按需进行灵活调整!"
+"如果您是在教室里授课,则这是一个好时机,可对课程时间表进行讲解。请注意,每节课结束之后会"
+"有练习内容,然后是休息时间。安排在休息结束后讲解练习内容的解答。为了确保课程按时间表进"
+"行,此处所列时间仅供参考。请按需进行灵活调整!"
#: src/hello-world.md src/types-and-values.md src/control-flow-basics.md
#: src/tuples-and-arrays.md src/references.md src/user-defined-types.md
-#: src/pattern-matching.md src/methods-and-traits.md src/generics.md
-#: src/std-types.md src/std-traits.md src/memory-management.md
-#: src/smart-pointers.md src/borrowing.md src/slices-and-lifetimes.md
-#: src/iterators.md src/modules.md src/testing.md src/error-handling.md
-#: src/unsafe-rust.md
+#: src/pattern-matching.md src/methods-and-traits.md src/generics.md src/std-types.md
+#: src/std-traits.md src/memory-management.md src/smart-pointers.md src/borrowing.md
+#: src/slices-and-lifetimes.md src/iterators.md src/modules.md src/testing.md
+#: src/error-handling.md src/unsafe-rust.md
msgid "In this segment:"
-msgstr ""
+msgstr "本课程中:"
#: src/hello-world.md
msgid "[What is Rust?](./hello-world/what-is-rust.md) (10 minutes)"
@@ -2404,12 +2311,12 @@ msgstr ""
#: src/hello-world.md
msgid "This segment should take about 20 minutes"
-msgstr ""
+msgstr "本课程应耗时约 20min"
#: src/hello-world/what-is-rust.md
msgid ""
-"Rust is a new programming language which had its [1.0 release in 2015]"
-"(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):"
+"Rust is a new programming language which had its [1.0 release in 2015](https://blog.rust-"
+"lang.org/2015/05/15/Rust-1.0.html):"
msgstr ""
"Rust 是一门新的编程语言,它的[1.0 版本于 2015 年发布](https://blog.rust-lang."
"org/2015/05/15/Rust-1.0.html):"
@@ -2424,11 +2331,10 @@ msgstr "`rustc` 使用 LLVM 作为它的后端。"
#: src/hello-world/what-is-rust.md
msgid ""
-"Rust supports many [platforms and architectures](https://doc.rust-lang.org/"
-"nightly/rustc/platform-support.html):"
+"Rust supports many [platforms and architectures](https://doc.rust-lang.org/nightly/rustc/"
+"platform-support.html):"
msgstr ""
-"Rust 支持多种[平台和架构](https://doc.rust-lang.org/nightly/rustc/platform-"
-"support.html):"
+"Rust 支持多种[平台和架构](https://doc.rust-lang.org/nightly/rustc/platform-support.html):"
#: src/hello-world/what-is-rust.md
msgid "x86, ARM, WebAssembly, ..."
@@ -2475,8 +2381,7 @@ msgid "High level of control."
msgstr "高度的控制能力。"
#: src/hello-world/what-is-rust.md
-msgid ""
-"Can be scaled down to very constrained devices such as microcontrollers."
+msgid "Can be scaled down to very constrained devices such as microcontrollers."
msgstr "能够在资源匮乏的设备(如手机)上运行。"
#: src/hello-world/what-is-rust.md
@@ -2488,13 +2393,10 @@ msgid "Focuses on reliability and safety without sacrificing performance."
msgstr "关注程序可靠性和安全性,而不会牺牲任何性能。"
#: src/hello-world/hello-world.md
-msgid ""
-"Let us jump into the simplest possible Rust program, a classic Hello World "
-"program:"
+msgid "Let us jump into the simplest possible Rust program, a classic Hello World program:"
msgstr "让我们进入最简单的 Rust 程序,一个经典的 Hello World 程序:"
#: src/hello-world/hello-world.md
-#, fuzzy
msgid "\"Hello 🌍!\""
msgstr "\"Hello 🌍!\""
@@ -2523,58 +2425,52 @@ msgid "Rust strings are UTF-8 encoded and can contain any Unicode character."
msgstr "Rust 字符串是 UTF-8 编码的,可以包含任何 Unicode 字符。"
#: src/hello-world/hello-world.md
-#, fuzzy
msgid ""
-"This slide tries to make the students comfortable with Rust code. They will "
-"see a ton of it over the next four days so we start small with something "
-"familiar."
+"This slide tries to make the students comfortable with Rust code. They will see a ton of "
+"it over the next four days so we start small with something familiar."
msgstr ""
-"这张幻灯片试图让学生们熟悉 Rust 代码。在接下来的四天里,他们会看到很多 Rust "
-"代码, 所以我们从一些熟悉的东西开始。"
+"这张幻灯片试图让学生们熟悉 Rust 代码。在接下来的四天里,他们会看到很多 Rust 代码, 所以我"
+"们从一些熟悉的东西开始。"
#: src/hello-world/hello-world.md
-#, fuzzy
msgid ""
-"Rust is very much like other languages in the C/C++/Java tradition. It is "
-"imperative and it doesn't try to reinvent things unless absolutely necessary."
+"Rust is very much like other languages in the C/C++/Java tradition. It is imperative and "
+"it doesn't try to reinvent things unless absolutely necessary."
msgstr ""
-"Rust 非常像 C/C++/Java 等其他传统语言。它是指令式语言(而非函数式),而且除非"
-"绝对必要,它不会尝试重新发明新的概念。"
+"Rust 非常像 C/C++/Java 等其他传统语言。它是指令式语言,而且除非绝对必要,它不会尝试重新发"
+"明新的概念。"
#: src/hello-world/hello-world.md
msgid "Rust is modern with full support for things like Unicode."
msgstr "Rust 是一门现代编程语言,它完全支持 Unicode 等特性。"
#: src/hello-world/hello-world.md
-#, fuzzy
msgid ""
-"Rust uses macros for situations where you want to have a variable number of "
-"arguments (no function [overloading](../control-flow-basics/functions.md))."
+"Rust uses macros for situations where you want to have a variable number of arguments "
+"(no function [overloading](../control-flow-basics/functions.md))."
msgstr ""
-"在需要处理可变数量的参数的情况下,Rust 使用宏(没有函数[重载](basic-syntax/"
-"functions-interlude.md))。"
+"在需要处理可变数量的参数的情况下,Rust 使用宏(没有函数[重载](basic-syntax/functions-"
+"interlude.md))。"
#: src/hello-world/hello-world.md
msgid ""
-"Macros being 'hygienic' means they don't accidentally capture identifiers "
-"from the scope they are used in. Rust macros are actually only [partially "
-"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene."
-"html)."
+"Macros being 'hygienic' means they don't accidentally capture identifiers from the scope "
+"they are used in. Rust macros are actually only [partially hygienic](https://veykril."
+"github.io/tlborm/decl-macros/minutiae/hygiene.html)."
msgstr ""
-"宏是“卫生的”,这意味着它们不会意外地捕获它们所在作用域中的标识符。实际上,"
-"Rust 的宏只是[部分卫生](https://veykril.github.io/tlborm/decl-macros/"
-"minutiae/hygiene.html)。"
+"宏是“卫生的”,这意味着它们不会意外地捕获它们所在作用域中的标识符。实际上,Rust 的宏只是"
+"[部分卫生](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)。"
#: src/hello-world/hello-world.md
msgid ""
-"Rust is multi-paradigm. For example, it has powerful [object-oriented "
-"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, "
-"while it is not a functional language, it includes a range of [functional "
-"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)."
+"Rust is multi-paradigm. For example, it has powerful [object-oriented programming "
+"features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, while it is not a "
+"functional language, it includes a range of [functional concepts](https://doc.rust-lang."
+"org/book/ch13-00-functional-features.html)."
msgstr ""
-"Rust 是多范式编程语言。例如,它具有强大的[面向对象的编程功能](https://doc."
-"rust-lang.org/book/ch17-00-oop.html),虽然它不是函数式语言,但包括一系列的[函"
-"数概念](https://doc.rust-lang.org/book/ch13-00-functional-features.html)。"
+"Rust 是多范式编程语言。例如,它具有强大的[面向对象的编程功能](https://doc.rust-lang.org/"
+"book/ch17-00-oop.html),虽然它不是函数式语言,但包括一系列的[函数概念](https://doc.rust-"
+"lang.org/book/ch13-00-functional-features.html)。"
#: src/hello-world/benefits.md
msgid "Some unique selling points of Rust:"
@@ -2582,8 +2478,7 @@ msgstr "Rust 有一些独特的卖点:"
#: src/hello-world/benefits.md
msgid ""
-"_Compile time memory safety_ - whole classes of memory bugs are prevented at "
-"compile time"
+"_Compile time memory safety_ - whole classes of memory bugs are prevented at compile time"
msgstr "_编译时内存安全_:在编译时可防止所有类内存 bug"
#: src/hello-world/benefits.md
@@ -2616,8 +2511,7 @@ msgstr "不存在迭代器失效。"
#: src/hello-world/benefits.md
msgid ""
-"_No undefined runtime behavior_ - what a Rust statement does is never left "
-"unspecified"
+"_No undefined runtime behavior_ - what a Rust statement does is never left unspecified"
msgstr "_没有未定义的运行时行为_:每个 Rust 语句的行为都有明确定义"
#: src/hello-world/benefits.md
@@ -2629,9 +2523,7 @@ msgid "Integer overflow is defined (panic or wrap-around)."
msgstr "整数溢出有明确定义(panic 或回绕)。"
#: src/hello-world/benefits.md
-msgid ""
-"_Modern language features_ - as expressive and ergonomic as higher-level "
-"languages"
+msgid "_Modern language features_ - as expressive and ergonomic as higher-level languages"
msgstr "_现代语言功能_:具有与高级语言一样丰富且人性化的表达能力"
#: src/hello-world/benefits.md
@@ -2668,155 +2560,137 @@ msgstr "优秀的语言服务协议(Language Server Protocol)支持。"
#: src/hello-world/benefits.md
msgid ""
-"Do not spend much time here. All of these points will be covered in more "
-"depth later."
+"Do not spend much time here. All of these points will be covered in more depth later."
msgstr "不用在这里占用过多时间。所有这些要点均会在后面进行详细讲解。"
#: src/hello-world/benefits.md
msgid ""
-"Make sure to ask the class which languages they have experience with. "
-"Depending on the answer you can highlight different features of Rust:"
+"Make sure to ask the class which languages they have experience with. Depending on the "
+"answer you can highlight different features of Rust:"
msgstr "应该问问学生们都使用过哪些语言。根据答案侧重讲解 Rust 的不同特性:"
#: src/hello-world/benefits.md
msgid ""
-"Experience with C or C++: Rust eliminates a whole class of _runtime errors_ "
-"via the borrow checker. You get performance like in C and C++, but you don't "
-"have the memory unsafety issues. In addition, you get a modern language with "
-"constructs like pattern matching and built-in dependency management."
+"Experience with C or C++: Rust eliminates a whole class of _runtime errors_ via the "
+"borrow checker. You get performance like in C and C++, but you don't have the memory "
+"unsafety issues. In addition, you get a modern language with constructs like pattern "
+"matching and built-in dependency management."
msgstr ""
-"使用过 C 或 C++:Rust 利用借用检查消除了一类 _运行时错误_ 。你可以达到堪比 C "
-"和 C++ 的性能,而没有内存不安全的问题。并且你还可以得到些现代的语言构造,比如"
-"模式匹配和内置依赖管理。"
+"使用过 C 或 C++:Rust 利用借用检查消除了一类 _运行时错误_ 。你可以达到堪比 C 和 C++ 的性"
+"能,而没有内存不安全的问题。并且你还可以得到些现代的语言构造,比如模式匹配和内置依赖管"
+"理。"
#: src/hello-world/benefits.md
msgid ""
-"Experience with Java, Go, Python, JavaScript...: You get the same memory "
-"safety as in those languages, plus a similar high-level language feeling. In "
-"addition you get fast and predictable performance like C and C++ (no garbage "
-"collector) as well as access to low-level hardware (should you need it)"
+"Experience with Java, Go, Python, JavaScript...: You get the same memory safety as in "
+"those languages, plus a similar high-level language feeling. In addition you get fast "
+"and predictable performance like C and C++ (no garbage collector) as well as access to "
+"low-level hardware (should you need it)"
msgstr ""
-"使用过 Java、Go、Python、JavaScript......:你可以得到和这些语言相同的内存安全"
-"特性,并拥有类似的使用高级语言的感受。同时你可以得到类似 C 和 C++ 的高速且可"
-"预测的执行性能(无垃圾回收机制),以及在需要时对底层硬件的访问。"
+"使用过 Java、Go、Python、JavaScript......:你可以得到和这些语言相同的内存安全特性,并拥有"
+"类似的使用高级语言的感受。同时你可以得到类似 C 和 C++ 的高速且可预测的执行性能(无垃圾回"
+"收机制),以及在需要时对底层硬件的访问。"
#: src/hello-world/playground.md
-#, fuzzy
msgid ""
-"The [Rust Playground](https://play.rust-lang.org/) provides an easy way to "
-"run short Rust programs, and is the basis for the examples and exercises in "
-"this course. Try running the \"hello-world\" program it starts with. It "
-"comes with a few handy features:"
+"The [Rust Playground](https://play.rust-lang.org/) provides an easy way to run short "
+"Rust programs, and is the basis for the examples and exercises in this course. Try "
+"running the \"hello-world\" program it starts with. It comes with a few handy features:"
msgstr ""
-"[Rust Playground](https://play.rust-lang.org/) 提供了一种运行简短 Rust 程序的"
-"简便方法,也是本课程所有示例和练习的依据所在。请尝试运行它初始提供的 \"hello-"
-"world\" 程序。该程序提供了一些便捷功能:"
+"[Rust Playground](https://play.rust-lang.org/) 提供了一种运行简短 Rust 程序的简便方法,也"
+"是本课程所有示例和练习的依据。请尝试运行它初始提供的 \"hello-world\" 程序。它提供了一些便"
+"捷功能:"
#: src/hello-world/playground.md
msgid ""
-"Under \"Tools\", use the `rustfmt` option to format your code in the "
-"\"standard\" way."
+"Under \"Tools\", use the `rustfmt` option to format your code in the \"standard\" way."
msgstr "在 \"Tools\" 下,使用 `rustfmt` 选项以 \"standard\" 方式设置代码格式。"
#: src/hello-world/playground.md
msgid ""
-"Rust has two main \"profiles\" for generating code: Debug (extra runtime "
-"checks, less optimization) and Release (fewer runtime checks, lots of "
-"optimization). These are accessible under \"Debug\" at the top."
+"Rust has two main \"profiles\" for generating code: Debug (extra runtime checks, less "
+"optimization) and Release (fewer runtime checks, lots of optimization). These are "
+"accessible under \"Debug\" at the top."
msgstr ""
-"Rust 具有两个用于生成代码的主要 “配置文件”:调试(进行额外运行时检查、较少优"
-"化)和发布(较少运行时检查,进行大量优化)。可以在顶部的 \"Debug\" 下访问这些"
-"内容。"
+"Rust 具有两个用于生成代码的主要 “配置文件”:调试(进行额外运行时检查、较少优化)和发布"
+"(较少运行时检查,进行大量优化)。可以在顶部的 \"Debug\" 下访问这些内容。"
#: src/hello-world/playground.md
-msgid ""
-"If you're interested, use \"ASM\" under \"...\" to see the generated "
-"assembly code."
+msgid "If you're interested, use \"ASM\" under \"...\" to see the generated assembly code."
msgstr "如果感兴趣,您可以使用 \"...\" 下的 \"ASM\" 查看生成的汇编代码。"
#: src/hello-world/playground.md
-#, fuzzy
msgid ""
-"As students head into the break, encourage them to open up the playground "
-"and experiment a little. Encourage them to keep the tab open and try things "
-"out during the rest of the course. This is particularly helpful for advanced "
-"students who want to know more about Rust's optimizations or generated "
-"assembly."
+"As students head into the break, encourage them to open up the playground and experiment "
+"a little. Encourage them to keep the tab open and try things out during the rest of the "
+"course. This is particularly helpful for advanced students who want to know more about "
+"Rust's optimizations or generated assembly."
msgstr ""
-"当学生开始休息时,鼓励他们打开 Playground 并进行一些实验。鼓励他们让该标签页"
-"保持打开状态,并在课余时间里进行一些尝试。对于具有较高水平并且希望深入了解 "
-"Rust 优化技巧或生成的汇编代码的学生,这尤其有益。"
+"当学生开始休息时,鼓励他们打开 Playground 并进行一些实验。鼓励他们让该标签页保持打开状"
+"态,并在课余时间里进行一些尝试。对于具有较高水平并且希望深入了解 Rust 优化技巧或生成的汇"
+"编代码的学生,这尤其有益。"
#: src/types-and-values.md
msgid "[Variables](./types-and-values/variables.md) (5 minutes)"
msgstr ""
#: src/types-and-values.md
-msgid "[Values](./types-and-values/values.md) (10 minutes)"
+msgid "[Values](./types-and-values/values.md) (5 minutes)"
msgstr ""
#: src/types-and-values.md
-msgid "[Arithmetic](./types-and-values/arithmetic.md) (5 minutes)"
+msgid "[Arithmetic](./types-and-values/arithmetic.md) (3 minutes)"
msgstr ""
#: src/types-and-values.md
-msgid "[Strings](./types-and-values/strings.md) (10 minutes)"
+msgid "[Strings](./types-and-values/strings.md) (5 minutes)"
msgstr ""
#: src/types-and-values.md
-msgid "[Type Inference](./types-and-values/inference.md) (5 minutes)"
+msgid "[Type Inference](./types-and-values/inference.md) (3 minutes)"
msgstr ""
#: src/types-and-values.md
msgid "[Exercise: Fibonacci](./types-and-values/exercise.md) (30 minutes)"
msgstr ""
-#: src/types-and-values.md src/testing.md src/unsafe-rust.md
-msgid "This segment should take about 1 hour and 5 minutes"
-msgstr ""
+#: src/types-and-values.md src/control-flow-basics.md src/smart-pointers.md
+msgid "This segment should take about 55 minutes"
+msgstr "本课程应耗时约 55min"
#: src/types-and-values/variables.md
-#, fuzzy
-msgid ""
-"Rust provides type safety via static typing. Variable bindings are made with "
-"`let`:"
-msgstr "Rust 通过静态类型实现了类型安全。变量绑定默认是不可变的:"
+msgid "Rust provides type safety via static typing. Variable bindings are made with `let`:"
+msgstr "Rust 通过静态类型提供了类型安全。变量绑定通过 `let` 实现:"
-#: src/types-and-values/variables.md src/control-flow-basics/loops.md
-#: src/control-flow-basics/break-continue.md
-#: src/control-flow-basics/blocks-and-scopes.md
+#: src/types-and-values/variables.md src/control-flow-basics/loops/for.md
+#: src/control-flow-basics/break-continue.md src/control-flow-basics/blocks-and-scopes.md
msgid "\"x: {x}\""
msgstr "\"x: {x}\""
#: src/types-and-values/variables.md
-msgid ""
-"// x = 20;\n"
-" // println!(\"x: {x}\");\n"
+msgid "// x = 20;"
msgstr ""
-"// x = 20;\n"
-" // println!(\"x: {x}\");\n"
#: src/types-and-values/variables.md
-msgid ""
-"Uncomment the `x = 20` to demonstrate that variables are immutable by "
-"default. Add the `mut` keyword to allow changes."
+msgid "// println!(\"x: {x}\");"
msgstr ""
-"取消备注 `x = 20`,以证明变量默认是不可变的。添加 `mut` 关键字以允许进行更"
-"改。"
#: src/types-and-values/variables.md
msgid ""
-"The `i32` here is the type of the variable. This must be known at compile "
-"time, but type inference (covered later) allows the programmer to omit it in "
-"many cases."
+"Uncomment the `x = 20` to demonstrate that variables are immutable by default. Add the "
+"`mut` keyword to allow changes."
+msgstr "取消注释 `x = 20`,以证明变量默认是不可变的。添加 `mut` 关键字以允许进行更改。"
+
+#: src/types-and-values/variables.md
+msgid ""
+"The `i32` here is the type of the variable. This must be known at compile time, but type "
+"inference (covered later) allows the programmer to omit it in many cases."
msgstr ""
-"这里的 `i32` 是变量的类型。编译时必须已知类型,但在很多情况下,由于具有类型推"
-"理功能(稍后介绍),程序员可以忽略这一点。"
+"这里的 `i32` 是变量的类型。编译时必须已知类型,但在很多情况下,由于具有类型推理功能(稍后"
+"介绍),程序员可以忽略这一点。"
#: src/types-and-values/values.md
-msgid ""
-"Here are some basic built-in types, and the syntax for literal values of "
-"each type."
+msgid "Here are some basic built-in types, and the syntax for literal values of each type."
msgstr "以下是一些基本的内置类型以及每种类型的字面量值的语法。"
#: src/types-and-values/values.md src/tuples-and-arrays/tuples-and-arrays.md
@@ -2914,12 +2788,11 @@ msgstr "上表中还有一些未提及的语法:"
#: src/types-and-values/values.md
msgid ""
-"All underscores in numbers can be left out, they are for legibility only. So "
-"`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written "
-"as `123i64`."
+"All underscores in numbers can be left out, they are for legibility only. So `1_000` can "
+"be written as `1000` (or `10_00`), and `123_i64` can be written as `123i64`."
msgstr ""
-"数字中的所有下划线均可忽略,它们只是为了方便辨识。因此,`1_000` 可以写为 "
-"`1000`(或 `10_00`),而 `123_i64` 可以写为 `123i64`。"
+"数字中的所有下划线均可忽略,它们只是为了方便辨识。因此,`1_000` 可以写为 `1000`(或 "
+"`10_00`),而 `123_i64` 可以写为 `123i64`。"
#: src/types-and-values/arithmetic.md
msgid "\"result: {}\""
@@ -2927,12 +2800,12 @@ msgstr "\"result: {}\""
#: src/types-and-values/arithmetic.md
msgid ""
-"This is the first time we've seen a function other than `main`, but the "
-"meaning should be clear: it takes three integers, and returns an integer. "
-"Functions will be covered in more detail later."
+"This is the first time we've seen a function other than `main`, but the meaning should "
+"be clear: it takes three integers, and returns an integer. Functions will be covered in "
+"more detail later."
msgstr ""
-"这是我们第一次看到除 `main` 之外的函数,不过其含义应该很明确:它接受三个整"
-"数,然后返回一个整数。稍后会对这些函数进行详细介绍。"
+"这是我们第一次看到除 `main` 之外的函数,不过其含义应该很明确:它接受三个整数,然后返回一"
+"个整数。稍后会对这些函数进行详细介绍。"
#: src/types-and-values/arithmetic.md
msgid "Arithmetic is very similar to other languages, with similar precedence."
@@ -2940,51 +2813,45 @@ msgstr "算术和优先级均与其他语言极为相似。"
#: src/types-and-values/arithmetic.md
msgid ""
-"What about integer overflow? In C and C++ overflow of _signed_ integers is "
-"actually undefined, and might do different things on different platforms or "
-"compilers. In Rust, it's defined."
+"What about integer overflow? In C and C++ overflow of _signed_ integers is actually "
+"undefined, and might do different things on different platforms or compilers. In Rust, "
+"it's defined."
msgstr ""
-"整数溢出是什么样的?在 C 和 C++ 中,_有符号_ 整数溢出实际上是未定义的,可能会"
-"在不同平台或编译器上执行不同的操作。在 Rust 中,整数溢出具有明确定义。"
+"整数溢出是什么样的?在 C 和 C++ 中,_有符号_ 整数溢出实际上是未定义的,可能会在不同平台或"
+"编译器上执行不同的操作。在 Rust 中,整数溢出具有明确定义。"
#: src/types-and-values/arithmetic.md
-#, fuzzy
msgid ""
-"Change the `i32`'s to `i16` to see an integer overflow, which panics "
-"(checked) in a debug build and wraps in a release build. There are other "
-"options, such as overflowing, saturating, and carrying. These are accessed "
-"with method syntax, e.g., `(a * b).saturating_add(b * c).saturating_add(c * "
-"a)`."
+"Change the `i32`'s to `i16` to see an integer overflow, which panics (checked) in a "
+"debug build and wraps in a release build. There are other options, such as overflowing, "
+"saturating, and carrying. These are accessed with method syntax, e.g., `(a * b)."
+"saturating_add(b * c).saturating_add(c * a)`."
msgstr ""
-"将 `i32` 更改为 `i16` 即可看到整数溢出,在调试 build 中,这会触发 panic(已检"
-"查),而在发布 build 中,则会发生封装。还有其他选项,例如溢出、饱和和进位等。"
-"可以通过方法语法访问这些选项,例如`(a * b).saturating_add(b * c)."
-"saturating_add(c * a)`。"
+"将 `i32` 更改为 `i16` 即可看到整数溢出,在构建的 debug 版本中,这会触发 panic(已检查),"
+"而在 release 版本中,则会发生回绕。还有其他选项,例如溢出、饱和和进位等。可以通过方法语法"
+"使用这些选项,例如 `(a * b).saturating_add(b * c).saturating_add(c * a)`。"
#: src/types-and-values/arithmetic.md
msgid ""
-"In fact, the compiler will detect overflow of constant expressions, which is "
-"why the example requires a separate function."
-msgstr ""
-"事实上,编译器会检测常量表达式的溢出情况,这便是为何该示例需要单独的函数。"
+"In fact, the compiler will detect overflow of constant expressions, which is why the "
+"example requires a separate function."
+msgstr "事实上,编译器会检测常量表达式的溢出情况,这便是为何该示例需要单独的函数。"
#: src/types-and-values/strings.md
-#, fuzzy
msgid ""
-"Rust has two types to represent strings, both of which will be covered in "
-"more depth later. Both _always_ store UTF-8 encoded strings."
+"Rust has two types to represent strings, both of which will be covered in more depth "
+"later. Both _always_ store UTF-8 encoded strings."
msgstr ""
-"Rust 有两种用于表示字符串的类型,稍后会对它们进行更详细的介绍。两种类型都 _始"
-"终_ 存储UTF-8 编码的字符串。"
+"Rust 有两种用于表示字符串的类型,稍后会对它们进行更详细的介绍。两种类型都 _始终_ 存储"
+"UTF-8 编码的字符串。"
#: src/types-and-values/strings.md
-#, fuzzy
msgid "`String` - a modifiable, owned string."
msgstr "`String` 是一个可变字符串缓冲区。"
#: src/types-and-values/strings.md
msgid "`&str` - a read-only string. String literals have this type."
-msgstr "`&str` 为只读字符串。字符串字面量属于此类型。"
+msgstr "`&str` 使只读字符串。字符串字面量属于此类型。"
#: src/types-and-values/strings.md
msgid "\"Greetings\""
@@ -3007,16 +2874,16 @@ msgid "\"{:?}\""
msgstr "\"{:?}\""
#: src/types-and-values/strings.md
-msgid "//println!(\"{:?}\", &sentence[12..13]);\n"
-msgstr "//println!(\"{:?}\", &sentence[12..13]);\n"
+msgid "//println!(\"{:?}\", &sentence[12..13]);"
+msgstr ""
#: src/types-and-values/strings.md
msgid ""
-"This slide introduces strings. Everything here will be covered in more depth "
-"later, but this is enough for subsequent slides and exercises to use strings."
+"This slide introduces strings. Everything here will be covered in more depth later, but "
+"this is enough for subsequent slides and exercises to use strings."
msgstr ""
-"此幻灯片介绍了字符串。此处所有内容均会在稍后进行更详细的介绍,但对于后续幻灯"
-"片和练习而言,当前介绍足以支撑使用字符串了。"
+"此幻灯片介绍了字符串。此处所有内容均会在稍后进行更详细的介绍,但对于后续幻灯片和练习而"
+"言,当前介绍足以支撑使用字符串了。"
#: src/types-and-values/strings.md
msgid "Invalid UTF-8 in a string is UB, and this not allowed in safe Rust."
@@ -3024,38 +2891,43 @@ msgstr "字符串中的无效 UTF-8 是未定义行为 (UB),这在安全的 Ru
#: src/types-and-values/strings.md
msgid ""
-"`String` is a user-defined type with a constructor (`::new()`) and methods "
-"like `s.push_str(..)`."
+"`String` is a user-defined type with a constructor (`::new()`) and methods like `s."
+"push_str(..)`."
+msgstr ""
+"`String` 是一种用户定义的类型,具有构造函数 (`::new()`) 和类似 `s.push_str(..)` 的方法。"
+
+#: src/types-and-values/strings.md
+msgid ""
+"The `&` in `&str` indicates that this is a reference. We will cover references later, so "
+"for now just think of `&str` as a unit meaning \"a read-only string\"."
msgstr ""
-"`String` 是一种用户定义的类型,具有构造函数 (`::new()`) 和类似 `s."
-"push_str(..)` 的方法。"
+"`&str` 中的 `&` 表示这是一个引用。我们稍后将介绍引用,现在只需将 `&str` 视为一个单位,表"
+"示 “只读字符”。"
#: src/types-and-values/strings.md
msgid ""
-"The `&` in `&str` indicates that this is a reference. We will cover "
-"references later, so for now just think of `&str` as a unit meaning \"a read-"
-"only string\"."
+"The commented-out line is indexing into the string by byte position. `12..13` does not "
+"end on a character boundary, so the program panics. Adjust it to a range that does, "
+"based on the error message."
msgstr ""
-"`&str` 中的 `&` 表示这是一个引用。我们稍后将介绍引用,现在只需将 `&str` 视为"
-"一个单位,表示 “只读字符”。"
+"注释掉的行会按字节位置编入字符串的索引。`12..13` 不是以字符边界结尾,因此会导致程序 "
+"panic。根据错误消息,将其调整至以字符边界结尾的范围。"
#: src/types-and-values/strings.md
msgid ""
-"The commented-out line is indexing into the string by byte position. "
-"`12..13` does not end on a character boundary, so the program panics. Adjust "
-"it to a range that does, based on the error message."
+"Raw strings allow you to create a `&str` value with escapes disabled: `r\"\\n\" == \"\\"
+"\\n\"`. You can embed double-quotes by using an equal amount of `#` on either side of "
+"the quotes:"
msgstr ""
-"注释掉的行会按字节位置编入字符串的索引。`12..13` 不是以字符边界结尾,因此会导"
-"致程序 panic。根据错误消息,将其调整至以字符边界结尾的范围。"
+"原始字符串可在创建 `&str` 时禁用转义:`r\"\\n\" == \"\\\\n\"`。可以在外层引号两侧添加相同"
+"数量的 `#`,以在字符串中嵌入双引号:"
#: src/types-and-values/strings.md
msgid ""
-"Raw strings allow you to create a `&str` value with escapes disabled: "
-"`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal "
-"amount of `#` on either side of the quotes:"
+"Using `{:?}` is a convenient way to print array/vector/struct of values for debugging "
+"purposes, and it's commonly used in code."
msgstr ""
-"原始字符串可在创建 `&str` 时禁用转义:`r\"\\n\" == \"\\\\n\"`。可以在外层引号"
-"两侧添加相同数量的 `#`,以在字符串中嵌入双引号:"
+"使用 `{:?}` 是一个用于调试输出 array/vector/struct 类型的值的便捷方法,因而被广泛使用。"
#: src/types-and-values/inference.md
msgid "Rust will look at how the variable is _used_ to determine the type:"
@@ -3063,71 +2935,65 @@ msgstr "Rust 会根据变量的使用来确定其类型:"
#: src/types-and-values/inference.md
msgid ""
-"This slide demonstrates how the Rust compiler infers types based on "
-"constraints given by variable declarations and usages."
+"This slide demonstrates how the Rust compiler infers types based on constraints given by "
+"variable declarations and usages."
msgstr "这张幻灯片演示了 Rust 编译器是如何根据变量声明和用法来推导其类型的。"
#: src/types-and-values/inference.md
msgid ""
-"It is very important to emphasize that variables declared like this are not "
-"of some sort of dynamic \"any type\" that can hold any data. The machine "
-"code generated by such declaration is identical to the explicit declaration "
-"of a type. The compiler does the job for us and helps us write more concise "
-"code."
+"It is very important to emphasize that variables declared like this are not of some sort "
+"of dynamic \"any type\" that can hold any data. The machine code generated by such "
+"declaration is identical to the explicit declaration of a type. The compiler does the "
+"job for us and helps us write more concise code."
msgstr ""
-"需要重点强调的是这样声明的变量并非像那种动态类型语言中可以持有任何数据的“任何"
-"类型”。这种声明所生成的机器码与明确类型声明完全相同。编译器进行类型推导能够让"
-"我们编写更简略的代码。"
+"需要重点强调的是这样声明的变量并非像那种动态类型语言中可以持有任何数据的“任何类型”。这种"
+"声明所生成的机器码与明确类型声明完全相同。编译器进行类型推导能够让我们编写更简略的代码。"
#: src/types-and-values/inference.md
msgid ""
-"When nothing constrains the type of an integer literal, Rust defaults to "
-"`i32`. This sometimes appears as `{integer}` in error messages. Similarly, "
-"floating-point literals default to `f64`."
+"When nothing constrains the type of an integer literal, Rust defaults to `i32`. This "
+"sometimes appears as `{integer}` in error messages. Similarly, floating-point literals "
+"default to `f64`."
msgstr ""
-"当整数字面量的类型不受限制时,Rust 默认为 `i32`。这在错误消息中有时显示为 "
-"`{integer}`。同样,浮点字面量默认为 `f64`。"
+"当整数字面量的类型不受限制时,Rust 默认为 `i32`。这在错误消息中有时显示为 `{integer}`。同"
+"样,浮点字面量默认为 `f64`。"
#: src/types-and-values/inference.md
-msgid "// ERROR: no implementation for `{float} == {integer}`\n"
-msgstr "// ERROR: no implementation for `{float} == {integer}`\n"
+msgid "// ERROR: no implementation for `{float} == {integer}`"
+msgstr ""
#: src/types-and-values/exercise.md
-#, fuzzy
msgid ""
-"The first and second Fibonacci numbers are both `1`. For n>2, the n'th "
-"Fibonacci number is calculated recursively as the sum of the n-1'th and "
-"n-2'th Fibonacci numbers."
+"The first and second Fibonacci numbers are both `1`. For n>2, the n'th Fibonacci number "
+"is calculated recursively as the sum of the n-1'th and n-2'th Fibonacci numbers."
msgstr ""
-"第一个和第二个斐波那契数都是 `1`。如果 n>2,则第 n 个斐波那契数以递归方式计算"
-"为第 n-1 个和第 n-2 个斐波那契数之和。"
+"第一个和第二个斐波那契数都是 `1`。若 n>2,则第 n 个斐波那契数以递归方式计算为第 n-1 个和"
+"第 n-2 个斐波那契数之和。"
#: src/types-and-values/exercise.md
-#, fuzzy
msgid ""
-"Write a function `fib(n)` that calculates the n'th Fibonacci number. When "
-"will this function panic?"
+"Write a function `fib(n)` that calculates the n'th Fibonacci number. When will this "
+"function panic?"
msgstr "编写一个函数 `fib(n)`,用于计算第 n 个斐波那契数。何时该函数会 panic?"
#: src/types-and-values/exercise.md
-msgid "// The base case.\n"
-msgstr "// The base case.\n"
+msgid "// The base case."
+msgstr "// 基础情况"
#: src/types-and-values/exercise.md src/control-flow-basics/exercise.md
-#, fuzzy
msgid "\"Implement this\""
-msgstr "实现"
+msgstr ""
#: src/types-and-values/exercise.md
-msgid "// The recursive case.\n"
-msgstr "// The recursive case.\n"
+msgid "// The recursive case."
+msgstr "// 递归"
#: src/types-and-values/exercise.md src/types-and-values/solution.md
msgid "\"fib(n) = {}\""
-msgstr "\"fib(n) = {}\""
+msgstr ""
#: src/control-flow-basics.md
-msgid "[Conditionals](./control-flow-basics/conditionals.md) (5 minutes)"
+msgid "[Conditionals](./control-flow-basics/conditionals.md) (4 minutes)"
msgstr ""
#: src/control-flow-basics.md
@@ -3135,13 +3001,11 @@ msgid "[Loops](./control-flow-basics/loops.md) (5 minutes)"
msgstr ""
#: src/control-flow-basics.md
-msgid ""
-"[break and continue](./control-flow-basics/break-continue.md) (5 minutes)"
+msgid "[break and continue](./control-flow-basics/break-continue.md) (4 minutes)"
msgstr ""
#: src/control-flow-basics.md
-msgid ""
-"[Blocks and Scopes](./control-flow-basics/blocks-and-scopes.md) (10 minutes)"
+msgid "[Blocks and Scopes](./control-flow-basics/blocks-and-scopes.md) (5 minutes)"
msgstr ""
#: src/control-flow-basics.md
@@ -3153,12 +3017,7 @@ msgid "[Macros](./control-flow-basics/macros.md) (2 minutes)"
msgstr ""
#: src/control-flow-basics.md
-msgid ""
-"[Exercise: Collatz Sequence](./control-flow-basics/exercise.md) (30 minutes)"
-msgstr ""
-
-#: src/control-flow-basics.md src/tuples-and-arrays.md src/borrowing.md
-msgid "This segment should take about 1 hour"
+msgid "[Exercise: Collatz Sequence](./control-flow-basics/exercise.md) (30 minutes)"
msgstr ""
#: src/control-flow-basics/conditionals.md
@@ -3166,14 +3025,11 @@ msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:"
msgstr "Rust 的许多语法与 C、C++ 和 Java 的语法相似:"
#: src/control-flow-basics/conditionals.md
-#, fuzzy
msgid "Blocks are delimited by curly braces."
-msgstr "代码块和作用域都是由花括号来界定的。"
+msgstr "块由花括号来界定的。"
#: src/control-flow-basics/conditionals.md
-msgid ""
-"Line comments are started with `//`, block comments are delimited by `/* ... "
-"*/`."
+msgid "Line comments are started with `//`, block comments are delimited by `/* ... */`."
msgstr "行内注释以 `//` 起始,块注释使用 `/* ... */` 来界定。"
#: src/control-flow-basics/conditionals.md
@@ -3190,11 +3046,11 @@ msgstr "`if` 表达式"
#: src/control-flow-basics/conditionals.md
msgid ""
-"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/"
-"if-expr.html#if-expressions) exactly like `if` statements in other languages:"
+"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/if-expr."
+"html#if-expressions) exactly like `if` statements in other languages:"
msgstr ""
-"[`if` 表达式](https://doc.rust-lang.org/reference/expressions/if-expr."
-"html#if-expressions) 的用法与其他语言中的 `if` 语句完全一样。"
+"[`if` 表达式](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-"
+"expressions) 的用法与其他语言中的 `if` 语句完全一样。"
#: src/control-flow-basics/conditionals.md
msgid "\"small\""
@@ -3210,11 +3066,10 @@ msgstr "\"huge\""
#: src/control-flow-basics/conditionals.md
msgid ""
-"In addition, you can use `if` as an expression. The last expression of each "
-"block becomes the value of the `if` expression:"
+"In addition, you can use `if` as an expression. The last expression of each block "
+"becomes the value of the `if` expression:"
msgstr ""
-"此外,你还可以将 `if` 用作一个表达式。每个块的最后一个表达式 将成为 `if` 表达"
-"式的值:"
+"此外,你还可以将 `if` 用作一个表达式。每个块的最后一个表达式 将成为 `if` 表达式的值:"
#: src/control-flow-basics/conditionals.md
msgid "\"large\""
@@ -3225,160 +3080,134 @@ msgid "\"number size: {}\""
msgstr "\"number size: {}\""
#: src/control-flow-basics/conditionals.md
-#, fuzzy
msgid ""
-"Because `if` is an expression and must have a particular type, both of its "
-"branch blocks must have the same type. Show what happens if you add `;` "
-"after `\"small\"` in the second example."
+"Because `if` is an expression and must have a particular type, both of its branch blocks "
+"must have the same type. Show what happens if you add `;` after `\"small\"` in the "
+"second example."
msgstr ""
-"由于 `if` 是一个表达式且必须有一个特定的类型,因此它的两个分支块必须有相同的"
-"类型。考虑在第二个示例中将 `;` 添加到 `x / 2` 的后面,看看会出现什么情况。"
+"由于 `if` 是一个表达式且必须有一个特定的类型,它的两个分支块必须有相同的类型。考虑在第二"
+"个示例中将 `;` 添加到 `small` 的后面,看看会出现什么情况。"
#: src/control-flow-basics/conditionals.md
msgid ""
-"When `if` is used in an expression, the expression must have a `;` to "
-"separate it from the next statement. Remove the `;` before `println!` to see "
-"the compiler error."
+"When `if` is used in an expression, the expression must have a `;` to separate it from "
+"the next statement. Remove the `;` before `println!` to see the compiler error."
msgstr ""
-"如果在表达式中使用 `if`,则表达式中必须包含 `;` 来将其与下一个语句分隔开。移"
-"除 `println!` 前面的 `;` 即可查看编译器错误。"
+"如果在表达式中使用 `if`,则表达式中必须包含 `;` 来将其与下一个语句分隔开。移除 `println!"
+"` 前面的 `;` 即可查看编译器错误。"
#: src/control-flow-basics/loops.md
msgid "There are three looping keywords in Rust: `while`, `loop`, and `for`:"
msgstr "Rust 中有三个循环关键字:`while`、`loop` 和 `for`:"
#: src/control-flow-basics/loops.md
-#, fuzzy
msgid "`while`"
-msgstr "`while` 循环"
+msgstr "`while`"
#: src/control-flow-basics/loops.md
-#, fuzzy
msgid ""
-"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-"
-"expr.html#predicate-loops) works much like in other languages, executing the "
-"loop body as long as the condition is true."
+"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-expr."
+"html#predicate-loops) works much like in other languages, executing the loop body as "
+"long as the condition is true."
msgstr ""
"[`while` 关键字](https://doc.rust-lang.org/reference/expressions/loop-expr."
-"html#predicate-loops) 的工作方式与其他语言非常相似:"
+"html#predicate-loops) 的工作方式与其他语言非常相似——当判断条件为真时反复执行循环体:"
#: src/control-flow-basics/loops.md
msgid "\"Final x: {x}\""
-msgstr "\"Final x: {x}\""
-
-#: src/control-flow-basics/loops.md
-#, fuzzy
-msgid "`for`"
-msgstr "`for` 循环"
-
-#: src/control-flow-basics/loops.md
-#, fuzzy
-msgid ""
-"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates "
-"over ranges of values:"
msgstr ""
-"[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) 用于定义析构函"
-"数。"
-
-#: src/control-flow-basics/loops.md
-msgid "`loop`"
-msgstr "`loop`"
-#: src/control-flow-basics/loops.md
-#, fuzzy
+#: src/control-flow-basics/loops/for.md
msgid ""
-"The [`loop` statement](https://doc.rust-lang.org/std/keyword.loop.html) just "
-"loops forever, until a `break`."
+"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates over ranges of "
+"values:"
msgstr ""
-"[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) 用于定义析构函"
-"数。"
+"[`for` 循环](https://doc.rust-lang.org/std/keyword.for.html) 计数器在一定范围内迭代:"
-#: src/control-flow-basics/loops.md
-msgid "\"{i}\""
-msgstr "\"{i}\""
+#: src/control-flow-basics/loops/for.md
+msgid "We will discuss iteration later; for now, just stick to range expressions."
+msgstr "我们稍后会讨论迭代;暂时只使用范围表达式。"
-#: src/control-flow-basics/loops.md
+#: src/control-flow-basics/loops/for.md
msgid ""
-"We will discuss iteration later; for now, just stick to range expressions."
-msgstr "我们稍后会讨论迭代;暂时只使用范围表达式。"
+"Note that the `for` loop only iterates to `4`. Show the `1..=5` syntax for an inclusive "
+"range."
+msgstr "请注意,`for` 循环只迭代到 `4`。现在展示使用 `1..=5` 语法表示一个包含边界的范围。"
-#: src/control-flow-basics/loops.md
+#: src/control-flow-basics/loops/loop.md
msgid ""
-"Note that the `for` loop only iterates to `4`. Show the `1..=5` syntax for "
-"an inclusive range."
+"The [`loop` statement](https://doc.rust-lang.org/std/keyword.loop.html) just loops "
+"forever, until a `break`."
+msgstr ""
+"[`loop` 循环](https://doc.rust-lang.org/std/keyword.loop.html) 只能用 `break` 结束。"
+
+#: src/control-flow-basics/loops/loop.md
+msgid "\"{i}\""
msgstr ""
-"请注意,`for` 循环只迭代到 `4`。现在展示使用 `1..=5` 语法表示一个包含边界的范"
-"围。"
#: src/control-flow-basics/break-continue.md
-#, fuzzy
msgid ""
-"If you want to exit any kind of loop early, use [`break`](https://doc.rust-"
-"lang.org/reference/expressions/loop-expr.html#break-expressions). For "
-"`loop`, this can take an optional expression that becomes the value of the "
-"`loop` expression."
+"If you want to exit any kind of loop early, use [`break`](https://doc.rust-lang.org/"
+"reference/expressions/loop-expr.html#break-expressions). For `loop`, this can take an "
+"optional expression that becomes the value of the `loop` expression."
msgstr ""
-"如果你想提前退出循环,请使用 [`break`](https://doc.rust-lang.org/reference/"
-"expressions/loop-expr.html#break-expressions),"
+"如果你想提前退出任意循环,请使用 [`break`](https://doc.rust-lang.org/reference/"
+"expressions/loop-expr.html#break-expressions)。对于 `loop` 循环,这种退出方式还可以额外携"
+"带一个表达式,作为它的值。"
#: src/control-flow-basics/break-continue.md
msgid ""
-"If you want to immediately start the next iteration use [`continue`](https://"
-"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)."
+"If you want to immediately start the next iteration use [`continue`](https://doc.rust-"
+"lang.org/reference/expressions/loop-expr.html#continue-expressions)."
msgstr ""
-"如果需要立即启动 下一次迭代,请使用 [`continue`](https://doc.rust-lang.org/"
-"reference/expressions/loop-expr.html#continue-expressions)。"
+"如果需要立即启动 下一次迭代,请使用 [`continue`](https://doc.rust-lang.org/reference/"
+"expressions/loop-expr.html#continue-expressions)。"
#: src/control-flow-basics/break-continue.md
msgid "\"{result}\""
-msgstr "\"{result}\""
+msgstr ""
#: src/control-flow-basics/break-continue.md
msgid ""
-"Both `continue` and `break` can optionally take a label argument which is "
-"used to break out of nested loops:"
+"Both `continue` and `break` can optionally take a label argument which is used to break "
+"out of nested loops:"
msgstr "`continue` 和 `break` 都可以选择接受一个标签参数,用来 终止嵌套循环:"
#: src/control-flow-basics/break-continue.md
msgid "\"x: {x}, i: {i}\""
-msgstr "\"x: {x}, i: {i}\""
+msgstr ""
#: src/control-flow-basics/break-continue.md
-msgid ""
-"In this case we break the outer loop after 3 iterations of the inner loop."
-msgstr "在本示例中,我们会在内循环 3 次迭代后终止外循环。"
+msgid "In this case we break the outer loop after 3 iterations of the inner loop."
+msgstr "在本示例中,我们会在内循环 3 次迭代后终止外层循环。"
#: src/control-flow-basics/break-continue.md
msgid ""
-"Note that `loop` is the only looping construct which returns a non-trivial "
-"value. This is because it's guaranteed to be entered at least once (unlike "
-"`while` and `for` loops)."
+"Note that `loop` is the only looping construct which returns a non-trivial value. This "
+"is because it's guaranteed to be entered at least once (unlike `while` and `for` loops)."
msgstr ""
-"请注意,`loop` 是唯一返回有意义的值的循环结构。 这是因为它保证至少被输入一次"
-"(与 `while` 和 `for` 循环不同)。"
+"请注意,`loop` 是唯一返回有意义的值的循环结构。 这是因为它保证至少被输入一次(与 `while` "
+"和 `for` 循环不同)。"
#: src/control-flow-basics/blocks-and-scopes.md
msgid "Blocks"
msgstr "块"
#: src/control-flow-basics/blocks-and-scopes.md
-#, fuzzy
msgid ""
-"A block in Rust contains a sequence of expressions, enclosed by braces `{}`. "
-"Each block has a value and a type, which are those of the last expression of "
-"the block:"
-msgstr "Rust 中的块包含值和类型:值是 块的最后一个表达式:"
+"A block in Rust contains a sequence of expressions, enclosed by braces `{}`. Each block "
+"has a value and a type, which are those of the last expression of the block:"
+msgstr ""
+"Rust 中的块包含一系列表达式,它们被 `{}` 包在一起。每个块的最后一个表达式决定它的值和类"
+"型:"
#: src/control-flow-basics/blocks-and-scopes.md
msgid "\"y: {y}\""
msgstr "\"y: {y}\""
#: src/control-flow-basics/blocks-and-scopes.md
-#, fuzzy
-msgid ""
-"If the last expression ends with `;`, then the resulting value and type is "
-"`()`."
-msgstr "不过,如果最后一个表达式以 `;` 结尾,那么生成的值和类型为 `()`。"
+msgid "If the last expression ends with `;`, then the resulting value and type is `()`."
+msgstr "如果最后一个表达式以 `;` 结尾,那么生成的值和类型为 `()`。"
#: src/control-flow-basics/blocks-and-scopes.md
msgid "Scopes and Shadowing"
@@ -3390,156 +3219,137 @@ msgstr "变量的作用域仅限于封闭代码块内。"
#: src/control-flow-basics/blocks-and-scopes.md
msgid ""
-"You can shadow variables, both those from outer scopes and variables from "
-"the same scope:"
+"You can shadow variables, both those from outer scopes and variables from the same scope:"
msgstr "你可以隐藏变量,位于外部作用域的变量和 相同作用域的变量都可以:"
#: src/control-flow-basics/blocks-and-scopes.md
msgid "\"before: {a}\""
-msgstr "\"before: {a}\""
+msgstr ""
#: src/control-flow-basics/blocks-and-scopes.md src/std-traits/from-and-into.md
#: src/slices-and-lifetimes/solution.md
-#, fuzzy
msgid "\"hello\""
-msgstr "\"hello\""
+msgstr ""
#: src/control-flow-basics/blocks-and-scopes.md
msgid "\"inner scope: {a}\""
-msgstr "\"inner scope: {a}\""
+msgstr ""
#: src/control-flow-basics/blocks-and-scopes.md
msgid "\"shadowed in inner scope: {a}\""
-msgstr "\"shadowed in inner scope: {a}\""
+msgstr ""
#: src/control-flow-basics/blocks-and-scopes.md
msgid "\"after: {a}\""
-msgstr "\"after: {a}\""
+msgstr ""
#: src/control-flow-basics/blocks-and-scopes.md
msgid ""
-"You can show how the value of the block changes by changing the last line in "
-"the block. For instance, adding/removing a semicolon or using a `return`."
+"You can show how the value of the block changes by changing the last line in the block. "
+"For instance, adding/removing a semicolon or using a `return`."
msgstr ""
-"你可以通过更改块的最后一行,来展示块值的变化情况。例如,添加/移除分号或使用 "
-"`return`。"
+"你可以通过更改块的最后一行,来展示块的值的变化情况。例如,添加/移除分号或使用 `return`。"
#: src/control-flow-basics/blocks-and-scopes.md
-#, fuzzy
msgid ""
-"Show that a variable's scope is limited by adding a `b` in the inner block "
-"in the last example, and then trying to access it outside that block."
+"Show that a variable's scope is limited by adding a `b` in the inner block in the last "
+"example, and then trying to access it outside that block."
msgstr ""
-"通过在上一个示例的内部代码块中添加 `b`,并尝试在该代码块之外访问它,表明变量"
-"的作用域是受限的。"
+"通过在上一个示例的内部块中添加变量 `b`,并尝试在该代码块之外访问它,来表明变量的作用域是"
+"受限的。"
#: src/control-flow-basics/blocks-and-scopes.md
-#, fuzzy
msgid ""
-"Shadowing is different from mutation, because after shadowing both "
-"variable's memory locations exist at the same time. Both are available under "
-"the same name, depending where you use it in the code."
+"Shadowing is different from mutation, because after shadowing both variable's memory "
+"locations exist at the same time. Both are available under the same name, depending "
+"where you use it in the code."
msgstr ""
-"定义: 遮蔽和变更(mutation)不同,因为在遮蔽之后,两个变量都会同时存在于内存"
-"的不同位置中。在同一个名字下的两个变量都是可以被使用的,但是你在代码的哪里使"
-"用会最终决定你使用哪一个变量。"
+"遮蔽和变更(mutation)不同,因为在遮蔽之后,两个变量都会同时存在于内存的不同位置中。在同"
+"一个名字下的两个变量都是可以被使用的,使用哪个取决于你在何处使用它。"
#: src/control-flow-basics/blocks-and-scopes.md
-#, fuzzy
msgid "A shadowing variable can have a different type."
-msgstr "一个遮蔽变量可以具有不同的类型。"
+msgstr "一个遮蔽的变量可以具有不同的类型。"
#: src/control-flow-basics/blocks-and-scopes.md
msgid ""
-"Shadowing looks obscure at first, but is convenient for holding on to values "
-"after `.unwrap()`."
+"Shadowing looks obscure at first, but is convenient for holding on to values after `."
+"unwrap()`."
msgstr "隐藏起初看起来会有些晦涩,但是它很便于存 `.unwrap()` 之后的得到的值。"
#: src/control-flow-basics/functions.md
msgid ""
-"Declaration parameters are followed by a type (the reverse of some "
-"programming languages), then a return type."
+"Declaration parameters are followed by a type (the reverse of some programming "
+"languages), then a return type."
msgstr "类型跟随在声明的参数后(与某些编程语言相反),然后是返回类型。"
#: src/control-flow-basics/functions.md
-#, fuzzy
msgid ""
-"The last expression in a function body (or any block) becomes the return "
-"value. Simply omit the `;` at the end of the expression. The `return` "
-"keyword can be used for early return, but the \"bare value\" form is "
-"idiomatic at the end of a function (refactor `gcd` to use a `return`)."
+"The last expression in a function body (or any block) becomes the return value. Simply "
+"omit the `;` at the end of the expression. The `return` keyword can be used for early "
+"return, but the \"bare value\" form is idiomatic at the end of a function (refactor "
+"`gcd` to use a `return`)."
msgstr ""
-"函数体(或任何块)中的最后一个表达式将成为返回值。只需省略表达式末尾的 `;` 即"
-"可。"
+"函数体(或任何块)中的最后一个表达式将成为返回值,只需省略表达式末尾的 `;` 即可。也可以使"
+"用关键字 `return` 提前返回,但是前一种写法是惯用的(尝试使用 `return` 重写 `gcd` )"
#: src/control-flow-basics/functions.md
msgid ""
-"Some functions have no return value, and return the 'unit type', `()`. The "
-"compiler will infer this if the `-> ()` return type is omitted."
+"Some functions have no return value, and return the 'unit type', `()`. The compiler will "
+"infer this if the `-> ()` return type is omitted."
msgstr ""
-"有些函数没有返回值,会返回“单元类型(unit type)”`()`。如果省略了`-> ()`的返"
-"回类型,编译器将会自动推断。"
+"有些函数没有返回值,会返回“单元类型(unit type)”`()`。如果省略了`-> ()`的返回类型,编译"
+"器将会自动推断。"
#: src/control-flow-basics/functions.md
-#, fuzzy
-msgid ""
-"Overloading is not supported -- each function has a single implementation."
-msgstr "每一个函数都只有一种实现:"
+msgid "Overloading is not supported -- each function has a single implementation."
+msgstr "不允许函数重载——每一个函数都只有一种实现:"
#: src/control-flow-basics/functions.md
msgid ""
-"Always takes a fixed number of parameters. Default arguments are not "
-"supported. Macros can be used to support variadic functions."
+"Always takes a fixed number of parameters. Default arguments are not supported. Macros "
+"can be used to support variadic functions."
msgstr "始终采用固定数量的参数。不支持默认参数。宏可用于支持可变函数。"
#: src/control-flow-basics/functions.md
-#, fuzzy
msgid ""
-"Always takes a single set of parameter types. These types can be generic, "
-"which will be covered later."
-msgstr "始终接受一组形参类型。"
+"Always takes a single set of parameter types. These types can be generic, which will be "
+"covered later."
+msgstr "始终接受一组形参类型。这些类型可以是泛型(后文会涉及)。"
#: src/control-flow-basics/macros.md
msgid ""
-"Macros are expanded into Rust code during compilation, and can take a "
-"variable number of arguments. They are distinguished by a `!` at the end. "
-"The Rust standard library includes an assortment of useful macros."
+"Macros are expanded into Rust code during compilation, and can take a variable number of "
+"arguments. They are distinguished by a `!` at the end. The Rust standard library "
+"includes an assortment of useful macros."
msgstr ""
-"宏在编译过程中会扩展为 Rust 代码,并且可以接受可变数量的参数。它们以 `!` 结尾"
-"来进行区分。Rust 标准库包含各种有用的宏。"
+"宏在编译过程中会扩展为 Rust 代码,并且可以接受可变数量的参数。它们以 `!` 结尾来进行区分。"
+"Rust 标准库包含各种有用的宏。"
#: src/control-flow-basics/macros.md
-#, fuzzy
msgid ""
-"`println!(format, ..)` prints a line to standard output, applying formatting "
-"described in [`std::fmt`](https://doc.rust-lang.org/std/fmt/index.html)."
+"`println!(format, ..)` prints a line to standard output, applying formatting described "
+"in [`std::fmt`](https://doc.rust-lang.org/std/fmt/index.html)."
msgstr ""
-"运算符重载是通过 [`std::ops`](https://doc.rust-lang.org/std/ops/index.html) "
-"中的特征实现的:"
+"`println!(format, ..)` 采用 [`std::fmt`](https://doc.rust-lang.org/std/fmt/index.html) 中"
+"描述的格式,向标准输出打印一行。"
#: src/control-flow-basics/macros.md
msgid ""
-"`format!(format, ..)` works just like `println!` but returns the result as a "
-"string."
-msgstr ""
-"`format!(format, ..)` 的用法与 `println!` 类似,但它以字符串形式返回结果。"
+"`format!(format, ..)` works just like `println!` but returns the result as a string."
+msgstr "`format!(format, ..)` 的用法与 `println!` 类似,但它返回一个字符串作为结果。"
#: src/control-flow-basics/macros.md
msgid "`dbg!(expression)` logs the value of the expression and returns it."
msgstr "`dbg!(expression)` 会记录表达式的值并返回该值。"
#: src/control-flow-basics/macros.md
-msgid ""
-"`todo!()` marks a bit of code as not-yet-implemented. If executed, it will "
-"panic."
+msgid "`todo!()` marks a bit of code as not-yet-implemented. If executed, it will panic."
msgstr "`todo!()` 用于标记尚未实现的代码段。如果执行该代码段,则会触发 panic。"
#: src/control-flow-basics/macros.md
-msgid ""
-"`unreachable!()` marks a bit of code as unreachable. If executed, it will "
-"panic."
-msgstr ""
-"`unreachable!()` 用于标记无法访问的代码段。如果执行该代码段,则会触发 panic。"
+msgid "`unreachable!()` marks a bit of code as unreachable. If executed, it will panic."
+msgstr "`unreachable!()` 用于标记无法访问的代码段。如果执行该代码段,则会触发 panic。"
#: src/control-flow-basics/macros.md
msgid "\"{n}! = {}\""
@@ -3547,26 +3357,25 @@ msgstr "\"{n}! = {}\""
#: src/control-flow-basics/macros.md
msgid ""
-"The takeaway from this section is that these common conveniences exist, and "
-"how to use them. Why they are defined as macros, and what they expand to, is "
-"not especially critical."
+"The takeaway from this section is that these common conveniences exist, and how to use "
+"them. Why they are defined as macros, and what they expand to, is not especially "
+"critical."
msgstr ""
-"这一节的要点是介绍这些常见的便捷功能以及如何使用它们。而为何将它们定义为宏以"
-"及它们可以扩展为什么内容,并不是特别关键。"
+"这一节的要点是介绍这些常见的便捷功能以及如何使用它们。而为何将它们定义为宏以及它们可以扩"
+"展为什么内容,并不是特别关键。"
#: src/control-flow-basics/macros.md
msgid ""
-"The course does not cover defining macros, but a later section will describe "
-"use of derive macros."
+"The course does not cover defining macros, but a later section will describe use of "
+"derive macros."
msgstr "本课程不会介绍如何定义宏,但在后续部分会介绍派生宏的用法。"
#: src/control-flow-basics/exercise.md
msgid ""
-"The [Collatz Sequence](https://en.wikipedia.org/wiki/Collatz_conjecture) is "
-"defined as follows, for an arbitrary n"
+"The [Collatz Sequence](https://en.wikipedia.org/wiki/Collatz_conjecture) is defined as "
+"follows, for an arbitrary n"
msgstr ""
-"[考拉兹序列](https://en.wikipedia.org/wiki/Collatz_conjecture) 的定义如下,其"
-"中任意 n"
+"[考拉兹序列](https://en.wikipedia.org/wiki/Collatz_conjecture) 的定义如下,其中任意 n"
#: src/control-flow-basics/exercise.md
msgid "1"
@@ -3629,7 +3438,6 @@ msgid "_ = 3:"
msgstr "_ = 3 开头:"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "3 is odd, so _n"
msgstr "3 是奇数,因此 _n"
@@ -3642,7 +3450,6 @@ msgid "_ = 3 * 3 + 1 = 10;"
msgstr "_ = 3 * 3 + 1 = 10;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "10 is even, so _n"
msgstr "10 是偶数,因此 _n"
@@ -3655,7 +3462,6 @@ msgid "_ = 10 / 2 = 5;"
msgstr "_ = 10 / 2 = 5;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "5 is odd, so _n"
msgstr "5 是奇数,因此 _n"
@@ -3664,12 +3470,10 @@ msgid "4"
msgstr "4"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "_ = 3 * 5 + 1 = 16;"
msgstr "_ = 3 * 15 + 1 = 16;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "16 is even, so _n"
msgstr "16 是偶数,因此 _n"
@@ -3678,12 +3482,10 @@ msgid "5"
msgstr "5"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "_ = 16 / 2 = 8;"
msgstr "_ = 16 / 2 = 8;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "8 is even, so _n"
msgstr "8 是偶数,因此 _n"
@@ -3692,12 +3494,10 @@ msgid "6"
msgstr "6"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "_ = 8 / 2 = 4;"
msgstr "_ = 8 / 2 = 4;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "4 is even, so _n"
msgstr "4 是偶数,因此 _n"
@@ -3706,12 +3506,10 @@ msgid "7"
msgstr "7"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "_ = 4 / 2 = 2;"
msgstr "_ = 4 / 2 = 2;"
#: src/control-flow-basics/exercise.md
-#, fuzzy
msgid "2 is even, so _n"
msgstr "2 是偶数,因此 _n"
@@ -3729,8 +3527,7 @@ msgstr "序列终止。"
#: src/control-flow-basics/exercise.md
msgid ""
-"Write a function to calculate the length of the collatz sequence for a given "
-"initial `n`."
+"Write a function to calculate the length of the collatz sequence for a given initial `n`."
msgstr "编写一个函数,用于计算给定初始 `n` 的考拉兹序列的长度。"
#: src/control-flow-basics/exercise.md src/control-flow-basics/solution.md
@@ -3743,9 +3540,8 @@ msgstr "\"Length: {}\""
#: src/welcome-day-1-afternoon.md src/welcome-day-2-afternoon.md
#: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md
-#, fuzzy
msgid "Welcome Back"
-msgstr "欢迎"
+msgstr "欢迎回来"
#: src/welcome-day-1-afternoon.md
msgid "[Tuples and Arrays](./tuples-and-arrays.md) (1 hour)"
@@ -3759,15 +3555,12 @@ msgstr ""
msgid "[User-Defined Types](./user-defined-types.md) (50 minutes)"
msgstr ""
-#: src/welcome-day-1-afternoon.md src/welcome-day-2.md
-msgid ""
-"Including 10 minute breaks, this session should take about 2 hours and 55 "
-"minutes"
+#: src/welcome-day-1-afternoon.md
+msgid "Including 10 minute breaks, this session should take about 2 hours and 55 minutes"
msgstr ""
#: src/tuples-and-arrays.md
-msgid ""
-"[Tuples and Arrays](./tuples-and-arrays/tuples-and-arrays.md) (10 minutes)"
+msgid "[Tuples and Arrays](./tuples-and-arrays/tuples-and-arrays.md) (10 minutes)"
msgstr ""
#: src/tuples-and-arrays.md
@@ -3786,17 +3579,20 @@ msgstr ""
msgid "[Exercise: Nested Arrays](./tuples-and-arrays/exercise.md) (30 minutes)"
msgstr ""
+#: src/tuples-and-arrays.md src/memory-management.md src/borrowing.md src/testing.md
+msgid "This segment should take about 1 hour"
+msgstr "本课程应耗时约 1h"
+
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid ""
-"Tuples and arrays are the first \"compound\" types we have seen. All "
-"elements of an array have the same type, while tuples can accommodate "
-"different types. Both types have a size fixed at compile time."
+"Tuples and arrays are the first \"compound\" types we have seen. All elements of an "
+"array have the same type, while tuples can accommodate different types. Both types have "
+"a size fixed at compile time."
msgstr ""
-"元组和数组是我们见过的第一个 “复合”类型。数组的所有元素具有相同的类型,而元组"
-"可以适应不同的类型。这两种类型的大小在编译时是固定的。"
+"元组和数组是我们见过的第一个 “复合”类型。数组的所有元素具有相同的类型,而元组可以适应不同"
+"的类型。这两种类型的大小在编译时是固定的。"
-#: src/tuples-and-arrays/tuples-and-arrays.md
-#: src/tuples-and-arrays/destructuring.md
+#: src/tuples-and-arrays/tuples-and-arrays.md src/tuples-and-arrays/destructuring.md
msgid "Arrays"
msgstr "数组(Arrays)"
@@ -3808,8 +3604,7 @@ msgstr "`[T; N]`"
msgid "`[20, 30, 40]`, `[0; 3]`"
msgstr "`[20, 30, 40]`, `[0; 3]`"
-#: src/tuples-and-arrays/tuples-and-arrays.md
-#: src/tuples-and-arrays/destructuring.md
+#: src/tuples-and-arrays/tuples-and-arrays.md src/tuples-and-arrays/destructuring.md
msgid "Tuples"
msgstr "元组(Tuples)"
@@ -3834,51 +3629,46 @@ msgid "Arrays:"
msgstr "数组:"
#: src/tuples-and-arrays/tuples-and-arrays.md
-#, fuzzy
msgid ""
-"A value of the array type `[T; N]` holds `N` (a compile-time constant) "
-"elements of the same type `T`. Note that the length of the array is _part of "
-"its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two "
-"different types. Slices, which have a size determined at runtime, are "
-"covered later."
+"A value of the array type `[T; N]` holds `N` (a compile-time constant) elements of the "
+"same type `T`. Note that the length of the array is _part of its type_, which means that "
+"`[u8; 3]` and `[u8; 4]` are considered two different types. Slices, which have a size "
+"determined at runtime, are covered later."
msgstr ""
-"数组中的元素具有相同的类型 `T`,数组的长度为 `N`,`N` 是一个编译期常量。 需要"
-"注意的是数组的长度是它_类型的一部分\\_, 这意味着 `[u8; 3]` 和 `[u8; 4]` 在 "
-"Rust 中被认为是不同的类型。"
+"数组中包含 `N`(一个编译期常量) 个元素,它们的类型都是 `T`。 需要注意的是,数组的长度是"
+"它类型的一部分, 这意味着 `[u8; 3]` 和 `[u8; 4]` 在被认作不同的类型。切片(长度在运行期确"
+"定)将会在后文介绍。"
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid ""
-"Try accessing an out-of-bounds array element. Array accesses are checked at "
-"runtime. Rust can usually optimize these checks away, and they can be "
-"avoided using unsafe Rust."
+"Try accessing an out-of-bounds array element. Array accesses are checked at runtime. "
+"Rust can usually optimize these checks away, and they can be avoided using unsafe Rust."
msgstr ""
-"请尝试访问出界数组元素。系统会在运行时检查数组访问。Rust 通常会通过优化消除这"
-"些检查,以及使用不安全的 Rust 来避免这些检查。"
+"请尝试访问出界数组元素。系统会在运行时检查数组访问。Rust 通常会通过优化消除这些检查,以及"
+"使用不安全的 Rust 来避免这些检查。"
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid "We can use literals to assign values to arrays."
msgstr "我们可以使用字面量来为数组赋值。"
#: src/tuples-and-arrays/tuples-and-arrays.md
-#, fuzzy
msgid ""
-"The `println!` macro asks for the debug implementation with the `?` format "
-"parameter: `{}` gives the default output, `{:?}` gives the debug output. "
-"Types such as integers and strings implement the default output, but arrays "
-"only implement the debug output. This means that we must use debug output "
-"here."
+"The `println!` macro asks for the debug implementation with the `?` format parameter: `{}"
+"` gives the default output, `{:?}` gives the debug output. Types such as integers and "
+"strings implement the default output, but arrays only implement the debug output. This "
+"means that we must use debug output here."
msgstr ""
-"在主函数中,打印(print)语句使用 `?` 格式请求调试实现。 使用参数 `{}` 打印默"
-"认输出,`{:?}` 表示以调试格式输出。 我们也可以不在格式化字符串后面指定变量"
-"值,直接使用 `{a}` 和 `{a:?}` 进行输出。"
+"宏 `println!` 使用 `?` 请求调试实现:使用 `{}` 打印默认输出,`{:?}` 表示以调试格式输出。"
+"有些类型,比如整型和字符串,可以使用默认输出;但是数组仅支持调试格式输出,因此这里必须使"
+"用调试格式输出。"
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid ""
-"Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be "
-"easier to read."
+"Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be easier to "
+"read."
msgstr ""
-"添加 `#`,比如 `{a:#?}`,会输出“美观打印(pretty printing)” 格式,这种格式可"
-"能会更加易读。"
+"添加 `#`,比如 `{a:#?}`,会输出“美观打印(pretty printing)” 格式,这种格式可能会更加易"
+"读。"
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid "Tuples:"
@@ -3894,27 +3684,25 @@ msgstr "元组将不同类型的值组成一个复合类型。"
#: src/tuples-and-arrays/tuples-and-arrays.md
msgid ""
-"Fields of a tuple can be accessed by the period and the index of the value, "
-"e.g. `t.0`, `t.1`."
+"Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, "
+"`t.1`."
msgstr "元组中的字段可以通过英文句号加上值的下标进行访问比如:`t.0`, `t.1`。"
#: src/tuples-and-arrays/tuples-and-arrays.md
-#, fuzzy
msgid ""
-"The empty tuple `()` is also known as the \"unit type\". It is both a type, "
-"and the only valid value of that type --- that is to say both the type and "
-"its value are expressed as `()`. It is used to indicate, for example, that a "
-"function or expression has no return value, as we'll see in a future slide."
+"The empty tuple `()` is also known as the \"unit type\". It is both a type, and the only "
+"valid value of that type --- that is to say both the type and its value are expressed as "
+"`()`. It is used to indicate, for example, that a function or expression has no return "
+"value, as we'll see in a future slide."
msgstr ""
-"空元组 `()` 也被称作 “单元(unit)类型”. 它既是一个类型, 也是这种类型的唯一"
-"值——也就是说它的类型和它的值都被表示为 `()`。它通常用于表示,比如,一个函数或"
-"表达式没有返回值,我们会在后续的幻灯片种见到这种用法。"
+"空元组 `()` 也被称作 “单元(unit)类型”。它既是一个类型,也是这种类型的唯一合法的值——也就"
+"是说它的类型和它的值都被表示为 `()`。它通常用于表示,比如,一个函数或表达式没有返回值,我"
+"们会在后续的幻灯片中见到这种用法。"
#: src/tuples-and-arrays/tuples-and-arrays.md
-#, fuzzy
msgid ""
-"You can think of it as `void` that can be familiar to you from other "
-"programming languages."
+"You can think of it as `void` that can be familiar to you from other programming "
+"languages."
msgstr "你可以将其理解为你可能在其他编程语言中比较熟悉的 `void` 类型。"
#: src/tuples-and-arrays/iteration.md
@@ -3922,29 +3710,25 @@ msgid "The `for` statement supports iterating over arrays (but not tuples)."
msgstr "`for` 语句支持对数组进行迭代(但不支持元组)。"
#: src/tuples-and-arrays/iteration.md
-msgid ""
-"This functionality uses the `IntoIterator` trait, but we haven't covered "
-"that yet."
+msgid "This functionality uses the `IntoIterator` trait, but we haven't covered that yet."
msgstr "此功能使用了 `IntoIterator` trait,但我们还没有讲到它。"
#: src/tuples-and-arrays/iteration.md
msgid ""
-"The `assert_ne!` macro is new here. There are also `assert_eq!` and `assert!"
-"` macros. These are always checked while, debug-only variants like "
-"`debug_assert!` compile to nothing in release builds."
+"The `assert_ne!` macro is new here. There are also `assert_eq!` and `assert!` macros. "
+"These are always checked while, debug-only variants like `debug_assert!` compile to "
+"nothing in release builds."
msgstr ""
-"这里新增了 `assert_ne!` 宏。此外,还有 `assert_eq!` 和 `assert!` 宏。系统始终"
-"会对这些宏进行检查,而像 `debug_assert!` 这样的仅调试变体在发布 build 中不会"
-"编译成任何代码。"
+"这里新增了 `assert_ne!` 宏。此外,还有 `assert_eq!` 和 `assert!` 宏。系统始终会对这些宏进"
+"行检查,而像 `debug_assert!` 这样的仅调试变体在发布 build 中不会编译成任何代码。"
#: src/tuples-and-arrays/match.md
-#, fuzzy
msgid ""
-"The `match` keyword lets you match a value against one or more _patterns_. "
-"The comparisons are done from top to bottom and the first match wins."
+"The `match` keyword lets you match a value against one or more _patterns_. The "
+"comparisons are done from top to bottom and the first match wins."
msgstr ""
-"使用关键词 `match` 对一个值进行模式匹配。进行匹配时,会从上至下依次进行比较,"
-"并选定第一个匹配成功的结果。"
+"使用关键词 `match` 对一个值进行模式匹配。进行匹配时,会从上至下依次进行比较,并选定第一个"
+"匹配成功的结果。"
#: src/tuples-and-arrays/match.md
msgid "The patterns can be simple values, similarly to `switch` in C and C++:"
@@ -3959,12 +3743,11 @@ msgid "'q'"
msgstr "'q'"
#: src/tuples-and-arrays/match.md
-#, fuzzy
msgid "\"Quitting\""
msgstr "\"Quitting\""
-#: src/tuples-and-arrays/match.md src/std-traits/solution.md
-#: src/error-handling/exercise.md src/error-handling/solution.md
+#: src/tuples-and-arrays/match.md src/std-traits/solution.md src/error-handling/exercise.md
+#: src/error-handling/solution.md
msgid "'a'"
msgstr "'a'"
@@ -4008,27 +3791,26 @@ msgstr "\"Something else\""
#: src/tuples-and-arrays/match.md
msgid ""
-"The `_` pattern is a wildcard pattern which matches any value. The "
-"expressions _must_ be irrefutable, meaning that it covers every possibility, "
-"so `_` is often used as the final catch-all case."
+"The `_` pattern is a wildcard pattern which matches any value. The expressions _must_ be "
+"irrefutable, meaning that it covers every possibility, so `_` is often used as the final "
+"catch-all case."
msgstr ""
-"`_` 模式是与任何值匹配的通配符模式。表达式 _必须_ 不可反驳,即其涵盖了所有可"
-"能性,因此通常将 `_` 用作最终的万能符。"
+"`_` 模式是与任何值匹配的通配符模式。表达式 _必须_ 不可反驳,即其涵盖了所有可能性,因此通"
+"常将 `_` 用作最终的万能符。"
#: src/tuples-and-arrays/match.md
-#, fuzzy
msgid ""
-"Match can be used as an expression. Just like `if`, each match arm must have "
-"the same type. The type is the last expression of the block, if any. In the "
-"example above, the type is `()`."
+"Match can be used as an expression. Just like `if`, each match arm must have the same "
+"type. The type is the last expression of the block, if any. In the example above, the "
+"type is `()`."
msgstr ""
-"与 `if let` 类似,每个匹配分支必须有相同的类型。该类型是块的最后一个 表达式"
-"(如有)。在上例中,类型是 `()`。"
+"模式匹配可以像一个表达式一样被使用。与 `if` 类似,每个匹配分支必须有相同的类型。该类型是"
+"块的最后一个 表达式(如有)。在上例中,类型是 `()`。"
#: src/tuples-and-arrays/match.md
msgid ""
-"A variable in the pattern (`key` in this example) will create a binding that "
-"can be used within the match arm."
+"A variable in the pattern (`key` in this example) will create a binding that can be used "
+"within the match arm."
msgstr "模式中的变量(本例中为 `key`)将创建一个可在匹配分支内使用的绑定。"
#: src/tuples-and-arrays/match.md
@@ -4042,19 +3824,17 @@ msgstr "关键点:"
#: src/tuples-and-arrays/match.md
#, fuzzy
-msgid ""
-"You might point out how some specific characters are being used when in a "
-"pattern"
+msgid "You might point out how some specific characters are being used when in a pattern"
msgstr ""
-"你可以解释一些用于表达模式的特殊字符的用法 \\*`|` 表示或 (or) \\*`..` 可以展"
-"开为任意一个或多个值 \\*`1..=5` 代表了一个闭区间范围"
+"你可以解释一些用于表达模式的特殊字符的用法 \\*`|` 表示或 (or) \\*`..` 可以展开为任意一个"
+"或多个值 \\*`1..=5` 代表了一个闭区间范围"
#: src/tuples-and-arrays/match.md
#, fuzzy
msgid "`|` as an `or`"
msgstr ""
-"解释模式匹配中的绑定的原理可能会很有帮助。比如可以用一个变量替代外卡,或者去"
-"除 `q` 外面的引号。"
+"解释模式匹配中的绑定的原理可能会很有帮助。比如可以用一个变量替代外卡,或者去除 `q` 外面的"
+"引号。"
#: src/tuples-and-arrays/match.md
#, fuzzy
@@ -4065,8 +3845,7 @@ msgstr "你可以展示如何匹配一个引用。"
#, fuzzy
msgid "`1..=5` represents an inclusive range"
msgstr ""
-"现在是一个讲解不可反驳 (irrefutable) 模式的好时机。因为这个术语可能会出现在错"
-"误信息中。"
+"现在是一个讲解不可反驳 (irrefutable) 模式的好时机。因为这个术语可能会出现在错误信息中。"
#: src/tuples-and-arrays/match.md
msgid "`_` is a wild card"
@@ -4074,38 +3853,35 @@ msgstr "“\\_”是通配符"
#: src/tuples-and-arrays/match.md
msgid ""
-"Match guards as a separate syntax feature are important and necessary when "
-"we wish to concisely express more complex ideas than patterns alone would "
-"allow."
+"Match guards as a separate syntax feature are important and necessary when we wish to "
+"concisely express more complex ideas than patterns alone would allow."
msgstr ""
-"有些想法比模式本身所允许的程度更加复杂,如果我们希望简要地表达这些想法,就必"
-"须把匹配守卫视为独立的语法功能。"
+"有些想法比模式本身所允许的程度更加复杂,如果我们希望简要地表达这些想法,就必须把匹配守卫"
+"视为独立的语法功能。"
#: src/tuples-and-arrays/match.md
msgid ""
-"They are not the same as separate `if` expression inside of the match arm. "
-"An `if` expression inside of the branch block (after `=>`) happens after the "
-"match arm is selected. Failing the `if` condition inside of that block won't "
-"result in other arms of the original `match` expression being considered."
+"They are not the same as separate `if` expression inside of the match arm. An `if` "
+"expression inside of the branch block (after `=>`) happens after the match arm is "
+"selected. Failing the `if` condition inside of that block won't result in other arms of "
+"the original `match` expression being considered."
msgstr ""
-"它们与匹配分支中的单独“if”表达式不同。选择匹配分支后,分支块内(在“=>”之后)"
-"会出现“if”表达式。如果该分支块内的“if”条件失败,系统不会考虑原始“match”表达式"
-"的其他分支。"
+"它们与匹配分支中的单独“if”表达式不同。选择匹配分支后,分支块内(在“=>”之后)会出现“if”表"
+"达式。如果该分支块内的“if”条件失败,系统不会考虑原始“match”表达式的其他分支。"
#: src/tuples-and-arrays/match.md
msgid ""
-"The condition defined in the guard applies to every expression in a pattern "
-"with an `|`."
+"The condition defined in the guard applies to every expression in a pattern with an `|`."
msgstr "只要表达式在包含“|”的模式中,就会适用守卫定义的条件。"
#: src/tuples-and-arrays/destructuring.md
msgid ""
-"Destructuring is a way of extracting data from a data structure by writing a "
-"pattern that is matched up to the data structure, binding variables to "
-"subcomponents of the data structure."
+"Destructuring is a way of extracting data from a data structure by writing a pattern "
+"that is matched up to the data structure, binding variables to subcomponents of the data "
+"structure."
msgstr ""
-"解构是一种从数据结构中提取数据的方法,具体方法是编写与数据结构匹配的模式,将"
-"变量绑定到数据结构的子组件。"
+"解构是一种从数据结构中提取数据的方法,具体方法是编写与数据结构匹配的模式,将变量绑定到数"
+"据结构的子组件。"
#: src/tuples-and-arrays/destructuring.md
#, fuzzy
@@ -4158,9 +3934,7 @@ msgid "Add more values to the array."
msgstr "向数组中添加更多的值。"
#: src/tuples-and-arrays/destructuring.md
-msgid ""
-"Point out that how `..` will expand to account for different number of "
-"elements."
+msgid "Point out that how `..` will expand to account for different number of elements."
msgstr "指出 `..` 是如何扩展以适应不同数量的元素的。"
#: src/tuples-and-arrays/destructuring.md
@@ -4179,25 +3953,23 @@ msgstr "每个循环中的“word”是什么类型?"
#: src/tuples-and-arrays/exercise.md
#, fuzzy
msgid ""
-"Use an array such as the above to write a function `transpose` which will "
-"transpose a matrix (turn rows into columns):"
+"Use an array such as the above to write a function `transpose` which will transpose a "
+"matrix (turn rows into columns):"
msgstr ""
-"使用以上知识,写一个用易读的格式输出矩阵的 `pretty_print` 函数,以及一个对矩"
-"阵进行转置(将行和列互换)的 `transpose` 函数:"
+"使用以上知识,写一个用易读的格式输出矩阵的 `pretty_print` 函数,以及一个对矩阵进行转置"
+"(将行和列互换)的 `transpose` 函数:"
#: src/tuples-and-arrays/exercise.md
msgid "Hard-code both functions to operate on 3 × 3 matrices."
msgstr "硬编码这两个函数,让它们处理 3 × 3 的矩阵。"
#: src/tuples-and-arrays/exercise.md
-msgid ""
-"Copy the code below to and implement the "
-"functions:"
+msgid "Copy the code below to and implement the functions:"
msgstr "将下面的代码复制到 并实现上述函数:"
-#: src/tuples-and-arrays/exercise.md src/borrowing/exercise.md
-#: src/unsafe-rust/exercise.md
-msgid "// TODO: remove this when you're done with your implementation.\n"
+#: src/tuples-and-arrays/exercise.md src/borrowing/exercise.md src/unsafe-rust/exercise.md
+#, fuzzy
+msgid "// TODO: remove this when you're done with your implementation."
msgstr "// TODO: remove this when you're done with your implementation.\n"
#: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md
@@ -4234,21 +4006,20 @@ msgstr ""
#: src/references/shared.md
msgid ""
-"A reference provides a way to access another value without taking "
-"responsibility for the value, and is also called \"borrowing\". Shared "
-"references are read-only, and the referenced data cannot change."
+"A reference provides a way to access another value without taking responsibility for the "
+"value, and is also called \"borrowing\". Shared references are read-only, and the "
+"referenced data cannot change."
msgstr ""
-"引用提供了一种可以访问另一个值但无需对该值负责的方式,也被称为 “借用”。共享引"
-"用处于只读状态,且引用的数据无法更改。"
+"引用提供了一种可以访问另一个值但无需对该值负责的方式,也被称为 “借用”。共享引用处于只读状"
+"态,且引用的数据无法更改。"
#: src/references/shared.md
msgid ""
-"A shared reference to a type `T` has type `&T`. A reference value is made "
-"with the `&` operator. The `*` operator \"dereferences\" a reference, "
-"yielding its value."
+"A shared reference to a type `T` has type `&T`. A reference value is made with the `&` "
+"operator. The `*` operator \"dereferences\" a reference, yielding its value."
msgstr ""
-"对类型 `T` 的共享引用表示为 `&T`。可以使用 `&` 运算符创建引用值。`*` 运算符"
-"会 “解引用”某个引用,并得到该引用值。"
+"对类型 `T` 的共享引用表示为 `&T`。可以使用 `&` 运算符创建引用值。`*` 运算符会 “解引用”某"
+"个引用,并得到该引用值。"
#: src/references/shared.md
msgid "Rust will statically forbid dangling references:"
@@ -4256,69 +4027,62 @@ msgstr "Rust 会静态禁止悬垂引用:"
#: src/references/shared.md
msgid ""
-"A reference is said to \"borrow\" the value it refers to, and this is a good "
-"model for students not familiar with pointers: code can use the reference to "
-"access the value, but is still \"owned\" by the original variable. The "
-"course will get into more detail on ownership in day 3."
+"A reference is said to \"borrow\" the value it refers to, and this is a good model for "
+"students not familiar with pointers: code can use the reference to access the value, but "
+"is still \"owned\" by the original variable. The course will get into more detail on "
+"ownership in day 3."
msgstr ""
-"引用被称为 “借用”了其所引用的值,这对于不熟悉指针的学生来说是一个很好的模型:"
-"代码可以通过引用来访问值,但原始变量仍然保有对该值的 “所有权”。本课程会在第 "
-"3 天详细介绍所有权。"
+"引用被称为 “借用”了其所引用的值,这对于不熟悉指针的学生来说是一个很好的模型:代码可以通过"
+"引用来访问值,但原始变量仍然保有对该值的 “所有权”。本课程会在第 3 天详细介绍所有权。"
#: src/references/shared.md
msgid ""
-"References are implemented as pointers, and a key advantage is that they can "
-"be much smaller than the thing they point to. Students familiar with C or C+"
-"+ will recognize references as pointers. Later parts of the course will "
-"cover how Rust prevents the memory-safety bugs that come from using raw "
-"pointers."
+"References are implemented as pointers, and a key advantage is that they can be much "
+"smaller than the thing they point to. Students familiar with C or C++ will recognize "
+"references as pointers. Later parts of the course will cover how Rust prevents the "
+"memory-safety bugs that come from using raw pointers."
msgstr ""
-"引用是以指针的形式实现的,其关键优势在于它们可以比其所指的内容小得多。熟悉 C "
-"或 C++ 的学生会将引用视为指针。本课程的后续部分将介绍 Rust 如何防止因使用原始"
-"指针而导致的内存安全 bug。"
+"引用是以指针的形式实现的,其关键优势在于它们可以比其所指的内容小得多。熟悉 C 或 C++ 的学"
+"生会将引用视为指针。本课程的后续部分将介绍 Rust 如何防止因使用原始指针而导致的内存安全 "
+"bug。"
#: src/references/shared.md
-msgid ""
-"Rust does not automatically create references for you - the `&` is always "
-"required."
+msgid "Rust does not automatically create references for you - the `&` is always required."
msgstr "Rust 不会自动为您创建引用,必须始终使用 `&` 符号。"
#: src/references/shared.md
#, fuzzy
msgid ""
-"Rust will auto-dereference in some cases, in particular when invoking "
-"methods (try `r.count_ones()`). There is no need for an `->` operator like "
-"in C++."
+"Rust will auto-dereference in some cases, in particular when invoking methods (try `r."
+"count_ones()`). There is no need for an `->` operator like in C++."
msgstr ""
-"Rust 有时会进行自动解引用。比如调用方法 `ref_x.count_ones()` 时,ref_x 会被解"
-"引用。"
+"Rust 有时会进行自动解引用。比如调用方法 `ref_x.count_ones()` 时,ref_x 会被解引用。"
#: src/references/shared.md
msgid ""
-"In this example, `r` is mutable so that it can be reassigned (`r = &b`). "
-"Note that this re-binds `r`, so that it refers to something else. This is "
-"different from C++, where assignment to a reference changes the referenced "
-"value."
+"In this example, `r` is mutable so that it can be reassigned (`r = &b`). Note that this "
+"re-binds `r`, so that it refers to something else. This is different from C++, where "
+"assignment to a reference changes the referenced value."
msgstr ""
-"在本例中,`r` 是可变的,因此可以为其重新赋值 (`r = &b`)。请注意,这会重新绑"
-"定 `r`,使其引用其他内容。这与 C++ 不同,在 C++ 中为引用赋值会更改引用的值。"
+"在本例中,`r` 是可变的,因此可以为其重新赋值 (`r = &b`)。请注意,这会重新绑定 `r`,使其引"
+"用其他内容。这与 C++ 不同,在 C++ 中为引用赋值会更改引用的值。"
#: src/references/shared.md
msgid ""
-"A shared reference does not allow modifying the value it refers to, even if "
-"that value was mutable. Try `*r = 'X'`."
+"A shared reference does not allow modifying the value it refers to, even if that value "
+"was mutable. Try `*r = 'X'`."
msgstr "共享引用不允许修改其所引用的值,即使该值是可变的。请尝试 `*r = 'X'`。"
#: src/references/shared.md
msgid ""
-"Rust is tracking the lifetimes of all references to ensure they live long "
-"enough. Dangling references cannot occur in safe Rust. `x_axis` would return "
-"a reference to `point`, but `point` will be deallocated when the function "
-"returns, so this will not compile."
+"Rust is tracking the lifetimes of all references to ensure they live long enough. "
+"Dangling references cannot occur in safe Rust. `x_axis` would return a reference to "
+"`point`, but `point` will be deallocated when the function returns, so this will not "
+"compile."
msgstr ""
-"Rust 会跟踪所有引用的生命周期,以确保它们存在足够长的时间。在安全的 Rust 中不"
-"会出现悬空引用。`x_axis` 会返回对 `point` 的引用,但 `point` 会在该函数返回时"
-"取消分配,因此不会进行编译。"
+"Rust 会跟踪所有引用的生命周期,以确保它们存在足够长的时间。在安全的 Rust 中不会出现悬空引"
+"用。`x_axis` 会返回对 `point` 的引用,但 `point` 会在该函数返回时取消分配,因此不会进行编"
+"译。"
#: src/references/shared.md
msgid "We will talk more about borrowing when we get to ownership."
@@ -4326,68 +4090,64 @@ msgstr "我们会在讲到所有权(ownership)时详细讨论借用(borrow
#: src/references/exclusive.md
msgid ""
-"Exclusive references, also known as mutable references, allow changing the "
-"value they refer to. They have type `&mut T`."
-msgstr ""
-"独占引用(也称为可变引用)允许更改其所引用的值。它们的类型为 `&mut T`。"
+"Exclusive references, also known as mutable references, allow changing the value they "
+"refer to. They have type `&mut T`."
+msgstr "独占引用(也称为可变引用)允许更改其所引用的值。它们的类型为 `&mut T`。"
#: src/references/exclusive.md
msgid ""
-"\"Exclusive\" means that only this reference can be used to access the "
-"value. No other references (shared or exclusive) can exist at the same time, "
-"and the referenced value cannot be accessed while the exclusive reference "
-"exists. Try making an `&point.0` or changing `point.0` while `x_coord` is "
-"alive."
+"\"Exclusive\" means that only this reference can be used to access the value. No other "
+"references (shared or exclusive) can exist at the same time, and the referenced value "
+"cannot be accessed while the exclusive reference exists. Try making an `&point.0` or "
+"changing `point.0` while `x_coord` is alive."
msgstr ""
-"“独占模式”表示只有此引用可用于访问该值。在独占引用存在期间,不允许同时存在其"
-"他引用(无论是共享引用还是独占引用),并且无法访问引用的值。请尝试在 "
-"`x_coord` 处于活动状态时创建 `&point.0` 或更改 `point.0`。"
+"“独占模式”表示只有此引用可用于访问该值。在独占引用存在期间,不允许同时存在其他引用(无论"
+"是共享引用还是独占引用),并且无法访问引用的值。请尝试在 `x_coord` 处于活动状态时创建 "
+"`&point.0` 或更改 `point.0`。"
#: src/references/exclusive.md
#, fuzzy
msgid ""
-"Be sure to note the difference between `let mut x_coord: &i32` and `let "
-"x_coord: &mut i32`. The first one represents a shared reference which can be "
-"bound to different values, while the second represents an exclusive "
-"reference to a mutable value."
+"Be sure to note the difference between `let mut x_coord: &i32` and `let x_coord: &mut "
+"i32`. The first one represents a shared reference which can be bound to different "
+"values, while the second represents an exclusive reference to a mutable value."
msgstr ""
-"注意 `let mut ref_x: &i32` 与 `let ref_x: &mut i32` 之间的区别。第一条语句声"
-"明了一个可变引用,所以我们可以修改这个引用所绑定的值;第二条语句声明了一个指"
-"向可变变量的引用。"
+"注意 `let mut ref_x: &i32` 与 `let ref_x: &mut i32` 之间的区别。第一条语句声明了一个可变"
+"引用,所以我们可以修改这个引用所绑定的值;第二条语句声明了一个指向可变变量的引用。"
#: src/references/exercise.md
msgid ""
-"We will create a few utility functions for 3-dimensional geometry, "
-"representing a point as `[f64;3]`. It is up to you to determine the function "
-"signatures."
+"We will create a few utility functions for 3-dimensional geometry, representing a point "
+"as `[f64;3]`. It is up to you to determine the function signatures."
+msgstr "我们将为三维几何图形创建几个实用函数,将点表示为 `[f64;3]`。函数签名由您自行确定。"
+
+#: src/references/exercise.md
+#, fuzzy
+msgid "// Calculate the magnitude of a vector by summing the squares of its coordinates"
+msgstr "/// Calculate the magnitude of the given vector.\n"
+
+#: src/references/exercise.md
+msgid "// and taking the square root. Use the `sqrt()` method to calculate the square"
msgstr ""
-"我们将为三维几何图形创建几个实用函数,将点表示为 `[f64;3]`。函数签名由您自行"
-"确定。"
#: src/references/exercise.md
-msgid ""
-"// Calculate the magnitude of a vector by summing the squares of its "
-"coordinates\n"
-"// and taking the square root. Use the `sqrt()` method to calculate the "
-"square\n"
-"// root, like `v.sqrt()`.\n"
+msgid "// root, like `v.sqrt()`."
msgstr ""
-"// Calculate the magnitude of a vector by summing the squares of its "
-"coordinates\n"
-"// and taking the square root. Use the `sqrt()` method to calculate the "
-"square\n"
-"// root, like `v.sqrt()`.\n"
#: src/references/exercise.md
-msgid ""
-"// Normalize a vector by calculating its magnitude and dividing all of its\n"
-"// coordinates by that magnitude.\n"
+#, fuzzy
+msgid "// Normalize a vector by calculating its magnitude and dividing all of its"
msgstr ""
"// Normalize a vector by calculating its magnitude and dividing all of its\n"
"// coordinates by that magnitude.\n"
#: src/references/exercise.md
-msgid "// Use the following `main` to test your work.\n"
+msgid "// coordinates by that magnitude."
+msgstr ""
+
+#: src/references/exercise.md
+#, fuzzy
+msgid "// Use the following `main` to test your work."
msgstr "// Use the following `main` to test your work.\n"
#: src/references/exercise.md src/references/solution.md
@@ -4407,12 +4167,8 @@ msgid "/// Calculate the magnitude of the given vector.\n"
msgstr "/// Calculate the magnitude of the given vector.\n"
#: src/references/solution.md
-msgid ""
-"/// Change the magnitude of the vector to 1.0 without changing its "
-"direction.\n"
-msgstr ""
-"/// Change the magnitude of the vector to 1.0 without changing its "
-"direction.\n"
+msgid "/// Change the magnitude of the vector to 1.0 without changing its direction.\n"
+msgstr "/// Change the magnitude of the vector to 1.0 without changing its direction.\n"
#: src/user-defined-types.md
msgid "[Named Structs](./user-defined-types/named-structs.md) (10 minutes)"
@@ -4427,8 +4183,7 @@ msgid "[Enums](./user-defined-types/enums.md) (5 minutes)"
msgstr ""
#: src/user-defined-types.md
-msgid ""
-"[Static and Const](./user-defined-types/static-and-const.md) (5 minutes)"
+msgid "[Static and Const](./user-defined-types/static-and-const.md) (5 minutes)"
msgstr ""
#: src/user-defined-types.md
@@ -4436,8 +4191,7 @@ msgid "[Type Aliases](./user-defined-types/aliases.md) (2 minutes)"
msgstr ""
#: src/user-defined-types.md
-msgid ""
-"[Exercise: Elevator Events](./user-defined-types/exercise.md) (15 minutes)"
+msgid "[Exercise: Elevator Events](./user-defined-types/exercise.md) (15 minutes)"
msgstr ""
#: src/user-defined-types/named-structs.md
@@ -4448,8 +4202,7 @@ msgstr "与 C 和 C++ 一样,Rust 支持自定义结构体:"
msgid "\"{} is {} years old\""
msgstr "\"{} is {} years old\""
-#: src/user-defined-types/named-structs.md
-#: src/android/interoperability/with-c/bindgen.md
+#: src/user-defined-types/named-structs.md src/android/interoperability/with-c/bindgen.md
msgid "\"Peter\""
msgstr "\"Peter\""
@@ -4475,43 +4228,38 @@ msgstr "与使用 C++ 不同的是,结构体之间没有继承关系。"
#: src/user-defined-types/named-structs.md
#, fuzzy
-msgid ""
-"This may be a good time to let people know there are different types of "
-"structs."
+msgid "This may be a good time to let people know there are different types of structs."
msgstr "这时可能很适合告诉学员存在不同类型的结构体。"
#: src/user-defined-types/named-structs.md
#, fuzzy
msgid ""
-"Zero-sized structs (e.g. `struct Foo;`) might be used when implementing a "
-"trait on some type but don’t have any data that you want to store in the "
-"value itself."
+"Zero-sized structs (e.g. `struct Foo;`) might be used when implementing a trait on some "
+"type but don’t have any data that you want to store in the value itself."
msgstr ""
-"针对某类型实现 trait 时,可能会使用大小为零的结构体 `e.g., struct Foo;`,但其"
-"中没有任何您要储存在值本身中的数据。"
+"针对某类型实现 trait 时,可能会使用大小为零的结构体 `e.g., struct Foo;`,但其中没有任何您"
+"要储存在值本身中的数据。"
#: src/user-defined-types/named-structs.md
msgid ""
-"The next slide will introduce Tuple structs, used when the field names are "
-"not important."
+"The next slide will introduce Tuple structs, used when the field names are not important."
msgstr "下一张幻灯片将介绍元组结构体,当字段名称不重要时使用。"
#: src/user-defined-types/named-structs.md
#, fuzzy
msgid ""
-"If you already have variables with the right names, then you can create the "
-"struct using a shorthand."
+"If you already have variables with the right names, then you can create the struct using "
+"a shorthand."
msgstr "如果您已有名称正确的变量,则可以使用简写形式创建结构体:"
#: src/user-defined-types/named-structs.md
#, fuzzy
msgid ""
-"The syntax `..avery` allows us to copy the majority of the fields from the "
-"old struct without having to explicitly type it all out. It must always be "
-"the last element."
+"The syntax `..avery` allows us to copy the majority of the fields from the old struct "
+"without having to explicitly type it all out. It must always be the last element."
msgstr ""
-"通过语法“..peter”,我们可以从旧结构体复制大部分字段,而无需明确地输入所有字"
-"段。它必须始终是最后一个元素。"
+"通过语法“..peter”,我们可以从旧结构体复制大部分字段,而无需明确地输入所有字段。它必须始终"
+"是最后一个元素。"
#: src/user-defined-types/tuple-structs.md
msgid "If the field names are unimportant, you can use a tuple struct:"
@@ -4529,20 +4277,17 @@ msgstr "这通常用于单字段封装容器(称为 newtype):"
msgid "\"Ask a rocket scientist at NASA\""
msgstr "\"Ask a rocket scientist at NASA\""
-#: src/user-defined-types/tuple-structs.md
-#: src/android/interoperability/cpp/cpp-bridge.md
-#: src/bare-metal/microcontrollers/type-state.md
+#: src/user-defined-types/tuple-structs.md src/android/interoperability/cpp/cpp-bridge.md
#: src/async/pitfalls/cancellation.md
-msgid "// ...\n"
+#, fuzzy
+msgid "// ..."
msgstr "// ...\n"
#: src/user-defined-types/tuple-structs.md
msgid ""
-"Newtypes are a great way to encode additional information about the value in "
-"a primitive type, for example:"
-msgstr ""
-"如需对基元类型中的值的额外信息进行编码,使用 newtype 是一种非常好的方式,例"
-"如:"
+"Newtypes are a great way to encode additional information about the value in a primitive "
+"type, for example:"
+msgstr "如需对基元类型中的值的额外信息进行编码,使用 newtype 是一种非常好的方式,例如:"
#: src/user-defined-types/tuple-structs.md
msgid "The number is measured in some units: `Newtons` in the example above."
@@ -4551,23 +4296,22 @@ msgstr "数字会以某些单位来衡量:上方示例中为 `Newtons`。"
#: src/user-defined-types/tuple-structs.md
#, fuzzy
msgid ""
-"The value passed some validation when it was created, so you no longer have "
-"to validate it again at every use: `PhoneNumber(String)` or `OddNumber(u32)`."
+"The value passed some validation when it was created, so you no longer have to validate "
+"it again at every use: `PhoneNumber(String)` or `OddNumber(u32)`."
msgstr ""
-"值在创建时已通过一些验证,因此您不再需要在每次使用时都再次验证它:"
-"`PhoneNumber(String)` 或 `OddNumber(u32)`。"
+"值在创建时已通过一些验证,因此您不再需要在每次使用时都再次验证它:`PhoneNumber(String)` "
+"或 `OddNumber(u32)`。"
#: src/user-defined-types/tuple-structs.md
msgid ""
-"Demonstrate how to add a `f64` value to a `Newtons` type by accessing the "
-"single field in the newtype."
-msgstr ""
-"展示如何通过访问 newtype 中的单个字段,将 `f64` 值添加到 `Newtons` 类型。"
+"Demonstrate how to add a `f64` value to a `Newtons` type by accessing the single field "
+"in the newtype."
+msgstr "展示如何通过访问 newtype 中的单个字段,将 `f64` 值添加到 `Newtons` 类型。"
#: src/user-defined-types/tuple-structs.md
msgid ""
-"Rust generally doesn’t like inexplicit things, like automatic unwrapping or "
-"for instance using booleans as integers."
+"Rust generally doesn’t like inexplicit things, like automatic unwrapping or for instance "
+"using booleans as integers."
msgstr "Rust 通常不喜欢不明确的内容,例如自动解封或将布尔值用作整数。"
#: src/user-defined-types/tuple-structs.md
@@ -4576,29 +4320,30 @@ msgstr "运算符过载在第 3 天(泛型)讨论。"
#: src/user-defined-types/tuple-structs.md
msgid ""
-"The example is a subtle reference to the [Mars Climate Orbiter](https://en."
-"wikipedia.org/wiki/Mars_Climate_Orbiter) failure."
+"The example is a subtle reference to the [Mars Climate Orbiter](https://en.wikipedia.org/"
+"wiki/Mars_Climate_Orbiter) failure."
msgstr ""
"此示例巧妙地引用了[火星气候探测者号](https://zh.wikipedia.org/wiki/"
-"%E7%81%AB%E6%98%9F%E6%B0%A3%E5%80%99%E6%8E%A2%E6%B8%AC%E8%80%85%E8%99%9F) 的"
-"失败事故。"
+"%E7%81%AB%E6%98%9F%E6%B0%A3%E5%80%99%E6%8E%A2%E6%B8%AC%E8%80%85%E8%99%9F) 的失败事故。"
#: src/user-defined-types/enums.md
msgid ""
-"The `enum` keyword allows the creation of a type which has a few different "
-"variants:"
+"The `enum` keyword allows the creation of a type which has a few different variants:"
msgstr "`enum` 关键字允许创建具有几个 不同变体的类型:"
#: src/user-defined-types/enums.md
-msgid "// Simple variant\n"
+#, fuzzy
+msgid "// Simple variant"
msgstr "// Simple variant\n"
#: src/user-defined-types/enums.md
-msgid "// Tuple variant\n"
+#, fuzzy
+msgid "// Tuple variant"
msgstr "// Tuple variant\n"
#: src/user-defined-types/enums.md
-msgid "// Struct variant\n"
+#, fuzzy
+msgid "// Struct variant"
msgstr "// Struct variant\n"
#: src/user-defined-types/enums.md
@@ -4612,19 +4357,18 @@ msgstr "枚举允许你从一种类型下收集一组值"
#: src/user-defined-types/enums.md
msgid ""
-"`Direction` is a type with variants. There are two values of `Direction`: "
-"`Direction::Left` and `Direction::Right`."
+"`Direction` is a type with variants. There are two values of `Direction`: `Direction::"
+"Left` and `Direction::Right`."
msgstr ""
#: src/user-defined-types/enums.md
#, fuzzy
msgid ""
-"`PlayerMove` is a type with three variants. In addition to the payloads, "
-"Rust will store a discriminant so that it knows at runtime which variant is "
-"in a `PlayerMove` value."
+"`PlayerMove` is a type with three variants. In addition to the payloads, Rust will store "
+"a discriminant so that it knows at runtime which variant is in a `PlayerMove` value."
msgstr ""
-"PlayerMove 会显示三种类型的变体。Rust 还会存储判别标识,以便在运行时确定值中"
-"包含哪个变体。"
+"PlayerMove 会显示三种类型的变体。Rust 还会存储判别标识,以便在运行时确定值中包含哪个变"
+"体。"
#: src/user-defined-types/enums.md
#, fuzzy
@@ -4634,21 +4378,20 @@ msgstr "这可能是比较结构体和枚举的好时机:"
#: src/user-defined-types/enums.md
#, fuzzy
msgid ""
-"In both, you can have a simple version without fields (unit struct) or one "
-"with different types of fields (variant payloads)."
+"In both, you can have a simple version without fields (unit struct) or one with "
+"different types of fields (variant payloads)."
msgstr ""
-"在这两者中,你可以获得一个不含字段的简单版本(单位结构体),或一个包含不同类"
-"型字段的版本(变体载荷)。"
+"在这两者中,你可以获得一个不含字段的简单版本(单位结构体),或一个包含不同类型字段的版本"
+"(变体载荷)。"
#: src/user-defined-types/enums.md
#, fuzzy
msgid ""
-"You could even implement the different variants of an enum with separate "
-"structs but then they wouldn’t be the same type as they would if they were "
-"all defined in an enum."
+"You could even implement the different variants of an enum with separate structs but "
+"then they wouldn’t be the same type as they would if they were all defined in an enum."
msgstr ""
-"你甚至可以使用单独的结构体实现枚举的不同变体,但这样一来,如果它们都已在枚举"
-"中定义,类型与之前也不一样。"
+"你甚至可以使用单独的结构体实现枚举的不同变体,但这样一来,如果它们都已在枚举中定义,类型"
+"与之前也不一样。"
#: src/user-defined-types/enums.md
msgid "Rust uses minimal space to store the discriminant."
@@ -4660,72 +4403,59 @@ msgstr "如有必要,它会存储所需最小大小的整数"
#: src/user-defined-types/enums.md
msgid ""
-"If the allowed variant values do not cover all bit patterns, it will use "
-"invalid bit patterns to encode the discriminant (the \"niche "
-"optimization\"). For example, `Option<&u8>` stores either a pointer to an "
-"integer or `NULL` for the `None` variant."
+"If the allowed variant values do not cover all bit patterns, it will use invalid bit "
+"patterns to encode the discriminant (the \"niche optimization\"). For example, "
+"`Option<&u8>` stores either a pointer to an integer or `NULL` for the `None` variant."
msgstr ""
-"如果允许的变体值未涵盖所有位模式,则它将使用无效的位模式对判别标识进行编码"
-"(“小众优化”)。例如,`Option<&u8>` 存储的要么是指向整数的指针,要么是 "
-"`None` 变体的 `NULL` 值。"
+"如果允许的变体值未涵盖所有位模式,则它将使用无效的位模式对判别标识进行编码(“小众优"
+"化”)。例如,`Option<&u8>` 存储的要么是指向整数的指针,要么是 `None` 变体的 `NULL` 值。"
#: src/user-defined-types/enums.md
#, fuzzy
-msgid ""
-"You can control the discriminant if needed (e.g., for compatibility with C):"
+msgid "You can control the discriminant if needed (e.g., for compatibility with C):"
msgstr "你可以根据需要控制判别(例如,与 C 的兼容性):"
#: src/user-defined-types/enums.md
#, fuzzy
-msgid ""
-"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 "
-"bytes."
-msgstr ""
-"如果不使用 `repr`,判别类型会占用 2 个字节,因为 10001 是一个 2 个字节的数"
-"值。"
+msgid "Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 bytes."
+msgstr "如果不使用 `repr`,判别类型会占用 2 个字节,因为 10001 是一个 2 个字节的数值。"
#: src/user-defined-types/enums.md src/user-defined-types/static-and-const.md
-#: src/memory-management/review.md src/memory-management/move.md
-#: src/smart-pointers/box.md src/borrowing/shared.md
+#: src/memory-management/review.md src/memory-management/move.md src/smart-pointers/box.md
+#: src/borrowing/shared.md
msgid "More to Explore"
msgstr "探索更多"
#: src/user-defined-types/enums.md
-msgid ""
-"Rust has several optimizations it can employ to make enums take up less "
-"space."
+msgid "Rust has several optimizations it can employ to make enums take up less space."
msgstr "Rust 具有多种优化措施,可以减少枚举占用的空间。"
#: src/user-defined-types/enums.md
#, fuzzy
msgid ""
-"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/"
-"option/#representation), Rust guarantees that `size_of::()` equals "
-"`size_of::>()`."
+"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/option/"
+"#representation), Rust guarantees that `size_of::()` equals `size_of::>()`."
msgstr ""
-"Null 指针优化:对于[某些 类型](https://doc.rust-lang.org/std/option/"
-"#representation),Rust 保证 `size_of::()` 等效于 `size_of::"
-">()`。"
+"Null 指针优化:对于[某些 类型](https://doc.rust-lang.org/std/option/#representation),"
+"Rust 保证 `size_of::()` 等效于 `size_of::>()`。"
#: src/user-defined-types/enums.md
#, fuzzy
msgid ""
-"Example code if you want to show how the bitwise representation _may_ look "
-"like in practice. It's important to note that the compiler provides no "
-"guarantees regarding this representation, therefore this is totally unsafe."
+"Example code if you want to show how the bitwise representation _may_ look like in "
+"practice. It's important to note that the compiler provides no guarantees regarding this "
+"representation, therefore this is totally unsafe."
msgstr ""
-"如果你想展示位表示方式在实践中“可能”会是什么样子,请参考示例代码。 请务必注"
-"意,编译器对此表示法不提供任何保证,因此这是完全不安全的。"
+"如果你想展示位表示方式在实践中“可能”会是什么样子,请参考示例代码。 请务必注意,编译器对此"
+"表示法不提供任何保证,因此这是完全不安全的。"
#: src/user-defined-types/static-and-const.md
#, fuzzy
msgid ""
-"Static and constant variables are two different ways to create globally-"
-"scoped values that cannot be moved or reallocated during the execution of "
-"the program."
+"Static and constant variables are two different ways to create globally-scoped values "
+"that cannot be moved or reallocated during the execution of the program."
msgstr ""
-"静态变量和常量是创建全局范围值的两种不同方法,这类值在程序执行期间无法移动或"
-"重新分配。"
+"静态变量和常量是创建全局范围值的两种不同方法,这类值在程序执行期间无法移动或重新分配。"
#: src/user-defined-types/static-and-const.md
msgid "`const`"
@@ -4733,25 +4463,24 @@ msgstr "`const`"
#: src/user-defined-types/static-and-const.md
msgid ""
-"Constant variables are evaluated at compile time and their values are "
-"inlined wherever they are used:"
+"Constant variables are evaluated at compile time and their values are inlined wherever "
+"they are used:"
msgstr "系统会在编译时对常量变量进行求值;无论在何处使用,其值都会被内嵌:"
#: src/user-defined-types/static-and-const.md
msgid ""
-"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
-"vs-static.html) these are inlined upon use."
+"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static."
+"html) these are inlined upon use."
msgstr ""
-"根据 [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static."
-"html) 这些变量在使用时是内联 (inlined) 的。"
+"根据 [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static.html) 这些变量"
+"在使用时是内联 (inlined) 的。"
#: src/user-defined-types/static-and-const.md
msgid ""
-"Only functions marked `const` can be called at compile time to generate "
-"`const` values. `const` functions can however be called at runtime."
+"Only functions marked `const` can be called at compile time to generate `const` values. "
+"`const` functions can however be called at runtime."
msgstr ""
-"在编译时只能调用标记为“const”的函数以生成“const”值。不过,可在运行时调"
-"用“const”函数。"
+"在编译时只能调用标记为“const”的函数以生成“const”值。不过,可在运行时调用“const”函数。"
#: src/user-defined-types/static-and-const.md
msgid "`static`"
@@ -4759,8 +4488,8 @@ msgstr "`static`"
#: src/user-defined-types/static-and-const.md
msgid ""
-"Static variables will live during the whole execution of the program, and "
-"therefore will not move:"
+"Static variables will live during the whole execution of the program, and therefore will "
+"not move:"
msgstr "静态变量在程序的整个执行过程中始终有效,因此不会移动:"
#: src/user-defined-types/static-and-const.md
@@ -4775,16 +4504,15 @@ msgstr "\"{BANNER}\""
#: src/user-defined-types/static-and-const.md
#, fuzzy
msgid ""
-"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
-"vs-static.html), these are not inlined upon use and have an actual "
-"associated memory location. This is useful for unsafe and embedded code, and "
-"the variable lives through the entirety of the program execution. When a "
-"globally-scoped value does not have a reason to need object identity, "
-"`const` is generally preferred."
+"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static."
+"html), these are not inlined upon use and have an actual associated memory location. "
+"This is useful for unsafe and embedded code, and the variable lives through the entirety "
+"of the program execution. When a globally-scoped value does not have a reason to need "
+"object identity, `const` is generally preferred."
msgstr ""
-"正如 [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static."
-"html) 中所述,这些变量在使用时并不是内联的,而且还具有实际相关联的内存位置。"
-"这对于不安全的嵌入式代码是有用的,并且这些变量存在于整个程序的执行过程之中。"
+"正如 [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static.html) 中所述,"
+"这些变量在使用时并不是内联的,而且还具有实际相关联的内存位置。这对于不安全的嵌入式代码是"
+"有用的,并且这些变量存在于整个程序的执行过程之中。"
#: src/user-defined-types/static-and-const.md
msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`."
@@ -4792,15 +4520,15 @@ msgstr "值得一提的是,`const` 在语义上与C++的 `constexpr` 类似。
#: src/user-defined-types/static-and-const.md
msgid ""
-"`static`, on the other hand, is much more similar to a `const` or mutable "
-"global variable in C++."
+"`static`, on the other hand, is much more similar to a `const` or mutable global "
+"variable in C++."
msgstr "另一方面,`static` 远远更类似于C++中的 `const` 或可改变的全局变量。"
#: src/user-defined-types/static-and-const.md
#, fuzzy
msgid ""
-"`static` provides object identity: an address in memory and state as "
-"required by types with interior mutability such as `Mutex`."
+"`static` provides object identity: an address in memory and state as required by types "
+"with interior mutability such as `Mutex`."
msgstr ""
"“static”提供对象标识:内存中的一个地址及具有内部可变性的类型(如“Mutex\n"
"\n"
@@ -4808,18 +4536,17 @@ msgstr ""
#: src/user-defined-types/static-and-const.md
msgid ""
-"It isn't super common that one would need a runtime evaluated constant, but "
-"it is helpful and safer than using a static."
+"It isn't super common that one would need a runtime evaluated constant, but it is "
+"helpful and safer than using a static."
msgstr ""
-"虽然需要使用在运行中求值的常量的情况并不是很常见,但是它是有帮助的,而且比使"
-"用静态变量更安全。"
+"虽然需要使用在运行中求值的常量的情况并不是很常见,但是它是有帮助的,而且比使用静态变量更"
+"安全。"
#: src/user-defined-types/static-and-const.md
msgid "Properties table:"
msgstr "属性表:"
-#: src/user-defined-types/static-and-const.md
-#: src/chromium/adding-third-party-crates.md
+#: src/user-defined-types/static-and-const.md src/chromium/adding-third-party-crates.md
msgid "Property"
msgstr "属性"
@@ -4879,15 +4606,14 @@ msgstr "内嵌在使用它的任何位置"
#: src/user-defined-types/static-and-const.md
#, fuzzy
msgid ""
-"Because `static` variables are accessible from any thread, they must be "
-"`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-"
-"lang.org/std/sync/struct.Mutex.html), atomic or similar."
+"Because `static` variables are accessible from any thread, they must be `Sync`. Interior "
+"mutability is possible through a [`Mutex`](https://doc.rust-lang.org/std/sync/struct."
+"Mutex.html), atomic or similar."
msgstr ""
-"由于“static”变量可从任何线程访问,因此它们必须是“Sync”。内部可变性可通过[“互"
-"斥量”](https://doc.rust-lang.org/std/sync/struct.Mutex.html)、原子性或类似对"
-"象实现。也可能具有可变静态项,但它们需要手动同步,因此对它们的任何访问都需"
-"要“unsafe”代码。我们将在“不安全 Rust”章节中探讨[可变静态项](../unsafe/"
-"mutable-static-variables.md)。"
+"由于“static”变量可从任何线程访问,因此它们必须是“Sync”。内部可变性可通过[“互斥量”]"
+"(https://doc.rust-lang.org/std/sync/struct.Mutex.html)、原子性或类似对象实现。也可能具有"
+"可变静态项,但它们需要手动同步,因此对它们的任何访问都需要“unsafe”代码。我们将在“不安全 "
+"Rust”章节中探讨[可变静态项](../unsafe/mutable-static-variables.md)。"
#: src/user-defined-types/static-and-const.md
#, fuzzy
@@ -4896,12 +4622,12 @@ msgstr "可以使用宏“std::thread_local”创建“thread_local”数据。"
#: src/user-defined-types/aliases.md
msgid ""
-"A type alias creates a name for another type. The two types can be used "
-"interchangeably."
+"A type alias creates a name for another type. The two types can be used interchangeably."
msgstr "类型别名为另一种类型创建名称。这两种类型可以互换使用。"
#: src/user-defined-types/aliases.md
-msgid "// Aliases are more useful with long, complex types:\n"
+#, fuzzy
+msgid "// Aliases are more useful with long, complex types:"
msgstr "// Aliases are more useful with long, complex types:\n"
#: src/user-defined-types/aliases.md
@@ -4910,32 +4636,28 @@ msgstr "C 语言程序员会认为这类似于 `typedef`。"
#: src/user-defined-types/exercise.md
msgid ""
-"We will create a data structure to represent an event in an elevator control "
-"system. It is up to you to define the types and functions to construct "
-"various events. Use `#[derive(Debug)]` to allow the types to be formatted "
-"with `{:?}`."
+"We will create a data structure to represent an event in an elevator control system. It "
+"is up to you to define the types and functions to construct various events. Use "
+"`#[derive(Debug)]` to allow the types to be formatted with `{:?}`."
msgstr ""
-"我们将创建一个数据结构来表示电梯控制系统中的事件。您可以自行定义用于构造各种"
-"事件的类型和函数。使用 `#[derive(Debug)]` 以允许通过 `{:?}` 设置类型格式。"
+"我们将创建一个数据结构来表示电梯控制系统中的事件。您可以自行定义用于构造各种事件的类型和"
+"函数。使用 `#[derive(Debug)]` 以允许通过 `{:?}` 设置类型格式。"
#: src/user-defined-types/exercise.md
#, fuzzy
msgid ""
-"This exercise only requires creating and populating data structures so that "
-"`main` runs without errors. The next part of the course will cover getting "
-"data out of these structures."
-msgstr ""
-"此次练习只需创建数据结构。本课程的下一部分将介绍如何从这些结构中获取数据。"
+"This exercise only requires creating and populating data structures so that `main` runs "
+"without errors. The next part of the course will cover getting data out of these "
+"structures."
+msgstr "此次练习只需创建数据结构。本课程的下一部分将介绍如何从这些结构中获取数据。"
#: src/user-defined-types/exercise.md src/user-defined-types/solution.md
-msgid ""
-"/// An event in the elevator system that the controller must react to.\n"
-msgstr ""
-"/// An event in the elevator system that the controller must react to.\n"
+msgid "/// An event in the elevator system that the controller must react to.\n"
+msgstr "/// An event in the elevator system that the controller must react to.\n"
#: src/user-defined-types/exercise.md
#, fuzzy
-msgid "// TODO: add required variants\n"
+msgid "// TODO: add required variants"
msgstr "// Tuple variant\n"
#: src/user-defined-types/exercise.md src/user-defined-types/solution.md
@@ -4955,12 +4677,8 @@ msgid "/// The car doors have closed.\n"
msgstr "/// The car doors have closed.\n"
#: src/user-defined-types/exercise.md src/user-defined-types/solution.md
-msgid ""
-"/// A directional button was pressed in an elevator lobby on the given "
-"floor.\n"
-msgstr ""
-"/// A directional button was pressed in an elevator lobby on the given "
-"floor.\n"
+msgid "/// A directional button was pressed in an elevator lobby on the given floor.\n"
+msgstr "/// A directional button was pressed in an elevator lobby on the given floor.\n"
#: src/user-defined-types/exercise.md src/user-defined-types/solution.md
msgid "/// A floor button was pressed in the elevator car.\n"
@@ -5029,8 +4747,7 @@ msgstr "欢迎来到第二天"
#: src/welcome-day-2.md
#, fuzzy
msgid ""
-"Now that we have seen a fair amount of Rust, today will focus on Rust's type "
-"system:"
+"Now that we have seen a fair amount of Rust, today will focus on Rust's type system:"
msgstr "现在我们已经了解了相当多的Rust,接下来我们将学习:"
#: src/welcome-day-2.md
@@ -5051,8 +4768,7 @@ msgid "Generics: parameterizing types on other types."
msgstr "泛型:对其他类型进行类型参数化。"
#: src/welcome-day-2.md
-msgid ""
-"Standard library types and traits: a tour of Rust's rich standard library."
+msgid "Standard library types and traits: a tour of Rust's rich standard library."
msgstr "标准库类型和特征:探索 Rust 丰富的标准库。"
#: src/welcome-day-2.md
@@ -5062,15 +4778,14 @@ msgstr ""
#: src/welcome-day-2.md
#, fuzzy
msgid "[Pattern Matching](./pattern-matching.md) (50 minutes)"
-msgstr ""
-"如需详细了解 Rust 中 的模式,请参阅[模式匹配](../pattern-matching.md)。"
+msgstr "如需详细了解 Rust 中 的模式,请参阅[模式匹配](../pattern-matching.md)。"
#: src/welcome-day-2.md
-msgid "[Methods and Traits](./methods-and-traits.md) (45 minutes)"
+msgid "[Methods and Traits](./methods-and-traits.md) (40 minutes)"
msgstr ""
#: src/welcome-day-2.md
-msgid "[Generics](./generics.md) (45 minutes)"
+msgid "[Generics](./generics.md) (40 minutes)"
msgstr ""
#: src/pattern-matching.md
@@ -5082,9 +4797,7 @@ msgid "[Let Control Flow](./pattern-matching/let-control-flow.md) (10 minutes)"
msgstr ""
#: src/pattern-matching.md
-msgid ""
-"[Exercise: Expression Evaluation](./pattern-matching/exercise.md) (30 "
-"minutes)"
+msgid "[Exercise: Expression Evaluation](./pattern-matching/exercise.md) (30 minutes)"
msgstr ""
#: src/pattern-matching/destructuring.md
@@ -5109,12 +4822,11 @@ msgstr "\"y = {y}, other fields were ignored\""
#: src/pattern-matching/destructuring.md
msgid ""
-"Patterns can also be used to bind variables to parts of your values. This is "
-"how you inspect the structure of your types. Let us start with a simple "
-"`enum` type:"
+"Patterns can also be used to bind variables to parts of your values. This is how you "
+"inspect the structure of your types. Let us start with a simple `enum` type:"
msgstr ""
-"模式还可用于将变量绑定到值的某些部分。这是您检查类型结构的方式。我们先从简单"
-"的“enum”类型开始:"
+"模式还可用于将变量绑定到值的某些部分。这是您检查类型结构的方式。我们先从简单的“enum”类型"
+"开始:"
#: src/pattern-matching/destructuring.md
msgid "\"cannot divide {n} into two equal parts\""
@@ -5130,12 +4842,12 @@ msgstr "\"sorry, an error happened: {msg}\""
#: src/pattern-matching/destructuring.md
msgid ""
-"Here we have used the arms to _destructure_ the `Result` value. In the first "
-"arm, `half` is bound to the value inside the `Ok` variant. In the second "
-"arm, `msg` is bound to the error message."
+"Here we have used the arms to _destructure_ the `Result` value. In the first arm, `half` "
+"is bound to the value inside the `Ok` variant. In the second arm, `msg` is bound to the "
+"error message."
msgstr ""
-"在这里,我们使用了分支来解构“Result”值。在第一个分支中,“half”被绑定到“Ok”变"
-"体中的值。在第二个分支中,“msg”被绑定到错误消息。"
+"在这里,我们使用了分支来解构“Result”值。在第一个分支中,“half”被绑定到“Ok”变体中的值。在"
+"第二个分支中,“msg”被绑定到错误消息。"
#: src/pattern-matching/destructuring.md
msgid "Change the literal values in `foo` to match with the other patterns."
@@ -5147,60 +4859,56 @@ msgstr "向“Foo”添加一个新字段,并根据需要更改模式。"
#: src/pattern-matching/destructuring.md
msgid ""
-"The distinction between a capture and a constant expression can be hard to "
-"spot. Try changing the `2` in the second arm to a variable, and see that it "
-"subtly doesn't work. Change it to a `const` and see it working again."
+"The distinction between a capture and a constant expression can be hard to spot. Try "
+"changing the `2` in the second arm to a variable, and see that it subtly doesn't work. "
+"Change it to a `const` and see it working again."
msgstr ""
-"捕获和常量表达式之间的区别可能很难发现。尝试将第二个分支中的“2”更改为一个变"
-"量,可以看到它几乎无法运作了。将它更改为“const”,可以看到它又正常运作了。"
+"捕获和常量表达式之间的区别可能很难发现。尝试将第二个分支中的“2”更改为一个变量,可以看到它"
+"几乎无法运作了。将它更改为“const”,可以看到它又正常运作了。"
#: src/pattern-matching/destructuring.md
msgid ""
-"The `if`/`else` expression is returning an enum that is later unpacked with "
-"a `match`."
+"The `if`/`else` expression is returning an enum that is later unpacked with a `match`."
msgstr "“if”/“else”表达式将返回一个枚举,该枚举之后会使用“match”进行解封装。"
#: src/pattern-matching/destructuring.md
msgid ""
-"You can try adding a third variant to the enum definition and displaying the "
-"errors when running the code. Point out the places where your code is now "
-"inexhaustive and how the compiler tries to give you hints."
+"You can try adding a third variant to the enum definition and displaying the errors when "
+"running the code. Point out the places where your code is now inexhaustive and how the "
+"compiler tries to give you hints."
msgstr ""
-"您可以尝试在枚举定义中添加第三个变体,并在运行代码时显示错误。指出代码现在有"
-"哪些地方还不详尽,并说明编译器会如何尝试给予提示。"
+"您可以尝试在枚举定义中添加第三个变体,并在运行代码时显示错误。指出代码现在有哪些地方还不"
+"详尽,并说明编译器会如何尝试给予提示。"
#: src/pattern-matching/destructuring.md
#, fuzzy
-msgid ""
-"The values in the enum variants can only be accessed after being pattern "
-"matched."
+msgid "The values in the enum variants can only be accessed after being pattern matched."
msgstr ""
-"枚举变体中的值只有在被模式匹配后,才可访问。模式将引用绑定到 `=>` 之后"
-"的“match 分支”中的字段。"
+"枚举变体中的值只有在被模式匹配后,才可访问。模式将引用绑定到 `=>` 之后的“match 分支”中的"
+"字段。"
#: src/pattern-matching/destructuring.md
#, fuzzy
msgid ""
-"Demonstrate what happens when the search is inexhaustive. Note the advantage "
-"the Rust compiler provides by confirming when all cases are handled."
+"Demonstrate what happens when the search is inexhaustive. Note the advantage the Rust "
+"compiler provides by confirming when all cases are handled."
msgstr ""
-"展示搜索不详尽时会发生的情况。请注意 Rust 编译器的优势,即确认所有情况何时都"
-"得到了处理。"
+"展示搜索不详尽时会发生的情况。请注意 Rust 编译器的优势,即确认所有情况何时都得到了处理。"
#: src/pattern-matching/destructuring.md
msgid ""
-"Save the result of `divide_in_two` in the `result` variable and `match` it "
-"in a loop. That won't compile because `msg` is consumed when matched. To fix "
-"it, match `&result` instead of `result`. That will make `msg` a reference so "
-"it won't be consumed. This [\"match ergonomics\"](https://rust-lang.github."
-"io/rfcs/2005-match-ergonomics.html) appeared in Rust 2018. If you want to "
-"support older Rust, replace `msg` with `ref msg` in the pattern."
+"Save the result of `divide_in_two` in the `result` variable and `match` it in a loop. "
+"That won't compile because `msg` is consumed when matched. To fix it, match `&result` "
+"instead of `result`. That will make `msg` a reference so it won't be consumed. This "
+"[\"match ergonomics\"](https://rust-lang.github.io/rfcs/2005-match-ergonomics.html) "
+"appeared in Rust 2018. If you want to support older Rust, replace `msg` with `ref msg` "
+"in the pattern."
msgstr ""
#: src/pattern-matching/let-control-flow.md
msgid ""
-"Rust has a few control flow constructs which differ from other languages. "
-"They are used for pattern matching:"
+"Rust has a few control flow constructs which differ from other languages. They are used "
+"for pattern matching:"
msgstr "Rust 有几个与其他语言不同的控制流结构。它们用于模式匹配:"
#: src/pattern-matching/let-control-flow.md
@@ -5218,12 +4926,12 @@ msgstr "`match` 表达式"
#: src/pattern-matching/let-control-flow.md
msgid ""
-"The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-"
-"expr.html#if-let-expressions) lets you execute different code depending on "
-"whether a value matches a pattern:"
+"The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-expr."
+"html#if-let-expressions) lets you execute different code depending on whether a value "
+"matches a pattern:"
msgstr ""
-"[`if let` 表达式](https://doc.rust-lang.org/reference/expressions/if-expr."
-"html#if-let-expressions) 能让你根据某个值是否与模式相匹配来执行不同的代码:"
+"[`if let` 表达式](https://doc.rust-lang.org/reference/expressions/if-expr.html#if-let-"
+"expressions) 能让你根据某个值是否与模式相匹配来执行不同的代码:"
#: src/pattern-matching/let-control-flow.md
msgid "\"slept for {:?}\""
@@ -5236,15 +4944,14 @@ msgstr "while let 表达式"
#: src/pattern-matching/let-control-flow.md
msgid ""
-"For the common case of matching a pattern and returning from the function, "
-"use [`let else`](https://doc.rust-lang.org/rust-by-example/flow_control/"
-"let_else.html). The \"else\" case must diverge (`return`, `break`, or panic "
-"- anything but falling off the end of the block)."
+"For the common case of matching a pattern and returning from the function, use [`let "
+"else`](https://doc.rust-lang.org/rust-by-example/flow_control/let_else.html). The "
+"\"else\" case must diverge (`return`, `break`, or panic - anything but falling off the "
+"end of the block)."
msgstr ""
-"如需了解匹配模式并从函数返回的常见情况,请使用 [`let else`](https://doc.rust-"
-"lang.org/rust-by-example/flow_control/let_else.html)。\"else\" 分支必须执行不"
-"同的结束方式(例如,`return`、`break` 或 `panic`,但不能直接执行到代码块的末"
-"尾)。"
+"如需了解匹配模式并从函数返回的常见情况,请使用 [`let else`](https://doc.rust-lang.org/"
+"rust-by-example/flow_control/let_else.html)。\"else\" 分支必须执行不同的结束方式(例如,"
+"`return`、`break` 或 `panic`,但不能直接执行到代码块的末尾)。"
#: src/pattern-matching/let-control-flow.md
msgid "\"got None\""
@@ -5264,32 +4971,28 @@ msgid "\"result: {:?}\""
msgstr "\"result: {:?}\""
#: src/pattern-matching/let-control-flow.md src/generics/trait-bounds.md
-#: src/smart-pointers/solution.md src/testing/googletest.md
-#: src/testing/solution.md
+#: src/smart-pointers/solution.md src/testing/googletest.md src/testing/solution.md
msgid "\"foo\""
msgstr "\"foo\""
#: src/pattern-matching/let-control-flow.md
msgid ""
-"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/"
-"reference/expressions/loop-expr.html#predicate-pattern-loops) variant which "
-"repeatedly tests a value against a pattern:"
+"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/reference/"
+"expressions/loop-expr.html#predicate-pattern-loops) variant which repeatedly tests a "
+"value against a pattern:"
msgstr ""
-"与 `if let` 一样,[`while let`](https://doc.rust-lang.org/reference/"
-"expressions/loop-expr.html#predicate-pattern-loops) 变体会针对一个模式重复测"
-"试一个值:"
+"与 `if let` 一样,[`while let`](https://doc.rust-lang.org/reference/expressions/loop-"
+"expr.html#predicate-pattern-loops) 变体会针对一个模式重复测试一个值:"
#: src/pattern-matching/let-control-flow.md
#, fuzzy
msgid ""
-"Here [`String::pop`](https://doc.rust-lang.org/stable/std/string/struct."
-"String.html#method.pop) returns `Some(c)` until the string is empty, after "
-"which it will return `None`. The `while let` lets us keep iterating through "
-"all items."
+"Here [`String::pop`](https://doc.rust-lang.org/stable/std/string/struct.String."
+"html#method.pop) returns `Some(c)` until the string is empty, after which it will return "
+"`None`. The `while let` lets us keep iterating through all items."
msgstr ""
-"在这里,每次 调用 `next()` 时,`v.iter()` 返回的迭代器都会返回一个 "
-"`Option`。它将一直返回 `Some(x)`,直到完成。 之后它将返回 `None`。"
-"`while let`能让我们持续迭代所有项。"
+"在这里,每次 调用 `next()` 时,`v.iter()` 返回的迭代器都会返回一个 `Option`。它将一"
+"直返回 `Some(x)`,直到完成。 之后它将返回 `None`。`while let`能让我们持续迭代所有项。"
#: src/pattern-matching/let-control-flow.md
#, fuzzy
@@ -5299,8 +5002,8 @@ msgstr "if-let"
#: src/pattern-matching/let-control-flow.md
#, fuzzy
msgid ""
-"Unlike `match`, `if let` does not have to cover all branches. This can make "
-"it more concise than `match`."
+"Unlike `match`, `if let` does not have to cover all branches. This can make it more "
+"concise than `match`."
msgstr "与 `match` 不同的是,`if let` 不支持模式匹配的 guard 子句。"
#: src/pattern-matching/let-control-flow.md
@@ -5308,8 +5011,7 @@ msgid "A common usage is handling `Some` values when working with `Option`."
msgstr "使用 `Option` 时,常见的做法是处理 `Some` 值。"
#: src/pattern-matching/let-control-flow.md
-msgid ""
-"Unlike `match`, `if let` does not support guard clauses for pattern matching."
+msgid "Unlike `match`, `if let` does not support guard clauses for pattern matching."
msgstr "与 `match` 不同的是,`if let` 不支持模式匹配的 guard 子句。"
#: src/pattern-matching/let-control-flow.md
@@ -5319,12 +5021,12 @@ msgstr "let-else"
#: src/pattern-matching/let-control-flow.md
#, fuzzy
msgid ""
-"`if-let`s can pile up, as shown. The `let-else` construct supports "
-"flattening this nested code. Rewrite the awkward version for students, so "
-"they can see the transformation."
+"`if-let`s can pile up, as shown. The `let-else` construct supports flattening this "
+"nested code. Rewrite the awkward version for students, so they can see the "
+"transformation."
msgstr ""
-"`if-let` 可以堆叠使用,如下所示。`let-else` 结构支持展平此嵌套代码。将不通顺"
-"的版本重写,以便学生们能够理解其中的变化。"
+"`if-let` 可以堆叠使用,如下所示。`let-else` 结构支持展平此嵌套代码。将不通顺的版本重写,"
+"以便学生们能够理解其中的变化。"
#: src/pattern-matching/let-control-flow.md
msgid "The rewritten version is:"
@@ -5337,19 +5039,19 @@ msgstr "while-let"
#: src/pattern-matching/let-control-flow.md
msgid ""
-"Point out that the `while let` loop will keep going as long as the value "
-"matches the pattern."
+"Point out that the `while let` loop will keep going as long as the value matches the "
+"pattern."
msgstr "指出只要值与模式匹配,`while let` 循环就会一直进行下去。"
#: src/pattern-matching/let-control-flow.md
#, fuzzy
msgid ""
-"You could rewrite the `while let` loop as an infinite loop with an if "
-"statement that breaks when there is no value to unwrap for `name.pop()`. The "
-"`while let` provides syntactic sugar for the above scenario."
+"You could rewrite the `while let` loop as an infinite loop with an if statement that "
+"breaks when there is no value to unwrap for `name.pop()`. The `while let` provides "
+"syntactic sugar for the above scenario."
msgstr ""
-"你可以使用 if 语句将 `while let` 循环重写为无限循环,当 `iter.next()` 没有值"
-"可以解封时中断。`while let` 为上述情况提供了语法糖。"
+"你可以使用 if 语句将 `while let` 循环重写为无限循环,当 `iter.next()` 没有值可以解封时中"
+"断。`while let` 为上述情况提供了语法糖。"
#: src/pattern-matching/exercise.md
#, fuzzy
@@ -5359,46 +5061,42 @@ msgstr "为算术表达式编写一个简单的递归评估器。先从定义二
#: src/pattern-matching/exercise.md
#, fuzzy
msgid ""
-"The `Box` type here is a smart pointer, and will be covered in detail later "
-"in the course. An expression can be \"boxed\" with `Box::new` as seen in the "
-"tests. To evaluate a boxed expression, use the deref operator (`*`) to "
-"\"unbox\" it: `eval(*boxed_expr)`."
+"The `Box` type here is a smart pointer, and will be covered in detail later in the "
+"course. An expression can be \"boxed\" with `Box::new` as seen in the tests. To evaluate "
+"a boxed expression, use the deref operator (`*`) to \"unbox\" it: `eval(*boxed_expr)`."
msgstr ""
-"这里的 `Box` 类型是智能指针,本课程稍后会详细介绍。可以使用 `Box::new` 对表达"
-"式进行 “封装”操作,如测试中所示。如需对已封装的表达式求值,请使用 deref 运算"
-"符将其 “解封装”:`eval(*boxed_expr)`。"
+"这里的 `Box` 类型是智能指针,本课程稍后会详细介绍。可以使用 `Box::new` 对表达式进行 “封"
+"装”操作,如测试中所示。如需对已封装的表达式求值,请使用 deref 运算符将其 “解封装”:"
+"`eval(*boxed_expr)`。"
#: src/pattern-matching/exercise.md
#, fuzzy
msgid ""
"Some expressions cannot be evaluated and will return an error. The standard "
-"[`Result`](https://doc.rust-lang.org/std/result/enum.Result."
-"html) type is an enum that represents either a successful value "
-"(`Ok(Value)`) or an error (`Err(String)`). We will cover this type in detail "
-"later."
+"[`Result`](https://doc.rust-lang.org/std/result/enum.Result.html) type is "
+"an enum that represents either a successful value (`Ok(Value)`) or an error "
+"(`Err(String)`). We will cover this type in detail later."
msgstr ""
-"部分表达式无法求值,将返回错误。`Res` 类型表示有效值或错误消息。这与我们后面"
-"将看到的标准库的“Result”非常类似。"
+"部分表达式无法求值,将返回错误。`Res` 类型表示有效值或错误消息。这与我们后面将看到的标准"
+"库的“Result”非常类似。"
#: src/pattern-matching/exercise.md
msgid ""
-"Copy and paste the code into the Rust playground, and begin implementing "
-"`eval`. The final product should pass the tests. It may be helpful to use "
-"`todo!()` and get the tests to pass one-by-one. You can also skip a test "
-"temporarily with `#[ignore]`:"
+"Copy and paste the code into the Rust playground, and begin implementing `eval`. The "
+"final product should pass the tests. It may be helpful to use `todo!()` and get the "
+"tests to pass one-by-one. You can also skip a test temporarily with `#[ignore]`:"
msgstr ""
-"将代码复制粘贴到 Rust Playground,然后开始实现 `eval`。最终结果应能通过测试。"
-"使用 `todo!()` 并使测试逐个通过可能会很有帮助。您还可以使用 `#[ignore]` 暂时"
-"跳过测试:"
+"将代码复制粘贴到 Rust Playground,然后开始实现 `eval`。最终结果应能通过测试。使用 `todo!"
+"()` 并使测试逐个通过可能会很有帮助。您还可以使用 `#[ignore]` 暂时跳过测试:"
#: src/pattern-matching/exercise.md
#, fuzzy
msgid ""
-"If you finish early, try writing a test that results in division by zero or "
-"integer overflow. How could you handle this with `Result` instead of a panic?"
+"If you finish early, try writing a test that results in division by zero or integer "
+"overflow. How could you handle this with `Result` instead of a panic?"
msgstr ""
-"如果提前完成测试,请尝试编写一项可导致被零除或整数溢出的测试。如何使用 `Res::"
-"Err` 而非 panic 来应对这种情况?"
+"如果提前完成测试,请尝试编写一项可导致被零除或整数溢出的测试。如何使用 `Res::Err` 而非 "
+"panic 来应对这种情况?"
#: src/pattern-matching/exercise.md src/pattern-matching/solution.md
msgid "/// An operation to perform on two subexpressions.\n"
@@ -5433,35 +5131,37 @@ msgid "[Traits](./methods-and-traits/traits.md) (10 minutes)"
msgstr ""
#: src/methods-and-traits.md
-msgid "[Deriving](./methods-and-traits/deriving.md) (5 minutes)"
-msgstr ""
+#, fuzzy
+msgid "[Deriving](./methods-and-traits/deriving.md) (3 minutes)"
+msgstr "如需详细了解 Rust 中 的模式,请参阅[模式匹配](../pattern-matching.md)。"
#: src/methods-and-traits.md
-msgid ""
-"[Exercise: Generic Logger](./methods-and-traits/exercise.md) (20 minutes)"
+msgid "[Exercise: Generic Logger](./methods-and-traits/exercise.md) (20 minutes)"
msgstr ""
-#: src/methods-and-traits.md src/generics.md src/iterators.md
-#: src/error-handling.md
-msgid "This segment should take about 45 minutes"
+#: src/methods-and-traits.md src/generics.md src/modules.md
+msgid "This segment should take about 40 minutes"
msgstr ""
#: src/methods-and-traits/methods.md
msgid ""
-"Rust allows you to associate functions with your new types. You do this with "
-"an `impl` block:"
+"Rust allows you to associate functions with your new types. You do this with an `impl` "
+"block:"
msgstr "Rust 允许您将函数与新类型相关联。您可以使用“impl”块来执行此操作:"
#: src/methods-and-traits/methods.md
-msgid "// No receiver, a static method\n"
+#, fuzzy
+msgid "// No receiver, a static method"
msgstr "// No receiver, a static method\n"
#: src/methods-and-traits/methods.md
-msgid "// Exclusive borrowed read-write access to self\n"
+#, fuzzy
+msgid "// Exclusive borrowed read-write access to self"
msgstr "// Exclusive borrowed read-write access to self\n"
#: src/methods-and-traits/methods.md
-msgid "// Shared and read-only borrowed access to self\n"
+#, fuzzy
+msgid "// Shared and read-only borrowed access to self"
msgstr "// Shared and read-only borrowed access to self\n"
#: src/methods-and-traits/methods.md
@@ -5473,7 +5173,8 @@ msgid "\"Lap {idx}: {lap} sec\""
msgstr "\"Lap {idx}: {lap} sec\""
#: src/methods-and-traits/methods.md
-msgid "// Exclusive ownership of self\n"
+#, fuzzy
+msgid "// Exclusive ownership of self"
msgstr "// Exclusive ownership of self\n"
#: src/methods-and-traits/methods.md
@@ -5485,41 +5186,39 @@ msgid "\"Monaco Grand Prix\""
msgstr "\"Monaco Grand Prix\""
#: src/methods-and-traits/methods.md
-msgid "// race.add_lap(42);\n"
+#, fuzzy
+msgid "// race.add_lap(42);"
msgstr "// race.add_lap(42);\n"
#: src/methods-and-traits/methods.md
#, fuzzy
msgid ""
-"The `self` arguments specify the \"receiver\" - the object the method acts "
-"on. There are several common receivers for a method:"
-msgstr ""
-"上面的“&self”表明该方法以不可变的方式借用了对象。还有其他可能的方法接收器:"
+"The `self` arguments specify the \"receiver\" - the object the method acts on. There are "
+"several common receivers for a method:"
+msgstr "上面的“&self”表明该方法以不可变的方式借用了对象。还有其他可能的方法接收器:"
#: src/methods-and-traits/methods.md
msgid ""
-"`&self`: borrows the object from the caller using a shared and immutable "
-"reference. The object can be used again afterwards."
-msgstr ""
-"“&self”:使用不可变的共享引用从调用方借用对象。之后可以再次使用该对象。"
+"`&self`: borrows the object from the caller using a shared and immutable reference. The "
+"object can be used again afterwards."
+msgstr "“&self”:使用不可变的共享引用从调用方借用对象。之后可以再次使用该对象。"
#: src/methods-and-traits/methods.md
msgid ""
-"`&mut self`: borrows the object from the caller using a unique and mutable "
-"reference. The object can be used again afterwards."
-msgstr ""
-"“&mut self”:使用唯一的可变引用从调用方借用对象。之后可以再次使用该对象。"
+"`&mut self`: borrows the object from the caller using a unique and mutable reference. "
+"The object can be used again afterwards."
+msgstr "“&mut self”:使用唯一的可变引用从调用方借用对象。之后可以再次使用该对象。"
#: src/methods-and-traits/methods.md
msgid ""
-"`self`: takes ownership of the object and moves it away from the caller. The "
-"method becomes the owner of the object. The object will be dropped "
-"(deallocated) when the method returns, unless its ownership is explicitly "
-"transmitted. Complete ownership does not automatically mean mutability."
+"`self`: takes ownership of the object and moves it away from the caller. The method "
+"becomes the owner of the object. The object will be dropped (deallocated) when the "
+"method returns, unless its ownership is explicitly transmitted. Complete ownership does "
+"not automatically mean mutability."
msgstr ""
-"“self”:获取对象的所有权并将其从调用方移出。该方法会成为对象的所有者。除非明"
-"确转移对象的所有权,否则在该方法返回时,对象将被丢弃(取消分配)。具备完全所"
-"有权,不自动等同于具备可变性。"
+"“self”:获取对象的所有权并将其从调用方移出。该方法会成为对象的所有者。除非明确转移对象的"
+"所有权,否则在该方法返回时,对象将被丢弃(取消分配)。具备完全所有权,不自动等同于具备可"
+"变性。"
#: src/methods-and-traits/methods.md
#, fuzzy
@@ -5528,11 +5227,9 @@ msgstr "`mut self`:同上,但该方法可以改变对象。"
#: src/methods-and-traits/methods.md
msgid ""
-"No receiver: this becomes a static method on the struct. Typically used to "
-"create constructors which are called `new` by convention."
-msgstr ""
-"无接收器:这将变为结构体上的静态方法。通常用于创建构造函数,按惯例被称"
-"为“new”。"
+"No receiver: this becomes a static method on the struct. Typically used to create "
+"constructors which are called `new` by convention."
+msgstr "无接收器:这将变为结构体上的静态方法。通常用于创建构造函数,按惯例被称为“new”。"
#: src/methods-and-traits/methods.md
msgid "It can be helpful to introduce methods by comparing them to functions."
@@ -5540,20 +5237,18 @@ msgstr "引入方法时,将方法与函数进行比较会很有帮助。"
#: src/methods-and-traits/methods.md
msgid ""
-"Methods are called on an instance of a type (such as a struct or enum), the "
-"first parameter represents the instance as `self`."
-msgstr ""
-"在某种类型(例如结构体或枚举)的实例上调用方法,第一个参数将该实例表示"
-"为“self”。"
+"Methods are called on an instance of a type (such as a struct or enum), the first "
+"parameter represents the instance as `self`."
+msgstr "在某种类型(例如结构体或枚举)的实例上调用方法,第一个参数将该实例表示为“self”。"
#: src/methods-and-traits/methods.md
msgid ""
-"Developers may choose to use methods to take advantage of method receiver "
-"syntax and to help keep them more organized. By using methods we can keep "
-"all the implementation code in one predictable place."
+"Developers may choose to use methods to take advantage of method receiver syntax and to "
+"help keep them more organized. By using methods we can keep all the implementation code "
+"in one predictable place."
msgstr ""
-"开发者可能会选择使用方法,以便利用方法接收器语法并让方法更有条理。通过使用方"
-"法,我们可以将所有实现代码保存在一个可预测的位置。"
+"开发者可能会选择使用方法,以便利用方法接收器语法并让方法更有条理。通过使用方法,我们可以"
+"将所有实现代码保存在一个可预测的位置。"
#: src/methods-and-traits/methods.md
msgid "Point out the use of the keyword `self`, a method receiver."
@@ -5561,47 +5256,44 @@ msgstr "指出关键字“self”的用法,它是一种方法接收器。"
#: src/methods-and-traits/methods.md
msgid ""
-"Show that it is an abbreviated term for `self: Self` and perhaps show how "
-"the struct name could also be used."
+"Show that it is an abbreviated term for `self: Self` and perhaps show how the struct "
+"name could also be used."
msgstr "显示它是“self: Self”的缩写术语,或许要显示结构体名称的可能用法。"
#: src/methods-and-traits/methods.md
msgid ""
-"Explain that `Self` is a type alias for the type the `impl` block is in and "
-"can be used elsewhere in the block."
+"Explain that `Self` is a type alias for the type the `impl` block is in and can be used "
+"elsewhere in the block."
msgstr "说明“Self”是“impl”块所属类型的类型别名,可以在块中的其他位置使用。"
#: src/methods-and-traits/methods.md
msgid ""
-"Note how `self` is used like other structs and dot notation can be used to "
-"refer to individual fields."
-msgstr ""
-"指出“self”的使用方式与其他结构体一样,并且可以使用点表示法来指代各个字段。"
+"Note how `self` is used like other structs and dot notation can be used to refer to "
+"individual fields."
+msgstr "指出“self”的使用方式与其他结构体一样,并且可以使用点表示法来指代各个字段。"
#: src/methods-and-traits/methods.md
#, fuzzy
msgid ""
-"This might be a good time to demonstrate how the `&self` differs from `self` "
-"by trying to run `finish` twice."
+"This might be a good time to demonstrate how the `&self` differs from `self` by trying "
+"to run `finish` twice."
msgstr ""
-"这可能是演示“&self”和“self”差别的好时机,您只要修改代码并尝试执行 say_hello "
-"两次即可。"
+"这可能是演示“&self”和“self”差别的好时机,您只要修改代码并尝试执行 say_hello 两次即可。"
#: src/methods-and-traits/methods.md
#, fuzzy
msgid ""
-"Beyond variants on `self`, there are also [special wrapper types](https://"
-"doc.rust-lang.org/reference/special-types-and-traits.html) allowed to be "
-"receiver types, such as `Box`."
+"Beyond variants on `self`, there are also [special wrapper types](https://doc.rust-lang."
+"org/reference/special-types-and-traits.html) allowed to be receiver types, such as "
+"`Box`."
msgstr ""
-"除“self”的变体外,还可以将[特殊封装容器类型](https://doc.rust-lang.org/"
-"reference/special-types-and-traits.html)作为接收器类型,例如“Box\n"
+"除“self”的变体外,还可以将[特殊封装容器类型](https://doc.rust-lang.org/reference/special-"
+"types-and-traits.html)作为接收器类型,例如“Box\n"
"\n"
"”。"
#: src/methods-and-traits/traits.md
-msgid ""
-"Rust lets you abstract over types with traits. They're similar to interfaces:"
+msgid "Rust lets you abstract over types with traits. They're similar to interfaces:"
msgstr "Rust 让您可以依据特征对类型进行抽象化处理。特征与接口类似:"
#: src/methods-and-traits/traits.md
@@ -5622,8 +5314,7 @@ msgstr "\"Fido\""
#: src/methods-and-traits/traits.md
msgid ""
-"A trait defines a number of methods that types must have in order to "
-"implement the trait."
+"A trait defines a number of methods that types must have in order to implement the trait."
msgstr "trait 定义了类型实现该 trait 所必须具备的一些方法。"
#: src/methods-and-traits/traits.md
@@ -5633,25 +5324,26 @@ msgstr "trait 在 ` { .. } 的 impl ` 代码块中实现。"
#: src/methods-and-traits/traits.md
#, fuzzy
msgid ""
-"Traits may specify pre-implemented (provided) methods and methods that users "
-"are required to implement themselves. Provided methods can rely on required "
-"methods. In this case, `greet` is provided, and relies on `talk`."
+"Traits may specify pre-implemented (provided) methods and methods that users are "
+"required to implement themselves. Provided methods can rely on required methods. In this "
+"case, `greet` is provided, and relies on `talk`."
msgstr ""
-"trait 或许可指定预实现(默认)方法,以及用户需要自行实现的方法。具有默认实现"
-"的方法可以依赖于必需的方法。"
+"trait 或许可指定预实现(默认)方法,以及用户需要自行实现的方法。具有默认实现的方法可以依"
+"赖于必需的方法。"
#: src/methods-and-traits/deriving.md
msgid ""
-"Supported traits can be automatically implemented for your custom types, as "
-"follows:"
+"Supported traits can be automatically implemented for your custom types, as follows:"
msgstr "系统可以自动为您的自定义类型实现支持的 trait,如下所示:"
#: src/methods-and-traits/deriving.md
-msgid "// Default trait adds `default` constructor.\n"
+#, fuzzy
+msgid "// Default trait adds `default` constructor."
msgstr "// Default trait adds `default` constructor.\n"
#: src/methods-and-traits/deriving.md
-msgid "// Clone trait adds `clone` method.\n"
+#, fuzzy
+msgid "// Clone trait adds `clone` method."
msgstr "// Clone trait adds `clone` method.\n"
#: src/methods-and-traits/deriving.md
@@ -5659,7 +5351,8 @@ msgid "\"EldurScrollz\""
msgstr "\"EldurScrollz\""
#: src/methods-and-traits/deriving.md
-msgid "// Debug trait adds support for printing with `{:?}`.\n"
+#, fuzzy
+msgid "// Debug trait adds support for printing with `{:?}`."
msgstr "// Debug trait adds support for printing with `{:?}`.\n"
#: src/methods-and-traits/deriving.md
@@ -5668,33 +5361,33 @@ msgstr "\"{:?} vs. {:?}\""
#: src/methods-and-traits/deriving.md
msgid ""
-"Derivation is implemented with macros, and many crates provide useful derive "
-"macros to add useful functionality. For example, `serde` can derive "
-"serialization support for a struct using `#[derive(Serialize)]`."
+"Derivation is implemented with macros, and many crates provide useful derive macros to "
+"add useful functionality. For example, `serde` can derive serialization support for a "
+"struct using `#[derive(Serialize)]`."
msgstr ""
-"派生功能是通过宏实现的,并且许多 crate 提供有用的派生宏,以添加实用功能。例"
-"如,`serde` 可以使用 `#[derive(Serialize)]` 为结构体派生序列化支持。"
+"派生功能是通过宏实现的,并且许多 crate 提供有用的派生宏,以添加实用功能。例如,`serde` 可"
+"以使用 `#[derive(Serialize)]` 为结构体派生序列化支持。"
#: src/methods-and-traits/exercise.md
msgid ""
-"Let's design a simple logging utility, using a trait `Logger` with a `log` "
-"method. Code which might log its progress can then take an `&impl Logger`. "
-"In testing, this might put messages in the test logfile, while in a "
-"production build it would send messages to a log server."
+"Let's design a simple logging utility, using a trait `Logger` with a `log` method. Code "
+"which might log its progress can then take an `&impl Logger`. In testing, this might put "
+"messages in the test logfile, while in a production build it would send messages to a "
+"log server."
msgstr ""
#: src/methods-and-traits/exercise.md
msgid ""
-"However, the `StderrLogger` given below logs all messages, regardless of "
-"verbosity. Your task is to write a `VerbosityFilter` type that will ignore "
-"messages above a maximum verbosity."
+"However, the `StderrLogger` given below logs all messages, regardless of verbosity. Your "
+"task is to write a `VerbosityFilter` type that will ignore messages above a maximum "
+"verbosity."
msgstr ""
#: src/methods-and-traits/exercise.md
msgid ""
-"This is a common pattern: a struct wrapping a trait implementation and "
-"implementing that same trait, adding behavior in the process. What other "
-"kinds of wrappers might be useful in a logging utility?"
+"This is a common pattern: a struct wrapping a trait implementation and implementing that "
+"same trait, adding behavior in the process. What other kinds of wrappers might be useful "
+"in a logging utility?"
msgstr ""
#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md
@@ -5715,7 +5408,7 @@ msgid "\"Uhoh\""
msgstr "\"uhoh\""
#: src/methods-and-traits/exercise.md
-msgid "// TODO: Define and implement `VerbosityFilter`.\n"
+msgid "// TODO: Define and implement `VerbosityFilter`."
msgstr ""
#: src/methods-and-traits/solution.md
@@ -5727,7 +5420,7 @@ msgid "[Generic Functions](./generics/generic-functions.md) (5 minutes)"
msgstr ""
#: src/generics.md
-msgid "[Generic Data Types](./generics/generic-data.md) (15 minutes)"
+msgid "[Generic Data Types](./generics/generic-data.md) (10 minutes)"
msgstr ""
#: src/generics.md
@@ -5745,13 +5438,13 @@ msgstr ""
#: src/generics/generic-functions.md
#, fuzzy
msgid ""
-"Rust supports generics, which lets you abstract algorithms or data "
-"structures (such as sorting or a binary tree) over the types used or stored."
-msgstr ""
-"Rust 支持泛型,允许您根据算法(例如排序)中使用的类型对算法进行抽象化处理。"
+"Rust supports generics, which lets you abstract algorithms or data structures (such as "
+"sorting or a binary tree) over the types used or stored."
+msgstr "Rust 支持泛型,允许您根据算法(例如排序)中使用的类型对算法进行抽象化处理。"
#: src/generics/generic-functions.md
-msgid "/// Pick `even` or `odd` depending on the value of `n`.\n"
+#, fuzzy
+msgid "/// Pick `even` or `odd` depending on the value of `n`."
msgstr "/// Pick `even` or `odd` depending on the value of `n`.\n"
#: src/generics/generic-functions.md
@@ -5771,40 +5464,38 @@ msgid "\"cat\""
msgstr "\"cat\""
#: src/generics/generic-functions.md
-msgid ""
-"Rust infers a type for T based on the types of the arguments and return "
-"value."
+msgid "Rust infers a type for T based on the types of the arguments and return value."
msgstr "Rust 会根据参数类型和返回值推理出 T 的类型。"
#: src/generics/generic-functions.md
msgid ""
-"This is similar to C++ templates, but Rust partially compiles the generic "
-"function immediately, so that function must be valid for all types matching "
-"the constraints. For example, try modifying `pick` to return `even + odd` if "
-"`n == 0`. Even if only the `pick` instantiation with integers is used, Rust "
-"still considers it invalid. C++ would let you do this."
+"This is similar to C++ templates, but Rust partially compiles the generic function "
+"immediately, so that function must be valid for all types matching the constraints. For "
+"example, try modifying `pick` to return `even + odd` if `n == 0`. Even if only the "
+"`pick` instantiation with integers is used, Rust still considers it invalid. C++ would "
+"let you do this."
msgstr ""
-"这与 C++ 模板类似,但 Rust 会立即编译部分通用函数,因此该函数必须对所有符合约"
-"束条件的类型都有效。例如,请尝试修改 `pick` 函数,如果 `n == 0`,则返回 "
-"`even + odd`。即使仅使用带有整数的“pick”实例化,Rust 仍会将其视为无效。C++ 可"
-"让您做到这一点。"
+"这与 C++ 模板类似,但 Rust 会立即编译部分通用函数,因此该函数必须对所有符合约束条件的类型"
+"都有效。例如,请尝试修改 `pick` 函数,如果 `n == 0`,则返回 `even + odd`。即使仅使用带有"
+"整数的“pick”实例化,Rust 仍会将其视为无效。C++ 可让您做到这一点。"
#: src/generics/generic-functions.md
#, fuzzy
msgid ""
-"Generic code is turned into non-generic code based on the call sites. This "
-"is a zero-cost abstraction: you get exactly the same result as if you had "
-"hand-coded the data structures without the abstraction."
+"Generic code is turned into non-generic code based on the call sites. This is a zero-"
+"cost abstraction: you get exactly the same result as if you had hand-coded the data "
+"structures without the abstraction."
msgstr ""
-"这是零成本的抽象化处理:您得到的结果不会受到影响,也就是说,与在没有进行抽象"
-"化处理的情况下,对数据结构进行手动编码时的结果一样。"
+"这是零成本的抽象化处理:您得到的结果不会受到影响,也就是说,与在没有进行抽象化处理的情况"
+"下,对数据结构进行手动编码时的结果一样。"
#: src/generics/generic-data.md
msgid "You can use generics to abstract over the concrete field type:"
msgstr "您可以使用泛型对具体字段类型进行抽象化处理:"
#: src/generics/generic-data.md
-msgid "// fn set_x(&mut self, x: T)\n"
+#, fuzzy
+msgid "// fn set_x(&mut self, x: T)"
msgstr "// fn set_x(&mut self, x: T)\n"
#: src/generics/generic-data.md
@@ -5816,16 +5507,13 @@ msgid "\"coords: {:?}\""
msgstr "\"coords: {:?}\""
#: src/generics/generic-data.md
-msgid ""
-"_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that "
-"redundant?"
-msgstr ""
-"\\*问:\\*为什么 `T` 在 `impl Point {}` 中指定了两次?这不是多余的吗?"
+msgid "_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that redundant?"
+msgstr "\\*问:\\*为什么 `T` 在 `impl Point {}` 中指定了两次?这不是多余的吗?"
#: src/generics/generic-data.md
msgid ""
-"This is because it is a generic implementation section for generic type. "
-"They are independently generic."
+"This is because it is a generic implementation section for generic type. They are "
+"independently generic."
msgstr "这是因为它是泛型类型的泛型实现部分。它们是独立的泛型内容。"
#: src/generics/generic-data.md
@@ -5839,34 +5527,34 @@ msgstr "可以编写 `impl Point { .. }`。"
#: src/generics/generic-data.md
msgid ""
-"`Point` is still generic and you can use `Point`, but methods in this "
-"block will only be available for `Point`."
+"`Point` is still generic and you can use `Point`, but methods in this block will "
+"only be available for `Point`."
msgstr ""
-"`Point` 依然是一个泛型,并且您可以使用 `Point`,但此块中的方法将仅适用"
-"于 `Point`。"
+"`Point` 依然是一个泛型,并且您可以使用 `Point`,但此块中的方法将仅适用于 "
+"`Point`。"
#: src/generics/generic-data.md
msgid ""
-"Try declaring a new variable `let p = Point { x: 5, y: 10.0 };`. Update the "
-"code to allow points that have elements of different types, by using two "
-"type variables, e.g., `T` and `U`."
+"Try declaring a new variable `let p = Point { x: 5, y: 10.0 };`. Update the code to "
+"allow points that have elements of different types, by using two type variables, e.g., "
+"`T` and `U`."
msgstr ""
-"请尝试声明一个新变量 `let p = Point { x: 5, y: 10.0 };`。通过使用两种类型变量"
-"(例如 `T` 和 `U`),更新代码以允许具有不同类型元素的点。"
+"请尝试声明一个新变量 `let p = Point { x: 5, y: 10.0 };`。通过使用两种类型变量(例如 `T` "
+"和 `U`),更新代码以允许具有不同类型元素的点。"
#: src/generics/trait-bounds.md
msgid ""
-"When working with generics, you often want to require the types to implement "
-"some trait, so that you can call this trait's methods."
-msgstr ""
-"使用泛型时,您通常会想要利用类型来实现某些特性, 这样才能调用此特征的方法。"
+"When working with generics, you often want to require the types to implement some trait, "
+"so that you can call this trait's methods."
+msgstr "使用泛型时,您通常会想要利用类型来实现某些特性, 这样才能调用此特征的方法。"
#: src/generics/trait-bounds.md
msgid "You can do this with `T: Trait` or `impl Trait`:"
msgstr "您可以使用 `T: Trait` 或 `impl Trait` 执行此操作:"
#: src/generics/trait-bounds.md
-msgid "// struct NotClonable;\n"
+#, fuzzy
+msgid "// struct NotClonable;"
msgstr "// struct NotClonable;\n"
#: src/generics/trait-bounds.md
@@ -5895,29 +5583,31 @@ msgstr "它具有额外功能,因此也更强大。"
#: src/generics/trait-bounds.md
msgid ""
-"If someone asks, the extra feature is that the type on the left of \":\" can "
-"be arbitrary, like `Option`."
-msgstr ""
-"如果有人提问,便阐明额外功能是指“:”左侧的类别可为任意值,例如 `Option`。"
+"If someone asks, the extra feature is that the type on the left of \":\" can be "
+"arbitrary, like `Option`."
+msgstr "如果有人提问,便阐明额外功能是指“:”左侧的类别可为任意值,例如 `Option`。"
#: src/generics/trait-bounds.md
msgid ""
-"Note that Rust does not (yet) support specialization. For example, given the "
-"original `duplicate`, it is invalid to add a specialized `duplicate(a: u32)`."
+"Note that Rust does not (yet) support specialization. For example, given the original "
+"`duplicate`, it is invalid to add a specialized `duplicate(a: u32)`."
msgstr ""
-"请注意,Rust 尚不支持专精领域认证。例如,根据原始 `duplicate` 函数,添加专精"
-"领域认证的 `Duplicate(a: u32)` 是无效的。"
+"请注意,Rust 尚不支持专精领域认证。例如,根据原始 `duplicate` 函数,添加专精领域认证的 "
+"`Duplicate(a: u32)` 是无效的。"
#: src/generics/impl-trait.md
msgid ""
-"Similar to trait bounds, an `impl Trait` syntax can be used in function "
-"arguments and return values:"
+"Similar to trait bounds, an `impl Trait` syntax can be used in function arguments and "
+"return values:"
msgstr "与特征边界类似,`impl Trait` 语法可以在函数形参 和返回值中使用:"
#: src/generics/impl-trait.md
-msgid ""
-"// Syntactic sugar for:\n"
-"// fn add_42_millions>(x: T) -> i32 {\n"
+msgid "// Syntactic sugar for:"
+msgstr ""
+
+#: src/generics/impl-trait.md
+#, fuzzy
+msgid "// fn add_42_millions>(x: T) -> i32 {"
msgstr ""
"// Syntactic sugar for:\n"
"// fn add_42_millions>(x: T) -> i32 {\n"
@@ -5937,61 +5627,59 @@ msgstr "\"debuggable: {debuggable:?}\""
#: src/generics/impl-trait.md
#, fuzzy
msgid ""
-"`impl Trait` allows you to work with types which you cannot name. The "
-"meaning of `impl Trait` is a bit different in the different positions."
+"`impl Trait` allows you to work with types which you cannot name. The meaning of `impl "
+"Trait` is a bit different in the different positions."
msgstr "`impl Trait` 的意义因使用位置而略有不同。"
#: src/generics/impl-trait.md
msgid ""
-"For a parameter, `impl Trait` is like an anonymous generic parameter with a "
-"trait bound."
+"For a parameter, `impl Trait` is like an anonymous generic parameter with a trait bound."
msgstr "对形参来说,`impl Trait` 就像是具有特征边界的匿名泛型形参。"
#: src/generics/impl-trait.md
msgid ""
-"For a return type, it means that the return type is some concrete type that "
-"implements the trait, without naming the type. This can be useful when you "
-"don't want to expose the concrete type in a public API."
+"For a return type, it means that the return type is some concrete type that implements "
+"the trait, without naming the type. This can be useful when you don't want to expose the "
+"concrete type in a public API."
msgstr ""
-"对返回值类型来说,它则意味着返回值类型就是实现该特征的某具体类型, 无需为该类"
-"型命名。如果您不想在公共 API 中公开该具体类型,便可 使用此方法。"
+"对返回值类型来说,它则意味着返回值类型就是实现该特征的某具体类型, 无需为该类型命名。如果"
+"您不想在公共 API 中公开该具体类型,便可 使用此方法。"
#: src/generics/impl-trait.md
msgid ""
-"Inference is hard in return position. A function returning `impl Foo` picks "
-"the concrete type it returns, without writing it out in the source. A "
-"function returning a generic type like `collect() -> B` can return any "
-"type satisfying `B`, and the caller may need to choose one, such as with "
-"`let x: Vec<_> = foo.collect()` or with the turbofish, `foo.collect::"
-">()`."
+"Inference is hard in return position. A function returning `impl Foo` picks the concrete "
+"type it returns, without writing it out in the source. A function returning a generic "
+"type like `collect() -> B` can return any type satisfying `B`, and the caller may "
+"need to choose one, such as with `let x: Vec<_> = foo.collect()` or with the turbofish, "
+"`foo.collect::>()`."
msgstr ""
-"在返回位置处进行推断有一定难度。会返回 `impl Foo` 的函数会挑选 自身返回的具体"
-"类型,而不必在来源中写出此信息。会返回 泛型类型(例如 `collect() -> B`)的"
-"函数则可返回符合 `B` 的任何类型,而调用方可能需要选择一个类型,例如使用 `let "
-"x: Vec<_> = foo.collect()` 或使用以下 Turbofish:`foo.collect::>()`。"
+"在返回位置处进行推断有一定难度。会返回 `impl Foo` 的函数会挑选 自身返回的具体类型,而不必"
+"在来源中写出此信息。会返回 泛型类型(例如 `collect() -> B`)的函数则可返回符合 `B` 的"
+"任何类型,而调用方可能需要选择一个类型,例如使用 `let x: Vec<_> = foo.collect()` 或使用以"
+"下 Turbofish:`foo.collect::>()`。"
#: src/generics/impl-trait.md
msgid ""
-"What is the type of `debuggable`? Try `let debuggable: () = ..` to see what "
-"the error message shows."
+"What is the type of `debuggable`? Try `let debuggable: () = ..` to see what the error "
+"message shows."
msgstr ""
-"`debuggable` 是什么类型?尝试输入 `let debuggable: () = ..`,查看会显示什么错"
-"误消息。"
+"`debuggable` 是什么类型?尝试输入 `let debuggable: () = ..`,查看会显示什么错误消息。"
#: src/generics/exercise.md
msgid ""
-"In this short exercise, you will implement a generic `min` function that "
-"determines the minimum of two values, using a `LessThan` trait."
+"In this short exercise, you will implement a generic `min` function that determines the "
+"minimum of two values, using a `LessThan` trait."
msgstr ""
-"在这个简短的练习中,您将使用 `LessThan` trait,实现一个通用 `min` 函数,用于"
-"确定两个值中的最小值。"
+"在这个简短的练习中,您将使用 `LessThan` trait,实现一个通用 `min` 函数,用于确定两个值中"
+"的最小值。"
#: src/generics/exercise.md src/generics/solution.md
msgid "/// Return true if self is less than other.\n"
msgstr "/// Return true if self is less than other.\n"
#: src/generics/exercise.md
-msgid "// TODO: implement the `min` function used in `main`.\n"
+#, fuzzy
+msgid "// TODO: implement the `min` function used in `main`."
msgstr "// TODO: implement the `min` function used in `main`.\n"
#: src/generics/exercise.md src/generics/solution.md
@@ -6010,6 +5698,10 @@ msgstr ""
msgid "[Standard Library Traits](./std-traits.md) (1 hour and 40 minutes)"
msgstr ""
+#: src/welcome-day-2-afternoon.md
+msgid "Including 10 minute breaks, this session should take about 3 hours"
+msgstr ""
+
#: src/std-types.md
msgid "[Standard Library](./std-types/std.md) (3 minutes)"
msgstr ""
@@ -6042,53 +5734,48 @@ msgstr ""
msgid "[Exercise: Counter](./std-types/exercise.md) (10 minutes)"
msgstr ""
-#: src/std-types.md src/memory-management.md src/slices-and-lifetimes.md
+#: src/std-types.md src/slices-and-lifetimes.md
msgid "This segment should take about 1 hour and 10 minutes"
msgstr ""
#: src/std-types.md
msgid ""
-"For each of the slides in this section, spend some time reviewing the "
-"documentation pages, highlighting some of the more common methods."
-msgstr ""
-"对于本部分的每张幻灯片,请花些时间仔细阅读文档页面,重点了解一些较为常用的方"
-"法。"
+"For each of the slides in this section, spend some time reviewing the documentation "
+"pages, highlighting some of the more common methods."
+msgstr "对于本部分的每张幻灯片,请花些时间仔细阅读文档页面,重点了解一些较为常用的方法。"
#: src/std-types/std.md
#, fuzzy
msgid ""
-"Rust comes with a standard library which helps establish a set of common "
-"types used by Rust libraries and programs. This way, two libraries can work "
-"together smoothly because they both use the same `String` type."
+"Rust comes with a standard library which helps establish a set of common types used by "
+"Rust libraries and programs. This way, two libraries can work together smoothly because "
+"they both use the same `String` type."
msgstr ""
-"Rust 附带一个标准库,此库有助于建立一个供 Rust 库和程序 使用的常用类型集。这"
-"样一来,两个库便可顺畅地搭配运作, 因为它们使用相同的 `String` 类型。"
+"Rust 附带一个标准库,此库有助于建立一个供 Rust 库和程序 使用的常用类型集。这样一来,两个"
+"库便可顺畅地搭配运作, 因为它们使用相同的 `String` 类型。"
#: src/std-types/std.md
#, fuzzy
msgid ""
-"In fact, Rust contains several layers of the Standard Library: `core`, "
-"`alloc` and `std`."
+"In fact, Rust contains several layers of the Standard Library: `core`, `alloc` and `std`."
msgstr "Rust 实际上含有多个层级的标准库,分别是 `core`、`alloc` 和 `std`。"
#: src/std-types/std.md
#, fuzzy
msgid ""
-"`core` includes the most basic types and functions that don't depend on "
-"`libc`, allocator or even the presence of an operating system."
+"`core` includes the most basic types and functions that don't depend on `libc`, "
+"allocator or even the presence of an operating system."
msgstr ""
-"`core` 包括最基本的类型与函数,这些类型与函数不依赖于 `libc`、分配器 或是否存"
-"在操作系统。"
+"`core` 包括最基本的类型与函数,这些类型与函数不依赖于 `libc`、分配器 或是否存在操作系统。"
#: src/std-types/std.md
msgid ""
-"`alloc` includes types which require a global heap allocator, such as `Vec`, "
-"`Box` and `Arc`."
+"`alloc` includes types which require a global heap allocator, such as `Vec`, `Box` and "
+"`Arc`."
msgstr "`alloc` 包括需要全局堆分配器的类型,例如 `Vec`、`Box` 和 `Arc`。"
#: src/std-types/std.md
-msgid ""
-"Embedded Rust applications often only use `core`, and sometimes `alloc`."
+msgid "Embedded Rust applications often only use `core`, and sometimes `alloc`."
msgstr "嵌入式 Rust 应用通常只使用 `core`,偶尔会使用 `alloc`。"
#: src/std-types/docs.md
@@ -6099,82 +5786,77 @@ msgstr "Rust 附带有大量关于该语言和标准库的文档。"
#: src/std-types/docs.md
#, fuzzy
msgid ""
-"All of the details about [loops](https://doc.rust-lang.org/stable/reference/"
-"expressions/loop-expr.html)."
+"All of the details about [loops](https://doc.rust-lang.org/stable/reference/expressions/"
+"loop-expr.html)."
msgstr ""
-"如果你想提前退出循环,请使用 [`break`](https://doc.rust-lang.org/reference/"
-"expressions/loop-expr.html#break-expressions),"
+"如果你想提前退出循环,请使用 [`break`](https://doc.rust-lang.org/reference/expressions/"
+"loop-expr.html#break-expressions),"
#: src/std-types/docs.md
msgid ""
-"Primitive types like [`u8`](https://doc.rust-lang.org/stable/std/primitive."
-"u8.html)."
-msgstr ""
-"['u8'](https://doc.rust-lang.org/stable/std/primitive.u8.html) 等基元类型。"
+"Primitive types like [`u8`](https://doc.rust-lang.org/stable/std/primitive.u8.html)."
+msgstr "['u8'](https://doc.rust-lang.org/stable/std/primitive.u8.html) 等基元类型。"
#: src/std-types/docs.md
#, fuzzy
msgid ""
-"Standard library types like [`Option`](https://doc.rust-lang.org/stable/std/"
-"option/enum.Option.html) or [`BinaryHeap`](https://doc.rust-lang.org/stable/"
-"std/collections/struct.BinaryHeap.html)."
+"Standard library types like [`Option`](https://doc.rust-lang.org/stable/std/option/enum."
+"Option.html) or [`BinaryHeap`](https://doc.rust-lang.org/stable/std/collections/struct."
+"BinaryHeap.html)."
msgstr ""
-"[“str”](https://doc.rust-lang.org/std/primitive.str.html)和[“String”]"
-"(https://doc.rust-lang.org/std/string/struct.String.html)"
+"[“str”](https://doc.rust-lang.org/std/primitive.str.html)和[“String”](https://doc.rust-"
+"lang.org/std/string/struct.String.html)"
#: src/std-types/docs.md
msgid "In fact, you can document your own code:"
msgstr "事实上,您可以为自己的代码编写文档:"
#: src/std-types/docs.md
-msgid ""
-"/// Determine whether the first argument is divisible by the second "
-"argument.\n"
-"///\n"
-"/// If the second argument is zero, the result is false.\n"
+#, fuzzy
+msgid "/// Determine whether the first argument is divisible by the second argument."
msgstr ""
-"/// Determine whether the first argument is divisible by the second "
-"argument.\n"
+"/// Determine whether the first argument is divisible by the second argument.\n"
"///\n"
"/// If the second argument is zero, the result is false.\n"
+#: src/std-types/docs.md src/testing/other.md src/unsafe-rust/unsafe-functions.md
+#, fuzzy
+msgid "///"
+msgstr "//\n"
+
+#: src/std-types/docs.md
+msgid "/// If the second argument is zero, the result is false."
+msgstr ""
+
#: src/std-types/docs.md
#, fuzzy
msgid ""
"The contents are treated as Markdown. All published Rust library crates are "
-"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]"
-"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is "
-"idiomatic to document all public items in an API using this pattern."
+"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc](https://doc."
+"rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is idiomatic to document all public "
+"items in an API using this pattern."
msgstr ""
-"文档的内容会被当做 Markdown 处理。所有已发布 Rust 库 crate 都会自动被"
-"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) 工具在 "
-"[`docs.rs`](https://docs.rs)存档。 按照这种方式来为 API 中的所有公开项编写文"
-"档是 Rust 中惯用的做法。"
+"文档的内容会被当做 Markdown 处理。所有已发布 Rust 库 crate 都会自动被[rustdoc](https://"
+"doc.rust-lang.org/rustdoc/what-is-rustdoc.html) 工具在 [`docs.rs`](https://docs.rs)存"
+"档。 按照这种方式来为 API 中的所有公开项编写文档是 Rust 中惯用的做法。"
#: src/std-types/docs.md
msgid ""
-"To document an item from inside the item (such as inside a module), use `//!"
-"` or `/*! .. */`, called \"inner doc comments\":"
+"To document an item from inside the item (such as inside a module), use `//!` or `/*! .. "
+"*/`, called \"inner doc comments\":"
msgstr ""
-"如需从项内(例如在模块内)为项编写文档,请使用 `//!` 或 `/*! .. */`,这称"
-"为“内部文档注释”:"
+"如需从项内(例如在模块内)为项编写文档,请使用 `//!` 或 `/*! .. */`,这称为“内部文档注"
+"释”:"
#: src/std-types/docs.md
-msgid ""
-"//! This module contains functionality relating to divisibility of "
-"integers.\n"
-msgstr ""
-"//! This module contains functionality relating to divisibility of "
-"integers.\n"
+#, fuzzy
+msgid "//! This module contains functionality relating to divisibility of integers."
+msgstr "//! This module contains functionality relating to divisibility of integers.\n"
#: src/std-types/docs.md
#, fuzzy
-msgid ""
-"Show students the generated docs for the `rand` crate at ."
-msgstr ""
-"向学生展示在 [`docs.rs/rand`](https://docs.rs/rand) 中为 `rand` crate 生成的"
-"文档。"
+msgid "Show students the generated docs for the `rand` crate at ."
+msgstr "向学生展示在 [`docs.rs/rand`](https://docs.rs/rand) 中为 `rand` crate 生成的文档。"
#: src/std-types/option.md
#, fuzzy
@@ -6183,13 +5865,13 @@ msgstr "异常"
#: src/std-types/option.md
msgid ""
-"We have already seen some use of `Option`. It stores either a value of "
-"type `T` or nothing. For example, [`String::find`](https://doc.rust-lang.org/"
-"stable/std/string/struct.String.html#method.find) returns an `Option`."
+"We have already seen some use of `Option`. It stores either a value of type `T` or "
+"nothing. For example, [`String::find`](https://doc.rust-lang.org/stable/std/string/"
+"struct.String.html#method.find) returns an `Option`."
msgstr ""
-"我们已经了解了 `Option` 的一些用法。它可以存储“T”类型的值,或者不存储任何"
-"值。例如,['String::find'](https://doc.rust-lang.org/stable/std/string/"
-"struct.String.html#method.find) 会返回 `Option`。"
+"我们已经了解了 `Option` 的一些用法。它可以存储“T”类型的值,或者不存储任何值。例如,"
+"['String::find'](https://doc.rust-lang.org/stable/std/string/struct.String.html#method."
+"find) 会返回 `Option`。"
#: src/std-types/option.md
msgid "\"Löwe 老虎 Léopard Gepardi\""
@@ -6218,30 +5900,26 @@ msgstr "`Option` 和 `Result` 的使用范围很广,不局限于标准库。"
#: src/std-types/option.md
msgid ""
-"`unwrap` will return the value in an `Option`, or panic. `expect` is similar "
-"but takes an error message."
+"`unwrap` will return the value in an `Option`, or panic. `expect` is similar but takes "
+"an error message."
msgstr ""
-"`unwrap` 会返回 `Option` 或 panic 中的值。`expect` 方法与此类似,但其使用错误"
-"消息。"
+"`unwrap` 会返回 `Option` 或 panic 中的值。`expect` 方法与此类似,但其使用错误消息。"
#: src/std-types/option.md
-msgid ""
-"You can panic on None, but you can't \"accidentally\" forget to check for "
-"None."
+msgid "You can panic on None, but you can't \"accidentally\" forget to check for None."
msgstr "出现 None 时您或许会恐慌,但不能 “无意中”忘记检查是否为 None 的情况。"
#: src/std-types/option.md
msgid ""
-"It's common to `unwrap`/`expect` all over the place when hacking something "
-"together, but production code typically handles `None` in a nicer fashion."
+"It's common to `unwrap`/`expect` all over the place when hacking something together, but "
+"production code typically handles `None` in a nicer fashion."
msgstr ""
-"在草拟阶段的编程中,频繁使用 `unwrap`/`expect` 进行处理十分常见,但在正式版代"
-"码时,通常以更为妥当的方式处理 `None` 的情况。"
+"在草拟阶段的编程中,频繁使用 `unwrap`/`expect` 进行处理十分常见,但在正式版代码时,通常以"
+"更为妥当的方式处理 `None` 的情况。"
#: src/std-types/option.md
msgid ""
-"The niche optimization means that `Option` often has the same size in "
-"memory as `T`."
+"The niche optimization means that `Option` often has the same size in memory as `T`."
msgstr "小众优化意味着 `Option` 在内存中的大小通常与 `T` 相同。"
#: src/std-types/result.md
@@ -6250,14 +5928,14 @@ msgstr "Result"
#: src/std-types/result.md
msgid ""
-"`Result` is similar to `Option`, but indicates the success or failure of an "
-"operation, each with a different type. This is similar to the `Res` defined "
-"in the expression exercise, but generic: `Result` where `T` is used in "
-"the `Ok` variant and `E` appears in the `Err` variant."
+"`Result` is similar to `Option`, but indicates the success or failure of an operation, "
+"each with a different type. This is similar to the `Res` defined in the expression "
+"exercise, but generic: `Result` where `T` is used in the `Ok` variant and `E` "
+"appears in the `Err` variant."
msgstr ""
-"`Result` 与 `Option` 相似,但表示操作成功或失败,且每个操作的类型不同。这类似"
-"于表达式练习中定义的 `Res`,但是一个泛型:`Result`,其中 `T` 用于 `Ok` "
-"变体,`E` 出现在 `Err` 变体中。"
+"`Result` 与 `Option` 相似,但表示操作成功或失败,且每个操作的类型不同。这类似于表达式练习"
+"中定义的 `Res`,但是一个泛型:`Result`,其中 `T` 用于 `Ok` 变体,`E` 出现在 `Err` "
+"变体中。"
#: src/std-types/result.md
msgid "\"diary.txt\""
@@ -6277,29 +5955,27 @@ msgstr "\"The diary could not be opened: {err}\""
#: src/std-types/result.md
msgid ""
-"As with `Option`, the successful value sits inside of `Result`, forcing the "
-"developer to explicitly extract it. This encourages error checking. In the "
-"case where an error should never happen, `unwrap()` or `expect()` can be "
-"called, and this is a signal of the developer intent too."
+"As with `Option`, the successful value sits inside of `Result`, forcing the developer to "
+"explicitly extract it. This encourages error checking. In the case where an error should "
+"never happen, `unwrap()` or `expect()` can be called, and this is a signal of the "
+"developer intent too."
msgstr ""
-"与 `Option` 方法相同,成功值位于 `Result` 方法内部, 开发者必须显示提取成功"
-"值。因此,建议进行错误检查。在绝不应出现错误的情况下, 可以调用 `unwrap()` "
-"或 `expect()` 方法,这也是一种开发者意向信号。"
+"与 `Option` 方法相同,成功值位于 `Result` 方法内部, 开发者必须显示提取成功值。因此,建议"
+"进行错误检查。在绝不应出现错误的情况下, 可以调用 `unwrap()` 或 `expect()` 方法,这也是一"
+"种开发者意向信号。"
#: src/std-types/result.md
#, fuzzy
msgid ""
-"`Result` documentation is a recommended read. Not during the course, but it "
-"is worth mentioning. It contains a lot of convenience methods and functions "
-"that help functional-style programming."
+"`Result` documentation is a recommended read. Not during the course, but it is worth "
+"mentioning. It contains a lot of convenience methods and functions that help functional-"
+"style programming."
msgstr ""
-"我们建议阅读 `Result` 文档。虽然课程中不会涉及该文档,但是有必要提到它。 该文"
-"档中包含许多便捷的方法和函数,对于函数式编程很有帮助。"
+"我们建议阅读 `Result` 文档。虽然课程中不会涉及该文档,但是有必要提到它。 该文档中包含许多"
+"便捷的方法和函数,对于函数式编程很有帮助。"
#: src/std-types/result.md
-msgid ""
-"`Result` is the standard type to implement error handling as we will see on "
-"Day 3."
+msgid "`Result` is the standard type to implement error handling as we will see on Day 3."
msgstr "`Result` 是用于实现错误处理的标准类型,我们将在第 3 天的课程中介绍。"
#: src/std-types/string.md
@@ -6308,15 +5984,14 @@ msgstr "String"
#: src/std-types/string.md
msgid ""
-"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is the "
-"standard heap-allocated growable UTF-8 string buffer:"
+"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is the standard heap-"
+"allocated growable UTF-8 string buffer:"
msgstr ""
-"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) 是标准堆"
-"分配的可扩容 UTF-8 字符串缓冲区:"
+"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) 是标准堆分配的可扩容 "
+"UTF-8 字符串缓冲区:"
-#: src/std-types/string.md src/std-traits/read-and-write.md
-#: src/memory-management/review.md src/testing/unit-tests.md
-#: src/concurrency/scoped-threads.md
+#: src/std-types/string.md src/std-traits/read-and-write.md src/memory-management/review.md
+#: src/testing/unit-tests.md src/concurrency/scoped-threads.md
#, fuzzy
msgid "\"Hello\""
msgstr "\"Hello\""
@@ -6343,68 +6018,58 @@ msgstr "\"s3: len = {}, number of chars = {}\""
#: src/std-types/string.md
msgid ""
-"`String` implements [`Deref`](https://doc.rust-lang.org/std/"
-"string/struct.String.html#deref-methods-str), which means that you can call "
-"all `str` methods on a `String`."
+"`String` implements [`Deref`](https://doc.rust-lang.org/std/string/struct."
+"String.html#deref-methods-str), which means that you can call all `str` methods on a "
+"`String`."
msgstr ""
-"`String` 会实现 [`Deref`](https://doc.rust-lang.org/std/string/"
-"struct.String.html#deref-methods-str),这意味着您可以 对 `String` 调用所有 "
-"`str` 方法。"
+"`String` 会实现 [`Deref`](https://doc.rust-lang.org/std/string/struct."
+"String.html#deref-methods-str),这意味着您可以 对 `String` 调用所有 `str` 方法。"
#: src/std-types/string.md
msgid ""
-"`String::new` returns a new empty string, use `String::with_capacity` when "
-"you know how much data you want to push to the string."
+"`String::new` returns a new empty string, use `String::with_capacity` when you know how "
+"much data you want to push to the string."
msgstr ""
-"“String::new”会返回一个新的空字符串,如果您知道自己想要推送到字符串的数据量,"
-"请使用“String::with_capacity”。"
+"“String::new”会返回一个新的空字符串,如果您知道自己想要推送到字符串的数据量,请使"
+"用“String::with_capacity”。"
#: src/std-types/string.md
msgid ""
-"`String::len` returns the size of the `String` in bytes (which can be "
-"different from its length in characters)."
-msgstr ""
-"“String::len”会返回“String”的大小(以字节为单位,可能不同于以字符为单位的长"
-"度)。"
+"`String::len` returns the size of the `String` in bytes (which can be different from its "
+"length in characters)."
+msgstr "“String::len”会返回“String”的大小(以字节为单位,可能不同于以字符为单位的长度)。"
#: src/std-types/string.md
msgid ""
-"`String::chars` returns an iterator over the actual characters. Note that a "
-"`char` can be different from what a human will consider a \"character\" due "
-"to [grapheme clusters](https://docs.rs/unicode-segmentation/latest/"
-"unicode_segmentation/struct.Graphemes.html)."
+"`String::chars` returns an iterator over the actual characters. Note that a `char` can "
+"be different from what a human will consider a \"character\" due to [grapheme clusters]"
+"(https://docs.rs/unicode-segmentation/latest/unicode_segmentation/struct.Graphemes.html)."
msgstr ""
-"“String::chars”会针对实际字符返回一个迭代器。请注意,由于[字素簇](https://"
-"docs.rs/unicode-segmentation/latest/unicode_segmentation/struct.Graphemes."
-"html),“char”可能与人们所认为的“字符”有所不同。"
+"“String::chars”会针对实际字符返回一个迭代器。请注意,由于[字素簇](https://docs.rs/"
+"unicode-segmentation/latest/unicode_segmentation/struct.Graphemes.html),“char”可能与人们"
+"所认为的“字符”有所不同。"
#: src/std-types/string.md
-msgid ""
-"When people refer to strings they could either be talking about `&str` or "
-"`String`."
+msgid "When people refer to strings they could either be talking about `&str` or `String`."
msgstr "当人们提到字符串时,可能是指“&str”或“String”。"
#: src/std-types/string.md
msgid ""
-"When a type implements `Deref`, the compiler will let you "
-"transparently call methods from `T`."
-msgstr ""
-"当某个类型实现“Deref\\”时,编译器会让您以公开透明方式从“T”调用方"
-"法。"
+"When a type implements `Deref`, the compiler will let you transparently call "
+"methods from `T`."
+msgstr "当某个类型实现“Deref\\”时,编译器会让您以公开透明方式从“T”调用方法。"
#: src/std-types/string.md
msgid ""
-"We haven't discussed the `Deref` trait yet, so at this point this mostly "
-"explains the structure of the sidebar in the documentation."
+"We haven't discussed the `Deref` trait yet, so at this point this mostly explains the "
+"structure of the sidebar in the documentation."
msgstr "我们尚未讨论过 `Deref` trait,所以本部分目前主要介绍文档中边栏的结构。"
#: src/std-types/string.md
msgid ""
-"`String` implements `Deref` which transparently gives it "
-"access to `str`'s methods."
-msgstr ""
-"“String”会实现“Deref\\”,后者可公开透明地授予其访问“str”方法的"
-"权限。"
+"`String` implements `Deref` which transparently gives it access to `str`'s "
+"methods."
+msgstr "“String”会实现“Deref\\”,后者可公开透明地授予其访问“str”方法的权限。"
#: src/std-types/string.md
#, fuzzy
@@ -6413,12 +6078,12 @@ msgstr "写下并比较“let s3 = s1.deref();”和“let s3 = &\\*s1;”。"
#: src/std-types/string.md
msgid ""
-"`String` is implemented as a wrapper around a vector of bytes, many of the "
-"operations you see supported on vectors are also supported on `String`, but "
-"with some extra guarantees."
+"`String` is implemented as a wrapper around a vector of bytes, many of the operations "
+"you see supported on vectors are also supported on `String`, but with some extra "
+"guarantees."
msgstr ""
-"“String”是作为字节矢量的封装容器实现的,矢量上支持的许多操作在“String”上也受"
-"支持,但有一些额外保证。"
+"“String”是作为字节矢量的封装容器实现的,矢量上支持的许多操作在“String”上也受支持,但有一"
+"些额外保证。"
#: src/std-types/string.md
msgid "Compare the different ways to index a `String`:"
@@ -6426,24 +6091,30 @@ msgstr "比较将“String”编入索引的不同方式:"
#: src/std-types/string.md
msgid ""
-"To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, "
-"out-of-bounds."
+"To a character by using `s3.chars().nth(i).unwrap()` where `i` is in-bound, out-of-"
+"bounds."
msgstr "使用“s3.chars().nth(i).unwrap()”转换为字符,其中“i”代表是否出界。"
#: src/std-types/string.md
msgid ""
-"To a substring by using `s3[0..4]`, where that slice is on character "
-"boundaries or not."
+"To a substring by using `s3[0..4]`, where that slice is on character boundaries or not."
+msgstr "通过使用“s3\\[0..4\\]”转换为子字符串,其中该 Slice 在或不在字符边界上。"
+
+#: src/std-types/string.md
+msgid ""
+"Many types can be converted to a string with the [`to_string`](https://doc.rust-lang.org/"
+"std/string/trait.ToString.html#tymethod.to_string) method. This trait is automatically "
+"implemented for all types that implement `Display`, so anything that can be formatted "
+"can also be converted to a string."
msgstr ""
-"通过使用“s3\\[0..4\\]”转换为子字符串,其中该 Slice 在或不在字符边界上。"
#: src/std-types/vec.md
msgid ""
-"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard "
-"resizable heap-allocated buffer:"
+"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard resizable "
+"heap-allocated buffer:"
msgstr ""
-"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) 是标准的可调整大小"
-"堆分配缓冲区:"
+"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) 是标准的可调整大小堆分配缓冲"
+"区:"
#: src/std-types/vec.md
msgid "\"v1: len = {}, capacity = {}\""
@@ -6454,11 +6125,13 @@ msgid "\"v2: len = {}, capacity = {}\""
msgstr "\"v2: len = {}, capacity = {}\""
#: src/std-types/vec.md
-msgid "// Canonical macro to initialize a vector with elements.\n"
+#, fuzzy
+msgid "// Canonical macro to initialize a vector with elements."
msgstr "// Canonical macro to initialize a vector with elements.\n"
#: src/std-types/vec.md
-msgid "// Retain only the even elements.\n"
+#, fuzzy
+msgid "// Retain only the even elements."
msgstr "// Retain only the even elements.\n"
#: src/std-types/vec.md
@@ -6466,65 +6139,62 @@ msgid "\"{v3:?}\""
msgstr "\"{v3:?}\""
#: src/std-types/vec.md
-msgid "// Remove consecutive duplicates.\n"
+#, fuzzy
+msgid "// Remove consecutive duplicates."
msgstr "// Remove consecutive duplicates.\n"
#: src/std-types/vec.md
msgid ""
-"`Vec` implements [`Deref`](https://doc.rust-lang.org/std/vec/"
-"struct.Vec.html#deref-methods-%5BT%5D), which means that you can call slice "
-"methods on a `Vec`."
+"`Vec` implements [`Deref`](https://doc.rust-lang.org/std/vec/struct.Vec."
+"html#deref-methods-%5BT%5D), which means that you can call slice methods on a `Vec`."
msgstr ""
-"`Vec` 会实现 [`Deref`](https://doc.rust-lang.org/std/vec/"
-"struct.Vec.html#deref-methods-%5BT%5D),这意味着您可以对 `Vec` 调用 slice 方"
-"法。"
+"`Vec` 会实现 [`Deref`](https://doc.rust-lang.org/std/vec/struct.Vec."
+"html#deref-methods-%5BT%5D),这意味着您可以对 `Vec` 调用 slice 方法。"
#: src/std-types/vec.md
#, fuzzy
msgid ""
-"`Vec` is a type of collection, along with `String` and `HashMap`. The data "
-"it contains is stored on the heap. This means the amount of data doesn't "
-"need to be known at compile time. It can grow or shrink at runtime."
+"`Vec` is a type of collection, along with `String` and `HashMap`. The data it contains "
+"is stored on the heap. This means the amount of data doesn't need to be known at compile "
+"time. It can grow or shrink at runtime."
msgstr ""
-"“Vec”以及“String”和“HashMap”都是一种集合。它包含的数据会存储在堆上。这意味着"
-"在编译时不需要知道数据量。它可以在运行时增大或缩小。"
+"“Vec”以及“String”和“HashMap”都是一种集合。它包含的数据会存储在堆上。这意味着在编译时不需"
+"要知道数据量。它可以在运行时增大或缩小。"
#: src/std-types/vec.md
#, fuzzy
msgid ""
-"Notice how `Vec` is a generic type too, but you don't have to specify `T` "
-"explicitly. As always with Rust type inference, the `T` was established "
-"during the first `push` call."
+"Notice how `Vec` is a generic type too, but you don't have to specify `T` explicitly. "
+"As always with Rust type inference, the `T` was established during the first `push` call."
msgstr ""
"请注意,“Vec\n"
"\n"
-"”也是一种泛型,但您不必明确指定“T”。和往常的 Rust 类别推断一样,系统会在第一"
-"次“push”调用期间建立“T”。"
+"”也是一种泛型,但您不必明确指定“T”。和往常的 Rust 类别推断一样,系统会在第一次“push”调用"
+"期间建立“T”。"
#: src/std-types/vec.md
msgid ""
-"`vec![...]` is a canonical macro to use instead of `Vec::new()` and it "
-"supports adding initial elements to the vector."
-msgstr ""
-"“vec![...\\]”是用来代替“Vec::new()”的规范化宏,它支持向矢量添加初始元素。"
+"`vec![...]` is a canonical macro to use instead of `Vec::new()` and it supports adding "
+"initial elements to the vector."
+msgstr "“vec![...\\]”是用来代替“Vec::new()”的规范化宏,它支持向矢量添加初始元素。"
#: src/std-types/vec.md
msgid ""
"To index the vector you use `[` `]`, but they will panic if out of bounds. "
-"Alternatively, using `get` will return an `Option`. The `pop` function will "
-"remove the last element."
+"Alternatively, using `get` will return an `Option`. The `pop` function will remove the "
+"last element."
msgstr ""
-"如需将矢量编入索引,您可以使用“\\[’ ‘\\]”方法,但如果超出边界,矢量将会 "
-"panic。此外,使用“get”将返回“Option”。“pop”函数会移除最后一个元素。"
+"如需将矢量编入索引,您可以使用“\\[’ ‘\\]”方法,但如果超出边界,矢量将会 panic。此外,使"
+"用“get”将返回“Option”。“pop”函数会移除最后一个元素。"
#: src/std-types/vec.md
#, fuzzy
msgid ""
-"Slices are covered on day 3. For now, students only need to know that a "
-"value of type `Vec` gives access to all of the documented slice methods, too."
+"Slices are covered on day 3. For now, students only need to know that a value of type "
+"`Vec` gives access to all of the documented slice methods, too."
msgstr ""
-"第 3 天会介绍 slice。目前,学生只需知道使用 `Vec` 类型的值也可访问所有已载明"
-"的只读 slice 方法。"
+"第 3 天会介绍 slice。目前,学生只需知道使用 `Vec` 类型的值也可访问所有已载明的只读 slice "
+"方法。"
#: src/std-types/hashmap.md
msgid "Standard hash map with protection against HashDoS attacks:"
@@ -6563,7 +6233,8 @@ msgid "\"{book} is unknown.\""
msgstr "\"{book} is unknown.\""
#: src/std-types/hashmap.md
-msgid "// Use the .entry() method to insert a value if nothing is found.\n"
+#, fuzzy
+msgid "// Use the .entry() method to insert a value if nothing is found."
msgstr "// Use the .entry() method to insert a value if nothing is found.\n"
#: src/std-types/hashmap.md
@@ -6571,18 +6242,17 @@ msgid "\"{page_counts:#?}\""
msgstr "\"{page_counts:#?}\""
#: src/std-types/hashmap.md
-msgid ""
-"`HashMap` is not defined in the prelude and needs to be brought into scope."
+msgid "`HashMap` is not defined in the prelude and needs to be brought into scope."
msgstr "“HashMap”未在序言中定义,因此需要纳入范围中。"
#: src/std-types/hashmap.md
msgid ""
-"Try the following lines of code. The first line will see if a book is in the "
-"hashmap and if not return an alternative value. The second line will insert "
-"the alternative value in the hashmap if the book is not found."
+"Try the following lines of code. The first line will see if a book is in the hashmap and "
+"if not return an alternative value. The second line will insert the alternative value in "
+"the hashmap if the book is not found."
msgstr ""
-"请尝试使用以下代码行。第一行将查看图书是否在 hashmap 中;如果不在,则返回替代"
-"值。如果未找到图书,第二行会在 hashmap 中插入替代值。"
+"请尝试使用以下代码行。第一行将查看图书是否在 hashmap 中;如果不在,则返回替代值。如果未找"
+"到图书,第二行会在 hashmap 中插入替代值。"
#: src/std-types/hashmap.md
msgid "\"Harry Potter and the Sorcerer's Stone\""
@@ -6598,96 +6268,93 @@ msgstr "遗憾的是,与“vec!”不同,不存在标准的“hashmap!”宏
#: src/std-types/hashmap.md
msgid ""
-"Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`](https://"
-"doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#impl-"
-"From%3C%5B(K,+V);+N%5D%3E-for-HashMap%3CK,+V,+RandomState%3E), which allows "
-"us to easily initialize a hash map from a literal array:"
+"Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`](https://doc.rust-"
+"lang.org/std/collections/hash_map/struct.HashMap.html#impl-From%3C%5B(K,+V);+N%5D%3E-for-"
+"HashMap%3CK,+V,+RandomState%3E), which allows us to easily initialize a hash map from a "
+"literal array:"
msgstr ""
-"不过,从 Rust 1.56 开始,HashMap 实现了[“From\\<\\[(K, V); N\\]\\>”](https://"
-"doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#impl-"
-"From%3C%5B(K,+V);+N%5D%3E-for-HashMap%3CK,+V,+RandomState%3E),让我们能够轻松"
-"地从字面量数组初始化哈希映射:"
+"不过,从 Rust 1.56 开始,HashMap 实现了[“From\\<\\[(K, V); N\\]\\>”](https://doc.rust-"
+"lang.org/std/collections/hash_map/struct.HashMap.html#impl-From%3C%5B(K,+V);+N%5D%3E-for-"
+"HashMap%3CK,+V,+RandomState%3E),让我们能够轻松地从字面量数组初始化哈希映射:"
#: src/std-types/hashmap.md
msgid ""
-"Alternatively HashMap can be built from any `Iterator` which yields key-"
-"value tuples."
+"Alternatively HashMap can be built from any `Iterator` which yields key-value tuples."
msgstr "或者,HashMap 也可以基于任何可生成键-值元组的“Iterator”进行构建。"
#: src/std-types/hashmap.md
msgid ""
-"We are showing `HashMap`, and avoid using `&str` as key to make "
-"examples easier. Using references in collections can, of course, be done, "
-"but it can lead into complications with the borrow checker."
+"We are showing `HashMap`, and avoid using `&str` as key to make examples "
+"easier. Using references in collections can, of course, be done, but it can lead into "
+"complications with the borrow checker."
msgstr ""
-"我们要展示“HashMap\\”,避免将“&str”用作键,以便简化示例。当然,"
-"可以在集合中使用引用,但可能会导致借用检查器出现复杂问题。"
+"我们要展示“HashMap\\”,避免将“&str”用作键,以便简化示例。当然,可以在集合中"
+"使用引用,但可能会导致借用检查器出现复杂问题。"
#: src/std-types/hashmap.md
msgid ""
-"Try removing `to_string()` from the example above and see if it still "
-"compiles. Where do you think we might run into issues?"
+"Try removing `to_string()` from the example above and see if it still compiles. Where do "
+"you think we might run into issues?"
msgstr ""
-"尝试从上述示例中移除“to_string()”,看看它是否仍可编译。您认为我们可能会在哪些"
-"方面遇到问题?"
+"尝试从上述示例中移除“to_string()”,看看它是否仍可编译。您认为我们可能会在哪些方面遇到问"
+"题?"
#: src/std-types/hashmap.md
msgid ""
-"This type has several \"method-specific\" return types, such as `std::"
-"collections::hash_map::Keys`. These types often appear in searches of the "
-"Rust docs. Show students the docs for this type, and the helpful link back "
-"to the `keys` method."
+"This type has several \"method-specific\" return types, such as `std::collections::"
+"hash_map::Keys`. These types often appear in searches of the Rust docs. Show students "
+"the docs for this type, and the helpful link back to the `keys` method."
msgstr ""
-"此类型具有几种特定于方法的返回值类型,例如“std::collections::hash_map::"
-"Keys”。这些类型通常会出现在 Rust 文档的搜索结果中。向学员展示此类型的文档,以"
-"及指向“keys”方法的实用链接。"
+"此类型具有几种特定于方法的返回值类型,例如“std::collections::hash_map::Keys”。这些类型通"
+"常会出现在 Rust 文档的搜索结果中。向学员展示此类型的文档,以及指向“keys”方法的实用链接。"
#: src/std-types/exercise.md
msgid ""
-"In this exercise you will take a very simple data structure and make it "
-"generic. It uses a [`std::collections::HashMap`](https://doc.rust-lang.org/"
-"stable/std/collections/struct.HashMap.html) to keep track of which values "
-"have been seen and how many times each one has appeared."
+"In this exercise you will take a very simple data structure and make it generic. It uses "
+"a [`std::collections::HashMap`](https://doc.rust-lang.org/stable/std/collections/struct."
+"HashMap.html) to keep track of which values have been seen and how many times each one "
+"has appeared."
msgstr ""
-"在本练习中,您将学习一个非常简单的数据结构,并将其变成泛型的。该结构使用 "
-"[`std::collections::HashMap`](https://doc.rust-lang.org/stable/std/"
-"collections/struct.HashMap.html) 来跟踪已经出现过的值以及每个值出现的次数。"
+"在本练习中,您将学习一个非常简单的数据结构,并将其变成泛型的。该结构使用 [`std::"
+"collections::HashMap`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap."
+"html) 来跟踪已经出现过的值以及每个值出现的次数。"
#: src/std-types/exercise.md
msgid ""
-"The initial version of `Counter` is hard coded to only work for `u32` "
-"values. Make the struct and its methods generic over the type of value being "
-"tracked, that way `Counter` can track any type of value."
+"The initial version of `Counter` is hard coded to only work for `u32` values. Make the "
+"struct and its methods generic over the type of value being tracked, that way `Counter` "
+"can track any type of value."
msgstr ""
-"`Counter` 的初始版本经过硬编码,仅适用于 `u32` 值。使结构体及其方法可用于所跟"
-"踪的值类型,以便 `Counter` 能够跟踪任何类型的值。"
+"`Counter` 的初始版本经过硬编码,仅适用于 `u32` 值。使结构体及其方法可用于所跟踪的值类型,"
+"以便 `Counter` 能够跟踪任何类型的值。"
#: src/std-types/exercise.md
msgid ""
-"If you finish early, try using the [`entry`](https://doc.rust-lang.org/"
-"stable/std/collections/struct.HashMap.html#method.entry) method to halve the "
-"number of hash lookups required to implement the `count` method."
+"If you finish early, try using the [`entry`](https://doc.rust-lang.org/stable/std/"
+"collections/struct.HashMap.html#method.entry) method to halve the number of hash lookups "
+"required to implement the `count` method."
msgstr ""
-"如果提前完成操作,请尝试使用 [`entry`](https://doc.rust-lang.org/stable/std/"
-"collections/struct.HashMap.html#method.entry) 方法将哈希查找次数减半,从而实"
-"现 `count` 方法。"
+"如果提前完成操作,请尝试使用 [`entry`](https://doc.rust-lang.org/stable/std/collections/"
+"struct.HashMap.html#method.entry) 方法将哈希查找次数减半,从而实现 `count` 方法。"
-#: src/std-types/exercise.md src/std-types/solution.md
-msgid ""
-"/// Counter counts the number of times each value of type T has been seen.\n"
-msgstr ""
-"/// Counter counts the number of times each value of type T has been seen.\n"
+#: src/std-types/exercise.md
+#, fuzzy
+msgid "/// Counter counts the number of times each value of type T has been seen."
+msgstr "/// Counter counts the number of times each value of type T has been seen.\n"
-#: src/std-types/exercise.md src/std-types/solution.md
-msgid "/// Create a new Counter.\n"
+#: src/std-types/exercise.md
+#, fuzzy
+msgid "/// Create a new Counter."
msgstr "/// Create a new Counter.\n"
-#: src/std-types/exercise.md src/std-types/solution.md
-msgid "/// Count an occurrence of the given value.\n"
+#: src/std-types/exercise.md
+#, fuzzy
+msgid "/// Count an occurrence of the given value."
msgstr "/// Count an occurrence of the given value.\n"
-#: src/std-types/exercise.md src/std-types/solution.md
-msgid "/// Return the number of times the given value has been seen.\n"
+#: src/std-types/exercise.md
+#, fuzzy
+msgid "/// Return the number of times the given value has been seen."
msgstr "/// Return the number of times the given value has been seen.\n"
#: src/std-types/exercise.md src/std-types/solution.md
@@ -6706,6 +6373,22 @@ msgstr "\"orange\""
msgid "\"got {} apples\""
msgstr "\"got {} apples\""
+#: src/std-types/solution.md
+msgid "/// Counter counts the number of times each value of type T has been seen.\n"
+msgstr "/// Counter counts the number of times each value of type T has been seen.\n"
+
+#: src/std-types/solution.md
+msgid "/// Create a new Counter.\n"
+msgstr "/// Create a new Counter.\n"
+
+#: src/std-types/solution.md
+msgid "/// Count an occurrence of the given value.\n"
+msgstr "/// Count an occurrence of the given value.\n"
+
+#: src/std-types/solution.md
+msgid "/// Return the number of times the given value has been seen.\n"
+msgstr "/// Return the number of times the given value has been seen.\n"
+
#: src/std-traits.md
msgid "[Comparisons](./std-traits/comparisons.md) (10 minutes)"
msgstr ""
@@ -6744,8 +6427,8 @@ msgstr ""
#: src/std-traits.md
msgid ""
-"As with the standard-library types, spend time reviewing the documentation "
-"for each trait."
+"As with the standard-library types, spend time reviewing the documentation for each "
+"trait."
msgstr "与标准库类型一样,请花些时间仔细阅读每个 trait 的文档。"
#: src/std-traits.md
@@ -6754,11 +6437,10 @@ msgstr "此部分内容较长。中途可休息一下。"
#: src/std-traits/comparisons.md
msgid ""
-"These traits support comparisons between values. All traits can be derived "
-"for types containing fields that implement these traits."
+"These traits support comparisons between values. All traits can be derived for types "
+"containing fields that implement these traits."
msgstr ""
-"这些 trait 支持在值之间进行比较。对于包含实现这些 trait 的字段,可以派生所有"
-"这些 trait。"
+"这些 trait 支持在值之间进行比较。对于包含实现这些 trait 的字段,可以派生所有这些 trait。"
#: src/std-traits/comparisons.md
#, fuzzy
@@ -6767,21 +6449,20 @@ msgstr "`PartialEq` 和 `Eq`"
#: src/std-traits/comparisons.md
msgid ""
-"`PartialEq` is a partial equivalence relation, with required method `eq` and "
-"provided method `ne`. The `==` and `!=` operators will call these methods."
+"`PartialEq` is a partial equivalence relation, with required method `eq` and provided "
+"method `ne`. The `==` and `!=` operators will call these methods."
msgstr ""
-"`PartialEq` 指部分等价关系,其中包含必需的方法 `eq` 和提供的方法 `ne`。`==` "
-"和 `!=` 运算符会调用这些方法。"
+"`PartialEq` 指部分等价关系,其中包含必需的方法 `eq` 和提供的方法 `ne`。`==` 和 `!=` 运算"
+"符会调用这些方法。"
#: src/std-traits/comparisons.md
#, fuzzy
msgid ""
-"`Eq` is a full equivalence relation (reflexive, symmetric, and transitive) "
-"and implies `PartialEq`. Functions that require full equivalence will use "
-"`Eq` as a trait bound."
+"`Eq` is a full equivalence relation (reflexive, symmetric, and transitive) and implies "
+"`PartialEq`. Functions that require full equivalence will use `Eq` as a trait bound."
msgstr ""
-"`Eq` 指完全等价关系(具有自反性、对称性和传递性),并且隐含了 `PartialEq`。需"
-"要完全等价的函数将使用 `Eq` 作为特征边界。"
+"`Eq` 指完全等价关系(具有自反性、对称性和传递性),并且隐含了 `PartialEq`。需要完全等价的"
+"函数将使用 `Eq` 作为特征边界。"
#: src/std-traits/comparisons.md
#, fuzzy
@@ -6790,11 +6471,11 @@ msgstr "`PartialOrd` 和 `Ord`"
#: src/std-traits/comparisons.md
msgid ""
-"`PartialOrd` defines a partial ordering, with a `partial_cmp` method. It is "
-"used to implement the `<`, `<=`, `>=`, and `>` operators."
+"`PartialOrd` defines a partial ordering, with a `partial_cmp` method. It is used to "
+"implement the `<`, `<=`, `>=`, and `>` operators."
msgstr ""
-"`PartialOrd` 定义了使用 `partial_cmp` 方法的部分排序。它用于实现 `<`、`<=`、"
-"`>=` 和 `>` 运算符。"
+"`PartialOrd` 定义了使用 `partial_cmp` 方法的部分排序。它用于实现 `<`、`<=`、`>=` 和 `>` "
+"运算符。"
#: src/std-traits/comparisons.md
msgid "`Ord` is a total ordering, with `cmp` returning `Ordering`."
@@ -6802,23 +6483,21 @@ msgstr "`Ord` 是总排序,其中 `cmp` 返回 `Ordering`。"
#: src/std-traits/comparisons.md
msgid ""
-"`PartialEq` can be implemented between different types, but `Eq` cannot, "
-"because it is reflexive:"
+"`PartialEq` can be implemented between different types, but `Eq` cannot, because it is "
+"reflexive:"
msgstr "`PartialEq` 可以在不同类型之间实现,但 `Eq` 不能,因为它具有自反性:"
#: src/std-traits/comparisons.md
-msgid ""
-"In practice, it's common to derive these traits, but uncommon to implement "
-"them."
+msgid "In practice, it's common to derive these traits, but uncommon to implement them."
msgstr "在实践中,派生这些 trait 很常见,但很少会实现它们。"
#: src/std-traits/operators.md
msgid ""
-"Operator overloading is implemented via traits in [`std::ops`](https://doc."
-"rust-lang.org/std/ops/index.html):"
+"Operator overloading is implemented via traits in [`std::ops`](https://doc.rust-lang.org/"
+"std/ops/index.html):"
msgstr ""
-"运算符重载是通过 [`std::ops`](https://doc.rust-lang.org/std/ops/index.html) "
-"中的特征实现的:"
+"运算符重载是通过 [`std::ops`](https://doc.rust-lang.org/std/ops/index.html) 中的特征实现"
+"的:"
#: src/std-traits/operators.md
msgid "\"{:?} + {:?} = {:?}\""
@@ -6830,52 +6509,46 @@ msgstr "讨论点:"
#: src/std-traits/operators.md
#, fuzzy
-msgid ""
-"You could implement `Add` for `&Point`. In which situations is that useful?"
+msgid "You could implement `Add` for `&Point`. In which situations is that useful?"
msgstr "您可以针对 `&Point` 实现 `Add`。此做法在哪些情况下可派上用场?"
#: src/std-traits/operators.md
msgid ""
-"Answer: `Add:add` consumes `self`. If type `T` for which you are overloading "
-"the operator is not `Copy`, you should consider overloading the operator for "
-"`&T` as well. This avoids unnecessary cloning on the call site."
+"Answer: `Add:add` consumes `self`. If type `T` for which you are overloading the "
+"operator is not `Copy`, you should consider overloading the operator for `&T` as well. "
+"This avoids unnecessary cloning on the call site."
msgstr ""
-"回答:`Add:add` 会耗用 `self`。如果您的运算符重载对象 (即类型 `T`)不是 "
-"`Copy`,建议您也为 `&T` 重载运算符。这可避免调用点上存在不必要的 克隆任务。"
+"回答:`Add:add` 会耗用 `self`。如果您的运算符重载对象 (即类型 `T`)不是 `Copy`,建议您也"
+"为 `&T` 重载运算符。这可避免调用点上存在不必要的 克隆任务。"
#: src/std-traits/operators.md
msgid ""
-"Why is `Output` an associated type? Could it be made a type parameter of the "
-"method?"
+"Why is `Output` an associated type? Could it be made a type parameter of the method?"
msgstr "为什么 `Output` 是关联类型?可将它用作该方法的类型形参吗?"
#: src/std-traits/operators.md
#, fuzzy
msgid ""
-"Short answer: Function type parameters are controlled by the caller, but "
-"associated types (like `Output`) are controlled by the implementer of a "
-"trait."
-msgstr ""
-"简答:函数类型形参是由调用方控管,但 `Output` 这类关联类型则由特征实现人员 控"
-"管。"
+"Short answer: Function type parameters are controlled by the caller, but associated "
+"types (like `Output`) are controlled by the implementer of a trait."
+msgstr "简答:函数类型形参是由调用方控管,但 `Output` 这类关联类型则由特征实现人员 控管。"
#: src/std-traits/operators.md
msgid ""
-"You could implement `Add` for two different types, e.g. `impl Add<(i32, "
-"i32)> for Point` would add a tuple to a `Point`."
+"You could implement `Add` for two different types, e.g. `impl Add<(i32, i32)> for Point` "
+"would add a tuple to a `Point`."
msgstr ""
-"您可以针对两种不同类型实现 `Add`,例如, `impl Add<(i32, i32)> for Point` 会"
-"向 `Point` 中添加元组。"
+"您可以针对两种不同类型实现 `Add`,例如, `impl Add<(i32, i32)> for Point` 会向 `Point` 中"
+"添加元组。"
#: src/std-traits/from-and-into.md
msgid ""
-"Types implement [`From`](https://doc.rust-lang.org/std/convert/trait.From."
-"html) and [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to "
-"facilitate type conversions:"
+"Types implement [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and "
+"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to facilitate type "
+"conversions:"
msgstr ""
-"类型会实现 [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) "
-"和 [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) 以加快类型"
-"转换:"
+"类型会实现 [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) 和 [`Into`]"
+"(https://doc.rust-lang.org/std/convert/trait.Into.html) 以加快类型转换:"
#: src/std-traits/from-and-into.md
msgid "\"{s}, {addr}, {one}, {bigger}\""
@@ -6883,37 +6556,35 @@ msgstr "\"{s}, {addr}, {one}, {bigger}\""
#: src/std-traits/from-and-into.md
msgid ""
-"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) is "
-"automatically implemented when [`From`](https://doc.rust-lang.org/std/"
-"convert/trait.From.html) is implemented:"
+"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) is automatically "
+"implemented when [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) is "
+"implemented:"
msgstr ""
-"实现 [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) 后,系统"
-"会自动实现 [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html):"
+"实现 [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) 后,系统会自动实现 "
+"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html):"
#: src/std-traits/from-and-into.md
msgid ""
-"That's why it is common to only implement `From`, as your type will get "
-"`Into` implementation too."
+"That's why it is common to only implement `From`, as your type will get `Into` "
+"implementation too."
msgstr "这就是为什么通常只需实现 `From`,因为您的类型也会实现 `Into`。"
#: src/std-traits/from-and-into.md
msgid ""
-"When declaring a function argument input type like \"anything that can be "
-"converted into a `String`\", the rule is opposite, you should use `Into`. "
-"Your function will accept types that implement `From` and those that _only_ "
-"implement `Into`."
+"When declaring a function argument input type like \"anything that can be converted into "
+"a `String`\", the rule is opposite, you should use `Into`. Your function will accept "
+"types that implement `From` and those that _only_ implement `Into`."
msgstr ""
-"若要声明某个函数实参输入类型(例如“任何可转换成 `String` 的类型”),规则便会"
-"相反,此时应使用 `Into`。 您的函数会接受可实现 `From` 的类型,以及那些仅实现 "
-"`Into` 的类型。"
+"若要声明某个函数实参输入类型(例如“任何可转换成 `String` 的类型”),规则便会相反,此时应"
+"使用 `Into`。 您的函数会接受可实现 `From` 的类型,以及那些仅实现 `Into` 的类型。"
#: src/std-traits/casting.md
msgid ""
-"Rust has no _implicit_ type conversions, but does support explicit casts "
-"with `as`. These generally follow C semantics where those are defined."
+"Rust has no _implicit_ type conversions, but does support explicit casts with `as`. "
+"These generally follow C semantics where those are defined."
msgstr ""
-"Rust 不支持 _implicit_ 类型转换,但支持使用 `as` 进行显式转换。这些转换通常遵"
-"循定义它们的 C 语义。"
+"Rust 不支持 _implicit_ 类型转换,但支持使用 `as` 进行显式转换。这些转换通常遵循定义它们"
+"的 C 语义。"
#: src/std-traits/casting.md
msgid "\"as u16: {}\""
@@ -6930,30 +6601,27 @@ msgstr "\"as u8: {}\""
#: src/std-traits/casting.md
#, fuzzy
msgid ""
-"The results of `as` are _always_ defined in Rust and consistent across "
-"platforms. This might not match your intuition for changing sign or casting "
-"to a smaller type -- check the docs, and comment for clarity."
+"The results of `as` are _always_ defined in Rust and consistent across platforms. This "
+"might not match your intuition for changing sign or casting to a smaller type -- check "
+"the docs, and comment for clarity."
msgstr ""
-"使用 `as` 的结果在 Rust 中 _始终_ 定义明确,并且在不同平台上保持一致。这可能"
-"不符合您对于更改符号或转换为更小类型的直观理解。为清晰起见,请查看文档和注"
-"释。"
+"使用 `as` 的结果在 Rust 中 _始终_ 定义明确,并且在不同平台上保持一致。这可能不符合您对于"
+"更改符号或转换为更小类型的直观理解。为清晰起见,请查看文档和注释。"
#: src/std-traits/casting.md
msgid ""
-"Casting with `as` is a relatively sharp tool that is easy to use "
-"incorrectly, and can be a source of subtle bugs as future maintenance work "
-"changes the types that are used or the ranges of values in types. Casts are "
-"best used only when the intent is to indicate unconditional truncation (e.g. "
-"selecting the bottom 32 bits of a `u64` with `as u32`, regardless of what "
-"was in the high bits)."
+"Casting with `as` is a relatively sharp tool that is easy to use incorrectly, and can be "
+"a source of subtle bugs as future maintenance work changes the types that are used or "
+"the ranges of values in types. Casts are best used only when the intent is to indicate "
+"unconditional truncation (e.g. selecting the bottom 32 bits of a `u64` with `as u32`, "
+"regardless of what was in the high bits)."
msgstr ""
#: src/std-traits/casting.md
msgid ""
-"For infallible casts (e.g. `u32` to `u64`), prefer using `From` or `Into` "
-"over `as` to confirm that the cast is in fact infallible. For fallible "
-"casts, `TryFrom` and `TryInto` are available when you want to handle casts "
-"that fit differently from those that don't."
+"For infallible casts (e.g. `u32` to `u64`), prefer using `From` or `Into` over `as` to "
+"confirm that the cast is in fact infallible. For fallible casts, `TryFrom` and `TryInto` "
+"are available when you want to handle casts that fit differently from those that don't."
msgstr ""
#: src/std-traits/casting.md
@@ -6963,12 +6631,11 @@ msgstr "请在这张幻灯片之后休息一下。"
#: src/std-traits/casting.md
#, fuzzy
msgid ""
-"`as` is similar to a C++ static cast. Use of `as` in cases where data might "
-"be lost is generally discouraged, or at least deserves an explanatory "
-"comment."
+"`as` is similar to a C++ static cast. Use of `as` in cases where data might be lost is "
+"generally discouraged, or at least deserves an explanatory comment."
msgstr ""
-"`as` 类似于 C++ 静态类型转换。通常不建议在可能丢失数据的情况下使用 `as`,或者"
-"至少应该添加说明性注释。"
+"`as` 类似于 C++ 静态类型转换。通常不建议在可能丢失数据的情况下使用 `as`,或者至少应该添加"
+"说明性注释。"
#: src/std-traits/casting.md
msgid "This is common in casting integers to `usize` for use as an index."
@@ -6976,13 +6643,11 @@ msgstr "在将整数类型转换为 `usize` 以用作索引时,这很常见。
#: src/std-traits/read-and-write.md
msgid ""
-"Using [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and "
-"[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html), you can "
-"abstract over `u8` sources:"
+"Using [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and [`BufRead`](https://"
+"doc.rust-lang.org/std/io/trait.BufRead.html), you can abstract over `u8` sources:"
msgstr ""
-"您可以使用 [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) 和 "
-"[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html) 对 `u8` 来源"
-"进行抽象化处理:"
+"您可以使用 [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) 和 [`BufRead`]"
+"(https://doc.rust-lang.org/std/io/trait.BufRead.html) 对 `u8` 来源进行抽象化处理:"
#: src/std-traits/read-and-write.md
msgid "b\"foo\\nbar\\nbaz\\n\""
@@ -6998,11 +6663,11 @@ msgstr "\"lines in file: {}\""
#: src/std-traits/read-and-write.md
msgid ""
-"Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets "
-"you abstract over `u8` sinks:"
+"Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets you "
+"abstract over `u8` sinks:"
msgstr ""
-"您同样可使用 [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) 对 "
-"`u8` 接收器进行抽象化处理:"
+"您同样可使用 [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) 对 `u8` 接收器"
+"进行抽象化处理:"
#: src/std-traits/read-and-write.md
msgid "\"\\n\""
@@ -7023,11 +6688,11 @@ msgstr "`Default` 特征"
#: src/std-traits/default.md
msgid ""
-"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait "
-"produces a default value for a type."
+"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait produces a "
+"default value for a type."
msgstr ""
-"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) 特征会"
-"为类型生成默认值。"
+"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) 特征会为类型生成默"
+"认值。"
#: src/std-traits/default.md
msgid "\"John Smith\""
@@ -7051,15 +6716,14 @@ msgid "\"{:#?}\""
msgstr "\"{:#?}\""
#: src/std-traits/default.md
-msgid ""
-"It can be implemented directly or it can be derived via `#[derive(Default)]`."
+msgid "It can be implemented directly or it can be derived via `#[derive(Default)]`."
msgstr "系统可以直接实现它,也可以通过 `#[derive(Default)]` 派生出它。"
#: src/std-traits/default.md
#, fuzzy
msgid ""
-"A derived implementation will produce a value where all fields are set to "
-"their default values."
+"A derived implementation will produce a value where all fields are set to their default "
+"values."
msgstr "派生的实现会生成一个实例,其中字段全都设为其默认值。"
#: src/std-traits/default.md
@@ -7068,10 +6732,9 @@ msgstr "这意味着,该结构体中的所有类型也都必须实现 `Default
#: src/std-traits/default.md
msgid ""
-"Standard Rust types often implement `Default` with reasonable values (e.g. "
-"`0`, `\"\"`, etc)."
-msgstr ""
-"标准的 Rust 类型通常会以合理的值(例如 ` 0`\"\" \\``等)实现`Default\\`。"
+"Standard Rust types often implement `Default` with reasonable values (e.g. `0`, `\"\"`, "
+"etc)."
+msgstr "标准的 Rust 类型通常会以合理的值(例如 ` 0`\"\" \\``等)实现`Default\\`。"
#: src/std-traits/default.md
#, fuzzy
@@ -7081,32 +6744,29 @@ msgstr "部分结构体副本可与默认值完美搭配运作。"
#: src/std-traits/default.md
#, fuzzy
msgid ""
-"The Rust standard library is aware that types can implement `Default` and "
-"provides convenience methods that use it."
+"The Rust standard library is aware that types can implement `Default` and provides "
+"convenience methods that use it."
msgstr "Rust 标准库了解类型可能会实现 `Default`,因此提供了便利的使用方式。"
#: src/std-traits/default.md
#, fuzzy
msgid ""
-"The `..` syntax is called [struct update syntax](https://doc.rust-lang.org/"
-"book/ch05-01-defining-structs.html#creating-instances-from-other-instances-"
-"with-struct-update-syntax)."
+"The `..` syntax is called [struct update syntax](https://doc.rust-lang.org/book/ch05-01-"
+"defining-structs.html#creating-instances-from-other-instances-with-struct-update-syntax)."
msgstr ""
-"“..”语法被称为[结构体更新语法](https://doc.rust-lang.org/book/ch05-01-"
-"defining-structs.html#creating-instances-from-other-instances-with-struct-"
-"update-syntax)"
+"“..”语法被称为[结构体更新语法](https://doc.rust-lang.org/book/ch05-01-defining-structs."
+"html#creating-instances-from-other-instances-with-struct-update-syntax)"
#: src/std-traits/closures.md
msgid ""
-"Closures or lambda expressions have types which cannot be named. However, "
-"they implement special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn."
-"html), [`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut.html), and "
-"[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) traits:"
+"Closures or lambda expressions have types which cannot be named. However, they implement "
+"special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://doc."
+"rust-lang.org/std/ops/trait.FnMut.html), and [`FnOnce`](https://doc.rust-lang.org/std/"
+"ops/trait.FnOnce.html) traits:"
msgstr ""
-"闭包或 lambda 表达式具有无法命名的类型。不过,它们会 实现特殊的 [`Fn`]"
-"(https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://doc."
-"rust-lang.org/std/ops/trait.FnMut.html) 和 [`FnOnce`](https://doc.rust-lang."
-"org/std/ops/trait.FnOnce.html) 特征:"
+"闭包或 lambda 表达式具有无法命名的类型。不过,它们会 实现特殊的 [`Fn`](https://doc.rust-"
+"lang.org/std/ops/trait.Fn.html), [`FnMut`](https://doc.rust-lang.org/std/ops/trait."
+"FnMut.html) 和 [`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) 特征:"
#: src/std-traits/closures.md
#, fuzzy
@@ -7127,67 +6787,64 @@ msgstr "\"multiply_sum: {}\""
#: src/std-traits/closures.md
msgid ""
-"An `Fn` (e.g. `add_3`) neither consumes nor mutates captured values, or "
-"perhaps captures nothing at all. It can be called multiple times "
-"concurrently."
+"An `Fn` (e.g. `add_3`) neither consumes nor mutates captured values, or perhaps captures "
+"nothing at all. It can be called multiple times concurrently."
msgstr ""
-"`Fn`(例如 `add_3`)既不会耗用也不会修改捕获的值,或许 也不会捕获任何值。它可"
-"被并发调用多次。"
+"`Fn`(例如 `add_3`)既不会耗用也不会修改捕获的值,或许 也不会捕获任何值。它可被并发调用多"
+"次。"
#: src/std-traits/closures.md
msgid ""
-"An `FnMut` (e.g. `accumulate`) might mutate captured values. You can call it "
-"multiple times, but not concurrently."
+"An `FnMut` (e.g. `accumulate`) might mutate captured values. You can call it multiple "
+"times, but not concurrently."
msgstr ""
-"`FnMut`(例如 `accumulate`)可能会改变捕获的值。您可以多次调用它, 但不能并发"
-"调用它。"
+"`FnMut`(例如 `accumulate`)可能会改变捕获的值。您可以多次调用它, 但不能并发调用它。"
#: src/std-traits/closures.md
msgid ""
-"If you have an `FnOnce` (e.g. `multiply_sum`), you may only call it once. It "
-"might consume captured values."
+"If you have an `FnOnce` (e.g. `multiply_sum`), you may only call it once. It might "
+"consume captured values."
msgstr ""
-"如果您使用 `FnOnce`(例如 `multiply_sum`),或许只能调用它一次。它可能会耗用 "
-"所捕获的值。"
+"如果您使用 `FnOnce`(例如 `multiply_sum`),或许只能调用它一次。它可能会耗用 所捕获的值。"
#: src/std-traits/closures.md
msgid ""
-"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. "
-"I.e. you can use an `FnMut` wherever an `FnOnce` is called for, and you can "
-"use an `Fn` wherever an `FnMut` or `FnOnce` is called for."
+"`FnMut` is a subtype of `FnOnce`. `Fn` is a subtype of `FnMut` and `FnOnce`. I.e. you "
+"can use an `FnMut` wherever an `FnOnce` is called for, and you can use an `Fn` wherever "
+"an `FnMut` or `FnOnce` is called for."
msgstr ""
-"`FnMut` 是 `FnOnce` 的子类型。`Fn` 是 `FnMut` 和 `FnOnce` 的子类型。也就是"
-"说,您可以在任何 需要调用 `FnOnce` 的地方使用 `FnMut`,还可在任何需要调用 "
-"`FnMut` 或 `FnOnce` 的地方 使用 `Fn`。"
+"`FnMut` 是 `FnOnce` 的子类型。`Fn` 是 `FnMut` 和 `FnOnce` 的子类型。也就是说,您可以在任"
+"何 需要调用 `FnOnce` 的地方使用 `FnMut`,还可在任何需要调用 `FnMut` 或 `FnOnce` 的地方 使"
+"用 `Fn`。"
#: src/std-traits/closures.md
msgid ""
-"When you define a function that takes a closure, you should take `FnOnce` if "
-"you can (i.e. you call it once), or `FnMut` else, and last `Fn`. This allows "
-"the most flexibility for the caller."
+"When you define a function that takes a closure, you should take `FnOnce` if you can (i."
+"e. you call it once), or `FnMut` else, and last `Fn`. This allows the most flexibility "
+"for the caller."
msgstr ""
#: src/std-traits/closures.md
msgid ""
-"In contrast, when you have a closure, the most flexible you can have is `Fn` "
-"(it can be passed everywhere), then `FnMut`, and lastly `FnOnce`."
+"In contrast, when you have a closure, the most flexible you can have is `Fn` (it can be "
+"passed everywhere), then `FnMut`, and lastly `FnOnce`."
msgstr ""
#: src/std-traits/closures.md
msgid ""
-"The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. "
-"`multiply_sum`), depending on what the closure captures."
+"The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. `multiply_sum`), "
+"depending on what the closure captures."
msgstr ""
-"编译器也会推断 `Copy`(例如针对 `add_3`)和 `Clone`(例如 `multiply_sum`), "
-"具体取决于闭包捕获的数据。"
+"编译器也会推断 `Copy`(例如针对 `add_3`)和 `Clone`(例如 `multiply_sum`), 具体取决于闭"
+"包捕获的数据。"
#: src/std-traits/closures.md
msgid ""
-"By default, closures will capture by reference if they can. The `move` "
-"keyword makes them capture by value."
+"By default, closures will capture by reference if they can. The `move` keyword makes "
+"them capture by value."
msgstr ""
-"默认情况下,闭包会依据引用来捕获数据(如果可以的话)。`move` 关键字则可让闭包"
-"依据值 来捕获数据。"
+"默认情况下,闭包会依据引用来捕获数据(如果可以的话)。`move` 关键字则可让闭包依据值 来捕"
+"获数据。"
#: src/std-traits/closures.md src/smart-pointers/trait-objects.md
msgid "\"{} {}\""
@@ -7203,17 +6860,17 @@ msgstr "\"there\""
#: src/std-traits/exercise.md
msgid ""
-"In this example, you will implement the classic [\"ROT13\" cipher](https://"
-"en.wikipedia.org/wiki/ROT13). Copy this code to the playground, and "
-"implement the missing bits. Only rotate ASCII alphabetic characters, to "
-"ensure the result is still valid UTF-8."
+"In this example, you will implement the classic [\"ROT13\" cipher](https://en.wikipedia."
+"org/wiki/ROT13). Copy this code to the playground, and implement the missing bits. Only "
+"rotate ASCII alphabetic characters, to ensure the result is still valid UTF-8."
msgstr ""
-"在此示例中,您将实现经典的 [“ROT13”加密](https://en.wikipedia.org/wiki/"
-"ROT13)。将此代码复制到 Playground,并实现缺失的位。请仅旋转 ASCII 字母字符,"
-"以确保结果仍为有效的 UTF-8 编码字符。"
+"在此示例中,您将实现经典的 [“ROT13”加密](https://en.wikipedia.org/wiki/ROT13)。将此代码复"
+"制到 Playground,并实现缺失的位。请仅旋转 ASCII 字母字符,以确保结果仍为有效的 UTF-8 编码"
+"字符。"
#: src/std-traits/exercise.md
-msgid "// Implement the `Read` trait for `RotDecoder`.\n"
+#, fuzzy
+msgid "// Implement the `Read` trait for `RotDecoder`."
msgstr "// Implement the `Read` trait for `RotDecoder`.\n"
#: src/std-traits/exercise.md src/std-traits/solution.md
@@ -7221,9 +6878,8 @@ msgid "\"Gb trg gb gur bgure fvqr!\""
msgstr "\"Gb trg gb gur bgure fvqr!\""
#: src/std-traits/exercise.md src/std-traits/solution.md
-#: src/smart-pointers/trait-objects.md src/modules/exercise.md
-#: src/modules/solution.md src/android/build-rules/library.md
-#: src/android/interoperability/cpp/rust-bridge.md
+#: src/smart-pointers/trait-objects.md src/modules/exercise.md src/modules/solution.md
+#: src/android/build-rules/library.md src/android/interoperability/cpp/rust-bridge.md
#: src/async/pitfalls/cancellation.md
msgid "\"{}\""
msgstr "\"{}\""
@@ -7234,11 +6890,9 @@ msgstr "\"To get to the other side!\""
#: src/std-traits/exercise.md
msgid ""
-"What happens if you chain two `RotDecoder` instances together, each rotating "
-"by 13 characters?"
-msgstr ""
-"如果将两个 `RotDecoder` 实例链接在一起,每个实例旋转 13 个字符,会发生什么情"
-"况?"
+"What happens if you chain two `RotDecoder` instances together, each rotating by 13 "
+"characters?"
+msgstr "如果将两个 `RotDecoder` 实例链接在一起,每个实例旋转 13 个字符,会发生什么情况?"
#: src/std-traits/solution.md
msgid "'A'"
@@ -7254,8 +6908,7 @@ msgstr "今日内容:"
#: src/welcome-day-3.md
msgid ""
-"Memory management, lifetimes, and the borrow checker: how Rust ensures "
-"memory safety."
+"Memory management, lifetimes, and the borrow checker: how Rust ensures memory safety."
msgstr "内存管理、生命周期和借用检查器:Rust 如何确保内存安全。"
#: src/welcome-day-3.md
@@ -7267,17 +6920,15 @@ msgid "[Welcome](./welcome-day-3.md) (3 minutes)"
msgstr ""
#: src/welcome-day-3.md
-msgid "[Memory Management](./memory-management.md) (1 hour and 10 minutes)"
+msgid "[Memory Management](./memory-management.md) (1 hour)"
msgstr ""
#: src/welcome-day-3.md
msgid "[Smart Pointers](./smart-pointers.md) (55 minutes)"
msgstr ""
-#: src/welcome-day-3.md
-msgid ""
-"Including 10 minute breaks, this session should take about 2 hours and 25 "
-"minutes"
+#: src/welcome-day-3.md src/welcome-day-3-afternoon.md
+msgid "Including 10 minute breaks, this session should take about 2 hours and 20 minutes"
msgstr ""
#: src/memory-management.md
@@ -7285,9 +6936,7 @@ msgid "[Review of Program Memory](./memory-management/review.md) (5 minutes)"
msgstr ""
#: src/memory-management.md
-msgid ""
-"[Approaches to Memory Management](./memory-management/approaches.md) (10 "
-"minutes)"
+msgid "[Approaches to Memory Management](./memory-management/approaches.md) (10 minutes)"
msgstr ""
#: src/memory-management.md
@@ -7295,7 +6944,7 @@ msgid "[Ownership](./memory-management/ownership.md) (5 minutes)"
msgstr ""
#: src/memory-management.md
-msgid "[Move Semantics](./memory-management/move.md) (10 minutes)"
+msgid "[Move Semantics](./memory-management/move.md) (5 minutes)"
msgstr ""
#: src/memory-management.md
@@ -7357,37 +7006,34 @@ msgstr "不保证内存局部性。"
#: src/memory-management/review.md
#, fuzzy
msgid ""
-"Creating a `String` puts fixed-sized metadata on the stack and dynamically "
-"sized data, the actual string, on the heap:"
-msgstr ""
-"创建 `String` 时将固定大小的数据存储在栈上, 并将动态大小的数据存储在堆上:"
+"Creating a `String` puts fixed-sized metadata on the stack and dynamically sized data, "
+"the actual string, on the heap:"
+msgstr "创建 `String` 时将固定大小的数据存储在栈上, 并将动态大小的数据存储在堆上:"
#: src/memory-management/review.md
msgid ""
-"Mention that a `String` is backed by a `Vec`, so it has a capacity and "
-"length and can grow if mutable via reallocation on the heap."
+"Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can "
+"grow if mutable via reallocation on the heap."
msgstr ""
-"指出 `String` 底层由 `Vec` 实现,因此它具有容量和长度,如果值可变,则可以通过"
-"在堆上重新分配存储空间进行增长。"
+"指出 `String` 底层由 `Vec` 实现,因此它具有容量和长度,如果值可变,则可以通过在堆上重新分"
+"配存储空间进行增长。"
#: src/memory-management/review.md
msgid ""
-"If students ask about it, you can mention that the underlying memory is heap "
-"allocated using the [System Allocator](https://doc.rust-lang.org/std/alloc/"
-"struct.System.html) and custom allocators can be implemented using the "
-"[Allocator API](https://doc.rust-lang.org/std/alloc/index.html)"
+"If students ask about it, you can mention that the underlying memory is heap allocated "
+"using the [System Allocator](https://doc.rust-lang.org/std/alloc/struct.System.html) and "
+"custom allocators can be implemented using the [Allocator API](https://doc.rust-lang.org/"
+"std/alloc/index.html)"
msgstr ""
-"如果学员提出相关问题,你可以提及我们不仅能使用\\[系统分配器\\]在堆上分配底层"
-"内存,还能使用 [Allocator API](https://doc.rust-lang.org/std/alloc/index."
-"html) 实现自定义分配器"
+"如果学员提出相关问题,你可以提及我们不仅能使用\\[系统分配器\\]在堆上分配底层内存,还能使"
+"用 [Allocator API](https://doc.rust-lang.org/std/alloc/index.html) 实现自定义分配器"
#: src/memory-management/review.md
#, fuzzy
msgid ""
-"We can inspect the memory layout with `unsafe` Rust. However, you should "
-"point out that this is rightfully unsafe!"
-msgstr ""
-"我们可以使用 `unsafe` 代码检查内存布局。不过,你应该指出,这种做法不安全!"
+"We can inspect the memory layout with `unsafe` Rust. However, you should point out that "
+"this is rightfully unsafe!"
+msgstr "我们可以使用 `unsafe` 代码检查内存布局。不过,你应该指出,这种做法不安全!"
#: src/memory-management/review.md src/testing/unit-tests.md
msgid "' '"
@@ -7399,17 +7045,22 @@ msgid "\"world\""
msgstr "\"world\""
#: src/memory-management/review.md
-msgid ""
-"// DON'T DO THIS AT HOME! For educational purposes only.\n"
-" // String provides no guarantees about its layout, so this could lead "
-"to\n"
-" // undefined behavior.\n"
+msgid "// DON'T DO THIS AT HOME! For educational purposes only."
+msgstr ""
+
+#: src/memory-management/review.md
+#, fuzzy
+msgid "// String provides no guarantees about its layout, so this could lead to"
msgstr ""
"// DON'T DO THIS AT HOME!For educational purposes only.\n"
-" // String provides no guarantees about its layout, so this could lead "
-"to\n"
+" // String provides no guarantees about its layout, so this could lead to\n"
" // undefined behavior.\n"
+#: src/memory-management/review.md
+#, fuzzy
+msgid "// undefined behavior."
+msgstr "Rust 没有运行时未定义行为:"
+
#: src/memory-management/review.md
msgid "\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\""
msgstr "\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\""
@@ -7427,8 +7078,7 @@ msgid "Programmer decides when to allocate or free heap memory."
msgstr "程序员决定何时分配或释放堆内存。"
#: src/memory-management/approaches.md
-msgid ""
-"Programmer must determine whether a pointer still points to valid memory."
+msgid "Programmer must determine whether a pointer still points to valid memory."
msgstr "程序员必须确定指针是否仍指向有效内存。"
#: src/memory-management/approaches.md
@@ -7437,19 +7087,16 @@ msgstr "研究表明,程序员难免会犯错。"
#: src/memory-management/approaches.md
msgid ""
-"Full safety via automatic memory management at runtime: Java, Python, Go, "
-"Haskell, ..."
+"Full safety via automatic memory management at runtime: Java, Python, Go, Haskell, ..."
msgstr "运行时通过自动内存管理实现完全安全:Java、Python、Go、Haskell…"
#: src/memory-management/approaches.md
msgid ""
-"A runtime system ensures that memory is not freed until it can no longer be "
-"referenced."
+"A runtime system ensures that memory is not freed until it can no longer be referenced."
msgstr "运行时系统可确保在内存无法被引用之前,不会释放该内存。"
#: src/memory-management/approaches.md
-msgid ""
-"Typically implemented with reference counting, garbage collection, or RAII."
+msgid "Typically implemented with reference counting, garbage collection, or RAII."
msgstr "通常通过引用计数、垃圾回收或 RAII 实现。"
#: src/memory-management/approaches.md
@@ -7458,8 +7105,7 @@ msgstr "Rust 提供了一个全新的组合:"
#: src/memory-management/approaches.md
msgid ""
-"Full control _and_ safety via compile time enforcement of correct memory "
-"management."
+"Full control _and_ safety via compile time enforcement of correct memory management."
msgstr "通过编译时强制执行正确的内存>管理来实现完全控制与安全。"
#: src/memory-management/approaches.md
@@ -7468,83 +7114,79 @@ msgstr "它通过一个明确的所有权(ownership)概念来实现此目的
#: src/memory-management/approaches.md
msgid ""
-"This slide is intended to help students coming from other languages to put "
-"Rust in context."
+"This slide is intended to help students coming from other languages to put Rust in "
+"context."
msgstr "本幻灯片旨在帮助学习其他语言的学生更好地了解 Rust。"
#: src/memory-management/approaches.md
msgid ""
-"C must manage heap manually with `malloc` and `free`. Common errors include "
-"forgetting to call `free`, calling it multiple times for the same pointer, "
-"or dereferencing a pointer after the memory it points to has been freed."
+"C must manage heap manually with `malloc` and `free`. Common errors include forgetting "
+"to call `free`, calling it multiple times for the same pointer, or dereferencing a "
+"pointer after the memory it points to has been freed."
msgstr ""
-"C 语言必须使用 `malloc` 和 `free` 函数手动管理堆。常见错误包括忘记调用 "
-"`free`、针对同一指针多次调用它,或在释放某指针所指向的内存后解引用它。"
+"C 语言必须使用 `malloc` 和 `free` 函数手动管理堆。常见错误包括忘记调用 `free`、针对同一指"
+"针多次调用它,或在释放某指针所指向的内存后解引用它。"
#: src/memory-management/approaches.md
msgid ""
-"C++ has tools like smart pointers (`unique_ptr`, `shared_ptr`) that take "
-"advantage of language guarantees about calling destructors to ensure memory "
-"is freed when a function returns. It is still quite easy to mis-use these "
-"tools and create similar bugs to C."
+"C++ has tools like smart pointers (`unique_ptr`, `shared_ptr`) that take advantage of "
+"language guarantees about calling destructors to ensure memory is freed when a function "
+"returns. It is still quite easy to mis-use these tools and create similar bugs to C."
msgstr ""
-"C++ 具有智能指针(`unique_ptr`、`shared_ptr`)等工具,可以利用与调用析构函数"
-"相关的语言保证来确保在函数返回时释放内存。这些工具仍然很容易被滥用并导致与 C "
-"语言类似的 bug。"
+"C++ 具有智能指针(`unique_ptr`、`shared_ptr`)等工具,可以利用与调用析构函数相关的语言保"
+"证来确保在函数返回时释放内存。这些工具仍然很容易被滥用并导致与 C 语言类似的 bug。"
#: src/memory-management/approaches.md
msgid ""
-"Java, Go, and Python rely on the garbage collector to identify memory that "
-"is no longer reachable and discard it. This guarantees that any pointer can "
-"be dereferenced, eliminating use-after-free and other classes of bugs. But, "
-"GC has a runtime cost and is difficult to tune properly."
+"Java, Go, and Python rely on the garbage collector to identify memory that is no longer "
+"reachable and discard it. This guarantees that any pointer can be dereferenced, "
+"eliminating use-after-free and other classes of bugs. But, GC has a runtime cost and is "
+"difficult to tune properly."
msgstr ""
-"Java、Go 和 Python 依赖垃圾回收器来识别无法再访问的内存并将其舍弃。这保证可对"
-"所有指针进行解引用操作,从而消除了释放后使用等各类 bug。但是,垃圾回收 (GC) "
-"会产生运行时成本,并且很难进行适当调优。"
+"Java、Go 和 Python 依赖垃圾回收器来识别无法再访问的内存并将其舍弃。这保证可对所有指针进行"
+"解引用操作,从而消除了释放后使用等各类 bug。但是,垃圾回收 (GC) 会产生运行时成本,并且很"
+"难进行适当调优。"
#: src/memory-management/approaches.md
msgid ""
-"Rust's ownership and borrowing model can, in many cases, get the performance "
-"of C, with alloc and free operations precisely where they are required -- "
-"zero cost. It also provides tools similar to C++'s smart pointers. When "
-"required, other options such as reference counting are available, and there "
-"are even third-party crates available to support runtime garbage collection "
-"(not covered in this class)."
+"Rust's ownership and borrowing model can, in many cases, get the performance of C, with "
+"alloc and free operations precisely where they are required -- zero cost. It also "
+"provides tools similar to C++'s smart pointers. When required, other options such as "
+"reference counting are available, and there are even third-party crates available to "
+"support runtime garbage collection (not covered in this class)."
msgstr ""
-"在许多情况下,Rust 的所有权和借用模型可以实现 C 语言的性能,能够精确地在所需"
-"位置执行分配和释放操作,且为零成本。它还提供类似于 C++ 智能指针的工具。必要"
-"时,它还提供引用计数等其他选项,甚至还有第三方 crate 可以支持运行时垃圾回收"
-"(本课程中不作介绍)。"
+"在许多情况下,Rust 的所有权和借用模型可以实现 C 语言的性能,能够精确地在所需位置执行分配"
+"和释放操作,且为零成本。它还提供类似于 C++ 智能指针的工具。必要时,它还提供引用计数等其他"
+"选项,甚至还有第三方 crate 可以支持运行时垃圾回收(本课程中不作介绍)。"
#: src/memory-management/ownership.md
msgid ""
-"All variable bindings have a _scope_ where they are valid and it is an error "
-"to use a variable outside its scope:"
+"All variable bindings have a _scope_ where they are valid and it is an error to use a "
+"variable outside its scope:"
msgstr "所有变量绑定都有一个有效的“作用域”,使用 超出其作用域的变量是错误的:"
#: src/memory-management/ownership.md
#, fuzzy
msgid ""
-"We say that the variable _owns_ the value. Every Rust value has precisely "
-"one owner at all times."
+"We say that the variable _owns_ the value. Every Rust value has precisely one owner at "
+"all times."
msgstr "指出变量“拥有”值。"
#: src/memory-management/ownership.md
#, fuzzy
msgid ""
-"At the end of the scope, the variable is _dropped_ and the data is freed. A "
-"destructor can run here to free up resources."
+"At the end of the scope, the variable is _dropped_ and the data is freed. A destructor "
+"can run here to free up resources."
msgstr "作用域结束时,变量会“被丢弃”,数据会被释放。"
#: src/memory-management/ownership.md
msgid ""
-"Students familiar with garbage-collection implementations will know that a "
-"garbage collector starts with a set of \"roots\" to find all reachable "
-"memory. Rust's \"single owner\" principle is a similar idea."
+"Students familiar with garbage-collection implementations will know that a garbage "
+"collector starts with a set of \"roots\" to find all reachable memory. Rust's \"single "
+"owner\" principle is a similar idea."
msgstr ""
-"熟悉垃圾回收实现的学生知道,垃圾回收器从一组 “根”开始查找所有可访问内存。"
-"Rust 的 “单一所有者”原则与此类似。"
+"熟悉垃圾回收实现的学生知道,垃圾回收器从一组 “根”开始查找所有可访问内存。Rust 的 “单一所"
+"有者”原则与此类似。"
#: src/memory-management/move.md
#, fuzzy
@@ -7561,7 +7203,8 @@ msgid "\"s2: {s2}\""
msgstr "\"s2: {s2}\""
#: src/memory-management/move.md
-msgid "// println!(\"s1: {s1}\");\n"
+#, fuzzy
+msgid "// println!(\"s1: {s1}\");"
msgstr "// println!(\"s1: {s1}\");\n"
#: src/memory-management/move.md
@@ -7611,27 +7254,21 @@ msgid ""
msgstr ""
"```bob\n"
" 栈 堆\n"
-".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - "
-"-.\n"
+".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": "
-"list : : :\n"
-": +----+----+ : : +----+----+ +----+------"
-"+ :\n"
-": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null "
-"| :\n"
-": +----+----+ : : +----+----+ +----+------"
-"+ :\n"
+": list : : :\n"
+": +----+----+ : : +----+----+ +----+------+ :\n"
+": | 1 | o--+-----------+-----+--->| 2 | o--+--->| // | null | :\n"
+": +----+----+ : : +----+----+ +----+------+ :\n"
": : : :\n"
": : : :\n"
-"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - "
-"-'\n"
+"`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
#: src/memory-management/move.md
msgid ""
-"When you pass a value to a function, the value is assigned to the function "
-"parameter. This transfers ownership:"
+"When you pass a value to a function, the value is assigned to the function parameter. "
+"This transfers ownership:"
msgstr "你将值传递给函数时,该值会被赋给函数 参数。这就转移了所有权:"
#: src/memory-management/move.md
@@ -7645,29 +7282,29 @@ msgid "\"Alice\""
msgstr "切片"
#: src/memory-management/move.md
-msgid "// say_hello(name);\n"
+#, fuzzy
+msgid "// say_hello(name);"
msgstr "// say_hello(name);\n"
#: src/memory-management/move.md
msgid ""
-"Mention that this is the opposite of the defaults in C++, which copies by "
-"value unless you use `std::move` (and the move constructor is defined!)."
+"Mention that this is the opposite of the defaults in C++, which copies by value unless "
+"you use `std::move` (and the move constructor is defined!)."
msgstr ""
-"指出这与 C++ 中的默认值相反。除非你使用 `std::move`(并已定义 move 构造函"
-"数!),否则 C++ 中的默认值是按值复制的。"
+"指出这与 C++ 中的默认值相反。除非你使用 `std::move`(并已定义 move 构造函数!),否则 C+"
+"+ 中的默认值是按值复制的。"
#: src/memory-management/move.md
msgid ""
-"It is only the ownership that moves. Whether any machine code is generated "
-"to manipulate the data itself is a matter of optimization, and such copies "
-"are aggressively optimized away."
+"It is only the ownership that moves. Whether any machine code is generated to manipulate "
+"the data itself is a matter of optimization, and such copies are aggressively optimized "
+"away."
msgstr ""
-"只有所有权发生了转移。是否会生成任何机器码来操控数据本身是一个优化方面的问"
-"题,系统会主动优化此类副本。"
+"只有所有权发生了转移。是否会生成任何机器码来操控数据本身是一个优化方面的问题,系统会主动"
+"优化此类副本。"
#: src/memory-management/move.md
-msgid ""
-"Simple values (such as integers) can be marked `Copy` (see later slides)."
+msgid "Simple values (such as integers) can be marked `Copy` (see later slides)."
msgstr "简单的值(例如整数)可以标记为“Copy”(请看后续幻灯片)。"
#: src/memory-management/move.md
@@ -7680,39 +7317,38 @@ msgstr "在 `say_hello` 示例中:"
#: src/memory-management/move.md
msgid ""
-"With the first call to `say_hello`, `main` gives up ownership of `name`. "
-"Afterwards, `name` cannot be used anymore within `main`."
+"With the first call to `say_hello`, `main` gives up ownership of `name`. Afterwards, "
+"`name` cannot be used anymore within `main`."
msgstr ""
-"首次调用 `say_hello` 时,`main` 便放弃了 `name` 的所有权。此后,`main` 中不能"
-"再使用 `name`。"
+"首次调用 `say_hello` 时,`main` 便放弃了 `name` 的所有权。此后,`main` 中不能再使用 "
+"`name`。"
#: src/memory-management/move.md
msgid ""
-"The heap memory allocated for `name` will be freed at the end of the "
-"`say_hello` function."
+"The heap memory allocated for `name` will be freed at the end of the `say_hello` "
+"function."
msgstr "在 `say_hello` 函数结束时,系统会释放为 `name` 分配的堆内存。"
#: src/memory-management/move.md
msgid ""
-"`main` can retain ownership if it passes `name` as a reference (`&name`) and "
-"if `say_hello` accepts a reference as a parameter."
+"`main` can retain ownership if it passes `name` as a reference (`&name`) and if "
+"`say_hello` accepts a reference as a parameter."
msgstr ""
-"如果 `main` 将 `name` 作为引用 (`&name`) 传递过去,且 `say_hello` 接受作为参"
-"数的引用,则可保留所有权。"
+"如果 `main` 将 `name` 作为引用 (`&name`) 传递过去,且 `say_hello` 接受作为参数的引用,则"
+"可保留所有权。"
#: src/memory-management/move.md
msgid ""
-"Alternatively, `main` can pass a clone of `name` in the first call (`name."
-"clone()`)."
+"Alternatively, `main` can pass a clone of `name` in the first call (`name.clone()`)."
msgstr "此外,`main` 也可以在首次调用时传递 `name` 的克隆 (`name.clone()`)。"
#: src/memory-management/move.md
msgid ""
-"Rust makes it harder than C++ to inadvertently create copies by making move "
-"semantics the default, and by forcing programmers to make clones explicit."
+"Rust makes it harder than C++ to inadvertently create copies by making move semantics "
+"the default, and by forcing programmers to make clones explicit."
msgstr ""
-"相较于 C++,Rust 通过将移动语义设为默认值,并强制程序员进行显式克隆,更难以无"
-"意中创建副本。"
+"相较于 C++,Rust 通过将移动语义设为默认值,并强制程序员进行显式克隆,更难以无意中创建副"
+"本。"
#: src/memory-management/move.md
#, fuzzy
@@ -7728,12 +7364,12 @@ msgid "\"Cpp\""
msgstr "\"Cpp\""
#: src/memory-management/move.md
-msgid "// Duplicate the data in s1.\n"
+#, fuzzy
+msgid "// Duplicate the data in s1."
msgstr "// Duplicate the data in s1.\n"
#: src/memory-management/move.md
-msgid ""
-"The heap data from `s1` is duplicated and `s2` gets its own independent copy."
+msgid "The heap data from `s1` is duplicated and `s2` gets its own independent copy."
msgstr "`s1` 中的堆数据被复制,`s2` 获得自己的独立副本。"
#: src/memory-management/move.md
@@ -7750,32 +7386,29 @@ msgstr "复制-赋值之后:"
#: src/memory-management/move.md
msgid ""
-"C++ has made a slightly different choice than Rust. Because `=` copies data, "
-"the string data has to be cloned. Otherwise we would get a double-free when "
-"either string goes out of scope."
+"C++ has made a slightly different choice than Rust. Because `=` copies data, the string "
+"data has to be cloned. Otherwise we would get a double-free when either string goes out "
+"of scope."
msgstr ""
-"C++ 做出了与 Rust 略有不同的选择。由于“=”会复制数据,因此必须克隆字符串数据。"
-"否则,当任一字符串超出范围时,便会出现二次释放。"
+"C++ 做出了与 Rust 略有不同的选择。由于“=”会复制数据,因此必须克隆字符串数据。否则,当任一"
+"字符串超出范围时,便会出现二次释放。"
#: src/memory-management/move.md
msgid ""
-"C++ also has [`std::move`](https://en.cppreference.com/w/cpp/utility/move), "
-"which is used to indicate when a value may be moved from. If the example had "
-"been `s2 = std::move(s1)`, no heap allocation would take place. After the "
-"move, `s1` would be in a valid but unspecified state. Unlike Rust, the "
-"programmer is allowed to keep using `s1`."
+"C++ also has [`std::move`](https://en.cppreference.com/w/cpp/utility/move), which is "
+"used to indicate when a value may be moved from. If the example had been `s2 = std::"
+"move(s1)`, no heap allocation would take place. After the move, `s1` would be in a valid "
+"but unspecified state. Unlike Rust, the programmer is allowed to keep using `s1`."
msgstr ""
-"C++ 还包含[“std::move”](https://en.cppreference.com/w/cpp/utility/move),它用"
-"于指示何时可以移动某个值。如果示例为“s2 = std::move(s1)”,则不会发生堆分配。"
-"移动后,“s1”将处于有效但未指定的状态。与 Rust 不同,程序员可以继续使用“s1”。"
+"C++ 还包含[“std::move”](https://en.cppreference.com/w/cpp/utility/move),它用于指示何时可"
+"以移动某个值。如果示例为“s2 = std::move(s1)”,则不会发生堆分配。移动后,“s1”将处于有效但"
+"未指定的状态。与 Rust 不同,程序员可以继续使用“s1”。"
#: src/memory-management/move.md
msgid ""
-"Unlike Rust, `=` in C++ can run arbitrary code as determined by the type "
-"which is being copied or moved."
-msgstr ""
-"与 Rust 不同,使用 C++ 时,“=”可以运行任意代码,具体取决于要复制或移动的类"
-"型。"
+"Unlike Rust, `=` in C++ can run arbitrary code as determined by the type which is being "
+"copied or moved."
+msgstr "与 Rust 不同,使用 C++ 时,“=”可以运行任意代码,具体取决于要复制或移动的类型。"
#: src/memory-management/clone.md
msgid "Clone"
@@ -7783,30 +7416,26 @@ msgstr "克隆"
#: src/memory-management/clone.md
msgid ""
-"Sometimes you _want_ to make a copy of a value. The `Clone` trait "
-"accomplishes this."
+"Sometimes you _want_ to make a copy of a value. The `Clone` trait accomplishes this."
msgstr "有时,_如需_ 复制某个值。`Clone` 特征 可以完成此操作。"
#: src/memory-management/clone.md
msgid ""
-"The idea of `Clone` is to make it easy to spot where heap allocations are "
-"occurring. Look for `.clone()` and a few others like `Vec::new` or `Box::"
-"new`."
+"The idea of `Clone` is to make it easy to spot where heap allocations are occurring. "
+"Look for `.clone()` and a few others like `Vec::new` or `Box::new`."
msgstr ""
-"`Clone` 的设计理念是让您轻松发现堆分配的位置。查找 `.clone()` 和其他一些内"
-"容,例如 `Vec::new` 或 `Box::new`。"
+"`Clone` 的设计理念是让您轻松发现堆分配的位置。查找 `.clone()` 和其他一些内容,例如 `Vec::"
+"new` 或 `Box::new`。"
#: src/memory-management/clone.md
msgid ""
-"It's common to \"clone your way out\" of problems with the borrow checker, "
-"and return later to try to optimize those clones away."
+"It's common to \"clone your way out\" of problems with the borrow checker, and return "
+"later to try to optimize those clones away."
msgstr ""
-"通常的做法是,先使用 “克隆操作”解决借用检查器问题,在后续通过优化消除这些克隆"
-"操作。"
+"通常的做法是,先使用 “克隆操作”解决借用检查器问题,在后续通过优化消除这些克隆操作。"
#: src/memory-management/copy-types.md
-msgid ""
-"While move semantics are the default, certain types are copied by default:"
+msgid "While move semantics are the default, certain types are copied by default:"
msgstr "虽然移动语义是默认的,但默认情况下会复制某些类型:"
#: src/memory-management/copy-types.md
@@ -7831,19 +7460,18 @@ msgstr "复制和克隆是两码事:"
#: src/memory-management/copy-types.md
msgid ""
-"Copying refers to bitwise copies of memory regions and does not work on "
-"arbitrary objects."
+"Copying refers to bitwise copies of memory regions and does not work on arbitrary "
+"objects."
msgstr "复制是指内存区域的按位复制,不适用于任意对象。"
#: src/memory-management/copy-types.md
-msgid ""
-"Copying does not allow for custom logic (unlike copy constructors in C++)."
+msgid "Copying does not allow for custom logic (unlike copy constructors in C++)."
msgstr "复制不允许自定义逻辑(不同于 C++ 中的复制构造函数)。"
#: src/memory-management/copy-types.md
msgid ""
-"Cloning is a more general operation and also allows for custom behavior by "
-"implementing the `Clone` trait."
+"Cloning is a more general operation and also allows for custom behavior by implementing "
+"the `Clone` trait."
msgstr "克隆是一种更通用的操作,也允许通过实现 `Clone` trait 来自定义行为。"
#: src/memory-management/copy-types.md
@@ -7856,19 +7484,17 @@ msgstr "在上述示例中,请尝试以下操作:"
#: src/memory-management/copy-types.md
msgid ""
-"Add a `String` field to `struct Point`. It will not compile because `String` "
-"is not a `Copy` type."
+"Add a `String` field to `struct Point`. It will not compile because `String` is not a "
+"`Copy` type."
msgstr ""
-"在 `struct Point` 中添加 `String` 字段。由于 `String` 不属于 `Copy` 类型,因"
-"此无法编译。"
+"在 `struct Point` 中添加 `String` 字段。由于 `String` 不属于 `Copy` 类型,因此无法编译。"
#: src/memory-management/copy-types.md
#, fuzzy
msgid ""
-"Remove `Copy` from the `derive` attribute. The compiler error is now in the "
-"`println!` for `p1`."
-msgstr ""
-"从 `derive` 属性中移除 `Copy`。现在,编译器错误位于 `p1`的 `println!` 中。"
+"Remove `Copy` from the `derive` attribute. The compiler error is now in the `println!` "
+"for `p1`."
+msgstr "从 `derive` 属性中移除 `Copy`。现在,编译器错误位于 `p1`的 `println!` 中。"
#: src/memory-management/copy-types.md
msgid "Show that it works if you clone `p1` instead."
@@ -7880,11 +7506,11 @@ msgstr "`Drop` 特征"
#: src/memory-management/drop.md
msgid ""
-"Values which implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop."
-"html) can specify code to run when they go out of scope:"
+"Values which implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) can "
+"specify code to run when they go out of scope:"
msgstr ""
-"用于实现 [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) 的值可以"
-"指定在超出范围时运行的代码:"
+"用于实现 [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) 的值可以指定在超出范"
+"围时运行的代码:"
#: src/memory-management/drop.md
msgid "\"Dropping {}\""
@@ -7930,31 +7556,28 @@ msgstr "当值超出范围时,系统会自动将其删除。"
#: src/memory-management/drop.md
msgid ""
-"When a value is dropped, if it implements `std::ops::Drop` then its `Drop::"
-"drop` implementation will be called."
-msgstr ""
-"丢弃某个值时,如果该值实现了 `std::ops::Drop`,则会调用其 `Drop::drop` 实现。"
+"When a value is dropped, if it implements `std::ops::Drop` then its `Drop::drop` "
+"implementation will be called."
+msgstr "丢弃某个值时,如果该值实现了 `std::ops::Drop`,则会调用其 `Drop::drop` 实现。"
#: src/memory-management/drop.md
-msgid ""
-"All its fields will then be dropped too, whether or not it implements `Drop`."
+msgid "All its fields will then be dropped too, whether or not it implements `Drop`."
msgstr "然后,该值所有字段也会被丢弃,无论其是否实现了 `Drop`。"
#: src/memory-management/drop.md
msgid ""
-"`std::mem::drop` is just an empty function that takes any value. The "
-"significance is that it takes ownership of the value, so at the end of its "
-"scope it gets dropped. This makes it a convenient way to explicitly drop "
-"values earlier than they would otherwise go out of scope."
+"`std::mem::drop` is just an empty function that takes any value. The significance is "
+"that it takes ownership of the value, so at the end of its scope it gets dropped. This "
+"makes it a convenient way to explicitly drop values earlier than they would otherwise go "
+"out of scope."
msgstr ""
-"`std::mem::drop` 只是一个采用任何值的空函数。重要的是它获得了值的所有权,因此"
-"在其作用域结束时便会被丢弃。如此您可以轻松提前明确地丢弃值,而不必等到值超过"
-"范围的时候。"
+"`std::mem::drop` 只是一个采用任何值的空函数。重要的是它获得了值的所有权,因此在其作用域结"
+"束时便会被丢弃。如此您可以轻松提前明确地丢弃值,而不必等到值超过范围的时候。"
#: src/memory-management/drop.md
msgid ""
-"This can be useful for objects that do some work on `drop`: releasing locks, "
-"closing files, etc."
+"This can be useful for objects that do some work on `drop`: releasing locks, closing "
+"files, etc."
msgstr "这对于通过 `drop` 执行任务的对象来说非常有用,例如释放锁、关闭文件等。"
#: src/memory-management/drop.md
@@ -7963,11 +7586,11 @@ msgstr "为什么 `Drop::drop` 不使用 `self`?"
#: src/memory-management/drop.md
msgid ""
-"Short-answer: If it did, `std::mem::drop` would be called at the end of the "
-"block, resulting in another call to `Drop::drop`, and a stack overflow!"
+"Short-answer: If it did, `std::mem::drop` would be called at the end of the block, "
+"resulting in another call to `Drop::drop`, and a stack overflow!"
msgstr ""
-"简答:如果这样的话,系统会在代码块结尾 调用 `std::mem::drop`,进而引发再一次"
-"调用 `Drop::drop`,并引发堆栈 溢出!"
+"简答:如果这样的话,系统会在代码块结尾 调用 `std::mem::drop`,进而引发再一次调用 `Drop::"
+"drop`,并引发堆栈 溢出!"
#: src/memory-management/drop.md
msgid "Try replacing `drop(a)` with `a.drop()`."
@@ -7975,12 +7598,12 @@ msgstr "尝试用 `a.drop()` 替换 `drop(a)`。"
#: src/memory-management/exercise.md
msgid ""
-"In this example, we will implement a complex data type that owns all of its "
-"data. We will use the \"builder pattern\" to support building a new value "
-"piece-by-piece, using convenience functions."
+"In this example, we will implement a complex data type that owns all of its data. We "
+"will use the \"builder pattern\" to support building a new value piece-by-piece, using "
+"convenience functions."
msgstr ""
-"在此示例中,我们将实现一个拥有全部数据所有权的复杂数据类型。我们将使用 “构建"
-"器模式”来支持逐步构建新值,通过便捷函数来实现。"
+"在此示例中,我们将实现一个拥有全部数据所有权的复杂数据类型。我们将使用 “构建器模式”来支持"
+"逐步构建新值,通过便捷函数来实现。"
#: src/memory-management/exercise.md
msgid "Fill in the missing pieces."
@@ -8001,10 +7624,8 @@ msgid "\"1\""
msgstr "\"1\""
#: src/memory-management/exercise.md src/memory-management/solution.md
-msgid ""
-"/// A builder for a Package. Use `build()` to create the `Package` itself.\n"
-msgstr ""
-"/// A builder for a Package. Use `build()` to create the `Package` itself.\n"
+msgid "/// A builder for a Package. Use `build()` to create the `Package` itself.\n"
+msgstr "/// A builder for a Package. Use `build()` to create the `Package` itself.\n"
#: src/memory-management/exercise.md
msgid "\"2\""
@@ -8102,17 +7723,12 @@ msgstr ""
msgid "[Exercise: Binary Tree](./smart-pointers/exercise.md) (30 minutes)"
msgstr ""
-#: src/smart-pointers.md
-msgid "This segment should take about 55 minutes"
-msgstr ""
-
#: src/smart-pointers/box.md
msgid ""
-"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned "
-"pointer to data on the heap:"
+"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned pointer to data "
+"on the heap:"
msgstr ""
-"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) 是指向堆上数据的"
-"自有指针:"
+"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) 是指向堆上数据的自有指针:"
#: src/smart-pointers/box.md
msgid "\"five: {}\""
@@ -8120,25 +7736,23 @@ msgstr "\"five: {}\""
#: src/smart-pointers/box.md
msgid ""
-"`Box` implements `Deref`, which means that you can [call "
-"methods from `T` directly on a `Box`](https://doc.rust-lang.org/std/ops/"
-"trait.Deref.html#more-on-deref-coercion)."
+"`Box` implements `Deref`, which means that you can [call methods from `T` "
+"directly on a `Box`](https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-"
+"coercion)."
msgstr ""
-"`Box` 会实现 `Deref`,这意味着您可以[直接在 `Box` 上通过 "
-"`T` 调用相应方法](https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-"
-"deref-coercion)。"
+"`Box` 会实现 `Deref`,这意味着您可以[直接在 `Box` 上通过 `T` 调用相应方"
+"法](https://doc.rust-lang.org/std/ops/trait.Deref.html#more-on-deref-coercion)。"
#: src/smart-pointers/box.md
-msgid ""
-"Recursive data types or data types with dynamic sizes need to use a `Box`:"
+msgid "Recursive data types or data types with dynamic sizes need to use a `Box`:"
msgstr "递归数据类型或具有动态大小的数据类型需要使用 `Box`:"
#: src/smart-pointers/box.md
-msgid "/// A non-empty list: first element and the rest of the list.\n"
+msgid "/// A non-empty list: first element and the rest of the list."
msgstr ""
#: src/smart-pointers/box.md
-msgid "/// An empty list.\n"
+msgid "/// An empty list."
msgstr ""
#: src/smart-pointers/box.md
@@ -8150,49 +7764,34 @@ msgstr "\"{list:?}\""
msgid ""
"```bob\n"
" Stack Heap\n"
-".- - - - - - - - - - - - - - . .- - - - - - - - - - - - - - - - - - - - "
-"- - - - -.\n"
+".- - - - - - - - - - - - - - . .- - - - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": "
-"list : : :\n"
-": +---------+----+----+ : : +---------+----+----+ +------+----"
-"+----+ :\n"
-": | Element | 1 | o--+----+-----+--->| Element | 2 | o--+--->| Nil | // "
-"| // | :\n"
-": +---------+----+----+ : : +---------+----+----+ +------+----"
-"+----+ :\n"
+": list : : :\n"
+": +---------+----+----+ : : +---------+----+----+ +------+----+----+ :\n"
+": | Element | 1 | o--+----+-----+--->| Element | 2 | o--+--->| Nil | // | // | :\n"
+": +---------+----+----+ : : +---------+----+----+ +------+----+----+ :\n"
": : : :\n"
": : : :\n"
-"'- - - - - - - - - - - - - - ' '- - - - - - - - - - - - - - - - - - - - "
-"- - - - -'\n"
+"'- - - - - - - - - - - - - - ' '- - - - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
msgstr ""
"```bob\n"
" 栈 堆\n"
-".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - "
-"- -.\n"
+".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": "
-"list : : :\n"
-": +------+----+----+ : : +------+----+----+ +------+----+----"
-"+ :\n"
-": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // "
-"| :\n"
-": +------+----+----+ : : +------+----+----+ +------+----+----"
-"+ :\n"
+": list : : :\n"
+": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n"
+": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :\n"
+": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n"
": : : :\n"
": : : :\n"
-"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - "
-"- -'\n"
+"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
#: src/smart-pointers/box.md
#, fuzzy
-msgid ""
-"`Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be "
-"not null."
-msgstr ""
-"在 C++ 中,`Box` 与 `std::unique_ptr` 类似,除了它一定会不为 null 以外。"
+msgid "`Box` is like `std::unique_ptr` in C++, except that it's guaranteed to be not null."
+msgstr "在 C++ 中,`Box` 与 `std::unique_ptr` 类似,除了它一定会不为 null 以外。"
#: src/smart-pointers/box.md
msgid "A `Box` can be useful when you:"
@@ -8200,46 +7799,44 @@ msgstr "在以下情况下,`Box` 可能会很实用:"
#: src/smart-pointers/box.md
msgid ""
-"have a type whose size that can't be known at compile time, but the Rust "
-"compiler wants to know an exact size."
+"have a type whose size that can't be known at compile time, but the Rust compiler wants "
+"to know an exact size."
msgstr "在编译时间遇到无法知晓大小的类型,但 Rust 编译器需要知道确切大小。"
#: src/smart-pointers/box.md
msgid ""
-"want to transfer ownership of a large amount of data. To avoid copying large "
-"amounts of data on the stack, instead store the data on the heap in a `Box` "
-"so only the pointer is moved."
+"want to transfer ownership of a large amount of data. To avoid copying large amounts of "
+"data on the stack, instead store the data on the heap in a `Box` so only the pointer is "
+"moved."
msgstr ""
-"想要转让大量数据的所有权。为避免在堆栈上复制大量数据,请改为将数据存储在 "
-"`Box` 中的堆上,以便仅移动指针。"
+"想要转让大量数据的所有权。为避免在堆栈上复制大量数据,请改为将数据存储在 `Box` 中的堆上,"
+"以便仅移动指针。"
#: src/smart-pointers/box.md
#, fuzzy
msgid ""
-"If `Box` was not used and we attempted to embed a `List` directly into the "
-"`List`, the compiler would not compute a fixed size of the struct in memory "
-"(`List` would be of infinite size)."
+"If `Box` was not used and we attempted to embed a `List` directly into the `List`, the "
+"compiler would not compute a fixed size of the struct in memory (`List` would be of "
+"infinite size)."
msgstr ""
-"如果这里未使用 `Box`,且我们曾尝试将一个 `List` 直接嵌入 `List`, 编译器就不"
-"会计算内存中结构体的固定大小,结构体看起来会像是无限大。"
+"如果这里未使用 `Box`,且我们曾尝试将一个 `List` 直接嵌入 `List`, 编译器就不会计算内存中"
+"结构体的固定大小,结构体看起来会像是无限大。"
#: src/smart-pointers/box.md
msgid ""
-"`Box` solves this problem as it has the same size as a regular pointer and "
-"just points at the next element of the `List` in the heap."
+"`Box` solves this problem as it has the same size as a regular pointer and just points "
+"at the next element of the `List` in the heap."
msgstr ""
-"`Box` 大小与一般指针相同,并且只会指向堆中的下一个 `List` 元素, 因此可以解决"
-"这个问题。"
+"`Box` 大小与一般指针相同,并且只会指向堆中的下一个 `List` 元素, 因此可以解决这个问题。"
#: src/smart-pointers/box.md
msgid ""
-"Remove the `Box` in the List definition and show the compiler error. "
-"\"Recursive with indirection\" is a hint you might want to use a Box or "
-"reference of some kind, instead of storing a value directly."
+"Remove the `Box` in the List definition and show the compiler error. \"Recursive with "
+"indirection\" is a hint you might want to use a Box or reference of some kind, instead "
+"of storing a value directly."
msgstr ""
-"将 `Box` 从 List 定义中移除后,画面上会显示编译器错误。如果您看到“Recursive "
-"with indirection”错误消息,这是在提示您使用 Box 或其他类型的引用,而不是直接"
-"储存值。"
+"将 `Box` 从 List 定义中移除后,画面上会显示编译器错误。如果您看到“Recursive with "
+"indirection”错误消息,这是在提示您使用 Box 或其他类型的引用,而不是直接储存值。"
#: src/smart-pointers/box.md
msgid "Niche Optimization"
@@ -8247,11 +7844,9 @@ msgstr "小众优化"
#: src/smart-pointers/box.md
msgid ""
-"A `Box` cannot be empty, so the pointer is always valid and non-`null`. This "
-"allows the compiler to optimize the memory layout:"
-msgstr ""
-"`Box` 不得为空,因此指针始终有效且非 `null`。这样, 编译器就可以优化内存布"
-"局:"
+"A `Box` cannot be empty, so the pointer is always valid and non-`null`. This allows the "
+"compiler to optimize the memory layout:"
+msgstr "`Box` 不得为空,因此指针始终有效且非 `null`。这样, 编译器就可以优化内存布局:"
#: src/smart-pointers/box.md
#, fuzzy
@@ -8271,31 +7866,24 @@ msgid ""
msgstr ""
"```bob\n"
" 栈 堆\n"
-".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - "
-"- -.\n"
+".- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": "
-"list : : :\n"
-": +------+----+----+ : : +------+----+----+ +------+----+----"
-"+ :\n"
-": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // "
-"| :\n"
-": +------+----+----+ : : +------+----+----+ +------+----+----"
-"+ :\n"
+": list : : :\n"
+": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n"
+": | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :\n"
+": +------+----+----+ : : +------+----+----+ +------+----+----+ :\n"
": : : :\n"
": : : :\n"
-"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - "
-"- -'\n"
+"'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
#: src/smart-pointers/rc.md
msgid ""
-"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-"
-"counted shared pointer. Use this when you need to refer to the same data "
-"from multiple places:"
+"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-counted shared "
+"pointer. Use this when you need to refer to the same data from multiple places:"
msgstr ""
-"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) 是引用计数的共享指"
-"针。如果您需要从多个位置 引用相同的数据,请使用此指针:"
+"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) 是引用计数的共享指针。如果您需要"
+"从多个位置 引用相同的数据,请使用此指针:"
#: src/smart-pointers/rc.md
msgid "\"a: {a}\""
@@ -8308,25 +7896,24 @@ msgstr "\"b: {b}\""
#: src/smart-pointers/rc.md
#, fuzzy
msgid ""
-"See [`Arc`](../concurrency/shared_state/arc.md) and [`Mutex`](https://doc."
-"rust-lang.org/std/sync/struct.Mutex.html) if you are in a multi-threaded "
-"context."
+"See [`Arc`](../concurrency/shared_state/arc.md) and [`Mutex`](https://doc.rust-lang.org/"
+"std/sync/struct.Mutex.html) if you are in a multi-threaded context."
msgstr ""
-"如果您在多线程情境中,请参阅 [`Arc`](https://doc.rust-lang.org/std/sync/"
-"struct.Mutex.html)。"
+"如果您在多线程情境中,请参阅 [`Arc`](https://doc.rust-lang.org/std/sync/struct.Mutex."
+"html)。"
#: src/smart-pointers/rc.md
msgid ""
-"You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang."
-"org/std/rc/struct.Weak.html) pointer to create cycles that will get dropped."
+"You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang.org/std/rc/"
+"struct.Weak.html) pointer to create cycles that will get dropped."
msgstr ""
-"您可以将共享指针_降级_为 [`Weak`](https://doc.rust-lang.org/std/rc/struct."
-"Weak.html) 指针, 以便创建之后会被舍弃的循环引用。"
+"您可以将共享指针_降级_为 [`Weak`](https://doc.rust-lang.org/std/rc/struct.Weak.html) 指"
+"针, 以便创建之后会被舍弃的循环引用。"
#: src/smart-pointers/rc.md
msgid ""
-"`Rc`'s count ensures that its contained value is valid for as long as there "
-"are references."
+"`Rc`'s count ensures that its contained value is valid for as long as there are "
+"references."
msgstr "`Rc` 的计数可确保只要有引用,内含的值就会保持有效。"
#: src/smart-pointers/rc.md
@@ -8335,19 +7922,18 @@ msgstr "Rust 中的“Rc”与 C++ 中的“std::shared_ptr”类似。"
#: src/smart-pointers/rc.md
msgid ""
-"`Rc::clone` is cheap: it creates a pointer to the same allocation and "
-"increases the reference count. Does not make a deep clone and can generally "
-"be ignored when looking for performance issues in code."
+"`Rc::clone` is cheap: it creates a pointer to the same allocation and increases the "
+"reference count. Does not make a deep clone and can generally be ignored when looking "
+"for performance issues in code."
msgstr ""
-"`Rc::clone` 的成本很低:这个做法会创建指向相同分配的指针,并增加引用计数,而"
-"不会产生深层的克隆,排查代码性能问题时通常可以忽略。"
+"`Rc::clone` 的成本很低:这个做法会创建指向相同分配的指针,并增加引用计数,而不会产生深层"
+"的克隆,排查代码性能问题时通常可以忽略。"
#: src/smart-pointers/rc.md
msgid ""
-"`make_mut` actually clones the inner value if necessary (\"clone-on-write\") "
-"and returns a mutable reference."
-msgstr ""
-"`make_mut` 实际上会在必要时克隆内部值(“clone-on-write”),并返回可变的引用。"
+"`make_mut` actually clones the inner value if necessary (\"clone-on-write\") and returns "
+"a mutable reference."
+msgstr "`make_mut` 实际上会在必要时克隆内部值(“clone-on-write”),并返回可变的引用。"
#: src/smart-pointers/rc.md
msgid "Use `Rc::strong_count` to check the reference count."
@@ -8356,16 +7942,14 @@ msgstr "使用 `Rc::strong_count` 可查看引用计数。"
#: src/smart-pointers/rc.md
#, fuzzy
msgid ""
-"`Rc::downgrade` gives you a _weakly reference-counted_ object to create "
-"cycles that will be dropped properly (likely in combination with `RefCell`)."
+"`Rc::downgrade` gives you a _weakly reference-counted_ object to create cycles that will "
+"be dropped properly (likely in combination with `RefCell`)."
msgstr ""
-"`Rc::downgrade` 会向您提供 _弱引用计数_ 对象, 以便创建之后会被适当舍弃的周期"
-"(可能会与 `RefCell` 组合)。"
+"`Rc::downgrade` 会向您提供 _弱引用计数_ 对象, 以便创建之后会被适当舍弃的周期(可能会与 "
+"`RefCell` 组合)。"
#: src/smart-pointers/trait-objects.md
-msgid ""
-"Trait objects allow for values of different types, for instance in a "
-"collection:"
+msgid "Trait objects allow for values of different types, for instance in a collection:"
msgstr "特征(Trait)对象可接受不同类型的值,举例来说,在集合中会是这样:"
#: src/smart-pointers/trait-objects.md
@@ -8381,160 +7965,102 @@ msgstr "以下是分配 `pets` 后的内存布局:"
msgid ""
"```bob\n"
" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - "
-"- -.\n"
+".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": pets : : +----+----+----+----"
-"+ :\n"
-": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o "
-"| :\n"
-": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----"
-"+ :\n"
-": | len | 2 | : : +-|-|-+-|-|-+ "
-"`---------. :\n"
-": | capacity | 2 | : : | | | | data "
-"| :\n"
-": +-----------+-------+ : : | | | | +-------+--|-------"
-"+ :\n"
-": : : | | | '-->| name | o, 4, 4 "
-"| :\n"
-": : : | | | | age | 5 "
-"| :\n"
-"`- - - - - - - - - - - - - -' : | | | +-------+----------"
-"+ :\n"
-" : | | "
-"| :\n"
-" : | | | "
-"vtable :\n"
-" : | | | +----------------------"
-"+ :\n"
-" : | | '---->| \"::talk\" "
-"| :\n"
-" : | | +----------------------"
-"+ :\n"
-" : | "
-"| :\n"
-" : | | "
-"data :\n"
-" : | | +-------+-------"
-"+ :\n"
-" : | '-->| lives | 9 "
-"| :\n"
-" : | +-------+-------"
-"+ :\n"
-" : "
-"| :\n"
-" : | "
-"vtable :\n"
-" : | +----------------------"
-"+ :\n"
-" : '---->| \"::talk\" "
-"| :\n"
-" : +----------------------"
-"+ :\n"
+": pets : : +----+----+----+----+ :\n"
+": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o | :\n"
+": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----+ :\n"
+": | len | 2 | : : +-|-|-+-|-|-+ `---------. :\n"
+": | capacity | 2 | : : | | | | data | :\n"
+": +-----------+-------+ : : | | | | +-------+--|-------+ :\n"
+": : : | | | '-->| name | o, 4, 4 | :\n"
+": : : | | | | age | 5 | :\n"
+"`- - - - - - - - - - - - - -' : | | | +-------+----------+ :\n"
+" : | | | :\n"
+" : | | | vtable :\n"
+" : | | | +----------------------+ :\n"
+" : | | '---->| \"::talk\" | :\n"
+" : | | +----------------------+ :\n"
+" : | | :\n"
+" : | | data :\n"
+" : | | +-------+-------+ :\n"
+" : | '-->| lives | 9 | :\n"
+" : | +-------+-------+ :\n"
+" : | :\n"
+" : | vtable :\n"
+" : | +----------------------+ :\n"
+" : '---->| \"::talk\" | :\n"
+" : +----------------------+ :\n"
" : :\n"
-" '- - - - - - - - - - - - - - - - - - - - - "
-"- -'\n"
+" '- - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
msgstr ""
"```bob\n"
" Stack Heap\n"
-".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - "
-"- -.\n"
+".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": pets : : +----+----+----+----"
-"+ :\n"
-": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o "
-"| :\n"
-": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----"
-"+ :\n"
-": | len | 2 | : : +-|-|-+-|-|-+ "
-"`---------. :\n"
-": | capacity | 2 | : : | | | | data "
-"| :\n"
-": +-----------+-------+ : : | | | | +-------+--|-------"
-"+ :\n"
-": : : | | | '-->| name | o, 4, 4 "
-"| :\n"
-": : : | | | | age | 5 "
-"| :\n"
-"`- - - - - - - - - - - - - -' : | | | +-------+----------"
-"+ :\n"
-" : | | "
-"| :\n"
-" : | | | "
-"vtable :\n"
-" : | | | +----------------------"
-"+ :\n"
-" : | | '---->| \"::talk\" "
-"| :\n"
-" : | | +----------------------"
-"+ :\n"
-" : | "
-"| :\n"
-" : | | "
-"data :\n"
-" : | | +-------+-------"
-"+ :\n"
-" : | '-->| lives | 9 "
-"| :\n"
-" : | +-------+-------"
-"+ :\n"
-" : "
-"| :\n"
-" : | "
-"vtable :\n"
-" : | +----------------------"
-"+ :\n"
-" : '---->| \"::talk\" "
-"| :\n"
-" : +----------------------"
-"+ :\n"
+": pets : : +----+----+----+----+ :\n"
+": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o | :\n"
+": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----+ :\n"
+": | len | 2 | : : +-|-|-+-|-|-+ `---------. :\n"
+": | capacity | 2 | : : | | | | data | :\n"
+": +-----------+-------+ : : | | | | +-------+--|-------+ :\n"
+": : : | | | '-->| name | o, 4, 4 | :\n"
+": : : | | | | age | 5 | :\n"
+"`- - - - - - - - - - - - - -' : | | | +-------+----------+ :\n"
+" : | | | :\n"
+" : | | | vtable :\n"
+" : | | | +----------------------+ :\n"
+" : | | '---->| \"::talk\" | :\n"
+" : | | +----------------------+ :\n"
+" : | | :\n"
+" : | | data :\n"
+" : | | +-------+-------+ :\n"
+" : | '-->| lives | 9 | :\n"
+" : | +-------+-------+ :\n"
+" : | :\n"
+" : | vtable :\n"
+" : | +----------------------+ :\n"
+" : '---->| \"::talk\" | :\n"
+" : +----------------------+ :\n"
" : :\n"
-" '- - - - - - - - - - - - - - - - - - - - - "
-"- -'\n"
+" '- - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
#: src/smart-pointers/trait-objects.md
msgid ""
-"Types that implement a given trait may be of different sizes. This makes it "
-"impossible to have things like `Vec` in the example above."
+"Types that implement a given trait may be of different sizes. This makes it impossible "
+"to have things like `Vec` in the example above."
msgstr ""
-"实现给定 trait 的类型可能大小不同。因此,上例中不可能具有像 `Vec` 这"
-"样的项。"
+"实现给定 trait 的类型可能大小不同。因此,上例中不可能具有像 `Vec` 这样的项。"
#: src/smart-pointers/trait-objects.md
msgid ""
-"`dyn Pet` is a way to tell the compiler about a dynamically sized type that "
-"implements `Pet`."
+"`dyn Pet` is a way to tell the compiler about a dynamically sized type that implements "
+"`Pet`."
msgstr "可通过“dyn Pet”这个方法向编译器告知实现“Pet”的动态大小类型。"
#: src/smart-pointers/trait-objects.md
msgid ""
-"In the example, `pets` is allocated on the stack and the vector data is on "
-"the heap. The two vector elements are _fat pointers_:"
-msgstr ""
-"在本例中,`pets` 在栈上分配内存,矢量数据存储在堆上。这两个矢量元素是 _胖指针"
-"_:"
+"In the example, `pets` is allocated on the stack and the vector data is on the heap. The "
+"two vector elements are _fat pointers_:"
+msgstr "在本例中,`pets` 在栈上分配内存,矢量数据存储在堆上。这两个矢量元素是 _胖指针_:"
#: src/smart-pointers/trait-objects.md
msgid ""
-"A fat pointer is a double-width pointer. It has two components: a pointer to "
-"the actual object and a pointer to the [virtual method table](https://en."
-"wikipedia.org/wiki/Virtual_method_table) (vtable) for the `Pet` "
-"implementation of that particular object."
+"A fat pointer is a double-width pointer. It has two components: a pointer to the actual "
+"object and a pointer to the [virtual method table](https://en.wikipedia.org/wiki/"
+"Virtual_method_table) (vtable) for the `Pet` implementation of that particular object."
msgstr ""
-"胖指针属于全角指针。它包含两个部分:指向实际对象的指针,以及指向该特定对象的 "
-"`Pet` 实现的 [虚拟方法表](https://en.wikipedia.org/wiki/"
-"Virtual_method_table) (vtable) 的指针。"
+"胖指针属于全角指针。它包含两个部分:指向实际对象的指针,以及指向该特定对象的 `Pet` 实现"
+"的 [虚拟方法表](https://en.wikipedia.org/wiki/Virtual_method_table) (vtable) 的指针。"
#: src/smart-pointers/trait-objects.md
msgid ""
-"The data for the `Dog` named Fido is the `name` and `age` fields. The `Cat` "
-"has a `lives` field."
+"The data for the `Dog` named Fido is the `name` and `age` fields. The `Cat` has a "
+"`lives` field."
msgstr ""
-"`Dog`(名为 Fido)类型的数据是 `name` 和 `age` 字段。`Cat` 类型包含一个 "
-"`lives` 字段。"
+"`Dog`(名为 Fido)类型的数据是 `name` 和 `age` 字段。`Cat` 类型包含一个 `lives` 字段。"
#: src/smart-pointers/trait-objects.md
msgid "Compare these outputs in the above example:"
@@ -8542,14 +8068,14 @@ msgstr "比较上述示例中的这些输出:"
#: src/smart-pointers/exercise.md
msgid ""
-"A binary tree is a tree-type data structure where every node has two "
-"children (left and right). We will create a tree where each node stores a "
-"value. For a given node N, all nodes in a N's left subtree contain smaller "
-"values, and all nodes in N's right subtree will contain larger values."
+"A binary tree is a tree-type data structure where every node has two children (left and "
+"right). We will create a tree where each node stores a value. For a given node N, all "
+"nodes in a N's left subtree contain smaller values, and all nodes in N's right subtree "
+"will contain larger values."
msgstr ""
-"二元树是一种树型数据结构,其中每个节点都有两个子节点(左侧和右侧)。我们将创"
-"建一个树状结构,其中每个节点存储一个值。对于给定的节点 N,N 的左侧子树中的所"
-"有节点都包含较小的值,而 N 的右侧子树中的所有节点都将包含较大的值。"
+"二元树是一种树型数据结构,其中每个节点都有两个子节点(左侧和右侧)。我们将创建一个树状结"
+"构,其中每个节点存储一个值。对于给定的节点 N,N 的左侧子树中的所有节点都包含较小的值,而 "
+"N 的右侧子树中的所有节点都将包含较大的值。"
#: src/smart-pointers/exercise.md
msgid "Implement the following types, so that the given tests pass."
@@ -8557,8 +8083,7 @@ msgstr "实现以下类型,以便通过指定的测试。"
#: src/smart-pointers/exercise.md
msgid ""
-"Extra Credit: implement an iterator over a binary tree that returns the "
-"values in order."
+"Extra Credit: implement an iterator over a binary tree that returns the values in order."
msgstr "额外提示:对按顺序返回值的二元树实现迭代器。"
#: src/smart-pointers/exercise.md src/smart-pointers/solution.md
@@ -8581,7 +8106,7 @@ msgstr ""
#: src/smart-pointers/exercise.md
#, fuzzy
-msgid "// Implement `new`, `insert`, `len`, and `has`.\n"
+msgid "// Implement `new`, `insert`, `len`, and `has`."
msgstr "// Implement `new`, `insert`, and `has`.\n"
#: src/smart-pointers/exercise.md src/smart-pointers/solution.md
@@ -8600,14 +8125,7 @@ msgstr ""
"请参阅 [借用](ownership/borrowing.md)。"
#: src/welcome-day-3-afternoon.md
-msgid ""
-"[Slices and Lifetimes](./slices-and-lifetimes.md) (1 hour and 10 minutes)"
-msgstr ""
-
-#: src/welcome-day-3-afternoon.md
-msgid ""
-"Including 10 minute breaks, this session should take about 2 hours and 20 "
-"minutes"
+msgid "[Slices and Lifetimes](./slices-and-lifetimes.md) (1 hour and 10 minutes)"
msgstr ""
#: src/borrowing.md
@@ -8629,8 +8147,8 @@ msgstr ""
#: src/borrowing/shared.md
#, fuzzy
msgid ""
-"As we saw before, instead of transferring ownership when calling a function, "
-"you can let a function _borrow_ the value:"
+"As we saw before, instead of transferring ownership when calling a function, you can let "
+"a function _borrow_ the value:"
msgstr "调用函数时,你可以让 函数“借用”值,而不是转移所有权:"
#: src/borrowing/shared.md
@@ -8643,10 +8161,9 @@ msgstr "调用方会保留输入的所有权。"
#: src/borrowing/shared.md
msgid ""
-"This slide is a review of the material on references from day 1, expanding "
-"slightly to include function arguments and return values."
-msgstr ""
-"此幻灯片是对第 1 天引用材料的回顾,并稍作了扩展,添加了函数参数和返回值。"
+"This slide is a review of the material on references from day 1, expanding slightly to "
+"include function arguments and return values."
+msgstr "此幻灯片是对第 1 天引用材料的回顾,并稍作了扩展,添加了函数参数和返回值。"
#: src/borrowing/shared.md
msgid "Notes on stack returns:"
@@ -8655,17 +8172,17 @@ msgstr "关于栈返回的说明:"
#: src/borrowing/shared.md
#, fuzzy
msgid ""
-"Demonstrate that the return from `add` is cheap because the compiler can "
-"eliminate the copy operation. Change the above code to print stack addresses "
-"and run it on the [Playground](https://play.rust-lang.org/?"
-"version=stable&mode=release&edition=2021&gist=0cb13be1c05d7e3446686ad9947c4671) "
-"or look at the assembly in [Godbolt](https://rust.godbolt.org/). In the "
-"\"DEBUG\" optimization level, the addresses should change, while they stay "
-"the same when changing to the \"RELEASE\" setting:"
+"Demonstrate that the return from `add` is cheap because the compiler can eliminate the "
+"copy operation. Change the above code to print stack addresses and run it on the "
+"[Playground](https://play.rust-lang.org/?"
+"version=stable&mode=release&edition=2021&gist=0cb13be1c05d7e3446686ad9947c4671) or look "
+"at the assembly in [Godbolt](https://rust.godbolt.org/). In the \"DEBUG\" optimization "
+"level, the addresses should change, while they stay the same when changing to the "
+"\"RELEASE\" setting:"
msgstr ""
-"证明从 `add` 返回的开销很低,因为编译器可以消除复制操作。更改上述代码以输出栈"
-"地址,并在 [Playground](https://play.rust-lang.org/) 上运行它。在“调试”优化级"
-"别中,地址应发生变化,而在改成“发布”设置时保持不变:"
+"证明从 `add` 返回的开销很低,因为编译器可以消除复制操作。更改上述代码以输出栈地址,并在 "
+"[Playground](https://play.rust-lang.org/) 上运行它。在“调试”优化级别中,地址应发生变化,"
+"而在改成“发布”设置时保持不变:"
#: src/borrowing/shared.md
msgid "The Rust compiler can do return value optimization (RVO)."
@@ -8675,19 +8192,17 @@ msgstr "Rust 编译器能够执行返回值优化 (RVO)。"
#, fuzzy
msgid ""
"In C++, copy elision has to be defined in the language specification because "
-"constructors can have side effects. In Rust, this is not an issue at all. If "
-"RVO did not happen, Rust will always perform a simple and efficient `memcpy` "
-"copy."
+"constructors can have side effects. In Rust, this is not an issue at all. If RVO did not "
+"happen, Rust will always perform a simple and efficient `memcpy` copy."
msgstr ""
-"在 C++ 中,必须在语言规范中定义复制省略,因为构造函数可能会有附带效应。在 "
-"Rust 中,这完全不是问题。如果 RVO 未发生,Rust 将始终执行简单且高效的 "
-"`memcpy` 复制。"
+"在 C++ 中,必须在语言规范中定义复制省略,因为构造函数可能会有附带效应。在 Rust 中,这完全"
+"不是问题。如果 RVO 未发生,Rust 将始终执行简单且高效的 `memcpy` 复制。"
#: src/borrowing/borrowck.md
#, fuzzy
msgid ""
-"Rust's _borrow checker_ puts constraints on the ways you can borrow values. "
-"For a given value, at any time:"
+"Rust's _borrow checker_ puts constraints on the ways you can borrow values. For a given "
+"value, at any time:"
msgstr "Rust 限制了借用值的方式:"
#: src/borrowing/borrowck.md
@@ -8702,70 +8217,66 @@ msgstr "你可以有且只有一个 `&mut T` 值。"
#: src/borrowing/borrowck.md
msgid ""
-"Note that the requirement is that conflicting references not _exist_ at the "
-"same point. It does not matter where the reference is dereferenced."
-msgstr ""
-"请注意,要求是相冲突的引用不能 _同时存在_。而引用的解引用位置无关紧要。"
+"Note that the requirement is that conflicting references not _exist_ at the same point. "
+"It does not matter where the reference is dereferenced."
+msgstr "请注意,要求是相冲突的引用不能 _同时存在_。而引用的解引用位置无关紧要。"
#: src/borrowing/borrowck.md
msgid ""
-"The above code does not compile because `a` is borrowed as mutable (through "
-"`c`) and as immutable (through `b`) at the same time."
+"The above code does not compile because `a` is borrowed as mutable (through `c`) and as "
+"immutable (through `b`) at the same time."
msgstr ""
-"上述代码无法编译,因为 `a` 同时作为可变值(通过 `c`)和不可变值(通过 `b`)被"
-"借用。"
+"上述代码无法编译,因为 `a` 同时作为可变值(通过 `c`)和不可变值(通过 `b`)被借用。"
#: src/borrowing/borrowck.md
msgid ""
-"Move the `println!` statement for `b` before the scope that introduces `c` "
-"to make the code compile."
-msgstr ""
-"将`b` 的 `println!` 语句移到引入 `c` 的作用域之前,这段代码就可以编译。"
+"Move the `println!` statement for `b` before the scope that introduces `c` to make the "
+"code compile."
+msgstr "将`b` 的 `println!` 语句移到引入 `c` 的作用域之前,这段代码就可以编译。"
#: src/borrowing/borrowck.md
msgid ""
-"After that change, the compiler realizes that `b` is only ever used before "
-"the new mutable borrow of `a` through `c`. This is a feature of the borrow "
-"checker called \"non-lexical lifetimes\"."
+"After that change, the compiler realizes that `b` is only ever used before the new "
+"mutable borrow of `a` through `c`. This is a feature of the borrow checker called \"non-"
+"lexical lifetimes\"."
msgstr ""
-"这样更改后,编译器会发现 `b` 只在通过 `c` 对 `a` 进行新可变借用之前使用过。这"
-"是借用检查器的一个功能,名为“非词法作用域生命周期”。"
+"这样更改后,编译器会发现 `b` 只在通过 `c` 对 `a` 进行新可变借用之前使用过。这是借用检查器"
+"的一个功能,名为“非词法作用域生命周期”。"
#: src/borrowing/borrowck.md
#, fuzzy
msgid ""
-"The exclusive reference constraint is quite strong. Rust uses it to ensure "
-"that data races do not occur. Rust also _relies_ on this constraint to "
-"optimize code. For example, a value behind a shared reference can be safely "
-"cached in a register for the lifetime of that reference."
+"The exclusive reference constraint is quite strong. Rust uses it to ensure that data "
+"races do not occur. Rust also _relies_ on this constraint to optimize code. For example, "
+"a value behind a shared reference can be safely cached in a register for the lifetime of "
+"that reference."
msgstr ""
-"独占引用的约束条件非常严格。Rust 使用它来确保不会发生数据争用。Rust 还会 _依"
-"赖_ 此约束条件来优化代码。例如,共享引用背后的值可以安全地缓存在寄存器中,并"
-"在该引用的生命周期内保持有效。"
+"独占引用的约束条件非常严格。Rust 使用它来确保不会发生数据争用。Rust 还会 _依赖_ 此约束条"
+"件来优化代码。例如,共享引用背后的值可以安全地缓存在寄存器中,并在该引用的生命周期内保持"
+"有效。"
#: src/borrowing/borrowck.md
msgid ""
-"The borrow checker is designed to accommodate many common patterns, such as "
-"taking exclusive references to different fields in a struct at the same "
-"time. But, there are some situations where it doesn't quite \"get it\" and "
-"this often results in \"fighting with the borrow checker.\""
+"The borrow checker is designed to accommodate many common patterns, such as taking "
+"exclusive references to different fields in a struct at the same time. But, there are "
+"some situations where it doesn't quite \"get it\" and this often results in \"fighting "
+"with the borrow checker.\""
msgstr ""
-"借用检查器专用于处理许多常见模式,例如同时对结构体中的不同字段进行独占引用。"
-"但在某些情况下,它并不能完全 “领会”您的意图,这往往会导致 “与借用检查器进行一"
-"番斗争”。"
+"借用检查器专用于处理许多常见模式,例如同时对结构体中的不同字段进行独占引用。但在某些情况"
+"下,它并不能完全 “领会”您的意图,这往往会导致 “与借用检查器进行一番斗争”。"
#: src/borrowing/interior-mutability.md
msgid ""
-"In some situations, it's necessary to modify data behind a shared (read-"
-"only) reference. For example, a shared data structure might have an internal "
-"cache, and wish to update that cache from read-only methods."
+"In some situations, it's necessary to modify data behind a shared (read-only) reference. "
+"For example, a shared data structure might have an internal cache, and wish to update "
+"that cache from read-only methods."
msgstr ""
#: src/borrowing/interior-mutability.md
msgid ""
-"The \"interior mutability\" pattern allows exclusive (mutable) access behind "
-"a shared reference. The standard library provides several ways to do this, "
-"all while still ensuring safety, typically by performing a runtime check."
+"The \"interior mutability\" pattern allows exclusive (mutable) access behind a shared "
+"reference. The standard library provides several ways to do this, all while still "
+"ensuring safety, typically by performing a runtime check."
msgstr ""
#: src/borrowing/interior-mutability.md
@@ -8788,95 +8299,82 @@ msgstr "`Cell`"
#: src/borrowing/interior-mutability.md
msgid ""
-"`Cell` wraps a value and allows getting or setting the value, even with a "
-"shared reference to the `Cell`. However, it does not allow any references to "
-"the value. Since there are no references, borrowing rules cannot be broken."
+"`Cell` wraps a value and allows getting or setting the value, even with a shared "
+"reference to the `Cell`. However, it does not allow any references to the value. Since "
+"there are no references, borrowing rules cannot be broken."
msgstr ""
#: src/borrowing/interior-mutability.md
msgid ""
-"The main thing to take away from this slide is that Rust provides _safe_ "
-"ways to modify data behind a shared reference. There are a variety of ways "
-"to ensure that safety, and `RefCell` and `Cell` are two of them."
+"The main thing to take away from this slide is that Rust provides _safe_ ways to modify "
+"data behind a shared reference. There are a variety of ways to ensure that safety, and "
+"`RefCell` and `Cell` are two of them."
msgstr ""
#: src/borrowing/interior-mutability.md
msgid ""
-"`RefCell` enforces Rust's usual borrowing rules (either multiple shared "
-"references or a single exclusive reference) with a runtime check. In this "
-"case, all borrows are very short and never overlap, so the checks always "
-"succeed."
+"`RefCell` enforces Rust's usual borrowing rules (either multiple shared references or a "
+"single exclusive reference) with a runtime check. In this case, all borrows are very "
+"short and never overlap, so the checks always succeed."
msgstr ""
#: src/borrowing/interior-mutability.md
msgid ""
-"`Rc` only allows shared (read-only) access to its contents, since its "
-"purpose is to allow (and count) many references. But we want to modify the "
-"value, so we need interior mutability."
+"`Rc` only allows shared (read-only) access to its contents, since its purpose is to "
+"allow (and count) many references. But we want to modify the value, so we need interior "
+"mutability."
msgstr ""
#: src/borrowing/interior-mutability.md
msgid ""
-"`Cell` is a simpler means to ensure safety: it has a `set` method that takes "
-"`&self`. This needs no runtime check, but requires moving values, which can "
-"have its own cost."
+"`Cell` is a simpler means to ensure safety: it has a `set` method that takes `&self`. "
+"This needs no runtime check, but requires moving values, which can have its own cost."
msgstr ""
#: src/borrowing/interior-mutability.md
#, fuzzy
msgid ""
-"Demonstrate that reference loops can be created by adding `root` to `subtree."
-"children`."
-msgstr ""
-"演示可以通过向“subtree.children”添加“root”来创建引用循环(不要尝试输出"
-"它!)。"
+"Demonstrate that reference loops can be created by adding `root` to `subtree.children`."
+msgstr "演示可以通过向“subtree.children”添加“root”来创建引用循环(不要尝试输出它!)。"
#: src/borrowing/interior-mutability.md
msgid ""
-"To demonstrate a runtime panic, add a `fn inc(&mut self)` that increments "
-"`self.value` and calls the same method on its children. This will panic in "
-"the presence of the reference loop, with `thread 'main' panicked at 'already "
-"borrowed: BorrowMutError'`."
+"To demonstrate a runtime panic, add a `fn inc(&mut self)` that increments `self.value` "
+"and calls the same method on its children. This will panic in the presence of the "
+"reference loop, with `thread 'main' panicked at 'already borrowed: BorrowMutError'`."
msgstr ""
-"为了演示运行时 panic,请添加一个会递增“self.value”并以相同方法调用其子项"
-"的“fn inc(&mut self)”。如果存在引用循环,就会 panic,并且“thread”“main”会"
-"因“already borrowed: BorrowMutError”而 panic。"
+"为了演示运行时 panic,请添加一个会递增“self.value”并以相同方法调用其子项的“fn inc(&mut "
+"self)”。如果存在引用循环,就会 panic,并且“thread”“main”会因“already borrowed: "
+"BorrowMutError”而 panic。"
#: src/borrowing/exercise.md
msgid ""
-"You're working on implementing a health-monitoring system. As part of that, "
-"you need to keep track of users' health statistics."
-msgstr ""
-"你正在实现一个健康监控系统。作为其中的一部分,你需要对用户的健康统计数据进行"
-"追踪。"
+"You're working on implementing a health-monitoring system. As part of that, you need to "
+"keep track of users' health statistics."
+msgstr "你正在实现一个健康监控系统。作为其中的一部分,你需要对用户的健康统计数据进行追踪。"
#: src/borrowing/exercise.md
#, fuzzy
msgid ""
-"You'll start with a stubbed function in an `impl` block as well as a `User` "
-"struct definition. Your goal is to implement the stubbed out method on the "
-"`User` `struct` defined in the `impl` block."
+"You'll start with a stubbed function in an `impl` block as well as a `User` struct "
+"definition. Your goal is to implement the stubbed out method on the `User` `struct` "
+"defined in the `impl` block."
msgstr ""
-"`User` 结构体的定义和 `impl` 块中一些函数的框架已经给出。你的目标是实现在 "
-"`impl` 块中定义的 `User` `struct` 的方法。"
+"`User` 结构体的定义和 `impl` 块中一些函数的框架已经给出。你的目标是实现在 `impl` 块中定义"
+"的 `User` `struct` 的方法。"
#: src/borrowing/exercise.md
#, fuzzy
msgid ""
-"Copy the code below to and fill in the missing "
-"method:"
+"Copy the code below to and fill in the missing method:"
msgstr "将以下代码复制到 ,并填充缺失的方法:"
#: src/borrowing/exercise.md
-msgid ""
-"\"Update a user's statistics based on measurements from a visit to the "
-"doctor\""
-msgstr ""
-"\"Update a user's statistics based on measurements from a visit to the "
-"doctor\""
+msgid "\"Update a user's statistics based on measurements from a visit to the doctor\""
+msgstr "\"Update a user's statistics based on measurements from a visit to the doctor\""
-#: src/borrowing/exercise.md src/borrowing/solution.md
-#: src/android/build-rules/library.md src/android/aidl/client.md
+#: src/borrowing/exercise.md src/borrowing/solution.md src/android/build-rules/library.md
+#: src/android/aidl/client.md
msgid "\"Bob\""
msgstr "\"Bob\""
@@ -8893,24 +8391,19 @@ msgid "[String References](./slices-and-lifetimes/str.md) (10 minutes)"
msgstr ""
#: src/slices-and-lifetimes.md
-msgid ""
-"[Lifetime Annotations](./slices-and-lifetimes/lifetime-annotations.md) (10 "
-"minutes)"
+msgid "[Lifetime Annotations](./slices-and-lifetimes/lifetime-annotations.md) (10 minutes)"
msgstr ""
#: src/slices-and-lifetimes.md
-msgid ""
-"[Lifetime Elision](./slices-and-lifetimes/lifetime-elision.md) (5 minutes)"
+msgid "[Lifetime Elision](./slices-and-lifetimes/lifetime-elision.md) (5 minutes)"
msgstr ""
#: src/slices-and-lifetimes.md
-msgid ""
-"[Struct Lifetimes](./slices-and-lifetimes/struct-lifetimes.md) (5 minutes)"
+msgid "[Struct Lifetimes](./slices-and-lifetimes/struct-lifetimes.md) (5 minutes)"
msgstr ""
#: src/slices-and-lifetimes.md
-msgid ""
-"[Exercise: Protobuf Parsing](./slices-and-lifetimes/exercise.md) (30 minutes)"
+msgid "[Exercise: Protobuf Parsing](./slices-and-lifetimes/exercise.md) (30 minutes)"
msgstr ""
#: src/slices-and-lifetimes/slices.md
@@ -8933,75 +8426,70 @@ msgstr "请思考:如果我们改变 `a[3]`,将会产生怎样的后果?"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"We create a slice by borrowing `a` and specifying the starting and ending "
-"indexes in brackets."
+"We create a slice by borrowing `a` and specifying the starting and ending indexes in "
+"brackets."
msgstr "创建切片时,我们借用了 `a` ,并在方括号中标明了起始和结尾下标。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"If the slice starts at index 0, Rust’s range syntax allows us to drop the "
-"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are "
-"identical."
+"If the slice starts at index 0, Rust’s range syntax allows us to drop the starting "
+"index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are identical."
msgstr ""
-"如果切片的起始下标为 0, Rust 语法允许我们省略起始下标。比如说 `&a[0..a."
-"len()]` 与 `&a[..a.len()]` 是等价的。"
+"如果切片的起始下标为 0, Rust 语法允许我们省略起始下标。比如说 `&a[0..a.len()]` 与 `&a[.."
+"a.len()]` 是等价的。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are "
-"identical."
-msgstr ""
-"结尾下标也可以用相同方式省略。比如说 `&a[2..a.len()]` 和 `&a[2..]` 是等价的。"
+"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are identical."
+msgstr "结尾下标也可以用相同方式省略。比如说 `&a[2..a.len()]` 和 `&a[2..]` 是等价的。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
-msgid ""
-"To easily create a slice of the full array, we can therefore use `&a[..]`."
+msgid "To easily create a slice of the full array, we can therefore use `&a[..]`."
msgstr "因此,我们可以用 `&a[..]` 来创建包含整个数组的切片。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"`s` is a reference to a slice of `i32`s. Notice that the type of `s` "
-"(`&[i32]`) no longer mentions the array length. This allows us to perform "
-"computation on slices of different sizes."
+"`s` is a reference to a slice of `i32`s. Notice that the type of `s` (`&[i32]`) no "
+"longer mentions the array length. This allows us to perform computation on slices of "
+"different sizes."
msgstr ""
-"切片会从另外一个对象中借用数据。在这个例子中, `a` 必须在其切片存活时保持存活"
-"(处于作用域中)。"
+"切片会从另外一个对象中借用数据。在这个例子中, `a` 必须在其切片存活时保持存活(处于作用域"
+"中)。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"Slices always borrow from another object. In this example, `a` has to remain "
-"'alive' (in scope) for at least as long as our slice."
+"Slices always borrow from another object. In this example, `a` has to remain 'alive' (in "
+"scope) for at least as long as our slice."
msgstr ""
-"关于修改 `a[3]` 的问题可能会引发精彩的讨论。正确答案是:为了保证内存安全,在"
-"创建切片后,我们不能通过 `a` 来修改数据。不过我们可以通过 `a` 或者 `s` 来读取"
-"数据。我们将会在“借用”章节着重介绍这个内容。"
+"关于修改 `a[3]` 的问题可能会引发精彩的讨论。正确答案是:为了保证内存安全,在创建切片后,"
+"我们不能通过 `a` 来修改数据。不过我们可以通过 `a` 或者 `s` 来读取数据。我们将会在“借用”章"
+"节着重介绍这个内容。"
#: src/slices-and-lifetimes/slices.md
#, fuzzy
msgid ""
-"The question about modifying `a[3]` can spark an interesting discussion, but "
-"the answer is that for memory safety reasons you cannot do it through `a` at "
-"this point in the execution, but you can read the data from both `a` and `s` "
-"safely. It works before you created the slice, and again after the "
-"`println`, when the slice is no longer used."
+"The question about modifying `a[3]` can spark an interesting discussion, but the answer "
+"is that for memory safety reasons you cannot do it through `a` at this point in the "
+"execution, but you can read the data from both `a` and `s` safely. It works before you "
+"created the slice, and again after the `println`, when the slice is no longer used."
msgstr ""
-"关于修改“a\\[3\\]”的问题可能会引发一些有趣的讨论,但正解是,出于内存安全方面"
-"的原因,您无法在执行作业的这个时间点通过“a”来进行此修改,但可以从“a”和“s”安全"
-"地读取数据。它会在您创建 Slice 之前运作,在“println”之后(不再使用 Slice 时)"
-"再次运作。更多详情会在“借用检查器”部分中加以说明。"
+"关于修改“a\\[3\\]”的问题可能会引发一些有趣的讨论,但正解是,出于内存安全方面的原因,您无"
+"法在执行作业的这个时间点通过“a”来进行此修改,但可以从“a”和“s”安全地读取数据。它会在您创"
+"建 Slice 之前运作,在“println”之后(不再使用 Slice 时)再次运作。更多详情会在“借用检查"
+"器”部分中加以说明。"
#: src/slices-and-lifetimes/str.md
msgid ""
-"We can now understand the two string types in Rust: `&str` is almost like "
-"`&[char]`, but with its data stored in a variable-length encoding (UTF-8)."
+"We can now understand the two string types in Rust: `&str` is almost like `&[char]`, but "
+"with its data stored in a variable-length encoding (UTF-8)."
msgstr ""
-"现在,我们能够理解 Rust 中的两种字符串类型:`&str` 几乎与 `&[char]` 一样,只"
-"不过其数据存储在可变长度编码 (UTF-8) 中。"
+"现在,我们能够理解 Rust 中的两种字符串类型:`&str` 几乎与 `&[char]` 一样,只不过其数据存"
+"储在可变长度编码 (UTF-8) 中。"
#: src/slices-and-lifetimes/str.md
msgid "\"s1: {s1}\""
@@ -9031,65 +8519,62 @@ msgstr "`String` 是一个可变字符串缓冲区。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
msgid ""
-"`&str` introduces a string slice, which is an immutable reference to UTF-8 "
-"encoded string data stored in a block of memory. String literals "
-"(`”Hello”`), are stored in the program’s binary."
+"`&str` introduces a string slice, which is an immutable reference to UTF-8 encoded "
+"string data stored in a block of memory. String literals (`”Hello”`), are stored in the "
+"program’s binary."
msgstr ""
-"`&str` 引入了一个字符串切片,它是一个指向保存在内存块中的 UTF-8 编码字符串数"
-"据的不可变引用。 字符串字面量(`”Hello”`)会保存在程序的二进制文件中。"
+"`&str` 引入了一个字符串切片,它是一个指向保存在内存块中的 UTF-8 编码字符串数据的不可变引"
+"用。 字符串字面量(`”Hello”`)会保存在程序的二进制文件中。"
#: src/slices-and-lifetimes/str.md
msgid ""
-"Rust’s `String` type is a wrapper around a vector of bytes. As with a "
-"`Vec`, it is owned."
+"Rust’s `String` type is a wrapper around a vector of bytes. As with a `Vec`, it is "
+"owned."
msgstr ""
-"Rust 的 `String` 类型是一个字节 vector 的封装。和 `Vec` 一样,它是拥有所有"
-"权的。"
+"Rust 的 `String` 类型是一个字节 vector 的封装。和 `Vec` 一样,它是拥有所有权的。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
msgid ""
-"As with many other types `String::from()` creates a string from a string "
-"literal; `String::new()` creates a new empty string, to which string data "
-"can be added using the `push()` and `push_str()` methods."
+"As with many other types `String::from()` creates a string from a string literal; "
+"`String::new()` creates a new empty string, to which string data can be added using the "
+"`push()` and `push_str()` methods."
msgstr ""
-"和其他类型一样,`String::from()` 会从字符串字面量创建一个字符串;`String::"
-"new()` 会创建一个新的空字符串, 之后可以使用 `push()` 和 `push_str()` 方法"
-"向其中添加字符串数据。"
+"和其他类型一样,`String::from()` 会从字符串字面量创建一个字符串;`String::new()` 会创建一"
+"个新的空字符串, 之后可以使用 `push()` 和 `push_str()` 方法向其中添加字符串数据。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
msgid ""
-"The `format!()` macro is a convenient way to generate an owned string from "
-"dynamic values. It accepts the same format specification as `println!()`."
+"The `format!()` macro is a convenient way to generate an owned string from dynamic "
+"values. It accepts the same format specification as `println!()`."
msgstr ""
-"`format!()` 宏可以方便地动态生成拥有所有权的字符串。它接受和 `println!()` 相"
-"同的格式规范。"
+"`format!()` 宏可以方便地动态生成拥有所有权的字符串。它接受和 `println!()` 相同的格式规"
+"范。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
msgid ""
-"You can borrow `&str` slices from `String` via `&` and optionally range "
-"selection. If you select a byte range that is not aligned to character "
-"boundaries, the expression will panic. The `chars` iterator iterates over "
-"characters and is preferred over trying to get character boundaries right."
+"You can borrow `&str` slices from `String` via `&` and optionally range selection. If "
+"you select a byte range that is not aligned to character boundaries, the expression will "
+"panic. The `chars` iterator iterates over characters and is preferred over trying to get "
+"character boundaries right."
msgstr ""
-"您可以通过 `&` 和范围选择(可选)来从 `String` 借用 `&str` slice。如果选择的"
-"字节范围未与字符边界对齐,则表达式会 panic。`chars` 迭代器会迭代字符,比尝试"
-"正确获取字符边界更为推荐。"
+"您可以通过 `&` 和范围选择(可选)来从 `String` 借用 `&str` slice。如果选择的字节范围未与"
+"字符边界对齐,则表达式会 panic。`chars` 迭代器会迭代字符,比尝试正确获取字符边界更为推"
+"荐。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
msgid ""
-"For C++ programmers: think of `&str` as `std::string_view` from C++, but the "
-"one that always points to a valid string in memory. Rust `String` is a rough "
-"equivalent of `std::string` from C++ (main difference: it can only contain "
-"UTF-8 encoded bytes and will never use a small-string optimization)."
+"For C++ programmers: think of `&str` as `std::string_view` from C++, but the one that "
+"always points to a valid string in memory. Rust `String` is a rough equivalent of `std::"
+"string` from C++ (main difference: it can only contain UTF-8 encoded bytes and will "
+"never use a small-string optimization)."
msgstr ""
-"对于 C++ 程序员:可以把 `&str` 当作 C++ 中的 `const char*`,但是它总是指向内"
-"存中的一个有效字符串。 Rust 的 `String` 大致相当于 C++ 中 `std::string` "
-"(主要区别:它只能包含 UTF-8 编码的字节, 并且永远不会使用小字符串优化"
-"(small-string optimization))。"
+"对于 C++ 程序员:可以把 `&str` 当作 C++ 中的 `const char*`,但是它总是指向内存中的一个有"
+"效字符串。 Rust 的 `String` 大致相当于 C++ 中 `std::string` (主要区别:它只能包含 "
+"UTF-8 编码的字节, 并且永远不会使用小字符串优化(small-string optimization))。"
#: src/slices-and-lifetimes/str.md
#, fuzzy
@@ -9099,40 +8584,40 @@ msgstr "字节串可以用于直接创建 `&[u8]` 类型的值:"
#: src/slices-and-lifetimes/lifetime-annotations.md
#, fuzzy
msgid ""
-"A reference has a _lifetime_, which must not \"outlive\" the value it refers "
-"to. This is verified by the borrow checker."
+"A reference has a _lifetime_, which must not \"outlive\" the value it refers to. This is "
+"verified by the borrow checker."
msgstr ""
-"引用具有 _生命周期_,该生命周期必须比其所引用的值 “存在得更久”。这由借用检查"
-"器进行验证。"
+"引用具有 _生命周期_,该生命周期必须比其所引用的值 “存在得更久”。这由借用检查器进行验证。"
#: src/slices-and-lifetimes/lifetime-annotations.md
#, fuzzy
msgid ""
-"The lifetime can be implicit - this is what we have seen so far. Lifetimes "
-"can also be explicit: `&'a Point`, `&'document str`. Lifetimes start with "
-"`'` and `'a` is a typical default name. Read `&'a Point` as \"a borrowed "
-"`Point` which is valid for at least the lifetime `a`\"."
+"The lifetime can be implicit - this is what we have seen so far. Lifetimes can also be "
+"explicit: `&'a Point`, `&'document str`. Lifetimes start with `'` and `'a` is a typical "
+"default name. Read `&'a Point` as \"a borrowed `Point` which is valid for at least the "
+"lifetime `a`\"."
msgstr ""
-"生命周期可以是隐式的,我们目前所看到的便是如此。生命周期也可以是显式的:`&'a "
-"Point` 和 `&'document str`。生命周期以 `'` 开头,`'a` 是典型的默认名称。将 "
-"`&'a Point` 读取为 “一个借用的 `Point`,至少在生命周期 `a` 内有效”。"
+"生命周期可以是隐式的,我们目前所看到的便是如此。生命周期也可以是显式的:`&'a Point` 和 "
+"`&'document str`。生命周期以 `'` 开头,`'a` 是典型的默认名称。将 `&'a Point` 读取为 “一个"
+"借用的 `Point`,至少在生命周期 `a` 内有效”。"
#: src/slices-and-lifetimes/lifetime-annotations.md
#, fuzzy
msgid ""
-"Lifetimes are always inferred by the compiler: you cannot assign a lifetime "
-"yourself. Explicit lifetime annotations create constraints where there is "
-"ambiguity; the compiler verifies that there is a valid solution."
+"Lifetimes are always inferred by the compiler: you cannot assign a lifetime yourself. "
+"Explicit lifetime annotations create constraints where there is ambiguity; the compiler "
+"verifies that there is a valid solution."
msgstr "生命周期注释会创建约束条件;编译器会验证 是否存在有效的解决方案。"
#: src/slices-and-lifetimes/lifetime-annotations.md
msgid ""
-"Lifetimes become more complicated when considering passing values to and "
-"returning values from functions."
+"Lifetimes become more complicated when considering passing values to and returning "
+"values from functions."
msgstr "当考虑向函数传递值和从函数返回值时,生命周期会变得更加复杂。"
#: src/slices-and-lifetimes/lifetime-annotations.md
-msgid "// What is the lifetime of p3?\n"
+#, fuzzy
+msgid "// What is the lifetime of p3?"
msgstr "// What is the lifetime of p3?\n"
#: src/slices-and-lifetimes/lifetime-annotations.md
@@ -9141,15 +8626,14 @@ msgstr "\"p3: {p3:?}\""
#: src/slices-and-lifetimes/lifetime-annotations.md
msgid ""
-"In this example, the the compiler does not know what lifetime to infer for "
-"`p3`. Looking inside the function body shows that it can only safely assume "
-"that `p3`'s lifetime is the shorter of `p1` and `p2`. But just like types, "
-"Rust requires explicit annotations of lifetimes on function arguments and "
-"return values."
+"In this example, the the compiler does not know what lifetime to infer for `p3`. Looking "
+"inside the function body shows that it can only safely assume that `p3`'s lifetime is "
+"the shorter of `p1` and `p2`. But just like types, Rust requires explicit annotations of "
+"lifetimes on function arguments and return values."
msgstr ""
-"在此示例中,编译器无法推理出 `p3` 的生命周期。查看函数体内部后则可放心地假"
-"定,`p3` 的生命周期是 `p1` 和 `p2` 中的较短者。但与类型一样,Rust 需要对函数"
-"参数和返回值进行明确的生命周期注解。"
+"在此示例中,编译器无法推理出 `p3` 的生命周期。查看函数体内部后则可放心地假定,`p3` 的生命"
+"周期是 `p1` 和 `p2` 中的较短者。但与类型一样,Rust 需要对函数参数和返回值进行明确的生命周"
+"期注解。"
#: src/slices-and-lifetimes/lifetime-annotations.md
msgid "Add `'a` appropriately to `left_most`:"
@@ -9157,15 +8641,12 @@ msgstr "将 `'a` 适当添加到 `left_most` 中:"
#: src/slices-and-lifetimes/lifetime-annotations.md
msgid ""
-"This says, \"given p1 and p2 which both outlive `'a`, the return value lives "
-"for at least `'a`."
-msgstr ""
-"这表示.,“假设 p1 和 p2 的存在时间都比 `'a` 更长,则返回值至少在 `'a` 内有"
-"效”。"
+"This says, \"given p1 and p2 which both outlive `'a`, the return value lives for at "
+"least `'a`."
+msgstr "这表示.,“假设 p1 和 p2 的存在时间都比 `'a` 更长,则返回值至少在 `'a` 内有效”。"
#: src/slices-and-lifetimes/lifetime-annotations.md
-msgid ""
-"In common cases, lifetimes can be elided, as described on the next slide."
+msgid "In common cases, lifetimes can be elided, as described on the next slide."
msgstr "在一般情况下,可以省略生命周期,如下一张幻灯片中所述。"
#: src/slices-and-lifetimes/lifetime-elision.md
@@ -9175,14 +8656,13 @@ msgstr "函数调用中的生命周期"
#: src/slices-and-lifetimes/lifetime-elision.md
#, fuzzy
msgid ""
-"Lifetimes for function arguments and return values must be fully specified, "
-"but Rust allows lifetimes to be elided in most cases with [a few simple "
-"rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html). This is not "
-"inference -- it is just a syntactic shorthand."
+"Lifetimes for function arguments and return values must be fully specified, but Rust "
+"allows lifetimes to be elided in most cases with [a few simple rules](https://doc.rust-"
+"lang.org/nomicon/lifetime-elision.html). This is not inference -- it is just a syntactic "
+"shorthand."
msgstr ""
-"必须完全指定函数参数和返回值的生命周期, 但 Rust 允许在大多数情况下通过\\[一"
-"些简单的 规则\\](https://doc.rust-lang.org/nomicon/lifetime-elision.html)来"
-"省略此操作。"
+"必须完全指定函数参数和返回值的生命周期, 但 Rust 允许在大多数情况下通过\\[一些简单的 规则"
+"\\](https://doc.rust-lang.org/nomicon/lifetime-elision.html)来省略此操作。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid "Each argument which does not have a lifetime annotation is given one."
@@ -9190,17 +8670,16 @@ msgstr "每个没有生命周期注解的参数都会添加一个生命周期注
#: src/slices-and-lifetimes/lifetime-elision.md
msgid ""
-"If there is only one argument lifetime, it is given to all un-annotated "
-"return values."
+"If there is only one argument lifetime, it is given to all un-annotated return values."
msgstr "如果只有一个参数生命周期,则将其赋予所有未加注解的返回值。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid ""
-"If there are multiple argument lifetimes, but the first one is for `self`, "
-"that lifetime is given to all un-annotated return values."
+"If there are multiple argument lifetimes, but the first one is for `self`, that lifetime "
+"is given to all un-annotated return values."
msgstr ""
-"如果有多个参数生命周期,但第一个是用于 `self` 的,则将该生命周期赋予所有未加"
-"注解的返回值。"
+"如果有多个参数生命周期,但第一个是用于 `self` 的,则将该生命周期赋予所有未加注解的返回"
+"值。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid "In this example, `cab_distance` is trivially elided."
@@ -9208,11 +8687,9 @@ msgstr "在此示例中,`cab_distance` 被轻易省略掉了。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid ""
-"The `nearest` function provides another example of a function with multiple "
-"references in its arguments that requires explicit annotation."
-msgstr ""
-"`nearest` 函数提供了另一个函数示例,该函数的参数中包含多个引用,需要显式注"
-"解。"
+"The `nearest` function provides another example of a function with multiple references "
+"in its arguments that requires explicit annotation."
+msgstr "`nearest` 函数提供了另一个函数示例,该函数的参数中包含多个引用,需要显式注解。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid "Try adjusting the signature to \"lie\" about the lifetimes returned:"
@@ -9221,20 +8698,20 @@ msgstr "请尝试将签名调整为 “谎报”了返回的生命周期:"
#: src/slices-and-lifetimes/lifetime-elision.md
#, fuzzy
msgid ""
-"This won't compile, demonstrating that the annotations are checked for "
-"validity by the compiler. Note that this is not the case for raw pointers "
-"(unsafe), and this is a common source of errors with unsafe Rust."
+"This won't compile, demonstrating that the annotations are checked for validity by the "
+"compiler. Note that this is not the case for raw pointers (unsafe), and this is a common "
+"source of errors with unsafe Rust."
msgstr ""
-"这将无法编译,表面编译器会检查注解是否有效。请注意,原始指针并非如此(不安"
-"全),这是不安全 Rust 中导致错误的常见原因。"
+"这将无法编译,表面编译器会检查注解是否有效。请注意,原始指针并非如此(不安全),这是不安"
+"全 Rust 中导致错误的常见原因。"
#: src/slices-and-lifetimes/lifetime-elision.md
msgid ""
-"Students may ask when to use lifetimes. Rust borrows _always_ have "
-"lifetimes. Most of the time, elision and type inference mean these don't "
-"need to be written out. In more complicated cases, lifetime annotations can "
-"help resolve ambiguity. Often, especially when prototyping, it's easier to "
-"just work with owned data by cloning values where necessary."
+"Students may ask when to use lifetimes. Rust borrows _always_ have lifetimes. Most of "
+"the time, elision and type inference mean these don't need to be written out. In more "
+"complicated cases, lifetime annotations can help resolve ambiguity. Often, especially "
+"when prototyping, it's easier to just work with owned data by cloning values where "
+"necessary."
msgstr ""
#: src/slices-and-lifetimes/struct-lifetimes.md
@@ -9242,8 +8719,7 @@ msgid "Lifetimes in Data Structures"
msgstr "数据结构中的生命周期"
#: src/slices-and-lifetimes/struct-lifetimes.md
-msgid ""
-"If a data type stores borrowed data, it must be annotated with a lifetime:"
+msgid "If a data type stores borrowed data, it must be annotated with a lifetime:"
msgstr "如果数据类型存储了借用的数据,则必须对其添加生命周期注释:"
#: src/slices-and-lifetimes/struct-lifetimes.md
@@ -9255,7 +8731,8 @@ msgid "\"The quick brown fox jumps over the lazy dog.\""
msgstr "\"The quick brown fox jumps over the lazy dog.\""
#: src/slices-and-lifetimes/struct-lifetimes.md
-msgid "// erase(text);\n"
+#, fuzzy
+msgid "// erase(text);"
msgstr "// erase(text);\n"
#: src/slices-and-lifetimes/struct-lifetimes.md
@@ -9268,29 +8745,26 @@ msgstr "\"{dog:?}\""
#: src/slices-and-lifetimes/struct-lifetimes.md
msgid ""
-"In the above example, the annotation on `Highlight` enforces that the data "
-"underlying the contained `&str` lives at least as long as any instance of "
-"`Highlight` that uses that data."
+"In the above example, the annotation on `Highlight` enforces that the data underlying "
+"the contained `&str` lives at least as long as any instance of `Highlight` that uses "
+"that data."
msgstr ""
-"在上述示例中,`Highlight` 注释会强制包含 `&str` 的底层数据的生命周期至少与使"
-"用该数据的任何 `Highlight` 实例一样长。"
+"在上述示例中,`Highlight` 注释会强制包含 `&str` 的底层数据的生命周期至少与使用该数据的任"
+"何 `Highlight` 实例一样长。"
#: src/slices-and-lifetimes/struct-lifetimes.md
msgid ""
-"If `text` is consumed before the end of the lifetime of `fox` (or `dog`), "
-"the borrow checker throws an error."
-msgstr ""
-"如果 `text` 在 `fox`(或 `dog`)的生命周期结束前被消耗,借用检查器将抛出一个"
-"错误。"
+"If `text` is consumed before the end of the lifetime of `fox` (or `dog`), the borrow "
+"checker throws an error."
+msgstr "如果 `text` 在 `fox`(或 `dog`)的生命周期结束前被消耗,借用检查器将抛出一个错误。"
#: src/slices-and-lifetimes/struct-lifetimes.md
msgid ""
-"Types with borrowed data force users to hold on to the original data. This "
-"can be useful for creating lightweight views, but it generally makes them "
-"somewhat harder to use."
+"Types with borrowed data force users to hold on to the original data. This can be useful "
+"for creating lightweight views, but it generally makes them somewhat harder to use."
msgstr ""
-"借用数据的类型会迫使用户保留原始数据。这对于创建轻量级视图很有用,但通常会使"
-"它们更难使用。"
+"借用数据的类型会迫使用户保留原始数据。这对于创建轻量级视图很有用,但通常会使它们更难使"
+"用。"
#: src/slices-and-lifetimes/struct-lifetimes.md
msgid "When possible, make data structures own their data directly."
@@ -9298,36 +8772,34 @@ msgstr "如有可能,让数据结构直接拥有自己的数据。"
#: src/slices-and-lifetimes/struct-lifetimes.md
msgid ""
-"Some structs with multiple references inside can have more than one lifetime "
-"annotation. This can be necessary if there is a need to describe lifetime "
-"relationships between the references themselves, in addition to the lifetime "
-"of the struct itself. Those are very advanced use cases."
+"Some structs with multiple references inside can have more than one lifetime annotation. "
+"This can be necessary if there is a need to describe lifetime relationships between the "
+"references themselves, in addition to the lifetime of the struct itself. Those are very "
+"advanced use cases."
msgstr ""
-"一些包含多个引用的结构可以有多个生命周期注释。除了结构体本身的生命周期之外,"
-"如果需要描述引用之间的生命周期关系,则可能需要这样做。这些都是非常高级的用"
-"例。"
+"一些包含多个引用的结构可以有多个生命周期注释。除了结构体本身的生命周期之外,如果需要描述"
+"引用之间的生命周期关系,则可能需要这样做。这些都是非常高级的用例。"
#: src/slices-and-lifetimes/exercise.md
msgid ""
-"In this exercise, you will build a parser for the [protobuf binary encoding]"
-"(https://protobuf.dev/programming-guides/encoding/). Don't worry, it's "
-"simpler than it seems! This illustrates a common parsing pattern, passing "
-"slices of data. The underlying data itself is never copied."
+"In this exercise, you will build a parser for the [protobuf binary encoding](https://"
+"protobuf.dev/programming-guides/encoding/). Don't worry, it's simpler than it seems! "
+"This illustrates a common parsing pattern, passing slices of data. The underlying data "
+"itself is never copied."
msgstr ""
-"在本练习中,您将为 [protobuf 二进制编码](https://protobuf.dev/programming-"
-"guides/encoding/) 构建一个解析器。别担心,其实非常简单!这展示了一种常见的解"
-"析模式,即传递数据 slice。底层数据本身永远不会被复制。"
+"在本练习中,您将为 [protobuf 二进制编码](https://protobuf.dev/programming-guides/"
+"encoding/) 构建一个解析器。别担心,其实非常简单!这展示了一种常见的解析模式,即传递数据 "
+"slice。底层数据本身永远不会被复制。"
#: src/slices-and-lifetimes/exercise.md
msgid ""
-"Fully parsing a protobuf message requires knowing the types of the fields, "
-"indexed by their field numbers. That is typically provided in a `proto` "
-"file. In this exercise, we'll encode that information into `match` "
-"statements in functions that get called for each field."
+"Fully parsing a protobuf message requires knowing the types of the fields, indexed by "
+"their field numbers. That is typically provided in a `proto` file. In this exercise, "
+"we'll encode that information into `match` statements in functions that get called for "
+"each field."
msgstr ""
-"如要完整解析 protobuf 消息,需要知道字段的类型(按字段编号编入索引)。这通常"
-"会在 `proto` 文件中提供。在本练习中,我们将把这些信息编码成处理每个字段所调用"
-"的函数中的 `match` 语句。"
+"如要完整解析 protobuf 消息,需要知道字段的类型(按字段编号编入索引)。这通常会在 `proto` "
+"文件中提供。在本练习中,我们将把这些信息编码成处理每个字段所调用的函数中的 `match` 语句。"
#: src/slices-and-lifetimes/exercise.md
msgid "We'll use the following proto:"
@@ -9335,34 +8807,33 @@ msgstr "我们将使用以下 proto:"
#: src/slices-and-lifetimes/exercise.md
msgid ""
-"A proto message is encoded as a series of fields, one after the next. Each "
-"is implemented as a \"tag\" followed by the value. The tag contains a field "
-"number (e.g., `2` for the `id` field of a `Person` message) and a wire type "
-"defining how the payload should be determined from the byte stream."
+"A proto message is encoded as a series of fields, one after the next. Each is "
+"implemented as a \"tag\" followed by the value. The tag contains a field number (e.g., "
+"`2` for the `id` field of a `Person` message) and a wire type defining how the payload "
+"should be determined from the byte stream."
msgstr ""
-"proto 消息被编码为连续的一系列字段。每个字段都通过 “标签”后面紧跟值的形式来实"
-"现。标签包含一个字段编号(例如`Person` 消息的 `id` 字段的值为 `2`)和线型(用"
-"于定义应如何从字节流确定载荷)。"
+"proto 消息被编码为连续的一系列字段。每个字段都通过 “标签”后面紧跟值的形式来实现。标签包含"
+"一个字段编号(例如`Person` 消息的 `id` 字段的值为 `2`)和线型(用于定义应如何从字节流确定"
+"载荷)。"
#: src/slices-and-lifetimes/exercise.md
msgid ""
-"Integers, including the tag, are represented with a variable-length encoding "
-"called VARINT. Luckily, `parse_varint` is defined for you below. The given "
-"code also defines callbacks to handle `Person` and `PhoneNumber` fields, and "
-"to parse a message into a series of calls to those callbacks."
+"Integers, including the tag, are represented with a variable-length encoding called "
+"VARINT. Luckily, `parse_varint` is defined for you below. The given code also defines "
+"callbacks to handle `Person` and `PhoneNumber` fields, and to parse a message into a "
+"series of calls to those callbacks."
msgstr ""
"整数(包括标签)使用名为 VARINT 的可变长度编码表示。幸运的是,下面为您提供了 "
-"`parse_varint` 的定义。该指定代码还定义了一些回调,用于处理 `Person` 和 "
-"`PhoneNumber` 字段,并将消息解析为对这些回调的一系列调用。"
+"`parse_varint` 的定义。该指定代码还定义了一些回调,用于处理 `Person` 和 `PhoneNumber` 字"
+"段,并将消息解析为对这些回调的一系列调用。"
#: src/slices-and-lifetimes/exercise.md
#, fuzzy
msgid ""
-"What remains for you is to implement the `parse_field` function and the "
-"`ProtoMessage` trait for `Person` and `PhoneNumber`."
+"What remains for you is to implement the `parse_field` function and the `ProtoMessage` "
+"trait for `Person` and `PhoneNumber`."
msgstr ""
-"您要做的是实现 `parse_field` 函数,以及`Person` 和 `PhoneNumber`的特征"
-"`ProtoMessage`。"
+"您要做的是实现 `parse_field` 函数,以及`Person` 和 `PhoneNumber`的特征`ProtoMessage`。"
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
msgid "\"Invalid varint\""
@@ -9400,13 +8871,11 @@ msgstr "/// Varint WireType 表明该值为单个 VARINT。\n"
#, fuzzy
msgid ""
"//I64, -- not needed for this exercise\n"
-" /// The Len WireType indicates that the value is a length represented as "
-"a\n"
+" /// The Len WireType indicates that the value is a length represented as a\n"
" /// VARINT followed by exactly that number of bytes.\n"
msgstr ""
"//I64, -- not needed for this exercise\n"
-" /// The Len WireType indicates that the value is a length represented as "
-"a VARINT\n"
+" /// The Len WireType indicates that the value is a length represented as a VARINT\n"
" /// followed by exactly that number of bytes.\n"
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
@@ -9415,8 +8884,8 @@ msgid ""
"/// The I32 WireType indicates that the value is precisely 4 bytes in\n"
" /// little-endian order containing a 32-bit signed integer.\n"
msgstr ""
-"/// The I32 WireType indicates that the value is precisely 4 bytes in little-"
-"endian order\n"
+"/// The I32 WireType indicates that the value is precisely 4 bytes in little-endian "
+"order\n"
" /// containing a 32-bit signed integer.\n"
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
@@ -9436,10 +8905,8 @@ msgid "//1 => WireType::I64, -- not needed for this exercise\n"
msgstr "//1 => WireType::I64, -- not needed for this exercise\n"
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
-msgid ""
-"/// Parse a VARINT, returning the parsed value and the remaining bytes.\n"
-msgstr ""
-"/// Parse a VARINT, returning the parsed value and the remaining bytes.\n"
+msgid "/// Parse a VARINT, returning the parsed value and the remaining bytes.\n"
+msgstr "/// Parse a VARINT, returning the parsed value and the remaining bytes.\n"
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
msgid ""
@@ -9462,9 +8929,7 @@ msgid "/// Parse a field, returning the remaining bytes\n"
msgstr "/// Parse a field, returning the remaining bytes\n"
#: src/slices-and-lifetimes/exercise.md
-msgid ""
-"\"Based on the wire type, build a Field, consuming as many bytes as "
-"necessary.\""
+msgid "\"Based on the wire type, build a Field, consuming as many bytes as necessary.\""
msgstr ""
#: src/slices-and-lifetimes/exercise.md
@@ -9474,20 +8939,20 @@ msgstr ""
#: src/slices-and-lifetimes/exercise.md src/slices-and-lifetimes/solution.md
#, fuzzy
msgid ""
-"/// Parse a message in the given data, calling `T::add_field` for each field "
-"in\n"
+"/// Parse a message in the given data, calling `T::add_field` for each field in\n"
"/// the message.\n"
"///\n"
"/// The entire input is consumed.\n"
msgstr ""
-"/// Parse a message in the given data, calling `field_callback` for each "
-"field in the message.\n"
+"/// Parse a message in the given data, calling `field_callback` for each field in the "
+"message.\n"
"///\n"
"/// The entire input is consumed.\n"
#: src/slices-and-lifetimes/exercise.md
-msgid "// TODO: Implement ProtoMessage for Person and PhoneNumber.\n"
-msgstr ""
+#, fuzzy
+msgid "// TODO: Implement ProtoMessage for Person and PhoneNumber."
+msgstr "// TODO: Implement `Widget` for `Label`.\n"
#: src/slices-and-lifetimes/solution.md
msgid "// Unwrap error because `value` is definitely 4 bytes long.\n"
@@ -9508,8 +8973,7 @@ msgstr "欢迎来到第一天"
#: src/welcome-day-4.md
#, fuzzy
-msgid ""
-"Today we will cover topics relating to building large-scale software in Rust:"
+msgid "Today we will cover topics relating to building large-scale software in Rust:"
msgstr "今天,我们将介绍一些更高级的 Rust 主题:"
#: src/welcome-day-4.md
@@ -9530,8 +8994,7 @@ msgid "Error handling: panics, `Result`, and the try operator `?`."
msgstr "错误处理:panic、“Result”和 try 运算符“?”。"
#: src/welcome-day-4.md
-msgid ""
-"Unsafe Rust: the escape hatch when you can't express yourself in safe Rust."
+msgid "Unsafe Rust: the escape hatch when you can't express yourself in safe Rust."
msgstr "不安全 Rust:当无法用安全 Rust 表达您的意图时,则可将其作为应急方法。"
#: src/welcome-day-4.md
@@ -9547,13 +9010,14 @@ msgid "[Modules](./modules.md) (40 minutes)"
msgstr ""
#: src/welcome-day-4.md
-msgid "[Testing](./testing.md) (1 hour and 5 minutes)"
+#, fuzzy
+msgid "[Testing](./testing.md) (1 hour)"
msgstr ""
+"借用:\n"
+"请参阅 [借用](ownership/borrowing.md)。"
#: src/welcome-day-4.md
-msgid ""
-"Including 10 minute breaks, this session should take about 3 hours and 5 "
-"minutes"
+msgid "Including 10 minute breaks, this session should take about 2 hours and 50 minutes"
msgstr ""
#: src/iterators.md
@@ -9570,20 +9034,23 @@ msgstr ""
#: src/iterators.md
#, fuzzy
-msgid ""
-"[Exercise: Iterator Method Chaining](./iterators/exercise.md) (30 minutes)"
+msgid "[Exercise: Iterator Method Chaining](./iterators/exercise.md) (30 minutes)"
msgstr "练习:迭代器方法链接"
+#: src/iterators.md src/error-handling.md
+msgid "This segment should take about 45 minutes"
+msgstr ""
+
#: src/iterators/iterator.md
msgid ""
-"The [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) "
-"trait supports iterating over values in a collection. It requires a `next` "
-"method and provides lots of methods. Many standard library types implement "
-"`Iterator`, and you can implement it yourself, too:"
+"The [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) trait supports "
+"iterating over values in a collection. It requires a `next` method and provides lots of "
+"methods. Many standard library types implement `Iterator`, and you can implement it "
+"yourself, too:"
msgstr ""
-"['Iterator'](https://doc.rust-lang.org/std/iter/trait.Iterator.html) trait 支"
-"持迭代集合中的值。它需要用到 `next` 方法,并提供很多方法。许多标准库类型均能"
-"实现 `Iterator`,您也可以自行实现:"
+"['Iterator'](https://doc.rust-lang.org/std/iter/trait.Iterator.html) trait 支持迭代集合中"
+"的值。它需要用到 `next` 方法,并提供很多方法。许多标准库类型均能实现 `Iterator`,您也可以"
+"自行实现:"
#: src/iterators/iterator.md
msgid "\"fib({i}): {n}\""
@@ -9592,38 +9059,36 @@ msgstr "\"fib({i}): {n}\""
#: src/iterators/iterator.md
#, fuzzy
msgid ""
-"The `Iterator` trait implements many common functional programming "
-"operations over collections (e.g. `map`, `filter`, `reduce`, etc). This is "
-"the trait where you can find all the documentation about them. In Rust these "
-"functions should produce the code as efficient as equivalent imperative "
-"implementations."
+"The `Iterator` trait implements many common functional programming operations over "
+"collections (e.g. `map`, `filter`, `reduce`, etc). This is the trait where you can find "
+"all the documentation about them. In Rust these functions should produce the code as "
+"efficient as equivalent imperative implementations."
msgstr ""
-"`Iterator` 特征会对集合实现许多常见的函数程序操作, 例如 ` map`filter \\``和"
-"`reduce\\` 等。您可以通过此特征找到有关它们的所有 文档。在 Rust 中,这些函数"
-"应生成代码,且生成的代码应与等效命令式实现一样 高效。"
+"`Iterator` 特征会对集合实现许多常见的函数程序操作, 例如 ` map`filter \\``和`reduce\\` "
+"等。您可以通过此特征找到有关它们的所有 文档。在 Rust 中,这些函数应生成代码,且生成的代码"
+"应与等效命令式实现一样 高效。"
#: src/iterators/iterator.md
msgid ""
-"`IntoIterator` is the trait that makes for loops work. It is implemented by "
-"collection types such as `Vec` and references to them such as `&Vec` "
-"and `&[T]`. Ranges also implement it. This is why you can iterate over a "
-"vector with `for i in some_vec { .. }` but `some_vec.next()` doesn't exist."
+"`IntoIterator` is the trait that makes for loops work. It is implemented by collection "
+"types such as `Vec` and references to them such as `&Vec` and `&[T]`. Ranges also "
+"implement it. This is why you can iterate over a vector with `for i in some_vec { .. }` "
+"but `some_vec.next()` doesn't exist."
msgstr ""
-"`IntoIterator` 是迫使 for 循环运作的特征。此特征由集合类型 (例如 `Vec`)"
-"和相关引用(例如 `&Vec` 和 `&[T]`)而实现。此外,范围也会实现这项特征。因"
-"此, 您可以使用 `for i in some_vec { .. }` 来遍历某矢量,但 `some_vec."
-"next()` 不存在。"
+"`IntoIterator` 是迫使 for 循环运作的特征。此特征由集合类型 (例如 `Vec`)和相关引用"
+"(例如 `&Vec` 和 `&[T]`)而实现。此外,范围也会实现这项特征。因此, 您可以使用 `for i "
+"in some_vec { .. }` 来遍历某矢量,但 `some_vec.next()` 不存在。"
#: src/iterators/intoiterator.md
#, fuzzy
msgid ""
-"The `Iterator` trait tells you how to _iterate_ once you have created an "
-"iterator. The related trait [`IntoIterator`](https://doc.rust-lang.org/std/"
-"iter/trait.IntoIterator.html) defines how to create an iterator for a type. "
-"It is used automatically by the `for` loop."
+"The `Iterator` trait tells you how to _iterate_ once you have created an iterator. The "
+"related trait [`IntoIterator`](https://doc.rust-lang.org/std/iter/trait.IntoIterator."
+"html) defines how to create an iterator for a type. It is used automatically by the "
+"`for` loop."
msgstr ""
-"“Iterator”trait会告知您在创建迭代器后如何进行迭代。相关 trait“IntoIterator”会"
-"告知您如何创建迭代器:"
+"“Iterator”trait会告知您在创建迭代器后如何进行迭代。相关 trait“IntoIterator”会告知您如何创"
+"建迭代器:"
#: src/iterators/intoiterator.md
msgid "\"point = {x}, {y}\""
@@ -9632,8 +9097,8 @@ msgstr "\"point = {x}, {y}\""
#: src/iterators/intoiterator.md
#, fuzzy
msgid ""
-"Click through to the docs for `IntoIterator`. Every implementation of "
-"`IntoIterator` must declare two types:"
+"Click through to the docs for `IntoIterator`. Every implementation of `IntoIterator` "
+"must declare two types:"
msgstr "这里的语法表示,“IntoIterator”的每个实现都必须声明两种类型:"
#: src/iterators/intoiterator.md
@@ -9648,11 +9113,11 @@ msgstr "“IntoIter”:“into_iter”方法返回的“Iterator”类型。"
#: src/iterators/intoiterator.md
#, fuzzy
msgid ""
-"Note that `IntoIter` and `Item` are linked: the iterator must have the same "
-"`Item` type, which means that it returns `Option- `"
+"Note that `IntoIter` and `Item` are linked: the iterator must have the same `Item` type, "
+"which means that it returns `Option
- `"
msgstr ""
-"请注意,“IntoIter”和“Item”已关联:迭代器必须具有相同的“Item”类型,这意味着它"
-"会返回“Option\n"
+"请注意,“IntoIter”和“Item”已关联:迭代器必须具有相同的“Item”类型,这意味着它会返"
+"回“Option\n"
"\n"
"”"
@@ -9665,27 +9130,26 @@ msgid ""
"Try iterating over the grid twice in `main`. Why does this fail? Note that "
"`IntoIterator::into_iter` takes ownership of `self`."
msgstr ""
-"请尝试在 `main` 中对网格进行两次迭代。为什么会失败?请注意,`IntoIterator::"
-"into_iter` 获得了 `self` 的所有权。"
+"请尝试在 `main` 中对网格进行两次迭代。为什么会失败?请注意,`IntoIterator::into_iter` 获"
+"得了 `self` 的所有权。"
#: src/iterators/intoiterator.md
msgid ""
-"Fix this issue by implementing `IntoIterator` for `&Grid` and storing a "
-"reference to the `Grid` in `GridIter`."
+"Fix this issue by implementing `IntoIterator` for `&Grid` and storing a reference to the "
+"`Grid` in `GridIter`."
msgstr ""
-"如要解决此问题,请为 `&Grid` 实现 `IntoIterator`,并在 `GridIter` 中存储对 "
-"`Grid` 的引用。"
+"如要解决此问题,请为 `&Grid` 实现 `IntoIterator`,并在 `GridIter` 中存储对 `Grid` 的引"
+"用。"
#: src/iterators/intoiterator.md
msgid ""
-"The same problem can occur for standard library types: `for e in "
-"some_vector` will take ownership of `some_vector` and iterate over owned "
-"elements from that vector. Use `for e in &some_vector` instead, to iterate "
-"over references to elements of `some_vector`."
+"The same problem can occur for standard library types: `for e in some_vector` will take "
+"ownership of `some_vector` and iterate over owned elements from that vector. Use `for e "
+"in &some_vector` instead, to iterate over references to elements of `some_vector`."
msgstr ""
-"对于标准库类型,可能会出现同样的问题:`for e in some_vector` 将获得` "
-"some_vector` 的所有权,并迭代该矢量中的自有元素。请改用 `for e in "
-"&some_vector` 来迭代 `some_vector` 的元素的引用。"
+"对于标准库类型,可能会出现同样的问题:`for e in some_vector` 将获得` some_vector` 的所有"
+"权,并迭代该矢量中的自有元素。请改用 `for e in &some_vector` 来迭代 `some_vector` 的元素"
+"的引用。"
#: src/iterators/fromiterator.md
msgid "FromIterator"
@@ -9693,13 +9157,12 @@ msgstr "FromIterator"
#: src/iterators/fromiterator.md
msgid ""
-"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) "
-"lets you build a collection from an [`Iterator`](https://doc.rust-lang.org/"
-"std/iter/trait.Iterator.html)."
+"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) lets you "
+"build a collection from an [`Iterator`](https://doc.rust-lang.org/std/iter/trait."
+"Iterator.html)."
msgstr ""
-"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) "
-"让您可通过 [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator."
-"html) 构建一个集合。"
+"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) 让您可通过 "
+"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) 构建一个集合。"
#: src/iterators/fromiterator.md
msgid "\"prime_squares: {prime_squares:?}\""
@@ -9717,69 +9180,66 @@ msgstr "可以通过两种方式为此方法指定 `B`:"
#: src/iterators/fromiterator.md
#, fuzzy
msgid ""
-"With the \"turbofish\": `some_iterator.collect::
()`, as "
-"shown. The `_` shorthand used here lets Rust infer the type of the `Vec` "
-"elements."
+"With the \"turbofish\": `some_iterator.collect::()`, as shown. The `_` "
+"shorthand used here lets Rust infer the type of the `Vec` elements."
msgstr ""
-"使用 `turbofish` 时:`some_iterator.collect::()`,如下所示。"
-"通过此处所用的 `_` 简写形式,Rust 能够推理 `Vec` 元素的类型。"
+"使用 `turbofish` 时:`some_iterator.collect::()`,如下所示。通过此处所用"
+"的 `_` 简写形式,Rust 能够推理 `Vec` 元素的类型。"
#: src/iterators/fromiterator.md
msgid ""
-"With type inference: `let prime_squares: Vec<_> = some_iterator.collect()`. "
-"Rewrite the example to use this form."
+"With type inference: `let prime_squares: Vec<_> = some_iterator.collect()`. Rewrite the "
+"example to use this form."
msgstr ""
-"使用类型推理功能时:`let prime_squares: Vec<_> = some_iterator.collect()`。将"
-"示例重写成使用这种形式。"
+"使用类型推理功能时:`let prime_squares: Vec<_> = some_iterator.collect()`。将示例重写成使"
+"用这种形式。"
#: src/iterators/fromiterator.md
#, fuzzy
msgid ""
-"There are basic implementations of `FromIterator` for `Vec`, `HashMap`, etc. "
-"There are also more specialized implementations which let you do cool things "
-"like convert an `Iterator- >` into a `Result
, E>`."
+"There are basic implementations of `FromIterator` for `Vec`, `HashMap`, etc. There are "
+"also more specialized implementations which let you do cool things like convert an "
+"`Iterator- >` into a `Result
, E>`."
msgstr ""
-"还有一些实现,让您可执行一些很酷的操作,比如 将 `Iterator- >` 转换成 `Result
, E>`。"
+"还有一些实现,让您可执行一些很酷的操作,比如 将 `Iterator- >` 转换成 "
+"`Result
, E>`。"
#: src/iterators/exercise.md
#, fuzzy
msgid ""
-"In this exercise, you will need to find and use some of the provided methods "
-"in the [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) "
-"trait to implement a complex calculation."
+"In this exercise, you will need to find and use some of the provided methods in the "
+"[`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) trait to implement "
+"a complex calculation."
msgstr ""
-"您可以自行实现 [`Iterator`](https://doc.rust-lang.org/std/iter/trait."
-"Iterator.html) 特征:"
+"您可以自行实现 [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) 特"
+"征:"
#: src/iterators/exercise.md
#, fuzzy
msgid ""
-"Copy the following code to and make the tests "
-"pass. Use an iterator expression and `collect` the result to construct the "
-"return value."
+"Copy the following code to and make the tests pass. Use an "
+"iterator expression and `collect` the result to construct the return value."
msgstr ""
-"将以下代码复制到 ,然后设法通过测试。请尽量避免"
-"为中间结果分配“Vec”:"
+"将以下代码复制到 ,然后设法通过测试。请尽量避免为中间结果分"
+"配“Vec”:"
#: src/iterators/exercise.md src/iterators/solution.md
#, fuzzy
msgid ""
-"/// Calculate the differences between elements of `values` offset by "
-"`offset`,\n"
+"/// Calculate the differences between elements of `values` offset by `offset`,\n"
"/// wrapping around from the end of `values` to the beginning.\n"
"///\n"
"/// Element `n` of the result is `values[(n+offset)%len] - values[n]`.\n"
msgstr ""
-"/// Calculate the differences between elements of `values` offset by "
-"`offset`, wrapping\n"
+"/// Calculate the differences between elements of `values` offset by `offset`, wrapping\n"
"/// around from the end of `values` to the beginning.\n"
"///\n"
"/// Element `n` of the result is `values[(n+offset)%len] - values[n]`.\n"
#: src/modules.md
-msgid "[Modules](./modules/modules.md) (5 minutes)"
-msgstr ""
+#, fuzzy
+msgid "[Modules](./modules/modules.md) (3 minutes)"
+msgstr "练习:面向 GUI 库的模块"
#: src/modules.md
msgid "[Filesystem Hierarchy](./modules/filesystem.md) (5 minutes)"
@@ -9795,14 +9255,9 @@ msgstr ""
#: src/modules.md
#, fuzzy
-msgid ""
-"[Exercise: Modules for a GUI Library](./modules/exercise.md) (15 minutes)"
+msgid "[Exercise: Modules for a GUI Library](./modules/exercise.md) (15 minutes)"
msgstr "练习:面向 GUI 库的模块"
-#: src/modules.md
-msgid "This segment should take about 40 minutes"
-msgstr ""
-
#: src/modules/modules.md
msgid "We have seen how `impl` blocks let us namespace functions to a type."
msgstr "我们已看了“impl”块如何让我们将函数的命名空间建为一种类型。"
@@ -9821,37 +9276,32 @@ msgstr "\"In the bar module\""
#: src/modules/modules.md
msgid ""
-"Packages provide functionality and include a `Cargo.toml` file that "
-"describes how to build a bundle of 1+ crates."
-msgstr ""
-"包提供功能,并包含一个描述如何构建包含 1 个以上 crate 的捆绑包的“Cargo."
-"toml”文件。"
+"Packages provide functionality and include a `Cargo.toml` file that describes how to "
+"build a bundle of 1+ crates."
+msgstr "包提供功能,并包含一个描述如何构建包含 1 个以上 crate 的捆绑包的“Cargo.toml”文件。"
#: src/modules/modules.md
msgid ""
-"Crates are a tree of modules, where a binary crate creates an executable and "
-"a library crate compiles to a library."
+"Crates are a tree of modules, where a binary crate creates an executable and a library "
+"crate compiles to a library."
msgstr ""
-"crate 是一种模块树,其中的二进制 crate 会创建一个可执行文件,而库 crate 会编"
-"译为库。"
+"crate 是一种模块树,其中的二进制 crate 会创建一个可执行文件,而库 crate 会编译为库。"
#: src/modules/modules.md
msgid "Modules define organization, scope, and are the focus of this section."
msgstr "模块定义了组织和范围,并且是本部分的重点。"
#: src/modules/filesystem.md
-msgid ""
-"Omitting the module content will tell Rust to look for it in another file:"
+msgid "Omitting the module content will tell Rust to look for it in another file:"
msgstr "如果省略模块内容,则会指示 Rust 在另一个文件中查找:"
#: src/modules/filesystem.md
msgid ""
-"This tells rust that the `garden` module content is found at `src/garden."
-"rs`. Similarly, a `garden::vegetables` module can be found at `src/garden/"
-"vegetables.rs`."
+"This tells rust that the `garden` module content is found at `src/garden.rs`. Similarly, "
+"a `garden::vegetables` module can be found at `src/garden/vegetables.rs`."
msgstr ""
-"这会告知 Rust 可以在“src/garden.rs”中找到“garden”模块内容。同样,您可以"
-"在“src/garden/vegetables.rs”中找到“garden::vegetables”模块。"
+"这会告知 Rust 可以在“src/garden.rs”中找到“garden”模块内容。同样,您可以在“src/garden/"
+"vegetables.rs”中找到“garden::vegetables”模块。"
#: src/modules/filesystem.md
msgid "The `crate` root is in:"
@@ -9867,59 +9317,61 @@ msgstr "“src/main.rs”(对于二进制文件 crate)"
#: src/modules/filesystem.md
msgid ""
-"Modules defined in files can be documented, too, using \"inner doc "
-"comments\". These document the item that contains them -- in this case, a "
-"module."
+"Modules defined in files can be documented, too, using \"inner doc comments\". These "
+"document the item that contains them -- in this case, a module."
msgstr ""
-"也可以使用“内部文档注释”对文件中定义的模块进行记录。这些用于记录包含它们的项"
-"(在本例中为模块)。"
+"也可以使用“内部文档注释”对文件中定义的模块进行记录。这些用于记录包含它们的项(在本例中为"
+"模块)。"
#: src/modules/filesystem.md
-msgid ""
-"//! This module implements the garden, including a highly performant "
-"germination\n"
-"//! implementation.\n"
+#, fuzzy
+msgid "//! This module implements the garden, including a highly performant germination"
msgstr ""
-"//! This module implements the garden, including a highly performant "
-"germination\n"
+"//! This module implements the garden, including a highly performant germination\n"
"//! implementation.\n"
#: src/modules/filesystem.md
-msgid "// Re-export types from this module.\n"
+#, fuzzy
+msgid "//! implementation."
+msgstr "实现"
+
+#: src/modules/filesystem.md
+#, fuzzy
+msgid "// Re-export types from this module."
msgstr "// Re-export types from this module.\n"
#: src/modules/filesystem.md
-msgid "/// Sow the given seed packets.\n"
+#, fuzzy
+msgid "/// Sow the given seed packets."
msgstr "/// Sow the given seed packets.\n"
#: src/modules/filesystem.md
-msgid "/// Harvest the produce in the garden that is ready.\n"
+#, fuzzy
+msgid "/// Harvest the produce in the garden that is ready."
msgstr "/// Harvest the produce in the garden that is ready.\n"
#: src/modules/filesystem.md
msgid ""
-"Before Rust 2018, modules needed to be located at `module/mod.rs` instead of "
-"`module.rs`, and this is still a working alternative for editions after 2018."
+"Before Rust 2018, modules needed to be located at `module/mod.rs` instead of `module."
+"rs`, and this is still a working alternative for editions after 2018."
msgstr ""
-"在 Rust 2018 之前的版本中,模块需要位于“module/mod.rs”而非“module.rs”中,对"
-"于 2018 年之后的版本而言,这仍是有效的替代方案。"
+"在 Rust 2018 之前的版本中,模块需要位于“module/mod.rs”而非“module.rs”中,对于 2018 年之后"
+"的版本而言,这仍是有效的替代方案。"
#: src/modules/filesystem.md
msgid ""
-"The main reason to introduce `filename.rs` as alternative to `filename/mod."
-"rs` was because many files named `mod.rs` can be hard to distinguish in IDEs."
+"The main reason to introduce `filename.rs` as alternative to `filename/mod.rs` was "
+"because many files named `mod.rs` can be hard to distinguish in IDEs."
msgstr ""
-"引入“filename.rs”来替代“filename/mod.rs”的主要原因是,许多名为“mod.rs”的文件"
-"在 IDE 中可能难以区分。"
+"引入“filename.rs”来替代“filename/mod.rs”的主要原因是,许多名为“mod.rs”的文件在 IDE 中可能"
+"难以区分。"
#: src/modules/filesystem.md
msgid "Deeper nesting can use folders, even if the main module is a file:"
msgstr "即使主模块是文件,更深层的嵌套也可以使用文件夹:"
#: src/modules/filesystem.md
-msgid ""
-"The place rust will look for modules can be changed with a compiler "
-"directive:"
+msgid "The place rust will look for modules can be changed with a compiler directive:"
msgstr "Rust 寻找模块的位置可通过编译器指令更改:"
#: src/modules/filesystem.md
@@ -9929,11 +9381,11 @@ msgstr "\"some/path.rs\""
#: src/modules/filesystem.md
msgid ""
-"This is useful, for example, if you would like to place tests for a module "
-"in a file named `some_module_test.rs`, similar to the convention in Go."
+"This is useful, for example, if you would like to place tests for a module in a file "
+"named `some_module_test.rs`, similar to the convention in Go."
msgstr ""
-"例如,如果您想将某个模块的测试放在名为“some_module_test.rs”的文件中(类似于 "
-"Go 中的惯例),这样做很有用。"
+"例如,如果您想将某个模块的测试放在名为“some_module_test.rs”的文件中(类似于 Go 中的惯"
+"例),这样做很有用。"
#: src/modules/visibility.md
msgid "Modules are a privacy boundary:"
@@ -9949,10 +9401,9 @@ msgstr "父项和同级子项始终可见。"
#: src/modules/visibility.md
msgid ""
-"In other words, if an item is visible in module `foo`, it's visible in all "
-"the descendants of `foo`."
-msgstr ""
-"换言之,如果某个项在模块“foo”中可见,那么该项在“foo”的所有后代中均可见。"
+"In other words, if an item is visible in module `foo`, it's visible in all the "
+"descendants of `foo`."
+msgstr "换言之,如果某个项在模块“foo”中可见,那么该项在“foo”的所有后代中均可见。"
#: src/modules/visibility.md
msgid "\"outer::private\""
@@ -9976,17 +9427,17 @@ msgstr "使用“pub”关键字将模块设为公开。"
#: src/modules/visibility.md
msgid ""
-"Additionally, there are advanced `pub(...)` specifiers to restrict the scope "
-"of public visibility."
+"Additionally, there are advanced `pub(...)` specifiers to restrict the scope of public "
+"visibility."
msgstr "此外,您还可以使用高级“pub(...)”说明符来限制公开可见的范围。"
#: src/modules/visibility.md
msgid ""
-"See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-"
-"privacy.html#pubin-path-pubcrate-pubsuper-and-pubself)."
+"See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-privacy."
+"html#pubin-path-pubcrate-pubsuper-and-pubself)."
msgstr ""
-"请参阅 [Rust 参考](https://doc.rust-lang.org/reference/visibility-and-"
-"privacy.html#pubin-path-pubcrate-pubsuper-and-pubself)。"
+"请参阅 [Rust 参考](https://doc.rust-lang.org/reference/visibility-and-privacy.html#pubin-"
+"path-pubcrate-pubsuper-and-pubself)。"
#: src/modules/visibility.md
msgid "Configuring `pub(crate)` visibility is a common pattern."
@@ -9998,8 +9449,8 @@ msgstr "您可以为特定路径授予可见性,这种情况不太常见。"
#: src/modules/visibility.md
msgid ""
-"In any case, visibility must be granted to an ancestor module (and all of "
-"its descendants)."
+"In any case, visibility must be granted to an ancestor module (and all of its "
+"descendants)."
msgstr "在任何情况下,都必须向祖先模块(及其所有后代)授予可见性。"
#: src/modules/paths.md
@@ -10008,11 +9459,10 @@ msgstr "use、super、self"
#: src/modules/paths.md
msgid ""
-"A module can bring symbols from another module into scope with `use`. You "
-"will typically see something like this at the top of each module:"
+"A module can bring symbols from another module into scope with `use`. You will typically "
+"see something like this at the top of each module:"
msgstr ""
-"一个模块可以使用“use”将另一个模块的符号全部纳入。您通常在每个模块的顶部会看到"
-"如下内容:"
+"一个模块可以使用“use”将另一个模块的符号全部纳入。您通常在每个模块的顶部会看到如下内容:"
#: src/modules/paths.md
msgid "Paths"
@@ -10048,57 +9498,50 @@ msgstr "“bar::foo”是指“bar”crate 中的“foo”。"
#: src/modules/paths.md
msgid ""
-"It is common to \"re-export\" symbols at a shorter path. For example, the "
-"top-level `lib.rs` in a crate might have"
-msgstr ""
-"通常使用较短的路径来 “重新导出”符号。例如,crate 中的顶层 `lib.rs` 文件可能会"
+"It is common to \"re-export\" symbols at a shorter path. For example, the top-level `lib."
+"rs` in a crate might have"
+msgstr "通常使用较短的路径来 “重新导出”符号。例如,crate 中的顶层 `lib.rs` 文件可能会"
#: src/modules/paths.md
msgid ""
-"making `DiskStorage` and `NetworkStorage` available to other crates with a "
-"convenient, short path."
-msgstr ""
-"通过便捷的短路径,使得 `DiskStorage` 和 `NetworkStorage` 可供其他 crate 使"
-"用。"
+"making `DiskStorage` and `NetworkStorage` available to other crates with a convenient, "
+"short path."
+msgstr "通过便捷的短路径,使得 `DiskStorage` 和 `NetworkStorage` 可供其他 crate 使用。"
#: src/modules/paths.md
msgid ""
-"For the most part, only items that appear in a module need to be `use`'d. "
-"However, a trait must be in scope to call any methods on that trait, even if "
-"a type implementing that trait is already in scope. For example, to use the "
-"`read_to_string` method on a type implementing the `Read` trait, you need to "
-"`use std::io::Read`."
+"For the most part, only items that appear in a module need to be `use`'d. However, a "
+"trait must be in scope to call any methods on that trait, even if a type implementing "
+"that trait is already in scope. For example, to use the `read_to_string` method on a "
+"type implementing the `Read` trait, you need to `use std::io::Read`."
msgstr ""
-"在大多数情况下,只有模块中显示的项才需通过 `use` 引入。不过,即使实现该 "
-"trait 的类型已处于作用域内,如要调用该 trait 的任何方法,仍需将该 trait 引入"
-"到作用域内。例如,如需对实现 `Read` trait 的类型使用 `read_to_string` 方法,"
-"您需要使用 `use std::io::Read` 引入。"
+"在大多数情况下,只有模块中显示的项才需通过 `use` 引入。不过,即使实现该 trait 的类型已处"
+"于作用域内,如要调用该 trait 的任何方法,仍需将该 trait 引入到作用域内。例如,如需对实现 "
+"`Read` trait 的类型使用 `read_to_string` 方法,您需要使用 `use std::io::Read` 引入。"
#: src/modules/paths.md
msgid ""
-"The `use` statement can have a wildcard: `use std::io::*`. This is "
-"discouraged because it is not clear which items are imported, and those "
-"might change over time."
+"The `use` statement can have a wildcard: `use std::io::*`. This is discouraged because "
+"it is not clear which items are imported, and those might change over time."
msgstr ""
-"`use` 语句可以包含通配符:`use std::io::*`。但不推荐这种做法,因为不清楚导入"
-"了哪些项,并且这些内容可能会随时间而变化。"
+"`use` 语句可以包含通配符:`use std::io::*`。但不推荐这种做法,因为不清楚导入了哪些项,并"
+"且这些内容可能会随时间而变化。"
#: src/modules/exercise.md
msgid ""
-"In this exercise, you will reorganize a small GUI Library implementation. "
-"This library defines a `Widget` trait and a few implementations of that "
-"trait, as well as a `main` function."
+"In this exercise, you will reorganize a small GUI Library implementation. This library "
+"defines a `Widget` trait and a few implementations of that trait, as well as a `main` "
+"function."
msgstr ""
#: src/modules/exercise.md
#, fuzzy
msgid ""
-"It is typical to put each type or set of closely-related types into its own "
-"module, so each widget type should get its own module."
+"It is typical to put each type or set of closely-related types into its own module, so "
+"each widget type should get its own module."
msgstr ""
-"在本练习中,您需要将课程 “方法和特征”部分的 GUI 库练习重新整理为一组模块。通"
-"常情况下,将每种类型或一组密切相关的类型放入各自的模块中,因此每种 widget 类"
-"型都应拥有自己的模块。"
+"在本练习中,您需要将课程 “方法和特征”部分的 GUI 库练习重新整理为一组模块。通常情况下,将"
+"每种类型或一组密切相关的类型放入各自的模块中,因此每种 widget 类型都应拥有自己的模块。"
#: src/modules/exercise.md
#, fuzzy
@@ -10107,17 +9550,15 @@ msgstr "设置"
#: src/modules/exercise.md
msgid ""
-"The Rust playground only supports one file, so you will need to make a Cargo "
-"project on your local filesystem:"
-msgstr ""
-"Rust Playground 仅支持一个文件,因此您需要在本地文件系统上创建一个 Cargo 项"
-"目:"
+"The Rust playground only supports one file, so you will need to make a Cargo project on "
+"your local filesystem:"
+msgstr "Rust Playground 仅支持一个文件,因此您需要在本地文件系统上创建一个 Cargo 项目:"
#: src/modules/exercise.md
#, fuzzy
msgid ""
-"Edit the resulting `src/main.rs` to add `mod` statements, and add additional "
-"files in the `src` directory."
+"Edit the resulting `src/main.rs` to add `mod` statements, and add additional files in "
+"the `src` directory."
msgstr "修改 `src/main.rs` 以添加 `mod` 语句,并在 `src` 目录中添加其他文件。"
#: src/modules/exercise.md
@@ -10128,15 +9569,15 @@ msgstr ""
msgid "Here's the single-module implementation of the GUI library:"
msgstr ""
-#: src/modules/exercise.md src/modules/solution.md
+#: src/modules/exercise.md
msgid "/// Natural width of `self`.\n"
msgstr "/// Natural width of `self`.\n"
-#: src/modules/exercise.md src/modules/solution.md
+#: src/modules/exercise.md
msgid "/// Draw the widget into a buffer.\n"
msgstr "/// Draw the widget into a buffer.\n"
-#: src/modules/exercise.md src/modules/solution.md
+#: src/modules/exercise.md
msgid "/// Draw the widget on standard output.\n"
msgstr "/// Draw the widget on standard output.\n"
@@ -10151,8 +9592,7 @@ msgstr "// Add 4 paddings for borders\n"
#: src/modules/exercise.md
#, fuzzy
msgid ""
-"// TODO: Change draw_into to return Result<(), std::fmt::Error>. Then use "
-"the\n"
+"// TODO: Change draw_into to return Result<(), std::fmt::Error>. Then use the\n"
" // ?-operator here instead of .unwrap().\n"
msgstr ""
"// TODO: after learning about error handling, you can change\n"
@@ -10180,7 +9620,7 @@ msgstr "\"+={:=. Then use\n"
-" // the ?-operator here instead of .unwrap().\n"
+msgid "// TODO: after learning about error handling, you can change"
+msgstr ""
+
+#: src/modules/solution.md
+#, fuzzy
+msgid "// draw_into to return Result<(), std::fmt::Error>. Then use"
msgstr ""
"// TODO: after learning about error handling, you can change\n"
" // draw_into to return Result<(), std::fmt::Error>. Then use\n"
" // the ?-operator here instead of .unwrap().\n"
#: src/modules/solution.md
-msgid "// ---- src/main.rs ----\n"
+msgid "// the ?-operator here instead of .unwrap()."
+msgstr ""
+
+#: src/modules/solution.md
+#, fuzzy
+msgid "// ---- src/main.rs ----"
msgstr "// ---- src/main.rs ----\n"
#: src/testing.md
@@ -10288,7 +9769,7 @@ msgid "[Test Modules](./testing/unit-tests.md) (5 minutes)"
msgstr ""
#: src/testing.md
-msgid "[Other Types of Tests](./testing/other.md) (10 minutes)"
+msgid "[Other Types of Tests](./testing/other.md) (5 minutes)"
msgstr ""
#: src/testing.md
@@ -10304,7 +9785,7 @@ msgid "[Mocking](./testing/mocking.md) (5 minutes)"
msgstr ""
#: src/testing.md
-msgid "[Compiler Lints and Clippy](./testing/lints.md) (5 minutes)"
+msgid "[Compiler Lints and Clippy](./testing/lints.md) (3 minutes)"
msgstr ""
#: src/testing.md
@@ -10330,12 +9811,11 @@ msgstr "您可以通过 `tests/` 目录来支持集成测试。"
#: src/testing/unit-tests.md
#, fuzzy
msgid ""
-"Tests are marked with `#[test]`. Unit tests are often put in a nested "
-"`tests` module, using `#[cfg(test)]` to conditionally compile them only when "
-"building tests."
+"Tests are marked with `#[test]`. Unit tests are often put in a nested `tests` module, "
+"using `#[cfg(test)]` to conditionally compile them only when building tests."
msgstr ""
-"测试标有 `#[test]`。单元测试通常会放在嵌套的 `tests` 模块中,仅在构建测试时使"
-"用 `#[cfg(test)]` 对它们进行有条件地编译。"
+"测试标有 `#[test]`。单元测试通常会放在嵌套的 `tests` 模块中,仅在构建测试时使用 "
+"`#[cfg(test)]` 对它们进行有条件地编译。"
#: src/testing/unit-tests.md
#, fuzzy
@@ -10367,7 +9847,8 @@ msgid "Create a `.rs` file under `tests/`:"
msgstr "在 `tests/` 下方创建一个 `.rs` 文件:"
#: src/testing/other.md
-msgid "// tests/my_library.rs\n"
+#, fuzzy
+msgid "// tests/my_library.rs"
msgstr "// tests/my_library.rs\n"
#: src/testing/other.md
@@ -10383,22 +9864,25 @@ msgid "Rust has built-in support for documentation tests:"
msgstr "Rust 本身就支持文档测试:"
#: src/testing/other.md
-msgid ""
-"/// Shortens a string to the given length.\n"
-"///\n"
-"/// ```\n"
-"/// # use playground::shorten_string;\n"
-"/// assert_eq!(shorten_string(\"Hello World\", 5), \"Hello\");\n"
-"/// assert_eq!(shorten_string(\"Hello World\", 20), \"Hello World\");\n"
-"/// ```\n"
+#, fuzzy
+msgid "/// Shortens a string to the given length."
+msgstr "/// The car has arrived on the given floor.\n"
+
+#: src/testing/other.md
+msgid "/// ```"
+msgstr ""
+
+#: src/testing/other.md
+msgid "/// # use playground::shorten_string;"
+msgstr ""
+
+#: src/testing/other.md
+msgid "/// assert_eq!(shorten_string(\"Hello World\", 5), \"Hello\");"
+msgstr ""
+
+#: src/testing/other.md
+msgid "/// assert_eq!(shorten_string(\"Hello World\", 20), \"Hello World\");"
msgstr ""
-"/// Shortens a string to the given length.\n"
-"///\n"
-"/// ```\n"
-"/// # use playground::shorten_string;\n"
-"/// assert_eq!(shorten_string(\"Hello World\", 5), \"Hello\");\n"
-"/// assert_eq!(shorten_string(\"Hello World\", 20), \"Hello World\");\n"
-"/// ```\n"
#: src/testing/other.md
msgid "Code blocks in `///` comments are automatically seen as Rust code."
@@ -10410,9 +9894,7 @@ msgstr "代码会作为 `cargo test` 的一部分进行编译和执行。"
#: src/testing/other.md
#, fuzzy
-msgid ""
-"Adding `#` in the code will hide it from the docs, but will still compile/"
-"run it."
+msgid "Adding `#` in the code will hide it from the docs, but will still compile/run it."
msgstr "在代码中添加 `#` 可以将其隐藏在文档中,但系统仍会编译/运行它。"
#: src/testing/other.md
@@ -10421,8 +9903,8 @@ msgid ""
"version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0)."
msgstr ""
"在 [Rust Playground](https://play.rust-lang.org/?"
-"version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0) "
-"上测试上述代码。"
+"version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0) 上测试上述"
+"代码。"
#: src/testing/useful-crates.md
msgid "Rust comes with only basic support for writing tests."
@@ -10434,30 +9916,26 @@ msgstr "下面列出了我们建议在编写测试时使用的一些其他 crate
#: src/testing/useful-crates.md
msgid ""
-"[googletest](https://docs.rs/googletest): Comprehensive test assertion "
-"library in the tradition of GoogleTest for C++."
+"[googletest](https://docs.rs/googletest): Comprehensive test assertion library in the "
+"tradition of GoogleTest for C++."
msgstr ""
-"[googletest](https://docs.rs/googletest):遵从 GoogleTest for C++ 传统的综合"
-"测试断言库。"
+"[googletest](https://docs.rs/googletest):遵从 GoogleTest for C++ 传统的综合测试断言库。"
#: src/testing/useful-crates.md
msgid "[proptest](https://docs.rs/proptest): Property-based testing for Rust."
msgstr "[proptest](https://docs.rs/proptest):基于属性的测试,适用于 Rust。"
#: src/testing/useful-crates.md
-msgid ""
-"[rstest](https://docs.rs/rstest): Support for fixtures and parameterised "
-"tests."
+msgid "[rstest](https://docs.rs/rstest): Support for fixtures and parameterised tests."
msgstr "[rstest](https://docs.rs/rstest):支持固件和参数化测试。"
#: src/testing/googletest.md
#, fuzzy
msgid ""
-"The [GoogleTest](https://docs.rs/googletest/) crate allows for flexible test "
-"assertions using _matchers_:"
+"The [GoogleTest](https://docs.rs/googletest/) crate allows for flexible test assertions "
+"using _matchers_:"
msgstr ""
-"[googletest](https://docs.rs/googletest):遵从 GoogleTest for C++ 传统的综合"
-"测试断言库。"
+"[googletest](https://docs.rs/googletest):遵从 GoogleTest for C++ 传统的综合测试断言库。"
#: src/testing/googletest.md
msgid "\"baz\""
@@ -10469,29 +9947,28 @@ msgstr "\"xyz\""
#: src/testing/googletest.md
msgid ""
-"If we change the last element to `\"!\"`, the test fails with a structured "
-"error message pin-pointing the error:"
+"If we change the last element to `\"!\"`, the test fails with a structured error message "
+"pin-pointing the error:"
msgstr ""
-"如果我们将最后一个元素更改为 `\"!\"`,测试将失败,并会提供详细的错误消息来指"
-"出错误的位置:"
+"如果我们将最后一个元素更改为 `\"!\"`,测试将失败,并会提供详细的错误消息来指出错误的位"
+"置:"
#: src/testing/googletest.md
msgid ""
-"GoogleTest is not part of the Rust Playground, so you need to run this "
-"example in a local environment. Use `cargo add googletest` to quickly add it "
-"to an existing Cargo project."
+"GoogleTest is not part of the Rust Playground, so you need to run this example in a "
+"local environment. Use `cargo add googletest` to quickly add it to an existing Cargo "
+"project."
msgstr ""
-"GoogleTest 不是 Rust Playground 的一部分,因此您需要在本地环境中运行此示例。"
-"使用 `cargo add googletest` 快速将其添加到现有 Cargo 项目中。"
+"GoogleTest 不是 Rust Playground 的一部分,因此您需要在本地环境中运行此示例。使用 `cargo "
+"add googletest` 快速将其添加到现有 Cargo 项目中。"
#: src/testing/googletest.md
msgid ""
-"The `use googletest::prelude::*;` line imports a number of [commonly used "
-"macros and types](https://docs.rs/googletest/latest/googletest/prelude/index."
-"html)."
+"The `use googletest::prelude::*;` line imports a number of [commonly used macros and "
+"types](https://docs.rs/googletest/latest/googletest/prelude/index.html)."
msgstr ""
-"`use googletest::prelude::*;` 行会导入一些 [常用的宏和类型](https://docs.rs/"
-"googletest/latest/googletest/prelude/index.html)。"
+"`use googletest::prelude::*;` 行会导入一些 [常用的宏和类型](https://docs.rs/googletest/"
+"latest/googletest/prelude/index.html)。"
#: src/testing/googletest.md
msgid "This just scratches the surface, there are many builtin matchers."
@@ -10499,10 +9976,9 @@ msgstr "这只是冰山一角,还有很多内置匹配器。"
#: src/testing/googletest.md
msgid ""
-"A particularly nice feature is that mismatches in multi-line strings strings "
-"are shown as a diff:"
-msgstr ""
-"有一个特别实用的功能是,多行字符串中的不匹配问题会以差异的形式显示出来:"
+"A particularly nice feature is that mismatches in multi-line strings strings are shown "
+"as a diff:"
+msgstr "有一个特别实用的功能是,多行字符串中的不匹配问题会以差异的形式显示出来:"
#: src/testing/googletest.md
msgid ""
@@ -10530,11 +10006,10 @@ msgstr "显示用颜色标识的差异(此处未显示颜色):"
#: src/testing/googletest.md
msgid ""
-"The crate is a Rust port of [GoogleTest for C++](https://google.github.io/"
-"googletest/)."
+"The crate is a Rust port of [GoogleTest for C++](https://google.github.io/googletest/)."
msgstr ""
-"crate 是 [适用于 C++ 的 GoogleTest](https://google.github.io/googletest/) 的 "
-"Rust 移植版。"
+"crate 是 [适用于 C++ 的 GoogleTest](https://google.github.io/googletest/) 的 Rust 移植"
+"版。"
#: src/testing/googletest.md
msgid "GoogleTest is available for use in AOSP."
@@ -10542,93 +10017,87 @@ msgstr "GoogleTest 可以在 AOSP 中使用。"
#: src/testing/mocking.md
msgid ""
-"For mocking, [Mockall](https://docs.rs/mockall/) is a widely used library. "
-"You need to refactor your code to use traits, which you can then quickly "
-"mock:"
+"For mocking, [Mockall](https://docs.rs/mockall/) is a widely used library. You need to "
+"refactor your code to use traits, which you can then quickly mock:"
msgstr ""
-"对于模拟,[Mockall](https://docs.rs/mockall/) 是一个广泛使用的库。您需要重构"
-"代码才能使用 trait,然后便可很快地对其进行模拟:"
+"对于模拟,[Mockall](https://docs.rs/mockall/) 是一个广泛使用的库。您需要重构代码才能使用 "
+"trait,然后便可很快地对其进行模拟:"
#: src/testing/mocking.md
msgid ""
-"The advice here is for Android (AOSP) where Mockall is the recommended "
-"mocking library. There are other [mocking libraries available on crates.io]"
-"(https://crates.io/keywords/mock), in particular in the area of mocking HTTP "
-"services. The other mocking libraries work in a similar fashion as Mockall, "
-"meaning that they make it easy to get a mock implementation of a given trait."
+"The advice here is for Android (AOSP) where Mockall is the recommended mocking library. "
+"There are other [mocking libraries available on crates.io](https://crates.io/keywords/"
+"mock), in particular in the area of mocking HTTP services. The other mocking libraries "
+"work in a similar fashion as Mockall, meaning that they make it easy to get a mock "
+"implementation of a given trait."
msgstr ""
-"此处的建议适用于 Android (AOSP),其中推荐使用 Mockall 模拟库。[crates.io 上还"
-"有其他模拟库可用](https://crates.io/keywords/mock),尤其是在模拟 HTTP 服务方"
-"面。其他模拟库的工作方式与 Mockall 类似,这意味着通过它们您可轻松实现对指定 "
-"trait 的模拟。"
+"此处的建议适用于 Android (AOSP),其中推荐使用 Mockall 模拟库。[crates.io 上还有其他模拟库"
+"可用](https://crates.io/keywords/mock),尤其是在模拟 HTTP 服务方面。其他模拟库的工作方式"
+"与 Mockall 类似,这意味着通过它们您可轻松实现对指定 trait 的模拟。"
#: src/testing/mocking.md
msgid ""
-"Note that mocking is somewhat _controversial_: mocks allow you to completely "
-"isolate a test from its dependencies. The immediate result is faster and "
-"more stable test execution. On the other hand, the mocks can be configured "
-"wrongly and return output different from what the real dependencies would do."
+"Note that mocking is somewhat _controversial_: mocks allow you to completely isolate a "
+"test from its dependencies. The immediate result is faster and more stable test "
+"execution. On the other hand, the mocks can be configured wrongly and return output "
+"different from what the real dependencies would do."
msgstr ""
-"请注意,模拟在某种程度上具有 _争议性_:借助模拟,您可以将测试与其依赖项完全隔"
-"离。最立竿见影的是,测试作业会更快且更稳定。另一方面,模拟对象的配置可能出现"
-"错误,并返回与真实依赖项不同的输出。"
+"请注意,模拟在某种程度上具有 _争议性_:借助模拟,您可以将测试与其依赖项完全隔离。最立竿见"
+"影的是,测试作业会更快且更稳定。另一方面,模拟对象的配置可能出现错误,并返回与真实依赖项"
+"不同的输出。"
#: src/testing/mocking.md
msgid ""
-"If at all possible, it is recommended that you use the real dependencies. As "
-"an example, many databases allow you to configure an in-memory backend. This "
-"means that you get the correct behavior in your tests, plus they are fast "
-"and will automatically clean up after themselves."
+"If at all possible, it is recommended that you use the real dependencies. As an example, "
+"many databases allow you to configure an in-memory backend. This means that you get the "
+"correct behavior in your tests, plus they are fast and will automatically clean up after "
+"themselves."
msgstr ""
-"建议您尽可能使用真实依赖项。例如,许多数据库都支持您配置内存后端。这意味着,"
-"您可以在测试中获得正确的功能行为,而且测试速度会很快并会自动清理。"
+"建议您尽可能使用真实依赖项。例如,许多数据库都支持您配置内存后端。这意味着,您可以在测试"
+"中获得正确的功能行为,而且测试速度会很快并会自动清理。"
#: src/testing/mocking.md
msgid ""
-"Similarly, many web frameworks allow you to start an in-process server which "
-"binds to a random port on `localhost`. Always prefer this over mocking away "
-"the framework since it helps you test your code in the real environment."
+"Similarly, many web frameworks allow you to start an in-process server which binds to a "
+"random port on `localhost`. Always prefer this over mocking away the framework since it "
+"helps you test your code in the real environment."
msgstr ""
-"同样,许多 Web 框架都支持您启动进程内服务器,该服务器会绑定到 `localhost` 上"
-"的随机端口。相比模拟框架,请始终优先选择这种方式,因为这有助于您在真实环境中"
-"测试代码。"
+"同样,许多 Web 框架都支持您启动进程内服务器,该服务器会绑定到 `localhost` 上的随机端口。"
+"相比模拟框架,请始终优先选择这种方式,因为这有助于您在真实环境中测试代码。"
#: src/testing/mocking.md
msgid ""
-"Mockall is not part of the Rust Playground, so you need to run this example "
-"in a local environment. Use `cargo add mockall` to quickly add Mockall to an "
-"existing Cargo project."
+"Mockall is not part of the Rust Playground, so you need to run this example in a local "
+"environment. Use `cargo add mockall` to quickly add Mockall to an existing Cargo project."
msgstr ""
-"Mockall 不是 Rust Playground 的一部分,因此您需要在本地环境中运行此示例。使"
-"用 `cargo add mockall` 快速将 Mockall 添加到现有 Cargo 项目中。"
+"Mockall 不是 Rust Playground 的一部分,因此您需要在本地环境中运行此示例。使用 `cargo add "
+"mockall` 快速将 Mockall 添加到现有 Cargo 项目中。"
#: src/testing/mocking.md
msgid ""
-"Mockall has a lot more functionality. In particular, you can set up "
-"expectations which depend on the arguments passed. Here we use this to mock "
-"a cat which becomes hungry 3 hours after the last time it was fed:"
+"Mockall has a lot more functionality. In particular, you can set up expectations which "
+"depend on the arguments passed. Here we use this to mock a cat which becomes hungry 3 "
+"hours after the last time it was fed:"
msgstr ""
-"Mockall 具有更多功能。具体而言,您可以设置基于传递参数的预期值。在这里,我们"
-"使用该功能来模拟一只猫,它在上次被喂食的 3 小时后会感到饥饿:"
+"Mockall 具有更多功能。具体而言,您可以设置基于传递参数的预期值。在这里,我们使用该功能来"
+"模拟一只猫,它在上次被喂食的 3 小时后会感到饥饿:"
#: src/testing/mocking.md
msgid ""
-"You can use `.times(n)` to limit the number of times a mock method can be "
-"called to `n` --- the mock will automatically panic when dropped if this "
-"isn't satisfied."
+"You can use `.times(n)` to limit the number of times a mock method can be called to `n` "
+"--- the mock will automatically panic when dropped if this isn't satisfied."
msgstr ""
-"您可以使用 `.times(n)` 将调用模拟方法的次数限制为 `n`,如果不满足此条件,模拟"
-"对象被释放时会自动 panic。"
+"您可以使用 `.times(n)` 将调用模拟方法的次数限制为 `n`,如果不满足此条件,模拟对象被释放时"
+"会自动 panic。"
#: src/testing/lints.md
msgid ""
-"The Rust compiler produces fantastic error messages, as well as helpful "
-"built-in lints. [Clippy](https://doc.rust-lang.org/clippy/) provides even "
-"more lints, organized into groups that can be enabled per-project."
+"The Rust compiler produces fantastic error messages, as well as helpful built-in lints. "
+"[Clippy](https://doc.rust-lang.org/clippy/) provides even more lints, organized into "
+"groups that can be enabled per-project."
msgstr ""
-"Rust 编译器会生成出色的错误消息,并提供实用的内置 lint 功能。[Clippy]"
-"(https://doc.rust-lang.org/clippy/) 提供了更多 lint 功能,采用按组分类方式,"
-"并可按项目灵活启用。"
+"Rust 编译器会生成出色的错误消息,并提供实用的内置 lint 功能。[Clippy](https://doc.rust-"
+"lang.org/clippy/) 提供了更多 lint 功能,采用按组分类方式,并可按项目灵活启用。"
#: src/testing/lints.md
msgid "\"X probably fits in a u16, right? {}\""
@@ -10636,28 +10105,27 @@ msgstr "\"X probably fits in a u16, right? {}\""
#: src/testing/lints.md
msgid ""
-"Run the code sample and examine the error message. There are also lints "
-"visible here, but those will not be shown once the code compiles. Switch to "
-"the Playground site to show those lints."
+"Run the code sample and examine the error message. There are also lints visible here, "
+"but those will not be shown once the code compiles. Switch to the Playground site to "
+"show those lints."
msgstr ""
-"运行代码示例并检查错误消息。此处还会显示一些 lint,但是一旦完成代码编译,就不"
-"会再显示这些 lint。切换到 Playground 网站以显示这些 lint。"
+"运行代码示例并检查错误消息。此处还会显示一些 lint,但是一旦完成代码编译,就不会再显示这"
+"些 lint。切换到 Playground 网站以显示这些 lint。"
#: src/testing/lints.md
msgid ""
-"After resolving the lints, run `clippy` on the playground site to show "
-"clippy warnings. Clippy has extensive documentation of its lints, and adds "
-"new lints (including default-deny lints) all the time."
+"After resolving the lints, run `clippy` on the playground site to show clippy warnings. "
+"Clippy has extensive documentation of its lints, and adds new lints (including default-"
+"deny lints) all the time."
msgstr ""
-"解析完 lint 之后,请在 Playground 网站上运行 `clippy`,以显示 clippy 警告。"
-"Clippy 提供了大量的 lint 文档,并且在不断添加新的 lint(包括默认拒绝 lint)。"
+"解析完 lint 之后,请在 Playground 网站上运行 `clippy`,以显示 clippy 警告。Clippy 提供了"
+"大量的 lint 文档,并且在不断添加新的 lint(包括默认拒绝 lint)。"
#: src/testing/lints.md
msgid ""
-"Note that errors or warnings with `help: ...` can be fixed with `cargo fix` "
-"or via your editor."
-msgstr ""
-"请注意,带有 `help: ...` 的错误或警告可以通过 `cargo Fix` 或编辑器进行修复。"
+"Note that errors or warnings with `help: ...` can be fixed with `cargo fix` or via your "
+"editor."
+msgstr "请注意,带有 `help: ...` 的错误或警告可以通过 `cargo Fix` 或编辑器进行修复。"
#: src/testing/exercise.md
msgid "Luhn Algorithm"
@@ -10665,32 +10133,33 @@ msgstr "卢恩算法"
#: src/testing/exercise.md
msgid ""
-"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used "
-"to validate credit card numbers. The algorithm takes a string as input and "
-"does the following to validate the credit card number:"
+"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used to validate "
+"credit card numbers. The algorithm takes a string as input and does the following to "
+"validate the credit card number:"
msgstr ""
-"[卢恩算法](https://zh.wikipedia.org/wiki/卢恩算法)用于验证信用卡号。该算法将"
-"字符串作为输入内容,并执行以下操作来验证信用卡号:"
+"[卢恩算法](https://zh.wikipedia.org/wiki/卢恩算法)用于验证信用卡号。该算法将字符串作为输"
+"入内容,并执行以下操作来验证信用卡号:"
#: src/testing/exercise.md
-msgid "Ignore all spaces. Reject number with less than two digits."
+#, fuzzy
+msgid "Ignore all spaces. Reject number with fewer than two digits."
msgstr "忽略所有空格。拒绝少于两位的号码。"
#: src/testing/exercise.md
msgid ""
-"Moving from **right to left**, double every second digit: for the number "
-"`1234`, we double `3` and `1`. For the number `98765`, we double `6` and `8`."
+"Moving from **right to left**, double every second digit: for the number `1234`, we "
+"double `3` and `1`. For the number `98765`, we double `6` and `8`."
msgstr ""
-"从**右到左**,将偶数位的数字乘二。对于数字“1234”,我们将“3”和“1”乘二;对于数"
-"字“98765”,将“6”和“8”乘二。"
+"从**右到左**,将偶数位的数字乘二。对于数字“1234”,我们将“3”和“1”乘二;对于数字“98765”,"
+"将“6”和“8”乘二。"
#: src/testing/exercise.md
msgid ""
-"After doubling a digit, sum the digits if the result is greater than 9. So "
-"doubling `7` becomes `14` which becomes `1 + 4 = 5`."
+"After doubling a digit, sum the digits if the result is greater than 9. So doubling `7` "
+"becomes `14` which becomes `1 + 4 = 5`."
msgstr ""
-"将一个数字乘二后,如果结果大于 9,则将每位数字相加。因此,将“7”乘二得“14”,然"
-"后“1 + 4 = 5”。"
+"将一个数字乘二后,如果结果大于 9,则将每位数字相加。因此,将“7”乘二得“14”,然后“1 + 4 = "
+"5”。"
#: src/testing/exercise.md
msgid "Sum all the undoubled and doubled digits."
@@ -10702,21 +10171,18 @@ msgstr "如果总和以“0”结尾,则信用卡号有效。"
#: src/testing/exercise.md
msgid ""
-"The provided code provides a buggy implementation of the luhn algorithm, "
-"along with two basic unit tests that confirm that most the algorithm is "
-"implemented correctly."
+"The provided code provides a buggy implementation of the luhn algorithm, along with two "
+"basic unit tests that confirm that most the algorithm is implemented correctly."
msgstr ""
-"提供的代码提供了一个有缺陷的 Luhn 算法实现,附带两个基本单元测试,用于验证大"
-"部分算法是否正确实现。"
+"提供的代码提供了一个有缺陷的 Luhn 算法实现,附带两个基本单元测试,用于验证大部分算法是否"
+"正确实现。"
#: src/testing/exercise.md
#, fuzzy
msgid ""
-"Copy the code below to and write additional "
-"tests to uncover bugs in the provided implementation, fixing any bugs you "
-"find."
-msgstr ""
-"将以下代码复制到 ,并填入缺少的函数和方法:"
+"Copy the code below to and write additional tests to "
+"uncover bugs in the provided implementation, fixing any bugs you find."
+msgstr "将以下代码复制到 ,并填入缺少的函数和方法:"
#: src/testing/exercise.md src/testing/solution.md
msgid "\"4263 9826 4026 9299\""
@@ -10819,13 +10285,11 @@ msgid "[Error Trait](./error-handling/error.md) (5 minutes)"
msgstr ""
#: src/error-handling.md
-msgid ""
-"[thiserror and anyhow](./error-handling/thiserror-and-anyhow.md) (5 minutes)"
+msgid "[thiserror and anyhow](./error-handling/thiserror-and-anyhow.md) (5 minutes)"
msgstr ""
#: src/error-handling.md
-msgid ""
-"[Exercise: Rewriting with Result](./error-handling/exercise.md) (20 minutes)"
+msgid "[Exercise: Rewriting with Result](./error-handling/exercise.md) (20 minutes)"
msgstr ""
#: src/error-handling/panics.md
@@ -10862,19 +10326,15 @@ msgstr "针对特定用途的 panic 可以使用 `panic!` 宏。"
#: src/error-handling/panics.md
msgid ""
-"A panic will \"unwind\" the stack, dropping values just as if the functions "
-"had returned."
+"A panic will \"unwind\" the stack, dropping values just as if the functions had returned."
msgstr "使用 panic 会 “展开”堆栈,并丢弃对应的值,就像函数已经返回一样。"
#: src/error-handling/panics.md
-msgid ""
-"Use non-panicking APIs (such as `Vec::get`) if crashing is not acceptable."
+msgid "Use non-panicking APIs (such as `Vec::get`) if crashing is not acceptable."
msgstr "如果崩溃不可接受,请使用不会触发 panic 的 API(例如 `Vec::get`)。"
#: src/error-handling/panics.md
-msgid ""
-"By default, a panic will cause the stack to unwind. The unwinding can be "
-"caught:"
+msgid "By default, a panic will cause the stack to unwind. The unwinding can be caught:"
msgstr "默认情况下,panic 会导致堆栈展开。您可以捕获展开信息:"
#: src/error-handling/panics.md
@@ -10890,17 +10350,13 @@ msgid "\"oh no!\""
msgstr "\"oh no!\""
#: src/error-handling/panics.md
-msgid ""
-"Catching is unusual; do not attempt to implement exceptions with "
-"`catch_unwind`!"
+msgid "Catching is unusual; do not attempt to implement exceptions with `catch_unwind`!"
msgstr "捕获异常;请勿尝试使用 `catch_unwind` 实现异常!"
#: src/error-handling/panics.md
msgid ""
-"This can be useful in servers which should keep running even if a single "
-"request crashes."
-msgstr ""
-"如果服务器需要持续运行(即使是在请求发生崩溃的情况下), 此方法十分有用。"
+"This can be useful in servers which should keep running even if a single request crashes."
+msgstr "如果服务器需要持续运行(即使是在请求发生崩溃的情况下), 此方法十分有用。"
#: src/error-handling/panics.md
msgid "This does not work if `panic = 'abort'` is set in your `Cargo.toml`."
@@ -10909,13 +10365,12 @@ msgstr "如果您在 `Cargo.toml` 中设置了 `panic = 'abort'`,此方法不
#: src/error-handling/try.md
#, fuzzy
msgid ""
-"Runtime errors like connection-refused or file-not-found are handled with "
-"the `Result` type, but matching this type on every call can be cumbersome. "
-"The try-operator `?` is used to return errors to the caller. It lets you "
-"turn the common"
+"Runtime errors like connection-refused or file-not-found are handled with the `Result` "
+"type, but matching this type on every call can be cumbersome. The try-operator `?` is "
+"used to return errors to the caller. It lets you turn the common"
msgstr ""
-"运行时错误(如连接遭拒或未找到文件)使用 `Result` 类型进行处理,但在每次调用"
-"中匹配此类型会很繁琐。try 运算符 `?` 用于将错误返回给调用方。它能将常用命令"
+"运行时错误(如连接遭拒或未找到文件)使用 `Result` 类型进行处理,但在每次调用中匹配此类型"
+"会很繁琐。try 运算符 `?` 用于将错误返回给调用方。它能将常用命令"
#: src/error-handling/try.md
msgid "into the much simpler"
@@ -10927,7 +10382,8 @@ msgid "We can use this to simplify our error handling code:"
msgstr "我们可以用它来简化错误处理代码:"
#: src/error-handling/try.md
-msgid "//fs::write(\"config.dat\", \"alice\").unwrap();\n"
+#, fuzzy
+msgid "//fs::write(\"config.dat\", \"alice\").unwrap();"
msgstr "//fs::write(\"config.dat\", \"alice\").unwrap();\n"
#: src/error-handling/try.md src/error-handling/try-conversions.md
@@ -10949,27 +10405,23 @@ msgstr "`username` 变量可以是 `Ok(string)` 或 `Err(error)`。"
#: src/error-handling/try.md
msgid ""
-"Use the `fs::write` call to test out the different scenarios: no file, empty "
-"file, file with username."
-msgstr ""
-"可以使用 `fs::write` 调用来测试不同的场景:没有文件、空文件、包含用户名的文"
-"件。"
+"Use the `fs::write` call to test out the different scenarios: no file, empty file, file "
+"with username."
+msgstr "可以使用 `fs::write` 调用来测试不同的场景:没有文件、空文件、包含用户名的文件。"
#: src/error-handling/try.md
msgid ""
-"Note that `main` can return a `Result<(), E>` as long as it implements `std::"
-"process:Termination`. In practice, this means that `E` implements `Debug`. "
-"The executable will print the `Err` variant and return a nonzero exit status "
-"on error."
+"Note that `main` can return a `Result<(), E>` as long as it implements `std::process:"
+"Termination`. In practice, this means that `E` implements `Debug`. The executable will "
+"print the `Err` variant and return a nonzero exit status on error."
msgstr ""
-"请注意,`main` 函数只要实现 `std::process:Terality`,就可以返回 `Result<(), "
-"E>`。在实践中,这意味着 `E` 会实现 `Debug`。可执行文件将输出 `Err` 变体,并在"
-"出现错误时返回非零退出状态。"
+"请注意,`main` 函数只要实现 `std::process:Terality`,就可以返回 `Result<(), E>`。在实践"
+"中,这意味着 `E` 会实现 `Debug`。可执行文件将输出 `Err` 变体,并在出现错误时返回非零退出"
+"状态。"
#: src/error-handling/try-conversions.md
msgid ""
-"The effective expansion of `?` is a little more complicated than previously "
-"indicated:"
+"The effective expansion of `?` is a little more complicated than previously indicated:"
msgstr "`?` 的有效展开比前面介绍的内容略微复杂一些:"
#: src/error-handling/try-conversions.md
@@ -10979,11 +10431,10 @@ msgstr "效果等同于"
#: src/error-handling/try-conversions.md
#, fuzzy
msgid ""
-"The `From::from` call here means we attempt to convert the error type to the "
-"type returned by the function. This makes it easy to encapsulate errors into "
-"higher-level errors."
-msgstr ""
-"此处的 `From::from` 调用表示,我们尝试将错误类型转换为 函数返回的类型:"
+"The `From::from` call here means we attempt to convert the error type to the type "
+"returned by the function. This makes it easy to encapsulate errors into higher-level "
+"errors."
+msgstr "此处的 `From::from` 调用表示,我们尝试将错误类型转换为 函数返回的类型:"
#: src/error-handling/try-conversions.md
msgid "\"IO error: {e}\""
@@ -10994,39 +10445,37 @@ msgstr "\"IO error: {e}\""
msgid "\"Found no username in {path}\""
msgstr "\"Found no username in {0}\""
-#: src/error-handling/try-conversions.md
-#: src/error-handling/thiserror-and-anyhow.md
-msgid "//fs::write(\"config.dat\", \"\").unwrap();\n"
+#: src/error-handling/try-conversions.md src/error-handling/thiserror-and-anyhow.md
+#, fuzzy
+msgid "//fs::write(\"config.dat\", \"\").unwrap();"
msgstr "//fs::write(\"config.dat\", \"\").unwrap();\n"
#: src/error-handling/try-conversions.md
msgid ""
-"The `?` operator must return a value compatible with the return type of the "
-"function. For `Result`, it means that the error types have to be compatible. "
-"A function that returns `Result` can only use `?` on a value "
-"of type `Result` if `ErrorOuter` and `ErrorInner` are the "
-"same type or if `ErrorOuter` implements `From`."
+"The `?` operator must return a value compatible with the return type of the function. "
+"For `Result`, it means that the error types have to be compatible. A function that "
+"returns `Result` can only use `?` on a value of type `Result` if `ErrorOuter` and `ErrorInner` are the same type or if `ErrorOuter` "
+"implements `From`."
msgstr ""
#: src/error-handling/try-conversions.md
msgid ""
-"A common alternative to a `From` implementation is `Result::map_err`, "
-"especially when the conversion only happens in one place."
-msgstr ""
-"`From` 实现的常见替代方案是 `Result::map_err`,尤其是只在一个位置进行转换时。"
+"A common alternative to a `From` implementation is `Result::map_err`, especially when "
+"the conversion only happens in one place."
+msgstr "`From` 实现的常见替代方案是 `Result::map_err`,尤其是只在一个位置进行转换时。"
#: src/error-handling/try-conversions.md
msgid ""
-"There is no compatibility requirement for `Option`. A function returning "
-"`Option` can use the `?` operator on `Option` for arbitrary `T` and "
-"`U` types."
+"There is no compatibility requirement for `Option`. A function returning `Option` can "
+"use the `?` operator on `Option` for arbitrary `T` and `U` types."
msgstr ""
#: src/error-handling/try-conversions.md
msgid ""
-"A function that returns `Result` cannot use `?` on `Option` and vice versa. "
-"However, `Option::ok_or` converts `Option` to `Result` whereas `Result::ok` "
-"turns `Result` into `Option`."
+"A function that returns `Result` cannot use `?` on `Option` and vice versa. However, "
+"`Option::ok_or` converts `Option` to `Result` whereas `Result::ok` turns `Result` into "
+"`Option`."
msgstr ""
#: src/error-handling/error.md
@@ -11036,13 +10485,12 @@ msgstr "动态错误类型"
#: src/error-handling/error.md
#, fuzzy
msgid ""
-"Sometimes we want to allow any type of error to be returned without writing "
-"our own enum covering all the different possibilities. The `std::error::"
-"Error` trait makes it easy to create a trait object that can contain any "
-"error."
+"Sometimes we want to allow any type of error to be returned without writing our own enum "
+"covering all the different possibilities. The `std::error::Error` trait makes it easy to "
+"create a trait object that can contain any error."
msgstr ""
-"有时,我们需要允许返回任意类型的错误,但又不想自己手动编写枚举来涵盖所有不同"
-"的可能性。 `std::error::Error` 可以让我们轻松做到这一点。"
+"有时,我们需要允许返回任意类型的错误,但又不想自己手动编写枚举来涵盖所有不同的可能性。 "
+"`std::error::Error` 可以让我们轻松做到这一点。"
#: src/error-handling/error.md
msgid "\"count.dat\""
@@ -11062,55 +10510,52 @@ msgstr "\"Error: {err}\""
#: src/error-handling/error.md
msgid ""
-"The `read_count` function can return `std::io::Error` (from file operations) "
-"or `std::num::ParseIntError` (from `String::parse`)."
+"The `read_count` function can return `std::io::Error` (from file operations) or `std::"
+"num::ParseIntError` (from `String::parse`)."
msgstr ""
-"`read_count` 函数可以返回 `std::io::Error`(通过文件操作)或 `std::num::"
-"ParseIntError`(通过 `String::parse`)。"
+"`read_count` 函数可以返回 `std::io::Error`(通过文件操作)或 `std::num::ParseIntError`"
+"(通过 `String::parse`)。"
#: src/error-handling/error.md
#, fuzzy
msgid ""
-"Boxing errors saves on code, but gives up the ability to cleanly handle "
-"different error cases differently in the program. As such it's generally not "
-"a good idea to use `Box` in the public API of a library, but it "
-"can be a good option in a program where you just want to display the error "
-"message somewhere."
+"Boxing errors saves on code, but gives up the ability to cleanly handle different error "
+"cases differently in the program. As such it's generally not a good idea to use `Box` in the public API of a library, but it can be a good option in a program where "
+"you just want to display the error message somewhere."
msgstr ""
-"虽然这可以省却编写代码的麻烦,但也会导致我们无法在程序中以不同的方式正常处理"
-"不同的 错误情况。因此,在库的公共 API 中使用 `Box` 通常不是一个好"
-"主意。 但是对于您只需要在某处显示错误消息的程序来说,这不失为一个 很好的选"
-"择。"
+"虽然这可以省却编写代码的麻烦,但也会导致我们无法在程序中以不同的方式正常处理不同的 错误情"
+"况。因此,在库的公共 API 中使用 `Box` 通常不是一个好主意。 但是对于您只需要在"
+"某处显示错误消息的程序来说,这不失为一个 很好的选择。"
#: src/error-handling/error.md
msgid ""
-"Make sure to implement the `std::error::Error` trait when defining a custom "
-"error type so it can be boxed. But if you need to support the `no_std` "
-"attribute, keep in mind that the `std::error::Error` trait is currently "
-"compatible with `no_std` in [nightly](https://github.com/rust-lang/rust/"
-"issues/103765) only."
+"Make sure to implement the `std::error::Error` trait when defining a custom error type "
+"so it can be boxed. But if you need to support the `no_std` attribute, keep in mind that "
+"the `std::error::Error` trait is currently compatible with `no_std` in [nightly](https://"
+"github.com/rust-lang/rust/issues/103765) only."
msgstr ""
#: src/error-handling/thiserror-and-anyhow.md
#, fuzzy
msgid ""
-"The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs.rs/"
-"anyhow/) crates are widely used to simplify error handling."
+"The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs.rs/anyhow/) "
+"crates are widely used to simplify error handling."
msgstr ""
-"[`thiserror`](https://docs.rs/thiserror/) 和 [`anyhow`](https://docs.rs/"
-"anyhow/) crate 用于简化错误处理。`thiserror` 有助于创建实现 `From` 的自定"
-"义错误类型。`anyhow` 有助于处理函数中的错误,包括为错误添加上下文信息。"
+"[`thiserror`](https://docs.rs/thiserror/) 和 [`anyhow`](https://docs.rs/anyhow/) crate 用"
+"于简化错误处理。`thiserror` 有助于创建实现 `From` 的自定义错误类型。`anyhow` 有助于处"
+"理函数中的错误,包括为错误添加上下文信息。"
#: src/error-handling/thiserror-and-anyhow.md
msgid ""
-"`thiserror` is often used in libraries to create custom error types that "
-"implement `From`."
+"`thiserror` is often used in libraries to create custom error types that implement "
+"`From`."
msgstr ""
#: src/error-handling/thiserror-and-anyhow.md
msgid ""
-"`anyhow` is often used by applications to help with error handling in "
-"functions, including adding contextual information to your errors."
+"`anyhow` is often used by applications to help with error handling in functions, "
+"including adding contextual information to your errors."
msgstr ""
#: src/error-handling/thiserror-and-anyhow.md
@@ -11140,11 +10585,11 @@ msgstr ""
#: src/error-handling/thiserror-and-anyhow.md
#, fuzzy
msgid ""
-"The `Error` derive macro is provided by `thiserror`, and has lots of useful "
-"attributes to help define error types in a compact way."
+"The `Error` derive macro is provided by `thiserror`, and has lots of useful attributes "
+"to help define error types in a compact way."
msgstr ""
-"`Error` 派生宏由 `thiserror` 提供,并且具有许多有用的属性(例如 "
-"`#[error]`),有助于定义有用的错误类型。"
+"`Error` 派生宏由 `thiserror` 提供,并且具有许多有用的属性(例如 `#[error]`),有助于定义"
+"有用的错误类型。"
#: src/error-handling/thiserror-and-anyhow.md
msgid "The `std::error::Error` trait is derived automatically."
@@ -11161,9 +10606,9 @@ msgstr ""
#: src/error-handling/thiserror-and-anyhow.md
#, fuzzy
msgid ""
-"`anyhow::Error` is essentially a wrapper around `Box`. As such "
-"it's again generally not a good choice for the public API of a library, but "
-"is widely used in applications."
+"`anyhow::Error` is essentially a wrapper around `Box`. As such it's again "
+"generally not a good choice for the public API of a library, but is widely used in "
+"applications."
msgstr "”是“Result\\”的类型别名。"
#: src/error-handling/thiserror-and-anyhow.md
@@ -11173,30 +10618,28 @@ msgstr "“anyhow::Result"
#: src/error-handling/thiserror-and-anyhow.md
#, fuzzy
-msgid ""
-"Actual error type inside of it can be extracted for examination if necessary."
+msgid "Actual error type inside of it can be extracted for examination if necessary."
msgstr "“anyhow::Error”本质上是“Box"
#: src/error-handling/thiserror-and-anyhow.md
#, fuzzy
msgid ""
-"Functionality provided by `anyhow::Result` may be familiar to Go "
-"developers, as it provides similar usage patterns and ergonomics to `(T, "
-"error)` from Go."
+"Functionality provided by `anyhow::Result` may be familiar to Go developers, as it "
+"provides similar usage patterns and ergonomics to `(T, error)` from Go."
msgstr ""
-"”的封装容器。因此,就像前面提到的那样,在库的公共 API 中 使用它通常不是一个好"
-"主意。但是它广泛用于应用中。\n"
+"”的封装容器。因此,就像前面提到的那样,在库的公共 API 中 使用它通常不是一个好主意。但是它"
+"广泛用于应用中。\n"
"\n"
"如果需要,可以提取其内部的实际错误类型进行检查。\n"
"\n"
-"Go 开发者可能会十分熟悉 `anyhow::Result` 提供的功能, 因为它的使用模式和工"
-"效学设计与 Go 的 `(T, error)` 方法十分相似。"
+"Go 开发者可能会十分熟悉 `anyhow::Result` 提供的功能, 因为它的使用模式和工效学设计与 "
+"Go 的 `(T, error)` 方法十分相似。"
#: src/error-handling/thiserror-and-anyhow.md
msgid ""
-"`anyhow::Context` is a trait implemented for the standard `Result` and "
-"`Option` types. `use anyhow::Context` is necessary to enable `.context()` "
-"and `.with_context()` on those types."
+"`anyhow::Context` is a trait implemented for the standard `Result` and `Option` types. "
+"`use anyhow::Context` is necessary to enable `.context()` and `.with_context()` on those "
+"types."
msgstr ""
#: src/error-handling/exercise.md
@@ -11206,24 +10649,22 @@ msgstr "练习:使用 Result 进行重写"
#: src/error-handling/exercise.md
msgid ""
-"The following implements a very simple parser for an expression language. "
-"However, it handles errors by panicking. Rewrite it to instead use idiomatic "
-"error handling and propagate errors to a return from `main`. Feel free to "
-"use `thiserror` and `anyhow`."
+"The following implements a very simple parser for an expression language. However, it "
+"handles errors by panicking. Rewrite it to instead use idiomatic error handling and "
+"propagate errors to a return from `main`. Feel free to use `thiserror` and `anyhow`."
msgstr ""
-"以下代码实现了一个非常简单的表达式语言解析器。不过,它通过 panic 机制来处理错"
-"误。请重写该代码,改用惯用的错误处理方式,并将错误传播到 `main` 函数的返回"
-"值。您可以随意使用 `thiserror` 和 `anyhow`。"
+"以下代码实现了一个非常简单的表达式语言解析器。不过,它通过 panic 机制来处理错误。请重写该"
+"代码,改用惯用的错误处理方式,并将错误传播到 `main` 函数的返回值。您可以随意使用 "
+"`thiserror` 和 `anyhow`。"
#: src/error-handling/exercise.md
msgid ""
-"HINT: start by fixing error handling in the `parse` function. Once that is "
-"working correctly, update `Tokenizer` to implement "
-"`Iterator- >` and handle that in the parser."
+"HINT: start by fixing error handling in the `parse` function. Once that is working "
+"correctly, update `Tokenizer` to implement `Iterator
- >` and handle that in the parser."
msgstr ""
-"提示:请先修复 `parse` 函数中的错误处理问题。该部分正常运行后,请更新 "
-"`Tokenizer` 以实现 `Iterator
- >`,并在解析器"
-"中进行相应处理。"
+"提示:请先修复 `parse` 函数中的错误处理问题。该部分正常运行后,请更新 `Tokenizer` 以实现 "
+"`Iterator
- >`,并在解析器中进行相应处理。"
#: src/error-handling/exercise.md src/error-handling/solution.md
msgid "/// An arithmetic operator.\n"
@@ -11314,8 +10755,7 @@ msgid "[Unsafe](./unsafe-rust/unsafe.md) (5 minutes)"
msgstr ""
#: src/unsafe-rust.md
-msgid ""
-"[Dereferencing Raw Pointers](./unsafe-rust/dereferencing.md) (10 minutes)"
+msgid "[Dereferencing Raw Pointers](./unsafe-rust/dereferencing.md) (10 minutes)"
msgstr ""
#: src/unsafe-rust.md
@@ -11338,6 +10778,10 @@ msgstr ""
msgid "[Exercise: FFI Wrapper](./unsafe-rust/exercise.md) (30 minutes)"
msgstr ""
+#: src/unsafe-rust.md
+msgid "This segment should take about 1 hour and 5 minutes"
+msgstr ""
+
#: src/unsafe-rust/unsafe.md
msgid "The Rust language has two parts:"
msgstr "Rust 语言包含两个部分:"
@@ -11347,26 +10791,22 @@ msgid "**Safe Rust:** memory safe, no undefined behavior possible."
msgstr "\\*\\*安全 Rust:\\*\\*内存安全,没有潜在的未定义行为。"
#: src/unsafe-rust/unsafe.md
-msgid ""
-"**Unsafe Rust:** can trigger undefined behavior if preconditions are "
-"violated."
+msgid "**Unsafe Rust:** can trigger undefined behavior if preconditions are violated."
msgstr "\\*\\*不安全 Rust:\\*\\*如果违反了前提条件,可能会触发未定义的行为。"
#: src/unsafe-rust/unsafe.md
#, fuzzy
msgid ""
-"We saw mostly safe Rust in this course, but it's important to know what "
-"Unsafe Rust is."
-msgstr ""
-"本课程中出现的大多为“安全 Rust”,但是了解“不安全 Rust”的定义 非常重要。"
+"We saw mostly safe Rust in this course, but it's important to know what Unsafe Rust is."
+msgstr "本课程中出现的大多为“安全 Rust”,但是了解“不安全 Rust”的定义 非常重要。"
#: src/unsafe-rust/unsafe.md
msgid ""
-"Unsafe code is usually small and isolated, and its correctness should be "
-"carefully documented. It is usually wrapped in a safe abstraction layer."
+"Unsafe code is usually small and isolated, and its correctness should be carefully "
+"documented. It is usually wrapped in a safe abstraction layer."
msgstr ""
-"不安全的代码通常内容很少而且与其他代码隔离, 其正确性也应得到仔细记录。这类代"
-"码通常封装在安全的抽象层中。"
+"不安全的代码通常内容很少而且与其他代码隔离, 其正确性也应得到仔细记录。这类代码通常封装在"
+"安全的抽象层中。"
#: src/unsafe-rust/unsafe.md
msgid "Unsafe Rust gives you access to five new capabilities:"
@@ -11394,24 +10834,23 @@ msgstr "实现 `unsafe` trait。"
#: src/unsafe-rust/unsafe.md
msgid ""
-"We will briefly cover unsafe capabilities next. For full details, please see "
-"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-"
-"unsafe-rust.html) and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)."
+"We will briefly cover unsafe capabilities next. For full details, please see [Chapter "
+"19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html) and the "
+"[Rustonomicon](https://doc.rust-lang.org/nomicon/)."
msgstr ""
-"下面,我们将简要介绍这些不安全功能。如需了解完整详情,请参阅 [《Rust 手册》"
-"第 19.1 章](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html) 和 "
-"[Rustonomicon](https://doc.rust-lang.org/nomicon/)。"
+"下面,我们将简要介绍这些不安全功能。如需了解完整详情,请参阅 [《Rust 手册》第 19.1 章]"
+"(https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html) 和 [Rustonomicon](https://doc."
+"rust-lang.org/nomicon/)。"
#: src/unsafe-rust/unsafe.md
#, fuzzy
msgid ""
-"Unsafe Rust does not mean the code is incorrect. It means that developers "
-"have turned off some compiler safety features and have to write correct code "
-"by themselves. It means the compiler no longer enforces Rust's memory-safety "
-"rules."
+"Unsafe Rust does not mean the code is incorrect. It means that developers have turned "
+"off some compiler safety features and have to write correct code by themselves. It means "
+"the compiler no longer enforces Rust's memory-safety rules."
msgstr ""
-"不安全 Rust 并不意味着代码不正确,而是这意味着开发者已停用 编译器的安全功能,"
-"必须自行编写正确的 代码。也就是说,编译器不再强制执行 Rust 的内存安全规则。"
+"不安全 Rust 并不意味着代码不正确,而是这意味着开发者已停用 编译器的安全功能,必须自行编写"
+"正确的 代码。也就是说,编译器不再强制执行 Rust 的内存安全规则。"
#: src/unsafe-rust/dereferencing.md
msgid "Creating pointers is safe, but dereferencing them requires `unsafe`:"
@@ -11422,20 +10861,24 @@ msgid "\"careful!\""
msgstr "\"careful!\""
#: src/unsafe-rust/dereferencing.md
-msgid ""
-"// Safe because r1 and r2 were obtained from references and so are\n"
-" // guaranteed to be non-null and properly aligned, the objects "
-"underlying\n"
-" // the references from which they were obtained are live throughout the\n"
-" // whole unsafe block, and they are not accessed either through the\n"
-" // references or concurrently through any other pointers.\n"
+msgid "// Safe because r1 and r2 were obtained from references and so are"
+msgstr ""
+
+#: src/unsafe-rust/dereferencing.md
+msgid "// guaranteed to be non-null and properly aligned, the objects underlying"
+msgstr ""
+
+#: src/unsafe-rust/dereferencing.md
+msgid "// the references from which they were obtained are live throughout the"
+msgstr ""
+
+#: src/unsafe-rust/dereferencing.md
+msgid "// whole unsafe block, and they are not accessed either through the"
+msgstr ""
+
+#: src/unsafe-rust/dereferencing.md
+msgid "// references or concurrently through any other pointers."
msgstr ""
-"// Safe because r1 and r2 were obtained from references and so are\n"
-" // guaranteed to be non-null and properly aligned, the objects "
-"underlying\n"
-" // the references from which they were obtained are live throughout the\n"
-" // whole unsafe block, and they are not accessed either through the\n"
-" // references or concurrently through any other pointers.\n"
#: src/unsafe-rust/dereferencing.md
msgid "\"r1 is: {}\""
@@ -11450,37 +10893,29 @@ msgid "\"r2 is: {}\""
msgstr "\"r2 is: {}\""
#: src/unsafe-rust/dereferencing.md
-msgid ""
-"// NOT SAFE. DO NOT DO THIS.\n"
-" /*\n"
-" let r3: &String = unsafe { &*r1 };\n"
-" drop(s);\n"
-" println!(\"r3 is: {}\", *r3);\n"
-" */"
+msgid "// NOT SAFE. DO NOT DO THIS."
+msgstr ""
+
+#: src/unsafe-rust/dereferencing.md
+msgid "/*"
msgstr ""
-"// NOT SAFE. DO NOT DO THIS.\n"
-" /*\n"
-" let r3: &String = unsafe { &*r1 };\n"
-" drop(s);\n"
-" println!(\"r3 is: {}\", *r3);\n"
-" */"
#: src/unsafe-rust/dereferencing.md
msgid ""
-"It is good practice (and required by the Android Rust style guide) to write "
-"a comment for each `unsafe` block explaining how the code inside it "
-"satisfies the safety requirements of the unsafe operations it is doing."
+"It is good practice (and required by the Android Rust style guide) to write a comment "
+"for each `unsafe` block explaining how the code inside it satisfies the safety "
+"requirements of the unsafe operations it is doing."
msgstr ""
-"我们建议(而且 Android Rust 样式指南要求)为每个 `unsafe` 代码块编写一条注"
-"释, 说明该代码块中的代码如何满足其所执行的不安全操作的 安全要求。"
+"我们建议(而且 Android Rust 样式指南要求)为每个 `unsafe` 代码块编写一条注释, 说明该代码"
+"块中的代码如何满足其所执行的不安全操作的 安全要求。"
#: src/unsafe-rust/dereferencing.md
msgid ""
-"In the case of pointer dereferences, this means that the pointers must be "
-"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:"
+"In the case of pointer dereferences, this means that the pointers must be [_valid_]"
+"(https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:"
msgstr ""
-"对于指针解除引用,这意味着指针必须为 [_valid_](https://doc.rust-lang.org/std/"
-"ptr/index.html#safety),即:"
+"对于指针解除引用,这意味着指针必须为 [_valid_](https://doc.rust-lang.org/std/ptr/index."
+"html#safety),即:"
#: src/unsafe-rust/dereferencing.md
msgid "The pointer must be non-null."
@@ -11488,8 +10923,7 @@ msgstr "指针必须为非 null。"
#: src/unsafe-rust/dereferencing.md
msgid ""
-"The pointer must be _dereferenceable_ (within the bounds of a single "
-"allocated object)."
+"The pointer must be _dereferenceable_ (within the bounds of a single allocated object)."
msgstr "指针必须是 _dereferenceable_(在单个已分配对象的边界内)。"
#: src/unsafe-rust/dereferencing.md
@@ -11502,11 +10936,11 @@ msgstr "不得并发访问相同位置。"
#: src/unsafe-rust/dereferencing.md
msgid ""
-"If the pointer was obtained by casting a reference, the underlying object "
-"must be live and no reference may be used to access the memory."
+"If the pointer was obtained by casting a reference, the underlying object must be live "
+"and no reference may be used to access the memory."
msgstr ""
-"如果通过转换引用类型来获取指针,则底层对象必须处于活跃状态, 而且不得使用任何"
-"引用来访问内存。"
+"如果通过转换引用类型来获取指针,则底层对象必须处于活跃状态, 而且不得使用任何引用来访问内"
+"存。"
#: src/unsafe-rust/dereferencing.md
msgid "In most cases the pointer must also be properly aligned."
@@ -11515,13 +10949,12 @@ msgstr "在大多数情况下,指针还必须正确对齐。"
#: src/unsafe-rust/dereferencing.md
#, fuzzy
msgid ""
-"The \"NOT SAFE\" section gives an example of a common kind of UB bug: `*r1` "
-"has the `'static` lifetime, so `r3` has type `&'static String`, and thus "
-"outlives `s`. Creating a reference from a pointer requires _great care_."
+"The \"NOT SAFE\" section gives an example of a common kind of UB bug: `*r1` has the "
+"`'static` lifetime, so `r3` has type `&'static String`, and thus outlives `s`. Creating "
+"a reference from a pointer requires _great care_."
msgstr ""
-"“不安全”部分给出了一个常见 UB bug 的示例:`*r1` 的生命周期为 `'static`,因此 "
-"`r3` 为 `&'static String` 类型,存在时间比 `s` 更长。从指针创建引用需要 _特别"
-"注意_。"
+"“不安全”部分给出了一个常见 UB bug 的示例:`*r1` 的生命周期为 `'static`,因此 `r3` 为 "
+"`&'static String` 类型,存在时间比 `s` 更长。从指针创建引用需要 _特别注意_。"
#: src/unsafe-rust/mutable-static.md
msgid "It is safe to read an immutable static variable:"
@@ -11538,8 +10971,8 @@ msgstr "\"HELLO_WORLD: {HELLO_WORLD}\""
#: src/unsafe-rust/mutable-static.md
msgid ""
-"However, since data races can occur, it is unsafe to read and write mutable "
-"static variables:"
+"However, since data races can occur, it is unsafe to read and write mutable static "
+"variables:"
msgstr "但是,读取和写入可变的静态变量是不安全的,因为这可能会 造成数据争用:"
#: src/unsafe-rust/mutable-static.md
@@ -11548,23 +10981,21 @@ msgstr "\"COUNTER: {COUNTER}\""
#: src/unsafe-rust/mutable-static.md
msgid ""
-"The program here is safe because it is single-threaded. However, the Rust "
-"compiler is conservative and will assume the worst. Try removing the "
-"`unsafe` and see how the compiler explains that it is undefined behavior to "
-"mutate a static from multiple threads."
+"The program here is safe because it is single-threaded. However, the Rust compiler is "
+"conservative and will assume the worst. Try removing the `unsafe` and see how the "
+"compiler explains that it is undefined behavior to mutate a static from multiple threads."
msgstr ""
-"此处的程序是安全的,因为它是单线程的。不过,Rust 编译器比较保守,会做出最坏的"
-"假设。请尝试移除 `unsafe`,看看编译器如何解释从多个线程中修改静态变量是一种未"
-"定义的行为。"
+"此处的程序是安全的,因为它是单线程的。不过,Rust 编译器比较保守,会做出最坏的假设。请尝试"
+"移除 `unsafe`,看看编译器如何解释从多个线程中修改静态变量是一种未定义的行为。"
#: src/unsafe-rust/mutable-static.md
msgid ""
-"Using a mutable static is generally a bad idea, but there are some cases "
-"where it might make sense in low-level `no_std` code, such as implementing a "
-"heap allocator or working with some C APIs."
+"Using a mutable static is generally a bad idea, but there are some cases where it might "
+"make sense in low-level `no_std` code, such as implementing a heap allocator or working "
+"with some C APIs."
msgstr ""
-"通常,我们不建议使用可变的静态变量,但在某些情况下,在低层级 `no_std` 代码中"
-"可能需要这样做, 例如实现堆分配器或使用某些 C API。"
+"通常,我们不建议使用可变的静态变量,但在某些情况下,在低层级 `no_std` 代码中可能需要这样"
+"做, 例如实现堆分配器或使用某些 C API。"
#: src/unsafe-rust/unions.md
msgid "Unions are like enums, but you need to track the active field yourself:"
@@ -11580,27 +11011,26 @@ msgstr "\"bool: {}\""
#: src/unsafe-rust/unions.md
#, fuzzy
-msgid "// Undefined behavior!\n"
+msgid "// Undefined behavior!"
msgstr "Rust 没有运行时未定义行为:"
#: src/unsafe-rust/unions.md
msgid ""
-"Unions are very rarely needed in Rust as you can usually use an enum. They "
-"are occasionally needed for interacting with C library APIs."
+"Unions are very rarely needed in Rust as you can usually use an enum. They are "
+"occasionally needed for interacting with C library APIs."
msgstr ""
-"在 Rust 中很少需要用到联合体,因为您通常可以使用枚举。联合体只是偶尔用于 与 "
-"C 库 API 进行交互。"
+"在 Rust 中很少需要用到联合体,因为您通常可以使用枚举。联合体只是偶尔用于 与 C 库 API 进行"
+"交互。"
#: src/unsafe-rust/unions.md
msgid ""
-"If you just want to reinterpret bytes as a different type, you probably want "
-"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn."
-"transmute.html) or a safe wrapper such as the [`zerocopy`](https://crates.io/"
-"crates/zerocopy) crate."
+"If you just want to reinterpret bytes as a different type, you probably want [`std::mem::"
+"transmute`](https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) or a safe "
+"wrapper such as the [`zerocopy`](https://crates.io/crates/zerocopy) crate."
msgstr ""
-"如果您只是想将字节重新解释为其他类型,则可能需要使用 [`std::mem::transmute`]"
-"(https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) 或 安全的封装容"
-"器,例如 [`zerocopy`](https://crates.io/crates/zerocopy) crate。"
+"如果您只是想将字节重新解释为其他类型,则可能需要使用 [`std::mem::transmute`](https://doc."
+"rust-lang.org/stable/std/mem/fn.transmute.html) 或 安全的封装容器,例如 [`zerocopy`]"
+"(https://crates.io/crates/zerocopy) crate。"
#: src/unsafe-rust/unsafe-functions.md
msgid "Calling Unsafe Functions"
@@ -11608,19 +11038,18 @@ msgstr "调用 Unsafe 函数"
#: src/unsafe-rust/unsafe-functions.md
msgid ""
-"A function or method can be marked `unsafe` if it has extra preconditions "
-"you must uphold to avoid undefined behaviour:"
+"A function or method can be marked `unsafe` if it has extra preconditions you must "
+"uphold to avoid undefined behaviour:"
msgstr ""
-"如果函数或方法具有额外的前提条件,您必须遵守这些前提条件来避免未定义的行为, "
-"则可以将该函数或方法标记为 `unsafe`:"
+"如果函数或方法具有额外的前提条件,您必须遵守这些前提条件来避免未定义的行为, 则可以将该函"
+"数或方法标记为 `unsafe`:"
#: src/unsafe-rust/unsafe-functions.md src/unsafe-rust/exercise.md
#: src/unsafe-rust/solution.md src/android/interoperability/with-c.md
#: src/android/interoperability/with-c/rust.md
-#: src/android/interoperability/cpp/cpp-bridge.md
-#: src/exercises/chromium/build-rules.md src/bare-metal/aps/inline-assembly.md
-#: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md
-#: src/exercises/bare-metal/rtc.md
+#: src/android/interoperability/cpp/cpp-bridge.md src/exercises/chromium/build-rules.md
+#: src/bare-metal/aps/inline-assembly.md src/bare-metal/aps/better-uart/using.md
+#: src/bare-metal/aps/logging/using.md src/exercises/bare-metal/rtc.md
#: src/exercises/bare-metal/solutions-afternoon.md
msgid "\"C\""
msgstr "\"C\""
@@ -11630,13 +11059,16 @@ msgid "\"🗻∈🌏\""
msgstr "\"🗻∈🌏\""
#: src/unsafe-rust/unsafe-functions.md
-msgid ""
-"// Safe because the indices are in the correct order, within the bounds of\n"
-" // the string slice, and lie on UTF-8 sequence boundaries.\n"
+#, fuzzy
+msgid "// Safe because the indices are in the correct order, within the bounds of"
msgstr ""
"// Safe because the indices are in the correct order, within the bounds of\n"
" // the string slice, and lie on UTF-8 sequence boundaries.\n"
+#: src/unsafe-rust/unsafe-functions.md
+msgid "// the string slice, and lie on UTF-8 sequence boundaries."
+msgstr ""
+
#: src/unsafe-rust/unsafe-functions.md
msgid "\"emoji: {}\""
msgstr "\"emoji: {}\""
@@ -11647,7 +11079,7 @@ msgstr "\"char count: {}\""
#: src/unsafe-rust/unsafe-functions.md
#, fuzzy
-msgid "// Undefined behavior if abs misbehaves.\n"
+msgid "// Undefined behavior if abs misbehaves."
msgstr "Rust 没有运行时未定义行为:"
#: src/unsafe-rust/unsafe-functions.md
@@ -11655,17 +11087,20 @@ msgid "\"Absolute value of -3 according to C: {}\""
msgstr "\"Absolute value of -3 according to C: {}\""
#: src/unsafe-rust/unsafe-functions.md
-#, fuzzy
-msgid ""
-"// Not upholding the UTF-8 encoding requirement breaks memory safety!\n"
-" // println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });\n"
-" // println!(\"char count: {}\", count_chars(unsafe {\n"
-" // emojis.get_unchecked(0..3) }));\n"
+msgid "// Not upholding the UTF-8 encoding requirement breaks memory safety!"
+msgstr ""
+
+#: src/unsafe-rust/unsafe-functions.md
+msgid "// println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });"
+msgstr ""
+
+#: src/unsafe-rust/unsafe-functions.md
+msgid "// println!(\"char count: {}\", count_chars(unsafe {"
+msgstr ""
+
+#: src/unsafe-rust/unsafe-functions.md
+msgid "// emojis.get_unchecked(0..3) }));"
msgstr ""
-"// Not upholding the UTF-8 encoding requirement breaks memory safety!\n"
-" // println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });\n"
-" // println!(\"char count: {}\", count_chars(unsafe { emojis."
-"get_unchecked(0..3) }));\n"
#: src/unsafe-rust/unsafe-functions.md
msgid "Writing Unsafe Functions"
@@ -11673,28 +11108,28 @@ msgstr "编写 Unsafe 函数"
#: src/unsafe-rust/unsafe-functions.md
msgid ""
-"You can mark your own functions as `unsafe` if they require particular "
-"conditions to avoid undefined behaviour."
+"You can mark your own functions as `unsafe` if they require particular conditions to "
+"avoid undefined behaviour."
msgstr ""
-"如果您自己编写的函数需要满足特定条件以避免未定义的行为, 您可以将这些函数标记"
-"为 `unsafe`。"
+"如果您自己编写的函数需要满足特定条件以避免未定义的行为, 您可以将这些函数标记为 "
+"`unsafe`。"
#: src/unsafe-rust/unsafe-functions.md
-msgid ""
-"/// Swaps the values pointed to by the given pointers.\n"
-"///\n"
-"/// # Safety\n"
-"///\n"
-"/// The pointers must be valid and properly aligned.\n"
+msgid "/// Swaps the values pointed to by the given pointers."
msgstr ""
-"/// Swaps the values pointed to by the given pointers.\n"
-"///\n"
-"/// # Safety\n"
-"///\n"
-"/// The pointers must be valid and properly aligned.\n"
+
+#: src/unsafe-rust/unsafe-functions.md src/unsafe-rust/unsafe-traits.md
+msgid "/// # Safety"
+msgstr ""
+
+#: src/unsafe-rust/unsafe-functions.md
+#, fuzzy
+msgid "/// The pointers must be valid and properly aligned."
+msgstr "在大多数情况下,指针还必须正确对齐。"
#: src/unsafe-rust/unsafe-functions.md
-msgid "// Safe because ...\n"
+#, fuzzy
+msgid "// Safe because ..."
msgstr "// Safe because ...\n"
#: src/unsafe-rust/unsafe-functions.md
@@ -11704,42 +11139,39 @@ msgstr "\"a = {}, b = {}\""
#: src/unsafe-rust/unsafe-functions.md
#, fuzzy
msgid ""
-"`get_unchecked`, like most `_unchecked` functions, is unsafe, because it can "
-"create UB if the range is incorrect. `abs` is incorrect for a different "
-"reason: it is an external function (FFI). Calling external functions is "
-"usually only a problem when those functions do things with pointers which "
-"might violate Rust's memory model, but in general any C function might have "
-"undefined behaviour under any arbitrary circumstances."
+"`get_unchecked`, like most `_unchecked` functions, is unsafe, because it can create UB "
+"if the range is incorrect. `abs` is incorrect for a different reason: it is an external "
+"function (FFI). Calling external functions is usually only a problem when those "
+"functions do things with pointers which might violate Rust's memory model, but in "
+"general any C function might have undefined behaviour under any arbitrary circumstances."
msgstr ""
-"这个问题通常仅存在于使用指针执行违反 Rust 内存模型的操作的外部函数中。 但一般"
-"而言,任何 C 函数都有可能在任意情况下出现未定义行为。"
+"这个问题通常仅存在于使用指针执行违反 Rust 内存模型的操作的外部函数中。 但一般而言,任何 "
+"C 函数都有可能在任意情况下出现未定义行为。"
#: src/unsafe-rust/unsafe-functions.md
msgid ""
-"The `\"C\"` in this example is the ABI; [other ABIs are available too]"
-"(https://doc.rust-lang.org/reference/items/external-blocks.html)."
+"The `\"C\"` in this example is the ABI; [other ABIs are available too](https://doc.rust-"
+"lang.org/reference/items/external-blocks.html)."
msgstr ""
-"本例中的“C”是 ABI;[也可以使用其他 ABI](https://doc.rust-lang.org/reference/"
-"items/external-blocks.html)。"
+"本例中的“C”是 ABI;[也可以使用其他 ABI](https://doc.rust-lang.org/reference/items/"
+"external-blocks.html)。"
#: src/unsafe-rust/unsafe-functions.md
#, fuzzy
msgid ""
-"We wouldn't actually use pointers for a `swap` function - it can be done "
-"safely with references."
+"We wouldn't actually use pointers for a `swap` function - it can be done safely with "
+"references."
msgstr "实际上,我们不会这样使用指针,因为使用引用可以安全地达到相同的目的。"
#: src/unsafe-rust/unsafe-functions.md
#, fuzzy
msgid ""
-"Note that unsafe code is allowed within an unsafe function without an "
-"`unsafe` block. We can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. "
-"Try adding it and see what happens. This will likely change in a future Rust "
-"edition."
+"Note that unsafe code is allowed within an unsafe function without an `unsafe` block. We "
+"can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. Try adding it and see what "
+"happens. This will likely change in a future Rust edition."
msgstr ""
-"请注意,在不安全函数中,可以在没有 `unsafe` 代码块的情况下使用不安全代码。我"
-"们可以 使用 `#[deny(unsafe_op_in_unsafe_fn)]` 来禁止此行为。请尝试添加该命"
-"令,看看会出现什么情况。"
+"请注意,在不安全函数中,可以在没有 `unsafe` 代码块的情况下使用不安全代码。我们可以 使用 "
+"`#[deny(unsafe_op_in_unsafe_fn)]` 来禁止此行为。请尝试添加该命令,看看会出现什么情况。"
#: src/unsafe-rust/unsafe-traits.md
msgid "Implementing Unsafe Traits"
@@ -11747,46 +11179,48 @@ msgstr "实现 Unsafe Trait"
#: src/unsafe-rust/unsafe-traits.md
msgid ""
-"Like with functions, you can mark a trait as `unsafe` if the implementation "
-"must guarantee particular conditions to avoid undefined behaviour."
+"Like with functions, you can mark a trait as `unsafe` if the implementation must "
+"guarantee particular conditions to avoid undefined behaviour."
msgstr ""
-"与函数一样,如果您在实现某个 trait 时必须保证特定条件来避免未定义的行为, 您"
-"也可以将该 trait 标记为 `unsafe`。"
+"与函数一样,如果您在实现某个 trait 时必须保证特定条件来避免未定义的行为, 您也可以将该 "
+"trait 标记为 `unsafe`。"
#: src/unsafe-rust/unsafe-traits.md
msgid ""
-"For example, the `zerocopy` crate has an unsafe trait that looks [something "
-"like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):"
+"For example, the `zerocopy` crate has an unsafe trait that looks [something like this]"
+"(https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):"
msgstr ""
-"例如,`zerocopy` crate 包含一个不安全的 trait, [大致内容是这样的](https://"
-"docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):"
+"例如,`zerocopy` crate 包含一个不安全的 trait, [大致内容是这样的](https://docs.rs/"
+"zerocopy/latest/zerocopy/trait.AsBytes.html):"
#: src/unsafe-rust/unsafe-traits.md
-msgid ""
-"/// ...\n"
-"/// # Safety\n"
-"/// The type must have a defined representation and no padding.\n"
+#, fuzzy
+msgid "/// ..."
+msgstr "// ...\n"
+
+#: src/unsafe-rust/unsafe-traits.md
+#, fuzzy
+msgid "/// The type must have a defined representation and no padding."
msgstr ""
"/// ...\n"
"/// # Safety\n"
"/// The type must have a defined representation and no padding.\n"
#: src/unsafe-rust/unsafe-traits.md
-msgid "// Safe because u32 has a defined representation and no padding.\n"
+#, fuzzy
+msgid "// Safe because u32 has a defined representation and no padding."
msgstr "// Safe because u32 has a defined representation and no padding.\n"
#: src/unsafe-rust/unsafe-traits.md
msgid ""
-"There should be a `# Safety` section on the Rustdoc for the trait explaining "
-"the requirements for the trait to be safely implemented."
+"There should be a `# Safety` section on the Rustdoc for the trait explaining the "
+"requirements for the trait to be safely implemented."
msgstr ""
-"在 Rustdoc 中有关 trait 的章节下,有一个标题为 `# 安全` 的部分介绍了 安全实"
-"现 trait 的要求。"
+"在 Rustdoc 中有关 trait 的章节下,有一个标题为 `# 安全` 的部分介绍了 安全实现 trait 的要"
+"求。"
#: src/unsafe-rust/unsafe-traits.md
-msgid ""
-"The actual safety section for `AsBytes` is rather longer and more "
-"complicated."
+msgid "The actual safety section for `AsBytes` is rather longer and more complicated."
msgstr "实际上,与 `AsBytes` 相关的安全说明远比这里展示的更详尽、更复杂。"
#: src/unsafe-rust/unsafe-traits.md
@@ -11799,12 +11233,12 @@ msgstr "安全 FFI 封装容器"
#: src/unsafe-rust/exercise.md
msgid ""
-"Rust has great support for calling functions through a _foreign function "
-"interface_ (FFI). We will use this to build a safe wrapper for the `libc` "
-"functions you would use from C to read the names of files in a directory."
+"Rust has great support for calling functions through a _foreign function interface_ "
+"(FFI). We will use this to build a safe wrapper for the `libc` functions you would use "
+"from C to read the names of files in a directory."
msgstr ""
-"Rust 为通过 _外部函数接口_ (FFI) 调用函数提供了出色的支持。我们将使用它为 "
-"`libc` 函数构建一个安全封装容器,用于从 C 代码中读取目录中的文件名称。"
+"Rust 为通过 _外部函数接口_ (FFI) 调用函数提供了出色的支持。我们将使用它为 `libc` 函数构建"
+"一个安全封装容器,用于从 C 代码中读取目录中的文件名称。"
#: src/unsafe-rust/exercise.md
msgid "You will want to consult the manual pages:"
@@ -11824,12 +11258,11 @@ msgstr "[`closedir(3)`](https://man7.org/linux/man-pages/man3/closedir.3.html)"
#: src/unsafe-rust/exercise.md
msgid ""
-"You will also want to browse the [`std::ffi`](https://doc.rust-lang.org/std/"
-"ffi/) module. There you find a number of string types which you need for the "
-"exercise:"
+"You will also want to browse the [`std::ffi`](https://doc.rust-lang.org/std/ffi/) "
+"module. There you find a number of string types which you need for the exercise:"
msgstr ""
-"您还需要浏览[“std::ffi”](https://doc.rust-lang.org/std/ffi/)模块。在下方,您"
-"会发现完成这个练习所需的多种字符串类型:"
+"您还需要浏览[“std::ffi”](https://doc.rust-lang.org/std/ffi/)模块。在下方,您会发现完成这"
+"个练习所需的多种字符串类型:"
#: src/unsafe-rust/exercise.md
msgid "Encoding"
@@ -11841,11 +11274,11 @@ msgstr "使用"
#: src/unsafe-rust/exercise.md
msgid ""
-"[`str`](https://doc.rust-lang.org/std/primitive.str.html) and [`String`]"
-"(https://doc.rust-lang.org/std/string/struct.String.html)"
+"[`str`](https://doc.rust-lang.org/std/primitive.str.html) and [`String`](https://doc."
+"rust-lang.org/std/string/struct.String.html)"
msgstr ""
-"[“str”](https://doc.rust-lang.org/std/primitive.str.html)和[“String”]"
-"(https://doc.rust-lang.org/std/string/struct.String.html)"
+"[“str”](https://doc.rust-lang.org/std/primitive.str.html)和[“String”](https://doc.rust-"
+"lang.org/std/string/struct.String.html)"
#: src/unsafe-rust/exercise.md
msgid "UTF-8"
@@ -11857,11 +11290,11 @@ msgstr "用 Rust 进行文本处理"
#: src/unsafe-rust/exercise.md
msgid ""
-"[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) and [`CString`]"
-"(https://doc.rust-lang.org/std/ffi/struct.CString.html)"
+"[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) and [`CString`](https://doc."
+"rust-lang.org/std/ffi/struct.CString.html)"
msgstr ""
-"[“CStr”](https://doc.rust-lang.org/std/ffi/struct.CStr.html)和[“CString”]"
-"(https://doc.rust-lang.org/std/ffi/struct.CString.html)"
+"[“CStr”](https://doc.rust-lang.org/std/ffi/struct.CStr.html)和[“CString”](https://doc."
+"rust-lang.org/std/ffi/struct.CString.html)"
#: src/unsafe-rust/exercise.md
msgid "NUL-terminated"
@@ -11873,11 +11306,11 @@ msgstr "与 C 函数通信"
#: src/unsafe-rust/exercise.md
msgid ""
-"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and "
-"[`OsString`](https://doc.rust-lang.org/std/ffi/struct.OsString.html)"
+"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and [`OsString`](https://"
+"doc.rust-lang.org/std/ffi/struct.OsString.html)"
msgstr ""
-"[“OsStr”](https://doc.rust-lang.org/std/ffi/struct.OsStr.html)和[“OsString”]"
-"(https://doc.rust-lang.org/std/ffi/struct.OsString.html)"
+"[“OsStr”](https://doc.rust-lang.org/std/ffi/struct.OsStr.html)和[“OsString”](https://doc."
+"rust-lang.org/std/ffi/struct.OsString.html)"
#: src/unsafe-rust/exercise.md
msgid "OS-specific"
@@ -11892,9 +11325,7 @@ msgid "You will convert between all these types:"
msgstr "您将在以下所有类型之间进行转换:"
#: src/unsafe-rust/exercise.md
-msgid ""
-"`&str` to `CString`: you need to allocate space for a trailing `\\0` "
-"character,"
+msgid "`&str` to `CString`: you need to allocate space for a trailing `\\0` character,"
msgstr "将 `&str` 转换为 `CString`:您需要为尾随 `\\0` 字符分配空格,"
#: src/unsafe-rust/exercise.md
@@ -11903,50 +11334,44 @@ msgstr "将 `CString` 转换为 `\\*const i8` :您需要一个指针来调用
#: src/unsafe-rust/exercise.md
msgid ""
-"`*const i8` to `&CStr`: you need something which can find the trailing `\\0` "
-"character,"
-msgstr ""
-"将 `\\*const i8` 转换为 `&CStr` :您需要一些能够找到尾随 `\\0` 字符的内容,"
+"`*const i8` to `&CStr`: you need something which can find the trailing `\\0` character,"
+msgstr "将 `\\*const i8` 转换为 `&CStr` :您需要一些能够找到尾随 `\\0` 字符的内容,"
#: src/unsafe-rust/exercise.md
#, fuzzy
msgid ""
-"`&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some "
-"unknown data\","
-msgstr ""
-"将 `&CStr` 转换为 `&\\[u8\\]` :一个字节 Slice 是“一些未知数据”的通用接口,"
+"`&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some unknown "
+"data\","
+msgstr "将 `&CStr` 转换为 `&\\[u8\\]` :一个字节 Slice 是“一些未知数据”的通用接口,"
#: src/unsafe-rust/exercise.md
msgid ""
-"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use [`OsStrExt`]"
-"(https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it,"
+"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use [`OsStrExt`](https://doc."
+"rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it,"
msgstr ""
-"将 `&\\[u8\\]` 转换为 `&OsStr` :`&OsStr` 是向 `OsString` 迈进的一步,请使用"
-"[`OsStrExt`](https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html)来"
-"创建它,"
+"将 `&\\[u8\\]` 转换为 `&OsStr` :`&OsStr` 是向 `OsString` 迈进的一步,请使用[`OsStrExt`]"
+"(https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html)来创建它,"
#: src/unsafe-rust/exercise.md
msgid ""
-"`&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able to "
-"return it and call `readdir` again."
+"`&OsStr` to `OsString`: you need to clone the data in `&OsStr` to be able to return it "
+"and call `readdir` again."
msgstr ""
-"将“&OsStr”转换为“OsString”:您需要克隆“&OsStr”中的数据,以便能够返回它并再次"
-"调用“readdir”。"
+"将“&OsStr”转换为“OsString”:您需要克隆“&OsStr”中的数据,以便能够返回它并再次调"
+"用“readdir”。"
#: src/unsafe-rust/exercise.md
msgid ""
-"The [Nomicon](https://doc.rust-lang.org/nomicon/ffi.html) also has a very "
-"useful chapter about FFI."
+"The [Nomicon](https://doc.rust-lang.org/nomicon/ffi.html) also has a very useful chapter "
+"about FFI."
msgstr ""
-"[秘典](https://doc.rust-lang.org/nomicon/ffi.html) 中也有一个关于 FFI 的非常"
-"实用的章节。"
+"[秘典](https://doc.rust-lang.org/nomicon/ffi.html) 中也有一个关于 FFI 的非常实用的章节。"
#: src/unsafe-rust/exercise.md
msgid ""
-"Copy the code below to
and fill in the missing "
-"functions and methods:"
-msgstr ""
-"将以下代码复制到 ,并填入缺少的函数和方法:"
+"Copy the code below to and fill in the missing functions "
+"and methods:"
+msgstr "将以下代码复制到 ,并填入缺少的函数和方法:"
#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md
msgid "\"macos\""
@@ -11979,37 +11404,36 @@ msgid ""
"// See https://github.com/rust-lang/libc/issues/414 and the section on\n"
" // _DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2).\n"
" //\n"
-" // \"Platforms that existed before these updates were available\" "
-"refers\n"
-" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and "
-"PowerPC.\n"
+" // \"Platforms that existed before these updates were available\" refers\n"
+" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and PowerPC.\n"
msgstr ""
"// See https://github.com/rust-lang/libc/issues/414 and the section on\n"
" // _DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2).\n"
" //\n"
-" // \"Platforms that existed before these updates were available\" "
-"refers\n"
-" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and "
-"PowerPC.\n"
+" // \"Platforms that existed before these updates were available\" refers\n"
+" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and PowerPC.\n"
#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md
msgid "\"readdir$INODE64\""
msgstr "\"readdir$INODE64\""
-#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md
+#: src/unsafe-rust/exercise.md
+#, fuzzy
msgid ""
"// Call opendir and return a Ok value if that worked,\n"
-" // otherwise return Err with a message.\n"
+" // otherwise return Err with a message."
msgstr ""
"// Call opendir and return a Ok value if that worked,\n"
" // otherwise return Err with a message.\n"
#: src/unsafe-rust/exercise.md
-msgid "// Keep calling readdir until we get a NULL pointer back.\n"
+#, fuzzy
+msgid "// Keep calling readdir until we get a NULL pointer back."
msgstr "// Keep calling readdir until we get a NULL pointer back.\n"
-#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md
-msgid "// Call closedir as needed.\n"
+#: src/unsafe-rust/exercise.md
+#, fuzzy
+msgid "// Call closedir as needed."
msgstr "// Call closedir as needed.\n"
#: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md
@@ -12021,6 +11445,14 @@ msgstr "\".\""
msgid "\"files: {:#?}\""
msgstr "\"files: {:#?}\""
+#: src/unsafe-rust/solution.md
+msgid ""
+"// Call opendir and return a Ok value if that worked,\n"
+" // otherwise return Err with a message.\n"
+msgstr ""
+"// Call opendir and return a Ok value if that worked,\n"
+" // otherwise return Err with a message.\n"
+
#: src/unsafe-rust/solution.md
msgid "\"Invalid path: {err}\""
msgstr "\"Invalid path: {err}\""
@@ -12053,6 +11485,10 @@ msgstr ""
"// SAFETY: dirent is not NULL and dirent.d_name is NUL\n"
" // terminated.\n"
+#: src/unsafe-rust/solution.md
+msgid "// Call closedir as needed.\n"
+msgstr "// Call closedir as needed.\n"
+
#: src/unsafe-rust/solution.md
msgid "// SAFETY: self.dir is not NULL.\n"
msgstr "// SAFETY: self.dir is not NULL.\n"
@@ -12105,95 +11541,89 @@ msgstr "欢迎来到Android 中的Rust"
#: src/android.md
#, fuzzy
msgid ""
-"Rust is supported for system software on Android. This means that you can "
-"write new services, libraries, drivers or even firmware in Rust (or improve "
-"existing code as needed)."
+"Rust is supported for system software on Android. This means that you can write new "
+"services, libraries, drivers or even firmware in Rust (or improve existing code as "
+"needed)."
msgstr ""
-"Rust 支持Android 的原生平台开发。这意味着您可以在Rust 中编写新的操作系统服"
-"务,以及扩展现有服务。"
+"Rust 支持Android 的原生平台开发。这意味着您可以在Rust 中编写新的操作系统服务,以及扩展现"
+"有服务。"
#: src/android.md
msgid ""
-"We will attempt to call Rust from one of your own projects today. So try to "
-"find a little corner of your code base where we can move some lines of code "
-"to Rust. The fewer dependencies and \"exotic\" types the better. Something "
-"that parses some raw bytes would be ideal."
+"We will attempt to call Rust from one of your own projects today. So try to find a "
+"little corner of your code base where we can move some lines of code to Rust. The fewer "
+"dependencies and \"exotic\" types the better. Something that parses some raw bytes would "
+"be ideal."
msgstr ""
-"今天我们会尝试在你自己的项目中调用Rust。 所以试着在你的代码中找一小段来改成"
-"Rust。 代码中越少依赖(dependencies),越少“独特”的类型,越好。比如 一段解析原"
-"始字符的代码就很理想。"
+"今天我们会尝试在你自己的项目中调用Rust。 所以试着在你的代码中找一小段来改成Rust。 代码中"
+"越少依赖(dependencies),越少“独特”的类型,越好。比如 一段解析原始字符的代码就很理想。"
#: src/android.md
msgid ""
-"The speaker may mention any of the following given the increased use of Rust "
-"in Android:"
+"The speaker may mention any of the following given the increased use of Rust in Android:"
msgstr "鉴于 Android 中越来越多地使用 Rust,演讲者可能会提到以下任何一项:"
#: src/android.md
msgid ""
-"Service example: [DNS over HTTP](https://security.googleblog.com/2022/07/dns-"
-"over-http3-in-android.html)"
+"Service example: [DNS over HTTP](https://security.googleblog.com/2022/07/dns-over-http3-"
+"in-android.html)"
msgstr ""
-"服务示例:[DNS-over-HTTP](https://security.googleblog.com/2022/07/dns-over-"
-"http3-in-android.html)"
+"服务示例:[DNS-over-HTTP](https://security.googleblog.com/2022/07/dns-over-http3-in-"
+"android.html)"
#: src/android.md
msgid ""
-"Libraries: [Rutabaga Virtual Graphics Interface](https://crosvm.dev/book/"
-"appendix/rutabaga_gfx.html)"
-msgstr ""
-"库:[Rutabaga 虚拟图形接口](https://crosvm.dev/book/appendix/rutabaga_gfx."
-"html)"
+"Libraries: [Rutabaga Virtual Graphics Interface](https://crosvm.dev/book/appendix/"
+"rutabaga_gfx.html)"
+msgstr "库:[Rutabaga 虚拟图形接口](https://crosvm.dev/book/appendix/rutabaga_gfx.html)"
#: src/android.md
msgid ""
-"Kernel Drivers: [Binder](https://lore.kernel.org/rust-for-linux/20231101-"
-"rust-binder-v1-0-08ba9197f637@google.com/)"
+"Kernel Drivers: [Binder](https://lore.kernel.org/rust-for-linux/20231101-rust-binder-"
+"v1-0-08ba9197f637@google.com/)"
msgstr ""
-"内核驱动程序:[Binder](https://lore.kernel.org/rust-for-linux/20231101-rust-"
-"binder-v1-0-08ba9197f637@google.com/)"
+"内核驱动程序:[Binder](https://lore.kernel.org/rust-for-linux/20231101-rust-binder-"
+"v1-0-08ba9197f637@google.com/)"
#: src/android.md
msgid ""
-"Firmware: [pKVM firmware](https://security.googleblog.com/2023/10/bare-metal-"
-"rust-in-android.html)"
-msgstr ""
-"固件:[pKVM 固件](https://security.googleblog.com/2023/10/bare-metal-rust-in-"
+"Firmware: [pKVM firmware](https://security.googleblog.com/2023/10/bare-metal-rust-in-"
"android.html)"
+msgstr ""
+"固件:[pKVM 固件](https://security.googleblog.com/2023/10/bare-metal-rust-in-android."
+"html)"
#: src/android/setup.md
#, fuzzy
msgid ""
-"We will be using a Cuttlefish Android Virtual Device to test our code. Make "
-"sure you have access to one or create a new one with:"
+"We will be using a Cuttlefish Android Virtual Device to test our code. Make sure you "
+"have access to one or create a new one with:"
msgstr ""
-"我们将会使用Android 虚拟设备(Android Virtual Device)来测试我们的代码。 确保"
-"你有权限访问一个,或者用以下命令创建一个新的:"
+"我们将会使用Android 虚拟设备(Android Virtual Device)来测试我们的代码。 确保你有权限访问"
+"一个,或者用以下命令创建一个新的:"
#: src/android/setup.md
msgid ""
-"Please see the [Android Developer Codelab](https://source.android.com/docs/"
-"setup/start) for details."
+"Please see the [Android Developer Codelab](https://source.android.com/docs/setup/start) "
+"for details."
msgstr ""
-"更多细节请参考 [Android Developer Codelab](https://source.android.com/docs/"
-"setup/start)."
+"更多细节请参考 [Android Developer Codelab](https://source.android.com/docs/setup/start)."
#: src/android/setup.md
#, fuzzy
msgid ""
-"Cuttlefish is a reference Android device designed to work on generic Linux "
-"desktops. MacOS support is also planned."
+"Cuttlefish is a reference Android device designed to work on generic Linux desktops. "
+"MacOS support is also planned."
msgstr ""
-"Cuttlefish 是一款 Android 引用设备,专用于通用 Linux 桌面设备。此外,我们还计"
-"划支持 MacOS。"
+"Cuttlefish 是一款 Android 引用设备,专用于通用 Linux 桌面设备。此外,我们还计划支持 "
+"MacOS。"
#: src/android/setup.md
msgid ""
-"The Cuttlefish system image maintains high fidelity to real devices, and is "
-"the ideal emulator to run many Rust use cases."
+"The Cuttlefish system image maintains high fidelity to real devices, and is the ideal "
+"emulator to run many Rust use cases."
msgstr ""
-"Cuttlefish 系统映像会保持媲美真实设备的高保真度,是运行许多 Rust 用例的理想模"
-"拟器。"
+"Cuttlefish 系统映像会保持媲美真实设备的高保真度,是运行许多 Rust 用例的理想模拟器。"
#: src/android/build-rules.md
msgid "The Android build system (Soong) supports Rust via a number of modules:"
@@ -12205,19 +11635,17 @@ msgid "Module Type"
msgstr ""
"\\| 模块类型 | 描"
"述 "
-"| \\|—————————|——————————————————————————————————————————————————| \\| "
-"`rust_binary` | Rust 二进制文"
-"件。 "
-"| \\| `rust_library` | 生成Rust 库,并且提供 `rlib` 和 `dylib` 变"
-"体。 | \\| `rust_ffi` | 生成可由 cc 模块使用的 "
-"Rust C 库,并提供静态和共享变体。 | \\| `rust_proc_macro` | 生成 proc-"
-"macro Rust 库。 这些宏与编译器插件类似。 | \\| "
-"`rust_test` | 生成使用标准 Rust 自动化测试框架的 Rust 测试二进制文"
-"件。 | \\| `rust_fuzz` | 生成使用 "
-"libfuzzer 的 Rust 模糊测试二进制文"
-"件。 | \\| `rust_protobuf` | 生成源"
-"代码,并生成为特定 protobuf 提供接口的 Rust 库。| \\| `rust_bindgen` | 生"
-"成源代码,并生成包含与 C 库的 Rust 绑定的 Rust 库。|"
+"| \\|—————————|——————————————————————————————————————————————————| \\| `rust_binary` "
+"| Rust 二进制文"
+"件。 | \\| "
+"`rust_library` | 生成Rust 库,并且提供 `rlib` 和 `dylib` 变体。 "
+"| \\| `rust_ffi` | 生成可由 cc 模块使用的 Rust C 库,并提供静态和共享变体。 | "
+"\\| `rust_proc_macro` | 生成 proc-macro Rust 库。 这些宏与编译器插件类"
+"似。 | \\| `rust_test` | 生成使用标准 Rust 自动化测试框架的 "
+"Rust 测试二进制文件。 | \\| `rust_fuzz` | 生成使用 "
+"libfuzzer 的 Rust 模糊测试二进制文件。 | \\| "
+"`rust_protobuf` | 生成源代码,并生成为特定 protobuf 提供接口的 Rust 库。| \\| "
+"`rust_bindgen` | 生成源代码,并生成包含与 C 库的 Rust 绑定的 Rust 库。|"
#: src/android/build-rules.md
msgid "Description"
@@ -12248,8 +11676,8 @@ msgstr "`rust_ffi `"
#: src/android/build-rules.md
msgid ""
-"Produces a Rust C library usable by `cc` modules, and provides both static "
-"and shared variants."
+"Produces a Rust C library usable by `cc` modules, and provides both static and shared "
+"variants."
msgstr "生成一个可由 `cc` 模块使用的 Rust C 库,并提供静态和共享两种变体。"
#: src/android/build-rules.md
@@ -12257,9 +11685,7 @@ msgid "`rust_proc_macro`"
msgstr "`rust_proc_macro`"
#: src/android/build-rules.md
-msgid ""
-"Produces a `proc-macro` Rust library. These are analogous to compiler "
-"plugins."
+msgid "Produces a `proc-macro` Rust library. These are analogous to compiler plugins."
msgstr "生成“proc-macro”Rust 库。这些宏与编译器插件类似。"
#: src/android/build-rules.md
@@ -12285,8 +11711,8 @@ msgstr "`rust_protobuf`"
#: src/android/build-rules.md
msgid ""
-"Generates source and produces a Rust library that provides an interface for "
-"a particular protobuf."
+"Generates source and produces a Rust library that provides an interface for a particular "
+"protobuf."
msgstr "生成源代码并生成为特定 protobuf 提供接口的 Rust 库。"
#: src/android/build-rules.md
@@ -12296,8 +11722,7 @@ msgstr "`rust_bindgen`"
#: src/android/build-rules.md
msgid ""
-"Generates source and produces a Rust library containing Rust bindings to C "
-"libraries."
+"Generates source and produces a Rust library containing Rust bindings to C libraries."
msgstr "生成源代码并生成包含 Rust 绑定到 C 库的 Rust 库。"
#: src/android/build-rules.md
@@ -12310,37 +11735,35 @@ msgstr "演讲者可能会提及其他内容:"
#: src/android/build-rules.md
msgid ""
-"Cargo is not optimized for multi-language repos, and also downloads packages "
-"from the internet."
+"Cargo is not optimized for multi-language repos, and also downloads packages from the "
+"internet."
msgstr "Cargo 未针对多语言代码库进行优化,并且从互联网下载软件包。"
#: src/android/build-rules.md
#, fuzzy
msgid ""
-"For compliance and performance, Android must have crates in-tree. It must "
-"also interop with C/C++/Java code. Soong fills that gap."
+"For compliance and performance, Android must have crates in-tree. It must also interop "
+"with C/C++/Java code. Soong fills that gap."
msgstr ""
-"为了确保合规性和性能,Android 必须具有树内 crate。它还必须与 C/C++/Java 代码"
-"进行互操作。Soong 填补了这一空白。"
+"为了确保合规性和性能,Android 必须具有树内 crate。它还必须与 C/C++/Java 代码进行互操作。"
+"Soong 填补了这一空白。"
#: src/android/build-rules.md
msgid ""
-"Soong has many similarities to Bazel, which is the open-source variant of "
-"Blaze (used in google3)."
-msgstr ""
-"Soong 与 Bazel 有许多相似之处,后者是 Blaze 的开源变体(在 google3 中使用)。"
+"Soong has many similarities to Bazel, which is the open-source variant of Blaze (used in "
+"google3)."
+msgstr "Soong 与 Bazel 有许多相似之处,后者是 Blaze 的开源变体(在 google3 中使用)。"
#: src/android/build-rules.md
msgid ""
-"There is a plan to transition [Android](https://source.android.com/docs/"
-"setup/build/bazel/introduction), [ChromeOS](https://chromium.googlesource."
-"com/chromiumos/bazel/), and [Fuchsia](https://source.android.com/docs/setup/"
-"build/bazel/introduction) to Bazel."
+"There is a plan to transition [Android](https://source.android.com/docs/setup/build/"
+"bazel/introduction), [ChromeOS](https://chromium.googlesource.com/chromiumos/bazel/), "
+"and [Fuchsia](https://source.android.com/docs/setup/build/bazel/introduction) to Bazel."
msgstr ""
"我们计划逐渐在 [Android](https://source.android.com/docs/setup/build/bazel/"
-"introduction),[ChromeOS](https://chromium.googlesource.com/chromiumos/"
-"bazel/) 和 [Fuchsia](https://source.android.com/docs/setup/build/bazel/"
-"introduction) 中采用 Bazel 进行开发。"
+"introduction),[ChromeOS](https://chromium.googlesource.com/chromiumos/bazel/) 和 "
+"[Fuchsia](https://source.android.com/docs/setup/build/bazel/introduction) 中采用 Bazel 进"
+"行开发。"
#: src/android/build-rules.md
msgid "Learning Bazel-like build rules is useful for all Rust OS developers."
@@ -12356,8 +11779,8 @@ msgstr "Rust 二进制文件"
#: src/android/build-rules/binary.md
msgid ""
-"Let us start with a simple application. At the root of an AOSP checkout, "
-"create the following files:"
+"Let us start with a simple application. At the root of an AOSP checkout, create the "
+"following files:"
msgstr "让我们从一个简单的应用程序开始。在 AOSP 签出的根目录下,创建以下文件:"
#: src/android/build-rules/binary.md src/android/build-rules/library.md
@@ -12407,8 +11830,7 @@ msgid ""
msgstr ""
"```shell\n"
"m analyze_numbers\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/tmp\"\n"
"adb shell /data/local/tmp/analyze_numbers\n"
"```"
@@ -12430,13 +11852,11 @@ msgstr "`libgreeting`, 我们在下面进行了定义,"
#: src/android/build-rules/library.md
msgid ""
-"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`]"
-"(https://cs.android.com/android/platform/superproject/+/master:external/rust/"
-"crates/)."
+"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`](https://cs."
+"android.com/android/platform/superproject/+/master:external/rust/crates/)."
msgstr ""
-"`libtextwrap`, 一个已经在 [`external/rust/crates/`](https://cs.android.com/"
-"android/platform/superproject/+/master:external/rust/crates/) 中提供的 "
-"crate。"
+"`libtextwrap`, 一个已经在 [`external/rust/crates/`](https://cs.android.com/android/"
+"platform/superproject/+/master:external/rust/crates/) 中提供的 crate。"
#: src/android/build-rules/library.md
#, fuzzy
@@ -12490,25 +11910,23 @@ msgstr "您可以像之前一样构建、推送和运行二进制文件:"
msgid ""
"```shell\n"
"m hello_rust_with_dep\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep\" /data/local/tmp\n"
"adb shell /data/local/tmp/hello_rust_with_dep\n"
"```"
msgstr ""
"```shell\n"
"m print_birthday_card\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/tmp\"\n"
"adb shell /data/local/tmp/print_birthday_card\n"
"```"
#: src/android/aidl.md
msgid ""
-"The [Android Interface Definition Language (AIDL)](https://developer.android."
-"com/guide/components/aidl) is supported in Rust:"
+"The [Android Interface Definition Language (AIDL)](https://developer.android.com/guide/"
+"components/aidl) is supported in Rust:"
msgstr ""
-"Rust 支持 [Android 接口定义语言 (AIDL)](https://developer.android.com/guide/"
-"components/aidl):"
+"Rust 支持 [Android 接口定义语言 (AIDL)](https://developer.android.com/guide/components/"
+"aidl):"
#: src/android/aidl.md
msgid "Rust code can call existing AIDL servers,"
@@ -12527,10 +11945,8 @@ msgid "You declare the API of your service using an AIDL interface:"
msgstr "您可以使用 AIDL 接口声明您的服务的 API:"
#: src/android/aidl/interface.md
-msgid ""
-"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:"
-msgstr ""
-"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:"
+msgid "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:"
+msgstr "_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:"
#: src/android/aidl/interface.md src/android/aidl/changing.md
msgid "/** Birthday service interface. */"
@@ -12560,11 +11976,10 @@ msgstr "// Rust is not enabled by default\n"
#: src/android/aidl/interface.md
msgid ""
-"Add `vendor_available: true` if your AIDL file is used by a binary in the "
-"vendor partition."
+"Add `vendor_available: true` if your AIDL file is used by a binary in the vendor "
+"partition."
msgstr ""
-"如果供应商分区中的二进制文件使用了您的 AIDL 文件,请添加 `vendor_available: "
-"true`。"
+"如果供应商分区中的二进制文件使用了您的 AIDL 文件,请添加 `vendor_available: true`。"
#: src/android/aidl/implementation.md
msgid "Service Implementation"
@@ -12591,8 +12006,7 @@ msgstr "`IBirthdayService`实现 "
msgid "\"Happy Birthday {name}, congratulations with the {years} years!\""
msgstr "\"Happy Birthday {name}, congratulations with the {years} years!\""
-#: src/android/aidl/implementation.md src/android/aidl/server.md
-#: src/android/aidl/client.md
+#: src/android/aidl/implementation.md src/android/aidl/server.md src/android/aidl/client.md
msgid "_birthday_service/Android.bp_:"
msgstr "_birthday_service/Android.bp_:"
@@ -12601,20 +12015,17 @@ msgstr "_birthday_service/Android.bp_:"
msgid "\"libbirthdayservice\""
msgstr "\"libbirthday.c\""
-#: src/android/aidl/implementation.md src/android/aidl/server.md
-#: src/android/aidl/client.md
+#: src/android/aidl/implementation.md src/android/aidl/server.md src/android/aidl/client.md
#, fuzzy
msgid "\"birthdayservice\""
msgstr "\"com.example.birthdayservice\""
-#: src/android/aidl/implementation.md src/android/aidl/server.md
-#: src/android/aidl/client.md
+#: src/android/aidl/implementation.md src/android/aidl/server.md src/android/aidl/client.md
#, fuzzy
msgid "\"com.example.birthdayservice-rust\""
msgstr "\"com.example.birthdayservice-rust\""
-#: src/android/aidl/implementation.md src/android/aidl/server.md
-#: src/android/aidl/client.md
+#: src/android/aidl/implementation.md src/android/aidl/server.md src/android/aidl/client.md
msgid "\"libbinder_rs\""
msgstr "\"libbinder_rs\""
@@ -12666,16 +12077,14 @@ msgstr "我们现在可以构建、推送和启动服务:"
msgid ""
"```shell\n"
"m birthday_server\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server\" /data/local/tmp\n"
"adb root\n"
"adb shell /data/local/tmp/birthday_server\n"
"```"
msgstr ""
"```shell\n"
"m print_birthday_card\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/tmp\"\n"
"adb shell /data/local/tmp/print_birthday_card\n"
"```"
@@ -12740,31 +12149,27 @@ msgstr "在您的设备上构建、推送并运行客户端:"
msgid ""
"```shell\n"
"m birthday_client\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client\" /data/local/tmp\n"
"adb shell /data/local/tmp/birthday_client Charlie 60\n"
"```"
msgstr ""
"```shell\n"
"m print_birthday_card\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/tmp\"\n"
"adb shell /data/local/tmp/print_birthday_card\n"
"```"
#: src/android/aidl/changing.md
msgid ""
-"Let us extend the API with more functionality: we want to let clients "
-"specify a list of lines for the birthday card:"
+"Let us extend the API with more functionality: we want to let clients specify a list of "
+"lines for the birthday card:"
msgstr "让我们扩展API以提供更多功能:我们希望允许客户端指定生日贺卡的行列表:"
#: src/android/logging.md
msgid ""
-"You should use the `log` crate to automatically log to `logcat` (on-device) "
-"or `stdout` (on-host):"
-msgstr ""
-"你应该使用 `log` crate 来自动记录日志到 `logcat` (设备上)或 `stdout`(主机"
-"上):"
+"You should use the `log` crate to automatically log to `logcat` (on-device) or `stdout` "
+"(on-host):"
+msgstr "你应该使用 `log` crate 来自动记录日志到 `logcat` (设备上)或 `stdout`(主机上):"
#: src/android/logging.md
msgid "_hello_rust_logs/Android.bp_:"
@@ -12824,15 +12229,13 @@ msgstr "在你的设备上构建,推送,并运行二进制文件 :"
msgid ""
"```shell\n"
"m hello_rust_logs\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs\" /data/local/tmp\n"
"adb shell /data/local/tmp/hello_rust_logs\n"
"```"
msgstr ""
"```shell\n"
"m analyze_numbers\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/tmp\"\n"
"adb shell /data/local/tmp/analyze_numbers\n"
"```"
@@ -12842,8 +12245,8 @@ msgstr "日志将会在 `adb logcat` 中显示:"
#: src/android/interoperability.md
msgid ""
-"Rust has excellent support for interoperability with other languages. This "
-"means that you can:"
+"Rust has excellent support for interoperability with other languages. This means that "
+"you can:"
msgstr "Rust 对于与其他编程语言的互操作性有着出色的支持。这意味着您可以:"
#: src/android/interoperability.md
@@ -12856,8 +12259,8 @@ msgstr "从 Rust 调用用其他语言编写的函数。"
#: src/android/interoperability.md
msgid ""
-"When you call functions in a foreign language we say that you're using a "
-"_foreign function interface_, also known as FFI."
+"When you call functions in a foreign language we say that you're using a _foreign "
+"function interface_, also known as FFI."
msgstr ""
"当您从外部语言调用函数时,我们称之为使用 **外部函数接口**(*Foreign Function "
"Interface*, FFI)。"
@@ -12868,11 +12271,11 @@ msgstr "与 C 的互操作性"
#: src/android/interoperability/with-c.md
msgid ""
-"Rust has full support for linking object files with a C calling convention. "
-"Similarly, you can export Rust functions and call them from C."
+"Rust has full support for linking object files with a C calling convention. Similarly, "
+"you can export Rust functions and call them from C."
msgstr ""
-"Rust 对使用 C 调用约定链接目标文件提供了完整的支持。同样地,你可以导出 Rust "
-"函数并从 C 中调用它们。"
+"Rust 对使用 C 调用约定链接目标文件提供了完整的支持。同样地,你可以导出 Rust 函数并从 C 中"
+"调用它们。"
#: src/android/interoperability/with-c.md
msgid "You can do it by hand if you want:"
@@ -12884,16 +12287,14 @@ msgstr "\"{x}, {abs_x}\""
#: src/android/interoperability/with-c.md
msgid ""
-"We already saw this in the [Safe FFI Wrapper exercise](../../exercises/day-3/"
-"safe-ffi-wrapper.md)."
+"We already saw this in the [Safe FFI Wrapper exercise](../../exercises/day-3/safe-ffi-"
+"wrapper.md)."
msgstr ""
-"我们已经在[安全 FFI 封装容器](../../exercises/day-3/safe-ffi-wrapper.md)练习"
-"中看到了这个例子。"
+"我们已经在[安全 FFI 封装容器](../../exercises/day-3/safe-ffi-wrapper.md)练习中看到了这个"
+"例子。"
#: src/android/interoperability/with-c.md
-msgid ""
-"This assumes full knowledge of the target platform. Not recommended for "
-"production."
+msgid "This assumes full knowledge of the target platform. Not recommended for production."
msgstr "这假设对目标平台拥有充分的了解,不建议用于生产环境。"
#: src/android/interoperability/with-c.md
@@ -12906,11 +12307,11 @@ msgstr "使用 Bindgen"
#: src/android/interoperability/with-c/bindgen.md
msgid ""
-"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) "
-"tool can auto-generate bindings from a C header file."
+"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) tool can auto-"
+"generate bindings from a C header file."
msgstr ""
-"[bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) 工具可"
-"以自动生成 C 头文件的绑定代码。"
+"[bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) 工具可以自动生成 C "
+"头文件的绑定代码。"
#: src/android/interoperability/with-c/bindgen.md
msgid "First create a small C library:"
@@ -12964,9 +12365,7 @@ msgid "\"libbirthday.c\""
msgstr "\"libbirthday.c\""
#: src/android/interoperability/with-c/bindgen.md
-msgid ""
-"Create a wrapper header file for the library (not strictly needed in this "
-"example):"
+msgid "Create a wrapper header file for the library (not strictly needed in this example):"
msgstr "为该库创建一个包装头文件(在此示例中不是必需的):"
#: src/android/interoperability/with-c/bindgen.md
@@ -13028,15 +12427,13 @@ msgstr ""
msgid ""
"```shell\n"
"m print_birthday_card\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card\" /data/local/tmp\n"
"adb shell /data/local/tmp/print_birthday_card\n"
"```"
msgstr ""
"```shell\n"
"m print_birthday_card\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/print_birthday_card /data/local/tmp\"\n"
"adb shell /data/local/tmp/print_birthday_card\n"
"```"
@@ -13146,34 +12543,30 @@ msgstr "\"main.c\""
msgid ""
"```shell\n"
"m analyze_numbers\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers\" /data/local/"
-"tmp\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers\" /data/local/tmp\n"
"adb shell /data/local/tmp/analyze_numbers\n"
"```"
msgstr ""
"```shell\n"
"m analyze_numbers\n"
-"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/"
-"tmp\"\n"
+"adb push \"$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers /data/local/tmp\"\n"
"adb shell /data/local/tmp/analyze_numbers\n"
"```"
#: src/android/interoperability/with-c/rust.md
msgid ""
-"`#[no_mangle]` disables Rust's usual name mangling, so the exported symbol "
-"will just be the name of the function. You can also use `#[export_name = "
-"\"some_name\"]` to specify whatever name you want."
+"`#[no_mangle]` disables Rust's usual name mangling, so the exported symbol will just be "
+"the name of the function. You can also use `#[export_name = \"some_name\"]` to specify "
+"whatever name you want."
msgstr ""
-"`#[no_mangle]` 禁用了 Rust 通常的名称重整,因此导出的符号将仅为函数的名称。你"
-"还可以使用 `#[export_name = \"some_name\"]` 来指定任意你想要的名称。"
+"`#[no_mangle]` 禁用了 Rust 通常的名称重整,因此导出的符号将仅为函数的名称。你还可以使用 "
+"`#[export_name = \"some_name\"]` 来指定任意你想要的名称。"
#: src/android/interoperability/cpp.md
msgid ""
-"The [CXX crate](https://cxx.rs/) makes it possible to do safe "
-"interoperability between Rust and C++."
-msgstr ""
-"[CXX crate](https://cxx.rs/) 使得在 Rust 和 C++ 之间进行安全的互操作成为可"
-"能。"
+"The [CXX crate](https://cxx.rs/) makes it possible to do safe interoperability between "
+"Rust and C++."
+msgstr "[CXX crate](https://cxx.rs/) 使得在 Rust 和 C++ 之间进行安全的互操作成为可能。"
#: src/android/interoperability/cpp.md
msgid "The overall approach looks like this:"
@@ -13181,12 +12574,12 @@ msgstr "整体的方法如下:"
#: src/android/interoperability/cpp/bridge.md
msgid ""
-"CXX relies on a description of the function signatures that will be exposed "
-"from each language to the other. You provide this description using extern "
-"blocks in a Rust module annotated with the `#[cxx::bridge]` attribute macro."
+"CXX relies on a description of the function signatures that will be exposed from each "
+"language to the other. You provide this description using extern blocks in a Rust module "
+"annotated with the `#[cxx::bridge]` attribute macro."
msgstr ""
-"CXX依赖于提供的函数签名说明,这些签名会在不用语言之间进行交互使用。您可以在带"
-"有 `#[cxx::bridge]` 属性宏注解的 Rust 模块中使用 extern 代码块提供此说明。"
+"CXX依赖于提供的函数签名说明,这些签名会在不用语言之间进行交互使用。您可以在带有 `#[cxx::"
+"bridge]` 属性宏注解的 Rust 模块中使用 extern 代码块提供此说明。"
#: src/android/interoperability/cpp/bridge.md
msgid "\"org::blobstore\""
@@ -13235,23 +12628,22 @@ msgstr "桥接通常在您的 crate 内的 `ffi` 模块中声明。"
#: src/android/interoperability/cpp/bridge.md
msgid ""
-"From the declarations made in the bridge module, CXX will generate matching "
-"Rust and C++ type/function definitions in order to expose those items to "
-"both languages."
+"From the declarations made in the bridge module, CXX will generate matching Rust and C++ "
+"type/function definitions in order to expose those items to both languages."
msgstr ""
-"根据在桥接模块中进行的声明,CXX 将生成匹配的 Rust 和 C++ 类型/函数定义,以便"
-"将这些内容公开给这两种语言。"
+"根据在桥接模块中进行的声明,CXX 将生成匹配的 Rust 和 C++ 类型/函数定义,以便将这些内容公"
+"开给这两种语言。"
#: src/android/interoperability/cpp/bridge.md
msgid ""
-"To view the generated Rust code, use [cargo-expand](https://github.com/"
-"dtolnay/cargo-expand) to view the expanded proc macro. For most of the "
-"examples you would use `cargo expand ::ffi` to expand just the `ffi` module "
-"(though this doesn't apply for Android projects)."
+"To view the generated Rust code, use [cargo-expand](https://github.com/dtolnay/cargo-"
+"expand) to view the expanded proc macro. For most of the examples you would use `cargo "
+"expand ::ffi` to expand just the `ffi` module (though this doesn't apply for Android "
+"projects)."
msgstr ""
-"如需查看生成的 Rust 代码,请使用 [cargo-expand](https://github.com/dtolnay/"
-"cargo-expand) 查看展开后的 proc 宏。对于大多数示例,您可以使用 `cargo "
-"expand ::ffi` 来仅展开 `ffi` 模块(但这不适用于 Android 项目)。"
+"如需查看生成的 Rust 代码,请使用 [cargo-expand](https://github.com/dtolnay/cargo-expand) "
+"查看展开后的 proc 宏。对于大多数示例,您可以使用 `cargo expand ::ffi` 来仅展开 `ffi` 模块"
+"(但这不适用于 Android 项目)。"
#: src/android/interoperability/cpp/bridge.md
msgid "To view the generated C++ code, look in `target/cxxbridge`."
@@ -13277,19 +12669,18 @@ msgstr "函数"
#: src/android/interoperability/cpp/rust-bridge.md
msgid ""
-"Items declared in the `extern \"Rust\"` reference items that are in scope in "
-"the parent module."
+"Items declared in the `extern \"Rust\"` reference items that are in scope in the parent "
+"module."
msgstr "`extern \"Rust\"` 中声明的内容引用了父级模块中作用域内的内容。"
#: src/android/interoperability/cpp/rust-bridge.md
msgid ""
-"The CXX code generator uses your `extern \"Rust\"` section(s) to produce a C+"
-"+ header file containing the corresponding C++ declarations. The generated "
-"header has the same path as the Rust source file containing the bridge, "
-"except with a .rs.h file extension."
+"The CXX code generator uses your `extern \"Rust\"` section(s) to produce a C++ header "
+"file containing the corresponding C++ declarations. The generated header has the same "
+"path as the Rust source file containing the bridge, except with a .rs.h file extension."
msgstr ""
-"CXX 代码生成器使用 `extern \"Rust\"` 部分生成包含相应 C++ 声明的 C++ 头文件。"
-"生成的头文件与包含桥接的 Rust 源文件的路径相同,但文件扩展名为 .rs.h。"
+"CXX 代码生成器使用 `extern \"Rust\"` 部分生成包含相应 C++ 声明的 C++ 头文件。生成的头文件"
+"与包含桥接的 Rust 源文件的路径相同,但文件扩展名为 .rs.h。"
#: src/android/interoperability/cpp/generated-cpp.md
msgid "Results in (roughly) the following C++:"
@@ -13313,17 +12704,17 @@ msgstr "\"org$blobstore$cxxbridge1$BlobstoreClient$put\""
#: src/android/interoperability/cpp/cpp-bridge.md
msgid ""
-"The programmer does not need to promise that the signatures they have typed "
-"in are accurate. CXX performs static assertions that the signatures exactly "
-"correspond with what is declared in C++."
+"The programmer does not need to promise that the signatures they have typed in are "
+"accurate. CXX performs static assertions that the signatures exactly correspond with "
+"what is declared in C++."
msgstr ""
-"程序员无需承诺他们输入的签名准确无误。CXX 会执行静态断言,确认签名与 C++ 中声"
-"明的内容完全一致。"
+"程序员无需承诺他们输入的签名准确无误。CXX 会执行静态断言,确认签名与 C++ 中声明的内容完全"
+"一致。"
#: src/android/interoperability/cpp/cpp-bridge.md
msgid ""
-"`unsafe extern` blocks allow you to declare C++ functions that are safe to "
-"call from Rust."
+"`unsafe extern` blocks allow you to declare C++ functions that are safe to call from "
+"Rust."
msgstr "借助 `unsafe extern` 代码块,您可以声明可从 Rust 安全调用的 C++ 函数。"
#: src/android/interoperability/cpp/shared-types.md
@@ -13337,13 +12728,11 @@ msgstr "仅支持类似 C 函数(单元)的枚举。"
#: src/android/interoperability/cpp/shared-types.md
msgid ""
"A limited number of traits are supported for `#[derive()]` on shared types. "
-"Corresponding functionality is also generated for the C++ code, e.g. if you "
-"derive `Hash` also generates an implementation of `std::hash` for the "
-"corresponding C++ type."
+"Corresponding functionality is also generated for the C++ code, e.g. if you derive "
+"`Hash` also generates an implementation of `std::hash` for the corresponding C++ type."
msgstr ""
-"共享类型的 `#[derive()]` 支持有限数量的 trait。系统还会针对 C++ 代码生成相应"
-"的功能,例如,如果您派生了 `Hash`,还会为相应的 C++ 类型生成 `std::hash` 实"
-"现。"
+"共享类型的 `#[derive()]` 支持有限数量的 trait。系统还会针对 C++ 代码生成相应的功能,例"
+"如,如果您派生了 `Hash`,还会为相应的 C++ 类型生成 `std::hash` 实现。"
#: src/android/interoperability/cpp/shared-enums.md
#, fuzzy
@@ -13357,13 +12746,13 @@ msgstr "生成的 C++:"
#: src/android/interoperability/cpp/shared-enums.md
msgid ""
-"On the Rust side, the code generated for shared enums is actually a struct "
-"wrapping a numeric value. This is because it is not UB in C++ for an enum "
-"class to hold a value different from all of the listed variants, and our "
-"Rust representation needs to have the same behavior."
+"On the Rust side, the code generated for shared enums is actually a struct wrapping a "
+"numeric value. This is because it is not UB in C++ for an enum class to hold a value "
+"different from all of the listed variants, and our Rust representation needs to have the "
+"same behavior."
msgstr ""
-"在 Rust 端,为共享枚举生成的代码实际上是封装数值的结构体。这是因为在 C++ 中,"
-"枚举类存储与所有已列变体不同的值不属于 UB,而 Rust 表示法需要具有相同的行为。"
+"在 Rust 端,为共享枚举生成的代码实际上是封装数值的结构体。这是因为在 C++ 中,枚举类存储与"
+"所有已列变体不同的值不属于 UB,而 Rust 表示法需要具有相同的行为。"
#: src/android/interoperability/cpp/rust-result.md
msgid "\"fallible1 requires depth > 0\""
@@ -13374,24 +12763,22 @@ msgid "\"Success!\""
msgstr "\"Success!\""
#: src/android/interoperability/cpp/rust-result.md
-msgid ""
-"Rust functions that return `Result` are translated to exceptions on the C++ "
-"side."
+msgid "Rust functions that return `Result` are translated to exceptions on the C++ side."
msgstr "在 C++ 方面,返回 `Result` 的 Rust 函数会被翻译为异常。"
#: src/android/interoperability/cpp/rust-result.md
msgid ""
-"The exception thrown will always be of type `rust::Error`, which primarily "
-"exposes a way to get the error message string. The error message will come "
-"from the error type's `Display` impl."
+"The exception thrown will always be of type `rust::Error`, which primarily exposes a way "
+"to get the error message string. The error message will come from the error type's "
+"`Display` impl."
msgstr ""
-"抛出的异常始终是 `rust::Error` 类型,该类型主要用于提供获取错误消息字符串的方"
-"法。错误消息将由错误类型的 `Display` impl 提供。"
+"抛出的异常始终是 `rust::Error` 类型,该类型主要用于提供获取错误消息字符串的方法。错误消息"
+"将由错误类型的 `Display` impl 提供。"
#: src/android/interoperability/cpp/rust-result.md
msgid ""
-"A panic unwinding from Rust to C++ will always cause the process to "
-"immediately terminate."
+"A panic unwinding from Rust to C++ will always cause the process to immediately "
+"terminate."
msgstr "当 panic 从 Rust 展开到 C++ 时,会始终导致进程立即终止。"
#: src/android/interoperability/cpp/cpp-exception.md
@@ -13404,22 +12791,20 @@ msgstr "\"Error: {}\""
#: src/android/interoperability/cpp/cpp-exception.md
msgid ""
-"C++ functions declared to return a `Result` will catch any thrown exception "
-"on the C++ side and return it as an `Err` value to the calling Rust function."
+"C++ functions declared to return a `Result` will catch any thrown exception on the C++ "
+"side and return it as an `Err` value to the calling Rust function."
msgstr ""
-"声明用于返回 `Result` 的 C++ 函数将捕获 C++ 端抛出的任何异常,并将其作为 "
-"`Err` 值返回给调用 Rust 函数。"
+"声明用于返回 `Result` 的 C++ 函数将捕获 C++ 端抛出的任何异常,并将其作为 `Err` 值返回给调"
+"用 Rust 函数。"
#: src/android/interoperability/cpp/cpp-exception.md
msgid ""
-"If an exception is thrown from an extern \"C++\" function that is not "
-"declared by the CXX bridge to return `Result`, the program calls C++'s `std::"
-"terminate`. The behavior is equivalent to the same exception being thrown "
-"through a `noexcept` C++ function."
+"If an exception is thrown from an extern \"C++\" function that is not declared by the "
+"CXX bridge to return `Result`, the program calls C++'s `std::terminate`. The behavior is "
+"equivalent to the same exception being thrown through a `noexcept` C++ function."
msgstr ""
-"如果外部 “C++”函数抛出l了异常,但 CXX 桥接中未声明该函数用于返回 `Result`,则"
-"程序会调用 C++ 的 `std::terminate`。此行为等同于通过 C++ 函数 `nowithout` 抛"
-"出了相同的异常。"
+"如果外部 “C++”函数抛出l了异常,但 CXX 桥接中未声明该函数用于返回 `Result`,则程序会调用 "
+"C++ 的 `std::terminate`。此行为等同于通过 C++ 函数 `nowithout` 抛出了相同的异常。"
#: src/android/interoperability/cpp/type-mapping.md
#, fuzzy
@@ -13500,36 +12885,34 @@ msgstr "`std::vector`"
#: src/android/interoperability/cpp/type-mapping.md
msgid ""
-"These types can be used in the fields of shared structs and the arguments "
-"and returns of extern functions."
+"These types can be used in the fields of shared structs and the arguments and returns of "
+"extern functions."
msgstr "这些类型可用于共享结构体的字段以及外部函数的参数和返回结果。"
#: src/android/interoperability/cpp/type-mapping.md
msgid ""
-"Note that Rust's `String` does not map directly to `std::string`. There are "
-"a few reasons for this:"
+"Note that Rust's `String` does not map directly to `std::string`. There are a few "
+"reasons for this:"
msgstr ""
-"请注意,Rust 的 `String` 不会直接映射到 `std::string`。导致这种情况的原因有以"
-"下几种:"
+"请注意,Rust 的 `String` 不会直接映射到 `std::string`。导致这种情况的原因有以下几种:"
#: src/android/interoperability/cpp/type-mapping.md
-msgid ""
-"`std::string` does not uphold the UTF-8 invariant that `String` requires."
+msgid "`std::string` does not uphold the UTF-8 invariant that `String` requires."
msgstr "`std::string` 不遵循 `String` 所需的 UTF-8 不变性。"
#: src/android/interoperability/cpp/type-mapping.md
msgid ""
-"The two types have different layouts in memory and so can't be passed "
-"directly between languages."
+"The two types have different layouts in memory and so can't be passed directly between "
+"languages."
msgstr "这两种类型的内存布局不同,因此无法直接在语言之间进行传递。"
#: src/android/interoperability/cpp/type-mapping.md
msgid ""
-"`std::string` requires move constructors that don't match Rust's move "
-"semantics, so a `std::string` can't be passed by value to Rust."
+"`std::string` requires move constructors that don't match Rust's move semantics, so a "
+"`std::string` can't be passed by value to Rust."
msgstr ""
-"`std::string` 需要与 Rust 的移动语义不匹配的 move 构造函数,因此 `std::"
-"string` 无法按值传递给 Rust。"
+"`std::string` 需要与 Rust 的移动语义不匹配的 move 构造函数,因此 `std::string` 无法按值传"
+"递给 Rust。"
#: src/android/interoperability/cpp/android-build-cpp.md
#: src/android/interoperability/cpp/android-cpp-genrules.md
@@ -13540,10 +12923,9 @@ msgstr "Android 中的 Rust"
#: src/android/interoperability/cpp/android-build-cpp.md
msgid ""
-"Create a `cc_library_static` to build the C++ library, including the CXX "
-"generated header and source file."
-msgstr ""
-"创建 `cc_library_static` 以构建 C++ 库,包括 CXX 生成的头文件和源文件。"
+"Create a `cc_library_static` to build the C++ library, including the CXX generated "
+"header and source file."
+msgstr "创建 `cc_library_static` 以构建 C++ 库,包括 CXX 生成的头文件和源文件。"
#: src/android/interoperability/cpp/android-build-cpp.md
#: src/android/interoperability/cpp/android-build-rust.md
@@ -13570,44 +12952,48 @@ msgstr "\"libcxx_test_bridge_code\""
#: src/android/interoperability/cpp/android-build-cpp.md
msgid ""
-"Point out that `libcxx_test_bridge_header` and `libcxx_test_bridge_code` are "
-"the dependencies for the CXX-generated C++ bindings. We'll show how these "
-"are setup on the next slide."
+"Point out that `libcxx_test_bridge_header` and `libcxx_test_bridge_code` are the "
+"dependencies for the CXX-generated C++ bindings. We'll show how these are setup on the "
+"next slide."
msgstr ""
-"指出 `libcxx_test_bridge_header` 和 `libcxx_test_bridge_code` 是 CXX 生成的 "
-"C++ 绑定的依赖项。我们将在下一张幻灯片中介绍具体的设置方法。"
+"指出 `libcxx_test_bridge_header` 和 `libcxx_test_bridge_code` 是 CXX 生成的 C++ 绑定的依"
+"赖项。我们将在下一张幻灯片中介绍具体的设置方法。"
#: src/android/interoperability/cpp/android-build-cpp.md
msgid ""
-"Note that you also need to depend on the `cxx-bridge-header` library in "
-"order to pull in common CXX definitions."
+"Note that you also need to depend on the `cxx-bridge-header` library in order to pull in "
+"common CXX definitions."
msgstr "请注意,您还需要依靠 `cxx-bridge-header` 库才能提取常见的 CXX 定义。"
#: src/android/interoperability/cpp/android-build-cpp.md
msgid ""
-"Full docs for using CXX in Android can be found in [the Android docs]"
-"(https://source.android.com/docs/setup/build/rust/building-rust-modules/"
-"android-rust-patterns#rust-cpp-interop-using-cxx). You may want to share "
-"that link with the class so that students know where they can find these "
-"instructions again in the future."
+"Full docs for using CXX in Android can be found in [the Android docs](https://source."
+"android.com/docs/setup/build/rust/building-rust-modules/android-rust-patterns#rust-cpp-"
+"interop-using-cxx). You may want to share that link with the class so that students know "
+"where they can find these instructions again in the future."
msgstr ""
-"如需了解如何在 Android 中使用 CXX 的完整文档,请参阅 [Android 文档](https://"
-"source.android.com/docs/setup/build/rust/building-rust-modules/android-rust-"
-"patterns#rust-cpp-interop-using-cxx)。建议您与全班同学分享该链接,以便学生知"
-"道日后可以在哪里找到这些说明。"
+"如需了解如何在 Android 中使用 CXX 的完整文档,请参阅 [Android 文档](https://source."
+"android.com/docs/setup/build/rust/building-rust-modules/android-rust-patterns#rust-cpp-"
+"interop-using-cxx)。建议您与全班同学分享该链接,以便学生知道日后可以在哪里找到这些说明。"
#: src/android/interoperability/cpp/android-cpp-genrules.md
msgid ""
-"Create two genrules: One to generate the CXX header, and one to generate the "
-"CXX source file. These are then used as inputs to the `cc_library_static`."
+"Create two genrules: One to generate the CXX header, and one to generate the CXX source "
+"file. These are then used as inputs to the `cc_library_static`."
msgstr ""
-"创建两个 genrule:一个用于生成 CXX 头文件,另一个用于生成 CXX 源文件。然后,"
-"这些内容会被用作 `cc_library_static` 的输入。"
+"创建两个 genrule:一个用于生成 CXX 头文件,另一个用于生成 CXX 源文件。然后,这些内容会被"
+"用作 `cc_library_static` 的输入。"
#: src/android/interoperability/cpp/android-cpp-genrules.md
-msgid ""
+#, fuzzy
+msgid "// Generate a C++ header containing the C++ bindings"
+msgstr ""
"// Generate a C++ header containing the C++ bindings\n"
"// to the Rust exported functions in lib.rs.\n"
+
+#: src/android/interoperability/cpp/android-cpp-genrules.md
+#, fuzzy
+msgid "// to the Rust exported functions in lib.rs."
msgstr ""
"// Generate a C++ header containing the C++ bindings\n"
"// to the Rust exported functions in lib.rs.\n"
@@ -13632,7 +13018,8 @@ msgid "\"lib.rs.h\""
msgstr "\"lib.rs.h\""
#: src/android/interoperability/cpp/android-cpp-genrules.md
-msgid "// Generate the C++ code that Rust calls into.\n"
+#, fuzzy
+msgid "// Generate the C++ code that Rust calls into."
msgstr "// Generate the C++ code that Rust calls into.\n"
#: src/android/interoperability/cpp/android-cpp-genrules.md
@@ -13646,24 +13033,23 @@ msgstr "\"lib.rs.cc\""
#: src/android/interoperability/cpp/android-cpp-genrules.md
msgid ""
-"The `cxxbridge` tool is a standalone tool that generates the C++ side of the "
-"bridge module. It is included in Android and available as a Soong tool."
+"The `cxxbridge` tool is a standalone tool that generates the C++ side of the bridge "
+"module. It is included in Android and available as a Soong tool."
msgstr ""
-"`cxxbridge` 工具是一款独立工具,用于生成桥接模块的 C++ 端。它包含在 Android "
-"中,并作为 Soong 工具提供。"
+"`cxxbridge` 工具是一款独立工具,用于生成桥接模块的 C++ 端。它包含在 Android 中,并作为 "
+"Soong 工具提供。"
#: src/android/interoperability/cpp/android-cpp-genrules.md
msgid ""
-"By convention, if your Rust source file is `lib.rs` your header file will be "
-"named `lib.rs.h` and your source file will be named `lib.rs.cc`. This naming "
-"convention isn't enforced, though."
+"By convention, if your Rust source file is `lib.rs` your header file will be named `lib."
+"rs.h` and your source file will be named `lib.rs.cc`. This naming convention isn't "
+"enforced, though."
msgstr ""
-"按照惯例,如果您的 Rust 源文件是 `lib.rs`,则头文件将命名为 `lib.rs.h`,源文"
-"件将命名为 `lib.rs.cc`。不过,系统并不强制执行此命名惯例。"
+"按照惯例,如果您的 Rust 源文件是 `lib.rs`,则头文件将命名为 `lib.rs.h`,源文件将命名为 "
+"`lib.rs.cc`。不过,系统并不强制执行此命名惯例。"
#: src/android/interoperability/cpp/android-build-rust.md
-msgid ""
-"Create a `rust_binary` that depends on `libcxx` and your `cc_library_static`."
+msgid "Create a `rust_binary` that depends on `libcxx` and your `cc_library_static`."
msgstr "创建一个依赖于 `libcxx` 和 `cc_library_static` 的 `rust_binary`。"
#: src/android/interoperability/cpp/android-build-rust.md
@@ -13680,13 +13066,12 @@ msgstr "与 Java 的互操作性"
#: src/android/interoperability/java.md
msgid ""
-"Java can load shared objects via [Java Native Interface (JNI)](https://en."
-"wikipedia.org/wiki/Java_Native_Interface). The [`jni` crate](https://docs.rs/"
-"jni/) allows you to create a compatible library."
+"Java can load shared objects via [Java Native Interface (JNI)](https://en.wikipedia.org/"
+"wiki/Java_Native_Interface). The [`jni` crate](https://docs.rs/jni/) allows you to "
+"create a compatible library."
msgstr ""
-"Java可以通过 [ Java 本地接口 (JNI)](https://en.wikipedia.org/wiki/"
-"Java_Native_Interface) 加载共享对象。[`jni` crate](https://docs.rs/jni/) 允许"
-"您创建一个兼容的库。"
+"Java可以通过 [ Java 本地接口 (JNI)](https://en.wikipedia.org/wiki/Java_Native_Interface) "
+"加载共享对象。[`jni` crate](https://docs.rs/jni/) 允许您创建一个兼容的库。"
#: src/android/interoperability/java.md
msgid "First, we create a Rust function to export to Java:"
@@ -13762,11 +13147,11 @@ msgstr "最后,您可以构建、同步和运行二进制文件:"
#: src/exercises/android/morning.md
msgid ""
-"This is a group exercise: We will look at one of the projects you work with "
-"and try to integrate some Rust into it. Some suggestions:"
+"This is a group exercise: We will look at one of the projects you work with and try to "
+"integrate some Rust into it. Some suggestions:"
msgstr ""
-"这是一个小组练习:我们将查看你们正在处理的项目之一,并尝试将一些 Rust 代码集"
-"成进去。以下是一些建议:"
+"这是一个小组练习:我们将查看你们正在处理的项目之一,并尝试将一些 Rust 代码集成进去。以下"
+"是一些建议:"
#: src/exercises/android/morning.md
msgid "Call your AIDL service with a client written in Rust."
@@ -13778,11 +13163,11 @@ msgstr "将你项目中的某个函数迁移到 Rust 中并调用它。"
#: src/exercises/android/morning.md
msgid ""
-"No solution is provided here since this is open-ended: it relies on someone "
-"in the class having a piece of code which you can turn in to Rust on the fly."
+"No solution is provided here since this is open-ended: it relies on someone in the class "
+"having a piece of code which you can turn in to Rust on the fly."
msgstr ""
-"此处没有提供解决方案,因为这是开放式的:它依赖于班级中是否有人有一段您可以即"
-"时转换成 Rust 的代码。"
+"此处没有提供解决方案,因为这是开放式的:它依赖于班级中是否有人有一段您可以即时转换成 "
+"Rust 的代码。"
#: src/chromium.md
#, fuzzy
@@ -13791,46 +13176,43 @@ msgstr "欢迎来到Android 中的Rust"
#: src/chromium.md
msgid ""
-"Rust is supported for third-party libraries in Chromium, with first-party "
-"glue code to connect between Rust and existing Chromium C++ code."
+"Rust is supported for third-party libraries in Chromium, with first-party glue code to "
+"connect between Rust and existing Chromium C++ code."
msgstr ""
-"Chromium 中的第三方库支持 Rust,并使用第一方粘合代码连接 Rust 和现有 "
-"Chromium C++ 代码。"
+"Chromium 中的第三方库支持 Rust,并使用第一方粘合代码连接 Rust 和现有 Chromium C++ 代码。"
#: src/chromium.md
msgid ""
-"Today, we'll call into Rust to do something silly with strings. If you've "
-"got a corner of the code where you're displaying a UTF8 string to the user, "
-"feel free to follow this recipe in your part of the codebase instead of the "
-"exact part we talk about."
+"Today, we'll call into Rust to do something silly with strings. If you've got a corner "
+"of the code where you're displaying a UTF8 string to the user, feel free to follow this "
+"recipe in your part of the codebase instead of the exact part we talk about."
msgstr ""
-"今天,我们将调用 Rust 对字符串进行一些有趣的操作。如果您的代码中某个部分是用"
-"于向用户展示 UTF8 字符串,那么可以在代码库中的对应部分按照这个步骤来操作,而"
-"不一定要在我们所讨论的确切部分。"
+"今天,我们将调用 Rust 对字符串进行一些有趣的操作。如果您的代码中某个部分是用于向用户展示 "
+"UTF8 字符串,那么可以在代码库中的对应部分按照这个步骤来操作,而不一定要在我们所讨论的确切"
+"部分。"
#: src/chromium/setup.md
msgid ""
-"Make sure you can build and run Chromium. Any platform and set of build "
-"flags is OK, so long as your code is relatively recent (commit position "
-"1223636 onwards, corresponding to November 2023):"
+"Make sure you can build and run Chromium. Any platform and set of build flags is OK, so "
+"long as your code is relatively recent (commit position 1223636 onwards, corresponding "
+"to November 2023):"
msgstr ""
-"请确保您可以构建并运行 Chromium。只要您的代码较新(提交位置始于 1223636,对应"
-"于 2023 年 11 月),则可在任何平台和任何一组 build 标志下运行。"
+"请确保您可以构建并运行 Chromium。只要您的代码较新(提交位置始于 1223636,对应于 2023 年 "
+"11 月),则可在任何平台和任何一组 build 标志下运行。"
#: src/chromium/setup.md
msgid ""
-"(A component, debug build is recommended for quickest iteration time. This "
-"is the default!)"
+"(A component, debug build is recommended for quickest iteration time. This is the "
+"default!)"
msgstr "(建议使用调试 build 组件,以缩短迭代时间。这是默认值!)"
#: src/chromium/setup.md
msgid ""
-"See [How to build Chromium](https://www.chromium.org/developers/how-tos/get-"
-"the-code/) if you aren't already at that point. Be warned: setting up to "
-"build Chromium takes time."
+"See [How to build Chromium](https://www.chromium.org/developers/how-tos/get-the-code/) "
+"if you aren't already at that point. Be warned: setting up to build Chromium takes time."
msgstr ""
-"如果您不具备这点,请参阅 [如何构建 Chromium](https://www.chromium.org/"
-"developers/how-tos/get-the-code/)。注意:设置 build Chromium 需要花些时间。"
+"如果您不具备这点,请参阅 [如何构建 Chromium](https://www.chromium.org/developers/how-tos/"
+"get-the-code/)。注意:设置 build Chromium 需要花些时间。"
#: src/chromium/setup.md
msgid "It's also recommended that you have Visual Studio code installed."
@@ -13843,23 +13225,20 @@ msgstr "练习简介"
#: src/chromium/setup.md
msgid ""
-"This part of the course has a series of exercises which build on each other. "
-"We'll be doing them spread throughout the course instead of just at the end. "
-"If you don't have time to complete a certain part, don't worry: you can "
-"catch up in the next slot."
+"This part of the course has a series of exercises which build on each other. We'll be "
+"doing them spread throughout the course instead of just at the end. If you don't have "
+"time to complete a certain part, don't worry: you can catch up in the next slot."
msgstr ""
-"本课程的这一部分包含一系列练习,它们之间是相辅相成的。我们将在整个课程中进行"
-"这些练习,而不仅仅是在最后阶段完成。如果您没有时间完成某个部分,也无需担心:"
-"可以在下一阶段赶上进度。"
+"本课程的这一部分包含一系列练习,它们之间是相辅相成的。我们将在整个课程中进行这些练习,而"
+"不仅仅是在最后阶段完成。如果您没有时间完成某个部分,也无需担心:可以在下一阶段赶上进度。"
#: src/chromium/cargo.md
msgid ""
-"Rust community typically uses `cargo` and libraries from [crates.io](https://"
-"crates.io/). Chromium is built using `gn` and `ninja` and a curated set of "
-"dependencies."
+"Rust community typically uses `cargo` and libraries from [crates.io](https://crates."
+"io/). Chromium is built using `gn` and `ninja` and a curated set of dependencies."
msgstr ""
-"Rust 社区通常使用 `cargo` 和 [crates.io](https://crates.io/) 中的库。"
-"Chromium 是使用 `gn` 和 `ninja` 以及一组精选依赖项而构建。"
+"Rust 社区通常使用 `cargo` 和 [crates.io](https://crates.io/) 中的库。Chromium 是使用 "
+"`gn` 和 `ninja` 以及一组精选依赖项而构建。"
#: src/chromium/cargo.md
msgid "When writing code in Rust, your choices are:"
@@ -13867,40 +13246,38 @@ msgstr "使用 Rust 编写代码时,您可以选择:"
#: src/chromium/cargo.md
msgid ""
-"Use `gn` and `ninja` with the help of the templates from `//build/rust/*."
-"gni` (e.g. `rust_static_library` that we'll meet later). This uses "
-"Chromium's audited toolchain and crates."
+"Use `gn` and `ninja` with the help of the templates from `//build/rust/*.gni` (e.g. "
+"`rust_static_library` that we'll meet later). This uses Chromium's audited toolchain and "
+"crates."
msgstr ""
-"借助 `//build/rust/*.gni` 模板(例如 `rust_static_library`,我们稍后会介绍)"
-"使用 `gn` 和 `ninja`。该操作会使用经过审核的 Chromium 工具链和 crate。"
+"借助 `//build/rust/*.gni` 模板(例如 `rust_static_library`,我们稍后会介绍)使用 `gn` 和 "
+"`ninja`。该操作会使用经过审核的 Chromium 工具链和 crate。"
#: src/chromium/cargo.md
msgid ""
-"Use `cargo`, but [restrict yourself to Chromium's audited toolchain and "
-"crates](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/"
-"docs/rust.md#Using-cargo)"
+"Use `cargo`, but [restrict yourself to Chromium's audited toolchain and crates](https://"
+"chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/rust.md#Using-cargo)"
msgstr ""
"使用 `cargo`,但 [仅限于经过审核的 Chromium 工具链和 crate](https://chromium."
"googlesource.com/chromium/src/+/refs/heads/main/docs/rust.md#Using-cargo)"
#: src/chromium/cargo.md
msgid ""
-"Use `cargo`, trusting a [toolchain](https://rustup.rs/) and/or [crates "
-"downloaded from the internet](https://crates.io/)"
+"Use `cargo`, trusting a [toolchain](https://rustup.rs/) and/or [crates downloaded from "
+"the internet](https://crates.io/)"
msgstr ""
-"使用 `cargo`,信任 [工具链](https://rustup.rs/) 和/或 [从互联网下载的 crate]"
-"(https://crates.io/)"
+"使用 `cargo`,信任 [工具链](https://rustup.rs/) 和/或 [从互联网下载的 crate](https://"
+"crates.io/)"
#: src/chromium/cargo.md
#, fuzzy
msgid ""
-"From here on we'll be focusing on `gn` and `ninja`, because this is how Rust "
-"code can be built into the Chromium browser. At the same time, Cargo is an "
-"important part of the Rust ecosystem and you should keep it in your toolbox."
+"From here on we'll be focusing on `gn` and `ninja`, because this is how Rust code can be "
+"built into the Chromium browser. At the same time, Cargo is an important part of the "
+"Rust ecosystem and you should keep it in your toolbox."
msgstr ""
-"从现在开始,我们将重点介绍 `gn` 和 `ninja`,因为这是在 Chromium 浏览器构建 "
-"Rust 代码时必会用到的两种方式。同时,Cargo 是 Rust 生态系统的重要组成部分,您"
-"应将其视为必备工具。"
+"从现在开始,我们将重点介绍 `gn` 和 `ninja`,因为这是在 Chromium 浏览器构建 Rust 代码时必"
+"会用到的两种方式。同时,Cargo 是 Rust 生态系统的重要组成部分,您应将其视为必备工具。"
#: src/chromium/cargo.md
#, fuzzy
@@ -13913,117 +13290,107 @@ msgstr "分成各个小组开展以下活动:"
#: src/chromium/cargo.md
msgid ""
-"Brainstorm scenarios where `cargo` may offer an advantage and assess the "
-"risk profile of these scenarios."
+"Brainstorm scenarios where `cargo` may offer an advantage and assess the risk profile of "
+"these scenarios."
msgstr "思考 `cargo` 在哪些场景下具有优势,并评估这些场景的风险状况。"
#: src/chromium/cargo.md
msgid ""
-"Discuss which tools, libraries, and groups of people need to be trusted when "
-"using `gn` and `ninja`, offline `cargo`, etc."
-msgstr ""
-"讨论在使用 `gn` 和 `ninja` 以及离线 `cargo` 等时,需要信任哪些工具、库和人"
-"群。"
+"Discuss which tools, libraries, and groups of people need to be trusted when using `gn` "
+"and `ninja`, offline `cargo`, etc."
+msgstr "讨论在使用 `gn` 和 `ninja` 以及离线 `cargo` 等时,需要信任哪些工具、库和人群。"
#: src/chromium/cargo.md
#, fuzzy
msgid ""
-"Ask students to avoid peeking at the speaker notes before completing the "
-"exercise. Assuming folks taking the course are physically together, ask them "
-"to discuss in small groups of 3-4 people."
+"Ask students to avoid peeking at the speaker notes before completing the exercise. "
+"Assuming folks taking the course are physically together, ask them to discuss in small "
+"groups of 3-4 people."
msgstr ""
-"请要求学生在完成练习前先不要看演讲者备注。假设参加课程的学员们同处一室,请让"
-"他们以 3-4 人的小组进行讨论。"
+"请要求学生在完成练习前先不要看演讲者备注。假设参加课程的学员们同处一室,请让他们以 3-4 人"
+"的小组进行讨论。"
#: src/chromium/cargo.md
msgid ""
-"Notes/hints related to the first part of the exercise (\"scenarios where "
-"Cargo may offer an advantage\"):"
+"Notes/hints related to the first part of the exercise (\"scenarios where Cargo may offer "
+"an advantage\"):"
msgstr "与第一部分练习相关的备注/提示(“Cargo 可能具有优势的场景”):"
#: src/chromium/cargo.md
#, fuzzy
msgid ""
-"It's fantastic that when writing a tool, or prototyping a part of Chromium, "
-"one has access to the rich ecosystem of crates.io libraries. There is a "
-"crate for almost anything and they are usually quite pleasant to use. "
-"(`clap` for command-line parsing, `serde` for serializing/deserializing to/"
-"from various formats, `itertools` for working with iterators, etc.)."
+"It's fantastic that when writing a tool, or prototyping a part of Chromium, one has "
+"access to the rich ecosystem of crates.io libraries. There is a crate for almost "
+"anything and they are usually quite pleasant to use. (`clap` for command-line parsing, "
+"`serde` for serializing/deserializing to/from various formats, `itertools` for working "
+"with iterators, etc.)."
msgstr ""
-"很棒的是,当我们在编写工具或对 Chromium 的某个部分进行原型设计时,可以轻松访"
-"问丰富的 crate.io 库生态系统。几乎可以找到适用于任何需求的 crate,而且非常简"
-"单易用。(例如,`clap` 用于命令行解析,`serde 用于序列化/反序列化各种格式,"
-"`itertools` 用于和迭代器搭配使用等)。"
+"很棒的是,当我们在编写工具或对 Chromium 的某个部分进行原型设计时,可以轻松访问丰富的 "
+"crate.io 库生态系统。几乎可以找到适用于任何需求的 crate,而且非常简单易用。(例如,"
+"`clap` 用于命令行解析,`serde 用于序列化/反序列化各种格式,`itertools` 用于和迭代器搭配使"
+"用等)。"
#: src/chromium/cargo.md
msgid ""
-"`cargo` makes it easy to try a library (just add a single line to `Cargo."
-"toml` and start writing code)"
+"`cargo` makes it easy to try a library (just add a single line to `Cargo.toml` and start "
+"writing code)"
msgstr ""
-"借助 `cargo`,您便可以轻松试用库(只需向 `Cargo.toml`` 添加一行代码然后开始编"
-"写即可)"
+"借助 `cargo`,您便可以轻松试用库(只需向 `Cargo.toml`` 添加一行代码然后开始编写即可)"
#: src/chromium/cargo.md
msgid ""
-"It may be worth comparing how CPAN helped make `perl` a popular choice. Or "
-"comparing with `python` + `pip`."
+"It may be worth comparing how CPAN helped make `perl` a popular choice. Or comparing "
+"with `python` + `pip`."
msgstr ""
-"不妨比较下 CPAN 是如何帮助 `perl` 成为热门之选的。或者与 `python` + `pip` 进"
-"行比较。"
+"不妨比较下 CPAN 是如何帮助 `perl` 成为热门之选的。或者与 `python` + `pip` 进行比较。"
#: src/chromium/cargo.md
#, fuzzy
msgid ""
-"Development experience is made really nice not only by core Rust tools (e.g. "
-"using `rustup` to switch to a different `rustc` version when testing a crate "
-"that needs to work on nightly, current stable, and older stable) but also by "
-"an ecosystem of third-party tools (e.g. Mozilla provides `cargo vet` for "
-"streamlining and sharing security audits; `criterion` crate gives a "
-"streamlined way to run benchmarks)."
+"Development experience is made really nice not only by core Rust tools (e.g. using "
+"`rustup` to switch to a different `rustc` version when testing a crate that needs to "
+"work on nightly, current stable, and older stable) but also by an ecosystem of third-"
+"party tools (e.g. Mozilla provides `cargo vet` for streamlining and sharing security "
+"audits; `criterion` crate gives a streamlined way to run benchmarks)."
msgstr ""
-"良好的开发体验不仅得益于核心 Rust 工具(例如,在测试需要在夜间版、当前稳定版"
-"和较旧稳定版上运行的 crate 时,使用 `rustup` 切换到不同的 `rustc` 版本),还"
-"得益于第三方工具生态系统(例如,Mozilla 提供的 `cargo vet` 用于简化和共享安全"
-"审核流程;`criterion` crate 为运行基准审核提供了便捷方式)。"
+"良好的开发体验不仅得益于核心 Rust 工具(例如,在测试需要在夜间版、当前稳定版和较旧稳定版"
+"上运行的 crate 时,使用 `rustup` 切换到不同的 `rustc` 版本),还得益于第三方工具生态系统"
+"(例如,Mozilla 提供的 `cargo vet` 用于简化和共享安全审核流程;`criterion` crate 为运行基"
+"准审核提供了便捷方式)。"
#: src/chromium/cargo.md
-msgid ""
-"`cargo` makes it easy to add a tool via `cargo install --locked cargo-vet`."
-msgstr ""
-"借助 `cargo`,您可通过 `cargo install --locked cargo-vet` 轻松添加工具。"
+msgid "`cargo` makes it easy to add a tool via `cargo install --locked cargo-vet`."
+msgstr "借助 `cargo`,您可通过 `cargo install --locked cargo-vet` 轻松添加工具。"
#: src/chromium/cargo.md
msgid "It may be worth comparing with Chrome Extensions or VScode extensions."
msgstr "不妨与 Chrome 扩展程序或 VScode 扩展程序进行比较。"
#: src/chromium/cargo.md
-msgid ""
-"Broad, generic examples of projects where `cargo` may be the right choice:"
+msgid "Broad, generic examples of projects where `cargo` may be the right choice:"
msgstr "以下是一些适合选用 `cargo`,较为宽泛的通用项目示例:"
#: src/chromium/cargo.md
#, fuzzy
msgid ""
-"Perhaps surprisingly, Rust is becoming increasingly popular in the industry "
-"for writing command line tools. The breadth and ergonomics of libraries is "
-"comparable to Python, while being more robust (thanks to the rich "
-"typesystem) and running faster (as a compiled, rather than interpreted "
-"language)."
+"Perhaps surprisingly, Rust is becoming increasingly popular in the industry for writing "
+"command line tools. The breadth and ergonomics of libraries is comparable to Python, "
+"while being more robust (thanks to the rich typesystem) and running faster (as a "
+"compiled, rather than interpreted language)."
msgstr ""
-"可能令人惊讶的是,Rust 在编写命令行工具方面越来越受到业界的欢迎。库在广度和工"
-"效学设计方面与 Python 相当,同时更稳健(得益于丰富的类型系统)且运行速度更快"
-"(作为编译语言而不是解释型语言)。"
+"可能令人惊讶的是,Rust 在编写命令行工具方面越来越受到业界的欢迎。库在广度和工效学设计方面"
+"与 Python 相当,同时更稳健(得益于丰富的类型系统)且运行速度更快(作为编译语言而不是解释"
+"型语言)。"
#: src/chromium/cargo.md
msgid ""
-"Participating in the Rust ecosystem requires using standard Rust tools like "
-"Cargo. Libraries that want to get external contributions, and want to be "
-"used outside of Chromium (e.g. in Bazel or Android/Soong build environments) "
-"should probably use Cargo."
+"Participating in the Rust ecosystem requires using standard Rust tools like Cargo. "
+"Libraries that want to get external contributions, and want to be used outside of "
+"Chromium (e.g. in Bazel or Android/Soong build environments) should probably use Cargo."
msgstr ""
-"如要加入 Rust 生态系统,必须使用 Cargo 等标准 Rust 工具。如果希望库获得外部贡"
-"献,并且能够用于除 Chromium 之外(例如用于 Bazel 或 Android/Soong 构建环境)"
-"的项目,则应该使用 Cargo。"
+"如要加入 Rust 生态系统,必须使用 Cargo 等标准 Rust 工具。如果希望库获得外部贡献,并且能够"
+"用于除 Chromium 之外(例如用于 Bazel 或 Android/Soong 构建环境)的项目,则应该使用 "
+"Cargo。"
#: src/chromium/cargo.md
msgid "Examples of Chromium-related projects that are `cargo`\\-based:"
@@ -14031,11 +13398,10 @@ msgstr "基于 `cargo`\\ 的 Chromium 相关项目示例:"
#: src/chromium/cargo.md
msgid ""
-"`serde_json_lenient` (experimented with in other parts of Google which "
-"resulted in PRs with performance improvements)"
+"`serde_json_lenient` (experimented with in other parts of Google which resulted in PRs "
+"with performance improvements)"
msgstr ""
-"`serde_json_lenient`(已在 Google 的其他部分进行了实验,结果是能使 PR 性能得"
-"到提升)"
+"`serde_json_lenient`(已在 Google 的其他部分进行了实验,结果是能使 PR 性能得到提升)"
#: src/chromium/cargo.md
msgid "Fontations libraries like `font-types`"
@@ -14043,53 +13409,51 @@ msgstr "字体库(例如 `font-types`)"
#: src/chromium/cargo.md
msgid ""
-"`gnrt` tool (we will meet it later in the course) which depends on `clap` "
-"for command-line parsing and on `toml` for configuration files."
+"`gnrt` tool (we will meet it later in the course) which depends on `clap` for command-"
+"line parsing and on `toml` for configuration files."
msgstr ""
-"`gnrt` 工具(我们将在本课程稍后的部分中加以介绍)使用 `clap` 进行命令行解析,"
-"使用 `toml` 处理配置文件。"
+"`gnrt` 工具(我们将在本课程稍后的部分中加以介绍)使用 `clap` 进行命令行解析,使用 `toml` "
+"处理配置文件。"
#: src/chromium/cargo.md
msgid ""
-"Disclaimer: a unique reason for using `cargo` was unavailability of `gn` "
-"when building and bootstrapping Rust standard library when building Rust "
-"toolchain.)"
+"Disclaimer: a unique reason for using `cargo` was unavailability of `gn` when building "
+"and bootstrapping Rust standard library when building Rust toolchain.)"
msgstr ""
-"免责声明:必须使用 `cargo` 的一个原因是在构建 Rust 工具链时,无法使用 `gn` 来"
-"构建和引导 Rust 标准库。)"
+"免责声明:必须使用 `cargo` 的一个原因是在构建 Rust 工具链时,无法使用 `gn` 来构建和引导 "
+"Rust 标准库。)"
#: src/chromium/cargo.md
msgid ""
-"`run_gnrt.py` uses Chromium's copy of `cargo` and `rustc`. `gnrt` depends on "
-"third-party libraries downloaded from the internet, by `run_gnrt.py` asks "
-"`cargo` that only `--locked` content is allowed via `Cargo.lock`.)"
+"`run_gnrt.py` uses Chromium's copy of `cargo` and `rustc`. `gnrt` depends on third-party "
+"libraries downloaded from the internet, by `run_gnrt.py` asks `cargo` that only `--"
+"locked` content is allowed via `Cargo.lock`.)"
msgstr ""
-"`run_gnrt.py` 使用 Chromium 的 `cargo` 和 `rustc` 副本。虽然 `gnrt` 依赖于从"
-"互联网下载的第三方库,但 `run_gnrt.py` 规定 `cargo` 仅允许使用 `Cargo.lock` "
-"中以 `--locked` 标记的内容。"
+"`run_gnrt.py` 使用 Chromium 的 `cargo` 和 `rustc` 副本。虽然 `gnrt` 依赖于从互联网下载的"
+"第三方库,但 `run_gnrt.py` 规定 `cargo` 仅允许使用 `Cargo.lock` 中以 `--locked` 标记的内"
+"容。"
#: src/chromium/cargo.md
msgid ""
-"Students may identify the following items as being implicitly or explicitly "
-"trusted:"
+"Students may identify the following items as being implicitly or explicitly trusted:"
msgstr "学生可将以下内容认定为隐式信任或明确信任:"
#: src/chromium/cargo.md
msgid ""
-"`rustc` (the Rust compiler) which in turn depends on the LLVM libraries, the "
-"Clang compiler, the `rustc` sources (fetched from GitHub, reviewed by Rust "
-"compiler team), binary Rust compiler downloaded for bootstrapping"
+"`rustc` (the Rust compiler) which in turn depends on the LLVM libraries, the Clang "
+"compiler, the `rustc` sources (fetched from GitHub, reviewed by Rust compiler team), "
+"binary Rust compiler downloaded for bootstrapping"
msgstr ""
-"`rustc`(Rust 编译器)则依赖于 LLVM 库、Clang 编译器、“rustc”源代码(从 "
-"GitHub 获取,并由 Rust 编译器团队审核)、为引导而下载的二进制 Rust 编译器"
+"`rustc`(Rust 编译器)则依赖于 LLVM 库、Clang 编译器、“rustc”源代码(从 GitHub 获取,并"
+"由 Rust 编译器团队审核)、为引导而下载的二进制 Rust 编译器"
#: src/chromium/cargo.md
msgid ""
-"`rustup` (it may be worth pointing out that `rustup` is developed under the "
-"umbrella of the https://github.com/rust-lang/ organization - same as `rustc`)"
+"`rustup` (it may be worth pointing out that `rustup` is developed under the umbrella of "
+"the https://github.com/rust-lang/ organization - same as `rustc`)"
msgstr ""
-"`rustup`(值得注意的是,`rustup` 是在 https://github.com/rust-lang/ 保护下组"
-"织开发的,与 `rustc` 相同。)"
+"`rustup`(值得注意的是,`rustup` 是在 https://github.com/rust-lang/ 保护下组织开发的,与 "
+"`rustc` 相同。)"
#: src/chromium/cargo.md
msgid "`cargo`, `rustfmt`, etc."
@@ -14097,11 +13461,11 @@ msgstr "`cargo`、`rustfmt` 等"
#: src/chromium/cargo.md
msgid ""
-"Various internal infrastructure (bots that build `rustc`, system for "
-"distributing the prebuilt toolchain to Chromium engineers, etc.)"
+"Various internal infrastructure (bots that build `rustc`, system for distributing the "
+"prebuilt toolchain to Chromium engineers, etc.)"
msgstr ""
-"各种内部基础架构(用于构建 `rustc` 的聊天机器人、用于将预构建工具链分发给 "
-"Chromium 工程师的系统等。)"
+"各种内部基础架构(用于构建 `rustc` 的聊天机器人、用于将预构建工具链分发给 Chromium 工程师"
+"的系统等。)"
#: src/chromium/cargo.md
msgid "Cargo tools like `cargo audit`, `cargo vet`, etc."
@@ -14109,10 +13473,8 @@ msgstr "`cargo Audit`、`cargo vet` 等 Cargo 工具"
#: src/chromium/cargo.md
msgid ""
-"Rust libraries vendored into `//third_party/rust` (audited by "
-"security@chromium.org)"
-msgstr ""
-"包含到 `//third_party/rust` 的 Rust 库(由 security@chromium.org 进行审核)"
+"Rust libraries vendored into `//third_party/rust` (audited by security@chromium.org)"
+msgstr "包含到 `//third_party/rust` 的 Rust 库(由 security@chromium.org 进行审核)"
#: src/chromium/cargo.md
msgid "Other Rust libraries (some niche, some quite popular and commonly used)"
@@ -14124,60 +13486,48 @@ msgstr "Chromium Rust 政策"
#: src/chromium/policy.md
msgid ""
-"Chromium does not yet allow first-party Rust except in rare cases as "
-"approved by Chromium's [Area Tech Leads](https://source.chromium.org/"
-"chromium/chromium/src/+/main:ATL_OWNERS)."
+"Chromium does not yet allow first-party Rust except in rare cases as approved by "
+"Chromium's [Area Tech Leads](https://source.chromium.org/chromium/chromium/src/+/main:"
+"ATL_OWNERS)."
msgstr ""
-"Chromium 尚不支持使用第一方 Rust,除非是经过 [区域技术主管](https://source."
-"chromium.org/chromium/chromium/src/+/main:ATL_OWNERS) 批准的特殊情况。"
+"Chromium 尚不支持使用第一方 Rust,除非是经过 [区域技术主管](https://source.chromium.org/"
+"chromium/chromium/src/+/main:ATL_OWNERS) 批准的特殊情况。"
#: src/chromium/policy.md
msgid ""
-"Chromium's policy on third party libraries is outlined [here](https://"
-"chromium.googlesource.com/chromium/src/+/main/docs/adding_to_third_party."
-"md#rust) - Rust is allowed for third party libraries under various "
-"circumstances, including if they're the best option for performance or for "
-"security."
+"Chromium's policy on third party libraries is outlined [here](https://chromium."
+"googlesource.com/chromium/src/+/main/docs/adding_to_third_party.md#rust) - Rust is "
+"allowed for third party libraries under various circumstances, including if they're the "
+"best option for performance or for security."
msgstr ""
-"有关 Chromium 的第三方库政策,请参阅 [此处](https://chromium.googlesource."
-"com/chromium/src/+/main/docs/adding_to_third_party.md#rust)。根据该这些政策,"
-"在很多情况下允许将 Rust 作为第三方库使用,包括无论是在性能还是安全方面,它们"
-"都是理想之选。"
+"有关 Chromium 的第三方库政策,请参阅 [此处](https://chromium.googlesource.com/chromium/"
+"src/+/main/docs/adding_to_third_party.md#rust)。根据该这些政策,在很多情况下允许将 Rust "
+"作为第三方库使用,包括无论是在性能还是安全方面,它们都是理想之选。"
#: src/chromium/policy.md
msgid ""
-"Very few Rust libraries directly expose a C/C++ API, so that means that "
-"nearly all such libraries will require a small amount of first-party glue "
-"code."
+"Very few Rust libraries directly expose a C/C++ API, so that means that nearly all such "
+"libraries will require a small amount of first-party glue code."
msgstr ""
-"鲜少有 Rust 库会直接公开 C/C++ API,这意味着几乎所有此类库都需要使用少量的第"
-"一方粘合代码。"
+"鲜少有 Rust 库会直接公开 C/C++ API,这意味着几乎所有此类库都需要使用少量的第一方粘合代"
+"码。"
#: src/chromium/policy.md
#, fuzzy
msgid ""
"```bob\n"
"\"C++\" Rust\n"
-".- - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - "
-"-.\n"
+".- - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.\n"
": : : :\n"
-": Existing Chromium : : Chromium Rust Existing "
-"Rust :\n"
-": \"C++\" : : \"wrapper\" "
-"crate :\n"
-": +---------------+ : : +----------------+ +-------------"
-"+ :\n"
-": | | : : | | | "
-"| :\n"
-": | o-----+-+-----------+-+-> o-+----------+--> "
-"| :\n"
-": | | : Language : | | Crate | "
-"| :\n"
-": +---------------+ : boundary : +----------------+ API +-------------"
-"+ :\n"
+": Existing Chromium : : Chromium Rust Existing Rust :\n"
+": \"C++\" : : \"wrapper\" crate :\n"
+": +---------------+ : : +----------------+ +-------------+ :\n"
+": | | : : | | | | :\n"
+": | o-----+-+-----------+-+-> o-+----------+--> | :\n"
+": | | : Language : | | Crate | | :\n"
+": +---------------+ : boundary : +----------------+ API +-------------+ :\n"
": : : :\n"
-"`- - - - - - - - - -' `- - - - - - - - - - - - - - - - - - - - - - "
-"-'\n"
+"`- - - - - - - - - -' `- - - - - - - - - - - - - - - - - - - - - - -'\n"
"```"
msgstr ""
"```bob\n"
@@ -14203,11 +13553,11 @@ msgstr ""
#: src/chromium/policy.md
msgid ""
-"First-party Rust glue code for a particular third-party crate should "
-"normally be kept in `third_party/rust///wrapper`."
+"First-party Rust glue code for a particular third-party crate should normally be kept in "
+"`third_party/rust///wrapper`."
msgstr ""
-"特定第三方 crate 的第一方 Rust 粘合代码通常应放在 `third_party/rust//"
-"/wrapper` 目录中。"
+"特定第三方 crate 的第一方 Rust 粘合代码通常应放在 `third_party/rust///"
+"wrapper` 目录中。"
#: src/chromium/policy.md
msgid "Because of this, today's course will be heavily focused on:"
@@ -14232,12 +13582,11 @@ msgstr "构建规则"
#: src/chromium/build-rules.md
msgid ""
-"Rust code is usually built using `cargo`. Chromium builds with `gn` and "
-"`ninja` for efficiency --- its static rules allow maximum parallelism. Rust "
-"is no exception."
+"Rust code is usually built using `cargo`. Chromium builds with `gn` and `ninja` for "
+"efficiency --- its static rules allow maximum parallelism. Rust is no exception."
msgstr ""
-"Rust 代码通常使用 `cargo` 构建而成。为提高效率,Chromium 使用 `gn` 和 "
-"`ninja` 进行构建,其静态规则支持实现最大程度的并行处理。Rust 也不例外。"
+"Rust 代码通常使用 `cargo` 构建而成。为提高效率,Chromium 使用 `gn` 和 `ninja` 进行构建,"
+"其静态规则支持实现最大程度的并行处理。Rust 也不例外。"
#: src/chromium/build-rules.md
#, fuzzy
@@ -14245,8 +13594,7 @@ msgid "Adding Rust code to Chromium"
msgstr "在 Chromium 中添加 Rust 代码"
#: src/chromium/build-rules.md
-msgid ""
-"In some existing Chromium `BUILD.gn` file, declare a `rust_static_library`:"
+msgid "In some existing Chromium `BUILD.gn` file, declare a `rust_static_library`:"
msgstr "在一些现有的 Chromium `BUILD.gn` 文件中,声明 `rust_static_library`:"
#: src/chromium/build-rules.md
@@ -14271,43 +13619,39 @@ msgstr ""
#: src/chromium/build-rules.md
msgid ""
-"You can also add `deps` on other Rust targets. Later we'll use this to "
-"depend upon third party code."
-msgstr ""
-"您还可以在其他 Rust 目标上添加 `deps`。稍后,我们通过该操作来使用第三方代码。"
+"You can also add `deps` on other Rust targets. Later we'll use this to depend upon third "
+"party code."
+msgstr "您还可以在其他 Rust 目标上添加 `deps`。稍后,我们通过该操作来使用第三方代码。"
#: src/chromium/build-rules.md
msgid ""
-"You must specify _both_ the crate root, _and_ a full list of sources. The "
-"`crate_root` is the file given to the Rust compiler representing the root "
-"file of the compilation unit --- typically `lib.rs`. `sources` is a complete "
-"list of all source files which `ninja` needs in order to determine when "
-"rebuilds are necessary."
+"You must specify _both_ the crate root, _and_ a full list of sources. The `crate_root` "
+"is the file given to the Rust compiler representing the root file of the compilation "
+"unit --- typically `lib.rs`. `sources` is a complete list of all source files which "
+"`ninja` needs in order to determine when rebuilds are necessary."
msgstr ""
-"您必须 _同时_ 指定 crate 根目录 _和_ 完整的源代码列表。`crate_root` 是供 "
-"Rust 编译器使用的文件,表示编译单元的根文件,通常为 `lib.rs`。`sources` 是所"
-"有源文件的完整列表,`ninja` 需要用它来确定何时该进行重新构建。"
+"您必须 _同时_ 指定 crate 根目录 _和_ 完整的源代码列表。`crate_root` 是供 Rust 编译器使用"
+"的文件,表示编译单元的根文件,通常为 `lib.rs`。`sources` 是所有源文件的完整列表,`ninja` "
+"需要用它来确定何时该进行重新构建。"
#: src/chromium/build-rules.md
msgid ""
-"(There's no such thing as a Rust `source_set`, because in Rust, an entire "
-"crate is a compilation unit. A `static_library` is the smallest unit.)"
+"(There's no such thing as a Rust `source_set`, because in Rust, an entire crate is a "
+"compilation unit. A `static_library` is the smallest unit.)"
msgstr ""
-"(在 Rust 中,并不存在所谓的 Rust `source_set`,因为整个 crate 就是一个编译单"
-"元。`static_library` 是最小的单元。)"
+"(在 Rust 中,并不存在所谓的 Rust `source_set`,因为整个 crate 就是一个编译单元。"
+"`static_library` 是最小的单元。)"
#: src/chromium/build-rules.md
msgid ""
-"Students might be wondering why we need a gn template, rather than using "
-"[gn's built-in support for Rust static libraries](https://gn.googlesource."
-"com/gn/+/main/docs/reference.md#func_static_library). The answer is that "
-"this template provides support for CXX interop, Rust features, and unit "
-"tests, some of which we'll use later."
+"Students might be wondering why we need a gn template, rather than using [gn's built-in "
+"support for Rust static libraries](https://gn.googlesource.com/gn/+/main/docs/reference."
+"md#func_static_library). The answer is that this template provides support for CXX "
+"interop, Rust features, and unit tests, some of which we'll use later."
msgstr ""
-"学生可能会疑惑为何我们需要 gn 模板,而不使用 [gn 内置的 Rust 静态库支持]"
-"(https://gn.googlesource.com/gn/+/main/docs/reference."
-"md#func_static_library) 进行操作。原因是此模板支持 CXX 互操作性、各项 Rust 功"
-"能以及单元测试,我们稍后便会用到其中的一些功能。"
+"学生可能会疑惑为何我们需要 gn 模板,而不使用 [gn 内置的 Rust 静态库支持](https://gn."
+"googlesource.com/gn/+/main/docs/reference.md#func_static_library) 进行操作。原因是此模板"
+"支持 CXX 互操作性、各项 Rust 功能以及单元测试,我们稍后便会用到其中的一些功能。"
#: src/chromium/build-rules/unsafe.md
#, fuzzy
@@ -14316,14 +13660,13 @@ msgstr "添加 `unsafe` Rust 代码"
#: src/chromium/build-rules/unsafe.md
msgid ""
-"Unsafe Rust code is forbidden in `rust_static_library` by default --- it "
-"won't compile. If you need unsafe Rust code, add `allow_unsafe = true` to "
-"the gn target. (Later in the course we'll see circumstances where this is "
-"necessary.)"
+"Unsafe Rust code is forbidden in `rust_static_library` by default --- it won't compile. "
+"If you need unsafe Rust code, add `allow_unsafe = true` to the gn target. (Later in the "
+"course we'll see circumstances where this is necessary.)"
msgstr ""
-"默认情况下,禁止在 `rust_static_library` 中使用不安全的 Rust 代码,因为此类代"
-"码无法编译。如需使用不安全的 Rust 代码,请将 `allow_unsafe = true` 添加到 gn "
-"目标中。(在本课程的稍后部分,我们将介绍在哪些情形下必须这样做。)"
+"默认情况下,禁止在 `rust_static_library` 中使用不安全的 Rust 代码,因为此类代码无法编译。"
+"如需使用不安全的 Rust 代码,请将 `allow_unsafe = true` 添加到 gn 目标中。(在本课程的稍后"
+"部分,我们将介绍在哪些情形下必须这样做。)"
#: src/chromium/build-rules/unsafe.md
msgid ""
@@ -14389,24 +13732,20 @@ msgstr ""
#: src/chromium/build-rules/vscode.md
msgid ""
-"Types are elided in Rust code, which makes a good IDE even more useful than "
-"for C++. Visual Studio code works well for Rust in Chromium. To use it,"
+"Types are elided in Rust code, which makes a good IDE even more useful than for C++. "
+"Visual Studio code works well for Rust in Chromium. To use it,"
msgstr ""
-"在 Rust 代码中,通常会省略类型,这使得拥有强大的 IDE 甚至比 C++ 更为有用。"
-"Visual Studio Code 非常适用于在 Chromium 中处理 Rust 代码。如需使用此功能,"
+"在 Rust 代码中,通常会省略类型,这使得拥有强大的 IDE 甚至比 C++ 更为有用。Visual Studio "
+"Code 非常适用于在 Chromium 中处理 Rust 代码。如需使用此功能,"
#: src/chromium/build-rules/vscode.md
msgid ""
-"Ensure your VSCode has the `rust-analyzer` extension, not earlier forms of "
-"Rust support"
+"Ensure your VSCode has the `rust-analyzer` extension, not earlier forms of Rust support"
msgstr ""
-"请确保您的 VSCode 安装了 `rust-analyzer` 扩展程序,而不是较早版本的 Rust 支持"
-"插件。"
+"请确保您的 VSCode 安装了 `rust-analyzer` 扩展程序,而不是较早版本的 Rust 支持插件。"
#: src/chromium/build-rules/vscode.md
-msgid ""
-"`gn gen out/Debug --export-rust-project` (or equivalent for your output "
-"directory)"
+msgid "`gn gen out/Debug --export-rust-project` (or equivalent for your output directory)"
msgstr "`gn gen out/Debug --export-rust-project`(或输出目录的等效项)"
#: src/chromium/build-rules/vscode.md
@@ -14415,19 +13754,18 @@ msgstr "`In -s out/Debug/rust-project.json rust-project.json`"
#: src/chromium/build-rules/vscode.md
msgid ""
-"A demo of some of the code annotation and exploration features of rust-"
-"analyzer might be beneficial if the audience are naturally skeptical of IDEs."
+"A demo of some of the code annotation and exploration features of rust-analyzer might be "
+"beneficial if the audience are naturally skeptical of IDEs."
msgstr ""
-"如果受众群体对 IDE 持有怀疑态度,不妨演示下 rust-analyzer 的部分代码注解和探"
-"索功能,或许能让他们改观。"
+"如果受众群体对 IDE 持有怀疑态度,不妨演示下 rust-analyzer 的部分代码注解和探索功能,或许"
+"能让他们改观。"
#: src/chromium/build-rules/vscode.md
msgid ""
-"The following steps may help with the demo (but feel free to instead use a "
-"piece of Chromium-related Rust that you are most familiar with):"
+"The following steps may help with the demo (but feel free to instead use a piece of "
+"Chromium-related Rust that you are most familiar with):"
msgstr ""
-"以下步骤可能会对演示有所帮助(但您也可以选用一段最为熟悉的 Chromium 相关 "
-"Rust 代码):"
+"以下步骤可能会对演示有所帮助(但您也可以选用一段最为熟悉的 Chromium 相关 Rust 代码):"
#: src/chromium/build-rules/vscode.md
msgid "Open `components/qr_code_generator/qr_code_generator_ffi_glue.rs`"
@@ -14438,50 +13776,44 @@ msgid ""
"Place the cursor over the `QrCode::new` call (around line 26) in "
"\\`qr_code_generator_ffi_glue.rs"
msgstr ""
-"将光标置于 \\`qr_code_generator_ffi_glue.rs 中的 `QrCode::new` 调用(大约第 "
-"26 行)上"
+"将光标置于 \\`qr_code_generator_ffi_glue.rs 中的 `QrCode::new` 调用(大约第 26 行)上"
#: src/chromium/build-rules/vscode.md
#, fuzzy
-msgid ""
-"Demo **show documentation** (typical bindings: vscode = ctrl k i; vim/CoC = "
-"K)."
-msgstr ""
-"演示 **show documentation**(典型绑定:vscode = ctrl ki;vim/CoC = K)。"
+msgid "Demo **show documentation** (typical bindings: vscode = ctrl k i; vim/CoC = K)."
+msgstr "演示 **show documentation**(典型绑定:vscode = ctrl ki;vim/CoC = K)。"
#: src/chromium/build-rules/vscode.md
#, fuzzy
msgid ""
-"Demo **go to definition** (typical bindings: vscode = F12; vim/CoC = g d). "
-"(This will take you to `//third_party/rust/.../qr_code-.../src/lib.rs`.)"
+"Demo **go to definition** (typical bindings: vscode = F12; vim/CoC = g d). (This will "
+"take you to `//third_party/rust/.../qr_code-.../src/lib.rs`.)"
msgstr ""
-"演示 **go to definition**(典型绑定:vscode = F12;vim/CoC = gd)。(然后您会"
-"前往 `//third_party/rust/.../qr_code-.../src/lib.rs`。)"
+"演示 **go to definition**(典型绑定:vscode = F12;vim/CoC = gd)。(然后您会前往 `//"
+"third_party/rust/.../qr_code-.../src/lib.rs`。)"
#: src/chromium/build-rules/vscode.md
msgid ""
-"Demo **outline** and navigate to the `QrCode::with_bits` method (around line "
-"164; the outline is in the file explorer pane in vscode; typical vim/CoC "
-"bindings = space o)"
+"Demo **outline** and navigate to the `QrCode::with_bits` method (around line 164; the "
+"outline is in the file explorer pane in vscode; typical vim/CoC bindings = space o)"
msgstr ""
-"演示 **outline** 并前往 `QrCode::with_bits` 方法(大约第 164 行;大纲位于 "
-"vscode 中的文件资源管理器窗格中;典型绑定:vim/CoC = space o)"
+"演示 **outline** 并前往 `QrCode::with_bits` 方法(大约第 164 行;大纲位于 vscode 中的文件"
+"资源管理器窗格中;典型绑定:vim/CoC = space o)"
#: src/chromium/build-rules/vscode.md
msgid ""
-"Demo **type annotations** (there are quote a few nice examples in the "
-"`QrCode::with_bits` method)"
-msgstr ""
-"演示 **type annotations**(`QrCode::with_bits` 方法中提供了一些很好的示例)"
+"Demo **type annotations** (there are quote a few nice examples in the `QrCode::"
+"with_bits` method)"
+msgstr "演示 **type annotations**(`QrCode::with_bits` 方法中提供了一些很好的示例)"
#: src/chromium/build-rules/vscode.md
msgid ""
-"It may be worth pointing out that `gn gen ... --export-rust-project` will "
-"need to be rerun after editing `BUILD.gn` files (which we will do a few "
-"times throughout the exercises in this session)."
+"It may be worth pointing out that `gn gen ... --export-rust-project` will need to be "
+"rerun after editing `BUILD.gn` files (which we will do a few times throughout the "
+"exercises in this session)."
msgstr ""
-"值得注意的是,修改 `BUILD.gn` 文件后,需要重新运行 `gn gen ... --export-rust-"
-"project`(我们将在本课程的练习中多次执行该操作)。"
+"值得注意的是,修改 `BUILD.gn` 文件后,需要重新运行 `gn gen ... --export-rust-project`(我"
+"们将在本课程的练习中多次执行该操作)。"
#: src/exercises/chromium/build-rules.md
#, fuzzy
@@ -14489,51 +13821,45 @@ msgid "Build rules exercise"
msgstr "构建规则练习"
#: src/exercises/chromium/build-rules.md
-msgid ""
-"In your Chromium build, add a new Rust target to `//ui/base/BUILD.gn` "
-"containing:"
-msgstr ""
-"在 Chromium build 中,向 `//ui/base/BUILD.gn` 添加新的 Rust 目标,其中包含:"
+msgid "In your Chromium build, add a new Rust target to `//ui/base/BUILD.gn` containing:"
+msgstr "在 Chromium build 中,向 `//ui/base/BUILD.gn` 添加新的 Rust 目标,其中包含:"
#: src/exercises/chromium/build-rules.md
msgid ""
-"**Important**: note that `no_mangle` here is considered a type of unsafety "
-"by the Rust compiler, so you'll need to to allow unsafe code in your `gn` "
-"target."
+"**Important**: note that `no_mangle` here is considered a type of unsafety by the Rust "
+"compiler, so you'll need to to allow unsafe code in your `gn` target."
msgstr ""
-"**重要提示**:请注意,在此处使用 `no_mangle` 会被Rust 编译器视为一种不安全行"
-"为,因此需要允许在“gn”目标中使用不安全的代码。"
+"**重要提示**:请注意,在此处使用 `no_mangle` 会被Rust 编译器视为一种不安全行为,因此需要"
+"允许在“gn”目标中使用不安全的代码。"
#: src/exercises/chromium/build-rules.md
msgid ""
-"Add this new Rust target as a dependency of `//ui/base:base`. Declare this "
-"function at the top of `ui/base/resource/resource_bundle.cc` (later, we'll "
-"see how this can be automated by bindings generation tools):"
+"Add this new Rust target as a dependency of `//ui/base:base`. Declare this function at "
+"the top of `ui/base/resource/resource_bundle.cc` (later, we'll see how this can be "
+"automated by bindings generation tools):"
msgstr ""
"将这个新的 Rust 目标添加为 `//ui/base:base` 的依赖项。在 `ui/base/resource/"
-"resource_bundle.cc` 顶部声明此函数(稍后,我们将介绍如何通过绑定生成工具来自"
-"动执行此操作):"
+"resource_bundle.cc` 顶部声明此函数(稍后,我们将介绍如何通过绑定生成工具来自动执行此操"
+"作):"
#: src/exercises/chromium/build-rules.md
msgid ""
-"Call this function from somewhere in `ui/base/resource/resource_bundle.cc` - "
-"we suggest the top of `ResourceBundle::MaybeMangleLocalizedString`. Build "
-"and run Chromium, and ensure that \"Hello from Rust!\" is printed lots of "
-"times."
+"Call this function from somewhere in `ui/base/resource/resource_bundle.cc` - we suggest "
+"the top of `ResourceBundle::MaybeMangleLocalizedString`. Build and run Chromium, and "
+"ensure that \"Hello from Rust!\" is printed lots of times."
msgstr ""
-"从 `ui/base/resource/resource_bundle.cc` 中的某个位置调用此函数,我们建议在"
-"从 `ResourceBundle::MaybeMangleLocalizedString` 的顶部调用此函数。构建并运行 "
-"Chromium,并确保多次显示 \"Hello from Rust!\"。"
+"从 `ui/base/resource/resource_bundle.cc` 中的某个位置调用此函数,我们建议在从 "
+"`ResourceBundle::MaybeMangleLocalizedString` 的顶部调用此函数。构建并运行 Chromium,并确"
+"保多次显示 \"Hello from Rust!\"。"
#: src/exercises/chromium/build-rules.md
msgid ""
-"If you use VSCode, now set up Rust to work well in VSCode. It will be useful "
-"in subsequent exercises. If you've succeeded, you will be able to use right-"
-"click \"Go to definition\" on `println!`."
+"If you use VSCode, now set up Rust to work well in VSCode. It will be useful in "
+"subsequent exercises. If you've succeeded, you will be able to use right-click \"Go to "
+"definition\" on `println!`."
msgstr ""
-"如果您使用 VSCode,现在就请设置 Rust,以便其能在 VSCode 中正常运行。这对后续"
-"练习会很有帮助。如果操作成功,则可使用右键点击 `println!` 上的 \"Go to "
-"definition\"。"
+"如果您使用 VSCode,现在就请设置 Rust,以便其能在 VSCode 中正常运行。这对后续练习会很有帮"
+"助。如果操作成功,则可使用右键点击 `println!` 上的 \"Go to definition\"。"
#: src/exercises/chromium/build-rules.md
#: src/exercises/chromium/interoperability-with-cpp.md
@@ -14542,157 +13868,142 @@ msgstr "如何获取帮助"
#: src/exercises/chromium/build-rules.md
msgid ""
-"The options available to the [`rust_static_library` gn template](https://"
-"source.chromium.org/chromium/chromium/src/+/main:build/rust/"
-"rust_static_library.gni;l=16)"
+"The options available to the [`rust_static_library` gn template](https://source.chromium."
+"org/chromium/chromium/src/+/main:build/rust/rust_static_library.gni;l=16)"
msgstr ""
-"适用于 [`rust_static_library` gn 模板] 的选项 (https://source.chromium.org/"
-"chromium/chromium/src/+/main:build/rust/rust_static_library.gni;l=16)"
+"适用于 [`rust_static_library` gn 模板] 的选项 (https://source.chromium.org/chromium/"
+"chromium/src/+/main:build/rust/rust_static_library.gni;l=16)"
#: src/exercises/chromium/build-rules.md
msgid ""
-"Information about [`#[no_mangle]`](https://doc.rust-lang.org/beta/reference/"
-"abi.html#the-no_mangle-attribute)"
+"Information about [`#[no_mangle]`](https://doc.rust-lang.org/beta/reference/abi.html#the-"
+"no_mangle-attribute)"
msgstr ""
-"关于 [`#[no_mangle]`] 的详细信息 (https://doc.rust-lang.org/beta/reference/"
-"abi.html#the-no_mangle-attribute)"
+"关于 [`#[no_mangle]`] 的详细信息 (https://doc.rust-lang.org/beta/reference/abi.html#the-"
+"no_mangle-attribute)"
#: src/exercises/chromium/build-rules.md
msgid ""
-"Information about [`extern \"C\"`](https://doc.rust-lang.org/std/keyword."
-"extern.html)"
+"Information about [`extern \"C\"`](https://doc.rust-lang.org/std/keyword.extern.html)"
msgstr ""
-"关于 [`extern \"C\"`] 的详细信息 (https://doc.rust-lang.org/std/keyword."
-"extern.html)"
+"关于 [`extern \"C\"`] 的详细信息 (https://doc.rust-lang.org/std/keyword.extern.html)"
#: src/exercises/chromium/build-rules.md
msgid ""
-"Information about gn's [`--export-rust-project`](https://gn.googlesource.com/"
-"gn/+/main/docs/reference.md#compilation-database) switch"
+"Information about gn's [`--export-rust-project`](https://gn.googlesource.com/gn/+/main/"
+"docs/reference.md#compilation-database) switch"
msgstr ""
-"关于 gn 的 [`--export-rust-project`] 开关的详细信息 (https://gn.googlesource."
-"com/gn/+/main/docs/reference.md#compilation-database) "
+"关于 gn 的 [`--export-rust-project`] 开关的详细信息 (https://gn.googlesource.com/gn/+/"
+"main/docs/reference.md#compilation-database) "
#: src/exercises/chromium/build-rules.md
msgid ""
-"[How to install rust-analyzer in VSCode](https://code.visualstudio.com/docs/"
-"languages/rust)"
+"[How to install rust-analyzer in VSCode](https://code.visualstudio.com/docs/languages/"
+"rust)"
msgstr ""
-"[如何在 VSCode 中安装 rust-analyzer](https://code.visualstudio.com/docs/"
-"languages/rust)"
+"[如何在 VSCode 中安装 rust-analyzer](https://code.visualstudio.com/docs/languages/rust)"
#: src/exercises/chromium/build-rules.md
msgid ""
-"This example is unusual because it boils down to the lowest-common-"
-"denominator interop language, C. Both C++ and Rust can natively declare and "
-"call C ABI functions. Later in the course, we'll connect C++ directly to "
-"Rust."
+"This example is unusual because it boils down to the lowest-common-denominator interop "
+"language, C. Both C++ and Rust can natively declare and call C ABI functions. Later in "
+"the course, we'll connect C++ directly to Rust."
msgstr ""
-"此示例很独特,因为其归根结底是最通用的互操作语言,即 C 语言。C++ 和 Rust 本身"
-"都可以声明和调用 C ABI 函数。在本课程的稍后部分,我们会直接将 C++ 和 Rust 关"
-"联起来。"
+"此示例很独特,因为其归根结底是最通用的互操作语言,即 C 语言。C++ 和 Rust 本身都可以声明和"
+"调用 C ABI 函数。在本课程的稍后部分,我们会直接将 C++ 和 Rust 关联起来。"
#: src/exercises/chromium/build-rules.md
msgid ""
-"`allow_unsafe = true` is required here because `#[no_mangle]` might allow "
-"Rust to generate two functions with the same name, and Rust can no longer "
-"guarantee that the right one is called."
+"`allow_unsafe = true` is required here because `#[no_mangle]` might allow Rust to "
+"generate two functions with the same name, and Rust can no longer guarantee that the "
+"right one is called."
msgstr ""
-"此处需要使用 `allow_unsafe = true`,因为 `#[no_mangle]` 可能会支持 Rust 生成"
-"两个同名函数,而 Rust 无法保证会调用正确的函数。"
+"此处需要使用 `allow_unsafe = true`,因为 `#[no_mangle]` 可能会支持 Rust 生成两个同名函"
+"数,而 Rust 无法保证会调用正确的函数。"
#: src/exercises/chromium/build-rules.md
msgid ""
-"If you need a pure Rust executable, you can also do that using the "
-"`rust_executable` gn template."
-msgstr ""
-"如果需要纯 Rust 可执行文件,也可以使用 `rust_executable` gn 模板执行此操作。"
+"If you need a pure Rust executable, you can also do that using the `rust_executable` gn "
+"template."
+msgstr "如果需要纯 Rust 可执行文件,也可以使用 `rust_executable` gn 模板执行此操作。"
#: src/chromium/testing.md
msgid ""
-"Rust community typically authors unit tests in a module placed in the same "
-"source file as the code being tested. This was covered [earlier](../testing."
-"md) in the course and looks like this:"
+"Rust community typically authors unit tests in a module placed in the same source file "
+"as the code being tested. This was covered [earlier](../testing.md) in the course and "
+"looks like this:"
msgstr ""
#: src/chromium/testing.md
msgid ""
-"In Chromium we place unit tests in a separate source file and we continue to "
-"follow this practice for Rust --- this makes tests consistently discoverable "
-"and helps to avoid rebuilding `.rs` files a second time (in the `test` "
-"configuration)."
+"In Chromium we place unit tests in a separate source file and we continue to follow this "
+"practice for Rust --- this makes tests consistently discoverable and helps to avoid "
+"rebuilding `.rs` files a second time (in the `test` configuration)."
msgstr ""
#: src/chromium/testing.md
-msgid ""
-"This results in the following options for testing Rust code in Chromium:"
+msgid "This results in the following options for testing Rust code in Chromium:"
msgstr ""
#: src/chromium/testing.md
-msgid ""
-"Native Rust tests (i.e. `#[test]`). Discouraged outside of `//third_party/"
-"rust`."
+msgid "Native Rust tests (i.e. `#[test]`). Discouraged outside of `//third_party/rust`."
msgstr ""
#: src/chromium/testing.md
msgid ""
-"`gtest` tests authored in C++ and exercising Rust via FFI calls. Sufficient "
-"when Rust code is just a thin FFI layer and the existing unit tests provide "
-"sufficient coverage for the feature."
+"`gtest` tests authored in C++ and exercising Rust via FFI calls. Sufficient when Rust "
+"code is just a thin FFI layer and the existing unit tests provide sufficient coverage "
+"for the feature."
msgstr ""
#: src/chromium/testing.md
msgid ""
-"`gtest` tests authored in Rust and using the crate under test through its "
-"public API (using `pub mod for_testing { ... }` if needed). This is the "
-"subject of the next few slides."
+"`gtest` tests authored in Rust and using the crate under test through its public API "
+"(using `pub mod for_testing { ... }` if needed). This is the subject of the next few "
+"slides."
msgstr ""
#: src/chromium/testing.md
msgid ""
-"Mention that native Rust tests of third-party crates should eventually be "
-"exercised by Chromium bots. (Such testing is needed rarely --- only after "
-"adding or updating third-party crates.)"
+"Mention that native Rust tests of third-party crates should eventually be exercised by "
+"Chromium bots. (Such testing is needed rarely --- only after adding or updating third-"
+"party crates.)"
msgstr ""
#: src/chromium/testing.md
-msgid ""
-"Some examples may help illustrate when C++ `gtest` vs Rust `gtest` should be "
-"used:"
+msgid "Some examples may help illustrate when C++ `gtest` vs Rust `gtest` should be used:"
msgstr ""
#: src/chromium/testing.md
msgid ""
-"QR has very little functionality in the first-party Rust layer (it's just a "
-"thin FFI glue) and therefore uses the existing C++ unit tests for testing "
-"both the C++ and the Rust implementation (parameterizing the tests so they "
-"enable or disable Rust using a `ScopedFeatureList`)."
+"QR has very little functionality in the first-party Rust layer (it's just a thin FFI "
+"glue) and therefore uses the existing C++ unit tests for testing both the C++ and the "
+"Rust implementation (parameterizing the tests so they enable or disable Rust using a "
+"`ScopedFeatureList`)."
msgstr ""
#: src/chromium/testing.md
msgid ""
-"Hypothetical/WIP PNG integration may need to implement memory-safe "
-"implementation of pixel transformations that are provided by `libpng` but "
-"missing in the `png` crate - e.g. RGBA => BGRA, or gamma correction. Such "
-"functionality may benefit from separate tests authored in Rust."
+"Hypothetical/WIP PNG integration may need to implement memory-safe implementation of "
+"pixel transformations that are provided by `libpng` but missing in the `png` crate - e."
+"g. RGBA => BGRA, or gamma correction. Such functionality may benefit from separate tests "
+"authored in Rust."
msgstr ""
#: src/chromium/testing/rust-gtest-interop.md
msgid ""
-"The [`rust_gtest_interop`](https://chromium.googlesource.com/chromium/src/+/"
-"main/testing/rust_gtest_interop/README.md) library provides a way to:"
+"The [`rust_gtest_interop`](https://chromium.googlesource.com/chromium/src/+/main/testing/"
+"rust_gtest_interop/README.md) library provides a way to:"
msgstr ""
#: src/chromium/testing/rust-gtest-interop.md
-msgid ""
-"Use a Rust function as a `gtest` testcase (using the `#[gtest(...)]` "
-"attribute)"
+msgid "Use a Rust function as a `gtest` testcase (using the `#[gtest(...)]` attribute)"
msgstr ""
#: src/chromium/testing/rust-gtest-interop.md
msgid ""
-"Use `expect_eq!` and similar macros (similar to `assert_eq!` but not "
-"panicking and not terminating the test when the assertion fails)."
+"Use `expect_eq!` and similar macros (similar to `assert_eq!` but not panicking and not "
+"terminating the test when the assertion fails)."
msgstr ""
#: src/chromium/testing/rust-gtest-interop.md
@@ -14702,8 +14013,8 @@ msgstr "示例"
#: src/chromium/testing/build-gn.md
msgid ""
-"The simplest way to build Rust `gtest` tests is to add them to an existing "
-"test binary that already contains tests authored in C++. For example:"
+"The simplest way to build Rust `gtest` tests is to add them to an existing test binary "
+"that already contains tests authored in C++. For example:"
msgstr ""
#: src/chromium/testing/build-gn.md
@@ -14719,8 +14030,8 @@ msgstr ""
#: src/chromium/testing/build-gn.md
msgid ""
-"Authoring Rust tests in a separate `static_library` also works, but requires "
-"manually declaring the dependency on the support libraries:"
+"Authoring Rust tests in a separate `static_library` also works, but requires manually "
+"declaring the dependency on the support libraries:"
msgstr ""
#: src/chromium/testing/build-gn.md
@@ -14746,12 +14057,11 @@ msgstr ""
#: src/chromium/testing/chromium-import-macro.md
msgid ""
-"After adding `:my_rust_lib` to GN `deps`, we still need to learn how to "
-"import and use `my_rust_lib` from `my_rust_lib_unittest.rs`. We haven't "
-"provided an explicit `crate_name` for `my_rust_lib` so its crate name is "
-"computed based on the full target path and name. Fortunately we can avoid "
-"working with such an unwieldy name by using the `chromium::import!` macro "
-"from the automatically-imported `chromium` crate:"
+"After adding `:my_rust_lib` to GN `deps`, we still need to learn how to import and use "
+"`my_rust_lib` from `my_rust_lib_unittest.rs`. We haven't provided an explicit "
+"`crate_name` for `my_rust_lib` so its crate name is computed based on the full target "
+"path and name. Fortunately we can avoid working with such an unwieldy name by using the "
+"`chromium::import!` macro from the automatically-imported `chromium` crate:"
msgstr ""
#: src/chromium/testing/chromium-import-macro.md
@@ -14765,19 +14075,18 @@ msgstr ""
#: src/chromium/testing/chromium-import-macro.md
msgid ""
-"More information can be found in [the doc comment](https://source.chromium."
-"org/chromium/chromium/src/+/main:build/rust/chromium_prelude/"
-"chromium_prelude.rs?q=f:chromium_prelude.rs%20pub.use.*%5Cbimport%5Cb;%20-f:"
-"third_party&ss=chromium%2Fchromium%2Fsrc) of the `chromium::import` macro."
+"More information can be found in [the doc comment](https://source.chromium.org/chromium/"
+"chromium/src/+/main:build/rust/chromium_prelude/chromium_prelude.rs?q=f:chromium_prelude."
+"rs%20pub.use.*%5Cbimport%5Cb;%20-f:third_party&ss=chromium%2Fchromium%2Fsrc) of the "
+"`chromium::import` macro."
msgstr ""
#: src/chromium/testing/chromium-import-macro.md
msgid ""
-"`rust_static_library` supports specifying an explicit name via `crate_name` "
-"property, but doing this is discouraged. And it is discouraged because the "
-"crate name has to be globally unique. crates.io guarantees uniqueness of its "
-"crate names so `cargo_crate` GN targets (generated by the `gnrt` tool "
-"covered in a later section) use short crate names."
+"`rust_static_library` supports specifying an explicit name via `crate_name` property, "
+"but doing this is discouraged. And it is discouraged because the crate name has to be "
+"globally unique. crates.io guarantees uniqueness of its crate names so `cargo_crate` GN "
+"targets (generated by the `gnrt` tool covered in a later section) use short crate names."
msgstr ""
#: src/exercises/chromium/testing.md
@@ -14796,9 +14105,9 @@ msgstr ""
#: src/exercises/chromium/testing.md
msgid ""
-"Add a testable function next to `hello_from_rust`. Some suggestions: adding "
-"two integers received as arguments, computing the nth Fibonacci number, "
-"summing integers in a slice, etc."
+"Add a testable function next to `hello_from_rust`. Some suggestions: adding two integers "
+"received as arguments, computing the nth Fibonacci number, summing integers in a slice, "
+"etc."
msgstr ""
#: src/exercises/chromium/testing.md
@@ -14815,61 +14124,53 @@ msgstr ""
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"The Rust community offers multiple options for C++/Rust interop, with new "
-"tools being developed all the time. At the moment, Chromium uses a tool "
-"called CXX."
+"The Rust community offers multiple options for C++/Rust interop, with new tools being "
+"developed all the time. At the moment, Chromium uses a tool called CXX."
msgstr ""
-"Rust 社区提供了多种 C++/Rust 互操作选项,并且一直在不断开发新工具。目前,"
-"Chromium 使用一种名为 CXX 的工具。"
+"Rust 社区提供了多种 C++/Rust 互操作选项,并且一直在不断开发新工具。目前,Chromium 使用一"
+"种名为 CXX 的工具。"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"You describe your whole language boundary in an interface definition "
-"language (which looks a lot like Rust) and then CXX tools generate "
-"declarations for functions and types in both Rust and C++."
+"You describe your whole language boundary in an interface definition language (which "
+"looks a lot like Rust) and then CXX tools generate declarations for functions and types "
+"in both Rust and C++."
msgstr ""
-"您可以使用接口定义语言(与 Rust 极为相似)描述整个语言边界,然后 CXX 工具会据"
-"此生成 Rust 和 C++ 函数及类型的声明。"
+"您可以使用接口定义语言(与 Rust 极为相似)描述整个语言边界,然后 CXX 工具会据此生成 Rust "
+"和 C++ 函数及类型的声明。"
#: src/chromium/interoperability-with-cpp.md
#, fuzzy
msgid ""
-"See the [CXX tutorial](https://cxx.rs/tutorial.html) for a full example of "
-"using this."
-msgstr ""
-"请参阅 [CXX tutorial](https://cxx.rs/tutorial.html) ,了解有关使用的完整示"
-"例。"
+"See the [CXX tutorial](https://cxx.rs/tutorial.html) for a full example of using this."
+msgstr "请参阅 [CXX tutorial](https://cxx.rs/tutorial.html) ,了解有关使用的完整示例。"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"Talk through the diagram. Explain that behind the scenes, this is doing just "
-"the same as you previously did. Point out that automating the process has "
-"the following benefits:"
+"Talk through the diagram. Explain that behind the scenes, this is doing just the same as "
+"you previously did. Point out that automating the process has the following benefits:"
msgstr ""
-"请仔细研究这个图表。解释背后的原理和您之前所做的完全相同。说明自动执行这一流"
-"程具有以下好处:"
+"请仔细研究这个图表。解释背后的原理和您之前所做的完全相同。说明自动执行这一流程具有以下好"
+"处:"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"The tool guarantees that the C++ and Rust sides match (e.g. you get compile "
-"errors if the `#[cxx::bridge]` doesn't match the actual C++ or Rust "
-"definitions, but with out-of-sync manual bindings you'd get Undefined "
-"Behavior)"
+"The tool guarantees that the C++ and Rust sides match (e.g. you get compile errors if "
+"the `#[cxx::bridge]` doesn't match the actual C++ or Rust definitions, but with out-of-"
+"sync manual bindings you'd get Undefined Behavior)"
msgstr ""
-"使用该工具可保证 C++ 端和 Rust 端相匹配(例如,如果 `#[cxx::bridge]` 与实际"
-"的 C++ 或 Rust 定义不匹配,则会出现编译错误。但使用不同步的手动绑定,可能会导"
-"致未定义行为)"
+"使用该工具可保证 C++ 端和 Rust 端相匹配(例如,如果 `#[cxx::bridge]` 与实际的 C++ 或 "
+"Rust 定义不匹配,则会出现编译错误。但使用不同步的手动绑定,可能会导致未定义行为)"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"The tool automates generation of FFI thunks (small, C-ABI-compatible, free "
-"functions) for non-C features (e.g. enabling FFI calls into Rust or C++ "
-"methods; manual bindings would require authoring such top-level, free "
-"functions manually)"
+"The tool automates generation of FFI thunks (small, C-ABI-compatible, free functions) "
+"for non-C features (e.g. enabling FFI calls into Rust or C++ methods; manual bindings "
+"would require authoring such top-level, free functions manually)"
msgstr ""
-"该工具还可自动生成 FFI thunk(即小型但可兼容 C-ABI 的自由函数),以便适应非 "
-"C 语言特性(例如,启用对 Rust 或 C++ 方法的 FFI 调用;而手动实现绑定一般需要"
-"自行编写这种顶级的自由函数)"
+"该工具还可自动生成 FFI thunk(即小型但可兼容 C-ABI 的自由函数),以便适应非 C 语言特性"
+"(例如,启用对 Rust 或 C++ 方法的 FFI 调用;而手动实现绑定一般需要自行编写这种顶级的自由"
+"函数)"
#: src/chromium/interoperability-with-cpp.md
msgid "The tool and the library can handle a set of core types - for example:"
@@ -14877,53 +14178,48 @@ msgstr "该工具和库可以处理一系列核心类型,例如:"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"`&[T]` can be passed across the FFI boundary, even though it doesn't "
-"guarantee any particular ABI or memory layout. With manual bindings `std::"
-"span` / `&[T]` have to be manually destructured and rebuilt out of a "
-"pointer and length - this is error-prone given that each language represents "
-"empty slices slightly differently)"
+"`&[T]` can be passed across the FFI boundary, even though it doesn't guarantee any "
+"particular ABI or memory layout. With manual bindings `std::span` / `&[T]` have to be "
+"manually destructured and rebuilt out of a pointer and length - this is error-prone "
+"given that each language represents empty slices slightly differently)"
msgstr ""
-"`&[T]` 可以跨 FFI 边界进行传递,即使它无法保证任何特定的 ABI 或内存布局一致无"
-"误。进行手动绑定时,必须手动解构 `std::span` / `&[T]`,并根据指针和长度进"
-"行重新构建,但这很容易出错,因为每种语言对于空 slice 的表示方式略有不同"
+"`&[T]` 可以跨 FFI 边界进行传递,即使它无法保证任何特定的 ABI 或内存布局一致无误。进行手动"
+"绑定时,必须手动解构 `std::span` / `&[T]`,并根据指针和长度进行重新构建,但这很容易出"
+"错,因为每种语言对于空 slice 的表示方式略有不同"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"Smart pointers like `std::unique_ptr`, `std::shared_ptr`, and/or `Box` "
-"are natively supported. With manual bindings, one would have to pass C-ABI-"
-"compatible raw pointers, which would increase lifetime and memory-safety "
-"risks."
+"Smart pointers like `std::unique_ptr`, `std::shared_ptr`, and/or `Box` are "
+"natively supported. With manual bindings, one would have to pass C-ABI-compatible raw "
+"pointers, which would increase lifetime and memory-safety risks."
msgstr ""
-"系统对 `std::unique_ptr`、`std::shared_ptr` 和/或 `Box` 等智能指针提供"
-"原生支持。如果使用手动绑定,则必须传递可兼容 C-ABI 的原始指针,这会增加生命周"
-"期和内存安全风险。"
+"系统对 `std::unique_ptr`、`std::shared_ptr` 和/或 `Box` 等智能指针提供原生支持。如"
+"果使用手动绑定,则必须传递可兼容 C-ABI 的原始指针,这会增加生命周期和内存安全风险。"
#: src/chromium/interoperability-with-cpp.md
msgid ""
-"`rust::String` and `CxxString` types understand and maintain differences in "
-"string representation across the languages (e.g. `rust::String::lossy` can "
-"build a Rust string from non-UTF8 input and `rust::String::c_str` can NUL-"
-"terminate a string)."
+"`rust::String` and `CxxString` types understand and maintain differences in string "
+"representation across the languages (e.g. `rust::String::lossy` can build a Rust string "
+"from non-UTF8 input and `rust::String::c_str` can NUL-terminate a string)."
msgstr ""
-"`rust::String` 和 `CxxString` 类型能够识别并处理不同语言之间在字符串表示方面"
-"的差异(例如,`rust::String::lossy` 可以通过非 UTF8 输入构建 Rust 字符串;"
-"`rust::String::c_str` 可以为字符串加上 NUL 终止符)。"
+"`rust::String` 和 `CxxString` 类型能够识别并处理不同语言之间在字符串表示方面的差异(例"
+"如,`rust::String::lossy` 可以通过非 UTF8 输入构建 Rust 字符串;`rust::String::c_str` 可"
+"以为字符串加上 NUL 终止符)。"
#: src/chromium/interoperability-with-cpp/example-bindings.md
#, fuzzy
msgid ""
-"CXX requires that the whole C++/Rust boundary is declared in `cxx::bridge` "
-"modules inside `.rs` source code."
-msgstr ""
-"根据 CXX 要求,在 `.rs` 源代码内的 `cxx::bridge` “模块”中声明整个 C++/Rust 边"
-"界。"
+"CXX requires that the whole C++/Rust boundary is declared in `cxx::bridge` modules "
+"inside `.rs` source code."
+msgstr "根据 CXX 要求,在 `.rs` 源代码内的 `cxx::bridge` “模块”中声明整个 C++/Rust 边界。"
#: src/chromium/interoperability-with-cpp/example-bindings.md
msgid "\"example/include/blobstore.h\""
msgstr "\"example/include/blobstore.h\""
#: src/chromium/interoperability-with-cpp/example-bindings.md
-msgid "// Definitions of Rust types and functions go here\n"
+#, fuzzy
+msgid "// Definitions of Rust types and functions go here"
msgstr "// Definitions of Rust types and functions go here\n"
#: src/chromium/interoperability-with-cpp/example-bindings.md
@@ -14932,10 +14228,9 @@ msgstr "指出:"
#: src/chromium/interoperability-with-cpp/example-bindings.md
msgid ""
-"Although this looks like a regular Rust `mod`, the `#[cxx::bridge]` "
-"procedural macro does complex things to it. The generated code is quite a "
-"bit more sophisticated - though this does still result in a `mod` called "
-"`ffi` in your code."
+"Although this looks like a regular Rust `mod`, the `#[cxx::bridge]` procedural macro "
+"does complex things to it. The generated code is quite a bit more sophisticated - though "
+"this does still result in a `mod` called `ffi` in your code."
msgstr ""
#: src/chromium/interoperability-with-cpp/example-bindings.md
@@ -14958,20 +14253,18 @@ msgstr "从 Rust 调用 C++,并使用 C++ 类型(底部位置)"
#: src/chromium/interoperability-with-cpp/example-bindings.md
msgid ""
-"**Common misconception**: It _looks_ like a C++ header is being parsed by "
-"Rust, but this is misleading. This header is never interpreted by Rust, but "
-"simply `#include`d in the generated C++ code for the benefit of C++ "
-"compilers."
+"**Common misconception**: It _looks_ like a C++ header is being parsed by Rust, but this "
+"is misleading. This header is never interpreted by Rust, but simply `#include`d in the "
+"generated C++ code for the benefit of C++ compilers."
msgstr ""
-"**常见误解**:这 _看似_ Rust 在解析 C++ 头文件,其实具有误导性。Rust 不会对此"
-"头文件进行解释,只是在生成的 C++ 代码中添加 `#include`,以便于 C++ 编译器 使"
-"用。"
+"**常见误解**:这 _看似_ Rust 在解析 C++ 头文件,其实具有误导性。Rust 不会对此头文件进行解"
+"释,只是在生成的 C++ 代码中添加 `#include`,以便于 C++ 编译器 使用。"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
#, fuzzy
msgid ""
-"By far the most useful page when using CXX is the [type reference](https://"
-"cxx.rs/bindings.html)."
+"By far the most useful page when using CXX is the [type reference](https://cxx.rs/"
+"bindings.html)."
msgstr "展示 [Rust 和 C++类型](https://cxx.rs/bindings.html) 之间的对应关系:"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
@@ -14979,46 +14272,38 @@ msgid "CXX fundamentally suits cases where:"
msgstr "CXX 基本适用于以下情况:"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
-msgid ""
-"Your Rust-C++ interface is sufficiently simple that you can declare all of "
-"it."
+msgid "Your Rust-C++ interface is sufficiently simple that you can declare all of it."
msgstr "您的 Rust-C++ 接口非常简单,可以声明其中的全部内容。"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
msgid ""
-"You're using only the types natively supported by CXX already, for example "
-"`std::unique_ptr`, `std::string`, `&[u8]` etc."
+"You're using only the types natively supported by CXX already, for example `std::"
+"unique_ptr`, `std::string`, `&[u8]` etc."
msgstr ""
-"目前,您只使用了 CXX 提供原生支持的类型,例如 `std::unique_ptr`、`std::"
-"string`、`&[u8]` 等。"
+"目前,您只使用了 CXX 提供原生支持的类型,例如 `std::unique_ptr`、`std::string`、`&[u8]` "
+"等。"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
-msgid ""
-"It has many limitations --- for example lack of support for Rust's `Option` "
-"type."
+msgid "It has many limitations --- for example lack of support for Rust's `Option` type."
msgstr "这样具有很多局限性,例如缺少对 Rust 的 `Option` 类型的支持。"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
msgid ""
-"These limitations constrain us to using Rust in Chromium only for well "
-"isolated \"leaf nodes\" rather than for arbitrary Rust-C++ interop. When "
-"considering a use-case for Rust in Chromium, a good starting point is to "
-"draft the CXX bindings for the language boundary to see if it appears simple "
-"enough."
+"These limitations constrain us to using Rust in Chromium only for well isolated \"leaf "
+"nodes\" rather than for arbitrary Rust-C++ interop. When considering a use-case for Rust "
+"in Chromium, a good starting point is to draft the CXX bindings for the language "
+"boundary to see if it appears simple enough."
msgstr ""
-"由于这些局限,我们在 Chromium 中只能将 Rust 用于隔离紧密的 “叶节点”,而无法用"
-"于任意的 Rust-C++ 互操作。当您打算在 Chromium 中探索 Rust 的应用场景时,推荐"
-"先从拟定针对语言边界的 CXX 绑定入手,以查看该语言边界是否足够简单明了。"
+"由于这些局限,我们在 Chromium 中只能将 Rust 用于隔离紧密的 “叶节点”,而无法用于任意的 "
+"Rust-C++ 互操作。当您打算在 Chromium 中探索 Rust 的应用场景时,推荐先从拟定针对语言边界"
+"的 CXX 绑定入手,以查看该语言边界是否足够简单明了。"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
-msgid ""
-"You should also discuss some of the other sticky points with CXX, for "
-"example:"
+msgid "You should also discuss some of the other sticky points with CXX, for example:"
msgstr "此外,还应讨论使用 CXX 时的其他一些困难之处,例如:"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
-msgid ""
-"Its error handling is based around C++ exceptions (given on the next slide)"
+msgid "Its error handling is based around C++ exceptions (given on the next slide)"
msgstr "其根据 C++ 异常来进行错误处理(下一张幻灯片中将加以介绍)"
#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md
@@ -15028,11 +14313,11 @@ msgstr "函数指针使用起来很不方便。"
#: src/chromium/interoperability-with-cpp/error-handling.md
#, fuzzy
msgid ""
-"CXX's [support for `Result`](https://cxx.rs/binding/result.html) relies "
-"on C++ exceptions, so we can't use that in Chromium. Alternatives:"
+"CXX's [support for `Result`](https://cxx.rs/binding/result.html) relies on C++ "
+"exceptions, so we can't use that in Chromium. Alternatives:"
msgstr ""
-"CXX 对于 `Result` 类型的支持取决于 C++ 异常机制,因此无法在 Chromium 中"
-"使用该功能。替代选项:"
+"CXX 对于 `Result` 类型的支持取决于 C++ 异常机制,因此无法在 Chromium 中使用该功能。"
+"替代选项:"
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid "The `T` part of `Result` can be:"
@@ -15040,8 +14325,8 @@ msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid ""
-"Returned via out parameters (e.g. via `&mut T`). This requires that `T` can "
-"be passed across the FFI boundary - for example `T` has to be:"
+"Returned via out parameters (e.g. via `&mut T`). This requires that `T` can be passed "
+"across the FFI boundary - for example `T` has to be:"
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
@@ -15050,15 +14335,15 @@ msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid ""
-"A type natively supported by `cxx` (like `UniquePtr`) that has a suitable "
-"default value to use in a failure case (_unlike_ `Box`)."
+"A type natively supported by `cxx` (like `UniquePtr`) that has a suitable default "
+"value to use in a failure case (_unlike_ `Box`)."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid ""
-"Retained on the Rust side, and exposed via reference. This may be needed "
-"when `T` is a Rust type, which cannot be passed across the FFI boundary, and "
-"cannot be stored in `UniquePtr`."
+"Retained on the Rust side, and exposed via reference. This may be needed when `T` is a "
+"Rust type, which cannot be passed across the FFI boundary, and cannot be stored in "
+"`UniquePtr`."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
@@ -15067,14 +14352,14 @@ msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid ""
-"Returned as a boolean (e.g. `true` representing success, and `false` "
-"representing failure)"
+"Returned as a boolean (e.g. `true` representing success, and `false` representing "
+"failure)"
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling.md
msgid ""
-"Preserving error details is in theory possible, but so far hasn't been "
-"needed in practice."
+"Preserving error details is in theory possible, but so far hasn't been needed in "
+"practice."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
@@ -15085,16 +14370,15 @@ msgstr "错误处理"
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
#, fuzzy
msgid ""
-"The QR code generator is [an example](https://source.chromium.org/chromium/"
-"chromium/src/+/main:components/qr_code_generator/qr_code_generator_ffi_glue."
-"rs;l=13-18;drc=7bf1b75b910ca430501b9c6a74c1d18a0223ecca) where a boolean is "
-"used to communicate success vs failure, and where the successful result can "
-"be passed across the FFI boundary:"
+"The QR code generator is [an example](https://source.chromium.org/chromium/chromium/src/"
+"+/main:components/qr_code_generator/qr_code_generator_ffi_glue.rs;l=13-18;"
+"drc=7bf1b75b910ca430501b9c6a74c1d18a0223ecca) where a boolean is used to communicate "
+"success vs failure, and where the successful result can be passed across the FFI "
+"boundary:"
msgstr ""
-"如果操作成功,则可用简单的布尔值进行表示,如 [二维码生成器](https://source."
-"chromium.org/chromium/chromium/src/+/main:components/qr_code_generator/"
-"qr_code_generator_ffi_glue.rs;l=10) 中的原理一样:返回表示操作成功的布尔值,"
-"并使用输出参数记录结果:"
+"如果操作成功,则可用简单的布尔值进行表示,如 [二维码生成器](https://source.chromium.org/"
+"chromium/chromium/src/+/main:components/qr_code_generator/qr_code_generator_ffi_glue.rs;"
+"l=10) 中的原理一样:返回表示操作成功的布尔值,并使用输出参数记录结果:"
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
msgid "\"qr_code_generator\""
@@ -15102,25 +14386,24 @@ msgstr "\"qr_code_generator\""
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
msgid ""
-"Students may be curious about the semantics of the `out_qr_size` output. "
-"This is not the size of the vector, but the size of the QR code (and "
-"admittedly it is a bit redundant - this is the square root of the size of "
-"the vector)."
+"Students may be curious about the semantics of the `out_qr_size` output. This is not the "
+"size of the vector, but the size of the QR code (and admittedly it is a bit redundant - "
+"this is the square root of the size of the vector)."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
msgid ""
-"It may be worth pointing out the importance of initializing `out_qr_size` "
-"before calling into the Rust function. Creation of a Rust reference that "
-"points to uninitialized memory results in Undefined Behavior (unlike in C++, "
-"when only the act of dereferencing such memory results in UB)."
+"It may be worth pointing out the importance of initializing `out_qr_size` before calling "
+"into the Rust function. Creation of a Rust reference that points to uninitialized memory "
+"results in Undefined Behavior (unlike in C++, when only the act of dereferencing such "
+"memory results in UB)."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-qr.md
msgid ""
-"If students ask about `Pin`, then explain why CXX needs it for mutable "
-"references to C++ data: the answer is that C++ data can’t be moved around "
-"like Rust data, because it may contain self-referential pointers."
+"If students ask about `Pin`, then explain why CXX needs it for mutable references to C++ "
+"data: the answer is that C++ data can’t be moved around like Rust data, because it may "
+"contain self-referential pointers."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
@@ -15130,8 +14413,8 @@ msgstr "错误处理"
#: src/chromium/interoperability-with-cpp/error-handling-png.md
msgid ""
-"A prototype of a PNG decoder illustrates what can be done when the "
-"successful result cannot be passed across the FFI boundary:"
+"A prototype of a PNG decoder illustrates what can be done when the successful result "
+"cannot be passed across the FFI boundary:"
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
@@ -15139,35 +14422,36 @@ msgid "\"gfx::rust_bindings\""
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
-msgid ""
-"/// This returns an FFI-friendly equivalent of `Result,\n"
-" /// ()>`.\n"
+msgid "/// This returns an FFI-friendly equivalent of `Result,"
+msgstr ""
+
+#: src/chromium/interoperability-with-cpp/error-handling-png.md
+msgid "/// ()>`."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
-msgid "/// C++ bindings for the `crate::png::ResultOfPngReader` type.\n"
+msgid "/// C++ bindings for the `crate::png::ResultOfPngReader` type."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
-msgid "/// C++ bindings for the `crate::png::PngReader` type.\n"
+msgid "/// C++ bindings for the `crate::png::PngReader` type."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
msgid ""
-"`PngReader` and `ResultOfPngReader` are Rust types --- objects of these "
-"types cannot cross the FFI boundary without indirection of a `Box`. We "
-"can't have an `out_parameter: &mut PngReader`, because CXX doesn't allow C++ "
-"to store Rust objects by value."
+"`PngReader` and `ResultOfPngReader` are Rust types --- objects of these types cannot "
+"cross the FFI boundary without indirection of a `Box`. We can't have an "
+"`out_parameter: &mut PngReader`, because CXX doesn't allow C++ to store Rust objects by "
+"value."
msgstr ""
#: src/chromium/interoperability-with-cpp/error-handling-png.md
msgid ""
-"This example illustrates that even though CXX doesn't support arbitrary "
-"generics nor templates, we can still pass them across the FFI boundary by "
-"manually specializing / monomorphizing them into a non-generic type. In the "
-"example `ResultOfPngReader` is a non-generic type that forwards into "
-"appropriate methods of `Result` (e.g. into `is_err`, `unwrap`, and/or "
-"`as_mut`)."
+"This example illustrates that even though CXX doesn't support arbitrary generics nor "
+"templates, we can still pass them across the FFI boundary by manually specializing / "
+"monomorphizing them into a non-generic type. In the example `ResultOfPngReader` is a non-"
+"generic type that forwards into appropriate methods of `Result` (e.g. into "
+"`is_err`, `unwrap`, and/or `as_mut`)."
msgstr ""
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
@@ -15177,12 +14461,11 @@ msgstr "在 Chromium 中使用 cxx"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid ""
-"In Chromium, we define an independent `#[cxx::bridge] mod` for each leaf-"
-"node where we want to use Rust. You'd typically have one for each "
-"`rust_static_library`. Just add"
+"In Chromium, we define an independent `#[cxx::bridge] mod` for each leaf-node where we "
+"want to use Rust. You'd typically have one for each `rust_static_library`. Just add"
msgstr ""
-"在 Chromium 中,针对每个需要使用 Rust 的叶节点,我们定义独立的 `#[cxx::"
-"bridge] mod`。通常,每个 `rust_static_library` 都有对应的定义。只需将"
+"在 Chromium 中,针对每个需要使用 Rust 的叶节点,我们定义独立的 `#[cxx::bridge] mod`。通"
+"常,每个 `rust_static_library` 都有对应的定义。只需将"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid ""
@@ -15199,12 +14482,8 @@ msgstr ""
"```"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
-msgid ""
-"to your existing `rust_static_library` target alongside `crate_root` and "
-"`sources`."
-msgstr ""
-"添加到您现有的 `rust_static_library` 以及 `crate_root` 和 `sources` 的目标"
-"中。"
+msgid "to your existing `rust_static_library` target alongside `crate_root` and `sources`."
+msgstr "添加到您现有的 `rust_static_library` 以及 `crate_root` 和 `sources` 的目标中。"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid "C++ headers will be generated at a sensible location, so you can just"
@@ -15216,14 +14495,13 @@ msgstr "\"ui/base/my_rust_file.rs.h\""
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid ""
-"You will find some utility functions in `//base` to convert to/from Chromium "
-"C++ types to CXX Rust types --- for example [`SpanToRustSlice`](https://"
-"source.chromium.org/chromium/chromium/src/+/main:base/containers/span_rust.h;"
-"l=21)."
+"You will find some utility functions in `//base` to convert to/from Chromium C++ types "
+"to CXX Rust types --- for example [`SpanToRustSlice`](https://source.chromium.org/"
+"chromium/chromium/src/+/main:base/containers/span_rust.h;l=21)."
msgstr ""
-"您会发现,`//base` 中提供了一些实用函数,可将 Chromium C++ 类型与 CXX Rust 类"
-"型相互转换,例如 [`SpanToRustSlice`](https://source.chromium.org/chromium/"
-"chromium/src/+/main:base/containers/span_rust.h;l=21)。"
+"您会发现,`//base` 中提供了一些实用函数,可将 Chromium C++ 类型与 CXX Rust 类型相互转换,"
+"例如 [`SpanToRustSlice`](https://source.chromium.org/chromium/chromium/src/+/main:base/"
+"containers/span_rust.h;l=21)。"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid "Students may ask --- why do we still need `allow_unsafe = true`?"
@@ -15231,30 +14509,28 @@ msgstr "学生可能会问:为什么我们仍然需要 `allow_unsafe = true`
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
msgid ""
-"The broad answer is that no C/C++ code is \"safe\" by the normal Rust "
-"standards. Calling back and forth to C/C++ from Rust may do arbitrary things "
-"to memory, and compromise the safety of Rust's own data layouts. Presence of "
-"_too many_ `unsafe` keywords in C/C++ interop can harm the signal-to-noise "
-"ratio of such a keyword, and is [controversial](https://steveklabnik.com/"
-"writing/the-cxx-debate), but strictly, bringing any foreign code into a Rust "
-"binary can cause unexpected behavior from Rust's perspective."
+"The broad answer is that no C/C++ code is \"safe\" by the normal Rust standards. Calling "
+"back and forth to C/C++ from Rust may do arbitrary things to memory, and compromise the "
+"safety of Rust's own data layouts. Presence of _too many_ `unsafe` keywords in C/C++ "
+"interop can harm the signal-to-noise ratio of such a keyword, and is [controversial]"
+"(https://steveklabnik.com/writing/the-cxx-debate), but strictly, bringing any foreign "
+"code into a Rust binary can cause unexpected behavior from Rust's perspective."
msgstr ""
-"总的来说,按照常规 Rust 标准,没有任何 C/C++ 代码是 “安全”的。在 Rust 中来回"
-"调用 C/C++ 可能会对内存执行任意操作,并危及 Rust 自身数据布局的安全性。如果 "
-"C/C++ 互操作性中出现 _过多_ 的 `unsafe` 关键字,可能会损害此类关键字的信噪"
-"比,并且 [存在争议](https://steveklabnik.com/writing/the-cxx-debate)。但严格"
-"地说,将任何外部代码引入 Rust 二进制文件可能会导致 Rust 中出现意外行为。"
+"总的来说,按照常规 Rust 标准,没有任何 C/C++ 代码是 “安全”的。在 Rust 中来回调用 C/C++ 可"
+"能会对内存执行任意操作,并危及 Rust 自身数据布局的安全性。如果 C/C++ 互操作性中出现 _过多"
+"_ 的 `unsafe` 关键字,可能会损害此类关键字的信噪比,并且 [存在争议](https://steveklabnik."
+"com/writing/the-cxx-debate)。但严格地说,将任何外部代码引入 Rust 二进制文件可能会导致 "
+"Rust 中出现意外行为。"
#: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md
#, fuzzy
msgid ""
-"The narrow answer lies in the diagram at the top of [this page](../"
-"interoperability-with-cpp.md) --- behind the scenes, CXX generates Rust "
-"`unsafe` and `extern \"C\"` functions just like we did manually in the "
-"previous section."
+"The narrow answer lies in the diagram at the top of [this page](../interoperability-with-"
+"cpp.md) --- behind the scenes, CXX generates Rust `unsafe` and `extern \"C\"` functions "
+"just like we did manually in the previous section."
msgstr ""
-"具体答案可在本页顶部的图表中找到:CXX 会在后台生成 Rust `unsafe` 和 `extern "
-"\"C\"` 函数,与我们在上一部分手动生成的函数类似。"
+"具体答案可在本页顶部的图表中找到:CXX 会在后台生成 Rust `unsafe` 和 `extern \"C\"` 函数,"
+"与我们在上一部分手动生成的函数类似。"
#: src/exercises/chromium/interoperability-with-cpp.md
#, fuzzy
@@ -15267,20 +14543,20 @@ msgstr "第一部分"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"In the Rust file you previously created, add a `#[cxx::bridge]` which "
-"specifies a single function, to be called from C++, called "
-"`hello_from_rust`, taking no parameters and returning no value."
+"In the Rust file you previously created, add a `#[cxx::bridge]` which specifies a single "
+"function, to be called from C++, called `hello_from_rust`, taking no parameters and "
+"returning no value."
msgstr ""
-"在您之前创建的 Rust 文件中,添加 `#[cxx::bridge]` 来指定一个将从 C++ 调用的函"
-"数(名为 `hello_from_rust`),该函数不接受任何参数也不返回任何值。"
+"在您之前创建的 Rust 文件中,添加 `#[cxx::bridge]` 来指定一个将从 C++ 调用的函数(名为 "
+"`hello_from_rust`),该函数不接受任何参数也不返回任何值。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
"Modify your previous `hello_from_rust` function to remove `extern \"C\"` and "
"`#[no_mangle]`. This is now just a standard Rust function."
msgstr ""
-"修改之前的 `hello_from_rust` 函数,移除 `extern \"C\"` 和 `#[no_mangle]`。现"
-"在,这只是一个标准的 Rust 函数。"
+"修改之前的 `hello_from_rust` 函数,移除 `extern \"C\"` 和 `#[no_mangle]`。现在,这只是一"
+"个标准的 Rust 函数。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid "Modify your `gn` target to build these bindings."
@@ -15288,10 +14564,9 @@ msgstr "请修改 `gn` 目标以构建这些绑定。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"In your C++ code, remove the forward-declaration of `hello_from_rust`. "
-"Instead, include the generated header file."
-msgstr ""
-"在 C++ 代码中,移除 `hello_from_rust` 的正向声明,然后添加生成的头文件。"
+"In your C++ code, remove the forward-declaration of `hello_from_rust`. Instead, include "
+"the generated header file."
+msgstr "在 C++ 代码中,移除 `hello_from_rust` 的正向声明,然后添加生成的头文件。"
#: src/exercises/chromium/interoperability-with-cpp.md
#, fuzzy
@@ -15304,10 +14579,9 @@ msgstr "第二部分"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"It's a good idea to play with CXX a little. It helps you think about how "
-"flexible Rust in Chromium actually is."
-msgstr ""
-"建议尝试操作一下 CXX。这有助于您更好地理解 Rust 在Chromium 中的灵活性。"
+"It's a good idea to play with CXX a little. It helps you think about how flexible Rust "
+"in Chromium actually is."
+msgstr "建议尝试操作一下 CXX。这有助于您更好地理解 Rust 在Chromium 中的灵活性。"
#: src/exercises/chromium/interoperability-with-cpp.md
#, fuzzy
@@ -15320,28 +14594,24 @@ msgstr "从 Rust 回调到 C++。您需要执行以下操作:"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"An additional header file which you can `include!` from your `cxx::bridge`. "
-"You'll need to declare your C++ function in that new header file."
+"An additional header file which you can `include!` from your `cxx::bridge`. You'll need "
+"to declare your C++ function in that new header file."
msgstr ""
-"创建一个附加头文件,且您可以从 `cxx::bridge` 对其进行 `include!` 操作。您需要"
-"在这个新的头文件中声明要调用的 C++ 函数。"
+"创建一个附加头文件,且您可以从 `cxx::bridge` 对其进行 `include!` 操作。您需要在这个新的头"
+"文件中声明要调用的 C++ 函数。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"An `unsafe` block to call such a function, or alternatively specify the "
-"`unsafe` keyword in your `#[cxx::bridge]` [as described here](https://cxx.rs/"
-"extern-c++.html#functions-and-member-functions)."
+"An `unsafe` block to call such a function, or alternatively specify the `unsafe` keyword "
+"in your `#[cxx::bridge]` [as described here](https://cxx.rs/extern-c++.html#functions-"
+"and-member-functions)."
msgstr ""
-"创建一个 `unsafe` 代码块,用于调用此类函数,也可以在 `#[cxx::bridge]` 中指定 "
-"`unsafe` 关键字,[如此处所述](https://cxx.rs/extern-c++.html#functions-and-"
-"member-functions)。"
+"创建一个 `unsafe` 代码块,用于调用此类函数,也可以在 `#[cxx::bridge]` 中指定 `unsafe` 关"
+"键字,[如此处所述](https://cxx.rs/extern-c++.html#functions-and-member-functions)。"
#: src/exercises/chromium/interoperability-with-cpp.md
-msgid ""
-"You may also need to `#include \"third_party/rust/cxx/v1/crate/include/cxx."
-"h\"`"
-msgstr ""
-"您可能还需要添加 `#include \"third_party/rust/cxx/v1/crate/include/cxx.h\"`"
+msgid "You may also need to `#include \"third_party/rust/cxx/v1/crate/include/cxx.h\"`"
+msgstr "您可能还需要添加 `#include \"third_party/rust/cxx/v1/crate/include/cxx.h\"`"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid "Pass a C++ string from C++ into Rust."
@@ -15353,32 +14623,28 @@ msgstr "将对 C++ 对象的引用传递到 Rust。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"Intentionally get the Rust function signatures mismatched from the `#[cxx::"
-"bridge]`, and get used to the errors you see."
-msgstr ""
-"刻意让 Rust 函数签名与 `#[cxx::bridge]` 不匹配,并逐渐熟悉所看到的错误信息。"
+"Intentionally get the Rust function signatures mismatched from the `#[cxx::bridge]`, and "
+"get used to the errors you see."
+msgstr "刻意让 Rust 函数签名与 `#[cxx::bridge]` 不匹配,并逐渐熟悉所看到的错误信息。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"Intentionally get the C++ function signatures mismatched from the `#[cxx::"
-"bridge]`, and get used to the errors you see."
+"Intentionally get the C++ function signatures mismatched from the `#[cxx::bridge]`, and "
+"get used to the errors you see."
msgstr "刻意让 C++ 函数签名与 `#[cxx::bridge]` 不匹配,并适应您看到的错误。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"Pass a `std::unique_ptr` of some type from C++ into Rust, so that Rust can "
-"own some C++ object."
+"Pass a `std::unique_ptr` of some type from C++ into Rust, so that Rust can own some C++ "
+"object."
msgstr ""
-"将某个类型的 `std::unique_ptr` 从 C++ 传递到 Rust,以便 Rust 拥有某个 C++ 对"
-"象的所有权。"
+"将某个类型的 `std::unique_ptr` 从 C++ 传递到 Rust,以便 Rust 拥有某个 C++ 对象的所有权。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"Create a Rust object and pass it into C++, so that C++ owns it. (Hint: you "
-"need a `Box`)."
+"Create a Rust object and pass it into C++, so that C++ owns it. (Hint: you need a `Box`)."
msgstr ""
-"创建一个 Rust 对象并将其传递到 C++,以便 C++ 拥有它的所有权。(提示:您需要使"
-"用 `Box`)。"
+"创建一个 Rust 对象并将其传递到 C++,以便 C++ 拥有它的所有权。(提示:您需要使用 `Box`)。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid "Declare some methods on a C++ type. Call them from Rust."
@@ -15394,12 +14660,12 @@ msgstr "第三部分"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"Now you understand the strengths and limitations of CXX interop, think of a "
-"couple of use-cases for Rust in Chromium where the interface would be "
-"sufficiently simple. Sketch how you might define that interface."
+"Now you understand the strengths and limitations of CXX interop, think of a couple of "
+"use-cases for Rust in Chromium where the interface would be sufficiently simple. Sketch "
+"how you might define that interface."
msgstr ""
-"现在,您已经了解了 CXX 互操作性的优势和局限,请思考几个 Rust 在 Chromium 中的"
-"应用场景,其中接口要足够简单构思该如何定义该接口。"
+"现在,您已经了解了 CXX 互操作性的优势和局限,请思考几个 Rust 在 Chromium 中的应用场景,其"
+"中接口要足够简单构思该如何定义该接口。"
#: src/exercises/chromium/interoperability-with-cpp.md
#, fuzzy
@@ -15408,11 +14674,11 @@ msgstr "展示 [Rust 和 C++类型](https://cxx.rs/bindings.html) 之间的对
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"The [`rust_static_library` gn template](https://source.chromium.org/chromium/"
-"chromium/src/+/main:build/rust/rust_static_library.gni;l=16)"
+"The [`rust_static_library` gn template](https://source.chromium.org/chromium/chromium/"
+"src/+/main:build/rust/rust_static_library.gni;l=16)"
msgstr ""
-"[`rust_static_library` gn 模板](https://source.chromium.org/chromium/"
-"chromium/src/+/main:build/rust/rust_static_library.gni;l=16)"
+"[`rust_static_library` gn 模板](https://source.chromium.org/chromium/chromium/src/+/main:"
+"build/rust/rust_static_library.gni;l=16)"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid "Some of the questions you may encounter:"
@@ -15420,32 +14686,31 @@ msgstr "您可能会遇到以下问题:"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"I'm seeing a problem initializing a variable of type X with type Y, where X "
-"and Y are both function types. This is because your C++ function doesn't "
-"quite match the declaration in your `cxx::bridge`."
+"I'm seeing a problem initializing a variable of type X with type Y, where X and Y are "
+"both function types. This is because your C++ function doesn't quite match the "
+"declaration in your `cxx::bridge`."
msgstr ""
-"当我用类型 Y 初始化类型 X 的变量时,出现了初始化问题,其中 X 和 Y 都是函数类"
-"型。这是因为您的 C++ 函数实现与 `cxx::bridge` 中的声明并不完全一致。"
+"当我用类型 Y 初始化类型 X 的变量时,出现了初始化问题,其中 X 和 Y 都是函数类型。这是因为"
+"您的 C++ 函数实现与 `cxx::bridge` 中的声明并不完全一致。"
#: src/exercises/chromium/interoperability-with-cpp.md
msgid ""
-"I seem to be able to freely convert C++ references into Rust references. "
-"Doesn't that risk UB? For CXX's _opaque_ types, no, because they are zero-"
-"sized. For CXX trivial types yes, it's _possible_ to cause UB, although "
-"CXX's design makes it quite difficult to craft such an example."
+"I seem to be able to freely convert C++ references into Rust references. Doesn't that "
+"risk UB? For CXX's _opaque_ types, no, because they are zero-sized. For CXX trivial "
+"types yes, it's _possible_ to cause UB, although CXX's design makes it quite difficult "
+"to craft such an example."
msgstr ""
-"我好像能随意将 C++ 引用转换为 Rust 引用。这样不会导致 UB 风险吗?对于 CXX 的_"
-"不透明_类型,答案为否,因为它们的大小为零。对于 CXX 的基本类型,确实_有可能_"
-"导致 UB,但鉴于 CXX 的设计策略,要构建能导致这种情况的示例颇为困难。"
+"我好像能随意将 C++ 引用转换为 Rust 引用。这样不会导致 UB 风险吗?对于 CXX 的_不透明_类"
+"型,答案为否,因为它们的大小为零。对于 CXX 的基本类型,确实_有可能_导致 UB,但鉴于 CXX 的"
+"设计策略,要构建能导致这种情况的示例颇为困难。"
#: src/chromium/adding-third-party-crates.md
msgid ""
-"Rust libraries are called \"crates\" and are found at [crates.io](https://"
-"crates.io). It's _very easy_ for Rust crates to depend upon one another. So "
-"they do!"
+"Rust libraries are called \"crates\" and are found at [crates.io](https://crates.io). "
+"It's _very easy_ for Rust crates to depend upon one another. So they do!"
msgstr ""
-"Rust 库被称为 `crate`,可在 [crates.io](https://crates.io) 中找到。Rust 的 "
-"crate 之间非常容易相互依赖。事实证明,他们确实如此!"
+"Rust 库被称为 `crate`,可在 [crates.io](https://crates.io) 中找到。Rust 的 crate 之间非常"
+"容易相互依赖。事实证明,他们确实如此!"
#: src/chromium/adding-third-party-crates.md
#, fuzzy
@@ -15496,15 +14761,13 @@ msgstr "对于 Chromium 工程师来说,这种依赖关系具有以下利弊
#: src/chromium/adding-third-party-crates.md
msgid ""
-"All crates use a common build system so we can automate their inclusion into "
-"Chromium..."
-msgstr ""
-"所有 crate 都使用共同的构建系统,这样我们就可以自动将其收录到 Chromium 中..."
+"All crates use a common build system so we can automate their inclusion into Chromium..."
+msgstr "所有 crate 都使用共同的构建系统,这样我们就可以自动将其收录到 Chromium 中..."
#: src/chromium/adding-third-party-crates.md
msgid ""
-"... but, crates typically have transitive dependencies, so you will likely "
-"have to bring in multiple libraries."
+"... but, crates typically have transitive dependencies, so you will likely have to bring "
+"in multiple libraries."
msgstr "...但是,crate 通常具有传递依赖项,因此可能需要引入多个库。"
#: src/chromium/adding-third-party-crates.md
@@ -15529,14 +14792,13 @@ msgstr "配置 `Cargo.tom` 文件以添加 crate"
#: src/chromium/adding-third-party-crates/configuring-cargo-toml.md
msgid ""
-"Chromium has a single set of centrally-managed direct crate dependencies. "
-"These are managed through a single [`Cargo.toml`](https://source.chromium."
-"org/chromium/chromium/src/+/main:third_party/rust/chromium_crates_io/Cargo."
-"toml):"
+"Chromium has a single set of centrally-managed direct crate dependencies. These are "
+"managed through a single [`Cargo.toml`](https://source.chromium.org/chromium/chromium/"
+"src/+/main:third_party/rust/chromium_crates_io/Cargo.toml):"
msgstr ""
-"Chromium 具有一组集中管理的直接 crate 依赖项。这些依赖项通过单独的 [`Cargo."
-"toml`](https://source.chromium.org/chromium/chromium/src/+/main:third_party/"
-"rust/chromium_crates_io/Cargo.toml) 文件进行管理:"
+"Chromium 具有一组集中管理的直接 crate 依赖项。这些依赖项通过单独的 [`Cargo.toml`]"
+"(https://source.chromium.org/chromium/chromium/src/+/main:third_party/rust/"
+"chromium_crates_io/Cargo.toml) 文件进行管理:"
#: src/chromium/adding-third-party-crates/configuring-cargo-toml.md
msgid ""
@@ -15558,37 +14820,34 @@ msgstr ""
#: src/chromium/adding-third-party-crates/configuring-cargo-toml.md
msgid ""
-"As with any other `Cargo.toml`, you can specify [more details about the "
-"dependencies](https://doc.rust-lang.org/cargo/reference/specifying-"
-"dependencies.html) --- most commonly, you'll want to specify the `features` "
-"that you wish to enable in the crate."
+"As with any other `Cargo.toml`, you can specify [more details about the dependencies]"
+"(https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html) --- most "
+"commonly, you'll want to specify the `features` that you wish to enable in the crate."
msgstr ""
-"与任何其他 `Cargo.toml` 一样,您可以指定 [有关依赖项的更多详细信息](https://"
-"doc.rust-lang.org/cargo/reference/specifying-dependencies.html)。最常见的是,"
-"您需要指定要在 crate 中启用的 `features`。"
+"与任何其他 `Cargo.toml` 一样,您可以指定 [有关依赖项的更多详细信息](https://doc.rust-"
+"lang.org/cargo/reference/specifying-dependencies.html)。最常见的是,您需要指定要在 crate "
+"中启用的 `features`。"
#: src/chromium/adding-third-party-crates/configuring-cargo-toml.md
msgid ""
-"When adding a crate to Chromium, you'll often need to provide some extra "
-"information in an additional file, `gnrt_config.toml`, which we'll meet next."
+"When adding a crate to Chromium, you'll often need to provide some extra information in "
+"an additional file, `gnrt_config.toml`, which we'll meet next."
msgstr ""
-"向 Chromium 中添加 crate 时,通常需要在附加文件 `gnrt_config.toml` 中提供一些"
-"额外的信息,我们将在下文中加以介绍。"
+"向 Chromium 中添加 crate 时,通常需要在附加文件 `gnrt_config.toml` 中提供一些额外的信息,"
+"我们将在下文中加以介绍。"
#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
msgid ""
-"Alongside `Cargo.toml` is [`gnrt_config.toml`](https://source.chromium.org/"
-"chromium/chromium/src/+/main:third_party/rust/chromium_crates_io/gnrt_config."
-"toml). This contains Chromium-specific extensions to crate handling."
+"Alongside `Cargo.toml` is [`gnrt_config.toml`](https://source.chromium.org/chromium/"
+"chromium/src/+/main:third_party/rust/chromium_crates_io/gnrt_config.toml). This contains "
+"Chromium-specific extensions to crate handling."
msgstr ""
-"与 `Cargo.toml` 一起使用的是 [`gnrt_config.toml`](https://source.chromium."
-"org/chromium/chromium/src/+/main:third_party/rust/chromium_crates_io/"
-"gnrt_config.toml)。此文件包含 Chromium 专用扩展程序,可用于处理 crate。"
+"与 `Cargo.toml` 一起使用的是 [`gnrt_config.toml`](https://source.chromium.org/chromium/"
+"chromium/src/+/main:third_party/rust/chromium_crates_io/gnrt_config.toml)。此文件包含 "
+"Chromium 专用扩展程序,可用于处理 crate。"
#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
-msgid ""
-"If you add a new crate, you should specify at least the `group`. This is one "
-"of:"
+msgid "If you add a new crate, you should specify at least the `group`. This is one of:"
msgstr "如果添加新的 crate,至少要明确指定 `group`。可以为以下选项之一:"
#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
@@ -15598,24 +14857,20 @@ msgstr "例如:"
#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
msgid ""
-"Depending on the crate source code layout, you may also need to use this "
-"file to specify where its `LICENSE` file(s) can be found."
-msgstr ""
-"根据 crate 源代码布局,您可能还需要使用此文件指定其 `LICENSE` 文件的所在位"
-"置。"
+"Depending on the crate source code layout, you may also need to use this file to specify "
+"where its `LICENSE` file(s) can be found."
+msgstr "根据 crate 源代码布局,您可能还需要使用此文件指定其 `LICENSE` 文件的所在位置。"
#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md
msgid ""
-"Later, we'll see some other things you will need to configure in this file "
-"to resolve problems."
+"Later, we'll see some other things you will need to configure in this file to resolve "
+"problems."
msgstr "稍后,我们将介绍需要在此文件中配置的其他内容,以便能够解决问题。"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid ""
-"A tool called `gnrt` knows how to download crates and how to generate `BUILD."
-"gn` rules."
-msgstr ""
-"有一款名为 `gnrt` 的工具,具有下载 crate 以及生成 `BUILD.gn` 规则的功能。"
+"A tool called `gnrt` knows how to download crates and how to generate `BUILD.gn` rules."
+msgstr "有一款名为 `gnrt` 的工具,具有下载 crate 以及生成 `BUILD.gn` 规则的功能。"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid "To start, download the crate you want like this:"
@@ -15623,14 +14878,12 @@ msgstr "首先,按如下所示下载所需的 crate:"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid ""
-"Although the `gnrt` tool is part of the Chromium source code, by running "
-"this command you will be downloading and running its dependencies from "
-"`crates.io`. See [the earlier section](../cargo.md) discussing this security "
-"decision."
+"Although the `gnrt` tool is part of the Chromium source code, by running this command "
+"you will be downloading and running its dependencies from `crates.io`. See [the earlier "
+"section](../cargo.md) discussing this security decision."
msgstr ""
-"虽然 `gnrt` 工具是 Chromium 源代码的一部分,但通过运行此命令,您可以从 "
-"`crates.io` 下载并运行其依赖项。有关该安全决策的讨论,请参阅 [前面的部分](../"
-"cargo.md)。"
+"虽然 `gnrt` 工具是 Chromium 源代码的一部分,但通过运行此命令,您可以从 `crates.io` 下载并"
+"运行其依赖项。有关该安全决策的讨论,请参阅 [前面的部分](../cargo.md)。"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid "This `vendor` command may download:"
@@ -15647,24 +14900,21 @@ msgstr "直接依赖项和传递依赖项"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid ""
-"New versions of other crates, as required by `cargo` to resolve the complete "
-"set of crates required by Chromium."
-msgstr ""
-"`cargo` 要求的其他 crate 的新版本,用于解析 Chromium 所需的全部 crate。"
+"New versions of other crates, as required by `cargo` to resolve the complete set of "
+"crates required by Chromium."
+msgstr "`cargo` 要求的其他 crate 的新版本,用于解析 Chromium 所需的全部 crate。"
#: src/chromium/adding-third-party-crates/downloading-crates.md
msgid ""
"Chromium maintains patches for some crates, kept in `//third_party/rust/"
-"chromium_crates_io/patches`. These will be reapplied automatically, but if "
-"patching fails you may need to take manual action."
+"chromium_crates_io/patches`. These will be reapplied automatically, but if patching "
+"fails you may need to take manual action."
msgstr ""
-"Chromium 会修复一些 crate 的补丁,并将其保存在 `//third_party/rust/"
-"chromium_crates_io/patches` 中。系统会自动重新应用这些补丁,但如果补丁应用失"
-"败,您可能需要进行手动操作。"
+"Chromium 会修复一些 crate 的补丁,并将其保存在 `//third_party/rust/chromium_crates_io/"
+"patches` 中。系统会自动重新应用这些补丁,但如果补丁应用失败,您可能需要进行手动操作。"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
-msgid ""
-"Once you've downloaded the crate, generate the `BUILD.gn` files like this:"
+msgid "Once you've downloaded the crate, generate the `BUILD.gn` files like this:"
msgstr "下载 crate 后,按如下方式生成 `BUILD.gn` 文件:"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
@@ -15672,19 +14922,14 @@ msgid "Now run `git status`. You should find:"
msgstr "现在,运行 `git status`。您应该会看到:"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
-msgid ""
-"At least one new crate source code in `third_party/rust/chromium_crates_io/"
-"vendor`"
-msgstr ""
-"`third_party/rust/chromium_crates_io/vendor` 中至少包含一个新的 crate 源代码"
+msgid "At least one new crate source code in `third_party/rust/chromium_crates_io/vendor`"
+msgstr "`third_party/rust/chromium_crates_io/vendor` 中至少包含一个新的 crate 源代码"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
msgid ""
-"At least one new `BUILD.gn` in `third_party/rust//v`"
+"At least one new `BUILD.gn` in `third_party/rust//v`"
msgstr ""
-"`third_party/rust//v` 中至少包含一个新的 "
-"`BUILD.gn`"
+"`third_party/rust//v` 中至少包含一个新的 `BUILD.gn`"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
msgid "An appropriate `README.chromium`"
@@ -15693,39 +14938,36 @@ msgstr "相应的 `README.chromium`"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
#, fuzzy
msgid ""
-"The \"major semver version\" is a [Rust \"semver\" version number](https://"
-"doc.rust-lang.org/cargo/reference/semver.html)."
-msgstr ""
-"请参阅 [Rust 引用](https://doc.rust-lang.org/reference/type-layout.html)。"
+"The \"major semver version\" is a [Rust \"semver\" version number](https://doc.rust-lang."
+"org/cargo/reference/semver.html)."
+msgstr "请参阅 [Rust 引用](https://doc.rust-lang.org/reference/type-layout.html)。"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
-msgid ""
-"Take a close look, especially at the things generated in `third_party/rust`."
+msgid "Take a close look, especially at the things generated in `third_party/rust`."
msgstr "请仔细观察,尤其是 `third_party/rust` 中生成的内容。"
#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md
msgid ""
-"Talk a little about semver --- and specifically the way that in Chromium "
-"it's to allow multiple incompatible versions of a crate, which is "
-"discouraged but sometimes necessary in the Cargo ecosystem."
+"Talk a little about semver --- and specifically the way that in Chromium it's to allow "
+"multiple incompatible versions of a crate, which is discouraged but sometimes necessary "
+"in the Cargo ecosystem."
msgstr ""
-"浅谈下 semver,特别是在 Chromium 中,它支持使用多个不兼容的 crate 版本。虽然"
-"在 Cargo 生态系统中不鼓励这种方式,但在某些情况下却是必要的。"
+"浅谈下 semver,特别是在 Chromium 中,它支持使用多个不兼容的 crate 版本。虽然在 Cargo 生态"
+"系统中不鼓励这种方式,但在某些情况下却是必要的。"
#: src/chromium/adding-third-party-crates/resolving-problems.md
msgid ""
-"If your build fails, it may be because of a `build.rs`: programs which do "
-"arbitrary things at build time. This is fundamentally at odds with the "
-"design of `gn` and `ninja` which aim for static, deterministic, build rules "
-"to maximize parallelism and repeatability of builds."
+"If your build fails, it may be because of a `build.rs`: programs which do arbitrary "
+"things at build time. This is fundamentally at odds with the design of `gn` and `ninja` "
+"which aim for static, deterministic, build rules to maximize parallelism and "
+"repeatability of builds."
msgstr ""
-"如果构建失败,可能是 `build.rs` 文件所致:这些程序在构建过程中执行了任意操"
-"作。这与 `gn` 和 `ninja` 的设计完全不相符,它们旨在实现静态、确定性的构建规"
-"则,以最大限度地提高构建的并行性和可重复性。"
+"如果构建失败,可能是 `build.rs` 文件所致:这些程序在构建过程中执行了任意操作。这与 `gn` "
+"和 `ninja` 的设计完全不相符,它们旨在实现静态、确定性的构建规则,以最大限度地提高构建的并"
+"行性和可重复性。"
#: src/chromium/adding-third-party-crates/resolving-problems.md
-msgid ""
-"Some `build.rs` actions are automatically supported; others require action:"
+msgid "Some `build.rs` actions are automatically supported; others require action:"
msgstr "系统支持自动进行某些 `build.rs` 操作;而有些需要进行额外的处理:"
#: src/chromium/adding-third-party-crates/resolving-problems.md
@@ -15776,30 +15018,26 @@ msgstr "任意其他操作"
#: src/chromium/adding-third-party-crates/resolving-problems.md
msgid ""
-"Fortunately, most crates don't contain a build script, and fortunately, most "
-"build scripts only do the top two actions."
-msgstr ""
-"幸运的是,大多数 crate 不包含构建脚本,而且大多数的构建脚本只执行前两项操作。"
+"Fortunately, most crates don't contain a build script, and fortunately, most build "
+"scripts only do the top two actions."
+msgstr "幸运的是,大多数 crate 不包含构建脚本,而且大多数的构建脚本只执行前两项操作。"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md
msgid ""
-"If `ninja` complains about missing files, check the `build.rs` to see if it "
-"writes source code files."
-msgstr ""
-"如果 `ninja` 提示有文件缺失,请检查 `build.rs`,确认其是否写入了源代码文件。"
+"If `ninja` complains about missing files, check the `build.rs` to see if it writes "
+"source code files."
+msgstr "如果 `ninja` 提示有文件缺失,请检查 `build.rs`,确认其是否写入了源代码文件。"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md
msgid ""
-"If so, modify [`gnrt_config.toml`](../configuring-gnrt-config-toml.md) to "
-"add `build-script-outputs` to the crate. If this is a transitive dependency, "
-"that is, one on which Chromium code should not directly depend, also add "
-"`allow-first-party-usage=false`. There are several examples already in that "
-"file:"
+"If so, modify [`gnrt_config.toml`](../configuring-gnrt-config-toml.md) to add `build-"
+"script-outputs` to the crate. If this is a transitive dependency, that is, one on which "
+"Chromium code should not directly depend, also add `allow-first-party-usage=false`. "
+"There are several examples already in that file:"
msgstr ""
-"如果是,请修改 [`gnrt_config.toml`](../configuration-gnrt-config-toml.md),"
-"将 `build-script-outputs` 添加到 crate。如果这是一个传递依赖项(即 Chromium "
-"代码不应直接依赖的依赖项),还要添加 `allow-first-party-usage=false`。该文件"
-"中已经提供了若干示例:"
+"如果是,请修改 [`gnrt_config.toml`](../configuration-gnrt-config-toml.md),将 `build-"
+"script-outputs` 添加到 crate。如果这是一个传递依赖项(即 Chromium 代码不应直接依赖的依赖"
+"项),还要添加 `allow-first-party-usage=false`。该文件中已经提供了若干示例:"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md
#, fuzzy
@@ -15818,25 +15056,25 @@ msgstr ""
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md
msgid ""
-"Now rerun [`gnrt.py -- gen`](../generating-gn-build-rules.md) to regenerate "
-"`BUILD.gn` files to inform ninja that this particular output file is input "
-"to subsequent build steps."
+"Now rerun [`gnrt.py -- gen`](../generating-gn-build-rules.md) to regenerate `BUILD.gn` "
+"files to inform ninja that this particular output file is input to subsequent build "
+"steps."
msgstr ""
-"现在,请重新运行 [`gnrt.py -- gen`](../generating-gn-build-rules.md),重新生"
-"成 `BUILD.gn` 文件,以通知 ninja 此特定输出文件将被用作后续构建步骤的输入。"
+"现在,请重新运行 [`gnrt.py -- gen`](../generating-gn-build-rules.md),重新生成 `BUILD."
+"gn` 文件,以通知 ninja 此特定输出文件将被用作后续构建步骤的输入。"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md
msgid ""
-"Some crates use the [`cc`](https://crates.io/crates/cc) crate to build and "
-"link C/C++ libraries. Other crates parse C/C++ using [`bindgen`](https://"
-"crates.io/crates/bindgen) within their build scripts. These actions can't be "
-"supported in a Chromium context --- our gn, ninja and LLVM build system is "
-"very specific in expressing relationships between build actions."
+"Some crates use the [`cc`](https://crates.io/crates/cc) crate to build and link C/C++ "
+"libraries. Other crates parse C/C++ using [`bindgen`](https://crates.io/crates/bindgen) "
+"within their build scripts. These actions can't be supported in a Chromium context --- "
+"our gn, ninja and LLVM build system is very specific in expressing relationships between "
+"build actions."
msgstr ""
-"有些 crate 使用 [`cc`](https://crates.io/crates/cc) crate 来构建和关联 C/C++ "
-"库。其他 crate 会在其构建脚本中使用 [`bindgen`](https://crates.io/crates/"
-"bindgen) 解析 C/C++。Chromium 环境中不支持进行这些操作,因为我们的 gn、ninja "
-"和 LLVM 构建系统在表达构建操作之间的关系方面具有非常严格具体的要求。"
+"有些 crate 使用 [`cc`](https://crates.io/crates/cc) crate 来构建和关联 C/C++ 库。其他 "
+"crate 会在其构建脚本中使用 [`bindgen`](https://crates.io/crates/bindgen) 解析 C/C++。"
+"Chromium 环境中不支持进行这些操作,因为我们的 gn、ninja 和 LLVM 构建系统在表达构建操作之"
+"间的关系方面具有非常严格具体的要求。"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md
msgid "So, your options are:"
@@ -15852,25 +15090,24 @@ msgstr "对 crate 应用补丁。"
#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md
msgid ""
-"Patches should be kept in `third_party/rust/chromium_crates_io/patches/"
-"` - see for example the [patches against the `cxx` crate](https://"
-"source.chromium.org/chromium/chromium/src/+/main:third_party/rust/"
-"chromium_crates_io/patches/cxx/) - and will be applied automatically by "
-"`gnrt` each time it upgrades the crate."
+"Patches should be kept in `third_party/rust/chromium_crates_io/patches/` - see "
+"for example the [patches against the `cxx` crate](https://source.chromium.org/chromium/"
+"chromium/src/+/main:third_party/rust/chromium_crates_io/patches/cxx/) - and will be "
+"applied automatically by `gnrt` each time it upgrades the crate."
msgstr ""
-"补丁应保存在 `third_party/rust/chromium_crates_io/patches/` 中,请参"
-"阅 [面向 `cxx` crate 的补丁](https://source.chromium.org/chromium/chromium/"
-"src/+/main:third_party/rust/chromium_crates_io/patches/cxx/) 中的示例。每当 "
-"`gnrt` 升级该 crate 时,将会自动应用补丁文件。"
+"补丁应保存在 `third_party/rust/chromium_crates_io/patches/` 中,请参阅 [面向 "
+"`cxx` crate 的补丁](https://source.chromium.org/chromium/chromium/src/+/main:third_party/"
+"rust/chromium_crates_io/patches/cxx/) 中的示例。每当 `gnrt` 升级该 crate 时,将会自动应用"
+"补丁文件。"
#: src/chromium/adding-third-party-crates/depending-on-a-crate.md
msgid ""
-"Once you've added a third-party crate and generated build rules, depending "
-"on a crate is simple. Find your `rust_static_library` target, and add a "
-"`dep` on the `:lib` target within your crate."
+"Once you've added a third-party crate and generated build rules, depending on a crate is "
+"simple. Find your `rust_static_library` target, and add a `dep` on the `:lib` target "
+"within your crate."
msgstr ""
-"添加第三方 crate 并生成构建规则后,就可轻松使用该 crate。请找到 "
-"`rust_static_library` 目标,并在 crate 中的 `:lib` 目标上添加 `dep`。"
+"添加第三方 crate 并生成构建规则后,就可轻松使用该 crate。请找到 `rust_static_library` 目"
+"标,并在 crate 中的 `:lib` 目标上添加 `dep`。"
#: src/chromium/adding-third-party-crates/depending-on-a-crate.md
#, fuzzy
@@ -15882,15 +15119,13 @@ msgstr "特定于操作系统"
msgid ""
"```bob\n"
" +------------+ +----------------------+\n"
-"\"//third_party/rust\" | crate name | \"/v\" | major semver version | \":"
-"lib\"\n"
+"\"//third_party/rust\" | crate name | \"/v\" | major semver version | \":lib\"\n"
" +------------+ +----------------------+\n"
"```"
msgstr ""
"```bob\n"
" +------------+ +----------------------+\n"
-"\"//third_party/rust\" | crate name | \"/v\" | major semver version | \"/:"
-"lib\"\n"
+"\"//third_party/rust\" | crate name | \"/v\" | major semver version | \"/:lib\"\n"
" +------------+ +----------------------+\n"
"```"
@@ -15919,42 +15154,38 @@ msgstr "审核第三方 crate"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"Adding new libraries is subject to Chromium's standard [policies](https://"
-"chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/rust."
-"md#Third_party-review), but of course also subject to security review. As "
-"you may be bringing in not just a single crate but also transitive "
-"dependencies, there may be a lot of code to review. On the other hand, safe "
-"Rust code can have limited negative side effects. How should you review it?"
+"Adding new libraries is subject to Chromium's standard [policies](https://chromium."
+"googlesource.com/chromium/src/+/refs/heads/main/docs/rust.md#Third_party-review), but of "
+"course also subject to security review. As you may be bringing in not just a single "
+"crate but also transitive dependencies, there may be a lot of code to review. On the "
+"other hand, safe Rust code can have limited negative side effects. How should you review "
+"it?"
msgstr ""
-"添加新库须遵守 Chromium 的标准 [政策](https://chromium.googlesource.com/"
-"chromium/src/+/refs/heads/main/docs/rust.md#Third_party-review),当然也要遵守"
-"安全审核标准。您可能不仅要引入单个 crate,而且还要引入传递依赖项,因此可能需"
-"要审核大量代码。另一方面,安全的 Rust 代码可能产生的副作用有限。应如何对其进"
-"行审核?"
+"添加新库须遵守 Chromium 的标准 [政策](https://chromium.googlesource.com/chromium/src/+/"
+"refs/heads/main/docs/rust.md#Third_party-review),当然也要遵守安全审核标准。您可能不仅要"
+"引入单个 crate,而且还要引入传递依赖项,因此可能需要审核大量代码。另一方面,安全的 Rust "
+"代码可能产生的副作用有限。应如何对其进行审核?"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"Over time Chromium aims to move to a process based around [cargo vet]"
-"(https://mozilla.github.io/cargo-vet/)."
+"Over time Chromium aims to move to a process based around [cargo vet](https://mozilla."
+"github.io/cargo-vet/)."
msgstr ""
-"随着时间的推移,Chromium 计划逐步采用以 [cargo vet](https://mozilla.github."
-"io/cargo-vet/) 为核心的处理流程。"
+"随着时间的推移,Chromium 计划逐步采用以 [cargo vet](https://mozilla.github.io/cargo-"
+"vet/) 为核心的处理流程。"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
-msgid ""
-"Meanwhile, for each new crate addition, we are checking for the following:"
+msgid "Meanwhile, for each new crate addition, we are checking for the following:"
msgstr "与此同时,每当添加新的 crate 时,我们都会检查以下内容:"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"Understand why each crate is used. What's the relationship between crates? "
-"If the build system for each crate contains a `build.rs` or procedural "
-"macros, work out what they're for. Are they compatible with the way Chromium "
-"is normally built?"
+"Understand why each crate is used. What's the relationship between crates? If the build "
+"system for each crate contains a `build.rs` or procedural macros, work out what they're "
+"for. Are they compatible with the way Chromium is normally built?"
msgstr ""
-"了解每个 crate 的用途。crate 之间存在什么关系?如果每个 crate 的构建系统都包"
-"含 `build.rs` 或过程宏,请确定它们的用途。它们能否与 Chromium 的正常构建方式"
-"相兼容。"
+"了解每个 crate 的用途。crate 之间存在什么关系?如果每个 crate 的构建系统都包含 `build."
+"rs` 或过程宏,请确定它们的用途。它们能否与 Chromium 的正常构建方式相兼容。"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid "Check each crate seems to be reasonably well maintained"
@@ -15963,23 +15194,21 @@ msgstr "检查每个 crate 是否得到合理维护。"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
"Use `cd third-party/rust/chromium_crates_io; cargo audit` to check for known "
-"vulnerabilities (first you'll need to `cargo install cargo-audit`, which "
-"ironically involves downloading lots of dependencies from the internet[2](../"
-"cargo.md))"
+"vulnerabilities (first you'll need to `cargo install cargo-audit`, which ironically "
+"involves downloading lots of dependencies from the internet[2](../cargo.md))"
msgstr ""
-"使用 `cd third-party/rust/chromium_crates_io; cargo review` 检查已知漏洞(首"
-"先需要运行 `cargo install cargo-audit`,令人意外的是,这个过程中需要从互联网"
-"下载大量的依赖项 [2](../cargo.md))"
+"使用 `cd third-party/rust/chromium_crates_io; cargo review` 检查已知漏洞(首先需要运行 "
+"`cargo install cargo-audit`,令人意外的是,这个过程中需要从互联网下载大量的依赖项 [2](../"
+"cargo.md))"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"Ensure any `unsafe` code is good enough for the [Rule of Two](https://"
-"chromium.googlesource.com/chromium/src/+/main/docs/security/rule-of-2."
-"md#unsafe-code-in-safe-languages)"
+"Ensure any `unsafe` code is good enough for the [Rule of Two](https://chromium."
+"googlesource.com/chromium/src/+/main/docs/security/rule-of-2.md#unsafe-code-in-safe-"
+"languages)"
msgstr ""
-"确保所有 `unsafe` 代码都符合 [两大规则](https://chromium.googlesource.com/"
-"chromium/src/+/main/docs/security/rule-of-2.md#unsafe-code-in-safe-"
-"languages) 的要求"
+"确保所有 `unsafe` 代码都符合 [两大规则](https://chromium.googlesource.com/chromium/src/+/"
+"main/docs/security/rule-of-2.md#unsafe-code-in-safe-languages) 的要求"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid "Check for any use of `fs` or `net` APIs"
@@ -15987,20 +15216,20 @@ msgstr "检查是否使用了 `fs` 或 `net` API"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"Read all the code at a sufficient level to look for anything out of place "
-"that might have been maliciously inserted. (You can't realistically aim for "
-"100% perfection here: there's often just too much code.)"
+"Read all the code at a sufficient level to look for anything out of place that might "
+"have been maliciously inserted. (You can't realistically aim for 100% perfection here: "
+"there's often just too much code.)"
msgstr ""
-"尽可能地仔细阅读所有代码,查找任何可能属于恶意插入,稍显异常的地方。(但现实"
-"中,您不可能做到百无遗漏,因为代码量通常太庞大了。)"
+"尽可能地仔细阅读所有代码,查找任何可能属于恶意插入,稍显异常的地方。(但现实中,您不可能"
+"做到百无遗漏,因为代码量通常太庞大了。)"
#: src/chromium/adding-third-party-crates/reviews-and-audits.md
msgid ""
-"These are just guidelines --- work with reviewers from `security@chromium."
-"org` to work out the right way to become confident of the crate."
+"These are just guidelines --- work with reviewers from `security@chromium.org` to work "
+"out the right way to become confident of the crate."
msgstr ""
-"以下只是一些指导建议,请与 `security@chromium.org` 的审核者合租,共同找出能够"
-"确保 crate 安全的正确方法。"
+"以下只是一些指导建议,请与 `security@chromium.org` 的审核者合租,共同找出能够确保 crate "
+"安全的正确方法。"
#: src/chromium/adding-third-party-crates/checking-in.md
#, fuzzy
@@ -16017,11 +15246,9 @@ msgstr "`//third_party/rust/chromium_crates_io` 中的 crate 代码"
#: src/chromium/adding-third-party-crates/checking-in.md
msgid ""
-"Metadata (`BUILD.gn` and `README.chromium`) in `//third_party/rust//"
-"`"
+"Metadata (`BUILD.gn` and `README.chromium`) in `//third_party/rust//`"
msgstr ""
-"`//third_party/rust//` 中的元数据(`BUILD.gn` 和 `README."
-"chromium`)"
+"`//third_party/rust//` 中的元数据(`BUILD.gn` 和 `README.chromium`)"
#: src/chromium/adding-third-party-crates/checking-in.md
msgid "Please also add an `OWNERS` file in the latter location."
@@ -16029,67 +15256,63 @@ msgstr "此外,请在后面的位置添加 `OWNERS` 文件。"
#: src/chromium/adding-third-party-crates/checking-in.md
msgid ""
-"You should land all this, along with your `Cargo.toml` and `gnrt_config."
-"toml` changes, into the Chromium repo."
+"You should land all this, along with your `Cargo.toml` and `gnrt_config.toml` changes, "
+"into the Chromium repo."
msgstr ""
-"您应将所有这些内容,以及对 `Cargo.toml` 和 `gnrt_config.toml` 的更改一起提交"
-"到 Chromium 仓库中。"
+"您应将所有这些内容,以及对 `Cargo.toml` 和 `gnrt_config.toml` 的更改一起提交到 Chromium "
+"仓库中。"
#: src/chromium/adding-third-party-crates/checking-in.md
msgid ""
-"**Important**: you need to use `git add -f` because otherwise `.gitignore` "
-"files may result in some files being skipped."
+"**Important**: you need to use `git add -f` because otherwise `.gitignore` files may "
+"result in some files being skipped."
msgstr ""
-"**重要提示**:您需要使用 `git add -f` 命令,否则 `.gitignore` 文件可能会导致"
-"某些文件被跳过。"
+"**重要提示**:您需要使用 `git add -f` 命令,否则 `.gitignore` 文件可能会导致某些文件被跳"
+"过。"
#: src/chromium/adding-third-party-crates/checking-in.md
msgid ""
-"As you do so, you might find presubmit checks fail because of non-inclusive "
-"language. This is because Rust crate data tends to include names of git "
-"branches, and many projects still use non-inclusive terminology there. So "
-"you may need to run:"
+"As you do so, you might find presubmit checks fail because of non-inclusive language. "
+"This is because Rust crate data tends to include names of git branches, and many "
+"projects still use non-inclusive terminology there. So you may need to run:"
msgstr ""
-"在此过程中,您可能会发现由于使用了非包容性语言,导致提交前检查失败。这是因为 "
-"Rust crate 数据往往包含 git 分支的名称,而许多项目仍然在使用非包容性术语。因"
-"此,您需要运行以下命令:"
+"在此过程中,您可能会发现由于使用了非包容性语言,导致提交前检查失败。这是因为 Rust crate "
+"数据往往包含 git 分支的名称,而许多项目仍然在使用非包容性术语。因此,您需要运行以下命令:"
#: src/chromium/adding-third-party-crates/keeping-up-to-date.md
msgid ""
-"As the OWNER of any third party Chromium dependency, you are [expected to "
-"keep it up to date with any security fixes](https://chromium.googlesource."
-"com/chromium/src/+/main/docs/adding_to_third_party.md#add-owners). It is "
-"hoped that we will soon automate this for Rust crates, but for now, it's "
-"still your responsibility just as it is for any other third party dependency."
+"As the OWNER of any third party Chromium dependency, you are [expected to keep it up to "
+"date with any security fixes](https://chromium.googlesource.com/chromium/src/+/main/docs/"
+"adding_to_third_party.md#add-owners). It is hoped that we will soon automate this for "
+"Rust crates, but for now, it's still your responsibility just as it is for any other "
+"third party dependency."
msgstr ""
-"作为任何第三方 Chromium 依赖项的所有者,您 [应使用任何安全修复程序,确保该依"
-"赖项处于最新状态](https://chromium.googlesource.com/chromium/src/+/main/docs/"
-"adding_to_third_party.md#add-owners)。我们希望能够尽快实现对 Rust crate 自动"
-"执行此操作,但目前仍由您负责执行,就像对待任何其他第三方依赖项一样。"
+"作为任何第三方 Chromium 依赖项的所有者,您 [应使用任何安全修复程序,确保该依赖项处于最新"
+"状态](https://chromium.googlesource.com/chromium/src/+/main/docs/adding_to_third_party."
+"md#add-owners)。我们希望能够尽快实现对 Rust crate 自动执行此操作,但目前仍由您负责执行,"
+"就像对待任何其他第三方依赖项一样。"
#: src/exercises/chromium/third-party.md
msgid ""
-"Add [uwuify](https://crates.io/crates/uwuify) to Chromium, turning off the "
-"crate's [default features](https://doc.rust-lang.org/cargo/reference/"
-"features.html#the-default-feature). Assume that the crate will be used in "
-"shipping Chromium, but won't be used to handle untrustworthy input."
+"Add [uwuify](https://crates.io/crates/uwuify) to Chromium, turning off the crate's "
+"[default features](https://doc.rust-lang.org/cargo/reference/features.html#the-default-"
+"feature). Assume that the crate will be used in shipping Chromium, but won't be used to "
+"handle untrustworthy input."
msgstr ""
-"将 [uwuify](https://crates.io/crates/uwuify) 添加到 Chromium,以停用 crate "
-"的 [默认功能](https://doc.rust-lang.org/cargo/reference/features.html#the-"
-"default-feature)。假设该 crate 会交付 Chromium 时被使用,但不会用于处理不可信"
-"的输入内容。"
+"将 [uwuify](https://crates.io/crates/uwuify) 添加到 Chromium,以停用 crate 的 [默认功能]"
+"(https://doc.rust-lang.org/cargo/reference/features.html#the-default-feature)。假设该 "
+"crate 会交付 Chromium 时被使用,但不会用于处理不可信的输入内容。"
#: src/exercises/chromium/third-party.md
msgid ""
-"(In the next exercise we'll use uwuify from Chromium, but feel free to skip "
-"ahead and do that now if you like. Or, you could create a new "
-"[`rust_executable` target](https://source.chromium.org/chromium/chromium/src/"
-"+/main:build/rust/rust_executable.gni) which uses `uwuify`)."
+"(In the next exercise we'll use uwuify from Chromium, but feel free to skip ahead and do "
+"that now if you like. Or, you could create a new [`rust_executable` target](https://"
+"source.chromium.org/chromium/chromium/src/+/main:build/rust/rust_executable.gni) which "
+"uses `uwuify`)."
msgstr ""
-"(在下一个练习中,我们将使用 Chromium 中的 uwuify;但您也可以跳过这一步,现在"
-"就开始此操作。或者,您可以创建一个使用 `uwuify` 的新 [`rust_executable` 目标]"
-"(https://source.chromium.org/chromium/chromium/src/+/main:build/rust/"
-"rust_executable.gni)。"
+"(在下一个练习中,我们将使用 Chromium 中的 uwuify;但您也可以跳过这一步,现在就开始此操"
+"作。或者,您可以创建一个使用 `uwuify` 的新 [`rust_executable` 目标](https://source."
+"chromium.org/chromium/chromium/src/+/main:build/rust/rust_executable.gni)。"
#: src/exercises/chromium/third-party.md
#, fuzzy
@@ -16136,19 +15359,16 @@ msgstr ""
#: src/exercises/chromium/third-party.md
#, fuzzy
msgid ""
-"If students are downloading even more than that, they probably forgot to "
-"turn off the default features."
+"If students are downloading even more than that, they probably forgot to turn off the "
+"default features."
msgstr ""
-"所需的全部 crate 包括:uwuify、smallvec、scopeguard、parking_lot、"
-"park_lot_core、lock_api 和 Instant。如果学生下载的 crate 数目比这还多,则他们"
-"可能忘了停用默认功能。"
+"所需的全部 crate 包括:uwuify、smallvec、scopeguard、parking_lot、park_lot_core、"
+"lock_api 和 Instant。如果学生下载的 crate 数目比这还多,则他们可能忘了停用默认功能。"
#: src/exercises/chromium/third-party.md
#, fuzzy
-msgid ""
-"Thanks to [Daniel Liu](https://github.com/Daniel-Liu-c0deb0t) for this crate!"
-msgstr ""
-"感谢 [Daniel Liu](https://github.com/Daniel-Liu-c0deb0t) 提供此 crate!"
+msgid "Thanks to [Daniel Liu](https://github.com/Daniel-Liu-c0deb0t) for this crate!"
+msgstr "感谢 [Daniel Liu](https://github.com/Daniel-Liu-c0deb0t) 提供此 crate!"
#: src/exercises/chromium/bringing-it-together.md
#, fuzzy
@@ -16157,8 +15377,8 @@ msgstr "综合应用练习"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"In this exercise, you're going to add a whole new Chromium feature, bringing "
-"together everything you already learned."
+"In this exercise, you're going to add a whole new Chromium feature, bringing together "
+"everything you already learned."
msgstr "在本练习中,您将运用之前所学的全部知识,添加一项全新的 Chromium 功能。"
#: src/exercises/chromium/bringing-it-together.md
@@ -16168,43 +15388,35 @@ msgstr "“产品管理”简介"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"A community of pixies has been discovered living in a remote rainforest. "
-"It's important that we get Chromium for Pixies delivered to them as soon as "
-"possible."
+"A community of pixies has been discovered living in a remote rainforest. It's important "
+"that we get Chromium for Pixies delivered to them as soon as possible."
msgstr ""
-"在偏僻的热带雨林中,发现住着一群小精灵。我们务必尽快创建一款精灵版 Chromium,"
-"交付给他们。"
+"在偏僻的热带雨林中,发现住着一群小精灵。我们务必尽快创建一款精灵版 Chromium,交付给他们。"
#: src/exercises/chromium/bringing-it-together.md
-msgid ""
-"The requirement is to translate all Chromium's UI strings into Pixie "
-"language."
+msgid "The requirement is to translate all Chromium's UI strings into Pixie language."
msgstr "要求是将 Chromium 的所有界面字符串翻译为精灵语。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"There's not time to wait for proper translations, but fortunately pixie "
-"language is very close to English, and it turns out there's a Rust crate "
-"which does the translation."
+"There's not time to wait for proper translations, but fortunately pixie language is very "
+"close to English, and it turns out there's a Rust crate which does the translation."
msgstr ""
-"由于时间紧迫,无法等待准确的翻译。但幸运的是,精灵语与英语非常接近,然后我们"
-"发现有一个 Rust crate 可以执行此翻译任务。"
+"由于时间紧迫,无法等待准确的翻译。但幸运的是,精灵语与英语非常接近,然后我们发现有一个 "
+"Rust crate 可以执行此翻译任务。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"In fact, you already [imported that crate in the previous exercise](https://"
-"crates.io/crates/uwuify)."
-msgstr ""
-"事实上,您已经 [在上一个练习中导入了该 crate](https://crates.io/crates/"
-"uwuify)。"
+"In fact, you already [imported that crate in the previous exercise](https://crates.io/"
+"crates/uwuify)."
+msgstr "事实上,您已经 [在上一个练习中导入了该 crate](https://crates.io/crates/uwuify)。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"(Obviously, real translations of Chrome require incredible care and "
-"diligence. Don't ship this!)"
+"(Obviously, real translations of Chrome require incredible care and diligence. Don't "
+"ship this!)"
msgstr ""
-"(显然,对 Chrome 进行准确恰当的翻译,需要做到极度细致和全力以赴。请勿交付此"
-"产品!)"
+"(显然,对 Chrome 进行准确恰当的翻译,需要做到极度细致和全力以赴。请勿交付此产品!)"
#: src/exercises/chromium/bringing-it-together.md
msgid "Steps"
@@ -16212,80 +15424,72 @@ msgstr "步骤"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"Modify `ResourceBundle::MaybeMangleLocalizedString` so that it uwuifies all "
-"strings before display. In this special build of Chromium, it should always "
-"do this irrespective of the setting of `mangle_localized_strings_`."
+"Modify `ResourceBundle::MaybeMangleLocalizedString` so that it uwuifies all strings "
+"before display. In this special build of Chromium, it should always do this irrespective "
+"of the setting of `mangle_localized_strings_`."
msgstr ""
-"修改 `ResourceBundle::MaybeMangleLocalizedString`,在显示之前对所有字符串进"
-"行 uwu 处理。在这个特殊的 Chromium 版本中,无论 `mangle_localized_strings_` "
-"的设置如何,都应该始终执行此操作。"
+"修改 `ResourceBundle::MaybeMangleLocalizedString`,在显示之前对所有字符串进行 uwu 处理。"
+"在这个特殊的 Chromium 版本中,无论 `mangle_localized_strings_` 的设置如何,都应该始终执行"
+"此操作。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"If you've done everything right across all these exercises, congratulations, "
-"you should have created Chrome for pixies!"
-msgstr ""
-"如果您正确完成了这些练习中的所有操作,那么恭喜您已经成功创建了一款精灵版 "
-"Chrome!"
+"If you've done everything right across all these exercises, congratulations, you should "
+"have created Chrome for pixies!"
+msgstr "如果您正确完成了这些练习中的所有操作,那么恭喜您已经成功创建了一款精灵版 Chrome!"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"UTF16 vs UTF8. Students should be aware that Rust strings are always UTF8, "
-"and will probably decide that it's better to do the conversion on the C++ "
-"side using `base::UTF16ToUTF8` and back again."
+"UTF16 vs UTF8. Students should be aware that Rust strings are always UTF8, and will "
+"probably decide that it's better to do the conversion on the C++ side using `base::"
+"UTF16ToUTF8` and back again."
msgstr ""
-"UTF16 与 UTF8。学生应注意,Rust 字符串始终采用 UTF8 编码,它们可能会决定在 C+"
-"+ 端使用 `base::UTF16ToUTF8` 进行转换,然后再进行反向转换。"
+"UTF16 与 UTF8。学生应注意,Rust 字符串始终采用 UTF8 编码,它们可能会决定在 C++ 端使用 "
+"`base::UTF16ToUTF8` 进行转换,然后再进行反向转换。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"If students decide to do the conversion on the Rust side, they'll need to "
-"consider [`String::from_utf16`](https://doc.rust-lang.org/std/string/struct."
-"String.html#method.from_utf16), consider error handling, and consider which "
-"[CXX supported types can transfer a lot of u16s](https://cxx.rs/binding/"
-"slice.html)."
+"If students decide to do the conversion on the Rust side, they'll need to consider "
+"[`String::from_utf16`](https://doc.rust-lang.org/std/string/struct.String.html#method."
+"from_utf16), consider error handling, and consider which [CXX supported types can "
+"transfer a lot of u16s](https://cxx.rs/binding/slice.html)."
msgstr ""
-"如果学生决定在 Rust 端进行转换,则需要考虑使用 [`String::from_utf16`]"
-"(https://doc.rust-lang.org/std/string/struct.String.html#method.from_utf16) "
-"方法,同时注意错误处理,并确定哪些 [CXX 支持的类型可以传输大量 u16s](https://"
-"cxx.rs/binding/slice.html)。"
+"如果学生决定在 Rust 端进行转换,则需要考虑使用 [`String::from_utf16`](https://doc.rust-"
+"lang.org/std/string/struct.String.html#method.from_utf16) 方法,同时注意错误处理,并确定"
+"哪些 [CXX 支持的类型可以传输大量 u16s](https://cxx.rs/binding/slice.html)。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"Students may design the C++/Rust boundary in several different ways, e.g. "
-"taking and returning strings by value, or taking a mutable reference to a "
-"string. If a mutable reference is used, CXX will likely tell the student "
-"that they need to use [`Pin`](https://doc.rust-lang.org/std/pin/). You may "
-"need to explain what `Pin` does, and then explain why CXX needs it for "
-"mutable references to C++ data: the answer is that C++ data can't be moved "
-"around like Rust data, because it may contain self-referential pointers."
+"Students may design the C++/Rust boundary in several different ways, e.g. taking and "
+"returning strings by value, or taking a mutable reference to a string. If a mutable "
+"reference is used, CXX will likely tell the student that they need to use [`Pin`]"
+"(https://doc.rust-lang.org/std/pin/). You may need to explain what `Pin` does, and then "
+"explain why CXX needs it for mutable references to C++ data: the answer is that C++ data "
+"can't be moved around like Rust data, because it may contain self-referential pointers."
msgstr ""
-"学生可以通过多种方式设计 C++/Rust 边界,例如按值传递和返回字符串,或对字符串"
-"采取可变引用。如果使用可变引用,CXX 可能会提示学生需要使用 [`Pin`](https://"
-"doc.rust-lang.org/std/pin/) 方法。您可能需要解释“Pin”的用途,以及为何 CXX 需"
-"要它来对 C++ 数据进行可变引用:原因是 C++ 数据无法像 Rust 数据那样自由移动,"
-"它可能包含自引用指针。"
+"学生可以通过多种方式设计 C++/Rust 边界,例如按值传递和返回字符串,或对字符串采取可变引"
+"用。如果使用可变引用,CXX 可能会提示学生需要使用 [`Pin`](https://doc.rust-lang.org/std/"
+"pin/) 方法。您可能需要解释“Pin”的用途,以及为何 CXX 需要它来对 C++ 数据进行可变引用:原因"
+"是 C++ 数据无法像 Rust 数据那样自由移动,它可能包含自引用指针。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"The C++ target containing `ResourceBundle::MaybeMangleLocalizedString` will "
-"need to depend on a `rust_static_library` target. The student probably "
-"already did this."
+"The C++ target containing `ResourceBundle::MaybeMangleLocalizedString` will need to "
+"depend on a `rust_static_library` target. The student probably already did this."
msgstr ""
-"对于包含 `ResourceBundle::MaybeMangleLocalizedString` 的 C++ 目标,需要依赖"
-"于 `rust_static_library` 目标。学生可能已经执行了此操作。"
+"对于包含 `ResourceBundle::MaybeMangleLocalizedString` 的 C++ 目标,需要依赖于 "
+"`rust_static_library` 目标。学生可能已经执行了此操作。"
#: src/exercises/chromium/bringing-it-together.md
msgid ""
-"The `rust_static_library` target will need to depend on `//third_party/rust/"
-"uwuify/v0_2:lib`."
-msgstr ""
-"`rust_static_library` 目标需要依赖于 `//third_party/rust/uwuify/v0_2:lib`。"
+"The `rust_static_library` target will need to depend on `//third_party/rust/uwuify/v0_2:"
+"lib`."
+msgstr "`rust_static_library` 目标需要依赖于 `//third_party/rust/uwuify/v0_2:lib`。"
#: src/exercises/chromium/solutions.md
msgid ""
-"Solutions to the Chromium exercises can be found in [this series of CLs]"
-"(https://chromium-review.googlesource.com/c/chromium/src/+/5096560)."
+"Solutions to the Chromium exercises can be found in [this series of CLs](https://"
+"chromium-review.googlesource.com/c/chromium/src/+/5096560)."
msgstr ""
#: src/bare-metal.md
@@ -16295,22 +15499,21 @@ msgstr "欢迎来学习裸机 Rust"
#: src/bare-metal.md
msgid ""
-"This is a standalone one-day course about bare-metal Rust, aimed at people "
-"who are familiar with the basics of Rust (perhaps from completing the "
-"Comprehensive Rust course), and ideally also have some experience with bare-"
-"metal programming in some other language such as C."
+"This is a standalone one-day course about bare-metal Rust, aimed at people who are "
+"familiar with the basics of Rust (perhaps from completing the Comprehensive Rust "
+"course), and ideally also have some experience with bare-metal programming in some other "
+"language such as C."
msgstr ""
-"这是单独为裸机 Rust 开设的课程,为期一天,主要面向熟悉 Rust 基础知识的人员"
-"(例如已学完 Comprehensive Rust),最好也有一些使用其他语言(例如 C)进行裸机"
-"编程的经验。"
+"这是单独为裸机 Rust 开设的课程,为期一天,主要面向熟悉 Rust 基础知识的人员(例如已学完 "
+"Comprehensive Rust),最好也有一些使用其他语言(例如 C)进行裸机编程的经验。"
#: src/bare-metal.md
msgid ""
-"Today we will talk about 'bare-metal' Rust: running Rust code without an OS "
-"underneath us. This will be divided into several parts:"
+"Today we will talk about 'bare-metal' Rust: running Rust code without an OS underneath "
+"us. This will be divided into several parts:"
msgstr ""
-"今天,我们将探讨 `bare-metal` Rust:即在没有操作系统支持的情况下运行 Rust 代"
-"码。该部分主要分为以下内容:"
+"今天,我们将探讨 `bare-metal` Rust:即在没有操作系统支持的情况下运行 Rust 代码。该部分主"
+"要分为以下内容:"
#: src/bare-metal.md
msgid "What is `no_std` Rust?"
@@ -16330,25 +15533,21 @@ msgstr "有助于裸机 Rust 开发的一些实用 crate。"
#: src/bare-metal.md
msgid ""
-"For the microcontroller part of the course we will use the [BBC micro:bit]"
-"(https://microbit.org/) v2 as an example. It's a [development board](https://"
-"tech.microbit.org/hardware/) based on the Nordic nRF51822 microcontroller "
-"with some LEDs and buttons, an I2C-connected accelerometer and compass, and "
-"an on-board SWD debugger."
+"For the microcontroller part of the course we will use the [BBC micro:bit](https://"
+"microbit.org/) v2 as an example. It's a [development board](https://tech.microbit.org/"
+"hardware/) based on the Nordic nRF51822 microcontroller with some LEDs and buttons, an "
+"I2C-connected accelerometer and compass, and an on-board SWD debugger."
msgstr ""
-"在本课程的微控制器部分,我们将使用 [BBC micro:bit](https://microbit.org/) v2 "
-"作为示例。这是一款基于 Nordic nRF51822 微控制器的 [开发板](https://tech."
-"microbit.org/hardware/),配有一些 LED 和按钮、连接 I2C 的加速度计和罗盘,以及"
-"板载 SWD 调试程序。"
+"在本课程的微控制器部分,我们将使用 [BBC micro:bit](https://microbit.org/) v2 作为示例。这"
+"是一款基于 Nordic nRF51822 微控制器的 [开发板](https://tech.microbit.org/hardware/),配有"
+"一些 LED 和按钮、连接 I2C 的加速度计和罗盘,以及板载 SWD 调试程序。"
#: src/bare-metal.md
-msgid ""
-"To get started, install some tools we'll need later. On gLinux or Debian:"
+msgid "To get started, install some tools we'll need later. On gLinux or Debian:"
msgstr "首先,请安装我们稍后需要用到的一些工具。在 gLinux 或 Debian 上:"
#: src/bare-metal.md
-msgid ""
-"And give users in the `plugdev` group access to the micro:bit programmer:"
+msgid "And give users in the `plugdev` group access to the micro:bit programmer:"
msgstr "然后,向 `plugdev` 组中的用户授予 micro:bit 编程器的访问权限:"
#: src/bare-metal.md src/bare-metal/microcontrollers/debugging.md
@@ -16475,34 +15674,32 @@ msgstr "其他 crate(例如 `panic-halt`)也可以提供该处理程序。"
#: src/bare-metal/minimal.md
msgid ""
-"Depending on the target, you may need to compile with `panic = \"abort\"` to "
-"avoid an error about `eh_personality`."
+"Depending on the target, you may need to compile with `panic = \"abort\"` to avoid an "
+"error about `eh_personality`."
msgstr ""
-"根据目标不同,可能需要使用 `panic = \"abort\"` 进行编译,以避免出现与 "
-"`eh_personality` 相关的错误。"
+"根据目标不同,可能需要使用 `panic = \"abort\"` 进行编译,以避免出现与 `eh_personality` 相"
+"关的错误。"
#: src/bare-metal/minimal.md
msgid ""
-"Note that there is no `main` or any other entry point; it's up to you to "
-"define your own entry point. This will typically involve a linker script and "
-"some assembly code to set things up ready for Rust code to run."
+"Note that there is no `main` or any other entry point; it's up to you to define your own "
+"entry point. This will typically involve a linker script and some assembly code to set "
+"things up ready for Rust code to run."
msgstr ""
-"请注意,未提供 `main` 函数或任何其他入口点;您可以自行定义入口点。通常需要使"
-"用链接器脚本和一些汇编代码进行设置工作,以便 Rust 代码能够顺利运行。"
+"请注意,未提供 `main` 函数或任何其他入口点;您可以自行定义入口点。通常需要使用链接器脚本"
+"和一些汇编代码进行设置工作,以便 Rust 代码能够顺利运行。"
#: src/bare-metal/alloc.md
msgid ""
-"To use `alloc` you must implement a [global (heap) allocator](https://doc."
-"rust-lang.org/stable/std/alloc/trait.GlobalAlloc.html)."
+"To use `alloc` you must implement a [global (heap) allocator](https://doc.rust-lang.org/"
+"stable/std/alloc/trait.GlobalAlloc.html)."
msgstr ""
-"如需使用 `alloc`,您必须实现 [全局(堆)分配器](https://doc.rust-lang.org/"
-"stable/std/alloc/trait.GlobalAlloc.html)。"
+"如需使用 `alloc`,您必须实现 [全局(堆)分配器](https://doc.rust-lang.org/stable/std/"
+"alloc/trait.GlobalAlloc.html)。"
#: src/bare-metal/alloc.md
-msgid ""
-"// Safe because `HEAP` is only used here and `entry` is only called once.\n"
-msgstr ""
-"// Safe because `HEAP` is only used here and `entry` is only called once.\n"
+msgid "// Safe because `HEAP` is only used here and `entry` is only called once.\n"
+msgstr "// Safe because `HEAP` is only used here and `entry` is only called once.\n"
#: src/bare-metal/alloc.md
msgid "// Give the allocator some memory to allocate.\n"
@@ -16519,37 +15716,37 @@ msgstr "String"
#: src/bare-metal/alloc.md
msgid ""
-"`buddy_system_allocator` is a third-party crate implementing a basic buddy "
-"system allocator. Other crates are available, or you can write your own or "
-"hook into your existing allocator."
+"`buddy_system_allocator` is a third-party crate implementing a basic buddy system "
+"allocator. Other crates are available, or you can write your own or hook into your "
+"existing allocator."
msgstr ""
-"`buddy_system_allocator` 是第三方 crate,用于实现基本伙伴系统分配器。还可以使"
-"用其他 crate,或者自行编写 crate,或者接入现有分配器。"
+"`buddy_system_allocator` 是第三方 crate,用于实现基本伙伴系统分配器。还可以使用其他 "
+"crate,或者自行编写 crate,或者接入现有分配器。"
#: src/bare-metal/alloc.md
msgid ""
-"The const parameter of `LockedHeap` is the max order of the allocator; i.e. "
-"in this case it can allocate regions of up to 2\\*\\*32 bytes."
+"The const parameter of `LockedHeap` is the max order of the allocator; i.e. in this case "
+"it can allocate regions of up to 2\\*\\*32 bytes."
msgstr ""
-"`LockedHeap` 的常量参数是分配器的最大阶数;即在本例中,它可以最多分配 "
-"2\\*\\*32 字节大小的区域。"
+"`LockedHeap` 的常量参数是分配器的最大阶数;即在本例中,它可以最多分配 2\\*\\*32 字节大小"
+"的区域。"
#: src/bare-metal/alloc.md
msgid ""
-"If any crate in your dependency tree depends on `alloc` then you must have "
-"exactly one global allocator defined in your binary. Usually this is done in "
-"the top-level binary crate."
+"If any crate in your dependency tree depends on `alloc` then you must have exactly one "
+"global allocator defined in your binary. Usually this is done in the top-level binary "
+"crate."
msgstr ""
-"如果依赖项树中的所有 crate 都依赖于 `alloc`,则您必须在二进制文件中明确定义一"
-"个全局分配器。通常,在顶级二进制 crate 中完成此操作。"
+"如果依赖项树中的所有 crate 都依赖于 `alloc`,则您必须在二进制文件中明确定义一个全局分配"
+"器。通常,在顶级二进制 crate 中完成此操作。"
#: src/bare-metal/alloc.md
msgid ""
-"`extern crate panic_halt as _` is necessary to ensure that the `panic_halt` "
-"crate is linked in so we get its panic handler."
+"`extern crate panic_halt as _` is necessary to ensure that the `panic_halt` crate is "
+"linked in so we get its panic handler."
msgstr ""
-"为了确保能够成功关联 `panic_halt` crate,以便我们获取其 panic 处理程序,必须"
-"使用 `extern crate panic_halt as _` 方法。"
+"为了确保能够成功关联 `panic_halt` crate,以便我们获取其 panic 处理程序,必须使用 `extern "
+"crate panic_halt as _` 方法。"
#: src/bare-metal/alloc.md
msgid "This example will build but not run, as it doesn't have an entry point."
@@ -16557,25 +15754,21 @@ msgstr "我们可以构建该示例,但由于没有入口点,无法运行。
#: src/bare-metal/microcontrollers.md
msgid ""
-"The `cortex_m_rt` crate provides (among other things) a reset handler for "
-"Cortex M microcontrollers."
-msgstr ""
-"`cortex_m_rt` crate 提供针对 Cortex M 微控制器的重置处理程序(以及其他内"
-"容)。"
+"The `cortex_m_rt` crate provides (among other things) a reset handler for Cortex M "
+"microcontrollers."
+msgstr "`cortex_m_rt` crate 提供针对 Cortex M 微控制器的重置处理程序(以及其他内容)。"
#: src/bare-metal/microcontrollers.md
msgid ""
-"Next we'll look at how to access peripherals, with increasing levels of "
-"abstraction."
+"Next we'll look at how to access peripherals, with increasing levels of abstraction."
msgstr "接下来,我们看看随着抽象层级的不断提升,该如何访问外围设备。"
#: src/bare-metal/microcontrollers.md
msgid ""
-"The `cortex_m_rt::entry` macro requires that the function have type `fn() -"
-"> !`, because returning to the reset handler doesn't make sense."
+"The `cortex_m_rt::entry` macro requires that the function have type `fn() -> !`, because "
+"returning to the reset handler doesn't make sense."
msgstr ""
-"`cortex_m_rt::entry` 宏要求函数的类型为 `fn() -> !`,因为返回重置处理程序会毫"
-"无意义。"
+"`cortex_m_rt::entry` 宏要求函数的类型为 `fn() -> !`,因为返回重置处理程序会毫无意义。"
#: src/bare-metal/microcontrollers.md
msgid "Run the example with `cargo embed --bin minimal`"
@@ -16583,11 +15776,10 @@ msgstr "使用 `cargo embed --bin minimum` 运行该示例"
#: src/bare-metal/microcontrollers/mmio.md
msgid ""
-"Most microcontrollers access peripherals via memory-mapped IO. Let's try "
-"turning on an LED on our micro:bit:"
+"Most microcontrollers access peripherals via memory-mapped IO. Let's try turning on an "
+"LED on our micro:bit:"
msgstr ""
-"大多数微控制器通过内存映射 IO 访问外围设备。现在试着开启 micro:bit 上的 LED "
-"指示灯:"
+"大多数微控制器通过内存映射 IO 访问外围设备。现在试着开启 micro:bit 上的 LED 指示灯:"
#: src/bare-metal/microcontrollers/mmio.md
msgid "/// GPIO port 0 peripheral address\n"
@@ -16601,8 +15793,7 @@ msgstr "// GPIO peripheral offsets\n"
msgid "// PIN_CNF fields\n"
msgstr "// PIN_CNF fields\n"
-#: src/bare-metal/microcontrollers/mmio.md
-#: src/bare-metal/microcontrollers/pacs.md
+#: src/bare-metal/microcontrollers/mmio.md src/bare-metal/microcontrollers/pacs.md
#: src/bare-metal/microcontrollers/hals.md
msgid "// Configure GPIO 0 pins 21 and 28 as push-pull outputs.\n"
msgstr "// Configure GPIO 0 pins 21 and 28 as push-pull outputs.\n"
@@ -16615,22 +15806,19 @@ msgstr ""
"// Safe because the pointers are to valid peripheral control registers, and\n"
" // no aliases exist.\n"
-#: src/bare-metal/microcontrollers/mmio.md
-#: src/bare-metal/microcontrollers/pacs.md
+#: src/bare-metal/microcontrollers/mmio.md src/bare-metal/microcontrollers/pacs.md
#: src/bare-metal/microcontrollers/hals.md
msgid "// Set pin 28 low and pin 21 high to turn the LED on.\n"
msgstr "// Set pin 28 low and pin 21 high to turn the LED on.\n"
#: src/bare-metal/microcontrollers/mmio.md
msgid ""
-"GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin 28 "
-"to the first row."
+"GPIO 0 pin 21 is connected to the first column of the LED matrix, and pin 28 to the "
+"first row."
msgstr "将 GPIO 0 的引脚 21 连接到 LED 矩阵的第一列,将引脚 28 连接到第一行。"
-#: src/bare-metal/microcontrollers/mmio.md
-#: src/bare-metal/microcontrollers/pacs.md
-#: src/bare-metal/microcontrollers/hals.md
-#: src/bare-metal/microcontrollers/board-support.md
+#: src/bare-metal/microcontrollers/mmio.md src/bare-metal/microcontrollers/pacs.md
+#: src/bare-metal/microcontrollers/hals.md src/bare-metal/microcontrollers/board-support.md
msgid "Run the example with:"
msgstr "使用以下命令运行该示例:"
@@ -16640,38 +15828,34 @@ msgstr "外围设备访问 crate"
#: src/bare-metal/microcontrollers/pacs.md
msgid ""
-"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust "
-"wrappers for memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/"
-"pack/doc/CMSIS/SVD/html/index.html) files."
+"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust wrappers for "
+"memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/pack/doc/CMSIS/SVD/html/"
+"index.html) files."
msgstr ""
-"[`svd2rust`](https://crates.io/crates/svd2rust) 使用 [CMSIS-SVD](https://www."
-"keil.com/pack/doc/CMSIS/SVD/html/index.html) 文件为内存映射外围设备生成了大部"
-"分安全的 Rust 封装容器。"
+"[`svd2rust`](https://crates.io/crates/svd2rust) 使用 [CMSIS-SVD](https://www.keil.com/"
+"pack/doc/CMSIS/SVD/html/index.html) 文件为内存映射外围设备生成了大部分安全的 Rust 封装容"
+"器。"
#: src/bare-metal/microcontrollers/pacs.md
msgid ""
-"SVD (System View Description) files are XML files typically provided by "
-"silicon vendors which describe the memory map of the device."
-msgstr ""
-"SVD(系统视图描述)文件通常是由芯片供应商提供的 XML 文件,用于描述设备的内存"
-"映射。"
+"SVD (System View Description) files are XML files typically provided by silicon vendors "
+"which describe the memory map of the device."
+msgstr "SVD(系统视图描述)文件通常是由芯片供应商提供的 XML 文件,用于描述设备的内存映射。"
#: src/bare-metal/microcontrollers/pacs.md
msgid ""
-"They are organised by peripheral, register, field and value, with names, "
-"descriptions, addresses and so on."
+"They are organised by peripheral, register, field and value, with names, descriptions, "
+"addresses and so on."
msgstr ""
-"这些文件按照外围设备、寄存器、字段和值进行组织分类,其中包含名称、内容描述、"
-"地址等信息。"
+"这些文件按照外围设备、寄存器、字段和值进行组织分类,其中包含名称、内容描述、地址等信息。"
#: src/bare-metal/microcontrollers/pacs.md
msgid ""
-"SVD files are often buggy and incomplete, so there are various projects "
-"which patch the mistakes, add missing details, and publish the generated "
-"crates."
+"SVD files are often buggy and incomplete, so there are various projects which patch the "
+"mistakes, add missing details, and publish the generated crates."
msgstr ""
-"由于 SVD 文件常常存在错误和不完整的情况,因此有许多项目会修复这些错误,补充缺"
-"失的相关信息,并发布生成的 crate。"
+"由于 SVD 文件常常存在错误和不完整的情况,因此有许多项目会修复这些错误,补充缺失的相关信"
+"息,并发布生成的 crate。"
#: src/bare-metal/microcontrollers/pacs.md
msgid "`cortex-m-rt` provides the vector table, among other things."
@@ -16679,11 +15863,11 @@ msgstr "`cortex-m-rt` 提供矢量表以及其他功能。"
#: src/bare-metal/microcontrollers/pacs.md
msgid ""
-"If you `cargo install cargo-binutils` then you can run `cargo objdump --bin "
-"pac -- -d --no-show-raw-insn` to see the resulting binary."
+"If you `cargo install cargo-binutils` then you can run `cargo objdump --bin pac -- -d --"
+"no-show-raw-insn` to see the resulting binary."
msgstr ""
-"如果您使用 `cargo install cargo-binutils`,则可以运行 `cargo objdump --bin "
-"pac -- -d --no-show-raw-insn`,查看生成的二进制文件。"
+"如果您使用 `cargo install cargo-binutils`,则可以运行 `cargo objdump --bin pac -- -d --"
+"no-show-raw-insn`,查看生成的二进制文件。"
#: src/bare-metal/microcontrollers/hals.md
#, fuzzy
@@ -16692,32 +15876,29 @@ msgstr "HAL crate"
#: src/bare-metal/microcontrollers/hals.md
msgid ""
-"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-"
-"implementation-crates) for many microcontrollers provide wrappers around "
-"various peripherals. These generally implement traits from [`embedded-hal`]"
-"(https://crates.io/crates/embedded-hal)."
+"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-"
+"crates) for many microcontrollers provide wrappers around various peripherals. These "
+"generally implement traits from [`embedded-hal`](https://crates.io/crates/embedded-hal)."
msgstr ""
-"许多微控制器的 [HAL crate](https://github.com/rust-embedded/awesome-embedded-"
-"rust#hal-implementation-crates) 为各种外围设备提供了封装容器。通常,这些封装"
-"容器可以实现 [`embedded-hal`](https://crates.io/crates/embedded-hal) 中的各"
-"种 trait。"
+"许多微控制器的 [HAL crate](https://github.com/rust-embedded/awesome-embedded-rust#hal-"
+"implementation-crates) 为各种外围设备提供了封装容器。通常,这些封装容器可以实现 "
+"[`embedded-hal`](https://crates.io/crates/embedded-hal) 中的各种 trait。"
#: src/bare-metal/microcontrollers/hals.md
msgid "// Create HAL wrapper for GPIO port 0.\n"
msgstr "// Create HAL wrapper for GPIO port 0.\n"
#: src/bare-metal/microcontrollers/hals.md
-msgid ""
-"`set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` trait."
+msgid "`set_low` and `set_high` are methods on the `embedded_hal` `OutputPin` trait."
msgstr "`set_low` 和 `set_high` 是 `embedded_hal` `OutputPin` trait 上的方法。"
#: src/bare-metal/microcontrollers/hals.md
msgid ""
-"HAL crates exist for many Cortex-M and RISC-V devices, including various "
-"STM32, GD32, nRF, NXP, MSP430, AVR and PIC microcontrollers."
+"HAL crates exist for many Cortex-M and RISC-V devices, including various STM32, GD32, "
+"nRF, NXP, MSP430, AVR and PIC microcontrollers."
msgstr ""
-"HAL crate 被广泛用于许多 Cortex-M 和 RISC-V 设备,包括各种 STM32、GD32、nRF、"
-"NXP、MSP430、AVR 和 PIC 微控制器。"
+"HAL crate 被广泛用于许多 Cortex-M 和 RISC-V 设备,包括各种 STM32、GD32、nRF、NXP、"
+"MSP430、AVR 和 PIC 微控制器。"
#: src/bare-metal/microcontrollers/board-support.md
#, fuzzy
@@ -16726,14 +15907,14 @@ msgstr "板级支持 crate"
#: src/bare-metal/microcontrollers/board-support.md
msgid ""
-"Board support crates provide a further level of wrapping for a specific "
-"board for convenience."
+"Board support crates provide a further level of wrapping for a specific board for "
+"convenience."
msgstr "为了方便使用,板级支持 crate 为特定开发板提供了更高级别的封装功能。"
#: src/bare-metal/microcontrollers/board-support.md
msgid ""
-"In this case the board support crate is just providing more useful names, "
-"and a bit of initialisation."
+"In this case the board support crate is just providing more useful names, and a bit of "
+"initialisation."
msgstr "在本例中,该板级支持 crate 仅提供了一些实用的名称和初始化功能。"
#: src/bare-metal/microcontrollers/board-support.md
@@ -16754,42 +15935,44 @@ msgstr "类型状态模式"
msgid "// let gpio0_01_again = gpio0.p0_01; // Error, moved.\n"
msgstr "// let gpio0_01_again = gpio0.p0_01; // Error, moved.\n"
+#: src/bare-metal/microcontrollers/type-state.md
+msgid "// ...\n"
+msgstr "// ...\n"
+
#: src/bare-metal/microcontrollers/type-state.md
msgid "// pin_input.is_high(); // Error, moved.\n"
msgstr "// pin_input.is_high(); // Error, moved.\n"
#: src/bare-metal/microcontrollers/type-state.md
msgid ""
-"Pins don't implement `Copy` or `Clone`, so only one instance of each can "
-"exist. Once a pin is moved out of the port struct nobody else can take it."
+"Pins don't implement `Copy` or `Clone`, so only one instance of each can exist. Once a "
+"pin is moved out of the port struct nobody else can take it."
msgstr ""
-"引脚无法实现 `Copy` 或 `Clone`,因此,每个引脚只能存在一个实例。一旦某个引脚"
-"从端口结构体移出,任何人都无法再使用它。"
+"引脚无法实现 `Copy` 或 `Clone`,因此,每个引脚只能存在一个实例。一旦某个引脚从端口结构体"
+"移出,任何人都无法再使用它。"
#: src/bare-metal/microcontrollers/type-state.md
msgid ""
-"Changing the configuration of a pin consumes the old pin instance, so you "
-"can’t keep use the old instance afterwards."
+"Changing the configuration of a pin consumes the old pin instance, so you can’t keep use "
+"the old instance afterwards."
msgstr "更改引脚的配置会使旧的引脚实例失效,因此您无法再继续使用旧实例。"
#: src/bare-metal/microcontrollers/type-state.md
msgid ""
-"The type of a value indicates the state that it is in: e.g. in this case, "
-"the configuration state of a GPIO pin. This encodes the state machine into "
-"the type system, and ensures that you don't try to use a pin in a certain "
-"way without properly configuring it first. Illegal state transitions are "
-"caught at compile time."
+"The type of a value indicates the state that it is in: e.g. in this case, the "
+"configuration state of a GPIO pin. This encodes the state machine into the type system, "
+"and ensures that you don't try to use a pin in a certain way without properly "
+"configuring it first. Illegal state transitions are caught at compile time."
msgstr ""
-"值的类型表示其所处状态:例如,在本例中,表示 GPIO 引脚的配置状态。通过这种方"
-"式,可将状态机编码成类型系统,并确保在未正确完成引脚配置之前,不会尝试以某种"
-"方式使用引脚。编译时捕获了非法状态转换。"
+"值的类型表示其所处状态:例如,在本例中,表示 GPIO 引脚的配置状态。通过这种方式,可将状态"
+"机编码成类型系统,并确保在未正确完成引脚配置之前,不会尝试以某种方式使用引脚。编译时捕获"
+"了非法状态转换。"
#: src/bare-metal/microcontrollers/type-state.md
msgid ""
-"You can call `is_high` on an input pin and `set_high` on an output pin, but "
-"not vice-versa."
-msgstr ""
-"您可以在输入引脚上调用 `is_high`,在输出引脚上调用 `set_high`,反之则不行。"
+"You can call `is_high` on an input pin and `set_high` on an output pin, but not vice-"
+"versa."
+msgstr "您可以在输入引脚上调用 `is_high`,在输出引脚上调用 `set_high`,反之则不行。"
#: src/bare-metal/microcontrollers/type-state.md
msgid "Many HAL crates follow this pattern."
@@ -16797,11 +15980,11 @@ msgstr "许多 HAL crate 都遵循此模式。"
#: src/bare-metal/microcontrollers/embedded-hal.md
msgid ""
-"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a "
-"number of traits covering common microcontroller peripherals."
+"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a number of "
+"traits covering common microcontroller peripherals."
msgstr ""
-"[`embedded-hal`](https://crates.io/crates/embedded-hal) crate 提供许多适用于"
-"常见微控制器外围设备的 trait。"
+"[`embedded-hal`](https://crates.io/crates/embedded-hal) crate 提供许多适用于常见微控制器"
+"外围设备的 trait。"
#: src/bare-metal/microcontrollers/embedded-hal.md
msgid "GPIO"
@@ -16829,38 +16012,36 @@ msgstr "监控定时器"
#: src/bare-metal/microcontrollers/embedded-hal.md
msgid ""
-"Other crates then implement [drivers](https://github.com/rust-embedded/"
-"awesome-embedded-rust#driver-crates) in terms of these traits, e.g. an "
-"accelerometer driver might need an I2C or SPI bus implementation."
+"Other crates then implement [drivers](https://github.com/rust-embedded/awesome-embedded-"
+"rust#driver-crates) in terms of these traits, e.g. an accelerometer driver might need an "
+"I2C or SPI bus implementation."
msgstr ""
-"然后,其他 crate 可以根据这些 trait 实现 [驱动程序](https://github.com/rust-"
-"embedded/awesome-embedded-rust#driver-crates),例如加速度计驱动程序可能需要通"
-"过 I2C 或 SPI 总线实现。"
+"然后,其他 crate 可以根据这些 trait 实现 [驱动程序](https://github.com/rust-embedded/"
+"awesome-embedded-rust#driver-crates),例如加速度计驱动程序可能需要通过 I2C 或 SPI 总线实"
+"现。"
#: src/bare-metal/microcontrollers/embedded-hal.md
msgid ""
-"There are implementations for many microcontrollers, as well as other "
-"platforms such as Linux on Raspberry Pi."
-msgstr ""
-"还有适用于许多微控制器以及其他平台(例如 Raspberry Pi 上的 Linux)的实现。"
+"There are implementations for many microcontrollers, as well as other platforms such as "
+"Linux on Raspberry Pi."
+msgstr "还有适用于许多微控制器以及其他平台(例如 Raspberry Pi 上的 Linux)的实现。"
#: src/bare-metal/microcontrollers/embedded-hal.md
msgid ""
-"There is work in progress on an `async` version of `embedded-hal`, but it "
-"isn't stable yet."
+"There is work in progress on an `async` version of `embedded-hal`, but it isn't stable "
+"yet."
msgstr "我们正在开发 `async` 版本的 `embedded-hal`,但目前还欠缺稳定性。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, "
-"like OpenOCD but better integrated."
+"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, like OpenOCD "
+"but better integrated."
msgstr ""
-"[probe-rs](https://probe.rs/) 是一个方便的嵌入式调试工具集,跟 OpenOCD 较为相"
-"似,但集成度更高。"
+"[probe-rs](https://probe.rs/) 是一个方便的嵌入式调试工具集,跟 OpenOCD 较为相似,但集成度"
+"更高。"
#: src/bare-metal/microcontrollers/probe-rs.md
-msgid ""
-"SWD (Serial Wire Debug) and JTAG via CMSIS-DAP, ST-Link and J-Link probes"
+msgid "SWD (Serial Wire Debug) and JTAG via CMSIS-DAP, ST-Link and J-Link probes"
msgstr "通过 CMSIS-DAP、ST-Link 和 J-Link 探针实现 SWD(串行调试)和 JTAG"
#: src/bare-metal/microcontrollers/probe-rs.md
@@ -16874,50 +16055,48 @@ msgstr "Cargo 集成"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"`cargo-embed` is a cargo subcommand to build and flash binaries, log RTT "
-"(Real Time Transfers) output and connect GDB. It's configured by an `Embed."
-"toml` file in your project directory."
+"`cargo-embed` is a cargo subcommand to build and flash binaries, log RTT (Real Time "
+"Transfers) output and connect GDB. It's configured by an `Embed.toml` file in your "
+"project directory."
msgstr ""
-"`cargo-embed` 是一个 cargo 子命令,用于构建和刷写二进制文件、记录 RTT(实时传"
-"输)输出以及连接 GDB。您可通过项目目录中的 `Embed.toml` 文件对其进行配置。"
+"`cargo-embed` 是一个 cargo 子命令,用于构建和刷写二进制文件、记录 RTT(实时传输)输出以及"
+"连接 GDB。您可通过项目目录中的 `Embed.toml` 文件对其进行配置。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is "
-"an Arm standard protocol over USB for an in-circuit debugger to access the "
-"CoreSight Debug Access Port of various Arm Cortex processors. It's what the "
-"on-board debugger on the BBC micro:bit uses."
+"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is an Arm "
+"standard protocol over USB for an in-circuit debugger to access the CoreSight Debug "
+"Access Port of various Arm Cortex processors. It's what the on-board debugger on the BBC "
+"micro:bit uses."
msgstr ""
-"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) 是一"
-"项基于 USB 的 Arm 标准协议,使得电路内调试程序能够接入各种 Arm Cortex 处理器"
-"的 CoreSight 调试访问端口。BBC micro:bit 的板载调试程序所使用的便是此协议。"
+"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) 是一项基于 USB "
+"的 Arm 标准协议,使得电路内调试程序能够接入各种 Arm Cortex 处理器的 CoreSight 调试访问端"
+"口。BBC micro:bit 的板载调试程序所使用的便是此协议。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-Link "
-"is a range from SEGGER."
+"ST-Link is a range of in-circuit debuggers from ST Microelectronics, J-Link is a range "
+"from SEGGER."
msgstr "ST-Link 属于 ST Microelectronics 产品系列,J-Link 是 SEGGER 系列。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin "
-"Serial Wire Debug."
+"The Debug Access Port is usually either a 5-pin JTAG interface or 2-pin Serial Wire "
+"Debug."
msgstr "调试访问端口通常为 5 针 JTAG 接口或 2 针串行线调试接口。"
#: src/bare-metal/microcontrollers/probe-rs.md
-msgid ""
-"probe-rs is a library which you can integrate into your own tools if you "
-"want to."
+msgid "probe-rs is a library which you can integrate into your own tools if you want to."
msgstr "probe-rs 是一个库,如有需要,可以将其集成到您的工具中。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-"
-"adapter-protocol/) lets VSCode and other IDEs debug code running on any "
-"supported microcontroller."
+"The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-"
+"protocol/) lets VSCode and other IDEs debug code running on any supported "
+"microcontroller."
msgstr ""
-"借助 [Microsoft 调试适配器协议](https://microsoft.github.io/debug-adapter-"
-"protocol/),VSCode 和其他 IDE 可以调试任何受支持的微控制器上运行的代码。"
+"借助 [Microsoft 调试适配器协议](https://microsoft.github.io/debug-adapter-protocol/),"
+"VSCode 和其他 IDE 可以调试任何受支持的微控制器上运行的代码。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid "cargo-embed is a binary built using the probe-rs library."
@@ -16925,11 +16104,9 @@ msgstr "cargo-embed 是使用 probe-rs 库构建的二进制文件。"
#: src/bare-metal/microcontrollers/probe-rs.md
msgid ""
-"RTT (Real Time Transfers) is a mechanism to transfer data between the debug "
-"host and the target through a number of ringbuffers."
-msgstr ""
-"RTT(实时传输)是一种通过多个环形缓冲区,在调试主机和目标之间进行数据传输的机"
-"制。"
+"RTT (Real Time Transfers) is a mechanism to transfer data between the debug host and the "
+"target through a number of ringbuffers."
+msgstr "RTT(实时传输)是一种通过多个环形缓冲区,在调试主机和目标之间进行数据传输的机制。"
#: src/bare-metal/microcontrollers/debugging.md
#, fuzzy
@@ -16952,8 +16129,7 @@ msgstr "在 gLinux 或 Debian 上:"
msgid "In GDB, try running:"
msgstr "在 GDB 中,请尝试运行以下命令:"
-#: src/bare-metal/microcontrollers/other-projects.md
-#: src/bare-metal/aps/other-projects.md
+#: src/bare-metal/microcontrollers/other-projects.md src/bare-metal/aps/other-projects.md
#, fuzzy
msgid "Other projects"
msgstr "其他项目"
@@ -16967,8 +16143,7 @@ msgid "\"Real-Time Interrupt-driven Concurrency\""
msgstr "\"Real-Time Interrupt-driven Concurrency\""
#: src/bare-metal/microcontrollers/other-projects.md
-msgid ""
-"Shared resource management, message passing, task scheduling, timer queue"
+msgid "Shared resource management, message passing, task scheduling, timer queue"
msgstr "共享资源管理、消息传递、任务调度、定时器队列"
#: src/bare-metal/microcontrollers/other-projects.md
@@ -16984,9 +16159,7 @@ msgid "[TockOS](https://www.tockos.org/documentation/getting-started)"
msgstr "[TockOS](https://www.tockos.org/documentation/getting-started)"
#: src/bare-metal/microcontrollers/other-projects.md
-msgid ""
-"Security-focused RTOS with preemptive scheduling and Memory Protection Unit "
-"support"
+msgid "Security-focused RTOS with preemptive scheduling and Memory Protection Unit support"
msgstr "以安全为中心的 RTOS,具有抢占式调度功能和提供内存保护单元支持"
#: src/bare-metal/microcontrollers/other-projects.md
@@ -16995,11 +16168,9 @@ msgstr "[Hubris](https://hubris.oxide.computer/)"
#: src/bare-metal/microcontrollers/other-projects.md
msgid ""
-"Microkernel RTOS from Oxide Computer Company with memory protection, "
-"unprivileged drivers, IPC"
-msgstr ""
-"Oxide Computer Company 开发的微内核 RTOS,提供内存保护、非特权驱动程序和 IPC "
-"功能"
+"Microkernel RTOS from Oxide Computer Company with memory protection, unprivileged "
+"drivers, IPC"
+msgstr "Oxide Computer Company 开发的微内核 RTOS,提供内存保护、非特权驱动程序和 IPC 功能"
#: src/bare-metal/microcontrollers/other-projects.md
msgid "[Bindings for FreeRTOS](https://github.com/lobaro/FreeRTOS-rust)"
@@ -17007,11 +16178,11 @@ msgstr "[FreeRTOS 的绑定](https://github.com/lobaro/FreeRTOS-rust)"
#: src/bare-metal/microcontrollers/other-projects.md
msgid ""
-"Some platforms have `std` implementations, e.g. [esp-idf](https://esp-rs."
-"github.io/book/overview/using-the-standard-library.html)."
+"Some platforms have `std` implementations, e.g. [esp-idf](https://esp-rs.github.io/book/"
+"overview/using-the-standard-library.html)."
msgstr ""
-"有些平台可以实现 `std`,例如 [esp-idf](https://esp-rs.github.io/book/"
-"overview/using-the-standard-library.html)。"
+"有些平台可以实现 `std`,例如 [esp-idf](https://esp-rs.github.io/book/overview/using-the-"
+"standard-library.html)。"
#: src/bare-metal/microcontrollers/other-projects.md
msgid "RTIC can be considered either an RTOS or a concurrency framework."
@@ -17023,47 +16194,42 @@ msgstr "但不包含任何 HAL。"
#: src/bare-metal/microcontrollers/other-projects.md
msgid ""
-"It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for "
-"scheduling rather than a proper kernel."
-msgstr ""
-"它使用 Cortex-M NVIC(嵌套虚拟中断控制器)进行调度,而不是选用适合的内核。"
+"It uses the Cortex-M NVIC (Nested Virtual Interrupt Controller) for scheduling rather "
+"than a proper kernel."
+msgstr "它使用 Cortex-M NVIC(嵌套虚拟中断控制器)进行调度,而不是选用适合的内核。"
#: src/bare-metal/microcontrollers/other-projects.md
msgid "Cortex-M only."
msgstr "仅限 Cortex-M。"
#: src/bare-metal/microcontrollers/other-projects.md
-msgid ""
-"Google uses TockOS on the Haven microcontroller for Titan security keys."
+msgid "Google uses TockOS on the Haven microcontroller for Titan security keys."
msgstr "Google 在 Haven 微控制器上使用 TockOS 作为 Titan 安全密钥的操作系统。"
#: src/bare-metal/microcontrollers/other-projects.md
msgid ""
-"FreeRTOS is mostly written in C, but there are Rust bindings for writing "
-"applications."
+"FreeRTOS is mostly written in C, but there are Rust bindings for writing applications."
msgstr "FreeRTOS 主要使用 C 语言编写,但也提供了专用于编写应用的 Rust 绑定。"
#: src/exercises/bare-metal/morning.md
msgid ""
-"We will read the direction from an I2C compass, and log the readings to a "
-"serial port."
+"We will read the direction from an I2C compass, and log the readings to a serial port."
msgstr "我们将从 I2C 罗盘读取方向,并将读数记录到串行端口。"
#: src/exercises/bare-metal/morning.md src/exercises/concurrency/morning.md
#, fuzzy
msgid ""
-"After looking at the exercises, you can look at the [solutions](solutions-"
-"morning.md) provided."
+"After looking at the exercises, you can look at the [solutions](solutions-morning.md) "
+"provided."
msgstr "读完习题后,可以阅读本书提供的 \\[题解\\]。"
#: src/exercises/bare-metal/compass.md
msgid ""
-"We will read the direction from an I2C compass, and log the readings to a "
-"serial port. If you have time, try displaying it on the LEDs somehow too, or "
-"use the buttons somehow."
+"We will read the direction from an I2C compass, and log the readings to a serial port. "
+"If you have time, try displaying it on the LEDs somehow too, or use the buttons somehow."
msgstr ""
-"我们将从 I2C 罗盘读取方向,并将读数记录到串行端口。如有时间,请尝试通过 LED "
-"灯亮起的方式,或者使用按钮来显示方向。"
+"我们将从 I2C 罗盘读取方向,并将读数记录到串行端口。如有时间,请尝试通过 LED 灯亮起的方"
+"式,或者使用按钮来显示方向。"
#: src/exercises/bare-metal/compass.md
msgid "Hints:"
@@ -17071,95 +16237,86 @@ msgstr "提示:"
#: src/exercises/bare-metal/compass.md
msgid ""
-"Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/"
-"latest/lsm303agr/) and [`microbit-v2`](https://docs.rs/microbit-v2/latest/"
-"microbit/) crates, as well as the [micro:bit hardware](https://tech.microbit."
-"org/hardware/)."
+"Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/latest/"
+"lsm303agr/) and [`microbit-v2`](https://docs.rs/microbit-v2/latest/microbit/) crates, as "
+"well as the [micro:bit hardware](https://tech.microbit.org/hardware/)."
msgstr ""
-"请参阅 [`lsm303agr`](https://docs.rs/lsm303agr/latest/lsm303agr/) 和 "
-"[`microbit-v2`](https://docs.rs/microbit-v2/latest/microbit/) crate,以及 "
-"[micro:bit 硬件](https://tech.microbit.org/hardware/) 相关文档。"
+"请参阅 [`lsm303agr`](https://docs.rs/lsm303agr/latest/lsm303agr/) 和 [`microbit-v2`]"
+"(https://docs.rs/microbit-v2/latest/microbit/) crate,以及 [micro:bit 硬件](https://tech."
+"microbit.org/hardware/) 相关文档。"
#: src/exercises/bare-metal/compass.md
-msgid ""
-"The LSM303AGR Inertial Measurement Unit is connected to the internal I2C bus."
+msgid "The LSM303AGR Inertial Measurement Unit is connected to the internal I2C bus."
msgstr "LSM303AGR 惯性测量装置与内部 I2C 总线相连接。"
#: src/exercises/bare-metal/compass.md
-msgid ""
-"TWI is another name for I2C, so the I2C master peripheral is called TWIM."
+msgid "TWI is another name for I2C, so the I2C master peripheral is called TWIM."
msgstr "TWI 是 I2C 的别称,因此 I2C 主外围设备称为 TWIM。"
#: src/exercises/bare-metal/compass.md
msgid ""
-"The LSM303AGR driver needs something implementing the `embedded_hal::"
-"blocking::i2c::WriteRead` trait. The [`microbit::hal::Twim`](https://docs.rs/"
-"microbit-v2/latest/microbit/hal/struct.Twim.html) struct implements this."
+"The LSM303AGR driver needs something implementing the `embedded_hal::blocking::i2c::"
+"WriteRead` trait. The [`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/"
+"microbit/hal/struct.Twim.html) struct implements this."
msgstr ""
-"LSM303AGR 驱动程序需要使用某种方法来实现 `embedded_hal::blocking::i2c::"
-"WriteRead` trait。[`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/"
-"microbit/hal/struct.Twim.html) 结构体便可以做到这一点。"
+"LSM303AGR 驱动程序需要使用某种方法来实现 `embedded_hal::blocking::i2c::WriteRead` trait。"
+"[`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/microbit/hal/struct.Twim."
+"html) 结构体便可以做到这一点。"
#: src/exercises/bare-metal/compass.md
msgid ""
-"You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/"
-"struct.Board.html) struct with fields for the various pins and peripherals."
+"You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/struct.Board."
+"html) struct with fields for the various pins and peripherals."
msgstr ""
-"您拥有一个 [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/"
-"struct.Board.html) 结构体,其中包含各种引脚和外围设备的字段。"
+"您拥有一个 [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/struct.Board."
+"html) 结构体,其中包含各种引脚和外围设备的字段。"
#: src/exercises/bare-metal/compass.md
msgid ""
-"You can also look at the [nRF52833 datasheet](https://infocenter.nordicsemi."
-"com/pdf/nRF52833_PS_v1.5.pdf) if you want, but it shouldn't be necessary for "
-"this exercise."
+"You can also look at the [nRF52833 datasheet](https://infocenter.nordicsemi.com/pdf/"
+"nRF52833_PS_v1.5.pdf) if you want, but it shouldn't be necessary for this exercise."
msgstr ""
-"如有需要,您还可以查看 [nRF52833 数据表](https://infocenter.nordicsemi.com/"
-"pdf/nRF52833_PS_v1.5.pdf),但对本练习来说这不是必需的。"
+"如有需要,您还可以查看 [nRF52833 数据表](https://infocenter.nordicsemi.com/pdf/"
+"nRF52833_PS_v1.5.pdf),但对本练习来说这不是必需的。"
#: src/exercises/bare-metal/compass.md
msgid ""
-"Download the [exercise template](../../comprehensive-rust-exercises.zip) and "
-"look in the `compass` directory for the following files."
+"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in the "
+"`compass` directory for the following files."
msgstr ""
-"下载 [练习模板](../../comprehensive-rust-exercises.zip) 并在 `compass` 目录中"
-"查找以下文件。"
+"下载 [练习模板](../../comprehensive-rust-exercises.zip) 并在 `compass` 目录中查找以下文"
+"件。"
#: src/exercises/bare-metal/compass.md src/exercises/bare-metal/rtc.md
#, fuzzy
msgid "_src/main.rs_:"
msgstr "_hello_rust/src/main.rs_:"
-#: src/exercises/bare-metal/compass.md
-#: src/exercises/bare-metal/solutions-morning.md
+#: src/exercises/bare-metal/compass.md src/exercises/bare-metal/solutions-morning.md
msgid "// Configure serial port.\n"
msgstr "// Configure serial port.\n"
-#: src/exercises/bare-metal/compass.md
-#: src/exercises/bare-metal/solutions-morning.md
+#: src/exercises/bare-metal/compass.md src/exercises/bare-metal/solutions-morning.md
msgid "// Use the system timer as a delay provider.\n"
msgstr ""
#: src/exercises/bare-metal/compass.md
-msgid ""
-"// Set up the I2C controller and Inertial Measurement Unit.\n"
-" // TODO\n"
-msgstr ""
-"// Set up the I2C controller and Inertial Measurement Unit.\n"
-" // TODO\n"
+#, fuzzy
+msgid "// Set up the I2C controller and Inertial Measurement Unit."
+msgstr "// Set up the I2C controller and Inertial Measurement Unit.\n"
#: src/exercises/bare-metal/compass.md
-#: src/exercises/bare-metal/solutions-morning.md
+msgid "// TODO"
+msgstr ""
+
+#: src/exercises/bare-metal/compass.md src/exercises/bare-metal/solutions-morning.md
msgid "\"Ready.\""
msgstr "\"Ready.\""
#: src/exercises/bare-metal/compass.md
-msgid ""
-"// Read compass data and log it to the serial port.\n"
-" // TODO\n"
-msgstr ""
-"// Read compass data and log it to the serial port.\n"
-" // TODO\n"
+#, fuzzy
+msgid "// Read compass data and log it to the serial port."
+msgstr "// Read compass data and log it to the serial port.\n"
#: src/exercises/bare-metal/compass.md src/exercises/bare-metal/rtc.md
msgid "_Cargo.toml_ (you shouldn't need to change this):"
@@ -17178,8 +16335,7 @@ msgid "See the serial output on Linux with:"
msgstr "运行以下命令查看 Linux 上的串行输出:"
#: src/exercises/bare-metal/compass.md
-msgid ""
-"Or on Mac OS something like (the device name may be slightly different):"
+msgid "Or on Mac OS something like (the device name may be slightly different):"
msgstr "或者在 Mac OS 上,如下所示(设备名称可能略有不同):"
#: src/exercises/bare-metal/compass.md
@@ -17217,12 +16373,10 @@ msgstr "\"{},{},{}\\t{},{},{}\""
#: src/exercises/bare-metal/solutions-morning.md
#, fuzzy
msgid ""
-"// If button A is pressed, switch to the next mode and briefly blink all "
-"LEDs\n"
+"// If button A is pressed, switch to the next mode and briefly blink all LEDs\n"
" // on.\n"
msgstr ""
-"// If button A is pressed, switch to the next mode and briefly blink all "
-"LEDs on.\n"
+"// If button A is pressed, switch to the next mode and briefly blink all LEDs on.\n"
#: src/bare-metal/aps.md
msgid "Application processors"
@@ -17230,36 +16384,33 @@ msgstr "应用处理器"
#: src/bare-metal/aps.md
msgid ""
-"So far we've talked about microcontrollers, such as the Arm Cortex-M series. "
-"Now let's try writing something for Cortex-A. For simplicity we'll just work "
-"with QEMU's aarch64 ['virt'](https://qemu-project.gitlab.io/qemu/system/arm/"
-"virt.html) board."
+"So far we've talked about microcontrollers, such as the Arm Cortex-M series. Now let's "
+"try writing something for Cortex-A. For simplicity we'll just work with QEMU's aarch64 "
+"['virt'](https://qemu-project.gitlab.io/qemu/system/arm/virt.html) board."
msgstr ""
-"到目前为止,我们已经讨论了微控制器,例如 Arm Cortex-M 系列。现在,尝试为 "
-"Cortex-A 编写一些代码。为简单起见,我们只使用 QEMU 的 aarch64 [`virt`]"
-"(https://qemu-project.gitlab.io/qemu/system/arm/virt.html) 开发板 进行编写。"
+"到目前为止,我们已经讨论了微控制器,例如 Arm Cortex-M 系列。现在,尝试为 Cortex-A 编写一"
+"些代码。为简单起见,我们只使用 QEMU 的 aarch64 [`virt`](https://qemu-project.gitlab.io/"
+"qemu/system/arm/virt.html) 开发板 进行编写。"
#: src/bare-metal/aps.md
msgid ""
-"Broadly speaking, microcontrollers don't have an MMU or multiple levels of "
-"privilege (exception levels on Arm CPUs, rings on x86), while application "
-"processors do."
+"Broadly speaking, microcontrollers don't have an MMU or multiple levels of privilege "
+"(exception levels on Arm CPUs, rings on x86), while application processors do."
msgstr ""
-"一般来说,微控制器不具备 MMU 或多级特权(例如,Arm CPU 中的异常级别,x86 中的"
-"铃声级别)的功能,而应用处理器则具备这些功能。"
+"一般来说,微控制器不具备 MMU 或多级特权(例如,Arm CPU 中的异常级别,x86 中的铃声级别)的"
+"功能,而应用处理器则具备这些功能。"
#: src/bare-metal/aps.md
msgid ""
"QEMU supports emulating various different machines or board models for each "
-"architecture. The 'virt' board doesn't correspond to any particular real "
-"hardware, but is designed purely for virtual machines."
+"architecture. The 'virt' board doesn't correspond to any particular real hardware, but "
+"is designed purely for virtual machines."
msgstr ""
-"QEMU 支持针对每种架构模拟不同的机器或板级模型。“虚拟”开发板并不适用于任何特定"
-"的真实硬件,而是专为虚拟机设计的。"
+"QEMU 支持针对每种架构模拟不同的机器或板级模型。“虚拟”开发板并不适用于任何特定的真实硬件,"
+"而是专为虚拟机设计的。"
#: src/bare-metal/aps/entry-point.md
-msgid ""
-"Before we can start running Rust code, we need to do some initialisation."
+msgid "Before we can start running Rust code, we need to do some initialisation."
msgstr "在开始运行 Rust 代码之前,我们需要进行一些初始化设置。"
#: src/bare-metal/aps/entry-point.md
@@ -17269,8 +16420,7 @@ msgid ""
".global entry\n"
"entry:\n"
" /*\n"
-" * Load and apply the memory management configuration, ready to enable "
-"MMU and\n"
+" * Load and apply the memory management configuration, ready to enable MMU and\n"
" * caches.\n"
" */\n"
" adrp x30, idmap\n"
@@ -17289,8 +16439,7 @@ msgid ""
" mov_i x30, .Lsctlrval\n"
"\n"
" /*\n"
-" * Ensure everything before this point has completed, then invalidate "
-"any\n"
+" * Ensure everything before this point has completed, then invalidate any\n"
" * potentially stale local TLB entries before they start being used.\n"
" */\n"
" isb\n"
@@ -17300,8 +16449,7 @@ msgid ""
" isb\n"
"\n"
" /*\n"
-" * Configure sctlr_el1 to enable MMU and cache and don't proceed until "
-"this\n"
+" * Configure sctlr_el1 to enable MMU and cache and don't proceed until this\n"
" * has completed.\n"
" */\n"
" msr sctlr_el1, x30\n"
@@ -17342,8 +16490,7 @@ msgstr ""
".global entry\n"
"entry:\n"
" /*\n"
-" * Load and apply the memory management configuration, ready to enable "
-"MMU and\n"
+" * Load and apply the memory management configuration, ready to enable MMU and\n"
" * caches.\n"
" */\n"
" adrp x30, idmap\n"
@@ -17362,8 +16509,7 @@ msgstr ""
" mov_i x30, .Lsctlrval\n"
"\n"
" /*\n"
-" * Ensure everything before this point has completed, then invalidate "
-"any\n"
+" * Ensure everything before this point has completed, then invalidate any\n"
" * potentially stale local TLB entries before they start being used.\n"
" */\n"
" isb\n"
@@ -17373,8 +16519,7 @@ msgstr ""
" isb\n"
"\n"
" /*\n"
-" * Configure sctlr_el1 to enable MMU and cache and don't proceed until "
-"this\n"
+" * Configure sctlr_el1 to enable MMU and cache and don't proceed until this\n"
" * has completed.\n"
" */\n"
" msr sctlr_el1, x30\n"
@@ -17412,89 +16557,79 @@ msgstr ""
#: src/bare-metal/aps/entry-point.md
msgid ""
-"This is the same as it would be for C: initialising the processor state, "
-"zeroing the BSS, and setting up the stack pointer."
-msgstr ""
-"这与 C 语言的情况相同:初始化处理器状态,将 BSS 清零,然后设置堆栈指针。"
+"This is the same as it would be for C: initialising the processor state, zeroing the "
+"BSS, and setting up the stack pointer."
+msgstr "这与 C 语言的情况相同:初始化处理器状态,将 BSS 清零,然后设置堆栈指针。"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"The BSS (block starting symbol, for historical reasons) is the part of the "
-"object file which containing statically allocated variables which are "
-"initialised to zero. They are omitted from the image, to avoid wasting space "
-"on zeroes. The compiler assumes that the loader will take care of zeroing "
-"them."
+"The BSS (block starting symbol, for historical reasons) is the part of the object file "
+"which containing statically allocated variables which are initialised to zero. They are "
+"omitted from the image, to avoid wasting space on zeroes. The compiler assumes that the "
+"loader will take care of zeroing them."
msgstr ""
-"BSS(由于历史原因,称为代码块起始符)属于对象文件的一部分,其中包含静态分配的"
-"变量,这些变量被初始化为零。图像中省略了这些符号,以避免因存储零值而占用过多"
-"空间。编译器假定加载器会负责将它们清零。"
+"BSS(由于历史原因,称为代码块起始符)属于对象文件的一部分,其中包含静态分配的变量,这些变"
+"量被初始化为零。图像中省略了这些符号,以避免因存储零值而占用过多空间。编译器假定加载器会"
+"负责将它们清零。"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"The BSS may already be zeroed, depending on how memory is initialised and "
-"the image is loaded, but we zero it to be sure."
+"The BSS may already be zeroed, depending on how memory is initialised and the image is "
+"loaded, but we zero it to be sure."
msgstr ""
-"BSS 可能已经被清零,具体取决于内存的初始化方式以及图像的加载方式,但为了确保"
-"起见,我们会将其手动清零。"
+"BSS 可能已经被清零,具体取决于内存的初始化方式以及图像的加载方式,但为了确保起见,我们会"
+"将其手动清零。"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"We need to enable the MMU and cache before reading or writing any memory. If "
-"we don't:"
+"We need to enable the MMU and cache before reading or writing any memory. If we don't:"
msgstr "我们需要先启用 MMU 和缓存功能,然后才能读取或写入任何内存。否则:"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"Unaligned accesses will fault. We build the Rust code for the `aarch64-"
-"unknown-none` target which sets `+strict-align` to prevent the compiler "
-"generating unaligned accesses, so it should be fine in this case, but this "
-"is not necessarily the case in general."
+"Unaligned accesses will fault. We build the Rust code for the `aarch64-unknown-none` "
+"target which sets `+strict-align` to prevent the compiler generating unaligned accesses, "
+"so it should be fine in this case, but this is not necessarily the case in general."
msgstr ""
-"非对齐访问将会出错。我们为 `aarch64-unknown-none` 目标构建 Rust 代码,该目标"
-"会设置 `+Strict-align` 以防止编译器生成非对齐访问,因此在本例中应该没有问题,"
-"但一般情况下并不一定如此。"
+"非对齐访问将会出错。我们为 `aarch64-unknown-none` 目标构建 Rust 代码,该目标会设置 "
+"`+Strict-align` 以防止编译器生成非对齐访问,因此在本例中应该没有问题,但一般情况下并不一"
+"定如此。"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"If it were running in a VM, this can lead to cache coherency issues. The "
-"problem is that the VM is accessing memory directly with the cache disabled, "
-"while the host has cacheable aliases to the same memory. Even if the host "
-"doesn't explicitly access the memory, speculative accesses can lead to cache "
-"fills, and then changes from one or the other will get lost when the cache "
-"is cleaned or the VM enables the cache. (Cache is keyed by physical address, "
-"not VA or IPA.)"
+"If it were running in a VM, this can lead to cache coherency issues. The problem is that "
+"the VM is accessing memory directly with the cache disabled, while the host has "
+"cacheable aliases to the same memory. Even if the host doesn't explicitly access the "
+"memory, speculative accesses can lead to cache fills, and then changes from one or the "
+"other will get lost when the cache is cleaned or the VM enables the cache. (Cache is "
+"keyed by physical address, not VA or IPA.)"
msgstr ""
-"如果是在虚拟机中运行该命令,可能会导致缓存一致性问题。问题在于,虚拟机是在禁"
-"用缓存的情况下直接访问内存,而主机具有同一内存的缓存别名。即使主机并没有明确"
-"访问该内存,推测性访问仍然会导致缓存被填充,然后在清除缓存或虚拟机启用缓存"
-"时,任何一方对于该内存进行的更改就会丢失。(使用物理地址来键控缓存,而 VA 或 "
-"IPA。)"
+"如果是在虚拟机中运行该命令,可能会导致缓存一致性问题。问题在于,虚拟机是在禁用缓存的情况"
+"下直接访问内存,而主机具有同一内存的缓存别名。即使主机并没有明确访问该内存,推测性访问仍"
+"然会导致缓存被填充,然后在清除缓存或虚拟机启用缓存时,任何一方对于该内存进行的更改就会丢"
+"失。(使用物理地址来键控缓存,而 VA 或 IPA。)"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"For simplicity, we just use a hardcoded pagetable (see `idmap.S`) which "
-"identity maps the first 1 GiB of address space for devices, the next 1 GiB "
-"for DRAM, and another 1 GiB higher up for more devices. This matches the "
-"memory layout that QEMU uses."
+"For simplicity, we just use a hardcoded pagetable (see `idmap.S`) which identity maps "
+"the first 1 GiB of address space for devices, the next 1 GiB for DRAM, and another 1 GiB "
+"higher up for more devices. This matches the memory layout that QEMU uses."
msgstr ""
-"为简单起见,我们只使用硬编码的分页表(请参阅 `dmap.S`),其通过身份映射将前一"
-"个 1 GiB 的地址空间用于设备,紧接着的 1 GiB 用于 DRAM,然后在更高位置预留了 "
-"1 GiB 给其他设备。这与 QEMU 使用的内存布局一致。"
+"为简单起见,我们只使用硬编码的分页表(请参阅 `dmap.S`),其通过身份映射将前一个 1 GiB 的"
+"地址空间用于设备,紧接着的 1 GiB 用于 DRAM,然后在更高位置预留了 1 GiB 给其他设备。这与 "
+"QEMU 使用的内存布局一致。"
#: src/bare-metal/aps/entry-point.md
-msgid ""
-"We also set up the exception vector (`vbar_el1`), which we'll see more about "
-"later."
+msgid "We also set up the exception vector (`vbar_el1`), which we'll see more about later."
msgstr "我们还设置了异常矢量 (`vbar_el1`),稍后会对此进行详细介绍。"
#: src/bare-metal/aps/entry-point.md
msgid ""
-"All examples this afternoon assume we will be running at exception level 1 "
-"(EL1). If you need to run at a different exception level you'll need to "
-"modify `entry.S` accordingly."
+"All examples this afternoon assume we will be running at exception level 1 (EL1). If you "
+"need to run at a different exception level you'll need to modify `entry.S` accordingly."
msgstr ""
-"今天下午的所有示例都假定我们将在异常级别 1 (EL1) 下运行。如果您需要在其他异常"
-"级别下运行,则需要修改相应的 `entry.S`。"
+"今天下午的所有示例都假定我们将在异常级别 1 (EL1) 下运行。如果您需要在其他异常级别下运行,"
+"则需要修改相应的 `entry.S`。"
#: src/bare-metal/aps/inline-assembly.md
msgid "Inline assembly"
@@ -17502,12 +16637,11 @@ msgstr "内嵌汇编"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"Sometimes we need to use assembly to do things that aren't possible with "
-"Rust code. For example, to make an HVC (hypervisor call) to tell the "
-"firmware to power off the system:"
+"Sometimes we need to use assembly to do things that aren't possible with Rust code. For "
+"example, to make an HVC (hypervisor call) to tell the firmware to power off the system:"
msgstr ""
-"有时,如果无法通过 Rust 代码实现某些操作,我们就需要使用汇编来解决。例如,如"
-"需发出 HVC(Hypervisor 调用)来指示固件关闭系统,请使用以下命令:"
+"有时,如果无法通过 Rust 代码实现某些操作,我们就需要使用汇编来解决。例如,如需发出 HVC"
+"(Hypervisor 调用)来指示固件关闭系统,请使用以下命令:"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
@@ -17555,61 +16689,55 @@ msgstr "\"w7\""
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"(If you actually want to do this, use the [`smccc`](https://crates.io/crates/"
-"smccc) crate which has wrappers for all these functions.)"
+"(If you actually want to do this, use the [`smccc`](https://crates.io/crates/smccc) "
+"crate which has wrappers for all these functions.)"
msgstr ""
-"(如果确实想要这样做,请使用 [`smccc`](https://crates.io/crates/smccc) "
-"crate,其中包含适用于所有这些函数的封装容器。)"
+"(如果确实想要这样做,请使用 [`smccc`](https://crates.io/crates/smccc) crate,其中包含适"
+"用于所有这些函数的封装容器。)"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"PSCI is the Arm Power State Coordination Interface, a standard set of "
-"functions to manage system and CPU power states, among other things. It is "
-"implemented by EL3 firmware and hypervisors on many systems."
+"PSCI is the Arm Power State Coordination Interface, a standard set of functions to "
+"manage system and CPU power states, among other things. It is implemented by EL3 "
+"firmware and hypervisors on many systems."
msgstr ""
-"PSCI 是 Arm 电源状态协调接口,为一组标准函数,用于管理系统和 CPU 电源状态等。"
-"在许多系统中,通过 EL3 固件和 Hypervisor 来实现该函数。"
+"PSCI 是 Arm 电源状态协调接口,为一组标准函数,用于管理系统和 CPU 电源状态等。在许多系统"
+"中,通过 EL3 固件和 Hypervisor 来实现该函数。"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"The `0 => _` syntax means initialise the register to 0 before running the "
-"inline assembly code, and ignore its contents afterwards. We need to use "
-"`inout` rather than `in` because the call could potentially clobber the "
-"contents of the registers."
+"The `0 => _` syntax means initialise the register to 0 before running the inline "
+"assembly code, and ignore its contents afterwards. We need to use `inout` rather than "
+"`in` because the call could potentially clobber the contents of the registers."
msgstr ""
-"`0 => _` 语法表示在运行内嵌汇编代码之前将寄存器初始化为 0,并在之后忽略寄存器"
-"中的内容。我们需要使用 `inout` 而非 `in`,因为该调用操作可能会破坏寄存器中的"
-"内容。"
+"`0 => _` 语法表示在运行内嵌汇编代码之前将寄存器初始化为 0,并在之后忽略寄存器中的内容。我"
+"们需要使用 `inout` 而非 `in`,因为该调用操作可能会破坏寄存器中的内容。"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"This `main` function needs to be `#[no_mangle]` and `extern \"C\"` because "
-"it is called from our entry point in `entry.S`."
+"This `main` function needs to be `#[no_mangle]` and `extern \"C\"` because it is called "
+"from our entry point in `entry.S`."
msgstr ""
-"所用 `main` 函数必须是 `#[no_mangle]` 和 `extern \"C\"`,因为是从 `entry.S` "
-"中的入口点调用该函数。"
+"所用 `main` 函数必须是 `#[no_mangle]` 和 `extern \"C\"`,因为是从 `entry.S` 中的入口点调"
+"用该函数。"
#: src/bare-metal/aps/inline-assembly.md
msgid ""
-"`_x0`–`_x3` are the values of registers `x0`–`x3`, which are conventionally "
-"used by the bootloader to pass things like a pointer to the device tree. "
-"According to the standard aarch64 calling convention (which is what `extern "
-"\"C\"` specifies to use), registers `x0`–`x7` are used for the first 8 "
-"arguments passed to a function, so `entry.S` doesn't need to do anything "
-"special except make sure it doesn't change these registers."
+"`_x0`–`_x3` are the values of registers `x0`–`x3`, which are conventionally used by the "
+"bootloader to pass things like a pointer to the device tree. According to the standard "
+"aarch64 calling convention (which is what `extern \"C\"` specifies to use), registers "
+"`x0`–`x7` are used for the first 8 arguments passed to a function, so `entry.S` doesn't "
+"need to do anything special except make sure it doesn't change these registers."
msgstr ""
-"`_x0`–`_x3` 表示寄存器 `x0`-`x3` 的值,引导加载程序通常使用这些值来传递各种内"
-"容(例如将指针传递到设备树)。根据标准的 aarch64 调用规范(`extern \"C\"`指定"
-"使用此规范),需要使用寄存器 `x0`-`x7` 将前 8 个参数传递给函数,因此 `entry."
-"S` 无需执行任何特殊操作,只要确保不会更改这些寄存器。"
+"`_x0`–`_x3` 表示寄存器 `x0`-`x3` 的值,引导加载程序通常使用这些值来传递各种内容(例如将指"
+"针传递到设备树)。根据标准的 aarch64 调用规范(`extern \"C\"`指定使用此规范),需要使用寄"
+"存器 `x0`-`x7` 将前 8 个参数传递给函数,因此 `entry.S` 无需执行任何特殊操作,只要确保不会"
+"更改这些寄存器。"
#: src/bare-metal/aps/inline-assembly.md
-msgid ""
-"Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/"
-"examples`."
+msgid "Run the example in QEMU with `make qemu_psci` under `src/bare-metal/aps/examples`."
msgstr ""
-"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_psci` 运行"
-"该示例。"
+"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_psci` 运行该示例。"
#: src/bare-metal/aps/mmio.md
msgid "Volatile memory access for MMIO"
@@ -17625,40 +16753,36 @@ msgstr "切勿提及引用。"
#: src/bare-metal/aps/mmio.md
msgid ""
-"`addr_of!` lets you get fields of structs without creating an intermediate "
-"reference."
+"`addr_of!` lets you get fields of structs without creating an intermediate reference."
msgstr "借助 `addr_of!`,您无需创建中间引用即可获取结构体字段。"
#: src/bare-metal/aps/mmio.md
msgid ""
-"Volatile access: read or write operations may have side-effects, so prevent "
-"the compiler or hardware from reordering, duplicating or eliding them."
+"Volatile access: read or write operations may have side-effects, so prevent the compiler "
+"or hardware from reordering, duplicating or eliding them."
msgstr ""
-"易失性访问:执行读取或写入操作可能会产生副作用,因此应阻止编译器或硬件对这些"
-"操作进行重新排序、复制或省略。"
+"易失性访问:执行读取或写入操作可能会产生副作用,因此应阻止编译器或硬件对这些操作进行重新"
+"排序、复制或省略。"
#: src/bare-metal/aps/mmio.md
msgid ""
-"Usually if you write and then read, e.g. via a mutable reference, the "
-"compiler may assume that the value read is the same as the value just "
-"written, and not bother actually reading memory."
+"Usually if you write and then read, e.g. via a mutable reference, the compiler may "
+"assume that the value read is the same as the value just written, and not bother "
+"actually reading memory."
msgstr ""
-"通常情况下,如果您先写入操作,紧接着进行读取操作(例如通过可变引用),则编译"
-"器可能会认为读取的值是最新写入的值,就不再执行实际的内存读取过程。"
+"通常情况下,如果您先写入操作,紧接着进行读取操作(例如通过可变引用),则编译器可能会认为"
+"读取的值是最新写入的值,就不再执行实际的内存读取过程。"
#: src/bare-metal/aps/mmio.md
msgid ""
-"Some existing crates for volatile access to hardware do hold references, but "
-"this is unsound. Whenever a reference exist, the compiler may choose to "
-"dereference it."
+"Some existing crates for volatile access to hardware do hold references, but this is "
+"unsound. Whenever a reference exist, the compiler may choose to dereference it."
msgstr ""
-"虽然在对硬件进行易失性访问时,一些 crate 确实会提及引用,但这很不安全。只要存"
-"在引用,编译器就会选择对其进行解引用操作。"
+"虽然在对硬件进行易失性访问时,一些 crate 确实会提及引用,但这很不安全。只要存在引用,编译"
+"器就会选择对其进行解引用操作。"
#: src/bare-metal/aps/mmio.md
-msgid ""
-"Use the `addr_of!` macro to get struct field pointers from a pointer to the "
-"struct."
+msgid "Use the `addr_of!` macro to get struct field pointers from a pointer to the struct."
msgstr "使用 `addr_of!` 宏可以从结构体指针中获取结构体字段的指针。"
#: src/bare-metal/aps/uart.md
@@ -17667,11 +16791,11 @@ msgstr "编写 UART 驱动程序"
#: src/bare-metal/aps/uart.md
msgid ""
-"The QEMU 'virt' machine has a [PL011](https://developer.arm.com/"
-"documentation/ddi0183/g) UART, so let's write a driver for that."
+"The QEMU 'virt' machine has a [PL011](https://developer.arm.com/documentation/ddi0183/g) "
+"UART, so let's write a driver for that."
msgstr ""
-"QEMU “虚拟机”具有 [PL011](https://developer.arm.com/documentation/ddi0183/g) "
-"UART,现在为其编写驱动程序。"
+"QEMU “虚拟机”具有 [PL011](https://developer.arm.com/documentation/ddi0183/g) UART,现在为"
+"其编写驱动程序。"
#: src/bare-metal/aps/uart.md
msgid "/// Minimal driver for a PL011 UART.\n"
@@ -17684,10 +16808,8 @@ msgid ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the 8 MMIO control registers of "
-"a\n"
-" /// PL011 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the 8 MMIO control registers of a\n"
+" /// PL011 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
msgstr ""
"/// Constructs a new instance of the UART driver for a PL011 device at the\n"
@@ -17695,10 +16817,8 @@ msgstr ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the 8 MMIO control registers of "
-"a\n"
-" /// PL011 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the 8 MMIO control registers of a\n"
+" /// PL011 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
#: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md
@@ -17731,35 +16851,32 @@ msgstr "// Wait until the UART is no longer busy.\n"
#: src/bare-metal/aps/uart.md
msgid ""
-"Note that `Uart::new` is unsafe while the other methods are safe. This is "
-"because as long as the caller of `Uart::new` guarantees that its safety "
-"requirements are met (i.e. that there is only ever one instance of the "
-"driver for a given UART, and nothing else aliasing its address space), then "
-"it is always safe to call `write_byte` later because we can assume the "
-"necessary preconditions."
+"Note that `Uart::new` is unsafe while the other methods are safe. This is because as "
+"long as the caller of `Uart::new` guarantees that its safety requirements are met (i.e. "
+"that there is only ever one instance of the driver for a given UART, and nothing else "
+"aliasing its address space), then it is always safe to call `write_byte` later because "
+"we can assume the necessary preconditions."
msgstr ""
-"请注意,使用 `Uart::new` 方法不安全,而其他方法则安全。原因在于,只要 `Uart::"
-"new` 的调用方保证满足其安全要求(即所指定的 UART 只有一个驱动程序实例,且没有"
-"其他内容与其地址空间存在重叠),那么后续调用 `write_byte` 始终是安全的,因为"
-"我们假定需要满足的前提条件。"
+"请注意,使用 `Uart::new` 方法不安全,而其他方法则安全。原因在于,只要 `Uart::new` 的调用"
+"方保证满足其安全要求(即所指定的 UART 只有一个驱动程序实例,且没有其他内容与其地址空间存"
+"在重叠),那么后续调用 `write_byte` 始终是安全的,因为我们假定需要满足的前提条件。"
#: src/bare-metal/aps/uart.md
msgid ""
-"We could have done it the other way around (making `new` safe but "
-"`write_byte` unsafe), but that would be much less convenient to use as every "
-"place that calls `write_byte` would need to reason about the safety"
+"We could have done it the other way around (making `new` safe but `write_byte` unsafe), "
+"but that would be much less convenient to use as every place that calls `write_byte` "
+"would need to reason about the safety"
msgstr ""
-"我们也可以采用相反的方式(即确保 `new` 安全,但 `write_byte` 不安全),不过这"
-"样会很不方便,因为每当调用 `write_byte` 时都需要推断是否安全。"
+"我们也可以采用相反的方式(即确保 `new` 安全,但 `write_byte` 不安全),不过这样会很不方"
+"便,因为每当调用 `write_byte` 时都需要推断是否安全。"
#: src/bare-metal/aps/uart.md
msgid ""
-"This is a common pattern for writing safe wrappers of unsafe code: moving "
-"the burden of proof for soundness from a large number of places to a smaller "
-"number of places."
+"This is a common pattern for writing safe wrappers of unsafe code: moving the burden of "
+"proof for soundness from a large number of places to a smaller number of places."
msgstr ""
-"这是安全地封装不安全代码时常见的策略:即在少数调用代码的地方进行安全验证,而"
-"不是在很多地方进行。"
+"这是安全地封装不安全代码时常见的策略:即在少数调用代码的地方进行安全验证,而不是在很多地"
+"方进行。"
#: src/bare-metal/aps/uart/traits.md
msgid "More traits"
@@ -17767,8 +16884,7 @@ msgstr "更多 trait"
#: src/bare-metal/aps/uart/traits.md
msgid ""
-"We derived the `Debug` trait. It would be useful to implement a few more "
-"traits too."
+"We derived the `Debug` trait. It would be useful to implement a few more traits too."
msgstr "已经派生了 `Debug` trait。如果再实现更多 trait,会大有帮助。"
#: src/bare-metal/aps/uart/traits.md src/exercises/bare-metal/rtc.md
@@ -17782,19 +16898,14 @@ msgstr ""
#: src/bare-metal/aps/uart/traits.md
msgid ""
-"Implementing `Write` lets us use the `write!` and `writeln!` macros with our "
-"`Uart` type."
-msgstr ""
-"通过实现 `Write`,我们可以将 `write!` 和 `writeln!` 宏与 `Uart` 类型搭配使"
-"用。"
+"Implementing `Write` lets us use the `write!` and `writeln!` macros with our `Uart` type."
+msgstr "通过实现 `Write`,我们可以将 `write!` 和 `writeln!` 宏与 `Uart` 类型搭配使用。"
#: src/bare-metal/aps/uart/traits.md
msgid ""
-"Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/"
-"examples`."
+"Run the example in QEMU with `make qemu_minimal` under `src/bare-metal/aps/examples`."
msgstr ""
-"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_minimal` "
-"运行该示例。"
+"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_minimal` 运行该示例。"
#: src/bare-metal/aps/better-uart.md
msgid "A better UART driver"
@@ -17802,16 +16913,14 @@ msgstr "更好的 UART 驱动程序"
#: src/bare-metal/aps/better-uart.md
msgid ""
-"The PL011 actually has [a bunch more registers](https://developer.arm.com/"
-"documentation/ddi0183/g/programmers-model/summary-of-registers), and adding "
-"offsets to construct pointers to access them is error-prone and hard to "
-"read. Plus, some of them are bit fields which would be nice to access in a "
-"structured way."
+"The PL011 actually has [a bunch more registers](https://developer.arm.com/documentation/"
+"ddi0183/g/programmers-model/summary-of-registers), and adding offsets to construct "
+"pointers to access them is error-prone and hard to read. Plus, some of them are bit "
+"fields which would be nice to access in a structured way."
msgstr ""
-"事实上,PL011 具有 [很多额外的寄存器](https://developer.arm.com/"
-"documentation/ddi0183/g/programmers-model/summary-of-registers),但通过添加偏"
-"移量构建指针的方式来访问这些寄存器,既容易出错又难以读取。此外,其中有些寄存"
-"器是位字段,非常便于以结构化方式访问。"
+"事实上,PL011 具有 [很多额外的寄存器](https://developer.arm.com/documentation/ddi0183/g/"
+"programmers-model/summary-of-registers),但通过添加偏移量构建指针的方式来访问这些寄存器,"
+"既容易出错又难以读取。此外,其中有些寄存器是位字段,非常便于以结构化方式访问。"
#: src/bare-metal/aps/better-uart.md
msgid "Offset"
@@ -17959,11 +17068,9 @@ msgstr "为简洁起见,我们省略了一些 ID 寄存器。"
#: src/bare-metal/aps/better-uart/bitflags.md
msgid ""
-"The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for "
-"working with bitflags."
-msgstr ""
-"[`bitflags`](https://crates.io/crates/bitflags) crate 非常适用于处理 "
-"bitflag。"
+"The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for working with "
+"bitflags."
+msgstr "[`bitflags`](https://crates.io/crates/bitflags) crate 非常适用于处理 bitflag。"
#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md
msgid "/// Flags from the UART flag register.\n"
@@ -18007,33 +17114,32 @@ msgstr "/// Ring indicator.\n"
#: src/bare-metal/aps/better-uart/bitflags.md
msgid ""
-"The `bitflags!` macro creates a newtype something like `Flags(u16)`, along "
-"with a bunch of method implementations to get and set flags."
+"The `bitflags!` macro creates a newtype something like `Flags(u16)`, along with a bunch "
+"of method implementations to get and set flags."
msgstr ""
-"`bitflags!` 宏会创建类似于 `Flags(u16)` 的新类型,以及一系列用于获取和设置标"
-"记的方法实现。"
+"`bitflags!` 宏会创建类似于 `Flags(u16)` 的新类型,以及一系列用于获取和设置标记的方法实"
+"现。"
#: src/bare-metal/aps/better-uart/registers.md
msgid "Multiple registers"
msgstr "多个寄存器"
#: src/bare-metal/aps/better-uart/registers.md
-msgid ""
-"We can use a struct to represent the memory layout of the UART's registers."
+msgid "We can use a struct to represent the memory layout of the UART's registers."
msgstr "我们可以使用结构体来表示 UART 寄存器的内存布局。"
#: src/bare-metal/aps/better-uart/registers.md
msgid ""
"[`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-"
-"representation) tells the compiler to lay the struct fields out in order, "
-"following the same rules as C. This is necessary for our struct to have a "
-"predictable layout, as default Rust representation allows the compiler to "
-"(among other things) reorder fields however it sees fit."
+"representation) tells the compiler to lay the struct fields out in order, following the "
+"same rules as C. This is necessary for our struct to have a predictable layout, as "
+"default Rust representation allows the compiler to (among other things) reorder fields "
+"however it sees fit."
msgstr ""
-"通过运行 [`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout."
-"html#the-c-representation) 命令,指示编译器按顺序布置结构体字段,遵循与 C 语"
-"言相同的规则。这是确保结构体具有可预测布局的必要条件,因为默认的 Rust 表示法"
-"允许编译器(以及其他内容)按照其认为合适的方式重新排列字段。"
+"通过运行 [`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-"
+"representation) 命令,指示编译器按顺序布置结构体字段,遵循与 C 语言相同的规则。这是确保结"
+"构体具有可预测布局的必要条件,因为默认的 Rust 表示法允许编译器(以及其他内容)按照其认为"
+"合适的方式重新排列字段。"
#: src/bare-metal/aps/better-uart/driver.md
msgid "Now let's use the new `Registers` struct in our driver."
@@ -18056,9 +17162,7 @@ msgstr ""
msgid ""
"/// Reads and returns a pending byte, or `None` if nothing has been\n"
" /// received.\n"
-msgstr ""
-"/// Reads and returns a pending byte, or `None` if nothing has been "
-"received.\n"
+msgstr "/// Reads and returns a pending byte, or `None` if nothing has been received.\n"
#: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md
msgid "// TODO: Check for error conditions in bits 8-11.\n"
@@ -18066,11 +17170,11 @@ msgstr "// TODO: Check for error conditions in bits 8-11.\n"
#: src/bare-metal/aps/better-uart/driver.md
msgid ""
-"Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual "
-"fields without creating an intermediate reference, which would be unsound."
+"Note the use of `addr_of!` / `addr_of_mut!` to get pointers to individual fields without "
+"creating an intermediate reference, which would be unsound."
msgstr ""
-"请注意,只使用 `addr_of!` / `addr_of_mut!` 获取指向各个字段的指针,而不创建中"
-"间引用,这样很不安全。"
+"请注意,只使用 `addr_of!` / `addr_of_mut!` 获取指向各个字段的指针,而不创建中间引用,这样"
+"很不安全。"
#: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md
msgid "Using it"
@@ -18078,19 +17182,17 @@ msgstr "开始使用"
#: src/bare-metal/aps/better-uart/using.md
msgid ""
-"Let's write a small program using our driver to write to the serial console, "
-"and echo incoming bytes."
+"Let's write a small program using our driver to write to the serial console, and echo "
+"incoming bytes."
msgstr "使用驱动程序编写一个小程序,将数据写入串行控制台,并回显传入的字节。"
#: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid "/// Base address of the primary PL011 UART.\n"
msgstr "/// Base address of the primary PL011 UART.\n"
#: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid ""
"// Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n"
" // and nothing else accesses that address range.\n"
@@ -18120,28 +17222,23 @@ msgstr "\"Bye!\""
#: src/bare-metal/aps/better-uart/using.md
msgid ""
-"As in the [inline assembly](../inline-assembly.md) example, this `main` "
-"function is called from our entry point code in `entry.S`. See the speaker "
-"notes there for details."
+"As in the [inline assembly](../inline-assembly.md) example, this `main` function is "
+"called from our entry point code in `entry.S`. See the speaker notes there for details."
msgstr ""
-"与 [内嵌汇编](../inline-assembly.md) 示例一样,从 `entry.S` 中的入口点代码调"
-"用此 `main` 函数。如需了解详情,请参阅演讲者备注。"
+"与 [内嵌汇编](../inline-assembly.md) 示例一样,从 `entry.S` 中的入口点代码调用此 `main` "
+"函数。如需了解详情,请参阅演讲者备注。"
#: src/bare-metal/aps/better-uart/using.md
-msgid ""
-"Run the example in QEMU with `make qemu` under `src/bare-metal/aps/examples`."
-msgstr ""
-"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu` 运行该示"
-"例。"
+msgid "Run the example in QEMU with `make qemu` under `src/bare-metal/aps/examples`."
+msgstr "在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu` 运行该示例。"
#: src/bare-metal/aps/logging.md
msgid ""
-"It would be nice to be able to use the logging macros from the [`log`]"
-"(https://crates.io/crates/log) crate. We can do this by implementing the "
-"`Log` trait."
+"It would be nice to be able to use the logging macros from the [`log`](https://crates.io/"
+"crates/log) crate. We can do this by implementing the `Log` trait."
msgstr ""
-"最好能够使用 [`log`](https://crates.io/crates/log) crate 中的日志记录宏。可以"
-"通过实现“Log”trait 来做到这一点。"
+"最好能够使用 [`log`](https://crates.io/crates/log) crate 中的日志记录宏。可以通过实"
+"现“Log”trait 来做到这一点。"
#: src/bare-metal/aps/logging.md src/exercises/bare-metal/rtc.md
msgid "\"[{}] {}\""
@@ -18153,11 +17250,8 @@ msgstr "/// Initialises UART logger.\n"
#: src/bare-metal/aps/logging.md
msgid ""
-"The unwrap in `log` is safe because we initialise `LOGGER` before calling "
-"`set_logger`."
-msgstr ""
-"使用 `log` 进行解封装是安全的,因为我们会在调用 `set_logger` 之前初始化 "
-"`LOGGER`。"
+"The unwrap in `log` is safe because we initialise `LOGGER` before calling `set_logger`."
+msgstr "使用 `log` 进行解封装是安全的,因为我们会在调用 `set_logger` 之前初始化 `LOGGER`。"
#: src/bare-metal/aps/logging/using.md
msgid "We need to initialise the logger before we use it."
@@ -18174,24 +17268,21 @@ msgstr "请注意,panic 紧急处理程序现在可以记录各类 panic 详
#: src/bare-metal/aps/logging/using.md
msgid ""
-"Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/"
-"examples`."
+"Run the example in QEMU with `make qemu_logger` under `src/bare-metal/aps/examples`."
msgstr ""
-"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_logger` 运"
-"行该示例。"
+"在 QEMU 中,使用 `src/bare-metal/aps/examples` 目录下的 `make qemu_logger` 运行该示例。"
#: src/bare-metal/aps/exceptions.md
msgid ""
-"AArch64 defines an exception vector table with 16 entries, for 4 types of "
-"exceptions (synchronous, IRQ, FIQ, SError) from 4 states (current EL with "
-"SP0, current EL with SPx, lower EL using AArch64, lower EL using AArch32). "
-"We implement this in assembly to save volatile registers to the stack before "
-"calling into Rust code:"
+"AArch64 defines an exception vector table with 16 entries, for 4 types of exceptions "
+"(synchronous, IRQ, FIQ, SError) from 4 states (current EL with SP0, current EL with SPx, "
+"lower EL using AArch64, lower EL using AArch32). We implement this in assembly to save "
+"volatile registers to the stack before calling into Rust code:"
msgstr ""
-"AArch64 定义了一个包含 16 个条目的异常矢量表,适用于处理 4 种状态(当前 EL 使"
-"用 SP0,当前 EL 使用 SPx,较低 EL 使用 AArch64,较低 EL 使用 AArch32)下的 4 "
-"种异常(同步、IRQ、FIQ、SError)。可以通过汇编方式实现这一操作,以便在调用 "
-"Rust 代码之前将易失性寄存器保存到堆栈:"
+"AArch64 定义了一个包含 16 个条目的异常矢量表,适用于处理 4 种状态(当前 EL 使用 SP0,当"
+"前 EL 使用 SPx,较低 EL 使用 AArch64,较低 EL 使用 AArch32)下的 4 种异常(同步、IRQ、"
+"FIQ、SError)。可以通过汇编方式实现这一操作,以便在调用 Rust 代码之前将易失性寄存器保存到"
+"堆栈:"
#: src/bare-metal/aps/exceptions.md
msgid "EL is exception level; all our examples this afternoon run in EL1."
@@ -18199,32 +17290,30 @@ msgstr "EL 指异常级别;我们今天下午的所有示例都在 EL1 级别
#: src/bare-metal/aps/exceptions.md
msgid ""
-"For simplicity we aren't distinguishing between SP0 and SPx for the current "
-"EL exceptions, or between AArch32 and AArch64 for the lower EL exceptions."
+"For simplicity we aren't distinguishing between SP0 and SPx for the current EL "
+"exceptions, or between AArch32 and AArch64 for the lower EL exceptions."
msgstr ""
-"为简单起见,我们没有区分当前 EL 异常中的 SP0 和 SPx,也没有区分较低 EL 异常中"
-"的 AArch32 和 AArch64。"
+"为简单起见,我们没有区分当前 EL 异常中的 SP0 和 SPx,也没有区分较低 EL 异常中的 AArch32 "
+"和 AArch64。"
#: src/bare-metal/aps/exceptions.md
msgid ""
-"For this example we just log the exception and power down, as we don't "
-"expect any of them to actually happen."
+"For this example we just log the exception and power down, as we don't expect any of "
+"them to actually happen."
msgstr "在本示例中,只需记录异常并进行关机操作,因为预计不会发生任何此类异常。"
#: src/bare-metal/aps/exceptions.md
msgid ""
-"We can think of exception handlers and our main execution context more or "
-"less like different threads. [`Send` and `Sync`](../../concurrency/send-sync."
-"md) will control what we can share between them, just like with threads. For "
-"example, if we want to share some value between exception handlers and the "
-"rest of the program, and it's `Send` but not `Sync`, then we'll need to wrap "
-"it in something like a `Mutex` and put it in a static."
+"We can think of exception handlers and our main execution context more or less like "
+"different threads. [`Send` and `Sync`](../../concurrency/send-sync.md) will control what "
+"we can share between them, just like with threads. For example, if we want to share some "
+"value between exception handlers and the rest of the program, and it's `Send` but not "
+"`Sync`, then we'll need to wrap it in something like a `Mutex` and put it in a static."
msgstr ""
-"我们可以将异常处理程序和主执行上下文视为不同的线程。通过 [`Send` 和 `Sync`]"
-"(../../concurrency/send-sync.md) 控制它们之间可以共享的内容,就像使用线程进行"
-"共享一样。例如,如果想在异常处理程序和程序的其余部分之间共享某个值,并且使用 "
-"`Send` 而非 `Sync`,则需要将该值封装在诸如 `Mutex` 之类的内容中,并放入静态变"
-"量。"
+"我们可以将异常处理程序和主执行上下文视为不同的线程。通过 [`Send` 和 `Sync`](../../"
+"concurrency/send-sync.md) 控制它们之间可以共享的内容,就像使用线程进行共享一样。例如,如"
+"果想在异常处理程序和程序的其余部分之间共享某个值,并且使用 `Send` 而非 `Sync`,则需要将该"
+"值封装在诸如 `Mutex` 之类的内容中,并放入静态变量。"
#: src/bare-metal/aps/other-projects.md
msgid "[oreboot](https://github.com/oreboot/oreboot)"
@@ -18244,26 +17333,23 @@ msgstr "依赖于 LinuxBoot,而不是许多驱动程序本身。"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-"
-"raspberrypi-OS-tutorials)"
+"[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-raspberrypi-OS-"
+"tutorials)"
msgstr ""
-"[Rust RaspberryPi 操作系统教程](https://github.com/rust-embedded/rust-"
-"raspberrypi-OS-tutorials)"
+"[Rust RaspberryPi 操作系统教程](https://github.com/rust-embedded/rust-raspberrypi-OS-"
+"tutorials)"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"Initialisation, UART driver, simple bootloader, JTAG, exception levels, "
-"exception handling, page tables"
-msgstr ""
-"初始化、UART 驱动程序、简单引导加载程序、JTAG、异常级别、异常处理、分页表"
+"Initialisation, UART driver, simple bootloader, JTAG, exception levels, exception "
+"handling, page tables"
+msgstr "初始化、UART 驱动程序、简单引导加载程序、JTAG、异常级别、异常处理、分页表"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"Some dodginess around cache maintenance and initialisation in Rust, not "
-"necessarily a good example to copy for production code."
-msgstr ""
-"在 Rust 中,有些用于处理缓存维护和初始化的方法并不安全,不适宜照搬到正式版代"
-"码中。"
+"Some dodginess around cache maintenance and initialisation in Rust, not necessarily a "
+"good example to copy for production code."
+msgstr "在 Rust 中,有些用于处理缓存维护和初始化的方法并不安全,不适宜照搬到正式版代码中。"
#: src/bare-metal/aps/other-projects.md
msgid "[`cargo-call-stack`](https://crates.io/crates/cargo-call-stack)"
@@ -18275,38 +17361,35 @@ msgstr "使用静态分析来确定堆栈用量上限。"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"The RaspberryPi OS tutorial runs Rust code before the MMU and caches are "
-"enabled. This will read and write memory (e.g. the stack). However:"
+"The RaspberryPi OS tutorial runs Rust code before the MMU and caches are enabled. This "
+"will read and write memory (e.g. the stack). However:"
msgstr ""
-"在 RaspberryPi 操作系统教程中,先运行 Rust 代码然后启用 MMU 和缓存。此操作会"
-"读取和写入内存(例如堆栈)。不过:"
+"在 RaspberryPi 操作系统教程中,先运行 Rust 代码然后启用 MMU 和缓存。此操作会读取和写入内"
+"存(例如堆栈)。不过:"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"Without the MMU and cache, unaligned accesses will fault. It builds with "
-"`aarch64-unknown-none` which sets `+strict-align` to prevent the compiler "
-"generating unaligned accesses so it should be alright, but this is not "
-"necessarily the case in general."
+"Without the MMU and cache, unaligned accesses will fault. It builds with `aarch64-"
+"unknown-none` which sets `+strict-align` to prevent the compiler generating unaligned "
+"accesses so it should be alright, but this is not necessarily the case in general."
msgstr ""
-"如果不启用 MMU 和缓存,非对齐访问将会出错。它使用 `aarch64-unknown-none` 进行"
-"构建,后者会设置 `+strict-align` 以防止编译器生成非对齐访问,因此应该没有问"
-"题,但一般情况下并不一定如此。"
+"如果不启用 MMU 和缓存,非对齐访问将会出错。它使用 `aarch64-unknown-none` 进行构建,后者会"
+"设置 `+strict-align` 以防止编译器生成非对齐访问,因此应该没有问题,但一般情况下并不一定如"
+"此。"
#: src/bare-metal/aps/other-projects.md
msgid ""
-"If it were running in a VM, this can lead to cache coherency issues. The "
-"problem is that the VM is accessing memory directly with the cache disabled, "
-"while the host has cacheable aliases to the same memory. Even if the host "
-"doesn't explicitly access the memory, speculative accesses can lead to cache "
-"fills, and then changes from one or the other will get lost. Again this is "
-"alright in this particular case (running directly on the hardware with no "
-"hypervisor), but isn't a good pattern in general."
+"If it were running in a VM, this can lead to cache coherency issues. The problem is that "
+"the VM is accessing memory directly with the cache disabled, while the host has "
+"cacheable aliases to the same memory. Even if the host doesn't explicitly access the "
+"memory, speculative accesses can lead to cache fills, and then changes from one or the "
+"other will get lost. Again this is alright in this particular case (running directly on "
+"the hardware with no hypervisor), but isn't a good pattern in general."
msgstr ""
-"如果是在虚拟机中运行该命令,可能会导致缓存一致性问题。问题在于,虚拟机是在禁"
-"用缓存的情况下直接访问内存,而主机具有同一内存的缓存别名。即使主机并没有明确"
-"访问该内存,推测性访问仍然会导致缓存被填充,然后任何一方对于该内存进行的更改"
-"就会丢失。再次强调,尽管在此特定示例中(即在硬件上直接运行且无 Hypervisor)这"
-"种做法是可行的,但总的来说,这并非一种良好策略。"
+"如果是在虚拟机中运行该命令,可能会导致缓存一致性问题。问题在于,虚拟机是在禁用缓存的情况"
+"下直接访问内存,而主机具有同一内存的缓存别名。即使主机并没有明确访问该内存,推测性访问仍"
+"然会导致缓存被填充,然后任何一方对于该内存进行的更改就会丢失。再次强调,尽管在此特定示例"
+"中(即在硬件上直接运行且无 Hypervisor)这种做法是可行的,但总的来说,这并非一种良好策略。"
#: src/bare-metal/useful-crates.md
#, fuzzy
@@ -18315,121 +17398,113 @@ msgstr "有用的 crate"
#: src/bare-metal/useful-crates.md
msgid ""
-"We'll go over a few crates which solve some common problems in bare-metal "
-"programming."
+"We'll go over a few crates which solve some common problems in bare-metal programming."
msgstr "接下来介绍几个 crate,用于解决裸机编程中的一些常见问题。"
#: src/bare-metal/useful-crates/zerocopy.md
msgid ""
-"The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides "
-"traits and macros for safely converting between byte sequences and other "
-"types."
+"The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides traits and "
+"macros for safely converting between byte sequences and other types."
msgstr ""
-"[`zerocopy`](https://docs.rs/zerocopy/) crate(源自 Fuchsia)提供了 trait 和"
-"宏,用于确保在字节序列和其他类型之间进行安全转换。"
+"[`zerocopy`](https://docs.rs/zerocopy/) crate(源自 Fuchsia)提供了 trait 和宏,用于确保"
+"在字节序列和其他类型之间进行安全转换。"
#: src/bare-metal/useful-crates/zerocopy.md
msgid ""
-"This is not suitable for MMIO (as it doesn't use volatile reads and writes), "
-"but can be useful for working with structures shared with hardware e.g. by "
-"DMA, or sent over some external interface."
+"This is not suitable for MMIO (as it doesn't use volatile reads and writes), but can be "
+"useful for working with structures shared with hardware e.g. by DMA, or sent over some "
+"external interface."
msgstr ""
-"这不适用于 MMIO(因为它不使用易失性读取和写入),但在与硬件共享的结构(例如通"
-"过 DMA 传输或发送到外部接口)中进行操作时会很有用。"
+"这不适用于 MMIO(因为它不使用易失性读取和写入),但在与硬件共享的结构(例如通过 DMA 传输"
+"或发送到外部接口)中进行操作时会很有用。"
#: src/bare-metal/useful-crates/zerocopy.md
msgid ""
-"`FromBytes` can be implemented for types for which any byte pattern is "
-"valid, and so can safely be converted from an untrusted sequence of bytes."
+"`FromBytes` can be implemented for types for which any byte pattern is valid, and so can "
+"safely be converted from an untrusted sequence of bytes."
msgstr ""
-"对于可以接受任何字节模式的类型,都可以实现 `FromBytes`方法,因此可以对不受信"
-"任的字节序列进行安全转换。"
+"对于可以接受任何字节模式的类型,都可以实现 `FromBytes`方法,因此可以对不受信任的字节序列"
+"进行安全转换。"
#: src/bare-metal/useful-crates/zerocopy.md
msgid ""
-"Attempting to derive `FromBytes` for these types would fail, because "
-"`RequestType` doesn't use all possible u32 values as discriminants, so not "
-"all byte patterns are valid."
+"Attempting to derive `FromBytes` for these types would fail, because `RequestType` "
+"doesn't use all possible u32 values as discriminants, so not all byte patterns are valid."
msgstr ""
-"如果尝试为这些类型派生 `FromBytes`,都将会失败,因为 `RequestType` 不会将所有"
-"可能的 u32 值用作判别标识,所以并非所有的字节模式都有效。"
+"如果尝试为这些类型派生 `FromBytes`,都将会失败,因为 `RequestType` 不会将所有可能的 u32 "
+"值用作判别标识,所以并非所有的字节模式都有效。"
#: src/bare-metal/useful-crates/zerocopy.md
-msgid ""
-"`zerocopy::byteorder` has types for byte-order aware numeric primitives."
+msgid "`zerocopy::byteorder` has types for byte-order aware numeric primitives."
msgstr "`zerocopy::byteorder` 提供了适用于字节顺序感知的数字基元类型。"
#: src/bare-metal/useful-crates/zerocopy.md
msgid ""
-"Run the example with `cargo run` under `src/bare-metal/useful-crates/"
-"zerocopy-example/`. (It won't run in the Playground because of the crate "
-"dependency.)"
+"Run the example with `cargo run` under `src/bare-metal/useful-crates/zerocopy-example/`. "
+"(It won't run in the Playground because of the crate dependency.)"
msgstr ""
-"使用 `src/bare-metal/useful-crates/zerocopy-example/` 目录下的 `cargo run` 运"
-"行该示例。(由于存在 crate 依赖项,无法在 Playground 中运行该示例。)"
+"使用 `src/bare-metal/useful-crates/zerocopy-example/` 目录下的 `cargo run` 运行该示例。"
+"(由于存在 crate 依赖项,无法在 Playground 中运行该示例。)"
#: src/bare-metal/useful-crates/aarch64-paging.md
msgid ""
-"The [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate lets "
-"you create page tables according to the AArch64 Virtual Memory System "
-"Architecture."
+"The [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate lets you create "
+"page tables according to the AArch64 Virtual Memory System Architecture."
msgstr ""
-"借助 [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate,您可"
-"根据 AArch64 虚拟内存系统架构创建分页表。"
+"借助 [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate,您可根据 AArch64 "
+"虚拟内存系统架构创建分页表。"
#: src/bare-metal/useful-crates/aarch64-paging.md
-msgid "// Create a new page table with identity mapping.\n"
+#, fuzzy
+msgid "// Create a new page table with identity mapping."
msgstr "// Create a new page table with identity mapping.\n"
#: src/bare-metal/useful-crates/aarch64-paging.md
-msgid "// Map a 2 MiB region of memory as read-only.\n"
+#, fuzzy
+msgid "// Map a 2 MiB region of memory as read-only."
msgstr "// Map a 2 MiB region of memory as read-only.\n"
#: src/bare-metal/useful-crates/aarch64-paging.md
-msgid "// Set `TTBR0_EL1` to activate the page table.\n"
+#, fuzzy
+msgid "// Set `TTBR0_EL1` to activate the page table."
msgstr "// Set `TTBR0_EL1` to activate the page table.\n"
#: src/bare-metal/useful-crates/aarch64-paging.md
msgid ""
-"For now it only supports EL1, but support for other exception levels should "
-"be straightforward to add."
+"For now it only supports EL1, but support for other exception levels should be "
+"straightforward to add."
msgstr "目前,该方法仅支持 EL1 级别,但也可以直接添加对其他异常级别的支持。"
#: src/bare-metal/useful-crates/aarch64-paging.md
msgid ""
-"This is used in Android for the [Protected VM Firmware](https://cs.android."
-"com/android/platform/superproject/+/master:packages/modules/Virtualization/"
-"pvmfw/)."
+"This is used in Android for the [Protected VM Firmware](https://cs.android.com/android/"
+"platform/superproject/+/master:packages/modules/Virtualization/pvmfw/)."
msgstr ""
-"在 Android 中,该方法适用于 [受保护的虚拟机固件](https://cs.android.com/"
-"android/platform/superproject/+/master:packages/modules/Virtualization/"
-"pvmfw/)。"
+"在 Android 中,该方法适用于 [受保护的虚拟机固件](https://cs.android.com/android/platform/"
+"superproject/+/master:packages/modules/Virtualization/pvmfw/)。"
#: src/bare-metal/useful-crates/aarch64-paging.md
msgid ""
-"There's no easy way to run this example, as it needs to run on real hardware "
-"or under QEMU."
-msgstr ""
-"由于此示例需要在真实硬件上或在 QEMU 中运行,因此没有简单的运行方法可用。"
+"There's no easy way to run this example, as it needs to run on real hardware or under "
+"QEMU."
+msgstr "由于此示例需要在真实硬件上或在 QEMU 中运行,因此没有简单的运行方法可用。"
#: src/bare-metal/useful-crates/buddy_system_allocator.md
msgid ""
-"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) "
-"is a third-party crate implementing a basic buddy system allocator. It can "
-"be used both for [`LockedHeap`](https://docs.rs/buddy_system_allocator/0.9.0/"
-"buddy_system_allocator/struct.LockedHeap.html) implementing [`GlobalAlloc`]"
-"(https://doc.rust-lang.org/core/alloc/trait.GlobalAlloc.html) so you can use "
-"the standard `alloc` crate (as we saw [before](../alloc.md)), or for "
-"allocating other address space. For example, we might want to allocate MMIO "
-"space for PCI BARs:"
-msgstr ""
-"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) "
-"是第三方 crate,用于实现基本伙伴系统分配器。同时,也可将其用于 [`LockedHeap`]"
-"(https://docs.rs/buddy_system_allocator/0.9.0/buddy_system_allocator/struct."
-"LockedHeap.html) 以实现 [`GlobalAlloc`](https://doc.rust-lang.org/core/alloc/"
-"trait.GlobalAlloc.html),这样便可以使用标准的 `alloc` crate(正如在 [之前部"
-"分](../alloc.md) 中所示),或者用于分配其他地址空间。例如,我们可能需要为 "
-"PCI BAR 分配 MMIO 空间:"
+"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) is a third-"
+"party crate implementing a basic buddy system allocator. It can be used both for "
+"[`LockedHeap`](https://docs.rs/buddy_system_allocator/0.9.0/buddy_system_allocator/"
+"struct.LockedHeap.html) implementing [`GlobalAlloc`](https://doc.rust-lang.org/core/"
+"alloc/trait.GlobalAlloc.html) so you can use the standard `alloc` crate (as we saw "
+"[before](../alloc.md)), or for allocating other address space. For example, we might "
+"want to allocate MMIO space for PCI BARs:"
+msgstr ""
+"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) 是第三方 "
+"crate,用于实现基本伙伴系统分配器。同时,也可将其用于 [`LockedHeap`](https://docs.rs/"
+"buddy_system_allocator/0.9.0/buddy_system_allocator/struct.LockedHeap.html) 以实现 "
+"[`GlobalAlloc`](https://doc.rust-lang.org/core/alloc/trait.GlobalAlloc.html),这样便可以"
+"使用标准的 `alloc` crate(正如在 [之前部分](../alloc.md) 中所示),或者用于分配其他地址空"
+"间。例如,我们可能需要为 PCI BAR 分配 MMIO 空间:"
#: src/bare-metal/useful-crates/buddy_system_allocator.md
msgid "PCI BARs always have alignment equal to their size."
@@ -18437,53 +17512,46 @@ msgstr "PCI BAR 的对齐方式始终与其大小相等。"
#: src/bare-metal/useful-crates/buddy_system_allocator.md
msgid ""
-"Run the example with `cargo run` under `src/bare-metal/useful-crates/"
-"allocator-example/`. (It won't run in the Playground because of the crate "
-"dependency.)"
+"Run the example with `cargo run` under `src/bare-metal/useful-crates/allocator-example/"
+"`. (It won't run in the Playground because of the crate dependency.)"
msgstr ""
-"使用 `src/bare-metal/useful-crates/allocator-example/` 目录下的 `cargo run` "
-"运行该示例。(由于存在 crate 依赖项,无法在 Playground 中运行该示例。)"
+"使用 `src/bare-metal/useful-crates/allocator-example/` 目录下的 `cargo run` 运行该示例。"
+"(由于存在 crate 依赖项,无法在 Playground 中运行该示例。)"
#: src/bare-metal/useful-crates/tinyvec.md
msgid ""
-"Sometimes you want something which can be resized like a `Vec`, but without "
-"heap allocation. [`tinyvec`](https://crates.io/crates/tinyvec) provides "
-"this: a vector backed by an array or slice, which could be statically "
-"allocated or on the stack, which keeps track of how many elements are used "
-"and panics if you try to use more than are allocated."
+"Sometimes you want something which can be resized like a `Vec`, but without heap "
+"allocation. [`tinyvec`](https://crates.io/crates/tinyvec) provides this: a vector backed "
+"by an array or slice, which could be statically allocated or on the stack, which keeps "
+"track of how many elements are used and panics if you try to use more than are allocated."
msgstr ""
-"有时,需要一些像 `Vec` 一样能够调整大小的特性,但无需进行堆分配。[`tinyvec`]"
-"(https://crates.io/crates/tinyvec) 提供了以下特性:由数组或 slice 支持的矢"
-"量,该矢量支持进行静态分配或堆分配;用于跟踪使用的元素数量,如果元素使用量超"
-"过了分配额度,则会出现 panic。"
+"有时,需要一些像 `Vec` 一样能够调整大小的特性,但无需进行堆分配。[`tinyvec`](https://"
+"crates.io/crates/tinyvec) 提供了以下特性:由数组或 slice 支持的矢量,该矢量支持进行静态分"
+"配或堆分配;用于跟踪使用的元素数量,如果元素使用量超过了分配额度,则会出现 panic。"
#: src/bare-metal/useful-crates/tinyvec.md
-msgid ""
-"`tinyvec` requires that the element type implement `Default` for "
-"initialisation."
+msgid "`tinyvec` requires that the element type implement `Default` for initialisation."
msgstr "根据 `tinyvec`要求,元素类型需实现初始化 `Default`。"
#: src/bare-metal/useful-crates/tinyvec.md
-msgid ""
-"The Rust Playground includes `tinyvec`, so this example will run fine inline."
+msgid "The Rust Playground includes `tinyvec`, so this example will run fine inline."
msgstr "Rust Playground 中包含 `tinyvec`,因此本示例将以内嵌方式正常运行。"
#: src/bare-metal/useful-crates/spin.md
msgid ""
-"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` "
-"are not available in `core` or `alloc`. How can we manage synchronisation or "
-"interior mutability, such as for sharing state between different CPUs?"
+"`std::sync::Mutex` and the other synchronisation primitives from `std::sync` are not "
+"available in `core` or `alloc`. How can we manage synchronisation or interior "
+"mutability, such as for sharing state between different CPUs?"
msgstr ""
-"在 `core` 或 `alloc` 中无法使用 `std::sync::Mutex` 和 `std::sync` 中的其他同"
-"步基元。那么该如何管理同步或内部可变性,例如在不同 CPU 之间共享状态?"
+"在 `core` 或 `alloc` 中无法使用 `std::sync::Mutex` 和 `std::sync` 中的其他同步基元。那么"
+"该如何管理同步或内部可变性,例如在不同 CPU 之间共享状态?"
#: src/bare-metal/useful-crates/spin.md
msgid ""
-"The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based "
-"equivalents of many of these primitives."
+"The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based equivalents of "
+"many of these primitives."
msgstr ""
-"[`spin`](https://crates.io/crates/spin) crate 为许多基元提供了基于自旋锁的等"
-"效方法。"
+"[`spin`](https://crates.io/crates/spin) crate 为许多基元提供了基于自旋锁的等效方法。"
#: src/bare-metal/useful-crates/spin.md
msgid "Be careful to avoid deadlock if you take locks in interrupt handlers."
@@ -18492,36 +17560,34 @@ msgstr "在中断处理程序中进行锁定操作时,请注意避免出现死
#: src/bare-metal/useful-crates/spin.md
#, fuzzy
msgid ""
-"`spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, "
-"`Barrier` and `Once` from `std::sync`; and `Lazy` for lazy initialisation."
+"`spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, `Barrier` "
+"and `Once` from `std::sync`; and `Lazy` for lazy initialisation."
msgstr ""
-"`spin` 还提供了一种票卡锁互斥实现,等同于 `std::sync` 中的 `RwLock`、"
-"`Barrier` 和 `Once`,以及用于用于延迟初始化的 `Lazy`。"
+"`spin` 还提供了一种票卡锁互斥实现,等同于 `std::sync` 中的 `RwLock`、`Barrier` 和 "
+"`Once`,以及用于用于延迟初始化的 `Lazy`。"
#: src/bare-metal/useful-crates/spin.md
msgid ""
-"The [`once_cell`](https://crates.io/crates/once_cell) crate also has some "
-"useful types for late initialisation with a slightly different approach to "
-"`spin::once::Once`."
+"The [`once_cell`](https://crates.io/crates/once_cell) crate also has some useful types "
+"for late initialisation with a slightly different approach to `spin::once::Once`."
msgstr ""
-"[`once_cell`](https://crates.io/crates/once_cell) crate 也提供了一些适用于延"
-"迟初始化的实用类型,它们与 `spin::once::Once` 所用方法略有不同。"
+"[`once_cell`](https://crates.io/crates/once_cell) crate 也提供了一些适用于延迟初始化的实"
+"用类型,它们与 `spin::once::Once` 所用方法略有不同。"
#: src/bare-metal/useful-crates/spin.md
-msgid ""
-"The Rust Playground includes `spin`, so this example will run fine inline."
+msgid "The Rust Playground includes `spin`, so this example will run fine inline."
msgstr "Rust Playground 中包含 `spin`,因此本示例将以内嵌方式正常运行。"
#: src/bare-metal/android.md
msgid ""
-"To build a bare-metal Rust binary in AOSP, you need to use a "
-"`rust_ffi_static` Soong rule to build your Rust code, then a `cc_binary` "
-"with a linker script to produce the binary itself, and then a `raw_binary` "
-"to convert the ELF to a raw binary ready to be run."
+"To build a bare-metal Rust binary in AOSP, you need to use a `rust_ffi_static` Soong "
+"rule to build your Rust code, then a `cc_binary` with a linker script to produce the "
+"binary itself, and then a `raw_binary` to convert the ELF to a raw binary ready to be "
+"run."
msgstr ""
-"如需在 AOSP 中构建裸机 Rust 二进制文件,应使用 `rust_ffi_static` Soong 规则来"
-"构建 Rust 代码,然后通过 `cc_binary` 和链接器脚本生成二进制文件本身,再使用 "
-"`raw_binary` 将 ELF 转换为可以正常运行的原始二进制文件。"
+"如需在 AOSP 中构建裸机 Rust 二进制文件,应使用 `rust_ffi_static` Soong 规则来构建 Rust 代"
+"码,然后通过 `cc_binary` 和链接器脚本生成二进制文件本身,再使用 `raw_binary` 将 ELF 转换"
+"为可以正常运行的原始二进制文件。"
#: src/bare-metal/android/vmbase.md
msgid "vmbase"
@@ -18529,29 +17595,27 @@ msgstr "vmbase"
#: src/bare-metal/android/vmbase.md
msgid ""
-"For VMs running under crosvm on aarch64, the [vmbase](https://android."
-"googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/"
-"master/vmbase/) library provides a linker script and useful defaults for the "
-"build rules, along with an entry point, UART console logging and more."
+"For VMs running under crosvm on aarch64, the [vmbase](https://android.googlesource.com/"
+"platform/packages/modules/Virtualization/+/refs/heads/master/vmbase/) library provides a "
+"linker script and useful defaults for the build rules, along with an entry point, UART "
+"console logging and more."
msgstr ""
-"对于在 aarch64 上使用 crosvm 运行的虚拟机,[vmbase](https://android."
-"googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/"
-"master/vmbase/) 库提供了链接器脚本和实用的默认构建规则,以及入口点、UART 控制"
-"台日志记录等功能。"
+"对于在 aarch64 上使用 crosvm 运行的虚拟机,[vmbase](https://android.googlesource.com/"
+"platform/packages/modules/Virtualization/+/refs/heads/master/vmbase/) 库提供了链接器脚本"
+"和实用的默认构建规则,以及入口点、UART 控制台日志记录等功能。"
#: src/bare-metal/android/vmbase.md
msgid ""
-"The `main!` macro marks your main function, to be called from the `vmbase` "
-"entry point."
+"The `main!` macro marks your main function, to be called from the `vmbase` entry point."
msgstr "`main!` 宏用于标记需从 `vmbase` 入口点调用的 main 函数。"
#: src/bare-metal/android/vmbase.md
msgid ""
-"The `vmbase` entry point handles console initialisation, and issues a "
-"PSCI_SYSTEM_OFF to shutdown the VM if your main function returns."
+"The `vmbase` entry point handles console initialisation, and issues a PSCI_SYSTEM_OFF to "
+"shutdown the VM if your main function returns."
msgstr ""
-"`vmbase` 入口点用于处理控制台初始化,并在 main 函数返回时发送 "
-"PSCI_SYSTEM_OFF 命令以关闭虚拟机。"
+"`vmbase` 入口点用于处理控制台初始化,并在 main 函数返回时发送 PSCI_SYSTEM_OFF 命令以关闭"
+"虚拟机。"
#: src/exercises/bare-metal/afternoon.md
msgid "We will write a driver for the PL031 real-time clock device."
@@ -18560,50 +17624,49 @@ msgstr "我们将为 PL031 实时时钟设备编写驱动程序。"
#: src/exercises/bare-metal/afternoon.md src/exercises/concurrency/afternoon.md
#, fuzzy
msgid ""
-"After looking at the exercises, you can look at the [solutions](solutions-"
-"afternoon.md) provided."
+"After looking at the exercises, you can look at the [solutions](solutions-afternoon.md) "
+"provided."
msgstr "读完习题后,可以阅读本书提供的 \\[题解\\]。"
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid "RTC driver"
msgstr "RTC 驱动程序"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/"
-"documentation/ddi0224/c) real-time clock at 0x9010000. For this exercise, "
-"you should write a driver for it."
+"The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/documentation/"
+"ddi0224/c) real-time clock at 0x9010000. For this exercise, you should write a driver "
+"for it."
msgstr ""
-"QEMU aarch64 虚拟机在 0x9010000 地址处 配备了 [PL031](https://developer.arm."
-"com/documentation/ddi0224/c) 实时时钟。对于本练习,应该为其编写驱动程序。"
+"QEMU aarch64 虚拟机在 0x9010000 地址处 配备了 [PL031](https://developer.arm.com/"
+"documentation/ddi0224/c) 实时时钟。对于本练习,应该为其编写驱动程序。"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"Use it to print the current time to the serial console. You can use the "
-"[`chrono`](https://crates.io/crates/chrono) crate for date/time formatting."
+"Use it to print the current time to the serial console. You can use the [`chrono`]"
+"(https://crates.io/crates/chrono) crate for date/time formatting."
msgstr ""
-"使用该时钟可将当前时间输出到串行控制台。您可以使用 [`chrono`](https://crates."
-"io/crates/chrono) crate 设置日期/时间格式。"
+"使用该时钟可将当前时间输出到串行控制台。您可以使用 [`chrono`](https://crates.io/crates/"
+"chrono) crate 设置日期/时间格式。"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"Use the match register and raw interrupt status to busy-wait until a given "
-"time, e.g. 3 seconds in the future. (Call [`core::hint::spin_loop`](https://"
-"doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)"
+"Use the match register and raw interrupt status to busy-wait until a given time, e.g. 3 "
+"seconds in the future. (Call [`core::hint::spin_loop`](https://doc.rust-lang.org/core/"
+"hint/fn.spin_loop.html) inside the loop.)"
msgstr ""
-"通过匹配寄存器和原始中断状态,使得系统在某段指定的时间内一直进行繁忙等待(例"
-"如 3 秒后)。(在循环操作中调用 [`core::hint::spin_loop`](https://doc.rust-"
-"lang.org/core/hint/fn.spin_loop.html)。)"
+"通过匹配寄存器和原始中断状态,使得系统在某段指定的时间内一直进行繁忙等待(例如 3 秒后)。"
+"(在循环操作中调用 [`core::hint::spin_loop`](https://doc.rust-lang.org/core/hint/fn."
+"spin_loop.html)。)"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"_Extension if you have time:_ Enable and handle the interrupt generated by "
-"the RTC match. You can use the driver provided in the [`arm-gic`](https://"
-"docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller."
+"_Extension if you have time:_ Enable and handle the interrupt generated by the RTC "
+"match. You can use the driver provided in the [`arm-gic`](https://docs.rs/arm-gic/) "
+"crate to configure the Arm Generic Interrupt Controller."
msgstr ""
-"_进行扩展(如有时间):_启用并处理由 RTC 匹配产生的中断。可以使用 [`arm-gic`]"
-"(https://docs.rs/arm-gic/) crate 中提供的驱动程序来配置 Arm 通用中断控制器。"
+"_进行扩展(如有时间):_启用并处理由 RTC 匹配产生的中断。可以使用 [`arm-gic`](https://"
+"docs.rs/arm-gic/) crate 中提供的驱动程序来配置 Arm 通用中断控制器。"
#: src/exercises/bare-metal/rtc.md
msgid "Use the RTC interrupt, which is wired to the GIC as `IntId::spi(2)`."
@@ -18611,32 +17674,26 @@ msgstr "请使用 RTC 中断,将其作为 `IntId::spi(2)` 连接到 GIC。"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"Once the interrupt is enabled, you can put the core to sleep via `arm_gic::"
-"wfi()`, which will cause the core to sleep until it receives an interrupt."
-msgstr ""
-"启用中断后,可以通过 `arm_gic::wfi()` 让核心进入休眠状态,直到它收到中断信"
-"号。"
+"Once the interrupt is enabled, you can put the core to sleep via `arm_gic::wfi()`, which "
+"will cause the core to sleep until it receives an interrupt."
+msgstr "启用中断后,可以通过 `arm_gic::wfi()` 让核心进入休眠状态,直到它收到中断信号。"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"Download the [exercise template](../../comprehensive-rust-exercises.zip) and "
-"look in the `rtc` directory for the following files."
+"Download the [exercise template](../../comprehensive-rust-exercises.zip) and look in the "
+"`rtc` directory for the following files."
msgstr ""
-"下载 [练习模板](../../comprehensive-rust-exercises.zip) 并在 `rtc` 目录中查找"
-"以下文件。"
+"下载 [练习模板](../../comprehensive-rust-exercises.zip) 并在 `rtc` 目录中查找以下文件。"
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid "/// Base addresses of the GICv3.\n"
msgstr "/// Base addresses of the GICv3.\n"
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\""
msgstr "\"main({:#x}, {:#x}, {:#x}, {:#x})\""
-#: src/exercises/bare-metal/rtc.md
-#: src/exercises/bare-metal/solutions-afternoon.md
+#: src/exercises/bare-metal/rtc.md src/exercises/bare-metal/solutions-afternoon.md
msgid ""
"// Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n"
" // addresses of a GICv3 distributor and redistributor respectively, and\n"
@@ -18647,17 +17704,19 @@ msgstr ""
" // nothing else accesses those address ranges.\n"
#: src/exercises/bare-metal/rtc.md
-msgid "// TODO: Create instance of RTC driver and print current time.\n"
+#, fuzzy
+msgid "// TODO: Create instance of RTC driver and print current time."
msgstr "// TODO: Create instance of RTC driver and print current time.\n"
#: src/exercises/bare-metal/rtc.md
-msgid "// TODO: Wait for 3 seconds.\n"
+#, fuzzy
+msgid "// TODO: Wait for 3 seconds."
msgstr "// TODO: Wait for 3 seconds.\n"
#: src/exercises/bare-metal/rtc.md
msgid ""
-"_src/exceptions.rs_ (you should only need to change this for the 3rd part of "
-"the exercise):"
+"_src/exceptions.rs_ (you should only need to change this for the 3rd part of the "
+"exercise):"
msgstr "_src/exceptions.rs_(只需在本练习的第 3 部分更改此项):"
#: src/exercises/bare-metal/rtc.md
@@ -18752,10 +17811,8 @@ msgid "// ANCHOR_END: Flags\n"
msgstr "// ANCHOR_END: Flags\n"
#: src/exercises/bare-metal/rtc.md
-msgid ""
-"/// Flags from the UART Receive Status Register / Error Clear Register.\n"
-msgstr ""
-"/// Flags from the UART Receive Status Register / Error Clear Register.\n"
+msgid "/// Flags from the UART Receive Status Register / Error Clear Register.\n"
+msgstr "/// Flags from the UART Receive Status Register / Error Clear Register.\n"
#: src/exercises/bare-metal/rtc.md
msgid "/// Framing error.\n"
@@ -18796,10 +17853,8 @@ msgid ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the MMIO control registers of "
-"a\n"
-" /// PL011 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the MMIO control registers of a\n"
+" /// PL011 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
msgstr ""
"/// Constructs a new instance of the UART driver for a PL011 device at the\n"
@@ -18807,10 +17862,8 @@ msgstr ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the MMIO control registers of "
-"a\n"
-" /// PL011 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the MMIO control registers of a\n"
+" /// PL011 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
#: src/exercises/bare-metal/rtc.md
@@ -18899,29 +17952,27 @@ msgid ""
".set .L_TCR_TG0_4KB, 0x0 << 14\n"
"/* 4 KiB granule size for TTBR1_EL1. */\n"
".set .L_TCR_TG1_4KB, 0x2 << 30\n"
-"/* Disable translation table walk for TTBR1_EL1, generating a translation "
-"fault instead. */\n"
+"/* Disable translation table walk for TTBR1_EL1, generating a translation fault instead. "
+"*/\n"
".set .L_TCR_EPD1, 0x1 << 23\n"
"/* Translation table walks for TTBR0_EL1 are inner sharable. */\n"
".set .L_TCR_SH_INNER, 0x3 << 12\n"
"/*\n"
-" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate "
-"write-allocate\n"
+" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate write-"
+"allocate\n"
" * cacheable.\n"
" */\n"
".set .L_TCR_RGN_OWB, 0x1 << 10\n"
"/*\n"
-" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate "
-"write-allocate\n"
+" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate write-"
+"allocate\n"
" * cacheable.\n"
" */\n"
".set .L_TCR_RGN_IWB, 0x1 << 8\n"
"/* Size offset for TTBR0_EL1 is 2**39 bytes (512 GiB). */\n"
".set .L_TCR_T0SZ_512, 64 - 39\n"
-".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ."
-"L_TCR_RGN_OWB\n"
-".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ."
-"L_TCR_T0SZ_512\n"
+".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | .L_TCR_RGN_OWB\n"
+".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | .L_TCR_T0SZ_512\n"
"\n"
"/* Stage 1 instruction access cacheability is unaffected. */\n"
".set .L_SCTLR_ELx_I, 0x1 << 12\n"
@@ -18937,27 +17988,26 @@ msgid ""
".set .L_SCTLR_EL1_SED, 0x1 << 8\n"
"/* Various IT instructions are disabled at EL0 in aarch32 mode. */\n"
".set .L_SCTLR_EL1_ITD, 0x1 << 7\n"
-".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << "
-"28) | (0x1 << 29)\n"
-".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ."
-"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n"
-".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ."
-"L_SCTLR_EL1_RES1\n"
+".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << 28) | (0x1 << "
+"29)\n"
+".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | .L_SCTLR_EL1_ITD | ."
+"L_SCTLR_EL1_SED\n"
+".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | .L_SCTLR_EL1_RES1\n"
"\n"
"/**\n"
-" * This is a generic entry point for an image. It carries out the operations "
-"required to prepare the\n"
-" * loaded image to be run. Specifically, it zeroes the bss section using "
-"registers x25 and above,\n"
-" * prepares the stack, enables floating point, and sets up the exception "
-"vector. It preserves x0-x3\n"
+" * This is a generic entry point for an image. It carries out the operations required to "
+"prepare the\n"
+" * loaded image to be run. Specifically, it zeroes the bss section using registers x25 "
+"and above,\n"
+" * prepares the stack, enables floating point, and sets up the exception vector. It "
+"preserves x0-x3\n"
" * for the Rust entry point, as these may contain boot parameters.\n"
" */\n"
".section .init.entry, \"ax\"\n"
".global entry\n"
"entry:\n"
-"\t/* Load and apply the memory management configuration, ready to enable MMU "
-"and caches. */\n"
+"\t/* Load and apply the memory management configuration, ready to enable MMU and caches. "
+"*/\n"
"\tadrp x30, idmap\n"
"\tmsr ttbr0_el1, x30\n"
"\n"
@@ -18974,8 +18024,8 @@ msgid ""
"\tmov_i x30, .Lsctlrval\n"
"\n"
"\t/*\n"
-"\t * Ensure everything before this point has completed, then invalidate any "
-"potentially stale\n"
+"\t * Ensure everything before this point has completed, then invalidate any potentially "
+"stale\n"
"\t * local TLB entries before they start being used.\n"
"\t */\n"
"\tisb\n"
@@ -18985,8 +18035,8 @@ msgid ""
"\tisb\n"
"\n"
"\t/*\n"
-"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until "
-"this has completed.\n"
+"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until this has "
+"completed.\n"
"\t */\n"
"\tmsr sctlr_el1, x30\n"
"\tisb\n"
@@ -19058,29 +18108,27 @@ msgstr ""
".set .L_TCR_TG0_4KB, 0x0 << 14\n"
"/* 4 KiB granule size for TTBR1_EL1. */\n"
".set .L_TCR_TG1_4KB, 0x2 << 30\n"
-"/* Disable translation table walk for TTBR1_EL1, generating a translation "
-"fault instead. */\n"
+"/* Disable translation table walk for TTBR1_EL1, generating a translation fault instead. "
+"*/\n"
".set .L_TCR_EPD1, 0x1 << 23\n"
"/* Translation table walks for TTBR0_EL1 are inner sharable. */\n"
".set .L_TCR_SH_INNER, 0x3 << 12\n"
"/*\n"
-" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate "
-"write-allocate\n"
+" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate write-"
+"allocate\n"
" * cacheable.\n"
" */\n"
".set .L_TCR_RGN_OWB, 0x1 << 10\n"
"/*\n"
-" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate "
-"write-allocate\n"
+" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate write-"
+"allocate\n"
" * cacheable.\n"
" */\n"
".set .L_TCR_RGN_IWB, 0x1 << 8\n"
"/* Size offset for TTBR0_EL1 is 2**39 bytes (512 GiB). */\n"
".set .L_TCR_T0SZ_512, 64 - 39\n"
-".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ."
-"L_TCR_RGN_OWB\n"
-".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ."
-"L_TCR_T0SZ_512\n"
+".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | .L_TCR_RGN_OWB\n"
+".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | .L_TCR_T0SZ_512\n"
"\n"
"/* Stage 1 instruction access cacheability is unaffected. */\n"
".set .L_SCTLR_ELx_I, 0x1 << 12\n"
@@ -19096,27 +18144,26 @@ msgstr ""
".set .L_SCTLR_EL1_SED, 0x1 << 8\n"
"/* Various IT instructions are disabled at EL0 in aarch32 mode. */\n"
".set .L_SCTLR_EL1_ITD, 0x1 << 7\n"
-".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << "
-"28) | (0x1 << 29)\n"
-".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ."
-"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n"
-".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ."
-"L_SCTLR_EL1_RES1\n"
+".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << 28) | (0x1 << "
+"29)\n"
+".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | .L_SCTLR_EL1_ITD | ."
+"L_SCTLR_EL1_SED\n"
+".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | .L_SCTLR_EL1_RES1\n"
"\n"
"/**\n"
-" * This is a generic entry point for an image. It carries out the operations "
-"required to prepare the\n"
-" * loaded image to be run. Specifically, it zeroes the bss section using "
-"registers x25 and above,\n"
-" * prepares the stack, enables floating point, and sets up the exception "
-"vector. It preserves x0-x3\n"
+" * This is a generic entry point for an image. It carries out the operations required to "
+"prepare the\n"
+" * loaded image to be run. Specifically, it zeroes the bss section using registers x25 "
+"and above,\n"
+" * prepares the stack, enables floating point, and sets up the exception vector. It "
+"preserves x0-x3\n"
" * for the Rust entry point, as these may contain boot parameters.\n"
" */\n"
".section .init.entry, \"ax\"\n"
".global entry\n"
"entry:\n"
-"\t/* Load and apply the memory management configuration, ready to enable MMU "
-"and caches. */\n"
+"\t/* Load and apply the memory management configuration, ready to enable MMU and caches. "
+"*/\n"
"\tadrp x30, idmap\n"
"\tmsr ttbr0_el1, x30\n"
"\n"
@@ -19133,8 +18180,8 @@ msgstr ""
"\tmov_i x30, .Lsctlrval\n"
"\n"
"\t/*\n"
-"\t * Ensure everything before this point has completed, then invalidate any "
-"potentially stale\n"
+"\t * Ensure everything before this point has completed, then invalidate any potentially "
+"stale\n"
"\t * local TLB entries before they start being used.\n"
"\t */\n"
"\tisb\n"
@@ -19144,8 +18191,8 @@ msgstr ""
"\tisb\n"
"\n"
"\t/*\n"
-"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until "
-"this has completed.\n"
+"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until this has "
+"completed.\n"
"\t */\n"
"\tmsr sctlr_el1, x30\n"
"\tisb\n"
@@ -19205,14 +18252,11 @@ msgid ""
"\n"
"/**\n"
" * Saves the volatile registers onto the stack. This currently takes 14\n"
-" * instructions, so it can be used in exception handlers with 18 "
-"instructions\n"
+" * instructions, so it can be used in exception handlers with 18 instructions\n"
" * left.\n"
" *\n"
-" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 "
-"respectively,\n"
-" * which can be used as the first and second arguments of a subsequent "
-"call.\n"
+" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 respectively,\n"
+" * which can be used as the first and second arguments of a subsequent call.\n"
" */\n"
".macro save_volatile_to_stack\n"
"\t/* Reserve stack space and save registers x0-x18, x29 & x30. */\n"
@@ -19239,8 +18283,7 @@ msgid ""
"\n"
"/**\n"
" * Restores the volatile registers from the stack. This currently takes 14\n"
-" * instructions, so it can be used in exception handlers while still leaving "
-"18\n"
+" * instructions, so it can be used in exception handlers while still leaving 18\n"
" * instructions left; if paired with save_volatile_to_stack, there are 4\n"
" * instructions to spare.\n"
" */\n"
@@ -19267,15 +18310,12 @@ msgid ""
".endm\n"
"\n"
"/**\n"
-" * This is a generic handler for exceptions taken at the current EL while "
-"using\n"
-" * SP0. It behaves similarly to the SPx case by first switching to SPx, "
-"doing\n"
+" * This is a generic handler for exceptions taken at the current EL while using\n"
+" * SP0. It behaves similarly to the SPx case by first switching to SPx, doing\n"
" * the work, then switching back to SP0 before returning.\n"
" *\n"
" * Switching to SPx and calling the Rust handler takes 16 instructions. To\n"
-" * restore and return we need an additional 16 instructions, so we can "
-"implement\n"
+" * restore and return we need an additional 16 instructions, so we can implement\n"
" * the whole handler within the allotted 32 instructions.\n"
" */\n"
".macro current_exception_sp0 handler:req\n"
@@ -19288,18 +18328,15 @@ msgid ""
".endm\n"
"\n"
"/**\n"
-" * This is a generic handler for exceptions taken at the current EL while "
-"using\n"
-" * SPx. It saves volatile registers, calls the Rust handler, restores "
-"volatile\n"
+" * This is a generic handler for exceptions taken at the current EL while using\n"
+" * SPx. It saves volatile registers, calls the Rust handler, restores volatile\n"
" * registers, then returns.\n"
" *\n"
" * This also works for exceptions taken from EL0, if we don't care about\n"
" * non-volatile registers.\n"
" *\n"
" * Saving state and jumping to the Rust handler takes 15 instructions, and\n"
-" * restoring and returning also takes 15 instructions, so we can fit the "
-"whole\n"
+" * restoring and returning also takes 15 instructions, so we can fit the whole\n"
" * handler in 30 instructions, under the limit of 32.\n"
" */\n"
".macro current_exception_spx handler:req\n"
@@ -19396,14 +18433,11 @@ msgstr ""
"\n"
"/**\n"
" * Saves the volatile registers onto the stack. This currently takes 14\n"
-" * instructions, so it can be used in exception handlers with 18 "
-"instructions\n"
+" * instructions, so it can be used in exception handlers with 18 instructions\n"
" * left.\n"
" *\n"
-" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 "
-"respectively,\n"
-" * which can be used as the first and second arguments of a subsequent "
-"call.\n"
+" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 respectively,\n"
+" * which can be used as the first and second arguments of a subsequent call.\n"
" */\n"
".macro save_volatile_to_stack\n"
"\t/* Reserve stack space and save registers x0-x18, x29 & x30. */\n"
@@ -19430,8 +18464,7 @@ msgstr ""
"\n"
"/**\n"
" * Restores the volatile registers from the stack. This currently takes 14\n"
-" * instructions, so it can be used in exception handlers while still leaving "
-"18\n"
+" * instructions, so it can be used in exception handlers while still leaving 18\n"
" * instructions left; if paired with save_volatile_to_stack, there are 4\n"
" * instructions to spare.\n"
" */\n"
@@ -19458,15 +18491,12 @@ msgstr ""
".endm\n"
"\n"
"/**\n"
-" * This is a generic handler for exceptions taken at the current EL while "
-"using\n"
-" * SP0. It behaves similarly to the SPx case by first switching to SPx, "
-"doing\n"
+" * This is a generic handler for exceptions taken at the current EL while using\n"
+" * SP0. It behaves similarly to the SPx case by first switching to SPx, doing\n"
" * the work, then switching back to SP0 before returning.\n"
" *\n"
" * Switching to SPx and calling the Rust handler takes 16 instructions. To\n"
-" * restore and return we need an additional 16 instructions, so we can "
-"implement\n"
+" * restore and return we need an additional 16 instructions, so we can implement\n"
" * the whole handler within the allotted 32 instructions.\n"
" */\n"
".macro current_exception_sp0 handler:req\n"
@@ -19479,18 +18509,15 @@ msgstr ""
".endm\n"
"\n"
"/**\n"
-" * This is a generic handler for exceptions taken at the current EL while "
-"using\n"
-" * SPx. It saves volatile registers, calls the Rust handler, restores "
-"volatile\n"
+" * This is a generic handler for exceptions taken at the current EL while using\n"
+" * SPx. It saves volatile registers, calls the Rust handler, restores volatile\n"
" * registers, then returns.\n"
" *\n"
" * This also works for exceptions taken from EL0, if we don't care about\n"
" * non-volatile registers.\n"
" *\n"
" * Saving state and jumping to the Rust handler takes 15 instructions, and\n"
-" * restoring and returning also takes 15 instructions, so we can fit the "
-"whole\n"
+" * restoring and returning also takes 15 instructions, so we can fit the whole\n"
" * handler in 30 instructions, under the limit of 32.\n"
" */\n"
".macro current_exception_spx handler:req\n"
@@ -19602,8 +18629,7 @@ msgid ""
".set .L_TT_XN, 0x3 << 53\n"
"\n"
".set .L_TT_MT_DEV, 0x0 << 2\t\t\t// MAIR #0 (DEV_nGnRE)\n"
-".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner "
-"shareable\n"
+".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner shareable\n"
"\n"
".set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN\n"
".set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG\n"
@@ -19648,8 +18674,7 @@ msgstr ""
".set .L_TT_XN, 0x3 << 53\n"
"\n"
".set .L_TT_MT_DEV, 0x0 << 2\t\t\t// MAIR #0 (DEV_nGnRE)\n"
-".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner "
-"shareable\n"
+".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner shareable\n"
"\n"
".set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN\n"
".set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG\n"
@@ -19690,8 +18715,7 @@ msgid ""
" */\n"
"\n"
"/*\n"
-" * Code will start running at this symbol which is placed at the start of "
-"the\n"
+" * Code will start running at this symbol which is placed at the start of the\n"
" * image.\n"
" */\n"
"ENTRY(entry)\n"
@@ -19798,8 +18822,7 @@ msgstr ""
" */\n"
"\n"
"/*\n"
-" * Code will start running at this symbol which is placed at the start of "
-"the\n"
+" * Code will start running at this symbol which is placed at the start of the\n"
" * image.\n"
" */\n"
"ENTRY(entry)\n"
@@ -20017,10 +19040,8 @@ msgid ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the MMIO control registers of "
-"a\n"
-" /// PL031 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the MMIO control registers of a\n"
+" /// PL031 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
msgstr ""
"/// Constructs a new instance of the RTC driver for a PL031 device at the\n"
@@ -20028,10 +19049,8 @@ msgstr ""
" ///\n"
" /// # Safety\n"
" ///\n"
-" /// The given base address must point to the MMIO control registers of "
-"a\n"
-" /// PL031 device, which must be mapped into the address space of the "
-"process\n"
+" /// The given base address must point to the MMIO control registers of a\n"
+" /// PL031 device, which must be mapped into the address space of the process\n"
" /// as device memory and not have any other aliases.\n"
#: src/exercises/bare-metal/solutions-afternoon.md
@@ -20056,12 +19075,10 @@ msgstr ""
#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
-"/// Returns whether the match register matches the RTC value, whether or "
-"not\n"
+"/// Returns whether the match register matches the RTC value, whether or not\n"
" /// the interrupt is enabled.\n"
msgstr ""
-"/// Returns whether the match register matches the RTC value, whether or "
-"not\n"
+"/// Returns whether the match register matches the RTC value, whether or not\n"
" /// the interrupt is enabled.\n"
#: src/exercises/bare-metal/solutions-afternoon.md
@@ -20080,14 +19097,12 @@ msgstr ""
msgid ""
"/// Sets or clears the interrupt mask.\n"
" ///\n"
-" /// When the mask is true the interrupt is enabled; when it is false "
-"the\n"
+" /// When the mask is true the interrupt is enabled; when it is false the\n"
" /// interrupt is disabled.\n"
msgstr ""
"/// Sets or clears the interrupt mask.\n"
" ///\n"
-" /// When the mask is true the interrupt is enabled; when it is false "
-"the\n"
+" /// When the mask is true the interrupt is enabled; when it is false the\n"
" /// interrupt is disabled.\n"
#: src/exercises/bare-metal/solutions-afternoon.md
@@ -20099,19 +19114,17 @@ msgid "Welcome to Concurrency in Rust"
msgstr "欢迎了解 Rust 中的并发"
#: src/concurrency.md
-msgid ""
-"Rust has full support for concurrency using OS threads with mutexes and "
-"channels."
+msgid "Rust has full support for concurrency using OS threads with mutexes and channels."
msgstr "Rust 完全支持使用带有互斥锁和通道的操作系统线程进行并发。"
#: src/concurrency.md
msgid ""
-"The Rust type system plays an important role in making many concurrency bugs "
-"compile time bugs. This is often referred to as _fearless concurrency_ since "
-"you can rely on the compiler to ensure correctness at runtime."
+"The Rust type system plays an important role in making many concurrency bugs compile "
+"time bugs. This is often referred to as _fearless concurrency_ since you can rely on the "
+"compiler to ensure correctness at runtime."
msgstr ""
-"Rust 类型系统能帮助我们把许多并发bug转换为编译期bug 发挥着重要作用。这通常称"
-"为“无畏并发”,因为你可以依靠编译器来确保 运行时的正确性。"
+"Rust 类型系统能帮助我们把许多并发bug转换为编译期bug 发挥着重要作用。这通常称为“无畏并"
+"发”,因为你可以依靠编译器来确保 运行时的正确性。"
#: src/concurrency/threads.md
msgid "Rust threads work similarly to threads in other languages:"
@@ -20140,17 +19153,15 @@ msgstr "紧急警报可以携带载荷,并可以使用 `downcast_ref` 对载
#: src/concurrency/threads.md
#, fuzzy
msgid ""
-"Notice that the thread is stopped before it reaches 10 --- the main thread "
-"is not waiting."
+"Notice that the thread is stopped before it reaches 10 --- the main thread is not "
+"waiting."
msgstr "请注意,线程在达到 10 之前就停止了,而主线程并 没有等待。"
#: src/concurrency/threads.md
msgid ""
-"Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for "
-"the thread to finish."
-msgstr ""
-"使用 `let handle = thread::spawn(...)` 和后面的 `handle.join()` 等待 线程完"
-"成。"
+"Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for the thread "
+"to finish."
+msgstr "使用 `let handle = thread::spawn(...)` 和后面的 `handle.join()` 等待 线程完成。"
#: src/concurrency/threads.md
msgid "Trigger a panic in the thread, notice how this doesn't affect `main`."
@@ -20158,12 +19169,11 @@ msgstr "在线程中触发紧急警报,并注意这为何不会影响到 `main
#: src/concurrency/threads.md
msgid ""
-"Use the `Result` return value from `handle.join()` to get access to the "
-"panic payload. This is a good time to talk about [`Any`](https://doc.rust-"
-"lang.org/std/any/index.html)."
+"Use the `Result` return value from `handle.join()` to get access to the panic payload. "
+"This is a good time to talk about [`Any`](https://doc.rust-lang.org/std/any/index.html)."
msgstr ""
-"使用 `handle.join()` 的 `Result` 返回值来获取对紧急警报 载荷的访问权限。现在"
-"有必要介绍一下 [`Any`](https://doc.rust-lang.org/std/any/index.html) 了。"
+"使用 `handle.join()` 的 `Result` 返回值来获取对紧急警报 载荷的访问权限。现在有必要介绍一"
+"下 [`Any`](https://doc.rust-lang.org/std/any/index.html) 了。"
#: src/concurrency/scoped-threads.md
msgid "Normal threads cannot borrow from their environment:"
@@ -20171,35 +19181,35 @@ msgstr "常规线程不能从它们所处的环境中借用:"
#: src/concurrency/scoped-threads.md
msgid ""
-"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/"
-"fn.scope.html) for this:"
+"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/fn.scope."
+"html) for this:"
msgstr ""
-"不过,你可以使用[范围线程](https://doc.rust-lang.org/std/thread/fn.scope."
-"html)来实现此目的:"
+"不过,你可以使用[范围线程](https://doc.rust-lang.org/std/thread/fn.scope.html)来实现此目"
+"的:"
#: src/concurrency/scoped-threads.md
msgid ""
-"The reason for that is that when the `thread::scope` function completes, all "
-"the threads are guaranteed to be joined, so they can return borrowed data."
+"The reason for that is that when the `thread::scope` function completes, all the threads "
+"are guaranteed to be joined, so they can return borrowed data."
msgstr ""
-"其原因在于,在 `thread::scope` 函数完成后,可保证所有线程都已联结在一起,使得"
-"线程能够返回借用的数据。"
+"其原因在于,在 `thread::scope` 函数完成后,可保证所有线程都已联结在一起,使得线程能够返回"
+"借用的数据。"
#: src/concurrency/scoped-threads.md
msgid ""
-"Normal Rust borrowing rules apply: you can either borrow mutably by one "
-"thread, or immutably by any number of threads."
+"Normal Rust borrowing rules apply: you can either borrow mutably by one thread, or "
+"immutably by any number of threads."
msgstr ""
-"此时须遵守常规 Rust 借用规则:你可以通过一个线程以可变的方式借用,也可以通过"
-"任意数量的线程以不可变的方式借用。"
+"此时须遵守常规 Rust 借用规则:你可以通过一个线程以可变的方式借用,也可以通过任意数量的线"
+"程以不可变的方式借用。"
#: src/concurrency/channels.md
msgid ""
-"Rust channels have two parts: a `Sender` and a `Receiver`. The two "
-"parts are connected via the channel, but you only see the end-points."
+"Rust channels have two parts: a `Sender` and a `Receiver`. The two parts are "
+"connected via the channel, but you only see the end-points."
msgstr ""
-"Rust 通道(Channel)包含两个部分:`Sender` 和 `Receiver`。这两个部分 通"
-"过通道进行连接,但你只能看到端点。"
+"Rust 通道(Channel)包含两个部分:`Sender` 和 `Receiver`。这两个部分 通过通道进行连"
+"接,但你只能看到端点。"
#: src/concurrency/channels.md
msgid "\"Received: {:?}\""
@@ -20207,20 +19217,19 @@ msgstr "\"Received: {:?}\""
#: src/concurrency/channels.md
msgid ""
-"`mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` "
-"implement `Clone` (so you can make multiple producers) but `Receiver` does "
-"not."
+"`mpsc` stands for Multi-Producer, Single-Consumer. `Sender` and `SyncSender` implement "
+"`Clone` (so you can make multiple producers) but `Receiver` does not."
msgstr ""
-"`mpsc` 代表多个生产方,单个使用方。`Sender` 和 `SyncSender` 会实现 `Clone`"
-"(因此, 你可以设置多个生产方),但 `Receiver` 不会实现。"
+"`mpsc` 代表多个生产方,单个使用方。`Sender` 和 `SyncSender` 会实现 `Clone`(因此, 你可以"
+"设置多个生产方),但 `Receiver` 不会实现。"
#: src/concurrency/channels.md
msgid ""
-"`send()` and `recv()` return `Result`. If they return `Err`, it means the "
-"counterpart `Sender` or `Receiver` is dropped and the channel is closed."
+"`send()` and `recv()` return `Result`. If they return `Err`, it means the counterpart "
+"`Sender` or `Receiver` is dropped and the channel is closed."
msgstr ""
-"`send()` 和 `recv()` 会返回 `Result`。如果它们返回 `Err`,则表示对应的 "
-"`Sender` 或 `Receiver` 已被丢弃,且通道已关闭。"
+"`send()` 和 `recv()` 会返回 `Result`。如果它们返回 `Err`,则表示对应的 `Sender` 或 "
+"`Receiver` 已被丢弃,且通道已关闭。"
#: src/concurrency/channels/unbounded.md
msgid "You get an unbounded and asynchronous channel with `mpsc::channel()`:"
@@ -20244,73 +19253,70 @@ msgstr "\"Main: got {msg}\""
#: src/concurrency/channels/bounded.md
#, fuzzy
-msgid ""
-"With bounded (synchronous) channels, `send` can block the current thread:"
+msgid "With bounded (synchronous) channels, `send` can block the current thread:"
msgstr "有边界的同步通道会使 `send` 阻塞当前线程:"
#: src/concurrency/channels/bounded.md
msgid ""
-"Calling `send` will block the current thread until there is space in the "
-"channel for the new message. The thread can be blocked indefinitely if there "
-"is nobody who reads from the channel."
+"Calling `send` will block the current thread until there is space in the channel for the "
+"new message. The thread can be blocked indefinitely if there is nobody who reads from "
+"the channel."
msgstr ""
-"调用 `send` 将阻塞当前线程,直到通道中有足够的空间放置新消息。如果无人从通道"
-"读取数据,线程会被无限期地阻塞。"
+"调用 `send` 将阻塞当前线程,直到通道中有足够的空间放置新消息。如果无人从通道读取数据,线"
+"程会被无限期地阻塞。"
#: src/concurrency/channels/bounded.md
msgid ""
-"A call to `send` will abort with an error (that is why it returns `Result`) "
-"if the channel is closed. A channel is closed when the receiver is dropped."
+"A call to `send` will abort with an error (that is why it returns `Result`) if the "
+"channel is closed. A channel is closed when the receiver is dropped."
msgstr ""
-"如果通道关闭,调用 `send` 将中止并返回错误(这就是它会返回 `Result` 的原"
-"因)。当接收器被丢弃时,通道将关闭。"
+"如果通道关闭,调用 `send` 将中止并返回错误(这就是它会返回 `Result` 的原因)。当接收器被"
+"丢弃时,通道将关闭。"
#: src/concurrency/channels/bounded.md
msgid ""
-"A bounded channel with a size of zero is called a \"rendezvous channel\". "
-"Every send will block the current thread until another thread calls `read`."
+"A bounded channel with a size of zero is called a \"rendezvous channel\". Every send "
+"will block the current thread until another thread calls `read`."
msgstr ""
-"大小为零的有界通道称为 “集合通道”。每次调用 send 都会阻塞当前线程,直到另一个"
-"线程调用 `read`。"
+"大小为零的有界通道称为 “集合通道”。每次调用 send 都会阻塞当前线程,直到另一个线程调用 "
+"`read`。"
#: src/concurrency/send-sync.md
#, fuzzy
msgid ""
-"How does Rust know to forbid shared access across threads? The answer is in "
-"two traits:"
+"How does Rust know to forbid shared access across threads? The answer is in two traits:"
msgstr "Rust 如何知道要禁止跨线程共享访问?答案在于 Rust 的两个特征:"
#: src/concurrency/send-sync.md
msgid ""
-"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` "
-"is `Send` if it is safe to move a `T` across a thread boundary."
+"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` is `Send` if "
+"it is safe to move a `T` across a thread boundary."
msgstr ""
-"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html):如果跨线程边"
-"界移动 `T` 是安全的,则类型 `T` 为 `Send`。"
+"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html):如果跨线程边界移动 `T` 是"
+"安全的,则类型 `T` 为 `Send`。"
#: src/concurrency/send-sync.md
msgid ""
-"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): a type `T` "
-"is `Sync` if it is safe to move a `&T` across a thread boundary."
+"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): a type `T` is `Sync` if "
+"it is safe to move a `&T` across a thread boundary."
msgstr ""
-"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html):如果跨线程边"
-"界移动 `&T` 是安全的,则类型 `T` 为 `Sync`。"
+"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html):如果跨线程边界移动 `&T` "
+"是安全的,则类型 `T` 为 `Sync`。"
#: src/concurrency/send-sync.md
msgid ""
-"`Send` and `Sync` are [unsafe traits](../unsafe/unsafe-traits.md). The "
-"compiler will automatically derive them for your types as long as they only "
-"contain `Send` and `Sync` types. You can also implement them manually when "
-"you know it is valid."
+"`Send` and `Sync` are [unsafe traits](../unsafe/unsafe-traits.md). The compiler will "
+"automatically derive them for your types as long as they only contain `Send` and `Sync` "
+"types. You can also implement them manually when you know it is valid."
msgstr ""
-"`Send` 和 `Sync` 均为[不安全特征](../unsafe/unsafe-traits.md)。只要类型仅包"
-"含 `Send` 和 `Sync` 类型,编译器就会自动为类型派生 这两种特征。你也可以手动实"
-"现它们(如果你确定这样 有效的话)。"
+"`Send` 和 `Sync` 均为[不安全特征](../unsafe/unsafe-traits.md)。只要类型仅包含 `Send` 和 "
+"`Sync` 类型,编译器就会自动为类型派生 这两种特征。你也可以手动实现它们(如果你确定这样 有"
+"效的话)。"
#: src/concurrency/send-sync.md
msgid ""
-"One can think of these traits as markers that the type has certain thread-"
-"safety properties."
+"One can think of these traits as markers that the type has certain thread-safety "
+"properties."
msgstr "不妨将这些特征视为类型包含某些线程安全属性的标记。"
#: src/concurrency/send-sync.md
@@ -20319,34 +19325,34 @@ msgstr "它们可以在泛型约束中作为常规特征使用。"
#: src/concurrency/send-sync/send.md
msgid ""
-"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) "
-"if it is safe to move a `T` value to another thread."
+"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) if it is "
+"safe to move a `T` value to another thread."
msgstr ""
-"如果将 `T` 值移动到另一个线程是安全的,则类型 `T` 为 [`Send`](https://doc."
-"rust-lang.org/std/marker/trait.Send.html)。"
+"如果将 `T` 值移动到另一个线程是安全的,则类型 `T` 为 [`Send`](https://doc.rust-lang.org/"
+"std/marker/trait.Send.html)。"
#: src/concurrency/send-sync/send.md
msgid ""
-"The effect of moving ownership to another thread is that _destructors_ will "
-"run in that thread. So the question is when you can allocate a value in one "
-"thread and deallocate it in another."
+"The effect of moving ownership to another thread is that _destructors_ will run in that "
+"thread. So the question is when you can allocate a value in one thread and deallocate it "
+"in another."
msgstr ""
-"将所有权转移到另一个线程的影响是,“析构函数”将在相应线程中 运行。因此,问题在"
-"于你何时可以在一个线程中分配某个值,然后在 另一个线程中取消分配该值。"
+"将所有权转移到另一个线程的影响是,“析构函数”将在相应线程中 运行。因此,问题在于你何时可以"
+"在一个线程中分配某个值,然后在 另一个线程中取消分配该值。"
#: src/concurrency/send-sync/send.md
msgid ""
-"As an example, a connection to the SQLite library must only be accessed from "
-"a single thread."
+"As an example, a connection to the SQLite library must only be accessed from a single "
+"thread."
msgstr "例如,与 SQLite 库的连接只能通过 单个线程访问。"
#: src/concurrency/send-sync/sync.md
msgid ""
-"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) "
-"if it is safe to access a `T` value from multiple threads at the same time."
+"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) if it is "
+"safe to access a `T` value from multiple threads at the same time."
msgstr ""
-"如果同时从多个线程访问 `T` 值是安全的,则类型 `T` 为 [`Sync`](https://doc."
-"rust-lang.org/std/marker/trait.Sync.html)。"
+"如果同时从多个线程访问 `T` 值是安全的,则类型 `T` 为 [`Sync`](https://doc.rust-lang.org/"
+"std/marker/trait.Sync.html)。"
#: src/concurrency/send-sync/sync.md
msgid "More precisely, the definition is:"
@@ -20358,24 +19364,22 @@ msgstr "当且仅当 `&T` 为 `Send` 时,`T` 为 `Sync`"
#: src/concurrency/send-sync/sync.md
msgid ""
-"This statement is essentially a shorthand way of saying that if a type is "
-"thread-safe for shared use, it is also thread-safe to pass references of it "
-"across threads."
+"This statement is essentially a shorthand way of saying that if a type is thread-safe "
+"for shared use, it is also thread-safe to pass references of it across threads."
msgstr ""
-"该语句实质上是一种简写形式,表示如果某个类型对于共享使用是线程安全的,那么跨"
-"线程传递对该类型的引用也是线程安全的。"
+"该语句实质上是一种简写形式,表示如果某个类型对于共享使用是线程安全的,那么跨线程传递对该"
+"类型的引用也是线程安全的。"
#: src/concurrency/send-sync/sync.md
msgid ""
-"This is because if a type is Sync it means that it can be shared across "
-"multiple threads without the risk of data races or other synchronization "
-"issues, so it is safe to move it to another thread. A reference to the type "
-"is also safe to move to another thread, because the data it references can "
-"be accessed from any thread safely."
+"This is because if a type is Sync it means that it can be shared across multiple threads "
+"without the risk of data races or other synchronization issues, so it is safe to move it "
+"to another thread. A reference to the type is also safe to move to another thread, "
+"because the data it references can be accessed from any thread safely."
msgstr ""
-"这是因为如果某个类型为 Sync,则意味着它可以在多个线程之间共享,而不存在数据争"
-"用或其他同步问题的风险,因此将其移动到另一个线程是安全的。对该类型的引用同样"
-"可以安全地移动到另一个线程,因为它引用的数据可以从任何线程安全地访问。"
+"这是因为如果某个类型为 Sync,则意味着它可以在多个线程之间共享,而不存在数据争用或其他同步"
+"问题的风险,因此将其移动到另一个线程是安全的。对该类型的引用同样可以安全地移动到另一个线"
+"程,因为它引用的数据可以从任何线程安全地访问。"
#: src/concurrency/send-sync/examples.md
msgid "`Send + Sync`"
@@ -20411,8 +19415,7 @@ msgstr "`AtomicBool`、`AtomicU8`…:使用特殊的原子指令。"
#: src/concurrency/send-sync/examples.md
msgid ""
-"The generic types are typically `Send + Sync` when the type parameters are "
-"`Send + Sync`."
+"The generic types are typically `Send + Sync` when the type parameters are `Send + Sync`."
msgstr "当类型参数为 `Send + Sync` 时,泛型类型通常 为 `Send + Sync`。"
#: src/concurrency/send-sync/examples.md
@@ -20421,11 +19424,9 @@ msgstr "`Send + !Sync`"
#: src/concurrency/send-sync/examples.md
msgid ""
-"These types can be moved to other threads, but they're not thread-safe. "
-"Typically because of interior mutability:"
-msgstr ""
-"这些类型可以移动到其他线程,但它们不是线程安全的。 这通常是由内部可变性造成"
-"的:"
+"These types can be moved to other threads, but they're not thread-safe. Typically "
+"because of interior mutability:"
+msgstr "这些类型可以移动到其他线程,但它们不是线程安全的。 这通常是由内部可变性造成的:"
#: src/concurrency/send-sync/examples.md
msgid "`mpsc::Sender`"
@@ -20448,18 +19449,15 @@ msgid "`!Send + Sync`"
msgstr "`!Send + Sync`"
#: src/concurrency/send-sync/examples.md
-msgid ""
-"These types are thread-safe, but they cannot be moved to another thread:"
+msgid "These types are thread-safe, but they cannot be moved to another thread:"
msgstr "这些类型是线程安全的,但它们不能移动到另一个线程:"
#: src/concurrency/send-sync/examples.md
#, fuzzy
msgid ""
-"`MutexGuard`: Uses OS level primitives which must be deallocated on "
-"the thread which created them."
-msgstr ""
-"`MutexGuard`:使用操作系统级别的原语(必须在创建这些原语的线程上 取消分"
-"配)。"
+"`MutexGuard`: Uses OS level primitives which must be deallocated on the thread "
+"which created them."
+msgstr "`MutexGuard`:使用操作系统级别的原语(必须在创建这些原语的线程上 取消分配)。"
#: src/concurrency/send-sync/examples.md
msgid "`!Send + !Sync`"
@@ -20471,48 +19469,46 @@ msgstr "这些类型不是线程安全的,不能移动到其他线程:"
#: src/concurrency/send-sync/examples.md
msgid ""
-"`Rc`: each `Rc` has a reference to an `RcBox`, which contains a non-"
-"atomic reference count."
-msgstr ""
-"`Rc`:每个 `Rc` 都具有对 `RcBox` 的引用,其中包含 非原子引用计数。"
+"`Rc`: each `Rc` has a reference to an `RcBox