2017-12-12 11 views
0

수동으로 구현할 기존의 더 큰 Winforms 앱에서 이전에 자동으로 생성 된 지역화를 수정해야하기 때문에 작은 테스트 응용 프로그램에서 ComponentResourceManager를 사용하여 놀고있었습니다. 이렇게하면 수동으로 삽입 된 모든 문자열 누군가가 양식 디자이너를 열 때마다 리소스 파일이 누출되지 않습니다.resources.ApplyResources (...) not working - 생각인가?

이 테스트를 위해 양식에 단추 컨트롤이 있습니다. 리소스 파일에 저장된 속성을 사용하여 버튼 속성을 설정하려고합니다. 속성을 찾고 직접 설정하면 정상적으로 작동합니다.

ResourceManager resourceManager = new ResourceManager("LocalizationTest1.buttonProps", typeof(Form1).Assembly); 
button1.Text = resourceManager.GetString("button1.Text"); 
button1.Location = (Point)(resourceManager.GetObject("button1.Location")); 

그러나 다음과 같이 ApplyResources를 사용하려고하면 작동하지 않습니다.

ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof(Form1)); 
componentResourceManager.ApplyResources(this.button1, "button1"); 

는 또한 자원 이름 button1.Text 및 button1.Location 모두 자원 디자이너에서 옆에 the resource name 'button1...' is not a valid identifier을 가지고 관련이있을 수 있습니다.

나는 지금까지 온라인과 관련된 모든 것을 찾을 수 없었으므로 도움이 될만한 생각은 대단히 감사하겠습니다.

+0

나를 위해 [it works] (https://stackoverflow.com/a/46017814/3110834). 결과를보기 위해 자원을 적용하기 전에 문화를 바꾸 었습니까? 양식이 [현지화 가능] (https://stackoverflow.com/a/32990088/3110834)인지 확인하십시오. –

+0

CurrentUICulture를 변경하면 적절한 resx 파일로 언어가 변경되기 때문에 양식을 지역화 할 수 있습니다. 단, 속성을 직접 주소 지정하는 경우에만 가능합니다. 즉, 'button1.Text = resourceManager.GetString ("button1.Text");'. ApplyResources를 사용하여 오브젝트를보다 광범위하게 처리하려고 시도하지 않음 – Justin

+0

[예제] (https://stackoverflow.com/a/46017814/3110834)에서 공유 한 정확한 코드를 사용해 보셨습니까? –

답변

0

구성 요소 자원 관리자가 자원 파일 이름 또는 루트 이름을 인수로 사용하지 않을 때이 사실을 알아야합니다. 자원 이름이 양식과 동일하게 이름을 지정하십시오. 즉 Form1.cs, Form1.resx, Form1.fr.resx 등

그게 전부입니다.

감사합니다. "이전에 Form1과 연결된 .resx 파일이 더 이상 양식과 관련이 없다는 소리를 들었습니다. 파일 이름 바꾸기와 같은 작업을했다고 생각합니다." 논평. 그것은 해결책을 설명하지는 못했지만 거기에 나를 도왔습니다. 나는 이것이이 실현에 빨리 오지 않은 다른 사람을 돕기를 바랍니다.