2021年5月10日 星期一

APP 軟體的多國語言支持開發經驗談

今年以來因為手上產品開發工作,變得很少時間可以寫寫文章,

所以已經很久沒提筆了,最近終於事情有點緩和一點,

還是跟大家再打聲招呼了。經過這麼多年,而且我的年紀也不小了,

我想接下來有機會,我會講比較多個人的許多產品開發經驗與一些技術

問題,當然我們這種LKK 工程師的技術也沒啥最新亮點,比不上甚麼

雲端運算啊?AI 人工智慧或是甚麼大數據分析等等,但卻是我們累積

一生黃金歲月所留下的。或許可能也賺不了大錢了,但可能可以幫我們

度過我們人生的下半場了。

別的不說:就拿我部落格中提及的數位CDI 這個產品來說:


很多會認為說:這甚麼過時的技術或產品了,還是老是拿出來講?

但不好意思的是:人家客人會是下單買的啦。我最近還跟退休的賈老師

陪著我與家裡的狗狗一起去南部送貨。可以享受一下輕鬆的兩人世界。

(PS:補充說明一下:我常常會遇到許多朋友留言或來信詢問這個東西

要怎麼買?說真的啦:如果你只有一個、兩個的需求,我還真的不知道

該如何做你的生意?不是我不想幫這個忙?或不想賺這個錢?因為以做生意

的角度來說:這個東西還不是像一般家庭五金之類的,可以擺在小北百貨

或是街上五十元店賣的...所以你有更好的生意想法,你再跟我說吧。

只是之前我曾開公司找業務開發市場過,只是現在人家不想做這個生意了,

所以我們也只能撿回來,自己再慢慢做啊!)
---
話說這個東西,以前在軟體支持方面,也曾經有亞洲國家客人問我關於

軟體上多國語言支持問題。但畢竟小弟我也不是念資工出身的,軟體功力

也沒有像人家科班出身的這麼厲害,我們是半路出家,雖然搞USB 工具

軟體,多多少少也寫一點APP 軟體而已。要弄這麼複雜的東西真的不容易啊。

隨著年紀增長,接觸的產品開發工作也多,也都難免還是會碰到這類問題。

畢竟國內市場還是屬於小眾市場,套一句客人說的:只要隨便一個國外市場

打開,都比國內市場強,所以如何走向國際市場還是產品開發的重點。
---
這邊就順便交流一點個人在技術開方面的經驗談:以前我不是電子電機或

資工這一類科班出身的,但又想在這方面領域或行業裡混口飯吃,

所以對於學習最新技術總是抱著戰戰兢兢的心態不斷的學習與自我要求。

每當自己有一點點學習成果時,總是不免想拿出來說嘴一下。也算是給

自己一點追求自我成長的滿足感。有沒有有點過度炫耀或渲染?

這或許就見仁見智了。

但後來隨著自己的產品開發,或經歷組織公司運作之後,乃至於歲月在

腦力與體力摧殘之後,就有點慢慢的領悟到一些道理了:

或許真的不是科班出身的,才會有這種夜郎自大的心態,但當你看到園區

那一大票人外有人、天外有天,到處人才濟濟的公司之後,才知道:

搞技術開發,也只不過是一個小小的"入門票"而已。

人家滿街到處都是台清交科班高材生,人才匯集的一流公司時,

人家只是要不要懶得理你而已,否則啊,人家怎麼可以號稱"護國神山"呢?

靠的當然不是我們雕蟲小技的玩意兒,而是如何透過技術整合?組織運作

的去創造世界級的競爭力啊。

所以啦,當你在學習新技術或開發甚麼產品時,你真的要好好的在技術以外

多看看、想想這些技術或產品完成之後,你要如何延續這些價值?

就以我這篇標題來說:這些技術難不難?對我們這一種小公司,小打小鬧

的產品開發團隊來說:或許有點挑戰性,但對許多國際公司來說:難嗎?

還是簡單的一句話:要怎麼做?才是符合經濟學上的投資報酬率而已。

就以國人比較注重的硬體技術或產品來說:搞軟體也只不過產品的附屬品。

一般老闆就未必想砸錢花在這些軟體開發工作上,尤其是你的產品還是以

硬體產品為主的商品上。往往軟體APP 就是隨機附贈的免費服務商品

你不要笑,就是如此!就像我這個數位CDI 來說:就是因為有軟體支持,

