問題與現象
多語言開發是一件成本很高的事情。
很多公司會退而求其次選擇只開發英文版本的軟件分發到不同國家,但這里仍存在不同問題。
我們就遇到了這樣的問題,參考下面的代碼。
CultureInfo culture;double number =1.5;
culture = CultureInfo.CreateSpecificCulture("en-ID");
Thread.CurrentThread.CurrentCulture = culture;
var b = double.TryParse("1.5", out double d);Console.WriteLine($"tostring result {number.ToString()}");
Console.WriteLine($"try parse succes {b},result mpx4ypn");
輸出為:
tostring result 1,5
try parse succes True,result 15
在開發中,我們會把很多參數配置化(包括浮點數)寫到配置文件中,但讀取配置文件時,我們就會發現讀取出來的浮點數解析不對了。
原因解決方案
原因
雖然都用英語,但印尼地區表示小數使用逗號來分隔整數與小數部分(很多國家,比如德國等都用這種,大家自行用上面的例子試一下,參考地區與語言代碼)
另一個例子是攝氏度的符號"°C" 和 "℃"
, 請具體參考
攝氏度的中文英文處理方式, 我們在比較字符串的時候會經常遇到這個問題。
解決方案
有很多方式可以處理這些問題,一方面我們可以像例子中指定本地化信息。 TryParse等函數可以明確的傳參處理所有的TryParse的參數。這里主要說下不改代碼如何解決這個問題)。
修改本地賬戶的語言與地區信息,win11的新設置界面可以改,也可以直接Win+R 輸入Control打開老版本的控制面板。在時間與區域中修改小數等的顯示格式。
很多人會發現當前啟動的用戶客戶端程序已經正確了,但是服務還不正常,這是因為服務默認會使用SYSTEM賬戶啟動,但是SYSTEM賬戶會使用當前Windows安裝包安裝時的默認的本地語言或多語言版本選擇的語言導致問題。由于SYSTEM賬戶無法登陸,我們可以在賬戶管理中啟用Administrator賬戶,再修改該賬戶的語言與地區為英語(美國),然后在服務管理器把你有問題的服務指定使用該賬戶就可以解決了。
參考:
- C# 多語言國際化問題中的 CultureInfo
- # C# 設置線程的默認CultureInfo
?
該文章在 2024/10/17 18:01:06 編輯過