จะทำให้อุปกรณ์ Android แสดงการเรนเดอร์ที่ซับซ้อนของตัวละครอินดิกได้อย่างไร


42

โปรดแก้ตัวความยาวของคำถามนี้ ฉันต้องอธิบายทั้งหมดนี้เพื่อช่วยผู้อื่นและหลีกเลี่ยงผู้ให้ข้อมูลที่มีประโยชน์เพื่อให้คำตอบโดยไม่ต้องขอคำชี้แจง

ความต้องการของฉันในหนึ่งบรรทัด: "เพื่อเปิดใช้งานโทรศัพท์ Android เพื่อแสดงตัวอักษรภาษาทมิฬอย่างถูกต้อง"

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

พื้นหลังเล็ก ๆ ที่ฉันรวบรวมมา: การแสดงสัญลักษณ์บนหน้าจอ Android ต้องใช้ไฟล์ฟอนต์ที่เหมาะสมก่อน อุปกรณ์ Android มีโฟลเดอร์/ ระบบ / แบบอักษรซึ่งมีไม่กี่ตัว ไฟล์ที่น่าสนใจที่สุดในโฟลเดอร์นั้นคือ DroidSansFallback.ttf ตามชื่อแนะนำเมื่อระบบ Android ไม่สามารถค้นหาตัวอักษรในแบบอักษรของระบบ (ซึ่งอาจเป็น DroidSans.ttf หรือ DroidSans-Bold.ttf เป็นต้น) มันกลับไปค้นหาใน DroidSansFallback.ttf

โดยการแทนที่ไฟล์ฟอนต์ที่เหมาะสมจาก PC (Latha.ttf หรือ Lohit-Tamil.ttf - เป็นฟอนต์สำหรับทมิฬ) และ DroidSansFallback.ttf จะเปิดใช้งานเพื่อแสดงอักขระภาษาทมิฬในอุปกรณ์ ไม่ใช่เรื่องง่ายที่จะเปลี่ยนและเกี่ยวข้องกับการรูทอุปกรณ์และการติดตั้งระบบที่เขียนได้

แม้จะมีปัญหาเหล่านั้นแม้ว่าจะมีการแทนที่ DroidSansFallback.ttf อักขระภาษาทมิฬที่แสดงขึ้นจะแสดงผลไม่ถูกต้อง ตัวอักษรทมิฬ "தி" เป็นตัวเชื่อมของสองตัวอักษรและแทนที่จะแสดงเป็น "தி" มันจะแสดงเป็น "தி" โดยไม่มีช่องว่าง แม้ว่าจะเพียงพอที่จะอ่านข้อความสั้น ๆ แต่ก็ไม่สามารถใช้อ่านหนังสือ ฯลฯ

จาก Android 4.0 ในวอร์ด, ทมิฬและภาษาอื่น ๆ ได้รับการสนับสนุนผ่านเบราว์เซอร์ดังที่กล่าวไว้ในภาพรวม Android 4.x API ดังที่เห็นด้านล่าง

Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex
character support needed for combining glyphs) in WebView and the built-in Browser

คำที่ต้องแจ้งคือ "ใน WebView และเบราว์เซอร์ในตัว" ซึ่งหมายความว่าอักขระภาษาทมิฬจะถูกแสดงอย่างสมบูรณ์หากถูกแสดงเป็นเนื้อหา HTML และจะไม่ถูกแสดงเป็นอย่างอื่น Opera และเบราว์เซอร์อื่น ๆ ทำสิ่งนี้แม้กระทั่งก่อน Android 4.0 ด้วยการแทนที่ภาพแทนตัวละคร

ฉันสังเกตเห็นว่าในอุปกรณ์บางอย่างที่กำหนดเป้าหมายตลาดอินเดีย (เช่น LG Optimus One, โทรศัพท์และแท็บเล็ต Samsung ส่วนใหญ่) สามารถแสดงภาษาทมิฬได้อย่างถูกต้องทั้งในเบราว์เซอร์และแม้แต่ในเบราว์เซอร์เช่นที่ติดต่อข้อความตัวอักษรชื่อไฟล์ ฯลฯ ฉันประหลาดใจที่พวกเขาทำสิ่งนี้แม้ใน Android 2.3 เป็นต้นไป ฉันยังสังเกตเห็นว่ารุ่นเดียวกันที่กำหนดเป้าหมายประเทศที่ไม่ใช่ประเทศอินเดียที่ใช้ Android รุ่นเดียวกันไม่รองรับการแสดงตัวอักษรภาษาทมิฬ

สิ่งนี้ทำให้ฉันตรวจสอบเพิ่มเติมและถึงข้อสรุปว่า Android (เป็นระบบปฏิบัติการ Linux อื่น ๆ ) ขึ้นอยู่กับเอ็นจิ้นการแสดงผลแบบอักษรเพื่อแสดงอักขระที่ซับซ้อนเช่นนั้น สองเครื่องยนต์ที่ฉันเจอคือ Skia และ Harfbuzz ฉันสังเกตว่า LG ใช้ skia และ Samsung ใช้ห้องสมุดของ Harfbuzz ในอุปกรณ์ของพวกเขาเพื่อนำความสามารถนี้มาใช้

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

แม้ว่าฉันจะอธิบายเรื่องนี้กับทมิฬ แต่ก็ใช้ได้กับภาษาอินเดียส่วนใหญ่

คำถามของฉันมาที่นี่ (ถ้าคุณยังอ่านอยู่)) ตอนนี้แน่ใจว่าเป็นที่ชัดเจนว่าไฟล์ TTF ควรมีตัวอักษรและไลบรารี่ที่เหมาะสม (libskia.so หรือ libharfbuzz.so) เพื่อให้มันถูกต้อง มีใครรู้หรือไม่ว่าผู้ผลิตเหล่านี้สามารถให้ความสามารถได้อย่างไร ฉันพร้อมที่จะสร้าง ROM ของตัวเองจาก AOSP (Android Open Source Project)


Cyanogenmod มีความสามารถในการแสดงข้อความจากขวาไปซ้าย Skia เป็นมาตรฐานสำหรับการเรนเดอร์กราฟิก ผลลัพธ์จะแตกต่างกันไปการใช้ไลบรารี Skia หนึ่งรายการจาก ROM หนึ่งและวางลงในไลบรารีอื่นอาจเป็นความหายนะเนื่องจากต้องสร้างจากศูนย์โดยใช้แหล่ง AOSP และแทนที่ Skia ด้วย harfbuzz และคอมไพล์ซ้ำ (คุณเพียงแค่ "ปล่อย" ใน harfbuzz ไปยัง ROM อื่นที่ไม่ได้สร้างด้วยไลบรารี่นั้น - ไลบรารีนั้นเชื่อมโยงกันดังนั้นถ้าบิลด์ของ ROM นั้นไม่รู้ฮาร์ฟัซซี่มันจะไม่ทำงาน)
t0mm13b

1
@ Narayanan ด้วยเหตุผลบางอย่างเว็บไซต์m.oneindia.in/tamilทำให้ทมิฬสมบูรณ์แบบใน Chrome บน Android 4.1.2 เว็บไซต์นี้ทำอะไรถูกต้องที่คนอื่นทำไม่ได้?
FMFF

คำตอบ:


9

โทรศัพท์ฝังราก

Android ภายใต้โฟลเดอร์/system/fontsมีไฟล์ชื่อ "DroidSansFallback.ttf" ควรมีอักขระภาษาทั้งหมด ปัจจุบันยังขาดการสนับสนุนสำหรับหลาย ๆ คนรวมถึงภาษาทมิฬ

หนึ่งสามารถแทนที่ไฟล์ด้วยหนึ่งที่มีตัวอักษรทมิฬจึงอนุญาตให้ใช้ทมิฬในโทรศัพท์ของคุณ

จากXDA Developers Thread - ฟอนต์บ่งชี้ DroidSans Fallbackผู้ใช้ลองใช้ทมิฬบนโทรศัพท์ของตนสำเร็จแล้ว

หากต้องการทำความเข้าใจกับวิธีนี้คุณจะต้องเข้าถึงรูทโทรศัพท์ของคุณเพื่อเข้าถึง/systemและเปลี่ยนไฟล์ทางเลือก:

  • อ่านฉันจะรูทอุปกรณ์ของฉันได้อย่างไร หากโทรศัพท์ของคุณยังไม่รูท
  • ติดตามXDA Developersเพื่อดูวิธีเปลี่ยนไฟล์ :

    Using and Android SDK environment:
    
    First Copy the DroidSansFallback.ttf file into your sdcard,
    then issue the following commands:
    
    adb shell
    su
    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
    cd /sdcard
    busybox cp DroidSansFallback.ttf /system/fonts
    mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system
    exit
    exit
    
    Lastly, rebooted the phone
    

    หมายเหตุ:จุดเชื่อมต่อนั้นไม่เหมือนกันสำหรับโทรศัพท์ทุกรุ่น


แอพ Android

แม้ว่าวิธีการข้างต้นอาจดึงดูดผู้ใช้บางคน แต่ฉันต้องการแอปพลิเคชันเมื่อพร้อมใช้งาน

นอกจากนี้ทมิฬยังมีแป้นพิมพ์ที่มีทั้งหมด 247 ตัวอักษรในขณะที่ภาษาอังกฤษต้องการเพียง 26 ดังนั้นสิ่งนี้กลายเป็นปัญหาใหญ่เมื่อพิมพ์:

ดูWikipedia :: ภาษาทมิฬ - ระบบการเขียน

