const translations = { ru: { // Navigation & General 'nav.about': 'О нас', 'nav.rooms': 'Номера', 'nav.gallery': 'Галерея', 'nav.activities': 'Развлечения', 'nav.reviews': 'Отзывы', 'nav.host': 'Хозяин', 'nav.contact': 'Контакты', 'nav.admin': 'Управление', // Reviews Section 'reviews.title': 'Отзывы наших гостей', 'reviews.subtitle': 'Более {count} счастливых гостей рекомендуют Hotel 777', 'reviews.leave_review': 'Оставить отзыв', 'reviews.write_review': 'Написать отзыв', 'reviews.avg_rating': 'Средняя оценка', 'reviews.stars': 'звёзд', 'reviews.star': 'звезда', 'reviews.write_first': 'Будьте первым, кто оставит отзыв!', // Select Groups 'select.popular': 'Популярные', 'select.alphabetical': 'По алфавиту', // Review Form 'form.select_country': 'Выберите страну', 'form.select_city': 'Город (необязательно)', 'form.another_city': 'Другой город', 'form.city_placeholder': 'Введите название города', 'form.rating': 'Оценка', 'form.your_name': 'Ваше имя (ФИО)', 'form.name_placeholder': 'Иванов Иван Иванович', 'form.review_text': 'Текст отзыва', 'form.review_placeholder': 'Расскажите о вашем опыте отдыха в Hotel 777...', 'form.hotel_code': 'Код гостиницы', 'form.code_placeholder': 'Получите на ресепшене', 'form.code_hint': 'Код сообщается гостям на ресепшене отеля', 'form.submit': 'Отправить отзыв', 'form.cancel': 'Отмена', // Validation Messages 'validation.required': 'Это поле обязательно', 'validation.country_required': 'Выберите страну', 'validation.city_required': 'Выберите или введите город', 'validation.name_required': 'Введите ваше имя', 'validation.name_min': 'Имя должно содержать минимум 2 символа', 'validation.review_required': 'Напишите текст отзыва', 'validation.review_min': 'Отзыв должен содержать минимум 20 символов', 'validation.code_required': 'Введите код гостиницы', 'validation.code_invalid': 'Неверный код гостиницы', 'validation.rating_required': 'Поставьте оценку', 'validation.rating_range': 'Оценка должна быть от 0 до 5', 'validation.too_frequent': 'Вы уже оставляли отзыв недавно. Попробуйте позже.', 'validation.success': 'Спасибо! Ваш отзыв отправлен на модерацию и будет опубликован после проверки.', // Admin 'admin.reviews': 'Отзывы', 'admin.reviews_all': 'Все отзывы', 'admin.reviews_pending': 'На модерации', 'admin.reviews_approved': 'Одобренные', 'admin.reviews_rejected': 'Скрытые', 'admin.approve': 'Одобрить', 'admin.reject': 'Скрыть', 'admin.delete': 'Удалить', 'admin.approve_confirm': 'Одобрить этот отзыв?', 'admin.reject_confirm': 'Скрыть этот отзыв?', 'admin.delete_confirm': 'Удалить этот отзыв?', 'admin.stats.total': 'Всего отзывов', 'admin.stats.pending': 'Ожидают модерации', 'admin.stats.approved': 'Опубликовано', 'admin.settings': 'Настройки', 'admin.settings.review_code': 'Кодовое слово для отзывов', 'admin.settings.current_code': 'Текущий код', 'admin.settings.new_code': 'Новый код', 'admin.settings.save': 'Сохранить', 'admin.settings.saved': 'Кодовое слово обновлено', // Reviews List 'review.from': 'из', 'review.date_format': 'MMMM YYYY', 'review.no_reviews': 'Отзывов пока нет', // Footer 'footer.rights': 'Все права защищены', 'footer.hotel777': 'Hotel 777', // Buttons 'btn.close': 'Закрыть', 'btn.loading': 'Отправка...', 'btn.show_code': 'Показать', 'btn.hide_code': 'Скрыть', // Language 'lang.switch': 'English', 'lang.current': 'Русский' }, en: { // Navigation & General 'nav.about': 'About Us', 'nav.rooms': 'Rooms', 'nav.gallery': 'Gallery', 'nav.activities': 'Activities', 'nav.reviews': 'Reviews', 'nav.host': 'Host', 'nav.contact': 'Contact', 'nav.admin': 'Management', // Reviews Section 'reviews.title': 'Guest Reviews', 'reviews.subtitle': 'More than {count} happy guests recommend Hotel 777', 'reviews.leave_review': 'Leave a Review', 'reviews.write_review': 'Write a Review', 'reviews.avg_rating': 'Average rating', 'reviews.stars': 'stars', 'reviews.star': 'star', 'reviews.write_first': 'Be the first to leave a review!', // Select Groups 'select.popular': 'Popular', 'select.alphabetical': 'Alphabetical', // Review Form 'form.select_country': 'Select country', 'form.select_city': 'City (optional)', 'form.another_city': 'Other city', 'form.city_placeholder': 'Enter city name', 'form.rating': 'Rating', 'form.your_name': 'Your name', 'form.name_placeholder': 'John Smith', 'form.review_text': 'Review text', 'form.review_placeholder': 'Tell us about your experience at Hotel 777...', 'form.hotel_code': 'Hotel code', 'form.code_placeholder': 'Get at reception', 'form.code_hint': 'The code is provided to guests at the hotel reception', 'form.submit': 'Submit Review', 'form.cancel': 'Cancel', // Validation Messages 'validation.required': 'This field is required', 'validation.country_required': 'Please select a country', 'validation.city_required': 'Please select or enter a city', 'validation.name_required': 'Please enter your name', 'validation.name_min': 'Name must be at least 2 characters', 'validation.review_required': 'Please write your review', 'validation.review_min': 'Review must be at least 20 characters', 'validation.code_required': 'Please enter hotel code', 'validation.code_invalid': 'Invalid hotel code', 'validation.rating_required': 'Please provide a rating', 'validation.rating_range': 'Rating must be between 0 and 5', 'validation.too_frequent': 'You have recently left a review. Please try again later.', 'validation.success': 'Thank you! Your review has been submitted for moderation and will be published after approval.', // Admin 'admin.reviews': 'Reviews', 'admin.reviews_all': 'All Reviews', 'admin.reviews_pending': 'Pending', 'admin.reviews_approved': 'Approved', 'admin.reviews_rejected': 'Hidden', 'admin.approve': 'Approve', 'admin.reject': 'Hide', 'admin.delete': 'Delete', 'admin.approve_confirm': 'Approve this review?', 'admin.reject_confirm': 'Hide this review?', 'admin.delete_confirm': 'Delete this review?', 'admin.stats.total': 'Total reviews', 'admin.stats.pending': 'Awaiting moderation', 'admin.stats.approved': 'Published', 'admin.settings': 'Settings', 'admin.settings.review_code': 'Review access code', 'admin.settings.current_code': 'Current code', 'admin.settings.new_code': 'New code', 'admin.settings.save': 'Save', 'admin.settings.saved': 'Code word updated', // Reviews List 'review.from': 'from', 'review.date_format': 'MMMM YYYY', 'review.no_reviews': 'No reviews yet', // Footer 'footer.rights': 'All rights reserved', 'footer.hotel777': 'Hotel 777', // Buttons 'btn.close': 'Close', 'btn.loading': 'Sending...', 'btn.show_code': 'Show', 'btn.hide_code': 'Hide', // Language 'lang.switch': 'Русский', 'lang.current': 'English' } }; function t(key, lang = 'ru', replacements = {}) { let text = translations[lang]?.[key] || translations['ru'][key] || key; Object.entries(replacements).forEach(([k, v]) => { text = text.replace(`{${k}}`, v); }); return text; } function getTranslations(lang) { return translations[lang] || translations['ru']; } function getAvailableLanguages() { return Object.keys(translations); } module.exports = { t, getTranslations, getAvailableLanguages, translations };