p1=f'Language {lang} has {len(missing)} missing keys and {len(unused)} unused keys.'
p2='This is the primary language.'if(lang==PRIMARY_LANGUAGE)elsef'{len(identical_keys)} match {PRIMARY_LANGUAGE}, {len(placeholder_keys)} have the placeholder mark.'
print(f'{p1}{p2}')
lint_categories={
'Missing':missing,
'Unused':unused,
f'Matches {PRIMARY_LANGUAGE}':identical_keys,
'Placeholder':placeholder_keys,
}
forname,categoryinlint_categories.items():
iflen(category)>0:
print(name+':')
print(JsonHelpers.pprint_keys(sorted(category)))
deflint_report(self)->None:
print(f'There are {len(self.missing_keys)} translation keys in use that are missing from one or more language files.')
print(f'There are {len(self.unused_keys)} translation keys in language files that are not used.')
"combo_token_error":"[Account] Wymienienie tokena combo klienta %s nie powiodło się.",
"account_login_create_success":"[Account] Logowanie klienta %s powiodło się: konto %s zostało stworzone.",
"account_login_create_error":"[Account] Logowanie klienta %s nie powiodło się: tworzenie konta nie powiodło się.",
"account_login_exist_error":"[Account] Logowanie klienta %s nie powiodło się: nie znaleziono konta.",
"account_cache_error":"Błąd pamięci cache konta gry.",
"session_key_error":"Błędny klucz sesji.",
"username_error":"Nazwa użytkownika nie znaleziona.",
"username_create_error":"Nazwa użytkownika nie znaleziona, tworzenie nie powiodło się.",
"server_max_player_limit":"Liczba graczy online osiągnęła limit"
}
"username_error":"Podana nazwa użytkownika nie istnieje.",
"username_create_error":"Podana nazwa użytkownika nie istnieje. Automatyczne tworzenie nowego konta nie powiodło się.",
"server_max_player_limit":"Liczba graczy online osiągnęła swój limit."
},
"router_error":"[Dispatch] Wystąpił błąd podczas tworzenia routera."
},
"status":{
"free_software":"Grasscutter to DARMOWE oprogramowanie. Jeżeli ktoś Ci je sprzedał, to zostałeś oscamowany. Strona domowa: https://github.com/Grasscutters/Grasscutter",
"free_software":"Grasscutter to DARMOWE oprogramowanie oparte na licencji AGPL-3.0. Jeżeli za nie zapłaciłeś, zostałeś oszukany. Strona projektu: https://github.com/Grasscutters/Grasscutter",
"starting":"Uruchamianie Grasscutter...",
"shutdown":"Wyłączanie...",
"done":"Gotowe! Wpisz \"help\" aby uzyskać pomoc",
"shutdown":"Zatrzymywanie Grasscutter...",
"done":"Gotowe! Wpisz \"help\", aby uzyskać pomoc.",
"error":"Wystąpił błąd.",
"welcome":"Witamy w Grasscutter",
"welcome":"Witamy w Grasscutter!",
"run_mode_error":"Błędny tryb pracy serwera: %s.",
"run_mode_help":"Tryb pracy serwera musi być ustawiony na 'HYBRID', 'DISPATCH_ONLY', lub 'GAME_ONLY'. Nie można wystartować Grasscutter...",
"value_between":"Invalid value: %s must be between %s and %s.",
"playerId":"Błędne playerId.",
"statValue":"Błędna wartość atrybutu.",
"value_between":"Błędna wartość: %s musi być pomiędzy %s a %s.",
"playerId":"Błędne ID gracza.",
"uid":"Błędne UID.",
"id":"Błędne ID."
}
},
"execution":{
"player_exist_error":"Gracz nie znaleziony.",
"player_exist_error":"Gracz nie istnieje.",
"player_offline_error":"Gracz nie jest online.",
"item_player_exist_error":"Błędny przedmiot lub UID.",
"player_exist_offline_error":"Gracz nie znaleziony lub jest offline.",
"argument_error":"Błędne argumenty.",
"clear_target":"Cel wyczyszczony.",
"set_target":"Następne komendy będą celować w @%s.",
"set_target_online":"@%s jest online. Niektóre polecenia mogą wymagać celu offline.",
"set_target_offline":"@%s jest offline. Niektóre polecenia mogą wymagać celu online.",
"need_target":"Ta komenda wymaga docelowego UID. Dodaj argument <@UID> lub ustaw stały cel poleceniem /target @UID.",
"need_target_online":"To polecenie wymaga identyfikatora UID celu w trybie online, ale bieżący cel jest w trybie offline. Dodaj inny argument <@UID> lub ustaw trwały cel za pomocą /target @UID.",
"need_target_offline":"To polecenie wymaga identyfikatora UID celu offline, ale bieżący cel jest online. Dodaj inny argument <@UID> lub ustaw trwały cel za pomocą /target @UID."
"item_player_exist_error":"Błędny przedmiot lub ID.",
"player_exist_offline_error":"Gracz nie istnieje lub nie jest online.",
"argument_error":"Błędny argument lub argumenty.",
"clear_target":"Następne komendy nie będą dotyczyły nikogo. Będziesz musiał/a sam/a dodać ID gracza docelowego do każdej kolejnej komendy.",
"set_target":"Następne komendy będą dotyczyły gracza @%s.",
"set_target_online":"Gracz @%s jest online. Niektóre polecenia wymagają trybu offline i mogą nie działać.",
"set_target_offline":"Gracz @%s jest offline. Niektóre polecenia wymagają trybu online i mogą nie działać.",
"need_target":"Ta komenda wymaga ID gracza. Dodaj argument <@ID>, lub ustaw ID tego gracza na stałe dla każdej kolejnej komendy poleceniem \"set_target @ID\".",
"need_target_online":"Ta komenda wymaga ID gracza, który jest online, ale bieżący gracz docelowy jest w trybie offline. Dodaj inny argument <@ID> lub ustaw ID gracza na stałe dla każdej kolejnej komendy poleceniem \"set_target @ID\".",
"need_target_offline":"Ta komenda wymaga ID gracza, który jest offline, ale bieżący gracz docelowy jest w trybie online. Dodaj inny argument <@ID> lub ustaw ID gracza na stałe dla każdej kolejnej komendy poleceniem \"set_target @ID\"."
"user_not_exist":"Gracz o podanym ID %s nie istnieje.",
"start_composition":"Tworzenie wiadomości.\nUżyj \"sendmail <tytuł>\", aby kontynuować.\nMożesz użyć \"sendmail stop\" w dowolnym momencie, aby przestać.",
"templates":"Szablony nie są jeszcze gotowe do użycia.",
"invalid_arguments":"Błędne argumenty.",
"send_cancel":"Anulowano wysyłanie wiadomości",
"send_done":"Wysłano wiadomość do gracza %s!",
"send_all_done":"Wysłano wiadomośc do wszystkich graczy!",
"not_composition_end":"Komponowanie nie jest na ostatnim etapie.\nProszę użyj '/sendmail %s' lub '/sendmail stop' aby anulować",
"please_use":"Proszę użyj '/sendmail %s'",
"set_title":"Tytuł wiadomości to teraz: '%s'.\nUżyj '/sendmail <treść>' aby kontynuować.",
"set_contents":"Treść wiadomości to teraz '%s'.\nUżyj '/sendmail <nadawca>' aby kontynuować.",
"set_message_sender":"Nadawca wiadomości to teraz '%s'.\nUżyj '/sendmail <id przedmiotu | nazwa przedmiotu | zakończ> [ilość] [poziom]' aby kontynuować.",
"send":"Załączono %s %s (poziom %s) do wiadomości.\nDodaj więcej przedmiotów lub użyj '/sendmail finish' aby wysłać wiadomość.",
"send_all_done":"Wysłano wiadomość do wszystkich graczy.",
"not_composition_end":"Tworzenie wiadomości nie jest jeszcze na ostatnim etapie. Jeżeli naprawdę chcesz teraz przestać, użyj \"sendmail %s\" lub \"sendmail stop\".",
"please_use":"Użycie: \"sendmail %s\".",
"set_title":"Tytuł wiadomości to teraz:\n\n%s\n\nUżyj \"sendmail <treść>\", aby kontynuować.",
"set_contents":"Treść wiadomości to teraz:\n\n%s\n\nUżyj \"sendmail <nadawca>\", aby kontynuować.",
"set_message_sender":"Nadawca wiadomości to teraz:\n\n%s\n\nUżyj \"sendmail %s\", aby kontynuować.",
"send":"Załączono %s przedmiotów %s o poziomie %s do wiadomości.\nMożesz dodać więcej przedmiotów lub użyć \"sendmail finish\", aby wysłać wiadomość.",
"description":"Wyślij wiadomość do gracza jako serwer. Jeśli nie określono celu, wysyła do wszystkich graczy na serwerze."
},
"setFetterLevel":{
"usage":"Użycie: setfetterlevel <poziom>",
"range_error":"Poziom przyjaźni musi być pomiędzy 0,a 10.",
"success":"Poziom przyjaźni ustawiono na: %s",
"level_error":"Błędny poziom przyjaźni."
"usage":"setfetterlevel <poziom przyjaźni>",
"range_error":"Poziom przyjaźni musi być pomiędzy 0 a 10.",
"success":"Poziom przyjaźni został pomyślnie ustawiony na %s.",
"level_error":"Błędny poziom przyjaźni.",
"description":"Ustaw poziom przyjaźni obecnej postaci."
},
"setProp":{
"usage":"Usage: setprop|prop <prop> <value>\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of formPROP_MAX_SPRING_VOLUME -> max_spring_volume",
"description":"Sets accountwide properties. Things like godmode can be enabled this way, as well as changing things like unlocked abyss floor and battle pass progress."
"usage":"setprop <nazwa własności> <wartość>\n\tMożliwe nazwy własności: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel | ...\n\tTa komenda ma więcej nazw własności, które może otrzymać. Możesz je wszystkie zobaczyć w pliku \"game/props/PlayerProperty.java\".\n\tW tym pliku, przyjmują one formę \"PROP_XXX_YYY_ZZZ\", ale powinieneś je zapisywać jako \"xxx_yyy_zzz\" jeśli chcesz je użyć w tej komendzie.",
"description":"Ustaw pewne własności konta, takie jak tryb nieśmiertelności (godmode) czy też zmiana postępu Battle Pass."
"success":"Przeteleportowano %s do %s, %s, %s w scenie %s"
"success":"Gracz %s został przeniesiony do pozycji (%s, %s, %s) w scenie o ID %s.",
"description":"Przemieść wybranego gracza do podanej pozycji w podanej scenie."
},
"weather":{
"description":"Changes the weather.Weather IDs can be found in WeatherExcelConfigData.json.\nClimate types: sunny, cloudy, rain, thunderstorm, snow, mist.",
"usage":"Usage: weather [weatherId] [climateType]\nWeather IDs can be found in WeatherExcelConfigData.json.\nClimate types: sunny, cloudy, rain, thunderstorm, snow, mist.",
"success":"Set weather ID to %s with climate type %s.",
"status":"Current weather ID is %s with climate type %s."
},
"help":{
"usage":"Użycie: ",
"aliases":"Aliasy: ",
"available_commands":"Dostępne komendy: "
},
"unlocktower":{
"success":"odblokować gotowe",
"description":"Odblokuj głęboką spiralę"
"usage":"weather [ID pogody] [typ klimatu]\n\tID pogody można znaleźć w pliku \"WeatherExcelConfigData.json\".\n\tMożliwe typy klimatu: sunny (słoneczny), cloudy (pochmurny), rain (deszcz), thunderstorm (burza), snow (śnieg), mist (mgła)",
"success":"ID pogody został ustawiony na %s, a typ klimatu na %s.",
"status":"Bieżące ID pogody to %s, a typ klimatu to %s.",
"description":"Zmień ID pogody i typ klimatu."
},
"ban":{
"command_usage":"Usage: ban <@playerId> [timestamp] [reason]",
"success":"Successful.",
"failure":"Failed, player not found.",
"invalid_time":"Unable to parse timestamp.",
"description":"Ban a player"
"usage":"ban @<ID gracza> [na ile czasu] [powód]",