Pergunta

Estamos localizando o texto de interface de usuário para uma aplicação web que roda em Java 5, e tem um dilema sobre como mensagens de saída que são definidos em arquivos de propriedades - o tipo usado por java.util.Properties .

Algumas mensagens incluem um espaço reservado que será preenchido usando java.text.MessageFormat . Por exemplo:

search.summary = Your search for {0} found {1} items.

MessageFormat é chato, porque uma única citação é um carácter especial, apesar de ser comum em texto em Inglês. Você tem que digitar dois para um orçamento único literal:

warning.item = This item''s {0} is not valid.

No entanto, três quartos da aplicação é 1000 ou para que as mensagens não incluem um espaço reservado. Isto significa que nós podemos enviá-las diretamente, evitando MessageFormat, e deixar as aspas simples sozinho:

help.url = The web page's URL

Pergunta: devemos usar MessageFormat para todas as mensagens, para a sintaxe consistente, ou MessageFormat evitar onde podemos, por isso a maioria das mensagens não precisa escapar

?

Há claramente prós e contras de qualquer forma.

Note que a documentação da API para MessageFormat reconhece o problema e sugere uma não-solução:

As regras para o uso de aspas dentro padrões de formato de mensagem, infelizmente, têm mostrado ser um pouco confusa. Em particular, nem sempre é óbvia aos localizadores quer sejam aspas simples precisa ser duplicada ou não. Certificar-se de que para informar localizadores sobre as regras, e dizer-lhes (por exemplo, usando comentários na fonte de pacote de recursos arquivos) que cordas serão processados por MessageFormat.

Foi útil?

Solução

Basta escrever sua própria implementação de MessageFormat sem esse recurso irritante. Você pode olhar para o código de SLF4J Logger .

Eles têm a sua própria versão da mensagem de formatador que pode ser usado como se segue:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

espaços reservados vazios poderia ser usado com ordenação padrão e numeradas para alguns casos de localização onde diferentes línguas fazer permutações de palavras ou partes de frases.

Outras dicas

No final, decidimos side-passo, o único problema citação sempre usando aspas ‘encaracolados’:

warning.item = This item\u2019s {0} is not valid.

Use o `caráter em vez de" para cotar. Nós usá-lo o tempo todo sem problemas.

Use MessageFormat apenas quando você precisar dele, caso contrário, eles só inchar-se o código e não têm nenhum valor extra.

Na minha opinião, a consistência é importante para este tipo de coisa. Propriedades arquivos e MessageFormat já tem muitas limitações. Se você encontrar estes incomodando você pode "compilar" seus arquivos de propriedades para gerar mais adequadamente formados. Mas eu diria que ir com o uso de MessageFormat em todos os lugares. Desta forma, como você manter o código que você não precisa se preocupar com a qual as cadeias são formatados e quais não são. Torna-se mais simples de lidar, já que você pode entregar o processamento de mensagens a uma biblioteca e não se preocupar com os detalhes em um nível elevado.

Outra alternativa ... Ao carregar o arquivo de propriedades, só embrulhar o inputstream em um FilterInpuStream que dobra-se todas as aspas simples.

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