0Pricing
Swift Academy · บทเรียน

แค็ตตาล็อกสตริงและสตริงแปลภาษา

แปลข้อความด้วย String Catalog สมัยใหม่

แค็ตตาล็อกสตริงและสตริงแปลภาษา เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องทำให้เป็นภาษาท้องถิ่น

การแปลเป็นภาษาท้องถิ่น (l10n) หมายถึงการนำเสนอข้อความของแอปในภาษาของผู้ใช้ ส่วนการทำให้รองรับนานาชาติ (i18n) หมายถึงการจัดโครงสร้างโค้ดให้สามารถแปลเป็นภาษาท้องถิ่นได้ ขั้นตอนแรกคือหยุดการเขียนสตริงที่ผู้ใช้เห็นแบบฝังตายตัว และดึงสตริงเหล่านั้นจากแค็ตตาล็อกทรัพยากรแทน

// Hardcoded — bad for localization
// let title = "Welcome"

// Localized — looked up by key
let title = String(localized: "Welcome")

แค็ตตาล็อกสตริง

โปรเจกต์ Xcode สมัยใหม่ใช้แค็ตตาล็อกสตริง (ไฟล์ .xcstrings) ซึ่งเป็นไฟล์เดียวที่มี JSON เป็นพื้นฐานและแสดงรายการ key ที่แปลได้ทั้งหมด คำแปลของแต่ละภาษา และข้อมูลเมตา เช่น ความคิดเห็นกับรูปแบบพหูพจน์ Xcode สามารถแยก key จากโค้ดของคุณโดยอัตโนมัติ

// Localizable.xcstrings holds entries like:
// key: "Welcome"
//   en: "Welcome"
//   tr: "Hos geldiniz"
//   ja: "Yokoso"

String(localized:)

ในโค้ด String(localized:) จะค้นหา key ขณะทำงานเพื่อเลือกคำแปลตามภาษาปัจจุบัน ลิเทอรัลที่คุณส่งเข้าไปจะทำหน้าที่เป็นทั้ง key และ fallback ในภาษาสำหรับการพัฒนา

let greeting = String(localized: "Welcome back")
let cancel = String(localized: "Cancel")
print(greeting)

การเพิ่มความคิดเห็นสำหรับผู้แปล

คำสั้น ๆ อย่าง “เรียกใช้” อาจหมายถึงการสั่งให้ทำงานหรือการวิ่ง พารามิเตอร์ comment: จะให้บริบทแก่ผู้แปล เพื่อให้เลือกถ้อยคำที่ถูกต้อง ความคิดเห็นจะถูกส่งเข้าแค็ตตาล็อกสตริงโดยอัตโนมัติ

let runLabel = String(
    localized: "Run",
    comment: "Button that executes the user's code")

การแทรกค่า

คุณสามารถฝังค่าในขณะทำงานลงในสตริงที่แปลแล้วได้ Swift จะเปลี่ยนการแทรกแต่ละรายการให้เป็นตัวยึดตำแหน่งรูปแบบ เพื่อให้ผู้แปลสลับลำดับได้ ภาษาแต่ละภาษาวางประธานและจำนวนไว้ในตำแหน่งที่แตกต่างกัน

let name = "Mira"
let count = 3
let msg = String(localized: "\(name) has \(count) new messages")
print(msg)

LocalizedStringKey ใน SwiftUI

ใน SwiftUI คุณแทบไม่ต้องเรียก String(localized:) โดยตรง วิวส่วนใหญ่ที่รับข้อความจะรับ LocalizedStringKey ดังนั้นลิเทอรัลสตริงธรรมดาจึงได้รับการแปลโดยอัตโนมัติ

// In SwiftUI — the literal is a LocalizedStringKey
// Text("Welcome back")        // auto-localized
// Button("Save") { save() }   // auto-localized
let key: LocalizedStringKey = "Welcome back"
_ = key

การป้องกันการแปลโดยไม่ตั้งใจ

เนื่องจาก SwiftUI ถือว่าลิเทอรัลเป็น key ตัวแปร String แบบไดนามิกจึงไม่ได้รับการแปล หากคุณสร้างข้อความด้วยการต่อสตริง แค็ตตาล็อกจะไม่เห็น key จริง ให้ส่งลิเทอรัลเดียวเมื่อใดก็ตามที่ต้องการการแปล และใช้ verbatim: เมื่อคุณไม่ต้องการให้แปลอย่างชัดเจน

