Можно и явно указать CultureInfo.CurrentCulture = new CultureInfo("en-US");
Зависит от потребностей:
инвариантная культура
a) Если вы работаете с данными, которые не зависят от региона и должны быть представлены в едином формате, инвариантная культура — хороший выбор. Но она не поддерживает региональные различия в форматировании. С ней могут возникнуть непредвиденные сценарии. Как-то мне попался комментарий, который я позволю себе процитировать:
For those looking for the 5 second answer:
CultureInfo.InvariantCulture means "I don't care, I don't want culture
involved in the first place. Now let me use the dumb thing."
конкретная культура
b) Если ваши пользователи ожидают видеть данные в формате, соответствующем их региону, или если вы хотите точно настроить форматирование (например, для англоязычных пользователей в разных странах), используйте конкретные культуры.
я использую переводы, и там работает система CurrentCulture
можно скомбинировать со своей установленной культурой например вот как -
Этот подход позволяет временно переключиться на нужную культуру для форматирования, а затем восстановить исходные настройки своей системы.
var bob = new Person();
bob.Name = "Bob Smith";
bob.DateOfBirth = new DateTime(1965, 12, 22);
// Сохранение текущей культуры, чтоб потом в finally вернуть
CultureInfo originalCulture = CultureInfo.CurrentCulture;
try
{
// Явная установка культуры на английский язык
CultureInfo.CurrentCulture = new CultureInfo("en-US");
WriteLine(
format: "{0} was born on {1:dddd, d MMMM yyyy}",
arg0: bob.Name,
arg1: bob.DateOfBirth
);
}
finally
{
// Восстановление оригинальной культуры установленной на компьтере
CultureInfo.CurrentCulture = originalCulture;
}
// Можно вывести данные в конце в исходной культуре. чтоб посмотреть результат
WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);
приведу вот какой базовый примитивный пример для перевода текста, чтоб Боб мог существовать на всех языках:
using System.Globalization;
using static System.Console;
public class Person
{
public string? Name;
public DateTime DateOfBirth;
}
// Используем enum для текстовой фразы
public enum TranslationKey
{
WasBornOn
}
class Program
{
static void Main()
{
var bob = new Person();
bob.Name = "Bob Smith";
bob.DateOfBirth = new DateTime(1965, 12, 22);
// Пример перевода
string translatedText = Translate(TranslationKey.WasBornOn);
WriteLine(
format: "{0} {1} {2:dddd, d MMMM yyyy}",
arg0: bob.Name,
arg1: translatedText,
arg2: bob.DateOfBirth
);
}
static string Translate(TranslationKey key)
{
// Получение текущей культуры
CultureInfo currentCulture = CultureInfo.CurrentCulture;
// Пример перевода в зависимости от текущей культуры
switch (currentCulture.Name)
{
case "fr-FR":
if (key == TranslationKey.WasBornOn)
return "est né le";
break;
case "ru-RU":
if (key == TranslationKey.WasBornOn)
return "родился";
break;
// Добавьте другие культуры по мере необходимости
}
// Если перевода для текущей культуры не найдено, возвращаем ключ как строку
return key.ToString();
}
}
Консоль
Bob Smith est né le mercredi, 22 décembre 1965