Нестатическая переменная при создании массива
хочу сделать мультиязычность для некоторых переменных. В другом классе инициализирую для каждого пользователя класс MyVariables передавая в параметре значение выбираемого им языка.
public class MyVariables {
private const string RU_LANG = "RU";
private const string EN_LANG = "EN";
private string language = RU_LANG;
public MyVariables (string lang) {
language = lang;
}
public string one_message {
get {
switch (language) {
case EN_LANG:
return "Message";
case RU_LANG:
default:
return "Сообщение";
}
}
}
public string[] messages = new string[] { one_message };
}
Проблема в том, что при создании массива сообщений возникает ошибка A field initializer cannot reference the non-static field, method, or property на переменную one_message. Массив нужно сделать именно в классе MyVariables.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Перенесите инициазацию в конструктор.
public string[] messages;
public MyVariables (string lang)
{
language = lang;
messages = new string[] { one_message };
}
Но я так и не понял, зачем вам массив.
Если по-простому, на 2 языка, то бы сделал как-то так. Немного костыльно, на зато просто.
public enum Language
{
EN, RU
}
public static class Localization
{
private static readonly Dictionary<Language, string[]> _data = new()
{
[Language.RU] = new string[]
{
"Имя",
"Сообщение"
},
[Language.EN] = new string[]
{
"Name",
"Message"
}
};
public static Language Language = Language.EN;
public static string Name => _data[Language][0];
public static string Message => _data[Language][1];
}
Localization.Language = Language.RU;
string message = Localization.Message;