В библиотеке Choices.js локализация интерфейса реализуется через
объект i18n, который передаётся в параметры и
переопределяет стандартные текстовые строки. Все текстовые элементы,
отображаемые пользователю (подсказки, сообщения об отсутствии
результатов, плейсхолдеры и состояния загрузки), централизованы и могут
быть заменены без изменения логики работы компонента.
Базовая форма конфигурации выглядит как часть объекта инициализации:
const choices = new Choices(element, {
i18n: {
noResults: 'Результаты не найдены',
noChoices: 'Нет доступных вариантов',
itemSelectText: 'Нажмите для выбора',
loadingText: 'Загрузка...',
maxItemText: (maxItemCount) => {
return `Можно выбрать только ${maxItemCount} элементов`;
},
addItemText: (value) => {
return `Нажмите Enter для добавления <b>${value}</b>`;
},
removeItemButtonTitle: 'Удалить элемент',
}
});
Каждое поле i18n соответствует конкретному текстовому
состоянию интерфейса. Значения могут быть строками или функциями,
возвращающими строку.
noResults определяет текст, отображаемый при отсутствии совпадений в фильтре:
noResults: 'Ничего не найдено'
noChoices используется, когда список полностью пуст:
noChoices: 'Нет доступных значений'
Эти строки активируются в разных контекстах: первая — при поиске, вторая — при отсутствии данных.
itemSelectText задаёт подсказку для элементов списка:
itemSelectText: 'Выбрать'
В режиме множественного выбора этот текст помогает объяснить доступное действие для каждого элемента.
loadingText используется при асинхронной подгрузке данных:
loadingText: 'Загрузка данных...'
В сочетании с setChoices и удалёнными источниками данных
этот параметр становится частью UX-индикации состояния запроса.
Choices.js допускает использование функций вместо строк, что позволяет формировать сообщения на основе параметров состояния компонента.
maxItemText: (maxItemCount) => {
return `Достигнут лимит: ${maxItemCount}`;
}
Функция получает число максимально допустимых элементов и возвращает локализованную строку.
addItemText: (value) => {
return `Добавить значение: ${value}`;
}
Функция получает ввод пользователя и позволяет динамически формировать подсказку, включая значение, введённое в поле.
removeItemButtonTitle: 'Удалить'
Этот параметр влияет на атрибут title кнопки удаления
выбранного элемента. Он особенно важен для доступности и
скринридеров.
В некоторых конфигурациях используется кастомизация поведения выбора через клавиатуру:
itemSelectText: 'Нажать для выбора'
Этот текст отображается как вспомогательная подсказка при фокусе на элементе.
Языковые параметры тесно связаны с доступностью интерфейса.
Choices.js использует i18n не только для визуального
текста, но и для ARIA-ориентированных подсказок.
Пример влияния на доступность:
removeItemButtonTitle попадает в
aria-labelitemSelectText используется как вспомогательное
описание действияnoResults озвучивается скринридерами при пустом
результате поискаКорректная локализация напрямую влияет на поведение assistive technologies.
Структура i18n позволяет формировать наборы переводов
для разных языков и подменять их при инициализации.
const translations = {
ru: {
noResults: 'Ничего не найдено',
noChoices: 'Нет вариантов',
itemSelectText: 'Выбрать',
},
en: {
noResults: 'No results found',
noChoices: 'No choices available',
itemSelectText: 'Press to select',
}
};
Далее язык выбирается при создании экземпляра:
const lang = 'ru';
const choices = new Choices(element, {
i18n: translations[lang]
});
Choices.js не имеет встроенного глобального переключателя языка, поэтому обновление локализации реализуется через пересоздание экземпляра или обновление настроек.
choices.destroy();
const newChoices = new Choices(element, {
i18n: translations['en']
});
Этот способ гарантирует полное обновление всех текстов интерфейса.
При динамической работе с данными можно комбинировать локализацию с обновлением списка:
choices.setChoices([
{ value: '1', label: 'One' },
{ value: '2', label: 'Two' }
], 'value', 'label', true);
Хотя setChoices не управляет языком напрямую, он часто
используется вместе с локализованными текстами состояния загрузки и
пустого списка.
Choices.js допускает использование HTML внутри строк локализации:
addItemText: (value) => {
return `Добавить <strong>${value}</strong>`;
}
Это позволяет визуально выделять динамические значения, однако требует аккуратности, чтобы не нарушить безопасность отображения данных.
Один и тот же ключ может использоваться в разных состояниях интерфейса:
Например, noResults активируется только при поисковом
вводе, тогда как noChoices — при отсутствии данных в
источнике.
Хотя плейсхолдеры input-элемента задаются отдельно, они часто синхронизируются с языковой конфигурацией:
element.setAttribute('placeholder', 'Выберите значение...');
В многоязычных приложениях этот текст обычно хранится в той же
структуре, что и i18n, чтобы сохранять единый слой
локализации.
При необходимости добавления новых текстовых состояний применяется паттерн расширения объекта:
const extendedI18n = {
...translations.ru,
customError: 'Ошибка загрузки данных',
emptySearch: 'Введите запрос для поиска'
};
Такие поля могут использоваться в обёртках над Choices.js или при кастомизации шаблонов.
Если ключи i18n не заданы, используется встроенный набор
английских строк. При частичном переопределении отсутствующие ключи
также возвращаются к дефолтным значениям.
Это позволяет задавать только необходимые изменения без полного копирования конфигурации.
Choices.js корректно работает с UTF-8 строками, включая кириллицу, иероглифы и комбинированные символы. Ограничения возникают только на уровне шрифтов и CSS-оформления, а не самой библиотеки.
noResults: '结果未找到'
При проектировании языковой конфигурации важно учитывать единообразие формулировок:
Choices.js не накладывает ограничений на стиль текста, поэтому
консистентность полностью определяется конфигурацией
i18n.