支援多國語言有許多方法,像是透過ini或是直接在資料庫。
昨天搞了餐廳用的廚房控菜系統後,今天再讓它支援多國語系。因為介面上不多,所以使用ini方式,不過如果使用Delphi7開發的朋友都會知道,遇到不是ansi編碼的ini file會掛掉。
XE後能使用TMemIniFile取代TIniFile,就能克服儲存成unicode讀不出來的問題了!
大型網站架構..net 架構師.rabbitMQ.redis.行動開發.APP開發教學.PHP Laravel開發..net core C# 開發.架構師之路.Delphi開發.資料庫程式.進銷存.餐飲POS系統
開發餐飲POS或是其他系統,如果想打入國際市場的話,都會考量多國語系的問題,大部份就是使用mapping的方式。
在Delphi裡面的做法也很簡單~
先取得form上面的元件數(ComponentCount)
接下來用一個迴圈去比對即可。
資料表也可以開成一個
表單名稱、元件名稱、語言1、語言2、語言3的欄位…
不過因為裡面使用了infopower的wwdbgrid元件,寫在formcreate或formshow都抓不到值,後來是放到FormActivate才順利抓到
以下提供簡單的範例
[pascal]
var
sFormName:String;
i:integer;
begin
sFormName:= Self.Name; // 表單名稱
for i:=0 to self.ComponentCount -1 do begin
if Components[i] is TLabel then begin
if (TLabel(components[i]).Caption <>”) then begin
TLabel(components[i]).Caption := 取得語系….;
end;
end;
if Components[i] is TButton then begin
if (TButton (components[i]).Caption <>”) then begin
TButton (components[i]).Caption := 取得語系….;
end;
end;
end;
end;
[/pascal]
wwDBGrid的話關鍵有:
s:= TwwDBGrid(Components[i]).DataSource.DataSet.Fields[j].FieldName;
TwwDBGrid(Components[i]).ColumnByName(s).DisplayLabel
TwwDBGrid(Components[i]).ColumnByName(s).GroupName