6

Ctrl 키 + 내가 할 정도로 Z 같은 바로 가기의 지역화 된 설명을 얻을 수있는 방법이 있나요 "Ctrl 키 + Z"앱이 영어 시스템에서 실행되고있는 경우 "STRG + Z "독일어 시스템에 있습니까?Delphi : 메뉴 바로 가기에 대한 설명을 현지화하는 방법은 무엇입니까?

VCL 함수 ShortCutToText는 국제화되지 않았습니다. GetKeyNameText API 함수는 조금 나아졌지만 여전히 완벽하지는 않습니다. 독일 XP의 지역 설정을 영어 (미국)로 전환하면 여전히 독일어 텍스트가 생성됩니다. 게다가 결과는 추악한 대문자에 있습니다.

설명 : 사용자 정의 버전으로 ShortCutToText 또는 Smkc * 리소스 문자열을 어떻게 대체 할 수 있는지 알고 있습니다. 그러나 그것을 사용하려면 번역 된 문자열이 필요합니다. 그리고 나는 이것들을 OS (또는 이와 유사한 것)에서 얻고 싶다.

업데이트 : Microsoft는 개발자가 자신이 직접 번역을 수행 할 것으로 예상합니다 (Associating a Menu Item with an Accelerator Key 참조). 인용구 :

예를 들어, 할당 CTRL + O는 다음과 같습니다 있도록 메뉴 항목의 캡션을 수정 파일 메뉴에서 열기 명령에 :

열기 \ tCtrl + O

입력 할 때 메뉴 편집기의 메뉴 항목이 새 캡션 을 반영하도록 업데이트됩니다.

바로 가기는 수동으로 캡션에 추가됩니다.

+1

Menus.pas의 코드가'ShortCutToText'를 사용하기 때문에 이것은 소유자가 그린 메뉴가 영어 이외의 키보드가있는 델파이 시스템에서 잘못 그려지는 것을 의미합니다. 그것은 내 견해로는 절름발이입니다. –

+0

@David : 그 이유는 내가 묻는 이유입니다. 독일인이 아닌 고객이 Strg + Z 등을 메뉴에 불평합니다. 그들은 적어도 자신의 언어로 된 Ctrl + Z 또는 더 나은 것은 물론입니다. 그리고 이것은 소유자가 작성하지 않은 메뉴 (D2007 포함)에서도 발생합니다. –

+0

더 많은 것은 무엇이든, 그 (것)들은 다만 주인 끌기 메뉴를 사용하는 중지하는 경우에 (당신이 그려지는 glyphs를 얻기 위하여 주인 그릴을 필요로하지 않기 때문에) 체계는 다만 그것을 밖으로 분류 할 것입니다. –

답변

1

나는 받아 들일만한 뭔가를 갖기 위해 내 자신의 질문에 답할 것입니다. 마이크로 소프트가 개발자 자신이 번역을 기대하고있는 것처럼 보입니다. - Associating a Menu Item with an Accelerator Key의 2.를보십시오.인용구 :

예를 들어, 할당 CTRL + O는 다음과 같습니다 있도록 메뉴 항목의 캡션을 수정 파일 메뉴에서 열기 명령에 :

열기 \ tCtrl + O

입력 할 때 메뉴 편집기의 메뉴 항목이 새 캡션 을 반영하도록 업데이트됩니다.

바로 가기는 수동으로 캡션에 추가됩니다.

3

ShortCutToText는 MenuKeyCaps 배열을 사용합니다. 이것은 (메뉴 유닛의 구현에 있기 때문에) 직접 수정할 수는 없지만 배열은 resourcestrings으로 채워져 있으며 다양한 번역 도구를 사용하여 번역 할 수 있습니다.

consts.pas에있는 SmkcCtrl resourcestring 상수를 변환해야합니다 (Delphi 버전에 따라 다름).

[편집]

아니면 내가 너무 후크 함수를 만들어 BigProcHook.pas을 다운로드하고 자신에 의해 대체 할 수 있습니다. 그런 다음 일반 ShortCutToText 함수를 호출하고 메뉴가 없어도 'Ctrl'텍스트를 'Strg'(또는 그 반대로) 대체하는 재정의를 작성할 수 있습니다. 하지만 리소스를 번역하는 것이 더 좋다고 생각하기 때문에 이것을 최후의 수단으로 만 사용합니다. 후크를 사용하려면 유닛을 다운로드하여 포함하고 원하는 유닛에 다음 코드를 추가하십시오 (원하는 경우 별도의 새 유닛).

uses 
    BigProcHook, Menus; 

var 
    FHook: TBigProcHook; 

// The replacement function 
function MyShortCutToText(ShortCut: TShortCut): string; 
begin 
    FHook.Hooked := False; 
    try 
    Result := ShortCutToText(ShortCut); 
    Result := StringReplace(Result, 'Ctrl', 'Whatever', []); 
    finally 
    FHook.Hooked := True; 
    end; 
end; 

initialization 
    FHook := TBigProcHook.Create(@ShortCutToText, @MyShortCutToText); 
finalization 
    FHook.Hooked := False; 
    FHook.Free; 
end. 

다른 코드를 변경하지 않고 원하는 바로 가기 텍스트의 Ctrl을 대체합니다.

+0

아, 걱정마. 나는 설명과 갱신을 놓쳤다. – GolezTrol

+0

그럼에도 불구하고 링크를 가져 주셔서 감사합니다. :-) –

+0

무시할 수없는 지연 후 :-) 나는 우리가 런타임 (HookResourceString)에서 번역하기를 원하기 때문에 BigProcHook 솔루션을 사용하기 시작했으며, MenuKeyCaps가'문자열 배열 '이기 때문에 VCL 구현에서는 작동하지 않는다. 다시 한 번 감사드립니다! –

관련 문제