Em projetos, muitas vezes precisamos analisar strings em Locales, mas não existe uma classe fácil de usar.
O próprio Java fornece três construtores, mas no uso real, você mesmo precisa analisá-los, o que é relativamente complicado.
Localidade(idioma)
localidade(idioma,país)
Localidade (idioma da string, país da string, variante da string)
O Apache possui LocaleUtils.toLocale (linguagem String), mas não suporta os dois últimos caracteres em letras minúsculas. Por exemplo: zh_CN suporta, mas zh_cn não.
Referindo-me a outros métodos, escrevi a aula a seguir e fiz anotações, espero que seja útil para pessoas que resolvem problemas semelhantes.
Copie o código do código da seguinte forma:
importar java.util.Locale;
classe pública LocaleUtil
{
local estático final privado DEFAULT_LOCALE = Locale.ENGLISH;
public final static String IETF_SEPARATOR = "-";
public final static String SEPARATOR = "_";
public final static String EMPTY_STRING = "";
local estático público toLocale (linguagem String)
{
if(!StringUtil.isNullOrEmpty(idioma))
{
return langToLocale(idioma, SEPARATOR);
}
retornar DEFAULT_LOCALE;
}
local estático público langToLocale (string lang, separador de string)
{
if(StringUtil.isNullOrEmpty(lang))
{
retornar DEFAULT_LOCALE;
}
Idioma da string = EMPTY_STRING;
String país = EMPTY_STRING;
Variante de string = EMPTY_STRING;
int i1 = lang.indexOf(separador);
se (i1 < 0)
{
idioma = idioma;
} outro
{
idioma = lang.substring(0, i1);
++i1;
int i2 = lang.indexOf(separador, i1);
se (i2 < 0)
{
país = lang.substring(i1);
} outro
{
país = lang.substring(i1, i2);
variante = lang.substring(i2+1);
}
}
if(idioma.comprimento() == 2)
{
idioma = idioma.toLowerCase();
}outro
{
idioma = EMPTY_STRING;
}
if(país.length() == 2)
{
país = país.toUpperCase();
}outro
{
país = EMPTY_STRING;
}
if((variante.comprimento() > 0) &&
((idioma.length() == 2) ||(país.length() == 2)) )
{
variante = variante.toUpperCase();
}outro
{
variante = EMPTY_STRING;
}
return new Locale(idioma, país, variante);
}
}
Perceber:
Copie o código do código da seguinte forma:
classe pública StringUtil
{
public static boolean isNullOrEmpty(String alvo) {
retornar alvo == nulo || "".equals(alvo);
}
}