Вы можете иметь более одного файла .rc. Единственная среда сборки от MS, где это, по-видимому, недопустимо, - это WDK (Windows Driver Kit), но там вы можете обойти его, используя операторы #include
.
На самом деле то, как вы комбинируете или разделяете языки, полностью зависит от вас. Ресурсы имеют идентификатор языка, который идет с ними (вы даете его в форме LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
, хотя winnt.rh
, winres.h
или afxres.h
могут быть включены для символических названий языков), поэтому можно использовать несколько языков несут в одной DLL. Вы также можете определить набор основных языков в .exe и разделить другие языки в один файл .dll каждый.
Однако в прошлом были проблемы с выбором языка (если это не было сделано пользователем явно), поэтому MS представила поддержку MUI в Vista.
В моих развертываниях лучшим выбором до сих пор всегда был один язык на DLL и один «основной язык» в .exe.
Я также предпочитаю отдельные файлы .rc для каждого языка, но, несомненно, можно добиться того же, используя #ifdef
...
NB. Не видел ваше обновление со ссылками, просматривая их сейчас ...
Ваша первая ссылка «Создание библиотеки ресурсов только для ресурсов» предлагает мне добавить еще один небольшой факт. Поскольку такая DLL не имеет ни точки входа, ни кода, можно использовать DLL, скомпилированную для x86, в процессе x64. LoadLibraryEx
с LOAD_LIBRARY_AS_DATAFILE
также разрешит его для файлов, которые содержат код.
Хорошо, что входит в файлы .rc? Обычно файлы .rc будут выглядеть примерно так:
// ...
#include "afxres.h"
// ...
LANGUAGE LANG_*, SUBLANG_*
IDR_MAINFRAME MENU
// ... language-specific menu entries
IDD_ABOUTBOX DIALOGEX 0, 0, ...
// ... language specific pre-filled dialogs, control sizes adjusted and all
STRINGTABLE
// ... language-specific *strings*
END
Итак, ответ зависит от того, что происходит. Если у вас нет меню и диалогов, требующих перевода, вы можете просто поместить языковые таблицы строк для каждого файла .rc и собрать из него DLL-файл (если вы используете /noentry
, это все, что нужно). Тем не менее, если у вас есть другие элементы, кроме пустых строк, которые требуют перевода, их также необходимо включить (обычно диалоговые окна и меню являются одними из наиболее распространенных). В этом случае вы можете отрегулировать размеры и позиции элементов управления для каждого языка. Но будьте осторожны, затраты на обслуживание для этого могут быть значительными. Для этого могут быть более эффективные решения, например, wxWidgets использует так называемые сортировщики сумок для размещения длинных струн.