Localization — สาระสำคัญ การปรับเนื้อหาให้เข้ากับภาษาและภูมิภาค

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-26 เวลาอ่าน: 7 นาที

Localization (การแปลภาษา, l10n) — การปรับเนื้อหาของแอปพลิเคชันมือถือให้เข้ากับภาษา ภูมิภาค และลักษณะเฉพาะทางวัฒนธรรมของกลุ่มเป้าหมาย แตกต่างจากการเตรียมพร้อมสำหรับการแปล (i18n) ที่โค้ดถูกเตรียมไว้สำหรับการแปล การแปลภาษาคือกระบวนการแปลสตริง การจัดรูปแบบวันที่ ตัวเลขและสกุลเงิน การเลือกรูปภาพ และการคำนึงถึงบรรทัดฐานท้องถิ่น ใน iOS ไฟล์แปลจะถูกเก็บใน Localizable.strings (โฟลเดอร์ .lproj สำหรับแต่ละภาษา) ใน Android — ใน values-ru, values-de และไดเรกทอรีทรัพยากรอื่นๆ รายละเอียดเพิ่มเติม — ใน คู่มือการแปลภาษาของ Android

สิ่งสำคัญ

  • Localization (l10n) — การแปลและปรับเนื้อหาของแอปให้เข้ากับภาษาและภูมิภาคที่เฉพาะเจาะจง
  • Localizable.strings — ไฟล์ iOS ที่มีคู่ “คีย์” = “คำแปล” สำหรับแต่ละภาษา
  • values-ru — ไดเรกทอรี Android ที่มีทรัพยากรสำหรับภาษารัสเซีย (strings.xml)
  • การปรับเปลี่ยนตามภูมิภาค — วันที่ ตัวเลข รูปภาพ สี ข้อกำหนดทางกฎหมายแตกต่างกันไปตามประเทศ
  • ลักษณะเฉพาะทางวัฒนธรรม — สี ไอคอน ท่าทาง และตัวอย่างต้องสอดคล้องกับบรรทัดฐานท้องถิ่น

Localization (l10n) คืออะไรและแตกต่างจาก i18n อย่างไร?

Localization (ย่อว่า l10n — 10 ตัวอักษรระหว่าง “l” และ “n”) — คือกระบวนการปรับแอปพลิเคชันให้เข้ากับภาษาและภูมิภาคที่เฉพาะเจาะจง ถ้า i18n คือรากฐานทางสถาปัตยกรรม l10n คือการเติมเต็มเนื้อหา i18n ทำให้การแปลเป็นไปได้ l10n คือผู้ดำเนินการแปล การแปลภาษาประกอบด้วย: การแปลข้อความทั้งหมดของอินเทอร์เฟซ การปรับรูปแบบวันที่และตัวเลข การเปลี่ยนรูปภาพที่มีเนื้อหาที่อ่อนไหวทางวัฒนธรรม การแก้ไขข้อความทางกฎหมาย (นโยบายความเป็นส่วนตัว, EULA) การตั้งค่าระบบการชำระเงินให้เข้ากับภูมิภาค และการทดสอบบนอุปกรณ์เป้าหมาย

ความคุ้มค่าทางธุรกิจ — การแปลภาษาส่งผลโดยตรงต่ออัตราการแปลง ตามข้อมูลของ CSA Research (2023) 76% ของผู้ใช้ชอบซื้อสินค้าในแอปที่ใช้ภาษาของตนเอง และ 40% ไม่เคยซื้อสินค้าในภาษาต่างประเทศ การแปลภาษาเป็นภาษาญี่ปุ่นสำหรับแอปค้าปลีกช่วยเพิ่มอัตราการแปลงโดยเฉลี่ย 150% (Google, 2022) แอปที่ได้รับการแปลได้รับการติดตั้งแบบออร์แกนิกมากกว่า 2–3 เท่าใน App Store และ Google Play ระดับภูมิภาค เนื่องจากการทำ ASO ระดับภูมิภาค (คำค้นหาในภาษาเป้าหมาย)

i18n vs l10n — สองด้านของกระบวนการเดียวกัน i18n: การแยกสตริงออกเป็นทรัพยากร การรองรับ RTL การจัดรูปแบบตัวเลข ทำครั้งเดียวโดยนักพัฒนา l10n: การแปลสตริง การปรับเนื้อหา การทดสอบในพื้นที่ ทำซ้ำหลายครั้งโดยนักแปลและ QA สำหรับแต่ละภาษา ใน IT Sectr เราจัดสรรเวลา 20–30% ของ Sprint สำหรับการแปลภาษาในแต่ละภาษาใหม่ — ซึ่งรวมถึงการแปล การตรวจสอบ การทดสอบบนอุปกรณ์ และการแก้ไขข้อบกพร่อง

