Internacionalização em seus projetos

votos
44

Como você implementou Internacionalização (i18n) em projectos reais que você trabalhou?

I teve um interesse em fazer software cross-cultural depois que eu li a famosa mensagem por Joel, o desenvolvedor Absolute Minimum cada Software Absolutamente, Positivamente Precisa Saber Sobre Unicode e Conjuntos de caracteres (Sem Desculpas!) . No entanto, tenho ainda capaz de tirar vantagem deste em um projeto real, além de ter certeza que eu usei cadeias de caracteres Unicode sempre que possível. Mas fazer todas as suas cordas Unicode e garantir que você entender o que codificar tudo o que você trabalhar com é é apenas a ponta do iceberg i18n.

Tudo o que tenho trabalhado até à data tem sido para uso por um conjunto controlado de US falar Inglês pessoas, ou i18n só não era algo que tínhamos tempo para trabalhar em antes de empurrar o projeto ao vivo. Então eu estou procurando alguma dica ou histórias de guerra que as pessoas têm sobre como fazer software mais localizada em projetos do mundo real.

Publicado 04/08/2008 em 01:08
fonte usuário
Em outras línguas...                            


11 respostas

votos
48

Tem sido um tempo, então isso não é abrangente.

Conjuntos de caracteres

Unicode é grande, mas você não pode fugir com ignorando outros conjuntos de caracteres. O conjunto de caracteres padrão no Windows XP (em Inglês) é Cp1252. Na web, você não sabe o que um navegador irá enviar-lhe (embora esperemos que o recipiente irá lidar com a maior parte deste). E não se surpreenda quando há erros em qualquer que seja a implementação você está usando. conjuntos de caracteres podem ter interações interessantes com nomes de arquivos quando se deslocam para entre máquinas.

traduzindo Cordas

Tradutores são, em geral, não codificadores. Se você enviar um arquivo de origem para um tradutor, eles vão quebrá-lo. Cordas deve ser extraído o arquivo de recurso (por exemplo, ficheiros de propriedades em Java ou DLLs de recursos no Visual C ++). Tradutores devem receber arquivos que são difíceis de quebrar e ferramentas que não deixá-los quebrá-las.

Tradutores não sei onde cordas vêm de em um produto. É difícil traduzir uma string sem contexto. Se você não fornecer orientação, a qualidade da tradução vai sofrer.

Ainda sobre o tema do contexto, você pode ver a mesma string "foo" surgem em várias vezes e acho que seria mais eficiente para ter todas as instâncias do ponto de UI para o mesmo recurso. Esta é uma má idéia. As palavras podem ser muito sensível ao contexto em alguns idiomas.

Traduzindo cordas custa dinheiro. Se você lançar uma nova versão de um produto, não faz sentido para recuperar as versões antigas. Tem ferramentas para recuperar seqüências de seus arquivos de recursos antigos.

Concatenação de cadeia e manipulação manual de cordas deve ser minimizada. Use as funções de formato quando aplicável.

Tradutores precisam ser capazes de modificar as teclas de atalho. Ctrl+ PÉ imprimir em Inglês; os alemães usar Ctrl+ D.

Se você tem um processo de tradução que requer alguém para cortar e colar manualmente cadeias, a qualquer momento, você está pedindo para ter problemas.

Datas, horários, calendários, Moeda, Número Formatos, fusos horários

Todos estes podem variar de país para país. Uma vírgula pode ser usado para denotar casas decimais. Os tempos podem estar na notação de 24 horas. Nem todo mundo usa o calendário gregoriano. Você precisa ser inequívoca, também. Se você tomar cuidado para exibir datas como MM / DD / AAAA para os EUA e DD / MM / AAAA para o Reino Unido em seu site, as datas são ambíguos a menos que o usuário sabe que você fez isso.

especialmente Moeda

As funções de localidade fornecidos nas bibliotecas de classe lhe dará o símbolo da moeda local, mas você não pode se ater apenas uma libra (esterlinas) ou símbolo do euro na frente de um valor que dá um preço em dólares.

Interfaces de usuário

Layout deve ser dinâmico. Não são apenas as cordas que possam dobrar de comprimento na tradução, toda a interface do usuário pode precisar ser invertido (hebreu, árabe) para que os controles de gerência da direita para a esquerda. E isso é antes de chegarmos à Ásia.

Testar antes da tradução

  • Use a análise estática de código para localizar problemas. No mínimo, alavancar as ferramentas internas em seu IDE. (Usuários do Eclipse pode ir para Janela> Preferências> Java> Compiler> Erros / avisos e verificar se há cordas não-externalizadas.)
  • Fuma teste simulando tradução. Não é difícil de analisar um arquivo de recurso e substituir cordas com uma versão traduzida-pseudo que duplica a distância e insere caracteres funk. Você não tem que falar uma língua para usar um sistema operacional estrangeira. Os sistemas modernos deve deixá-lo entrar como um usuário externo com mensagens traduzidas e locale estrangeira. Se você estiver familiarizado com seu sistema operacional, você pode descobrir o que faz o que sem saber uma única palavra da língua.
  • Teclado mapas e referências do conjunto de caracteres são muito úteis.
  • A virtualização seria muito útil aqui.

