Лучший способ дизайна для локализации строк

Это своего рода общий вопрос, открытый для мнений. Я пытался придумать хороший способ разработки для локализации строковых ресурсов для приложения Windows MFC и связанных утилит. Мой список пожеланий:

Необходимо сохранить строковые литералы в коде (в отличие от замены на идентификаторы ресурсов макроса #define), чтобы сообщения по-прежнему читались встроеннымиНеобходимо разрешить локализованные строковые ресурсы (дух)Не должен накладывать дополнительные ограничения среды выполнения (например, зависимость от .NET и т. Д.)Должен иметь минимальное вмешательство в существующий код (чем меньше модификаций, тем лучше)Должен быть отлаживаемымДолжен генерировать файлы ресурсов, которые можно редактировать с помощью общих инструментов (например, общий формат)Не следует использовать блоки комментариев копирования / вставки для сохранения литеральных строк в коде или чего-либо еще, что создает потенциал для десинхронизацииБыло бы неплохо разрешить статическую (во время компиляции) проверку того, что каждая «нотационная» строка находится в файле (ах) ресурса.Было бы неплохо разрешить пул строк межязыкового ресурса (для компонентов на разных языках, например: нативный C ++ и .NET)

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

Изменить: Решение, которое у меня сейчас есть, выглядит так:

ShowMessage( RESTRING( _T("Some string") ) );
ShowMessage( RESTRING( _T("Some string with variable %1"), sNonTranslatedStringVariable ) );

Затем у меня есть специальная утилита для анализа строк из блоков 'RESTRING' и помещения их в файл .resx для локализации, а также отдельный объект C # COM для загрузки их из локализованных файлов ресурсов с запасным вариантом. Если объект C # недоступен (или не может загрузить), я возвращаюсь к строке в коде. Макрос расширяется до шаблонного класса, который вызывает COM-объект и выполняет форматирование и т. Д.

Во всяком случае, я подумал, что было бы полезно добавить то, что я имею сейчас для справки.

Ответы на вопрос(7)

Ваш ответ на вопрос