텍스트의 자리 표시자를 개체의 값으로 바꾸기

3973 단어 dotnet
플랫폼: .NET

다국어 웹사이트 또는 앱에서 작업하거나 개인화된 확인 이메일을 보내야 하는 경우 텍스트를 리소스 파일이나 데이터베이스에 리소스로 저장하는 경우가 많습니다.

이러한 작업 방식은 번역가가 텍스트를 번역하고 개발자가 웹사이트/앱을 구축할 수 있도록 하는 데 유용합니다.

텍스트는 다른 자리 표시자를 보유할 수 있으며 다음 Nuget 패키지(CodeHelper.Core.PlaceHolder)를 사용하면 자리 표시자를 지정된 개체의 값으로 쉽게 바꿀 수 있습니다.

전제 조건


  • CodeHelper.Core.PlaceHolder

  • 예제 텍스트



    주문 확인 메일을 이용합시다

    Hi {CUSTOMERNAME},
    <br />
    Your order #{ORDERID} is confirmed and will be shipped out of our warehouse on {SHIPMENTDATE}
    <br />
    <b>Total Details</b><br />
    Number of items: {NBOFITEMS}<br />
    Total amount: {TOTALAMOUNT}
    <br /><br />
    Items:
    {LISTOFITEMS}
    


    OrderInfo 클래스



    주문 정보가 포함된 클래스부터 시작하겠습니다.
    우리가 해야 할 유일한 일은
  • CodHelper.Core.PlaceHolder를 사용하여 추가
  • 자리 표시자 속성을 클래스에 적절하게 추가합니다
  • .

    자리 표시자 속성에는 텍스트에 사용되는 자리 표시자 값(문자열)과 선택적인 형식(문자열)이 필요합니다.

    using CodeHelper.Core.PlaceHolder;
    
    public class OrderInfo 
         {        
            [Placeholder("{ORDERID}")] 
            public Int64 ID { get; set; }
    
            public Int64 CustomerID { get; set; }
    
            [Placeholder("{CUSTOMERNAME}")] 
            public string CustomerName { get; set; } ="";
    
            [Placeholder("{SHIPMENTDATE}", "MMM dd, yyyy")]
            public DateTime DateShipmentDate { get; set; }
    
            public DateTime DateOrder{ get; set; }
    
            [Placeholder("{NBOFITEMS}", "#,##0")]
            public int NbShippedItems { get { return ShippedItemDescriptions.Count; } }
    
            [Placeholder("{TOTALAMOUNT}", "#,###,##0.00")]
            public double TotalAmount { get; set; }
    
            [Placeholder("{LISTOFITEMS}")]
            public List<string> ShippedItemDescriptions { get; set; } = new();
    
            public OrderInfo() { }         
        }
    


    코드



    대체 문자열 확장에는 다음 매개변수가 있습니다.
  • _order: 값이 있는 객체
  • false: 텍스트가 URL인지 여부를 나타냅니다. true인 경우 빈 매개변수가 생략됩니다. 이 예에서는 URL이 아니므로 false입니다.
  • FormatTypes.HTML: 텍스트, HTML 또는 Markdown(기본값: FormatTypes.TEXT)

  • using CodeHelper.Core.PlaceHolder;
    
    //-- get the order info
    OrderInfo _order = new() { ID = 99876, DateShipmentDate = DateTime.Today.AddDays(1) 
                                    , TotalAmount = 1234.50
                                    , CustomerID=333
                                    , CustomerName ="CodeHelper"
                                    , DateOrder= DateTime.Today };
        _order.ShippedItemDescriptions.Add("Product Description #1");
        _order.ShippedItemDescriptions.Add("Product Description # 2");
        _order.ShippedItemDescriptions.Add("Product Description # 3");
    
    //-- Get The Confirmation Email Text
    string emailBody = Resources.Translations.EmailConfirmOrder
    
    //-- Replace the placeholder inside the text with the values of 
    //-- the _order object
    emailBody = emailBody.Replace(_order, false, FormatTypes.HTML);
    


    결과



    이메일을 보낼 준비가 되었습니다...

    Hi CodeHelper,<br />
    Your order #99876 is confirmed and will be shipped out of our warehouse on Sept 09, 2022
    <br />
    <b>Total Details</b><br />
    Number of items: 3<br />
    Total amount: 1,234.50
    <br /><br />
    Items:
    <ul>
        <li>Product Description #1</li>
        <li>Product Description # 2</li>
        <li>Product Description # 3</li>
    </ul>
    


    장점



    마케팅 팀이 확인 이메일을 변경하거나 필드를 추가하거나 더 많은 언어로 번역하려는 경우 코드가 계속 작동합니다.

    자리 표시자를 추가하는 경우 필드에 속성을 추가하기만 하면 됩니다.

    좋은 웹페이지 즐겨찾기