리소스 문자열

리소스 문자열 (Resource strings)

문자열 상수의 특별한 형태로, 다국어 지원(국제화) 을 염두에 둔 선언 블록이 있어요. Free Pascal에선 이를 Resourcestring 블록이라고 불러요. 이번 절에서 이게 일반 문자열 상수와 어떻게 다른지 살펴볼게요.

출처: 문서

본문

상수 선언 블록의 특별한 종류로 Resourcestring 블록이 있어요. Resourcestring 선언은 일반 문자열 상수 선언과 아주 비슷해요. 리소스 문자열은 상수 문자열처럼 동작하지만, objpas 유닛의 특별한 루틴들을 통해 지역화(localize) 할 수 있어요. 리소스 문자열 선언 블록은 Delphi 모드나 ObjFPC 모드에서만 허용돼요.

다음은 리소스 문자열 정의의 예시입니다:

Resourcestring

FileMenu = '&File...';

EditMenu = '&Edit...';

resourcestring 섹션에 정의된 모든 문자열 상수는 특별한 테이블에 저장돼요. 이 테이블 안의 문자열들은 objpas 유닛의 특별한 메커니즘으로 런타임에 조작할 수 있어요.

의미상으로 이 문자열들은 일반 상수처럼 동작해요. 이 값에 값을 할당하는 것은 허용되지 않아요(objpas 유닛의 특별한 메커니즘을 통한 경우 제외). 하지만 일반 문자열 상수처럼 대입문이나 표현식에 쓸 수는 있어요. resourcestring 섹션의 주된 용도는 바로 국제화를 쉽게 제공하는 거예요.

주의: 표현식으로 주어진 리소스 문자열은, 그 표현식의 일부분이 바뀌어도 자동으로 변하지 않아요:

resourcestring

Part1 = 'First part of a long string.';

Part2 = 'Second part of a long string.';

Sentence = Part1+' '+Part2;

지역화 루틴이 Part1Part2를 번역해도 Sentence 상수는 자동으로 번역되지 않아요. Sentence는 리소스 문자열 테이블에 별도의 항목을 갖기 때문에 따로 번역해 줘야 해요. 위 구문은 단지 Sentence의 초기값이 Part1+' '+Part2와 같다는 뜻일 뿐이에요.

주의: 마찬가지로 리소스 문자열을 상수 배열에서 쓸 때도, 배열에는 리소스 문자열의 초기값만 사용돼요. 개별 상수가 번역되어도 배열의 요소들은 원래 값을 유지해요:

resourcestring

Yes = 'Yes.';

No = 'No.';

Var

YesNo : Array[Boolean] of string = (No,Yes);

B : Boolean;

begin

Writeln(YesNo[B]);

end.

이 코드는 YesNo 상수가 어떤 지역화 메커니즘으로 번역됐더라도, B의 값에 따라 "Yes." 또는 "No."를 출력해요.

더 알아보기

  • resourcestring의 국제화 활용과 관련 루틴은 Programmer's Guide와 objpas 유닛 레퍼런스에서 더 자세히 다뤄요.
  • 일반 상수 선언의 기본은 일반 상수 절을 참고하세요.