วิธีการเตรียมเกมเพื่อรองรับหลายภาษา?


48

หลายโครงการไม่คิดเกี่ยวกับการแปลจนกว่าเกมจะเสร็จสิ้น จากนั้นการโลคัลไลเซชันจะทำในลักษณะที่เป็นแฮ็กและเห็นได้ชัดว่ามันถูกเพิ่มเข้ามาในภายหลัง ข้อกังวลเฉพาะบางประการ:

  • สตริงข้อความ (ชัด)
  • คลิปเสียงเช่นเพลงและ / หรือเรื่องเล่า
  • ข้อความที่แสดงบนพื้นผิว (เช่นป้ายกำกับบนลัง)
  • ข้อความที่แสดงเป็นเฟรมในภาพยนตร์ที่แสดงล่วงหน้า
  • ชุดแบบอักษร / ตัวอักษรสำหรับภาษาต่าง ๆ
  • เป็นต้น

อะไรคือวิธีที่ดีในการเตรียมตัวสำหรับความท้าทายเหล่านี้ในขั้นตอนการพัฒนาเริ่มต้นดังนั้นคุณสามารถทำให้ง่ายขึ้นโดยไม่ต้องเสียค่าใช้จ่ายมากเกินไป


8
ฉันเล่น Dawn of Discovery - Venice เมื่อเร็ว ๆ นี้มีการแปลเป็นภาษาอังกฤษจากภาษาเยอรมัน มันถูกต้องประมาณ 99% . . และทุกครั้งที่ตัวละครตัวหนึ่งพูดภาษาเยอรมันอย่างไม่รู้จักจบสิ้นหรือมีรายงานสถานะอาคารอย่างใดอย่างหนึ่งมี umlauts หรือ (นาน ๆ ครั้ง) ฉันได้รับแจ้งว่าฉันสามารถซื้อสินค้าดีบั๊กจากร้านค้าในพื้นที่ได้ ไม่ว่าวิธีการใดที่คุณใช้ตรวจสอบให้แน่ใจว่ามันง่ายที่จะตรวจจับเส้นที่ไม่แปล - ถ้าคุณต้องอ่านมันผ่านสายตาหรือเล่นเกมและหวังว่ามันจะปรากฏขึ้นแสดงว่าคุณทำผิด
ZorbaTHut

@ZorbaTHut รายการดีบักเป็นวิธีการรายงานข้อผิดพลาดในการแปลหรือนักพัฒนาซอฟต์แวร์ DoD ใช้ DLC เพื่อแก้ไขข้อบกพร่องการแปลเป็นภาษาท้องถิ่นหรือไม่
Dan Neely

การสร้างภาษาปลอมที่โปรแกรมเมอร์ของคุณสามารถอ่านและเขียนได้นั้นมีประโยชน์ Google มีภาษา "แฮ็กเกอร์"และ Facebook มีโจรสลัด มันสนุกสำหรับนักพัฒนาและเป็นสิ่งที่พวกเขาสามารถทดสอบด้วยตัวเองโดยไม่ต้องเรียนรู้ภาษาใหม่
John McDonald

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

คำตอบ:


49

ฉันไม่ใช่ผู้เชี่ยวชาญ แต่นี่เป็นสิ่งพื้นฐาน:

ตรวจสอบให้แน่ใจว่าสตริงของคุณสามารถจัดการได้มากกว่าเพียง ASCII

คุณจะต้องมีอักขระspécthatålบางตัวที่ไม่พอดีกับ ASCII และคลาสสตริงของคุณจะดีกว่าไม่ใช่ barf UTF-8 เป็นการเข้ารหัสทั่วไปเนื่องจากประหยัดพื้นที่ ไม่ว่าคุณจะทำอะไรทดสอบเร็ว ๆ

เป็นความคิดที่ดีจริงๆที่จะใช้คลาสสตริงจริงไม่ใช่แค่char *ทุกที่หรือคุณจะต้องอยู่ในโลกแห่งความเจ็บปวด