市場與客人才一直讚不絕口。但這個軟體能要求市場或客人付費嗎?

沒有這個軟體支持之後,你要怎麼賣硬體?那你又覺得你要養多少軟體

工程師"長期"的幫你做軟體支持維護或升級呢?等你付了這些軟體工程師

的薪水與勞健保費用之後,相信你對於產品的定位與市場行銷等。

肯定是完全不同的思維與操作方法的啦。所以啦,有時候搞技術也不要老是

把一些雕蟲小技(對於人家那一種大公司、大組織團隊的來說),拿出來說嘴。

所以啦,我未來的一些文章,主要還是要結合一些這些雕蟲小技,及一些

產品開發經驗來讓大家在產品或商品化的過程中,有一些經驗交流。
---
話說:最近開發案又碰到多國語言軟體支持問題了。

終究醜媳婦還是得面對公婆的啦。

對我們這一種LKK 工程師來說:面對這一種新挑戰也難免還是有點抗拒感的啦。

所以我還是問一下科班出身的年輕人:我兒子。要軟體支持多國語言有甚麼

比較好的做法?"就是要以 Unicode 方式處理啊!"

"蛤? Unicode 喔?" (心裡難免還是嘀咕一下,你也知道在 Visual Studio 在 

unicode 的開發平台上,許多我們這些LKK 的人來說:有許多以前習慣的

函數庫幾乎都需要重新調整的...這種抗拒感不禁油然而生啊...)

兒子一看到我的反應就不太想理我的...當然,最後我還是硬著頭皮搞出來。

兒子看到了就問了一句:"你怎麼弄的?"...

"就 unicode 啊 !"

結果:兒子面露一絲詭異的笑意,走開了。

我知道他的意思是:唉~老人家啊,早就跟你說了,你還不信!
---
所以說啊:我們老了就得要認命,時代不同了,更何況還要跟年輕一代的

工程師互動或在市場競爭求生存....

好吧。我就簡單的交代一下作法:

依照微軟的官方的說法:在新一代的作業系統平台中,基本上就已經全面

採用多國語言支持方式,就是 unicode。 而要透過Visual Studio 的MFC 開發

平台支持多國語言的話,最好還是採用DLL 外掛方式處理。

在Open Source 中,最值得參考的就是 eMule 這個軟體平台:

大家有興趣也可以參考一下:


---
大致上,我就是採用這個方法:所以基本上就是會有兩支程式要維護,

第一就是APP 本身的開發平台。

第二就是用來開發APP 軟體中所需要用到的多國語言的DLL 開發平台。

下圖是你的APP 的開發環境設定: unicode。並採用 shared DLL。



並且要引入 DLL 的組譯處理器。


---
第二的部分就是要將上述APP  所需要多國語言顯示在另一個 DLL 開發平台裡,

完成多國語言的外掛語言的 DLL 開發平台:這就是要產品程式要用的

.DLL 檔部分:


這是要留意的地方:


基本上就可以了。至於詳細如何完成,這部分還是得要自己親自下去玩一下

才會知道的。若有不清楚的,凡事問Google 大神,但我記得應該是對岸的

簡體字資料會比較容易看得懂。但也是要參考多一點各篇文章說明。

主要還是要自己多摸索的。

以下就是完成的結果:

程式執行時,就是會在執行目錄下:外掛執行程式所需要用到的多國語言的

相關字庫:


在程式執行目錄下有各國語言DLL 檔。


至於你問我說:這些DLL 檔案要不要直接併到執行檔內?

我個人認為沒必要,因為你終究不知道未來還要增加哪些國家語言文字,

先保留這一種做法,未來擴充性比較好,人家微軟跟你說的沒錯的啦。
-----

好了,技術的東西我講完了。

這幾年我體會很深,我也過了五十歲多了。所以我認為這個階段時,

技術對我來說:是應該拿來為我自己如何創造一個輕鬆度過晚年的東西。

太新的技術或產品對我來說:學了,也未必能賺得到錢,或有機會回收的。

真的倒不如把自己過去所累積的能量,拿來創造屬於自己的"養老金"。

那些新東西、新玩意兒是屬於下一代年輕人的,就像我兒子他們不一定願意

還跟我們討論那些過去我們緊抱著、或跟不上時代的東西。有些舊東西,

