問(wèn)題與現(xiàn)象
多語(yǔ)言開(kāi)發(fā)是一件成本很高的事情。
很多公司會(huì)退而求其次選擇只開(kāi)發(fā)英文版本的軟件分發(fā)到不同國(guó)家,但這里仍存在不同問(wèn)題。
我們就遇到了這樣的問(wèn)題,參考下面的代碼。
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 ,result o8i0key");
輸出為:
tostring result 1,5
try parse succes True,result 15
在開(kāi)發(fā)中,我們會(huì)把很多參數(shù)配置化(包括浮點(diǎn)數(shù))寫到配置文件中,但讀取配置文件時(shí),我們就會(huì)發(fā)現(xiàn)讀取出來(lái)的浮點(diǎn)數(shù)解析不對(duì)了。
原因解決方案
原因
雖然都用英語(yǔ),但印尼地區(qū)表示小數(shù)使用逗號(hào)來(lái)分隔整數(shù)與小數(shù)部分(很多國(guó)家,比如德國(guó)等都用這種,大家自行用上面的例子試一下,參考地區(qū)與語(yǔ)言代碼)
另一個(gè)例子是攝氏度的符號(hào)"°C" 和 "℃"
, 請(qǐng)具體參考
攝氏度的中文英文處理方式, 我們?cè)诒容^字符串的時(shí)候會(huì)經(jīng)常遇到這個(gè)問(wèn)題。
解決方案
有很多方式可以處理這些問(wèn)題,一方面我們可以像例子中指定本地化信息。 TryParse等函數(shù)可以明確的傳參處理所有的TryParse的參數(shù)。這里主要說(shuō)下不改代碼如何解決這個(gè)問(wèn)題)。
修改本地賬戶的語(yǔ)言與地區(qū)信息,win11的新設(shè)置界面可以改,也可以直接Win+R 輸入Control打開(kāi)老版本的控制面板。在時(shí)間與區(qū)域中修改小數(shù)等的顯示格式。
很多人會(huì)發(fā)現(xiàn)當(dāng)前啟動(dòng)的用戶客戶端程序已經(jīng)正確了,但是服務(wù)還不正常,這是因?yàn)榉?wù)默認(rèn)會(huì)使用SYSTEM賬戶啟動(dòng),但是SYSTEM賬戶會(huì)使用當(dāng)前Windows安裝包安裝時(shí)的默認(rèn)的本地語(yǔ)言或多語(yǔ)言版本選擇的語(yǔ)言導(dǎo)致問(wèn)題。由于SYSTEM賬戶無(wú)法登陸,我們可以在賬戶管理中啟用Administrator賬戶,再修改該賬戶的語(yǔ)言與地區(qū)為英語(yǔ)(美國(guó)),然后在服務(wù)管理器把你有問(wèn)題的服務(wù)指定使用該賬戶就可以解決了。
參考:
- C# 多語(yǔ)言國(guó)際化問(wèn)題中的 CultureInfo
- # C# 設(shè)置線程的默認(rèn)CultureInfo
?
該文章在 2024/10/17 18:01:06 編輯過(guò)