Làm cách nào để tạo một thiết bị Android để hiển thị kết xuất phức tạp các ký tự Indicator?


42

Xin thứ lỗi cho độ dài của câu hỏi này. Tôi cần giải thích tất cả những điều này để giúp đỡ người khác và tránh những người đóng góp hữu ích để đưa ra câu trả lời mà không yêu cầu làm rõ.

Yêu cầu của tôi trong một dòng: "để cho phép điện thoại Android hiển thị đúng các ký tự tiếng Tamil".

Xây dựng: Tiếng Tamil, giống như bất kỳ ngôn ngữ Ấn Độ nào khác có hệ thống kết xuất ký tự phức tạp. Không giống như tiếng Anh hoặc chữ viết Latinh khác, nó có glyph (những gì bạn thấy trên màn hình) bao gồm nhiều hơn một ký tự. Android không có khả năng hiển thị các tập lệnh phức tạp như vậy (có ngoại lệ). Mục đích của tôi là muốn biết làm thế nào tôi có thể cung cấp khả năng như vậy cho điện thoại hoặc máy tính bảng Android.

Nền tảng nhỏ mà tôi thu thập được cho đến nay: Để hiển thị glyph trên màn hình, trước tiên Android cần một tệp phông chữ phù hợp. Thiết bị Android có một thư mục / hệ thống / phông chữ trong đó có một vài trong số chúng. Tệp thú vị nhất trong thư mục đó là DroidSansFallback.ttf. Như tên cho thấy, khi hệ thống của Android không tìm thấy ký tự trong phông chữ hệ thống (có thể là DroidSans.ttf hoặc DroidSans-Bold.ttf, v.v.), nó sẽ quay lại tìm kiếm nó trong DroidSansFallback.ttf.

Bằng cách thay thế một tệp phông chữ phù hợp từ PC (Latha.ttf hoặc Lohit-Tamil.ttf - đây là các phông chữ cho tiếng Tamil) và DroidSansFallback.ttf sẽ cho phép hiển thị các ký tự tiếng Tamil trong thiết bị. Nó không phải là dễ dàng để thay thế và nó liên quan đến việc root thiết bị và gắn hệ thống như có thể ghi.

Mặc cho những rắc rối đó, ngay cả khi DroidSansFallback.ttf được thay thế, các ký tự tiếng Tamil được hiển thị không được hiển thị đúng. Ký tự "" trong tiếng Tamil là kết hợp của hai ký tự và thay vì được hiển thị là "", nó sẽ được hiển thị là "த" không có khoảng trắng ở giữa. Mặc dù điều này là đủ để đọc các tin nhắn ngắn, nhưng nó không thể được sử dụng để đọc sách, v.v.

Từ Android 4.0 trên các phường, tiếng Tamil và một số ngôn ngữ khác được hỗ trợ thông qua trình duyệt như đã nói trong tổng quan về API của Android 4.x như được thấy dưới đây.

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

Các từ cần chú ý là "trong WebView và Trình duyệt tích hợp", có nghĩa là các ký tự tiếng Tamil sẽ được hiển thị hoàn hảo nếu nó được hiển thị dưới dạng nội dung HTML và sẽ không được hiển thị theo cách khác. Opera và một vài trình duyệt khác đã làm điều này ngay cả trước Android 4.0 bằng cách thay thế hình ảnh thay vì ký tự.

Tôi nhận thấy rằng trong một số thiết bị nhắm vào thị trường Ấn Độ (ví dụ: LG Optimus One, hầu hết điện thoại và máy tính bảng của Samsung) có thể hiển thị tiếng Tamil chính xác cả trong trình duyệt và ngay cả ở những nơi ngoài trình duyệt như trong danh bạ, tin nhắn văn bản, tên tệp, v.v. Thật ngạc nhiên khi họ làm điều này ngay cả trong Android 2.3 trở đi. Tôi cũng nhận thấy rằng mô hình tương tự nhắm mục tiêu quốc gia không phải Ấn Độ chạy cùng phiên bản Android không hỗ trợ hiển thị ký tự tiếng Tamil.

Điều này khiến tôi phải điều tra thêm và đi đến kết luận rằng Android (như các HĐH dựa trên Linux khác) phụ thuộc vào một công cụ kết xuất phông chữ để hiển thị các ký tự phức tạp như vậy. Hai động cơ mà tôi bắt gặp là Skia và Harfbuzz. Tôi nhận thấy LG sử dụng skia và Samsung sử dụng thư viện Harfbuzz trong thiết bị của họ để mang lại khả năng này.

Tôi đã xem qua nhiều trang web đề nghị thay thế các thư viện và phông chữ này. Nó không hoạt động và kết quả là đóng băng. May mắn thay, tôi đã sao lưu bằng clockworkmod và do đó tôi đã khôi phục điện thoại của mình.

Mặc dù tôi đã giải thích điều này với tiếng Tamil, nhưng điều này có thể áp dụng cho hầu hết các ngôn ngữ Ấn Độ.

Đây là câu hỏi của tôi (nếu bạn vẫn đang đọc;)) Bây giờ, chắc chắn rằng rõ ràng phải có một tệp TTF để cung cấp các ký tự và một thư viện thích hợp (libskia.so hoặc libharfbuzz.so) để hiển thị chúng chính xác. Có ai biết làm thế nào các nhà sản xuất có thể cung cấp khả năng? Tôi thậm chí đã sẵn sàng để xây dựng ROM của riêng mình từ AOSP (Dự án mã nguồn mở Android).


Cyanogenmod có khả năng hiển thị kết xuất văn bản từ phải sang trái. Skia là tiêu chuẩn để kết xuất đồ họa. Kết quả sẽ khác nhau, lấy một thư viện Skia từ một ROM và đưa nó vào một thư viện khác có thể là thảm họa vì nó sẽ yêu cầu xây dựng từ đầu, bằng cách lấy nguồn AOSP, và thay thế Skia bằng harfbuzz và biên dịch lại (Đơn giản là bạn không thể "thả" vào harfbuzz vào một ROM khác không được xây dựng với thư viện đó - các thư viện được liên kết với nhau, vì vậy nếu bản dựng của ROM không biết về harfbuzz, nó sẽ không hoạt động)
t0mm13b

1
@narayanan vì một số lý do, trang web m.oneindia.in/tamil hiển thị tamil hoàn hảo trong Chrome trên Android 4.1.2. Trang web này đang làm gì chính xác mà những người khác không?
FMFF

Câu trả lời:


9

Điện thoại bắt nguồn từ

Android trong thư mục /system/fontschứa tệp có tên "DroidSansFallback.ttf" được cho là chứa tất cả các ký tự ngôn ngữ. Hiện tại nó thiếu hỗ trợ cho nhiều người, bao gồm cả tiếng Tamil.

Người ta luôn có thể thay thế tệp bằng một tệp có chứa các ký tự tiếng Tamil, do đó cho phép sử dụng tiếng Tamil trên điện thoại của bạn.

Từ XDA Developers Thread - DroidSans Fallback Indicator Font , người dùng đã thử và sử dụng thành công tiếng Tamil trên điện thoại của họ.

Để hoàn thành phương pháp này, bạn cần quyền truy cập root vào điện thoại của mình, để truy cập /systemvà thay đổi tệp Dự phòng:

  • Đọc Làm thế nào để tôi root thiết bị của tôi? nếu điện thoại của bạn chưa được root.
  • Theo dõi chủ đề của Nhà phát triển XDA để xem cách thay thế tệp :

    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
    

    Lưu ý: điểm gắn kết không giống nhau cho tất cả các điện thoại.


Ứng dụng Android

Mặc dù phương pháp trên có thể thu hút một số người dùng, tôi thích dùng APP hơn khi có sẵn.

Bên cạnh đó, tiếng Tamil có bàn phím với tổng cộng 247 ký tự, trong khi tiếng Anh chỉ cần 26. Vì vậy, điều này trở thành một vấn đề lớn khi gõ:

Xem Wikipedia :: Ngôn ngữ Tamil - Hệ thống chữ viết

Kịch bản tiếng Tamil hiện tại bao gồm 12 nguyên âm, 18 phụ âm và một ký tự đặc biệt, āytam. Nguyên âm và phụ âm kết hợp với nhau tạo thành 216 ký tự ghép, tạo ra tổng cộng 247 ký tự (12 + 18 + 1 + (12 x 18))