การแปลภาษาใน iOS: Localizable.strings และ Base Internationalization

Localizable.strings — ไฟล์หลักสำหรับเก็บคำแปลใน iOS แต่ละภาษามีโฟลเดอร์ .lproj ของตนเอง: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings รูปแบบ: “key” = “value”; (มีเครื่องหมายอัฒภาค) Apple ใช้ Base Internationalization: Storyboard และ XIB ถูกสร้างขึ้นครั้งเดียว (Base.lproj) และสตริงของอินเทอร์เฟซถูกส่งออกไปยัง Localizable.strings สำหรับแต่ละภาษา วิธีนี้ช่วยลดการสร้างสำเนา XIB สำหรับแต่ละภาษา

swift
// en.lproj/Localizable.strings
// "settings.title" = "การตั้งค่า";
// "profile.greeting" = "สวัสดี, %@!";
// "items.count" = "%d รายการ";

// ru.lproj/Localizable.strings
// "settings.title" = "การตั้งค่า";
// "profile.greeting" = "สวัสดี, %@!";
// "items.count" = "%d รายการ";

// การโหลดสตริงตามคีย์
navigationItem.title = NSLocalizedString(
    "settings.title",
    comment: "หัวเรื่องหน้าจอการตั้งค่า"
)

// สตริงพร้อมพารามิเตอร์
let name = "อันนา"
greetingLabel.text = String.localizedStringWithFormat(
    NSLocalizedString("profile.greeting", comment: ""), name
)

// การนำเข้า XLIFF (Xcode → Editor → Import Localizations)
// อัปเดตไฟล์ .lproj โดยอัตโนมัติหลังจากนักแปลทำงาน

Base Internationalization — แนวทางของ Apple ที่อินเทอร์เฟซ (Storyboard, XIB) ถูกสร้างขึ้นครั้งเดียวใน Base.lproj เมื่อเพิ่มภาษา Xcode จะส่งออกสตริงจาก Base ไปยังไฟล์ XLIFF นักแปลจะแปล XLIFF หลังจากการนำเข้า Xcode จะสร้าง .lproj พร้อมสตริงที่แปลแล้ว ข้อดี: ไม่ต้องทำสำเนา XIB สำหรับแต่ละภาษา ข้อจำกัด: สำหรับภาษา RTL (อาหรับ, ฮีบรู) อาจต้องใช้ XIB แยกต่างหากที่มีเลย์เอาต์แบบกลับด้าน

InfoPlist.strings และการแปลข้อมูลเมตา

InfoPlist.strings — ไฟล์สำหรับแปลชื่อแอปพลิเคชัน (CFBundleDisplayName) การอนุญาตกล้อง/ไมโครโฟน (NSCameraUsageDescription) และค่าอื่นๆ จาก Info.plist สร้างใน .lproj: ru.lproj/InfoPlist.strings รูปแบบ: CFBundleDisplayName = “แอปของฉัน”; NSCameraUsageDescription = “แอปต้องการเข้าถึงกล้องเพื่อถ่ายภาพ”; หากไม่มีการแปล InfoPlist.strings กล่องโต้ตอบของระบบจะแสดงเป็นภาษาอังกฤษ

การแปลภาษาใน Android: values-ru ทรัพยากรที่ถูกแปล

ทรัพยากร Android สำหรับการแปลถูกจัดระเบียบผ่านตัวระบุคุณสมบัติ (qualifiers) ในชื่อไดเรกทอรี สำหรับภาษารัสเซีย — res/values-ru/ สำหรับภาษาเยอรมัน — res/values-de/ สำหรับภาษาโปรตุเกสบราซิล — res/values-pt-rBR/ Android รองรับมากกว่า 160 ภาษา ระบบจะเลือกทรัพยากรโดยอัตโนมัติตามภาษาของอุปกรณ์ (Locale.getDefault()) หากไม่มีภาษาที่ตรงกัน — ระบบจะใช้ทรัพยากรจาก values/ (ภาษาหลัก ปกติคือภาษาอังกฤษ)

kotlin
// res/values/strings.xml (พื้นฐาน — อังกฤษ)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>

