.net - example - cultureinfo c# español
localizar el complemento VSTO de acuerdo con el idioma del producto de la oficina (1)
Siempre puede anular el método CreateRibbonExtensibilityObject
o posiblemente anular algunos de los otros métodos AddInBase ( BeginInit, Initialize, etc. ) para enganchar en la ubicación correcta en el ciclo de vida de la carga AddIn.
He reemplazado el CreateRibbonExtensibilityObject
antes para asegurarme de que el código de inicialización se ejecute antes de que se cargue la cinta. Me di cuenta de que los eventos CreateRibbonExtensibilityObject
y Startup
se activan en momentos aleatorios. A veces, el Startup
ocurre primero, a veces CreateRibbonExtensibilityObject
dispara primero. Tuve que sincronizar manualmente los dos eventos para garantizar que cualquier código de inicialización se ejecuta antes de la creación de la cinta. Si CreateRibbonExtensibilityObject
primero, el objeto Aplicación aún no se ha creado.
Pruebe este enfoque en CreateRibbonExtensibility
:
Outlook.Application app = this.GetHostItem<Outlook.Application>(typeof(Outlook.Application), "Application");
int lcid = app.LanguageSettings.get_LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lcid);
Esto recuperará una referencia a la instancia de la Application
para usted, independientemente de si ya se ha cargado en Initialize
.
Estoy desarrollando un complemento VSTO y quiero que esté localizado de acuerdo con la versión de idioma del producto de oficina. En teoría, así es como hacerlo:
int lcid = Application.LanguageSettings.get_LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lcid);
Para que esto funcione, necesito que la Application
se inicialice, por supuesto. Así que el primer punto donde puedo ejecutar este código está en el controlador de eventos de inicio. En este punto, sin embargo, CreateRibbonExtensibilityObject()
ya se ha llamado, por lo que al menos el título de mi pestaña de cinta personalizada se mostrará en el idioma de Windows, que podría ser diferente. En la clase de ribbon tengo un controlador para el evento onLoad, donde IRibbonUI
una instancia de IRibbonUI
para su uso posterior. Podría pasar esta instancia a la clase de complemento y dejar que llame a IRibbonUI.Invalidate()
en él. Pero esto parece ser un poco extraño: crear una cinta para invalidarlo un par de microsegundos después. Entonces me pregunto - y pregunto aquí - si hay una manera más elegante de localizar la cinta de un vsto de acuerdo con la versión del idioma del producto de la oficina.
(He visto esta pregunta similar , pero el enfoque ofrecido por esta respuesta me parece incluso peor).