Как изменить язык
Изучаю C# по книге Марка Прайса, C#9 и .NET 5.
Есть класс Person:
using static System.Console;
namespace Packt.Shared {
public class Person
{
public string? Name;
public DateTime DateOfBirth;
}
}
Когда вывожу информацию о человеке:
var bob = new Person();
bob.Name = "Bob Smith";
bob.DateOfBirth = new DateTime(1965, 12, 22);
WriteLine(
format: "{0} was born on {1:dddd, d MMMM yyyy}",
arg0: bob.Name,
arg1: bob.DateOfBirth
);
выводится немного неприятный вывод:
Bob Smith was born on среда, 22 декабря 1965
Мой вопрос состоит в том, как мне изменить язык вывода. Для примера: вывод должен выглядеть как-то так:
Bob Smith was born on Wensday, 22 December 1965
Надеюсь всё понятно, если нет, пишите в комментариях.
Ответы (2 шт):
Нужно изменить культуру по умолчанию на Английский. Можно использовать инвариантную, так как она тоже "Английский".
Подключите неймспейс
using System.Globalization;
Добавьте в начало кода
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Можно и явно указать CultureInfo.CurrentCulture = new CultureInfo("en-US");
Зависит от потребностей:
инвариантная культура
a) Если вы работаете с данными, которые не зависят от региона и должны быть представлены в едином формате, инвариантная культура — хороший выбор. Но она не поддерживает региональные различия в форматировании. С ней могут возникнуть непредвиденные сценарии. Как-то мне попался комментарий, который я позволю себе процитировать:
конкретная культура
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