C# Winform Localization 질문

현재 .net framework 4.8 winforms 프로젝트에 지역화 작업이 필요해서 작업을 진행했었는데요.

@hyeonjin 님 처럼 각 폼 별로 Localizable 속성을 통해 지역화 작업을 진행 했습니다.

winforms에서는 지역화 작업이 폼에 있는 Localizable 속성을 통해 Form.{locale}.resx 생성하고 Application에서 CultureInfo로 리소스 지역화 파일을 로드하는 수밖에 없는 것 같더라고요. (다른 방법이 있는지는 찾지 못했습니다.)

저는 지역화를 진행할 때 디자인 타임에서 관리되는 것들은 (Label.Text 등) Form.{locale}.resx로 관리를 하고 있고 런타임에서 지역화가 필요한 것들은(MessageBox 등) Resources 파일을 따로 만들어서 텍스트만 관리하고 있습니다. (Resources.{locale}.resx)

리소스에서 컨트롤 속성을 apply하는 순서가… 제가 분석한 것으로는 Form.{locale}.resx에 해당 컨트롤의 태그가 없으면 Form.resx에 있는 태그로 적용이 되는 것 같습니다.

해당 컨트롤 parent Form의 Language 속성이 (기본값)이 아닌 경우 속성을 수정하기만해도 Form.{locale}.resx에 수정된 속성으로 태그가 생기더라고요.

# Form.resx

<data name="button1.Location" type="System.Drawing.Point, System.Drawing">
     <value>240, 64</value>
  </data>
  <data name="button1.Text" xml:space="preserve">
    <value>테스트</value>
  </data>
# Form.ja.resx

# Parent Form Language 속성이 일본어인 경우 button1을 디자인 타임에서 위치 이동을 한 경우 생기게 됩니다.
<data name="button1.Location" type="System.Drawing.Point, System.Drawing">
    <value>326, 126</value>
  </data>
  <data name="button1.Text" xml:space="preserve">
    <value>테스또</value>
  </data>

그리고 폼 디자인을 수정할 때마다 다른 언어의 resx파일은 수정이 되지 않아 일일이 복사하여 새로 붙여 넣는 식으로 작업하였습니다…

한번이라도 수정된 속성이 있기 때문에 (기본값)에서 수정을 진행해도 Form.{locale}.resx가 아닌 Form.resx 태그 값이 바껴서 서로 다른 속성 값을 갖게 됩니다. 저도 컨트롤 위치를 바꿨는데 언어 별로 서로 다른 위치에 있어서 당황했었네요.

지역화라는 작업이… 이번에 winforms에서 처음 경험했는데 작업량이 만만치 않더라고요. 웹이나 다른 곳에서 .json이나 .yml 파일로 관리하는 것처럼 winforms은 .resx로 관리가 되는 것 같고, 이 노가다성? 작업은 어쩔 수 없는 것 같습니다.

그런데 가장 가장 큰 문제는 MR 시 코드 병합에서 resx가 충돌이 나는 경우인 것 같습니다. resx가 가끔 태그의 위치가 섞이게 되면서 충돌나는 경우가 있는데… 지옥을 맛봤습니다. :sob::sob:

1개의 좋아요