Office 솔루션 전역화 및 지역화

Microsoft Office 솔루션의 전역화 및 지역화는 대부분의 측면에서 Visual Studio를 사용하여 다른 종류의 솔루션을 만드는 작업과 동일합니다. 일반적인 내용은 응용 프로그램 전역화 및 지역화를 참조하십시오. 전역화 및 지역화 정보는 MSDN 웹 페이지 Globalization and Localization Issues for Solutions Created with Microsoft Visual Studio Tools for the Microsoft Office System에서도 제공합니다.

적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

문서 텍스트 지역화

프로젝트의 문서, 템플릿 또는 통합 문서에 따라서는 어셈블리 및 기타 관리되는 리소스와는 별도로 지역화해야 할 정적 텍스트가 포함될 수 있습니다. 이를 수행하기 위한 간단한 방법은 문서의 복사본을 만들고 Microsoft Office Word나 Microsoft Office Excel을 사용하여 텍스트를 번역하는 것입니다. 여러 문서가 동일한 어셈블리에 연결되어 있을 수 있으므로 이 방법은 코드를 변경하지 않고도 수행할 수 있습니다.

그러나 이 경우에도 문서 텍스트와 상호 작용하는 코드의 각 부분이 텍스트의 언어에 계속하여 일치하는지 여부를 확인하고 각기 다른 문법과 텍스트 길이에 맞춰 조정해야 하는 Office 문서의 서식을 다시 적용하기에 책갈피, 명명된 범위 및 기타 표시 필드의 공간이 충분한지 여부를 확인해야 합니다. 비교적 적은 양의 텍스트가 들어 있는 문서 템플릿의 경우 텍스트를 리소스 파일에 저장한 다음 런타임에 텍스트를 로드할 수도 있습니다.

텍스트 방향

Excel에서는 텍스트를 오른쪽에서 왼쪽으로 렌더링하도록 워크시트의 속성을 설정할 수 있습니다. 호스트 컨트롤이나 RightToLeft 속성이 있는 모든 컨트롤을 디자이너에 배치하면 이러한 설정이 런타임에 자동으로 맞춰집니다. Word에는 양방향 텍스트에 대한 문서 설정이 없으며 텍스트 맞춤만 변경할 수 있으므로 컨트롤을 이 설정에 매핑할 수 없습니다. 대신 각 컨트롤에 대해 텍스트 할당을 설정해야 합니다. 모든 컨트롤에 적용하여 텍스트를 오른쪽에서 왼쪽으로 렌더링하는 코드를 작성할 수 있습니다.

문화권 변경

문서 수준 사용자 지정 코드는 일반적으로 Word 또는 Excel의 주 UI 스레드를 공유하므로 스레드 문화권에 대한 변경 내용은 해당 스레드에서 실행되는 모든 항목에 영향을 줍니다. 변경이 사용자 지정으로 제한되지는 않습니다.

Windows Forms 컨트롤은 호스트 응용 프로그램에서 응용 프로그램 수준 추가 기능을 시작하기 전에 초기화됩니다. 이 경우 UI 컨트롤을 설정하기 전에 문화권을 변경해야 합니다.

언어 팩 설치

Windows의 설정이 영어가 아닌 경우 Microsoft Visual Studio Tools for Office Runtime 언어 팩을 설치하여 Windows와 동일한 언어로 Microsoft Visual Studio Tools for Office Runtime 메시지를 볼 수 있습니다. 최종 사용자가 Windows의 설정이 영어가 아닌 경우 솔루션을 실행하려면 해당 언어 팩이 있어야 런타임 메시지가 Windows와 동일한 언어로 표시됩니다. Microsoft Visual Studio Tools for Office Runtime 언어 팩은 Microsoft 다운로드 센터에서 다운로드할 수 있습니다.

또한 ClickOnce 메시지에는 재배포 가능 .NET Framework 언어 팩이 필요합니다. .NET Framework 언어 팩은 Microsoft 다운로드 센터에서 다운로드할 수 있습니다.

지역 설정 및 Excel COM 호출

관리되는 클라이언트에서 COM 개체를 호출하고 문화권별 정보를 전달해야 할 때마다 현재 스레드 로캘에 일치하는 CurrentCulture(로캘)가 사용됩니다. 현재 스레드 로캘은 기본적으로 사용자의 국가별 설정에서 상속됩니다. 그러나 Visual Studio에서 Office 개발 도구를 사용하여 만든 Excel 솔루션에서 Excel 개체 모델에 대한 호출을 수행하면 영어(미국) 데이터 형식(로캘 ID 1033)이 Excel 개체 모델에 자동으로 전달됩니다. 날짜와 통화 같이 로캘에 따라 다른 서식을 사용하는 모든 데이터는 영어(미국) 데이터 형식을 사용하여 서식을 지정해야 해당 데이터를 Microsoft Office Excel로 전달하거나 프로젝트 코드에서 읽을 수 있습니다. 자세한 내용은 여러 가지 국가별 설정으로 Excel의 데이터 서식 지정를 참조하십시오.