Problemas não técnicos

Às vezes você tem que ser sensível às diferenças culturais (ofensa ou incompreensão pode resultar). Um erro muitas vezes você vê é o uso de bandeiras como uma sugestão visual escolhendo uma linguagem site ou geografia. A menos que você quer que seu software para declarar os lados na política global, esta é uma má idéia. Se você fosse francês e ofereceu a opção para Inglês com a bandeira de St. George (a bandeira da Inglaterra é uma cruz vermelha em um campo branco), isso pode resultar em confusão para muitos falantes de inglês - assumir problemas semelhantes surgirão com línguas estrangeiras e países . Ícones precisa de ser controlado por relevância cultural. O que faz um sinal de positivo ou uma marca verde significa? Linguagem deve ser relativamente neutro - abordar os usuários de uma maneira particular pode ser aceitável em uma região, mas considerado rude em outro.

Recursos

Programadores C ++ e Java podem encontrar o site da UTI útil: http://www.icu-project.org/

Respondeu 04/08/2008 em 18:58
fonte usuário

votos
15

Algumas coisas divertidas:

  1. Ter um PHP e Aplicação MySQL que funciona bem com o alemão eo francês, mas agora precisa de apoio russo e chinês. Acho que mover esta sobre a NET, como suporte Unicode do PHP é - na minha opinião - não é realmente bom. Claro, fazendo malabarismos com cerca de utf8_de / codificar ou os mbstring-funções é divertido. Quase tão divertido como tendo Freddy Krüger visitá-lo à noite ...

  2. Percebendo que algumas línguas são muito mais detalhado do que outros. Alemão é muito mais detalhado do que o Inglês normalmente, e ver como a versão alemã destrói a interface do usuário, porque muito pouco espaço foi alocado não era divertido. Alguns produtos ganhou alguma fama por suas maneiras criativas de contornar que, com o Oblivion "Schw.Tr.d.Le.En.W." sendo :-) memorável

  3. Brincando com formatos de data, Woohoo! Sim, na verdade existem pessoas no mundo que usam formatos de data onde o dia vai no meio. Muuuito muito divertido tentar descobrir o que 07/02/2008 é suposto dizer, só porque alguns usuários podem acreditar que poderia ser 02 de julho ... Mas, novamente, vocês sobre a lagoa pode acreditar o mesmo sobre usuários que colocam a mês no :-P meio, especialmente porque, em Inglês, 2 de julho soa muito melhor do que 02 de julho, algo que não neccessarily se aplicam a outras línguas (ou seja, em Alemão, você nunca diria Juli 2 mas sempre Zweiter Juli). Eu uso 2008-02-07 sempre que possível. É claro que isso significa 7 de fevereiro e ele classifica corretamente, mas dd / mm vs. mm / dd pode ser um problema realmente complicado.

  4. Anoter coisa divertida, Formatos de número ! 10.000,50 vs 10,000.50 vs. 10 000,50 vs. 10'000,50 ... Este é o meu maior pesadelo agora, tendo que suportar uma environent multi-cultural, mas não ter qualquer forma de saber de forma confiável o formato do número do usuário usará.

  5. Formal ou informal. Em alguma língua, existem duas formas de lidar com as pessoas, de maneira formal e de uma maneira mais informal. Em Inglês, você acabou de dizer "Você", mas em alemão você tem que decidir entre o formal "Sie" e o informal "Du", mesmo para Francês Tu / Vous. É geralmente uma aposta segura para escolher o caminho formal, mas isso é facilmente esquecido.

  6. Calendários. Na Europa, o primeiro dia da semana é segunda-feira, enquanto que nos EUA é domingo. Calendário Widgets são agradáveis. Mostrando um calendário com o domingo do lado esquerdo e sábado sobre o direito de um utilizador europeu não é tão bom, os confunde.

Respondeu 04/08/2008 em 01:35
fonte usuário

votos
8

Eu trabalhei em um projeto para o meu empregador anterior que usou .NET, e havia construído em um formato .resx usamos. Nós basicamente tinha um arquivo que tinha todas as traduções no arquivo .resx, e, em seguida, vários arquivos com diferentes traduções. A consequência disto é que você tem que ser muito diligente em garantir que todas as cadeias visíveis na aplicação são armazenados na .resx, ea qualquer momento um é alterado você tem que atualizar todos os idiomas que suportam.

