Реализация глобализации / многоязычности в Win32 API - PullRequest
7 голосов
/ 31 октября 2009

Я разработал оконное приложение (Win32 API) в Visual C ++. Я должен добавить многоязычную функцию в этом приложении. Может ли кто-нибудь один Pls направить меня, как продвинуться с этой задачей.

Ответы [ 4 ]

5 голосов
/ 31 октября 2009

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

в ваших ресурсах вы можете найти диалоговые окна, строковые таблицы, а также информацию о версии (те, которые отображаются в диалоговом окне свойств файла в проводнике). Вы можете наблюдать за ресурсами любой DLL или exe, открыв exe или dll в Visual C ++. при разработке приложения вы можете создать ресурс (File / New), добавить его в свой проект (так же, как вы добавляете файл) и отредактировать ресурсы (используя редактор ресурсов, обычно вкладку рядом с представлением файла). в проводнике проекта).

каждый ресурс (диалог, диалог, шаблон, информация о версии, таблица строк, ...) содержит идентификатор языка, который вы можете изменить. Вы можете создать один и тот же ресурс несколько раз, используя разные языковые идентификаторы. После компиляции приложение загружается Windows и пытается открыть ресурсы, язык которых ближе к языку интерфейса пользователя Windows.

В Windows SDK определен набор функций для эффективного использования этих ресурсов: LoadString, LoadCursor, LoadBitmap и всего, что есть в главе resources .

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

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

2 голосов
/ 10 ноября 2009

Есть несколько сторон, о которых вам нужно беспокоиться:

  1. Скомпилируйте ваше приложение как Unicode
  2. локализация (перевод) приложения, заставить его "говорить" на другом языке
  3. использовать поведение, учитывающее локали, где вам нужно сортировать или форматировать дату / время / числа как и ожидалось пользователем

Для локализации лучше всего не использовать строки в своем коде, а хранить их в DLL-библиотеках только для ресурсов (или в «спутниковых DLL») Вероятно, лучше начать отсюда: http://msdn.microsoft.com/en-us/goglobal/bb978454.aspx, особенно учебники и презентации справа.

Для более подробной работы по локализации вы можете проверить это: http://mihai -nita.net / 2007/05/03 / как локализовать -rc-файл /

Для поведения, ориентированного на локали, вы должны использовать специальные API, такие как GetNumberFormat или GetDateFormat. Вы можете начать отсюда http://msdn.microsoft.com/en-us/library/dd319078%28VS.85%29.aspx или здесь http://msdn.microsoft.com/en-us/goglobal/dd565826.aspx

Но, конечно, никакого ответа здесь будет недостаточно, поскольку на эту тему есть полные книги. Так что просто начните с портала глобализации MS (http://msdn.microsoft.com/en-us/goglobal/), особенно с вкладки «Учиться», и o оттуда.

И когда вы столкнетесь с некоторыми проблемами (вы, скорее всего, будете), зайдите в группу новостей microsoft.public.win32.programmer.international (я знаю, что отнять кого-то из stackoverflow может не быть «хорошей формой», но есть это специальное место, так что вы можете получить лучшие ответы).

1 голос
/ 31 октября 2009

Используйте gettext для всех ваших строк.

0 голосов
/ 05 ноября 2009

может быть большой или маленькой проблемой, в зависимости от того, что делает ваша программа.

На что обратить внимание:

  1. Строка и кодировка символов. Помещение строк в ресурс (или использование gettext) - это начало, но вы можете подумать о том, как хранить строки внутри; например. Посмотрите на кодировку Unicode, например UTF-16, если вы еще не используете такую ​​кодировку.

  2. Подумайте, как вы обрабатываете и храните строковые данные, поскольку это также важно: вам нужно сортировать или делать сравнения случаев? Порядок ASCII (например, сравнение простого значения в 'char') может быть неправильным. Некоторые из этих проблем изложены здесь .

  3. Форматы вывода даты и времени, форматы вывода денег и многое другое также зависит от культуры.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...