2007.06.15 Friday
Delphiコンポーネント:国際化対応コンポーネント IniLang
私は、長年のDelphi使いで、Delphi中毒を宣言している割には、それほど技術のレベルがあがってないと日々反省を込めて思っている。
例えば、国際化対応も、Delphiの機能として備わっている。しかし、どうも、面倒で理解に時間がかる様なものには、手を出さず、簡単なのを探してしまう。
国際化の機能もそうで、これだから、レベルがあがらないのかも しれない。
国際化の件だが、つまり、日本語のOSの時は、日本語表示で、英語OSの場合は、自動的に英語表示に切り替わるものだ。
紹介するコンポーネントは、IniLang v 0.9 開発者は、 frederic sigonneau さん 既に 大本の所在がわからないが、delphi32.com に置いてあった。
IniLang は、いたって簡単だ。
国際化の設定部分を、iniファイルの様なテキストファイルで宣言する。
言語づつ、その設定ファイルを用意してやる。そして、フォーム名、ユニット名、プロパティ(キャプション) を指定し、その言語を記載しておけば良い。
そのiniファイルを抜粋すると、下記の様な感じ
English.ini は、
[Form1]
Form1.Caption=Translation demo
Form1.Label1.Caption=Few words to see
[Misc]
M01=No problem.
M02=Read only memo
Jp.ini は
[Form1]
Form1.Caption=翻訳デモ
Form1.Label1.Caption=見るわずかな単語
[Misc]
M01=問題なし.
M02=リードオンリーメモ
IniLang は、日本語を使うには、修正が必要だ。
const
sep='*|*'; //separator for multiline messages
FR='French.ini'; FRENCH=2;
EN='English.ini'; ENGLISH=0;
SP='Spanish.ini'; SPANISH=1;
CU='Custom.ini'; CUSTOM=3;
JP='Jp.ini'; JP=4; <---追加
(略)
function loadIni(ID:integer):TMemIniFile;overload;
var
chemin,nom:string;
begin
case ID of
-1:nom:= '';
FRENCH:nom:=FR;
ENGLISH:nom:=EN;
SPANISH:nom:=SP;
CUSTOM:nom:=CU;
JAPANESE:nom:=JP;<---追加
end;
chemin:=extractFileDir(application.exeName)+'¥'+nom;
if not fileExists(chemin) then
result:=nil
else
result:=TMemIniFile.create(chemin);
end;
(略、後ろの方)
function str2IntID(s:string):integer;
begin
result:=-1;
if s=FR then result:=FRENCH //2
else if s=EN then result:=ENGLISH //0
else if s=KO then result:=KOREA//1
else if s=JP then result:=JAPAN//4 //<--追加
else if s=CU then result:=CUSTOM; //3;
end;
function intID2Str(ID:integer):string;
begin
result:='';
if ID=2 then result:=FR
else if ID=0 then result:=EN
else if ID=1 then result:=KO
else if ID=4 then result:=JP //<--追加
else if ID=3 then result:=CU;
end;
言語の切り替えは、呼び出し側で行う。デモソースを参照されたし。
if sLang = 'JP' then
begin//日本語指定なら
CL:=loadIni(JP);
end;
if sLang = 'EN' then
begin//英語指定なら
CL:=loadIni(EN);
end;
if CL<>nil then
begin
fillProps([Form1],CL);
end;
[Misc] を呼び出すには、
misc(M01,'M01')
の感じで呼び出す。
上は、手動での切り替えだが、単純に日本語かそうでないか(英語)に自動で切り分けるなら、¥マークとか、午前午後 など、そういう、言語の違いが出る文字で判断するのが楽だ。
例えば、
IniLang を改造すれば、別に国際化でなくてもいいわけだ。
プライベートなキャプションを、様々な書き方で切り替えるとか、カスタマイズよろしくのアプリケーションも簡単にできる。
萌えモードとか、大阪弁モードとか。
例えば、国際化対応も、Delphiの機能として備わっている。しかし、どうも、面倒で理解に時間がかる様なものには、手を出さず、簡単なのを探してしまう。
国際化の機能もそうで、これだから、レベルがあがらないのかも しれない。
国際化の件だが、つまり、日本語のOSの時は、日本語表示で、英語OSの場合は、自動的に英語表示に切り替わるものだ。
紹介するコンポーネントは、IniLang v 0.9 開発者は、 frederic sigonneau さん 既に 大本の所在がわからないが、delphi32.com に置いてあった。
IniLang は、いたって簡単だ。
国際化の設定部分を、iniファイルの様なテキストファイルで宣言する。
言語づつ、その設定ファイルを用意してやる。そして、フォーム名、ユニット名、プロパティ(キャプション) を指定し、その言語を記載しておけば良い。
そのiniファイルを抜粋すると、下記の様な感じ
English.ini は、
[Form1]
Form1.Caption=Translation demo
Form1.Label1.Caption=Few words to see
[Misc]
M01=No problem.
M02=Read only memo
Jp.ini は
[Form1]
Form1.Caption=翻訳デモ
Form1.Label1.Caption=見るわずかな単語
[Misc]
M01=問題なし.
M02=リードオンリーメモ
IniLang は、日本語を使うには、修正が必要だ。
const
sep='*|*'; //separator for multiline messages
FR='French.ini'; FRENCH=2;
EN='English.ini'; ENGLISH=0;
SP='Spanish.ini'; SPANISH=1;
CU='Custom.ini'; CUSTOM=3;
JP='Jp.ini'; JP=4; <---追加
(略)
function loadIni(ID:integer):TMemIniFile;overload;
var
chemin,nom:string;
begin
case ID of
-1:nom:= '';
FRENCH:nom:=FR;
ENGLISH:nom:=EN;
SPANISH:nom:=SP;
CUSTOM:nom:=CU;
JAPANESE:nom:=JP;<---追加
end;
chemin:=extractFileDir(application.exeName)+'¥'+nom;
if not fileExists(chemin) then
result:=nil
else
result:=TMemIniFile.create(chemin);
end;
(略、後ろの方)
function str2IntID(s:string):integer;
begin
result:=-1;
if s=FR then result:=FRENCH //2
else if s=EN then result:=ENGLISH //0
else if s=KO then result:=KOREA//1
else if s=JP then result:=JAPAN//4 //<--追加
else if s=CU then result:=CUSTOM; //3;
end;
function intID2Str(ID:integer):string;
begin
result:='';
if ID=2 then result:=FR
else if ID=0 then result:=EN
else if ID=1 then result:=KO
else if ID=4 then result:=JP //<--追加
else if ID=3 then result:=CU;
end;
言語の切り替えは、呼び出し側で行う。デモソースを参照されたし。
if sLang = 'JP' then
begin//日本語指定なら
CL:=loadIni(JP);
end;
if sLang = 'EN' then
begin//英語指定なら
CL:=loadIni(EN);
end;
if CL<>nil then
begin
fillProps([Form1],CL);
end;
[Misc] を呼び出すには、
misc(M01,'M01')
の感じで呼び出す。
上は、手動での切り替えだが、単純に日本語かそうでないか(英語)に自動で切り分けるなら、¥マークとか、午前午後 など、そういう、言語の違いが出る文字で判断するのが楽だ。
例えば、
IniLang を改造すれば、別に国際化でなくてもいいわけだ。
プライベートなキャプションを、様々な書き方で切り替えるとか、カスタマイズよろしくのアプリケーションも簡単にできる。
萌えモードとか、大阪弁モードとか。