У меня есть приложение wpf, и я начинаю его локализовать.Стратегия локализации, которую я выбрал, состояла в том, чтобы создать свой собственный класс MarkupExtension.
Я не буду использовать файлы .res, поскольку в моей компании уже существует решение, которое создает зашифрованную карту со всемистроки, и это требует, чтобы ключи int ссылались на каждую строку.Поэтому я написал собственный генератор, который создает перечисление со всеми ключами 'int' (это может быть статический класс с целочисленными значениями, это не имеет значения).
Поэтому я хочу сослаться на каждое из этих перечисленийключи в моих файлах XAML:
<Label Content="{l:Translator {x:Static l:TranslatedEnums.MainWindow_WelcomeMessage}}" />
Созданное перечисление равно TranslatedEnums
, и мой класс переводчика называется Translator
(dhu).
Но после прочтения x: Static Документация и документация для преобразователей типов , мне пришёл в голову следующий вопрос:
Оценивает ли "compiled xaml" (baml) каждый из этихтипы (через x: Static) во время выполнения или во время компиляции?
Я спрашиваю об этом, потому что одна из причин, по которой я статически ссылаюсь на значение перечисления, заключается в том, что у меня нетточный строковый ключ enum, а точнее его значение, которое усложнит взлом приложения.
Если разрешение выполняется во время выполнения, я мог бы сузить свой предыдущий код до:
<Label Content="{l:Translator MainWindow_WelcomeMessage}" />
Что потребует поиска для перечислениязначение мое, но это однострочный:
TranslatedEnums result;
Enum.TryParse(key, out result);
, который уменьшит код Xaml (что хорошо), но потерпит неудачу во время компиляции, если ключ не существует(что не проблема).