모든 프로젝트의 모든 문자열을 넣는 공유 언어 단위를 사용하십시오. 이 공유 문자열 단위를 추가 할 패키지를 만듭니다. 이 패키지의 i18n을 켭니다. 패키지를 컴파일하면 languages 폴더에 공유 po 파일이 생깁니다.
리소스 문자열이 필요한 모든 프로젝트에 대해이 패키지를 요구 사항으로 추가해야합니다. 가장 쉬운 방법은 패키지 편집기에서 "사용"/ "프로젝트에 추가"를 선택하는 것입니다.
프로젝트 po 파일을 languages 폴더에 추가하기 때문에 프로젝트의 i18n을 켜지 마십시오. 각 프로젝트에서 번역 된 문자열을 사용 용도에 장치 "번역"를 추가하고 여기에
TranslateUnitResourceStrings(
StringsUnit,
Format('languages\%s.%s.po', [StringsUnit, ALang])
);
StringsUnit를 호출하기 위해
는 수집 된 모든 리소스 문자열과 공유 장치의 이름입니다. ALang은 사용할 언어 기호입니다 (예 : 독일어의 경우 'de', 프랑스어의 경우 'fr'등이 있습니다.
이제는 어려운 부분입니다. i18n이 꺼져 있기 때문에 구성 요소의 캡션에 할당 된 문자열은 자동으로 po 파일에 저장되지 않습니다. 따라서 구성 요소 캡션 만 남겨두고 각각에 대한 리소스 문자열을 만듭니다 (물론 'stringsunit'에 있음). 그런 다음 런타임에 캡션을 resourcestring에 할당합니다. 이 같은 아마 뭔가 : 사용자가 새로운 언어를 선택
procedure TForm1.FormCreate(Sender: TObject);
begin
SetCaptions;
end;
procedure TForm1.SetCaptions;
begin
Caption := RSTitleOfForm1; // resource string for form title
Label1.Caption := RSYDateLabel; // label caption showing "Date:"
// etc.
end;
경우, 사용 가능한 모든 번역과 콤보 상자에서 예를 들어, 당신은 동적으로 생성 된 형태의 경우 (기존의 각 양식에 대한 TranslateUnitResourceStrings 다음 SetCaptions을 호출해야합니다, SetCaptions는 FormCreate 이벤트에 있기 때문에 자동으로 호출됩니다.
내가 찾고있는 것이 맞습니다. 감사합니다. – antseq