Pergunta

Eu estou trabalhando em um projeto web que irá (espero) estar disponível em vários idiomas um dia (eu digo "espero", porque enquanto nós temos apenas um local de idioma Inglês planejado hoje, outros produtos da minha empresa são multilingues e eu estou esperando estamos bastante sucesso com a necessidade de que também).

Eu entendo que a melhor prática (estou usando Java, Spring MVC, e Velocity aqui) é colocar todo o texto que o usuário verá em arquivos externos, e consulte-as nos arquivos da interface do usuário por nome, como :

#in messages_en.properties:
welcome.header = Welcome to AppName!

#in the markup
<title>#springMessage("welcome.header")</title>

Mas, nunca ter tido que passar por esse processo em um projeto-me antes, Estou curioso que a melhor maneira de lidar com isso é quando você tem alguns segmentos da UI que são pesados ??na marcação, tais como:

<p>We are excited to announce that Company1 has been acquired by
<a href="http://www.companydivisionx.com" class="boldLink">Division X</a>,
a fast-growing division of <a href="http://www.company2.com" class="boldLink">Company 2</a>, Inc. 
(Nasdaq: <a href="http://finance.google.com/finance?q=blah" class="boldLink">BLAH</a>), based in...

Uma opção que posso pensar seria armazenar este "baixo nível" de marcação em messages.properties-se para a mensagem - mas esta parece ser a pior opção possível.

Outras opções que eu posso pensar são:

  • loja cada fragmento interior não é de marcação em messages.properties, tais como acquisitionAnnounce1, acquisitionAnnounce2, acquisitionAnnounce3. Isto parece muito , embora tedioso.
  • Quebrar esta mensagem em componentes mais reutilizáveis, como Company1.name, Company2.name, Company2.ticker, etc., já que cada um deles é provável reutilizado em muitas outras mensagens. Isso provavelmente são responsáveis ??por 80% das palavras nesta mensagem particular.

Há algum melhores práticas para lidar com a internacionalização de texto que é pesado com marcação como este? Você apenas tem que morder e suportar a dor de dividir cada pedaço de texto? Qual é a melhor solução de quaisquer projetos que você lidou pessoalmente com?

Foi útil?

Solução

Normalmente, se você usar um modelo de motor, como Sitemesh ou Velocity você pode gerenciar esses blocos menores HTML edifício como subtemplates de forma mais eficaz.

Ao fazer isso, você pode gradualmente se resumem as cordas que são os puramente internacionalizadas em grupos e torná-los relevantes para essas subtemplates marcação. Tendo feito este tipo de trabalho usando modelos para um aplicativo que se estendeu multi-idiomas no mesmo local, bem como vários locais, nós nunca colocado marcação em nossos pacotes de mensagens.

Eu sugiro que uma chave boa prática seria a de evitar a colocação de marcação (mesmo em um nível baixo como você colocá-lo) dentro de arquivos de propriedades de mensagens a todo custo! o potencial isto tem para o inferno desencadeamento não é algo para ser esquecido - morder a bala e quebrando as coisas corretamente, é muito menos de uma dor de ter que gerenciar muitos arquivos com espalhados HTML marcação. É importante que você pode visualizar marcação como pedaços holísticas e espalhamento de que em todos os lugares que tornam o desenvolvimento todos os dias uma tarefa desde:

  • Você perderia IDE realce de cores e sintaxe validação
  • High possibilidade de que um arquivo local ou outro pode ser facilmente perdida quando alterações de projetos / filtro de marcação para baixo

quebrar as coisas (para um ponto realista, por exemplo, estruturas de frases lógicas, mas não mais fino) é adiantado trabalho um pouco difícil, mas vale o esforço.

No que diz respeito corda quebra granularidade, aqui está uma amostra do que fizemos:

    comment.atom-details=Subscribe To Comments
    comment.username-mandatory=You must supply your name
    comment.useremail-mandatory=You must supply your email address 
    comment.email.notification=Dear {0}, the comment thread you are watching has been updated.
    comment.feed.title=Comments on {0}
    comment.feed.title.default=Comments
    comment.feed.entry.title=Comment on {0} at {1,date,medium} {2,time,HH:mm} by {3}


    comment.atom-details=Suscribir a Comentarios
    comment.username-mandatory=Debes indicar tu nombre
    comment.useremail-mandatory=Debes indicar tu direcci\u00f3n de correo electr\u00f3nico
    comment.email.notification=La conversaci\u00f3n que estas viendo ha sido actualizada
    comment.feed.title=Comentarios sobre {0}
    comment.feed.title.default=Comentarios
    comment.feed.entry.title=Comentarios sobre {0} a {1,date,medium} {2,time,HH:mm} por {3}

Assim, você pode fazer coisas interessantes com a forma como você texto de substituição no pacote de mensagens que também pode ajudá-lo a preservar seu significado lógico, mas permitem que você manipulá-lo no meio da frase.

Outras dicas

Como já foi dito, por favor, nunca dividir as cordas em segmentos. Você vai causar tradutores luto como eles têm para coagir sua sintaxe da linguagem com as regras ad-hoc que você inadvertidamente criar. Muitas vezes não será possível fornecer uma tradução gramaticalmente correta, especialmente se você reutilizar determinados segmentos em diferentes contextos.

Não remova a marcação, qualquer um.

Por favor, não assuma tradutores trabalho na tradução Notepad :) Computer-aided ferramentas (CAT), tais como a suíte Trados, saber sobre marcação perfeitamente bem. Se a marcação é HTML, em vez de algum formato XML personalizado, nenhuma preparação especial é necessária. Trados irá proteger as marcas de modificação acidental, enquanto ainda permitindo mudanças quando necessário. Note-se que certos elementos de marcas muitas vezes precisam ser localizada, por exemplo, texto alt ou algumas seqüências de consulta, de modo que apenas descascando toda a marcação não vai fazer.

O melhor de tudo, a menos que você está trabalhando em um projeto pessoal orçamento zero, considerar contactar um fornecedor de localização. A localização é um serviço como web design. Um vendedor competente vai ajudar você a escolher a melhor solução / formato para o seu projecto e orientá-lo através da preparação do material de origem e incorporando o resultado localizada. E, claro, eles e seus tradutores terá todas as ferramentas necessárias. (Divulgação completa: Eu sou um tradutor / especialista localização e não dividir strings:.)

Primeiro, não dividir suas cordas. Isso torna muito mais difícil para os localizadores para traduzir o texto, porque eles não podem ver toda a cadeia de traduzir.

Eu provavelmente tentar usar espaços reservados em torno dos links:

Divisão X

Isso é como eu fiz isso quando eu estava localizando um site para 30 idiomas. Não é perfeito, mas funciona.

Eu não acho que é possível (ou fácil) para remover todas as marcações de cordas, você precisa ter uma maneira de inserir os URLs e qualquer marcação extra.

Você deve evitar romper suas cordas. Não só este se tornar um pesadelo para traduzir, mas também faz suposições gramaticais que podem não ser correta na língua-alvo.

Enquanto marcadores pode ser útil para muitas coisas, eu não recomendo o uso de espaços reservados para URLs. Isso permite que você personalizar a URL para diferentes localidades. Afinal, não há sentido enviá-los para uma página em Inglês quando seu local é o espanhol argentino!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top