#c# #asp.net #.net
#c# #asp.net #.net
Вопрос:
У меня есть приведенный ниже класс, где я устанавливаю, какой язык должен быть «запущенным» языком на веб-сайте.
Прямо сейчас я просто добавляю / удаляю комментарии к языку, который я хочу выбрать, перед запуском / отладкой моего проекта.
Я хотел бы иметь возможность динамически изменять язык во время работы моего веб-сайта.
Как бы вы это сделали (я бы хотел избежать ее решения с использованием параметра сеанса или файла cookie, который закончится в какой-то день в будущем)
public class LanguageCodes
{
public const string DenmarkCode = "DK";
public const string SwedenCode = "SE";
}
public class LanguageFactory
{
public static readonly string CurrentLanguage =
LanguageCodes.DenmarkCode;
//LanguageCodes.SwedenCode;
public static AbstractLanguage Current {
get {
switch (CurrentLanguage)
{
case LanguageCodes.DenmarkCode: return new LanguageDK();
case LanguageCodes.SwedenCode: return new LanguageSE();
}
return null;
}
}
Комментарии:
1. Это уже доступно через . Сама СЕТЬ, в свойствах CurrentCulture и CurrentUICulture потока запроса. Это те свойства, которые управляют тем, какие строки ресурсов загружаются, как числа и даты форматируются и анализируются.
2. С другой стороны, если вы не используете Session или Cookie, изменение статической переменной будет применяться ко всем пользователям.
3. Почему вы хотите изменить веб-сайт? Клиент должен указать язык в запросе или получить язык по умолчанию от клиента.
4. Проверьте автоматический выбор языков Рика Страла для локализации в ASP.NET . Здесь показано, как вы можете настроить язык, используя различные методы, либо автоматически, либо из профиля пользователя.
5. Глобализация и локализация в ASP.NET Core в документах объясняет, как эти вещи работают в ASP.NET Ядро. Концепции аналогичны ASP.NET Веб-формы или MVC, так что это стоит прочитать
Ответ №1:
В вашей текущей реализации вы не можете этого сделать.
const
это известная при компиляции переменная, и ее нельзя редактировать даже с помощью reflections.
Единственный способ сделать это — написать программу, которая может редактировать свой собственный исходный код и перекомпилировать себя. Я думаю, вы не хотите этого делать.
Однако вы можете поиграть с
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
Если вы хотите сохранить изменение вашей реализации const
на static
public class LanguageCodes
{
public static string DenmarkCode = "DK";
public static string SwedenCode = "SE";
}
///
public static string CurrentLanguage
Комментарии:
1. Но все мои языковые свойства хранятся в моих собственных классах — я не использую пользовательские классы языка .net. Я просто делаю это: общедоступный класс LanguageDK: AbstractLanguage { общедоступная строка переопределения BeskedSkalUdfyldes => «Бескедовый скал udfyldes.»; Так что, я думаю, я не могу использовать Thred. currentThread. Текущая культура или?
2. Поэтому измените тип на «Static» без const.
3. @NickDeveloper почему вы пытаетесь изобрести велосипед? Вы не можете модифицировать язык, если не измените настройки CurrentCulture и CurrentUICulture. Независимо от того, что делают ваши классы, строки будут форматироваться с использованием CurrentCulture потока. Строки пользовательского интерфейса будут сгенерированы с использованием CurrentUICulture. Это описано в документации каждого ASP.NET stack — Webforms, MVC, ASP.NET Ядро
4. @Sebastian506563 если я правильно понял, Op не пытается изменить
DenmarkCode
orSwedenCode
(в конце концов, они постоянны и не связаны с текущим языком пользовательского интерфейса), ноCurrentLanguage
(который был объявлен какreadonly
, поэтому возникает аналогичная проблема)5. Это единственное решение для преобразования моих классов в классы родного языка / культуры .net? или я могу это исправить, удалив const? Смогу ли я тогда динамически изменять то, на что указывает переменная CurrentLanguage?
Ответ №2:
Сегодня я действительно увидел этот способ, который может быть полезен:
private const string someString="my name is {0}";
string newString = string.Format(someString, "Didi");
Комментарии:
1. Можете ли вы объяснить (отредактировать свой ответ), как это помогает OP с проблемой языка?