Add Polish UI language support

This commit is contained in:
stefan-kp
2025-12-01 09:52:05 +01:00
parent 0e678e0187
commit e5b12ceec1
3 changed files with 165 additions and 3 deletions
+1 -1
View File
@@ -133,7 +133,7 @@ export default function OnboardingPage() {
<div className="space-y-6">
<p className="text-gray-700 dark:text-gray-300">{t.onboarding.language.description}</p>
<div className="flex flex-wrap gap-3">
{["en", "de", "fr", "it"].map((lang) => (
{["en", "de", "fr", "it", "pl"].map((lang) => (
<button
key={lang}
onClick={() => setLanguage(lang as SupportedLanguage)}
+1 -1
View File
@@ -85,7 +85,7 @@ export default function SettingsPage() {
{t.start.language}
</label>
<div className="flex gap-3">
{(['en', 'de', 'fr', 'it'] as SupportedLanguage[]).map((lang) => (
{(['en', 'de', 'fr', 'it', 'pl'] as SupportedLanguage[]).map((lang) => (
<button
key={lang}
onClick={() => setLanguage(lang)}
+163 -1
View File
@@ -1,4 +1,4 @@
export type SupportedLanguage = 'en' | 'de' | 'fr' | 'it';
export type SupportedLanguage = 'en' | 'de' | 'fr' | 'it' | 'pl';
export interface Translations {
// Common
@@ -817,9 +817,171 @@ const it: Translations = {
},
};
const pl: Translations = {
common: {
close: 'Zamknij',
cancel: 'Anuluj',
confirm: 'Potwierdź',
loading: 'Ładowanie...',
error: 'Błąd',
save: 'Zapisz',
},
header: {
tagline: 'z Gemini i Stockfish',
buyMeABeer: 'Postaw mi piwo',
github: 'GitHub',
},
start: {
title: 'Chess Tutor AI',
settings: '1. Ustawienia',
language: 'Język',
apiKey: 'Klucz API Google Gemini',
apiKeyPlaceholder: 'AIzaSy...',
getApiKey: 'Zdobądź darmowy klucz',
startGame: '2. Rozpocznij grę',
resumeGame: 'Wznów poprzednią partię',
startNewGame: 'Zacznij nową partię...',
chooseCoach: 'Wybierz swojego trenera:',
importPosition: 'Importuj pozycję lub partię (FEN lub PGN)',
importPositionPlaceholder: 'Wklej tutaj pozycję FEN lub partię PGN...',
formatDetected: 'Wykryto format:',
formatFen: 'Pozycja FEN',
formatPgn: 'Partia PGN',
formatInvalid: 'Nieprawidłowy format - wklej poprawny FEN lub PGN',
apiKeyRequired: 'Podaj prawidłowy klucz API, aby kontynuować.',
colorSelection: 'Wybierz kolor:',
playAsWhite: 'Graj białymi',
playAsBlack: 'Graj czarnymi',
randomColor: 'Losowo',
analyzeGame: 'Analizuj partię',
savedGamesTitle: 'Niedokończone partie',
savedGamesEmpty: 'Brak niedokończonych partii.',
opponentLabel: 'Przeciwnik',
evaluationLabel: 'Ocena',
noEvaluation: 'Brak oceny',
deleteGame: 'Usuń partię',
analyzeThisGame: 'Analizuj tę partię',
},
game: {
playingAs: 'Grasz jako',
vs: 'przeciw',
backToMenu: '← Powrót do menu',
stockfishStrength: 'Siła Stockfish',
depth: 'Głębokość',
undoMove: 'Cofnij ruch',
gameHistory: 'Historia partii',
analyze: 'Analizuj',
noMovesYet: 'Brak ruchów.',
white: 'Białe',
black: 'Czarne',
},
tutor: {
aiCoach: 'Trener AI',
askCoach: 'Zapytaj trenera...',
hint: 'Podpowiedź',
bestMove: 'Najlepszy ruch',
},
gameOver: {
title: 'Koniec gry',
checkmate: 'Mat!',
youWon: 'Wygrana!',
youLost: 'Przegrałeś.',
draw: 'Remis!',
stalemate: 'Pat!',
mistakes: 'Twoje błędy',
aiSummary: 'Podsumowanie AI',
move: 'Ruch',
evalBefore: 'Ocena przed',
evalAfter: 'Ocena po',
bestMove: 'Najlepszy ruch',
newGame: 'Nowa partia',
},
analysis: {
title: 'Analiza pozycji',
currentPosition: 'Aktualna pozycja',
evaluation: 'Ocena',
bestMove: 'Najlepszy ruch',
aiAnalysis: 'Analiza AI',
playFromHere: 'Graj od tej pozycji',
playDescription: 'Wybierz charakter, kolor i siłę silnika, aby grać od bieżącego ruchu.',
chooseOpponent: 'Wybierz przeciwnika',
chooseSide: 'Wybierz kolor',
chooseStrength: 'Siła przeciwnika',
startPlay: 'Graj odtąd',
modeTitle: 'Analizuj istniejącą partię',
modeDescription: 'Prześlij PGN lub FEN, aby coach przeprowadził Cię przez partię z pomocą silnika.',
pasteLabel: 'Wejście PGN lub FEN',
pastePlaceholder: 'Wklej PGN lub FEN, aby przeglądać partię ruch po ruchu...',
chooseCoach: 'Wybierz osobowość trenera',
orientation: 'Orientacja szachownicy',
startButton: 'Rozpocznij analizę',
next: 'Następny ruch',
previous: 'Poprzedni ruch',
step: 'Ruch',
missedTactics: 'Przegapione taktyki',
cpLoss: 'Zmiana oceny',
none: 'Brak',
opening: 'Otwarcie',
enginePending: 'Ocena silnika w toku...',
coachPending: 'Trener przygotowuje opinię...',
importError: 'Nie udało się wczytać PGN ani FEN. Sprawdź zapis.',
loadNewGame: 'Załaduj nową partię',
openingsExplorer: 'Eksplorator otwarć',
generatingExplanation: 'Generowanie wyjaśnienia...',
noApiKey: 'Dodaj klucz API w ustawieniach.',
askFollowUp: 'Zadaj pytanie uzupełniające o to otwarcie...',
possibleOpenings: 'możliwe otwarcia',
},
apiKeyInput: {
title: 'Wymagany klucz API',
description: 'Podaj swój klucz Google Gemini, aby kontynuować.',
placeholder: 'Wprowadź klucz API...',
submit: 'Wyślij',
getKey: 'Zdobądź darmowy klucz API',
},
onboarding: {
welcome: {
title: 'Chess Tutor AI',
subtitle: 'Twój osobisty trener szachowy.',
claim: 'Graj, ucz się i analizuj z pomocą Gemini i Stockfish.',
},
language: {
title: 'Wybierz język',
description: 'Dostosujemy doświadczenie i wiadomości do wybranego języka.',
},
value: {
title: 'Twoje korzyści',
bullets: [
'Trenuj z osobowościami dopasowanymi do twojego stylu.',
'Importuj FEN lub PGN i otrzymuj wskazówki na żywo podczas analizy.',
'Połącz kreatywność Google Gemini z precyzją Stockfish.',
'Zapisuj postęp lokalnie — wróć do gry w dowolnym momencie.',
],
},
api: {
title: 'Dodaj swój klucz API LLM',
description: 'Potrzebujemy twojego klucza Gemini, aby generować ruchy i objaśnienia.',
inputLabel: 'Klucz API Google Gemini',
placeholder: 'AIzaSy...',
storage: 'Twój klucz jest przechowywany w przeglądarce i nigdy nie jest udostępniany.',
serverUse: 'Wysyłamy go na nasz serwer tylko podczas wykonywania zapytań i nigdy go nie logujemy.',
costNote: 'Tokeny LLM są rozliczane przez Google, więc masz kontrolę nad zużyciem.',
privacy: 'Nigdy nie używamy twojego klucza do niczego poza tym trenerem.',
getKey: 'Zdobądź darmowy klucz Gemini',
},
actions: {
next: 'Dalej',
back: 'Wstecz',
finish: 'Zapisz i zacznij grać',
},
stepIndicator: (step: number, total: number) => `Krok ${step} z ${total}`,
},
};
export const translations: Record<SupportedLanguage, Translations> = {
en,
de,
fr,
it,
pl,
};