อย่าลืมแบบอักษรของคุณ ตรวจสอบให้แน่ใจว่าแบบอักษรทั้งหมดที่คุณใช้มีอักขระที่คุณต้องการ

ดึงสายของคุณออกจากรหัส

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

String text = Locale::getString("some unique identifier");

อย่าต่อเชื่อมหรือสร้างสตริงในรหัส

เป็นเรื่องสำคัญที่จะต้องไม่ตั้งสมมติฐานใด ๆ ว่าชิ้นส่วนของข้อความถูกสร้างขึ้นมาจากคำที่เล็กกว่า แม้แต่บางสิ่งบางอย่างที่ไม่น่ากลัวเหมือน:

String currency = Locale::getCurrencyString() + money.toString();
// creates $123

เป็นปัญหาเนื่องจากภาษาอื่นอาจวางเครื่องหมายสกุลเงินไว้หลังตัวเลข ให้ใช้สตริงรูปแบบที่มีการแปลเป็นภาษาท้องถิ่นเช่น:

String format = Locale::get("currency format"); // returns "${0}" in English
String currency = String::Format(format, money.toString());

ด้วยวิธีนี้ Localizers สามารถจัดเรียงคำใหม่ภายในสตริงรูปแบบ

ลดจำนวนข้อความที่ปรากฏในงานศิลปะโดยเฉพาะอย่างยิ่งวิดีโอ

การแยกสินทรัพย์ศิลปะเป็นงานที่น่าเบื่อ คุณอาจต้องทำอย่างน้อยหนึ่งองค์ประกอบ UI บางอย่าง แต่ก็เป็นเรื่องยุ่งยาก Forking FMV เป็นความเจ็บปวดอย่างมากเพราะตอนนี้คุณต้องเรนเดอร์และเก็บสำเนา FMV ของคุณซ้ำ

ทดสอบภาษาต่าง ๆ อย่างละเอียด

ในฐานโค้ดส่วนใหญ่มันง่ายเกินไปที่จะพูดprintf("Hi there");หรือloadTexture("someTexture");ลืมว่าสิ่งเหล่านั้นต้องผ่าน API การแปลของคุณ บางคนจะลืมและคุณจะจบลงด้วยสิ่งที่ถูกต้องในภาษาหลักของคุณ แต่คนอื่นผิด วิธีเดียวในการค้นหาสิ่งเหล่านี้คือการทดสอบผู้ทดสอบของคุณในภาษาที่ไม่ใช่ภาษาหลัก

ทำให้ข้อความในภาษาท้องถิ่นหายไปอย่างชัดเจน

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

สิ่งหนึ่งที่ราคาถูกที่คุณสามารถทำได้คือทำให้ข้อความที่หายไปปรากฏขึ้นอย่างชัดเจนเช่น "!!! การแปลที่จำเป็นสำหรับ ID # blah blah !!!" ในเกมเมื่อมันหายไป

ออกแบบ UI ของคุณด้วยภาษากรณีที่เลวร้ายที่สุด

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

น่ารำคาญภาษาอังกฤษมักเป็นภาษาที่สั้นที่สุดของภาษาท้องถิ่นดังนั้นนักออกแบบของคุณอาจออกแบบโดยไม่ตั้งใจเพื่อกรณีที่ดีที่สุด ทำให้พวกเขาใช้ข้อความยาวเป็นพิเศษสำหรับตัวยึดตำแหน่งเมื่อพวกเขาออกแบบ สมมติว่าข้อความใด ๆ ที่ระบุสามารถมีความยาวได้มากกว่า 30% เป็นภาษาอังกฤษ Google Translate สามารถรับข้อความได้โดยประมาณสำหรับตัวยึดตำแหน่ง

เวลางบประมาณสำหรับการแปล

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


4
อ่าสตริงที่ต่อกัน ช่างเป็นความเจ็บปวดในตูด ใช้งานได้ดีในภาษาพื้นเมืองสำหรับการสร้างความหลากหลายได้อย่างรวดเร็วและง่ายดาย แต่คุณจะได้เรียนภาษาที่มีไวยากรณ์แตกต่างกันและเป็นความล้มเหลวโดยสิ้นเชิง ประเด็นอื่น ๆ ก็เป็นประเด็นที่ดีเช่นกัน 'การตั้งค่า' ในภาษาเยอรมันคือ 'Einstellungen' ซึ่งกินพื้นที่หน้าจอเพิ่มขึ้นเล็กน้อยเมื่อคุณต้องการ
Casey Wagner