也都有新的做法。我們這個年代的東西或方法對他們來說:或許已經是

賺不到錢了,那你為什麼還堅持他們跟我們學?或用我們這一套方法呢?

而我們自己要看到的是如何把我們自己一些經驗如何轉換成對他們有用的

參考依據?舉個例子來說:像我自己搞這些技術或產品,講坦白話:

你上班領薪水做時,你可能無法做到這麼全面性的技術開發,技術不一定

是最先進,但卻要很全面性:因為產品完成商品化之後,他需要哪些技術

配合?韌體?硬體PCB 組裝投產?軟體技術支援產品升級與商品服務?

你上班領薪水只能搞一樣技術,想自己學點有用的或想做自己的東西時,

那就得自己找時間、找金錢、找資源。就是一種投資。

但有些東西就是隔行如隔山,不會就是不會,花錢學或請別人搞...問題是

最後東西拿出來賣之後,你覺得合不合算?(因為這個還牽涉到一個產品、

一個技術商品,你可以賣多少?賣多久?)

這就是一個很現實的投資報酬率的經濟問題。

學東西可以樣樣通,卻樣樣不精,甚至都沒有完成任何轉換成實際的

營收獲利,年輕上班時,覺得沒差,反正還可以打卡上班領薪水。

但有一天你突然覺得年過五十,在職場上開始覺得有任何風吹草動風險,

江山備有才人出,長江後浪推前浪...你就不免開始有點擔心了。

然後,你就開始覺得甚麼最新技術或最新產品好像也都跟你無關了,

你的問題就回到:你的下一餐會在哪?一大票朋友、同事人瞎起鬨,

搞了老半天,每個人所能承擔的風險不一,所要求的標準也不同。

你就會覺得靠山山倒、靠人人跑。靠自己最好了。

所以或許我自己本身的經驗可以供你參考一下,或許我講的技術或產品

開始慢慢的會跟不上年輕一代的東西。也更不說人家專業科班出身所談論的

東西。但這些卻是非常實際有用的現實問題,因為這些東西都可以為我這

五十幾歲的老工程師來說:(應該對於某些市場或願意付我薪水的老闆來說)

我還是有屬於我自己的價值,讓我還可以在這裡跟大家哈啦~交流一些

技術,講講當年勇給各位參考。

或許你覺得這些好像沒甚麼大不了的事,但畢竟我已經到了一定的年紀了,

我們家的賈老師也已經退休三、四年了,我也沒看到說:人家到了五十歲

還要一天到晚還在搞甚麼新技術?新玩意兒?還是可以活得好好的,

還比我們這些搞技術的,還輕鬆自在。反倒是我一天到晚都聽到朋友捎來

的訊息:






你就真的不要以為你天天都還是二、三十歲的年輕小伙子,

可以整天想著學東西,玩玩東西就可以一輩子不愁吃穿?

絕大多數的人還都是平凡的小老百姓,報章雜誌寫的一些豐功偉業的東西

看看就好,世界還是很現實殘酷的啦。

大家不妨就加減參考看看吧。










2 則留言:

  1. app用unicode還好,我是MCU用unicode,還是我的第一個8051作品,很久以前的事。用到LCM是有字庫的,一般是GB或Big5,然後上層是word檔再取出字碼,弄的MCU要是unicode還轉成GB送去LCM。好在做完後MCU就不用再管有多少字了,因為8051的容量有限,LCM上的字也多,產品用了十年還在賣。

    回覆刪除
    回覆
    1. 我想系統是否採用Unicode,就得視工作平台而定。

      PC 就得跟著微軟作業系統走,至於 Embedded 系統來說:只要人家看得到、看得懂內容

      就好,說實在的老闆或客人也搞不懂的...這些重點還是在於系統後續的維護問題。

      就誠如你說的:一個東西都已經賣十年了,誰在乎啊。

      而對於我們工程師來說:最重要還是如何維繫本身的價值延續性。

      否則,你看人家老美當年把人送上月球時,所用的技術肯定是在有限的資源下,

      完成繁縟的工作,而根本不用在乎平台問題。

      這一點我本身也體會很深的啦,一個用八位元MCU 做的數位CDI,

      還不是可以一直賣個十幾、二十年的。

      所以啦,過度追求技術不全然是一件好事,尤其對於小公司、小企業或個人來說:

      畢竟能真正換成現金還是比較重要的啦。

      刪除