玩 app 這麼久,其實沒有想過這個問題,雖然在 Windows 的世界裡已經實現過簡繁轉換了,但到 app 之後 倒是就忘記了,沒想到「需求」還是會自己找上門啊...

這個需求第一次被提出來的時候,想當然爾,不是就把 Windows 那套搬來就好嗎!而且現在是 Unicode 的世界,直覺想應該不困難才對,沒想到頭洗下去才發現世界真的不一樣~

先回頭看一下在 Windows 的世界,我們可以怎麼做?

//簡體轉繁體
function ChsToCht(CnStr: string): string;    
var
 Len: Integer;
begin
 Len := Length(CnStr);
 SetLength(Result, Len);
 LCMapString(GetUserDefaultLCID, LCMAP_TRADITIONAL_CHINESE, PChar(CnStr), Len, PChar(Result), Len);
end;
 
//繁體轉簡體
function ChtToChs(BigStr: string): string;   
var
 Len: Integer;
begin
 Len := Length(BigStr);
 SetLength(Result, Len);
 LCMapString(GetUserDefaultLCID, LCMAP_SIMPLIFIED_CHINESE, PChar(BigStr), Len, PChar(Result), Len);
end;

但是看倌們,如果您仔細想一下的話,會發現 LCMapString 這個是 Windows Kernel 提供的 API 函式,android 或 iOS 可沒有,那這兩大作業系統,有沒有這麼好心的 API 可以呼叫呢?小弟找了一下是沒找到,可能因小弟孤陋寡聞的關係。

簡繁轉換這個需求,全世界的語言應該找不到其他類似的案例,似乎只存在於中文的世界,換個角度想,有這個需求的應該不會是只有我吧,很多寫 app 的前輩應該早就遇到了才是,尤其對我這種很懶、又不想把每段文字變成資源檔的人來說,雖然 delphi 已經有提供 TLang 這個解決方案,但我可沒要真的做多國語系,我只是想要簡繁轉換啊...

於似乎求教於 google 大神,看看大神能幫助我些什麼,以下是我找到可能可以用的相關資源(有 jar 檔,可以直接提供 delphi 使用者)

1. jcc(jcc-bate)

https://code.google.com/archive/p/jcc/

2. zhcode

http://www.mandarintools.com/zhcode.html

3. ZHConverter

https://code.google.com/archive/p/java-zhconverter/downloads

 

三套都有 jar 檔,想說透過原廠的 Java2OP or Java2Pas 這兩套工具產生相關介面,引入專案使用應該可以很快的就可以搞定才對,沒想到天算不如人算,別人(java)用起來似乎好好沒問題的東西,為啥我用要嘛就是沒反應,不然就是直接報記憶體錯誤...

無奈老闆的需求急急如律令,哪有辦法等你慢慢找原因,只好參照上述三套的原理,自己來寫轉換的部分吧...而且就算 jar 可用,iOS 還是得另外想辦法,與其這樣,那...還是任命些吧..

三套的原理應該都是大同小異的,原則上應該都有一個以上的表可供對照來做轉換,剩下的就是能轉換的字數多寡與轉換速度的問題,既然知道原理也就不難了,jcc 中就有現成的對照表可以拿來用(真是太讚了,不用自己建),稍微再把轉換函式或 class 寫一下,不到 200 行,搞定!

 

轉換前

轉換後

app 可以依據作業系統的語系,自動判斷需要轉換與否,真是太好了...雖然無法做詞彙轉換,但至少不用一個一個字慢慢的敲鍵盤了~

 

補上  iPhone 畫面

 

 

to be continued....

文章標籤
創作者介紹

縹緲's blog

縹緲 發表在 痞客邦 PIXNET 留言(0) 人氣()