Nhờ có Krishan và làm việc với chủ đề này, đã có sẵn một ứng dụng để giải quyết cả hai vấn đề, việc sử dụng rộng rãi hệ thống của Tamil và bàn phím có thể được sử dụng để nhập các ký tự tiếng Tamil.

Đọc bài đăng của Krishan có tiêu đề Phông chữ Unicode cho Android - Làm việc để biết thông tin chi tiết về sự phát triển của giải pháp này.

Tóm tắt

Krishan đã phát triển và xuất bản hai ứng dụng tại Google Play hoàn toàn giải quyết vấn đề có toàn bộ HĐH Android ở Tamil:


4
Tôi đã đề cập rằng việc thay thế phông chữ chỉ là một giải pháp một phần sẽ chỉ hiển thị các ký tự không liên hợp và các ký tự kết hợp sẽ không được hiển thị đúng. Và giải pháp thứ hai liên quan đến ứng dụng không phải là giải pháp được tôi chấp nhận. Nó cung cấp cách để soạn văn bản tiếng Tamil bằng cách gõ bằng tiếng Anh và chuyển đổi và trích dẫn các trang web làm ví dụ không được chấp nhận như tôi đã nói trong kỳ vọng của mình. Bất cứ cách nào cảm ơn cho những nỗ lực và thời gian của bạn.
Narayaan

3

Có vẻ như bạn đang mô tả vấn đề 4153 , một lỗi đã biết trong Android.

Vấn đề này đã được báo cáo là đã được giải quyết trong Jelly Bean. Nếu ảnh chụp màn hình này là chính xác, thì vấn đề cần được giải quyết. (Tôi thực sự không thể tự nói với mình, nhưng tôi có quyền truy cập vào Jelly Bean và có thể tạo ảnh chụp màn hình từ nó.)

Trang kiểm tra ICS cho Unicode


1
Cảm ơn, điều này dường như không chỉ là một lỗi như tôi đã nói rằng kết xuất đồ họa Tamil đang hoạt động ngay cả trong điện thoại Android 2.3.3 với một số loại can thiệp từ nhà sản xuất.
Narayaan

1
Vào ngày 20 tháng 7 năm 2012, tôi tham dự các ngày của Google và trong đó tôi đã chứng kiến ​​Android JellyBean 4.1 đã hiển thị các ký tự tiếng Tamil ngay cả ngoài trình duyệt. Thật không may, tôi không thể kiểm tra thêm bất cứ điều gì.
Narayaan

Với một nhận xét về câu hỏi android.stackexchange.com/questions/26797/ Nhật Tôi sẽ nói rằng tôi có thể đọc tiếng Tamil trong các trang web, tệp văn bản, SMS, danh bạ, tên tệp, tệp DOCX thông qua ThinkFree Office Mobile Viewer. Tôi đã quan sát thấy rằng điều này cũng tương tự đối với tiếng Telugu, Kannada, tiếng Bengal và tiếng Hindi.
Narayaan

1

Cài đặt trình duyệt web Opera Mini

Trong Opera Mini Web Browser, gõ "about: Config"

sử dụng phông chữ bitmap cho các tập lệnh phức tạp: Chọn Có

Bạn có thể xem tất cả các trang web ở phông chữ tamil trong bất kỳ điện thoại di động thương hiệu nào

Trân trọng


5
Đây là bitmapping bên trong trình duyệt và không phải là một giải pháp trên toàn hệ điều hành (ví dụ: bạn sẽ không thể nhập hoặc xem các ký tự Tamil hoặc các ký tự Ấn khác trong SMS). Btw, những gì bạn đề xuất đã được đề cập trong bài đăng chính:> "Opera và một vài trình duyệt khác đã làm điều này ngay cả trước Android 4.0 bằng cách thay thế hình ảnh thay vì ký tự."

0

Bạn không cần phải root và thay thế phông chữ trên hệ thống Android.

Thay thế phần sụn của thiết bị của bạn bằng phần sụn tương tự của khu vực Ấn Độ để hiển thị chính xác phông chữ Devanagari. Chương trình cơ sở của các khu vực khác không hiển thị chính xác phông chữ Devanagari. Phông chữ Devanagari hiển thị chính xác trên phiên bản Android 2.x.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.