Initial commit

This commit is contained in:
2026-07-09 00:14:45 +02:00
commit 0c2ec3fc1c
100 changed files with 47687 additions and 0 deletions
+251
View File
@@ -0,0 +1,251 @@
export type UiLanguage = 'PL' | 'EN' | 'UK' | 'DE';
const en: Record<string, string> = {
'Kupuję': 'Buy',
'Wynajmuję': 'Rent',
'Jak sprzedawać': 'How to sell',
'Wycena mieszkania': 'Property valuation',
'Firmy i usługi': 'Companies and services',
'Poradniki': 'Guides',
'Dane i ustawienia': 'Data and settings',
'Edytuj profil': 'Edit profile',
'Dodatkowe informacje': 'Additional information',
'Adres zamieszkania': 'Residential address',
'Preferencje kontaktu': 'Contact preferences',
'Język komunikacji': 'Communication language',
'Nie podano': 'Not provided',
'Polski': 'Polish',
'Zapisz zmiany': 'Save changes',
'Dodaj zdjęcie': 'Add photo',
'Zmień zdjęcie': 'Change photo',
'Usuń zdjęcie': 'Remove photo',
'Personalizacja profilu': 'Profile personalization',
'Widoczność profilu': 'Profile visibility',
'Publiczna': 'Public',
'Prywatna': 'Private',
'Tylko kontakty': 'Contacts only',
'Profil publiczny': 'Public profile',
'Zobacz profil': 'View profile',
'Usunięcie konta': 'Account deletion',
'Usuń konto': 'Delete account',
'Porównanie mieszkań': 'Apartment comparison',
'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Compare up to 4 apartments and choose the best option for you.',
'Dodaj mieszkania do porównania': 'Add apartments to compare',
'Możesz porównać do 4 ofert jednocześnie.': 'You can compare up to 4 listings at once.',
'Szukaj mieszkań': 'Search apartments',
'Wszystkie typy': 'All types',
'Mieszkanie': 'Apartment',
'Dom': 'House',
'Działka': 'Plot',
'Lokal użytkowy': 'Commercial unit',
'Pokój': 'Room',
'Dodaj': 'Add',
'Podsumowanie porównania': 'Comparison summary',
'Cena': 'Price',
'Cena całkowita': 'Total price',
'Cena za m²': 'Price per m²',
'Przelicznik ceny do metrażu': 'Price-to-area ratio',
'Lokalizacja': 'Location',
'Lokalizacja ogłoszenia': 'Listing location',
'Metraż': 'Area',
'Powierzchnia użytkowa': 'Usable area',
'Liczba pokoi': 'Number of rooms',
'Ilość pomieszczeń': 'Number of spaces',
'Piętro': 'Floor',
'Poziom mieszkania': 'Apartment floor',
'Stan': 'Condition',
'Stan techniczny': 'Technical condition',
'Rok budowy': 'Year built',
'Rok oddania do użytku': 'Year commissioned',
'Czynsz': 'Rent',
'Miesięczny czynsz': 'Monthly rent',
'Parking': 'Parking',
'Miejsce parkingowe': 'Parking space',
'Balkon / Taras': 'Balcony / Terrace',
'Dodatkowa przestrzeń': 'Additional space',
'Dostępność': 'Availability',
'Termin dostępności': 'Availability date',
'Ocena ogólna': 'Overall score',
'Na podstawie kluczowych czynników': 'Based on key factors',
'Brak wybranych ogłoszeń': 'No selected listings',
'Dodaj pierwsze mieszkanie, aby rozpocząć porównanie.': 'Add your first apartment to start comparison.',
'Zobacz ogłoszenie': 'View listing',
'Wczytuję ogłoszenia...': 'Loading listings...',
'Udostępnij porównanie': 'Share comparison',
'Wyczyść wszystko': 'Clear all',
'Strona główna': 'Home page',
'Porównywarka mieszkań': 'Apartment comparison tool',
'Sprzedaż': 'Sale',
'Wynajem': 'Rent',
'Dodaj min. 2 oferty do porównania': 'Add at least 2 listings to compare',
'Świetna': 'Excellent',
'Bardzo dobra': 'Very good',
'Dobra': 'Good',
'Do poprawy': 'Needs improvement',
'Od zaraz': 'Immediately',
'Do uzgodnienia': 'To be agreed',
'Brak': 'None',
};
const uk: Record<string, string> = {
'Kupuję': 'Купую',
'Wynajmuję': 'Орендую',
'Jak sprzedawać': 'Як продавати',
'Wycena mieszkania': 'Оцінка нерухомості',
'Firmy i usługi': 'Компанії та послуги',
'Poradniki': 'Порадники',
'Dane i ustawienia': 'Дані та налаштування',
'Edytuj profil': 'Редагувати профіль',
'Dodatkowe informacje': 'Додаткова інформація',
'Adres zamieszkania': 'Адреса проживання',
'Preferencje kontaktu': 'Параметри контакту',
'Język komunikacji': 'Мова спілкування',
'Nie podano': 'Не вказано',
'Polski': 'Польська',
'Zapisz zmiany': 'Зберегти зміни',
'Dodaj zdjęcie': 'Додати фото',
'Zmień zdjęcie': 'Змінити фото',
'Usuń zdjęcie': 'Видалити фото',
'Personalizacja profilu': 'Персоналізація профілю',
'Widoczność profilu': 'Видимість профілю',
'Publiczna': 'Публічний',
'Prywatna': 'Приватний',
'Tylko kontakty': 'Лише контакти',
'Profil publiczny': 'Публічний профіль',
'Zobacz profil': 'Переглянути профіль',
'Usunięcie konta': 'Видалення облікового запису',
'Usuń konto': 'Видалити обліковий запис',
'Porównanie mieszkań': 'Порівняння квартир',
'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Порівняйте до 4 квартир і оберіть найкращу пропозицію для себе.',
'Dodaj mieszkania do porównania': 'Додайте квартири для порівняння',
'Możesz porównać do 4 ofert jednocześnie.': 'Ви можете порівняти до 4 оголошень одночасно.',
'Szukaj mieszkań': 'Пошук квартир',
'Wszystkie typy': 'Усі типи',
'Mieszkanie': 'Квартира',
'Dom': 'Будинок',
'Działka': 'Ділянка',
'Lokal użytkowy': 'Комерційне приміщення',
'Pokój': 'Кімната',
'Dodaj': 'Додати',
'Podsumowanie porównania': 'Підсумок порівняння',
'Cena': 'Ціна',
'Cena całkowita': 'Загальна ціна',
'Cena za m²': 'Ціна за м²',
'Lokalizacja': 'Локація',
'Metraż': 'Площа',
'Liczba pokoi': 'Кількість кімнат',
'Piętro': 'Поверх',
'Stan': 'Стан',
'Rok budowy': 'Рік побудови',
'Czynsz': 'Орендна плата',
'Parking': 'Паркування',
'Balkon / Taras': 'Балкон / Тераса',
'Dostępność': 'Доступність',
'Ocena ogólna': 'Загальна оцінка',
'Brak wybranych ogłoszeń': 'Немає вибраних оголошень',
'Zobacz ogłoszenie': 'Переглянути оголошення',
'Udostępnij porównanie': 'Поділитися порівнянням',
'Wyczyść wszystko': 'Очистити все',
'Strona główna': 'Головна сторінка',
'Porównywarka mieszkań': 'Порівняння квартир',
'Sprzedaż': 'Продаж',
'Wynajem': 'Оренда',
'Brak': 'Немає',
};
const de: Record<string, string> = {
'Kupuję': 'Ich kaufe',
'Wynajmuję': 'Ich miete',
'Jak sprzedawać': 'Wie verkauft man',
'Wycena mieszkania': 'Immobilienbewertung',
'Firmy i usługi': 'Firmen und Dienstleistungen',
'Poradniki': 'Ratgeber',
'Dane i ustawienia': 'Daten und Einstellungen',
'Edytuj profil': 'Profil bearbeiten',
'Dodatkowe informacje': 'Zusätzliche Informationen',
'Adres zamieszkania': 'Wohnadresse',
'Preferencje kontaktu': 'Kontaktpräferenzen',
'Język komunikacji': 'Kommunikationssprache',
'Nie podano': 'Nicht angegeben',
'Polski': 'Polnisch',
'Zapisz zmiany': 'Änderungen speichern',
'Dodaj zdjęcie': 'Foto hinzufügen',
'Zmień zdjęcie': 'Foto ändern',
'Usuń zdjęcie': 'Foto entfernen',
'Personalizacja profilu': 'Profilpersonalisierung',
'Widoczność profilu': 'Profilsichtbarkeit',
'Publiczna': 'Öffentlich',
'Prywatna': 'Privat',
'Tylko kontakty': 'Nur Kontakte',
'Profil publiczny': 'Öffentliches Profil',
'Zobacz profil': 'Profil ansehen',
'Usunięcie konta': 'Konto löschen',
'Usuń konto': 'Konto entfernen',
'Porównanie mieszkań': 'Wohnungsvergleich',
'Porównaj do 4 mieszkań i wybierz najlepszą ofertę dla siebie.': 'Vergleichen Sie bis zu 4 Wohnungen und wählen Sie das beste Angebot.',
'Dodaj mieszkania do porównania': 'Wohnungen zum Vergleich hinzufügen',
'Możesz porównać do 4 ofert jednocześnie.': 'Sie können bis zu 4 Angebote gleichzeitig vergleichen.',
'Szukaj mieszkań': 'Wohnungen suchen',
'Wszystkie typy': 'Alle Typen',
'Mieszkanie': 'Wohnung',
'Dom': 'Haus',
'Działka': 'Grundstück',
'Lokal użytkowy': 'Gewerbeobjekt',
'Pokój': 'Zimmer',
'Dodaj': 'Hinzufügen',
'Podsumowanie porównania': 'Vergleichszusammenfassung',
'Cena': 'Preis',
'Cena całkowita': 'Gesamtpreis',
'Cena za m²': 'Preis pro m²',
'Lokalizacja': 'Standort',
'Metraż': 'Fläche',
'Liczba pokoi': 'Zimmeranzahl',
'Piętro': 'Etage',
'Stan': 'Zustand',
'Rok budowy': 'Baujahr',
'Czynsz': 'Miete',
'Parking': 'Parken',
'Balkon / Taras': 'Balkon / Terrasse',
'Dostępność': 'Verfügbarkeit',
'Ocena ogólna': 'Gesamtbewertung',
'Brak wybranych ogłoszeń': 'Keine ausgewählten Anzeigen',
'Zobacz ogłoszenie': 'Anzeige ansehen',
'Udostępnij porównanie': 'Vergleich teilen',
'Wyczyść wszystko': 'Alles löschen',
'Strona główna': 'Startseite',
'Porównywarka mieszkań': 'Wohnungsvergleich',
'Sprzedaż': 'Verkauf',
'Wynajem': 'Miete',
'Brak': 'Keine',
};
const dictionaries: Record<Exclude<UiLanguage, 'PL'>, Record<string, string>> = {
EN: en,
UK: uk,
DE: de,
};
function normalizeKey(value: string): string {
return value.replace(/\s+/g, ' ').trim();
}
export function getManualTranslation(language: UiLanguage, source: string): string | null {
if (language === 'PL') {
return source;
}
const dictionary = dictionaries[language];
if (!dictionary) {
return null;
}
const exact = dictionary[source];
if (exact) {
return exact;
}
const normalizedSource = normalizeKey(source);
if (!normalizedSource) {
return null;
}
const normalizedHit = dictionary[normalizedSource];
return normalizedHit ?? null;
}