let userInput = "hello"
// Text(userInput)            // NOT a localization key
// Text(verbatim: userInput)  // explicitly raw, never localized
let verbatimKey = userInput
_ = verbatimKey

การระบุตาราง

แอปขนาดใหญ่มักแบ่งสตริงออกเป็นแค็ตตาล็อกหลายชุด (ตาราง) คุณสามารถระบุตารางและชุดทรัพยากรที่ต้องการได้ ซึ่งจำเป็นอย่างยิ่งเมื่อต้องจัดส่งสตริงภายในเฟรมเวิร์กหรือแพ็กเกจ Swift

let onboardingTitle = String(
    localized: "Get Started",
    table: "Onboarding",
    bundle: .main)

LocalizedStringResource

LocalizedStringResource แสดงสตริงที่แปลได้เป็นค่าซึ่งคุณจัดเก็บและค้นหาในภายหลังได้ แม้จะข้ามกระบวนการก็ตาม ซึ่งมีประโยชน์สำหรับ App Intents และวิดเจ็ต โดยจะเลื่อนการค้นหาจริงออกไปจนถึงเวลาที่แสดงผล

let resource = LocalizedStringResource("Order shipped")
// Resolve later, possibly in another locale context
let resolved = String(localized: resource)
print(resolved)

ภาษาเริ่มต้นสำหรับการแปล

ภาษาสำหรับการพัฒนาของโปรเจกต์จะเป็น fallback เมื่อไม่มีคำแปล ลิเทอรัลสตริงที่คุณเขียนในโค้ดจะถือเป็นค่าของภาษาต้นฉบับ โค้ดจึงยังอ่านเข้าใจได้ และคุณจะไม่ส่ง key ดิบอย่าง welcome_screen_title ให้ผู้ใช้

// If only 'en' is translated and device is set to 'fr',
// the development-language value is shown as fallback.
let fallback = String(localized: "Settings")
print(fallback)

การค้นหาที่ใช้งานจริง

เมื่อนำทุกอย่างมารวมกัน: ฟังก์ชันที่ส่งคืนข้อความซึ่งแปลครบถ้วน ระบุบริบท และแทรกค่าไว้แล้ว พร้อมใช้กับ UI ใด ๆ

func welcomeMessage(for user: String) -> String {
    return String(
        localized: "Welcome, \(user)!",
        comment: "Greeting shown after sign-in")
}
print(welcomeMessage(for: "Ada"))

ตรวจสอบความเข้าใจ

ลองทบทวนว่า SwiftUI ตัดสินใจอย่างไรว่าจะแปลข้อความหรือไม่

สรุป

คุณได้วางรากฐานของข้อความที่แปลได้:

  • จัดเก็บคำแปลในแค็ตตาล็อกสตริง (.xcstrings)
  • ค้นหาสตริงด้วย String(localized:) และเพิ่ม comment: สำหรับผู้แปล
  • ใน SwiftUI ลิเทอรัลจะกลายเป็น LocalizedStringKey และได้รับการแปลโดยอัตโนมัติ แต่ตัวแปรจะไม่เป็นเช่นนั้น
  • ใช้ table:/bundle: สำหรับเฟรมเวิร์ก และใช้ LocalizedStringResource สำหรับการค้นหาที่เลื่อนออกไป

คำถามที่พบบ่อย

บทเรียน “แค็ตตาล็อกสตริงและสตริงแปลภาษา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แค็ตตาล็อกสตริงและสตริงแปลภาษา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แค็ตตาล็อกสตริงและสตริงแปลภาษา”

แปลข้อความด้วย String Catalog สมัยใหม่ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “แค็ตตาล็อกสตริงและสตริงแปลภาษา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แค็ตตาล็อกสตริงและสตริงแปลภาษา
  2. การผันรูปพหูพจน์และ Stringsdict
  3. การจัดรูปแบบตามโลแคล
  4. การเขียนจากขวาไปซ้ายและทิศทางการจัดวาง
← กลับไปที่ Swift Academy