/* Title of Guidebook */
"GuideBook..title" = "Bộ sưu tập hình ảnh";

/* The title of the Welcome Message for the GuideBook */
"GuideBook..WelcomeMessageImage Gallery..title" = "Bộ sưu tập hình ảnh";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..WelcomeMessageImage Gallery..Paragraph0" = "Phần hướng dẫn này sẽ chỉ ra cho bạn cách tạo ra một lưới hình ảnh, hoàn chỉnh với các khả năng chọn ảnh và sửa ảnh.";

/* Title of step named Image Gallery */
"GuideBook..Guide0..StepImage Gallery..title" = "Bộ sưu tập hình ảnh";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..Paragraph1" = "![](intro.png)";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..Paragraph2" = "Trong Bộ sưu tập hình ảnh, bạn sẽ tìm hiểu cách tạo ra một lưới hình ảnh, hoàn chỉnh với các khả năng chọn ảnh và sửa ảnh.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..Paragraph3" = "Ứng dụng Bộ sưu tập hình ảnh là một phần mở rộng của hai phương thức triển khai đơn giản hơn: [Sắp xếp với các lưới](x-com-apple-playgrounds://projects?contentId=com.apple.playgrounds.organizingwithgrids) và [Sửa lưới](x-com-apple-playgrounds://projects?contentId=com.apple.playgrounds.editinggrids). Phần hướng dẫn này tập trung vào việc giải quyết một số vấn đề phổ biến sau khi lưới của hạn hiển thị hình ảnh, thay vì hình dạng hoặc Ký hiệu SF.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..Paragraph4" = "Các hình ảnh lớn hơn có thể tải chậm, có thể gây ra sự trì hoãn đáng chú ý khi tải UI của ứng dụng. Để đảm bảo ứng dụng của bạn phản hồi trong quá trình tải, phần hướng dẫn này tập trung vào việc giải tỏa những trì hoãn bằng cách hiển thị các chỉ báo tiến trình đến khi từng hình ảnh tải xong.";

/* title of the guide button */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..GuideButtonStart Walkthrough..title" = "Bắt đầu hướng dẫn";

/* accessibility description for guide button */
"GuideBook..Guide0..StepImage Gallery..LearningCenterContent..GuideButtonStart Walkthrough..description" = "Mô tả AX cho nút";

/* Title for the section of tasks to complete */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..title" = "Lập mô hình lưới";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..title" = "Lập mô hình một mục";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Paragraph5" = "Khám phá cách lập mô hình một mục lưới bằng một [cấu trúc](glossary://structure).";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page0..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page0..Paragraph6" = "Khi bạn sử dụng `ForEach` để xây dựng một chế độ xem tập hợp, ví dụ như một danh sách hoặc lưới, SwiftUI muốn nhận dạng duy nhất từng chế độ xem để có thể tìm và cập nhật chúng. Để việc này trở nên dễ dàng hơn, bạn có thể tạo ra một mô hình [tuân thủ](glossary://conform) [Identifiable](doc://com.apple.documentation/documentation/swift/identifiable/), tạo ra một yêu cầu thuộc tính `id`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page1..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page1..Paragraph7" = "`Item` của bạn chứa một [thuộc tính](glossary://property) `id` mà SwiftUI sử dụng để nhận dạng duy nhất chế độ xem.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page2..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..Taskitem..Page2..Paragraph8" = "`Item` cũng có một thuộc tính `url` mà ứng dụng sử dụng để nhận dạng vị trí của hình ảnh tương ứng bằng một đường dẫn đến tệp. `AsyncImage` sử dụng URL này trong `GridItemView` để tải hình ảnh không đồng bộ.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..title" = "Mô hình dữ liệu: Thu thập URL hình ảnh";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Paragraph9" = "Tìm hiểu cách ứng dụng của bạn sử dụng mô hình dữ liệu để tải và lưu trữ tất cả dữ liệu ảnh.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page3..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page3..Paragraph10" = "`DataModel` là một [đối tượng có thể quan sát](glossary://observable%20object) thu thập các URL tệp từ các hình ảnh trong thư mục Tài liệu của bạn cũng như từ tài nguyên [gói](glossary://bundle) của ứng dụng. Đối tượng này sử dụng các URL để điền vào một dãy các thể hiện `Item` hiển thị dưới dạng nội dung của lưới.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page4..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page4..Paragraph11" = "`DataModel` đăng một dãy các giá trị `item`, mỗi giá trị trong đó tương quan với một hình ảnh trong lưới. Vì mã đánh dấu giá trị này là `@Published` nên bất kỳ lúc nào bạn thêm hoặc xóa một `Item` khỏi dãy này, SwiftUI cập nhật chế độ xem lưới (và bất kỳ chế độ xem nào khác sử dụng giá trị này) để phản ánh những thay đổi đó.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page5..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page5..Paragraph12" = "Khi bạn [khởi tạo](glossary://initialization) `DataModel`, mô hình đó tìm kiếm trong thư mục Tài liệu xem có bất kỳ hình ảnh nào mà bạn đã thêm không, thu thập các URL tương ứng của chúng và nối chúng vào dãy `items`. Ứng dụng của bạn lưu trữ dữ liệu cục bộ trong thư mục này, nên việc tìm kiếm ở đây cho phép bạn hiển thị bất kỳ hình ảnh nào mà bạn đã thêm trong khi sử dụng ứng dụng.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page6..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page6..Paragraph13" = "Tương tự, bạn sẽ tải tất cả URL hình ảnh từ thư mục tài nguyên trong [gói](glossary://bundle) chính của ứng dụng và thêm chúng vào `items`. Gói này chứa một thư mục các hình ảnh đi kèm với dự án, thay vì các hình ảnh mà chính bạn đã thêm.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page7..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page7..Paragraph14" = "`DataModel` cung cấp các phương thức để thêm và xóa các phần tử khỏi `items`. `addItem` thêm một phần tử mới tại chỉ mục đầu tiên của dãy để bạn có thể nhìn thấy khi các hình ảnh mới xuất hiện trong chế độ xem.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page8..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup0..TaskdataModel..Page8..Paragraph15" = "`removeItem` xóa một phần tử bằng cách tìm chỉ mục của phần tử đó và xóa khỏi dãy `items`. Phương thức cũng xóa tệp hình ảnh tương ứng của phần từ khỏi thư mục Tài liệu, nếu tệp tồn tại trong đó. Việc này đảm bảo rằng hình ảnh sẽ không tải lại từ ổ lưu trữ ứng dụng cục bộ trong lần tiếp theo bạn khởi chạy ứng dụng.";

/* Title for the section of tasks to complete */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..title" = "Tạo ra lưới";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..title" = "Chia sẻ dữ liệu ứng dụng";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Paragraph16" = "Tìm hiểu cách ứng dụng chuyển dữ liệu ảnh từ `DataModel` vào [phân cấp xem](glossary://view%20hierarchy).";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page9..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page9..Paragraph17" = "Bộ sưu tập hình ảnh tải một bộ sưu tập các hình ảnh khi bạn khởi chạy ứng dụng lần đầu tiên. Vì số lượng các hình ảnh rất lớn và bạn không muốn ứng dụng bị lag khi tải tất cả chúng cùng lúc nên bạn sẽ sử dụng các yêu cầu [không đồng bộ](glossary://asynchronous%20process) để đảm bảo ứng dụng phản hồi ngay cả khi quá trình truy xuất dữ liệu diễn ra chậm.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page10..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page10..Paragraph18" = "Để tạo ra `dataModel` dưới dạng một [đối tượng trạng thái](glossary://state%20object), hãy áp dụng [trình đóng gói thuộc tính](glossary://property%20wrapper) `@StateObject` và cung cấp một giá trị ban đầu tuân thủ giao thức `ObservableObject`. SwiftUI quản lý việc lưu trữ cho đối tượng trạng thái và cập nhật tất cả các [chế độ xem phụ](glossary://subview) sử dụng giá trị đó khi [giá trị đã đăng](glossary://published%20value) thay đổi.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page11..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskphotoGridApp..Page11..Paragraph19" = "Cấu trúc [NavigationStack](doc://com.apple.documentation/documentation/swiftui/navigationstack) chuyển vào [thể hiện](glossary://instance) `DataModel` bằng trình sửa đổi `.environmentObject`, làm cho [đối tượng có thể quan sát](glossary://observable%20object) khả dụng đối với tất cả các [chế độ xem phụ](glossary://subview) trong `NavigationStack`. Kết quả là, những chế độ xem đó có thể truy cập dữ liệu từ `dataModel` để thực hiện nhiều tác vụ, ví dụ như tải các chế độ xem hình ảnh không đồng bộ hoặc cập nhật chế độ xem lưới khi dữ liệu thay đổi.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..title" = "Tạo ra một mục lưới";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Paragraph20" = "Tìm hiểu cách tải hình ảnh [không đồng bộ](glossary://asynchronous%20process) từ một URL bằng [AsyncImage](doc://com.apple.documentation/documentation/swiftui/asyncimage).";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page12..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page12..Paragraph21" = "`GridItemView` biểu thị một mục đơn nhất của lưới, một chế độ xem hình ảnh hiển thị ảnh được định nghĩa bởi một thể hiện `Item`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page13..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page13..Paragraph22" = "Một `GridItemView` chứa một thuộc tính cho `item`, cung cấp URL để tải hình ảnh không đồng bộ.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page14..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page14..Paragraph23" = "Trong `body` của `GridItemView`, bạn sẽ tạo ra một chế độ xem hình ảnh của mình. Vì bạn sẽ có một UI chỉnh sửa có điều kiện được phủ lên trên hình ảnh nên bạn hãy đóng gói hình ảnh trong một [ZStack](doc://com.apple.documentation/documentation/swiftui/zstack).";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page15..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page15..Paragraph24" = "Bạn có thể khởi tạo một [AsyncImage](doc://com.apple.documentation/documentation/swiftui/asyncimage) bằng giá trị `item.url` để tải hình ảnh [không đồng bộ](glossary://asynchronous%20process). Vì bạn có nhiều hình ảnh để tải khi ứng dụng khởi chạy lần đầu tiên nên bạn có thể tải chúng không đồng bộ để cho phép ứng dụng tiếp tục chạy phần mã còn lại trong khi đợi các hình ảnh trả về. Việc này ngăn chặn bất kỳ tình trạng chậm trễ đáng chú ý nào trong UI của bạn.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page16..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page16..Paragraph25" = "`AsyncImage` chứa một [bao đóng](glossary://closure) `content` cung cấp một [thể hiện](glossary://instance) của `Image` trong SwiftUI. Bạn sẽ sử dụng thể hiện này để tạo ra chế độ xem hình ảnh. Bạn sẽ thêm các trình sửa đổi `.resizable` và `.aspectRatio(contentMode: .fill)` để định tỷ lệ hình ảnh nhằm phủ kín không gian khả dụng của chế độ xem.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page17..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridItemView..Page17..Paragraph26" = "`AsyncImage` sử dụng một trình giữ chỗ để hiển thị một số nội dung trong khi tải hình ảnh. Trình giữ chỗ sử dụng một [ProgressView](doc://com.apple.documentation/documentation/swiftui/progressview) của SwiftUI, hiển thị dưới dạng một hình tròn đang xoay.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..title" = "Tạo bộ sưu tập của bạn";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Paragraph27" = "Tìm hiểu cách kết hợp một chế độ xem lưới bằng một loạt các [chế độ xem tổ hợp](glossary://composed%20view) và tích hợp của SwiftUI.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page18..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page18..Paragraph28" = "`GridView` là nơi bạn sẽ tạo ra bộ sưu tập hình ảnh của mình. Nếu bạn cần xem lại các khái niệm cơ bản về việc tạo lưới, hãy xem [Sắp xếp với các lưới](x-com-apple-playgrounds://projects?contentId=com.apple.playgrounds.organizingwithgrids). Trong phần hướng dẫn này, bạn sẽ tìm hiểu cách triển khai lưới bằng một kiểu mô hình, `Item`, và một đối tượng có thể quan sát, `dataModel`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page19..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page19..Paragraph29" = "Để truy cập vào `dataModel` của ứng dụng, bạn định nghĩa một `@EnvironmentObject` thuộc kiểu `DataModel`, cung cấp cho bạn quyền truy cập vào [đối tượng môi trường](glossary://environment%20object) được chuyển vào chế độ xem cấp cao nhất của [phân cấp xem](glossary://view%20hierarchy) trong `ImageGalleryApp.swift`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page20..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page20..Paragraph30" = "Dữ liệu để điền vào lưới đến từ một dãy gồm các thể hiện `Item` (được tìm thấy trong `dataModel.items`), mỗi mục trong đó tham chiếu đến một URL hình ảnh đơn nhất.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page21..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page21..Paragraph31" = "Để tạo ra một lưới, hãy lồng một [LazyVGrid](doc://com.apple.documentation/documentation/swiftui/lazyvgrid) bên trong một [ScrollView](doc://com.apple.documentation/documentation/swiftui/scrollview) để cho phép nội dung của lưới cuộn theo chiều dọc, nếu cần.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page22..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page22..Paragraph32" = "Vòng lặp [ForEach](doc://com.apple.documentation/documentation/swiftui/foreach) của bạn lặp lại qua `dataModel.items` và tạo ra một `NavigationLink` chứa một `GridItemView` dựa trên từng giá trị `item` trong dãy. Vì mỗi thể hiện `item` đều là [Identifiable](doc://com.apple.documentation/documentation/swift/identifiable) nên bạn không cần có [tham số](glossary://parameter) `id` khi tạo ra các chế độ xem lưới. Thay vào đó, SwiftUI sử dụng thuộc tính `id` của mỗi `item` để nhận dạng duy nhất.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page23..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page23..Paragraph33" = "Khi người dùng chạm vào một hình ảnh trong lưới, bạn sẽ muốn hiển thị cho họ hình ảnh kích cỡ đầy đủ bằng cách sử dụng `DetailView`.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page23..Paragraph34" = "Để tạo ra một liên kết, hãy sử dụng [NavigationLink](doc://com.apple.documentation/documentation/swiftui/navigationlink), liên kết đến `DetailView` dưới dạng [chế độ xem đích](glossary://destination%20view) đồng thời sử dụng một `Rectangle` và `GridItemView` làm [nhãn](glossary://label).";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page24..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page24..Paragraph35" = "Đây là [nhãn](glossary://label) NavigationLink của bạn, xác định cách hiển thị các hình ảnh trong lưới của bạn.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page24..Paragraph36" = "Để tạo ra các hình ảnh dưới dạng các hình vuông có kích cỡ bằng nhau trong lưới, hãy tạo ra một chế độ xem `Rectangle` và đặt [chế độ xem bộ chứa](glossary://container) `NavigationLink` thành tỷ lệ khung hình có giá trị bằng `1`. Việc này kết xuất một hình chữ nhật có chiều cao và chiều rộng bằng nhau, tạo ra một hình vuông. Sau đó, bạn có thể phủ hình ảnh của mình lên hình vuông đó dưới dạng một `GridItemView`, định tỷ lệ để phủ kín không gian khả dụng.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page25..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page25..Paragraph37" = "`GridItemView` xử lý tất cả quá trình tải hình ảnh không đồng bộ cũng như chuyển tiếp giữa các trạng thái chỉnh sửa.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskgridView..Page25..Paragraph38" = "Để khởi tạo `GridItemView`, hãy chuyển vào `item` hiện tại từ vòng lặp `ForEach`.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..title" = "Thêm một hình ảnh vào bộ sưu tập";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Paragraph39" = "Khám phá cách thêm và sửa ảnh trong bộ sưu tập.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page26..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page26..Paragraph40" = "Trình sửa đổi `.toolbar` chứa hai mục thanh công cụ: một mục để sửa ảnh trong lưới và một mục để thêm một ảnh mới.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page27..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page27..Paragraph41" = "Để thêm một ảnh mới vào lưới, bạn sử dụng nút [PhotosPicker](doc://com.apple.documentation/documentation/photokit/photospicker) (+) để chọn một ảnh từ thư viện ảnh, cập nhật thuộc tính trạng thái `selectedPhoto`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page28..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page28..Paragraph42" = "Sử dụng trình sửa đổi `onChange` để gọi một [bao đóng](glossary://closure) khi giá trị của `selectedPhoto` thay đổi.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page28..Paragraph43" = "Trong bao đóng, bạn gọi mô hình dữ liệu – bên trong một [tác vụ](glossary://task) – để tạo một `Item` mới từ ảnh được chọn và thêm mục đó vào `DataModel.items`. Việc này khiến cho SwiftUI cập nhật chế độ xem lưới và thêm hình ảnh tương ứng.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page29..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page29..Paragraph44" = "Để sửa lưới ảnh, bạn sẽ sử dụng [giá trị trạng thái](glossary://state%20value) `isEditing`. Bạn sẽ thêm một nút Xóa (x) ở trên cùng của từng hình ảnh khi giá trị chuyển đổi thành `true`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page30..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page30..Paragraph45" = "Khi `isEditing` là `true`, bạn sẽ hiển thị một nút Xóa (x) ở trên cùng của các hình ảnh.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page31..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup1..TaskaddAnImage..Page31..Paragraph46" = "Khi một người chạm vào nút Xóa (x), mã xóa mục hiện tại khỏi `dataModel.items`. Vì `dataModel.items` là một [giá trị đã đăng](glossary://published%20value) nên sự thay đổi này khiến SwiftUI cập nhật giao diện của chế độ xem lưới và xóa mục.";

/* Title for the section of tasks to complete */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..title" = "Ưa thích các ảnh của bạn";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..title" = "Thêm một thuộc tính mới vào một mục";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Paragraph47" = "Thêm thuộc tính `isFavorite` vào `Item`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page32..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page32..Paragraph48" = "Nếu bạn muốn có khả năng ưa thích các hình ảnh đẹp nhất trong bộ sưu tập của mình thì sao? Bạn có nghĩ được cách thức thực hiện để có thể triển khai việc đó không?";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page32..Paragraph49" = "Nếu bạn cảm thấy chắc chắn, hãy tiếp tục và thử tự mình thêm chức năng này, sử dụng các hướng dẫn sau đây nếu bạn bị vướng mắc.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page33..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page33..Paragraph50" = "Trước tiên, bạn sẽ thêm một thuộc tính vào `Item` để ứng dụng có thể theo dõi các hình ảnh được ưa thích:";

/*  */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page33..CodeBlock0" = "var isFavorite = false\n";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page34..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page34..Paragraph51" = "Bây giờ, bạn có thể thay đổi giá trị của `isFavorite` trên bất kỳ [thể hiện](glossary://instance) `Item` nào của mình.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskisFavoriteItem..Page34..Paragraph52" = "Tiếp theo, bạn sẽ tạo ra một nút cho phép bạn thay đổi giá trị `isFavorite` từ `DetailView`.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..title" = "Chuyển đổi một mục đã ưa thích";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Paragraph53" = "Thêm khả năng chuyển đổi mục ưa thích từ `DetailView`.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page35..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page35..Paragraph54" = "Tiếp theo, bạn sẽ cần thêm một cách để đánh dấu một trong các hình ảnh của mình là mục ưa thích. Bạn có thể thực hiện việc này bằng cách thêm một `Button` vào `DetailView` sẽ gọi `item.isFavorite.toggle()` khi có người nào đó chạm vào nút.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page36..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page36..Paragraph55" = "Thêm `Button` bên dưới chế độ xem `AsyncImage`.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page36..Paragraph56" = "Phần này hiển thị một hình trái tim đầy đủ nếu một người nào đó ưa thích hình ảnh và đường viền hình trái tim nếu hình ảnh chưa được ưa thích.";

/*  */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page36..CodeBlock1" = "Button { \n    item.isFavorite.toggle()\n} label: { \n    Label(\"Mục ưa thích\", systemImage: item.isFavorite ? \"heart.fill\" : \"heart\")\n        .font(.system(size: 24))\n}\n";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page37..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page37..Paragraph57" = "Để làm cho nút trông thu hút hơn một chút, bạn có thể thêm các trình sửa đổi sau đây:";

/*  */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page37..CodeBlock2" = ".buttonStyle(.plain)\n.labelStyle(.iconOnly)\n.padding(EdgeInsets(top: 20, leading: 30, bottom: 20, trailing: 30))\n.background(Color.secondary.colorInvert())\n.cornerRadius(15)\n";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page38..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskdetailViewToggle..Page38..Paragraph58" = "Tuyệt! Bây giờ, bạn có một cách để đánh dấu hình ảnh là mục ưa thích. Tiếp theo, bạn sẽ hiển thị tất cả các hình ảnh đã ưa thích trong `GridView`.";

/* Title for task */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..title" = "Hiển thị mục ưa thích của bạn";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Paragraph59" = "Hiển thị một hình ảnh trái tim trên các hình ảnh được ưa thích.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page39..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page39..Paragraph60" = "Để hiển thị các mục ưa thích trong `GridView`, bạn sẽ phủ một hình ảnh trái tim lên trên các hình ảnh mục ưa thích.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page39..Paragraph61" = "Hãy tự mình thử thực hiện việc này, sử dụng các gợi ý sau đây nếu cần.";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page40..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page40..Paragraph62" = "Trong `GridView`, mỗi hình ảnh là một `NavigationLink` với một [đích](glossary://destination%20view) của `DetailView` và một [nhãn](glossary://label) của chế độ xem `Rectangle` được phủ bằng một `GridItemView`.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page40..Paragraph63" = "Bạn vẫn còn có thể phủ một chế độ xem khác lên trên chế độ xem `Rectangle` bằng cách thêm một trình sửa đổi `.overlay` khác bên dưới trình sửa đổi đầu tiên. Sử dụng `.bottomLeading` cho đối số `alignment` sẽ căn chỉnh các hình ảnh ở góc trước dưới cùng của `Rectangle`.";

/*  */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page40..CodeBlock3" = ".overlay(alignment: .bottomLeading) {\n    //#-learning-code-snippet(checkIsFavorite)\n}\n";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page41..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page41..Paragraph64" = "Bạn có thể sử dụng một số mã điều kiện để xem hình ảnh này có phải là mục ưa thích hay không.";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page41..Paragraph65" = "Nếu hình ảnh là một mục ưa thích, hãy hiển thị một hình ảnh trái tim trên góc trước dưới cùng của chế độ xem `Rectangle`.";

/*  */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page41..CodeBlock4" = "if item.isFavorite {\n   Image(systemName: \"heart.fill\")\n       .foregroundColor(.white)\n       .shadow(color: .black.opacity(0.3), radius: 5)\n       .font(.callout)\n       .offset(x: 4, y: -4)\n}\n";

/* title for page */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page42..title" = "";

/* Paragraph Content delivered to the user. The key should give context as to where this is being delivered to the user */
"GuideBook..Guide0..StepImage Gallery..TaskGroup2..TaskgridViewFavorites..Page42..Paragraph66" = "Bây giờ, hãy thử ưa thích một số hình ảnh và xem cách `GridView` thay đổi. Tiếp tục điều chỉnh cách triển khai của bạn đến khi trông chính xác như bạn muốn.";

