Есть ли хранилище для локализованного общего текста в WinForms? - PullRequest
2 голосов
/ 12 января 2011

Я глобализирую приложение формы Windows.

Есть ли способ получить доступ к общему тексту на текущем языке для Windows?

Например, для меток кнопок OK, Отмена и Принять; если я создаю форму с кнопкой ОК, я хотел бы использовать тот же перевод, который Windows использует везде для кнопок ОК.

Я знаю, что могу хранить их перевод сам, но Windows должна где-то их хранить, они дают разработчикам доступ к ним?

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Да, теоретически вы можете извлечь локализованные строки из внутренних системных файлов Windows. Но не делай этого. Преимущества значительно перевешиваются возможными недостатками. Ваше приложение не должно зависеть от недокументированных деталей реализации. Нет причин пытаться получить это от Windows.

Также стоит отметить, что вы можете переименовывать кнопки (и все остальные элементы управления). Это означает, что слишком легко что-то сломать, если вы полагаетесь на какой-то алгоритм сопоставления строк. Нет способа пометить кнопку как определенный «тип», чтобы она автоматически ассоциировалась с определенной надписью, и даже если вы могли бы , это не охватывало бы каждую кнопку, присутствующую в тривиальный интерфейс. Кроме того, как указывает ответ Джоуи, для пользователя нет ничего хуже, чем частично локализованный пользовательский интерфейс. Согласованность - это ключ, и вы не можете таким образом локализовать метки, групповые блоки, меню, всплывающие подсказки и т. Д.

Обратите внимание, однако, что Windows автоматически локализует заголовки для кнопок в окне сообщения (MessageBox). Вам не нужно поднимать палец.

Что не так с установкой для свойства Localizable формы значения True (вы должны сделать это во время разработки) и предоставления локализованного текста для всех элементов управления в приложении? Windows Forms на самом деле имеет довольно полную поддержку локализации; дизайнер автоматически сериализует все локализуемые элементы в файл RESX формы. См. MSDN: Пошаговое руководство. Локализация Windows Forms . Убедитесь, что вы оставляете достаточно места для разной длины выражений на разных языках.

1 голос
/ 12 января 2011

Это , кажется, имеет некоторую информацию относительно этого:

USER32.dll действительно является хранилищем локализованной строки в Windows.

Тем не менее, он не содержит несколько строковых таблиц, только одну.

У меня есть доступ к некоторым другим локализованным версиям Windows (в том числе pt-BR, es-ES), и в каждой из них следующие позиции зафиксированы от Windows XP до Windows 7:

800 - ОК 801 - Отмена 802 - & Прервать ...

Я бы по-прежнему относился к этому как к деталям реализации и не на что полагаться. Прочитайте блог Рэймонда Чена , чтобы узнать о различных ужасных историях разработчиков, которые воспринимали внутреннее Windows как нечто само собой разумеющееся и вечное.

Кроме того, почему бы просто не иметь свои собственные строки? Вы можете легко поставить «ОК» на кнопку самостоятельно, вместо того, чтобы взять ее из ОС (а затем локализовать ее самостоятельно, если ваше приложение предназначено для локализации). Как пользователь, я нахожу немного странным, что части интерфейса на другом языке отличаются от остальных (что неизбежно произойдет, если ваша программа не имеет локализации, скажем, на немецком языке и используется на немецком компьютере с Windows - это оставит интерфейс на английском только с кнопками на немецком).

...