Языки
Фреймворк говорит по-английски по умолчанию и на языке страницы, если она его назвала. Правило одно на все компоненты:
ближайший
[lang]над узлом →langдокумента → английский.
Одно правило, чтобы страница никогда не смешивала два языка из-за того, что два компонента посмотрели в разные места.
<html lang="ru"> <!-- вся страница по-русски -->
…
<section lang="en"> <!-- а эта область по-английски -->
Откуда берётся слово
По порядку, и первое найденное выигрывает:
- атрибут компонента — кто назвал слово, тот его и назвал, и никакой язык этого не меняет;
- слово, зарегистрированное для выбранного языка;
- слово, которое компонент привёз с собой для этого языка;
- шаги 2–3 для языка без региона (
pt-BR→pt); - шаги 2–3 для английского;
- сам ключ — это видимый дефект, а не пустое место.
<!-- Названо атрибутом: останется «Листы:» на любом языке страницы -->
<sf-pagination pages-label="Листы:" total="120"></sf-pagination>
Добавить язык
Компонент привозит с собой два языка — это пол, а не потолок. Любой другой добавляется снаружи, и фреймворку не нужно о нём знать заранее.
SF.language.registerAll('tr', {
'sf-pagination': { pagesLabel: 'Sayfalar:', totalLabel: 'Toplam:' },
'sf-tag': { remove: 'Kaldır' },
});
SF.language.use('tr'); // переключиться сейчас, без перезагрузки
SF.language.use(null); // снова следовать за страницей
Слова дополняют: можно поправить одну подпись, не переписывая остальные. Чего продукт не перевёл, то берётся по-английски, а не на языке, на котором случайно написана страница.
Что ещё есть
SF.language.current(node) |
какой язык выбран для этого узла, вместе с регионом |
SF.language.register(component, code, words) |
один компонент, один язык |
SF.language.known(component) |
для каких языков что-то зарегистрировано |
SF.language.onChange(listener) |
вызывается при смене языка или словаря |
SF.language.forget() |
забыть всё зарегистрированное |
SF.pageLanguage(node), SF.pageText(dict, key, node) |
то же правило для своих элементов |
Компоненты перерисовываются сами: подписка живёт в базовом элементе, одна на всех, поэтому смена языка не требует перезагрузки страницы и её не нужно раздавать по компонентам руками.
Что остаётся за продуктом
Данные. Названия записей, разделов и вариантов приходят от хоста, и язык у них его.
Форматы. Числа и даты в данных фреймворк не переводит: их форматирует
хост (в компонентах пакета larena — функцией
formatFieldValue(field, value), и в карточке записи, и в ячейке списка).
Это решение продукта, а не
фреймворка: «798 700 ₽» и «25 сентября 2026» выглядят по-разному в разных
предметных областях.
Множественное число. Правил склонения во фреймворке нет. Там, где нужно «5 записей» против «2 записи», слово даёт хост.