2009-08-24 5 views
6

우리는 응용 프로그램의 여러 위치에서 사용되는 많은 번역 문자열이있는 리소스 파일을 가지고 있습니다. 예를 들어 버튼 텍스트를 특정 문자열에 바인딩하는 더 좋은 방법이 있습니까?C# : winforms 단추의 텍스트를 리소스에 바인딩하는 방법

현재 우리가 일반적으로 단지로드 이벤트 핸들러 또는 그 중 하나에 의해 호출하는 방법으로, 생성자에서 이런 일을하고 있습니다 :

someButton.Text = CommonTexts.SomeString; 
someMenuItem.Text = CommonTexts.SomeOtherString; 

그것을 할 수있는 더 좋은 방법이 있나요? 어쩌면 디자이너일까요? 아니면 이것을 권장하는 방법입니까?


우리가 실제 번역을 수행하는 방법을 알려드립니다. resx 파일 만 포함하는 하나의 클래스 라이브러리 프로젝트가 있습니다. 주요 resx 파일은 영어로 작성됩니다 (물론). 우리는 ResEx이라는 응용 프로그램에서 이러한 기본 resx 파일을 열어 우리 (또는 다른 사람)가 다른 언어로 번역을 수행합니다. 컴파일되면 Visual Studio는 현재 언어 집합에 따라 자동으로 사용되는 각 언어에 대한 어셈블리를 자동으로 만듭니다. 이것은 꽤 잘 작동하기 때문에 번역을하는 방법에 대한 정보는 절대로 필요하지 않습니다. 물론 개선이 궁금합니다. 리소스 어셈블리와 다양한 다양한 Text 속성으로 번역 된 문자열을 가져 오는 더 좋은 방법이 있다면 무엇을 요구하고 있습니다.

+0

편집 : 카운터 질문 : 기본 FormLoad 시스템을 사용하지 않는 이유는 무엇입니까? 그것은 내장되어 있고 보이지 않습니다. –

+1

더 나은 방법이 있는지 궁금 해서요. – Svish

답변

3

당신은 할 수 있습니다 :

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

훨씬 더 복잡한 것을 제외하고는 이미 내가 한 것과 같은 방식 일 것입니다 : p – Svish

+0

@ 토마스 : 저는 포스터가 "데이터 바인딩"에서처럼 바인딩을 의미하지 않는다고 생각합니다. – MusiGenesis

+0

VS2008 (및 아마도 2005)에서는 프로젝트에 리소스 파일을 추가 할 때 얻는 기본 리소스 관리자가 키 값에 지정된 속성을 노출하므로 "btnButton.Text = resman.ButtonName"이되므로 문자열. –

0

당신의 방법 당신이로 응용 프로그램을 번역하고있는 언어 개인적으로 유창하지 않은 개발자가있는 경우이 작업을 수행하는 가장 좋은 방법입니다. 스페인어, 포르투갈어 및 중국어로 번역해야했던 영어 응용 프로그램을 사용하여이 작업을 수행했습니다 (이 언어는 반 유창하게 만 사용합니다). 원래 양식은 모두 영어로 작성되었으며 양식의 Load 이벤트에서 모든 컨트롤을 반복하고 변환 스프레드 시트에서 각 컨트롤의 Text 속성을 검색 한 다음 해당 번역으로 바꿨습니다.

기본적으로 양식 상속의 변형 인 기본 제공 방식은 프로그래머가 번역해야하는 언어에 능통하다고 가정하기 때문에 꽤 많은 스트레칭이 필요합니다. 각 양식 및 각 언어의 모든 번역 된 텍스트 값을 수동으로 입력하십시오. 또한 지원하는 각 언어의 각 양식에 .resx 파일을 추가하기 때문에 바이너리를 더 크게 만듭니다 (잠재적으로 훨씬 더 크게).

0

이 시도 :

someButton.DataBindings.Add ("텍스트", CommonTexts를, "SomeString");

1

이라는 좋은 도구가 있는데, 모든 리 소스 파일을 빌드하는 데 걸리는 시간의 일부분 만 수행합니다.

개발 프로세스 중에 다른 언어를 신경 쓰지 않아도되므로, 비공개 소프트웨어를 프로그래밍 할 때처럼 코드를 작성하고 속성을 설정하면됩니다. 완료되었거나 원할 때마다 DLL 또는 Windows Form 응용 프로그램을 통해 LingoBit Localizer를 실행합니다. 그러면 GUI에서 사용자가 표시 할 수있는 문자열을 그리드에 표시 할 수 있습니다. 자, 아마도 전문 번역가가 프로그래머가 응용 프로그램을 번역해야하는 언어를 모르는 경우 단어를 번역하는 데 사용할 수 있습니다. 완료되면 프로젝트를 저장하면됩니다. 이렇게하면 바이너리 배포 디렉토리에 추가하는 DLL 파일이 만들어지고 응용 프로그램의 현재 문화권 정보에 따라 응용 프로그램이 자동으로 올바른 언어로 설정됩니다. 설치되어 있습니다. 이것은 많은 프로그래밍 시간과 두통을 줄여줍니다.

리소스 기반 솔루션이 아니더라도 도움이 되길 바랍니다.

+0

이 문제에 대한 합리적인 접근 방법입니다. 포르투갈어 만 지원하면 ... – MusiGenesis

+0

VisualLocalize도 사용할 수 있습니다. 우리는 그 도구를 자주 사용합니다. 여기서 좋은 점은 번역 된 텍스트가 컨트롤에 들어간다면 나중에 모든 대화 상자를 확인할 수 있고 그렇지 않으면이 언어로만 컨트롤의 크기를 조정할 수 있고 새 크기는 위성 어셈블리에 지역화 된 텍스트를 저장한다는 것입니다. – PVitt

1

홈 키워드의 값을 추출하여 Text1 상자에 채 웁니다. 내가 이해

Text1.Text= Resource.Home.ToString(); 
3

, 그것은 오래된 질문이다,하지만 여전히, 나는 동일한 문제 (VS 2010)가 있고, 구글의 첫 번째 링크 중 하나는이 주제입니다.

모든 텍스트를 양식 리소스 파일로 이동하려면 Winform Localizable 속성을 True로 설정해야합니다. 그리고 그게 다야. :) (c) 모자. O.

관련 문제