.NET應用多語言-葡萄牙語軟體,如何處理在地化,特別是數位的轉換和計算

2023-09-08 12:02:06

在葡萄牙語軟體中,數位在地化通常涉及小數點和千位分隔符的使用。在葡萄牙語中,小數點用「,」表示,而不是英語中使用的「.」。千位分隔符通常是一個空格或一個點。

例如:62.5,其實代表的不是62.5 而是625M

 

為了正確地處理數位在地化,可以使用.NET框架中提供的CultureInfo類。此類允許您指定當前執行緒的區域設定,以便在處理數位時使用正確的格式和分隔符。例如,以下程式碼演示如何將字串 "62,5" 轉換為 decimal 型別的數值:

// 設定當前執行緒的區域設定為葡萄牙語
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-PT");
// 將字串 "62,5" 轉換為 decimal 型別的數值
decimal val = decimal.Parse("62,5");

在計算數位時,確保使用正確的分隔符和格式。例如,以下程式碼演示如何將兩個 decimal 型別的值相加:

// 設定當前執行緒的區域設定為葡萄牙語
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-PT");
// 將兩個 decimal 型別的值相加
decimal val1 = decimal.Parse("62,5");
decimal val2 = decimal.Parse("37,5");
decimal result = val1 + val2;

在處理數位時,還要記住在輸出數位時使用正確的格式和分隔符。例如,可以使用ToString方法將 decimal 型別的值格式化為字串,並指定要使用的格式和分隔符。例如:

// 設定當前執行緒的區域設定為葡萄牙語
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-PT");
// 格式化 decimal 型別的值為字串,並使用正確的格式和分隔符
decimal val = decimal.Parse("62,5");
string formattedVal = val.ToString("N2"); // 輸出為 "62,50"

總結一下:

應用軟體實現了多語言,這僅僅是國際化的第一步

系統需要繼續做在地化處理,在地化主要涉及時間、數位、貨幣等一系列的問題

本範例中,對於數位的處理,在葡萄牙語中需要使用正確的格式和分隔符,在葡萄牙語中,小數點用「,」表示,而不是英語中使用的「.」。千位分隔符通常是一個空格或一個點

從前端輸入這些數位,到後臺儲存、計算這些數位,都需要單獨特殊處理,即在地化實現。

 可以封裝一下多語言在地化工具類,負責字串、數位的轉換

internal class MultiLangUtils
    {
        public void ConvertToDecimal(string numStr= "1234.56")
        {
            // 建立一個表示葡萄牙語環境的CultureInfo物件
            CultureInfo ptCulture = new CultureInfo("pt-PT");

            // 數位轉換為葡萄牙語格式           
            double num = double.Parse(numStr, CultureInfo.InvariantCulture);
            string ptNumStr = num.ToString("N2", ptCulture);
            Console.WriteLine($"數位{numStr}在葡萄牙語環境下的格式為{ptNumStr}");           
        }

        public void ConvertToString(double num2) 
        {
            // 建立一個表示葡萄牙語環境的CultureInfo物件
            CultureInfo ptCulture = new CultureInfo("pt-PT");

            // 葡萄牙語格式轉換為數位
            string ptNumStr2 = "1.234,56";
            num2 = Convert.ToDouble(ptNumStr2);
            string enNumStr = num2.ToString("N2", CultureInfo.InvariantCulture);
            Console.WriteLine($"葡萄牙語格式{ptNumStr2}在英語環境下的格式為{enNumStr}");
        }
    }

 

 

周國慶

2023/9/8