// res/values-ru/strings.xml (รัสเซีย)
<string name="settings_title">การตั้งค่า</string>
<string name="greeting">สวัสดี, %s!</string>

// res/values-de/strings.xml (เยอรมัน)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>

// Kotlin — โค้ดเดียวสำหรับทุกภาษา
textView.text = getString(R.string.settings_title)

// สตริงพร้อมพารามิเตอร์
val greeting = getString(R.string.greeting, userName)

// รูปภาพที่ถูกแปล
// res/drawable-ru/flag.png — ธงสำหรับเวอร์ชันรัสเซีย
// res/drawable/flag.png — ธงเริ่มต้น

// การแปลเลย์เอาต์ (สำหรับภาษา RTL)
// res/layout-ar/activity_main.xml — เวอร์ชันอาหรับ

การแปลไม่เพียงแค่สตริง — Android รองรับการแปลรูปภาพ (res/drawable-ru/) สี (res/values-ru/colors.xml) ขนาด (res/values-ru/dimens.xml) แอนิเมชัน เมนู และแม้แต่เลย์เอาต์ทั้งหมด สำหรับภาษาที่มีความยาวคำแตกต่างกัน (ภาษาเยอรมันยาวกว่าอังกฤษ 30–40%) ใช้ dimens.xml ที่แปลแล้วซึ่งมีความกว้างปุ่มเพิ่มขึ้น สำหรับภูมิภาคที่มีสัญลักษณ์สีแตกต่างกัน (สีขาวหมายถึงการไว้ทุกข์ในจีน) — ใช้ colors.xml ที่แปลแล้ว

การตรวจสอบการแปลบนอุปกรณ์

การทดสอบ — เปลี่ยนภาษาของอุปกรณ์เป็นภาษาเป้าหมายผ่าน การตั้งค่า → ระบบ → ภาษา ตรวจสอบว่า: สตริงทั้งหมดถูกแปลแล้ว วันที่ถูกจัดรูปแบบอย่างถูกต้อง ตัวเลขแสดงด้วยตัวคั่นที่ถูกต้อง รูปภาพสอดคล้องกับภูมิภาค เลย์เอาต์ไม่เสียหายเมื่อมีสตริงยาว สำหรับระบบอัตโนมัติ ให้ใช้ Espresso กับ LocaleTestRule (Android Testing Library) — ซึ่งช่วยให้เรียกใช้การทดสอบกับภาษาต่างๆ โดยไม่ต้องเปลี่ยนภาษาด้วยตนเอง

การปรับเปลี่ยนทางวัฒนธรรม: สิ่งที่ต้องแปลนอกเหนือจากข้อความ

ลักษณะเฉพาะทางวัฒนธรรม — การแปลภาษาไม่ได้จำกัดเพียงแค่การแปลข้อความ สัญลักษณ์สีแตกต่างกัน: สีแดงหมายถึงโชคดีในจีน อันตรายในสหรัฐฯ การไว้ทุกข์ในแอฟริกาใต้ สีขาวหมายถึงความบริสุทธิ์ในยุโรป การไว้ทุกข์ในจีน ไอคอนที่มีท่าทาง: ยกนิ้วโป้งขึ้น — แง่บวกในสหรัฐฯ การดูถูกในตะวันออกกลาง รูปภาพบุคคล: ในประเทศอาหรับไม่อนุญาตให้มีรูปภาพผู้หญิงในชุดว่ายน้ำ สัญลักษณ์ทางศาสนา: ไม้กางเขน เสี้ยววงเดือน ดาราของดาวิด ควรใช้เฉพาะในบริบทที่เหมาะสมเท่านั้น

ข้อกำหนดทางกฎหมาย — แต่ละประเทศมีกฎหมายเกี่ยวกับผลิตภัณฑ์ดิจิทัลของตนเอง GDPR (สหภาพยุโรป) — จำเป็นต้องได้รับความยินยอมเกี่ยวกับคุกกี้และการประมวลผลข้อมูล CCPA (แคลิฟอร์เนีย) — สิทธิ์ในการลบข้อมูล กฎหมายข้อมูลส่วนบุคคล (รัสเซีย 152-FZ) — การจัดเก็บข้อมูลบนเซิร์ฟเวอร์ในรัสเซีย LGPD (บราซิล) — เทียบเท่า GDPR การชำระเงิน: ในจีนต้องใช้ Alipay/WeChat Pay ในอินเดียต้องใช้ UPI ในบราซิลต้องใช้ Boleto และ PIX ตั้งค่าระบบการชำระเงินให้เข้ากับภูมิภาคก่อนเริ่มการแปลภาษา