13

นอกเหนือจากข้อเสนอแนะอื่น ๆ สิ่งหนึ่งที่ฉันทำไปแล้วในอดีตซึ่งช่วยในการค้นหาข้อความที่แปลออกมาอย่างมากจากองค์ประกอบ UI คือการมีโหมดภาษาพิเศษสำหรับเกมของคุณซึ่งเมื่อแสดงสตริงใด ๆ เลือกเวอร์ชันที่ยาวที่สุดของสตริงนั้น ด้วยวิธีนี้เมื่อคุณสร้างสตริงทั้งหมดในโหมดนั้นแล้วคุณจะรู้ว่าคุณได้แก้ไขข้อความทั้งหมดที่มีอยู่ในทุกภาษา


9

การโลคัลไลซ์เกมอย่างถูกต้องนั้นยากมาก

คุณสามารถท่องอินเทอร์เน็ตอ่านบทความในบล็อกหรือคำตอบ StackOverflow คุณสามารถเรียนรู้กรอบ i18n แบบดั้งเดิมเช่นgettext ; อ่านหน้าวิกิพีเดียinternationaliztaionและเกมการแปล ; ศึกษาคู่มือภาษา Microsoft ที่ยอดเยี่ยม- แต่การแปลเป็นภาษาท้องถิ่นนั้นยากกว่านั้น ในความเป็นจริงแล้วเกมอาจจะยากกว่าแอพพลิเคชั่นหรือเว็บอินเตอร์เฟสอื่น ๆ เนื่องจากเกมมีความไดนามิกมากขึ้นมีชีวิตชีวามากขึ้นมีชีวิตชีวามากขึ้น (อย่างน้อยก็เป็นเกมที่ดี)

ยิ่งไปกว่านั้นขั้นตอนต่อไปนี้อาจจะต้องดำเนินการ:

กำหนดขอบเขต

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

ค้นหาผู้เชี่ยวชาญสำหรับแต่ละภาษาที่คุณต้องการให้การสนับสนุน

ผู้เชี่ยวชาญหมายถึงคนที่มีทักษะการวิเคราะห์ที่เพียงพอและมีความรู้ด้านภาษาว่าเขาจะสามารถชี้ให้คุณได้ว่าสมมุติฐานที่ผู้พูดภาษาอังกฤษใช้นั้นไม่ได้ใช้ภาษาของเขาเอง จากนั้นคุณจะต้องคิดกลวิธีที่จะแก้ไขข้อสันนิษฐานเหล่านั้น

เป็นตัวอย่าง: ในภาษาตะวันตกเราปรับข้อความในย่อหน้าโดยการเว้นวรรคระหว่างคำ ในภาษาอาหรับข้อความมีความชอบธรรมโดยการใส่อักขระคาชิดะภายในคำ มันอาจจะมีลักษณะเช่นนี้

อีกตัวอย่าง: ในรัสเซียมีคำพหูพจน์ 2 แบบสำหรับคำส่วนใหญ่ ตัวอย่างเช่นคุณจะแปล "1 เหรียญ" / "3 เหรียญ" / "5 เหรียญ" เป็น "1 монета", "3 монеты" แต่ "5 монет" ขั้นตอนที่เกิดขึ้นจริงในการตัดสินใจรูปแบบพหูพจน์ที่ถูกต้องมีลักษณะดังนี้:

function LocalRU::GetPlural(n, form0, form1, form2) {
    return (n%10) == 0 || (n%100) >= 5 && (n%100) <= 20? form0 : 
           (n%10) == 1? form1 : 
           (n%10) <= 4? form2 : form0;
}

สร้างโมดูลการแปลที่คำนึงถึงบริบท

