[Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라

2024. 7. 31. 09:00·독서/Effective C#


01. FormattableString.. 이게 도대체 뭐야?

나는 글을 포스팅하면 읽은 내용을 바로 올리는 것보다는 천천히 올리는 것을 선호한다. 지금 글을 작성하는 시점에서 Effective C# 책의 Item#12까지 읽었는데 가장 애매한 부분이 지금 작성하는 Item#5였다.

 

FormattableString? 이게 도대체 뭔데.. 문화권별로 다른 문자열을 생성해주는 것임은 알겠는데 사용 경험이 없으니까.. Effective C# 책에 나올 내용인가 싶었다.

 

실제로 다른 분들의 블로그에서 FormattableString의 사용 경험이 있는지를 검색하기 위해서 다양한 검색어로 서칭해봤다. 대부분이 나와 같이 공부한 Effective C# 책 내용을 작성하기 위해서 올린 것이 대부분이라서 찾기 어려웠다. 그래도 나름의 결론은 챙겼다.

 

게임 출시에 앞서 로컬라이징을 준비하고 있는 상태라고 생각해보자. 출시 국가는 한국과 미국이다. 그러면 DB에 한글 텍스트와 영문 텍스트를 작성하고 Key 값을 통해서 호출하는 방식으로 언어 변경을 대응한다. 이 부분에서 FormattableString이 할 수 있는 역할이 있을까? 결론은 있다.

 

언어권마다 기호를 표기하는 방법이 다를 수 있기 때문에 이를 해결하는 방법으로 사용할 수 있다. 예시로 책에 나온대로 미국식 소수점 표현 방법인 '.'을 대다수 유럽 국가에서 사용하는 소수점 기호 ','로 변경할 수 있는 것이다.

 


02. FormattableString

간단하게 짚고 넘어가자. C# 6.0 버전에 포함된 기능으로 문화권을 고려하여 문자열을 생성할 수 있다. 

string first = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";
FormattableString second = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";
var vs = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";

 

위 코드에서 var로 선언한 변수 vs의 타입은 string 타입일 수 있으며 FormattableString 타입이 될 수 도 있다. 다음은 사용 방법에 대한 코드다.

 

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        float value = 123.456f;

        // FormattableString 사용
        FormattableString message = $"{value}";

        // 문화권 설정을 독일로 변경
        CultureInfo culture = new CultureInfo("de-DE");

        // 출력
        Console.WriteLine(message.ToString(culture));
        Console.WriteLine(value.ToString());
    }
}

 

 

'독서 > Effective C#' 카테고리의 다른 글

[Effective C#] 델리게이트를 이용하여 콜백을 표현하라  (0) 2024.08.02
[Effective C#] nameof() 연산자를 적극 활용하라  (0) 2024.08.01
[Effective C#] string.Format()을 보간 문자열로 대체하라  (0) 2024.07.30
[Effective C#] 캐스트보다는 is, as가 좋다  (0) 2024.07.29
[Effective C#] const보다는 readonly가 좋다.  (1) 2024.07.24
'독서/Effective C#' 카테고리의 다른 글
  • [Effective C#] 델리게이트를 이용하여 콜백을 표현하라
  • [Effective C#] nameof() 연산자를 적극 활용하라
  • [Effective C#] string.Format()을 보간 문자열로 대체하라
  • [Effective C#] 캐스트보다는 is, as가 좋다
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라
    상단으로

    티스토리툴바