GT ClassMethodsFormatting

formatCutoff

Referencia de API para el método formatCutoff de GT

Descripción general

El método formatCutoff trunca cadenas con terminadores adaptados al locale, aplicando los caracteres de elipsis y el espaciado apropiados según el locale de destino.

Este método es esencial para la truncación de texto en la interfaz de usuario (UI) que respeta las convenciones de distintos idiomas para indicar texto truncado.

const gt = new GT({
  sourceLocale: 'en',
  targetLocale: 'fr-FR'
});

const formatted = gt.formatCutoff('Hello, world!', {
  maxChars: 8
});
// Devuelve: "Hello, w\u202F…" (con espacio estrecho en francés)

Referencia

Parámetros

Prop

Type

Objeto options

PropiedadTipoOpcionalDescripción
localesstring | string[]Locale(s) que se usarán para la selección del terminador (anula los valores predeterminados de la instancia)
maxCharsnumberNúmero máximo de caracteres que se mostrarán. undefined significa que no hay truncamiento. Los valores negativos recortan desde el final.
style'ellipsis' | 'none'Estilo de terminador. El valor predeterminado es 'ellipsis'.
terminatorstringTerminador personalizado para anular los valores predeterminados del locale.
separatorstringSeparador personalizado entre el terminador y el texto.

Tipo CutoffFormatOptions

interface CutoffFormatOptions {
  maxChars?: number;
  style?: 'ellipsis' | 'none';
  terminator?: string;
  separator?: string;
}

Devuelve

string - Cadena truncada con el terminador adecuado aplicado según las convenciones del locale correspondiente.


Comportamiento

Resolución de locale

  • Utiliza _renderingLocales de la instancia de forma predeterminada (incluye sourceLocale, targetLocale y contenido de respaldo predeterminado)
  • Puede sobrescribirse con la opción explícita locales
  • Recurre al locale predeterminado de la biblioteca si falla la resolución

Procesamiento del límite de caracteres

  • maxChars positivo: trunca desde el inicio y añade el terminador
  • maxChars negativo: toma desde el final y antepone el terminador
  • maxChars igual a cero: devuelve una cadena vacía
  • maxChars indefinido: no se aplica truncamiento y devuelve la cadena original

Comportamiento específico por locale

El método selecciona automáticamente los terminadores apropiados según el idioma:

  • Francés (fr): con espacio de no separación fino (\u202F)
  • Chino (zh): Puntos suspensivos dobles …… sin separador
  • Japonés (ja): Puntos suspensivos dobles …… sin separador
  • Predeterminado: Puntos suspensivos simples sin separador

Ejemplos

Uso básico con los locales de la instancia

const gt = new GT({ targetLocale: 'en-US' });

const truncated = gt.formatCutoff('Hello, world!', {
  maxChars: 8
});
console.log(truncated); // "Hello, w…"

Sobrescritura de locale

const gt = new GT({ targetLocale: 'en-US' });

// Sobrescribir el locale de la instancia
const french = gt.formatCutoff('Bonjour le monde', {
  locales: 'fr-FR',
  maxChars: 10
});
console.log(french); // "Bonjour\u202F…"

Límites de caracteres negativos

const gt = new GT({ targetLocale: 'en-US' });

// Cortar desde el final
const fromEnd = gt.formatCutoff('JavaScript Framework', {
  maxChars: -9
});
console.log(fromEnd); // "…Framework"

// Corte negativo mayor
const moreFromEnd = gt.formatCutoff('Hello, world!', {
  maxChars: -3
});
console.log(moreFromEnd); // "…ld!"

Options de estilo personalizadas

const gt = new GT({ targetLocale: 'en-US' });

// Terminador personalizado
const custom = gt.formatCutoff('Long description text', {
  maxChars: 12,
  terminator: '...'
});
console.log(custom); // "Long desc..."

// Terminador personalizado con separador  
const customSep = gt.formatCutoff('Another example', {
  maxChars: 10,
  terminator: '[...]',
  separator: ' '
});
console.log(customSep); // "Anot [...]"

// Sin terminador
const none = gt.formatCutoff('Clean cut text', {
  maxChars: 5,
  style: 'none'
});
console.log(none); // "Clean"

Aplicación multilingüe

class UserInterface {
  private gt: GT;
  
  constructor(locale: string) {
    this.gt = new GT({ targetLocale: locale });
  }
  
  truncateTitle(title: string, maxLength = 20): string {
    return this.gt.formatCutoff(title, { maxChars: maxLength });
  }
  
  truncateDescription(description: string): string {
    return this.gt.formatCutoff(description, { maxChars: 100 });
  }
}

const englishUI = new UserInterface('en-US');
const chineseUI = new UserInterface('zh-CN');

console.log(englishUI.truncateTitle('Very Long English Title Here', 15));
// Resultado: "Very Long Engl…"

console.log(chineseUI.truncateTitle('很长的中文标题在这里', 8));
// Resultado: "很长的中文标题……"

Manejo dinámico de locales

const gt = new GT({ sourceLocale: 'en', targetLocale: 'en' });

function adaptiveText(text: string, userLocale: string, context: 'title' | 'body') {
  const limits = {
    title: { 'en': 50, 'fr': 45, 'de': 40, 'zh': 25 },
    body: { 'en': 200, 'fr': 180, 'de': 160, 'zh': 100 }
  };
  
  const maxChars = limits[context][userLocale] || limits[context]['en'];
  
  return gt.formatCutoff(text, {
    locales: userLocale,
    maxChars
  });
}

// Uso en aplicación
const userPrefs = [
  { locale: 'fr-FR', text: 'Une très longue description française' },
  { locale: 'zh-CN', text: '这是一个非常长的中文描述文本' },
  { locale: 'de-DE', text: 'Eine sehr lange deutsche Beschreibung' }
];

userPrefs.forEach(({ locale, text }) => {
  console.log(`${locale}: ${adaptiveText(text, locale, 'title')}`);
});

Notas

  • El método usa _renderingLocales de la instancia de GT para la detección automática del locale
  • La longitud del terminador y del separador se tiene en cuenta en los cálculos del límite de caracteres
  • Si la longitud de terminador + separador excede maxChars, se devuelve una cadena vacía
  • Los terminadores personalizados sustituyen por completo los valores predeterminados específicos del locale
  • El rendimiento se optimiza mediante el almacenamiento en caché interno de las instancias de formateadores

Próximos pasos

¿Qué te parece esta guía?