generaltranslation@8.1.0
Обзор
generaltranslation@8.1.0 вводит formatCutoff(), функцию усечения текста с учётом локали, которая обрабатывает ограничения длины текста с использованием подходящих знаков окончания для разных языков.
Мотивация
Усечение текста в UI обычно реализуется с помощью CSS text-overflow: ellipsis или простого обрезания строк, но эти подходы не учитывают особенности конкретной локали. В разных языках используются разные символы многоточия, правила расстановки пробелов и пунктуации при обрыве текста.
Кроме того, когда AI‑переводы ограничены по количеству символов, зачастую необходимо строго контролировать соблюдение этих ограничений на стороне клиента как запасной механизм.
Использование
formatCutoff() доступен как метод экземпляра GT и как отдельная функция:
import { GT, formatCutoff } from 'generaltranslation'
const gt = new GT({ targetLocale: 'en-US' })
// Базовое усечение
gt.formatCutoff('Hello, world!', { maxChars: 8 })
// Возвращает: 'Hello, w…'
// Отдельная функция
formatCutoff('Hello, world!', {
locales: 'fr-FR',
maxChars: 8
})
// Возвращает: 'Hello, w\u202F…' // Обратите внимание на узкий пробел перед многоточиемОтрицательные значения maxChars
Отрицательные значения обрезают строку с конца и добавляют терминатор в начало:
gt.formatCutoff('Hello, world!', { maxChars: -3 })
// Возвращает: '…ld!'Терминаторы, специфичные для локали
Разные локали используют разные варианты многоточия:
// В китайском и японском языках используется двойное многоточие
formatCutoff('你好世界', { locales: 'zh-CN', maxChars: 4 })
// Возвращает: '你好……'
// Во французском языке перед многоточием используется узкий неразрывный пробел
formatCutoff('Bonjour', { locales: 'fr-FR', maxChars: 5 })
// Возвращает: 'Bonj\u202F…'Пользовательские терминаторы
Изменяйте стандартное поведение с помощью пользовательских терминаторов и разделителей:
gt.formatCutoff('Long text here', {
maxChars: 10,
terminator: '...',
separator: ' '
})
// Возвращает: 'Long text ...'Без терминатора
Используйте стиль 'none', чтобы усекать без добавления терминатора:
gt.formatCutoff('Hello, world!', {
maxChars: 5,
style: 'none'
})
// Возвращает: 'Hello'Основа для UI‑библиотек
Эта функциональность служит базовым слоем для реализаций, ориентированных на пользовательский интерфейс, в gt-react и gt-next, которые будут предоставлять подмножества этой функциональности, адаптированные под соответствующие фреймворки.