252 lines
9.8 KiB
TypeScript
252 lines
9.8 KiB
TypeScript
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;
|
|
}
|