From 1746c86a23ada942d055ac57488ae030d5be3993 Mon Sep 17 00:00:00 2001 From: michuhu Date: Fri, 12 Sep 2025 12:11:11 +0200 Subject: [PATCH 1/2] added polish locales changes in i18n config modified the docs to reflect the chagnes --- CONTRIBUTING.md | 2 + app/frontend/src/i18n/config.ts | 8 +- app/frontend/src/locales/pl/translation.json | 179 +++++++++++++++++++ docs/deploy_features.md | 2 +- 4 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 app/frontend/src/locales/pl/translation.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index de47e5be07..b26a5753ef 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -162,3 +162,5 @@ Here are community contributors that can review translations: | Spanish | @miguelmsft | | Turkish | @mertcakdogan | | Italian | @ivanvaccarics | +| Dutch | | +| Polish | @michuhu | diff --git a/app/frontend/src/i18n/config.ts b/app/frontend/src/i18n/config.ts index c17b074225..3084002d1f 100644 --- a/app/frontend/src/i18n/config.ts +++ b/app/frontend/src/i18n/config.ts @@ -12,6 +12,7 @@ import nlTranslation from "../locales/nl/translation.json"; import ptBRTranslation from "../locales/ptBR/translation.json"; import trTranslation from "../locales/tr/translation.json"; import itTranslation from "../locales/it/translation.json"; +import plTranslation from "../locales/pl/translation.json"; export const supportedLngs: { [key: string]: { name: string; locale: string } } = { da: { @@ -49,6 +50,10 @@ export const supportedLngs: { [key: string]: { name: string; locale: string } } it: { name: "Italiano", locale: "it-IT" + }, + pl: { + name: "Polski", + locale: "pl-PL" } }; @@ -68,7 +73,8 @@ i18next nl: { translation: nlTranslation }, ptBR: { translation: ptBRTranslation }, tr: { translation: trTranslation }, - it: { translation: itTranslation } + it: { translation: itTranslation }, + pl: { translation: plTranslation } }, fallbackLng: "en", supportedLngs: Object.keys(supportedLngs), diff --git a/app/frontend/src/locales/pl/translation.json b/app/frontend/src/locales/pl/translation.json new file mode 100644 index 0000000000..2fae11e393 --- /dev/null +++ b/app/frontend/src/locales/pl/translation.json @@ -0,0 +1,179 @@ +{ + "pageTitle": "Azure OpenAI + Wyszukiwanie AI", + "headerTitle": "Azure OpenAI + Wyszukiwanie AI", + "chat": "Czat", + "qa": "Zadaj pytanie", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "clearChat": "Wyczyść czat", + "history": { + "chatHistory": "Historia czatu", + "openChatHistory": "Otwórz historię czatu", + "noHistory": "Brak historii czatu", + "deleteModalTitle": "Usuń historię czatu", + "deleteModalDescription": "Tej akcji nie można cofnąć. Usunąć tę historię czatu?", + "deleteLabel": "Usuń", + "cancelLabel": "Anuluj", + "today": "Dziś", + "yesterday": "Wczoraj", + "last7days": "Ostatnie 7 dni", + "last30days": "Ostatnie 30 dni" + }, + "upload": { + "fileLabel": "Prześlij plik:", + "uploadedFilesLabel": "Poprzednio przesłane pliki:", + "noFilesUploaded": "Brak przesłanych plików", + "loading": "Ładowanie...", + "manageFileUploads": "Zarządzaj przesłanymi plikami", + "uploadingFiles": "Przesyłanie plików...", + "uploadedFileError": "Błąd podczas przesyłania pliku – spróbuj ponownie lub skontaktuj się z administratorem.", + "deleteFile": "Usuń plik", + "deletingFile": "Usuwanie pliku...", + "errorDeleting": "Błąd podczas usuwania.", + "fileDeleted": "Plik usunięty" + }, + "developerSettings": "Ustawienia deweloperskie", + + "chatEmptyStateTitle": "Rozmawiaj ze swoimi danymi", + "chatEmptyStateSubtitle": "Zapytaj o cokolwiek lub spróbuj przykładu", + "defaultExamples": { + "1": "Co jest zawarte w moim planie Northwind Health Plus, czego nie ma w standardowym?", + "2": "Co się dzieje podczas oceny okresowej?", + "3": "Czym zajmuje się Product Manager?", + "placeholder": "Wpisz nowe pytanie (np. czy mój plan obejmuje coroczne badania wzroku?)" + }, + "askTitle": "Zapytaj swoje dane", + "gpt4vExamples": { + "1": "Porównaj wpływ stóp procentowych i PKB na rynki finansowe.", + "2": "Jaki jest oczekiwany trend indeksu S&P 500 w ciągu najbliższych pięciu lat? Porównaj go z wcześniejszymi wynikami S&P 500", + "3": "Czy możesz zidentyfikować jakąkolwiek korelację między cenami ropy a trendami na rynku akcji?", + "placeholder": "Przykład: Czy mój plan obejmuje coroczne badania wzroku?" + }, + "generatingAnswer": "Generowanie odpowiedzi", + "citationWithColon": "Cytat:", + "followupQuestions": "Pytania uzupełniające:", + + "tooltips": { + "submitQuestion": "Wyślij pytanie", + "askWithVoice": "Zadaj pytanie głosem", + "stopRecording": "Zatrzymaj nagrywanie pytania", + "showThoughtProcess": "Pokaż tok rozumowania", + "showSupportingContent": "Pokaż treść pomocniczą", + "speakAnswer": "Odczytaj odpowiedź", + "info": "Informacje", + "save": "Zapisz", + "copy": "Kopiuj", + "copied": "Skopiowano!" + }, + + "headerTexts":{ + "thoughtProcess": "Tok rozumowania", + "supportingContent": "Treść pomocnicza", + "citation": "Cytat" + }, + + "labels": { + "toggleMenu": "Przełącz menu", + "languagePicker": "Wybierz swój język", + "headerText": "Skonfiguruj generowanie odpowiedzi", + "closeButton": "Zamknij", + "promptTemplate": "Nadpisz szablon podpowiedzi", + "temperature": "Temperatura", + "seed": "Ziarno", + "minimumSearchScore": "Minimalny wynik wyszukiwania", + "minimumRerankerScore": "Minimalny wynik sortowania semantycznego", + "retrieveCount": "Pobierz tyle wyników wyszukiwania:", + "maxSubqueryCount": "Maksymalna liczba zapytań podrzędnych", + "resultsMergeStrategy": "Strategia łączenia wyników", + "resultsMergeStrategyOptions": { + "interleaved": "Przeplatane", + "descending": "Malejąco" + }, + "includeCategory": "Uwzględnij kategorię", + "includeCategoryOptions": { + "all": "Wszystkie" + }, + "excludeCategory": "Wyklucz kategorię", + "useSemanticRanker": "Użyj semantycznego rankera do pobierania", + "useSemanticCaptions": "Użyj semantycznych podpisów", + "useQueryRewriting": "Użyj przepisywania zapytań do pobierania", + "reasoningEffort": "Poziom rozumowania", + "reasoningEffortOptions": { + "low": "Niski", + "medium": "Średni", + "high": "Wysoki" + }, + "useSuggestFollowupQuestions": "Sugeruj pytania uzupełniające", + "useAgenticRetrieval": "Użyj agentowego pobierania", + "useGPT4V": "Użyj modelu GPT z widzeniem", + "gpt4VInput": { + "label": "Dane wejściowe modelu GPT z widzeniem", + "options": { + "textAndImages": "Obrazy i tekst", + "images": "Obrazy", + "texts": "Tekst" + } + }, + "retrievalMode": { + "label": "Tryb pobierania", + "options": { + "hybrid": "Wektory + Tekst (Hybrydowy)", + "vectors": "Wektory", + "texts": "Tekst" + } + }, + "vector": { + "label": "Pola wektorowe (wyszukiwanie wielozapytaniowe)", + "options": { + "embedding": "Osadzenia tekstu", + "imageEmbedding": "Osadzenia obrazu", + "both": "Osadzenia tekstu i obrazu" + } + }, + "useOidSecurityFilter": "Użyj filtra bezpieczeństwa OID", + "useGroupsSecurityFilter": "Użyj filtra bezpieczeństwa grup", + "shouldStream": "Strumieniuj odpowiedzi czatu" + }, + + "helpTexts": { + "promptTemplate": + "Nadpisuje podpowiedź używaną do generowania odpowiedzi na podstawie pytania i wyników wyszukiwania. Aby dodać do istniejącej podpowiedzi zamiast zastępować ją w całości, rozpocznij swoją podpowiedź od '>>>'.", + "temperature": + "Ustawia temperaturę żądania do LLM, które generuje odpowiedź. Wyższe temperatury skutkują bardziej kreatywnymi odpowiedziami, ale mogą być mniej ugruntowane.", + "seed": "Ustawia ziarno w celu poprawy powtarzalności odpowiedzi modelu. Ziarno może być dowolną liczbą całkowitą.", + "searchScore": + "Ustawia minimalny wynik dla wyników wyszukiwania z Azure AI Search. Zakres wyniku zależy od tego, czy używasz trybu hybrydowego (domyślnego), tylko wektorów czy tylko tekstu.", + "rerankerScore": + "Ustawia minimalny wynik dla wyników wyszukiwania z sortowania semantycznego. Wynik zawsze mieści się w zakresie od 0 do 4. Im wyższy, tym bardziej semantycznie dopasowany wynik do pytania.", + "retrieveNumber": + "Ustawia liczbę wyników wyszukiwania do pobrania z Azure AI Search. Więcej wyników może zwiększyć szansę znalezienia poprawnej odpowiedzi, ale może sprawić, że model się „zgubi w środku”.", + "maxSubqueryCount": + "Ustawia maksymalną liczbę zapytań podrzędnych do użycia w planie zapytań agentowego pobierania.", + "resultsMergeStrategy": + "Ustawia strategię łączenia wyników z wielu zapytań podrzędnych. „Przeplatane” wybiera najlepsze wyniki z każdego zapytania w kolejności okrężnej, a „Malejąco” sortuje wszystkie wyniki według wyniku sortowania semantycznego.", + "includeCategory": + "Określa kategorię do uwzględnienia w wynikach wyszukiwania. W domyślnym zestawie danych nie są używane kategorie.", + "excludeCategory": + "Określa kategorię do wykluczenia z wyników wyszukiwania. W domyślnym zestawie danych nie są używane kategorie.", + "useSemanticReranker": + "Włącza semantyczny ranker Azure AI Search, model, który ponownie sortuje wyniki wyszukiwania na podstawie podobieństwa semantycznego do zapytania użytkownika.", + "useQueryRewriting": + "Włącza przepisywanie zapytań w Azure AI Search, proces modyfikujący zapytanie użytkownika w celu poprawy wyników wyszukiwania. Wymaga włączenia semantycznego rankera.", + "reasoningEffort": + "Ustawia poziom rozumowania dla LLM. Wyższe wartości powodują więcej rozumowania, ale mogą wydłużyć czas generowania odpowiedzi. Domyślnie średni.", + "useSemanticCaptions": + "Wysyła do LLM semantyczne podpisy zamiast pełnych wyników wyszukiwania. Semantyczny podpis jest wyodrębniany z wyniku wyszukiwania podczas procesu sortowania semantycznego.", + "suggestFollowupQuestions": "Prosi LLM o sugerowanie pytań uzupełniających na podstawie zapytania użytkownika.", + "useGPT4Vision": "Używa GPT-4-Turbo z widzeniem do generowania odpowiedzi na podstawie obrazów i tekstu z indeksu.", + "vectorFields": + "Określa, które pola osadzeń w indeksie Azure AI Search będą przeszukiwane: zarówno 'Obrazy i tekst', tylko 'Obrazy', jak i tylko 'Tekst'.", + "gpt4VisionInputs": + "Ustawia, co zostanie wysłane do modelu z widzeniem. 'Obrazy i tekst' wysyła zarówno obrazy, jak i tekst, 'Obrazy' wysyła tylko obrazy, a 'Tekst' wysyła tylko tekst.", + "retrievalMode": + "Ustawia tryb pobierania dla zapytania Azure AI Search. `Wektory + Tekst (Hybrydowy)` łączy wyszukiwanie wektorowe i pełnotekstowe, `Wektory` używa tylko wyszukiwania wektorowego, a `Tekst` tylko pełnotekstowego. Hybrydowy jest zazwyczaj optymalny.", + "streamChat": "Ciągle przesyła odpowiedź do interfejsu czatu w miarę jej generowania.", + "useOidSecurityFilter": "Filtruj wyniki wyszukiwania na podstawie OID uwierzytelnionego użytkownika.", + "useGroupsSecurityFilter": "Filtruj wyniki wyszukiwania na podstawie grup uwierzytelnionego użytkownika.", + "useAgenticRetrieval": "Użyj agentowego pobierania z Azure AI Search do planowania wielozapytaniowego. Zawsze używa semantycznego rankera." + } +} diff --git a/docs/deploy_features.md b/docs/deploy_features.md index fe7b1d30f4..6e02497ce9 100644 --- a/docs/deploy_features.md +++ b/docs/deploy_features.md @@ -282,7 +282,7 @@ When both the browser-stored and Cosmos DB options are enabled, Cosmos DB will t ## Enabling language picker -You can optionally enable the language picker to allow users to switch between different languages. Currently, it supports English, Spanish, French, and Japanese. +You can optionally enable the language picker to allow users to switch between different languages. Currently, it supports English, Spanish, French, Japanese, Danish, Dutch, Brasilian Portugese, Turkish, Italian and Polish. To add support for additional languages, create new locale files and update `app/frontend/src/i18n/config.ts` accordingly. To enable language picker, run: From 8ff8b1e502e1b935a56919bdddfa46e3fdc14289 Mon Sep 17 00:00:00 2001 From: michuhu Date: Sat, 13 Sep 2025 23:48:46 +0200 Subject: [PATCH 2/2] adresses the missing (changed) keys in polish translation --- app/frontend/src/locales/pl/translation.json | 31 ++++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/app/frontend/src/locales/pl/translation.json b/app/frontend/src/locales/pl/translation.json index 2fae11e393..f957c9206f 100644 --- a/app/frontend/src/locales/pl/translation.json +++ b/app/frontend/src/locales/pl/translation.json @@ -43,7 +43,7 @@ "placeholder": "Wpisz nowe pytanie (np. czy mój plan obejmuje coroczne badania wzroku?)" }, "askTitle": "Zapytaj swoje dane", - "gpt4vExamples": { + "multimodalExamples": { "1": "Porównaj wpływ stóp procentowych i PKB na rynki finansowe.", "2": "Jaki jest oczekiwany trend indeksu S&P 500 w ciągu najbliższych pięciu lat? Porównaj go z wcześniejszymi wynikami S&P 500", "3": "Czy możesz zidentyfikować jakąkolwiek korelację między cenami ropy a trendami na rynku akcji?", @@ -99,20 +99,18 @@ "useQueryRewriting": "Użyj przepisywania zapytań do pobierania", "reasoningEffort": "Poziom rozumowania", "reasoningEffortOptions": { + "minimal": "Minimal (tylko GPT-5)", "low": "Niski", "medium": "Średni", "high": "Wysoki" }, "useSuggestFollowupQuestions": "Sugeruj pytania uzupełniające", "useAgenticRetrieval": "Użyj agentowego pobierania", - "useGPT4V": "Użyj modelu GPT z widzeniem", - "gpt4VInput": { - "label": "Dane wejściowe modelu GPT z widzeniem", - "options": { - "textAndImages": "Obrazy i tekst", + "llmInputs": "Źródła danych wejściowych LLM", + "llmInputsOptions": { + "texts": "Tekst", "images": "Obrazy", - "texts": "Tekst" - } + "textAndImages": "Obrazy i tekst" }, "retrievalMode": { "label": "Tryb pobierania", @@ -147,8 +145,6 @@ "Ustawia minimalny wynik dla wyników wyszukiwania z sortowania semantycznego. Wynik zawsze mieści się w zakresie od 0 do 4. Im wyższy, tym bardziej semantycznie dopasowany wynik do pytania.", "retrieveNumber": "Ustawia liczbę wyników wyszukiwania do pobrania z Azure AI Search. Więcej wyników może zwiększyć szansę znalezienia poprawnej odpowiedzi, ale może sprawić, że model się „zgubi w środku”.", - "maxSubqueryCount": - "Ustawia maksymalną liczbę zapytań podrzędnych do użycia w planie zapytań agentowego pobierania.", "resultsMergeStrategy": "Ustawia strategię łączenia wyników z wielu zapytań podrzędnych. „Przeplatane” wybiera najlepsze wyniki z każdego zapytania w kolejności okrężnej, a „Malejąco” sortuje wszystkie wyniki według wyniku sortowania semantycznego.", "includeCategory": @@ -164,16 +160,19 @@ "useSemanticCaptions": "Wysyła do LLM semantyczne podpisy zamiast pełnych wyników wyszukiwania. Semantyczny podpis jest wyodrębniany z wyniku wyszukiwania podczas procesu sortowania semantycznego.", "suggestFollowupQuestions": "Prosi LLM o sugerowanie pytań uzupełniających na podstawie zapytania użytkownika.", - "useGPT4Vision": "Używa GPT-4-Turbo z widzeniem do generowania odpowiedzi na podstawie obrazów i tekstu z indeksu.", - "vectorFields": - "Określa, które pola osadzeń w indeksie Azure AI Search będą przeszukiwane: zarówno 'Obrazy i tekst', tylko 'Obrazy', jak i tylko 'Tekst'.", - "gpt4VisionInputs": - "Ustawia, co zostanie wysłane do modelu z widzeniem. 'Obrazy i tekst' wysyła zarówno obrazy, jak i tekst, 'Obrazy' wysyła tylko obrazy, a 'Tekst' wysyła tylko tekst.", + "textEmbeddings": "Po wybraniu, wyszukiwanie będzie korzystać z osadzeń z modelu tekstowego dla wyodrębnionych fragmentów tekstu.", + "imageEmbeddings": "Po wybraniu, wyszukiwanie będzie korzystać z osadzeń z modelu multimodalnego dla wyodrębnionych obrazów.", + "llmTextInputs": "Po wybraniu, treść tekstowa z wyników wyszukiwania zostanie przesłana do LLM jako kontekst.", + "llmImageInputs": "Po wybraniu, obrazy z wyników wyszukiwania zostaną przesłane do LLM jako kontekst.", "retrievalMode": "Ustawia tryb pobierania dla zapytania Azure AI Search. `Wektory + Tekst (Hybrydowy)` łączy wyszukiwanie wektorowe i pełnotekstowe, `Wektory` używa tylko wyszukiwania wektorowego, a `Tekst` tylko pełnotekstowego. Hybrydowy jest zazwyczaj optymalny.", "streamChat": "Ciągle przesyła odpowiedź do interfejsu czatu w miarę jej generowania.", "useOidSecurityFilter": "Filtruj wyniki wyszukiwania na podstawie OID uwierzytelnionego użytkownika.", "useGroupsSecurityFilter": "Filtruj wyniki wyszukiwania na podstawie grup uwierzytelnionego użytkownika.", "useAgenticRetrieval": "Użyj agentowego pobierania z Azure AI Search do planowania wielozapytaniowego. Zawsze używa semantycznego rankera." - } + }, + + "overallSettings": "Overall settings", + "searchSettings": "Search settings", + "llmSettings": "LLM settings" }