2009-05-08 2 views
4

저는 '도'기호와 '옴'기호와 같은 몇 가지 특수 문자를 사용하는 여러 Delphi 양식이 있습니다. 이러한 문자는 DFM 파일에 저장된 레이블 캡션에 사용되며 런타임에 생성되거나 수정되지 않습니다. 우리가 처음 이러한 양식을 설계했을 때, Ansi 문자 세트 (코드 176)에 있기 때문에 학위 기호가 쉽지만 옴 기호는 그리스 문자 세트가 코드 217과 함께 사용되어야했습니다. 다행히 (우리가 찾은) 다른 모든 문자 그리스 문자 세트로 필요 (문자 및 숫자)가 잘 작동합니다.특수 문자가 포함 된 Delphi DFM을 D2009로 마이그레이션

이제 우리는이 양식들이 D2009에서 동일하게 보이길 바란다. 도 기호가 잘 표시되지만 dfm 텍스트가 "Caption = 'Typed in Ohms - 1234'# 217"이기 때문에 옴 기호에 'Ù'가 표시됩니다. 나는 올바른 유니 코드 옴 심볼 (8486)을 넣기 위해 폼을 편집 할 수 있지만, 물론 이것은 '?' D7로 돌아갈 때. 이상적으로는 D2009에 그리스 문자 세트를 양식과 함께 계속 사용하여 dfm의 # 217이 오옴 기호에 매핑되도록 할 수 있습니다. 이것이 가능한가? 'GREEK_CHARSET'인 Font.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을 사용하여 해결되었습니다. 문제가되는 캡션 대신 깨끗한 ascii (예 : "Typed in Ohms")를 사용한 다음 ex 파일에 리소스로 포함 된 po 파일로 변환했습니다.

BTW, dxgettext은 좋은 3p 편집기 (poEdit)를 사용하여 매우 적은 오버 헤드와 표준 형식 (po/mo)으로 번역을 앱에 추가하는 좋은 방법입니다. D7 및 D2009에서 작동합니다.

+0

흥미 롭습니다, 감사합니다! –

관련 문제