Ответ и уточнение ответа.
1. Добавьте файл проекта Strings.resx в ваш проект (или другое имя файла)
2. Установите Access Modifier для Public Access Modifier (в открытой вкладке файла Strings.resx)
3. Добавьте строку resouce в файл resx: (пример: name Hello, значение Hello)
4. Сохранить файл ресурса
Visual Studio автоматически создает соответствующий класс
Strings, который фактически помещается в
Strings.Designer.cs. Класс находится в том же пространстве имен, в котором вы ожидаете, что будет создан новый созданный файл
.cs.
Этот код всегда печатает Hello, потому что это ресурс по умолчанию, и не доступны языковые ресурсы:
Console.WriteLine(Strings.Hello);
Теперь добавьте новый языковой ресурс:
1. Добавить Strings.fr.resx (для французского)
2. Добавьте строку с тем же именем, что и ранее, но другое значение: (name Hello, значение Salut)
Следующий код печатает Salut:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Strings.Hello);
Какой ресурс используется, зависит от
Thread.CurrentThread.CurrentUICulture. Он устанавливается в зависимости от языка интерфейса пользователя Windows или может быть установлен вручную, как в этом примере. Подробнее об этом читайте здесь.
Вы можете добавить ресурсы для конкретной страны, такие как
Strings.fr-FR.resx или
Strings.fr-CA.resx.
Строка, которая будет использоваться, определяется в этом порядке приоритета:
1. Из ресурсов, специфичных для конкретной страны, таких как
Strings.fr-CA.resx
2. Из языкового ресурса, такого как
Strings.fr.resx
3. По умолчанию
Strings.resx
Обратите внимание, что ресурсы, специфичные для языка, генерируют спутниковые сборки.
Также узнайте, как
CurrentCulture отличается от
CurrentUICulture
===
В чем разница между свойствами CurrentCulture и CurrentUICulture для CultureInfo в .NET?
CurrentCulture является .NET-представлением локали пользователя системы по умолчанию. Это контролирует число по умолчанию, форматирование даты и тому подобное.
CurrentUICulture относится к языку пользовательского интерфейса по умолчанию - настройке, введенной в Windows 2000. Это в первую очередь относится к части локализации/перевода пользовательского интерфейса вашего приложения.
Независимо от региональных параметров, в которых настроена система, это будут «текущие» значения в вашем .NET-приложении.
Часто они оба одинаковы. Но в моей системе они были бы другими: я предпочитаю свои цифры и даты в немецком формате, поэтому
CurrentCultureбудет немецкий, но я также предпочитаю все свои заявки на английском языке, поэтому
CurrentUICulture будет английский.
Есть хорошая статья на эту тему:
Сортировка всего: почему у нас есть как CurrentCulture, так и CurrentUICulture.
(EN)
Хороший способ изменить ситуацию в дополнение к приятным объяснениям, сделанным другими пользователями, и важный аспект в разработке веб-приложений заключается в следующем:
1.
CurrentCulture представляет настройку веб-сервера. Например, если ваше веб-приложение ASP.NET размещено в Германии, значение CutlureInfo.CurrentCulture, скорее всего, будет de-DE. Таким образом, стандартное .ToString()форматирование для IFormattableтипов будет использовать немецкое форматирование по умолчанию или те, которые были установлены в ОС сервера по умолчанию.
2.
CurrentUICulture может быть получен от пользовательского агента и может представлять культуру пользовательского интерфейса клиента, подключающегося к веб-сайту. Например, если вы загрузите этот сайт из России, ваши локальные настройки настроены на использование русского языка, и ваш пользовательский агент отправляет региональные настройки на сервере (Opera и IE сделать это автоматически, не уверен , что для Chrome и FireFox), то CurrenUICultureбудет представлять ru-RU. Это приведет к тому, что любые ресурсы, такие как локализованные строки, полученные с помощью ResourceManager, или выражения локализации в ASP.NET-файлах aspx / ascx будут на русском языке (если доступны переводы).
Отличия:
CurrentCulture для форматирования дат и валюты, в то время как
CurrentUICulture идет с языком/переводами. Он будет использоваться
ResourceManager для поиска ресурсов по культуре.
Пространство имен
CurrentCulture класса находится в
System.Globalization в то время как
CurrentUICulture приходит
System.Threading.
CurrentCulture сохраняется в разных запросах в сеансе, но
CurrentUICulture должен быть установлен для каждого запроса.
Сходство:
Они оба являются
System.Globalization.CultureInfo
примерами.
Стоит отметить, что он
CurrentUICulture поддерживает не специфичные для страны локали, такие как
en (нейтральные культуры), тогда как
CurrentCulture ТОЛЬКО поддерживает специфичные для страны локали, такие как
en-GB. Настройка
CurrentCulture на нейтральную культуру бросит
ArgumentException.
Я предполагаю, что это потому, что форматы, такие как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто взаимозаменяемы между странами.