2009-05-08 6 views
4

私はいくつかの特殊文字 - 「度」記号と「オーム」記号を使用する数多くのDelphi形式を用意しています。これらの文字は、DFMファイルに保存されたラベルキャプションで使用され、実行時に生成または変更されません。私たちが最初にこれらのフォームを設計したとき、Ansi文字セット(コード176)にあるので、度記号は簡単でしたが、オーム記号はギリシャ文字セットをコード217で使用する必要がありました。必要(文字と数字)はギリシャ語の文字セットでうまく動作します。Delphi DFMを特殊文字でD2009に移行

ここで、これらのフォームをD2009で同じに見せたいと思います。度記号はうまく表示されますが、dfmテキストが "Caption = 'Typed in Ohms - 1234'#217"であるため、オーム記号に 'Ù'が表示されます。私はフォームを編集して正しいユニコードのオーム記号(8486)を入れることができますが、もちろんこれは '?'に失われます。 D7に戻るとき。理想的には、D2009にギリシャ文字セットをフォームとともに使用して、dfmの#217がオーム記号にマップされるようにしたいと思います。これは可能ですか? Font.Charsetの設定は 'GREEK_CHARSET'を無視しているようです。私はこれを解決するための汚い方法を発見しました。これは、すべてのコンポーネントを反復処理し、 "StringReplace(S、 'Ù'、OhmsChar、[rfReplaceAll])"を実行することですが、これは恐ろしいことですし、

おかげで、 ブライアン

答えて

2

は、私がこれを行うには見つけクリーンな方法は、必要に応じてIFDEFsを使用することができますコードでこれらの「特別な」キャプションを、移入しました。

3

すでに述べたように、コードを使ってこれらの値を与えることができます。私は例といくつかの追加情報を与えます。

resourcestring 
{$IFDEF UNICODE} 
    cOhm = unicodeohm;  // replace with correct values. 
    cDegree = unicodedegree; 
{$ELSE} 
    cOhm = ansiohm; 
    cDegree = ansidegree; 

ほとんどの翻訳ツールはリソースで動作するので、翻訳可能なテキストにはリソース文字列を使用し、constではなく、使用することをお勧めします。

+0

リソース文字列の場合+1。これらは、これを処理し、既存のツールを使用して後で翻訳を行う最もクリーンな方法です。 – skamradt

+0

これはコードのための良い解決策ですが、これはDFMファイルにどのように役立ちますか?おかげで –

4

同様の問題は、dxgettextを使用して解決しました。問題のキャプションの代わりに、私はちょうどクリーンなアスキー(例: "Typed in Ohms")を使い、exファイルに埋め込まれたpoファイルで翻訳しました。

BTW、dxgettextは、3pの優れた編集者(poEdit)でオーバーヘッドや標準フォーマット(po/mo)をほとんど使わずに、翻訳をアプリに追加する便利な方法です。 D7とD2009で動作します。

+0

面白い、ありがとう! –