Se você ficar com preguiça e não notificar as pessoas a cargo de traduções, ou você incorporar cordas sem passar pelo seu sistema de localização, será um pesadelo para tentar corrigi-lo mais tarde. Da mesma forma, se a localização é uma reflexão tardia, será muito difícil colocar no lugar. Bottom line, se você não tem todas as cordas visíveis armazenados externamente em um lugar padrão, será muito difícil encontrar tudo o que precisa ser localizada.

Uma outra nota, muito estritamente evitar concatenação cordas visíveis diretamente, tais como

String message = "The " + item + " is on sale!";

Em vez disso, você deve usar algo como

String message = String.Format("The {0} is on sale!", item);

A razão para isso é que diferentes línguas, muitas vezes encomendar as palavras de forma diferente, e cordas concatenando diretamente terá uma nova compilação de corrigir, mas se você usou algum tipo de mecanismo de substituição string como acima, você pode modificar seu arquivo .resx (ou qualquer localização arquivos que você usa) para o idioma específico que precisa reordenar as palavras.

Respondeu 04/08/2008 em 01:23
fonte usuário

votos
5

Eu estava apenas ouvindo um Podcast de Scott Hanselman esta manhã, onde ele fala sobre internacionalização, especialmente as coisas realmente complicadas, como turco (com o seu quatro i do) e tailandês. Além disso, Jeff Atwood tinha um cargo :

Respondeu 04/08/2008 em 16:04
fonte usuário

votos
3

Além de todas as dicas anteriores, lembre-se que i18n não é apenas sobre a mudança de palavras para o seu equivalente em outras línguas, especialmente para alfabetos idiomas não-latinos (coreano, árabe), que escritos da direita para a esquerda, de modo que toda a interface do usuário terá que se conformar, como

  • item 1
  • ponto 2
  • Item 3

teria de ser

texto árabe 1 -

texto árabe 2 -

texto árabe 3 -

(Lista de marcadores revertida não parecem funcionar: P)

que pode ser um pesadelo UI se o sistema tem para aplicar as alterações dinamicamente quando o usuário altera o idioma a ser utilizado.

Outra coisa muito difícil é testar diferentes idiomas, não apenas para a correção da palavra, mas desde que línguas como o coreano geralmente têm maior tipo de fonte para seus personagens isso pode levar a erros específicos de idiomas (como "SAVE" texto em um botão sendo maior do que o próprio botão para alguma linguagem).

Respondeu 22/09/2008 em 00:44
fonte usuário

votos
2

Uma das coisas mais engraçadas para descobrir: não itálico e makrup texto em negrito não funcionar com CJK (Chinês / Japonês / Coreano) caracteres. Eles simplesmente se tornar ilegível. (OK, eu não poderia realmente lê-los antes de qualquer um, mas especialmente em negrito apenas cria borrões de tinta)

Respondeu 14/10/2008 em 13:39
fonte usuário

votos
1

Outro desafio será aceitar a entrada de seus usuários. Em muitos casos, isso é facilitado pelo processamento de entrada fornecido pelo sistema operacional, como o IME no Windows, que funciona de forma transparente com widgets de texto comuns, mas essa facilidade não estará disponível para todas as necessidades possíveis.

Respondeu 27/12/2008 em 07:48
fonte usuário

votos
1

Eu sugiro usar algo como 99translations.com para manter suas traduções. Caso contrário, você não será capaz de dizer o que as suas traduções são até à data em todas as línguas.

Respondeu 27/12/2008 em 05:05
fonte usuário

votos
1

Eu acho que todos os que trabalham na internacionalização deve estar familiarizado com o Repositório de Dados Locale comum, que é agora um sub-projeto de Unicode:

Repositório Locale de dados comum

Essas pessoas estão trabalhando duro para estabelecer um recurso padrão para todos os tipos de questões i18n: moeda, nomes geográficos, toneladas de material. Qualquer projeto que está mantendo seus dados locais próprios de base, dado que esse projeto existe é muito maluco, IMHO.

Respondeu 18/09/2008 em 20:25
fonte usuário

votos
0

Uma coisa ninguém ter mencionado ainda é cordas com alguma parte warying como em "A unidade vai arive em 5 dias" ou "Na segunda-feira acontece alguma coisa." onde 5 e segunda-feira vai mudar, dependendo do estado. Não é uma boa idéia para dividir os em dois e concatenar-los. Com apenas uma parte variável e uma boa documentação que você pode começar afastado com ele, com duas partes diferentes, haverá algum idioma que preferes para alterar a ordem deles.

Respondeu 07/10/2008 em 11:56
fonte usuário

votos
0

Um site que eu uso tem um método de tradução o proprietário chama de "wiki + máquina de tradução". Este é um site baseado na comunidade assim é, obviamente, diferente para as necessidades das empresas.

http://blog.bookmooch.com/2007/09/23/how-bookmooch-does-its-translations/

Respondeu 10/09/2008 em 16:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more