문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라.
[ Content ]
# FormattableString
. C# 6.0에서 추가된 클래스입니다.
. 문자열 보간 기능의 결과로 생성되는 반환값으로 문자열일 수도 있지만, FormattableString을 상속한 타입일 수도 있습니다.
. FormattableString은 문자열의 조립을 돕는 기능이 있어, 문화권과 언어를 지정하여 문자열을 생성하는데 활용할 수 있습니다.
1 2 3 4 5 6 7 | String s = $ "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"; FormattableString fs = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month"; | cs |
. var로 선언하면 위 변수 vs는 string 객체가 될 수도 있겠지만, FormattableString을 상속한 타입의 객체가 될 수도 있습니다.
# 활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System; using System.Globalization; namespace GlobalString { class Program { static void Main(string[] args) { FormattableString fs = $"{Math.PI}"; Console.WriteLine(fs); Console.WriteLine(ToGerman(fs)); } public static string ToGerman(FormattableString src) { return string.Format( CultureInfo.CreateSpecificCulture("de-De"), src.Format, src.GetArgument(0)); } } } | cs |
: 위 예제의 결과는 다음과 같이 출력됩니다.
3.1415 3,1415 |
미국식 표기법인 '.'이 변환되어 ','로 출력되는 것을 볼 수 있습니다.
[ Digression ]
사실 큰 필요성을 느끼진 못했습니다. 실제로는 로컬라이징을 위해 문자를 그대로 사용하기보다는 키 값을 이용하여 국가에 맞게 대응하는 데이터를 뿌려주도록 작업합니다. 그러나 대응 영역은 어디까지나 문자에 대한 대응이고, 위의 예제와 같이 기호에 대한 언어 문화가 적용될 필요가 있다면 유용할 것 같습니다.
참 고 : Effective C#
'책 > Effective C#' 카테고리의 다른 글
Item 7. 델리게이트를 이용하여 콜백을 표현하라. (0) | 2019.03.27 |
---|---|
Item 6. nameof( ) 연산자를 적극 활용하라. (0) | 2019.01.31 |
Item 4. String.Format()을 보간 문자열로 대체하라. (0) | 2019.01.11 |
Item 3. 캐스트보다는 is, as가 좋다. (0) | 2018.10.26 |
Item 2. const보다는 readonly가 좋다. (0) | 2018.09.28 |