Локализация надстройки Office на основе используемого языкового пакета Office, а не текущего языка Windows - PullRequest
5 голосов
/ 04 ноября 2011

Я пытаюсь локализовать свою надстройку для офиса, я прочитал много документов и учебных пособий о том, как это сделать, но все они учат тому, как локализовать его в зависимости от того, какой язык Windows используется сейчас, а не обязательно от используется пакет офисного языкового интерфейса.

Таким образом, я попал в ситуацию, когда мой язык Windows - французский, у меня нет пакетов офисных языковых интерфейсов, поэтому все мои меню в Office на английском, кроме моей надстройки на французском. Это выглядит странно, поэтому мне было интересно, есть ли способ локализации на основе текущего используемого пакета офисного языкового интерфейса.

Ответы [ 4 ]

4 голосов
/ 01 августа 2012

Я обнаружил, что значение Thread.CurrentThread.CurrentCulture соответствует моей системной культуре, а значение Thread.CurrentThread.CurrentUICulture соответствует пользовательскому интерфейсу Office.

Поэтому я просто назначил одно другому при запуске надстройки,Кажется, работает.

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
2 голосов
/ 09 ноября 2011

Это был мой подход к решению этой проблемы. Я в основном прочитал ключи реестра, которые предложил Рон, и ввел культуру в установленную языковую культуру. Я поддерживаю только Office 2007 и Office 2010. Это отстой, что нам приходится просматривать записи реестра CU и LM для каждой версии Office, и нет единой внутренней переменной, указывающей нам правильный путь в реестре. Решение заключается в следующем:

int languageCode = 1033; //Default to english

const string keyEntry = "UILanguage";

if (IsOutlook2010)
{
    const string reg = @"Software\Microsoft\Office\14.0\Common\LanguageResources";
    try
    {
        RegistryKey k = Registry.CurrentUser.OpenSubKey(reg);
        if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);

    } catch { }

    try
    {
        RegistryKey k = Registry.LocalMachine.OpenSubKey(reg);
        if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
    } catch { }
}
else
{
    const string reg = @"Software\Microsoft\Office\12.0\Common\LanguageResources";
    try
    {
        RegistryKey k = Registry.CurrentUser.OpenSubKey(reg);
        if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
    } catch { }

    try
    {
        RegistryKey k = Registry.LocalMachine.OpenSubKey(reg);
        if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
    } catch { }
}

Resource1.Culture = new CultureInfo(languageCode);

Resource1 - это мой словарь ресурсов, и параметр культуры заставляет все строки переопределяться с этой культурой при использовании.

2 голосов
/ 16 декабря 2011

Есть страница MSDN на Загрузка ресурсов на основе языка интерфейса пользователя Office . Приведенный там пример кода работает для меня. Он использует LanguageSettings из объекта Application для определения текущего языка пользовательского интерфейса Office. До сих пор я тестировал его с Word 2010 и Outlook 2010, и я уверен, что он работает и с другими продуктами Office 2010. Я ничего не могу сказать о Office 2007, но я бы попробовал, поскольку это намного проще, чем запросить реестр.

Для подробного вопроса о том, как использовать этот подход Я только что получил ответ от некоторого полезного пользователя SO.

1 голос
/ 04 ноября 2011

читать немного в http://technet.microsoft.com/en-us/library/cc179091%28office.12%29.aspx

Вы можете прочитать раздел реестра «HKCU \ Software \ Microsoft \ Office \ 12.0 \ Common \ LanguageResources \ UILanguage», чтобы определить, какой язык интерфейса.

...