# generaltranslation: General Translation Core SDK: formatCutoff URL: https://generaltranslation.com/ru/docs/core/class/methods/formatting/format-cutoff.mdx --- title: formatCutoff description: Справка по методу formatCutoff в GT --- ## Обзор Метод `formatCutoff` усекает строки с помощью зависящих от локали терминаторов, применяя подходящие символы многоточия и пробелы в соответствии с целевой локалью. Этот метод важен для усечения текста в интерфейсе с учетом принятых в разных языках правил обозначения обрезанного текста. ```typescript const gt = new GT({ sourceLocale: 'en', targetLocale: 'fr-FR' }); const formatted = gt.formatCutoff('Hello, world!', { maxChars: 8 }); // Возвращает: "Hello, w\u202F…" (с узким пробелом во французском языке) ``` *** " ## Справка ### Параметры ### Объект параметров | Свойство | Тип | Необязательно | Описание | | ------------ | ---------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `locales` | `string \| string[]` | ✓ | Локаль или локали, используемые для выбора терминатора (переопределяет значения по умолчанию для экземпляра) | | `maxChars` | `number` | ✓ | Максимальное количество отображаемых символов. `undefined` означает отсутствие усечения. При отрицательных значениях строка обрезается с конца | | `style` | `'ellipsis' \| 'none'` | ✓ | Стиль терминатора. По умолчанию — `'ellipsis'` | | `terminator` | `string` | ✓ | Пользовательский терминатор, переопределяющий значения локали по умолчанию | | `separator` | `string` | ✓ | Пользовательский разделитель между терминатором и текстом | ### Тип `CutoffFormatOptions` ```typescript interface CutoffFormatOptions { maxChars?: number; style?: 'ellipsis' | 'none'; terminator?: string; separator?: string; } ``` ### Возвращает `string` — Усечённая строка с соответствующим терминатором в соответствии с правилами локали. *** ## Поведение ### Определение локали * По умолчанию использует `_renderingLocales` экземпляра (включая `sourceLocale`, `targetLocale` и резервную локаль) * Можно переопределить, явно указав опцию `locales` * Если определить локаль не удалось, используется локаль библиотеки по умолчанию ### Обработка ограничения символов * **Положительный `maxChars`**: Выполняет усечение с начала и добавляет терминатор * **Отрицательный `maxChars`**: Обрезает с конца и добавляет терминатор в начало * **Нулевой `maxChars`**: Возвращает пустую строку * **Неопределённый `maxChars`**: Усечение не применяется, возвращается исходная строка ### Поведение, зависящее от локали Метод автоматически выбирает подходящие терминаторы в зависимости от языка: * **Французский (`fr`)**: `…` с узким неразрывным пробелом (`\u202F`) * **Китайский (`zh`)**: двойное многоточие `……` без разделителя * **Японский (`ja`)**: двойное многоточие `……` без разделителя * **По умолчанию**: одинарное многоточие `…` без разделителя *** ## Примеры ### Базовое использование локалей экземпляра ```typescript const gt = new GT({ targetLocale: 'en-US' }); const truncated = gt.formatCutoff('Hello, world!', { maxChars: 8 }); console.log(truncated); // "Hello, w…" ``` ### Переопределение локали ```typescript const gt = new GT({ targetLocale: 'en-US' }); // Переопределение локали экземпляра const french = gt.formatCutoff('Bonjour le monde', { locales: 'fr-FR', maxChars: 10 }); console.log(french); // "Bonjour\u202F…" ``` ### Отрицательные значения ограничения на количество символов ```typescript const gt = new GT({ targetLocale: 'en-US' }); // Срез с конца const fromEnd = gt.formatCutoff('JavaScript Framework', { maxChars: -9 }); console.log(fromEnd); // "…Framework" // Больший отрицательный срез const moreFromEnd = gt.formatCutoff('Hello, world!', { maxChars: -3 }); console.log(moreFromEnd); // "…ld!" ``` ### Параметры настройки стилей ```typescript const gt = new GT({ targetLocale: 'en-US' }); // Пользовательский терминатор const custom = gt.formatCutoff('Long description text', { maxChars: 12, terminator: '...' }); console.log(custom); // "Long desc..." // Пользовательский терминатор с разделителем const customSep = gt.formatCutoff('Another example', { maxChars: 10, terminator: '[...]', separator: ' ' }); console.log(customSep); // "Anot [...]" // Без терминатора const none = gt.formatCutoff('Clean cut text', { maxChars: 5, style: 'none' }); console.log(none); // "Clean" ``` ### Многоязычное приложение ```typescript 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)); // Вывод: "Very Long Engl…" console.log(chineseUI.truncateTitle('很长的中文标题在这里', 8)); // Вывод: "很长的中文标题……" ``` ### Динамическая работа с локалью ```typescript 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 }); } // Использование в приложении 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')}`); }); ``` *** ## Примечания * Метод использует `_renderingLocales` экземпляра GT для автоматического определения локали * Длина терминатора и разделителя учитывается при расчёте ограничения символов * Если суммарная длина терминатора и разделителя превышает `maxChars`, возвращается пустая строка * Пользовательские терминаторы полностью переопределяют стандартные значения для конкретной локали * Производительность повышается за счёт внутреннего кэширования экземпляров форматтера ## Следующие шаги * Используйте автономный [`formatCutoff`](/docs/core/functions/formatting/format-cutoff), если нужен вариант без экземпляра GT * Форматируйте сообщения с помощью [`formatMessage`](/docs/core/class/methods/formatting/format-message) * Форматируйте числа с помощью [`formatNum`](/docs/core/class/methods/formatting/format-num) * Узнайте о [свойствах локали](/docs/core/class/methods/locales/get-locale-properties)