2016-09-18 4 views
2

저는 Delphi의 경험을 가지고 있으며 완전히 새로운 나를위한 프로젝트 인 나사로를 만들려고합니다.Lazarus 로컬라이제이션/다중 프로젝트

나는 Lazarus, 번역/국제화/현지화에 관한 모든 정보를 읽었지만 실제로 원하는 것을 찾을 수 없었다고 생각합니다.

저는 3 개 또는 4 개의 EXEcutables가있는 프로젝트에서 동일한 인터페이스 (양식 상속), 공통 유틸리티, 설정 및 공통 문자열 및 관련 문자열을 공유하고 있습니다.

서로 다른 이름을 가진 3 개 또는 4 개의 .po 파일 (각각의 EXE에 하나씩)을 갖고 싶지 않습니다. 동일한 공통 문자열이 공유됩니다.

해결책이 있습니까?

  • 모든 응용 프로그램에 대해 "gobal.po"를 강제 설정 하시겠습니까? 방법?
  • 내 로컬 시스템을 만들어 하나의 파일에 모든 문자열을 중앙화해야합니까?

어떤 제안이 있습니까?

도움을 주셔서 감사합니다. 안부,

답변

4

모든 프로젝트의 모든 문자열을 넣는 공유 언어 단위를 사용하십시오. 이 공유 문자열 단위를 추가 할 패키지를 만듭니다. 이 패키지의 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 이벤트에 있기 때문에 자동으로 호출됩니다.

+0

내가 찾고있는 것이 맞습니다. 감사합니다. – antseq

관련 문제