ทมิฬสคริปต์ปัจจุบันประกอบด้วย 12 สระพยัญชนะ 18 ตัวและอักขระพิเศษหนึ่งตัวคือāytam เสียงสระและพยัญชนะรวมกันในรูปแบบ 216 อักขระผสมให้รวม 247 อักขระ (12 + 18 + 1 + (12 x 18))


ขอบคุณ Krishan และทำงานเกี่ยวกับเรื่องนี้มีแอพที่พร้อมใช้งานสำหรับจัดการกับปัญหาทั้งสองระบบการใช้ทมิฬและแป้นพิมพ์ที่สามารถใช้พิมพ์อักขระทมิฬได้

อ่านโพสต์ของ Krishan เรื่องTamil Unicode Font สำหรับ Android - ทำงานเพื่อรับข้อมูลโดยละเอียดเกี่ยวกับการพัฒนาโซลูชันนี้

เพื่อสรุป

Krishan พัฒนาและเผยแพร่สองแอพที่Google Playซึ่งจัดการกับปัญหาการมีระบบปฏิบัติการ Android ทั้งหมดในทมิฬ:


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

3

ดูเหมือนว่าคุณจะอธิบายปัญหา 4153ซึ่งเป็นข้อบกพร่องที่รู้จักใน Android

ปัญหานี้ได้รับการรายงานตามที่ได้รับการแก้ไขใน Jelly Bean หากภาพหน้าจอนี้ถูกต้องแสดงว่าปัญหาควรได้รับการแก้ไข (ฉันไม่สามารถบอกตัวเองได้ แต่ฉันมีสิทธิ์เข้าถึง Jelly Bean และสามารถสร้างภาพหน้าจอได้)

หน้าทดสอบ ICS สำหรับ Unicode


1
ขอบคุณสิ่งนี้ไม่เพียง แต่เป็นข้อบกพร่องอย่างที่ฉันได้กล่าวไว้ว่าการเรนเดอร์ภาษาทมิฬทำงานได้แม้ในโทรศัพท์ Android 2.3.3 ที่มีการแทรกแซงจากผู้ผลิตบางอย่าง
Narayanan

1
เมื่อวันที่ 20 กรกฎาคม 2012 ฉันเข้าร่วม gDays ของ Google และฉันได้เห็น Android JellyBean 4.1 ได้แสดงตัวอักษรภาษาทมิฬแม้จะอยู่นอกเบราว์เซอร์ น่าเสียดายที่ฉันไม่สามารถทดสอบอะไรได้อีก
Narayanan

ด้วยความคิดเห็นเกี่ยวกับคำถามandroid.stackexchange.com/questions/26797/ …ฉันจะบอกว่าฉันสามารถอ่านทมิฬในหน้าเว็บไฟล์ข้อความ SMS ผู้ติดต่อชื่อไฟล์ไฟล์ DOCX ผ่าน ThinkFree Office Mobile Viewer ฉันสังเกตเห็นว่าสิ่งนี้ควรเหมือนกันสำหรับเตลูกูกันนาดาเบงกาลีและฮินดีเช่นกัน
Narayanan

1

ติดตั้งเว็บเบราว์เซอร์ Opera Mini

ใน Opera Mini Web Browser พิมพ์ "about: Config"

ใช้ฟอนต์บิตแมปสำหรับสคริปต์ที่ซับซ้อน: เลือกใช่

คุณสามารถดูเว็บไซต์ทั้งหมดในแบบอักษรทมิฬในโทรศัพท์มือถือทุกยี่ห้อ

ความนับถือ


5
นี่เป็นบิตแมปภายในเบราว์เซอร์และไม่ใช่โซลูชันทั่วทั้งระบบปฏิบัติการ (คุณจะไม่สามารถพิมพ์หรือดูอักขระภาษาทมิฬหรืออักขระภาษาอินดิกอื่น ๆ ใน SMS ได้) แต่สิ่งที่คุณแนะนำได้ถูกกล่าวถึงแล้วในโพสต์หลัก:> "Opera และเบราว์เซอร์อื่น ๆ ทำสิ่งนี้แม้กระทั่งก่อน Android 4.0 ด้วยการแทนที่ภาพแทนตัวละคร"

0

คุณไม่จำเป็นต้องรูทและแทนที่ฟอนต์ในระบบ Android

แทนที่เฟิร์มแวร์ของอุปกรณ์ของคุณด้วยเฟิร์มแวร์ของภูมิภาคอินเดียที่คล้ายคลึงกันเพื่อแสดงแบบอักษรเทวนาครีอย่างถูกต้อง เฟิร์มแวร์ของภูมิภาคอื่นไม่แสดงแบบอักษรเทวนาครีอย่างถูกต้อง แบบอักษรเทวนาครีแสดงผลอย่างถูกต้องบน Android เวอร์ชั่น 2.x

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