ด้านสหรัฐฯจีนสหรัฐอาหรับเอมิเรตส์เยอรมนี
ระบบการชำระเงินApple Pay, บัตรAlipay, WeChat Payบัตร, Apple PayPayPal, Giropay
สีของแบรนด์ใดก็ได้แดง — โชคดีเขียว — อิสลามดำ/เหลือง
โซเชียลมีเดียInstagram, XWeChat, DouyinWhatsApp, XWhatsApp, X
วันที่MM/dd/yyyyyyyy/MM/dddd/MM/yyyydd.MM.yyyy
กฎหมายข้อมูลCCPAPIPLPDPLGDPR

ตัวอย่างและเนื้อหา — ปรับตัวอย่างให้เข้ากับภูมิภาค สำหรับการแปลภาษาเยอรมันให้ใช้ระบบเมตริก (กก., กม.) สำหรับอเมริกาให้ใช้ระบบอิมพีเรียล (ปอนด์, ไมล์) หมายเลขโทรศัพท์ รหัสไปรษณีย์ ที่อยู่ — รูปแบบแตกต่างกัน ตัวอย่างสกุลเงิน: ¥1000 ในญี่ปุ่น, $9.99 ในสหรัฐฯ, 999 ₽ ในรัสเซีย รูปภาพอาหาร เสื้อผ้า การตกแต่งภายในต้องสอดคล้องกับมาตรฐานระดับภูมิภาค ใน IT Sectr เราแนะนำให้จ้างที่ปรึกษาท้องถิ่นเพื่อตรวจสอบการปรับเปลี่ยนทางวัฒนธรรม

กระบวนการแปลภาษา: เครื่องมือ นักแปล CI/CD

เครื่องมือการแปล — แพลตฟอร์มระดับมืออาชีพที่ทำให้กระบวนการเป็นอัตโนมัติ: Lokalise, Crowdin, POEditor, Smartling, Phrase เครื่องมือเหล่านี้เชื่อมต่อกับ repository นำเข้าสตริงใหม่โดยอัตโนมัติ ติดตามการเปลี่ยนแปลง (Delta updates — แปลเฉพาะสตริงที่เปลี่ยนแปลง) มี Translation Memory (TM — การบันทึกวลีที่เคยแปลแล้ว) และ Glossary (อภิธานศัพท์) ต้นทุนเฉลี่ยของการแปลมืออาชีพ: $0.08–0.15 ต่อคำ (ขึ้นอยู่กับภาษา)

กระบวนการ — (1) นักพัฒนาเพิ่มคีย์ i18n ในโค้ด push ไปยัง repository (2) CI/CD (GitHub Actions / GitLab CI) ส่งคีย์ใหม่ไปยังแพลตฟอร์มการแปลโดยอัตโนมัติ (3) นักแปลได้รับการแจ้งเตือน แปล และบันทึก (4) ไฟล์ที่แปลแล้วจะสร้าง PR ใน repository โดยอัตโนมัติ (5) QA ตรวจสอบการแปลบนอุปกรณ์ (6) ปล่อยเวอร์ชัน รอบสำหรับหนึ่งภาษา: 2–5 วันทำการ (ขึ้นอยู่กับปริมาณ) สำหรับ 10 ภาษา: 5–15 วันเมื่อนักแปลทำงานพร้อมกัน

การแปลด้วยเครื่อง + การตรวจสอบโดยมนุษย์ — มาตรฐานสมัยใหม่ การแปลด้วยโครงข่ายประสาทเทียม (DeepL, Google Translate, GPT-4) ให้คุณภาพ 80–90% สำหรับคู่ภาษาที่เป็นที่นิยม นักแปลมนุษย์ตรวจสอบ: คำศัพท์เฉพาะทาง บริบท (คำอาจมีความหมายแตกต่างกันในหน้าจอต่างๆ) การปรับเปลี่ยนทางวัฒนธรรม ใน IT Sectr เราใช้แนวทางแบบผสมผสาน: การแปลด้วย ML + การตรวจสอบโดยเจ้าของภาษา สำหรับสตริงที่สำคัญ (กฎหมาย การชำระเงิน) — ใช้เฉพาะนักแปลมืออาชีพ ประหยัดต้นทุนได้ถึง 60% ในขณะที่ยังคงคุณภาพ

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