คุณอาจทราบว่าการแปลนั้นขึ้นอยู่กับบริบทเสมอ และคุณรู้ว่าบริบทภายในเกมนั้นเปลี่ยนแปลงตลอดเวลา จะเกิดอะไรขึ้นถ้าเรารวมสองข้อความนี้เข้าด้วยกัน โดยทั่วไปการแปลของคุณควรเป็นแบบไดนามิกเช่นเดียวกับเกมของคุณ

ตัวอย่างเช่นวลีง่ายๆ "ฉันเห็นด้วย" แปลเป็นภาษารัสเซียว่าเป็น "Ясогласен" / "Ясогласна" / "Ясогласна" / "Ясогласно" ขึ้นอยู่กับเพศของผู้พูด หากนี่เป็นหนึ่งในบทสนทนาของคุณโมดูลภาษาจะต้องเลือกหนึ่งในการแปลที่เป็นไปได้ในขณะใช้งานขึ้นอยู่กับเพศของตัวละครของคุณ (สมมติว่าคุณให้ทางเลือกแก่ผู้เล่นของคุณ)

วลีเดียวกันเมื่อแปลเป็นภาษาญี่ปุ่นจะมีการแปลที่แตกต่างกันอีกครั้งทั้งนี้ขึ้นอยู่กับระดับความเป็นทางการของความสัมพันธ์ระหว่างผู้พูดและผู้ฟัง ดังนั้นหากคุณแนะนำความคิดเกี่ยวกับชื่อเสียงหรือมิตรภาพหรือเกมในระดับที่เหนือกว่า (เช่นตัวละครของคุณอาจมีวิวัฒนาการจาก Rookie ถึง General) ดังนั้นคุณจะต้องคำนึงถึงเรื่องนี้เมื่อทำการแปล (อันที่จริงแล้วนี่ไม่ใช่ภาษาญี่ปุ่นโดยเฉพาะแม้แต่ในภาษาอังกฤษในกองทัพคุณไม่เคยพูดว่า "ครับใช่เลย!" กับคนที่อยู่ต่ำกว่าคุณในอันดับ)

มีวิธีกระโดดลงในบริบท

นักแปลของคุณควรมีความสามารถในการดูบริบทที่มีวลีเฉพาะปรากฏขึ้น บางครั้งบริบทนั้นชัดเจนบางครั้งคุณต้องเห็น / ได้ยิน / สัมผัสด้วยตนเองเพื่อแปลบางอย่างถูกต้อง

แม้แต่ประโยคง่าย ๆ เช่น "หนังสือเล่มนี้เป็นสีฟ้า" ไม่สามารถแปลได้อย่างไม่น่าสงสัยโดยที่ฉันไม่ได้ดูหนังสือและเห็นว่าสีน้ำเงินชนิดใดเป็นพิเศษ

หลีกเลี่ยงการเล่นคำเล่นและองค์ประกอบเฉพาะภาษาอื่น ๆ

หรืออาจจะไม่หลีกเลี่ยง แต่อย่างน้อยก็มีกลยุทธ์ในใจสำหรับสิ่งที่ต้องทำเมื่อไม่สามารถแปลคำศัพท์ได้ เพราะอาจจะไม่

อย่างน้อยที่สุดคุณไม่ควรสร้างภารกิจเควส / ปริศนา / เกมใด ๆ ซึ่งขึ้นอยู่กับคำบางคำที่มีความหมายสองเท่าหรือคล้ายกับคำอื่น ๆ เพราะเมื่อแปลแล้วคุณจะทำลายเกมของคุณเอง (ตัวอย่างเช่นในเกมเก่า Fallout2 ภารกิจหลักคือการค้นหาวัตถุที่เรียกว่า GECK นอกจากนี้ยังมีสัตว์ประหลาด "ตุ๊กแก" (กิ้งก่ากลายพันธุ์) จำนวนมากรอบตัวเกมพวกเขาสร้างการอ้างอิงและเควสหลายรอบความคล้ายคลึงกันของชื่อนี้ แปลได้ดีมากยากมาก)

เชียร์ขึ้น!

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


