在 .Net 6 控制臺應用程式中,我Strings在一個單獨的庫專案中設定了一個 String 資源,這樣String.MyStringStrings.resx 中的“string”和 Strings.sv.resx 中的“foreign string”...這是通過簡單地添加來完成的一個新的資源檔案到專案并使用可視化工具添加字串。
我想始終將我的應用程式文化設定為語言環境“sv”,所以我撰寫了這段測驗代碼:
internal class Program
{
private static async Task Main(string[] args)
{
var culture = CultureInfo.CreateSpecificCulture("sv");
Console.WriteLine($"1: {Strings.MyString}");
CultureInfo.DefaultThreadCurrentCulture = culture;
Console.WriteLine($"2: {Strings.MyString}");
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine($"3: {Strings.MyString}");
Strings.Culture = culture;
Console.WriteLine($"4: {Strings.MyString}");
...
輸出:
1:字串
2:字串
3:字串
4:外來字串
我的期望是只有第一行是"string"因為我改變了文化。強行更改本地化Strings是唯一可行的方法,而且似乎是一種非常糟糕的方法。
我見過的每個例子似乎都支持Thread方法 (3) 那么什么不起作用呢?不Strings應該使用執行緒/應用程式語言環境嗎?
uj5u.com熱心網友回復:
不確定之間的確切區別,CurrentUICulture但更改 CurrentUICulture 足以應用更改。CurrentCultureThread.CurrentThread
我在專案中有兩個檔案:
Strings.resx - 默認區域性字串位于此處(英語)
Strings.ru.resx - 俄語翻譯的字串在這里
Console.WriteLine($"Default culture: {Strings.TestString}"); var ruCulture = new CultureInfo("ru"); Thread.CurrentThread.CurrentUICulture = ruCulture; Console.WriteLine($"{ruCulture}: {Strings.TestString}");
輸出:
Default culture: English
ru: Русский
作為旁注,無論您的默認實際文化是什么 - 它都會在主 *.resx 檔案(沒有文化后綴)中搜索資源。
但是,當更改為替代文化時,將搜索后綴為 .resx 的檔案(在我的例子中為 .ru.resx)。
PS:Rider 有很好的設計器,可以從單一表單編輯多個檔案。不確定 Visual Studio。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535006.html
