diff --git a/xmcl-keystone-ui/locales/de.yaml b/xmcl-keystone-ui/locales/de.yaml index 9557fdcd0..3f4abe972 100644 --- a/xmcl-keystone-ui/locales/de.yaml +++ b/xmcl-keystone-ui/locales/de.yaml @@ -470,6 +470,11 @@ instanceTemplate: instanceUpdate: basic: Aktualisieren Sie Ihre Einstellungen files: Dateien aktualisieren + loaderChanged: >- + Der Modloader dieser Instanz wurde geändert. + + Der alte Modloader ist {modloader} und der neue Modloader ist + {newModloader}. title: Aktualisieren Sie Ihre Instanz update: Aktualisierung beginnen instances: diff --git a/xmcl-keystone-ui/locales/en.yaml b/xmcl-keystone-ui/locales/en.yaml index 4c115c4e1..e5d01cae4 100644 --- a/xmcl-keystone-ui/locales/en.yaml +++ b/xmcl-keystone-ui/locales/en.yaml @@ -432,6 +432,7 @@ instanceUpdate: files: File Updates title: Update Instance update: Start Update + loaderChanged: The modloader of this instance has been changed. The old modloader is {modloader}, and the new modloader is {newModloader}. instances: add: Create Game addDescription: Create a new instance from scratch diff --git a/xmcl-keystone-ui/locales/es-ES.yaml b/xmcl-keystone-ui/locales/es-ES.yaml index bb7ff94e3..9d16ce115 100644 --- a/xmcl-keystone-ui/locales/es-ES.yaml +++ b/xmcl-keystone-ui/locales/es-ES.yaml @@ -394,6 +394,9 @@ instanceTemplate: instanceUpdate: basic: Actualización de Ajustes files: Actualización de Archivos + loaderChanged: |- + Se ha cambiado el cargador de mods de esta instancia. + El antiguo modloader es {modloader} y el nuevo modloader es {newModloader}. title: Actualizar Instancia update: Iniciar Actualización instances: diff --git a/xmcl-keystone-ui/locales/fr.yaml b/xmcl-keystone-ui/locales/fr.yaml index 8ee093504..6d52717f0 100644 --- a/xmcl-keystone-ui/locales/fr.yaml +++ b/xmcl-keystone-ui/locales/fr.yaml @@ -475,6 +475,11 @@ instanceTemplate: instanceUpdate: basic: Mise à jour des Paramètres files: Mise à jour des Fichiers + loaderChanged: >- + Le modloader de cette instance a été modifié. + + L'ancien modloader est {modloader} et le nouveau modloader est + {newModloader}. title: Mettre à jour l'Instance update: Démarrer la Mise à Jour instances: diff --git a/xmcl-keystone-ui/locales/gl.yaml b/xmcl-keystone-ui/locales/gl.yaml index 7bf8d39b8..f4b15efe2 100644 --- a/xmcl-keystone-ui/locales/gl.yaml +++ b/xmcl-keystone-ui/locales/gl.yaml @@ -230,6 +230,10 @@ disable: Desactivar downloadUpdate: Descargar actualización errors: NotFoundError: 404 non atopado +instanceUpdate: + loaderChanged: |- + Cambiouse o modloader desta instancia. + O modloader antigo é {modloader} e o novo modloader é {newModloader}. instances: addServerDescription: Isto creará un xogo que se lanzará directamente ao servidor. launchBlocked: diff --git a/xmcl-keystone-ui/locales/hu.yaml b/xmcl-keystone-ui/locales/hu.yaml index 4f92fcd86..250ee3374 100644 --- a/xmcl-keystone-ui/locales/hu.yaml +++ b/xmcl-keystone-ui/locales/hu.yaml @@ -440,6 +440,9 @@ instanceTemplate: instanceUpdate: basic: Beállítás frissítése files: Fájl frissítések + loaderChanged: |- + Ennek a példánynak a modloadere megváltozott. + A régi modloader {modloader}, az új modloader pedig {newModloader}. title: Példány frissítése update: Frissítés indítása instances: diff --git a/xmcl-keystone-ui/locales/pl.yaml b/xmcl-keystone-ui/locales/pl.yaml index ff5967488..f06b6b058 100644 --- a/xmcl-keystone-ui/locales/pl.yaml +++ b/xmcl-keystone-ui/locales/pl.yaml @@ -38,7 +38,9 @@ HomeJavaIssueDialog: incompatibleJava: Niekompatybilna Java incompatibleJavaHint: Aktualna Java może być niekompatybilna z wybraną wersją Minecrafta! missingJava: Brakująca Java - missingJavaHint: 'Program uruchamiający nie może wykryć żadnej aplikacji Java na komputerze. Możesz:' + missingJavaHint: >- + Program uruchamiający nie może wykryć żadnej aplikacji Java na komputerze. + Możesz: needDownloadHint: >- Nie można znaleźć odpowiedniej wersji Java w komputerze. Zalecamy pobranie nową. @@ -48,18 +50,21 @@ HomeJavaIssueDialog: optionManualDownload: {} optionSelectJava: message: >- - Być może program uruchamiający nie znalazł Twojej aplikacji Java. Możesz powiedzieć programowi uruchamiającemu - gdzie ona jest. + Być może program uruchamiający nie znalazł Twojej aplikacji Java. Możesz + powiedzieć programowi uruchamiającemu gdzie ona jest. name: Wybierz Java na swoim komputerze optionSwitch: disabled: W bazie danych nie znaleziono obecnie wersji Java {version}! message: Użyj istniejącej wersji Java {version} na swoim komputerze name: Przełącz na {version} recommendedVersionHint: Wersja {version} zaleca używanie Javy z zakresem {range}。 - selectMatchedHint: Znaleziono odpowiednie lokalne wersje Java. Możesz wybrać te lokalne wersje Java. + selectMatchedHint: >- + Znaleziono odpowiednie lokalne wersje Java. Możesz wybrać te lokalne wersje + Java. selectSecondaryHint: >- Znalazłem kilka lokalnych wersji Java, ale mogą one nie spełniać kryteriów. - Nadal można ich użyć do uruchomienia, ale ten problem nadal będzie się pojawiał. + Nadal można ich użyć do uruchomienia, ale ten problem nadal będzie się + pojawiał. HomeLaunchMultiInstanceDialog: confirm: Tak, Uruchomienie description: Uruchamiasz wiele instancji gry Minecraft. Czy na pewno? @@ -74,8 +79,8 @@ HomeSyncDialogPull: update: Aktualizacja HomeSyncDialogPush: authError: >- - Nieprawidłowe uwierzytelnianie użytkownika. Upewnij się, że masz uprawnienia do przesyłania plików - z serwera! + Nieprawidłowe uwierzytelnianie użytkownika. Upewnij się, że masz uprawnienia + do przesyłania plików z serwera! refresh: Odświeżanie unknownError: Nieznany błąd serwera. Spróbuj ponownie. upload: Wgrywanie instancji @@ -131,22 +136,26 @@ dataMigration: directoryCriteriaHint: Upewnij się, że nowa lokalizacja katalogu to pusty katalog! migrationDestinationIsFile: Miejscem docelowym migracji jest plik! Wybierz pusty katalog! migrationDestinationIsNotEmptyDirectory: >- - Miejsce docelowe migracji nie jest pustym katalogiem! Upewnij się, że wybrałeś - pusty katalog! + Miejsce docelowe migracji nie jest pustym katalogiem! Upewnij się, że + wybrałeś pusty katalog! migrationNoPermission: >- Brak uprawnień do zmiany nazwy starego katalogu na nowy! Upewnij się, że program uruchamiający ma dostęp do obu miejsc! placeholder: Kliknij tutaj, aby wybrać katalog setRootCause: >- - Utracisz swoje dane (mapy, pakiety zasobów, mody), jeśli zamkniesz - Launchera w tym momencie! - setRootDescription: Spowoduje to zmianę głównego folderu danych tego programu uruchamiającego i Minecrafta. + Utracisz swoje dane (mapy, pakiety zasobów, mody), jeśli zamkniesz Launchera + w tym momencie! + setRootDescription: >- + Spowoduje to zmianę głównego folderu danych tego programu uruchamiającego i + Minecrafta. setRootTitle: Ustawienie nowej lokalizacji przechowywania unknownError: Nieznany błąd! Spróbuj ponownie lub skontaktuj się z deweloperem! - waitReload: Migracja danych. Nie zamykaj programu uruchamiającego, ponieważ spowoduje to utratę danych. + waitReload: >- + Migracja danych. Nie zamykaj programu uruchamiającego, ponieważ spowoduje to + utratę danych. delete: name: Usuń {name} - 'no': 'Nie' + 'no': Nie 'yes': Usuń dependencies: embedded: Wbudowany @@ -171,8 +180,8 @@ diagnosis: corruptedLibraries: message: Launcher zainstaluje biblioteki za ciebie name: >- - Uszkodzona biblioteka: {name} | Uszkodzona biblioteka: {name} | {count} biblioteki - uszkodzony + Uszkodzona biblioteka: {name} | Uszkodzona biblioteka: {name} | {count} + biblioteki uszkodzony corruptedVersionJar: message: Kliknij, aby zainstalować tę wersję name: Uszkodzona wersja słoika dla gry Minecraft %{version}. @@ -190,7 +199,9 @@ diagnosis: name: Nieprawidłowa lokalizacja java. missingAssets: message: Launcher zainstaluje zasoby za ciebie - name: 'Brakujący zasób: {name} | Brakujący zasób: {name} | Brakujący %{count} aktywa.' + name: >- + Brakujący zasób: {name} | Brakujący zasób: {name} | Brakujący %{count} + aktywa. missingAssetsIndex: message: Launcher pobierze dla ciebie indeks zasobów name: Brakujący plik indeksu zasobów {version}. @@ -201,8 +212,8 @@ diagnosis: missingLibraries: message: Launcher zainstaluje biblioteki za ciebie name: >- - Brakująca {name} Brakująca | Biblioteka {name} Brakująca | Biblioteka {count} - Brakująca | Biblioteka {count} Biblioteka + Brakująca {name} Brakująca | Biblioteka {name} Brakująca | Biblioteka + {count} Brakująca | Biblioteka {count} Biblioteka missingVersion: message: Kliknij, aby zainstalować tę wersję name: Wersja {version} nie jest zainstalowany! @@ -220,36 +231,37 @@ duration: day: '{duration} dzień | {duration} dni' hour: '{duration} godzina | {duration} godziny' minute: '{duration} minuta | {duration} minuty' - second: '{duration} drugi | {duration} sekundy' # Якщо читаєте це, то дайте мені тарелку риса для мотивації, а ще задонь для CIO0, теж для мотивації # + second: '{duration} drugi | {duration} sekundy' edit: Edytuj enable: Włącz error: name: Błąd | Błędy errors: BadForgeInstallerJarError: >- - Nie można przeanalizować pliku jar instalatora forge. Może forge ma nowy format pliku instalatora - format pliku? Skontaktuj się z programistami, jeśli ten problem nadal występuje. + Nie można przeanalizować pliku jar instalatora forge. Może forge ma nowy + format pliku instalatora format pliku? Skontaktuj się z programistami, jeśli + ten problem nadal występuje. BadInstanceType: 'Nieprawidłowa instancja: {type}' BodyTimeoutError: Limit czasu HTTP Body ChecksumNotMatchError: Suma kontrolna nie pasuje! Oczekiwanie {expect}. Rzeczywisty {actual}. ConnectTimeoutError: Limit czasu połączenia z serwerem. DNSNotFoundError: Błąd wyszukiwania DNS DatabaseNotOpened: >- - Baza danych nie jest otwarta! Program uruchamiający nie będzie działał prawidłowo! Wybierz katalog - do którego program uruchamiający ma dostęp. Możesz spróbować zresetować katalog główny danych - na stronie ustawień. + Baza danych nie jest otwarta! Program uruchamiający nie będzie działał + prawidłowo! Wybierz katalog do którego program uruchamiający ma dostęp. + Możesz spróbować zresetować katalog główny danych na stronie ustawień. DownloadAggregateError: Nie można pobrać pliku. DownloadFileSystemError: >- - Błąd podczas uzyskiwania dostępu do ścieżki pobierania pliku. Upewnij się, że program uruchamiający - ma uprawnienia do zapisu. + Błąd podczas uzyskiwania dostępu do ścieżki pobierania pliku. Upewnij się, + że program uruchamiający ma uprawnienia do zapisu. HeadersTimeoutError: Limit czasu nagłówka HTTP NotFoundError: 404 Nie znaleziono SocketError: Błąd gniazda serwera exception: http: >- - Żądanie HTTP do {url} nie powiodło się. Kod statusu {statusCode}. {code}. Spróbuj ponownie - lub sprawdź sieć. Jeśli ten błąd będzie się powtarzał, wyślij raport do - zespół deweloperów. + Żądanie HTTP do {url} nie powiodło się. Kod statusu {statusCode}. {code}. + Spróbuj ponownie lub sprawdź sieć. Jeśli ten błąd będzie się powtarzał, + wyślij raport do zespół deweloperów. existed: Existed exportModpackTarget: curseforge: Plik Curseforge @@ -275,7 +287,9 @@ feedback: githubDescription: Otwórz wątek na Github, aby podzielić się swoimi przemyśleniami githubOpenIssue: Github kook: Kook - kookDescription: Kook to alternatywna aplikacja dla użytkownika Discord w Chinach kontynentalnych + kookDescription: >- + Kook to alternatywna aplikacja dla użytkownika Discord w Chinach + kontynentalnych name: Informacje zwrotne qq: Grupa QQ qqDescription: >- @@ -289,8 +303,8 @@ filter: Filtr finish: Zakończenie forgeConfig: hint: >- - Przynajmniej raz uruchom grę z tym modem, abyśmy mogli wykryć jego plik konfiguracyjny. - jego plik konfiguracyjny! + Przynajmniej raz uruchom grę z tym modem, abyśmy mogli wykryć jego plik + konfiguracyjny. jego plik konfiguracyjny! forgeVersion: common: Wspólny disable: Wyłącz Forge @@ -369,11 +383,15 @@ instance: addServer: Dodaj serwer current: Bieżąca instancja delete: Usuń grę - deleteHint: Dane instancji zostaną usunięte z dysku na zawsze. Na pewno chcesz to zrobić? + deleteHint: >- + Dane instancji zostaną usunięte z dysku na zawsze. Na pewno chcesz to + zrobić? duplicate: Duplicate Game duplicatedName: Zduplikowana nazwa fileApi: Adres URL interfejsu API serwera synchronizacji plików - fileApiHint: Adres URL do synchronizacji plików instancji ze zdalnego serwera konfiguracji. + fileApiHint: >- + Adres URL do synchronizacji plików instancji ze zdalnego serwera + konfiguracji. gameVersion: Wersja gry icon: Ikona profilu iconUrl: Ikona Adres URL @@ -406,18 +424,20 @@ instanceFileOperation: instanceSetting: disableAuthlibInjector: Wyłącz wtryskiwacz authlib disableAuthlibInjectorDescription: >- - Jeśli korzystasz ze skórki innej firmy. Wtryskiwacz authlib może pomóc - w wyświetlaniu skórki w grze. + Jeśli korzystasz ze skórki innej firmy. Wtryskiwacz authlib może pomóc w + wyświetlaniu skórki w grze. disableElyByAuthlib: Wyłącz zastępowanie authlib przez ely.by disableElyByAuthlibDescription: >- - Ely.by ma unikalny zamiennik authlib do wyświetlania skórki uniwersalnie na każdym serwerze. - serwerze. + Ely.by ma unikalny zamiennik authlib do wyświetlania skórki uniwersalnie na + każdym serwerze. serwerze. fastLaunch: Turbo Launch fastLaunchHint: Ignorowanie statusu użytkownika i istniejących nierozwiązanych problemów hideLauncher: Ukryj program uruchamiający po uruchomieniu icon: Wybierz obraz showLog: Pokaż dziennik Minecraft - showLogHint: Spowoduje to wyświetlenie okna do strumieniowego przesyłania dziennika Minecraft po uruchomieniu gry + showLogHint: >- + Spowoduje to wyświetlenie okna do strumieniowego przesyłania dziennika + Minecraft po uruchomieniu gry instanceTemplate: curseforge: To jest modpack Curseforge ftb: To jest modpack FTB @@ -430,6 +450,11 @@ instanceTemplate: instanceUpdate: basic: Aktualizacja ustawień files: Aktualizacje plików + loaderChanged: >- + Modloader tej instancji został zmieniony. + + Stary moduł ładujący to {modloader}, a nowy moduł ładujący to + {newModloader}. title: Aktualizacja instancji update: Rozpoczęcie aktualizacji instances: @@ -440,16 +465,16 @@ instances: MultiMC. addManually: Ręczne tworzenie addModrinthDescription: >- - Zaimportuj istniejącą instancję Modrinth. Musisz wybrać folder instancji Modrinth - folder. + Zaimportuj istniejącą instancję Modrinth. Musisz wybrać folder instancji + Modrinth folder. addServer: Utwórz z serwera addServerDescription: Spowoduje to bezpośrednie uruchomienie gry na serwerze. addTemplate: Utwórz z szablonu addTemplateDescription: Import z pobranego pakietu Modpack addVanilla: Tworzenie z Minecrafta w stylu vanilla addVanillaDescription: >- - Import ze wspólnego folderu .minecraft. Spowoduje to zduplikowanie oryginalnego profilu gry - do XMCL. + Import ze wspólnego folderu .minecraft. Spowoduje to zduplikowanie + oryginalnego profilu gry do XMCL. choose: Wybierz grę importFolder: Importuj z folderu importFolderDescription: Importowanie Minecrafta do programu uruchamiającego @@ -492,13 +517,14 @@ launchBlocked: title: Uruchomienie nie powiodło się launchInvalidJavaPath: description: >- - Brakuje wybranej Java lub jest ona nieprawidłowa. Proszę wybrać nowy. {javaPath} + Brakuje wybranej Java lub jest ona nieprawidłowa. Proszę wybrać nowy. + {javaPath} title: Nieprawidłowa ścieżka Java launchJavaNoPermission: description: >- Program uruchamiający nie ma uprawnień do wykonania java {javaPath} . Albo zmień uprawnienia pliku - java lub podnieść uprawnienia programu uruchamiającego. + class="highlight"> {javaPath} . Albo zmień uprawnienia pliku java + lub podnieść uprawnienia programu uruchamiającego. title: Brak pozwolenia na uruchomienie launchNoProperJava: description: >- @@ -506,29 +532,35 @@ launchBlocked: nieważny?) title: Nie znaleziono odpowiedniej javy launchNoVersionInstalled: - description: Nie można rozpoznać wersji {version} do uruchomienia. + description: >- + Nie można rozpoznać wersji {version} do + uruchomienia. title: Nie wybrano wersji launchSpawnProcessFailed: description: >- - Sprawdź java lub nadaj więcej uprawnień programowi uruchamiającemu i spróbuj ponownie. - Jeśli to nadal nie działa, skontaktuj się z twórcami gry. + Sprawdź java lub nadaj więcej uprawnień programowi uruchamiającemu i + spróbuj ponownie. Jeśli to nadal nie działa, skontaktuj się z twórcami + gry. title: Nie można uruchomić procesu gry launchUserStatusRefreshFailed: description: Nie można odświeżyć aktualnie wybranego statusu użytkownika. title: Niepowodzenie weryfikacji statusu użytkownika unexpectedText: >- - Jest to nieoczekiwane. Możesz ponownie uruchomić program uruchamiający, aby złagodzić ten problem. - Prosimy o kontakt z autorem, jeśli problem się powtórzy. + Jest to nieoczekiwane. Możesz ponownie uruchomić program uruchamiający, aby + złagodzić ten problem. Prosimy o kontakt z autorem, jeśli problem się + powtórzy. userAcquireMicrosoftTokenFailed: >- - Pozyskanie tokena Microsoft nie powiodło się. Spróbuj ponownie lub sprawdź swoje konto Microsoft - konto. - userCheckGameOwnershipFailed: Nie udało się sprawdzić własności Minecraft. Spróbuj ponownie lub sprawdź sieć. - userExchangeXboxTokenFailed: >- - Nie udało się wymienić tokenu xbox z tokenem Microsoft. Spróbuj ponownie lub sprawdź + Pozyskanie tokena Microsoft nie powiodło się. Spróbuj ponownie lub sprawdź + swoje konto Microsoft konto. + userCheckGameOwnershipFailed: >- + Nie udało się sprawdzić własności Minecraft. Spróbuj ponownie lub sprawdź sieć. + userExchangeXboxTokenFailed: >- + Nie udało się wymienić tokenu xbox z tokenem Microsoft. Spróbuj ponownie lub + sprawdź sieć. userLoginMinecraftByXboxFailed: >- - Nie udało się zalogować do Minecraft przy użyciu tokena xbox. Spróbuj ponownie lub sprawdź - sieć. + Nie udało się zalogować do Minecraft przy użyciu tokena xbox. Spróbuj + ponownie lub sprawdź sieć. launchFailed: crash: Gra się zawiesiła!!! description: Nie ma raportu o awarii. To jest dziennik błędów i najnowszy dziennik. @@ -555,8 +587,8 @@ localVersion: auto: Automatyczne obliczanie delete: Usuń wersję lokalną deleteDescription: >- - Ta operacja usunie lokalną wersję json i jar. Musisz - pobrać ją ponownie, jeśli chcesz jej ponownie użyć. + Ta operacja usunie lokalną wersję json i jar. Musisz pobrać ją ponownie, + jeśli chcesz jej ponownie użyć. empty: Nie zainstalowano żadnej wersji hint: Bezpośrednie uruchomienie określonej wersji lokalnej refresh: Odśwież wersje @@ -582,11 +614,11 @@ loginError: acquireMicrosoftTokenFailed: >- Nie można uzyskać tokena Microsoft. Może to być problem z siecią. Proszę ponów próbę. - badNetworkOrServer: >- - Sprawdź połączenie sieciowe! A może serwer uwierzytelniania - nie działa! + badNetworkOrServer: Sprawdź połączenie sieciowe! A może serwer uwierzytelniania nie działa! checkOwnershipFailed: Nie udało się sprawdzić własności gry. Spróbuj ponownie. - connectionReset: Nie można się zalogować, ponieważ połączenie zostało zresetowane przez serwer + connectionReset: >- + Nie można się zalogować, ponieważ połączenie zostało zresetowane przez + serwer fetchMinecraftProfileFailed: 'Nie można pobrać profilu Minecraft: {reason}' illegalEmail: E-mail musi być prawidłowy invalidCredentials: Nieprawidłowe poświadczenia. Nieprawidłowa nazwa użytkownika lub hasło. @@ -594,9 +626,11 @@ loginError: Nie udało się wymienić tokena Minecraft na token XBox. Upewnij się, że masz Minecraft w Xbox lub spróbuj ponownie. loginXboxFailed: >- - Nie można zalogować się do Xbox za pomocą tokena Microsoft. Upewnij się, że masz - niezależne konto Xbox od konta Microsoft. Spróbuj ponownie. - requestFailed: Logowanie nie powiodło się, nie znamy dokładnej przyczyny. Prosimy o ponowienie próby. + Nie można zalogować się do Xbox za pomocą tokena Microsoft. Upewnij się, że + masz niezależne konto Xbox od konta Microsoft. Spróbuj ponownie. + requestFailed: >- + Logowanie nie powiodło się, nie znamy dokładnej przyczyny. Prosimy o + ponowienie próby. requireEmail: Wymagany jest adres e-mail requirePassword: Wymagane jest hasło requireUsername: Nazwa użytkownika jest wymagana @@ -624,9 +658,8 @@ mod: currentVersion: Aktualny {current} deletion: Usuń mod deletionHint: >- - Utracisz ten mod i jego metadane na zawsze. Czy na pewno chcesz - go usunąć? | Utracisz ten mod i jego metadane na zawsze. Czy na pewno - chcesz to zrobić? + Utracisz ten mod i jego metadane na zawsze. Czy na pewno chcesz go usunąć? | + Utracisz ten mod i jego metadane na zawsze. Czy na pewno chcesz to zrobić? deletionRestHint: I {rest} więcej modów... dropHint: Upuść .jar/.litemod moda tutaj, aby zaimportować. enabled: '{count} Modyfikacje włączone' @@ -650,7 +683,6 @@ mod: switchDefaultSource: Domyślne źródło modów toUpdate: '{count} aktualizować' modInstall: - recommendation: Odkryj {first} lub {second} mod w {modrinth} i {curseforge}! checkUpgrade: Sprawdź aktualizację modów checkedUpgrade: Aktualizacja sprawdzona currentVersion: Wybrana wersja @@ -659,6 +691,7 @@ modInstall: installHint: Zainstaluje się {file} plik z {dependencies} zależności installed: Zainstalowany noVersionSupported: Mod nie obsługuje aktualnej wersji Minecrafta + recommendation: Odkryj {first} lub {second} mod w {modrinth} i {curseforge}! search: Wynik wyszukiwania searchHint: SWyszukaj i wybierz projekt source: Mod Source @@ -677,12 +710,14 @@ modpack: author: Nazwa autora authorHint: Może to być używane do podpisywania wyeksportowanych modpacków (Curseforge) delete: - hint: Spowoduje to usunięcie modpacka {name} wraz z jego metadanymi. Jesteś pewien? + hint: >- + Spowoduje to usunięcie modpacka {name} wraz z jego metadanymi. Jesteś + pewien? title: Usuń modpack description: Opis descriptionHint: >- - Ogólny opis modpacka. Może być używany do eksportowania jako - curseforge modpack. + Ogólny opis modpacka. Może być używany do eksportowania jako curseforge + modpack. dropHint: Upuść modpack zip tutaj, aby zaimportować emitCurseforge: Emit Curseforge Modpack emitMcbbs: Emit MCBBS Modpack @@ -854,21 +889,22 @@ modrinth: modrinthCard: currentVersion: Aktualna wersja projectHint: > - Aktualna wersja Ta instancja jest tworzona przez Modrinth modpack z {title} (project id: + Aktualna wersja Ta instancja jest tworzona przez Modrinth modpack z {title} + (project id: {id}) multiplayer: allowTurn: Włącz serwer przekaźnikowy allowTurnHint: >- - Zezwól na serwer przekaźnikowy, jeśli nie możesz połączyć się ze znajomym. Jednak korzystanie z - może spowolnić połączenie. Należy używać go ostrożnie. + Zezwól na serwer przekaźnikowy, jeśli nie możesz połączyć się ze znajomym. + Jednak korzystanie z może spowolnić połączenie. Należy używać go ostrożnie. complete: Kompletny confirm: Potwierdzenie connections: Połączenia copied: Skopiowane! copy: Kopia copyGroupToFriendHint: Pozwól znajomym dołączyć do grupy za pomocą tego identyfikatora - copyLocalHint: > + copyLocalHint: | "Skopiuj lokalny tekst SDP i wyślij go do swojego obiektu, aby otrzymać swój obiekt wpisz ten tekst w połączeniu łączenia Token może być używany tylko dla jednego równorzędnego! Nie możesz @@ -885,27 +921,26 @@ multiplayer: disconnected: odłączony enterRemoteToken: Wprowadź zdalny token enterRemoteTokenHint: >- - Gdy użytkownik wprowadzi swój token, należy wprowadzić jego token w polu tekstowym poniżej. - poniżej. Kliknij przycisk Potwierdź, aby się połączyć. + Gdy użytkownik wprowadzi swój token, należy wprowadzić jego token w polu + tekstowym poniżej. poniżej. Kliknij przycisk Potwierdź, aby się połączyć. gatheringIce: > - Proszę poczekać, aż serwer ICE zbierze wystarczającą ilość informacji o Twoim - sieć. Jeśli jesteś niecierpliwy i jest wystarczająco dużo informacji, możesz dać - aktualny SDP drugiej stronie z wyprzedzeniem i kliknij Dalej. Proszę o przesłanie - - Token lokalny do partnera, wprowadź swój token w Dołącz - Sekcja połączenia .
Serwer ICE może potrzebować trochę czasu - zbierz swoje dane, aby utworzyć Token lokalny.
Nie musisz czekać - aż do uzyskania statusu ICE. Jeśli poniższy token pozostanie niezmieniony, możesz to zrobić - skopiuj go i wyślij swojemu koledze.” + Proszę poczekać, aż serwer ICE zbierze wystarczającą ilość informacji o + Twoim sieć. Jeśli jesteś niecierpliwy i jest wystarczająco dużo informacji, + możesz dać aktualny SDP drugiej stronie z wyprzedzeniem i kliknij Dalej. + Proszę o przesłanie Token lokalny do partnera, wprowadź + swój token w Dołącz Sekcja połączenia .
+ Serwer ICE może potrzebować trochę czasu zbierz swoje dane, aby utworzyć + Token lokalny.
Nie musisz czekać aż do uzyskania statusu + ICE. Jeśli poniższy token pozostanie niezmieniony, możesz to zrobić skopiuj + go i wyślij swojemu koledze.” groupId: Identyfikator grupy illegalTokenDescription: Nielegalny token. Upewnij się, że token od innego partnera jest poprawny initiateConnection: Zainicjuj połączenie inviteLink: Zaproś łącze - joinConnection: >- - Jeśli Twój partner już zainicjował połączenie, musisz dołączyć - Połączenie. + joinConnection: Jeśli Twój partner już zainicjował połączenie, musisz dołączyć Połączenie. joinManual: Dołącz joinOrCreateGroup: Dołącz/utwórz grupę joinOrCreateGroupHint: Uzyskaj identyfikator grupy od znajomych lub utwórz grupę @@ -947,7 +982,7 @@ news: name: Aktualności readMore: Czytaj więcej next: Następny -'no': 'Nie' +'no': Nie ok: OK optifineVersion: disable: Wyłączanie Optifine @@ -1000,10 +1035,12 @@ resourcepack: defaultDescription: Domyślny wygląd i sposób działania Minecrafta delete: content: >- - Spowoduje to usunięcie pliku pakietu zasobów z dysku i nie będzie można go ponownie utworzyć. - Czy na pewno chcesz to zrobić? + Spowoduje to usunięcie pliku pakietu zasobów z dysku i nie będzie można go + ponownie utworzyć. Czy na pewno chcesz to zrobić? title: Usuń pakiet zasobów - dropHint: Usuń pakiet zasobówUpuść folder/zip pakietu zasobów tutaj, aby go zaimportować. + dropHint: >- + Usuń pakiet zasobówUpuść folder/zip pakietu zasobów tutaj, aby go + zaimportować. enable: '{count} Pakiet zasobów jest włączony' import: Importuj pakiet zasobów incompatible: >- @@ -1032,16 +1069,16 @@ save: cancel: Anuluj confirm: Rozpocznij kopiowanie description: >- - Możesz wdrożyć zapisywanie do tej instancji z innych instancji lub z zarządzanych zasobów (curseforge). - zasobów (curseforge) + Możesz wdrożyć zapisywanie do tej instancji z innych instancji lub z + zarządzanych zasobów (curseforge). zasobów (curseforge) from: Od {src} fromProfile: Z innych instancji fromResource: Z zarządzanych zasobów title: Importuj zapis z zarządzanego źródła createdWorlds: Masz {count} światów deleteHint: >- - Tej operacji nie można przywrócić. Zapisane dane zostaną utracone na zawsze. Czy - na pewno usunąć ten zapis? + Tej operacji nie można przywrócić. Zapisane dane zostaną utracone na zawsze. + Czy na pewno usunąć ten zapis? deleteTitle: Usuń Zapisz detail: Więcej informacji dropHint: Przeciągnij zapisz zip tutaj, aby zaimportować @@ -1095,8 +1132,8 @@ setting: official: Oficjalny (Mojang) appearance: Wygląd appxUpdateHint: >- - Program uruchamiający pobierze i uruchomi instalator. Jeśli instalator popup nie powiódł się, - należy uruchomić go ręcznie. + Program uruchamiający pobierze i uruchomi instalator. Jeśli instalator popup + nie powiódł się, należy uruchomić go ręcznie. autoDownload: Automatyczne pobieranie autoDownloadDescription: Automatyczne pobieranie aktualizacji, jeśli jest dostępna autoInstallOnAppQuit: Autoinstalacja @@ -1165,18 +1202,20 @@ setting: layout: default: Układ domyślny focus: Focus Layout - layoutDescription: Układ programu uruchamiającego reprezentujący inną logikę interfejsu użytkownika + layoutDescription: >- + Układ programu uruchamiającego reprezentujący inną logikę interfejsu + użytkownika layoutTitle: Układ linuxTitlebar: Natywny pasek tytułu linuxTitlebarDescription: Użyj natywnego linuksowego paska tytułu dla programu uruchamiającego location: Lokalizacja sklepu maunalUpdateHint: >- - Wersja nie może być automatycznie aktualizowana. Prosimy o ponowne pobranie programu uruchamiającego ze strony - strony internetowej! + Wersja nie może być automatycznie aktualizowana. Prosimy o ponowne pobranie + programu uruchamiającego ze strony strony internetowej! maxSockets: Na hosta maxSocketsDescription: >- - Ograniczenie maksymalnej liczby gniazd na host lub dla wszystkich hostów łącznie. - łącznie. 0 oznacza brak limitu. + Ograniczenie maksymalnej liczby gniazd na host lub dla wszystkich hostów + łącznie. łącznie. 0 oznacza brak limitu. maxSocketsTitle: Max HTTP sockets name: Ustawienia globalne | Ustawienia globalne network: Ustawienia sieciowe @@ -1197,7 +1236,9 @@ setting: showNewsHeader: Odkryj wizytówkę wiadomości showRoot: Pokaż streamerMode: Tryb przesyłania strumieniowego - streamerModeDescription: Spowoduje to ukrycie prywatnych informacji, takich jak adres e-mail, w programie uruchamiającym. + streamerModeDescription: >- + Spowoduje to ukrycie prywatnych informacji, takich jak adres e-mail, w + programie uruchamiającym. theme: dark: Ciemny motyw light: Motyw świetlny @@ -1213,8 +1254,8 @@ setting: update: Aktualizacja useBmclAPI: Korzystanie z interfejsu API BMCL useBmclAPIDescription: >- - Użyj BMCLAPI, aby pobrać Minecrafta, gdy jesteś w Chinach kontynentalnych. (To - nie będzie miało wpływu, jeśli nie jesteś w Chinach kontynentalnych) + Użyj BMCLAPI, aby pobrać Minecrafta, gdy jesteś w Chinach kontynentalnych. + (To nie będzie miało wpływu, jeśli nie jesteś w Chinach kontynentalnych) useProxy: HTTP Proxy useProxyDescription: Adres serwera proxy dla żądania http viewBackgroundMusic: Wyświetl muzykę @@ -1225,52 +1266,58 @@ settingLabel: localHint: To ustawienie jest modyfikowane przez bieżącą instancję setup: account: - description: Zaloguj się na swoje konto w grze. Jeśli go nie posiadasz, możesz je na razie pominąć. + description: >- + Zaloguj się na swoje konto w grze. Jeśli go nie posiadasz, możesz je na + razie pominąć. name: Dodaj konto gry skip: Na razie pomiń appearance: name: '@:setting.appearance' dataRoot: description: >- - Korzeń danych nie jest zwykłym katalogiem .minecraft. Ponieważ struktura katalogów danych XMCL - różni się od struktury katalogu vanilla, nie zalecamy używania - wspólnego katalogu .minecraft jako katalogu głównego danych. + Korzeń danych nie jest zwykłym katalogiem .minecraft. Ponieważ struktura + katalogów danych XMCL różni się od struktury katalogu vanilla, nie + zalecamy używania wspólnego katalogu .minecraft jako katalogu głównego + danych. drives: Polecane lokalizacje name: Ustaw katalog danych defaultLayoutDescription: >- - Domyślny układ stara się wzmocnić koncepcję "instancji" gry. To - przypomina aplikacje takie jak Discord. Jest również inspirowany innymi aplikacjami do uruchamiania gier - jak Steam itp. + Domyślny układ stara się wzmocnić koncepcję "instancji" gry. To przypomina + aplikacje takie jak Discord. Jest również inspirowany innymi aplikacjami do + uruchamiania gier jak Steam itp. defaultPath: Ścieżka domyślna error: - badDataRoot: Nieprawidłowy katalog dla danych programu uruchamiającego! Spróbuj użyć innego katalogu! + badDataRoot: >- + Nieprawidłowy katalog dla danych programu uruchamiającego! Spróbuj użyć + innego katalogu! exists: >- - Wybrany katalog nie jest pusty. W porządku, ale upewnij się, że wykonałeś kopię zapasową - danych. - noPermission: >- - Launcher nie ma uprawnień dostępu do wybranego katalogu! Spróbuj - inny. + Wybrany katalog nie jest pusty. W porządku, ale upewnij się, że wykonałeś + kopię zapasową danych. + noPermission: Launcher nie ma uprawnień dostępu do wybranego katalogu! Spróbuj inny. nonDictionary: Selected path is a file! Please select a directory! focusLayoutDescription: >- - Układ główny jest starszym układem programu uruchamiającego Minecraft. Został zaprojektowany - do użycia z pojedynczą instancją lub kilkoma instancjami. + Układ główny jest starszym układem programu uruchamiającego Minecraft. + Został zaprojektowany do użycia z pojedynczą instancją lub kilkoma + instancjami. game: description: >- - Wybierz istniejący katalog gry (.minecraft), aby zaimportować istniejące zasoby. - Dzięki temu można szybko zidentyfikować mody, pakiety zasobów itp. + Wybierz istniejący katalog gry (.minecraft), aby zaimportować istniejące + zasoby. Dzięki temu można szybko zidentyfikować mody, pakiety zasobów itp. name: Import istniejącej gry locale: description: >- - Wybierz preferowany język, jeśli go mamy! Jeśli nie widzisz swojego języka ojczystego - języka i chcesz pomóc, możesz odwiedzić nasz Github, aby przesłać pull - prośby o tłumaczenie! + Wybierz preferowany język, jeśli go mamy! Jeśli nie widzisz swojego języka + ojczystego języka i chcesz pomóc, możesz odwiedzić nasz Github, aby + przesłać pull prośby o tłumaczenie! language: Język name: Ustaw język path: Bieżąca ścieżka title: 'Witamy w X Minecraft Launcher. Zanim zaczniesz, musisz ' shaderPack: deletion: Usuń pakiet shaderów - deletionHint: Spowoduje to usunięcie pliku pakietu shaderów {path} i nie będzie można go przywrócić. + deletionHint: >- + Spowoduje to usunięcie pliku pakietu shaderów {path} i nie będzie można go + przywrócić. disabled: Wyłączony pakiet shaderów dropHint: Import Shader Pack empty: No shader pack allocated @@ -1290,7 +1337,7 @@ store: name: Rynek Modpack popular: Popularne modpacki recentUpdated: Ostatnia aktualizacja -summery: Podsumowanie +summery: Podsumowanie tag: create: Utwórz tag createSelected: Utwórz znacznik dla wybranych @@ -1323,10 +1370,12 @@ transportType: relay: Kandydat na sztafetę srflx: Kandydat refleksyjny serwera tutorial: - feedbackDescription: Jeśli napotkasz jakikolwiek problem, kliknij ten przycisk, aby wysłać opinię! + feedbackDescription: >- + Jeśli napotkasz jakikolwiek problem, kliknij ten przycisk, aby wysłać + opinię! hideNewsHeaderDescription: >- - Po lewej stronie wyświetlane są wiadomości. Kliknięcie tego przycisku może ukryć - tę gablotę. + Po lewej stronie wyświetlane są wiadomości. Kliknięcie tego przycisku może + ukryć tę gablotę. instance: iconDescription: Kliknij, aby zmienić ikonę.` iconTitle: Ikona instancji @@ -1335,45 +1384,48 @@ tutorial: javaImportTitle: Import java javaTitle: Lista Java instanceAddDescription: >- - Kliknij ten przycisk, aby zaimportować istniejącą grę Minecraft lub utworzyć nową z - lub modpack. - instanceSelectDescription: Kliknięcie tego przycisku spowoduje przejście do strony, na której można wybrać grę i przeczytać wiadomości. + Kliknij ten przycisk, aby zaimportować istniejącą grę Minecraft lub utworzyć + nową z lub modpack. + instanceSelectDescription: >- + Kliknięcie tego przycisku spowoduje przejście do strony, na której można + wybrać grę i przeczytać wiadomości. launchDescription: Kliknij ten przycisk, aby zainstalować lub uruchomić grę. mod: defaultSourceDescription: >- - Możesz wybrać źródło szczegółów modów tutaj. Dostępne są mody - opublikowane zarówno na Modrinth, jak i Curseforge. Jeśli chcesz przełączać się między + Możesz wybrać źródło szczegółów modów tutaj. Dostępne są mody opublikowane + zarówno na Modrinth, jak i Curseforge. Jeśli chcesz przełączać się między tymi dwoma dostawcami treści. Możesz zmienić wartość tutaj. defaultSourceTitle: Wybierz źródło zawartości modu detailDescription: >- - Po wybraniu elementu po lewej stronie. Zobaczysz szczegóły moda. - Zawartość może pochodzić z Modrinth, Curseforge lub sparsowanej zawartości moda. + Po wybraniu elementu po lewej stronie. Zobaczysz szczegóły moda. Zawartość + może pochodzić z Modrinth, Curseforge lub sparsowanej zawartości moda. detailTitle: Mod Detail listDescription: >- - Wyświetlimy zainstalowane mody, gdy nie masz żadnych danych wejściowych. Zobaczysz - wyszukiwane mody po wprowadzeniu słowa kluczowego lub wybranej kategorii. + Wyświetlimy zainstalowane mody, gdy nie masz żadnych danych wejściowych. + Zobaczysz wyszukiwane mody po wprowadzeniu słowa kluczowego lub wybranej + kategorii. listTitle: Zainstalowany lub wyszukiwany mod searchDescription: >- - Możesz wyszukiwać mody z Modrinth, Curseforge lub lokalnej pamięci podręcznej za pomocą - to pole wyszukiwania. + Możesz wyszukiwać mody z Modrinth, Curseforge lub lokalnej pamięci + podręcznej za pomocą to pole wyszukiwania. searchTitle: Wyszukiwanie modów multiplayer: contentDescription: Połączenia między Tobą a Twoimi rówieśnikami będą wymienione tutaj. contentTitle: '@:multiplayer.connections' groupDescription: >- - Możesz utworzyć lub dołączyć do grupy z innymi graczami. Program uruchamiający spróbuje - utworzyć połączenia P2P między Tobą a Twoimi znajomymi według - grupy. Możesz wprowadzić nazwę grupy podaną przez znajomych. Możesz też - utworzyć własną, unikalną nazwę. + Możesz utworzyć lub dołączyć do grupy z innymi graczami. Program + uruchamiający spróbuje utworzyć połączenia P2P między Tobą a Twoimi + znajomymi według grupy. Możesz wprowadzić nazwę grupy podaną przez + znajomych. Możesz też utworzyć własną, unikalną nazwę. groupTitle: Dołącz do grupy joinDescription: >- - Po wprowadzeniu nazwy grupy. Możesz kliknąć ten przycisk, aby dołączyć lub utworzyć - grupy. Jeśli nazwa grupy jest pusta, program uruchamiający wygeneruje nazwę - nazwę. + Po wprowadzeniu nazwy grupy. Możesz kliknąć ten przycisk, aby dołączyć lub + utworzyć grupy. Jeśli nazwa grupy jest pusta, program uruchamiający + wygeneruje nazwę nazwę. manualDescription: >- - Jeśli ty lub twój znajomy nie możecie połączyć się z grupą. Możesz spróbować ręcznie - wymienić token, klikając opcję Połącz ręcznie. Jeśli to również się nie powiedzie - może to być problem z internetem. + Jeśli ty lub twój znajomy nie możecie połączyć się z grupą. Możesz + spróbować ręcznie wymienić token, klikając opcję Połącz ręcznie. Jeśli to + również się nie powiedzie może to być problem z internetem. recentPlayDescription: >- Utworzone gry zostaną wyświetlone tutaj. Możesz przełączać widoki tutaj, aby zobaczyć zainstalowane wersje i pobrane modpacki. @@ -1381,7 +1433,9 @@ tutorial: W tej sekcji zobaczysz najpopularniejsze modpacki w Curseforge i Modrinth. sekcji. storeSearchCategoryDescription: Można tu również przełączać kategorie lub filtry. - storeSearchDescription: Możesz wyszukać Modpack, wprowadzając dane w tym polu tekstowym. Naciśnij Enter, aby wyszukać. + storeSearchDescription: >- + Możesz wyszukać Modpack, wprowadzając dane w tym polu tekstowym. Naciśnij + Enter, aby wyszukać. storeSearchResultDescription: Tutaj wyświetlone zostaną wszystkie wyniki wyszukiwania. userAccountDescription: Kliknij tę ikonę, aby dodać konto Minecraft lub zarządzać nim. universalDrop: @@ -1396,8 +1450,8 @@ upstream: missingModpackMetadata: >- Nie znaleziono metadanych starego modpacka. - Nadal możesz dokonać aktualizacji, ale wynik może być błędny. Wykonaj kopię zapasową - plików instancji. + Nadal możesz dokonać aktualizacji, ale wynik może być błędny. Wykonaj kopię + zapasową plików instancji. onlyShowCurrentVersion: Pokazuje tylko aktualną wersję Minecrafta update: Aktualizacja user: @@ -1410,7 +1464,9 @@ user: forgetChallenges: Zapomniałem tych pytań i chcę je zmienić id: User Id info: Informacje o użytkowniku - insecureClient: Klient nie jest zabezpieczony! Potwierdź swoją tożsamość, aby przesłać skórkę! + insecureClient: >- + Klient nie jest zabezpieczony! Potwierdź swoją tożsamość, aby przesłać + skórkę! name: Nazwa użytkownika nameHint: Nazwa wyświetlana w grze profile: Profile @@ -1426,9 +1482,9 @@ userAccount: userCape: changeTitle: Zmień pelerynę description: >- - Peleryny to specjalne nagrody, które gracze mogą odblokować poprzez różne wydarzenia, - kampanie i inne szczęśliwe wydarzenia. Tutaj możesz wybrać między peleryną - które aktualnie posiadasz: + Peleryny to specjalne nagrody, które gracze mogą odblokować poprzez różne + wydarzenia, kampanie i inne szczęśliwe wydarzenia. Tutaj możesz wybrać + między peleryną które aktualnie posiadasz: noCape: Bez przylądka userService: add: Dodaj więcej usług @@ -1475,4 +1531,4 @@ versionType: beta: Beta name: Status release: Release -'yes': 'Tak' +'yes': Tak diff --git a/xmcl-keystone-ui/locales/ru.yaml b/xmcl-keystone-ui/locales/ru.yaml index 944d7741c..8b7889eee 100644 --- a/xmcl-keystone-ui/locales/ru.yaml +++ b/xmcl-keystone-ui/locales/ru.yaml @@ -429,6 +429,11 @@ instanceTemplate: instanceUpdate: basic: Обновление настроек files: Обновление файлов + loaderChanged: >- + Модлоадер этого экземпляра был изменен. + + Старый загрузчик модов — {modloader}, а новый загрузчик модов — + {newModloader}. title: Обновление экземпляра update: Начать обновление instances: diff --git a/xmcl-keystone-ui/locales/uk.yaml b/xmcl-keystone-ui/locales/uk.yaml index 89cf59f23..5ac154ed1 100644 --- a/xmcl-keystone-ui/locales/uk.yaml +++ b/xmcl-keystone-ui/locales/uk.yaml @@ -432,6 +432,9 @@ instanceTemplate: instanceUpdate: basic: Оновлення налаштувань files: Оновлення файлів + loaderChanged: |- + Завантажувач модів цього екземпляра змінено. + Старий завантажувач модів — {modloader}, а новий — {newModloader}. title: Оновити екземпляр update: Почати оновлення instances: diff --git a/xmcl-keystone-ui/locales/zh-CN.yaml b/xmcl-keystone-ui/locales/zh-CN.yaml index aa604541d..860cef921 100644 --- a/xmcl-keystone-ui/locales/zh-CN.yaml +++ b/xmcl-keystone-ui/locales/zh-CN.yaml @@ -446,6 +446,9 @@ instanceTemplate: instanceUpdate: basic: 设置更新 files: 文件更新 + loaderChanged: |- + 该实例的模组加载器已更改。 + 旧的 modloader 是 {modloader},新的 modloader 是 {newModloader}。 title: 更新实例 update: 开始更新实例 instances: diff --git a/xmcl-keystone-ui/locales/zh-TW.yaml b/xmcl-keystone-ui/locales/zh-TW.yaml index 6ee30795f..10116fd9a 100644 --- a/xmcl-keystone-ui/locales/zh-TW.yaml +++ b/xmcl-keystone-ui/locales/zh-TW.yaml @@ -180,6 +180,10 @@ instanceTemplate: importing: 模板導入 preview: 預覽 title: 模板設置 +instanceUpdate: + loaderChanged: |- + 該實例的模組載入器已變更。 + 舊的 modloader 是 {modloader},新的 modloader 是 {newModloader}。 instances: add: 創建遊戲 addManually: 手動建立 diff --git a/xmcl-keystone-ui/src/views/HomeInstanceUpdateDialog.vue b/xmcl-keystone-ui/src/views/HomeInstanceUpdateDialog.vue index 155d06834..a7dae6419 100644 --- a/xmcl-keystone-ui/src/views/HomeInstanceUpdateDialog.vue +++ b/xmcl-keystone-ui/src/views/HomeInstanceUpdateDialog.vue @@ -80,6 +80,38 @@ + + + + + + + {{ t('instanceUpdate.files') }} @@ -140,8 +172,9 @@ import { basename } from '@/util/basename' import { getFTBTemplateAndFile } from '@/util/ftb' import { injection } from '@/util/inject' import { getUpstreamFromResource } from '@/util/upstream' -import { EditInstanceOptions, InstanceData, InstanceFileOperation, InstanceFileUpdate, InstanceInstallServiceKey, InstanceUpdateServiceKey, Resource } from '@xmcl/runtime-api' +import { EditInstanceOptions, InstanceData, InstanceFileOperation, InstanceFileUpdate, InstanceInstallServiceKey, InstanceUpdateServiceKey, Resource, ResourceServiceKey } from '@xmcl/runtime-api' import { useDialog } from '../composables/dialog' +import { resolveModpackInstanceConfig } from '@/util/modpackFilesResolver' const selected = ref([] as string[]) @@ -229,6 +262,7 @@ const { runtime: oldRuntime, path: instancePath } = injection(kInstance) const { all: javas } = injection(kJavaContext) const { refresh, refreshing, error } = useRefreshable(async () => { if (newManifest.value && oldManifest.value) { + // FTB const [config, newVersionFiles] = getFTBTemplateAndFile(newManifest.value, javas.value) const [_, oldVersionFiles] = getFTBTemplateAndFile(oldManifest.value, javas.value) upgrade.value = { @@ -246,19 +280,46 @@ const { refresh, refreshing, error } = useRefreshable(async () => { } return } - const path = newResource.value?.path - if (path) { + const res = newResource.value + const path = res?.path + if (res && path) { + const config = resolveModpackInstanceConfig(res) as EditInstanceOptions + + const files = await getInstanceUpdateProfile({ + instancePath: instancePath.value, + oldModpack: oldResource.value && 'path' in oldResource.value ? oldResource.value.path : undefined, + newModpack: res.path, + }) + upgrade.value = { - ...await getInstanceUpdateProfile({ - instancePath: instancePath.value, - oldModpack: oldResource.value && 'path' in oldResource.value ? oldResource.value.path : undefined, - newModpack: newResource.value.path, - }), + instance: config, + files, upstream: getUpstreamFromResource(newResource.value), } } }) +const loaderDifferences = computed(() => { + const old = oldRuntime.value + const newR = runtime.value + const loaders = ['forge', 'fabricLoader', 'quiltLoader', 'neoForged'] + const oldL = [] as string[] + const newL = [] as string[] + for (const l of loaders) { + if (!!old[l] !== !!newR[l]) { + if (old[l]) { + oldL.push(l) + } else { + newL.push(l) + } + } + } + return { + old: oldL, + new: newL, + } +}) + const confirm = async () => { if (upgrade.value) { const { instance, files, upstream } = upgrade.value diff --git a/xmcl-runtime-api/src/services/InstanceUpdateService.ts b/xmcl-runtime-api/src/services/InstanceUpdateService.ts index 5062e9cb6..e8b73a921 100644 --- a/xmcl-runtime-api/src/services/InstanceUpdateService.ts +++ b/xmcl-runtime-api/src/services/InstanceUpdateService.ts @@ -20,10 +20,6 @@ export type UpgradeModpackRawOptions = { oldVersionFiles: InstanceFile[] newVersionFiles: InstanceFile[] } -export interface InstanceUpdateProfile { - instance: EditInstanceOptions - files: InstanceFileUpdate[] -} export type InstanceFileUpdate = { file: InstanceFile @@ -35,7 +31,7 @@ export type InstanceFileUpdate = { } export interface InstanceUpdateService { - getInstanceUpdateProfile(options: UpgradeModpackOptions): Promise + getInstanceUpdateProfile(options: UpgradeModpackOptions): Promise getInstanceUpdateProfileRaw(options: UpgradeModpackRawOptions): Promise } diff --git a/xmcl-runtime/instanceIO/InstanceUpdateService.ts b/xmcl-runtime/instanceIO/InstanceUpdateService.ts index 29eceb1ec..b2415ad08 100644 --- a/xmcl-runtime/instanceIO/InstanceUpdateService.ts +++ b/xmcl-runtime/instanceIO/InstanceUpdateService.ts @@ -9,9 +9,7 @@ import { AbstractService, ExposeServiceKey } from '~/service' type Upstream = Required['upstream'] -type UpstreamResolver = (upstream: Upstream) => Promise<{ - files: InstanceFile[] -} | undefined> +type UpstreamResolver = (upstream: Upstream) => Promise @ExposeServiceKey(InstanceUpdateServiceKey) export class InstanceUpdateService extends AbstractService implements IInstanceUpdateService { @@ -30,13 +28,13 @@ export class InstanceUpdateService extends AbstractService implements IInstanceU const res = upstream.sha1 ? await resourceService.getResourceByHash(upstream.sha1) : (await resourceService.getResourcesByUris([`modrinth:${upstream.projectId}:${upstream.versionId}`]))[0] if (res) { if (res.metadata.instance) { - return res.metadata.instance + return res.metadata.instance.files } - return await this.modpackService.getModpackInstallProfile(res.path).catch(() => undefined) + return await this.modpackService.getModpackInstallFiles(res.path).catch(() => undefined) } const resMetadata = upstream.sha1 ? await resourceService.getResourceMetadataByHash(upstream.sha1) : (await resourceService.getResourceMetadataByUri(`modrinth:${upstream.projectId}:${upstream.versionId}`))[0] if (resMetadata?.instance) { - return resMetadata.instance + return resMetadata.instance.files } } return undefined @@ -47,13 +45,13 @@ export class InstanceUpdateService extends AbstractService implements IInstanceU const res = upstream.sha1 ? await resourceService.getResourceByHash(upstream.sha1) : (await resourceService.getResourcesByUris([`curseforge:${upstream.modId}:${upstream.fileId}`]))[0] if (res) { if (res.metadata.instance) { - return res.metadata.instance + return res.metadata.instance.files } - return await this.modpackService.getModpackInstallProfile(res.path).catch(() => undefined) + return await this.modpackService.getModpackInstallFiles(res.path).catch(() => undefined) } const resMetadata = upstream.sha1 ? await resourceService.getResourceMetadataByHash(upstream.sha1) : (await resourceService.getResourceMetadataByUri(`curseforge:${upstream.modId}:${upstream.fileId}`))[0] if (resMetadata?.instance) { - return resMetadata.instance + return resMetadata.instance.files } } return undefined @@ -67,8 +65,8 @@ export class InstanceUpdateService extends AbstractService implements IInstanceU private async resolveOldFiles(instancePath: string, instance: InstanceData, oldModpack?: string): Promise { if (oldModpack) { // If old modpack path present, try to get modpack content - const profile = await this.modpackService.getModpackInstallProfile(oldModpack) - return profile.files + const files = await this.modpackService.getModpackInstallFiles(oldModpack) + return files } if (instance.upstream) { @@ -78,7 +76,7 @@ export class InstanceUpdateService extends AbstractService implements IInstanceU for (const resolver of this.resolvers) { const result = await resolver(upstream) if (result) { - return result.files + return result } } } @@ -160,15 +158,12 @@ export class InstanceUpdateService extends AbstractService implements IInstanceU const oldFiles = await this.resolveOldFiles(instancePath, instance, options.oldModpack) - const { files: newFiles, instance: instanceOptions } = await this.modpackService.getModpackInstallProfile(options.newModpack) + const newFiles = await this.modpackService.getModpackInstallFiles(options.newModpack) const manifest = await this.instanceManifestService.getInstanceManifest({ path: instancePath, hashes: ['sha1'] }) const result = this.#getInstanceFilesUpdate(oldFiles, manifest.files, newFiles) - return { - instance: instanceOptions, - files: result.filter(r => !r.file.path.endsWith('/')), - } + return result.filter(r => !r.file.path.endsWith('/')) } }