ทางเลือกในการ "หลีกเลี่ยงการเล่นคำศัพท์" คือการรวมนักเขียนเชิงสร้างสรรค์ในทีมแปลภาษาและอนุญาตให้พวกเขาแก้ไขความหมายที่แท้จริง FFXIV ทำสิ่งนี้ได้ดีเป็นพิเศษสำหรับเวอร์ชันภาษาอังกฤษของพวกเขาเป็นตัวอย่างที่ดี
Patrick Hughes

3

Wil Shipleyมีคู่มือที่ดีที่สุดเกี่ยวกับการแปลเป็นภาษาท้องถิ่นที่ฉันเคยอ่าน น่าเสียดายที่มันเป็น iPhone ที่เฉพาะเจาะจง แต่ก็ยังสามารถได้รับข้อมูลที่เป็นประโยชน์โดยทั่วไป นอกจากนี้เขายังกล่าวถึงการแปลเนื้อหาและ UI - ความท้าทายที่ใหญ่กว่าสองประการในการแปลเกมที่ฉันจินตนาการได้


1

เสมอเสมอรักษาภาษาต้นฉบับเป็นภาษาที่มีการแปล

ดังนั้นหากภาษาต้นฉบับของคุณคือ EN ให้เก็บเนื้อหาและสตริง EN ทั้งหมดไว้ในโฟลเดอร์ EN แยกต่างหากและดึงออกมาจากตรงนั้น

ดึงสินทรัพย์ EN ผ่านกระบวนการแปลที่คุณต้องการ

โดยทำเช่นนี้สิ่งหนึ่งที่ง่ายคุณจะจับอาจจะ 80% ของปัญหาแปลและได้รับการตั้งค่าสำหรับมากกระบวนการแปลได้ง่ายขึ้น

ฉันแปลหลายเกมและนำไปสู่กับนักเก็ตคนนี้เสมอ


1

ฉันเห็นเคล็ดลับที่ยอดเยี่ยมจริงๆที่นี่!

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

  • การคิดของการแปลเป็นขั้นตอนสุดท้ายของการพัฒนาเกม
  • ไม่แยกสตริงข้อความของคุณออกจากซอร์สโค้ด
  • การต่อข้อมูล / การแบ่งบรรทัดกลางประโยค
  • สมมติว่าเวลาวันที่และหน่วยไม่จำเป็นต้องมีการแปล
  • ไม่ให้ข้อมูลอ้างอิงที่เพียงพอแก่นักแปล / ไม่ตอบคำถาม
  • สมมติว่าข้อความทั้งหมดจากเกมของคุณจะอยู่ใน ASCII
  • มีข้อความในภาพ
  • มีกล่องข้อความ / UI ที่เข้มงวด
  • สมมติว่าทุกภาษามีความยาวเท่ากับภาษาอังกฤษ
  • ใช้ Google แปลภาษา / แปลภาษาด้วยเครื่อง
  • ไม่สนใจปัจจัยทางวัฒนธรรม
  • จัดสรรงบประมาณไม่เพียงพอสำหรับการแปล

การโลคัลไลเซชันควรรวมเข้ากับการพัฒนาให้เร็วที่สุดเท่าที่จะทำได้และคุณควรระลึกไว้เสมอเมื่อทำการออกแบบเกม

ด้วยการวางแผนที่ถูกต้องและการวิจัยตลาดอย่างระมัดระวังคุณจะช่วยตัวคุณเองได้หลายปัญหาและค่าใช้จ่าย

ฉันเป็นผู้ก่อตั้งบริษัท โลคัลไลเซชั่นเกมและเราได้เตรียมการสำหรับเกมโลคัลไลเซชันเมื่อสองสามเดือนก่อนในบล็อกของเรา

นี่คืออินโฟกราฟิกที่สรุปรวมโพสต์นั้น: https://magic.piktochart.com/output/18317297-9-steps-to-cheaper-game-development-with-localization

ลิงก์ไปยังโพสต์แบบเต็มที่ครอบคลุมเคล็ดลับเหล่านั้นในรายละเอียดเพิ่มเติมอยู่ที่ด้านล่างของมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.