SiteLanguages
SiteLanguages предоставляет список языков сайта и помогает выбирать язык по коду или URL-префиксу.Поддерживает
- проверку состояния языковых настроек
- получение всех или только активных языков
- получение языка по умолчанию
- поиск языка по коду
- поиск активного языка по URL-префиксу
- проверку и нормализацию переданного кода языка
- работу с основной или переданной базой данных
Для работы создайте экземпляр класса:
$languages = new SiteLanguages();Быстрый старт
$languages = new SiteLanguages();
if (!$languages->isValid()) {
return;
}
foreach ($languages->all(true) as $language) {
echo $language['code'] . ': ' . $language['label'];
}Аргумент true передаётся в all(), чтобы получить только активные языки.
Состояние настроек
isValid(): bool
Возвращает true, если языковые настройки заполнены корректно:
if (!$languages->isValid()) {
return;
}Корректные настройки должны содержать активные языки и один активный язык по умолчанию.
isEnabled(): bool
Возвращает состояние мультиязычности:
if ($languages->isEnabled()) {
// На сайте используются языковые URL.
}false может означать, что мультиязычность отключена или языковые настройки недействительны. Для проверки настроек отдельно используйте isValid().
Формат данных языка
Методы, возвращающие один язык, предоставляют массив следующего вида:
| Ключ | Тип | Описание |
|---|---|---|
code |
string |
Код языка. |
label |
string |
Отображаемое название языка. |
prefix |
string |
Префикс языка в URL. |
default |
bool |
Является ли язык языком по умолчанию. |
active |
bool |
Активен ли язык. |
order |
int |
Порядок языка в списке. |
Код и URL-префикс являются отдельными значениями и могут различаться.
Получение списка
all(bool $activeOnly = false): array
Без аргумента возвращает все настроенные языки:
$allLanguages = $languages->all();Чтобы получить только активные языки, передайте true:
$activeLanguages = $languages->all(true);Языки возвращаются в настроенном порядке.
Если языковые настройки недействительны, метод возвращает пустой массив.
Язык по умолчанию
getDefault(): ?array
Возвращает активный язык сайта по умолчанию:
$defaultLanguage = $languages->getDefault();
if ($defaultLanguage !== null) {
echo $defaultLanguage['label'];
}Если язык по умолчанию недоступен, метод возвращает null.
defaultCode(string $fallback = 'ru'): string
Возвращает код языка по умолчанию:
$code = $languages->defaultCode();Можно передать резервный код:
$code = $languages->defaultCode('en');Резервное значение используется, если код языка по умолчанию получить невозможно. Недопустимое резервное значение заменяется на ru.
Поиск по коду
getByCode(string $code, bool $activeOnly = true): ?array
Возвращает активный язык по его коду:
$language = $languages->getByCode('en');По умолчанию неактивные языки не возвращаются. Для поиска среди всех настроенных языков передайте false:
$language = $languages->getByCode('en', false);Если язык не найден, метод возвращает null.
Код перед поиском приводится к нижнему регистру, а пробелы по краям удаляются.
Поиск по префиксу
getByPrefix(string $prefix): ?array
Возвращает активный язык по URL-префиксу:
$language = $languages->getByPrefix('en');Передавайте префикс без символов /.
Если активный язык с таким префиксом не найден, метод возвращает null.
Определение кода
resolveCode(?string $code, bool $activeOnly = true, string $fallback = 'ru'): string
Проверяет переданный код и возвращает его, если соответствующий язык существует:
$code = $languages->resolveCode('en');Если код пустой, имеет неверный формат или язык недоступен, возвращается код языка по умолчанию:
$code = $languages->resolveCode(null);Чтобы разрешить неактивный язык, передайте false вторым параметром:
$code = $languages->resolveCode('en', false);Третий параметр задаёт резервный код на случай, если язык по умолчанию получить невозможно:
$code = $languages->resolveCode(null, true, 'en');База данных
__construct(?Database $db = null)
Без аргументов класс использует основную базу данных CMS:
$languages = new SiteLanguages();При необходимости можно передать другой экземпляр Database:
$languages = new SiteLanguages($database);Важные замечания
- экземпляр получает состояние языков при создании
isValid()проверяет настройки, аisEnabled()— состояние мультиязычностиall()без аргумента включает неактивные языкиgetDefault()возвращает только активный языкgetByCode()по умолчанию ищет только активные языкиgetByPrefix()всегда ищет только среди активных языков- код языка и его URL-префикс могут различаться