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')
の感じで呼び出す。

上は、手動での切り替えだが、単純に日本語かそうでないか(英語)に自動で切り分けるなら、¥マークとか、午前午後 など、そういう、言語の違いが出る文字で判断するのが楽だ。

例えば、
RECOMMEND
SELECTED ENTRIES
RECENT COMMENTS
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    pooco (12/26)
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    hopeseeds (12/26)
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    pooco (12/26)
  • Delphiコンポーネント:国際化対応コンポーネント IniLang
    hopeseeds (08/22)
  • Delphiコンポーネント:国際化対応コンポーネント IniLang
    Hideo (08/21)
  • 特定のページが開けない!なんと、コードギアのホームページが開けない・・私のせい?
    QQ (07/18)
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    taha (05/30)
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    cham (03/27)
  • 第8回 CodeGearデベロッパーキャンプ開催!
    cham (03/27)
  • delphiコンポーネント:祝祭日カレンダーコンポーネント
    ふみちゃん (03/25)
RECENT TRACKBACK
CATEGORIES
ARCHIVES
MOBILE
qrcode
LINKS
PROFILE
OTHERS

05
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--

Delphi Holic (HopeSeeds blog)

「Delphi Holic」は、ホープシーズ製品の紹介、
Delphi、Kylix、Lazarusなどの情報を上げていきます。
<< 永久ループ起動 | main | サイズ0の空ファイルで何をする? >>
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

var
FS:TFormatSettings;
hApp:String;
begin
//言語のチェンジ
 GetLocaleFormatSettings(GetUserDefaultLCID,FS);

 hApp :=FS.TimeAMString + FS.TimePMString ;
 if hApp = '午前午後' then
 begin
  CL:=loadIni(JP);
 end else begin
  CL:=loadIni(EN);
 end;
 if CL<>nil then
 begin
  fillProps([Form1],CL);
 end;



IniLang を改造すれば、別に国際化でなくてもいいわけだ。
プライベートなキャプションを、様々な書き方で切り替えるとか、カスタマイズよろしくのアプリケーションも簡単にできる。
萌えモードとか、大阪弁モードとか。



| Delphi Holic | 05:33 | comments(2) | trackbacks(0) | - | - |
コメント
現在、Delphi7英語版アプリケーションのLocalizationをすることになりました。
デモソースを参照とありますが、何処にあるのでしょうか?リンク先があれば教えてください。よろしくお願いいたします。
| Hideo | 2008/08/21 8:02 PM |

最近、時間がぜんぜん取れないので、アップしていないブログに、コメントがつきました。感謝です。

http://www.delphi32.com/vcl/2836/

から、ダウンロードして、回答すると、デモが入ってました。
| hopeseeds | 2008/08/22 12:48 AM |

コメントする









この記事のトラックバックURL
http://delphiholic.hopeseeds.com/trackback/237565
トラックバック