diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index f7c2e277b..7275fb36f 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -19,13 +19,15 @@ import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" import { dict as uiDa } from "@opencode-ai/ui/i18n/da" import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" +import { dict as pl } from "@/i18n/pl" +import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -40,6 +42,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("fr")) return "fr" if (language.toLowerCase().startsWith("da")) return "da" if (language.toLowerCase().startsWith("ja")) return "ja" + if (language.toLowerCase().startsWith("pl")) return "pl" } return "en" @@ -63,6 +66,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "fr") return "fr" if (store.locale === "da") return "da" if (store.locale === "ja") return "ja" + if (store.locale === "pl") return "pl" return "en" }) @@ -81,6 +85,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa }) } + if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -95,6 +100,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont fr: "language.fr", da: "language.da", ja: "language.ja", + pl: "language.pl", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 7d381a820..c7149ec75 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Fransk", "language.ja": "Japansk", "language.da": "Dansk", + "language.pl": "Polsk", "toast.language.title": "Sprog", "toast.language.description": "Skiftede til {{language}}", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 495308a6f..941390a04 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -281,6 +281,7 @@ export const dict = { "language.fr": "Französisch", "language.ja": "Japanisch", "language.da": "Dänisch", + "language.pl": "Polnisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 36f90a4fe..2eb69d040 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -293,6 +293,7 @@ export const dict = { "language.fr": "French", "language.ja": "Japanese", "language.da": "Danish", + "language.pl": "Polish", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index bae4ad480..21bd296eb 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Francés", "language.ja": "Japonés", "language.da": "Danés", + "language.pl": "Polaco", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index c00142100..b2f78cd8e 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Français", "language.ja": "Japonais", "language.da": "Danois", + "language.pl": "Polonais", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index c8448811a..1d87037ae 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "フランス語", "language.ja": "日本語", "language.da": "デンマーク語", + "language.pl": "ポーランド語", "toast.language.title": "言語", "toast.language.description": "{{language}}に切り替えました", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index dbd02270c..64fa629c9 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -278,6 +278,7 @@ export const dict = { "language.fr": "프랑스어", "language.ja": "일본어", "language.da": "덴마크어", + "language.pl": "폴란드어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts new file mode 100644 index 000000000..e65229e25 --- /dev/null +++ b/packages/app/src/i18n/pl.ts @@ -0,0 +1,638 @@ +export const dict = { + "command.category.suggested": "Sugerowane", + "command.category.view": "Widok", + "command.category.project": "Projekt", + "command.category.provider": "Dostawca", + "command.category.server": "Serwer", + "command.category.session": "Sesja", + "command.category.theme": "Motyw", + "command.category.language": "Język", + "command.category.file": "Plik", + "command.category.terminal": "Terminal", + "command.category.model": "Model", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Uprawnienia", + "command.category.workspace": "Przestrzeń robocza", + "command.category.settings": "Ustawienia", + + "theme.scheme.system": "Systemowy", + "theme.scheme.light": "Jasny", + "theme.scheme.dark": "Ciemny", + + "command.sidebar.toggle": "Przełącz pasek boczny", + "command.project.open": "Otwórz projekt", + "command.provider.connect": "Połącz dostawcę", + "command.server.switch": "Przełącz serwer", + "command.settings.open": "Otwórz ustawienia", + "command.session.previous": "Poprzednia sesja", + "command.session.next": "Następna sesja", + "command.session.archive": "Zarchiwizuj sesję", + + "command.palette": "Paleta poleceń", + + "command.theme.cycle": "Przełącz motyw", + "command.theme.set": "Użyj motywu: {{theme}}", + "command.theme.scheme.cycle": "Przełącz schemat kolorów", + "command.theme.scheme.set": "Użyj schematu kolorów: {{scheme}}", + + "command.language.cycle": "Przełącz język", + "command.language.set": "Użyj języka: {{language}}", + + "command.session.new": "Nowa sesja", + "command.file.open": "Otwórz plik", + "command.file.open.description": "Szukaj plików i poleceń", + "command.terminal.toggle": "Przełącz terminal", + "command.review.toggle": "Przełącz przegląd", + "command.terminal.new": "Nowy terminal", + "command.terminal.new.description": "Utwórz nową kartę terminala", + "command.steps.toggle": "Przełącz kroki", + "command.steps.toggle.description": "Pokaż lub ukryj kroki dla bieżącej wiadomości", + "command.message.previous": "Poprzednia wiadomość", + "command.message.previous.description": "Przejdź do poprzedniej wiadomości użytkownika", + "command.message.next": "Następna wiadomość", + "command.message.next.description": "Przejdź do następnej wiadomości użytkownika", + "command.model.choose": "Wybierz model", + "command.model.choose.description": "Wybierz inny model", + "command.mcp.toggle": "Przełącz MCP", + "command.mcp.toggle.description": "Przełącz MCP", + "command.agent.cycle": "Przełącz agenta", + "command.agent.cycle.description": "Przełącz na następnego agenta", + "command.agent.cycle.reverse": "Przełącz agenta wstecz", + "command.agent.cycle.reverse.description": "Przełącz na poprzedniego agenta", + "command.model.variant.cycle": "Przełącz wysiłek myślowy", + "command.model.variant.cycle.description": "Przełącz na następny poziom wysiłku", + "command.permissions.autoaccept.enable": "Automatyczne akceptowanie edycji", + "command.permissions.autoaccept.disable": "Zatrzymaj automatyczne akceptowanie edycji", + "command.session.undo": "Cofnij", + "command.session.undo.description": "Cofnij ostatnią wiadomość", + "command.session.redo": "Ponów", + "command.session.redo.description": "Ponów ostatnią cofniętą wiadomość", + "command.session.compact": "Kompaktuj sesję", + "command.session.compact.description": "Podsumuj sesję, aby zmniejszyć rozmiar kontekstu", + "command.session.fork": "Rozwidlij od wiadomości", + "command.session.fork.description": "Utwórz nową sesję od poprzedniej wiadomości", + "command.session.share": "Udostępnij sesję", + "command.session.share.description": "Udostępnij tę sesję i skopiuj URL do schowka", + "command.session.unshare": "Przestań udostępniać sesję", + "command.session.unshare.description": "Zatrzymaj udostępnianie tej sesji", + + "palette.search.placeholder": "Szukaj plików i poleceń", + "palette.empty": "Brak wyników", + "palette.group.commands": "Polecenia", + "palette.group.files": "Pliki", + + "dialog.provider.search.placeholder": "Szukaj dostawców", + "dialog.provider.empty": "Nie znaleziono dostawców", + "dialog.provider.group.popular": "Popularne", + "dialog.provider.group.other": "Inne", + "dialog.provider.tag.recommended": "Zalecane", + "dialog.provider.anthropic.note": "Połącz z Claude Pro/Max lub kluczem API", + + "dialog.model.select.title": "Wybierz model", + "dialog.model.search.placeholder": "Szukaj modeli", + "dialog.model.empty": "Brak wyników modelu", + "dialog.model.manage": "Zarządzaj modelami", + "dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.", + + "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode", + "dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców", + + "dialog.provider.viewAll": "Zobacz wszystkich dostawców", + + "provider.connect.title": "Połącz {{provider}}", + "provider.connect.title.anthropicProMax": "Zaloguj się z Claude Pro/Max", + "provider.connect.selectMethod": "Wybierz metodę logowania dla {{provider}}.", + "provider.connect.method.apiKey": "Klucz API", + "provider.connect.status.inProgress": "Autoryzacja w toku...", + "provider.connect.status.waiting": "Oczekiwanie na autoryzację...", + "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", + "provider.connect.apiKey.description": + "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.apiKey.label": "Klucz API {{provider}}", + "provider.connect.apiKey.placeholder": "Klucz API", + "provider.connect.apiKey.required": "Klucz API jest wymagany", + "provider.connect.opencodeZen.line1": + "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", + "provider.connect.opencodeZen.line2": + "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", + "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", + "provider.connect.oauth.code.visit.prefix": "Odwiedź ", + "provider.connect.oauth.code.visit.link": "ten link", + "provider.connect.oauth.code.visit.suffix": + ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", + "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", + "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", + "provider.connect.oauth.code.invalid": "Nieprawidłowy kod autoryzacyjny", + "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", + "provider.connect.oauth.auto.visit.link": "ten link", + "provider.connect.oauth.auto.visit.suffix": + " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", + "provider.connect.toast.connected.title": "Połączono {{provider}}", + "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", + + "model.tag.free": "Darmowy", + "model.tag.latest": "Najnowszy", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "tekst", + "model.input.image": "obraz", + "model.input.audio": "audio", + "model.input.video": "wideo", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Obsługuje: {{inputs}}", + "model.tooltip.reasoning.allowed": "Obsługuje wnioskowanie", + "model.tooltip.reasoning.none": "Brak wnioskowania", + "model.tooltip.context": "Limit kontekstu {{limit}}", + + "common.search.placeholder": "Szukaj", + "common.loading": "Ładowanie", + "common.loading.ellipsis": "...", + "common.cancel": "Anuluj", + "common.submit": "Prześlij", + "common.save": "Zapisz", + "common.saving": "Zapisywanie...", + "common.default": "Domyślny", + "common.attachment": "załącznik", + + "prompt.placeholder.shell": "Wpisz polecenie terminala...", + "prompt.placeholder.normal": 'Zapytaj o cokolwiek... "{{example}}"', + "prompt.mode.shell": "Terminal", + "prompt.mode.shell.exit": "esc aby wyjść", + + "prompt.example.1": "Napraw TODO w bazie kodu", + "prompt.example.2": "Jaki jest stos technologiczny tego projektu?", + "prompt.example.3": "Napraw zepsute testy", + "prompt.example.4": "Wyjaśnij jak działa uwierzytelnianie", + "prompt.example.5": "Znajdź i napraw luki w zabezpieczeniach", + "prompt.example.6": "Dodaj testy jednostkowe dla serwisu użytkownika", + "prompt.example.7": "Zrefaktoryzuj tę funkcję, aby była bardziej czytelna", + "prompt.example.8": "Co oznacza ten błąd?", + "prompt.example.9": "Pomóż mi zdebugować ten problem", + "prompt.example.10": "Wygeneruj dokumentację API", + "prompt.example.11": "Zoptymalizuj zapytania do bazy danych", + "prompt.example.12": "Dodaj walidację danych wejściowych", + "prompt.example.13": "Utwórz nowy komponent dla...", + "prompt.example.14": "Jak wdrożyć ten projekt?", + "prompt.example.15": "Sprawdź mój kod pod kątem najlepszych praktyk", + "prompt.example.16": "Dodaj obsługę błędów do tej funkcję", + "prompt.example.17": "Wyjaśnij ten wzorzec regex", + "prompt.example.18": "Przekonwertuj to na TypeScript", + "prompt.example.19": "Dodaj logowanie w całej bazie kodu", + "prompt.example.20": "Które zależności są przestarzałe?", + "prompt.example.21": "Pomóż mi napisać skrypt migracyjny", + "prompt.example.22": "Zaimplementuj cachowanie dla tego punktu końcowego", + "prompt.example.23": "Dodaj stronicowanie do tej listy", + "prompt.example.24": "Utwórz polecenie CLI dla...", + "prompt.example.25": "Jak działają tutaj zmienne środowiskowe?", + + "prompt.popover.emptyResults": "Brak pasujących wyników", + "prompt.popover.emptyCommands": "Brak pasujących poleceń", + "prompt.dropzone.label": "Upuść obrazy lub pliki PDF tutaj", + "prompt.slash.badge.custom": "własne", + "prompt.context.active": "aktywny", + "prompt.context.includeActiveFile": "Dołącz aktywny plik", + "prompt.action.attachFile": "Załącz plik", + "prompt.action.send": "Wyślij", + "prompt.action.stop": "Zatrzymaj", + + "prompt.toast.pasteUnsupported.title": "Nieobsługiwane wklejanie", + "prompt.toast.pasteUnsupported.description": "Tylko obrazy lub pliki PDF mogą być tutaj wklejane.", + "prompt.toast.modelAgentRequired.title": "Wybierz agenta i model", + "prompt.toast.modelAgentRequired.description": "Wybierz agenta i model przed wysłaniem zapytania.", + "prompt.toast.worktreeCreateFailed.title": "Nie udało się utworzyć drzewa roboczego", + "prompt.toast.sessionCreateFailed.title": "Nie udało się utworzyć sesji", + "prompt.toast.shellSendFailed.title": "Nie udało się wysłać polecenia powłoki", + "prompt.toast.commandSendFailed.title": "Nie udało się wysłać polecenia", + "prompt.toast.promptSendFailed.title": "Nie udało się wysłać zapytania", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{enabled}} z {{total}} włączone", + "dialog.mcp.empty": "Brak skonfigurowanych MCP", + + "mcp.status.connected": "połączono", + "mcp.status.failed": "niepowodzenie", + "mcp.status.needs_auth": "wymaga autoryzacji", + "mcp.status.disabled": "wyłączone", + + "dialog.fork.empty": "Brak wiadomości do rozwidlenia", + + "dialog.directory.search.placeholder": "Szukaj folderów", + "dialog.directory.empty": "Nie znaleziono folderów", + + "dialog.server.title": "Serwery", + "dialog.server.description": "Przełącz serwer OpenCode, z którym łączy się ta aplikacja.", + "dialog.server.search.placeholder": "Szukaj serwerów", + "dialog.server.empty": "Brak serwerów", + "dialog.server.add.title": "Dodaj serwer", + "dialog.server.add.url": "URL serwera", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Nie można połączyć się z serwerem", + "dialog.server.add.checking": "Sprawdzanie...", + "dialog.server.add.button": "Dodaj", + "dialog.server.default.title": "Domyślny serwer", + "dialog.server.default.description": + "Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.", + "dialog.server.default.none": "Nie wybrano serwera", + "dialog.server.default.set": "Ustaw bieżący serwer jako domyślny", + "dialog.server.default.clear": "Wyczyść", + + "dialog.project.edit.title": "Edytuj projekt", + "dialog.project.edit.name": "Nazwa", + "dialog.project.edit.icon": "Ikona", + "dialog.project.edit.icon.alt": "Ikona projektu", + "dialog.project.edit.icon.hint": "Kliknij lub przeciągnij obraz", + "dialog.project.edit.icon.recommended": "Zalecane: 128x128px", + "dialog.project.edit.color": "Kolor", + + "context.breakdown.title": "Podział kontekstu", + "context.breakdown.note": 'Przybliżony podział tokenów wejściowych. "Inne" obejmuje definicje narzędzi i narzut.', + "context.breakdown.system": "System", + "context.breakdown.user": "Użytkownik", + "context.breakdown.assistant": "Asystent", + "context.breakdown.tool": "Wywołania narzędzi", + "context.breakdown.other": "Inne", + + "context.systemPrompt.title": "Prompt systemowy", + "context.rawMessages.title": "Surowe wiadomości", + + "context.stats.session": "Sesja", + "context.stats.messages": "Wiadomości", + "context.stats.provider": "Dostawca", + "context.stats.model": "Model", + "context.stats.limit": "Limit kontekstu", + "context.stats.totalTokens": "Całkowita liczba tokenów", + "context.stats.usage": "Użycie", + "context.stats.inputTokens": "Tokeny wejściowe", + "context.stats.outputTokens": "Tokeny wyjściowe", + "context.stats.reasoningTokens": "Tokeny wnioskowania", + "context.stats.cacheTokens": "Tokeny pamięci podręcznej (odczyt/zapis)", + "context.stats.userMessages": "Wiadomości użytkownika", + "context.stats.assistantMessages": "Wiadomości asystenta", + "context.stats.totalCost": "Całkowity koszt", + "context.stats.sessionCreated": "Utworzono sesję", + "context.stats.lastActivity": "Ostatnia aktywność", + + "context.usage.tokens": "Tokeny", + "context.usage.usage": "Użycie", + "context.usage.cost": "Koszt", + "context.usage.clickToView": "Kliknij, aby zobaczyć kontekst", + + "language.en": "Angielski", + "language.zh": "Chiński", + "language.ko": "Koreański", + "language.de": "Niemiecki", + "language.es": "Hiszpański", + "language.fr": "Francuski", + "language.ja": "Japoński", + "language.da": "Duński", + "language.pl": "Polski", + + "toast.language.title": "Język", + "toast.language.description": "Przełączono na {{language}}", + + "toast.theme.title": "Przełączono motyw", + "toast.scheme.title": "Schemat kolorów", + + "toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie edycji", + "toast.permissions.autoaccept.on.description": "Uprawnienia do edycji i zapisu będą automatycznie zatwierdzane", + "toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie edycji", + "toast.permissions.autoaccept.off.description": "Uprawnienia do edycji i zapisu będą wymagały zatwierdzenia", + + "toast.model.none.title": "Nie wybrano modelu", + "toast.model.none.description": "Połącz dostawcę, aby podsumować tę sesję", + + "toast.file.loadFailed.title": "Nie udało się załadować pliku", + + "toast.session.share.copyFailed.title": "Nie udało się skopiować URL do schowka", + "toast.session.share.success.title": "Sesja udostępniona", + "toast.session.share.success.description": "Link udostępniania skopiowany do schowka!", + "toast.session.share.failed.title": "Nie udało się udostępnić sesji", + "toast.session.share.failed.description": "Wystąpił błąd podczas udostępniania sesji", + + "toast.session.unshare.success.title": "Zatrzymano udostępnianie sesji", + "toast.session.unshare.success.description": "Udostępnianie sesji zostało pomyślnie zatrzymane!", + "toast.session.unshare.failed.title": "Nie udało się zatrzymać udostępniania sesji", + "toast.session.unshare.failed.description": "Wystąpił błąd podczas zatrzymywania udostępniania sesji", + + "toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}", + + "toast.update.title": "Dostępna aktualizacja", + "toast.update.description": "Nowa wersja OpenCode ({{version}}) jest teraz dostępna do instalacji.", + "toast.update.action.installRestart": "Zainstaluj i zrestartuj", + "toast.update.action.notYet": "Jeszcze nie", + + "error.page.title": "Coś poszło nie tak", + "error.page.description": "Wystąpił błąd podczas ładowania aplikacji.", + "error.page.details.label": "Szczegóły błędu", + "error.page.action.restart": "Restartuj", + "error.page.action.checking": "Sprawdzanie...", + "error.page.action.checkUpdates": "Sprawdź aktualizacje", + "error.page.action.updateTo": "Zaktualizuj do {{version}}", + "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode", + "error.page.report.discord": "na Discordzie", + "error.page.version": "Wersja: {{version}}", + + "error.dev.rootNotFound": + "Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?", + + "error.globalSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{url}}`?", + + "error.chain.unknown": "Nieznany błąd", + "error.chain.causedBy": "Spowodowany przez:", + "error.chain.apiError": "Błąd API", + "error.chain.status": "Status: {{status}}", + "error.chain.retryable": "Można ponowić: {{retryable}}", + "error.chain.responseBody": "Treść odpowiedzi:\n{{body}}", + "error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}", + "error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}", + "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", + "error.chain.mcpFailed": + 'Serwer MCP "{{name}}" nie powiódł się. Uwaga, OpenCode nie obsługuje jeszcze uwierzytelniania MCP.', + "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', + "error.chain.configJsonInvalid": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C)", + "error.chain.configJsonInvalidWithMessage": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Katalog "{{dir}}" w {{path}} jest nieprawidłowy. Zmień nazwę katalogu na "{{suggestion}}" lub usuń go. To częsta literówka.', + "error.chain.configFrontmatterError": "Nie udało się przetworzyć frontmatter w {{path}}:\n{{message}}", + "error.chain.configInvalid": "Plik konfiguracyjny w {{path}} jest nieprawidłowy", + "error.chain.configInvalidWithMessage": "Plik konfiguracyjny w {{path}} jest nieprawidłowy: {{message}}", + + "notification.permission.title": "Wymagane uprawnienie", + "notification.permission.description": "{{sessionTitle}} w {{projectName}} potrzebuje uprawnienia", + "notification.question.title": "Pytanie", + "notification.question.description": "{{sessionTitle}} w {{projectName}} ma pytanie", + "notification.action.goToSession": "Przejdź do sesji", + + "notification.session.responseReady.title": "Odpowiedź gotowa", + "notification.session.error.title": "Błąd sesji", + "notification.session.error.fallbackDescription": "Wystąpił błąd", + + "home.recentProjects": "Ostatnie projekty", + "home.empty.title": "Brak ostatnich projektów", + "home.empty.description": "Zacznij od otwarcia lokalnego projektu", + + "session.tab.session": "Sesja", + "session.tab.review": "Przegląd", + "session.tab.context": "Kontekst", + "session.review.filesChanged": "Zmieniono {{count}} plików", + "session.review.loadingChanges": "Ładowanie zmian...", + "session.review.empty": "Brak zmian w tej sesji", + "session.messages.renderEarlier": "Renderuj wcześniejsze wiadomości", + "session.messages.loadingEarlier": "Ładowanie wcześniejszych wiadomości...", + "session.messages.loadEarlier": "Załaduj wcześniejsze wiadomości", + "session.messages.loading": "Ładowanie wiadomości...", + "session.messages.jumpToLatest": "Przejdź do najnowszych", + + "session.context.addToContext": "Dodaj {{selection}} do kontekstu", + + "session.new.worktree.main": "Główna gałąź", + "session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})", + "session.new.worktree.create": "Utwórz nowe drzewo robocze", + "session.new.lastModified": "Ostatnio zmodyfikowano", + + "session.header.search.placeholder": "Szukaj {{project}}", + + "session.share.popover.title": "Opublikuj w sieci", + "session.share.popover.description.shared": + "Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.", + "session.share.popover.description.unshared": + "Udostępnij sesję publicznie w sieci. Będzie dostępna dla każdego, kto posiada link.", + "session.share.action.share": "Udostępnij", + "session.share.action.publish": "Opublikuj", + "session.share.action.publishing": "Publikowanie...", + "session.share.action.unpublish": "Cofnij publikację", + "session.share.action.unpublishing": "Cofanie publikacji...", + "session.share.action.view": "Widok", + "session.share.copy.copied": "Skopiowano", + "session.share.copy.copyLink": "Kopiuj link", + + "lsp.tooltip.none": "Brak serwerów LSP", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Ładowanie promptu...", + "terminal.loading": "Ładowanie terminala...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + "terminal.connectionLost.title": "Utracono połączenie", + "terminal.connectionLost.description": + "Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.", + + "common.closeTab": "Zamknij kartę", + "common.dismiss": "Odrzuć", + "common.requestFailed": "Żądanie nie powiodło się", + "common.moreOptions": "Więcej opcji", + "common.learnMore": "Dowiedz się więcej", + "common.rename": "Zmień nazwę", + "common.reset": "Resetuj", + "common.delete": "Usuń", + "common.close": "Zamknij", + "common.edit": "Edytuj", + "common.loadMore": "Załaduj więcej", + "common.key.esc": "ESC", + + "sidebar.menu.toggle": "Przełącz menu", + "sidebar.settings": "Ustawienia", + "sidebar.help": "Pomoc", + "sidebar.workspaces.enable": "Włącz przestrzenie robocze", + "sidebar.workspaces.disable": "Wyłącz przestrzenie robocze", + "sidebar.gettingStarted.title": "Pierwsze kroki", + "sidebar.gettingStarted.line1": "OpenCode zawiera darmowe modele, więc możesz zacząć od razu.", + "sidebar.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.", + "sidebar.project.recentSessions": "Ostatnie sesje", + "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje", + + "settings.section.desktop": "Pulpit", + "settings.tab.general": "Ogólne", + "settings.tab.shortcuts": "Skróty", + + "settings.general.section.appearance": "Wygląd", + "settings.general.section.notifications": "Powiadomienia systemowe", + "settings.general.section.sounds": "Efekty dźwiękowe", + + "settings.general.row.language.title": "Język", + "settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode", + "settings.general.row.appearance.title": "Wygląd", + "settings.general.row.appearance.description": "Dostosuj wygląd OpenCode na swoim urządzeniu", + "settings.general.row.theme.title": "Motyw", + "settings.general.row.theme.description": "Dostosuj motyw OpenCode.", + "settings.general.row.font.title": "Czcionka", + "settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu", + "font.option.ibmPlexMono": "IBM Plex Mono", + "font.option.cascadiaCode": "Cascadia Code", + "font.option.firaCode": "Fira Code", + "font.option.hack": "Hack", + "font.option.inconsolata": "Inconsolata", + "font.option.intelOneMono": "Intel One Mono", + "font.option.jetbrainsMono": "JetBrains Mono", + "font.option.mesloLgs": "Meslo LGS", + "font.option.robotoMono": "Roboto Mono", + "font.option.sourceCodePro": "Source Code Pro", + "font.option.ubuntuMono": "Ubuntu Mono", + "sound.option.alert01": "Alert 01", + "sound.option.alert02": "Alert 02", + "sound.option.alert03": "Alert 03", + "sound.option.alert04": "Alert 04", + "sound.option.alert05": "Alert 05", + "sound.option.alert06": "Alert 06", + "sound.option.alert07": "Alert 07", + "sound.option.alert08": "Alert 08", + "sound.option.alert09": "Alert 09", + "sound.option.alert10": "Alert 10", + "sound.option.bipbop01": "Bip-bop 01", + "sound.option.bipbop02": "Bip-bop 02", + "sound.option.bipbop03": "Bip-bop 03", + "sound.option.bipbop04": "Bip-bop 04", + "sound.option.bipbop05": "Bip-bop 05", + "sound.option.bipbop06": "Bip-bop 06", + "sound.option.bipbop07": "Bip-bop 07", + "sound.option.bipbop08": "Bip-bop 08", + "sound.option.bipbop09": "Bip-bop 09", + "sound.option.bipbop10": "Bip-bop 10", + "sound.option.staplebops01": "Staplebops 01", + "sound.option.staplebops02": "Staplebops 02", + "sound.option.staplebops03": "Staplebops 03", + "sound.option.staplebops04": "Staplebops 04", + "sound.option.staplebops05": "Staplebops 05", + "sound.option.staplebops06": "Staplebops 06", + "sound.option.staplebops07": "Staplebops 07", + "sound.option.nope01": "Nope 01", + "sound.option.nope02": "Nope 02", + "sound.option.nope03": "Nope 03", + "sound.option.nope04": "Nope 04", + "sound.option.nope05": "Nope 05", + "sound.option.nope06": "Nope 06", + "sound.option.nope07": "Nope 07", + "sound.option.nope08": "Nope 08", + "sound.option.nope09": "Nope 09", + "sound.option.nope10": "Nope 10", + "sound.option.nope11": "Nope 11", + "sound.option.nope12": "Nope 12", + "sound.option.yup01": "Yup 01", + "sound.option.yup02": "Yup 02", + "sound.option.yup03": "Yup 03", + "sound.option.yup04": "Yup 04", + "sound.option.yup05": "Yup 05", + "sound.option.yup06": "Yup 06", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi", + "settings.general.notifications.permissions.title": "Uprawnienia", + "settings.general.notifications.permissions.description": + "Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie", + "settings.general.notifications.errors.title": "Błędy", + "settings.general.notifications.errors.description": "Pokaż powiadomienie systemowe, gdy wystąpi błąd", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Odtwórz dźwięk, gdy agent zakończy pracę lub wymaga uwagi", + "settings.general.sounds.permissions.title": "Uprawnienia", + "settings.general.sounds.permissions.description": "Odtwórz dźwięk, gdy wymagane jest uprawnienie", + "settings.general.sounds.errors.title": "Błędy", + "settings.general.sounds.errors.description": "Odtwórz dźwięk, gdy wystąpi błąd", + + "settings.shortcuts.title": "Skróty klawiszowe", + "settings.shortcuts.reset.button": "Przywróć domyślne", + "settings.shortcuts.reset.toast.title": "Zresetowano skróty", + "settings.shortcuts.reset.toast.description": "Skróty klawiszowe zostały przywrócone do ustawień domyślnych.", + "settings.shortcuts.conflict.title": "Skrót już w użyciu", + "settings.shortcuts.conflict.description": "{{keybind}} jest już przypisany do {{titles}}.", + "settings.shortcuts.unassigned": "Nieprzypisany", + "settings.shortcuts.pressKeys": "Naciśnij klawisze", + "settings.shortcuts.search.placeholder": "Szukaj skrótów", + "settings.shortcuts.search.empty": "Nie znaleziono skrótów", + + "settings.shortcuts.group.general": "Ogólne", + "settings.shortcuts.group.session": "Sesja", + "settings.shortcuts.group.navigation": "Nawigacja", + "settings.shortcuts.group.modelAndAgent": "Model i agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Dostawcy", + "settings.providers.description": "Ustawienia dostawców będą tutaj konfigurowalne.", + "settings.models.title": "Modele", + "settings.models.description": "Ustawienia modeli będą tutaj konfigurowalne.", + "settings.agents.title": "Agenci", + "settings.agents.description": "Ustawienia agentów będą tutaj konfigurowalne.", + "settings.commands.title": "Polecenia", + "settings.commands.description": "Ustawienia poleceń będą tutaj konfigurowalne.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Ustawienia MCP będą tutaj konfigurowalne.", + + "settings.permissions.title": "Uprawnienia", + "settings.permissions.description": "Kontroluj, jakich narzędzi serwer może używać domyślnie.", + "settings.permissions.section.tools": "Narzędzia", + "settings.permissions.toast.updateFailed.title": "Nie udało się zaktualizować uprawnień", + + "settings.permissions.action.allow": "Zezwól", + "settings.permissions.action.ask": "Pytaj", + "settings.permissions.action.deny": "Odmów", + + "settings.permissions.tool.read.title": "Odczyt", + "settings.permissions.tool.read.description": "Odczyt pliku (pasuje do ścieżki pliku)", + "settings.permissions.tool.edit.title": "Edycja", + "settings.permissions.tool.edit.description": "Modyfikacja plików, w tym edycje, zapisy, łatki i multi-edycje", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Dopasowywanie plików za pomocą wzorców glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Przeszukiwanie zawartości plików za pomocą wyrażeń regularnych", + "settings.permissions.tool.list.title": "Lista", + "settings.permissions.tool.list.description": "Wyświetlanie listy plików w katalogu", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Uruchamianie poleceń powłoki", + "settings.permissions.tool.task.title": "Zadanie", + "settings.permissions.tool.task.description": "Uruchamianie pod-agentów", + "settings.permissions.tool.skill.title": "Umiejętność", + "settings.permissions.tool.skill.description": "Ładowanie umiejętności według nazwy", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Uruchamianie zapytań serwera językowego", + "settings.permissions.tool.todoread.title": "Odczyt Todo", + "settings.permissions.tool.todoread.description": "Odczyt listy zadań", + "settings.permissions.tool.todowrite.title": "Zapis Todo", + "settings.permissions.tool.todowrite.description": "Aktualizacja listy zadań", + "settings.permissions.tool.webfetch.title": "Pobieranie z sieci", + "settings.permissions.tool.webfetch.description": "Pobieranie zawartości z adresu URL", + "settings.permissions.tool.websearch.title": "Wyszukiwanie w sieci", + "settings.permissions.tool.websearch.description": "Przeszukiwanie sieci", + "settings.permissions.tool.codesearch.title": "Wyszukiwanie kodu", + "settings.permissions.tool.codesearch.description": "Przeszukiwanie kodu w sieci", + "settings.permissions.tool.external_directory.title": "Katalog zewnętrzny", + "settings.permissions.tool.external_directory.description": "Dostęp do plików poza katalogiem projektu", + "settings.permissions.tool.doom_loop.title": "Zapętlenie", + "settings.permissions.tool.doom_loop.description": "Wykrywanie powtarzających się wywołań narzędzi (doom loop)", + + "workspace.new": "Nowa przestrzeń robocza", + "workspace.type.local": "lokalna", + "workspace.type.sandbox": "piaskownica", + "workspace.create.failed.title": "Nie udało się utworzyć przestrzeni roboczej", + "workspace.delete.failed.title": "Nie udało się usunąć przestrzeni roboczej", + "workspace.resetting.title": "Resetowanie przestrzeni roboczej", + "workspace.resetting.description": "To może potrwać minutę.", + "workspace.reset.failed.title": "Nie udało się zresetować przestrzeni roboczej", + "workspace.reset.success.title": "Przestrzeń robocza zresetowana", + "workspace.reset.success.description": "Przestrzeń robocza odpowiada teraz domyślnej gałęzi.", + "workspace.status.checking": "Sprawdzanie niezscalonych zmian...", + "workspace.status.error": "Nie można zweryfikować statusu git.", + "workspace.status.clean": "Nie wykryto niezscalonych zmian.", + "workspace.status.dirty": "Wykryto niezscalone zmiany w tej przestrzeni roboczej.", + "workspace.delete.title": "Usuń przestrzeń roboczą", + "workspace.delete.confirm": 'Usunąć przestrzeń roboczą "{{name}}"?', + "workspace.delete.button": "Usuń przestrzeń roboczą", + "workspace.reset.title": "Resetuj przestrzeń roboczą", + "workspace.reset.confirm": 'Zresetować przestrzeń roboczą "{{name}}"?', + "workspace.reset.button": "Resetuj przestrzeń roboczą", + "workspace.reset.archived.none": "Żadne aktywne sesje nie zostaną zarchiwizowane.", + "workspace.reset.archived.one": "1 sesja zostanie zarchiwizowana.", + "workspace.reset.archived.many": "{{count}} sesji zostanie zarchiwizowanych.", + "workspace.reset.note": "To zresetuje przestrzeń roboczą, aby odpowiadała domyślnej gałęzi.", +} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index ac976b627..92a1ad45b 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "法语", "language.ja": "日语", "language.da": "丹麦语", + "language.pl": "波兰语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts new file mode 100644 index 000000000..e82bc69dc --- /dev/null +++ b/packages/ui/src/i18n/pl.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Zmiany w sesji", + "ui.sessionReview.diffStyle.unified": "Ujednolicony", + "ui.sessionReview.diffStyle.split": "Podzielony", + "ui.sessionReview.expandAll": "Rozwiń wszystko", + "ui.sessionReview.collapseAll": "Zwiń wszystko", + + "ui.sessionTurn.steps.show": "Pokaż kroki", + "ui.sessionTurn.steps.hide": "Ukryj kroki", + "ui.sessionTurn.summary.response": "Odpowiedź", + "ui.sessionTurn.diff.showMore": "Pokaż więcej zmian ({{count}})", + + "ui.sessionTurn.retry.retrying": "ponawianie", + "ui.sessionTurn.retry.inSeconds": "za {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Delegowanie pracy", + "ui.sessionTurn.status.planning": "Planowanie kolejnych kroków", + "ui.sessionTurn.status.gatheringContext": "Zbieranie kontekstu", + "ui.sessionTurn.status.searchingCodebase": "Przeszukiwanie bazy kodu", + "ui.sessionTurn.status.searchingWeb": "Przeszukiwanie sieci", + "ui.sessionTurn.status.makingEdits": "Wprowadzanie zmian", + "ui.sessionTurn.status.runningCommands": "Uruchamianie poleceń", + "ui.sessionTurn.status.thinking": "Myślenie", + "ui.sessionTurn.status.thinkingWithTopic": "Myślenie - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Zbieranie myśli", + "ui.sessionTurn.status.consideringNextSteps": "Rozważanie kolejnych kroków", + + "ui.messagePart.diagnostic.error": "Błąd", + "ui.messagePart.title.edit": "Edycja", + "ui.messagePart.title.write": "Pisanie", + "ui.messagePart.option.typeOwnAnswer": "Wpisz własną odpowiedź", + "ui.messagePart.review.title": "Przejrzyj swoje odpowiedzi", + + "ui.list.loading": "Ładowanie", + "ui.list.empty": "Brak wyników", + "ui.list.emptyWithFilter.prefix": "Brak wyników dla", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Nowa wiadomość", + + "ui.textField.copyToClipboard": "Skopiuj do schowka", + "ui.textField.copied": "Skopiowano", + + "ui.imagePreview.alt": "Podgląd obrazu", + + "ui.tool.read": "Odczyt", + "ui.tool.list": "Lista", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Pobieranie sieciowe", + "ui.tool.shell": "Terminal", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Zadania", + "ui.tool.todos.read": "Czytaj zadania", + "ui.tool.questions": "Pytania", + "ui.tool.agent": "Agent {{type}}", + + "ui.common.file.one": "plik", + "ui.common.file.other": "pliki", + "ui.common.question.one": "pytanie", + "ui.common.question.other": "pytania", + + "ui.common.add": "Dodaj", + "ui.common.cancel": "Anuluj", + "ui.common.confirm": "Potwierdź", + "ui.common.dismiss": "Odrzuć", + "ui.common.next": "Dalej", + "ui.common.submit": "Prześlij", + + "ui.permission.deny": "Odmów", + "ui.permission.allowAlways": "Zezwalaj zawsze", + "ui.permission.allowOnce": "Zezwól raz", + + "ui.message.expand": "Rozwiń wiadomość", + "ui.message.collapse": "Zwiń wiadomość", + "ui.message.copy": "Kopiuj", + "ui.message.copied": "Skopiowano!", + "ui.message.attachment.alt": "załącznik", + + "ui.patch.action.deleted": "Usunięto", + "ui.patch.action.created": "Utworzono", + "ui.patch.action.moved": "Przeniesiono", + "ui.patch.action.patched": "Załatano", + + "ui.question.subtitle.answered": "{{count}} odpowiedzi", + "ui.question.answer.none": "(brak odpowiedzi)", + "ui.question.review.notAnswered": "(bez odpowiedzi)", + "ui.question.multiHint": "(zaznacz wszystkie pasujące)", + "ui.question.custom.placeholder": "Wpisz swoją odpowiedź...", +}