การแปลภาษาแตกต่างจากการเตรียมพร้อมสำหรับการแปลอย่างไร?

การเตรียมพร้อมสำหรับการแปล — การเตรียมโค้ดสำหรับการแปล (การแยกสตริง, RTL, การจัดรูปแบบ) การแปลภาษา — การแปลและการปรับเปลี่ยนทางวัฒนธรรม i18n ทำโดยนักพัฒนาครั้งเดียว l10n ทำโดยนักแปลสำหรับแต่ละภาษา i18n โดยไม่มี l10n — แอปพร้อมสำหรับการแปลแต่ยังไม่ได้แปล l10n โดยไม่มี i18n — ต้องเขียนโค้ดใหม่สำหรับแต่ละภาษา

คำแปลใน iOS เก็บไว้ที่ไหน?

ในไฟล์ Localizable.strings ภายในโฟลเดอร์ .lproj สำหรับแต่ละภาษา: en.lproj (อังกฤษ), ru.lproj (รัสเซีย), de.lproj (เยอรมัน) รูปแบบ: “key” = “value”; สำหรับพหูพจน์ — Localizable.stringsdict การตั้งค่าแอป (CFBundleDisplayName) — ใน InfoPlist.strings Xcode จัดการ .lproj ผ่าน Base Internationalization

values-ru ใน Android คืออะไร?

values-ru — ไดเรกทอรีทรัพยากร Android สำหรับภาษารัสเซีย ประกอบด้วย strings.xml พร้อมคำแปล เช่นเดียวกับภาษาอื่นๆ: values-de (เยอรมัน), values-fr (ฝรั่งเศส) Android เลือกทรัพยากรตามภาษาของระบบ หากไม่พบ values-ru — ระบบจะใช้ values/ (ภาษาหลัก ปกติคือภาษาอังกฤษ)

จะจัดรูปแบบวันที่สำหรับภูมิภาคต่างๆ อย่างไร?

ใช้ Locale API เสมอ iOS: DateFormatter.locale = Locale(identifier: locale) Android: DateFormat.getDateInstance(DateFormat.SHORT, locale) รัสเซีย: 31.12.2024 สหรัฐฯ: 12/31/2024 ญี่ปุ่น: 2024/12/31 ห้ามกำหนดรูปแบบตายตัว — แต่ละประเทศมีมาตรฐานของตนเอง สำหรับการป้อนวันที่ให้ใช้ UIDatePicker / DatePicker

ต้องใช้กี่ภาษาสำหรับแอประดับโลก?

สำหรับ การครอบคลุมระดับโลก 10–15 ภาษาก็เพียงพอ: อังกฤษ, สเปน, ฝรั่งเศส, เยอรมัน, ญี่ปุ่น, จีน, เกาหลี, โปรตุเกส, รัสเซีย, อิตาลี, อาหรับ สำหรับระดับภูมิภาค — 1–2 ภาษา แต่ละภาษาเพิ่มเติมช่วยเพิ่มการติดตั้งแบบออร์แกนิก 5–15% ในภูมิภาคนั้นๆ App Store ต้องการอย่างน้อยการแปลภาษาอังกฤษ

สรุป

  • Localization (l10n) — การแปลและการปรับเปลี่ยนทางวัฒนธรรมของเนื้อหาให้เข้ากับภาษาและภูมิภาคที่เฉพาะเจาะจง
  • iOS — Localizable.strings ในโฟลเดอร์ .lproj, Base Internationalization, InfoPlist.strings
  • Android — values-ru/strings.xml, drawable และ layout ที่แปลแล้วผ่าน qualifiers
  • การปรับเปลี่ยนทางวัฒนธรรม — สี, ไอคอน, ท่าทาง, ระบบการชำระเงิน, ข้อกำหนดทางกฎหมาย
  • กระบวนการ — CI/CD → แพลตฟอร์มการแปล → นักแปล → QA → ปล่อยเวอร์ชัน (2–5 วันต่อภาษา)
  • แนวทางแบบผสมผสาน — การแปลด้วย ML (DeepL, GPT) + การตรวจสอบโดยเจ้าของภาษาเพื่อประหยัด 60%
  • ความคุ้มค่า — 76% ของผู้ใช้ซื้อสินค้าเฉพาะในภาษาของตนเองเท่านั้น (CSA Research, 2023)

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม