การผันรูปพหูพจน์และ Stringsdict
จัดการกฎพหูพจน์ในภาษาต่าง ๆ
การผันรูปพหูพจน์และ Stringsdict เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาพหูพจน์
ภาษาอังกฤษมีสองรูปแบบ — 1 item, 2 items — ดังนั้นนักพัฒนามักเขียน "\(n) item" + (n == 1 ? "" : "s") วิธีนี้ใช้ไม่ได้อย่างมาก เพราะภาษาอาหรับมีหมวดพหูพจน์หกหมวด ภาษารัสเซียมีสามหมวด และภาษาญี่ปุ่นมีหนึ่งหมวด การเขียนตรรกะพหูพจน์แบบฝังตายตัวคือจุดบกพร่องด้านการแปลที่รอวันเกิดขึ้น
// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)หมวดพหูพจน์
Unicode กำหนดหมวดพหูพจน์ไว้ดังนี้: ศูนย์, หนึ่ง, สอง, น้อย, มาก, อื่น ๆ แต่ละภาษาจะใช้เพียงบางหมวด ระบบจะเลือกหมวดที่ถูกต้องสำหรับตัวเลขตามกฎของภาษาและการตั้งค่าภูมิภาค คุณไม่ต้องเขียนกฎเหล่านี้เอง
// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.รูปแบบพหูพจน์ในแค็ตตาล็อกสตริง
ในแค็ตตาล็อกสตริง คุณระบุให้สตริงมีรูปแบบพหูพจน์ได้ จากนั้น Xcode จะให้คุณจัดเตรียมข้อความสำหรับแต่ละหมวด ขณะทำงาน ระบบจะเลือกรูปแบบที่ถูกต้องโดยอัตโนมัติตามจำนวนที่แทรกและการตั้งค่าภูมิภาคของผู้ใช้
// Catalog entry, key "message_count":
// one: "You have %lld message"
// other: "You have %lld messages"
let count = 1
let text = String(localized: "You have \(count) messages")
print(text)ไฟล์ .stringsdict แบบดั้งเดิม
ก่อนมีแค็ตตาล็อกสตริง ข้อมูลพหูพจน์จะอยู่ในไฟล์ .stringsdict ซึ่งเป็นรายการคุณสมบัติที่จับคู่ key กับสตริงรูปแบบและรูปแบบย่อยของแต่ละหมวด คุณยังคงพบไฟล์เหล่านี้ในโปรเจกต์เก่า และไฟล์เหล่านี้ยังได้รับการรองรับอย่างเต็มรูปแบบ
// Localizable.stringsdict (plist) structure:
// key: "items_count"
// NSStringLocalizedFormatKey: "%#@items@"
// items: NSStringPluralRuleType
// one: "%lld item"
// other: "%lld items"ส่วนประกอบของรายการ stringsdict
แต่ละรายการมี key ของรูปแบบ ที่อ้างอิงตัวแปรที่มีชื่ออย่างน้อยหนึ่งตัว ซึ่งห่อหุ้มอยู่ใน %#@name@ ตัวแปรแต่ละตัวจะประกาศชนิดกฎ (NSStringPluralRuleType) ตัวระบุชนิดค่า (%lld) และสตริงหนึ่งรายการสำหรับแต่ละหมวดพหูพจน์
// The %#@items@ token expands to the chosen
// plural variant. %lld is the integer placeholder
// substituted inside each variant string.
let n = 3
print(String(localized: "\(n) items selected"))การค้นหาสตริงรูปพหูพจน์
จากโค้ด จุดเรียกใช้งานจะเหมือนกับสตริงที่แปลเป็นภาษาท้องถิ่นทุกประการ เพียงแทรกค่าจำนวนเท่านั้น การเลือกรูปพหูพจน์เกิดขึ้นภายในเฟรมเวิร์ก ดังนั้นโค้ด Swift บรรทัดเดียวกันจึงทำงานได้ในทุกภาษา
func messagesLabel(_ count: Int) -> String {
return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))เหตุใด “หนึ่ง” จึงไม่ได้หมายถึงแค่ 1
ข้อผิดพลาดที่พบบ่อยคือการคิดว่าหมวดหมู่ หนึ่ง หมายถึงตัวเลข 1 เท่านั้น ในบางภาษาหมวดหมู่นี้ครอบคลุมตัวเลขที่ลงท้ายด้วย 1 (เช่น 21, 31) และ ศูนย์ อาจเป็นหมวดหมู่แยกต่างหากหรือไม่ก็ได้ ควรจัดเตรียมข้อความสำหรับแต่ละหมวดหมู่เสมอ แล้วปล่อยให้กฎเป็นผู้ตัดสิน
// Russian: 1, 21, 31 -> 'one'
// 2, 3, 4 -> 'few'
// 5..20, 0 -> 'many'
// Never assume one == 1.การรวมรูปพหูพจน์เข้ากับค่าอื่น
รูปแบบหนึ่งอาจมีตัวแปรหลายตัว เช่น จำนวนและชื่อ แต่ละตัวสามารถเปลี่ยนเป็นรูปพหูพจน์ได้อย่างอิสระ ในแค็ตตาล็อกสตริง คุณระบุว่าการแทรกค่าตัวใดเปลี่ยนแปลง ส่วนที่เหลือจะคงที่ในทุกรูปแบบย่อย
let files = 2
let folder = "Photos"
let text = String(
localized: "\(files) files in \(folder)")
// 'files' drives the plural; 'folder' is substituted as-is
print(text)รูปแบบตามความกว้างและอุปกรณ์
กลไกแค็ตตาล็อกเดียวกันรองรับรูปแบบย่อยตาม อุปกรณ์ และ ความกว้าง ทำให้คุณแสดงป้ายกำกับสั้นบน Apple Watch และป้ายกำกับที่ยาวกว่าบน iPad หรือใช้คำย่อเมื่อมีพื้นที่จำกัดได้ รูปแบบเหล่านี้ทำงานร่วมกับรูปแบบย่อยตามจำนวนพหูพจน์
// Catalog can vary by:
// plural: one / other
// device: iPhone / iPad / watch
// width: short / medium / long
let label = String(localized: "Notifications")
print(label)การทดสอบการผันพหูพจน์
หากต้องการตรวจสอบรูปแบบย่อย ให้เรียกใช้แอปในแต่ละภาษาเป้าหมายโดยใช้การแทนที่ภาษาของโครงร่างใน Xcode หรือใช้ภาษาจำลองและการแสดงตัวอย่างตามแต่ละ locale ตรวจสอบตัวเลขตรงขอบเขตบางส่วน ได้แก่ 0, 1, 2, 5, 11, 21 และ 100
let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
print(String(localized: "\(n) items"))
}แนวทางปฏิบัติที่ดี
เพื่อให้การผันพหูพจน์ถูกต้อง:
- อย่านำข้อความมาต่อกันหรือกำหนดส่วนเติมท้าย
sแบบตายตัว - จัดเตรียมทุกหมวดหมู่ที่ภาษาเป้าหมายต้องใช้
- คำนวณรูปพหูพจน์จากจำนวนเต็มที่แทรกค่า ไม่ใช่จากสตริงที่คำนวณไว้ล่วงหน้า
- ควรใช้แค็ตตาล็อกสตริงสำหรับโค้ดใหม่ และเก็บ
.stringsdictไว้เฉพาะเป้าหมายรุ่นเก่า
func cartSummary(_ items: Int) -> String {
String(localized: "Your cart has \(items) items",
comment: "Cart count; pluralized")
}
print(cartSummary(1))ตรวจสอบอย่างรวดเร็ว
ทบทวนว่าควรจัดการการเลือกรูปพหูพจน์อย่างไร
สรุป
คุณได้เรียนรู้การผันพหูพจน์ให้ถูกต้องตาม locale:
- หมวดหมู่พหูพจน์ของยูนิโค้ด ได้แก่ ศูนย์ หนึ่ง สอง น้อย หลาย อื่น ๆ โดยแต่ละภาษาใช้เพียงบางหมวดหมู่
- แค็ตตาล็อกสตริงช่วยให้คุณเพิ่มรูปแบบย่อยตามพหูพจน์ให้แต่ละคีย์ได้ ส่วน
.stringsdictรุ่นเก่าก็ทำเช่นเดียวกันผ่าน plist - จุดเรียกใช้งานยังคงเรียบง่าย เพียงแทรกค่าจำนวน แล้วเฟรมเวิร์กจะเลือกรูปแบบย่อยให้
- อย่ากำหนดตรรกะพหูพจน์แบบตายตัว หมวดหมู่ หนึ่ง ไม่ได้หมายถึงตัวเลข 1 เท่านั้น
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “การผันรูปพหูพจน์และ Stringsdict” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การผันรูปพหูพจน์และ Stringsdict” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การผันรูปพหูพจน์และ Stringsdict”
จัดการกฎพหูพจน์ในภาษาต่าง ๆ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การผันรูปพหูพจน์และ Stringsdict” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แค็ตตาล็อกสตริงและสตริงแปลภาษา
- การผันรูปพหูพจน์และ Stringsdict
- การจัดรูปแบบตามโลแคล
- การเขียนจากขวาไปซ้ายและทิศทางการจัดวาง