데이터 저장을 위한 고려 사항

데이터가 올바르게 해석 및 표시되도록 하려면 응용 프로그램에서 Excel 워크시트 수식과 같은 데이터를 강력한 형식의 개체 대신 문자열 하드 코드된 리터럴로 저장할 경우 문제가 발생할 수 있음을 고려해야 합니다. 고정 문화권 또는 영어(미국)(LCID 값 1033) 스타일을 사용하여 서식이 지정된 데이터를 사용해야 합니다.

문자열 리터럴을 사용하는 응용 프로그램

하드 코드되었을 수 있는 가능한 값에는 영어(미국) 형식에서 작성된 날짜 리터럴과 지역화된 함수 이름을 포함하고 있는 Excel 워크시트 수식이 포함됩니다. 다른 가능한 값은 "1,000"과 같은 숫자가 포함되어 있는 하드 코드된 문자열입니다. 일부 문화권에서 이 값은 1000으로 해석될 수 있지만 다른 문화권에서는 1.0으로 해석될 수도 있습니다. 잘못된 형식으로 수행된 계산 및 비교는 잘못된 데이터 결과를 초래합니다.

Excel에서는 문자열과 함께 전달된 LCID에 따라 모든 문자열을 해석합니다. 이는 문자열 형식이 전달된 LCID와 일치하지 않는 경우에 문제가 됩니다. Visual Studio에서 Office 개발 도구를 사용하여 만든 Excel 솔루션은 모든 데이터를 전달할 때 LCID 1033(en-US)을 사용합니다. Excel에서는 국가별 설정과 Excel 사용자 인터페이스 언어에 따라 데이터를 표시합니다. VBA(Visual Basic for Applications)는 문자열의 서식을 en-US로 지정하고 VBA에서 LCID로 거의 항상 언어 중립적인 0을 전달하는 방식으로도 작동합니다. 예를 들어 다음 VBA 코드에서는 현재 사용자 로캘 설정에 따라 2004년 5월 12일에 해당하는 값을 올바르게 형식 지정하여 표시합니다.

'VBA
Application.ActiveCell.Value2 = "05/12/04"

Visual Studio에서 Office 개발 도구를 사용하여 만든 솔루션에서 사용되고 COM interop을 통해 Excel에 전달되는 동일한 코드는 날짜 서식을 en-US 스타일로 지정하는 경우 동일한 결과를 생성합니다.

예를 들면 다음과 같습니다.

Me.Range("A1").Value2 = "05/12/04"
this.Range["A1", missing].Value2 = "05/12/04";

따라서 가능한 한 문자열 리터럴 대신 강력한 형식의 데이터를 사용해야 합니다. 예를 들어 데이터를 문자열 리터럴에 저장하는 대신 Double로 저장한 다음 이를 DateTime 개체로 변환하여 조작할 수 있습니다.

다음 코드 예제에서는 사용자가 A5 셀에 입력한 데이터를 가져와서 Double로 저장한 다음 이를 DateTime 개체로 변환하여 A7 셀에 표시합니다. A7 셀은 날짜를 표시하도록 형식 지정되어 있어야 합니다.

Private Sub ConvertDate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles ConvertDate.Click

    Try
        Dim dbl As Double = Me.Range("A5").Value2
        Dim dt As System.DateTime = System.DateTime.FromOADate(dbl)
        Me.Range("A7").Value2 = dt

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub
private void ConvertDate_Click(object sender, EventArgs e)
{
    try
    {
        double dbl = (double)(this.Range["A5", missing].Value2);
        System.DateTime dt = System.DateTime.FromOADate(dbl);
        this.Range["A7", missing].Value2 = dt;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Excel 워크시트 함수

워크시트 함수 이름은 Excel의 거의 모든 언어 버전에서 내부적으로 번역됩니다. 그러나 언어 및 COM interop 문제가 발생할 가능성을 완전히 배제할 수 없으므로 코드에는 영어 함수 이름만 사용하는 것이 좋습니다.

외부 데이터를 사용하는 응용 프로그램

레거시 시스템에서 en-US 이외의 형식을 사용하여 내보내기된 쉼표로 구분된 값(CSV 파일)을 포함하는 파일과 같은 외부 데이터를 열거나 사용하는 모든 코드도 영향을 받을 수 있습니다. 데이터베이스가 날짜를 문자열로 저장하거나 이진 형식을 사용하지 않는 작업을 수행하는 경우를 제외하고 모든 값은 이진 형식이어야 하므로 데이터베이스 액세스는 영향을 받지 않을 수 있습니다. 또한 Excel의 데이터를 사용하여 SQL 쿼리를 작성하는 경우 어떠한 함수를 사용하는지에 따라 쿼리가 en-US 형식인지 확인해야 할 수도 있습니다.

참고 항목

작업

방법: Office 다국어 사용자 인터페이스 대상 선택

개념

여러 가지 국가별 설정으로 Excel의 데이터 서식 지정

Office 솔루션의 선택적 매개 변수

기타 리소스

Office 솔루션 디자인 및 만들기