Îñţérñåţîöñåļîžåţîöñ

วันอาทิตย์ที่ 11 กันยายน 2011

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

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

เพิ่มภาษาไม่ได้หมายความว่าต้องเพิ่มเทมเพลต HTML ด้วย

เรายังยืนยันที่จะขอแนะนําให้ใช้เทมเพลตเดียวกันสำหรับทุกเวอร์ชันภาษา และพยายามทำให้ HTML ของเทมเพลตเรียบง่ายเสมอ

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

สตริงหนึ่งๆ ควรจะยาวเท่าไร

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

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

ภาพหน้าจอของแบบฟอร์มในเว็บเวอร์ชันภาษาจีนและเยอรมัน

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

ไม่ใช่ทุกภาษาที่อ่านจากซ้ายไปขวา

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

     <p>
      ابةتث
      <img src="foo.jpg" alt=" جحخد" />
      < ذرزسش!
     </p>

จากการใช้งานในทุกๆ วันของเราแสดงให้เห็นว่าเครื่องมือแก้ไขต่อไปนี้ โดยเฉพาะ Coda รวมถึง Dreamweaver, IntelliJ IDEA และ JEditX เป็นทางออกที่ดีสำหรับการแก้ไขแบบ 2 ทิศทาง

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

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

โดยทั่วไปเราจะใช้วิธีการต่อไปนี้ รวมถึงการใช้คลาสในแท็กเนื้อหา (body) แทนที่จะใช้ตัวเลือก CSS html[dir=rtl] เพราะจะเข้ากันได้กับเบราว์เซอร์รุ่นเก่า

องค์ประกอบ

    <body class="rtl">
      <h1>
        <a href="https://www.blogger.com/">
          <img alt="Google" src="https://www.google.com/images/logos/google_logo.png" />
        </a> Heading
      </h1>

การจัดรูปแบบจากซ้ายไปขวา (ค่าเริ่มต้น)

    h1 {
      height: 55px;
      line-height: 2.05;
      margin: 0 0 25px;
      overflow: hidden;
    }
    h1 img {
      float: left;
      margin: 0 43px 0 0;
      position: relative;
    }

การจัดรูปแบบจากขวาไปซ้าย

    body.rtl {
      direction: rtl;
    }
    body.rtl h1 img {
      float: right;
      margin: 0 0 0 43px;
    }

(ดูการทำงานจริงในภาษาอังกฤษและอาหรับ)

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

<h2>‫עוד ב- <span dir="ltr">Google</span>‬</h2>

ในกรณีที่คุณไม่มีคอนเทนเนอร์ HTML ที่จะเชื่อมโยงกับแอตทริบิวต์ทิศทาง (dir) เช่น องค์ประกอบของชื่อเรื่อง หรือซอร์สโค้ดที่สร้างจาก JavaScript สำหรับข้อความแจ้ง คุณสามารถใช้ค่าที่เทียบเท่าเพื่อระบุทิศทางที่ &#x202B; และ &#x202C;‬ เป็นอักขระควบคุม Unicode สำหรับการฝังจากขวาไปซ้าย ดังนี้

<title>&#x202B;‫הפוך את Google לדף הבית שלך‬&#x202C;</title>

ตัวอย่างการใช้โค้ด JavaScript

var ffError = '\u202B' +'כדי להגדיר את Google כדף הבית שלך ב\x2DFirefox, לחץ על הקישור \x22הפוך את Google לדף הבית שלי\x22, וגרור אותו אל סמל ה\x22בית\x22 בדפדפן שלך.'+ '\u202C';

(ดูรายละเอียดเพิ่มเติมได้จากบทความของ W3C เรื่องการสร้าง HTML สำหรับภาษาอาหรับ ฮีบรู และภาษาที่อ่านจากขวาไปซ้ายอื่นๆ และการเขียนโค้ดสำหรับภาษาที่อ่านจากขวาไปซ้าย)

เมื่อผลลัพธ์ไม่เป็นตามที่ต้องการ

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

โปรดตรวจสอบว่าการเข้ารหัสของตัวแก้ไขและเบราว์เซอร์ตั้งค่าเป็น UTF-8 (แนะนํา) จากนั้นพิจารณาเพิ่มองค์ประกอบ <span> และแอตทริบิวต์ lang ขององค์ประกอบ html ลงในเทมเพลต HTML เพื่อให้เบราว์เซอร์รู้ว่าจะต้องแสดงผลหน้าเว็บของคุณแบบไหน วิธีนี้จะเป็นประโยชน์เพราะอักขระ Unicode ทั้งหมดจะแสดงผลอย่างถูกต้อง ดังนั้น จึงไม่จำเป็นต้องใช้เอนทิตี HTML อย่าง &eacute; (é) และช่วยประหยัดไบต์ไปได้อีกมาก หากพบปัญหา โปรดอ่านบทแนะนําของ W3C เกี่ยวกับการเข้ารหัสอักขระ โดยในบทความมีคำอธิบายโดยละเอียดเกี่ยวกับปัญหาต่างๆ

เกี่ยวกับการตั้งชื่อ

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

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

โปรดดูโพสต์ก่อนหน้าของ Webmaster Central สำหรับคำแนะนําเรื่องโครงสร้าง URL และปัญหาอื่นๆ เกี่ยวกับการทำงานกับเว็บไซต์หลายภูมิภาคและการทำงานกับเว็บไซต์หลายภาษา

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