6

Ctrlキー + 私が得るようにZのようなショートカットのローカライズされた説明を取得する方法はあります「Ctrlキー + Z」アプリは、英語のシステム上で動作している場合、「STRG + Z "ドイツ語のシステムでは?Delphi:メニューのショートカットの説明をローカライズする方法は?

VCL関数ShortCutToTextは国際化されていません。 API関数のGetKeyNameTextは少し上手くはいますが、まだ完全ではありません。ドイツ語XPの地域設定を英語(米国)に切り替えると、それでもドイツ語のテキストが生成されます。それ以外にも結果は醜い大文字である。

説明:私はShortCutToTextまたはSmkc *リソース文字列をカスタマイズされたバージョンで置き換えることができます。しかし、私は翻訳された文字列が必要です。そして、私はこれらをOSなどから入手したいと考えています。

更新:マイクロソフトでは開発者が自分で翻訳を行うことを期待しているようです - Associating a Menu Item with an Accelerator Keyの2を参照してください。引用:たとえば

、[ファイル]メニューの[開く]コマンドにCTRL + Oを割り当てるために、 それはこのようになりますように、メニュー項目のキャプションを変更します。

開く\ TCTRL + O

メニューエディタのメニュー項目が更新され、入力時に新しい字幕 が反映されます。

キャプションに手動でショートカットを追加することに注意してください。

+1

これは、Menus.pasのコードに 'ShortCutToText'が使用されているので、非英語のキーボードを使用しているDelphiシステムでは、オーナーが描いたメニューが正しく描画されないことを意味します。それは私の見解ではかなり不自由です。 –

+0

@David:それは私が尋ねる理由です。私たちのドイツ人以外の顧客は、メニューにStrg + Zなどの文句を言っています。彼らは、少なくともCtrl + Zか、もちろんより良いことを、自分の言語で同等のものにしたい。そして、これは所有者が描かれていないメニュー(D2007)でさえも起こります。 –

+0

さらに、オーナーのドローメニューの使用をやめると(Vistaではグリフを描画するためにオーナードローが必要ないので)、システムはそれを並べ替えるだけです。 –

答えて

1

私は何か受け入れられるように私自身の質問に答えます:マイクロソフトは開発者が自分で翻訳を行うことを期待しています - Associating a Menu Item with an Accelerator Keyの2を参照してください。引用:たとえば

、[ファイル]メニューの[開く]コマンドにCTRL + Oを割り当てるために、 それはこのようになりますように、メニュー項目のキャプションを変更します。

開く\ TCTRL + O

メニューエディタのメニュー項目が更新され、入力時に新しい字幕 が反映されます。

キャプションに手動でショートカットを追加することに注意してください。

3

ShortCutToTextは、MenuKeyCaps配列を使用します。これは直接変更できません(Menusユニットの実装にあるため)。配列はresourcestringsで埋められ、さまざまな翻訳ツールを使用して翻訳できます。

(あなたのDelphiのバージョンに応じて)consts.pasにあるSmkcCtrl resourcestring定数を翻訳する必要があります。

[編集]

それとも、私があまりにもフック関数を作成しBigProcHook.pasを、ダウンロードして、自分自身でそれらを交換することができます。その後、通常のShortCutToText関数を呼び出し、メニューがなくても 'Ctrl'を 'Strg'(またはその逆)に置き換えるオーバーライドを記述することができます。 しかし、これを最後の手段として使用するのは、リソースをただ翻訳するほうが良いと思うからです。フックを使用する場合は、ユニットをダウンロードして組み込み、任意のユニット(必要に応じて別の新しいユニット)に次のコードを追加します。

ショートカットテキストのCtrlを他のコードを変更することなく、好みのテキストに置き換えます。

+0

ああ、心配しないでください。私は明確化と更新を見逃した。 – GolezTrol

+0

それでもリンクに感謝します。 :-) –

+0

ごくわずかな遅延の後、私は実行時(HookResourceString)で翻訳したいので、BigProcHookソリューションを使い始めました。これは、MenuKeyCapsが 'string of array'であるため、VCL実装では動作しません。再度、感謝します! –

関連する問題