Tenho procurado criar aplicativos adequados para várias linguagens em C #, já que preciso trabalhar em um pequeno projeto onde esse é o caso. Eu descobri basicamente duas maneiras de fazer isso:
Defina a propriedade Localizable de um formulário como true, defina a propriedade Language, preencha todos os rótulos e tal, e pronto. A principal desvantagem que vejo nisso é: como fazer outras coisas que não fazem parte de um formulário prontas para vários idiomas (por exemplo, janelas pop-up, arquivos de log ou janelas, etc).
Crie um arquivo de recurso, por exemplo 'Lang.en-us.resx' e um para cada idioma, por exemplo 'Lang.nl-nl.resx' e preencha-o com Strings. O IDE parece gerar uma classe para mim automaticamente, portanto, no código, posso apenas usar Lang.SomeText. A maior desvantagem que vejo nisso é: para cada formulário, eu mesmo preciso definir todos os rótulos e outras legendas no código (e não parece que a vinculação de dados funciona com esses recursos).
Tenho certeza, entretanto, de que existem outros métodos para fazer isso também.
Então, qual é a melhor prática? O que é mais fácil para aplicativos pequenos (alguns formulários, conexão de banco de dados, etc.) e o que é mais fácil para aplicativos maiores?
fonte
Respostas:
Sempre usei arquivos de recursos para aplicativos multilíngues.
Existem muitos artigos na web que explicam como usá-los.
Eu usei duas maneiras diferentes:
O arquivo / formulário de recurso é mais fácil de implementar, você só precisa inserir os valores no arquivo de recurso, mas acho essa abordagem mais difícil de manter, já que os rótulos estão dispersos por toda a aplicação.
O arquivo de recurso global permite centralizar todos os rótulos (imagens, etc.) em um arquivo (por idioma), mas isso significa definir manualmente os rótulos no carregamento do formulário. Este arquivo também pode ser usado para mensagens de erro etc.
Uma questão de gosto ...
Um último ponto, eu escrevo programas em inglês e francês, uso "en" e "fr" e não "en-US" e "fr-FR". Não complique as coisas, os diferentes dilelects do inglês (americano, inglês, australiano etc) têm poucas diferenças o suficiente para usar apenas um (o mesmo vale para o francês).
fonte
Recentemente, escrevi um programa com suporte aos idiomas alemão e inglês. Fiquei surpreso ao descobrir que, se eu simplesmente nomeasse meus recursos em inglês como LanguageResources.resx e meus recursos em alemão como LanguageResources.de.resx, ele selecionaria automaticamente o idioma correto. O ResXFileCodeGenerator cuidou de tudo para mim.
Observe que os campos nos dois arquivos eram iguais e quaisquer campos em alemão ainda não inseridos apareceriam no aplicativo como inglês, pois o idioma de arquivo mais não específico é o arquivo padrão. Ao procurar por uma string, ela vai do mais específico (ex .de-DE.resx) ao menos específico (ex. .Resx).
Para obter suas strings, use as chamadas ResourceManager.GetString ou ResourceManager.GetObject. O aplicativo deve fornecer o ResourceManager gratuitamente.
fonte
Para o benefício de outras pessoas que podem se deparar com isso (1+ anos após a última postagem), sou o autor de um produto de localização profissional que torna todo o processo de tradução extremamente fácil. É um suplemento do Visual Studio que extrairá todas as strings ".resx" de qualquer solução arbitrária e as carregará em um único arquivo que pode ser traduzido usando um aplicativo autônomo gratuito (os tradutores podem fazer o download do meu site). O mesmo suplemento importará as strings traduzidas de volta para sua solução. Extremamente fácil de usar com muitas proteções integradas, muitos sinos e assobios e ajuda online (você não precisará muito). Veja http://www.hexadigm.com
fonte