Я разрабатываю надстройку VSTO и хочу, чтобы она была локализована в соответствии с языковой версией офисного продукта. По идее вот как это сделать:
int lcid = Application.LanguageSettings.get_LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lcid);
Чтобы это работало, мне нужно, конечно, инициализировать Application
. Таким образом, самая ранняя точка, где я могу выполнить этот код, находится в обработчике события запуска. На данный момент, однако, CreateRibbonExtensibilityObject()
уже был вызван, поэтому, по крайней мере, заголовок моей пользовательской вкладки ленты будет отображаться на языке Windows, который может отличаться.
В классе ленты у меня есть обработчик для события onLoad, где я храню экземпляр IRibbonUI
для дальнейшего использования. Я мог бы передать этот экземпляр классу надстройки и позволить ему вызывать IRibbonUI.Invalidate()
. Но это кажется немного странным - создание ленты только для того, чтобы сделать ее недействительной пару микросекунд спустя. Поэтому я задаюсь вопросом - и спрашиваю здесь - существует ли более элегантный способ локализовать ленту надстройки vsto в соответствии с языковой версией офисного продукта.
(я видел этот похожий вопрос , но подход, предложенный там этим ответом , выглядит для меня еще хуже.)