Utility FunctionsFormatting

formatCutoff

Función independiente para truncar cadenas con terminadores sensibles al locale

Descripción general

La función independiente formatCutoff trunca cadenas con terminadores específicos del locale sin requerir una instancia de GT. Ofrece un truncado de texto compatible con locale que respeta las convenciones de distintos idiomas para los caracteres de puntos suspensivos y el espaciado.

import { formatCutoff } from 'generaltranslation';

const formatted = formatCutoff('Hello, world!', {
  locales: 'en-US',
  maxChars: 8
});
// Devuelve: "Hello, w…"

Referencia

Parámetros

NombreTipoDescripción
valuestringCadena que se va a truncar
optionsCutoffFormatOptions & { locales?: string | string[] }Configuración de truncado

CutoffFormatOptions

NameTypeDescription
locales?string | string[]Locales para elegir el terminador
maxChars?numberNúmero máximo de caracteres a mostrar. undefined significa sin límite. Los valores negativos recortan desde el final
style?'ellipsis' | 'none'Estilo del terminador. El valor predeterminado es 'ellipsis'
terminator?stringTerminador personalizado para sobrescribir la configuración predeterminada del locale
separator?stringSeparador personalizado entre el terminador y el texto

Devuelve

string - Cadena truncada con el terminador adecuado aplicado.


Comportamiento

Límites de caracteres

  • maxChars positivo: trunca desde el principio, agrega el terminador
  • maxChars negativo: extrae desde el final, antepone el terminador
  • maxChars igual a cero: devuelve una cadena vacía
  • maxChars indefinido: no se aplica truncamiento

Terminadores específicos de cada locale

Diferentes locales emplean distintas convenciones para los puntos suspensivos:

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

Casos límite

  • Si la longitud del terminador + separador excede maxChars, devuelve una cadena vacía
  • Una cadena original más corta que maxChars se devuelve sin modificar
  • El estilo 'none' trunca sin ningún terminador

Ejemplos

Uso básico

import { formatCutoff } from 'generaltranslation';

// Truncado básico
console.log(formatCutoff('Hello, world!', {
  locales: 'en-US',
  maxChars: 8
}));
// Resultado: "Hello, w…"

// No se requiere truncado
console.log(formatCutoff('Short', {
  locales: 'en-US', 
  maxChars: 10
}));
// Resultado: "Short"

Límites negativos de caracteres

// Cortar desde el final
console.log(formatCutoff('Hello, world!', {
  locales: 'en-US',
  maxChars: -3
}));
// Salida: "…ld!"

// Corte negativo más largo
console.log(formatCutoff('JavaScript', {
  locales: 'en-US',
  maxChars: -6
}));
// Salida: "…Script"

Terminadores específicos para cada locale

// Formato francés
console.log(formatCutoff('Bonjour le monde', {
  locales: 'fr-FR',
  maxChars: 10
}));
// Resultado: "Bonjour\u202F…" (espacio estrecho antes de los puntos suspensivos)

// Formato chino
console.log(formatCutoff('你好世界', {
  locales: 'zh-CN',
  maxChars: 3
}));
// Resultado: "你好……"

// Formato japonés  
console.log(formatCutoff('こんにちは', {
  locales: 'ja-JP',
  maxChars: 4
}));
// Resultado: "こん……"

Terminadores personalizados

// Terminador personalizado
console.log(formatCutoff('Long text here', {
  locales: 'en-US',
  maxChars: 10,
  terminator: '...'
}));
// Resultado: "Long te..."

// Terminador personalizado con separador
console.log(formatCutoff('Another example', {
  locales: 'en-US',
  maxChars: 12,
  terminator: '[more]',
  separator: ' '
}));
// Resultado: "Anoth [more]"

// Sin terminador
console.log(formatCutoff('Clean cut', {
  locales: 'en-US',
  maxChars: 5,
  style: 'none'
}));
// Resultado: "Clean"

Funciones auxiliares

import { formatCutoff } from 'generaltranslation';

// Truncar para mostrar en la UI
function displayText(text: string, maxLength: number, locale = 'en-US') {
  return formatCutoff(text, {
    locales: locale,
    maxChars: maxLength
  });
}

// Truncamiento multi-locale
function truncateByLocale(text: string, locale: string) {
  const limits = {
    'en': 50,
    'de': 45, // Las palabras en alemán tienden a ser más largas
    'zh': 30, // Los caracteres chinos son más densos
  };
  
  return formatCutoff(text, {
    locales: locale,
    maxChars: limits[locale] || 50
  });
}

console.log(displayText('This is a very long description', 15));
// Salida: "This is a ve…"

console.log(truncateByLocale('Eine sehr lange deutsche Beschreibung', 'de'));
// Salida: "Eine sehr lange deutsche Besch…"

Notas

  • A diferencia del método de GT class, el parámetro locales es opcional y su valor predeterminado es 'en'
  • Los resultados se almacenan en caché internamente para mejorar el rendimiento con combinaciones repetidas de locale/options
  • La longitud del terminador se tiene en cuenta en los cálculos del límite de caracteres
  • Los terminadores personalizados reemplazan los valores predeterminados específicos del locale
  • Los separadores se ignoran cuando no hay ningún terminador presente

Próximos pasos

¿Qué te parece esta guía?