Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 泰語、緬甸語等復雜語言圈圈問題

Android 泰語、緬甸語等復雜語言圈圈問題

編輯:關於Android編程

 

一些復雜語言如泰語、緬甸語、印地語,經常會看到一些帶有虛線圈圈字符。這是一種正常的處理機制。對於那些不能單獨存在的字符,在顯示時額外添加虛線圈,以提供對於這些字符的含義的一些提示,使得這些字符在顯示時能夠有更加適當的位置,避免字符的無限疊加等問題。如在Windows7上的office2010中緬甸語也有同樣的行為,如下圖:

大多

Mtk在JB版本引入了這種機制,如果想去掉圈圈這種機制,可以按照如下方法:

泰語:

JB、JB2版本:

externalharfbzzsrcharfbuzz-thai.c

注釋如下代碼

about line 418

case tR:

// charIndex[(*outputIndex)] = inputIndex;

// outputBuffer[(*outputIndex)++] = errorChar;

charIndex[(*outputIndex)] = inputIndex;

outputBuffer[(*outputIndex)++] = currChar;

break;

about line 426

case tS:

// if (currChar == CH_SARA_AM) {

// charIndex[(*outputIndex)] = inputIndex;

// outputBuffer[(*outputIndex)++] = errorChar;

// }

charIndex[(*outputIndex)] = inputIndex;

outputBuffer[(*outputIndex)++] = currChar;

break;

JB3、JB5版本由於變形引擎不同,默認是不帶圈圈的,如果想使用這種機制,可以修改:frameworks/base/core/jni/android/graphics/TextLayoutCache.cp

about line 820

switch (script) {

case HB_SCRIPT_MYANMAR:

return &GraphiteLayoutShaper::getInstance();

case HB_SCRIPT_BENGALI:

case HB_SCRIPT_THAI: ////新增此句 harfbuzzShaper.setShapingScript(getHBScriptFromHBNgScript(script));

return &harfbuzzShaper;

default:

harfbuzzNgShaper.setShapingScript(script);

return &harfbuzzNgShaper;

}

緬甸語:

JB、JB2版本:

externalharfbzzsrcharfbuzz-myanmar.c

注釋如下代碼就行,一共有三處。

// reordered[len] = Mymr_C_DOTTED_CIRCLE;

// len += 1;

JB3、JB5版本由於變形引擎不同,默認是不帶圈圈的,如果想使用這種機制,可以修改:frameworks/base/core/jni/android/graphics/TextLayoutCache.cp

about line 820

switch (script) {

case HB_SCRIPT_MYANMAR:

// return &GraphiteLayoutShaper::getInstance();注釋此句

case HB_SCRIPT_BENGALI:

harfbuzzShaper.setShapingScript(getHBScriptFromHBNgScript(script));

return &harfbuzzShaper;

default:

harfbuzzNgShaper.setShapingScript(script);

return &harfbuzzNgShaper;

}

需要注意的是,去掉圈圈機制可以會導致一些字符變形問題,如連續輸入上下標、母音等字符,後面的字將不斷往前面的字上面疊。同時由於該solution沒能做嚴格的測試,而有可能存在其他潛在的風險。在不能單獨存在的字符單獨出現時去除虛線圈的做法,並不合理,並可能存在其他問題。如果要去掉,需要評估風險。

 

另外緬甸語比較特殊、緬甸語有官方和民間之分,二者不同的是編碼機制不同,因此這2種緬甸語的字串翻譯、處理引擎、字庫都是不同的。如果遇到問題可以先按照如下方法排查:

1、 如果字串中出現一個圈圈可能是個別字串翻譯問題,可以參考FAQ09106解決。

2、 如果浏覽網頁或者界面中出現大量圈圈、這可能是網頁內容或者翻譯和字庫不匹配導致。如大多緬甸語網站是民間緬甸語的,如果使用官方的緬甸語引擎和字庫訪問的話,就會出現這個問題。

目前mtk僅僅支持官方的緬甸語,如果要支持民間緬甸語,通過簡單修改(修改翻譯、替換字庫)存在諸多風險,需要自行評估或者咨詢mtk工程師。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved