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