Кейс: HR-площадка для найма IT-специалистов за 2 месяца на английском языке

Рынок IT-рекрутинга в России перенасыщен: hh.ru, Habr Career, LinkedIn. Но как найти разработчика из Беларуси, Казахстана или Армении? Как построить площадку, ориентированную на англоговорящую аудиторию, но с данными на двух языках? Один из наших клиентов — стартап из сферы HR-tech — решил создать международный джоб-борд для IT-специалистов, полностью на английском, но с возможностью перевода интерфейса и данных на русский.

Мы сделали площадку за 2 месяца на Falcon Space. Всего 350 тысяч рублей (лицензия + доработки). Сейчас на ней зарегистрировано 200+ работодателей и 3000+ соискателей. Расскажу, как настроить мультиязычный сайт с личными кабинетами и не сойти с ума.

Почему мультиязычность — это не просто «перевести кнопки»

Многие думают: «Переведу интерфейс на английский — и готово». Но на практике мультиязычный сайт с личными кабинетами включает три уровня:

  1. Интерфейс платформы — меню, кнопки, сообщения об ошибках, датапикеры. Это статический перевод.
  2. Пользовательские данные — например, название вакансии, описание, требования. Они могут храниться на одном языке, а могут — на нескольких (если работодатель вводит текст на двух языках).
  3. Системные сообщения — письма, уведомления, чеки. Они также должны быть на языке пользователя.
  4. В нашем проекте были требования:

    Расскажу, как это реализовано в Falcon Space.

    Архитектура мультиязычности в Falcon Space

    Платформа поддерживает несколько уровней локализации из коробки:

    Схема для вакансий:

    CREATE TABLE [app].[vacancies] (
        vacancy_id int PRIMARY KEY,
        company_id int,
        created_at datetime,
        is_active bit
    );
    
    CREATE TABLE [app].[vacancy_translations] (
        translation_id int PRIMARY KEY,
        vacancy_id int,
        lang_code nvarchar(10), -- 'en', 'ru'
        title nvarchar(200),
        description nvarchar(MAX),
        requirements nvarchar(MAX)
    );
    

    При отображении вакансии для текущего языка система сначала ищет перевод на язык пользователя. Если его нет — берёт язык по умолчанию (английский). Это позволяет работодателям заполнять вакансию хотя бы на одном языке, а со временем добавлять перевод.

    Личные кабинеты соискателя и работодателя

    На площадке две основные роли: Соискатель (Developer) и Работодатель (Employer). Есть также администратор.

    Личный кабинет соискателя

    Личный кабинет работодателя

    Технические особенности реализации на Falcon Space

    Переключение языка и хранение предпочтений

    При первом заходе пользователь видит английский интерфейс. Кнопка переключения меняет язык через параметр URL: ?lang=ru. После авторизации язык сохраняется в профиле пользователя в таблице users.lang. При следующем входе система автоматически подставляет сохранённый язык.

    Для неавторизованных посетителей язык хранится в сессии или куке.

    Мультиязычный поиск

    При поиске вакансий соискатель вводит ключевые слова на своём языке. Нужно искать и по англ, и по рус версиям заголовка, если они есть. Мы сделали полнотекстовый индекс на двух языках, используя CONTAINS.

    CREATE FULLTEXT CATALOG ft_catalog AS DEFAULT;
    CREATE FULLTEXT INDEX ON vacancy_translations(title, description) 
        KEY INDEX PK_vacancy_translations 
        WITH STOPLIST = SYSTEM;
    

    Поиск: WHERE CONTAINS((title, description), @keywords).

    Генерация мультиязычных URL и sitemap

    Для SEO мы сделали поддомены: en.site.com — английская версия, ru.site.com — русская. В личном кабинете пользователя также есть выбор, но он может переключаться между поддоменами. Это стандартный подход для международных проектов.

    Sitemap генерируется отдельно для каждого поддомена, включая все вакансии с соответствующими переводами. Это помогает поисковикам правильно индексировать версии.

    Пример генерации URL для вакансии: en.site.com/vacancy/123 и ru.site.com/vacancy/123. При заходе на русскую версию заголовок и описание берутся из таблицы переводов с lang='ru'.

    Письма и уведомления

    Шаблоны писем хранятся в таблице email_templates с полем lang_code. При отправке письма системе передаётся язык пользователя, и она выбирает нужный шаблон. Мы подготовили шаблоны на английском и русском для всех событий: регистрация, отклик на вакансию, приглашение на собеседование.

    Результаты проекта и отзывы

    Проект был реализован за 2,5 месяца (с учётом тестирования). Бюджет — около 350 тыс. рублей (лицензия + доработки). Основные затраты ушли на адаптацию поиска и мультиязычную логику.

    Через полгода после запуска:

    Из отзыва заказчика (Startpack): «Разумный компромисс между универсальными решениями и разработкой с нуля. Готовность разработчиков развивать и добавлять функционал. Возможность в случае необходимости дальнейшей поддержки силами собственных разработчиков, владеющих только SQL и Bootstrap. Рекомендую».

    Как сделать мультиязычный сайт на Falcon Space: минимальный план

    1. Включите поддержку локализации в настройках платформы (админ-раздел «Локализация»). Загрузите переводы интерфейса (мы даём базовые файлы для EN и RU).
    2. Добавьте переключатель языков на сайт (можно через шаблон).
    3. Для сущностей, которые требуют перевода (например, вакансии, товары), создайте таблицы переводов по описанной выше схеме.
    4. Модифицируйте SQL-процедуры, чтобы они учитывали язык (@lang) и подтягивали данные из таблицы переводов.
    5. Настройте поддомены (если нужно) или работайте через параметр lang в URL.
    6. Создайте мультиязычные шаблоны писем.

    Если вы планируете международный проект, закладывайте мультиязычность в ТЗ с самого начала. Переделывать потом — дороже в 3-4 раза.

    Сколько стоит мультиязычность для вашего проекта

    Мультиязычный сайт расширяет вашу аудиторию в разы. Если вы хотите выйти на рынок СНГ или Европы — это must-have. На Falcon Space это реализуемо за разумные деньги.

    Страница-источник на сайте falconspace.ru