C # / WinForms에서 다국어 애플리케이션을 만드는 모범 사례? [닫은]


94

이 경우 작은 프로젝트에서 작업해야하기 때문에 C #에서 여러 언어에 적합한 애플리케이션을 만드는 방법을 찾고 있습니다. 기본적으로 두 가지 방법을 찾았습니다.

폼의 Localizable 속성을 true로 설정하고, Language 속성을 설정하고, 모든 레이블을 채우면 '완료'됩니다. 내가 본 주요 단점은 양식의 일부가 아닌 다른 항목을 여러 언어 (예 : 팝업 창, 로그 파일 또는 창 등)에 대해 준비하는 방법입니다.

리소스 파일 (예 : 'Lang.en-us.resx')을 만들고 모든 언어에 대해 하나씩 (예 : 'Lang.nl-nl.resx') 문자열로 채 웁니다. IDE가 자동으로 클래스를 생성하는 것 같으므로 코드에서 Lang.SomeText를 사용할 수 있습니다. 내가 볼 수있는 가장 큰 단점은 모든 양식에 대해 코드에서 모든 레이블과 기타 캡션을 직접 설정해야한다는 것입니다 (데이터 바인딩이 이러한 리소스에서 작동하지 않는 것 같습니다).

그러나 이것을 수행하는 다른 방법도 있다고 확신합니다.

그렇다면 모범 사례는 무엇입니까? 소규모 애플리케이션 (몇 가지 양식, 데이터베이스 연결 등)에 가장 쉬운 것은 무엇이며 대규모 애플리케이션에 가장 적합한 것은 무엇입니까?


3
건설적이지 않은 (또는 다른 "SO에 대해 유효하지 않은"유형의 질문)이 가장 귀중한 질문 중 하나라는 것을 알아 챘습니다. :)이 질문도 좋은 질문입니다. 다중 언어 추가 다중 언어 지원을 위해 사용하는 youtube.com/watch?v=SNIyP1QQdVs
Prokurors

1
때때로 인터넷 주변의 모든 지식 조각을 모으는 것이 너무 어렵습니다. 저는이 질문이 지금 매우 중요하다고 생각합니다. 분명히 소프트 질문을 닫는 것이 열린 상태로 두는 것보다 건설적이지 않을 때가 있습니다. 그리고 저는 이것이 그 때 중 하나라고 생각합니다. :)

답변:


20

저는 항상 다국어 응용 프로그램에 리소스 파일을 사용했습니다.
웹에서 사용 방법을 설명하는 많은 기사가 있습니다.

두 가지 다른 방법을 사용했습니다.

  • 양식당 리소스 파일
  • 전역 리소스 파일

리소스 파일 / 양식은 구현하기가 더 쉽고 리소스 파일에 값만 입력하면되지만 레이블이 응용 프로그램 전체에 분산되어 있기 때문에 유지 관리하기가 더 어렵습니다.

전역 리소스 파일을 사용하면 모든 레이블 (이미지 등)을 하나의 파일 (언어 별)에 중앙 집중화 할 수 있지만 양식로드에서 레이블을 수동으로 설정하는 것을 의미합니다. 이 파일은 오류 메시지 등에 사용할 수도 있습니다.

맛의 문제 ...

마지막으로, 영어와 프랑스어로 프로그램을 작성하고 "en-US"와 "fr-FR"이 아닌 "en"과 "fr"을 사용합니다. 일을 복잡하게하지 마십시오. 영어 (미국식, 영어, 호 주식 등)의 다양한 언어는 하나만 사용할 수있을만큼 차이가 거의 없습니다 (프랑스어도 마찬가지입니다).


2
때때로 방언에 대해 걱정해야합니다. 예를 들어 중국어 번체 (대만)와 중국어 간체 (중국 본토)에서 한자는 완전히 다릅니다.
MarkJ

1
@MarkJ MSDN 문서에 따르면 중국어 번체와 중국어 간체는 방언 (국가 / 지역)이 아니라 중립적 인 문화입니다. Msdn : "중립 문화는 국가 / 지역이 아닌 언어와 연관된 문화입니다. 특정 문화는 언어 및 국가 / 지역과 연관된 문화입니다. 예를 들어"fr "은 중립입니다. culture 및 "fr-FR"은 특정 문화입니다. "zh-CHS"(중국어 간체) 및 "zh-CHT"(중국어 번체)는 중립 문화입니다. "
광대역

나는 최근에 link 의 도움으로 이것을 했다. 거기에 언급되지 않은 2 단계 : 1. 모든 .resource 파일을 클릭하고 "Build Action"속성을 "Content"로 설정한다. 2. 모든 .resource 파일을 클릭하고 "출력 디렉터리로 복사"속성을 "항상 복사"로 설정합니다.
Sourav

1
@Kiquenet .NET 전체 지원을 포함한 완전한 (코드 포함) 답변은 다음을 참조하십시오. stackoverflow.com/a/35813707/2901207
CularBytes

9

저는 최근에 독일어와 영어를 모두 지원하는 프로그램을 작성했습니다. 내 영어 리소스를 LanguageResources.resx와 독일어 리소스 LanguageResources.de.resx로 지정하면 자동으로 올바른 언어가 선택된다는 사실에 놀랐습니다. ResXFileCodeGenerator가 모든 것을 처리했습니다.

두 파일의 필드는 동일했으며 아직 입력되지 않은 독일어 필드는 응용 프로그램에 영어로 표시됩니다. 가장 비 특정 파일 언어가 기본 파일이기 때문입니다. 문자열을 찾을 때 가장 구체적인 (예 : .de-DE.resx)에서 가장 덜 구체적인 (예 : .resx)으로 이동합니다.

문자열을 얻으려면 ResourceManager.GetString 또는 ResourceManager.GetObject 호출을 사용하십시오. 애플리케이션은 무료로 ResourceManager를 제공해야합니다.


6

이 문제를 접할 수있는 다른 사람들을 위해 (마지막 게시물 이후 1 년 이상), 저는 전체 번역 프로세스를 매우 쉽게 만들어주는 전문적인 현지화 제품의 저자입니다. 임의의 솔루션에서 모든 ".resx"문자열을 추출하여 무료 독립 실행 형 응용 프로그램을 사용하여 번역 할 수있는 단일 파일로로드하는 Visual Studio 추가 기능입니다 (번역자는 내 사이트에서 다운로드 할 수 있음). 그런 다음 동일한 추가 기능이 번역 된 문자열을 솔루션으로 다시 가져옵니다. 많은 내장 된 보호 장치, 많은 종소리와 휘파람, 온라인 도움말 (별로 필요하지 않음)을 통해 매우 쉽게 사용할 수 있습니다. 참조 http://www.hexadigm.com를


1
이것은 visualstudio에 기본 기능으로 추가되어야합니다! 훌륭한 소프트웨어!
Caverna

대단히 감사합니다 (감사합니다). 제품을 시작하기 전에 (약 10 년 전) 동의했을 것입니다.하지만 MSFT가 오늘 구현했다면 업무를 중단 할 것입니다. :)
Larry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.