Melhor maneira de projetar para localização de seqüências de caracteres

Esta é uma questão geral, aberta para opiniões. Eu tenho tentado chegar a uma boa maneira de projetar para localização de recursos de seqüência de caracteres para um aplicativo do Windows MFC e utilitários relacionados. Minha lista de desejos é:

Deve preservar literais de string no código (em vez de substituir com #define IDs de recurso da macro), para que as mensagens ainda sejam legíveis em linhaDeve permitir recursos de string localizados (duh)Não deve impor restrições de ambiente de tempo de execução adicionais (por exemplo: dependência no .NET, etc.)Deve ter uma obstrução mínima no código existente (quanto menos modificação, melhor)Deve ser debugávelDeve gerar arquivos de recursos que são editáveis ​​por ferramentas comuns (ou seja: formato comum)Não deve usar blocos de comentários de copiar / colar para preservar sequências literais no código ou qualquer outra coisa que crie o potencial para a dessincronizaçãoSeria bom permitir a verificação estática (em tempo de compilação) de que toda string "notada" está no (s) arquivo (s) de recursoSeria bom permitir o pooling de strings de recursos entre linguagens (para componentes em vários idiomas, por exemplo: C ++ nativo e .NET)

Eu tenho uma maneira que preenche toda a minha lista de desejos, até certo ponto, exceto para a verificação estática, mas eu tive que desenvolver um pouco de código personalizado para alcançá-lo (e tem limitações). Eu estou querendo saber se alguém resolveu este problema de uma maneira particularmente boa.

Edit: A solução que tenho atualmente se parece com isso:

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

Eu, então, tenho um utilitário personalizado para analisar as seqüências de caracteres de dentro dos blocos 'RESTRING' e colocá-los em um arquivo .resx para localização e um objeto C # COM separado para carregá-los de arquivos de recurso localizados com fallback. Se o objeto C # não estiver disponível (ou não puder ser carregado), faço a fallback para a string no código. A macro se expande para uma classe de modelo que chama o objeto COM e faz a formatação etc.

De qualquer forma, achei que seria útil adicionar o que eu tenho agora como referência.

questionAnswers(7)

yourAnswerToTheQuestion