Q:

Como traduzir Strings de um arquivo .resx?

Estou criando um pequeno aplicativo em C# e gostaria de traduzí-lo para inglês, pois pretendo publicá-lo e boa parte do público alvo fala inglês.
Pesquisando, descobri que posso utilizar ferramentas próprias do Visual Studio para traduzir a interface do programa em desenvolvimento, mas em momento algum achei como poderia fazer para traduzir strings usadas internamente no código, que serão representadas no decorrer da utilização do programa na forma de mensagens.
Qual é a melhor maneira de fazer com que essas strings possam sem traduzidas sem que haja necessidade de modificar o código?
Um exemplo prático seria, ao invés de:
MessageBox.Show("Olá mundo!");

Algo como:
MessageBox.Show(String.HelloWord);

Ficando a cargo do aplicativo escolher o idioma automaticamente.

A:

Você pode criar vários arquivos de recurso(Resource files). 
Resource files podem ser usados para armazenar strings que serão traduzidas em outras linguagens.
Digamos que você tenha arquivo de recurso Resource.resx, servirá como padrão palavras em português.
Se você deseja adicionar suporte para o idioma inglês, você precisa adicionar um arquivo de recurso Resource.en.resx (este arquivo contém exatamente as chaves como o arquivo em português, mas os valores serão as palavras traduzidas em inglês) no mesmo diretório. 
Sempre que o idioma do sistema mudar para o inglês, por exemplo, o .NET irá utilizar automaticamente arquivo de recurso correto. Da mesma forma você pode adicionar suporte para outras línguas que você quer apenas adicionando arquivo de recursos com a extensão correta.
Aqui tem um exemplo.

