Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

Internacionalización (i18n)

La división es clara: el formato es automático (LocaleFormats), la traducción de texto es manual (tú). Saber dónde queda cada una evita buscar una API que no existe.

Formato automático — LocaleFormats

LocaleFormats (en dev.crossfly.util) concentra los separadores y formatos sensibles al locale, y es respetado por DatePicker/TimePicker/máscara de moneda automáticamente:

Campo Tipo Controla
dateFormat UIConstants.DateFormat orden de la fecha (DMY/MDY/YMD)
dateSeparator char separador de fecha (/, -, .)
timeSeparator char separador de hora (:)
is24Hour boolean 12h vs 24h
decimalSeparator char decimal (, o .)
thousandsSeparator char millar
weekStart byte primer día de la semana
LocaleFormats.decimalSeparator = ',';
LocaleFormats.thousandsSeparator = '.';
LocaleFormats.is24Hour = true;
// a partir de aquí, la máscara de moneda y los pickers ya formatean en el estándar pt-BR

Traducción de texto — manual

No hay catálogo de strings incorporado. Externaliza tus textos (un Map/enum propio) y cámbialos según el idioma:

enum Idioma { PT, EN }
static Idioma idioma = Idioma.PT;
static final Map<String, Map<Idioma,String>> T = Map.of(
   "salvar", Map.of(Idioma.PT, "Salvar", Idioma.EN, "Save"),
   "cancelar", Map.of(Idioma.PT, "Cancelar", Idioma.EN, "Cancel")
);
static String t(String chave) { return T.get(chave).get(idioma); }

// uso:
new Button(t("salvar"));

Los nombres de meses/días y las etiquetas de los pickers son campos públicos que reasignas para localizar.

Por qué el layout ya ayuda

Los layouts por fracción/Relative toleran textos de longitudes diferentes entre idiomas (“Salvar” vs “Enregistrer”) sin romperse — otra ventaja de no usar anchos fijos.

Buenas prácticas

  • Configura LocaleFormats una vez en el bootstrap según el locale del usuario.
  • Externaliza todo el texto visible desde el inicio (adaptarlo después es caro).
  • Prueba los idiomas más “anchos” para garantizar que el layout los admite.

Errores comunes

  • Buscar un sistema de strings/R.string incorporado — no existe; haz el tuyo.
  • Hardcodear / en la fecha en vez de usar LocaleFormats.dateSeparator.

Ver también

¿Te resultó útil esta página?