mirror of
https://github.com/imayushsaini/Bombsquad-Ballistica-Modded-Server.git
synced 2025-11-14 17:46:03 +00:00
updated to 1.7.20
This commit is contained in:
parent
0dfe2de8e5
commit
dab1db4141
67 changed files with 5236 additions and 2272 deletions
83
dist/ba_data/data/langdata.json
vendored
83
dist/ba_data/data/langdata.json
vendored
|
|
@ -16,10 +16,11 @@
|
||||||
"Greek": "Ελληνικά",
|
"Greek": "Ελληνικά",
|
||||||
"Hindi": "हिंदी",
|
"Hindi": "हिंदी",
|
||||||
"Hungarian": "Magyar",
|
"Hungarian": "Magyar",
|
||||||
"Indonesian": "Indonesia",
|
"Indonesian": "Bahasa Indonesia",
|
||||||
"Italian": "Italiano",
|
"Italian": "Italiano",
|
||||||
"Japanese": "日本語",
|
"Japanese": "日本語",
|
||||||
"Korean": "한국어",
|
"Korean": "한국어",
|
||||||
|
"Malay": "Melayu",
|
||||||
"Persian": "فارسی",
|
"Persian": "فارسی",
|
||||||
"Polish": "Polski",
|
"Polish": "Polski",
|
||||||
"Portuguese": "Português",
|
"Portuguese": "Português",
|
||||||
|
|
@ -37,6 +38,7 @@
|
||||||
"Vietnamese": "Tiếng Việt "
|
"Vietnamese": "Tiếng Việt "
|
||||||
},
|
},
|
||||||
"translation_contributors": [
|
"translation_contributors": [
|
||||||
|
"!edMedic💊",
|
||||||
"!ParkuristTurist!",
|
"!ParkuristTurist!",
|
||||||
"\"9ÅℳЇℜρℜѺƬǀGΞЯ",
|
"\"9ÅℳЇℜρℜѺƬǀGΞЯ",
|
||||||
"/in/dev/",
|
"/in/dev/",
|
||||||
|
|
@ -96,7 +98,7 @@
|
||||||
"ariyan ahir",
|
"ariyan ahir",
|
||||||
"AHMAD",
|
"AHMAD",
|
||||||
"Aufan Ahmad",
|
"Aufan Ahmad",
|
||||||
"ahmed",
|
"Ahmed",
|
||||||
"ahmedzabara",
|
"ahmedzabara",
|
||||||
"Collin Ainge",
|
"Collin Ainge",
|
||||||
"Akash",
|
"Akash",
|
||||||
|
|
@ -114,6 +116,7 @@
|
||||||
"Anna Alanis",
|
"Anna Alanis",
|
||||||
"Manuel Alanis",
|
"Manuel Alanis",
|
||||||
"alanjijuoo7fudu@gmail.com",
|
"alanjijuoo7fudu@gmail.com",
|
||||||
|
"albertojesusvaldesdelrey@gmail.com",
|
||||||
"Alej0hio",
|
"Alej0hio",
|
||||||
"Pedro Alejandro",
|
"Pedro Alejandro",
|
||||||
"Gabrijel Aleksić",
|
"Gabrijel Aleksić",
|
||||||
|
|
@ -183,6 +186,7 @@
|
||||||
"Krishna D Angad",
|
"Krishna D Angad",
|
||||||
"vân anh",
|
"vân anh",
|
||||||
"Aniol",
|
"Aniol",
|
||||||
|
"Daniel Felipe Silva dos Anjos",
|
||||||
"Anmol",
|
"Anmol",
|
||||||
"anonymous",
|
"anonymous",
|
||||||
"Alok. R. Anoop",
|
"Alok. R. Anoop",
|
||||||
|
|
@ -193,10 +197,12 @@
|
||||||
"apis",
|
"apis",
|
||||||
"Sagar April",
|
"Sagar April",
|
||||||
"Fernando Araise",
|
"Fernando Araise",
|
||||||
"Arda (Frosty)",
|
"arda",
|
||||||
"Hellmann Arias",
|
"Hellmann Arias",
|
||||||
"Muhammad Arief",
|
"Muhammad Arief",
|
||||||
|
"Arimaru",
|
||||||
"Arin",
|
"Arin",
|
||||||
|
"arjanex",
|
||||||
"Arroz",
|
"Arroz",
|
||||||
"ARSHAD",
|
"ARSHAD",
|
||||||
"ArshiyDLn",
|
"ArshiyDLn",
|
||||||
|
|
@ -232,6 +238,7 @@
|
||||||
"Myth B.",
|
"Myth B.",
|
||||||
"B4likeBefore",
|
"B4likeBefore",
|
||||||
"Praveen Babu",
|
"Praveen Babu",
|
||||||
|
"Baechu",
|
||||||
"Balage8",
|
"Balage8",
|
||||||
"BalaguerM",
|
"BalaguerM",
|
||||||
"Peter Balind",
|
"Peter Balind",
|
||||||
|
|
@ -279,6 +286,7 @@
|
||||||
"BenVectorgames",
|
"BenVectorgames",
|
||||||
"benybrot96",
|
"benybrot96",
|
||||||
"berkay",
|
"berkay",
|
||||||
|
"Silvio Berlusconi",
|
||||||
"Bernardiny",
|
"Bernardiny",
|
||||||
"Anton Bang Berner",
|
"Anton Bang Berner",
|
||||||
"Felix Bernhard",
|
"Felix Bernhard",
|
||||||
|
|
@ -291,12 +299,15 @@
|
||||||
"Daniel Block",
|
"Daniel Block",
|
||||||
"BlueBlur",
|
"BlueBlur",
|
||||||
"bob bobber",
|
"bob bobber",
|
||||||
|
"BomBillo",
|
||||||
"The Bomboler 💣",
|
"The Bomboler 💣",
|
||||||
"bombsquad",
|
"bombsquad",
|
||||||
"Bombsquadzueira",
|
"Bombsquadzueira",
|
||||||
"Bomby",
|
"Bomby",
|
||||||
"Zeleni bomby",
|
"Zeleni bomby",
|
||||||
|
"Alex BONYOMA",
|
||||||
"Book",
|
"Book",
|
||||||
|
"Guilherme Borges",
|
||||||
"Lucas Borges",
|
"Lucas Borges",
|
||||||
"Gianfranco Del Borrello",
|
"Gianfranco Del Borrello",
|
||||||
"Abel Borso",
|
"Abel Borso",
|
||||||
|
|
@ -345,6 +356,7 @@
|
||||||
"Fabio Cannavacciuolo",
|
"Fabio Cannavacciuolo",
|
||||||
"CANOVER",
|
"CANOVER",
|
||||||
"Fedrigo Canpanjoło",
|
"Fedrigo Canpanjoło",
|
||||||
|
"Yan Carlos",
|
||||||
"CarlosE.",
|
"CarlosE.",
|
||||||
"mark Dave a carposo",
|
"mark Dave a carposo",
|
||||||
"Fabricio de Carvalho",
|
"Fabricio de Carvalho",
|
||||||
|
|
@ -360,6 +372,7 @@
|
||||||
"kalpesh chauhan",
|
"kalpesh chauhan",
|
||||||
"chausony",
|
"chausony",
|
||||||
"CheesySquad",
|
"CheesySquad",
|
||||||
|
"Chicken",
|
||||||
"ChocolateComrade",
|
"ChocolateComrade",
|
||||||
"choi",
|
"choi",
|
||||||
"Vadim Choi",
|
"Vadim Choi",
|
||||||
|
|
@ -396,6 +409,7 @@
|
||||||
"cukomus",
|
"cukomus",
|
||||||
"CYCL0YT",
|
"CYCL0YT",
|
||||||
"D",
|
"D",
|
||||||
|
"D-Mega",
|
||||||
"Dada",
|
"Dada",
|
||||||
"Daivaras",
|
"Daivaras",
|
||||||
"Dajo6596YT",
|
"Dajo6596YT",
|
||||||
|
|
@ -422,6 +436,7 @@
|
||||||
"Die or Dead",
|
"Die or Dead",
|
||||||
"Привет от детей DeadLine",
|
"Привет от детей DeadLine",
|
||||||
"deepjith",
|
"deepjith",
|
||||||
|
"dekarl",
|
||||||
"deliciouspudding43",
|
"deliciouspudding43",
|
||||||
"delshe",
|
"delshe",
|
||||||
"Denis",
|
"Denis",
|
||||||
|
|
@ -458,6 +473,7 @@
|
||||||
"Dragomir",
|
"Dragomir",
|
||||||
"Drellsan",
|
"Drellsan",
|
||||||
"DrGhast",
|
"DrGhast",
|
||||||
|
"Dron009",
|
||||||
"drov.drov",
|
"drov.drov",
|
||||||
"Davide DST",
|
"Davide DST",
|
||||||
"Bruno Duarte",
|
"Bruno Duarte",
|
||||||
|
|
@ -485,6 +501,7 @@
|
||||||
"Elsans320_YT",
|
"Elsans320_YT",
|
||||||
"Elskoser",
|
"Elskoser",
|
||||||
"ElVolKo",
|
"ElVolKo",
|
||||||
|
"ali emad",
|
||||||
"Ramy Emad",
|
"Ramy Emad",
|
||||||
"Emil",
|
"Emil",
|
||||||
"Kürti Emil",
|
"Kürti Emil",
|
||||||
|
|
@ -497,6 +514,7 @@
|
||||||
"EnglandFirst",
|
"EnglandFirst",
|
||||||
"Enrico",
|
"Enrico",
|
||||||
"enzo",
|
"enzo",
|
||||||
|
"Era",
|
||||||
"Erick",
|
"Erick",
|
||||||
"Erkam",
|
"Erkam",
|
||||||
"Jonas Ernst",
|
"Jonas Ernst",
|
||||||
|
|
@ -535,6 +553,7 @@
|
||||||
"Federico",
|
"Federico",
|
||||||
"Fedrigo",
|
"Fedrigo",
|
||||||
"Marco Fabián Feijoó",
|
"Marco Fabián Feijoó",
|
||||||
|
"Fenyx",
|
||||||
"Fernando",
|
"Fernando",
|
||||||
"David Fernández",
|
"David Fernández",
|
||||||
"FerranC",
|
"FerranC",
|
||||||
|
|
@ -584,6 +603,7 @@
|
||||||
"krish gator",
|
"krish gator",
|
||||||
"gene.mTs",
|
"gene.mTs",
|
||||||
"GeoMatHeo",
|
"GeoMatHeo",
|
||||||
|
"Gerry",
|
||||||
"GG (9.2)",
|
"GG (9.2)",
|
||||||
"Onkar Ghagarum",
|
"Onkar Ghagarum",
|
||||||
"GHAIS",
|
"GHAIS",
|
||||||
|
|
@ -600,10 +620,13 @@
|
||||||
"Giovanny",
|
"Giovanny",
|
||||||
"Dc superhero girl",
|
"Dc superhero girl",
|
||||||
"Givij",
|
"Givij",
|
||||||
|
"Gleb",
|
||||||
"Glu10free",
|
"Glu10free",
|
||||||
"Mr. Glu10free",
|
"Mr. Glu10free",
|
||||||
"Jhon Zion N. delos reyes gmail",
|
"Jhon Zion N. delos reyes gmail",
|
||||||
|
"gman_4815",
|
||||||
"God丶烛龙",
|
"God丶烛龙",
|
||||||
|
"Colin Goeieman",
|
||||||
"박준서(PJS GoodNews)",
|
"박준서(PJS GoodNews)",
|
||||||
"gowthamvelkarthik.k",
|
"gowthamvelkarthik.k",
|
||||||
"Nicola Grassi",
|
"Nicola Grassi",
|
||||||
|
|
@ -622,6 +645,7 @@
|
||||||
"Tymoteusz Górski",
|
"Tymoteusz Górski",
|
||||||
"Thomas Günther",
|
"Thomas Günther",
|
||||||
"H.J.N",
|
"H.J.N",
|
||||||
|
"Haasaani",
|
||||||
"Hack",
|
"Hack",
|
||||||
"HackPlayer697",
|
"HackPlayer697",
|
||||||
"hadi",
|
"hadi",
|
||||||
|
|
@ -708,6 +732,9 @@
|
||||||
"Darkness indo",
|
"Darkness indo",
|
||||||
"Indohuman",
|
"Indohuman",
|
||||||
"IniSaya6666",
|
"IniSaya6666",
|
||||||
|
"inkMedic",
|
||||||
|
"inkMedic💊",
|
||||||
|
"InvisibleDude",
|
||||||
"Anestis Ioakimidis",
|
"Anestis Ioakimidis",
|
||||||
"Dragomir Ioan",
|
"Dragomir Ioan",
|
||||||
"Isa",
|
"Isa",
|
||||||
|
|
@ -717,6 +744,7 @@
|
||||||
"Itamar",
|
"Itamar",
|
||||||
"ivan",
|
"ivan",
|
||||||
"iViietZ",
|
"iViietZ",
|
||||||
|
"MOHD IZWAN",
|
||||||
"JaaJ",
|
"JaaJ",
|
||||||
"Al jabbar",
|
"Al jabbar",
|
||||||
"Jacek",
|
"Jacek",
|
||||||
|
|
@ -728,6 +756,7 @@
|
||||||
"Martin Jansson",
|
"Martin Jansson",
|
||||||
"JasimGamer",
|
"JasimGamer",
|
||||||
"Jason",
|
"Jason",
|
||||||
|
"Javvaed",
|
||||||
"Jbo",
|
"Jbo",
|
||||||
"JCIBravo",
|
"JCIBravo",
|
||||||
"Jd",
|
"Jd",
|
||||||
|
|
@ -775,6 +804,7 @@
|
||||||
"Oliver Jõgar",
|
"Oliver Jõgar",
|
||||||
"Nackter Jörg",
|
"Nackter Jörg",
|
||||||
"Calvin Jünemann",
|
"Calvin Jünemann",
|
||||||
|
"Luis K",
|
||||||
"Sayooj k",
|
"Sayooj k",
|
||||||
"K'veen",
|
"K'veen",
|
||||||
"Kacper",
|
"Kacper",
|
||||||
|
|
@ -787,6 +817,7 @@
|
||||||
"Kamal",
|
"Kamal",
|
||||||
"Aiman Aryan Kamarajan",
|
"Aiman Aryan Kamarajan",
|
||||||
"Kamil (Limak09)",
|
"Kamil (Limak09)",
|
||||||
|
"Kamilkampfwagen",
|
||||||
"Kaneki",
|
"Kaneki",
|
||||||
"Smurfit Kappa",
|
"Smurfit Kappa",
|
||||||
"Mustafa Karabacak",
|
"Mustafa Karabacak",
|
||||||
|
|
@ -801,10 +832,12 @@
|
||||||
"KD",
|
"KD",
|
||||||
"Kejuxs",
|
"Kejuxs",
|
||||||
"Mani kelidari",
|
"Mani kelidari",
|
||||||
|
"Kelly",
|
||||||
"Kelmine",
|
"Kelmine",
|
||||||
"Kenjie",
|
"Kenjie",
|
||||||
"Kerfix",
|
"Kerfix",
|
||||||
"Kerim",
|
"Kerim",
|
||||||
|
"Kevinga2533a",
|
||||||
"Khaild1717",
|
"Khaild1717",
|
||||||
"muh khairul",
|
"muh khairul",
|
||||||
"Khalid",
|
"Khalid",
|
||||||
|
|
@ -822,6 +855,7 @@
|
||||||
"kira",
|
"kira",
|
||||||
"kirill",
|
"kirill",
|
||||||
"KirillMasich",
|
"KirillMasich",
|
||||||
|
"Kittycat41",
|
||||||
"Andrew Kmitto",
|
"Andrew Kmitto",
|
||||||
"Philipp Koch",
|
"Philipp Koch",
|
||||||
"Kolmat",
|
"Kolmat",
|
||||||
|
|
@ -921,7 +955,9 @@
|
||||||
"Lurã",
|
"Lurã",
|
||||||
"Luthy",
|
"Luthy",
|
||||||
"Geogre Lyu",
|
"Geogre Lyu",
|
||||||
|
"Be aware that m",
|
||||||
"M.R.T",
|
"M.R.T",
|
||||||
|
"M5TF4",
|
||||||
"Mac 143338",
|
"Mac 143338",
|
||||||
"MaceracıMS",
|
"MaceracıMS",
|
||||||
"Samuel Maciel",
|
"Samuel Maciel",
|
||||||
|
|
@ -948,6 +984,7 @@
|
||||||
"Marchella",
|
"Marchella",
|
||||||
"Marcin",
|
"Marcin",
|
||||||
"Marco",
|
"Marco",
|
||||||
|
"Marcolino",
|
||||||
"Filip Marek",
|
"Filip Marek",
|
||||||
"Marcin Marek",
|
"Marcin Marek",
|
||||||
"Mariel",
|
"Mariel",
|
||||||
|
|
@ -963,7 +1000,9 @@
|
||||||
"Taobao Mascot",
|
"Taobao Mascot",
|
||||||
"Masood",
|
"Masood",
|
||||||
"MasterRyan",
|
"MasterRyan",
|
||||||
|
"Mateusz",
|
||||||
"Mathias",
|
"Mathias",
|
||||||
|
"Mathieu",
|
||||||
"matias",
|
"matias",
|
||||||
"matj1",
|
"matj1",
|
||||||
"Eduardo de Matos",
|
"Eduardo de Matos",
|
||||||
|
|
@ -979,8 +1018,10 @@
|
||||||
"German Medin",
|
"German Medin",
|
||||||
"Martin Medina",
|
"Martin Medina",
|
||||||
"Mehret Mehanzel",
|
"Mehret Mehanzel",
|
||||||
|
"Mehmet",
|
||||||
"Mehrdad",
|
"Mehrdad",
|
||||||
"Kevin Mejía",
|
"Kevin Mejía",
|
||||||
|
"Mell",
|
||||||
"MereCrack",
|
"MereCrack",
|
||||||
"Mert",
|
"Mert",
|
||||||
"Meryu07",
|
"Meryu07",
|
||||||
|
|
@ -1001,6 +1042,7 @@
|
||||||
"MinhAn19203",
|
"MinhAn19203",
|
||||||
"Azfar Ahmed Mirza",
|
"Azfar Ahmed Mirza",
|
||||||
"Deepak Mishra",
|
"Deepak Mishra",
|
||||||
|
"Mistetas3002",
|
||||||
"Skramh Miugrik",
|
"Skramh Miugrik",
|
||||||
"Mizzzzon",
|
"Mizzzzon",
|
||||||
"Mk",
|
"Mk",
|
||||||
|
|
@ -1035,15 +1077,19 @@
|
||||||
"MrNexis",
|
"MrNexis",
|
||||||
"MrS0meone",
|
"MrS0meone",
|
||||||
"Ivan Ms",
|
"Ivan Ms",
|
||||||
|
"MSampic",
|
||||||
"Msta",
|
"Msta",
|
||||||
"MT",
|
"MT",
|
||||||
|
"MT2087",
|
||||||
"Muhammed Muhsin",
|
"Muhammed Muhsin",
|
||||||
"MujtabaFR",
|
"MujtabaFR",
|
||||||
"Muni",
|
"Muni",
|
||||||
|
"mustardb",
|
||||||
"Hisham Musthafa",
|
"Hisham Musthafa",
|
||||||
"Mohammed Musthafa",
|
"Mohammed Musthafa",
|
||||||
"MUZAMMIL",
|
"MUZAMMIL",
|
||||||
"Mwss",
|
"Mwss",
|
||||||
|
"MYSENIOR",
|
||||||
"mythbrk00@gmail.com",
|
"mythbrk00@gmail.com",
|
||||||
"Sajti Márk",
|
"Sajti Márk",
|
||||||
"Samuel Mörling",
|
"Samuel Mörling",
|
||||||
|
|
@ -1055,6 +1101,7 @@
|
||||||
"Natasja",
|
"Natasja",
|
||||||
"Nathan",
|
"Nathan",
|
||||||
"naveentamizhan123456",
|
"naveentamizhan123456",
|
||||||
|
"Navid (Nasa)",
|
||||||
"Nayan",
|
"Nayan",
|
||||||
"Nazar",
|
"Nazar",
|
||||||
"Nazar_1232",
|
"Nazar_1232",
|
||||||
|
|
@ -1065,7 +1112,9 @@
|
||||||
"Neel",
|
"Neel",
|
||||||
"Nel",
|
"Nel",
|
||||||
"Nemeil",
|
"Nemeil",
|
||||||
|
"Era (Spazton neo)",
|
||||||
"Mattia Nepote",
|
"Mattia Nepote",
|
||||||
|
"The nerd",
|
||||||
"Gabriel Del Nero",
|
"Gabriel Del Nero",
|
||||||
"nevergpdia",
|
"nevergpdia",
|
||||||
"Andrew Nevero",
|
"Andrew Nevero",
|
||||||
|
|
@ -1108,6 +1157,7 @@
|
||||||
"Bastián Olea",
|
"Bastián Olea",
|
||||||
"Nikita Oleshko",
|
"Nikita Oleshko",
|
||||||
"Omar",
|
"Omar",
|
||||||
|
"OmarBv",
|
||||||
"On3GaMs",
|
"On3GaMs",
|
||||||
"No One",
|
"No One",
|
||||||
"Adam Oros",
|
"Adam Oros",
|
||||||
|
|
@ -1194,6 +1244,7 @@
|
||||||
"Pulidomedia.com",
|
"Pulidomedia.com",
|
||||||
"haris purnama",
|
"haris purnama",
|
||||||
"GABRIEL PUTRICK",
|
"GABRIEL PUTRICK",
|
||||||
|
"Bodnár Péter",
|
||||||
"Gangler Quentin",
|
"Gangler Quentin",
|
||||||
"Qwsa",
|
"Qwsa",
|
||||||
"QŴE",
|
"QŴE",
|
||||||
|
|
@ -1201,7 +1252,9 @@
|
||||||
"efvdtrrgvvfygttty5 5 r",
|
"efvdtrrgvvfygttty5 5 r",
|
||||||
"Felo Raafat",
|
"Felo Raafat",
|
||||||
"Tim Rabatr",
|
"Tim Rabatr",
|
||||||
|
"Radfrom",
|
||||||
"RadicalGamer",
|
"RadicalGamer",
|
||||||
|
"Radicool",
|
||||||
"RafieMY",
|
"RafieMY",
|
||||||
"raghul",
|
"raghul",
|
||||||
"khaled rahma",
|
"khaled rahma",
|
||||||
|
|
@ -1228,8 +1281,10 @@
|
||||||
"Razil",
|
"Razil",
|
||||||
"Jaiden Razo",
|
"Jaiden Razo",
|
||||||
"RCSV159",
|
"RCSV159",
|
||||||
|
"RCTwerk",
|
||||||
"Re",
|
"Re",
|
||||||
"realSamy",
|
"realSamy",
|
||||||
|
"RECRUTA",
|
||||||
"REDEJCR",
|
"REDEJCR",
|
||||||
"redyan",
|
"redyan",
|
||||||
"De'Viren Reed",
|
"De'Viren Reed",
|
||||||
|
|
@ -1248,6 +1303,7 @@
|
||||||
"rian",
|
"rian",
|
||||||
"Bruno Ricardo",
|
"Bruno Ricardo",
|
||||||
"Riccardo",
|
"Riccardo",
|
||||||
|
"Richard Lévai (aka ricinoob)",
|
||||||
"Rico",
|
"Rico",
|
||||||
"Ridzuan",
|
"Ridzuan",
|
||||||
"Samuel Rieger",
|
"Samuel Rieger",
|
||||||
|
|
@ -1334,6 +1390,7 @@
|
||||||
"Leonardo Henrique da Silva",
|
"Leonardo Henrique da Silva",
|
||||||
"Sebastian Silva",
|
"Sebastian Silva",
|
||||||
"Simotoring",
|
"Simotoring",
|
||||||
|
"Pawan Singh sisodiya",
|
||||||
"Skick",
|
"Skick",
|
||||||
"sks",
|
"sks",
|
||||||
"Max Sky",
|
"Max Sky",
|
||||||
|
|
@ -1344,6 +1401,7 @@
|
||||||
"smertfhg",
|
"smertfhg",
|
||||||
"Nico Smit",
|
"Nico Smit",
|
||||||
"Snack",
|
"Snack",
|
||||||
|
"Snobbish",
|
||||||
"Mahteus Soares",
|
"Mahteus Soares",
|
||||||
"Matheus Soares",
|
"Matheus Soares",
|
||||||
"sobhan",
|
"sobhan",
|
||||||
|
|
@ -1360,6 +1418,7 @@
|
||||||
"Spielfreake (Garke)",
|
"Spielfreake (Garke)",
|
||||||
"Spielfream",
|
"Spielfream",
|
||||||
"Spy",
|
"Spy",
|
||||||
|
"SqdDoom",
|
||||||
"sss",
|
"sss",
|
||||||
"ST",
|
"ST",
|
||||||
"Danny Stalman",
|
"Danny Stalman",
|
||||||
|
|
@ -1367,6 +1426,7 @@
|
||||||
"Bartosz Staniszewski",
|
"Bartosz Staniszewski",
|
||||||
"Stare",
|
"Stare",
|
||||||
"StarFighter",
|
"StarFighter",
|
||||||
|
"Rz Stazzy",
|
||||||
"Stealives",
|
"Stealives",
|
||||||
"Steffo",
|
"Steffo",
|
||||||
"stelios",
|
"stelios",
|
||||||
|
|
@ -1415,6 +1475,7 @@
|
||||||
"Nemanja Tekić",
|
"Nemanja Tekić",
|
||||||
"Marcel Teleznob",
|
"Marcel Teleznob",
|
||||||
"TempVolcano3200",
|
"TempVolcano3200",
|
||||||
|
"TerfulFellowship47",
|
||||||
"Yan Teryokhin",
|
"Yan Teryokhin",
|
||||||
"TestGame1",
|
"TestGame1",
|
||||||
"TestGame1👽🔥",
|
"TestGame1👽🔥",
|
||||||
|
|
@ -1441,12 +1502,14 @@
|
||||||
"Tingis2",
|
"Tingis2",
|
||||||
"Thura Tint",
|
"Thura Tint",
|
||||||
"Nishant Tiwari",
|
"Nishant Tiwari",
|
||||||
|
"tjkffndeupwfbkh",
|
||||||
"Toloche",
|
"Toloche",
|
||||||
"Tom",
|
"Tom",
|
||||||
"Juan Pablo Montoya Tomalá",
|
"Juan Pablo Montoya Tomalá",
|
||||||
"TomasNoobCz",
|
"TomasNoobCz",
|
||||||
"tomo",
|
"tomo",
|
||||||
"tongtong",
|
"tongtong",
|
||||||
|
"Top 999",
|
||||||
"Tory",
|
"Tory",
|
||||||
"TozeLeal",
|
"TozeLeal",
|
||||||
"Trung Hieu Le Tran",
|
"Trung Hieu Le Tran",
|
||||||
|
|
@ -1467,6 +1530,7 @@
|
||||||
"Unknown",
|
"Unknown",
|
||||||
"Uros",
|
"Uros",
|
||||||
"clarins usap",
|
"clarins usap",
|
||||||
|
"utyrrwq",
|
||||||
"Uzinerz",
|
"Uzinerz",
|
||||||
"Shohrux V",
|
"Shohrux V",
|
||||||
"Vader",
|
"Vader",
|
||||||
|
|
@ -1488,6 +1552,7 @@
|
||||||
"Robin Vinith",
|
"Robin Vinith",
|
||||||
"vinoth",
|
"vinoth",
|
||||||
"Vishal",
|
"Vishal",
|
||||||
|
"VoidNumberZero",
|
||||||
"Voxel",
|
"Voxel",
|
||||||
"Voxel25",
|
"Voxel25",
|
||||||
"VTOR",
|
"VTOR",
|
||||||
|
|
@ -1536,9 +1601,11 @@
|
||||||
"Yamir",
|
"Yamir",
|
||||||
"YannSonic",
|
"YannSonic",
|
||||||
"Yantohrmnt401",
|
"Yantohrmnt401",
|
||||||
|
"Halil Yarkin",
|
||||||
"amr yasser",
|
"amr yasser",
|
||||||
"YellowTractor",
|
"YellowTractor",
|
||||||
"Yasin YILMAZ",
|
"Yasin YILMAZ",
|
||||||
|
"Ymgfr",
|
||||||
"yoksoudraft",
|
"yoksoudraft",
|
||||||
"Kenneth Yoneyama",
|
"Kenneth Yoneyama",
|
||||||
"yossef",
|
"yossef",
|
||||||
|
|
@ -1607,6 +1674,7 @@
|
||||||
"Юстин Иглин",
|
"Юстин Иглин",
|
||||||
"Игор",
|
"Игор",
|
||||||
"Кирилл",
|
"Кирилл",
|
||||||
|
"клаудкубес",
|
||||||
"Климов",
|
"Климов",
|
||||||
"Кирилл Климов",
|
"Кирилл Климов",
|
||||||
"Андрей Коваленко",
|
"Андрей Коваленко",
|
||||||
|
|
@ -1621,12 +1689,15 @@
|
||||||
"Арсений Мостовщиков",
|
"Арсений Мостовщиков",
|
||||||
"Принцип",
|
"Принцип",
|
||||||
"Пук-пук пук-пук",
|
"Пук-пук пук-пук",
|
||||||
|
"Пупсєль",
|
||||||
|
"Піптик💖",
|
||||||
"Михаил Радионов",
|
"Михаил Радионов",
|
||||||
"Даниил Рахов \"DaNiiRuSPlay\"",
|
"Даниил Рахов \"DaNiiRuSPlay\"",
|
||||||
"Рома",
|
"Рома",
|
||||||
"Ромашка :3",
|
"Ромашка :3",
|
||||||
"Кирилл Рябцев",
|
"Кирилл Рябцев",
|
||||||
"ZEPT\"Александр Фартунов\"",
|
"ZEPT\"Александр Фартунов\"",
|
||||||
|
"Эмир",
|
||||||
"Өмүрзаков Эрсултан",
|
"Өмүрзаков Эрсултан",
|
||||||
"Ярослав \"Noiseaholic\"",
|
"Ярослав \"Noiseaholic\"",
|
||||||
"қуатжан",
|
"қуатжан",
|
||||||
|
|
@ -1654,6 +1725,7 @@
|
||||||
"فاطمه عباس زاده ۸۴",
|
"فاطمه عباس زاده ۸۴",
|
||||||
"فاطمه عباس زاده۸۴",
|
"فاطمه عباس زاده۸۴",
|
||||||
"ستسپ",
|
"ستسپ",
|
||||||
|
"سلطان سروش",
|
||||||
"محمد وائل سلطان",
|
"محمد وائل سلطان",
|
||||||
"ص",
|
"ص",
|
||||||
"عبداللہ صائم",
|
"عبداللہ صائم",
|
||||||
|
|
@ -1685,6 +1757,7 @@
|
||||||
"วีรภัทร",
|
"วีรภัทร",
|
||||||
"แมวผงาด(JuniorMeowMeow)",
|
"แมวผงาด(JuniorMeowMeow)",
|
||||||
"๖̶ζ͜͡zephyro",
|
"๖̶ζ͜͡zephyro",
|
||||||
|
"ᗪ|乃|丂Я尺卂",
|
||||||
"✰ℭØØҜĬ£$✰",
|
"✰ℭØØҜĬ£$✰",
|
||||||
"JPnatu なつ",
|
"JPnatu なつ",
|
||||||
"クリーバー",
|
"クリーバー",
|
||||||
|
|
@ -1707,6 +1780,7 @@
|
||||||
"志夏君deron",
|
"志夏君deron",
|
||||||
"枫夜",
|
"枫夜",
|
||||||
"毛毛毛大毛",
|
"毛毛毛大毛",
|
||||||
|
"炸弹朋友和Medic药",
|
||||||
"熊老三",
|
"熊老三",
|
||||||
"盐焗汽水er",
|
"盐焗汽水er",
|
||||||
"神仙",
|
"神仙",
|
||||||
|
|
@ -1733,6 +1807,7 @@
|
||||||
"전감호",
|
"전감호",
|
||||||
"BombsquadKorea 네이버 카페",
|
"BombsquadKorea 네이버 카페",
|
||||||
"Zona-BombSquad",
|
"Zona-BombSquad",
|
||||||
"CrazySquad"
|
"CrazySquad",
|
||||||
|
"Stazzy"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
dist/ba_data/data/languages/arabic.json
vendored
12
dist/ba_data/data/languages/arabic.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "يمكنك تغييره مرة واحدة في الموسم",
|
"changeOncePerSeason": "يمكنك تغييره مرة واحدة في الموسم",
|
||||||
"changeOncePerSeasonError": "يجب عليك الانتظار حتى الموسم القادم لتغيير هذا مجددا (${NUM} أيام )",
|
"changeOncePerSeasonError": "يجب عليك الانتظار حتى الموسم القادم لتغيير هذا مجددا (${NUM} أيام )",
|
||||||
"customName": "الاسم المخصص",
|
"customName": "الاسم المخصص",
|
||||||
|
"googlePlayGamesAccountSwitchText": "اذا اردت استخدام حساب غوغل بلاي اخر،\nقم بإستعمال تطبيق غوغل بلاي العاب لتحويله.",
|
||||||
"linkAccountsEnterCodeText": "ادخل الرمز",
|
"linkAccountsEnterCodeText": "ادخل الرمز",
|
||||||
"linkAccountsGenerateCodeText": "انشئ رمز",
|
"linkAccountsGenerateCodeText": "انشئ رمز",
|
||||||
"linkAccountsInfoText": "(مشاركة تقدمك مع الاجهزة الاخرى)",
|
"linkAccountsInfoText": "(مشاركة تقدمك مع الاجهزة الاخرى)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "لربط حسابين, انتج كود على احد الحسابين \nو ادخل هذا الكود على الاخر.\nالتقدم و المخزون سيشتركا.\nيمكنك ربط حتى ${COUNT} حسابات.\n\nكن حذراً; هذا لا يمكن استرجاعه",
|
"linkAccountsInstructionsText": "لربط حسابين, انتج كود على احد الحسابين \nو ادخل هذا الكود على الاخر.\nالتقدم و المخزون سيشتركا.\nيمكنك ربط حتى ${COUNT} حسابات.\n\nكن حذراً; هذا لا يمكن استرجاعه",
|
||||||
"linkAccountsText": "ربط حساب",
|
"linkAccountsText": "ربط حساب",
|
||||||
"linkedAccountsText": ": حساباتي المرتبطة",
|
"linkedAccountsText": ": حساباتي المرتبطة",
|
||||||
|
"manageAccountText": "إدارة الحساب",
|
||||||
"nameChangeConfirm": "هل تريد تغيير اسم حسابك إلى ${NAME}؟",
|
"nameChangeConfirm": "هل تريد تغيير اسم حسابك إلى ${NAME}؟",
|
||||||
"resetProgressConfirmNoAchievementsText": "سوف يحذف هذا الخيار تقدمك في الحملات التعاونية ولن يحذف تذاكرك\nلا يمكن إلغاء هذا الخيار\nهل أنت متأكد ؟",
|
"resetProgressConfirmNoAchievementsText": "سوف يحذف هذا الخيار تقدمك في الحملات التعاونية ولن يحذف تذاكرك\nلا يمكن إلغاء هذا الخيار\nهل أنت متأكد ؟",
|
||||||
"resetProgressConfirmText": ":عند موافقتك على هذا الاخيار سوف يتم\n(حذف انجازاتك وتقدمك الحالي(لكن لن تخسر تَذَاكِرك\nإذا وافقت على هذا القرار لا يمكنك تراجع عنه\nهل أنت متأكد؟",
|
"resetProgressConfirmText": ":عند موافقتك على هذا الاخيار سوف يتم\n(حذف انجازاتك وتقدمك الحالي(لكن لن تخسر تَذَاكِرك\nإذا وافقت على هذا القرار لا يمكنك تراجع عنه\nهل أنت متأكد؟",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "الحساب",
|
"titleText": "الحساب",
|
||||||
"unlinkAccountsInstructionsText": "حدد حسابا لإلغاء ربطه",
|
"unlinkAccountsInstructionsText": "حدد حسابا لإلغاء ربطه",
|
||||||
"unlinkAccountsText": "إلغاء ربط الحسابات",
|
"unlinkAccountsText": "إلغاء ربط الحسابات",
|
||||||
|
"unlinkLegacyV1AccountsText": "إلغاء ربط الحسابات القديمة (V1)",
|
||||||
"v2LinkInstructionsText": "استخدم هذا الارتباط لإنشاء حساب أو تسجيل الدخول.",
|
"v2LinkInstructionsText": "استخدم هذا الارتباط لإنشاء حساب أو تسجيل الدخول.",
|
||||||
"viaAccount": "(${NAME} عبر الحساب)",
|
"viaAccount": "(${NAME} عبر الحساب)",
|
||||||
"youAreSignedInAsText": ": قمت بتسجيل الدخول كـ"
|
"youAreSignedInAsText": ": قمت بتسجيل الدخول كـ"
|
||||||
|
|
@ -546,7 +549,9 @@
|
||||||
"deleteText": "حذف",
|
"deleteText": "حذف",
|
||||||
"demoText": "عرض",
|
"demoText": "عرض",
|
||||||
"denyText": "رفض",
|
"denyText": "رفض",
|
||||||
|
"deprecatedText": "إهمال",
|
||||||
"desktopResText": "جودة سطح المكتب",
|
"desktopResText": "جودة سطح المكتب",
|
||||||
|
"deviceAccountUpgradeText": "تحذير:\nانت مسجل الدهول بحساب الجهاز (${NAME}).\nحسابات الجهاز (Device) سيتم حذفها في المستقبل.\nقم بالتطوير الى حساب V2 اذا اردت ان تقوم بحفظ تقدمك.",
|
||||||
"difficultyEasyText": "سهل",
|
"difficultyEasyText": "سهل",
|
||||||
"difficultyHardOnlyText": "الوضع الصعب فقط",
|
"difficultyHardOnlyText": "الوضع الصعب فقط",
|
||||||
"difficultyHardText": "صعب",
|
"difficultyHardText": "صعب",
|
||||||
|
|
@ -804,6 +809,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "عذرًا ، خدمة جوجل متعددة اللاعبين لم تعد متاحة.\n أنا أعمل على بديل بأسرع وقت ممكن.\n حتى ذلك الحين ، يرجى تجربة طريقة اتصال أخرى.\n -إريك",
|
"googleMultiplayerDiscontinuedText": "عذرًا ، خدمة جوجل متعددة اللاعبين لم تعد متاحة.\n أنا أعمل على بديل بأسرع وقت ممكن.\n حتى ذلك الحين ، يرجى تجربة طريقة اتصال أخرى.\n -إريك",
|
||||||
"googlePlayPurchasesNotAvailableText": "عمليات شراء جوجل بلاي غير متوفرة.\nقد تحتاج لتحديث تطبيق المتجر.",
|
"googlePlayPurchasesNotAvailableText": "عمليات شراء جوجل بلاي غير متوفرة.\nقد تحتاج لتحديث تطبيق المتجر.",
|
||||||
|
"googlePlayServicesNotAvailableText": "غوغل بلاي العاب غير متوفر.\nبعض المزايا لن تكون متوفرة.",
|
||||||
"googlePlayText": "جوجل بلاي",
|
"googlePlayText": "جوجل بلاي",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "دائما",
|
"alwaysText": "دائما",
|
||||||
|
|
@ -1000,6 +1006,7 @@
|
||||||
"creditsText": "معلومات",
|
"creditsText": "معلومات",
|
||||||
"demoMenuText": "عرض القائمة",
|
"demoMenuText": "عرض القائمة",
|
||||||
"endGameText": "نهاية لعبة",
|
"endGameText": "نهاية لعبة",
|
||||||
|
"endTestText": "الاختبار النهائي",
|
||||||
"exitGameText": "الخروج من اللعبة",
|
"exitGameText": "الخروج من اللعبة",
|
||||||
"exitToMenuText": "هل تريد الخروج من القائمة؟",
|
"exitToMenuText": "هل تريد الخروج من القائمة؟",
|
||||||
"howToPlayText": "كيف ألعب",
|
"howToPlayText": "كيف ألعب",
|
||||||
|
|
@ -1019,6 +1026,7 @@
|
||||||
"maxConnectionsText": "اتصالات مكتمل",
|
"maxConnectionsText": "اتصالات مكتمل",
|
||||||
"maxPartySizeText": "أقصى حجم للحفلة",
|
"maxPartySizeText": "أقصى حجم للحفلة",
|
||||||
"maxPlayersText": "عدد لاعبين مكتمل",
|
"maxPlayersText": "عدد لاعبين مكتمل",
|
||||||
|
"merchText": "ميرش!",
|
||||||
"modeArcadeText": "وضع اللهو",
|
"modeArcadeText": "وضع اللهو",
|
||||||
"modeClassicText": "الوضع التقليدي",
|
"modeClassicText": "الوضع التقليدي",
|
||||||
"modeDemoText": "الوضع التجريبي",
|
"modeDemoText": "الوضع التجريبي",
|
||||||
|
|
@ -1058,6 +1066,7 @@
|
||||||
"notSignedInErrorText": "يجب ان تسجل الدخول لتفعل هذا",
|
"notSignedInErrorText": "يجب ان تسجل الدخول لتفعل هذا",
|
||||||
"notSignedInGooglePlayErrorText": "عليك تسجيل الدخول لجوجل بلاي لتفعل هذا",
|
"notSignedInGooglePlayErrorText": "عليك تسجيل الدخول لجوجل بلاي لتفعل هذا",
|
||||||
"notSignedInText": "لم تقم بتسجيل الدخول",
|
"notSignedInText": "لم تقم بتسجيل الدخول",
|
||||||
|
"notUsingAccountText": "ملاحظة: حساب ${SERVICE} متجاهل.\nقم بالتوجه الى 'الحساب -> تسجيل الدخول بواسطة ${SERVICE}' اذا اردت استعماله.",
|
||||||
"nothingIsSelectedErrorText": "لا شئ تم اختياره!",
|
"nothingIsSelectedErrorText": "لا شئ تم اختياره!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "إيقاف",
|
"offText": "إيقاف",
|
||||||
|
|
@ -1521,6 +1530,7 @@
|
||||||
"Italian": "الإيطالي",
|
"Italian": "الإيطالي",
|
||||||
"Japanese": "اليابانية",
|
"Japanese": "اليابانية",
|
||||||
"Korean": "الكورية",
|
"Korean": "الكورية",
|
||||||
|
"Malay": "لغة الملايو",
|
||||||
"Persian": "اللغة الفارسية",
|
"Persian": "اللغة الفارسية",
|
||||||
"Polish": "البولندي",
|
"Polish": "البولندي",
|
||||||
"Portuguese": "البرتغالية",
|
"Portuguese": "البرتغالية",
|
||||||
|
|
@ -1802,6 +1812,7 @@
|
||||||
"useDefaultText": "استخدام الإفتراضي",
|
"useDefaultText": "استخدام الإفتراضي",
|
||||||
"usesExternalControllerText": "هذه اللعبة تستخدم يد تحكم خارجية للإدخال",
|
"usesExternalControllerText": "هذه اللعبة تستخدم يد تحكم خارجية للإدخال",
|
||||||
"usingItunesText": "...استخدام تطبيق الموسيقى للموسيقى التصويرية",
|
"usingItunesText": "...استخدام تطبيق الموسيقى للموسيقى التصويرية",
|
||||||
|
"v2AccountLinkingInfoText": "اذا اردت ربط حسابات V2، قم بالتوجه الى 'ادارة الحساب'.",
|
||||||
"validatingTestBuildText": "التحقق من صحة البناء",
|
"validatingTestBuildText": "التحقق من صحة البناء",
|
||||||
"victoryText": "!النصر",
|
"victoryText": "!النصر",
|
||||||
"voteDelayText": "ثانية ${NUMBER} لا يمكنك التصويت ثانية حتى",
|
"voteDelayText": "ثانية ${NUMBER} لا يمكنك التصويت ثانية حتى",
|
||||||
|
|
@ -1834,6 +1845,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "موجة",
|
"waveText": "موجة",
|
||||||
"wellSureText": "!حسنا طبعا",
|
"wellSureText": "!حسنا طبعا",
|
||||||
|
"whatIsThisText": "ما هذا؟",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwinRemoteحقوق التأليف والنشر ل"
|
"titleText": "DarwinRemoteحقوق التأليف والنشر ل"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
63
dist/ba_data/data/languages/chinese.json
vendored
63
dist/ba_data/data/languages/chinese.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "在每个赛季中你只能更改它一次。",
|
"changeOncePerSeason": "在每个赛季中你只能更改它一次。",
|
||||||
"changeOncePerSeasonError": "你需要等到下个赛季才能对它再次更改 (还有${NUM}天)",
|
"changeOncePerSeasonError": "你需要等到下个赛季才能对它再次更改 (还有${NUM}天)",
|
||||||
"customName": "玩家姓名",
|
"customName": "玩家姓名",
|
||||||
|
"googlePlayGamesAccountSwitchText": "如果你想登录两个不同的谷歌账户,\n请使用Play游戏APP来操作~",
|
||||||
"linkAccountsEnterCodeText": "输入代码",
|
"linkAccountsEnterCodeText": "输入代码",
|
||||||
"linkAccountsGenerateCodeText": "生成代码",
|
"linkAccountsGenerateCodeText": "生成代码",
|
||||||
"linkAccountsInfoText": "(在不同的平台上同步游戏进程)",
|
"linkAccountsInfoText": "(在不同的平台上同步游戏进程)",
|
||||||
|
|
@ -42,6 +43,7 @@
|
||||||
"titleText": "账号",
|
"titleText": "账号",
|
||||||
"unlinkAccountsInstructionsText": "选择要取消关联的帐户",
|
"unlinkAccountsInstructionsText": "选择要取消关联的帐户",
|
||||||
"unlinkAccountsText": "取消连结帐户",
|
"unlinkAccountsText": "取消连结帐户",
|
||||||
|
"unlinkLegacyV1AccountsText": "取消连接旧版(V1)账户",
|
||||||
"v2LinkInstructionsText": "扫码或使用链接来登录或注册新账户",
|
"v2LinkInstructionsText": "扫码或使用链接来登录或注册新账户",
|
||||||
"viaAccount": "(不可用名称 ${NAME})",
|
"viaAccount": "(不可用名称 ${NAME})",
|
||||||
"youAreLoggedInAsText": "您已登录为",
|
"youAreLoggedInAsText": "您已登录为",
|
||||||
|
|
@ -549,7 +551,9 @@
|
||||||
"deleteText": "删除",
|
"deleteText": "删除",
|
||||||
"demoText": "演示",
|
"demoText": "演示",
|
||||||
"denyText": "拒绝",
|
"denyText": "拒绝",
|
||||||
|
"deprecatedText": "已弃用",
|
||||||
"desktopResText": "桌面分辨率",
|
"desktopResText": "桌面分辨率",
|
||||||
|
"deviceAccountUpgradeText": "紧急警告:\n你正在使用本地账户登录! (${NAME})\n此账户会在未来升级中被删除!!\n~如果想保持账号,请升级到v2账户~",
|
||||||
"difficultyEasyText": "简单",
|
"difficultyEasyText": "简单",
|
||||||
"difficultyHardOnlyText": "仅限困难模式",
|
"difficultyHardOnlyText": "仅限困难模式",
|
||||||
"difficultyHardText": "困难",
|
"difficultyHardText": "困难",
|
||||||
|
|
@ -729,7 +733,7 @@
|
||||||
"inviteAFriendText": "好友还未加入该游戏?邀请他们\n一起玩,新玩家可获得${COUNT}张免费点券。",
|
"inviteAFriendText": "好友还未加入该游戏?邀请他们\n一起玩,新玩家可获得${COUNT}张免费点券。",
|
||||||
"inviteFriendsText": "邀请朋友",
|
"inviteFriendsText": "邀请朋友",
|
||||||
"joinPublicPartyDescriptionText": "加入一个公开派对",
|
"joinPublicPartyDescriptionText": "加入一个公开派对",
|
||||||
"localNetworkDescriptionText": "加入一个附近的派对(通过局域网,蓝牙,etc等)",
|
"localNetworkDescriptionText": "加入一个局域网派对(通过wifi,蓝牙,etc等)",
|
||||||
"localNetworkText": "本地网络",
|
"localNetworkText": "本地网络",
|
||||||
"makePartyPrivateText": "将我的派对变成私人派对",
|
"makePartyPrivateText": "将我的派对变成私人派对",
|
||||||
"makePartyPublicText": "将我的派对变成公开派对",
|
"makePartyPublicText": "将我的派对变成公开派对",
|
||||||
|
|
@ -775,7 +779,7 @@
|
||||||
"showMyAddressText": "显示我的地址",
|
"showMyAddressText": "显示我的地址",
|
||||||
"startHostingPaidText": "创建需花费 ${COST}",
|
"startHostingPaidText": "创建需花费 ${COST}",
|
||||||
"startHostingText": "创建",
|
"startHostingText": "创建",
|
||||||
"startStopHostingMinutesText": "你可以在接下来的${MINUTES}分钟内启用会停止一个免费的主机",
|
"startStopHostingMinutesText": "你还可以使用${MINUTES}分钟的免费服务器",
|
||||||
"stopHostingText": "停止主机",
|
"stopHostingText": "停止主机",
|
||||||
"titleText": "多人游戏",
|
"titleText": "多人游戏",
|
||||||
"wifiDirectDescriptionBottomText": "如果所有设备都设有 Wi-Fi Direct 面板,那他们应该可以使用通过它来找到彼此,\n然后相互连接。一旦所有设备都相互连接上了,你就可以通过“本地网络”选项卡\n在此组织派对,常规的无线局域网也是一样。\n\n如要取得最佳效果,Wi-Fi Direct 创建者也应是${APP_NAME} 派对的创建者",
|
"wifiDirectDescriptionBottomText": "如果所有设备都设有 Wi-Fi Direct 面板,那他们应该可以使用通过它来找到彼此,\n然后相互连接。一旦所有设备都相互连接上了,你就可以通过“本地网络”选项卡\n在此组织派对,常规的无线局域网也是一样。\n\n如要取得最佳效果,Wi-Fi Direct 创建者也应是${APP_NAME} 派对的创建者",
|
||||||
|
|
@ -812,6 +816,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "抱歉,Google的多人游戏服务已不可用。\n我将尽快更换新的替代服务。\n在此之前,请尝试其他连接方法。\n-Eric",
|
"googleMultiplayerDiscontinuedText": "抱歉,Google的多人游戏服务已不可用。\n我将尽快更换新的替代服务。\n在此之前,请尝试其他连接方法。\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google商店购买不可用!\n请安装谷歌框架或更新Google服务。",
|
"googlePlayPurchasesNotAvailableText": "Google商店购买不可用!\n请安装谷歌框架或更新Google服务。",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play服务不可用\n某些功能可能会被禁用",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "总是",
|
"alwaysText": "总是",
|
||||||
|
|
@ -863,9 +868,9 @@
|
||||||
"powerupShieldDescriptionText": "能吸收一些伤害,\n关键时刻可能会有用。",
|
"powerupShieldDescriptionText": "能吸收一些伤害,\n关键时刻可能会有用。",
|
||||||
"powerupShieldNameText": "能量护盾",
|
"powerupShieldNameText": "能量护盾",
|
||||||
"powerupStickyBombsDescriptionText": "黏在任何碰到的东西上,\n然后就等着看烟花吧。",
|
"powerupStickyBombsDescriptionText": "黏在任何碰到的东西上,\n然后就等着看烟花吧。",
|
||||||
"powerupStickyBombsNameText": "粘性炸弹",
|
"powerupStickyBombsNameText": "黏黏炸弹",
|
||||||
"powerupsSubtitleText": "当然,没有提升器的游戏很难通关:",
|
"powerupsSubtitleText": "当然,没有道具的游戏很难通关:",
|
||||||
"powerupsText": "加成",
|
"powerupsText": "道具",
|
||||||
"punchInfoText": "拳击\n跑得越快,拳击的伤害\n越高。所以像疯子一样\n旋转跳跃吧!",
|
"punchInfoText": "拳击\n跑得越快,拳击的伤害\n越高。所以像疯子一样\n旋转跳跃吧!",
|
||||||
"runInfoText": "冲刺\n按任意键冲刺,如果你用手柄操作将会容易许多。\n冲刺跑的虽快,但会造成转向困难。且冲且珍惜。",
|
"runInfoText": "冲刺\n按任意键冲刺,如果你用手柄操作将会容易许多。\n冲刺跑的虽快,但会造成转向困难。且冲且珍惜。",
|
||||||
"someDaysText": "有些时候你只是想挥拳猛击某些东西,或把什么东西给炸飞。",
|
"someDaysText": "有些时候你只是想挥拳猛击某些东西,或把什么东西给炸飞。",
|
||||||
|
|
@ -875,7 +880,7 @@
|
||||||
},
|
},
|
||||||
"holdAnyButtonText": "<按住任意按钮>",
|
"holdAnyButtonText": "<按住任意按钮>",
|
||||||
"holdAnyKeyText": "<按住任何键>",
|
"holdAnyKeyText": "<按住任何键>",
|
||||||
"hostIsNavigatingMenusText": "- ${HOST}像大老板一样观察主界面 -",
|
"hostIsNavigatingMenusText": "- ${HOST}像皇帝一样控制主菜单 -",
|
||||||
"importPlaylistCodeInstructionsText": "用代码来导入列表",
|
"importPlaylistCodeInstructionsText": "用代码来导入列表",
|
||||||
"importPlaylistSuccessText": "成功导入${TYPE}列表 '${NAME}'",
|
"importPlaylistSuccessText": "成功导入${TYPE}列表 '${NAME}'",
|
||||||
"importText": "导入",
|
"importText": "导入",
|
||||||
|
|
@ -888,7 +893,7 @@
|
||||||
"cantKickHostError": "你不能踢房主啊喂!",
|
"cantKickHostError": "你不能踢房主啊喂!",
|
||||||
"chatBlockedText": "玩家 ${NAME} 被禁言 ${TIME} 秒.",
|
"chatBlockedText": "玩家 ${NAME} 被禁言 ${TIME} 秒.",
|
||||||
"connectedToGameText": "加入 '${NAME}'",
|
"connectedToGameText": "加入 '${NAME}'",
|
||||||
"connectedToPartyText": "加入${NAME}的派对!",
|
"connectedToPartyText": "加入${NAME}的房间!",
|
||||||
"connectingToPartyText": "正在连接...",
|
"connectingToPartyText": "正在连接...",
|
||||||
"connectionFailedHostAlreadyInPartyText": "连接失败;创建者正在另一派对中。",
|
"connectionFailedHostAlreadyInPartyText": "连接失败;创建者正在另一派对中。",
|
||||||
"connectionFailedPartyFullText": "连接出错:房间满员了…",
|
"connectionFailedPartyFullText": "连接出错:房间满员了…",
|
||||||
|
|
@ -927,7 +932,7 @@
|
||||||
"playerJoinedPartyText": "${NAME}加入了游戏!",
|
"playerJoinedPartyText": "${NAME}加入了游戏!",
|
||||||
"playerLeftPartyText": "${NAME}离开了游戏。",
|
"playerLeftPartyText": "${NAME}离开了游戏。",
|
||||||
"rejectingInviteAlreadyInPartyText": "拒绝邀请(已经在派对中)。",
|
"rejectingInviteAlreadyInPartyText": "拒绝邀请(已经在派对中)。",
|
||||||
"serverRestartingText": "服务器重启下下,请各位重新加入哈,,",
|
"serverRestartingText": "服务器自动重启中,请重新加入..",
|
||||||
"serverShuttingDownText": "服务器正在关机…",
|
"serverShuttingDownText": "服务器正在关机…",
|
||||||
"signInErrorText": "登陆出错啦~",
|
"signInErrorText": "登陆出错啦~",
|
||||||
"signInNoConnectionText": "哎呀,无法登陆。(网络连接有故障?)",
|
"signInNoConnectionText": "哎呀,无法登陆。(网络连接有故障?)",
|
||||||
|
|
@ -1030,6 +1035,7 @@
|
||||||
"maxConnectionsText": "最大连接数",
|
"maxConnectionsText": "最大连接数",
|
||||||
"maxPartySizeText": "最大派对规模",
|
"maxPartySizeText": "最大派对规模",
|
||||||
"maxPlayersText": "最多人数",
|
"maxPlayersText": "最多人数",
|
||||||
|
"merchText": "来买周边吧~",
|
||||||
"modeArcadeText": "街机模式",
|
"modeArcadeText": "街机模式",
|
||||||
"modeClassicText": "经典模式",
|
"modeClassicText": "经典模式",
|
||||||
"modeDemoText": "演示模式",
|
"modeDemoText": "演示模式",
|
||||||
|
|
@ -1070,6 +1076,7 @@
|
||||||
"notSignedInErrorText": "您必须登录到您的帐户。",
|
"notSignedInErrorText": "您必须登录到您的帐户。",
|
||||||
"notSignedInGooglePlayErrorText": "您必须通过Google Play登录。",
|
"notSignedInGooglePlayErrorText": "您必须通过Google Play登录。",
|
||||||
"notSignedInText": "(未登录)",
|
"notSignedInText": "(未登录)",
|
||||||
|
"notUsingAccountText": "注意:已忽略${SERVICE}账户的自动登录\n如果你想用它登录,前往“账户->使用${SERVICE}登录”~",
|
||||||
"nothingIsSelectedErrorText": "未选择任何内容!",
|
"nothingIsSelectedErrorText": "未选择任何内容!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "关",
|
"offText": "关",
|
||||||
|
|
@ -1131,7 +1138,11 @@
|
||||||
"pleaseWaitText": "请稍等...",
|
"pleaseWaitText": "请稍等...",
|
||||||
"pluginClassLoadErrorText": "加载'${PLUGIN}'插件时出错了耶: ${ERROR}",
|
"pluginClassLoadErrorText": "加载'${PLUGIN}'插件时出错了耶: ${ERROR}",
|
||||||
"pluginInitErrorText": "初始化'${PLUGIN}'插件失败了啦: ${ERROR}",
|
"pluginInitErrorText": "初始化'${PLUGIN}'插件失败了啦: ${ERROR}",
|
||||||
|
"pluginSettingsText": "插件设置喵",
|
||||||
|
"pluginsAutoEnableNewText": "自动启用新插件",
|
||||||
"pluginsDetectedText": "新插件安装成功,请重启游戏或在设置中设置它们~",
|
"pluginsDetectedText": "新插件安装成功,请重启游戏或在设置中设置它们~",
|
||||||
|
"pluginsDisableAllText": "禁用所有插件",
|
||||||
|
"pluginsEnableAllText": "启用所有插件",
|
||||||
"pluginsRemovedText": "有${NUM}个插件被删除了...",
|
"pluginsRemovedText": "有${NUM}个插件被删除了...",
|
||||||
"pluginsText": "插件",
|
"pluginsText": "插件",
|
||||||
"practiceText": "练习",
|
"practiceText": "练习",
|
||||||
|
|
@ -1268,6 +1279,7 @@
|
||||||
"netTestingText": "网络测试",
|
"netTestingText": "网络测试",
|
||||||
"resetText": "恢复默认值",
|
"resetText": "恢复默认值",
|
||||||
"showBombTrajectoriesText": "显示炸弹轨迹",
|
"showBombTrajectoriesText": "显示炸弹轨迹",
|
||||||
|
"showInGamePingText": "显示游戏延迟",
|
||||||
"showPlayerNamesText": "显示玩家名字",
|
"showPlayerNamesText": "显示玩家名字",
|
||||||
"showUserModsText": "显示修改文件夹",
|
"showUserModsText": "显示修改文件夹",
|
||||||
"titleText": "高级",
|
"titleText": "高级",
|
||||||
|
|
@ -1401,11 +1413,11 @@
|
||||||
"Flopsy": "萌兔耷拉",
|
"Flopsy": "萌兔耷拉",
|
||||||
"Frosty": "冰冰",
|
"Frosty": "冰冰",
|
||||||
"Gretel": "格蕾特",
|
"Gretel": "格蕾特",
|
||||||
"Grumbledorf": "格朗布多尔夫",
|
"Grumbledorf": "男巫",
|
||||||
"Jack Morgan": "杰克摩根",
|
"Jack Morgan": "杰克摩根",
|
||||||
"Kronk": "克罗克",
|
"Kronk": "克罗克",
|
||||||
"Lee": "李",
|
"Lee": "李",
|
||||||
"Lucky": "好运者",
|
"Lucky": "幸运儿",
|
||||||
"Mel": "梅尔",
|
"Mel": "梅尔",
|
||||||
"Middle-Man": "平衡之尊",
|
"Middle-Man": "平衡之尊",
|
||||||
"Minimus": "迷你姆斯",
|
"Minimus": "迷你姆斯",
|
||||||
|
|
@ -1541,6 +1553,7 @@
|
||||||
"Italian": "意大利语",
|
"Italian": "意大利语",
|
||||||
"Japanese": "日本语",
|
"Japanese": "日本语",
|
||||||
"Korean": "朝鲜语",
|
"Korean": "朝鲜语",
|
||||||
|
"Malay": "马来语",
|
||||||
"Persian": "波斯文",
|
"Persian": "波斯文",
|
||||||
"Polish": "波兰语",
|
"Polish": "波兰语",
|
||||||
"Portuguese": "葡萄牙语",
|
"Portuguese": "葡萄牙语",
|
||||||
|
|
@ -1655,7 +1668,7 @@
|
||||||
"You got ${COUNT} tickets!": "你获得了${COUNT}点券!",
|
"You got ${COUNT} tickets!": "你获得了${COUNT}点券!",
|
||||||
"You got a ${ITEM}!": "你获得了一个${ITEM}!",
|
"You got a ${ITEM}!": "你获得了一个${ITEM}!",
|
||||||
"You have been promoted to a new league; congratulations!": "你已被升级至一个全新联赛;恭喜!",
|
"You have been promoted to a new league; congratulations!": "你已被升级至一个全新联赛;恭喜!",
|
||||||
"You must update to a newer version of the app to do this.": "你必須先更新遊戲才能這麼做。",
|
"You must update to a newer version of the app to do this.": "你必须升级到最新版本才可以",
|
||||||
"You must update to the newest version of the game to do this.": "你必须更新到最新版来做到这一点。",
|
"You must update to the newest version of the game to do this.": "你必须更新到最新版来做到这一点。",
|
||||||
"You must wait a few seconds before entering a new code.": "你必须在输入新代码前稍等几秒。",
|
"You must wait a few seconds before entering a new code.": "你必须在输入新代码前稍等几秒。",
|
||||||
"You ranked #${RANK} in the last tournament. Thanks for playing!": "你在上一场锦标赛中排名#${RANK}。多谢玩赏本游戏!",
|
"You ranked #${RANK} in the last tournament. Thanks for playing!": "你在上一场锦标赛中排名#${RANK}。多谢玩赏本游戏!",
|
||||||
|
|
@ -1728,11 +1741,11 @@
|
||||||
"Hold down any button to run. You'll get places faster\nbut won't turn very well, so watch out for cliffs.": "按住任意按钮来奔跑。你将会更快地抵达一些地方,\n但是转弯效果并不好,所以当心悬崖。",
|
"Hold down any button to run. You'll get places faster\nbut won't turn very well, so watch out for cliffs.": "按住任意按钮来奔跑。你将会更快地抵达一些地方,\n但是转弯效果并不好,所以当心悬崖。",
|
||||||
"Ice bombs are not very powerful, but they freeze\nwhoever they hit, leaving them vulnerable to shattering.": "寒冰炸弹并非很厉害,但它们能够冻结\n任何被击中者,使他们极易粉碎。",
|
"Ice bombs are not very powerful, but they freeze\nwhoever they hit, leaving them vulnerable to shattering.": "寒冰炸弹并非很厉害,但它们能够冻结\n任何被击中者,使他们极易粉碎。",
|
||||||
"If someone picks you up, punch them and they'll let go.\nThis works in real life too.": "如果有人将你提起,出拳攻击他们,他们便会放手。\n这在现实生活中同样有效。",
|
"If someone picks you up, punch them and they'll let go.\nThis works in real life too.": "如果有人将你提起,出拳攻击他们,他们便会放手。\n这在现实生活中同样有效。",
|
||||||
"If you are short on controllers, install the '${REMOTE_APP_NAME}' app\non your mobile devices to use them as controllers.": "如果您缺控制器,在手機上安裝「${REMOTE_APP_NAME}」\n並用手機當控制器。",
|
"If you are short on controllers, install the '${REMOTE_APP_NAME}' app\non your mobile devices to use them as controllers.": "如果您缺控制器,可以在手机安装「${REMOTE_APP_NAME}」\n然后手机就可以当作控制器啦~",
|
||||||
"If you are short on controllers, install the 'BombSquad Remote' app\non your iOS or Android devices to use them as controllers.": "如果你没有手柄,请在你的iOS或Android设备上安装\n“BombSquad Remote”应用程序,并将它们作为手柄使用。",
|
"If you are short on controllers, install the 'BombSquad Remote' app\non your iOS or Android devices to use them as controllers.": "如果你没有手柄,请在你的iOS或Android设备上安装\n“BombSquad Remote”应用程序,并将它们作为手柄使用。",
|
||||||
"If you get a sticky-bomb stuck to you, jump around and spin in circles. You might\nshake the bomb off, or if nothing else your last moments will be entertaining.": "如果一个黏黏弹将你困住,你应该四处跳动并转圈。你可能\n将炸弹抖落,或如果没有其他办法,你最后的时刻将是有趣的。",
|
"If you get a sticky-bomb stuck to you, jump around and spin in circles. You might\nshake the bomb off, or if nothing else your last moments will be entertaining.": "如果一个黏黏弹将你困住,你应该四处跳动并转圈。你可能\n将炸弹抖落,或如果没有其他办法,你最后的时刻将是有趣的。",
|
||||||
"If you kill an enemy in one hit you get double points for it.": "如果你一击杀死一个敌人,你将获得双倍积分。",
|
"If you kill an enemy in one hit you get double points for it.": "如果你一击杀死一个敌人,你将获得双倍积分。",
|
||||||
"If you pick up a curse, your only hope for survival is to\nfind a health powerup in the next few seconds.": "如果你捡到一个诅咒之盒,你唯一的生存希望是\n在接下来的几秒内找到一个生命值提升器。",
|
"If you pick up a curse, your only hope for survival is to\nfind a health powerup in the next few seconds.": "如果你捡到一个诅咒之盒,你唯一的生存希望是\n在接下来的几秒内找到一个加血包。",
|
||||||
"If you stay in one place, you're toast. Run and dodge to survive..": "如果你停留在一个地方,你就完了。为了生存而奔跑和躲避……",
|
"If you stay in one place, you're toast. Run and dodge to survive..": "如果你停留在一个地方,你就完了。为了生存而奔跑和躲避……",
|
||||||
"If you've got lots of players coming and going, turn on 'auto-kick-idle-players'\nunder settings in case anyone forgets to leave the game.": "如果众多玩家进进出出,在设置下打开“自动踢出闲置玩家”,以防\n任何玩家忘记离开游戏。",
|
"If you've got lots of players coming and going, turn on 'auto-kick-idle-players'\nunder settings in case anyone forgets to leave the game.": "如果众多玩家进进出出,在设置下打开“自动踢出闲置玩家”,以防\n任何玩家忘记离开游戏。",
|
||||||
"If your device gets too warm or you'd like to conserve battery power,\nturn down \"Visuals\" or \"Resolution\" in Settings->Graphics": "如果你的设备过热,或者你想要节省电池电量,\n则在设置->图形中调低“视觉效果”或“分辨率”",
|
"If your device gets too warm or you'd like to conserve battery power,\nturn down \"Visuals\" or \"Resolution\" in Settings->Graphics": "如果你的设备过热,或者你想要节省电池电量,\n则在设置->图形中调低“视觉效果”或“分辨率”",
|
||||||
|
|
@ -1780,22 +1793,22 @@
|
||||||
"phrase09Text": "啊,这样好多了。",
|
"phrase09Text": "啊,这样好多了。",
|
||||||
"phrase10Text": "奔跑也会发挥作用。",
|
"phrase10Text": "奔跑也会发挥作用。",
|
||||||
"phrase11Text": "按住任意按钮来奔跑。",
|
"phrase11Text": "按住任意按钮来奔跑。",
|
||||||
"phrase12Text": "如要获得超赞的出拳,请尝试持续奔跑并旋转。",
|
"phrase12Text": "想成为一拳超人,可以尝试边跑边旋转。",
|
||||||
"phrase13Text": "啊;非常不好意思,${NAME}。",
|
"phrase13Text": "啊;真抱歉啊,${NAME}。(狗头)",
|
||||||
"phrase14Text": "你可以捡起并投掷物体,如旗帜或${NAME}。",
|
"phrase14Text": "你可以捡起并投掷物体,如旗帜或${NAME}。",
|
||||||
"phrase15Text": "最后,还有炸弹。",
|
"phrase15Text": "最后,还有炸弹。",
|
||||||
"phrase16Text": "投掷炸弹需要练习。",
|
"phrase16Text": "投掷炸弹需要练习。",
|
||||||
"phrase17Text": "哎哟!这一下投的不咋地啊。",
|
"phrase17Text": "大家不要学我这样丢...",
|
||||||
"phrase18Text": "移动有助你投掷得更远。",
|
"phrase18Text": "跑起来有助你投掷得更远。",
|
||||||
"phrase19Text": "跳跃有助你投掷得更高。",
|
"phrase19Text": "跳跃有助你投掷得更高。",
|
||||||
"phrase20Text": "“鞭打”你的炸弹以抛出更远的距离。",
|
"phrase20Text": "“鞭打”你的炸弹以抛出更远的距离。",
|
||||||
"phrase21Text": "定时你的炸弹可能会非常棘手。",
|
"phrase21Text": "你还要卡准时机丢出炸弹。",
|
||||||
"phrase22Text": "我靠。",
|
"phrase22Text": "我靠。",
|
||||||
"phrase23Text": "尝试将导火线“爆燃”一秒或两秒。",
|
"phrase23Text": "可以让火线先燃烧一秒或两秒。",
|
||||||
"phrase24Text": "万岁!爆燃超赞。",
|
"phrase24Text": "好耶!差点秒杀~",
|
||||||
"phrase25Text": "好吧,已经很不错了。",
|
"phrase25Text": "好了,教程先到这里吧。",
|
||||||
"phrase26Text": "去完成你的任务吧,老铁!",
|
"phrase26Text": "先尝试一波吧,老铁!",
|
||||||
"phrase27Text": "记住你的训练,你会活着回来的!",
|
"phrase27Text": "记住刚刚的教程,你会活着回来的!",
|
||||||
"phrase28Text": "......好吧,也许...",
|
"phrase28Text": "......好吧,也许...",
|
||||||
"phrase29Text": "祝好运!",
|
"phrase29Text": "祝好运!",
|
||||||
"randomName1Text": "弗雷德",
|
"randomName1Text": "弗雷德",
|
||||||
|
|
@ -1824,6 +1837,7 @@
|
||||||
"usesExternalControllerText": "该游戏使用外部手柄进行输入。",
|
"usesExternalControllerText": "该游戏使用外部手柄进行输入。",
|
||||||
"usingItunesText": "使用音乐应用设置背景音乐……",
|
"usingItunesText": "使用音乐应用设置背景音乐……",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "请确认iTunes中随机播放已开启且重复全部歌曲。",
|
"usingItunesTurnRepeatAndShuffleOnText": "请确认iTunes中随机播放已开启且重复全部歌曲。",
|
||||||
|
"v2AccountLinkingInfoText": "要连接V2账户,请点击“管理账户”~",
|
||||||
"validatingTestBuildText": "测试版验证中……",
|
"validatingTestBuildText": "测试版验证中……",
|
||||||
"victoryText": "胜利!",
|
"victoryText": "胜利!",
|
||||||
"voteDelayText": "${NUMBER} 秒内你不能发起另一个投票",
|
"voteDelayText": "${NUMBER} 秒内你不能发起另一个投票",
|
||||||
|
|
@ -1831,7 +1845,7 @@
|
||||||
"votedAlreadyText": "你已经投过票啦!",
|
"votedAlreadyText": "你已经投过票啦!",
|
||||||
"votesNeededText": "通过需要 ${NUMBER} 个投票",
|
"votesNeededText": "通过需要 ${NUMBER} 个投票",
|
||||||
"vsText": "vs.",
|
"vsText": "vs.",
|
||||||
"waitingForHostText": "(等待${HOST}以继续)",
|
"waitingForHostText": "(请等待${HOST}继续游戏)",
|
||||||
"waitingForPlayersText": "等待玩家的加入……",
|
"waitingForPlayersText": "等待玩家的加入……",
|
||||||
"waitingInLineText": "正在排队等候(人满为患)...",
|
"waitingInLineText": "正在排队等候(人满为患)...",
|
||||||
"watchAVideoText": "看一个小广告视频",
|
"watchAVideoText": "看一个小广告视频",
|
||||||
|
|
@ -1856,6 +1870,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "波",
|
"waveText": "波",
|
||||||
"wellSureText": "确定!",
|
"wellSureText": "确定!",
|
||||||
|
"whatIsThisText": "这啥玩意??",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote版权所有"
|
"titleText": "DarwiinRemote版权所有"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "每一賽季只有一次更改機會",
|
"changeOncePerSeason": "每一賽季只有一次更改機會",
|
||||||
"changeOncePerSeasonError": "您必須等${NUM}天到下個賽季改變此選項",
|
"changeOncePerSeasonError": "您必須等${NUM}天到下個賽季改變此選項",
|
||||||
"customName": "自定義名稱",
|
"customName": "自定義名稱",
|
||||||
|
"googlePlayGamesAccountSwitchText": "如果您想使用其他 Google 帳戶,\n使用 Google Play 遊戲應用程序進行切換。",
|
||||||
"linkAccountsEnterCodeText": "輸入代碼",
|
"linkAccountsEnterCodeText": "輸入代碼",
|
||||||
"linkAccountsGenerateCodeText": "生成代碼",
|
"linkAccountsGenerateCodeText": "生成代碼",
|
||||||
"linkAccountsInfoText": "(在不同的平台上共享遊戲進度)",
|
"linkAccountsInfoText": "(在不同的平台上共享遊戲進度)",
|
||||||
|
|
@ -37,6 +38,7 @@
|
||||||
"titleText": "帳號",
|
"titleText": "帳號",
|
||||||
"unlinkAccountsInstructionsText": "選擇一個要解除連結的帳號",
|
"unlinkAccountsInstructionsText": "選擇一個要解除連結的帳號",
|
||||||
"unlinkAccountsText": "解除連結帳號",
|
"unlinkAccountsText": "解除連結帳號",
|
||||||
|
"unlinkLegacyV1AccountsText": "取消鏈接舊版(V1)賬戶",
|
||||||
"v2LinkInstructionsText": "使用此鏈接新建或登錄賬戶",
|
"v2LinkInstructionsText": "使用此鏈接新建或登錄賬戶",
|
||||||
"viaAccount": "(透過帳號 ${NAME})",
|
"viaAccount": "(透過帳號 ${NAME})",
|
||||||
"youAreSignedInAsText": "您以這帳號登入:"
|
"youAreSignedInAsText": "您以這帳號登入:"
|
||||||
|
|
@ -543,7 +545,9 @@
|
||||||
"deleteText": "刪除",
|
"deleteText": "刪除",
|
||||||
"demoText": "演示",
|
"demoText": "演示",
|
||||||
"denyText": "拒絕",
|
"denyText": "拒絕",
|
||||||
|
"deprecatedText": "棄用",
|
||||||
"desktopResText": "桌面分辨率",
|
"desktopResText": "桌面分辨率",
|
||||||
|
"deviceAccountUpgradeText": "警告:\n您已使用設備帳戶(${NAME})登錄。\n設備帳戶將在未來的更新中刪除。\n如果您想保留賬戶,請升級到 V2 帳戶。",
|
||||||
"difficultyEasyText": "簡單",
|
"difficultyEasyText": "簡單",
|
||||||
"difficultyHardOnlyText": "僅困難模式",
|
"difficultyHardOnlyText": "僅困難模式",
|
||||||
"difficultyHardText": "困難",
|
"difficultyHardText": "困難",
|
||||||
|
|
@ -801,6 +805,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "抱歉,Google的多人遊戲服務不再可用。\n我將盡快更換新的替代服務。\n在此之前,請嘗試其他連接方法。\n-Eric",
|
"googleMultiplayerDiscontinuedText": "抱歉,Google的多人遊戲服務不再可用。\n我將盡快更換新的替代服務。\n在此之前,請嘗試其他連接方法。\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google Play購買不可用\n你可能需要更新你的Google Play商店組件",
|
"googlePlayPurchasesNotAvailableText": "Google Play購買不可用\n你可能需要更新你的Google Play商店組件",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google play當前不可用\n一些功能將會被禁用",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "總是",
|
"alwaysText": "總是",
|
||||||
|
|
@ -1017,6 +1022,7 @@
|
||||||
"maxConnectionsText": "最大連接數",
|
"maxConnectionsText": "最大連接數",
|
||||||
"maxPartySizeText": "最大派對規模",
|
"maxPartySizeText": "最大派對規模",
|
||||||
"maxPlayersText": "最多人數",
|
"maxPlayersText": "最多人數",
|
||||||
|
"merchText": "周邊",
|
||||||
"modeArcadeText": "街機模式",
|
"modeArcadeText": "街機模式",
|
||||||
"modeClassicText": "經典模式",
|
"modeClassicText": "經典模式",
|
||||||
"modeDemoText": "演示模式",
|
"modeDemoText": "演示模式",
|
||||||
|
|
@ -1056,6 +1062,7 @@
|
||||||
"notSignedInErrorText": "你必須登入來進行該操作.",
|
"notSignedInErrorText": "你必須登入來進行該操作.",
|
||||||
"notSignedInGooglePlayErrorText": "您必須通過Google Play登錄",
|
"notSignedInGooglePlayErrorText": "您必須通過Google Play登錄",
|
||||||
"notSignedInText": "(未登錄)",
|
"notSignedInText": "(未登錄)",
|
||||||
|
"notUsingAccountText": "注意:忽略 ${SERVICE} 帳戶。\n如果您想使用它,請轉到“帳戶 -> 使用 ${SERVICE} 登錄”。",
|
||||||
"nothingIsSelectedErrorText": "未選擇任何內容",
|
"nothingIsSelectedErrorText": "未選擇任何內容",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "關",
|
"offText": "關",
|
||||||
|
|
@ -1519,6 +1526,7 @@
|
||||||
"Italian": "意大利語",
|
"Italian": "意大利語",
|
||||||
"Japanese": "日語",
|
"Japanese": "日語",
|
||||||
"Korean": "朝鮮語",
|
"Korean": "朝鮮語",
|
||||||
|
"Malay": "馬來語",
|
||||||
"Persian": "波斯文",
|
"Persian": "波斯文",
|
||||||
"Polish": "波蘭語",
|
"Polish": "波蘭語",
|
||||||
"Portuguese": "葡萄牙語",
|
"Portuguese": "葡萄牙語",
|
||||||
|
|
@ -1800,6 +1808,7 @@
|
||||||
"useDefaultText": "使用默認值",
|
"useDefaultText": "使用默認值",
|
||||||
"usesExternalControllerText": "該遊戲使用外部手柄進行接入",
|
"usesExternalControllerText": "該遊戲使用外部手柄進行接入",
|
||||||
"usingItunesText": "使用音樂軟件設置背景音樂...",
|
"usingItunesText": "使用音樂軟件設置背景音樂...",
|
||||||
|
"v2AccountLinkingInfoText": "要鏈接 V2 帳戶,請使用“管理帳戶”按鈕。",
|
||||||
"validatingTestBuildText": "測試版驗證中",
|
"validatingTestBuildText": "測試版驗證中",
|
||||||
"victoryText": "勝利!",
|
"victoryText": "勝利!",
|
||||||
"voteDelayText": "你不能在${NUMBER}內發起一個新的投票",
|
"voteDelayText": "你不能在${NUMBER}內發起一個新的投票",
|
||||||
|
|
@ -1832,6 +1841,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "波",
|
"waveText": "波",
|
||||||
"wellSureText": "確定!",
|
"wellSureText": "確定!",
|
||||||
|
"whatIsThisText": "這是什麼?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote版權擁有©"
|
"titleText": "DarwiinRemote版權擁有©"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/czech.json
vendored
10
dist/ba_data/data/languages/czech.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Lze změnit pouze jednou za sezónu.",
|
"changeOncePerSeason": "Lze změnit pouze jednou za sezónu.",
|
||||||
"changeOncePerSeasonError": "Chcete-li toto změnit znovu, musíte počkat na další sezónu (${NUM} days)",
|
"changeOncePerSeasonError": "Chcete-li toto změnit znovu, musíte počkat na další sezónu (${NUM} days)",
|
||||||
"customName": "Vlastní Jméno",
|
"customName": "Vlastní Jméno",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Pokud chcete použít jiný Google účet,\npoužijte pro změnu aplikaci Google Play Hry.",
|
||||||
"linkAccountsEnterCodeText": "Vložit kód",
|
"linkAccountsEnterCodeText": "Vložit kód",
|
||||||
"linkAccountsGenerateCodeText": "Generovat kód",
|
"linkAccountsGenerateCodeText": "Generovat kód",
|
||||||
"linkAccountsInfoText": "(sdílení postupu mezi různými zařízeními)",
|
"linkAccountsInfoText": "(sdílení postupu mezi různými zařízeními)",
|
||||||
|
|
@ -43,6 +44,7 @@
|
||||||
"titleText": "Profil",
|
"titleText": "Profil",
|
||||||
"unlinkAccountsInstructionsText": "Zvolte účet k odpojení",
|
"unlinkAccountsInstructionsText": "Zvolte účet k odpojení",
|
||||||
"unlinkAccountsText": "Odpojit účty",
|
"unlinkAccountsText": "Odpojit účty",
|
||||||
|
"unlinkLegacyV1AccountsText": "na rozdíl od starších účtů (V1).",
|
||||||
"v2LinkInstructionsText": "Použijte tento odkaz pro vytvoření účtu nebo přihlášení.",
|
"v2LinkInstructionsText": "Použijte tento odkaz pro vytvoření účtu nebo přihlášení.",
|
||||||
"viaAccount": "(přes účet ${NAME})",
|
"viaAccount": "(přes účet ${NAME})",
|
||||||
"youAreLoggedInAsText": "Jste přihlášen jako:",
|
"youAreLoggedInAsText": "Jste přihlášen jako:",
|
||||||
|
|
@ -553,7 +555,9 @@
|
||||||
"deleteText": "Vymaž",
|
"deleteText": "Vymaž",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Zakázat",
|
"denyText": "Zakázat",
|
||||||
|
"deprecatedText": "Zastaralé",
|
||||||
"desktopResText": "Rozlišení Plochy",
|
"desktopResText": "Rozlišení Plochy",
|
||||||
|
"deviceAccountUpgradeText": "Varování:\nJste přihlášeni na účet dostupný pouze na tomto zařízení\n(${NAME}).\nTyto účty budou v příští aktualizaci odstraněny.",
|
||||||
"difficultyEasyText": "Lehká",
|
"difficultyEasyText": "Lehká",
|
||||||
"difficultyHardOnlyText": "Pouze Těžký Mód",
|
"difficultyHardOnlyText": "Pouze Těžký Mód",
|
||||||
"difficultyHardText": "Těžká",
|
"difficultyHardText": "Těžká",
|
||||||
|
|
@ -815,6 +819,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Litujeme, služba pro více hráčů Google již není k dispozici.\n Pracuji na výměně co nejrychleji.\n Do té doby zkuste jiný způsob připojení.\n -Eric",
|
"googleMultiplayerDiscontinuedText": "Litujeme, služba pro více hráčů Google již není k dispozici.\n Pracuji na výměně co nejrychleji.\n Do té doby zkuste jiný způsob připojení.\n -Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Nákupy na Google Play nejsou k dispozici.\nMožná budete muset aktualizovat obchod play.",
|
"googlePlayPurchasesNotAvailableText": "Nákupy na Google Play nejsou k dispozici.\nMožná budete muset aktualizovat obchod play.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Služby Google play nejsou dostupné.\nNěkteré funkce mohou být zakázány.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Vždy",
|
"alwaysText": "Vždy",
|
||||||
|
|
@ -1033,6 +1038,7 @@
|
||||||
"maxConnectionsText": "Max připojitelných hráčů",
|
"maxConnectionsText": "Max připojitelných hráčů",
|
||||||
"maxPartySizeText": "Maximální velikost party",
|
"maxPartySizeText": "Maximální velikost party",
|
||||||
"maxPlayersText": "Max hráčů",
|
"maxPlayersText": "Max hráčů",
|
||||||
|
"merchText": "Pro fanoušky!",
|
||||||
"modeArcadeText": "Arkádový mód",
|
"modeArcadeText": "Arkádový mód",
|
||||||
"modeClassicText": "Klasický mód",
|
"modeClassicText": "Klasický mód",
|
||||||
"modeDemoText": "Ukázkový mód",
|
"modeDemoText": "Ukázkový mód",
|
||||||
|
|
@ -1073,6 +1079,7 @@
|
||||||
"notSignedInErrorText": "Pro tuto akci se musíte přihlásit",
|
"notSignedInErrorText": "Pro tuto akci se musíte přihlásit",
|
||||||
"notSignedInGooglePlayErrorText": "Pro tuto akci se musíte přihlásit přes Google Play",
|
"notSignedInGooglePlayErrorText": "Pro tuto akci se musíte přihlásit přes Google Play",
|
||||||
"notSignedInText": "nepřihlášen",
|
"notSignedInText": "nepřihlášen",
|
||||||
|
"notUsingAccountText": "Poznámka: nevyužívaný ${SERVICE} account.\nJděte do 'Účet -> Přihlásit se službou ${SERVICE}' pokud chcete účet používat.",
|
||||||
"nothingIsSelectedErrorText": "Nic není vybráno!",
|
"nothingIsSelectedErrorText": "Nic není vybráno!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Vyp",
|
"offText": "Vyp",
|
||||||
|
|
@ -1542,6 +1549,7 @@
|
||||||
"Italian": "Italština",
|
"Italian": "Italština",
|
||||||
"Japanese": "Japonština",
|
"Japanese": "Japonština",
|
||||||
"Korean": "Korejština",
|
"Korean": "Korejština",
|
||||||
|
"Malay": "Malajština",
|
||||||
"Persian": "Perština",
|
"Persian": "Perština",
|
||||||
"Polish": "Polština",
|
"Polish": "Polština",
|
||||||
"Portuguese": "Portugalština",
|
"Portuguese": "Portugalština",
|
||||||
|
|
@ -1825,6 +1833,7 @@
|
||||||
"usesExternalControllerText": "Tato hra používá jako vstup externí ovladač.",
|
"usesExternalControllerText": "Tato hra používá jako vstup externí ovladač.",
|
||||||
"usingItunesText": "Používám Music App pro soundtrack",
|
"usingItunesText": "Používám Music App pro soundtrack",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Ujistěte se prosím, že je zaplý shuffle, a opakovat VŠE v iTunes,",
|
"usingItunesTurnRepeatAndShuffleOnText": "Ujistěte se prosím, že je zaplý shuffle, a opakovat VŠE v iTunes,",
|
||||||
|
"v2AccountLinkingInfoText": "Pro propojení V2 účtů, stiskněte tlačítko 'Spravovat Účet'",
|
||||||
"validatingTestBuildText": "Ověřuji Testovací Build...",
|
"validatingTestBuildText": "Ověřuji Testovací Build...",
|
||||||
"victoryText": "Vítězství!!!",
|
"victoryText": "Vítězství!!!",
|
||||||
"voteDelayText": "Nelze spustit další hlas za ${NUMBER} sekund",
|
"voteDelayText": "Nelze spustit další hlas za ${NUMBER} sekund",
|
||||||
|
|
@ -1857,6 +1866,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Vlna",
|
"waveText": "Vlna",
|
||||||
"wellSureText": "Nuže dobrá!",
|
"wellSureText": "Nuže dobrá!",
|
||||||
|
"whatIsThisText": "Co je tohle?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
15
dist/ba_data/data/languages/english.json
vendored
15
dist/ba_data/data/languages/english.json
vendored
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "You can only change this once per season.",
|
"changeOncePerSeason": "You can only change this once per season.",
|
||||||
"changeOncePerSeasonError": "You must wait until next season to change this again (${NUM} days)",
|
"changeOncePerSeasonError": "You must wait until next season to change this again (${NUM} days)",
|
||||||
"customName": "Custom Name",
|
"customName": "Custom Name",
|
||||||
|
"googlePlayGamesAccountSwitchText": "If you want to use a different Google account,\nuse the Google Play Games app to switch.",
|
||||||
"linkAccountsEnterCodeText": "Enter Code",
|
"linkAccountsEnterCodeText": "Enter Code",
|
||||||
"linkAccountsGenerateCodeText": "Generate Code",
|
"linkAccountsGenerateCodeText": "Generate Code",
|
||||||
"linkAccountsInfoText": "(share progress across different platforms)",
|
"linkAccountsInfoText": "(share progress across different platforms)",
|
||||||
|
|
@ -37,6 +38,7 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Select an account to unlink",
|
"unlinkAccountsInstructionsText": "Select an account to unlink",
|
||||||
"unlinkAccountsText": "Unlink Accounts",
|
"unlinkAccountsText": "Unlink Accounts",
|
||||||
|
"unlinkLegacyV1AccountsText": "Unlink Legacy (V1) Accounts",
|
||||||
"v2LinkInstructionsText": "Use this link to create an account or sign in.",
|
"v2LinkInstructionsText": "Use this link to create an account or sign in.",
|
||||||
"viaAccount": "(via account ${NAME})",
|
"viaAccount": "(via account ${NAME})",
|
||||||
"youAreSignedInAsText": "You are signed in as:"
|
"youAreSignedInAsText": "You are signed in as:"
|
||||||
|
|
@ -545,7 +547,9 @@
|
||||||
"deleteText": "Delete",
|
"deleteText": "Delete",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Deny",
|
"denyText": "Deny",
|
||||||
|
"deprecatedText": "Deprecated",
|
||||||
"desktopResText": "Desktop Res",
|
"desktopResText": "Desktop Res",
|
||||||
|
"deviceAccountUpgradeText": "Warning:\nYou are signed in with a device account (${NAME}).\nDevice accounts will be removed in a future update.\nUpgrade to a V2 Account if you want to keep your progress.",
|
||||||
"difficultyEasyText": "Easy",
|
"difficultyEasyText": "Easy",
|
||||||
"difficultyHardOnlyText": "Hard Mode Only",
|
"difficultyHardOnlyText": "Hard Mode Only",
|
||||||
"difficultyHardText": "Hard",
|
"difficultyHardText": "Hard",
|
||||||
|
|
@ -803,6 +807,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Sorry, Google’s multiplayer service is no longer available.\nI am working on a replacement as fast as possible.\nUntil then, please try another connection method.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Sorry, Google’s multiplayer service is no longer available.\nI am working on a replacement as fast as possible.\nUntil then, please try another connection method.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google Play purchases are not available.\nYou may need to update your store app.",
|
"googlePlayPurchasesNotAvailableText": "Google Play purchases are not available.\nYou may need to update your store app.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play Services is not available.\nSome app functionality may be disabled.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Always",
|
"alwaysText": "Always",
|
||||||
|
|
@ -1027,6 +1032,7 @@
|
||||||
"maxConnectionsText": "Max Connections",
|
"maxConnectionsText": "Max Connections",
|
||||||
"maxPartySizeText": "Max Party Size",
|
"maxPartySizeText": "Max Party Size",
|
||||||
"maxPlayersText": "Max Players",
|
"maxPlayersText": "Max Players",
|
||||||
|
"merchText": "Merch!",
|
||||||
"modeArcadeText": "Arcade Mode",
|
"modeArcadeText": "Arcade Mode",
|
||||||
"modeClassicText": "Classic Mode",
|
"modeClassicText": "Classic Mode",
|
||||||
"modeDemoText": "Demo Mode",
|
"modeDemoText": "Demo Mode",
|
||||||
|
|
@ -1066,6 +1072,7 @@
|
||||||
"notSignedInErrorText": "You must sign in to do this.",
|
"notSignedInErrorText": "You must sign in to do this.",
|
||||||
"notSignedInGooglePlayErrorText": "You must sign in with Google Play to do this.",
|
"notSignedInGooglePlayErrorText": "You must sign in with Google Play to do this.",
|
||||||
"notSignedInText": "not signed in",
|
"notSignedInText": "not signed in",
|
||||||
|
"notUsingAccountText": "Note: ignoring ${SERVICE} account.\nGo to 'Account -> Sign in with ${SERVICE}' if you want to use it.",
|
||||||
"nothingIsSelectedErrorText": "Nothing is selected!",
|
"nothingIsSelectedErrorText": "Nothing is selected!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Off",
|
"offText": "Off",
|
||||||
|
|
@ -1123,7 +1130,11 @@
|
||||||
"pleaseWaitText": "Please wait...",
|
"pleaseWaitText": "Please wait...",
|
||||||
"pluginClassLoadErrorText": "Error loading plugin class '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Error loading plugin class '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Error initing plugin '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Error initing plugin '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Plugin Settings",
|
||||||
|
"pluginsAutoEnableNewText": "Auto Enable New Plugins",
|
||||||
"pluginsDetectedText": "New plugin(s) detected. Restart to activate them, or configure them in settings.",
|
"pluginsDetectedText": "New plugin(s) detected. Restart to activate them, or configure them in settings.",
|
||||||
|
"pluginsDisableAllText": "Disable All Plugins",
|
||||||
|
"pluginsEnableAllText": "Enable All Plugins",
|
||||||
"pluginsRemovedText": "${NUM} plugin(s) no longer found.",
|
"pluginsRemovedText": "${NUM} plugin(s) no longer found.",
|
||||||
"pluginsText": "Plugins",
|
"pluginsText": "Plugins",
|
||||||
"practiceText": "Practice",
|
"practiceText": "Practice",
|
||||||
|
|
@ -1258,6 +1269,7 @@
|
||||||
"netTestingText": "Network Testing",
|
"netTestingText": "Network Testing",
|
||||||
"resetText": "Reset",
|
"resetText": "Reset",
|
||||||
"showBombTrajectoriesText": "Show Bomb Trajectories",
|
"showBombTrajectoriesText": "Show Bomb Trajectories",
|
||||||
|
"showInGamePingText": "Show In-Game Ping",
|
||||||
"showPlayerNamesText": "Show Player Names",
|
"showPlayerNamesText": "Show Player Names",
|
||||||
"showUserModsText": "Show Mods Folder",
|
"showUserModsText": "Show Mods Folder",
|
||||||
"titleText": "Advanced",
|
"titleText": "Advanced",
|
||||||
|
|
@ -1528,6 +1540,7 @@
|
||||||
"Italian": null,
|
"Italian": null,
|
||||||
"Japanese": null,
|
"Japanese": null,
|
||||||
"Korean": null,
|
"Korean": null,
|
||||||
|
"Malay": null,
|
||||||
"Persian": null,
|
"Persian": null,
|
||||||
"Polish": null,
|
"Polish": null,
|
||||||
"Portuguese": null,
|
"Portuguese": null,
|
||||||
|
|
@ -1809,6 +1822,7 @@
|
||||||
"useDefaultText": "Use Default",
|
"useDefaultText": "Use Default",
|
||||||
"usesExternalControllerText": "This game uses an external controller for input.",
|
"usesExternalControllerText": "This game uses an external controller for input.",
|
||||||
"usingItunesText": "Using Music App for soundtrack...",
|
"usingItunesText": "Using Music App for soundtrack...",
|
||||||
|
"v2AccountLinkingInfoText": "To link V2 accounts, use the 'Manage Account' button.",
|
||||||
"validatingTestBuildText": "Validating Test Build...",
|
"validatingTestBuildText": "Validating Test Build...",
|
||||||
"victoryText": "Victory!",
|
"victoryText": "Victory!",
|
||||||
"voteDelayText": "You can't start another vote for ${NUMBER} seconds",
|
"voteDelayText": "You can't start another vote for ${NUMBER} seconds",
|
||||||
|
|
@ -1841,6 +1855,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Wave",
|
"waveText": "Wave",
|
||||||
"wellSureText": "Well Sure!",
|
"wellSureText": "Well Sure!",
|
||||||
|
"whatIsThisText": "What is this?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
9
dist/ba_data/data/languages/esperanto.json
vendored
9
dist/ba_data/data/languages/esperanto.json
vendored
|
|
@ -1,18 +1,27 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
|
"accountNameRules": "Kontoj nomoj ne povas enhavi emoji aŭ aliajn specialajn signojn",
|
||||||
"accountProfileText": "(konta profilo)",
|
"accountProfileText": "(konta profilo)",
|
||||||
"accountsText": "Kontoj",
|
"accountsText": "Kontoj",
|
||||||
"achievementProgressText": "Atingoj: ${COUNT} el ${TOTAL}",
|
"achievementProgressText": "Atingoj: ${COUNT} el ${TOTAL}",
|
||||||
"campaignProgressText": "Kampanja progreso [malfacila]: ${PROGRESS}",
|
"campaignProgressText": "Kampanja progreso [malfacila]: ${PROGRESS}",
|
||||||
|
"changeOncePerSeason": "Vi povas ŝanĝi ĉi tion nur unufoje por sezono.",
|
||||||
|
"changeOncePerSeasonError": "Vi devas atendi ĝis la venonta sezono por ŝanĝi ĉi tion denove (${NUM} tagoj)",
|
||||||
"customName": "Adaptita nomo",
|
"customName": "Adaptita nomo",
|
||||||
"linkAccountsEnterCodeText": "Enigi kodon",
|
"linkAccountsEnterCodeText": "Enigi kodon",
|
||||||
|
"linkAccountsGenerateCodeText": "Generu Kodon",
|
||||||
|
"linkAccountsInfoText": "(dividu progreson tra malsamaj platformoj)",
|
||||||
|
"linkAccountsInstructionsNewText": "Por ligi du kontojn, generu kodon sur la unua\nkaj enigu tiun kodon sur la dua. Datumoj de la\ndua konto tiam estos dividita inter ambaŭ.\n(Datumoj de la unua konto estos perditaj)\n\nVi povas ligi ĝis ${COUNT} kontoj.\n\nGRAVA: nur ligu kontojn kiujn vi posedas;\nSe vi ligas kun la kontoj de amikoj, vi ne faros\npovi ludi interrete samtempe.",
|
||||||
"linkAccountsText": "Ligi kontojn",
|
"linkAccountsText": "Ligi kontojn",
|
||||||
"linkedAccountsText": "Ligitaj kontoj:",
|
"linkedAccountsText": "Ligitaj kontoj:",
|
||||||
|
"manageAccountText": "Administri Konton",
|
||||||
"nameChangeConfirm": "Ĉu redakti vian kontan nomon al ${NAME}?",
|
"nameChangeConfirm": "Ĉu redakti vian kontan nomon al ${NAME}?",
|
||||||
"notLoggedInText": "<ne ensalutita>",
|
"notLoggedInText": "<ne ensalutita>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Ĉi tio reigos vian kunlaboran progreson\nkaj lokajn plej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
"resetProgressConfirmNoAchievementsText": "Ĉi tio reigos vian kunlaboran progreson\nkaj lokajn plej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
||||||
"resetProgressConfirmText": "Ĉi tio reigos vian kunlaboran\nprogreson, atingojn kaj lokajn\nplej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
"resetProgressConfirmText": "Ĉi tio reigos vian kunlaboran\nprogreson, atingojn kaj lokajn\nplej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
||||||
"resetProgressText": "Reigi progreson",
|
"resetProgressText": "Reigi progreson",
|
||||||
|
"setAccountName": "Difini Konton Nomon",
|
||||||
|
"setAccountNameDesc": "Elektu la nomon por montri por via konto.\nVi povas uzi la nomon de unu el viaj ligitaj\nkontoj aŭ krei unikan kutiman nomon.",
|
||||||
"signInInfoText": "Ensalutu por konservi vian progreson\nen la nubon, gajni biletojn kaj\npartopreni en turniroj.",
|
"signInInfoText": "Ensalutu por konservi vian progreson\nen la nubon, gajni biletojn kaj\npartopreni en turniroj.",
|
||||||
"signInText": "Ensaluti",
|
"signInText": "Ensaluti",
|
||||||
"signInWithDeviceText": "Ensaluti per aparatkonto",
|
"signInWithDeviceText": "Ensaluti per aparatkonto",
|
||||||
|
|
|
||||||
28
dist/ba_data/data/languages/filipino.json
vendored
28
dist/ba_data/data/languages/filipino.json
vendored
|
|
@ -1,12 +1,13 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "Marapat na ang pangalan ng account na iyon ay walang mga special characters o mga emoji",
|
"accountNameRules": "Marapat na ang pangalan ng account na iyon ay walang mga special characters o mga emoji",
|
||||||
"accountsText": "Mga account",
|
"accountsText": "Mga Account",
|
||||||
"achievementProgressText": "Mga Nakamtan: ${COUNT} sa ${TOTAL}",
|
"achievementProgressText": "Mga Nakamtan: ${COUNT} sa ${TOTAL}",
|
||||||
"campaignProgressText": "Ang Progreso sa Laro [Mahirap]: ${PROGRESS}",
|
"campaignProgressText": "Ang Progreso sa Laro [Mahirap]: ${PROGRESS}",
|
||||||
"changeOncePerSeason": "Mapapalit mo lang ito isa-isa kada season",
|
"changeOncePerSeason": "Mapapalit mo lang ito isa-isa kada season",
|
||||||
"changeOncePerSeasonError": "Kailangan mo muna maghintay ng susunod na season para mapalitan ito. (${NUM} araw)",
|
"changeOncePerSeasonError": "Kailangan mo muna maghintay ng susunod na season para mapalitan ito. (${NUM} araw)",
|
||||||
"customName": "Custom na Pangalan",
|
"customName": "Custom na Pangalan",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Kung gusto mong gamitin ang iba ninyong Google Account,\nGumamit ka ng Google Play Games app upang maipalit.",
|
||||||
"linkAccountsEnterCodeText": "Ilagay ang Code",
|
"linkAccountsEnterCodeText": "Ilagay ang Code",
|
||||||
"linkAccountsGenerateCodeText": "Gumawa ng Code",
|
"linkAccountsGenerateCodeText": "Gumawa ng Code",
|
||||||
"linkAccountsInfoText": "(ibahagi ang pag-usad sa iba't ibang platform)",
|
"linkAccountsInfoText": "(ibahagi ang pag-usad sa iba't ibang platform)",
|
||||||
|
|
@ -14,7 +15,7 @@
|
||||||
"linkAccountsInstructionsText": "Para mag-ugnay ng dalawang account, gumawa ng code\nsa isa at ilagay ang code na iyon sa kabila.\nAng iyong pag-usad at imbentaryo ay pagsasamahin.\nMaaari mong i-ugnay hanggang sa ${COUNT} accounts.\n\nBabala lang; hindi na ito maibabalik!",
|
"linkAccountsInstructionsText": "Para mag-ugnay ng dalawang account, gumawa ng code\nsa isa at ilagay ang code na iyon sa kabila.\nAng iyong pag-usad at imbentaryo ay pagsasamahin.\nMaaari mong i-ugnay hanggang sa ${COUNT} accounts.\n\nBabala lang; hindi na ito maibabalik!",
|
||||||
"linkAccountsText": "Iugnay ang mga Account",
|
"linkAccountsText": "Iugnay ang mga Account",
|
||||||
"linkedAccountsText": "Naka-ugnay na mga Account",
|
"linkedAccountsText": "Naka-ugnay na mga Account",
|
||||||
"manageAccountText": "Patnubayan ang Account",
|
"manageAccountText": "I-Manage ang Account",
|
||||||
"nameChangeConfirm": "Baguhin ang pangalan ng iyong account sa ${NAME}?",
|
"nameChangeConfirm": "Baguhin ang pangalan ng iyong account sa ${NAME}?",
|
||||||
"resetProgressConfirmNoAchievementsText": "Ibabalik nito sa dati ang iyong pag-usad,\nat lokal na mga high-score (pwera sa ticket).\nHindi na ito maibabalik pa. Ipagpatuloy pa rin?",
|
"resetProgressConfirmNoAchievementsText": "Ibabalik nito sa dati ang iyong pag-usad,\nat lokal na mga high-score (pwera sa ticket).\nHindi na ito maibabalik pa. Ipagpatuloy pa rin?",
|
||||||
"resetProgressConfirmText": "Ibabalik nito sa dati ang iyong pag-usad,\nmga nakamtan, at lokal na mga high-score\n(pwera sa ticket). Hindi na ito maibabalik\npa. Ipagpatuloy pa rin?",
|
"resetProgressConfirmText": "Ibabalik nito sa dati ang iyong pag-usad,\nmga nakamtan, at lokal na mga high-score\n(pwera sa ticket). Hindi na ito maibabalik\npa. Ipagpatuloy pa rin?",
|
||||||
|
|
@ -38,6 +39,7 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Pumili ng account na i-uunlink",
|
"unlinkAccountsInstructionsText": "Pumili ng account na i-uunlink",
|
||||||
"unlinkAccountsText": "I-unlink ang mga accounts",
|
"unlinkAccountsText": "I-unlink ang mga accounts",
|
||||||
|
"unlinkLegacyV1AccountsText": "I-unlink ang mga Legacy (V1) Account",
|
||||||
"v2LinkInstructionsText": "Gamitin ang link na ito para gumawa ng account o mag sign in.",
|
"v2LinkInstructionsText": "Gamitin ang link na ito para gumawa ng account o mag sign in.",
|
||||||
"viaAccount": "(sa pamamagitan ng account ${NAME})",
|
"viaAccount": "(sa pamamagitan ng account ${NAME})",
|
||||||
"youAreSignedInAsText": "Nakasign-in ka bilang:"
|
"youAreSignedInAsText": "Nakasign-in ka bilang:"
|
||||||
|
|
@ -545,7 +547,9 @@
|
||||||
"deleteText": "Tanggalin",
|
"deleteText": "Tanggalin",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Tanggihan",
|
"denyText": "Tanggihan",
|
||||||
|
"deprecatedText": "Hindi Na Uso",
|
||||||
"desktopResText": "Desktop Res",
|
"desktopResText": "Desktop Res",
|
||||||
|
"deviceAccountUpgradeText": "Babala:\nNaka-sign in ka gamit ang isang device account (${NAME}).\nMawawala na yan sa kinakabukasang update.\nMag-upgrade sa isang V2 Account kung gusto mong panatilihin ang iyong pag-unlad.",
|
||||||
"difficultyEasyText": "Madali",
|
"difficultyEasyText": "Madali",
|
||||||
"difficultyHardOnlyText": "Mahirap Na Mode Lang",
|
"difficultyHardOnlyText": "Mahirap Na Mode Lang",
|
||||||
"difficultyHardText": "Mahirap",
|
"difficultyHardText": "Mahirap",
|
||||||
|
|
@ -676,8 +680,8 @@
|
||||||
"gamesToText": "${WINCOUNT} na laro sa ${LOSECOUNT}",
|
"gamesToText": "${WINCOUNT} na laro sa ${LOSECOUNT}",
|
||||||
"gatherWindow": {
|
"gatherWindow": {
|
||||||
"aboutDescriptionLocalMultiplayerExtraText": "Tandaan: anumang device sa isang party ay maaaring magkaroon ng higit pa\nkaysa sa isang manlalaro kung mayroon kang sapat na mga controller.",
|
"aboutDescriptionLocalMultiplayerExtraText": "Tandaan: anumang device sa isang party ay maaaring magkaroon ng higit pa\nkaysa sa isang manlalaro kung mayroon kang sapat na mga controller.",
|
||||||
"aboutDescriptionText": "Gamitin ang mga tab na ito para mag-assemble ng party.\n\nHinahayaan ka ng mga party na maglaro at mga paligsahan\nkasama ang iyong mga kaibigan sa iba't ibang device.\n\nGamitin ang ${PARTY} na button sa kanang tuktok upang\nmakipag-chat at makipag-ugnayan sa iyong partido.\n(sa isang controller, pindutin ang ${BUTTON} habang nasa isang menu)",
|
"aboutDescriptionText": "Gamitin ang mga tab na ito para mag-assemble ng party.\n\nPwede kang maglaro at mag paligsahan kasama ang iyong mga kaibigan sa \niba't ibang device sa pamamagitan ng “Party”.\n\nGamitin ang pindutin na ${PARTY} sa kanang tuktok upang\nmakipag-chat at makipag-ugnayan sa iyong partido.\n(sa isang controller, pindutin ang ${BUTTON} habang nasa isang menu)",
|
||||||
"aboutText": "About",
|
"aboutText": "Tungkulin",
|
||||||
"addressFetchErrorText": "<error sa pagkuha ng mga address>",
|
"addressFetchErrorText": "<error sa pagkuha ng mga address>",
|
||||||
"appInviteMessageText": "Pinadalhan ka ni ${NAME} ng ${COUNT} ticket sa ${APP_NAME}",
|
"appInviteMessageText": "Pinadalhan ka ni ${NAME} ng ${COUNT} ticket sa ${APP_NAME}",
|
||||||
"appInviteSendACodeText": "Mag-send ka sa Kanila ng Code",
|
"appInviteSendACodeText": "Mag-send ka sa Kanila ng Code",
|
||||||
|
|
@ -803,6 +807,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Pasensya na, hindi na available ang multiplayer na serbisyo ng Google.\nGumagawa ako ng kapalit sa lalong madaling panahon.\nHanggang doon, mangyaring sumubok ng ibang paraan ng koneksyon.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Pasensya na, hindi na available ang multiplayer na serbisyo ng Google.\nGumagawa ako ng kapalit sa lalong madaling panahon.\nHanggang doon, mangyaring sumubok ng ibang paraan ng koneksyon.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Hindi puwede ang mga pagbili sa Google Play nito.\nMaaaring kailanganin mong i-update ang iyong store app.",
|
"googlePlayPurchasesNotAvailableText": "Hindi puwede ang mga pagbili sa Google Play nito.\nMaaaring kailanganin mong i-update ang iyong store app.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Hindi available ang Google Play Services sa ngayon.\n‘Di magagana ang takbo ng ilang mga app.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Palagi",
|
"alwaysText": "Palagi",
|
||||||
|
|
@ -915,8 +920,8 @@
|
||||||
"kickIdlePlayersKickedText": "na-kicked si ${NAME} dahil sa pagiging idle.",
|
"kickIdlePlayersKickedText": "na-kicked si ${NAME} dahil sa pagiging idle.",
|
||||||
"kickIdlePlayersWarning1Text": "I-kikick si ${NAME} sa loob ng ${COUNT} (na) segundo kung idle pa rin.",
|
"kickIdlePlayersWarning1Text": "I-kikick si ${NAME} sa loob ng ${COUNT} (na) segundo kung idle pa rin.",
|
||||||
"kickIdlePlayersWarning2Text": "(maaari mong i-off ito sa Mga Setting -> Advanced)",
|
"kickIdlePlayersWarning2Text": "(maaari mong i-off ito sa Mga Setting -> Advanced)",
|
||||||
"leftGameText": "Umalis sa '${NAME}'.",
|
"leftGameText": "Umalis ka sa '${NAME}'.",
|
||||||
"leftPartyText": "Umalis sa party ni ${NAME}.",
|
"leftPartyText": "Umalis ka sa party ni ${NAME}.",
|
||||||
"noMusicFilesInFolderText": "Walang mga file ng musika ang folder.",
|
"noMusicFilesInFolderText": "Walang mga file ng musika ang folder.",
|
||||||
"playerJoinedPartyText": "Sumali si ${NAME} sa party mo!",
|
"playerJoinedPartyText": "Sumali si ${NAME} sa party mo!",
|
||||||
"playerLeftPartyText": "Umalis si ${NAME} sa party mo.",
|
"playerLeftPartyText": "Umalis si ${NAME} sa party mo.",
|
||||||
|
|
@ -1022,6 +1027,7 @@
|
||||||
"maxConnectionsText": "Max na Koneksyon",
|
"maxConnectionsText": "Max na Koneksyon",
|
||||||
"maxPartySizeText": "Max ng Pagdami ng Party",
|
"maxPartySizeText": "Max ng Pagdami ng Party",
|
||||||
"maxPlayersText": "Pagdami ng Mga Manlalaro",
|
"maxPlayersText": "Pagdami ng Mga Manlalaro",
|
||||||
|
"merchText": "Paninda!",
|
||||||
"modeArcadeText": "Arcade na Mode",
|
"modeArcadeText": "Arcade na Mode",
|
||||||
"modeClassicText": "Klasikong Mode",
|
"modeClassicText": "Klasikong Mode",
|
||||||
"modeDemoText": "Mode na Demo",
|
"modeDemoText": "Mode na Demo",
|
||||||
|
|
@ -1061,6 +1067,7 @@
|
||||||
"notSignedInErrorText": "Dapat kang mag-sign in para magawa ito.",
|
"notSignedInErrorText": "Dapat kang mag-sign in para magawa ito.",
|
||||||
"notSignedInGooglePlayErrorText": "Dapat kang mag-sign in gamit ang Google Play para magawa ito.",
|
"notSignedInGooglePlayErrorText": "Dapat kang mag-sign in gamit ang Google Play para magawa ito.",
|
||||||
"notSignedInText": "hindi naka-sign in",
|
"notSignedInText": "hindi naka-sign in",
|
||||||
|
"notUsingAccountText": "Note: hindi pinapansin ang account ng ${SERVICE}.\nPumunta sa 'Account -> Mag-sign in gamit ang ‘${SERVICE}' kung gusto mo itong gamitin.",
|
||||||
"nothingIsSelectedErrorText": "Walang napili!",
|
"nothingIsSelectedErrorText": "Walang napili!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Naka-Off",
|
"offText": "Naka-Off",
|
||||||
|
|
@ -1504,8 +1511,8 @@
|
||||||
"languages": {
|
"languages": {
|
||||||
"Arabic": "Arabe",
|
"Arabic": "Arabe",
|
||||||
"Belarussian": "Belaruso",
|
"Belarussian": "Belaruso",
|
||||||
"Chinese": "Tsino Na Pinasimple",
|
"Chinese": "Tsino",
|
||||||
"ChineseTraditional": "Intsik",
|
"ChineseTraditional": "Tsinong Tradisyonal",
|
||||||
"Croatian": "Kroatyano",
|
"Croatian": "Kroatyano",
|
||||||
"Czech": "Tsek",
|
"Czech": "Tsek",
|
||||||
"Danish": "Makadenmark",
|
"Danish": "Makadenmark",
|
||||||
|
|
@ -1516,7 +1523,7 @@
|
||||||
"Finnish": "Finnish",
|
"Finnish": "Finnish",
|
||||||
"French": "Pranses",
|
"French": "Pranses",
|
||||||
"German": "Aleman",
|
"German": "Aleman",
|
||||||
"Gibberish": "Pagyayapyap",
|
"Gibberish": "Walang Kwentang Linguahe",
|
||||||
"Greek": "Griyego",
|
"Greek": "Griyego",
|
||||||
"Hindi": "Indiyano",
|
"Hindi": "Indiyano",
|
||||||
"Hungarian": "Hanggaryan",
|
"Hungarian": "Hanggaryan",
|
||||||
|
|
@ -1524,6 +1531,7 @@
|
||||||
"Italian": "Italiyano",
|
"Italian": "Italiyano",
|
||||||
"Japanese": "Nippongo",
|
"Japanese": "Nippongo",
|
||||||
"Korean": "Koreano",
|
"Korean": "Koreano",
|
||||||
|
"Malay": "Malay",
|
||||||
"Persian": "Persyano",
|
"Persian": "Persyano",
|
||||||
"Polish": "Polish",
|
"Polish": "Polish",
|
||||||
"Portuguese": "Portuges",
|
"Portuguese": "Portuges",
|
||||||
|
|
@ -1805,6 +1813,7 @@
|
||||||
"useDefaultText": "Gamitin ang default",
|
"useDefaultText": "Gamitin ang default",
|
||||||
"usesExternalControllerText": "Gumagamit ang larong ito ng external na controller para sa input.",
|
"usesExternalControllerText": "Gumagamit ang larong ito ng external na controller para sa input.",
|
||||||
"usingItunesText": "Paggamit ng Music App para sa soundtrack...",
|
"usingItunesText": "Paggamit ng Music App para sa soundtrack...",
|
||||||
|
"v2AccountLinkingInfoText": "Upang ma-link ang mga V2 account mo, dumeretso ka sa “I-Manage ang Account“.",
|
||||||
"validatingTestBuildText": "Pinapatunayan ang Test Build...",
|
"validatingTestBuildText": "Pinapatunayan ang Test Build...",
|
||||||
"victoryText": "Panalo!",
|
"victoryText": "Panalo!",
|
||||||
"voteDelayText": "Hindi ka makapagsimula ng bagong botohan sa ${NUMBER} segundo",
|
"voteDelayText": "Hindi ka makapagsimula ng bagong botohan sa ${NUMBER} segundo",
|
||||||
|
|
@ -1837,6 +1846,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Kaway",
|
"waveText": "Kaway",
|
||||||
"wellSureText": "Oo Syempre!",
|
"wellSureText": "Oo Syempre!",
|
||||||
|
"whatIsThisText": "Ano ito?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Copyright ni DarwiinRemote"
|
"titleText": "Copyright ni DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/french.json
vendored
10
dist/ba_data/data/languages/french.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Vous ne pouvez changer cela qu'une fois par saison.",
|
"changeOncePerSeason": "Vous ne pouvez changer cela qu'une fois par saison.",
|
||||||
"changeOncePerSeasonError": "Vous devez attendre la prochaine saison pour le modifier à nouveau (${NUM} jours)",
|
"changeOncePerSeasonError": "Vous devez attendre la prochaine saison pour le modifier à nouveau (${NUM} jours)",
|
||||||
"customName": "Nom personnalisé",
|
"customName": "Nom personnalisé",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Si vous voulez utiliser un autre compte Google, \nutilisez l'application Google Play Games pour le changer.",
|
||||||
"linkAccountsEnterCodeText": "Entrer code",
|
"linkAccountsEnterCodeText": "Entrer code",
|
||||||
"linkAccountsGenerateCodeText": "Générez votre code",
|
"linkAccountsGenerateCodeText": "Générez votre code",
|
||||||
"linkAccountsInfoText": "(partager la progression entre différentes plateformes)",
|
"linkAccountsInfoText": "(partager la progression entre différentes plateformes)",
|
||||||
|
|
@ -43,6 +44,7 @@
|
||||||
"titleText": "Compte",
|
"titleText": "Compte",
|
||||||
"unlinkAccountsInstructionsText": "Sélectionnez un compte à délier",
|
"unlinkAccountsInstructionsText": "Sélectionnez un compte à délier",
|
||||||
"unlinkAccountsText": "Délier des comptes",
|
"unlinkAccountsText": "Délier des comptes",
|
||||||
|
"unlinkLegacyV1AccountsText": "Dissocier les anciens comptes (V1)",
|
||||||
"v2LinkInstructionsText": "Utiliser ce lien pour créer un compte ou se connecter.",
|
"v2LinkInstructionsText": "Utiliser ce lien pour créer un compte ou se connecter.",
|
||||||
"viaAccount": "(via le compte ${NAME})",
|
"viaAccount": "(via le compte ${NAME})",
|
||||||
"youAreLoggedInAsText": "Vous êtes connecté en temps que :",
|
"youAreLoggedInAsText": "Vous êtes connecté en temps que :",
|
||||||
|
|
@ -565,7 +567,9 @@
|
||||||
"deleteText": "Supprimer",
|
"deleteText": "Supprimer",
|
||||||
"demoText": "Démo",
|
"demoText": "Démo",
|
||||||
"denyText": "Refuser",
|
"denyText": "Refuser",
|
||||||
|
"deprecatedText": "Obsolète",
|
||||||
"desktopResText": "Résolution de l'Ordinateur",
|
"desktopResText": "Résolution de l'Ordinateur",
|
||||||
|
"deviceAccountUpgradeText": "Avertissement:\nVous etes connecté avec un compte d'appareil (${NAME}).\nLes comptes d'appareils seront enlevés dans une future mise à jour.\nMettez à jour vers un compte V2 si vous voulez garder votre progression.",
|
||||||
"difficultyEasyText": "Facile",
|
"difficultyEasyText": "Facile",
|
||||||
"difficultyHardOnlyText": "Mode Difficile Seulement",
|
"difficultyHardOnlyText": "Mode Difficile Seulement",
|
||||||
"difficultyHardText": "Difficile",
|
"difficultyHardText": "Difficile",
|
||||||
|
|
@ -844,6 +848,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Désolé, le service multijoueur de Google n'est plus disponible.\nJe travaille sur un moyen de le remplacer aussi vite que possible.\nEn attendant, veuillez essayer une nouvelle méthode de connexion.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Désolé, le service multijoueur de Google n'est plus disponible.\nJe travaille sur un moyen de le remplacer aussi vite que possible.\nEn attendant, veuillez essayer une nouvelle méthode de connexion.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Les achats Google Play ne sont pas disponibles.\nVous avez peut-être besoin de mettre à jour votre Google play",
|
"googlePlayPurchasesNotAvailableText": "Les achats Google Play ne sont pas disponibles.\nVous avez peut-être besoin de mettre à jour votre Google play",
|
||||||
|
"googlePlayServicesNotAvailableText": "Les services Google Play sont indisponibles.\nCertaines fonctions de l'application peuvent être désactivées.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Toujours",
|
"alwaysText": "Toujours",
|
||||||
|
|
@ -1078,6 +1083,7 @@
|
||||||
"maxConnectionsText": "Limite de Connexions",
|
"maxConnectionsText": "Limite de Connexions",
|
||||||
"maxPartySizeText": "Maximum Participants",
|
"maxPartySizeText": "Maximum Participants",
|
||||||
"maxPlayersText": "Joueurs Max",
|
"maxPlayersText": "Joueurs Max",
|
||||||
|
"merchText": "Boutique!",
|
||||||
"modeArcadeText": "Mode Arcade",
|
"modeArcadeText": "Mode Arcade",
|
||||||
"modeClassicText": "Mode classique",
|
"modeClassicText": "Mode classique",
|
||||||
"modeDemoText": "Mode Demo",
|
"modeDemoText": "Mode Demo",
|
||||||
|
|
@ -1119,6 +1125,7 @@
|
||||||
"notSignedInErrorText": "Vous devez vous connecter pour faire ceci.",
|
"notSignedInErrorText": "Vous devez vous connecter pour faire ceci.",
|
||||||
"notSignedInGooglePlayErrorText": "Vous devez vous connecter avec Google Play pour faire ceci.",
|
"notSignedInGooglePlayErrorText": "Vous devez vous connecter avec Google Play pour faire ceci.",
|
||||||
"notSignedInText": "pas connecté",
|
"notSignedInText": "pas connecté",
|
||||||
|
"notUsingAccountText": "Note: ignorer le compte ${SERVICE}.\nAllez à 'Compte -> Connectez-vous avec ${SERVICE}' si vous voulons le utiliser.",
|
||||||
"nothingIsSelectedErrorText": "Rien n'est sélectionné!",
|
"nothingIsSelectedErrorText": "Rien n'est sélectionné!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Désactivé",
|
"offText": "Désactivé",
|
||||||
|
|
@ -1618,6 +1625,7 @@
|
||||||
"Italian": "Italien",
|
"Italian": "Italien",
|
||||||
"Japanese": "Japonais",
|
"Japanese": "Japonais",
|
||||||
"Korean": "Coréen",
|
"Korean": "Coréen",
|
||||||
|
"Malay": "Malais",
|
||||||
"Persian": "Persan",
|
"Persian": "Persan",
|
||||||
"Polish": "Polonais",
|
"Polish": "Polonais",
|
||||||
"Portuguese": "Portugais",
|
"Portuguese": "Portugais",
|
||||||
|
|
@ -1908,6 +1916,7 @@
|
||||||
"usesExternalControllerText": "Ce jeu utilise un contrôleur externe pour l'input.",
|
"usesExternalControllerText": "Ce jeu utilise un contrôleur externe pour l'input.",
|
||||||
"usingItunesText": "Utilisez Music App pour la bande-son...",
|
"usingItunesText": "Utilisez Music App pour la bande-son...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Vérifiez que 'Lecture Aléatoire'='ACTIF' et 'Reprise'='TOUT' dans iTunes.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Vérifiez que 'Lecture Aléatoire'='ACTIF' et 'Reprise'='TOUT' dans iTunes.",
|
||||||
|
"v2AccountLinkingInfoText": "Pour lier des comptes V2, utilisez le bouton 'Gérer compte'.",
|
||||||
"validatingBetaText": "Validation de la beta...",
|
"validatingBetaText": "Validation de la beta...",
|
||||||
"validatingTestBuildText": "Validation de la Version Test...",
|
"validatingTestBuildText": "Validation de la Version Test...",
|
||||||
"victoryText": "Victoire!",
|
"victoryText": "Victoire!",
|
||||||
|
|
@ -1942,6 +1951,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Vague",
|
"waveText": "Vague",
|
||||||
"wellSureText": "Bien Sûr!",
|
"wellSureText": "Bien Sûr!",
|
||||||
|
"whatIsThisText": "C'est quoi ça?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
23
dist/ba_data/data/languages/german.json
vendored
23
dist/ba_data/data/languages/german.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Du kannst dies nur einmal pro Saison ändern.",
|
"changeOncePerSeason": "Du kannst dies nur einmal pro Saison ändern.",
|
||||||
"changeOncePerSeasonError": "Du musst warten bis du das wieder in der nächsten Saison ändern kannst. (${NUM} Tage)",
|
"changeOncePerSeasonError": "Du musst warten bis du das wieder in der nächsten Saison ändern kannst. (${NUM} Tage)",
|
||||||
"customName": "Benutzerdefinierter Name",
|
"customName": "Benutzerdefinierter Name",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Wenn Sie ein anderes Google-Konto verwenden möchten,\nVerwenden Sie die Google Play Games-App, um zu wechseln.",
|
||||||
"linkAccountsEnterCodeText": "Code eingeben",
|
"linkAccountsEnterCodeText": "Code eingeben",
|
||||||
"linkAccountsGenerateCodeText": "Code generieren",
|
"linkAccountsGenerateCodeText": "Code generieren",
|
||||||
"linkAccountsInfoText": "(Teile deine Erfolge über verschiedene Platformen)",
|
"linkAccountsInfoText": "(Teile deine Erfolge über verschiedene Platformen)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "Um zwei Accounts miteinander zu verknüpfen,generiere einen \nCode auf einem der Geräte und trage ihn auf dem anderen ein.\nFortschritt und Inventar werden kombiniert.\nDu kannst bis zu ${COUNT} Accounts miteinander verknüpfen.\n\nSei vorsichtig; das kann nicht rückgängig gemacht werden!",
|
"linkAccountsInstructionsText": "Um zwei Accounts miteinander zu verknüpfen,generiere einen \nCode auf einem der Geräte und trage ihn auf dem anderen ein.\nFortschritt und Inventar werden kombiniert.\nDu kannst bis zu ${COUNT} Accounts miteinander verknüpfen.\n\nSei vorsichtig; das kann nicht rückgängig gemacht werden!",
|
||||||
"linkAccountsText": "Konten verknüpfen",
|
"linkAccountsText": "Konten verknüpfen",
|
||||||
"linkedAccountsText": "Verknüpfte Konten:",
|
"linkedAccountsText": "Verknüpfte Konten:",
|
||||||
|
"manageAccountText": "Konto verwalten",
|
||||||
"nameChangeConfirm": "Möchtest du deinen Konto Namen in ${NAME} ändern?",
|
"nameChangeConfirm": "Möchtest du deinen Konto Namen in ${NAME} ändern?",
|
||||||
"notLoggedInText": "<nicht eingeloggt>",
|
"notLoggedInText": "<nicht eingeloggt>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Das wird deinen Koop-Fortschritt und deine\nHigh-Scores zurücksetzen (aber nicht deine Tickets).\nDies kann nicht rückgängig gemacht werden. Bist du sicher?",
|
"resetProgressConfirmNoAchievementsText": "Das wird deinen Koop-Fortschritt und deine\nHigh-Scores zurücksetzen (aber nicht deine Tickets).\nDies kann nicht rückgängig gemacht werden. Bist du sicher?",
|
||||||
|
|
@ -42,6 +44,7 @@
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Wähle ein Konto aus um die Verknüpfung zu trennen",
|
"unlinkAccountsInstructionsText": "Wähle ein Konto aus um die Verknüpfung zu trennen",
|
||||||
"unlinkAccountsText": "Kontos entknüpfen",
|
"unlinkAccountsText": "Kontos entknüpfen",
|
||||||
|
"unlinkLegacyV1AccountsText": "Heben Sie die Verknüpfung von Legacy-Konten (V1) auf",
|
||||||
"v2LinkInstructionsText": "Benutze diesen Link um einen Account zu erstellen oder dich einzuloggen.",
|
"v2LinkInstructionsText": "Benutze diesen Link um einen Account zu erstellen oder dich einzuloggen.",
|
||||||
"viaAccount": "(über das Konto ${NAME})",
|
"viaAccount": "(über das Konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Du bist eingeloggt als:",
|
"youAreLoggedInAsText": "Du bist eingeloggt als:",
|
||||||
|
|
@ -573,7 +576,9 @@
|
||||||
"deleteText": "Löschen",
|
"deleteText": "Löschen",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Verweigern",
|
"denyText": "Verweigern",
|
||||||
|
"deprecatedText": "Veraltet",
|
||||||
"desktopResText": "Desktop Auflösung",
|
"desktopResText": "Desktop Auflösung",
|
||||||
|
"deviceAccountUpgradeText": "Achtung:\nDu bist mit einem Gerät-Konto angemeldet (${NAME}).\nGerät-Konten werden in einem kommendem Update entfernt.\nVerbessere zu einem V2 Konto, wenn du deinen Fortschritt behalten willst.",
|
||||||
"difficultyEasyText": "Leicht",
|
"difficultyEasyText": "Leicht",
|
||||||
"difficultyHardOnlyText": "Nur auf Schwer",
|
"difficultyHardOnlyText": "Nur auf Schwer",
|
||||||
"difficultyHardText": "Schwer",
|
"difficultyHardText": "Schwer",
|
||||||
|
|
@ -852,6 +857,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Sorry, Googles Multiplayerservice ist nicht länger verfügbar.\nIch arbeite so schnell wie möglich an einem Ersatz.\nBis dahin, versuche bitte eine andere Verbindungsmethode.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Sorry, Googles Multiplayerservice ist nicht länger verfügbar.\nIch arbeite so schnell wie möglich an einem Ersatz.\nBis dahin, versuche bitte eine andere Verbindungsmethode.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google Play-Käufe sind nicht verfügbar.\nMöglicherweise müssen Sie Ihre Store-App aktualisieren.",
|
"googlePlayPurchasesNotAvailableText": "Google Play-Käufe sind nicht verfügbar.\nMöglicherweise müssen Sie Ihre Store-App aktualisieren.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play-Dienste sind nicht verfügbar.\nEinige App-Funktionen sind möglicherweise deaktiviert.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Immer",
|
"alwaysText": "Immer",
|
||||||
|
|
@ -1074,6 +1080,7 @@
|
||||||
"creditsText": "Credits",
|
"creditsText": "Credits",
|
||||||
"demoMenuText": "Demo Menü",
|
"demoMenuText": "Demo Menü",
|
||||||
"endGameText": "Spiel beenden",
|
"endGameText": "Spiel beenden",
|
||||||
|
"endTestText": "Test beenden",
|
||||||
"exitGameText": "Spiel verlassen",
|
"exitGameText": "Spiel verlassen",
|
||||||
"exitToMenuText": "Zurück zum Menü?",
|
"exitToMenuText": "Zurück zum Menü?",
|
||||||
"howToPlayText": "Anleitung",
|
"howToPlayText": "Anleitung",
|
||||||
|
|
@ -1094,6 +1101,7 @@
|
||||||
"maxConnectionsText": "Maximale Anzahl verbundener Geräte",
|
"maxConnectionsText": "Maximale Anzahl verbundener Geräte",
|
||||||
"maxPartySizeText": "Maximale Gruppengröße",
|
"maxPartySizeText": "Maximale Gruppengröße",
|
||||||
"maxPlayersText": "Maximale Spielerzahl",
|
"maxPlayersText": "Maximale Spielerzahl",
|
||||||
|
"merchText": "Fanartikel!",
|
||||||
"modeArcadeText": "Arcade-Modus",
|
"modeArcadeText": "Arcade-Modus",
|
||||||
"modeClassicText": "Klassischer Modus",
|
"modeClassicText": "Klassischer Modus",
|
||||||
"modeDemoText": "Demo Modus",
|
"modeDemoText": "Demo Modus",
|
||||||
|
|
@ -1135,6 +1143,7 @@
|
||||||
"notSignedInErrorText": "Du musst dich hierfür einloggen.",
|
"notSignedInErrorText": "Du musst dich hierfür einloggen.",
|
||||||
"notSignedInGooglePlayErrorText": "Hierfür musst du dich mit Google Play anmelden",
|
"notSignedInGooglePlayErrorText": "Hierfür musst du dich mit Google Play anmelden",
|
||||||
"notSignedInText": "Nicht angemeldet",
|
"notSignedInText": "Nicht angemeldet",
|
||||||
|
"notUsingAccountText": "Achtung: ${SERVICE} Konto wird ignoriert.\nGehe zu 'Konto -> Mit ${SERVICE} anmelden', wenn du es benutzen willst.",
|
||||||
"nothingIsSelectedErrorText": "Nichts ausgewählt!",
|
"nothingIsSelectedErrorText": "Nichts ausgewählt!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Aus",
|
"offText": "Aus",
|
||||||
|
|
@ -1198,7 +1207,11 @@
|
||||||
"pleaseWaitText": "Bitte warte...",
|
"pleaseWaitText": "Bitte warte...",
|
||||||
"pluginClassLoadErrorText": "Fehler beim laden der plugin class '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Fehler beim laden der plugin class '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Fehler beim einleiten des plugins '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Fehler beim einleiten des plugins '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Plugin Einstellungen",
|
||||||
|
"pluginsAutoEnableNewText": "Aktiviere neue Plugins automatisch",
|
||||||
"pluginsDetectedText": "Neue Plugins erkannt. Neustarten, um sie zu aktivieren oder in den Einstellungen konfigurieren.",
|
"pluginsDetectedText": "Neue Plugins erkannt. Neustarten, um sie zu aktivieren oder in den Einstellungen konfigurieren.",
|
||||||
|
"pluginsDisableAllText": "Deaktiviere alle Plugins",
|
||||||
|
"pluginsEnableAllText": "Aktiviere alle Plugins",
|
||||||
"pluginsRemovedText": "${NUM} plugin(s) wurden nicht mehr gefunden.",
|
"pluginsRemovedText": "${NUM} plugin(s) wurden nicht mehr gefunden.",
|
||||||
"pluginsText": "Plugins",
|
"pluginsText": "Plugins",
|
||||||
"practiceText": "Übung",
|
"practiceText": "Übung",
|
||||||
|
|
@ -1345,6 +1358,7 @@
|
||||||
"netTestingText": "Netzwerk Tests",
|
"netTestingText": "Netzwerk Tests",
|
||||||
"resetText": "Zurücksetzen",
|
"resetText": "Zurücksetzen",
|
||||||
"showBombTrajectoriesText": "Zeige die Bomben-Flugbahn",
|
"showBombTrajectoriesText": "Zeige die Bomben-Flugbahn",
|
||||||
|
"showInGamePingText": "Zeige Ping im Spiel",
|
||||||
"showPlayerNamesText": "Zeige Spielernamen",
|
"showPlayerNamesText": "Zeige Spielernamen",
|
||||||
"showUserModsText": "Zeige Mods-Ordner",
|
"showUserModsText": "Zeige Mods-Ordner",
|
||||||
"titleText": "Erweitert",
|
"titleText": "Erweitert",
|
||||||
|
|
@ -1405,10 +1419,10 @@
|
||||||
"holidaySpecialText": "Ferien Spezial",
|
"holidaySpecialText": "Ferien Spezial",
|
||||||
"howToSwitchCharactersText": "(Gehe zu \"${SETTINGS} -> ${PLAYER_PROFILES}\" um deine Charactere zu bearbeiten)",
|
"howToSwitchCharactersText": "(Gehe zu \"${SETTINGS} -> ${PLAYER_PROFILES}\" um deine Charactere zu bearbeiten)",
|
||||||
"howToUseIconsText": "(Erstelle öffentliche Spieler Profile (im Account Fenster), um diese zu benutzen.)",
|
"howToUseIconsText": "(Erstelle öffentliche Spieler Profile (im Account Fenster), um diese zu benutzen.)",
|
||||||
"howToUseMapsText": "(Benutze diese Mappen in deinen eigenen Teams/Frei-für-alle Playlisten)",
|
"howToUseMapsText": "(Benutze diese Karten in deinen eigenen Teams/Frei-für-alle Playlisten)",
|
||||||
"iconsText": "Symbole",
|
"iconsText": "Symbole",
|
||||||
"loadErrorText": "Seite kann nicht geladen werden.\nÜberprüfe deine Internetverbindung.",
|
"loadErrorText": "Seite kann nicht geladen werden.\nÜberprüfe deine Internetverbindung.",
|
||||||
"loadingText": "laden",
|
"loadingText": "lade",
|
||||||
"mapsText": "Karten",
|
"mapsText": "Karten",
|
||||||
"miniGamesText": "MiniSpiele",
|
"miniGamesText": "MiniSpiele",
|
||||||
"oneTimeOnlyText": "(einmalig)",
|
"oneTimeOnlyText": "(einmalig)",
|
||||||
|
|
@ -1461,7 +1475,7 @@
|
||||||
"titleVRText": "BombSquad VR",
|
"titleVRText": "BombSquad VR",
|
||||||
"topFriendsText": "Top Freunde",
|
"topFriendsText": "Top Freunde",
|
||||||
"tournamentCheckingStateText": "Überprüfe Turnier Status; Bitte warten...",
|
"tournamentCheckingStateText": "Überprüfe Turnier Status; Bitte warten...",
|
||||||
"tournamentEndedText": "Dieses Turnier ist zu Ende. Ein neues startet bald.",
|
"tournamentEndedText": "Dieses Turnier ist zu Ende. Ein Neues startet bald.",
|
||||||
"tournamentEntryText": "Turnier beitreten",
|
"tournamentEntryText": "Turnier beitreten",
|
||||||
"tournamentResultsRecentText": "Neueste Turnierergebnisse",
|
"tournamentResultsRecentText": "Neueste Turnierergebnisse",
|
||||||
"tournamentStandingsText": "Tournier Tabelle",
|
"tournamentStandingsText": "Tournier Tabelle",
|
||||||
|
|
@ -1639,6 +1653,7 @@
|
||||||
"Italian": "Italienisch",
|
"Italian": "Italienisch",
|
||||||
"Japanese": "Japanisch",
|
"Japanese": "Japanisch",
|
||||||
"Korean": "Koreanisch",
|
"Korean": "Koreanisch",
|
||||||
|
"Malay": "Malaiisch",
|
||||||
"Persian": "Persisch",
|
"Persian": "Persisch",
|
||||||
"Polish": "Polnisch",
|
"Polish": "Polnisch",
|
||||||
"Portuguese": "Portugiesisch",
|
"Portuguese": "Portugiesisch",
|
||||||
|
|
@ -1929,6 +1944,7 @@
|
||||||
"usesExternalControllerText": "Das Spiel nutzt einen externen Controller für die Eingaben.",
|
"usesExternalControllerText": "Das Spiel nutzt einen externen Controller für die Eingaben.",
|
||||||
"usingItunesText": "benutze Musik-App für Hintergrundmusik...",
|
"usingItunesText": "benutze Musik-App für Hintergrundmusik...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Stelle sicher, dass iTunes ZUFÄLLIG wiedergibt und ALLE wiederholt.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Stelle sicher, dass iTunes ZUFÄLLIG wiedergibt und ALLE wiederholt.",
|
||||||
|
"v2AccountLinkingInfoText": "Um V2 Kontos zu verknüpfen, benutze den 'Konto Verwalten' Knopf.",
|
||||||
"validatingBetaText": "Verifizieren der Beta...",
|
"validatingBetaText": "Verifizieren der Beta...",
|
||||||
"validatingTestBuildText": "Bestätige Testversion...",
|
"validatingTestBuildText": "Bestätige Testversion...",
|
||||||
"victoryText": "Sieg!",
|
"victoryText": "Sieg!",
|
||||||
|
|
@ -1963,6 +1979,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Welle",
|
"waveText": "Welle",
|
||||||
"wellSureText": "Natürlich!",
|
"wellSureText": "Natürlich!",
|
||||||
|
"whatIsThisText": "Was ist das?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"licenseText": "Copyright (c) 2007, DarwiinRemote Team\nAll rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or other\n materials provided with the distribution.\n3. Neither the name of this project nor the names of its contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.",
|
"licenseText": "Copyright (c) 2007, DarwiinRemote Team\nAll rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or other\n materials provided with the distribution.\n3. Neither the name of this project nor the names of its contributors may be used to\n endorse or promote products derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.",
|
||||||
"licenseTextScale": 0.62,
|
"licenseTextScale": 0.62,
|
||||||
|
|
|
||||||
15
dist/ba_data/data/languages/gibberish.json
vendored
15
dist/ba_data/data/languages/gibberish.json
vendored
|
|
@ -10,6 +10,7 @@
|
||||||
"changeOncePerSeasonError": "You cows ow woefj woifjwo ec oweo fowijf owiejf (${NUM} cowefwe)",
|
"changeOncePerSeasonError": "You cows ow woefj woifjwo ec oweo fowijf owiejf (${NUM} cowefwe)",
|
||||||
"customName": "Cow oj wojNaoa",
|
"customName": "Cow oj wojNaoa",
|
||||||
"deviceSpecificAccountText": "Crrlzfjowf uznfl a divwfo-zpijfwo ancnfo ${NAME}",
|
"deviceSpecificAccountText": "Crrlzfjowf uznfl a divwfo-zpijfwo ancnfo ${NAME}",
|
||||||
|
"googlePlayGamesAccountSwitchText": "If cows objc aw;eoifjw efoGoogl coweijwoejr,\nOc wore aero two cw oerjwoer jo gw spoeor.",
|
||||||
"linkAccountsEnterCodeText": "Enrlr Cfdsz",
|
"linkAccountsEnterCodeText": "Enrlr Cfdsz",
|
||||||
"linkAccountsGenerateCodeText": "Gncowf CFdzz",
|
"linkAccountsGenerateCodeText": "Gncowf CFdzz",
|
||||||
"linkAccountsInfoText": "(fwoco par owcj woef oac we paoi oijof)",
|
"linkAccountsInfoText": "(fwoco par owcj woef oac we paoi oijof)",
|
||||||
|
|
@ -45,6 +46,7 @@
|
||||||
"titleText": "Acnfnnz",
|
"titleText": "Acnfnnz",
|
||||||
"unlinkAccountsInstructionsText": "Slj cwefjwe f owcjwoeijowief",
|
"unlinkAccountsInstructionsText": "Slj cwefjwe f owcjwoeijowief",
|
||||||
"unlinkAccountsText": "Uldfj owjowerjsr",
|
"unlinkAccountsText": "Uldfj owjowerjsr",
|
||||||
|
"unlinkLegacyV1AccountsText": "Unkind filcher (V1) Acosdf",
|
||||||
"v2LinkInstructionsText": "Usdl ow cweoroe arc o woij erode cowefoweirjewr sers.",
|
"v2LinkInstructionsText": "Usdl ow cweoroe arc o woij erode cowefoweirjewr sers.",
|
||||||
"viaAccount": "(fc cowefjwef ${NAME})",
|
"viaAccount": "(fc cowefjwef ${NAME})",
|
||||||
"youAreLoggedInAsText": "Yzrl arz lgzffd iz az:",
|
"youAreLoggedInAsText": "Yzrl arz lgzffd iz az:",
|
||||||
|
|
@ -576,7 +578,9 @@
|
||||||
"deleteText": "Deferf",
|
"deleteText": "Deferf",
|
||||||
"demoText": "Dmfwef",
|
"demoText": "Dmfwef",
|
||||||
"denyText": "Dénziy",
|
"denyText": "Dénziy",
|
||||||
|
"deprecatedText": "Dowefowicjwer",
|
||||||
"desktopResText": "Dzlflfjz Rzflz",
|
"desktopResText": "Dzlflfjz Rzflz",
|
||||||
|
"deviceAccountUpgradeText": "Wowierj:\nWofiwj c weojfw duo wdjfo weir are(${NAME}).\nDowjc weowje r ofjowei fjwoeodjfowdofijwodfjf.\nUpeworwe coweoijwV2 ocwoe roweijroidjjfj owejowejd.",
|
||||||
"difficultyEasyText": "Ezrz",
|
"difficultyEasyText": "Ezrz",
|
||||||
"difficultyHardOnlyText": "Hrdf Mdd Onflz",
|
"difficultyHardOnlyText": "Hrdf Mdd Onflz",
|
||||||
"difficultyHardText": "Hrefz",
|
"difficultyHardText": "Hrefz",
|
||||||
|
|
@ -859,6 +863,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Sowoer Gojf wel wouwen weoioc long wf won.\nI wow oe wefwjr pif g wfpawouja c oeij fw ocjaoiejowr.\nUntil. cowier oa j fapefij cpoypt ao coonnec awoiery.\n-Ercff",
|
"googleMultiplayerDiscontinuedText": "Sowoer Gojf wel wouwen weoioc long wf won.\nI wow oe wefwjr pif g wfpawouja c oeij fw ocjaoiejowr.\nUntil. cowier oa j fapefij cpoypt ao coonnec awoiery.\n-Ercff",
|
||||||
"googlePlayPurchasesNotAvailableText": "Weofiiwj woe woerd wieofjwe\ncome foe rj eofiaj cpwoe jrowjer..dd",
|
"googlePlayPurchasesNotAvailableText": "Weofiiwj woe woerd wieofjwe\ncome foe rj eofiaj cpwoe jrowjer..dd",
|
||||||
|
"googlePlayServicesNotAvailableText": "GOowf cpw ef A coweij woerj.\nWomb woof cape wgwoijc we coowiejrerdss.",
|
||||||
"googlePlayText": "Gzzggl Plzz",
|
"googlePlayText": "Gzzggl Plzz",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Azlwáys",
|
"alwaysText": "Azlwáys",
|
||||||
|
|
@ -1103,6 +1108,7 @@
|
||||||
"maxConnectionsText": "Mc COnoweijwer",
|
"maxConnectionsText": "Mc COnoweijwer",
|
||||||
"maxPartySizeText": "McCoy cpweo fwocwoef",
|
"maxPartySizeText": "McCoy cpweo fwocwoef",
|
||||||
"maxPlayersText": "Mx Plweffz",
|
"maxPlayersText": "Mx Plweffz",
|
||||||
|
"merchText": "Mower!",
|
||||||
"modeArcadeText": "Aroc Mofwfz",
|
"modeArcadeText": "Aroc Mofwfz",
|
||||||
"modeClassicText": "Cjwofej mDofd",
|
"modeClassicText": "Cjwofej mDofd",
|
||||||
"modeDemoText": "Dfwocij Mmdff",
|
"modeDemoText": "Dfwocij Mmdff",
|
||||||
|
|
@ -1144,6 +1150,7 @@
|
||||||
"notSignedInErrorText": "Yz mst bz snginf intof yrrz accnt tz dz thzz.",
|
"notSignedInErrorText": "Yz mst bz snginf intof yrrz accnt tz dz thzz.",
|
||||||
"notSignedInGooglePlayErrorText": "Ym fij cow fj wo cowe toiw jcoj ojwoefj owi.",
|
"notSignedInGooglePlayErrorText": "Ym fij cow fj wo cowe toiw jcoj ojwoefj owi.",
|
||||||
"notSignedInText": "(nf cow eofw)",
|
"notSignedInText": "(nf cow eofw)",
|
||||||
|
"notUsingAccountText": "Wewoeirj: ncowe rower'${SERVICE}'.\nSniff fwefwef ${SERVICE} jogs cpwoeijr odfjowf.",
|
||||||
"nothingIsSelectedErrorText": "Nothflf iz seleftcetzd!",
|
"nothingIsSelectedErrorText": "Nothflf iz seleftcetzd!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Ófz",
|
"offText": "Ófz",
|
||||||
|
|
@ -1207,7 +1214,11 @@
|
||||||
"pleaseWaitText": "Poke focwoe fjowef.",
|
"pleaseWaitText": "Poke focwoe fjowef.",
|
||||||
"pluginClassLoadErrorText": "Erori cojflw cwoej woer erwe '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Erori cojflw cwoej woer erwe '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Error cowejwoer plugins ${PLUGIN}: ${ERROR}",
|
"pluginInitErrorText": "Error cowejwoer plugins ${PLUGIN}: ${ERROR}",
|
||||||
|
"pluginSettingsText": "Plwj coijordsfsddf.",
|
||||||
|
"pluginsAutoEnableNewText": "Auto f wow rjwo fipawgojsd",
|
||||||
"pluginsDetectedText": "Now cow rwoejcw. Wnewoiow rwepwot ghowcoweior weorjdfdfs.",
|
"pluginsDetectedText": "Now cow rwoejcw. Wnewoiow rwepwot ghowcoweior weorjdfdfs.",
|
||||||
|
"pluginsDisableAllText": "DIsdof All Cplgwerd",
|
||||||
|
"pluginsEnableAllText": "NEwoc wowed. Aplugiss.",
|
||||||
"pluginsRemovedText": "${NUM} powefjwj no legate fcwdf.",
|
"pluginsRemovedText": "${NUM} powefjwj no legate fcwdf.",
|
||||||
"pluginsText": "Plfzlfez",
|
"pluginsText": "Plfzlfez",
|
||||||
"practiceText": "Pcoifjzzz",
|
"practiceText": "Pcoifjzzz",
|
||||||
|
|
@ -1357,6 +1368,7 @@
|
||||||
"netTestingText": "Ntwkrz Tsstcg",
|
"netTestingText": "Ntwkrz Tsstcg",
|
||||||
"resetText": "Rsttz",
|
"resetText": "Rsttz",
|
||||||
"showBombTrajectoriesText": "Shzlz Bomf Tfwoejcwoefz",
|
"showBombTrajectoriesText": "Shzlz Bomf Tfwoejcwoefz",
|
||||||
|
"showInGamePingText": "Shoe o co fowl Png",
|
||||||
"showPlayerNamesText": "SHzlfjl Plzlrr Nmzlzlls",
|
"showPlayerNamesText": "SHzlfjl Plzlrr Nmzlzlls",
|
||||||
"showUserModsText": "Shzl Mdsz Fldlrz",
|
"showUserModsText": "Shzl Mdsz Fldlrz",
|
||||||
"titleText": "Advnafjfljdz",
|
"titleText": "Advnafjfljdz",
|
||||||
|
|
@ -1652,6 +1664,7 @@
|
||||||
"Italian": "Itzllfjssnn",
|
"Italian": "Itzllfjssnn",
|
||||||
"Japanese": "Jpndjsjzes",
|
"Japanese": "Jpndjsjzes",
|
||||||
"Korean": "Kornesnzn",
|
"Korean": "Kornesnzn",
|
||||||
|
"Malay": "FJwoerjjdf",
|
||||||
"Persian": "Psdfsdf",
|
"Persian": "Psdfsdf",
|
||||||
"Polish": "Pzlishz",
|
"Polish": "Pzlishz",
|
||||||
"Portuguese": "Portuguenejs",
|
"Portuguese": "Portuguenejs",
|
||||||
|
|
@ -1942,6 +1955,7 @@
|
||||||
"usesExternalControllerText": "Thz gjf coiwjef oif owicoiwefj owejf owejoojof",
|
"usesExternalControllerText": "Thz gjf coiwjef oif owicoiwefj owejf owejoojof",
|
||||||
"usingItunesText": "Ufwefw Mfwoef co ef srnweoicjowe...",
|
"usingItunesText": "Ufwefw Mfwoef co ef srnweoicjowe...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Plzelz mkdk srzlc shfflds isON anz andpreld is ALZ unz iTunes",
|
"usingItunesTurnRepeatAndShuffleOnText": "Plzelz mkdk srzlc shfflds isON anz andpreld is ALZ unz iTunes",
|
||||||
|
"v2AccountLinkingInfoText": "To ljeowirj V2 sojowe, use fo 'Mnawefw Acoiwo' bons.",
|
||||||
"validatingBetaText": "Válúdztíng Bztá...",
|
"validatingBetaText": "Válúdztíng Bztá...",
|
||||||
"validatingTestBuildText": "Vldfjdfoi jtese-bsdfasfd...",
|
"validatingTestBuildText": "Vldfjdfoi jtese-bsdfasfd...",
|
||||||
"victoryText": "Vúctzry!",
|
"victoryText": "Vúctzry!",
|
||||||
|
|
@ -1976,6 +1990,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Wávz",
|
"waveText": "Wávz",
|
||||||
"wellSureText": "Wélz Súre!",
|
"wellSureText": "Wélz Súre!",
|
||||||
|
"whatIsThisText": "Who come woeirjwf?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"licenseText": "Copyríght (c) 2007, DarwíínRúmotú Túam\nAll ríghtz rúzúrvúd.\n\n Rúdíztríbutíon and uzú ín zourcú and bínary formz, wíth or wíthout modífícatíon,\n arú púrmíttúd provídúd that thú followíng condítíonz arú mút:\n\n1. Rúdíztríbutíonz of zourcú codú muzt rútaín thú abovú copyríght notícú, thíz\n lízt of condítíonz and thú followíng dízclaímúr.\n2. Rúdíztríbutíonz ín bínary form muzt rúproducú thú abovú copyríght notícú, thíz\n lízt of condítíonz and thú followíng dízclaímúr ín thú documúntatíon and/or othúr\n matúríalz provídúd wíth thú díztríbutíon.\n3. Núíthúr thú namú of thíz projúct nor thú namúz of ítz contríbutorz may bú uzúd to\n úndorzú or promotú productz dúrívúd from thíz zoftwarú wíthout zpúcífíc príor\n wríttún púrmízzíon.\n\nTHÍZ ZOFTWARÚ ÍZ PROVÍDÚD BY THÚ COPYRÍGHT HOLDÚRZ AND CONTRÍBUTORZ \"AZ ÍZ\"\nAND ANY ÚXPRÚZZ OR ÍMPLÍÚD WARRANTÍÚZ, ÍNCLUDÍNG, BUT NOT LÍMÍTÚD TO, THÚ\nÍMPLÍÚD WARRANTÍÚZ OF MÚRCHANTABÍLÍTY AND FÍTNÚZZ FOR A PARTÍCULAR PURPOZÚ\nARÚ DÍZCLAÍMÚD. ÍN NO ÚVÚNT ZHALL THÚ COPYRÍGHT OWNÚR OR CONTRÍBUTORZ BÚ\nLÍABLÚ FOR ANY DÍRÚCT, ÍNDÍRÚCT, ÍNCÍDÚNTAL, ZPÚCÍAL, ÚXÚMPLARY, OR\nCONZÚQUÚNTÍAL DAMAGÚZ (ÍNCLUDÍNG, BUT NOT LÍMÍTÚD TO, PROCURÚMÚNT OF\n ZUBZTÍTUTÚ GOODZ OR ZÚRVÍCÚZ; LOZZ OF UZÚ, DATA, OR PROFÍTZ; OR BUZÍNÚZZ\nÍNTÚRRUPTÍON) HOWÚVÚR CAUZÚD AND ON ANY THÚORY OF LÍABÍLÍTY, WHÚTHÚR ÍN\nCONTRACT, ZTRÍCT LÍABÍLÍTY, OR TORT (ÍNCLUDÍNG NÚGLÍGÚNCÚ OR OTHÚRWÍZÚ)\nARÍZÍNG ÍN ANY WAY OUT OF THÚ UZÚ OF THÍZ ZOFTWARÚ, ÚVÚN ÍF ADVÍZÚD OF THÚ\nPOZZÍBÍLÍTY OF ZUCH DAMAGÚ.\n",
|
"licenseText": "Copyríght (c) 2007, DarwíínRúmotú Túam\nAll ríghtz rúzúrvúd.\n\n Rúdíztríbutíon and uzú ín zourcú and bínary formz, wíth or wíthout modífícatíon,\n arú púrmíttúd provídúd that thú followíng condítíonz arú mút:\n\n1. Rúdíztríbutíonz of zourcú codú muzt rútaín thú abovú copyríght notícú, thíz\n lízt of condítíonz and thú followíng dízclaímúr.\n2. Rúdíztríbutíonz ín bínary form muzt rúproducú thú abovú copyríght notícú, thíz\n lízt of condítíonz and thú followíng dízclaímúr ín thú documúntatíon and/or othúr\n matúríalz provídúd wíth thú díztríbutíon.\n3. Núíthúr thú namú of thíz projúct nor thú namúz of ítz contríbutorz may bú uzúd to\n úndorzú or promotú productz dúrívúd from thíz zoftwarú wíthout zpúcífíc príor\n wríttún púrmízzíon.\n\nTHÍZ ZOFTWARÚ ÍZ PROVÍDÚD BY THÚ COPYRÍGHT HOLDÚRZ AND CONTRÍBUTORZ \"AZ ÍZ\"\nAND ANY ÚXPRÚZZ OR ÍMPLÍÚD WARRANTÍÚZ, ÍNCLUDÍNG, BUT NOT LÍMÍTÚD TO, THÚ\nÍMPLÍÚD WARRANTÍÚZ OF MÚRCHANTABÍLÍTY AND FÍTNÚZZ FOR A PARTÍCULAR PURPOZÚ\nARÚ DÍZCLAÍMÚD. ÍN NO ÚVÚNT ZHALL THÚ COPYRÍGHT OWNÚR OR CONTRÍBUTORZ BÚ\nLÍABLÚ FOR ANY DÍRÚCT, ÍNDÍRÚCT, ÍNCÍDÚNTAL, ZPÚCÍAL, ÚXÚMPLARY, OR\nCONZÚQUÚNTÍAL DAMAGÚZ (ÍNCLUDÍNG, BUT NOT LÍMÍTÚD TO, PROCURÚMÚNT OF\n ZUBZTÍTUTÚ GOODZ OR ZÚRVÍCÚZ; LOZZ OF UZÚ, DATA, OR PROFÍTZ; OR BUZÍNÚZZ\nÍNTÚRRUPTÍON) HOWÚVÚR CAUZÚD AND ON ANY THÚORY OF LÍABÍLÍTY, WHÚTHÚR ÍN\nCONTRACT, ZTRÍCT LÍABÍLÍTY, OR TORT (ÍNCLUDÍNG NÚGLÍGÚNCÚ OR OTHÚRWÍZÚ)\nARÍZÍNG ÍN ANY WAY OUT OF THÚ UZÚ OF THÍZ ZOFTWARÚ, ÚVÚN ÍF ADVÍZÚD OF THÚ\nPOZZÍBÍLÍTY OF ZUCH DAMAGÚ.\n",
|
||||||
"licenseTextScale": 0.62,
|
"licenseTextScale": 0.62,
|
||||||
|
|
|
||||||
7
dist/ba_data/data/languages/greek.json
vendored
7
dist/ba_data/data/languages/greek.json
vendored
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "Μπορείτε να το αλλάξετε μόνο μία φορά ανά σεζόν.",
|
"changeOncePerSeason": "Μπορείτε να το αλλάξετε μόνο μία φορά ανά σεζόν.",
|
||||||
"changeOncePerSeasonError": "Πρέπει να περιμένετε μέχρι την επόμενη σεζόν για να το αλλάξετε ξανά (${NUM} days)",
|
"changeOncePerSeasonError": "Πρέπει να περιμένετε μέχρι την επόμενη σεζόν για να το αλλάξετε ξανά (${NUM} days)",
|
||||||
"customName": "Προσαρμοσμένο Όνομα",
|
"customName": "Προσαρμοσμένο Όνομα",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Αν θέλετε να χρησιμοποιείσετε έναν διφορετικό λογαριασμό Google,\nχρησιμοποιείστε την εφαρμογή Google Play Games γιανα αλλάξετε.",
|
||||||
"linkAccountsEnterCodeText": "Εισάγετε Κωδικό",
|
"linkAccountsEnterCodeText": "Εισάγετε Κωδικό",
|
||||||
"linkAccountsGenerateCodeText": "Δημιουργήστε Κωδικό",
|
"linkAccountsGenerateCodeText": "Δημιουργήστε Κωδικό",
|
||||||
"linkAccountsInfoText": "(Μοιραστείτε την πρόοδο ανάμεσα σε διάφορες πλατφόρμες)",
|
"linkAccountsInfoText": "(Μοιραστείτε την πρόοδο ανάμεσα σε διάφορες πλατφόρμες)",
|
||||||
|
|
@ -545,7 +546,9 @@
|
||||||
"deleteText": "Διαγραφή",
|
"deleteText": "Διαγραφή",
|
||||||
"demoText": "Επίδειξη",
|
"demoText": "Επίδειξη",
|
||||||
"denyText": "Απαγόρευση",
|
"denyText": "Απαγόρευση",
|
||||||
|
"deprecatedText": "Καταργήθηκε",
|
||||||
"desktopResText": "Ανάλυση Σταθερού Η/Υ",
|
"desktopResText": "Ανάλυση Σταθερού Η/Υ",
|
||||||
|
"deviceAccountUpgradeText": "Προσοχή:\nΧρησιμοποιειτέ ένα λογαριασμό συσκευής(${NAME}).\nΟι λογαριασμοί συσκευών θα αφαιρεθούν σε μέλλουσα ενημέρωση.\nΑναβαθμίστε σε ένα λογαριασμό V2 αν θέλετε να διατηρήσετε την πρόοδο σας.",
|
||||||
"difficultyEasyText": "Εύκολο",
|
"difficultyEasyText": "Εύκολο",
|
||||||
"difficultyHardOnlyText": "Αποκλειστικά Στο Δύσκολο",
|
"difficultyHardOnlyText": "Αποκλειστικά Στο Δύσκολο",
|
||||||
"difficultyHardText": "Δύσκολο",
|
"difficultyHardText": "Δύσκολο",
|
||||||
|
|
@ -803,6 +806,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Συγνώμη, φαίνεται πως η υπηρεσία πολλών παικτών της Google δεν είναι πλέον διαθέσιμη.\nΠροσπαθώ να βρω αντικατάσταση όσο πιο γρήγορα γίνεται.\nΜέχρι τότε, παρακαλώ δοκιμάστε άλλο τρόπο σύνδεσης.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Συγνώμη, φαίνεται πως η υπηρεσία πολλών παικτών της Google δεν είναι πλέον διαθέσιμη.\nΠροσπαθώ να βρω αντικατάσταση όσο πιο γρήγορα γίνεται.\nΜέχρι τότε, παρακαλώ δοκιμάστε άλλο τρόπο σύνδεσης.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Οι αγορές Google Play δεν είναι διαθέσιμες.\nΜπορεί να χρειάζεται να ενημερώσετε την εφαρμογή σας.",
|
"googlePlayPurchasesNotAvailableText": "Οι αγορές Google Play δεν είναι διαθέσιμες.\nΜπορεί να χρειάζεται να ενημερώσετε την εφαρμογή σας.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Οι υπηρεσίες Google Play δεν είναι διαθέσιμες.\nΚάποιες λειτουργείες μπορεί να είναι απενεργοποιμένες.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Πάντα",
|
"alwaysText": "Πάντα",
|
||||||
|
|
@ -1062,6 +1066,7 @@
|
||||||
"notSignedInErrorText": "Πρέπει να συνδεθείτε γι' αυτό.",
|
"notSignedInErrorText": "Πρέπει να συνδεθείτε γι' αυτό.",
|
||||||
"notSignedInGooglePlayErrorText": "Πρέπει να συνδεθείτε με το Google Play γι' αυτό.",
|
"notSignedInGooglePlayErrorText": "Πρέπει να συνδεθείτε με το Google Play γι' αυτό.",
|
||||||
"notSignedInText": "δεν έχετε συνδεθεί",
|
"notSignedInText": "δεν έχετε συνδεθεί",
|
||||||
|
"notUsingAccountText": "Σημείωση: αγνοείται ο λογαριασμός ${SERVICE}.\nΠηγαίνετε στο'Λογαριασμός -> Σύνδεση με ${SERVICE}' αν θέλετε να τον χρησιμοποιήσετε.",
|
||||||
"nothingIsSelectedErrorText": "Τίποτα δεν επιλέχθηκε!",
|
"nothingIsSelectedErrorText": "Τίποτα δεν επιλέχθηκε!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Κλειστό",
|
"offText": "Κλειστό",
|
||||||
|
|
@ -1808,6 +1813,7 @@
|
||||||
"useDefaultText": "Χρήση Προκαθορισμένων",
|
"useDefaultText": "Χρήση Προκαθορισμένων",
|
||||||
"usesExternalControllerText": "Αυτό το παιχνίδι χρησιμοποιεί ένα εξωτερικό χειριστήριο για είσοδο.",
|
"usesExternalControllerText": "Αυτό το παιχνίδι χρησιμοποιεί ένα εξωτερικό χειριστήριο για είσοδο.",
|
||||||
"usingItunesText": "Χρήση εφαρμογής μουσικής για ηχητική υπόκρουση...",
|
"usingItunesText": "Χρήση εφαρμογής μουσικής για ηχητική υπόκρουση...",
|
||||||
|
"v2AccountLinkingInfoText": "Για να δεσμεύσετε λογαριασμούς V2, χρησιμοιποιήστε το κουμπί 'Διαχείριση Λογαριασμού'.",
|
||||||
"validatingTestBuildText": "Επικύρωση Δοκιμαστικής Έκδοσης...",
|
"validatingTestBuildText": "Επικύρωση Δοκιμαστικής Έκδοσης...",
|
||||||
"victoryText": "Νίκη!",
|
"victoryText": "Νίκη!",
|
||||||
"voteDelayText": "Δεν μπορείτε να ξαναξεκινήσετε ψηφοφορία για ${NUMBER} δευτ.",
|
"voteDelayText": "Δεν μπορείτε να ξαναξεκινήσετε ψηφοφορία για ${NUMBER} δευτ.",
|
||||||
|
|
@ -1840,6 +1846,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Κύμα",
|
"waveText": "Κύμα",
|
||||||
"wellSureText": "Βεβαίως!",
|
"wellSureText": "Βεβαίως!",
|
||||||
|
"whatIsThisText": "Τι είναι αυτό;",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
11
dist/ba_data/data/languages/hindi.json
vendored
11
dist/ba_data/data/languages/hindi.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "आप केवल प्रति सीजन इसे एक बार बदल सकते हैं।",
|
"changeOncePerSeason": "आप केवल प्रति सीजन इसे एक बार बदल सकते हैं।",
|
||||||
"changeOncePerSeasonError": "आपको इसे फिर से बदलने के लिए अगले सीज़न तक इंतजार करना होगा (${NUM} दिन)",
|
"changeOncePerSeasonError": "आपको इसे फिर से बदलने के लिए अगले सीज़न तक इंतजार करना होगा (${NUM} दिन)",
|
||||||
"customName": "अनुकूल नाम",
|
"customName": "अनुकूल नाम",
|
||||||
|
"googlePlayGamesAccountSwitchText": "अगर आप किसी भिन्न Google खाते का उपयोग करना चाहते हैं,\n स्विच करने के लिए Google Play गेम्स ऐप का उपयोग करें।",
|
||||||
"linkAccountsEnterCodeText": "कोड डालीए",
|
"linkAccountsEnterCodeText": "कोड डालीए",
|
||||||
"linkAccountsGenerateCodeText": "काेड उत्पन्न करे",
|
"linkAccountsGenerateCodeText": "काेड उत्पन्न करे",
|
||||||
"linkAccountsInfoText": "(प्रगति को अलग अलग यंत्रो पर बाटिए)",
|
"linkAccountsInfoText": "(प्रगति को अलग अलग यंत्रो पर बाटिए)",
|
||||||
|
|
@ -15,7 +16,8 @@
|
||||||
"linkAccountsInstructionsText": "दो खातों को जोड़ने के लिए एक में कोड उत्पन्न\nकरें एयर दुसरे खाते में दर्ज करें | प्रगति और\nवस्तुसूची जोड़ दी जायेगी | आप अधिकतम\n${COUNT} खातों को जोड़ सकते हैं |\n\nध्यान रखिये, इसे वापस नहीं लिया जा सकता !",
|
"linkAccountsInstructionsText": "दो खातों को जोड़ने के लिए एक में कोड उत्पन्न\nकरें एयर दुसरे खाते में दर्ज करें | प्रगति और\nवस्तुसूची जोड़ दी जायेगी | आप अधिकतम\n${COUNT} खातों को जोड़ सकते हैं |\n\nध्यान रखिये, इसे वापस नहीं लिया जा सकता !",
|
||||||
"linkAccountsText": "खाते को जोडिए",
|
"linkAccountsText": "खाते को जोडिए",
|
||||||
"linkedAccountsText": "जुड़े हुए खाते:",
|
"linkedAccountsText": "जुड़े हुए खाते:",
|
||||||
"nameChangeConfirm": "अपने खाता का नाम ईस नाम ${NAME} से बदले?",
|
"manageAccountText": "खाता प्रबंधन",
|
||||||
|
"nameChangeConfirm": "अपने खाता का नाम इस नाम ${NAME} से बदले?",
|
||||||
"resetProgressConfirmNoAchievementsText": "यह आपकी को-ऑप प्रगति और \nस्थानीय उच्च स्कोर रीसेट कर देगा (आपके टिकट रीसेट नहीं होंगे) | \nइसे पूर्ववत नहीं किया जा सकता | इस बात की पुष्टि करें कि आप यह करना चाहते हैं |",
|
"resetProgressConfirmNoAchievementsText": "यह आपकी को-ऑप प्रगति और \nस्थानीय उच्च स्कोर रीसेट कर देगा (आपके टिकट रीसेट नहीं होंगे) | \nइसे पूर्ववत नहीं किया जा सकता | इस बात की पुष्टि करें कि आप यह करना चाहते हैं |",
|
||||||
"resetProgressConfirmText": "यह आपकी को-ऑप प्रगति और\n स्थानीय उच्च स्कोर रीसेट कर देगा\n (आपके टिकट रीसेट नहीं होंगे) | \nइसे पूर्ववत नहीं किया जा सकता | इस बात की पुष्टि करें कि आप यह करना चाहते हैं |",
|
"resetProgressConfirmText": "यह आपकी को-ऑप प्रगति और\n स्थानीय उच्च स्कोर रीसेट कर देगा\n (आपके टिकट रीसेट नहीं होंगे) | \nइसे पूर्ववत नहीं किया जा सकता | इस बात की पुष्टि करें कि आप यह करना चाहते हैं |",
|
||||||
"resetProgressText": "प्रगति रीसेट करें",
|
"resetProgressText": "प्रगति रीसेट करें",
|
||||||
|
|
@ -547,7 +549,9 @@
|
||||||
"deleteText": "हटाना",
|
"deleteText": "हटाना",
|
||||||
"demoText": "डेमो",
|
"demoText": "डेमो",
|
||||||
"denyText": "अस्वीकृत करें",
|
"denyText": "अस्वीकृत करें",
|
||||||
|
"deprecatedText": "पदावनत",
|
||||||
"desktopResText": "डेस्कटॉप रेज़ोल्यूशन",
|
"desktopResText": "डेस्कटॉप रेज़ोल्यूशन",
|
||||||
|
"deviceAccountUpgradeText": "चेतावनी:\n आप डिवाइस खाते (${NAME}) से साइन इन हैं।\n डिवाइस खातों को भविष्य के अपडेट में हटा दिया जाएगा।\n यदि आप अपनी प्रगति को बनाए रखना चाहते हैं तो V2 खाते में अपग्रेड करें।",
|
||||||
"difficultyEasyText": "आसन",
|
"difficultyEasyText": "आसन",
|
||||||
"difficultyHardOnlyText": "केवल कठिन",
|
"difficultyHardOnlyText": "केवल कठिन",
|
||||||
"difficultyHardText": "कठिन",
|
"difficultyHardText": "कठिन",
|
||||||
|
|
@ -808,6 +812,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "क्षमा करें, गूगल की एक साथ खेलने की सेवा अब उपलब्ध नहीं है। \nमैं जितनी जल्दी हो सके एक प्रतिस्थापन पर काम कर रहा हूं।\nतब तक, कृपया दूसरी जुडने की विधि आज़माएँ। \n-Eric",
|
"googleMultiplayerDiscontinuedText": "क्षमा करें, गूगल की एक साथ खेलने की सेवा अब उपलब्ध नहीं है। \nमैं जितनी जल्दी हो सके एक प्रतिस्थापन पर काम कर रहा हूं।\nतब तक, कृपया दूसरी जुडने की विधि आज़माएँ। \n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "गूगल प्ले से ख़रीदारी उपलब्ध नहीं हैं।\nआपको अपना स्टोर ऐप अपडेट करना पड़ सकता है।",
|
"googlePlayPurchasesNotAvailableText": "गूगल प्ले से ख़रीदारी उपलब्ध नहीं हैं।\nआपको अपना स्टोर ऐप अपडेट करना पड़ सकता है।",
|
||||||
|
"googlePlayServicesNotAvailableText": "गूगल प्ले सर्विसेज उपलब्ध नहीं है।\nऐप की कुछ कार्यक्षमता अक्षम हो सकती है।",
|
||||||
"googlePlayText": "गूगल प्ले",
|
"googlePlayText": "गूगल प्ले",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "हमेशा",
|
"alwaysText": "हमेशा",
|
||||||
|
|
@ -1006,6 +1011,7 @@
|
||||||
"creditsText": "आभार सूचि",
|
"creditsText": "आभार सूचि",
|
||||||
"demoMenuText": "डेमो मेनू",
|
"demoMenuText": "डेमो मेनू",
|
||||||
"endGameText": "गेम ख़तम करें",
|
"endGameText": "गेम ख़तम करें",
|
||||||
|
"endTestText": "परीक्षण अंत",
|
||||||
"exitGameText": "गेम से बहार जाएँ",
|
"exitGameText": "गेम से बहार जाएँ",
|
||||||
"exitToMenuText": "ख़तम कर के मेनू में जाएं ?",
|
"exitToMenuText": "ख़तम कर के मेनू में जाएं ?",
|
||||||
"howToPlayText": "कैसे खेलें",
|
"howToPlayText": "कैसे खेलें",
|
||||||
|
|
@ -1065,6 +1071,7 @@
|
||||||
"notSignedInErrorText": "यह करने के लिए आपको अपने खाते में साइन इन करना पड़ेगा",
|
"notSignedInErrorText": "यह करने के लिए आपको अपने खाते में साइन इन करना पड़ेगा",
|
||||||
"notSignedInGooglePlayErrorText": "आपको गूगल प्ले से साइन इन करना पड़ेगा यह करने के लिए |",
|
"notSignedInGooglePlayErrorText": "आपको गूगल प्ले से साइन इन करना पड़ेगा यह करने के लिए |",
|
||||||
"notSignedInText": "साइन इन नहीं हैं",
|
"notSignedInText": "साइन इन नहीं हैं",
|
||||||
|
"notUsingAccountText": "नोट: ${SERVICE} खाते को अनदेखा करना।\n यदि आप इसका उपयोग करना चाहते हैं तो 'खाता -> ${SERVICE}' के साथ साइन इन करें।",
|
||||||
"nothingIsSelectedErrorText": "कुछ चुना नहीं है !",
|
"nothingIsSelectedErrorText": "कुछ चुना नहीं है !",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "बंद करें",
|
"offText": "बंद करें",
|
||||||
|
|
@ -1810,6 +1817,7 @@
|
||||||
"useDefaultText": "पूर्व निर्धारित उपयोग करें",
|
"useDefaultText": "पूर्व निर्धारित उपयोग करें",
|
||||||
"usesExternalControllerText": "यह गेम इनपुट के लिए बाहरी नियंत्रक का उपयोग करता है।",
|
"usesExternalControllerText": "यह गेम इनपुट के लिए बाहरी नियंत्रक का उपयोग करता है।",
|
||||||
"usingItunesText": "गाने के लिए संगीत ऐप का उपयोग कर रहे है ...",
|
"usingItunesText": "गाने के लिए संगीत ऐप का उपयोग कर रहे है ...",
|
||||||
|
"v2AccountLinkingInfoText": "V2 खातों को लिंक करने के लिए, 'खाता प्रबंधित करें' बटन का उपयोग करें।",
|
||||||
"validatingTestBuildText": "परीक्षण निर्माण मान्य ...",
|
"validatingTestBuildText": "परीक्षण निर्माण मान्य ...",
|
||||||
"victoryText": "विजय!",
|
"victoryText": "विजय!",
|
||||||
"voteDelayText": "आप ${NUMBER} सेकंड के लिए एक और वोट शुरू नहीं कर सकते हैं",
|
"voteDelayText": "आप ${NUMBER} सेकंड के लिए एक और वोट शुरू नहीं कर सकते हैं",
|
||||||
|
|
@ -1842,6 +1850,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "लहर",
|
"waveText": "लहर",
|
||||||
"wellSureText": "हाँ ज़रूर !",
|
"wellSureText": "हाँ ज़रूर !",
|
||||||
|
"whatIsThisText": "यह क्या है?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "डार्विन रिमोट कॉपीराइट"
|
"titleText": "डार्विन रिमोट कॉपीराइट"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
20
dist/ba_data/data/languages/hungarian.json
vendored
20
dist/ba_data/data/languages/hungarian.json
vendored
|
|
@ -6,7 +6,7 @@
|
||||||
"achievementProgressText": "Eredmènyek: ${COUNT} a(z) ${TOTAL}-ból/ből.",
|
"achievementProgressText": "Eredmènyek: ${COUNT} a(z) ${TOTAL}-ból/ből.",
|
||||||
"campaignProgressText": "Kampány haladás(nehéz mód): ${PROGRESS}",
|
"campaignProgressText": "Kampány haladás(nehéz mód): ${PROGRESS}",
|
||||||
"changeOncePerSeason": "Ebben a szezonban ezt csak egyszer változtathatod meg.",
|
"changeOncePerSeason": "Ebben a szezonban ezt csak egyszer változtathatod meg.",
|
||||||
"changeOncePerSeasonError": "Kell várjál a következő szezonig, hogy ezt megint megváltoztasd (${NUM} nap)",
|
"changeOncePerSeasonError": "Várj a következő szezonig, hogy ezt megint megváltoztasd (${NUM} nap)",
|
||||||
"customName": "Egyedi név",
|
"customName": "Egyedi név",
|
||||||
"deviceSpecificAccountText": "Csak erről az eszközről lehet elérni ezt a profilt: ${NAME}",
|
"deviceSpecificAccountText": "Csak erről az eszközről lehet elérni ezt a profilt: ${NAME}",
|
||||||
"linkAccountsEnterCodeText": "Írd Be A Kódot",
|
"linkAccountsEnterCodeText": "Írd Be A Kódot",
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "Hogy párosíts két profilt, generálj egy kódot\naz egyiken majd írd be a kapott kódot a másikon.\nAz előrehaladás és a megvásárolt dolgok is párosításra kerülnek .\nÖsszesen ${COUNT} profilt tudsz összehangolni.\n\nFONTOS:Csak olyan profilt csatlakoztass ami a tiéd!\nHogyha profilt csatlakoztatsz a barátaiddal\nakkor nem fogsz tudni játszani azonos időben!\n\nLégy óvatos!Ezt a lépést nem lehet visszavonni!",
|
"linkAccountsInstructionsText": "Hogy párosíts két profilt, generálj egy kódot\naz egyiken majd írd be a kapott kódot a másikon.\nAz előrehaladás és a megvásárolt dolgok is párosításra kerülnek .\nÖsszesen ${COUNT} profilt tudsz összehangolni.\n\nFONTOS:Csak olyan profilt csatlakoztass ami a tiéd!\nHogyha profilt csatlakoztatsz a barátaiddal\nakkor nem fogsz tudni játszani azonos időben!\n\nLégy óvatos!Ezt a lépést nem lehet visszavonni!",
|
||||||
"linkAccountsText": "Profilok Párosítása",
|
"linkAccountsText": "Profilok Párosítása",
|
||||||
"linkedAccountsText": "Párosított Profilok:",
|
"linkedAccountsText": "Párosított Profilok:",
|
||||||
|
"manageAccountText": "Fiók szerkesztése",
|
||||||
"nameChangeConfirm": "Megváltoztatod a fiókod nevét erre: ${NAME}?",
|
"nameChangeConfirm": "Megváltoztatod a fiókod nevét erre: ${NAME}?",
|
||||||
"resetProgressConfirmNoAchievementsText": "Ez visszaállítja a co-op haladásodat és \nhelyi legmagasabb pontszámaidat (de a jegyeidet nem). \nEz nem vissza vonható. Biztos vagy benne?",
|
"resetProgressConfirmNoAchievementsText": "Ez visszaállítja a co-op haladásodat és \nhelyi legmagasabb pontszámaidat (de a jegyeidet nem). \nEz nem vissza vonható. Biztos vagy benne?",
|
||||||
"resetProgressConfirmText": "Ez visszaállítja a co-op haladásodat,\nteljesítményeidet és helyi legmagasabb pontszámaidat\n(de a jegyeidet nem). Ez nem vissza vonható.\nBiztos vagy benne?",
|
"resetProgressConfirmText": "Ez visszaállítja a co-op haladásodat,\nteljesítményeidet és helyi legmagasabb pontszámaidat\n(de a jegyeidet nem). Ez nem vissza vonható.\nBiztos vagy benne?",
|
||||||
|
|
@ -330,6 +331,7 @@
|
||||||
"achievementsRemainingText": "Hátralévő Teljesítmények:",
|
"achievementsRemainingText": "Hátralévő Teljesítmények:",
|
||||||
"achievementsText": "Teljesítmények",
|
"achievementsText": "Teljesítmények",
|
||||||
"achievementsUnavailableForOldSeasonsText": "Bocsi, de a teljesítmények nem elérhetőek a régi szezonban.",
|
"achievementsUnavailableForOldSeasonsText": "Bocsi, de a teljesítmények nem elérhetőek a régi szezonban.",
|
||||||
|
"activatedText": "${THING} aktiválva",
|
||||||
"addGameWindow": {
|
"addGameWindow": {
|
||||||
"getMoreGamesText": "Több Játékmód...",
|
"getMoreGamesText": "Több Játékmód...",
|
||||||
"titleText": "Játék Hozzáadása"
|
"titleText": "Játék Hozzáadása"
|
||||||
|
|
@ -500,6 +502,7 @@
|
||||||
"welcome2Text": "Jegyeket is szerezhetsz. A jegyekkel beléphetsz mérkőzésekbe,\nilletve betudod váltani új karakterekre, pályákra, mini-játékokra\nés még sok másra.",
|
"welcome2Text": "Jegyeket is szerezhetsz. A jegyekkel beléphetsz mérkőzésekbe,\nilletve betudod váltani új karakterekre, pályákra, mini-játékokra\nés még sok másra.",
|
||||||
"yourPowerRankingText": "Helyezésed:"
|
"yourPowerRankingText": "Helyezésed:"
|
||||||
},
|
},
|
||||||
|
"copyConfirmText": "Másolva",
|
||||||
"copyOfText": "${NAME} másolata",
|
"copyOfText": "${NAME} másolata",
|
||||||
"copyText": "Másolat",
|
"copyText": "Másolat",
|
||||||
"createEditPlayerText": "<Játékos készítése/szerkesztése>",
|
"createEditPlayerText": "<Játékos készítése/szerkesztése>",
|
||||||
|
|
@ -628,7 +631,9 @@
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} A hatalmas lassú mozgásban",
|
"epicDescriptionFilterText": "${DESCRIPTION} A hatalmas lassú mozgásban",
|
||||||
"epicNameFilterText": "Hatalmas ${NAME}",
|
"epicNameFilterText": "Hatalmas ${NAME}",
|
||||||
"errorAccessDeniedText": "hozzáférés megtagadva",
|
"errorAccessDeniedText": "hozzáférés megtagadva",
|
||||||
|
"errorDeviceTimeIncorrectText": "Az eszközöd rossz időt mutat ennyi órával:${HOURS}.\nEz okozhat problémákat is.\nKérjük ellenőrizze az időt és idő-zónát a beállításokban.",
|
||||||
"errorOutOfDiskSpaceText": "Kifogyott a szabadhelyből",
|
"errorOutOfDiskSpaceText": "Kifogyott a szabadhelyből",
|
||||||
|
"errorSecureConnectionFailText": "Nem lehet kapcsolatot létrehozni a biztonságos felhővel;Az internet funkcionálása talán elbukik.",
|
||||||
"errorText": "Hiba",
|
"errorText": "Hiba",
|
||||||
"errorUnknownText": "ismeretlen hiba",
|
"errorUnknownText": "ismeretlen hiba",
|
||||||
"exitGameText": "Kilépsz a ${APP_NAME}-ból?",
|
"exitGameText": "Kilépsz a ${APP_NAME}-ból?",
|
||||||
|
|
@ -797,7 +802,7 @@
|
||||||
"ticketPack4Text": "Jumbo Jegy Csomag",
|
"ticketPack4Text": "Jumbo Jegy Csomag",
|
||||||
"ticketPack5Text": "Mammoth Jegy Csomag",
|
"ticketPack5Text": "Mammoth Jegy Csomag",
|
||||||
"ticketPack6Text": "Végső Jegy Csomag",
|
"ticketPack6Text": "Végső Jegy Csomag",
|
||||||
"ticketsFromASponsorText": "Szerezz ${COUNT} jegyet\negy szponzortól",
|
"ticketsFromASponsorText": "Nézz egy reklámot \n${COUNT} jegyekért",
|
||||||
"ticketsText": "${COUNT} Jegy",
|
"ticketsText": "${COUNT} Jegy",
|
||||||
"titleText": "Szerezz Jegyeket",
|
"titleText": "Szerezz Jegyeket",
|
||||||
"unavailableLinkAccountText": "Sajnálom, a vásárlások ezen az eszközön nem elérhetőek.\nHa szeretnéd, ezt a felhasználót csatlakoztathatod egy másik\neszközre és ott vásárolhatsz.",
|
"unavailableLinkAccountText": "Sajnálom, a vásárlások ezen az eszközön nem elérhetőek.\nHa szeretnéd, ezt a felhasználót csatlakoztathatod egy másik\neszközre és ott vásárolhatsz.",
|
||||||
|
|
@ -808,6 +813,8 @@
|
||||||
"youHaveText": "Neked ${COUNT} jegyed van."
|
"youHaveText": "Neked ${COUNT} jegyed van."
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Bocsánat, A Google-nek a többjátékos szervisze többé nem elérhető.\nÉn most egy cserén dolgozok.\nAddig, Kérlek Válasz egy Másik Kapcsolódási lehetőséget.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Bocsánat, A Google-nek a többjátékos szervisze többé nem elérhető.\nÉn most egy cserén dolgozok.\nAddig, Kérlek Válasz egy Másik Kapcsolódási lehetőséget.\n-Eric",
|
||||||
|
"googlePlayPurchasesNotAvailableText": "A Google Play vásárlások nem elérhetőek.\nTalán frissíteni kell a vásárló alakalmazásod",
|
||||||
|
"googlePlayServicesNotAvailableText": "A Google Play Szolgáltatások nem elérhetőek.\nNéhány része a játéknak talán le vannak tiltva",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Mindig",
|
"alwaysText": "Mindig",
|
||||||
|
|
@ -1006,6 +1013,7 @@
|
||||||
"creditsText": "Közreműködők",
|
"creditsText": "Közreműködők",
|
||||||
"demoMenuText": "Demo Menü",
|
"demoMenuText": "Demo Menü",
|
||||||
"endGameText": "Játék Vége",
|
"endGameText": "Játék Vége",
|
||||||
|
"endTestText": "Teszt vége",
|
||||||
"exitGameText": "Kilépés a Játékból",
|
"exitGameText": "Kilépés a Játékból",
|
||||||
"exitToMenuText": "Kilépés a menübe?",
|
"exitToMenuText": "Kilépés a menübe?",
|
||||||
"howToPlayText": "Tippek",
|
"howToPlayText": "Tippek",
|
||||||
|
|
@ -1121,7 +1129,10 @@
|
||||||
"playlistsText": "Listák",
|
"playlistsText": "Listák",
|
||||||
"pleaseRateText": "Ha élvezed a játékot, kérlek értékeld, vagy írj egy\nvéleményt a ${APP_NAME}-ról. Ez mások számára hasznos \nlehet, vagy akár segítheti a játék fejlődését is a jövőben.\n\nKöszi!\n-eric",
|
"pleaseRateText": "Ha élvezed a játékot, kérlek értékeld, vagy írj egy\nvéleményt a ${APP_NAME}-ról. Ez mások számára hasznos \nlehet, vagy akár segítheti a játék fejlődését is a jövőben.\n\nKöszi!\n-eric",
|
||||||
"pleaseWaitText": "Kérljek várj...",
|
"pleaseWaitText": "Kérljek várj...",
|
||||||
"pluginsDetectedText": "Új Plugin találva. Kapcsold/Configuráld őket a beálitásokba.",
|
"pluginClassLoadErrorText": "Nem sikerült egy hoozáadást betölteni '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginInitErrorText": "Nem sikerült elkezdeni az egyik hozzáadást '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginsDetectedText": "Új hozzáadások érzékelve. Indítsa újra az alkalmazást az aktiváláshoz, vagy szerkesztés őket a beállításokban",
|
||||||
|
"pluginsRemovedText": "${NUM} hozzáadás(ok) mostmár nem találhatóak",
|
||||||
"pluginsText": "Pluginok",
|
"pluginsText": "Pluginok",
|
||||||
"practiceText": "Gyakorlás",
|
"practiceText": "Gyakorlás",
|
||||||
"pressAnyButtonPlayAgainText": "Nyomj meg egy gombot, az újrakezdéshez...",
|
"pressAnyButtonPlayAgainText": "Nyomj meg egy gombot, az újrakezdéshez...",
|
||||||
|
|
@ -1377,6 +1388,7 @@
|
||||||
"tournamentStandingsText": "Torna Állása",
|
"tournamentStandingsText": "Torna Állása",
|
||||||
"tournamentText": "Bajnokság",
|
"tournamentText": "Bajnokság",
|
||||||
"tournamentTimeExpiredText": "Mérkőzési Idő Lejárt",
|
"tournamentTimeExpiredText": "Mérkőzési Idő Lejárt",
|
||||||
|
"tournamentsDisabledWorkspaceText": "A versenyek ki vannak kapcsolva amíg a munkaterületek aktiválva vannak.\nA versenyek aktiválásához, kapcsold ki a munkaterületeket, és indítsd újra az alkalmazást.",
|
||||||
"tournamentsText": "Bajnokságok",
|
"tournamentsText": "Bajnokságok",
|
||||||
"translations": {
|
"translations": {
|
||||||
"characterNames": {
|
"characterNames": {
|
||||||
|
|
@ -1862,6 +1874,8 @@
|
||||||
"winsPlayerText": "${NAME} nyert!",
|
"winsPlayerText": "${NAME} nyert!",
|
||||||
"winsTeamText": "${NAME} nyert!",
|
"winsTeamText": "${NAME} nyert!",
|
||||||
"winsText": "${NAME} nyert!",
|
"winsText": "${NAME} nyert!",
|
||||||
|
"workspaceSyncErrorText": "Nem sikerült szinkronizálni a következő munkaterületet: ${WORKSPACE}. Nézd a naplót további adatokért.",
|
||||||
|
"workspaceSyncReuseText": "Nem lehet szinkronizálni a következő munkaterületet: ${WORKSPACE}. Előző munkaterület lesz használatban.",
|
||||||
"worldScoresUnavailableText": "Világ eredmények elérhetetlenek",
|
"worldScoresUnavailableText": "Világ eredmények elérhetetlenek",
|
||||||
"worldsBestScoresText": "Világ legjobb eredményei",
|
"worldsBestScoresText": "Világ legjobb eredményei",
|
||||||
"worldsBestTimesText": "Világ legjobb idejei",
|
"worldsBestTimesText": "Világ legjobb idejei",
|
||||||
|
|
|
||||||
81
dist/ba_data/data/languages/indonesian.json
vendored
81
dist/ba_data/data/languages/indonesian.json
vendored
|
|
@ -8,14 +8,15 @@
|
||||||
"changeOncePerSeason": "Kamu hanya dapat mengganti ini sekali per musim.",
|
"changeOncePerSeason": "Kamu hanya dapat mengganti ini sekali per musim.",
|
||||||
"changeOncePerSeasonError": "Kamu harus menunggu sampai musim berikutnya untuk menggantinya lagi (${NUM} hari)",
|
"changeOncePerSeasonError": "Kamu harus menunggu sampai musim berikutnya untuk menggantinya lagi (${NUM} hari)",
|
||||||
"customName": "Nama Khusus",
|
"customName": "Nama Khusus",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Jika kamu ingin menggunakan akun Google yang lain,\ngunakan aplikasi Google Play Games untuk mengganti.",
|
||||||
"linkAccountsEnterCodeText": "Masukkan kode",
|
"linkAccountsEnterCodeText": "Masukkan kode",
|
||||||
"linkAccountsGenerateCodeText": "Buat Kode",
|
"linkAccountsGenerateCodeText": "Buat Kode",
|
||||||
"linkAccountsInfoText": "(bagikan kemajuan permainan dengan platform lain)",
|
"linkAccountsInfoText": "(bagikan kemajuan permainan dengan platform lain)",
|
||||||
"linkAccountsInstructionsNewText": "untuk menghubungkan dua akun,buat kode pada \nperangkat pertama dan masukan kode ke perangkat kedua.\nData dari kedua akun akan di bagi ke kedua perangkat.\n(Data dari akun pertama akan hilang)\n\nKamu dapat menghubungkan ke ${COUNT} akun.\n\nPENTING:menghubungkan akun hanya bekerja untuk akun milikmu sendiri;\nJika kamu menghubungkannya dengan akun milik temanmu kamu tidak akan\ndapat bermain daring pada waktu yang bersamaan.",
|
"linkAccountsInstructionsNewText": "Untuk menghubungkan dua akun, buat kode pada \nperangkat pertama dan masukkan kode ke perangkat kedua.\nData dari kedua akun akan di bagi ke kedua perangkat.\n(Data dari akun pertama akan hilang)\n\nKamu dapat menghubungkan ke ${COUNT} akun.\n\nPENTING: hanya hubungkan akun milikmu sendiri;\nJika kamu menghubungkannya dengan temanmu, kamu tidak akan\ndapat bermain daring pada waktu yang bersamaan.",
|
||||||
"linkAccountsInstructionsText": "Untuk menghubungkan dua akun, buat kode di salah satu\ndari mereka dan masukkan kode itu di sisi lain.\nKemajuan dan persediaan akan digabungkan.\nAnda dapat menghubungkan hingga ${COUNT} akun.\n\nPENTING: Hanya hubungkan akun yang anda miliki!\nJika Anda menghubungkan akun dengan teman anda, anda\ntidak akan bisa bermain bersamaan!\n\nJuga: ini tidak dapat dibatalkan, jadi berhati-hatilah!",
|
"linkAccountsInstructionsText": "Untuk menghubungkan dua akun, buat kode di salah satu\ndari mereka dan masukkan kode itu di sisi lain.\nKemajuan dan persediaan akan digabungkan.\nAnda dapat menghubungkan hingga ${COUNT} akun.\n\nPENTING: Hanya hubungkan akun yang anda miliki!\nJika Anda menghubungkan akun dengan teman anda, anda\ntidak akan bisa bermain bersamaan!\n\nJuga: ini tidak dapat dibatalkan, jadi berhati-hatilah!",
|
||||||
"linkAccountsText": "Hubungkan Akun",
|
"linkAccountsText": "Tautkan Akun",
|
||||||
"linkedAccountsText": "Akun yang Terhubung:",
|
"linkedAccountsText": "Akun yang Tertaut:",
|
||||||
"manageAccountText": "Pengaturan Akun",
|
"manageAccountText": "Manajemen Akun",
|
||||||
"nameChangeConfirm": "Ganti namamu menjadi ${NAME}?",
|
"nameChangeConfirm": "Ganti namamu menjadi ${NAME}?",
|
||||||
"resetProgressConfirmNoAchievementsText": "Tindakan ini akan mengatur ulang kemajuan co-op dan\nskor tertinggi Kamu (kecuali tiket).\nTidak dapat dibatalkan. Apakah Kamu yakin?",
|
"resetProgressConfirmNoAchievementsText": "Tindakan ini akan mengatur ulang kemajuan co-op dan\nskor tertinggi Kamu (kecuali tiket).\nTidak dapat dibatalkan. Apakah Kamu yakin?",
|
||||||
"resetProgressConfirmText": "Ini akan mengatur ulang kemajuan co-op,\npencapaian, dan skor tertinggi Kamu\n(kecuali tiket). Ini tidak dapat\ndibatalkan. Kamu yakin?",
|
"resetProgressConfirmText": "Ini akan mengatur ulang kemajuan co-op,\npencapaian, dan skor tertinggi Kamu\n(kecuali tiket). Ini tidak dapat\ndibatalkan. Kamu yakin?",
|
||||||
|
|
@ -39,6 +40,7 @@
|
||||||
"titleText": "Akun",
|
"titleText": "Akun",
|
||||||
"unlinkAccountsInstructionsText": "Pilih akun yang akan diputuskan.",
|
"unlinkAccountsInstructionsText": "Pilih akun yang akan diputuskan.",
|
||||||
"unlinkAccountsText": "Memutus Akun.",
|
"unlinkAccountsText": "Memutus Akun.",
|
||||||
|
"unlinkLegacyV1AccountsText": "Putuskan tautan Akun lama (V1)",
|
||||||
"v2LinkInstructionsText": "Gunakan tautan ini untuk membuat akun atau masuk.",
|
"v2LinkInstructionsText": "Gunakan tautan ini untuk membuat akun atau masuk.",
|
||||||
"viaAccount": "(melalui akun ${NAME})",
|
"viaAccount": "(melalui akun ${NAME})",
|
||||||
"youAreSignedInAsText": "Kamu terdaftar sebagai:"
|
"youAreSignedInAsText": "Kamu terdaftar sebagai:"
|
||||||
|
|
@ -545,7 +547,9 @@
|
||||||
"deleteText": "Hapus",
|
"deleteText": "Hapus",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Tolak",
|
"denyText": "Tolak",
|
||||||
|
"deprecatedText": "Usang",
|
||||||
"desktopResText": "Resolusi Desktop",
|
"desktopResText": "Resolusi Desktop",
|
||||||
|
"deviceAccountUpgradeText": "Peringatan:\nKamu masuk dengan akun perangkat (${NAME}).\nAkun perangkat akan dihilangkan pada pembaharuan yg akan datang.\nTingkatkan ke akun V2 jika kamu ingin pertahankan kemajuanmu.",
|
||||||
"difficultyEasyText": "Mudah",
|
"difficultyEasyText": "Mudah",
|
||||||
"difficultyHardOnlyText": "Khusus Mode Sulit",
|
"difficultyHardOnlyText": "Khusus Mode Sulit",
|
||||||
"difficultyHardText": "Sulit",
|
"difficultyHardText": "Sulit",
|
||||||
|
|
@ -578,7 +582,7 @@
|
||||||
"colorText": "warna",
|
"colorText": "warna",
|
||||||
"getMoreCharactersText": "Dapatkan karakter lain...",
|
"getMoreCharactersText": "Dapatkan karakter lain...",
|
||||||
"getMoreIconsText": "Dapatkan ikon lain...",
|
"getMoreIconsText": "Dapatkan ikon lain...",
|
||||||
"globalProfileInfoText": "profil pemain global dijamin untuk memiliki nama unik\ndi seluruh dunia. Termasuk juga ikon lain.",
|
"globalProfileInfoText": "Profil pemain global dijamin untuk memiliki nama unik\ndi seluruh dunia. Termasuk juga ikon lain.",
|
||||||
"globalProfileText": "(Profil Global)",
|
"globalProfileText": "(Profil Global)",
|
||||||
"highlightText": "highlight",
|
"highlightText": "highlight",
|
||||||
"iconText": "ikon",
|
"iconText": "ikon",
|
||||||
|
|
@ -739,15 +743,15 @@
|
||||||
"nearbyText": "Dekat",
|
"nearbyText": "Dekat",
|
||||||
"noConnectionText": "<tidak ada koneksi>",
|
"noConnectionText": "<tidak ada koneksi>",
|
||||||
"otherVersionsText": "(Versi lain)",
|
"otherVersionsText": "(Versi lain)",
|
||||||
"partyCodeText": "Kode Pesta",
|
"partyCodeText": "Kode Acara",
|
||||||
"partyInviteAcceptText": "Terima",
|
"partyInviteAcceptText": "Terima",
|
||||||
"partyInviteDeclineText": "Tolak",
|
"partyInviteDeclineText": "Tolak",
|
||||||
"partyInviteGooglePlayExtraText": "(Lihat tab 'Google Play' di jendela 'Berkumpul')",
|
"partyInviteGooglePlayExtraText": "(Lihat tab 'Google Play' di jendela 'Berkumpul')",
|
||||||
"partyInviteIgnoreText": "Abaikan",
|
"partyInviteIgnoreText": "Abaikan",
|
||||||
"partyInviteText": "${NAME} mengundangmu\nke acaranya!",
|
"partyInviteText": "${NAME} mengundangmu\nke acaranya!",
|
||||||
"partyNameText": "Nama acara",
|
"partyNameText": "Nama acara",
|
||||||
"partyServerRunningText": "Server pesta Anda sedang berjalan.",
|
"partyServerRunningText": "Server acara Anda sedang berjalan.",
|
||||||
"partySizeText": "ukuran pesta",
|
"partySizeText": "ukuran acara",
|
||||||
"partyStatusCheckingText": "memeriksa status...",
|
"partyStatusCheckingText": "memeriksa status...",
|
||||||
"partyStatusJoinableText": "sekarang orang lain dapat gabung ke acaramu dari internet",
|
"partyStatusJoinableText": "sekarang orang lain dapat gabung ke acaramu dari internet",
|
||||||
"partyStatusNoConnectionText": "Tidak dapat terhubung ke server",
|
"partyStatusNoConnectionText": "Tidak dapat terhubung ke server",
|
||||||
|
|
@ -756,10 +760,10 @@
|
||||||
"pingText": "Ping",
|
"pingText": "Ping",
|
||||||
"portText": "Port",
|
"portText": "Port",
|
||||||
"privatePartyCloudDescriptionText": "Acara pribadi dijalankan di server cloud khusus; tidak diperlukan konfigurasi router.",
|
"privatePartyCloudDescriptionText": "Acara pribadi dijalankan di server cloud khusus; tidak diperlukan konfigurasi router.",
|
||||||
"privatePartyHostText": "Selenggarakan Pesta Pribadi",
|
"privatePartyHostText": "Adakan Acara Pribadi",
|
||||||
"privatePartyJoinText": "Bergabunglah dengan Pesta Pribadi",
|
"privatePartyJoinText": "Gabung di Acara Pribadi",
|
||||||
"privateText": "Pribadi",
|
"privateText": "Pribadi",
|
||||||
"publicHostRouterConfigText": "Ini mungkin memerlukan konfigurasi penerusan port di router Anda. Untuk opsi yang lebih mudah, selenggarakan pesta pribadi.",
|
"publicHostRouterConfigText": "Ini mungkin memerlukan konfigurasi penerusan port di router Anda. Untuk opsi yang lebih mudah, adakan acara pribadi.",
|
||||||
"publicText": "Publik",
|
"publicText": "Publik",
|
||||||
"requestingAPromoCodeText": "Memesan Kode...",
|
"requestingAPromoCodeText": "Memesan Kode...",
|
||||||
"sendDirectInvitesText": "Kirim Undangan",
|
"sendDirectInvitesText": "Kirim Undangan",
|
||||||
|
|
@ -803,6 +807,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Maaf, Google's multiplayer service tidak lagi tersedia.\nSaya sedang bekerja pada penggantian secepat mungkin.\nHingga saat itu, silakan coba metode koneksi lainnya.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Maaf, Google's multiplayer service tidak lagi tersedia.\nSaya sedang bekerja pada penggantian secepat mungkin.\nHingga saat itu, silakan coba metode koneksi lainnya.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Pembayaran Google Play tidak tersedia.\nMungkin perlu memperbaharui Playstore anda.",
|
"googlePlayPurchasesNotAvailableText": "Pembayaran Google Play tidak tersedia.\nMungkin perlu memperbaharui Playstore anda.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Layanan Google Play tidak tersedia.\nBeberapa fungsi dari aplikasi mungkin padam.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Selalu",
|
"alwaysText": "Selalu",
|
||||||
|
|
@ -1021,6 +1026,7 @@
|
||||||
"maxConnectionsText": "Koneksi maksimal",
|
"maxConnectionsText": "Koneksi maksimal",
|
||||||
"maxPartySizeText": "Besar Ukuran Maksimal",
|
"maxPartySizeText": "Besar Ukuran Maksimal",
|
||||||
"maxPlayersText": "Jumlah Pemain Maksimal",
|
"maxPlayersText": "Jumlah Pemain Maksimal",
|
||||||
|
"merchText": "Merchandise!",
|
||||||
"modeArcadeText": "Mode Arcade",
|
"modeArcadeText": "Mode Arcade",
|
||||||
"modeClassicText": "Mode Klasik",
|
"modeClassicText": "Mode Klasik",
|
||||||
"modeDemoText": "Mode Demo",
|
"modeDemoText": "Mode Demo",
|
||||||
|
|
@ -1061,6 +1067,7 @@
|
||||||
"notSignedInErrorText": "Kamu harus masuk untuk lakukan ini.",
|
"notSignedInErrorText": "Kamu harus masuk untuk lakukan ini.",
|
||||||
"notSignedInGooglePlayErrorText": "Kamu harus masuk pakai Google Play untuk lakukan ini.",
|
"notSignedInGooglePlayErrorText": "Kamu harus masuk pakai Google Play untuk lakukan ini.",
|
||||||
"notSignedInText": "belum masuk",
|
"notSignedInText": "belum masuk",
|
||||||
|
"notUsingAccountText": "Catatan: mengabaikan akun ${SERVICE}.\nPergi ke 'Akun -> Masuk dengan ${SERVICE}' jika kamu ingin gunakan.",
|
||||||
"nothingIsSelectedErrorText": "Tidak ada yang dipilih!",
|
"nothingIsSelectedErrorText": "Tidak ada yang dipilih!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Mati",
|
"offText": "Mati",
|
||||||
|
|
@ -1119,7 +1126,11 @@
|
||||||
"pleaseWaitText": "Mohon tunggu...",
|
"pleaseWaitText": "Mohon tunggu...",
|
||||||
"pluginClassLoadErrorText": "Error saat memuat class plugin '${PLUGIN}':${ERROR}",
|
"pluginClassLoadErrorText": "Error saat memuat class plugin '${PLUGIN}':${ERROR}",
|
||||||
"pluginInitErrorText": "Error saat menjalankan plugin '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Error saat menjalankan plugin '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Pengaturan Plugin",
|
||||||
|
"pluginsAutoEnableNewText": "Otomatis nyalakan Plugin",
|
||||||
"pluginsDetectedText": "Plugin baru terdeteksi. Mulai ulang game untuk mengaktifkan pluginnya, atau mengaturnya di pengaturan.",
|
"pluginsDetectedText": "Plugin baru terdeteksi. Mulai ulang game untuk mengaktifkan pluginnya, atau mengaturnya di pengaturan.",
|
||||||
|
"pluginsDisableAllText": "Matikan semua Plugin",
|
||||||
|
"pluginsEnableAllText": "Nyalakan semua Plugin",
|
||||||
"pluginsRemovedText": "${NUM} plugin tidak lagi ditemukan.",
|
"pluginsRemovedText": "${NUM} plugin tidak lagi ditemukan.",
|
||||||
"pluginsText": "Plugin",
|
"pluginsText": "Plugin",
|
||||||
"practiceText": "Latihan",
|
"practiceText": "Latihan",
|
||||||
|
|
@ -1255,22 +1266,23 @@
|
||||||
"netTestingText": "Tes Jaringan",
|
"netTestingText": "Tes Jaringan",
|
||||||
"resetText": "Atur ulang",
|
"resetText": "Atur ulang",
|
||||||
"showBombTrajectoriesText": "Lihat Lintasan Bom",
|
"showBombTrajectoriesText": "Lihat Lintasan Bom",
|
||||||
|
"showInGamePingText": "Tampilkan Ping dalam permainan",
|
||||||
"showPlayerNamesText": "Tunjukkan Nama Pemain",
|
"showPlayerNamesText": "Tunjukkan Nama Pemain",
|
||||||
"showUserModsText": "Lihat Folder Mod",
|
"showUserModsText": "Lihat Folder Mod",
|
||||||
"titleText": "Lanjutan",
|
"titleText": "Lanjutan",
|
||||||
"translationEditorButtonText": "Penyunting Translasi ${APP_NAME}",
|
"translationEditorButtonText": "Penyunting Translasi ${APP_NAME}",
|
||||||
"translationFetchErrorText": "status translasi tidak tersedia.",
|
"translationFetchErrorText": "status translasi tidak tersedia.",
|
||||||
"translationFetchingStatusText": "memeriksa status translasi",
|
"translationFetchingStatusText": "memeriksa status terjemahan...",
|
||||||
"translationInformMe": "Beritahu saya jika bahasa yang saya gunakan harus diperbarui",
|
"translationInformMe": "Beritahu saya jika bahasa yang saya gunakan harus diperbarui",
|
||||||
"translationNoUpdateNeededText": "Bahasa ini sudah yang terbaru; Horeee !",
|
"translationNoUpdateNeededText": "Bahasa saat ini sudah yang terbaru; woohoo!",
|
||||||
"translationUpdateNeededText": "** bahasa ini perlu diperbaharui! **",
|
"translationUpdateNeededText": "** bahasa ini perlu diperbaharui! **",
|
||||||
"vrTestingText": "Tes VR"
|
"vrTestingText": "Percobaan VR"
|
||||||
},
|
},
|
||||||
"shareText": "Bagikan",
|
"shareText": "Bagikan",
|
||||||
"sharingText": "Membagikan...",
|
"sharingText": "Membagikan...",
|
||||||
"showText": "Lihat",
|
"showText": "Tampilkan",
|
||||||
"signInForPromoCodeText": "Kamu harus masuk ke akun agar kode berlaku.",
|
"signInForPromoCodeText": "Kamu harus masuk ke akun agar kode berlaku.",
|
||||||
"signInWithGameCenterText": "Untuk menggunakan akun Game Center,\nmasuk ke Game Center dulu",
|
"signInWithGameCenterText": "Untuk menggunakan akun Game Center,\nmasuk ke Game Center dahulu.",
|
||||||
"singleGamePlaylistNameText": "Hanya ${GAME}",
|
"singleGamePlaylistNameText": "Hanya ${GAME}",
|
||||||
"singlePlayerCountText": "1 pemain",
|
"singlePlayerCountText": "1 pemain",
|
||||||
"soloNameFilterText": "Solo ${NAME}",
|
"soloNameFilterText": "Solo ${NAME}",
|
||||||
|
|
@ -1282,10 +1294,10 @@
|
||||||
"FlagCatcher": "Tangkap Bendera",
|
"FlagCatcher": "Tangkap Bendera",
|
||||||
"Flying": "Pikiran Bahagia",
|
"Flying": "Pikiran Bahagia",
|
||||||
"Football": "Rugby",
|
"Football": "Rugby",
|
||||||
"ForwardMarch": "Serangan",
|
"ForwardMarch": "Penyerbuan",
|
||||||
"GrandRomp": "Penaklukan",
|
"GrandRomp": "Penaklukan",
|
||||||
"Hockey": "Hoki",
|
"Hockey": "Hoki",
|
||||||
"Keep Away": "Menjauh !",
|
"Keep Away": "Menjauh",
|
||||||
"Marching": "Bolak-Balik",
|
"Marching": "Bolak-Balik",
|
||||||
"Menu": "Menu Utama",
|
"Menu": "Menu Utama",
|
||||||
"Onslaught": "Pembantaian",
|
"Onslaught": "Pembantaian",
|
||||||
|
|
@ -1307,11 +1319,11 @@
|
||||||
"charactersText": "Karakter",
|
"charactersText": "Karakter",
|
||||||
"comingSoonText": "Segera Hadir...",
|
"comingSoonText": "Segera Hadir...",
|
||||||
"extrasText": "Extra",
|
"extrasText": "Extra",
|
||||||
"freeBombSquadProText": "BombSquad sekarang gratis, karena dulu Kamu membelinya\nKamu mendapat tingkatan BombSquad Pro dan ${COUNT} tiket sebagai ucapan terima kasih.\nNikmati fitur barunya, dan terima kasih dukugannya!\n-Eric",
|
"freeBombSquadProText": "BombSquad sekarang gratis, karena dulu Kamu membelinya\nKamu mendapat tingkatan BombSquad Pro dan ${COUNT} tiket sebagai ucapan terima kasih.\nNikmati fitur barunya, dan terima kasih atas dukungannya!\n-Eric",
|
||||||
"holidaySpecialText": "Spesial Liburan",
|
"holidaySpecialText": "Spesial Liburan",
|
||||||
"howToSwitchCharactersText": "pergi ke \"${SETTINGS} -> ${PLAYER_PROFILES}\" untuk mengubah karakter",
|
"howToSwitchCharactersText": "pergi ke \"${SETTINGS} -> ${PLAYER_PROFILES}\" untuk mengubah karakter",
|
||||||
"howToUseIconsText": "(Buatlah profil pemain global (dalam jendela akun) untuk menggunakan ini)",
|
"howToUseIconsText": "(Buatlah profil pemain global (dalam jendela akun) untuk menggunakan ini)",
|
||||||
"howToUseMapsText": "(gunakan peta ini di tim/playlist bebasmu)",
|
"howToUseMapsText": "(gunakan peta ini di tim/daftar putar bebasmu)",
|
||||||
"iconsText": "Simbol",
|
"iconsText": "Simbol",
|
||||||
"loadErrorText": "Tidak dapat memuat halaman.\nCek koneksi internetmu.",
|
"loadErrorText": "Tidak dapat memuat halaman.\nCek koneksi internetmu.",
|
||||||
"loadingText": "memuat",
|
"loadingText": "memuat",
|
||||||
|
|
@ -1376,34 +1388,34 @@
|
||||||
"tournamentsText": "Turnamen",
|
"tournamentsText": "Turnamen",
|
||||||
"translations": {
|
"translations": {
|
||||||
"characterNames": {
|
"characterNames": {
|
||||||
"Agent Johnson": "Agen Jhonson",
|
"Agent Johnson": "Agen Johnson",
|
||||||
"B-9000": "B-9000",
|
"B-9000": "B-9000",
|
||||||
"Bernard": "Beruang",
|
"Bernard": "Bernard",
|
||||||
"Bones": "Jerangkong",
|
"Bones": "Jerangkong",
|
||||||
"Butch": "Koboi",
|
"Butch": "Butch",
|
||||||
"Easter Bunny": "Kelinci Paskah",
|
"Easter Bunny": "Kelinci Paskah",
|
||||||
"Flopsy": "Kelinci",
|
"Flopsy": "Kelinci",
|
||||||
"Frosty": "Manusia Salju",
|
"Frosty": "Frosty",
|
||||||
"Gretel": "Gretel",
|
"Gretel": "Gretel",
|
||||||
"Grumbledorf": "Penyihir",
|
"Grumbledorf": "Grumbledorf",
|
||||||
"Jack Morgan": "Jack Morgan",
|
"Jack Morgan": "Jack Morgan",
|
||||||
"Kronk": "Ade Rai",
|
"Kronk": "Kronk",
|
||||||
"Lee": "Yudu",
|
"Lee": "Lee",
|
||||||
"Lucky": "Lucky",
|
"Lucky": "Lucky",
|
||||||
"Mel": "Yani",
|
"Mel": "Mel",
|
||||||
"Middle-Man": "Manusia Super",
|
"Middle-Man": "Manusia Super",
|
||||||
"Minimus": "Minimus",
|
"Minimus": "Minimus",
|
||||||
"Pascal": "Pinguin",
|
"Pascal": "Pascal",
|
||||||
"Pixel": "Peri",
|
"Pixel": "Peri",
|
||||||
"Sammy Slam": "Sammy Slam",
|
"Sammy Slam": "Sammy Slam",
|
||||||
"Santa Claus": "Santa Klaus",
|
"Santa Claus": "Santa Klaus",
|
||||||
"Snake Shadow": "Ninja",
|
"Snake Shadow": "Ninja",
|
||||||
"Spaz": "Reno",
|
"Spaz": "Spaz",
|
||||||
"Taobao Mascot": "Maskot Taobao",
|
"Taobao Mascot": "Maskot Taobao",
|
||||||
"Todd": "Todd",
|
"Todd": "Todd",
|
||||||
"Todd McBurton": "Rambo",
|
"Todd McBurton": "Rambo",
|
||||||
"Xara": "Xara",
|
"Xara": "Xara",
|
||||||
"Zoe": "Putri",
|
"Zoe": "Zoe",
|
||||||
"Zola": "Zola"
|
"Zola": "Zola"
|
||||||
},
|
},
|
||||||
"coopLevelNames": {
|
"coopLevelNames": {
|
||||||
|
|
@ -1436,7 +1448,7 @@
|
||||||
"Final glorious epic slow motion battle to the death.": "Pertarungan slow motion epik hingga kematian menjemput.",
|
"Final glorious epic slow motion battle to the death.": "Pertarungan slow motion epik hingga kematian menjemput.",
|
||||||
"Gather eggs!": "Kumpulkan telur!",
|
"Gather eggs!": "Kumpulkan telur!",
|
||||||
"Get the flag to the enemy end zone.": "Bawa bendera sampai ujung lapangan.",
|
"Get the flag to the enemy end zone.": "Bawa bendera sampai ujung lapangan.",
|
||||||
"How fast can you defeat the ninjas?": "Seberapa cepat kamu bisa mengalahkan ninja-ninja itu?",
|
"How fast can you defeat the ninjas?": "Secepat apa kamu bisa mengalahkan para ninja?",
|
||||||
"Kill a set number of enemies to win.": "Hancurkan sejumlah musuh.",
|
"Kill a set number of enemies to win.": "Hancurkan sejumlah musuh.",
|
||||||
"Last one standing wins.": "Terakhir hidup menang.",
|
"Last one standing wins.": "Terakhir hidup menang.",
|
||||||
"Last remaining alive wins.": "Terakhir hidup menang.",
|
"Last remaining alive wins.": "Terakhir hidup menang.",
|
||||||
|
|
@ -1523,10 +1535,11 @@
|
||||||
"Greek": "Yunani",
|
"Greek": "Yunani",
|
||||||
"Hindi": "Hindi",
|
"Hindi": "Hindi",
|
||||||
"Hungarian": "Hongaria",
|
"Hungarian": "Hongaria",
|
||||||
"Indonesian": "Indonesia",
|
"Indonesian": "Bahasa Indonesia",
|
||||||
"Italian": "Italia",
|
"Italian": "Italia",
|
||||||
"Japanese": "Jepang",
|
"Japanese": "Jepang",
|
||||||
"Korean": "Korea",
|
"Korean": "Korea",
|
||||||
|
"Malay": "Bahasa Malaysia",
|
||||||
"Persian": "Persia",
|
"Persian": "Persia",
|
||||||
"Polish": "Polandia",
|
"Polish": "Polandia",
|
||||||
"Portuguese": "Portugis",
|
"Portuguese": "Portugis",
|
||||||
|
|
@ -1809,6 +1822,7 @@
|
||||||
"usesExternalControllerText": "Game ini menggunakan pengontrol external untuk input.",
|
"usesExternalControllerText": "Game ini menggunakan pengontrol external untuk input.",
|
||||||
"usingItunesText": "Menggunakan soundtrack dari aplikasi Musik",
|
"usingItunesText": "Menggunakan soundtrack dari aplikasi Musik",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Tolong pastikan lagu diacak dan diulang di iTunes. ",
|
"usingItunesTurnRepeatAndShuffleOnText": "Tolong pastikan lagu diacak dan diulang di iTunes. ",
|
||||||
|
"v2AccountLinkingInfoText": "Untuk menautkan akun V2, gunakan tombol 'Manajemen Akun'.",
|
||||||
"validatingTestBuildText": "Memvalidasi Bangunan Tes...",
|
"validatingTestBuildText": "Memvalidasi Bangunan Tes...",
|
||||||
"victoryText": "Menang!",
|
"victoryText": "Menang!",
|
||||||
"voteDelayText": "Kamu tidak dapat memulai pemilihan suara dalam ${NUMBER} detik",
|
"voteDelayText": "Kamu tidak dapat memulai pemilihan suara dalam ${NUMBER} detik",
|
||||||
|
|
@ -1841,6 +1855,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Gelombang",
|
"waveText": "Gelombang",
|
||||||
"wellSureText": "Sip!",
|
"wellSureText": "Sip!",
|
||||||
|
"whatIsThisText": "Apa ini?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/italian.json
vendored
10
dist/ba_data/data/languages/italian.json
vendored
|
|
@ -9,6 +9,7 @@
|
||||||
"changeOncePerSeasonError": "Devi aspettare la prossima stagione per apportare delle modifiche (${NUM} days)",
|
"changeOncePerSeasonError": "Devi aspettare la prossima stagione per apportare delle modifiche (${NUM} days)",
|
||||||
"customName": "Nome Personalizzato",
|
"customName": "Nome Personalizzato",
|
||||||
"deviceSpecificAccountText": "Stai usando un account automaticamente generato: ${NAME}",
|
"deviceSpecificAccountText": "Stai usando un account automaticamente generato: ${NAME}",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Se desideri utilizzare un'altro account Google,\nutilizza l'app Google Play Games.",
|
||||||
"linkAccountsEnterCodeText": "Inserisci il codice",
|
"linkAccountsEnterCodeText": "Inserisci il codice",
|
||||||
"linkAccountsGenerateCodeText": "Genera codice",
|
"linkAccountsGenerateCodeText": "Genera codice",
|
||||||
"linkAccountsInfoText": "(condividi i progressi sui vari dispositivi)",
|
"linkAccountsInfoText": "(condividi i progressi sui vari dispositivi)",
|
||||||
|
|
@ -44,6 +45,7 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Seleziona un account da scollegare",
|
"unlinkAccountsInstructionsText": "Seleziona un account da scollegare",
|
||||||
"unlinkAccountsText": "Scollega Account",
|
"unlinkAccountsText": "Scollega Account",
|
||||||
|
"unlinkLegacyV1AccountsText": "Desvincular cuentas heredadas (V1)",
|
||||||
"v2LinkInstructionsText": "Usa questo link per creare un account o accedere.",
|
"v2LinkInstructionsText": "Usa questo link per creare un account o accedere.",
|
||||||
"viaAccount": "(tramite ${NAME})",
|
"viaAccount": "(tramite ${NAME})",
|
||||||
"youAreLoggedInAsText": "Accesso effettuato come:",
|
"youAreLoggedInAsText": "Accesso effettuato come:",
|
||||||
|
|
@ -565,7 +567,9 @@
|
||||||
"deleteText": "Cancella",
|
"deleteText": "Cancella",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Nega",
|
"denyText": "Nega",
|
||||||
|
"deprecatedText": "Deprecato",
|
||||||
"desktopResText": "Risoluzione Nativa",
|
"desktopResText": "Risoluzione Nativa",
|
||||||
|
"deviceAccountUpgradeText": "Attenzione:\nHai effettuato l'accesso con un profilo dispositivo (${NAME}$).\nI profili dispositivi verranno rimossi in un aggiornamento futuro.\nAggiornati ad un profilo V2 se desideri mantenere i tuoi progressi.",
|
||||||
"difficultyEasyText": "Facile",
|
"difficultyEasyText": "Facile",
|
||||||
"difficultyHardOnlyText": "Solo Modalità Difficile",
|
"difficultyHardOnlyText": "Solo Modalità Difficile",
|
||||||
"difficultyHardText": "Difficile",
|
"difficultyHardText": "Difficile",
|
||||||
|
|
@ -842,6 +846,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Mi dispiace, il servizio multiplayer di Google non è più disponibile.\nSto lavorando per sostituirlo il più velocemente possibile.\nFino a quando non troverò una soluzione, prova un altro metodo per connetterti.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Mi dispiace, il servizio multiplayer di Google non è più disponibile.\nSto lavorando per sostituirlo il più velocemente possibile.\nFino a quando non troverò una soluzione, prova un altro metodo per connetterti.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Gli acquisti Google Play non sono disponibili.\nPotresti dover aggiornare lo store.",
|
"googlePlayPurchasesNotAvailableText": "Gli acquisti Google Play non sono disponibili.\nPotresti dover aggiornare lo store.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play Services non è disponibile.\nAlcune funzionalità dell'app saranno disattivate.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Sempre",
|
"alwaysText": "Sempre",
|
||||||
|
|
@ -1067,6 +1072,7 @@
|
||||||
"maxConnectionsText": "Connessioni massime",
|
"maxConnectionsText": "Connessioni massime",
|
||||||
"maxPartySizeText": "Dimensione massima gruppo",
|
"maxPartySizeText": "Dimensione massima gruppo",
|
||||||
"maxPlayersText": "Giocatori massimi",
|
"maxPlayersText": "Giocatori massimi",
|
||||||
|
"merchText": "Mercancía!",
|
||||||
"modeArcadeText": "Modalità Arcade",
|
"modeArcadeText": "Modalità Arcade",
|
||||||
"modeClassicText": "Modalità Classica",
|
"modeClassicText": "Modalità Classica",
|
||||||
"modeDemoText": "Modalità Demo",
|
"modeDemoText": "Modalità Demo",
|
||||||
|
|
@ -1108,6 +1114,7 @@
|
||||||
"notSignedInErrorText": "Per fare questo, devi accedere.",
|
"notSignedInErrorText": "Per fare questo, devi accedere.",
|
||||||
"notSignedInGooglePlayErrorText": "Per fare questo devi accedere a Google Play.",
|
"notSignedInGooglePlayErrorText": "Per fare questo devi accedere a Google Play.",
|
||||||
"notSignedInText": "non hai effettuato l'accesso",
|
"notSignedInText": "non hai effettuato l'accesso",
|
||||||
|
"notUsingAccountText": "Nota: ignorando ${SERVICE} account.\nVai su 'Account -> Accedi con ${SERVICE}' se desideri utilizzarlo.",
|
||||||
"nothingIsSelectedErrorText": "Non hai selezionato nulla!",
|
"nothingIsSelectedErrorText": "Non hai selezionato nulla!",
|
||||||
"numberText": "N°${NUMBER}",
|
"numberText": "N°${NUMBER}",
|
||||||
"offText": "Disattiva",
|
"offText": "Disattiva",
|
||||||
|
|
@ -1605,6 +1612,7 @@
|
||||||
"Italian": "Italiano",
|
"Italian": "Italiano",
|
||||||
"Japanese": "Giapponese",
|
"Japanese": "Giapponese",
|
||||||
"Korean": "Koreano",
|
"Korean": "Koreano",
|
||||||
|
"Malay": "Malese",
|
||||||
"Persian": "Persiano",
|
"Persian": "Persiano",
|
||||||
"Polish": "Polacco",
|
"Polish": "Polacco",
|
||||||
"Portuguese": "Portoghese",
|
"Portuguese": "Portoghese",
|
||||||
|
|
@ -1895,6 +1903,7 @@
|
||||||
"usesExternalControllerText": "Questo gioco utilizza un controller esterno come input.",
|
"usesExternalControllerText": "Questo gioco utilizza un controller esterno come input.",
|
||||||
"usingItunesText": "Sto usando una app musicale per la colonna sonora...",
|
"usingItunesText": "Sto usando una app musicale per la colonna sonora...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Per favore, assicurati che la riproduzione casuale sia ATTIVA e che la ripetizione sia su TUTTO su iTunes.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Per favore, assicurati che la riproduzione casuale sia ATTIVA e che la ripetizione sia su TUTTO su iTunes.",
|
||||||
|
"v2AccountLinkingInfoText": "Per collegare degli account V2, usa il tasto 'Gestisci Account'.",
|
||||||
"validatingBetaText": "Sto convalidando la beta...",
|
"validatingBetaText": "Sto convalidando la beta...",
|
||||||
"validatingTestBuildText": "Convalida Build Di Prova...",
|
"validatingTestBuildText": "Convalida Build Di Prova...",
|
||||||
"victoryText": "Vittoria!",
|
"victoryText": "Vittoria!",
|
||||||
|
|
@ -1929,6 +1938,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Ondata",
|
"waveText": "Ondata",
|
||||||
"wellSureText": "Beh, certo!",
|
"wellSureText": "Beh, certo!",
|
||||||
|
"whatIsThisText": "Che cos'è questo?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"licenseText": "Copyright (c) 2007, DarwiinRemote Team\nAll rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n3. Neither the name of this project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
|
"licenseText": "Copyright (c) 2007, DarwiinRemote Team\nAll rights reserved.\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n3. Neither the name of this project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
|
||||||
"licenseTextScale": 0.62,
|
"licenseTextScale": 0.62,
|
||||||
|
|
|
||||||
14
dist/ba_data/data/languages/korean.json
vendored
14
dist/ba_data/data/languages/korean.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "한 시즌마다 바꿀수 있습니다.",
|
"changeOncePerSeason": "한 시즌마다 바꿀수 있습니다.",
|
||||||
"changeOncePerSeasonError": "다음 시즌으로 바뀔때까지 (${NUM} 일)기다려야 계정 이름을 바꿀수 있습니다.",
|
"changeOncePerSeasonError": "다음 시즌으로 바뀔때까지 (${NUM} 일)기다려야 계정 이름을 바꿀수 있습니다.",
|
||||||
"customName": "이름 맞춤설정",
|
"customName": "이름 맞춤설정",
|
||||||
|
"googlePlayGamesAccountSwitchText": "다른 Google 계정을 전환하려면,\nGoogle Play 앱을 사용하세요",
|
||||||
"linkAccountsEnterCodeText": "코드 입력",
|
"linkAccountsEnterCodeText": "코드 입력",
|
||||||
"linkAccountsGenerateCodeText": "코드 생성",
|
"linkAccountsGenerateCodeText": "코드 생성",
|
||||||
"linkAccountsInfoText": "(여러 플랫폼에서 진행 상황을 공유합니다)",
|
"linkAccountsInfoText": "(여러 플랫폼에서 진행 상황을 공유합니다)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "두 개의 계정을 연동하려면 한 곳에서 코드를\n생성한 후 다른 곳에서 해당 코드를 입력합니다.\n진행 상황 및 소지품은 결합됩니다.\n최대 ${COUNT}개의 계정을 연동할 수 있습니다.\n\n중요:당신의 계정만 연동하십시오!\n만약에 당신이 친구의 계정과 연동하면 친구가 게임\n하는 동안 당신은 게임 할수 없게 됩니다!\n\n이 작업은 취소할 수 없으므로 주의하세요!",
|
"linkAccountsInstructionsText": "두 개의 계정을 연동하려면 한 곳에서 코드를\n생성한 후 다른 곳에서 해당 코드를 입력합니다.\n진행 상황 및 소지품은 결합됩니다.\n최대 ${COUNT}개의 계정을 연동할 수 있습니다.\n\n중요:당신의 계정만 연동하십시오!\n만약에 당신이 친구의 계정과 연동하면 친구가 게임\n하는 동안 당신은 게임 할수 없게 됩니다!\n\n이 작업은 취소할 수 없으므로 주의하세요!",
|
||||||
"linkAccountsText": "계정 연동",
|
"linkAccountsText": "계정 연동",
|
||||||
"linkedAccountsText": "연동된 계정",
|
"linkedAccountsText": "연동된 계정",
|
||||||
|
"manageAccountText": "계정 관리",
|
||||||
"nameChangeConfirm": "계정이름을 ${NAME}으로 바꾸시겠습니까?",
|
"nameChangeConfirm": "계정이름을 ${NAME}으로 바꾸시겠습니까?",
|
||||||
"resetProgressConfirmNoAchievementsText": "이 옵션은 협동 모드 진행 상황 및 로컬\n최고 점수를 초기화합니다 (티켓 제외).\n이 작업은 취소할 수 없습니다. 괜찮습니까?",
|
"resetProgressConfirmNoAchievementsText": "이 옵션은 협동 모드 진행 상황 및 로컬\n최고 점수를 초기화합니다 (티켓 제외).\n이 작업은 취소할 수 없습니다. 괜찮습니까?",
|
||||||
"resetProgressConfirmText": "이 옵션은 협동 모드 진행 상황, 업적 및\n로컬 최고 점수를 초기화합니다\n(티켓 제외). 이 작업은 취소할 수 없습니다.\n괜찮습니까?",
|
"resetProgressConfirmText": "이 옵션은 협동 모드 진행 상황, 업적 및\n로컬 최고 점수를 초기화합니다\n(티켓 제외). 이 작업은 취소할 수 없습니다.\n괜찮습니까?",
|
||||||
|
|
@ -39,7 +41,8 @@
|
||||||
"titleText": "계정",
|
"titleText": "계정",
|
||||||
"unlinkAccountsInstructionsText": "계정 연동을 해제할 계정을 선택하세요",
|
"unlinkAccountsInstructionsText": "계정 연동을 해제할 계정을 선택하세요",
|
||||||
"unlinkAccountsText": "계정 연동해제",
|
"unlinkAccountsText": "계정 연동해제",
|
||||||
"v2LinkInstructionsText": "니 링크를 사용해서 계정을 만들거나, 로그인을 하세요.",
|
"unlinkLegacyV1AccountsText": "레거시(V1) 계정 연결 해제",
|
||||||
|
"v2LinkInstructionsText": "이 링크를 사용해서 계정을 만들거나, 로그인을 하세요.",
|
||||||
"viaAccount": "(계정 종류 ${NAME})",
|
"viaAccount": "(계정 종류 ${NAME})",
|
||||||
"youAreSignedInAsText": "현재 로그인된 사용자 이름:"
|
"youAreSignedInAsText": "현재 로그인된 사용자 이름:"
|
||||||
},
|
},
|
||||||
|
|
@ -545,7 +548,9 @@
|
||||||
"deleteText": "삭제",
|
"deleteText": "삭제",
|
||||||
"demoText": "체험판",
|
"demoText": "체험판",
|
||||||
"denyText": "거부",
|
"denyText": "거부",
|
||||||
|
"deprecatedText": "더 이상 사용되지 않음",
|
||||||
"desktopResText": "데스크톱 해상도",
|
"desktopResText": "데스크톱 해상도",
|
||||||
|
"deviceAccountUpgradeText": "경고:\n 기기 계정(${NAME})으로 로그인하셨습니다.\n 기기 계정은 향후 업데이트에서 제거되기에\n 진행 상황을 유지하려면 V2 계정으로 업그레이드하세요.",
|
||||||
"difficultyEasyText": "쉬움",
|
"difficultyEasyText": "쉬움",
|
||||||
"difficultyHardOnlyText": "어려움 모드만",
|
"difficultyHardOnlyText": "어려움 모드만",
|
||||||
"difficultyHardText": "어려움",
|
"difficultyHardText": "어려움",
|
||||||
|
|
@ -803,6 +808,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "죄송하지만, 구글의 멀티플레이어 서비스는 더이상 이용할수가 없어요.\n지금 대체제에 가능한 빨리 작업중이에요.\n그 때까지는, 다른 접속 방법을 사용해주세요.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "죄송하지만, 구글의 멀티플레이어 서비스는 더이상 이용할수가 없어요.\n지금 대체제에 가능한 빨리 작업중이에요.\n그 때까지는, 다른 접속 방법을 사용해주세요.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "구매가 되지 않았습니다.\n아마 스토어 앱을 업데이트 해야 합니다.",
|
"googlePlayPurchasesNotAvailableText": "구매가 되지 않았습니다.\n아마 스토어 앱을 업데이트 해야 합니다.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play 서비스를 사용할 수 없습니다.\n 일부 앱 기능이 비활성화될 수 있습니다.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "언제나",
|
"alwaysText": "언제나",
|
||||||
|
|
@ -999,6 +1005,7 @@
|
||||||
"creditsText": "개발진",
|
"creditsText": "개발진",
|
||||||
"demoMenuText": "데모 메뉴",
|
"demoMenuText": "데모 메뉴",
|
||||||
"endGameText": "게임 종료",
|
"endGameText": "게임 종료",
|
||||||
|
"endTestText": "테스트 종료",
|
||||||
"exitGameText": "게임 종료",
|
"exitGameText": "게임 종료",
|
||||||
"exitToMenuText": "메뉴로 나가시겠습니까?",
|
"exitToMenuText": "메뉴로 나가시겠습니까?",
|
||||||
"howToPlayText": "게임 방법",
|
"howToPlayText": "게임 방법",
|
||||||
|
|
@ -1018,6 +1025,7 @@
|
||||||
"maxConnectionsText": "최대 연결",
|
"maxConnectionsText": "최대 연결",
|
||||||
"maxPartySizeText": "최대 인원",
|
"maxPartySizeText": "최대 인원",
|
||||||
"maxPlayersText": "최대 플레이어",
|
"maxPlayersText": "최대 플레이어",
|
||||||
|
"merchText": "상품!",
|
||||||
"modeArcadeText": "아케이드 모드",
|
"modeArcadeText": "아케이드 모드",
|
||||||
"modeClassicText": "클래식 모드",
|
"modeClassicText": "클래식 모드",
|
||||||
"modeDemoText": "데모 모드",
|
"modeDemoText": "데모 모드",
|
||||||
|
|
@ -1057,6 +1065,7 @@
|
||||||
"notSignedInErrorText": "이 작업을 하려면 로그인해야 합니다.",
|
"notSignedInErrorText": "이 작업을 하려면 로그인해야 합니다.",
|
||||||
"notSignedInGooglePlayErrorText": "이 작업을 하려면 Google Play로 로그인해야 합니다.",
|
"notSignedInGooglePlayErrorText": "이 작업을 하려면 Google Play로 로그인해야 합니다.",
|
||||||
"notSignedInText": "로그인하지 않음",
|
"notSignedInText": "로그인하지 않음",
|
||||||
|
"notUsingAccountText": "참고: ${SERVICE} 계정을 사용하지 않고 있습니다.\n 사용하려면 '계정 -> ${SERVICE}로 로그인'으로 이동하세요.",
|
||||||
"nothingIsSelectedErrorText": "선택된 것이 없습니다!",
|
"nothingIsSelectedErrorText": "선택된 것이 없습니다!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "끔",
|
"offText": "끔",
|
||||||
|
|
@ -1521,6 +1530,7 @@
|
||||||
"Italian": "이탈리아어",
|
"Italian": "이탈리아어",
|
||||||
"Japanese": "일본어",
|
"Japanese": "일본어",
|
||||||
"Korean": "한국어",
|
"Korean": "한국어",
|
||||||
|
"Malay": "말레이어",
|
||||||
"Persian": "페르시아어",
|
"Persian": "페르시아어",
|
||||||
"Polish": "폴란드어",
|
"Polish": "폴란드어",
|
||||||
"Portuguese": "포르투갈어",
|
"Portuguese": "포르투갈어",
|
||||||
|
|
@ -1803,6 +1813,7 @@
|
||||||
"usesExternalControllerText": "이 게임은 외부 컨트롤러를 입력용으로 사용합니다.",
|
"usesExternalControllerText": "이 게임은 외부 컨트롤러를 입력용으로 사용합니다.",
|
||||||
"usingItunesText": "사운트트랙에 음악 앱 사용 중...",
|
"usingItunesText": "사운트트랙에 음악 앱 사용 중...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "iTunes에서 임의 재생이 켜져있고 반복은 모두로 되어 있는지 확인해주십시오.",
|
"usingItunesTurnRepeatAndShuffleOnText": "iTunes에서 임의 재생이 켜져있고 반복은 모두로 되어 있는지 확인해주십시오.",
|
||||||
|
"v2AccountLinkingInfoText": "V2 계정을 연결하려면 '계정 관리' 버튼을 누르세요.",
|
||||||
"validatingTestBuildText": "테스트 빌드 확인 중...",
|
"validatingTestBuildText": "테스트 빌드 확인 중...",
|
||||||
"victoryText": "승리!",
|
"victoryText": "승리!",
|
||||||
"voteDelayText": "${NUMBER} 초 동안 다른 투표를 시작할 수 없습니다.",
|
"voteDelayText": "${NUMBER} 초 동안 다른 투표를 시작할 수 없습니다.",
|
||||||
|
|
@ -1835,6 +1846,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "웨이브",
|
"waveText": "웨이브",
|
||||||
"wellSureText": "확인!",
|
"wellSureText": "확인!",
|
||||||
|
"whatIsThisText": "이게 뭔가요?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote 저작권"
|
"titleText": "DarwiinRemote 저작권"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
1878
dist/ba_data/data/languages/malay.json
vendored
Normal file
1878
dist/ba_data/data/languages/malay.json
vendored
Normal file
File diff suppressed because it is too large
Load diff
19
dist/ba_data/data/languages/persian.json
vendored
19
dist/ba_data/data/languages/persian.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": ".فقط یکبار در هر فصل میتوانید این مورد را تغییر دهید",
|
"changeOncePerSeason": ".فقط یکبار در هر فصل میتوانید این مورد را تغییر دهید",
|
||||||
"changeOncePerSeasonError": "(روز تا فصل بعد ${NUM}) برای تغییر این گزینه باید تا فصل بعد صبر کنید",
|
"changeOncePerSeasonError": "(روز تا فصل بعد ${NUM}) برای تغییر این گزینه باید تا فصل بعد صبر کنید",
|
||||||
"customName": "نام سفارشی",
|
"customName": "نام سفارشی",
|
||||||
|
"googlePlayGamesAccountSwitchText": "اگه میخوای اکانت گوگلت رو استفاده کنی\nاستفاده کن اکانت گوگل پلی بازی های دیگت رو",
|
||||||
"linkAccountsEnterCodeText": "کد را وارد کنید",
|
"linkAccountsEnterCodeText": "کد را وارد کنید",
|
||||||
"linkAccountsGenerateCodeText": "ایجاد کد",
|
"linkAccountsGenerateCodeText": "ایجاد کد",
|
||||||
"linkAccountsInfoText": "(به اشتراک گذاری پیشروی بین دستگاههای مختلف)",
|
"linkAccountsInfoText": "(به اشتراک گذاری پیشروی بین دستگاههای مختلف)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "برای اتصال دو حساب، در یکی از\nآن ها کدی ایجاد کرده \nو آن را در دیگری وارد کنید.\nپیشرفت ها و موجودی ترکیب خواهد شد.\nحساب را وصل کنید ${COUNT} شما می توانید.\n!توجه : فقط حساب هایی را وصل کنید که برای\n شماست\nاگر شما حساب دیگری را وصل کنید، شما توانایی این را ندارید که در یک زمان بازی کنید!\nاین عمل برگشت پذیر نیست، پس \nدقت کنید!",
|
"linkAccountsInstructionsText": "برای اتصال دو حساب، در یکی از\nآن ها کدی ایجاد کرده \nو آن را در دیگری وارد کنید.\nپیشرفت ها و موجودی ترکیب خواهد شد.\nحساب را وصل کنید ${COUNT} شما می توانید.\n!توجه : فقط حساب هایی را وصل کنید که برای\n شماست\nاگر شما حساب دیگری را وصل کنید، شما توانایی این را ندارید که در یک زمان بازی کنید!\nاین عمل برگشت پذیر نیست، پس \nدقت کنید!",
|
||||||
"linkAccountsText": "متصل کردن حساب ها",
|
"linkAccountsText": "متصل کردن حساب ها",
|
||||||
"linkedAccountsText": ":حساب های متصل شده",
|
"linkedAccountsText": ":حساب های متصل شده",
|
||||||
|
"manageAccountText": "تنظیمات حساب کاربری",
|
||||||
"nameChangeConfirm": "تغییر کند؟ ${NAME} آیا نام شما به",
|
"nameChangeConfirm": "تغییر کند؟ ${NAME} آیا نام شما به",
|
||||||
"resetProgressConfirmNoAchievementsText": "همهٔ پیشرویهای شما در بخش همکاری و بالاترین امتیازات\nشما پاک خواهد شد. (به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
"resetProgressConfirmNoAchievementsText": "همهٔ پیشرویهای شما در بخش همکاری و بالاترین امتیازات\nشما پاک خواهد شد. (به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
||||||
"resetProgressConfirmText": "همهٔ پیشرویها در بخش همکاری، دستاوردها\n.و امتیازات بالای شما پاک خواهد شد\n(به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
"resetProgressConfirmText": "همهٔ پیشرویها در بخش همکاری، دستاوردها\n.و امتیازات بالای شما پاک خواهد شد\n(به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
||||||
|
|
@ -38,6 +40,7 @@
|
||||||
"titleText": "حساب",
|
"titleText": "حساب",
|
||||||
"unlinkAccountsInstructionsText": "یک حساب را برای جداسازی انتخاب کنید",
|
"unlinkAccountsInstructionsText": "یک حساب را برای جداسازی انتخاب کنید",
|
||||||
"unlinkAccountsText": "جداسازی حسابها",
|
"unlinkAccountsText": "جداسازی حسابها",
|
||||||
|
"unlinkLegacyV1AccountsText": "لغو پیوند حسابهای قدیمی (V1)",
|
||||||
"v2LinkInstructionsText": "استفاده از این لینک برای ایجاد یک حساب کاربری و یا ورود به سیستم.",
|
"v2LinkInstructionsText": "استفاده از این لینک برای ایجاد یک حساب کاربری و یا ورود به سیستم.",
|
||||||
"viaAccount": "(${NAME} از طریق حساب)",
|
"viaAccount": "(${NAME} از طریق حساب)",
|
||||||
"youAreSignedInAsText": ":با این حساب وصل شدهاید"
|
"youAreSignedInAsText": ":با این حساب وصل شدهاید"
|
||||||
|
|
@ -546,7 +549,9 @@
|
||||||
"deleteText": "پاک کن",
|
"deleteText": "پاک کن",
|
||||||
"demoText": "نسخه آزمایشی",
|
"demoText": "نسخه آزمایشی",
|
||||||
"denyText": "نپذیرفتن",
|
"denyText": "نپذیرفتن",
|
||||||
|
"deprecatedText": "ناراحت شد",
|
||||||
"desktopResText": "رزولوشن دسکتاپ",
|
"desktopResText": "رزولوشن دسکتاپ",
|
||||||
|
"deviceAccountUpgradeText": "هشدار:\nشما با حساب کاربری دستگاه ثبت نام کرده اید (${NAME}).\nدر بروزرسانی های آینده حساب کاربری دستگاه حذف خواهد شد.\nبه حساب کاربری نسخه 2 بروزرسانی کنید اگر می خواهید روند را ادامه دهید.",
|
||||||
"difficultyEasyText": "آسان",
|
"difficultyEasyText": "آسان",
|
||||||
"difficultyHardOnlyText": "فقط حالت سخت",
|
"difficultyHardOnlyText": "فقط حالت سخت",
|
||||||
"difficultyHardText": "سخت",
|
"difficultyHardText": "سخت",
|
||||||
|
|
@ -804,6 +809,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "متأسفیم ، سرویس چند نفره Google دیگر در دسترس نیست.\nمن در اسرع وقت در حال جایگزینی هستم.\nتا آن زمان ، لطفاً روش اتصال دیگری را امتحان کنید.",
|
"googleMultiplayerDiscontinuedText": "متأسفیم ، سرویس چند نفره Google دیگر در دسترس نیست.\nمن در اسرع وقت در حال جایگزینی هستم.\nتا آن زمان ، لطفاً روش اتصال دیگری را امتحان کنید.",
|
||||||
"googlePlayPurchasesNotAvailableText": "خرید های گوگلپلی در دسترس نیستند.\nاحتمالا باید برنامهی استور خود را بروزرسانی کنید.",
|
"googlePlayPurchasesNotAvailableText": "خرید های گوگلپلی در دسترس نیستند.\nاحتمالا باید برنامهی استور خود را بروزرسانی کنید.",
|
||||||
|
"googlePlayServicesNotAvailableText": ".سرویس گوگل پلی در دسترس نیست\n.بعضی عملکرد های برنامه ممکن غیرفعال باشند",
|
||||||
"googlePlayText": "گوگل پلی",
|
"googlePlayText": "گوگل پلی",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "همیشه",
|
"alwaysText": "همیشه",
|
||||||
|
|
@ -863,7 +869,7 @@
|
||||||
"someDaysText": "بعضی روزا دوس داری مشت بزنی یه جایی. یا یه چیزیو بزنی بترکونی.",
|
"someDaysText": "بعضی روزا دوس داری مشت بزنی یه جایی. یا یه چیزیو بزنی بترکونی.",
|
||||||
"titleText": "${APP_NAME} راهنمایی",
|
"titleText": "${APP_NAME} راهنمایی",
|
||||||
"toGetTheMostText": "To get the most out of this game, you'll need:",
|
"toGetTheMostText": "To get the most out of this game, you'll need:",
|
||||||
"welcomeText": "${APP_NAME}!خوش آمدید به"
|
"welcomeText": "!خوش آمدید ${APP_NAME} به"
|
||||||
},
|
},
|
||||||
"holdAnyButtonText": "<نگه داشتن هر دکمه>",
|
"holdAnyButtonText": "<نگه داشتن هر دکمه>",
|
||||||
"holdAnyKeyText": "<نگه داشتن هر کلید>",
|
"holdAnyKeyText": "<نگه داشتن هر کلید>",
|
||||||
|
|
@ -1000,6 +1006,7 @@
|
||||||
"creditsText": "درباره",
|
"creditsText": "درباره",
|
||||||
"demoMenuText": "منو نسخه ی نمایشی",
|
"demoMenuText": "منو نسخه ی نمایشی",
|
||||||
"endGameText": "پایان بازی",
|
"endGameText": "پایان بازی",
|
||||||
|
"endTestText": "پایان تست",
|
||||||
"exitGameText": "خروج از بازی",
|
"exitGameText": "خروج از بازی",
|
||||||
"exitToMenuText": "خروج به منو؟",
|
"exitToMenuText": "خروج به منو؟",
|
||||||
"howToPlayText": "روش بازی",
|
"howToPlayText": "روش بازی",
|
||||||
|
|
@ -1019,6 +1026,7 @@
|
||||||
"maxConnectionsText": "حداکثر اتصالات",
|
"maxConnectionsText": "حداکثر اتصالات",
|
||||||
"maxPartySizeText": "حداکثر فضای پارتی",
|
"maxPartySizeText": "حداکثر فضای پارتی",
|
||||||
"maxPlayersText": "حداکثر بازیکنان",
|
"maxPlayersText": "حداکثر بازیکنان",
|
||||||
|
"merchText": "اجناس",
|
||||||
"modeArcadeText": "حالت بازی",
|
"modeArcadeText": "حالت بازی",
|
||||||
"modeClassicText": "حالت کلاسیک",
|
"modeClassicText": "حالت کلاسیک",
|
||||||
"modeDemoText": "حالت نمایشی",
|
"modeDemoText": "حالت نمایشی",
|
||||||
|
|
@ -1058,6 +1066,7 @@
|
||||||
"notSignedInErrorText": ".برای انجام این کار باید وارد شوید",
|
"notSignedInErrorText": ".برای انجام این کار باید وارد شوید",
|
||||||
"notSignedInGooglePlayErrorText": "برا استفاده از این مورد شما باید به گوگلپلی وارد شوید",
|
"notSignedInGooglePlayErrorText": "برا استفاده از این مورد شما باید به گوگلپلی وارد شوید",
|
||||||
"notSignedInText": "وارد نشدهای",
|
"notSignedInText": "وارد نشدهای",
|
||||||
|
"notUsingAccountText": "توجه: نادیده گرفتن حساب ${SERVICE}.\n اگر میخواهید از آن استفاده کنید، به «حساب -> با ${SERVICE}» وارد شوید.",
|
||||||
"nothingIsSelectedErrorText": "چیزی انتخاب نشده",
|
"nothingIsSelectedErrorText": "چیزی انتخاب نشده",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "خاموش",
|
"offText": "خاموش",
|
||||||
|
|
@ -1116,7 +1125,11 @@
|
||||||
"pleaseWaitText": "…لطفاً صبر کنید",
|
"pleaseWaitText": "…لطفاً صبر کنید",
|
||||||
"pluginClassLoadErrorText": "${ERROR} :«${PLUGIN}» خطا در بارگیری دستهبندی افزونهٔ",
|
"pluginClassLoadErrorText": "${ERROR} :«${PLUGIN}» خطا در بارگیری دستهبندی افزونهٔ",
|
||||||
"pluginInitErrorText": "${ERROR} :«${PLUGIN}» خطا در راهاندازی افزونهٔ",
|
"pluginInitErrorText": "${ERROR} :«${PLUGIN}» خطا در راهاندازی افزونهٔ",
|
||||||
|
"pluginSettingsText": "تنظیمات پلاگین",
|
||||||
|
"pluginsAutoEnableNewText": "فعال کردن خودکار افزونه های جدید",
|
||||||
"pluginsDetectedText": "افزونه(ها)ی جدید شناسایی شد. آنها را در تنظیمات فعال، یا پیکربندی کنید.",
|
"pluginsDetectedText": "افزونه(ها)ی جدید شناسایی شد. آنها را در تنظیمات فعال، یا پیکربندی کنید.",
|
||||||
|
"pluginsDisableAllText": "غیرفعال کردن همه افزونه ها",
|
||||||
|
"pluginsEnableAllText": "فعال کردن همه افزونه ها",
|
||||||
"pluginsRemovedText": "${NUM} افزونه دیگر یافت نمیشود.",
|
"pluginsRemovedText": "${NUM} افزونه دیگر یافت نمیشود.",
|
||||||
"pluginsText": "افزونهها",
|
"pluginsText": "افزونهها",
|
||||||
"practiceText": "تمرین",
|
"practiceText": "تمرین",
|
||||||
|
|
@ -1251,6 +1264,7 @@
|
||||||
"netTestingText": "تست شبکه",
|
"netTestingText": "تست شبکه",
|
||||||
"resetText": "باز گرداندن",
|
"resetText": "باز گرداندن",
|
||||||
"showBombTrajectoriesText": "نمایش خط سیر بمب",
|
"showBombTrajectoriesText": "نمایش خط سیر بمب",
|
||||||
|
"showInGamePingText": "نمایش پینگ در بازی",
|
||||||
"showPlayerNamesText": "نمایش نام بازیکنان",
|
"showPlayerNamesText": "نمایش نام بازیکنان",
|
||||||
"showUserModsText": "نمایش پوشهٔ سبک بازیها",
|
"showUserModsText": "نمایش پوشهٔ سبک بازیها",
|
||||||
"titleText": "پیشرفته",
|
"titleText": "پیشرفته",
|
||||||
|
|
@ -1524,6 +1538,7 @@
|
||||||
"Italian": "ایتالیایی",
|
"Italian": "ایتالیایی",
|
||||||
"Japanese": "ژاپنی",
|
"Japanese": "ژاپنی",
|
||||||
"Korean": "کرهای",
|
"Korean": "کرهای",
|
||||||
|
"Malay": "مالایی",
|
||||||
"Persian": "فارسی",
|
"Persian": "فارسی",
|
||||||
"Polish": "لهستانی",
|
"Polish": "لهستانی",
|
||||||
"Portuguese": "پرتغالی",
|
"Portuguese": "پرتغالی",
|
||||||
|
|
@ -1806,6 +1821,7 @@
|
||||||
"usesExternalControllerText": "این بازی از یک کنترلر خارجی برای ورودی استفاده می کند.",
|
"usesExternalControllerText": "این بازی از یک کنترلر خارجی برای ورودی استفاده می کند.",
|
||||||
"usingItunesText": "استفاده از برنامه ی موسیقی برای موسیقی متن",
|
"usingItunesText": "استفاده از برنامه ی موسیقی برای موسیقی متن",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "مطمین شید که شافل روشن است و تکرار کنید همه رو در آیتونز",
|
"usingItunesTurnRepeatAndShuffleOnText": "مطمین شید که شافل روشن است و تکرار کنید همه رو در آیتونز",
|
||||||
|
"v2AccountLinkingInfoText": "برای پیوند دادن حسابهای V2، از دکمه «مدیریت حساب» استفاده کنید.",
|
||||||
"validatingTestBuildText": "... در حال بررسی حالت آزمایشی",
|
"validatingTestBuildText": "... در حال بررسی حالت آزمایشی",
|
||||||
"victoryText": "! برنده شدی",
|
"victoryText": "! برنده شدی",
|
||||||
"voteDelayText": ".ثانیه رای گیری کنید ${NUMBER} شما نمیتوانید به مدت",
|
"voteDelayText": ".ثانیه رای گیری کنید ${NUMBER} شما نمیتوانید به مدت",
|
||||||
|
|
@ -1838,6 +1854,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "دست",
|
"waveText": "دست",
|
||||||
"wellSureText": "! حتما",
|
"wellSureText": "! حتما",
|
||||||
|
"whatIsThisText": "این چیه؟",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
22
dist/ba_data/data/languages/polish.json
vendored
22
dist/ba_data/data/languages/polish.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Możesz to zmienić tylko raz na sezon.",
|
"changeOncePerSeason": "Możesz to zmienić tylko raz na sezon.",
|
||||||
"changeOncePerSeasonError": "Musisz poczekać do następnego sezonu by znowu to zmienić (${NUM} dni)",
|
"changeOncePerSeasonError": "Musisz poczekać do następnego sezonu by znowu to zmienić (${NUM} dni)",
|
||||||
"customName": "Losowa Nazwa",
|
"customName": "Losowa Nazwa",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Jeśli chcesz użyć innego konta Google,\nużyj aplikacji Gry Google Play, aby przełączyć się na to konto.",
|
||||||
"linkAccountsEnterCodeText": "Wpisz Kod",
|
"linkAccountsEnterCodeText": "Wpisz Kod",
|
||||||
"linkAccountsGenerateCodeText": "Wygeneruj Kod",
|
"linkAccountsGenerateCodeText": "Wygeneruj Kod",
|
||||||
"linkAccountsInfoText": "(przenoś postęp między różnymi platformami)",
|
"linkAccountsInfoText": "(przenoś postęp między różnymi platformami)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "By połączyć dwa konta, wygeneruj kod\nna jednym z nich i wpisz na drugim.\nPostęp i ekwipunek zostaną połączone.\nMożesz połączyć do ${COUNT} kont.\n\nUWAGA: Łącz tylko konta, które należą do Ciebie!\nJeśli połączysz konto z przyjacielem,\nnie będziecie mogli grać w tym samym czasie!\n\nAktualnie nie można tego cofnąć, więc uważaj!",
|
"linkAccountsInstructionsText": "By połączyć dwa konta, wygeneruj kod\nna jednym z nich i wpisz na drugim.\nPostęp i ekwipunek zostaną połączone.\nMożesz połączyć do ${COUNT} kont.\n\nUWAGA: Łącz tylko konta, które należą do Ciebie!\nJeśli połączysz konto z przyjacielem,\nnie będziecie mogli grać w tym samym czasie!\n\nAktualnie nie można tego cofnąć, więc uważaj!",
|
||||||
"linkAccountsText": "Połącz Konta",
|
"linkAccountsText": "Połącz Konta",
|
||||||
"linkedAccountsText": "Połączone Konta:",
|
"linkedAccountsText": "Połączone Konta:",
|
||||||
|
"manageAccountText": "Zarządzaj Kontem",
|
||||||
"nameChangeConfirm": "Zmienić twoją nazwę konta na ${NAME}?",
|
"nameChangeConfirm": "Zmienić twoją nazwę konta na ${NAME}?",
|
||||||
"notLoggedInText": "<niezalogowany>",
|
"notLoggedInText": "<niezalogowany>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Spowoduje to wyczyszczenie postępu i lokalnych\nrekordów w trybie Kooperacji (kupony pozostaną).\nOperacja nieodwracalna. Jesteś pewny?",
|
"resetProgressConfirmNoAchievementsText": "Spowoduje to wyczyszczenie postępu i lokalnych\nrekordów w trybie Kooperacji (kupony pozostaną).\nOperacja nieodwracalna. Jesteś pewny?",
|
||||||
|
|
@ -42,10 +44,11 @@
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Wybierz konto do rozłączenia",
|
"unlinkAccountsInstructionsText": "Wybierz konto do rozłączenia",
|
||||||
"unlinkAccountsText": "Rozłącz konta",
|
"unlinkAccountsText": "Rozłącz konta",
|
||||||
|
"unlinkLegacyV1AccountsText": "Rozłącz stare konta (V1)",
|
||||||
"v2LinkInstructionsText": "Użyj tego linku aby stworzyć konto lub zaloguj się.",
|
"v2LinkInstructionsText": "Użyj tego linku aby stworzyć konto lub zaloguj się.",
|
||||||
"viaAccount": "(przez konto ${NAME})",
|
"viaAccount": "(przez konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Jesteś zalogowany jako:",
|
"youAreLoggedInAsText": "Jesteś zalogowany jako:",
|
||||||
"youAreSignedInAsText": "Jesteś zapisany jako:"
|
"youAreSignedInAsText": "Jesteś zalogowany jako:"
|
||||||
},
|
},
|
||||||
"achievementChallengesText": "Lista Osiągnięć i Wyzwań",
|
"achievementChallengesText": "Lista Osiągnięć i Wyzwań",
|
||||||
"achievementText": "Osiągnięcia",
|
"achievementText": "Osiągnięcia",
|
||||||
|
|
@ -510,6 +513,7 @@
|
||||||
"welcome2Text": "Możesz również zdobywać kupony z wielu tych samych działań.\nKupony mogą zostać użyte do: odblokowywania nowych postaci,\nmap, mini-gierek, uczestniczenia w turniejach i innych.",
|
"welcome2Text": "Możesz również zdobywać kupony z wielu tych samych działań.\nKupony mogą zostać użyte do: odblokowywania nowych postaci,\nmap, mini-gierek, uczestniczenia w turniejach i innych.",
|
||||||
"yourPowerRankingText": "Twoje miejsce:"
|
"yourPowerRankingText": "Twoje miejsce:"
|
||||||
},
|
},
|
||||||
|
"copyConfirmText": "Skopiowano do schowka.",
|
||||||
"copyOfText": "${NAME} - kopia",
|
"copyOfText": "${NAME} - kopia",
|
||||||
"copyText": "Kopiuj",
|
"copyText": "Kopiuj",
|
||||||
"createAPlayerProfileText": "Utworzyć profil gracza?",
|
"createAPlayerProfileText": "Utworzyć profil gracza?",
|
||||||
|
|
@ -562,7 +566,9 @@
|
||||||
"deleteText": "Usuń",
|
"deleteText": "Usuń",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Odmów",
|
"denyText": "Odmów",
|
||||||
|
"deprecatedText": "Przestarzałe",
|
||||||
"desktopResText": "Rozdzielczość ekranu",
|
"desktopResText": "Rozdzielczość ekranu",
|
||||||
|
"deviceAccountUpgradeText": "Uwaga:\nLogujesz się kontem urządzenia (${NAME}).\nKonta urządzenia zostaną usunięte w przyszłej aktualizacji.\nUlepsz do konta V2, jeżeli chcesz zachować swój postęp.",
|
||||||
"difficultyEasyText": "Łatwy",
|
"difficultyEasyText": "Łatwy",
|
||||||
"difficultyHardOnlyText": "Tylko w trudnym trybie",
|
"difficultyHardOnlyText": "Tylko w trudnym trybie",
|
||||||
"difficultyHardText": "Trudny",
|
"difficultyHardText": "Trudny",
|
||||||
|
|
@ -648,7 +654,7 @@
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} Epickie zwolnione tempo.",
|
"epicDescriptionFilterText": "${DESCRIPTION} Epickie zwolnione tempo.",
|
||||||
"epicNameFilterText": "Epicki tryb - ${NAME}",
|
"epicNameFilterText": "Epicki tryb - ${NAME}",
|
||||||
"errorAccessDeniedText": "odmowa dostępu",
|
"errorAccessDeniedText": "odmowa dostępu",
|
||||||
"errorDeviceTimeIncorrectText": "Czas na Twoim urządzeniu nie zgadza się o ${HOURS} godziny.\nTo może powodować problemy.\nSprawdź swoje ustawienia czasu i strefy czasowej.",
|
"errorDeviceTimeIncorrectText": "Czas na Twoim urządzeniu różni się o ${HOURS} godziny.\nTo może spowodować problemy.\nSprawdź swoje ustawienia czasu i strefy czasowej.",
|
||||||
"errorOutOfDiskSpaceText": "brak miejsca na dysku",
|
"errorOutOfDiskSpaceText": "brak miejsca na dysku",
|
||||||
"errorSecureConnectionFailText": "Wystąpił błąd z ustanowieniem bezpiecznego połączenia z chmurą; funkcje sieciowe mogą nie działać.",
|
"errorSecureConnectionFailText": "Wystąpił błąd z ustanowieniem bezpiecznego połączenia z chmurą; funkcje sieciowe mogą nie działać.",
|
||||||
"errorText": "Błąd",
|
"errorText": "Błąd",
|
||||||
|
|
@ -840,6 +846,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Przepraszam, usługa gry wieloosobowej Google nie jest już dostępna.\nPracuję nad zamiennikiem tak szybko jak potrafię.\nTymczasem proszę o wypróbowanie innej metody połączenia.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Przepraszam, usługa gry wieloosobowej Google nie jest już dostępna.\nPracuję nad zamiennikiem tak szybko jak potrafię.\nTymczasem proszę o wypróbowanie innej metody połączenia.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Zakupy Google Play niedostępne.\nSpróbuj zaktualizować aplikację Google Play.",
|
"googlePlayPurchasesNotAvailableText": "Zakupy Google Play niedostępne.\nSpróbuj zaktualizować aplikację Google Play.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Usługi Google Play są niedostępne.\nNiektóre funkcje aplikacji mogą być wyłączone.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Zawsze",
|
"alwaysText": "Zawsze",
|
||||||
|
|
@ -1043,6 +1050,7 @@
|
||||||
"creditsText": "Info",
|
"creditsText": "Info",
|
||||||
"demoMenuText": "Menu Demo",
|
"demoMenuText": "Menu Demo",
|
||||||
"endGameText": "Koniec Gry",
|
"endGameText": "Koniec Gry",
|
||||||
|
"endTestText": "Zakończ test",
|
||||||
"exitGameText": "Wyjście z Gry",
|
"exitGameText": "Wyjście z Gry",
|
||||||
"exitToMenuText": "Wyjść do menu?",
|
"exitToMenuText": "Wyjść do menu?",
|
||||||
"howToPlayText": "Jak grać",
|
"howToPlayText": "Jak grać",
|
||||||
|
|
@ -1063,6 +1071,7 @@
|
||||||
"maxConnectionsText": "Maksymalne Połączenia",
|
"maxConnectionsText": "Maksymalne Połączenia",
|
||||||
"maxPartySizeText": "Maksymalna ilość graczy",
|
"maxPartySizeText": "Maksymalna ilość graczy",
|
||||||
"maxPlayersText": "Maksymalna ilość graczy",
|
"maxPlayersText": "Maksymalna ilość graczy",
|
||||||
|
"merchText": "Merch!",
|
||||||
"modeArcadeText": "Tryb Salonu Gier",
|
"modeArcadeText": "Tryb Salonu Gier",
|
||||||
"modeClassicText": "Tryb Klasyczny",
|
"modeClassicText": "Tryb Klasyczny",
|
||||||
"modeDemoText": "Tryb Demo",
|
"modeDemoText": "Tryb Demo",
|
||||||
|
|
@ -1104,6 +1113,7 @@
|
||||||
"notSignedInErrorText": "Musisz zalogować się, aby to zrobić.",
|
"notSignedInErrorText": "Musisz zalogować się, aby to zrobić.",
|
||||||
"notSignedInGooglePlayErrorText": "Zaloguj się z Google Play, by to zrobić.",
|
"notSignedInGooglePlayErrorText": "Zaloguj się z Google Play, by to zrobić.",
|
||||||
"notSignedInText": "Nie zapisany",
|
"notSignedInText": "Nie zapisany",
|
||||||
|
"notUsingAccountText": "Uwaga: ignorowanie konta ${SERVICE}.\nIdź do \"Konto -> Zaloguj się kontem ${SERVICE}\", jeżeli chcesz go używać.",
|
||||||
"nothingIsSelectedErrorText": "Nic nie zaznaczyłeś!",
|
"nothingIsSelectedErrorText": "Nic nie zaznaczyłeś!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Off",
|
"offText": "Off",
|
||||||
|
|
@ -1167,7 +1177,11 @@
|
||||||
"pleaseWaitText": "Czekaj chwilkę...",
|
"pleaseWaitText": "Czekaj chwilkę...",
|
||||||
"pluginClassLoadErrorText": "Błąd ładowania klasy pluginu '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Błąd ładowania klasy pluginu '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Błąd inicjowania pluginu '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Błąd inicjowania pluginu '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Ustawienia pluginów",
|
||||||
|
"pluginsAutoEnableNewText": "Auto uruchomienie nowych wtyczek",
|
||||||
"pluginsDetectedText": "Wykryto nowe pluginy. Uruchom ponownie grę, aby je aktywować, lub skonfiguruje je w ustawieniach.",
|
"pluginsDetectedText": "Wykryto nowe pluginy. Uruchom ponownie grę, aby je aktywować, lub skonfiguruje je w ustawieniach.",
|
||||||
|
"pluginsDisableAllText": "Wyłącz wszystkie pluginy",
|
||||||
|
"pluginsEnableAllText": "Włącz wszystkie pluginy",
|
||||||
"pluginsRemovedText": "Usunięto ${NUM} pluginy(ów)",
|
"pluginsRemovedText": "Usunięto ${NUM} pluginy(ów)",
|
||||||
"pluginsText": "Pluginy",
|
"pluginsText": "Pluginy",
|
||||||
"practiceText": "Praktyka",
|
"practiceText": "Praktyka",
|
||||||
|
|
@ -1310,6 +1324,7 @@
|
||||||
"netTestingText": "Testowanie sieci",
|
"netTestingText": "Testowanie sieci",
|
||||||
"resetText": "Reset",
|
"resetText": "Reset",
|
||||||
"showBombTrajectoriesText": "Pokaż trajektorię bomb",
|
"showBombTrajectoriesText": "Pokaż trajektorię bomb",
|
||||||
|
"showInGamePingText": "Pokaż ping w grze",
|
||||||
"showPlayerNamesText": "Pokazuj nazwy graczy",
|
"showPlayerNamesText": "Pokazuj nazwy graczy",
|
||||||
"showUserModsText": "Pokaż katalog modów",
|
"showUserModsText": "Pokaż katalog modów",
|
||||||
"titleText": "Zaawansowane",
|
"titleText": "Zaawansowane",
|
||||||
|
|
@ -1603,6 +1618,7 @@
|
||||||
"Italian": "Włoski",
|
"Italian": "Włoski",
|
||||||
"Japanese": "Japoński",
|
"Japanese": "Japoński",
|
||||||
"Korean": "Koreański",
|
"Korean": "Koreański",
|
||||||
|
"Malay": "Malajski",
|
||||||
"Persian": "Perski",
|
"Persian": "Perski",
|
||||||
"Polish": "Polski",
|
"Polish": "Polski",
|
||||||
"Portuguese": "Portugalski",
|
"Portuguese": "Portugalski",
|
||||||
|
|
@ -1893,6 +1909,7 @@
|
||||||
"usesExternalControllerText": "Ta gra wykorzystuje zewnętrzny kontroler jako wejście.",
|
"usesExternalControllerText": "Ta gra wykorzystuje zewnętrzny kontroler jako wejście.",
|
||||||
"usingItunesText": "Korzystanie z aplikacji muzycznej jako ścieżki dźwiękowej...",
|
"usingItunesText": "Korzystanie z aplikacji muzycznej jako ścieżki dźwiękowej...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Upewnij się, że w ustawieniach iTunes tasowanie utworów i powtarzanie całości jest włączone.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Upewnij się, że w ustawieniach iTunes tasowanie utworów i powtarzanie całości jest włączone.",
|
||||||
|
"v2AccountLinkingInfoText": "Aby połączyć konta V2, użyj przycisku \"Zarządzaj Kontem\".",
|
||||||
"validatingBetaText": "Legalizowanie wersji Beta...",
|
"validatingBetaText": "Legalizowanie wersji Beta...",
|
||||||
"validatingTestBuildText": "Sprawdzanie wersji testowej...",
|
"validatingTestBuildText": "Sprawdzanie wersji testowej...",
|
||||||
"victoryText": "Zwycięstwo!",
|
"victoryText": "Zwycięstwo!",
|
||||||
|
|
@ -1927,6 +1944,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Fala",
|
"waveText": "Fala",
|
||||||
"wellSureText": "No pewnie!",
|
"wellSureText": "No pewnie!",
|
||||||
|
"whatIsThisText": "Co to jest?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Prawa autorskie DarwiinRemote"
|
"titleText": "Prawa autorskie DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
17
dist/ba_data/data/languages/portuguese.json
vendored
17
dist/ba_data/data/languages/portuguese.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Você só pode mudar isso uma vez por temporada.",
|
"changeOncePerSeason": "Você só pode mudar isso uma vez por temporada.",
|
||||||
"changeOncePerSeasonError": "Você deve esperar até a próxima temporada para mudar isso novamente (${NUM} dias)",
|
"changeOncePerSeasonError": "Você deve esperar até a próxima temporada para mudar isso novamente (${NUM} dias)",
|
||||||
"customName": "Nome personalizado",
|
"customName": "Nome personalizado",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Se você quer usar uma conta Google diferente,\nUse o Google Play Games para trocar de conta.",
|
||||||
"linkAccountsEnterCodeText": "Inserir código",
|
"linkAccountsEnterCodeText": "Inserir código",
|
||||||
"linkAccountsGenerateCodeText": "Gerar código",
|
"linkAccountsGenerateCodeText": "Gerar código",
|
||||||
"linkAccountsInfoText": "(compartilhar progresso entre várias plataformas)",
|
"linkAccountsInfoText": "(compartilhar progresso entre várias plataformas)",
|
||||||
|
|
@ -43,6 +44,7 @@
|
||||||
"titleText": "Conta",
|
"titleText": "Conta",
|
||||||
"unlinkAccountsInstructionsText": "Selecione uma conta para desvincular",
|
"unlinkAccountsInstructionsText": "Selecione uma conta para desvincular",
|
||||||
"unlinkAccountsText": "Desvincular contas",
|
"unlinkAccountsText": "Desvincular contas",
|
||||||
|
"unlinkLegacyV1AccountsText": "Desvincular contas herdadas (V1)",
|
||||||
"v2LinkInstructionsText": "Utilize o link para criar uma conta ou entrar nela.",
|
"v2LinkInstructionsText": "Utilize o link para criar uma conta ou entrar nela.",
|
||||||
"viaAccount": "(via ${NAME})",
|
"viaAccount": "(via ${NAME})",
|
||||||
"youAreLoggedInAsText": "Você está logado como:",
|
"youAreLoggedInAsText": "Você está logado como:",
|
||||||
|
|
@ -573,7 +575,9 @@
|
||||||
"deleteText": "Excluir",
|
"deleteText": "Excluir",
|
||||||
"demoText": "Teste",
|
"demoText": "Teste",
|
||||||
"denyText": "Recusar",
|
"denyText": "Recusar",
|
||||||
|
"deprecatedText": "Descontinuado",
|
||||||
"desktopResText": "Resolução da área de trabalho",
|
"desktopResText": "Resolução da área de trabalho",
|
||||||
|
"deviceAccountUpgradeText": "Aviso:\nVocê está logado com a conta do seu dispositivo\n(${NAME}).\nContas de dispositivo serão removidas em uma atualização futura.",
|
||||||
"difficultyEasyText": "Fácil",
|
"difficultyEasyText": "Fácil",
|
||||||
"difficultyHardOnlyText": "Modo difícil apenas",
|
"difficultyHardOnlyText": "Modo difícil apenas",
|
||||||
"difficultyHardText": "Difícil",
|
"difficultyHardText": "Difícil",
|
||||||
|
|
@ -849,6 +853,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Desculpe, o serviço multijogador do Google não está mais disponível.\nEstou trabalhando em uma substituição o mais rápido possível.\nAté lá, tente outro método de conexão.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Desculpe, o serviço multijogador do Google não está mais disponível.\nEstou trabalhando em uma substituição o mais rápido possível.\nAté lá, tente outro método de conexão.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Compras pela Google Play não estão disponíveis.\nTalvez seja necessário atualizar sua loja para isso.",
|
"googlePlayPurchasesNotAvailableText": "Compras pela Google Play não estão disponíveis.\nTalvez seja necessário atualizar sua loja para isso.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Os serviços do Google Play não estão disponíveis. \nAlgumas funções do aplicativo talvez serão desabilitadas.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Sempre",
|
"alwaysText": "Sempre",
|
||||||
|
|
@ -1088,6 +1093,7 @@
|
||||||
"maxConnectionsText": "Limite de Conexões",
|
"maxConnectionsText": "Limite de Conexões",
|
||||||
"maxPartySizeText": "Tamanho Máximo da Sala",
|
"maxPartySizeText": "Tamanho Máximo da Sala",
|
||||||
"maxPlayersText": "Limite de jogadores",
|
"maxPlayersText": "Limite de jogadores",
|
||||||
|
"merchText": "Produtos do BombSquad!",
|
||||||
"modeArcadeText": "Modo Arcade",
|
"modeArcadeText": "Modo Arcade",
|
||||||
"modeClassicText": "Modo Clássico",
|
"modeClassicText": "Modo Clássico",
|
||||||
"modeDemoText": "Modo Demo",
|
"modeDemoText": "Modo Demo",
|
||||||
|
|
@ -1129,6 +1135,7 @@
|
||||||
"notSignedInErrorText": "Você deve iniciar sessão primeiro.",
|
"notSignedInErrorText": "Você deve iniciar sessão primeiro.",
|
||||||
"notSignedInGooglePlayErrorText": "Você deve iniciar sessão no Google Play primeiro.",
|
"notSignedInGooglePlayErrorText": "Você deve iniciar sessão no Google Play primeiro.",
|
||||||
"notSignedInText": "sem sessão iniciada",
|
"notSignedInText": "sem sessão iniciada",
|
||||||
|
"notUsingAccountText": "Aviso: Ignorando a conta ${SERVICE}.\nVá em 'Conta -> Entrar com ${SERVICE}' se quiser usá-la.",
|
||||||
"nothingIsSelectedErrorText": "Nada foi selecionado!",
|
"nothingIsSelectedErrorText": "Nada foi selecionado!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Desligar",
|
"offText": "Desligar",
|
||||||
|
|
@ -1192,7 +1199,11 @@
|
||||||
"pleaseWaitText": "Por favor, aguarde...",
|
"pleaseWaitText": "Por favor, aguarde...",
|
||||||
"pluginClassLoadErrorText": "Erro ao carregar a classe de um plugin '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Erro ao carregar a classe de um plugin '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Erro ao inicializar plugin '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Erro ao inicializar plugin '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Configurações de plugins",
|
||||||
|
"pluginsAutoEnableNewText": "Ativar automaticamente novos plug-ins",
|
||||||
"pluginsDetectedText": "Novo(s) plugin(s) detetados. Reinicie o jogo para ativá-los ou configure-os nas configurações.",
|
"pluginsDetectedText": "Novo(s) plugin(s) detetados. Reinicie o jogo para ativá-los ou configure-os nas configurações.",
|
||||||
|
"pluginsDisableAllText": "Desativar todos os Plugins!",
|
||||||
|
"pluginsEnableAllText": "Habilitar todos os plug-ins!",
|
||||||
"pluginsRemovedText": "${NUM} plugin(s) não foram encontrados.",
|
"pluginsRemovedText": "${NUM} plugin(s) não foram encontrados.",
|
||||||
"pluginsText": "Plugins",
|
"pluginsText": "Plugins",
|
||||||
"practiceText": "Praticar",
|
"practiceText": "Praticar",
|
||||||
|
|
@ -1213,7 +1224,7 @@
|
||||||
"codeTextDescription": "Código Promocional",
|
"codeTextDescription": "Código Promocional",
|
||||||
"enterText": "Entrar"
|
"enterText": "Entrar"
|
||||||
},
|
},
|
||||||
"promoSubmitErrorText": "Erro verifique sua internet",
|
"promoSubmitErrorText": "Erro ao enviar código; Verifique a sua conexão com a internet!",
|
||||||
"ps3ControllersWindow": {
|
"ps3ControllersWindow": {
|
||||||
"macInstructionsText": "Desligue a energia na parte traseira do seu PS3, verifique se\no Bluetooth do seu Mac está ativado, em seguida conecte o seu controle\nno seu Mac através de um cabo USB para emparelhar os dois. A partir daí, você\npode usar o botão home do controle para conectá-lo ao seu Mac\nseja por fio (USB) ou sem fio (Bluetooth).\n\nEm alguns Macs, uma senha pode ser solicitada ao emparelhar.\nSe isso acontecer, consulte o seguinte tutorial ou o Google para obter ajuda.\n\n\n\n\nOs controles de PS3 conectados sem fio devem aparecer na lista de\ndispositivos em Preferências do Sistema > Bluetooth. Você pode precisar remover\nda lista quando você quiser usar com o seu PS3 novamente.\n\nTambém certifique-se de desconectá-los do Bluetooth quando não estiver\nusando ou a bateria ficará acabando.\n\nBluetooth deve suportar até sete dispositivos conectados,\nembora a sua capacidade possa variar.",
|
"macInstructionsText": "Desligue a energia na parte traseira do seu PS3, verifique se\no Bluetooth do seu Mac está ativado, em seguida conecte o seu controle\nno seu Mac através de um cabo USB para emparelhar os dois. A partir daí, você\npode usar o botão home do controle para conectá-lo ao seu Mac\nseja por fio (USB) ou sem fio (Bluetooth).\n\nEm alguns Macs, uma senha pode ser solicitada ao emparelhar.\nSe isso acontecer, consulte o seguinte tutorial ou o Google para obter ajuda.\n\n\n\n\nOs controles de PS3 conectados sem fio devem aparecer na lista de\ndispositivos em Preferências do Sistema > Bluetooth. Você pode precisar remover\nda lista quando você quiser usar com o seu PS3 novamente.\n\nTambém certifique-se de desconectá-los do Bluetooth quando não estiver\nusando ou a bateria ficará acabando.\n\nBluetooth deve suportar até sete dispositivos conectados,\nembora a sua capacidade possa variar.",
|
||||||
"macInstructionsTextScale": 0.74,
|
"macInstructionsTextScale": 0.74,
|
||||||
|
|
@ -1339,6 +1350,7 @@
|
||||||
"netTestingText": "Teste de conexão",
|
"netTestingText": "Teste de conexão",
|
||||||
"resetText": "Redefinir",
|
"resetText": "Redefinir",
|
||||||
"showBombTrajectoriesText": "Mostrar trajetórias da bomba",
|
"showBombTrajectoriesText": "Mostrar trajetórias da bomba",
|
||||||
|
"showInGamePingText": "Mostrar latência no jogo",
|
||||||
"showPlayerNamesText": "Mostrar nomes dos jogadores",
|
"showPlayerNamesText": "Mostrar nomes dos jogadores",
|
||||||
"showUserModsText": "Mostrar Pasta de Modificações",
|
"showUserModsText": "Mostrar Pasta de Modificações",
|
||||||
"titleText": "Avançado",
|
"titleText": "Avançado",
|
||||||
|
|
@ -1633,6 +1645,7 @@
|
||||||
"Italian": "Italiano",
|
"Italian": "Italiano",
|
||||||
"Japanese": "Japonês",
|
"Japanese": "Japonês",
|
||||||
"Korean": "Coreano",
|
"Korean": "Coreano",
|
||||||
|
"Malay": "Malaio",
|
||||||
"Persian": "Persa",
|
"Persian": "Persa",
|
||||||
"Polish": "Polonês",
|
"Polish": "Polonês",
|
||||||
"Portuguese": "Português",
|
"Portuguese": "Português",
|
||||||
|
|
@ -1923,6 +1936,7 @@
|
||||||
"usesExternalControllerText": "Este jogo usa um controle externo para entrada.",
|
"usesExternalControllerText": "Este jogo usa um controle externo para entrada.",
|
||||||
"usingItunesText": "Usando o app de música para a trilha sonora",
|
"usingItunesText": "Usando o app de música para a trilha sonora",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Por favor, certifique-se de que o aleatório esteja ligado e que a repetição seja TODAS AS MÚSICAS no iTunes.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Por favor, certifique-se de que o aleatório esteja ligado e que a repetição seja TODAS AS MÚSICAS no iTunes.",
|
||||||
|
"v2AccountLinkingInfoText": "Para vincular contas V2, use o botão 'Gerenciar conta'.",
|
||||||
"validatingBetaText": "Validando Beta...",
|
"validatingBetaText": "Validando Beta...",
|
||||||
"validatingTestBuildText": "Validando versão de teste...",
|
"validatingTestBuildText": "Validando versão de teste...",
|
||||||
"victoryText": "Vitória!",
|
"victoryText": "Vitória!",
|
||||||
|
|
@ -1957,6 +1971,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Onda",
|
"waveText": "Onda",
|
||||||
"wellSureText": "Claro!",
|
"wellSureText": "Claro!",
|
||||||
|
"whatIsThisText": "Oque é isto?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"licenseTextScale": 0.62,
|
"licenseTextScale": 0.62,
|
||||||
"titleText": "DarwiinRemote Copyright"
|
"titleText": "DarwiinRemote Copyright"
|
||||||
|
|
|
||||||
41
dist/ba_data/data/languages/russian.json
vendored
41
dist/ba_data/data/languages/russian.json
vendored
|
|
@ -9,6 +9,7 @@
|
||||||
"changeOncePerSeasonError": "Вы должны подождать до следующего сезона, чтобы изменить это снова (${NUM} дней)",
|
"changeOncePerSeasonError": "Вы должны подождать до следующего сезона, чтобы изменить это снова (${NUM} дней)",
|
||||||
"customName": "Имя аккаунта",
|
"customName": "Имя аккаунта",
|
||||||
"deviceSpecificAccountText": "Сейчас используется аккаунт имениустройства: ${NAME}",
|
"deviceSpecificAccountText": "Сейчас используется аккаунт имениустройства: ${NAME}",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Если хотите сменить внутриигровой аккаунт Google, используйте приложение Google Play.",
|
||||||
"linkAccountsEnterCodeText": "Введите код",
|
"linkAccountsEnterCodeText": "Введите код",
|
||||||
"linkAccountsGenerateCodeText": "Сгенерировать код",
|
"linkAccountsGenerateCodeText": "Сгенерировать код",
|
||||||
"linkAccountsInfoText": "(делиться достижениями с другими платформами)",
|
"linkAccountsInfoText": "(делиться достижениями с другими платформами)",
|
||||||
|
|
@ -44,6 +45,7 @@
|
||||||
"titleText": "Аккаунт",
|
"titleText": "Аккаунт",
|
||||||
"unlinkAccountsInstructionsText": "Выберите аккаунт, который хотите отвязать",
|
"unlinkAccountsInstructionsText": "Выберите аккаунт, который хотите отвязать",
|
||||||
"unlinkAccountsText": "Отвязать аккаунты",
|
"unlinkAccountsText": "Отвязать аккаунты",
|
||||||
|
"unlinkLegacyV1AccountsText": "Разблокируйте устаревшие (V1) аккаунты",
|
||||||
"v2LinkInstructionsText": "Используйте эту ссылку чтобы создать аккаунт или войти",
|
"v2LinkInstructionsText": "Используйте эту ссылку чтобы создать аккаунт или войти",
|
||||||
"viaAccount": "(через аккаунт ${NAME})",
|
"viaAccount": "(через аккаунт ${NAME})",
|
||||||
"youAreLoggedInAsText": "Вы зашли как:",
|
"youAreLoggedInAsText": "Вы зашли как:",
|
||||||
|
|
@ -515,7 +517,7 @@
|
||||||
},
|
},
|
||||||
"copyConfirmText": "Скопировано в буфер обмена",
|
"copyConfirmText": "Скопировано в буфер обмена",
|
||||||
"copyOfText": "Копия ${NAME}",
|
"copyOfText": "Копия ${NAME}",
|
||||||
"copyText": "Копия",
|
"copyText": "Копировать",
|
||||||
"copyrightText": "© 2013 Eric Froemling",
|
"copyrightText": "© 2013 Eric Froemling",
|
||||||
"createAPlayerProfileText": "Создать профиль игрока?",
|
"createAPlayerProfileText": "Создать профиль игрока?",
|
||||||
"createEditPlayerText": "<Создание / редактирование игрока>",
|
"createEditPlayerText": "<Создание / редактирование игрока>",
|
||||||
|
|
@ -567,7 +569,9 @@
|
||||||
"deleteText": "Удалить",
|
"deleteText": "Удалить",
|
||||||
"demoText": "Демонстрация",
|
"demoText": "Демонстрация",
|
||||||
"denyText": "Отклонить",
|
"denyText": "Отклонить",
|
||||||
|
"deprecatedText": "Устарело>=",
|
||||||
"desktopResText": "Разреш. экрана",
|
"desktopResText": "Разреш. экрана",
|
||||||
|
"deviceAccountUpgradeText": "Внимание!\nВы заригестрированы как (${NAME})!\nДанный аккаунт будет удален в следующем обновлении!\nОбновите его до аккаунта Google Play, если не хотите потерять прогресс!",
|
||||||
"difficultyEasyText": "Легкий",
|
"difficultyEasyText": "Легкий",
|
||||||
"difficultyHardOnlyText": "Только в трудном режиме",
|
"difficultyHardOnlyText": "Только в трудном режиме",
|
||||||
"difficultyHardText": "Трудный",
|
"difficultyHardText": "Трудный",
|
||||||
|
|
@ -780,13 +784,13 @@
|
||||||
"partyInviteText": "${NAME} пригласил\nвас в его лобби!",
|
"partyInviteText": "${NAME} пригласил\nвас в его лобби!",
|
||||||
"partyNameText": "Имя команды",
|
"partyNameText": "Имя команды",
|
||||||
"partyServerRunningText": "Твой сервер для лобби работает.",
|
"partyServerRunningText": "Твой сервер для лобби работает.",
|
||||||
"partySizeText": "Размер группы",
|
"partySizeText": "Игроки",
|
||||||
"partyStatusCheckingText": "Проверка...",
|
"partyStatusCheckingText": "Проверка...",
|
||||||
"partyStatusJoinableText": "Ваша команда доступна через интернет",
|
"partyStatusJoinableText": "Ваша команда доступна через интернет",
|
||||||
"partyStatusNoConnectionText": "Невозможно подключиться к серверу",
|
"partyStatusNoConnectionText": "Невозможно подключиться к серверу",
|
||||||
"partyStatusNotJoinableText": "Ваше лобби недоступно через интернет",
|
"partyStatusNotJoinableText": "Ваше лобби недоступно через интернет",
|
||||||
"partyStatusNotPublicText": "Ваше лобби не публично",
|
"partyStatusNotPublicText": "Ваше лобби не публично",
|
||||||
"pingText": "пинг",
|
"pingText": "Пинг",
|
||||||
"portText": "Порт",
|
"portText": "Порт",
|
||||||
"privatePartyCloudDescriptionText": "Частные лобби работают на выделенных облачных серверах; настройка маршрутизатора не требуется.",
|
"privatePartyCloudDescriptionText": "Частные лобби работают на выделенных облачных серверах; настройка маршрутизатора не требуется.",
|
||||||
"privatePartyHostText": "Создать частное лобби",
|
"privatePartyHostText": "Создать частное лобби",
|
||||||
|
|
@ -846,6 +850,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Простите, сервис многопользовательской игры Google больше не поддерживается.\nЯ работаю над заменой так быстро, насколько это возможно.\nДо тех пор, пожалуйста выберете другой способ подключения.\n-Эрик",
|
"googleMultiplayerDiscontinuedText": "Простите, сервис многопользовательской игры Google больше не поддерживается.\nЯ работаю над заменой так быстро, насколько это возможно.\nДо тех пор, пожалуйста выберете другой способ подключения.\n-Эрик",
|
||||||
"googlePlayPurchasesNotAvailableText": "Покупки в Google Play недоступны.\nВозможно, вам необходимо обновить приложение магазина.",
|
"googlePlayPurchasesNotAvailableText": "Покупки в Google Play недоступны.\nВозможно, вам необходимо обновить приложение магазина.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Сервисы Google Play недоступны.\nНекоторый функционал игры могут быть отключены.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Всегда",
|
"alwaysText": "Всегда",
|
||||||
|
|
@ -1071,6 +1076,7 @@
|
||||||
"maxConnectionsText": "Максимум соединений",
|
"maxConnectionsText": "Максимум соединений",
|
||||||
"maxPartySizeText": "Размер группы",
|
"maxPartySizeText": "Размер группы",
|
||||||
"maxPlayersText": "Максимум игроков",
|
"maxPlayersText": "Максимум игроков",
|
||||||
|
"merchText": "Мерч с символикой Bomb squad!",
|
||||||
"modeArcadeText": "Аркадный режим",
|
"modeArcadeText": "Аркадный режим",
|
||||||
"modeClassicText": "Обычный режим",
|
"modeClassicText": "Обычный режим",
|
||||||
"modeDemoText": "Демонстрационный режим",
|
"modeDemoText": "Демонстрационный режим",
|
||||||
|
|
@ -1112,6 +1118,7 @@
|
||||||
"notSignedInErrorText": "Войдите в аккаунт для начала.",
|
"notSignedInErrorText": "Войдите в аккаунт для начала.",
|
||||||
"notSignedInGooglePlayErrorText": "Войдите сначала в Google Play, а там посмотрим.",
|
"notSignedInGooglePlayErrorText": "Войдите сначала в Google Play, а там посмотрим.",
|
||||||
"notSignedInText": "(вы не вошли)",
|
"notSignedInText": "(вы не вошли)",
|
||||||
|
"notUsingAccountText": "Рекомендация: вы не используете аккаунт ${SERVICE}.\nЗайдите в 'Аккаунт' => 'зайти в ${SERVICE}', чтобы зайти в ${SERVICE}.",
|
||||||
"nothingIsSelectedErrorText": "Ничего не выбрано!",
|
"nothingIsSelectedErrorText": "Ничего не выбрано!",
|
||||||
"numberText": "${NUMBER}",
|
"numberText": "${NUMBER}",
|
||||||
"offText": "Выкл",
|
"offText": "Выкл",
|
||||||
|
|
@ -1175,7 +1182,11 @@
|
||||||
"pleaseWaitText": "Пожалуйста, подождите...",
|
"pleaseWaitText": "Пожалуйста, подождите...",
|
||||||
"pluginClassLoadErrorText": "Ошибка при попытке загрузить класс плагина '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Ошибка при попытке загрузить класс плагина '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Ошибка при инициализации плагина '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Ошибка при инициализации плагина '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Настройки плагина",
|
||||||
|
"pluginsAutoEnableNewText": "Автоматически включать плагины",
|
||||||
"pluginsDetectedText": "Обнаружены новые плагины! Перезапустите игру, чтобы активировать их, или настройте их в настройках.",
|
"pluginsDetectedText": "Обнаружены новые плагины! Перезапустите игру, чтобы активировать их, или настройте их в настройках.",
|
||||||
|
"pluginsDisableAllText": "Выключить все плагины",
|
||||||
|
"pluginsEnableAllText": "Включить все плагины",
|
||||||
"pluginsRemovedText": "${NUM} плагин(ов) больше не найдены.",
|
"pluginsRemovedText": "${NUM} плагин(ов) больше не найдены.",
|
||||||
"pluginsText": "Плагины",
|
"pluginsText": "Плагины",
|
||||||
"practiceText": "Тренировка",
|
"practiceText": "Тренировка",
|
||||||
|
|
@ -1315,6 +1326,7 @@
|
||||||
"netTestingText": "Тестирование сети",
|
"netTestingText": "Тестирование сети",
|
||||||
"resetText": "Сбросить",
|
"resetText": "Сбросить",
|
||||||
"showBombTrajectoriesText": "Показывать траекторию бомбы",
|
"showBombTrajectoriesText": "Показывать траекторию бомбы",
|
||||||
|
"showInGamePingText": "Показать Ping",
|
||||||
"showPlayerNamesText": "Показывать имена игроков",
|
"showPlayerNamesText": "Показывать имена игроков",
|
||||||
"showUserModsText": "Показать папку модов",
|
"showUserModsText": "Показать папку модов",
|
||||||
"titleText": "Дополнительно",
|
"titleText": "Дополнительно",
|
||||||
|
|
@ -1501,10 +1513,10 @@
|
||||||
"Rookie Onslaught": "Атака для новичков",
|
"Rookie Onslaught": "Атака для новичков",
|
||||||
"Runaround": "Бесконечный манёвр",
|
"Runaround": "Бесконечный манёвр",
|
||||||
"The Last Stand": "Последний рубеж",
|
"The Last Stand": "Последний рубеж",
|
||||||
"Uber ${GAME}": "Ӱбер ${GAME}",
|
"Uber ${GAME}": "Убер ${GAME}",
|
||||||
"Uber Football": "Ӱбер регби",
|
"Uber Football": "Убер регби",
|
||||||
"Uber Onslaught": "Ӱбер атака",
|
"Uber Onslaught": "Убер атака",
|
||||||
"Uber Runaround": "Ӱбер беготня"
|
"Uber Runaround": "Убер беготня"
|
||||||
},
|
},
|
||||||
"gameDescriptions": {
|
"gameDescriptions": {
|
||||||
"Be the chosen one for a length of time to win.\nKill the chosen one to become it.": "Чтобы победить, стань избранным на некоторое время.\nЧтобы стать избранным, убей избранного.",
|
"Be the chosen one for a length of time to win.\nKill the chosen one to become it.": "Чтобы победить, стань избранным на некоторое время.\nЧтобы стать избранным, убей избранного.",
|
||||||
|
|
@ -1609,6 +1621,7 @@
|
||||||
"Italian": "Итальянский",
|
"Italian": "Итальянский",
|
||||||
"Japanese": "Японский",
|
"Japanese": "Японский",
|
||||||
"Korean": "Корейский",
|
"Korean": "Корейский",
|
||||||
|
"Malay": "Малайский",
|
||||||
"Persian": "Персидский",
|
"Persian": "Персидский",
|
||||||
"Polish": "Польский",
|
"Polish": "Польский",
|
||||||
"Portuguese": "Португальский",
|
"Portuguese": "Португальский",
|
||||||
|
|
@ -1778,7 +1791,7 @@
|
||||||
"statements": {
|
"statements": {
|
||||||
"${TEAM} is disqualified because ${PLAYER} left": "${TEAM} дисквалифицирована потому что ${PLAYER} вышел",
|
"${TEAM} is disqualified because ${PLAYER} left": "${TEAM} дисквалифицирована потому что ${PLAYER} вышел",
|
||||||
"Killing ${NAME} for skipping part of the track!": "Ликвидация ${NAME} за срезание трассы!",
|
"Killing ${NAME} for skipping part of the track!": "Ликвидация ${NAME} за срезание трассы!",
|
||||||
"Warning to ${NAME}: turbo / button-spamming knocks you out.": "Предупреждение для ${NAME}: за турбо / быстрое повторное нажатие кнопки можно вылететь."
|
"Warning to ${NAME}: turbo / button-spamming knocks you out.": "Предупреждение для ${NAME}: за турбо / быстрое повторное нажатие кнопки можно вырубится."
|
||||||
},
|
},
|
||||||
"teamNames": {
|
"teamNames": {
|
||||||
"Bad Guys": "Негодяи",
|
"Bad Guys": "Негодяи",
|
||||||
|
|
@ -1853,7 +1866,7 @@
|
||||||
"phrase07Text": "Видите? Мы не двигались, поэтому ${NAME} почти в полном порядке.",
|
"phrase07Text": "Видите? Мы не двигались, поэтому ${NAME} почти в полном порядке.",
|
||||||
"phrase08Text": "Теперь подпрыгнем и крутанемся для скорости.",
|
"phrase08Text": "Теперь подпрыгнем и крутанемся для скорости.",
|
||||||
"phrase09Text": "Ага, так-то лучше.",
|
"phrase09Text": "Ага, так-то лучше.",
|
||||||
"phrase10Text": "Также помогает бег.",
|
"phrase10Text": "Бег тоже помогает.",
|
||||||
"phrase11Text": "Для бега удерживайте любую кнопку.",
|
"phrase11Text": "Для бега удерживайте любую кнопку.",
|
||||||
"phrase12Text": "Для супер-крутых ударов попробуйте бежать и крутиться.",
|
"phrase12Text": "Для супер-крутых ударов попробуйте бежать и крутиться.",
|
||||||
"phrase13Text": "Упс.. Извини, ${NAME}.",
|
"phrase13Text": "Упс.. Извини, ${NAME}.",
|
||||||
|
|
@ -1863,9 +1876,9 @@
|
||||||
"phrase17Text": "Ай! Не очень хороший бросок.",
|
"phrase17Text": "Ай! Не очень хороший бросок.",
|
||||||
"phrase18Text": "В движении бросок получается дальше.",
|
"phrase18Text": "В движении бросок получается дальше.",
|
||||||
"phrase19Text": "В прыжке бросок выше.",
|
"phrase19Text": "В прыжке бросок выше.",
|
||||||
"phrase20Text": "\"Подкрученные\" бомбы летят еще дальше.",
|
"phrase20Text": "\"Раскрученные\" бомбы летят еще дальше.",
|
||||||
"phrase21Text": "\"Подогревать\" бомбы довольно сложно.",
|
"phrase21Text": "\"Подогревать\" бомбы довольно сложно.",
|
||||||
"phrase22Text": "Блин нафиг!",
|
"phrase22Text": "Чёрт.",
|
||||||
"phrase23Text": "Попробуйте \"подогреть\" фитиль секунду или две.",
|
"phrase23Text": "Попробуйте \"подогреть\" фитиль секунду или две.",
|
||||||
"phrase24Text": "Ура! Хорошо подогрето.",
|
"phrase24Text": "Ура! Хорошо подогрето.",
|
||||||
"phrase25Text": "Ну на этом, пожалуй, всё.",
|
"phrase25Text": "Ну на этом, пожалуй, всё.",
|
||||||
|
|
@ -1877,7 +1890,7 @@
|
||||||
"randomName2Text": "Петя",
|
"randomName2Text": "Петя",
|
||||||
"randomName3Text": "Иннокентий",
|
"randomName3Text": "Иннокентий",
|
||||||
"randomName4Text": "Шурик",
|
"randomName4Text": "Шурик",
|
||||||
"randomName5Text": "Виталий",
|
"randomName5Text": "Виталик",
|
||||||
"skipConfirmText": "Пропустить тьюториал? Коснитесь или нажмите кнопку для подтверждения.",
|
"skipConfirmText": "Пропустить тьюториал? Коснитесь или нажмите кнопку для подтверждения.",
|
||||||
"skipVoteCountText": "${COUNT}/${TOTAL} голосов за пропуск",
|
"skipVoteCountText": "${COUNT}/${TOTAL} голосов за пропуск",
|
||||||
"skippingText": "пропуск обучения...",
|
"skippingText": "пропуск обучения...",
|
||||||
|
|
@ -1899,6 +1912,7 @@
|
||||||
"usesExternalControllerText": "Эта игра может использовать внешний контроллер для управления.",
|
"usesExternalControllerText": "Эта игра может использовать внешний контроллер для управления.",
|
||||||
"usingItunesText": "Использование музыкального приложения для саундтрека...",
|
"usingItunesText": "Использование музыкального приложения для саундтрека...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Убедитесь, что в iTunes включен случайный порядок, и повтор установлен на 'все'.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Убедитесь, что в iTunes включен случайный порядок, и повтор установлен на 'все'.",
|
||||||
|
"v2AccountLinkingInfoText": "Чтобы обьединить старый и новый аккаунты, используйте кнопку 'Обьединить аккаунты'",
|
||||||
"validatingBetaText": "Валидация бета-версии...",
|
"validatingBetaText": "Валидация бета-версии...",
|
||||||
"validatingTestBuildText": "Проверка тестовой сборки...",
|
"validatingTestBuildText": "Проверка тестовой сборки...",
|
||||||
"victoryText": "Победа!",
|
"victoryText": "Победа!",
|
||||||
|
|
@ -1933,6 +1947,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Волна",
|
"waveText": "Волна",
|
||||||
"wellSureText": "Сойдет!",
|
"wellSureText": "Сойдет!",
|
||||||
|
"whatIsThisText": "Что это?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Авторские права DarwiinRemote"
|
"titleText": "Авторские права DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
@ -1952,7 +1967,7 @@
|
||||||
"winsTeamText": "Победили ${NAME}!",
|
"winsTeamText": "Победили ${NAME}!",
|
||||||
"winsText": "${NAME} выиграл!",
|
"winsText": "${NAME} выиграл!",
|
||||||
"workspaceSyncErrorText": "Ошибка при попытке синхронизации ${WORKSPACE}. Посмотрите лог для информации.",
|
"workspaceSyncErrorText": "Ошибка при попытке синхронизации ${WORKSPACE}. Посмотрите лог для информации.",
|
||||||
"workspaceSyncReuseText": "Не может синронизировать ${WORKSPACE}. Будет использоватся прошлая синхронизация.",
|
"workspaceSyncReuseText": "Не получается синхронизировать ${WORKSPACE}. Используется прошлая синхронизация.",
|
||||||
"worldScoresUnavailableText": "Мировые результаты недоступны.",
|
"worldScoresUnavailableText": "Мировые результаты недоступны.",
|
||||||
"worldsBestScoresText": "Лучшие в мире очки",
|
"worldsBestScoresText": "Лучшие в мире очки",
|
||||||
"worldsBestTimesText": "Лучшее в мире время",
|
"worldsBestTimesText": "Лучшее в мире время",
|
||||||
|
|
|
||||||
18
dist/ba_data/data/languages/slovak.json
vendored
18
dist/ba_data/data/languages/slovak.json
vendored
|
|
@ -15,6 +15,7 @@
|
||||||
"linkAccountsInstructionsText": "Abyste mohli pripojiť dva účty, vygenerujte na prvom kód,\nktorý následne vložte na účte druhom.\nPostup a inventár sa skombinujú.\nMôžete spojiť až ${COUNT} účtov.",
|
"linkAccountsInstructionsText": "Abyste mohli pripojiť dva účty, vygenerujte na prvom kód,\nktorý následne vložte na účte druhom.\nPostup a inventár sa skombinujú.\nMôžete spojiť až ${COUNT} účtov.",
|
||||||
"linkAccountsText": "Pripojené účty",
|
"linkAccountsText": "Pripojené účty",
|
||||||
"linkedAccountsText": "Spojené účty:",
|
"linkedAccountsText": "Spojené účty:",
|
||||||
|
"manageAccountText": "Spravovať Účet",
|
||||||
"nameChangeConfirm": "Zmeniť vás účet na ${NAME}?",
|
"nameChangeConfirm": "Zmeniť vás účet na ${NAME}?",
|
||||||
"notLoggedInText": "<neprihlásený>",
|
"notLoggedInText": "<neprihlásený>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Týmto zresetuješ progres v tímovej hre\na všetky dosiahnuté skóre (tikety ostanú). Nedá sa \nto vrátiť späť. Pokračovať?",
|
"resetProgressConfirmNoAchievementsText": "Týmto zresetuješ progres v tímovej hre\na všetky dosiahnuté skóre (tikety ostanú). Nedá sa \nto vrátiť späť. Pokračovať?",
|
||||||
|
|
@ -330,6 +331,7 @@
|
||||||
"achievementsRemainingText": "Zostávajúce Achievementy",
|
"achievementsRemainingText": "Zostávajúce Achievementy",
|
||||||
"achievementsText": "Achievementy",
|
"achievementsText": "Achievementy",
|
||||||
"achievementsUnavailableForOldSeasonsText": "Prepáč, podrobnosti achievementov nie sú dostupné pre minulé sezóny.",
|
"achievementsUnavailableForOldSeasonsText": "Prepáč, podrobnosti achievementov nie sú dostupné pre minulé sezóny.",
|
||||||
|
"activatedText": "${THING} aktivovaný.",
|
||||||
"addGameWindow": {
|
"addGameWindow": {
|
||||||
"getMoreGamesText": "Viac Hier...",
|
"getMoreGamesText": "Viac Hier...",
|
||||||
"titleText": "Pridať Hru"
|
"titleText": "Pridať Hru"
|
||||||
|
|
@ -500,6 +502,7 @@
|
||||||
"welcome2Text": "Taktiež môžeš získavať tikety z veľa aktivít. Tikety sa \nmôžu používať na odomknutie nových charakterov, máp, \nminihier, ako vstupné do turnajov, a viac.",
|
"welcome2Text": "Taktiež môžeš získavať tikety z veľa aktivít. Tikety sa \nmôžu používať na odomknutie nových charakterov, máp, \nminihier, ako vstupné do turnajov, a viac.",
|
||||||
"yourPowerRankingText": "Tvoje Umiestnenie:"
|
"yourPowerRankingText": "Tvoje Umiestnenie:"
|
||||||
},
|
},
|
||||||
|
"copyConfirmText": "Skopírované do schránky.",
|
||||||
"copyOfText": "${NAME} Kópia",
|
"copyOfText": "${NAME} Kópia",
|
||||||
"copyText": "Kopírovať",
|
"copyText": "Kopírovať",
|
||||||
"createEditPlayerText": "<Vytvoriť/Upraviť Charakter>",
|
"createEditPlayerText": "<Vytvoriť/Upraviť Charakter>",
|
||||||
|
|
@ -627,7 +630,9 @@
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} Spomalene.",
|
"epicDescriptionFilterText": "${DESCRIPTION} Spomalene.",
|
||||||
"epicNameFilterText": "Epic ${NAME}",
|
"epicNameFilterText": "Epic ${NAME}",
|
||||||
"errorAccessDeniedText": "prístup odmietnutý",
|
"errorAccessDeniedText": "prístup odmietnutý",
|
||||||
|
"errorDeviceTimeIncorrectText": "Čas vášho zariadenia je nesprávny o ${HOURS} hodín.\nToto môže spôsobiť problémy.\nProsím skontrolujte vaše nastavenia času a časových zón.",
|
||||||
"errorOutOfDiskSpaceText": "žiadne miesto na disku",
|
"errorOutOfDiskSpaceText": "žiadne miesto na disku",
|
||||||
|
"errorSecureConnectionFailText": "Nebolo možné vyrvoriť bezpečné cloudové pripojenie; funkčnosť siete môže zlyhať.",
|
||||||
"errorText": "Chyba",
|
"errorText": "Chyba",
|
||||||
"errorUnknownText": "neznámy error",
|
"errorUnknownText": "neznámy error",
|
||||||
"exitGameText": "Ukončiť ${APP_NAME}?",
|
"exitGameText": "Ukončiť ${APP_NAME}?",
|
||||||
|
|
@ -790,7 +795,7 @@
|
||||||
"ticketPack4Text": "Obrovský Balíček Tiketov",
|
"ticketPack4Text": "Obrovský Balíček Tiketov",
|
||||||
"ticketPack5Text": "Gigantický Balíček Tiketov",
|
"ticketPack5Text": "Gigantický Balíček Tiketov",
|
||||||
"ticketPack6Text": "Ultimátny Balíček Tiketov",
|
"ticketPack6Text": "Ultimátny Balíček Tiketov",
|
||||||
"ticketsFromASponsorText": "Dostaň ${COUNT} tiketov\nod sponzora",
|
"ticketsFromASponsorText": "Pozri si reklamu\npre ${COUNT} tiketov",
|
||||||
"ticketsText": "${COUNT} Tiketov",
|
"ticketsText": "${COUNT} Tiketov",
|
||||||
"titleText": "Dostať Tikety",
|
"titleText": "Dostať Tikety",
|
||||||
"unavailableLinkAccountText": "Prepáč, nákupy sú nedostupné na tejto platforme.\nAko riešenie, môžeš stále prepojiť tento účet s účtom na \ninej platforme a nakupovať.",
|
"unavailableLinkAccountText": "Prepáč, nákupy sú nedostupné na tejto platforme.\nAko riešenie, môžeš stále prepojiť tento účet s účtom na \ninej platforme a nakupovať.",
|
||||||
|
|
@ -801,6 +806,8 @@
|
||||||
"youHaveText": "máš ${COUNT} tiketov"
|
"youHaveText": "máš ${COUNT} tiketov"
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Prepáč, Google multiplayer už viac nie je dostupný.\nSnažím sa to prehodiť čo najskôr. Dovtedy prosím\nskús inú metódu pripojenia.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Prepáč, Google multiplayer už viac nie je dostupný.\nSnažím sa to prehodiť čo najskôr. Dovtedy prosím\nskús inú metódu pripojenia.\n-Eric",
|
||||||
|
"googlePlayPurchasesNotAvailableText": "Nákupy Google Play nie sú dostupné.\nAsi musíte aktualizovať svoju obchodnú aplikáciu.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Služby Google Play nie sú dostupné.\nNiektoré funkčnosti aplikácie môžu byť vypnuté.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Stále",
|
"alwaysText": "Stále",
|
||||||
|
|
@ -997,6 +1004,7 @@
|
||||||
"creditsText": "Credits",
|
"creditsText": "Credits",
|
||||||
"demoMenuText": "Demo Menu",
|
"demoMenuText": "Demo Menu",
|
||||||
"endGameText": "Ukončiť Hru",
|
"endGameText": "Ukončiť Hru",
|
||||||
|
"endTestText": "Ukončiť Test",
|
||||||
"exitGameText": "Uzavrieť Hru",
|
"exitGameText": "Uzavrieť Hru",
|
||||||
"exitToMenuText": "Odísť do menu?",
|
"exitToMenuText": "Odísť do menu?",
|
||||||
"howToPlayText": "Ako Hrať",
|
"howToPlayText": "Ako Hrať",
|
||||||
|
|
@ -1111,7 +1119,10 @@
|
||||||
"playlistsText": "Playlisty",
|
"playlistsText": "Playlisty",
|
||||||
"pleaseRateText": "Ak si ${APP_NAME} užívaš, prosím pouvažuj nad chvíľou\nohodnotenia a napísania recenzie. Toto poskytuje\nužitočnú spätnú väzbu a pomáha podporovať budúci rozvoj.\n\nvďaka!\n-Eric",
|
"pleaseRateText": "Ak si ${APP_NAME} užívaš, prosím pouvažuj nad chvíľou\nohodnotenia a napísania recenzie. Toto poskytuje\nužitočnú spätnú väzbu a pomáha podporovať budúci rozvoj.\n\nvďaka!\n-Eric",
|
||||||
"pleaseWaitText": "Prosím počkaj...",
|
"pleaseWaitText": "Prosím počkaj...",
|
||||||
"pluginsDetectedText": "Boli zistené nové doplnky. Povoľte / nakonfigurujte ich v nastaveniach.",
|
"pluginClassLoadErrorText": "Chyba pri načítaní triedy doplnku '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginInitErrorText": "Chyba pri iniciovaní doplnku '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginsDetectedText": "Bol zistený nový doplnok(ky). Reštartujte aby sa aktivovali, alebo ich nakonfigurte v nastaveniach.",
|
||||||
|
"pluginsRemovedText": "${NUM} doplnok(ky) nebol najdený.",
|
||||||
"pluginsText": "Pluginy",
|
"pluginsText": "Pluginy",
|
||||||
"practiceText": "Tréning",
|
"practiceText": "Tréning",
|
||||||
"pressAnyButtonPlayAgainText": "Stlač hocijaké tlačidlo ak chceš hrať znova...",
|
"pressAnyButtonPlayAgainText": "Stlač hocijaké tlačidlo ak chceš hrať znova...",
|
||||||
|
|
@ -1362,6 +1373,7 @@
|
||||||
"tournamentStandingsText": "Postavenie v Turnaji",
|
"tournamentStandingsText": "Postavenie v Turnaji",
|
||||||
"tournamentText": "Turnaj",
|
"tournamentText": "Turnaj",
|
||||||
"tournamentTimeExpiredText": "Čas v Turnaji Vypršal",
|
"tournamentTimeExpiredText": "Čas v Turnaji Vypršal",
|
||||||
|
"tournamentsDisabledWorkspaceText": "Turnaje sú zakázané keď pracoviská sú aktívne.\nAby sa znova povolili turnaje, vypnite svoje pracovisko a reštartujte.",
|
||||||
"tournamentsText": "Turnaje",
|
"tournamentsText": "Turnaje",
|
||||||
"translations": {
|
"translations": {
|
||||||
"characterNames": {
|
"characterNames": {
|
||||||
|
|
@ -1845,6 +1857,8 @@
|
||||||
"winsPlayerText": "${NAME} Vyhráva!",
|
"winsPlayerText": "${NAME} Vyhráva!",
|
||||||
"winsTeamText": "${NAME} Vyhráva!",
|
"winsTeamText": "${NAME} Vyhráva!",
|
||||||
"winsText": "${NAME} Vyhráva!",
|
"winsText": "${NAME} Vyhráva!",
|
||||||
|
"workspaceSyncErrorText": "Chyba pri synchronizácii ${WORKSPACE}. Pozri log pre detaily.",
|
||||||
|
"workspaceSyncReuseText": "Nemožno synchronizovať ${WORKSPACE}. Znovu-využitie predošlej synchronizovanej verzie.",
|
||||||
"worldScoresUnavailableText": "Svetové skóre nedostupné.",
|
"worldScoresUnavailableText": "Svetové skóre nedostupné.",
|
||||||
"worldsBestScoresText": "Svetovo Najlepšie Skóre",
|
"worldsBestScoresText": "Svetovo Najlepšie Skóre",
|
||||||
"worldsBestTimesText": "Svetovo Najlepšie Časy",
|
"worldsBestTimesText": "Svetovo Najlepšie Časy",
|
||||||
|
|
|
||||||
157
dist/ba_data/data/languages/spanish.json
vendored
157
dist/ba_data/data/languages/spanish.json
vendored
|
|
@ -4,11 +4,12 @@
|
||||||
"accountProfileText": "(Perfil de la cuenta)",
|
"accountProfileText": "(Perfil de la cuenta)",
|
||||||
"accountsText": "Cuentas",
|
"accountsText": "Cuentas",
|
||||||
"achievementProgressText": "Logros: ${COUNT} de ${TOTAL}",
|
"achievementProgressText": "Logros: ${COUNT} de ${TOTAL}",
|
||||||
"campaignProgressText": "Progreso de campaña [Dificil]: ${PROGRESS}",
|
"campaignProgressText": "Progreso de campaña [Difícil]: ${PROGRESS}",
|
||||||
"changeOncePerSeason": "Solamente puedes cambiarlo una vez por temporada.",
|
"changeOncePerSeason": "Solamente puedes cambiarlo una vez por temporada.",
|
||||||
"changeOncePerSeasonError": "Debes esperar hasta la siguiente temporada para cambiarlo de nuevo (en ${NUM} día/s)",
|
"changeOncePerSeasonError": "Debes esperar hasta la siguiente temporada para cambiarlo de nuevo (en ${NUM} día/s)",
|
||||||
"customName": "Nombre personalizado",
|
"customName": "Nombre personalizado",
|
||||||
"deviceSpecificAccountText": "Actualmente usando una cuenta específica de dispositivo: ${NAME}",
|
"deviceSpecificAccountText": "Actualmente usando una cuenta específica de dispositivo: ${NAME}",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Si quieres cambiar a otra cuenta de Google,\nusa Google Play para cambiar tu cuenta.",
|
||||||
"linkAccountsEnterCodeText": "Registrar Código",
|
"linkAccountsEnterCodeText": "Registrar Código",
|
||||||
"linkAccountsGenerateCodeText": "Generar Código",
|
"linkAccountsGenerateCodeText": "Generar Código",
|
||||||
"linkAccountsInfoText": "(compartir progreso a través de diferentes plataformas)",
|
"linkAccountsInfoText": "(compartir progreso a través de diferentes plataformas)",
|
||||||
|
|
@ -16,7 +17,7 @@
|
||||||
"linkAccountsInstructionsText": "Para enlazar dos cuentas, genera un código en una\n de ellas y escribe el código en la otra.\nEl progreso e accesorios se combinarán.\nPuedes enlazar hasta ${COUNT} cuentas. \n\nIMPORTANTE: Solo enlaza cuentas tuyas!\n\nSi enlazas cuentas con tus amigos no podrán jugar al mismo tiempo!\n\nTambién: esto no se puede deshacer actualmente, así que se cuidadoso!",
|
"linkAccountsInstructionsText": "Para enlazar dos cuentas, genera un código en una\n de ellas y escribe el código en la otra.\nEl progreso e accesorios se combinarán.\nPuedes enlazar hasta ${COUNT} cuentas. \n\nIMPORTANTE: Solo enlaza cuentas tuyas!\n\nSi enlazas cuentas con tus amigos no podrán jugar al mismo tiempo!\n\nTambién: esto no se puede deshacer actualmente, así que se cuidadoso!",
|
||||||
"linkAccountsText": "Enlazar Cuentas",
|
"linkAccountsText": "Enlazar Cuentas",
|
||||||
"linkedAccountsText": "Cuentas enlazadas:",
|
"linkedAccountsText": "Cuentas enlazadas:",
|
||||||
"manageAccountText": "administrar cuenta",
|
"manageAccountText": "Administrar Cuenta",
|
||||||
"nameChangeConfirm": "¿Cambiar tu nombre a ${NAME}?",
|
"nameChangeConfirm": "¿Cambiar tu nombre a ${NAME}?",
|
||||||
"notLoggedInText": "<no estás conectado>",
|
"notLoggedInText": "<no estás conectado>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Esto reiniciará tu progreso en el modo\ncooperativo y tus puntajes (A excepción de tus tickets).\nNo podrás recuperar los cambios. ¿Estás seguro?",
|
"resetProgressConfirmNoAchievementsText": "Esto reiniciará tu progreso en el modo\ncooperativo y tus puntajes (A excepción de tus tickets).\nNo podrás recuperar los cambios. ¿Estás seguro?",
|
||||||
|
|
@ -33,7 +34,7 @@
|
||||||
"signInWithTestAccountInfoText": "(Cuenta de prueba, usa la cuenta del dispositivo para avanzar)",
|
"signInWithTestAccountInfoText": "(Cuenta de prueba, usa la cuenta del dispositivo para avanzar)",
|
||||||
"signInWithTestAccountText": "Registrarse con una Cuenta de Prueba",
|
"signInWithTestAccountText": "Registrarse con una Cuenta de Prueba",
|
||||||
"signInWithV2InfoText": "(una cuenta que funciona en todas las plataformas)",
|
"signInWithV2InfoText": "(una cuenta que funciona en todas las plataformas)",
|
||||||
"signInWithV2Text": "Inicie sesión con tú cuenta de BombSquad",
|
"signInWithV2Text": "Inicia sesión con tu cuenta de BombSquad",
|
||||||
"signOutText": "Cerrar Sesión",
|
"signOutText": "Cerrar Sesión",
|
||||||
"signingInText": "Iniciando sesión...",
|
"signingInText": "Iniciando sesión...",
|
||||||
"signingOutText": "Cerrando sesión...",
|
"signingOutText": "Cerrando sesión...",
|
||||||
|
|
@ -44,7 +45,8 @@
|
||||||
"titleText": "Cuenta",
|
"titleText": "Cuenta",
|
||||||
"unlinkAccountsInstructionsText": "Selecciona una cuenta para dejar de enlazar con ella",
|
"unlinkAccountsInstructionsText": "Selecciona una cuenta para dejar de enlazar con ella",
|
||||||
"unlinkAccountsText": "Desenlazar Cuentas",
|
"unlinkAccountsText": "Desenlazar Cuentas",
|
||||||
"v2LinkInstructionsText": "Usa este encale para crearte una cuenta o para iniciar sesión",
|
"unlinkLegacyV1AccountsText": "Desvincular Cuenta Heredada (V1)",
|
||||||
|
"v2LinkInstructionsText": "Usa este enlace para crearte una cuenta o para iniciar sesión",
|
||||||
"viaAccount": "(por cuenta ${NAME})",
|
"viaAccount": "(por cuenta ${NAME})",
|
||||||
"youAreLoggedInAsText": "Estás conectado como:",
|
"youAreLoggedInAsText": "Estás conectado como:",
|
||||||
"youAreSignedInAsText": "Has iniciado sesión como:"
|
"youAreSignedInAsText": "Has iniciado sesión como:"
|
||||||
|
|
@ -372,7 +374,7 @@
|
||||||
"challengeEndedText": "Este desafío ha terminado.",
|
"challengeEndedText": "Este desafío ha terminado.",
|
||||||
"chatMuteText": "Silenciar Chat",
|
"chatMuteText": "Silenciar Chat",
|
||||||
"chatMutedText": "Chat Silenciado",
|
"chatMutedText": "Chat Silenciado",
|
||||||
"chatUnMuteText": "Activar Chat",
|
"chatUnMuteText": "Desmutear Chat",
|
||||||
"choosingPlayerText": "<eligiendo jugador>",
|
"choosingPlayerText": "<eligiendo jugador>",
|
||||||
"completeThisLevelToProceedText": "¡Debes completar\neste nivel para avanzar!",
|
"completeThisLevelToProceedText": "¡Debes completar\neste nivel para avanzar!",
|
||||||
"completionBonusText": "Bono extra por Acabar",
|
"completionBonusText": "Bono extra por Acabar",
|
||||||
|
|
@ -430,7 +432,7 @@
|
||||||
"secondaryText": "Control Secundario",
|
"secondaryText": "Control Secundario",
|
||||||
"startButtonActivatesDefaultDescriptionText": "(desactívalo si tu botón de inicio es más bien un botón de 'menú')",
|
"startButtonActivatesDefaultDescriptionText": "(desactívalo si tu botón de inicio es más bien un botón de 'menú')",
|
||||||
"startButtonActivatesDefaultText": "El botón de inicio activa la función por defecto",
|
"startButtonActivatesDefaultText": "El botón de inicio activa la función por defecto",
|
||||||
"titleText": "Configuración del Control",
|
"titleText": "Configurar Control",
|
||||||
"twoInOneSetupText": "Configuración de Controles 2 en 1",
|
"twoInOneSetupText": "Configuración de Controles 2 en 1",
|
||||||
"uiOnlyDescriptionText": "(evitar que este control se una a un juego)",
|
"uiOnlyDescriptionText": "(evitar que este control se una a un juego)",
|
||||||
"uiOnlyText": "Limitar a Uso en Menú",
|
"uiOnlyText": "Limitar a Uso en Menú",
|
||||||
|
|
@ -569,7 +571,9 @@
|
||||||
"deleteText": "Borrar",
|
"deleteText": "Borrar",
|
||||||
"demoText": "Versión de prueba",
|
"demoText": "Versión de prueba",
|
||||||
"denyText": "Rechazar",
|
"denyText": "Rechazar",
|
||||||
|
"deprecatedText": "Obsoleto",
|
||||||
"desktopResText": "Resolución del escritorio",
|
"desktopResText": "Resolución del escritorio",
|
||||||
|
"deviceAccountUpgradeText": "Advertencia:\nEstás conectado con una cuenta de dispositivo\n(${NAME}).\nLas cuentas de dispositivo serán removidas en una próxima actualización",
|
||||||
"difficultyEasyText": "Fácil",
|
"difficultyEasyText": "Fácil",
|
||||||
"difficultyHardOnlyText": "Solo Modo Difícil",
|
"difficultyHardOnlyText": "Solo Modo Difícil",
|
||||||
"difficultyHardText": "Difícil",
|
"difficultyHardText": "Difícil",
|
||||||
|
|
@ -655,7 +659,7 @@
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} En cámara lenta épica.",
|
"epicDescriptionFilterText": "${DESCRIPTION} En cámara lenta épica.",
|
||||||
"epicNameFilterText": "${NAME} - Modo épico",
|
"epicNameFilterText": "${NAME} - Modo épico",
|
||||||
"errorAccessDeniedText": "acceso negado",
|
"errorAccessDeniedText": "acceso negado",
|
||||||
"errorDeviceTimeIncorrectText": "La hora actual de tu dispositivo está incorrecta por ${HOURS} horas.\nEsto podría causar problemas.\nPorfavor verifica la hora y zona horaria en ajustes.",
|
"errorDeviceTimeIncorrectText": "La hora actual de tu dispositivo está incorrecta por ${HOURS} horas.\nEsto podría causar problemas.\nPor favor verifica la hora y zona horaria en ajustes.",
|
||||||
"errorOutOfDiskSpaceText": "insuficiente espacio en disco",
|
"errorOutOfDiskSpaceText": "insuficiente espacio en disco",
|
||||||
"errorSecureConnectionFailText": "No se puede establecer una conexión segura en la nube; La red podría estar fallando",
|
"errorSecureConnectionFailText": "No se puede establecer una conexión segura en la nube; La red podría estar fallando",
|
||||||
"errorText": "Error",
|
"errorText": "Error",
|
||||||
|
|
@ -708,7 +712,7 @@
|
||||||
"gamepadsDetectedText": "${COUNT} controles detectados.",
|
"gamepadsDetectedText": "${COUNT} controles detectados.",
|
||||||
"gamesToText": "${WINCOUNT} juegos a ${LOSECOUNT}",
|
"gamesToText": "${WINCOUNT} juegos a ${LOSECOUNT}",
|
||||||
"gatherWindow": {
|
"gatherWindow": {
|
||||||
"aboutDescriptionLocalMultiplayerExtraText": "Recuerda: cualquier dispositivo en la fiesta puede\ntener mas de un jugador si tienen controles suficientes.",
|
"aboutDescriptionLocalMultiplayerExtraText": "Recuerda: cualquier dispositivo en la fiesta puede\ntener más de un jugador si tienen controles suficientes.",
|
||||||
"aboutDescriptionText": "Usa estas pestañas para crear una fiesta.\n\nLas fiestas te permiten jugar y competir con\ntus amigos con sus propios dispositivos.\n\nUsa el botón ${PARTY} en la parte superior\nderecha para chatear e interactuar con tu fiesta.\n(En el control, presiona ${BUTTON} mientras estés en el menú)",
|
"aboutDescriptionText": "Usa estas pestañas para crear una fiesta.\n\nLas fiestas te permiten jugar y competir con\ntus amigos con sus propios dispositivos.\n\nUsa el botón ${PARTY} en la parte superior\nderecha para chatear e interactuar con tu fiesta.\n(En el control, presiona ${BUTTON} mientras estés en el menú)",
|
||||||
"aboutText": "Acerca de",
|
"aboutText": "Acerca de",
|
||||||
"addressFetchErrorText": "<error consiguiendo dirección>",
|
"addressFetchErrorText": "<error consiguiendo dirección>",
|
||||||
|
|
@ -804,7 +808,7 @@
|
||||||
"startStopHostingMinutesText": "Puede iniciar y detener el alojamiento de forma gratuita durante los próximos ${MINUTES} minutos.",
|
"startStopHostingMinutesText": "Puede iniciar y detener el alojamiento de forma gratuita durante los próximos ${MINUTES} minutos.",
|
||||||
"stopHostingText": "Dejar de alojar",
|
"stopHostingText": "Dejar de alojar",
|
||||||
"titleText": "Reúne",
|
"titleText": "Reúne",
|
||||||
"wifiDirectDescriptionBottomText": "Si todo los dispositivos disponen de 'Wi-fi Directo', deberían poder utiizarlo para\nencontrar y conectarse entre ellos. Cuando todos estén coneectados, pudes formar \nfiestas, usando la pestaña 'Red Local', como si estuvieran en la misma red Wi-fi.\n\nPara mejores resultados, el host de Wi-fi Directo también debe de ser el host de la fiesta en ${APP_NAME}.",
|
"wifiDirectDescriptionBottomText": "Si todo los dispositivos disponen de 'Wi-fi Directo', deberían poder utilizarlo para\nencontrar y conectarse entre ellos. Cuando todos estén conectados, puedes formar \nfiestas, usando la pestaña 'Red Local', como si estuvieran en la misma red Wi-fi.\n\nPara mejores resultados, el host de Wi-fi Directo también debe de ser el host de la fiesta en ${APP_NAME}.",
|
||||||
"wifiDirectDescriptionTopText": "Wi-Fi Directo puede ser utilizado para conectar dispositivos Android sin\ntener que utilizar una red Wi-Fi. Esto funciona mejor de Android 4.2 o mas nuevo.\n\nPara utilizarlo, abre los ajustes de Wi-Fi y busca 'Wi-Fi Directo' en el menú.",
|
"wifiDirectDescriptionTopText": "Wi-Fi Directo puede ser utilizado para conectar dispositivos Android sin\ntener que utilizar una red Wi-Fi. Esto funciona mejor de Android 4.2 o mas nuevo.\n\nPara utilizarlo, abre los ajustes de Wi-Fi y busca 'Wi-Fi Directo' en el menú.",
|
||||||
"wifiDirectOpenWiFiSettingsText": "Abrir Ajustes Wi-Fi",
|
"wifiDirectOpenWiFiSettingsText": "Abrir Ajustes Wi-Fi",
|
||||||
"wifiDirectText": "Wi-Fi Directo",
|
"wifiDirectText": "Wi-Fi Directo",
|
||||||
|
|
@ -845,6 +849,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Lo siento, Google's multijugador servicio ya no esta mas disponible.\nEstoy trabajando en un reemplazo lo mas rapido posible.\nHasta entonces, por favor intente con otro metodo de conexión.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Lo siento, Google's multijugador servicio ya no esta mas disponible.\nEstoy trabajando en un reemplazo lo mas rapido posible.\nHasta entonces, por favor intente con otro metodo de conexión.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Las compras de Google Play no están disponibles.\nEs posible que deba actualizar la aplicación de su tienda.",
|
"googlePlayPurchasesNotAvailableText": "Las compras de Google Play no están disponibles.\nEs posible que deba actualizar la aplicación de su tienda.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Servicios de Google Play no disponibles.\nAlgunas funciones de la aplicación pueden estar deshabilitadas.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Siempre",
|
"alwaysText": "Siempre",
|
||||||
|
|
@ -859,7 +864,7 @@
|
||||||
"resolutionText": "Resolución",
|
"resolutionText": "Resolución",
|
||||||
"showFPSText": "Mostrar FPS",
|
"showFPSText": "Mostrar FPS",
|
||||||
"texturesText": "Texturas",
|
"texturesText": "Texturas",
|
||||||
"titleText": "Gráficas",
|
"titleText": "Gráficos",
|
||||||
"tvBorderText": "Marco de TV",
|
"tvBorderText": "Marco de TV",
|
||||||
"verticalSyncText": "Sincronización vertical",
|
"verticalSyncText": "Sincronización vertical",
|
||||||
"visualsText": "Visuales"
|
"visualsText": "Visuales"
|
||||||
|
|
@ -891,40 +896,40 @@
|
||||||
"orPunchingSomethingTextScale": 0.51,
|
"orPunchingSomethingTextScale": 0.51,
|
||||||
"pickUpInfoText": "- Levanta -\nAlza banderas, enemigos, o cualquier\notra cosa no atornillada al suelo.\nPulsa de nuevo para lanzar.",
|
"pickUpInfoText": "- Levanta -\nAlza banderas, enemigos, o cualquier\notra cosa no atornillada al suelo.\nPulsa de nuevo para lanzar.",
|
||||||
"pickUpInfoTextScale": 0.6,
|
"pickUpInfoTextScale": 0.6,
|
||||||
"powerupBombDescriptionText": "Puedes tirar tres bombas de\nun solo tiro en vez de una sola.",
|
"powerupBombDescriptionText": "Te permite sacar tres bombas\nen una fila en lugar de solo una.",
|
||||||
"powerupBombNameText": "Triple-Bombas",
|
"powerupBombNameText": "Bombas Triples",
|
||||||
"powerupCurseDescriptionText": "Probablemente querrás evitar estos.\n...¿o quizás no?",
|
"powerupCurseDescriptionText": "Probablemente quieras evitar estos.\n ...¿o quizás tú?",
|
||||||
"powerupCurseNameText": "Maldición",
|
"powerupCurseNameText": "Maldición",
|
||||||
"powerupHealthDescriptionText": "Restaura toda la salud.\nNunca lo hubieras adivinado.",
|
"powerupHealthDescriptionText": "Te restaura a la salud completa.\nNunca lo habrías adivinado.",
|
||||||
"powerupHealthNameText": "Medicina",
|
"powerupHealthNameText": "Botiquín",
|
||||||
"powerupIceBombsDescriptionText": "Más débil que las bombas habituales\npero dejan a tus enemigos congelados\ny particularmente frágiles.",
|
"powerupIceBombsDescriptionText": "Más débiles que las bombas normales\npero dejan a tus enemigos congelados\ny particularmente frágiles.",
|
||||||
"powerupIceBombsNameText": "Bombas de hielo",
|
"powerupIceBombsNameText": "Bombas de Hielo",
|
||||||
"powerupImpactBombsDescriptionText": "Levemente más débiles que las bombas\nnormales, pero explotan al impacto.",
|
"powerupImpactBombsDescriptionText": "Levemente más débiles que las bombas\nregulares, pero explotan al impacto.",
|
||||||
"powerupImpactBombsNameText": "Insta-Bombas",
|
"powerupImpactBombsNameText": "Bombas de Gatillo",
|
||||||
"powerupLandMinesDescriptionText": "Estas vienen en grupos de 3;\nSon buenas para defensa territorial\no para detener enemigos veloces.",
|
"powerupLandMinesDescriptionText": "Estas vienen en grupos de 3;\nSon buenas para defensa territorial\no para detener enemigos veloces.",
|
||||||
"powerupLandMinesNameText": "Mina Terrestre",
|
"powerupLandMinesNameText": "Minas Terrestres",
|
||||||
"powerupPunchDescriptionText": "Hace que tus golpes sean más duros,\nmás rápidos, mejores, y más fuertes.",
|
"powerupPunchDescriptionText": "Hacen que tus golpes sean más duros,\nmás rápidos, mejores, y más fuertes.",
|
||||||
"powerupPunchNameText": "Guantes de Boxeo",
|
"powerupPunchNameText": "Guantes de Boxeo",
|
||||||
"powerupShieldDescriptionText": "Absorbe un poco del impacto\npara que tu no tengas que hacerlo.",
|
"powerupShieldDescriptionText": "Absorbe un poco de daño\npara que no tengas que hacerlo.",
|
||||||
"powerupShieldNameText": "Electro-Escudo",
|
"powerupShieldNameText": "Escudo de Energía",
|
||||||
"powerupStickyBombsDescriptionText": "Se adhieren a cualquier cosa.\nEn serio, es demasiado gracioso.",
|
"powerupStickyBombsDescriptionText": "Se adhieren a cualquier cosa.\nProducen hilaridad.",
|
||||||
"powerupStickyBombsNameText": "Bombas Pegajosas",
|
"powerupStickyBombsNameText": "Bombas Pegajosas",
|
||||||
"powerupsSubtitleText": "Por supuesto, ningún juego está completo sin poderes extra:",
|
"powerupsSubtitleText": "Por supuesto, ningún juego está completo sin potenciadores:",
|
||||||
"powerupsSubtitleTextScale": 0.8,
|
"powerupsSubtitleTextScale": 0.8,
|
||||||
"powerupsText": "Poderes Extra",
|
"powerupsText": "Potenciadores",
|
||||||
"powerupsTextScale": 1.4,
|
"powerupsTextScale": 1.4,
|
||||||
"punchInfoText": "- Golpe -\nEntre mas rápido te muevas más\nimpacto causan tus golpes, así que\ncorre, salta y da vueltas como loco.",
|
"punchInfoText": "- Golpe -\nEntre más rápido te muevas más\nimpacto causan tus golpes, así que\ncorre, salta y da vueltas como loco.",
|
||||||
"punchInfoTextScale": 0.6,
|
"punchInfoTextScale": 0.6,
|
||||||
"runInfoText": "- Correr -\nSostén CUALQUIER botón para correr. Los botones gatillos o traseros funcionan bien si los tienes.\nCorrer te hace llegar mas rápido pero es mas difícil girar, así que ten cuidado con los barrancos.",
|
"runInfoText": "- Correr -\nSostén CUALQUIER botón para correr. Los botones gatillos o traseros funcionan bien si los tienes.\nCorrer te hace llegar más rápido pero es más difícil girar, así que ten cuidado con los barrancos.",
|
||||||
"runInfoTextScale": 0.6,
|
"runInfoTextScale": 0.6,
|
||||||
"someDaysText": "Hay días cuando sientes ganas de romper algo. O explotar algo.",
|
"someDaysText": "Hay días cuando sientes ganas de romper algo. O explotarlo.",
|
||||||
"someDaysTextScale": 0.66,
|
"someDaysTextScale": 0.66,
|
||||||
"titleText": "Ayuda ${APP_NAME}",
|
"titleText": "Ayuda ${APP_NAME}",
|
||||||
"toGetTheMostText": "Para sacar el máximo partido a este juego, necesitas:",
|
"toGetTheMostText": "Para sacar el máximo partido a este juego, necesitas:",
|
||||||
"toGetTheMostTextScale": 1.0,
|
"toGetTheMostTextScale": 1.0,
|
||||||
"welcomeText": "¡Bienvenido a ${APP_NAME}!"
|
"welcomeText": "¡Bienvenido a ${APP_NAME}!"
|
||||||
},
|
},
|
||||||
"holdAnyButtonText": "<sostén cualquier botón>",
|
"holdAnyButtonText": "<mantén cualquier botón>",
|
||||||
"holdAnyKeyText": "<sostén cualquier tecla>",
|
"holdAnyKeyText": "<sostén cualquier tecla>",
|
||||||
"hostIsNavigatingMenusText": "- ${HOST} navega los menús como todo un pro -",
|
"hostIsNavigatingMenusText": "- ${HOST} navega los menús como todo un pro -",
|
||||||
"importPlaylistCodeInstructionsText": "Usa el siguiente código para importar esta lista de reproducción en otra parte",
|
"importPlaylistCodeInstructionsText": "Usa el siguiente código para importar esta lista de reproducción en otra parte",
|
||||||
|
|
@ -937,7 +942,7 @@
|
||||||
"arrowsToExitListText": "pulsa ${LEFT} o ${RIGHT} para salir de la lista",
|
"arrowsToExitListText": "pulsa ${LEFT} o ${RIGHT} para salir de la lista",
|
||||||
"buttonText": "botón",
|
"buttonText": "botón",
|
||||||
"cantKickHostError": "No puedes expulsar al host",
|
"cantKickHostError": "No puedes expulsar al host",
|
||||||
"chatBlockedText": "A ${NAME} se le ha bloqueado el chat por ${TIME} segundos.",
|
"chatBlockedText": "A ${NAME} le hemos bloqueado el chat por ${TIME} segundos.",
|
||||||
"connectedToGameText": "'${NAME}' se unió",
|
"connectedToGameText": "'${NAME}' se unió",
|
||||||
"connectedToPartyText": "¡Unido a la fiesta de ${NAME}!",
|
"connectedToPartyText": "¡Unido a la fiesta de ${NAME}!",
|
||||||
"connectingToPartyText": "Conectando...",
|
"connectingToPartyText": "Conectando...",
|
||||||
|
|
@ -959,7 +964,7 @@
|
||||||
"errorPlayingMusicText": "Error al reproducir música: ${MUSIC}",
|
"errorPlayingMusicText": "Error al reproducir música: ${MUSIC}",
|
||||||
"errorResettingAchievementsText": "No se pudieron reiniciar los logros; por favor inténtalo de nuevo.",
|
"errorResettingAchievementsText": "No se pudieron reiniciar los logros; por favor inténtalo de nuevo.",
|
||||||
"hasMenuControlText": "${NAME} Tiene control del menú.",
|
"hasMenuControlText": "${NAME} Tiene control del menú.",
|
||||||
"incompatibleNewerVersionHostText": "El host esta corriendo una versión nueva del juego.\nActualiza a la última versión y vuelve a intentarlo.",
|
"incompatibleNewerVersionHostText": "El host está corriendo una versión nueva del juego.\nActualiza a la última versión y vuelve a intentarlo.",
|
||||||
"incompatibleVersionHostText": "Host corre una versión diferente del juego; imposible conectar.\nAsegúrese de que ambos están actualizados y vuelva a intentar.",
|
"incompatibleVersionHostText": "Host corre una versión diferente del juego; imposible conectar.\nAsegúrese de que ambos están actualizados y vuelva a intentar.",
|
||||||
"incompatibleVersionPlayerText": "${NAME} está corriendo una versión diferente del juego y no se ha podido conectar.\nAsegúrese de que ambos están actualizados y vuelva a intentar.",
|
"incompatibleVersionPlayerText": "${NAME} está corriendo una versión diferente del juego y no se ha podido conectar.\nAsegúrese de que ambos están actualizados y vuelva a intentar.",
|
||||||
"invalidAddressErrorText": "Error: Dirección inválida.",
|
"invalidAddressErrorText": "Error: Dirección inválida.",
|
||||||
|
|
@ -978,7 +983,7 @@
|
||||||
"playerJoinedPartyText": "¡${NAME} se unió a la fiesta!",
|
"playerJoinedPartyText": "¡${NAME} se unió a la fiesta!",
|
||||||
"playerLeftPartyText": "${NAME} se fue de la fiesta.",
|
"playerLeftPartyText": "${NAME} se fue de la fiesta.",
|
||||||
"rejectingInviteAlreadyInPartyText": "Rechazando invitación (Ya en una fiesta).",
|
"rejectingInviteAlreadyInPartyText": "Rechazando invitación (Ya en una fiesta).",
|
||||||
"serverRestartingText": "El servidor se está reiniciando. Conectese en un momento...",
|
"serverRestartingText": "El servidor se está reiniciando. Conéctese en un momento...",
|
||||||
"serverShuttingDownText": "El servidor está fuera de servicio...",
|
"serverShuttingDownText": "El servidor está fuera de servicio...",
|
||||||
"signInErrorText": "Error iniciando sesión.",
|
"signInErrorText": "Error iniciando sesión.",
|
||||||
"signInNoConnectionText": "Imposible iniciar sesión (¿No hay conexión a internet?)",
|
"signInNoConnectionText": "Imposible iniciar sesión (¿No hay conexión a internet?)",
|
||||||
|
|
@ -995,7 +1000,7 @@
|
||||||
"willTimeOutText": "(caducará si está inactivo)"
|
"willTimeOutText": "(caducará si está inactivo)"
|
||||||
},
|
},
|
||||||
"jumpBoldText": "SALTA",
|
"jumpBoldText": "SALTA",
|
||||||
"jumpText": "Salta",
|
"jumpText": "Brinca",
|
||||||
"keepText": "Mantener",
|
"keepText": "Mantener",
|
||||||
"keepTheseSettingsText": "¿Mantener estos ajustes?",
|
"keepTheseSettingsText": "¿Mantener estos ajustes?",
|
||||||
"keyboardChangeInstructionsText": "Presiona dos veces el espacio para cambiar los teclados.",
|
"keyboardChangeInstructionsText": "Presiona dos veces el espacio para cambiar los teclados.",
|
||||||
|
|
@ -1008,7 +1013,7 @@
|
||||||
"kickVoteCantKickSelfText": "No puedes expulsarte a ti mismo",
|
"kickVoteCantKickSelfText": "No puedes expulsarte a ti mismo",
|
||||||
"kickVoteFailedNotEnoughVotersText": "No hay suficientes jugadores para votar.",
|
"kickVoteFailedNotEnoughVotersText": "No hay suficientes jugadores para votar.",
|
||||||
"kickVoteFailedText": "Votación de expulsión fallida",
|
"kickVoteFailedText": "Votación de expulsión fallida",
|
||||||
"kickVoteStartedText": "Se ha iniciado una votación para expulsar a '${NAME}'",
|
"kickVoteStartedText": "Han iniciado una votación para expulsar a '${NAME}'.",
|
||||||
"kickVoteText": "Vota para expulsar",
|
"kickVoteText": "Vota para expulsar",
|
||||||
"kickVotingDisabledText": "El voto para expulsar no está disponible",
|
"kickVotingDisabledText": "El voto para expulsar no está disponible",
|
||||||
"kickWithChatText": "Escribe ${YES} en el chat para \"Si\" y ${NO} para \"No\".",
|
"kickWithChatText": "Escribe ${YES} en el chat para \"Si\" y ${NO} para \"No\".",
|
||||||
|
|
@ -1081,15 +1086,16 @@
|
||||||
"mapSelectText": "Seleccionar…",
|
"mapSelectText": "Seleccionar…",
|
||||||
"mapSelectTitleText": "Pistas: ${GAME}",
|
"mapSelectTitleText": "Pistas: ${GAME}",
|
||||||
"mapText": "Pista",
|
"mapText": "Pista",
|
||||||
"maxConnectionsText": "Conexiones maximas",
|
"maxConnectionsText": "Conexiones máximas",
|
||||||
"maxPartySizeText": "Capacidad máxima de la fiesta",
|
"maxPartySizeText": "Capacidad máxima de la fiesta",
|
||||||
"maxPlayersText": "Jugadores máximos",
|
"maxPlayersText": "Jugadores máximos",
|
||||||
|
"merchText": "Mercado!",
|
||||||
"modeArcadeText": "Modo Arcade",
|
"modeArcadeText": "Modo Arcade",
|
||||||
"modeClassicText": "Modo Clásico",
|
"modeClassicText": "Modo Clásico",
|
||||||
"modeDemoText": "Modo De Demostración",
|
"modeDemoText": "Modo De Demostración",
|
||||||
"mostValuablePlayerText": "Jugador más Valorado",
|
"mostValuablePlayerText": "Jugador más Valorado",
|
||||||
"mostViolatedPlayerText": "Jugador más Agredido",
|
"mostViolatedPlayerText": "Jugador más Violado",
|
||||||
"mostViolentPlayerText": "Jugador más Violento",
|
"mostViolentPlayerText": "Jugador más Matador",
|
||||||
"moveText": "Mover",
|
"moveText": "Mover",
|
||||||
"multiKillText": "¡¡¡${COUNT}-COMBO!!!",
|
"multiKillText": "¡¡¡${COUNT}-COMBO!!!",
|
||||||
"multiPlayerCountText": "${COUNT} jugadores",
|
"multiPlayerCountText": "${COUNT} jugadores",
|
||||||
|
|
@ -1099,8 +1105,8 @@
|
||||||
"nameKilledText": "${NAME} mató a ${VICTIM}.",
|
"nameKilledText": "${NAME} mató a ${VICTIM}.",
|
||||||
"nameNotEmptyText": "¡El nombre no puede quedar vacío!",
|
"nameNotEmptyText": "¡El nombre no puede quedar vacío!",
|
||||||
"nameScoresText": "¡${NAME} anotó!",
|
"nameScoresText": "¡${NAME} anotó!",
|
||||||
"nameSuicideKidFriendlyText": "${NAME} murió accidentalmente.",
|
"nameSuicideKidFriendlyText": "${NAME} murió por accidente.",
|
||||||
"nameSuicideText": "${NAME} se suicidó.",
|
"nameSuicideText": "${NAME} se a suicidado.",
|
||||||
"nameText": "Nombre",
|
"nameText": "Nombre",
|
||||||
"nativeText": "Nativo",
|
"nativeText": "Nativo",
|
||||||
"newPersonalBestText": "¡Nuevo récord personal!",
|
"newPersonalBestText": "¡Nuevo récord personal!",
|
||||||
|
|
@ -1112,7 +1118,7 @@
|
||||||
"noAchievementsRemainingText": "- ninguno",
|
"noAchievementsRemainingText": "- ninguno",
|
||||||
"noContinuesText": "(sin re-intentos)",
|
"noContinuesText": "(sin re-intentos)",
|
||||||
"noExternalStorageErrorText": "No se encontraron almacenamientos externos en este dispositivo",
|
"noExternalStorageErrorText": "No se encontraron almacenamientos externos en este dispositivo",
|
||||||
"noGameCircleText": "Error: No haz autenticado con GameCircle",
|
"noGameCircleText": "Error: No has autenticado con GameCircle",
|
||||||
"noJoinCoopMidwayText": "Jugadores no pueden unirse en mitad de un juego.",
|
"noJoinCoopMidwayText": "Jugadores no pueden unirse en mitad de un juego.",
|
||||||
"noProfilesErrorText": "No haz creado ningún perfil, por lo que tendrás que llamarte '${NAME}'.\nVe a Ajustes>Perfiles para que te hagas un perfil.",
|
"noProfilesErrorText": "No haz creado ningún perfil, por lo que tendrás que llamarte '${NAME}'.\nVe a Ajustes>Perfiles para que te hagas un perfil.",
|
||||||
"noScoresYetText": "Sin puntuaciones aún.",
|
"noScoresYetText": "Sin puntuaciones aún.",
|
||||||
|
|
@ -1120,11 +1126,12 @@
|
||||||
"noTournamentsInTestBuildText": "ADVERTENCIA: los puntajes de los torneos en esta versión de prueba serán ignorados.",
|
"noTournamentsInTestBuildText": "ADVERTENCIA: los puntajes de los torneos en esta versión de prueba serán ignorados.",
|
||||||
"noValidMapsErrorText": "No hay pistas para este tipo de juego.",
|
"noValidMapsErrorText": "No hay pistas para este tipo de juego.",
|
||||||
"notEnoughPlayersRemainingText": "Cantidad necesaria de jugadores no coincide; inicia un juego nuevo.",
|
"notEnoughPlayersRemainingText": "Cantidad necesaria de jugadores no coincide; inicia un juego nuevo.",
|
||||||
"notEnoughPlayersText": "¡Necesitas al menos ${COUNT} jugadores para empezar este juego!",
|
"notEnoughPlayersText": "¡Necesitas por lo menos ${COUNT} jugadores para comenzar!",
|
||||||
"notNowText": "Ahora no",
|
"notNowText": "Ahora no",
|
||||||
"notSignedInErrorText": "Necesitas registrarte para hacer esto.",
|
"notSignedInErrorText": "Necesitas registrarte para hacer esto.",
|
||||||
"notSignedInGooglePlayErrorText": "Debes iniciar sesión con Google Play para hacer esto.",
|
"notSignedInGooglePlayErrorText": "Debes iniciar sesión con Google Play para hacer esto.",
|
||||||
"notSignedInText": "No registrado",
|
"notSignedInText": "No registrado",
|
||||||
|
"notUsingAccountText": "Nota: ignorando su cuenta de ${SERVICE}.\nVaya a 'Cuenta -> Ingresar con ${SERVICE}' si quieres usarla",
|
||||||
"nothingIsSelectedErrorText": "¡No hay nada seleccionado!",
|
"nothingIsSelectedErrorText": "¡No hay nada seleccionado!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Apagado",
|
"offText": "Apagado",
|
||||||
|
|
@ -1135,11 +1142,11 @@
|
||||||
"orText": "${A} o ${B}",
|
"orText": "${A} o ${B}",
|
||||||
"otherText": "Otros...",
|
"otherText": "Otros...",
|
||||||
"outOfText": "(#${RANK} de ${ALL})",
|
"outOfText": "(#${RANK} de ${ALL})",
|
||||||
"ownFlagAtYourBaseWarning": "Tu propia bandera debe estar\nen su base para anotar!",
|
"ownFlagAtYourBaseWarning": "Tu misma bandera debe estar\nen su lugar para anotar!",
|
||||||
"packageModsEnabledErrorText": "Juegos de red no están permitidos mientras paquetes modificadores estén habilitados (ver Ajustes->Avanzado)",
|
"packageModsEnabledErrorText": "Juegos de red no están permitidos mientras paquetes modificadores estén habilitados (ver Ajustes->Avanzado)",
|
||||||
"partyWindow": {
|
"partyWindow": {
|
||||||
"chatMessageText": "Mensaje del Chat",
|
"chatMessageText": "Mensaje del Chat",
|
||||||
"emptyText": "Tu fiesta esta vacia",
|
"emptyText": "Tu fiesta está vacía",
|
||||||
"hostText": "(host)",
|
"hostText": "(host)",
|
||||||
"sendText": "Enviar",
|
"sendText": "Enviar",
|
||||||
"titleText": "Tu Fiesta"
|
"titleText": "Tu Fiesta"
|
||||||
|
|
@ -1152,7 +1159,7 @@
|
||||||
"coopText": "Cooperativo",
|
"coopText": "Cooperativo",
|
||||||
"freeForAllText": "Todos contra Todos",
|
"freeForAllText": "Todos contra Todos",
|
||||||
"multiTeamText": "Múltiples Equipos",
|
"multiTeamText": "Múltiples Equipos",
|
||||||
"singlePlayerCoopText": "Sólo un Jugador / Co-op",
|
"singlePlayerCoopText": "Solo un Jugador / Co-op",
|
||||||
"teamsText": "Equipos"
|
"teamsText": "Equipos"
|
||||||
},
|
},
|
||||||
"playText": "Jugar",
|
"playText": "Jugar",
|
||||||
|
|
@ -1188,7 +1195,11 @@
|
||||||
"pleaseWaitText": "Por favor, espera...",
|
"pleaseWaitText": "Por favor, espera...",
|
||||||
"pluginClassLoadErrorText": "Error al cargar la clase del plugin '${PLUGIN}': ${ERROR}",
|
"pluginClassLoadErrorText": "Error al cargar la clase del plugin '${PLUGIN}': ${ERROR}",
|
||||||
"pluginInitErrorText": "Error al iniciar el plugin '${PLUGIN}': ${ERROR}",
|
"pluginInitErrorText": "Error al iniciar el plugin '${PLUGIN}': ${ERROR}",
|
||||||
|
"pluginSettingsText": "Ajustes del Plugin",
|
||||||
|
"pluginsAutoEnableNewText": "Activar Plugins automáticamente",
|
||||||
"pluginsDetectedText": "Nuevos complemento(s) detectados. Reinicie para activarlos, o configúrelos en la configuración",
|
"pluginsDetectedText": "Nuevos complemento(s) detectados. Reinicie para activarlos, o configúrelos en la configuración",
|
||||||
|
"pluginsDisableAllText": "Desactivar todos los Plugins",
|
||||||
|
"pluginsEnableAllText": "Activar todos los Plugins",
|
||||||
"pluginsRemovedText": "${NUM} plugin(s) ya no se encuentran.",
|
"pluginsRemovedText": "${NUM} plugin(s) ya no se encuentran.",
|
||||||
"pluginsText": "Plugins",
|
"pluginsText": "Plugins",
|
||||||
"practiceText": "Práctica",
|
"practiceText": "Práctica",
|
||||||
|
|
@ -1221,7 +1232,7 @@
|
||||||
"publicBetaText": "BETA PUBLICA",
|
"publicBetaText": "BETA PUBLICA",
|
||||||
"punchBoldText": "GOLPE",
|
"punchBoldText": "GOLPE",
|
||||||
"punchText": "Golpe",
|
"punchText": "Golpe",
|
||||||
"purchaseForText": "Comprar por ${PRICE}",
|
"purchaseForText": "Comprar por este precio : ${PRICE}",
|
||||||
"purchaseGameText": "Comprar Juego",
|
"purchaseGameText": "Comprar Juego",
|
||||||
"purchasingText": "Comprando...",
|
"purchasingText": "Comprando...",
|
||||||
"quitGameText": "¿Cerrar ${APP_NAME}?",
|
"quitGameText": "¿Cerrar ${APP_NAME}?",
|
||||||
|
|
@ -1332,6 +1343,7 @@
|
||||||
"netTestingText": "Prueba de Red",
|
"netTestingText": "Prueba de Red",
|
||||||
"resetText": "Reiniciar",
|
"resetText": "Reiniciar",
|
||||||
"showBombTrajectoriesText": "Mostrar trayectorias",
|
"showBombTrajectoriesText": "Mostrar trayectorias",
|
||||||
|
"showInGamePingText": "Visualizar Ping en el juego",
|
||||||
"showPlayerNamesText": "Mostrar Nombres de los Jugadores",
|
"showPlayerNamesText": "Mostrar Nombres de los Jugadores",
|
||||||
"showUserModsText": "Mostrar Carpeta de Mods",
|
"showUserModsText": "Mostrar Carpeta de Mods",
|
||||||
"titleText": "Avanzado",
|
"titleText": "Avanzado",
|
||||||
|
|
@ -1403,14 +1415,14 @@
|
||||||
"purchaseConfirmText": "¿Comprar ${ITEM}?",
|
"purchaseConfirmText": "¿Comprar ${ITEM}?",
|
||||||
"purchaseNotValidError": "Compra inválida.\nContacte ${EMAIL} si esto es un error.",
|
"purchaseNotValidError": "Compra inválida.\nContacte ${EMAIL} si esto es un error.",
|
||||||
"purchaseText": "Comprar",
|
"purchaseText": "Comprar",
|
||||||
"saleBundleText": "Paquete en Oferta!",
|
"saleBundleText": "¡Paquete en Oferta!",
|
||||||
"saleExclaimText": "¡Oferta!",
|
"saleExclaimText": "¡Oferta!",
|
||||||
"salePercentText": "(${PERCENT}% menos)",
|
"salePercentText": "(${PERCENT}% menos)",
|
||||||
"saleText": "OFERTA",
|
"saleText": "OFERTA",
|
||||||
"searchText": "Buscar",
|
"searchText": "Buscar",
|
||||||
"teamsFreeForAllGamesText": "En Equipos / Todos contra Todos",
|
"teamsFreeForAllGamesText": "En Equipos / Todos contra Todos",
|
||||||
"totalWorthText": "*** ¡${TOTAL_WORTH} de valor! ***",
|
"totalWorthText": "*** ¡${TOTAL_WORTH} de valor! ***",
|
||||||
"upgradeQuestionText": "¿Comprar Bombsquad Pro?",
|
"upgradeQuestionText": "¿Comprar BombSquad Pro?",
|
||||||
"winterSpecialText": "Especial de Invierno",
|
"winterSpecialText": "Especial de Invierno",
|
||||||
"youOwnThisText": "- ya posees esto -"
|
"youOwnThisText": "- ya posees esto -"
|
||||||
},
|
},
|
||||||
|
|
@ -1463,7 +1475,7 @@
|
||||||
"Bernard": "Bernard",
|
"Bernard": "Bernard",
|
||||||
"Bones": "Huesos",
|
"Bones": "Huesos",
|
||||||
"Butch": "Butch",
|
"Butch": "Butch",
|
||||||
"Easter Bunny": "Conejo de pascua",
|
"Easter Bunny": "Conejo de Pascua",
|
||||||
"Flopsy": "Flopsy",
|
"Flopsy": "Flopsy",
|
||||||
"Frosty": "Frosty",
|
"Frosty": "Frosty",
|
||||||
"Gretel": "Gretel",
|
"Gretel": "Gretel",
|
||||||
|
|
@ -1625,6 +1637,7 @@
|
||||||
"Italian": "Italiano",
|
"Italian": "Italiano",
|
||||||
"Japanese": "Japonés",
|
"Japanese": "Japonés",
|
||||||
"Korean": "Coreano",
|
"Korean": "Coreano",
|
||||||
|
"Malay": "Malayo",
|
||||||
"Persian": "Persa",
|
"Persian": "Persa",
|
||||||
"Polish": "Polaco",
|
"Polish": "Polaco",
|
||||||
"Portuguese": "Portugués",
|
"Portuguese": "Portugués",
|
||||||
|
|
@ -1692,7 +1705,7 @@
|
||||||
"An error has occurred; please contact support. (${ERROR})": "Se ha producido un error; por favor contácte con soporte. (${ERROR})",
|
"An error has occurred; please contact support. (${ERROR})": "Se ha producido un error; por favor contácte con soporte. (${ERROR})",
|
||||||
"An error has occurred; please contact support@froemling.net.": "Ha ocurrido un error; contacta a support@froemling.net.",
|
"An error has occurred; please contact support@froemling.net.": "Ha ocurrido un error; contacta a support@froemling.net.",
|
||||||
"An error has occurred; please try again later.": "Un error ha ocurrido; por favor intenta más tarde.",
|
"An error has occurred; please try again later.": "Un error ha ocurrido; por favor intenta más tarde.",
|
||||||
"Are you sure you want to link these accounts?\n\n${ACCOUNT1}\n${ACCOUNT2}\n\nThis cannot be undone!": "Quieres enlazar estas cuentas?\n\n${ACCOUNT1}\n${ACCOUNT2}\n\n¡Esto no se puede deshacer!",
|
"Are you sure you want to link these accounts?\n\n${ACCOUNT1}\n${ACCOUNT2}\n\nThis cannot be undone!": "¿Quieres enlazar estas cuentas?\n\n${ACCOUNT1}\n${ACCOUNT2}\n\n¡Esto no se puede deshacer!",
|
||||||
"BombSquad Pro unlocked!": "¡BombSquad Pro desbloqueado!",
|
"BombSquad Pro unlocked!": "¡BombSquad Pro desbloqueado!",
|
||||||
"Can't link 2 accounts of this type.": "No puedes enlazar dos cuentas de este tipo.",
|
"Can't link 2 accounts of this type.": "No puedes enlazar dos cuentas de este tipo.",
|
||||||
"Can't link 2 diamond league accounts.": "No pueden enlazar dos cuentas de liga diamante.",
|
"Can't link 2 diamond league accounts.": "No pueden enlazar dos cuentas de liga diamante.",
|
||||||
|
|
@ -1794,56 +1807,56 @@
|
||||||
"statements": {
|
"statements": {
|
||||||
"${TEAM} is disqualified because ${PLAYER} left": "El equipo ${TEAM} ha sido descalificado porque ${PLAYER} se ha ido.",
|
"${TEAM} is disqualified because ${PLAYER} left": "El equipo ${TEAM} ha sido descalificado porque ${PLAYER} se ha ido.",
|
||||||
"Killing ${NAME} for skipping part of the track!": "¡Matando a ${NAME} por saltarse un pedazo de la pista!",
|
"Killing ${NAME} for skipping part of the track!": "¡Matando a ${NAME} por saltarse un pedazo de la pista!",
|
||||||
"Warning to ${NAME}: turbo / button-spamming knocks you out.": "Advertencia para ${NAME}: turbo / El spameo de botones te noqueara."
|
"Warning to ${NAME}: turbo / button-spamming knocks you out.": "Advertencia para ${NAME}: turbo / El spameo de botones te noqueará."
|
||||||
},
|
},
|
||||||
"teamNames": {
|
"teamNames": {
|
||||||
"Bad Guys": "Chicos malos",
|
"Bad Guys": "Chicos Malos",
|
||||||
"Blue": "Azul",
|
"Blue": "Azul",
|
||||||
"Good Guys": "Chicos Buenos",
|
"Good Guys": "Chicos Buenos",
|
||||||
"Red": "Rojo"
|
"Red": "Rojo"
|
||||||
},
|
},
|
||||||
"tips": {
|
"tips": {
|
||||||
"A perfectly timed running-jumping-spin-punch can kill in a single hit\nand earn you lifelong respect from your friends.": "Un 'corre-salta-gira-golpea' puede destrozar de un solo impacto\ny ganarte el respeto de tus amigos por toda la vida.",
|
"A perfectly timed running-jumping-spin-punch can kill in a single hit\nand earn you lifelong respect from your friends.": "Un 'corre-salta-gira-golpea' puede destrozar de un solo impacto\ny ganarte el respeto de tus amigos para toda la vida.",
|
||||||
"Always remember to floss.": "Siempre acuérdate de cepillar tus dientes.",
|
"Always remember to floss.": "Siempre acuérdate de cepillar tus dientes.",
|
||||||
"Create player profiles for yourself and your friends with\nyour preferred names and appearances instead of using random ones.": "Crea perfiles para ti y tus amigos con nombres\ny colores personalizados en vez de usar aleatorios.",
|
"Create player profiles for yourself and your friends with\nyour preferred names and appearances instead of using random ones.": "Crea perfiles para ti y tus amigos con nombres\ny colores personalizados en vez de usar aleatorios.",
|
||||||
"Curse boxes turn you into a ticking time bomb.\nThe only cure is to quickly grab a health-pack.": "La maldición te convierte en una bomba de tiempo.\nLa única cura es coger una caja de salud.",
|
"Curse boxes turn you into a ticking time bomb.\nThe only cure is to quickly grab a health-pack.": "Las cajas de maldición te convierten en una bomba de tiempo.\nLa única cura es agarrar rápidamente un botiquín.",
|
||||||
"Despite their looks, all characters' abilities are identical,\nso just pick whichever one you most closely resemble.": "A pesar de su apariencia, las habilidades de todos los personajes\nson idénticas, así que escoge el que más se parezca a ti.",
|
"Despite their looks, all characters' abilities are identical,\nso just pick whichever one you most closely resemble.": "A pesar de su apariencia, las habilidades de todos los personajes\nson idénticas, así que escoge el que más se parezca a ti.",
|
||||||
"Don't get too cocky with that energy shield; you can still get yourself thrown off a cliff.": "No eres invencible con ese Electro-Escudo, todavía te pueden arrojar por un precipicio.",
|
"Don't get too cocky with that energy shield; you can still get yourself thrown off a cliff.": "No te pongas demasiado engreído(a) con ese escudo de energía; todavía puedes caerte de un acantilado.",
|
||||||
"Don't run all the time. Really. You will fall off cliffs.": "No corras todo el tiempo. En serio. Te vas a caer.",
|
"Don't run all the time. Really. You will fall off cliffs.": "No corras todo el tiempo. En serio. Te vas a caer.",
|
||||||
"Don't spin for too long; you'll become dizzy and fall.": "No gires por un largo tiempo; puedes marearte y caer.",
|
"Don't spin for too long; you'll become dizzy and fall.": "No gires por un largo tiempo; puedes marearte y caer.",
|
||||||
"Hold any button to run. (Trigger buttons work well if you have them)": "Sostén cualquier botón para correr. (Los botones de gatillo son para eso)",
|
"Hold any button to run. (Trigger buttons work well if you have them)": "Sostén cualquier botón para correr. (Los botones de gatillo son para eso)",
|
||||||
"Hold down any button to run. You'll get places faster\nbut won't turn very well, so watch out for cliffs.": "Mantén pulsado cualquier botón para correr. Llegarás a lugares rápido\npero no girarás muy bien, así que ten cuidado con los acantilados.",
|
"Hold down any button to run. You'll get places faster\nbut won't turn very well, so watch out for cliffs.": "Mantén pulsado cualquier botón para correr. Llegarás a lugares rápido\npero no girarás muy bien, así que ten cuidado con los acantilados.",
|
||||||
"Ice bombs are not very powerful, but they freeze\nwhoever they hit, leaving them vulnerable to shattering.": "Las Bombas de hielo no son muy potentes, pero congelan lo\nque toquen, dejando a tus enemigos vulnerables a romperse.",
|
"Ice bombs are not very powerful, but they freeze\nwhoever they hit, leaving them vulnerable to shattering.": "Las Bombas de hielo no son muy potentes, pero congelan lo\nque toquen, dejando a tus enemigos vulnerables a romperse.",
|
||||||
"If someone picks you up, punch them and they'll let go.\nThis works in real life too.": "Si alguien te levanta, golpéalos y ve como te sueltan.\nTambién funciona en la vida real.",
|
"If someone picks you up, punch them and they'll let go.\nThis works in real life too.": "Si alguien te levanta, golpéalos y ellos te soltarán.\nTambién funciona en la vida real.",
|
||||||
"If you are short on controllers, install the '${REMOTE_APP_NAME}' app\non your mobile devices to use them as controllers.": "Si no tienes suficientes controles, instala la aplicación '${REMOTE_APP_NAME}'\nen tu teléfono celulares para utilizarlos como controles.",
|
"If you are short on controllers, install the '${REMOTE_APP_NAME}' app\non your mobile devices to use them as controllers.": "Si no tienes suficientes controles, instala la aplicación '${REMOTE_APP_NAME}'\nen tus dispositivos móviles para utilizarlos como controles.",
|
||||||
"If you are short on controllers, install the 'BombSquad Remote' app\non your iOS or Android devices to use them as controllers.": "Te faltan controles? Instala la aplicación 'BombSquad Remote'\nen tu dispositivo iOS o Android para usarlo como control.",
|
"If you are short on controllers, install the 'BombSquad Remote' app\non your iOS or Android devices to use them as controllers.": "Te faltan controles? Instala la aplicación 'BombSquad Remote'\nen tu dispositivo iOS o Android para usarlo como control.",
|
||||||
"If you get a sticky-bomb stuck to you, jump around and spin in circles. You might\nshake the bomb off, or if nothing else your last moments will be entertaining.": "Si te adhieres a una bomba pegajosa, salta y da muchas vueltas. Es posible que sacudas\nla bomba pegada, o sin nada más, tus últimos momentos serán entretenidos.",
|
"If you get a sticky-bomb stuck to you, jump around and spin in circles. You might\nshake the bomb off, or if nothing else your last moments will be entertaining.": "Si te adhieres a una bomba pegajosa, salta y da muchas vueltas. Es posible que sacudas\nla bomba pegada, o sin nada más, tus últimos momentos serán entretenidos.",
|
||||||
"If you kill an enemy in one hit you get double points for it.": "Si eliminas a un enemigo de un golpe ganas doble puntos.",
|
"If you kill an enemy in one hit you get double points for it.": "Si matas a un enemigo de un solo golpe obtendrás puntos dobles.",
|
||||||
"If you pick up a curse, your only hope for survival is to\nfind a health powerup in the next few seconds.": "Si levantas una maldición, tu única esperanza es\nencontrar una caja de salud en tus últimos segundos.",
|
"If you pick up a curse, your only hope for survival is to\nfind a health powerup in the next few seconds.": "Si tomaste una maldición, tu única esperanza es\nencontrar un botiquín en tus últimos segundos.",
|
||||||
"If you stay in one place, you're toast. Run and dodge to survive..": "Si te quedas quieto, estás perdido. Corre y esquiva para sobrevivir...",
|
"If you stay in one place, you're toast. Run and dodge to survive..": "Si te quedas quieto, estás frito. Corre y esquiva para sobrevivir...",
|
||||||
"If you've got lots of players coming and going, turn on 'auto-kick-idle-players'\nunder settings in case anyone forgets to leave the game.": "Si tienes muchos jugadores yendo y viniendo, activa 'expulsar jugadores inactivos'\nen ajustes en caso de que alguien se olvide de abandonar el juego.",
|
"If you've got lots of players coming and going, turn on 'auto-kick-idle-players'\nunder settings in case anyone forgets to leave the game.": "Si tienes muchos jugadores yendo y viniendo, activa 'expulsar jugadores inactivos'\nen ajustes en caso de que alguien se olvide de abandonar el juego.",
|
||||||
"If your device gets too warm or you'd like to conserve battery power,\nturn down \"Visuals\" or \"Resolution\" in Settings->Graphics": "Si tu dispositivo se pone caliente o te gustaria conservar bateria,\nbaja los \"Visuales\" o \"Resolución\" en configuración->Gráficos",
|
"If your device gets too warm or you'd like to conserve battery power,\nturn down \"Visuals\" or \"Resolution\" in Settings->Graphics": "Si tu dispositivo se pone caliente o te gustaría conservar batería,\nbaja los \"Visuales\" o \"Resolución\" en configuración->Gráficos",
|
||||||
"If your framerate is choppy, try turning down resolution\nor visuals in the game's graphics settings.": "Si la imagen va lenta, intenta reducir la resolución\no los visuales en los ajustes gráficos del juego.",
|
"If your framerate is choppy, try turning down resolution\nor visuals in the game's graphics settings.": "Si la imagen va lenta, intenta reducir la resolución\no los visuales en los ajustes gráficos del juego.",
|
||||||
"In Capture-the-Flag, your own flag must be at your base to score, If the other\nteam is about to score, stealing their flag can be a good way to stop them.": "En Captura la Bandera, la tuya debe estar en tu base para que anotes.\nSi el otro equipo está a punto de anotar, el arrebatar su bandera evitará que lo hagan.",
|
"In Capture-the-Flag, your own flag must be at your base to score, If the other\nteam is about to score, stealing their flag can be a good way to stop them.": "En Captura la Bandera, la tuya debe estar en tu base para que anotes.\nSi el otro equipo está a punto de anotar, el arrebatar su bandera evitará que lo hagan.",
|
||||||
"In hockey, you'll maintain more speed if you turn gradually.": "En hockey, mantendrás tu impulso si giras gradualmente.",
|
"In hockey, you'll maintain more speed if you turn gradually.": "En hockey, mantendrás tu impulso si giras gradualmente.",
|
||||||
"It's easier to win with a friend or two helping.": "Es mas fácil ganar con un amigo.",
|
"It's easier to win with a friend or two helping.": "Es más fácil ganar con un amigo.",
|
||||||
"Jump just as you're throwing to get bombs up to the highest levels.": "Brinca antes de lanzar una bomba para que alcance lugares altos.",
|
"Jump just as you're throwing to get bombs up to the highest levels.": "Salta antes de lanzar una bomba para que alcance lugares altos.",
|
||||||
"Land-mines are a good way to stop speedy enemies.": "Las minas son una buena manera para detener a los enemigos veloces.",
|
"Land-mines are a good way to stop speedy enemies.": "Las minas terrestres son una buena manera para detener a los enemigos veloces.",
|
||||||
"Many things can be picked up and thrown, including other players. Tossing\nyour enemies off cliffs can be an effective and emotionally fulfilling strategy.": "Muchas cosas se pueden recoger y lanzar, incluyendo a otros jugadores.\nArroja a tus enemigos por los precipicios. Te sentirás mejor.",
|
"Many things can be picked up and thrown, including other players. Tossing\nyour enemies off cliffs can be an effective and emotionally fulfilling strategy.": "Muchas cosas se pueden recoger y lanzar, incluyendo a otros jugadores.\nArroja a tus enemigos por los precipicios. Te sentirás mejor.",
|
||||||
"No, you can't get up on the ledge. You have to throw bombs.": "No, no puedes subir a la cornisa. Tienes que lanzar bombas.",
|
"No, you can't get up on the ledge. You have to throw bombs.": "No, no puedes subir a la cornisa. Tienes que lanzar bombas.",
|
||||||
"Players can join and leave in the middle of most games,\nand you can also plug and unplug controllers on the fly.": "Jugadores pueden unirse e irse en medio de casi todos los juegos,\ntambién puedes poner o quitar controles en cualquier momento.",
|
"Players can join and leave in the middle of most games,\nand you can also plug and unplug controllers on the fly.": "Jugadores pueden unirse e irse en medio de casi todos los juegos,\ntambién puedes poner o quitar controles en cualquier momento.",
|
||||||
"Players can join and leave in the middle of most games,\nand you can also plug and unplug gamepads on the fly.": "Los jugadores pueden unirse y abandonar en el transcurso del juego,\ny también puedes conectar y desconectar controles cuando quieras.",
|
"Players can join and leave in the middle of most games,\nand you can also plug and unplug gamepads on the fly.": "Los jugadores pueden unirse y abandonar en el transcurso del juego,\ny también puedes conectar y desconectar controles cuando quieras.",
|
||||||
"Powerups only have time limits in co-op games.\nIn teams and free-for-all they're yours until you die.": "Los poderes sólo tienen tiempo límite en juego cooperativo.\nEn los equipos y Pelea libre son tuyos hasta que seas eliminado.",
|
"Powerups only have time limits in co-op games.\nIn teams and free-for-all they're yours until you die.": "Los poderes sólo tienen tiempo límite en juego cooperativo.\nEn los equipos y Pelea libre son tuyos hasta que seas eliminado.",
|
||||||
"Practice using your momentum to throw bombs more accurately.": "Practica con tu impulso para lanzar bombas con más precisión.",
|
"Practice using your momentum to throw bombs more accurately.": "Practica con tu impulso para lanzar bombas con más precisión.",
|
||||||
"Punches do more damage the faster your fists are moving,\nso try running, jumping, and spinning like crazy.": "Cuanto más rápido se mueven tu puños, tus golpes tienen\nmás impacto, así que corre, salta y gira como un loco.",
|
"Punches do more damage the faster your fists are moving,\nso try running, jumping, and spinning like crazy.": "Tus golpes harán más daño dependiendo de que tan rápido tus puños se muevan,\nasí que intenta correr, saltar, y girar como un loco.",
|
||||||
"Run back and forth before throwing a bomb\nto 'whiplash' it and throw it farther.": "Corre de un lado a otro antes de lanzar una\nbomba de 'latigazo' para lanzarla lejos.",
|
"Run back and forth before throwing a bomb\nto 'whiplash' it and throw it farther.": "Corre de un lado a otro antes de lanzar una\nbomba de 'latigazo' para lanzarla lejos.",
|
||||||
"Take out a group of enemies by\nsetting off a bomb near a TNT box.": "Elimina un gran cantidad de enemigos\nal detonar una bomba cerca del TNT.",
|
"Take out a group of enemies by\nsetting off a bomb near a TNT box.": "Elimina un gran cantidad de enemigos\nal detonar una bomba cerca de una caja TNT.",
|
||||||
"The head is the most vulnerable area, so a sticky-bomb\nto the noggin usually means game-over.": "La cabeza es la zona más vulnerable, una bomba pegajosa\na la cabeza generalmente significa el fin.",
|
"The head is the most vulnerable area, so a sticky-bomb\nto the noggin usually means game-over.": "La cabeza es la zona más vulnerable, una bomba pegajosa\na la cabeza usualmente significa game-over.",
|
||||||
"This level never ends, but a high score here\nwill earn you eternal respect throughout the world.": "Este nivel no tiene fin, pero un alto puntaje aquí\nte hará ganar el respeto eterno por todo el mundo.",
|
"This level never ends, but a high score here\nwill earn you eternal respect throughout the world.": "Este nivel no tiene fin, pero un alto puntaje aquí\nte hará ganar el respeto eterno por todo el mundo.",
|
||||||
"Throw strength is based on the direction you are holding.\nTo toss something gently in front of you, don't hold any direction.": "La fuerza de tiro se basa en la dirección que estás sosteniendo.\nPara arrojar algo justo delante de ti, no sostengas ninguna dirección.",
|
"Throw strength is based on the direction you are holding.\nTo toss something gently in front of you, don't hold any direction.": "La fuerza de tiro se basa en la dirección que estás sosteniendo.\nPara arrojar algo justo delante de ti, no sostengas ninguna dirección.",
|
||||||
"Tired of the soundtrack? Replace it with your own!\nSee Settings->Audio->Soundtrack": "¿Cansado de la pista de audio? ¡Reemplázala con tu música!\nVe a Ajustes->Audio->Banda Sonora",
|
"Tired of the soundtrack? Replace it with your own!\nSee Settings->Audio->Soundtrack": "¿Cansado de la pista de audio? ¡Reemplázala con tu música!\nVe a Ajustes->Audio->Banda Sonora",
|
||||||
"Try 'Cooking off' bombs for a second or two before throwing them.": "'Cocina tus Bombas' por un segundo o dos antes de tirarlas.",
|
"Try 'Cooking off' bombs for a second or two before throwing them.": "'Cocina tus Bombas' por un segundo o dos antes de tirarlas.",
|
||||||
"Try tricking enemies into killing eachother or running off cliffs.": "Engaña a tus enemigos para que se eliminen entre sí o para que corran a los barrancos.",
|
"Try tricking enemies into killing eachother or running off cliffs.": "Engaña a tus enemigos para que se eliminen entre sí o para que corran a los acantilados.",
|
||||||
"Use the pick-up button to grab the flag < ${PICKUP} >": "Usa el botón de 'levantar' para llevar la bandera < ${PICKUP} >",
|
"Use the pick-up button to grab the flag < ${PICKUP} >": "Usa el botón de 'levantar' para llevar la bandera < ${PICKUP} >",
|
||||||
"Whip back and forth to get more distance on your throws..": "Bate de un lado a otro para tirar las bombas más lejos..",
|
"Whip back and forth to get more distance on your throws..": "Bate de un lado a otro para tirar las bombas más lejos..",
|
||||||
"You can 'aim' your punches by spinning left or right.\nThis is useful for knocking bad guys off edges or scoring in hockey.": "Puedes 'dirigir' tus golpes girando a la izquierda o derecha. Esto\nes útil para tirar a los enemigos al vacío o para anotar en el hockey.",
|
"You can 'aim' your punches by spinning left or right.\nThis is useful for knocking bad guys off edges or scoring in hockey.": "Puedes 'dirigir' tus golpes girando a la izquierda o derecha. Esto\nes útil para tirar a los enemigos al vacío o para anotar en el hockey.",
|
||||||
|
|
@ -1915,6 +1928,7 @@
|
||||||
"usesExternalControllerText": "Este juego usa un control externo como entrada.",
|
"usesExternalControllerText": "Este juego usa un control externo como entrada.",
|
||||||
"usingItunesText": "Usando la aplicación de música para la banda sonora...",
|
"usingItunesText": "Usando la aplicación de música para la banda sonora...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Asegúrate de que mezclar esté ENCENDIDO y repetir TODOS esté activado en iTunes.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Asegúrate de que mezclar esté ENCENDIDO y repetir TODOS esté activado en iTunes.",
|
||||||
|
"v2AccountLinkingInfoText": "Para vincular las cuentas V2, utilice el botón \"Administrar cuenta\".",
|
||||||
"validatingBetaText": "Validando Beta…",
|
"validatingBetaText": "Validando Beta…",
|
||||||
"validatingTestBuildText": "Validando versión de prueba...",
|
"validatingTestBuildText": "Validando versión de prueba...",
|
||||||
"victoryText": "¡Victoria!",
|
"victoryText": "¡Victoria!",
|
||||||
|
|
@ -1926,7 +1940,7 @@
|
||||||
"waitingForHostText": "(esperando a que ${HOST} continúe)",
|
"waitingForHostText": "(esperando a que ${HOST} continúe)",
|
||||||
"waitingForLocalPlayersText": "Esperando jugadores locales...",
|
"waitingForLocalPlayersText": "Esperando jugadores locales...",
|
||||||
"waitingForPlayersText": "esperando a jugadores para unirse...",
|
"waitingForPlayersText": "esperando a jugadores para unirse...",
|
||||||
"waitingInLineText": "Esperando en línea (la fiesta esta llena)...",
|
"waitingInLineText": "Esperando en línea (la fiesta está llena)...",
|
||||||
"watchAVideoText": "Ver un Vídeo",
|
"watchAVideoText": "Ver un Vídeo",
|
||||||
"watchAnAdText": "Mira un Anuncio",
|
"watchAnAdText": "Mira un Anuncio",
|
||||||
"watchWindow": {
|
"watchWindow": {
|
||||||
|
|
@ -1949,6 +1963,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Horda",
|
"waveText": "Horda",
|
||||||
"wellSureText": "¡Pues claro!",
|
"wellSureText": "¡Pues claro!",
|
||||||
|
"whatIsThisText": "Qué es esto?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Marca registrada DarwiinRemote"
|
"titleText": "Marca registrada DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
@ -1972,7 +1987,7 @@
|
||||||
"winsPlayerText": "¡${NAME} Gana!",
|
"winsPlayerText": "¡${NAME} Gana!",
|
||||||
"winsTeamText": "¡${NAME} Gana!!",
|
"winsTeamText": "¡${NAME} Gana!!",
|
||||||
"winsText": "¡${NAME} Gana!",
|
"winsText": "¡${NAME} Gana!",
|
||||||
"workspaceSyncErrorText": "Error al sincronizar ${WORKSPACE}. Mira el registro para mas detalles.",
|
"workspaceSyncErrorText": "Error al sincronizar ${WORKSPACE}. Mira el registro para más detalles.",
|
||||||
"workspaceSyncReuseText": "No se puede sincronizar ${WORKSPACE}. Reusando la versión sincronizada anterior.",
|
"workspaceSyncReuseText": "No se puede sincronizar ${WORKSPACE}. Reusando la versión sincronizada anterior.",
|
||||||
"worldScoresUnavailableText": "Puntuaciones globales no disponibles.",
|
"worldScoresUnavailableText": "Puntuaciones globales no disponibles.",
|
||||||
"worldsBestScoresText": "Mejores puntuaciones Mundiales",
|
"worldsBestScoresText": "Mejores puntuaciones Mundiales",
|
||||||
|
|
@ -1987,7 +2002,7 @@
|
||||||
"ouyaInstructionsTextScale": 0.8,
|
"ouyaInstructionsTextScale": 0.8,
|
||||||
"titleText": "Controles de Xbox 360 con ${APP_NAME}:"
|
"titleText": "Controles de Xbox 360 con ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
"yesAllowText": "¡Si, permitelo!",
|
"yesAllowText": "¡Sí, permítelo!",
|
||||||
"yourBestScoresText": "Tus Mejores Puntuaciones",
|
"yourBestScoresText": "Tus Mejores Puntuaciones",
|
||||||
"yourBestTimesText": "Tus Mejores Tiempos"
|
"yourBestTimesText": "Tus Mejores Tiempos"
|
||||||
}
|
}
|
||||||
15
dist/ba_data/data/languages/swedish.json
vendored
15
dist/ba_data/data/languages/swedish.json
vendored
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Du kan enbart ändra detta en gång per säsong.",
|
"changeOncePerSeason": "Du kan enbart ändra detta en gång per säsong.",
|
||||||
"changeOncePerSeasonError": "Du måste vänta tills nästa säsong för att ändra detta igen (${NUM} days)",
|
"changeOncePerSeasonError": "Du måste vänta tills nästa säsong för att ändra detta igen (${NUM} days)",
|
||||||
"customName": "Anpassat Namn",
|
"customName": "Anpassat Namn",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Om du vill använda ett annat Google-konto,\nanvänd appen Google Play Spel för att byta.",
|
||||||
"linkAccountsEnterCodeText": "Skriv in kod",
|
"linkAccountsEnterCodeText": "Skriv in kod",
|
||||||
"linkAccountsGenerateCodeText": "Generera kod",
|
"linkAccountsGenerateCodeText": "Generera kod",
|
||||||
"linkAccountsInfoText": "(dela framsteg över olika plattformar)",
|
"linkAccountsInfoText": "(dela framsteg över olika plattformar)",
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
"linkAccountsInstructionsText": "För att länka ihop två konton, generera en kod på\nett av dem och skriv in den på det andra. Framsteg\noch samlingar kommer att föras samman. Du kan länka \nupp till ${COUNT} konton.\n\nVar försiktig, detta kan inte ångras! ",
|
"linkAccountsInstructionsText": "För att länka ihop två konton, generera en kod på\nett av dem och skriv in den på det andra. Framsteg\noch samlingar kommer att föras samman. Du kan länka \nupp till ${COUNT} konton.\n\nVar försiktig, detta kan inte ångras! ",
|
||||||
"linkAccountsText": "Länka konton",
|
"linkAccountsText": "Länka konton",
|
||||||
"linkedAccountsText": "Länkade konton:",
|
"linkedAccountsText": "Länkade konton:",
|
||||||
|
"manageAccountText": "Hantera konto",
|
||||||
"nameChangeConfirm": "Ändra nanmnet på ditt konto till ${NAME}?",
|
"nameChangeConfirm": "Ändra nanmnet på ditt konto till ${NAME}?",
|
||||||
"notLoggedInText": "<ej inloggad>",
|
"notLoggedInText": "<ej inloggad>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Detta kommer att återställa co-op spel och \npoäng (men inte dina värdekuponger). Kan ej ångras.\nÄr du säker?",
|
"resetProgressConfirmNoAchievementsText": "Detta kommer att återställa co-op spel och \npoäng (men inte dina värdekuponger). Kan ej ångras.\nÄr du säker?",
|
||||||
|
|
@ -807,7 +809,7 @@
|
||||||
"ticketsFromASponsorText": "Få ${COUNT} värdekuponger\nfrån en sponsor",
|
"ticketsFromASponsorText": "Få ${COUNT} värdekuponger\nfrån en sponsor",
|
||||||
"ticketsText": "${COUNT} Värdekuponger",
|
"ticketsText": "${COUNT} Värdekuponger",
|
||||||
"titleText": "Skaffa Värdekuponger",
|
"titleText": "Skaffa Värdekuponger",
|
||||||
"unavailableLinkAccountText": "Sorry, det går inte att göra inköp på den här plattformen. \nOm du vill kan du länka det här kontot till en annan\nplattform och göra inköpen där.",
|
"unavailableLinkAccountText": "Tyvärr, köp är inte tillgängliga på den här plattformen.\nSom en lösning kan du länka detta konto till ett konto på\nen annan plattform och gör inköp där.",
|
||||||
"unavailableTemporarilyText": "Detta är inte tillgänglig för tillfället; försök igen senare.",
|
"unavailableTemporarilyText": "Detta är inte tillgänglig för tillfället; försök igen senare.",
|
||||||
"unavailableText": "Tyvärr, detta är inte tillgängligt.",
|
"unavailableText": "Tyvärr, detta är inte tillgängligt.",
|
||||||
"versionTooOldText": "Tyvärr, denna version av spelet är för gammalt; vänligen uppgradera till en nyare.",
|
"versionTooOldText": "Tyvärr, denna version av spelet är för gammalt; vänligen uppgradera till en nyare.",
|
||||||
|
|
@ -1306,15 +1308,24 @@
|
||||||
"tournamentsText": "Turneringar",
|
"tournamentsText": "Turneringar",
|
||||||
"translations": {
|
"translations": {
|
||||||
"characterNames": {
|
"characterNames": {
|
||||||
|
"Agent Johnson": "Agent Johnson",
|
||||||
|
"B-9000": "B-9000",
|
||||||
"Bernard": "Bernard",
|
"Bernard": "Bernard",
|
||||||
"Bones": "Bones",
|
"Bones": "Bones",
|
||||||
"Butch": "Butch",
|
"Butch": "Butch",
|
||||||
"Easter Bunny": "Påskharen",
|
"Easter Bunny": "Påskharen",
|
||||||
|
"Flopsy": "Floppy",
|
||||||
|
"Frosty": "Frostig",
|
||||||
"Gretel": "Greta",
|
"Gretel": "Greta",
|
||||||
|
"Middle-Man": "Mellanhand",
|
||||||
"Pixel": "Pixel",
|
"Pixel": "Pixel",
|
||||||
"Santa Claus": "Jultomten",
|
"Santa Claus": "Jultomten",
|
||||||
"Snake Shadow": "Ormskugga",
|
"Snake Shadow": "Ormskugga",
|
||||||
"Zoe": "Zoe"
|
"Spaz": "Spaz",
|
||||||
|
"Taobao Mascot": "Taobao maskot",
|
||||||
|
"Todd McBurton": "Todd McBurton",
|
||||||
|
"Zoe": "Zoe",
|
||||||
|
"Zola": "Zola"
|
||||||
},
|
},
|
||||||
"coopLevelNames": {
|
"coopLevelNames": {
|
||||||
"${GAME} Training": "${GAME} Övning",
|
"${GAME} Training": "${GAME} Övning",
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/tamil.json
vendored
10
dist/ba_data/data/languages/tamil.json
vendored
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "ஒரு பருவத்திற்கு ஒரு முறை மட்டுமே இதை மாற்ற முடியும்.",
|
"changeOncePerSeason": "ஒரு பருவத்திற்கு ஒரு முறை மட்டுமே இதை மாற்ற முடியும்.",
|
||||||
"changeOncePerSeasonError": "இதை மீண்டும் மாற்ற அடுத்த சீசன் வரை நீங்கள் காத்திருக்க வேண்டும் (${NUM} நாட்கள்)",
|
"changeOncePerSeasonError": "இதை மீண்டும் மாற்ற அடுத்த சீசன் வரை நீங்கள் காத்திருக்க வேண்டும் (${NUM} நாட்கள்)",
|
||||||
"customName": "தனிப்பயன் பெயர்",
|
"customName": "தனிப்பயன் பெயர்",
|
||||||
|
"googlePlayGamesAccountSwitchText": "நீங்கள் வேறு Google கணக்கைப் பயன்படுத்த விரும்பினால்,\nமாறுவதற்கு Google Play கேம்ஸ் பயன்பாட்டைப் பயன்படுத்தவும்.",
|
||||||
"linkAccountsEnterCodeText": "குறியீட்டை உள்ளிடவும்",
|
"linkAccountsEnterCodeText": "குறியீட்டை உள்ளிடவும்",
|
||||||
"linkAccountsGenerateCodeText": "குறியீட்டை உருவாக்கவும்",
|
"linkAccountsGenerateCodeText": "குறியீட்டை உருவாக்கவும்",
|
||||||
"linkAccountsInfoText": "வெவ்வேறு தளங்களில் முன்னேற்றத்தைப் பகிரலாம்",
|
"linkAccountsInfoText": "வெவ்வேறு தளங்களில் முன்னேற்றத்தைப் பகிரலாம்",
|
||||||
|
|
@ -37,6 +38,7 @@
|
||||||
"titleText": "கணக்கு",
|
"titleText": "கணக்கு",
|
||||||
"unlinkAccountsInstructionsText": "இணைப்பை நீக்குவதற்கான கணக்கைத் தேர்ந்தெடுக்கவும்",
|
"unlinkAccountsInstructionsText": "இணைப்பை நீக்குவதற்கான கணக்கைத் தேர்ந்தெடுக்கவும்",
|
||||||
"unlinkAccountsText": "கணக்கை நீக்க",
|
"unlinkAccountsText": "கணக்கை நீக்க",
|
||||||
|
"unlinkLegacyV1AccountsText": "மரபு (V1) கணக்குகளின் இணைப்பை நீக்கு",
|
||||||
"v2LinkInstructionsText": "கணக்கை உருவாக்க அல்லது உள்நுழைய இந்த இணைப்பைப் பயன்படுத்தவும்.",
|
"v2LinkInstructionsText": "கணக்கை உருவாக்க அல்லது உள்நுழைய இந்த இணைப்பைப் பயன்படுத்தவும்.",
|
||||||
"viaAccount": "${NAME} கணக்கின் வழியாக",
|
"viaAccount": "${NAME} கணக்கின் வழியாக",
|
||||||
"youAreSignedInAsText": "நீங்கள் உள்நுழைந்துள்ளீர்கள்"
|
"youAreSignedInAsText": "நீங்கள் உள்நுழைந்துள்ளீர்கள்"
|
||||||
|
|
@ -545,7 +547,9 @@
|
||||||
"deleteText": "அழி",
|
"deleteText": "அழி",
|
||||||
"demoText": "டெமோ",
|
"demoText": "டெமோ",
|
||||||
"denyText": "மறுக்க",
|
"denyText": "மறுக்க",
|
||||||
|
"deprecatedText": "நிராகரிக்கப்பட்டது",
|
||||||
"desktopResText": "டெஸ்க்டாப் ரெஸ்",
|
"desktopResText": "டெஸ்க்டாப் ரெஸ்",
|
||||||
|
"deviceAccountUpgradeText": "எச்சரிக்கை:\nசாதனக் கணக்கில் (${NAME}) உள்நுழைந்துள்ளீர்கள்.\nஎதிர்கால புதுப்பிப்பில் சாதன கணக்குகள் அகற்றப்படும்.\nஉங்கள் முன்னேற்றத்தைத் தொடர விரும்பினால், V2 கணக்கிற்கு மேம்படுத்தவும்.",
|
||||||
"difficultyEasyText": "சுலபம்",
|
"difficultyEasyText": "சுலபம்",
|
||||||
"difficultyHardOnlyText": "கடினமான முறை மட்டுமே",
|
"difficultyHardOnlyText": "கடினமான முறை மட்டுமே",
|
||||||
"difficultyHardText": "கடினமான",
|
"difficultyHardText": "கடினமான",
|
||||||
|
|
@ -803,6 +807,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "மன்னிக்கவும், கூகுளின் மல்டிபிளேயர் சேவை இனி கிடைக்காது.\nநான் முடிந்தவரை விரைவாக மாற்றுவதற்கு வேலை செய்கிறேன்.\nஅதுவரை, வேறு இணைப்பு முறையை முயற்சிக்கவும்.\n-எரிக்",
|
"googleMultiplayerDiscontinuedText": "மன்னிக்கவும், கூகுளின் மல்டிபிளேயர் சேவை இனி கிடைக்காது.\nநான் முடிந்தவரை விரைவாக மாற்றுவதற்கு வேலை செய்கிறேன்.\nஅதுவரை, வேறு இணைப்பு முறையை முயற்சிக்கவும்.\n-எரிக்",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google Play வாங்குதல்கள் கிடைக்கவில்லை.\nஉங்கள் ஸ்டோர் பயன்பாட்டைப் புதுப்பிக்க வேண்டியிருக்கலாம்.",
|
"googlePlayPurchasesNotAvailableText": "Google Play வாங்குதல்கள் கிடைக்கவில்லை.\nஉங்கள் ஸ்டோர் பயன்பாட்டைப் புதுப்பிக்க வேண்டியிருக்கலாம்.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play சேவைகள் கிடைக்கவில்லை.\nசில ஆப்ஸ் செயல்பாடுகள் முடக்கப்பட்டிருக்கலாம்.",
|
||||||
"googlePlayText": "கூகுள் பிளே",
|
"googlePlayText": "கூகுள் பிளே",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "எப்போதும்",
|
"alwaysText": "எப்போதும்",
|
||||||
|
|
@ -1020,6 +1025,7 @@
|
||||||
"maxConnectionsText": "அதிகபட்ச இணைப்புகள்",
|
"maxConnectionsText": "அதிகபட்ச இணைப்புகள்",
|
||||||
"maxPartySizeText": "அதிகபட்ச பார்ட்டி அளவு",
|
"maxPartySizeText": "அதிகபட்ச பார்ட்டி அளவு",
|
||||||
"maxPlayersText": "அதிகபட்ச வீரர்கள்",
|
"maxPlayersText": "அதிகபட்ச வீரர்கள்",
|
||||||
|
"merchText": "பொருட்கள்!",
|
||||||
"modeArcadeText": "ஆர்கேட் முறை",
|
"modeArcadeText": "ஆர்கேட் முறை",
|
||||||
"modeClassicText": "கிளாசிக் பயன்முறை",
|
"modeClassicText": "கிளாசிக் பயன்முறை",
|
||||||
"modeDemoText": "Demo Mode",
|
"modeDemoText": "Demo Mode",
|
||||||
|
|
@ -1059,6 +1065,7 @@
|
||||||
"notSignedInErrorText": "இதைச் செய்ய நீங்கள் உள்நுழைய வேண்டும்.",
|
"notSignedInErrorText": "இதைச் செய்ய நீங்கள் உள்நுழைய வேண்டும்.",
|
||||||
"notSignedInGooglePlayErrorText": "இதைச் செய்ய நீங்கள் Google Play இல் உள்நுழைய வேண்டும்.",
|
"notSignedInGooglePlayErrorText": "இதைச் செய்ய நீங்கள் Google Play இல் உள்நுழைய வேண்டும்.",
|
||||||
"notSignedInText": "உள்நுழையவில்லை",
|
"notSignedInText": "உள்நுழையவில்லை",
|
||||||
|
"notUsingAccountText": "குறிப்பு: ${SERVICE} கணக்கைப் புறக்கணித்தல்.\nநீங்கள் அதைப் பயன்படுத்த விரும்பினால், 'கணக்கு -> ${SERVICE} உடன் உள்நுழையவும்' என்பதற்குச் செல்லவும்.",
|
||||||
"nothingIsSelectedErrorText": "எதுவும் தேர்ந்தெடுக்கப்படவில்லை!",
|
"nothingIsSelectedErrorText": "எதுவும் தேர்ந்தெடுக்கப்படவில்லை!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "ஆஃப்",
|
"offText": "ஆஃப்",
|
||||||
|
|
@ -1524,6 +1531,7 @@
|
||||||
"Italian": "இத்தாலியன்",
|
"Italian": "இத்தாலியன்",
|
||||||
"Japanese": "ஜாபனீஸ்",
|
"Japanese": "ஜாபனீஸ்",
|
||||||
"Korean": "கொரியன்",
|
"Korean": "கொரியன்",
|
||||||
|
"Malay": "மலாய்",
|
||||||
"Persian": "பர்ஷியன்",
|
"Persian": "பர்ஷியன்",
|
||||||
"Polish": "பலிஷ்",
|
"Polish": "பலிஷ்",
|
||||||
"Portuguese": "போர்சுகிஸ்",
|
"Portuguese": "போர்சுகிஸ்",
|
||||||
|
|
@ -1805,6 +1813,7 @@
|
||||||
"useDefaultText": "இயல்புநிலையைப் பயன்படுத்தவும்",
|
"useDefaultText": "இயல்புநிலையைப் பயன்படுத்தவும்",
|
||||||
"usesExternalControllerText": "இந்த விளையாட்டு உள்ளீட்டிற்கு வெளிப்புற கட்டுப்படுத்தியைப் பயன்படுத்துகிறது.",
|
"usesExternalControllerText": "இந்த விளையாட்டு உள்ளீட்டிற்கு வெளிப்புற கட்டுப்படுத்தியைப் பயன்படுத்துகிறது.",
|
||||||
"usingItunesText": "ஒலிப்பதிவுக்காக மியூசிக் ஆப் பயன்படுத்துகிறது...",
|
"usingItunesText": "ஒலிப்பதிவுக்காக மியூசிக் ஆப் பயன்படுத்துகிறது...",
|
||||||
|
"v2AccountLinkingInfoText": "V2 கணக்குகளை இணைக்க, 'கணக்கை நிர்வகி' பட்டனைப் பயன்படுத்தவும்.",
|
||||||
"validatingTestBuildText": "சோதனை கட்டத்தை சரிபார்க்கிறது...",
|
"validatingTestBuildText": "சோதனை கட்டத்தை சரிபார்க்கிறது...",
|
||||||
"victoryText": "வெற்றி!",
|
"victoryText": "வெற்றி!",
|
||||||
"voteDelayText": "நீங்கள் மற்றொரு வாக்கை ${NUMBER} வினாடிகளுக்குத் தொடங்க முடியாது",
|
"voteDelayText": "நீங்கள் மற்றொரு வாக்கை ${NUMBER} வினாடிகளுக்குத் தொடங்க முடியாது",
|
||||||
|
|
@ -1837,6 +1846,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "அலை",
|
"waveText": "அலை",
|
||||||
"wellSureText": "சரி நிச்சயமாக!",
|
"wellSureText": "சரி நிச்சயமாக!",
|
||||||
|
"whatIsThisText": "இது என்ன?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "டார்வின் ரிமோட் பதிப்புரிமை"
|
"titleText": "டார்வின் ரிமோட் பதிப்புரிமை"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
12
dist/ba_data/data/languages/thai.json
vendored
12
dist/ba_data/data/languages/thai.json
vendored
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "คุณสามารถเปลี่ยนได้เพียงครั้งเดียวต่อฤดูกาล",
|
"changeOncePerSeason": "คุณสามารถเปลี่ยนได้เพียงครั้งเดียวต่อฤดูกาล",
|
||||||
"changeOncePerSeasonError": "คุณต้องรอจนกว่าฤดูกาลหน้าจะเปลี่ยนอีก (${NUM} days)",
|
"changeOncePerSeasonError": "คุณต้องรอจนกว่าฤดูกาลหน้าจะเปลี่ยนอีก (${NUM} days)",
|
||||||
"customName": "ชื่อที่กำหนดเอง",
|
"customName": "ชื่อที่กำหนดเอง",
|
||||||
|
"googlePlayGamesAccountSwitchText": "หากคุณต้องการใช้บัญชี Google อื่น\nใช้แอป Google Play Games เพื่อเปลี่ยน",
|
||||||
"linkAccountsEnterCodeText": "ใส่รหัส",
|
"linkAccountsEnterCodeText": "ใส่รหัส",
|
||||||
"linkAccountsGenerateCodeText": "สร้างรหัส",
|
"linkAccountsGenerateCodeText": "สร้างรหัส",
|
||||||
"linkAccountsInfoText": "(ใช้ความคืบหน้าร่วมกันกับแพลตฟอร์มอื่นๆ)",
|
"linkAccountsInfoText": "(ใช้ความคืบหน้าร่วมกันกับแพลตฟอร์มอื่นๆ)",
|
||||||
|
|
@ -14,6 +15,7 @@
|
||||||
"linkAccountsInstructionsText": "เพื่อที่จะผูกทั้งสองบัญชีเข้าด้วยกัน จะต้องสร้างรหัสรหัสหนึ่ง\nแล้วจะต้องใส่รหัสในบัญที่คุณต้องการจะเชื่อมโยงเข้าด้วยกัน\nความคืบหน้าและสิ่งของในคลังของทั้งสองบัญชีจะถูกรวมกัน\nคุณสามารถเชื่อมโยงได้ทั้งหมด ${COUNT} บัญชี\n\nระวัง! หลังจากผูกบัญชีแล้วจะไม่สามารถยกเลิกได้!",
|
"linkAccountsInstructionsText": "เพื่อที่จะผูกทั้งสองบัญชีเข้าด้วยกัน จะต้องสร้างรหัสรหัสหนึ่ง\nแล้วจะต้องใส่รหัสในบัญที่คุณต้องการจะเชื่อมโยงเข้าด้วยกัน\nความคืบหน้าและสิ่งของในคลังของทั้งสองบัญชีจะถูกรวมกัน\nคุณสามารถเชื่อมโยงได้ทั้งหมด ${COUNT} บัญชี\n\nระวัง! หลังจากผูกบัญชีแล้วจะไม่สามารถยกเลิกได้!",
|
||||||
"linkAccountsText": "ผูกบัญชี",
|
"linkAccountsText": "ผูกบัญชี",
|
||||||
"linkedAccountsText": "บัญชีที่เชื่อมโยงแล้ว",
|
"linkedAccountsText": "บัญชีที่เชื่อมโยงแล้ว",
|
||||||
|
"manageAccountText": "จัดการบัญชี",
|
||||||
"nameChangeConfirm": "คุณต้องการเปลี่ยนชื่อบัญชีของคุณเป็น ${NAME} หรือไม่",
|
"nameChangeConfirm": "คุณต้องการเปลี่ยนชื่อบัญชีของคุณเป็น ${NAME} หรือไม่",
|
||||||
"resetProgressConfirmNoAchievementsText": "การทำสิ่งนี้จะรีเซ็ตความคืบหน้าต่างๆ ในโหมด co-op\nและคะแนนดีที่สุดในอุปกรณ์นี้ (แต่จะไม่รีเซ็ตตั๋วของคุณ) \nการทำสิ่งนี้ไม่สามารถยกเลิกได้! คุณแน่ใจหรือไม่?",
|
"resetProgressConfirmNoAchievementsText": "การทำสิ่งนี้จะรีเซ็ตความคืบหน้าต่างๆ ในโหมด co-op\nและคะแนนดีที่สุดในอุปกรณ์นี้ (แต่จะไม่รีเซ็ตตั๋วของคุณ) \nการทำสิ่งนี้ไม่สามารถยกเลิกได้! คุณแน่ใจหรือไม่?",
|
||||||
"resetProgressConfirmText": "การทำสิ่งนี้จะรีเซ็ตความคืบหน้าในโหมด co-op,\nความสำเร็จและคะแนนดีที่สุดในอุปกรณ์นี้\n(แต่จะไม่รีเซ็ตตั๋วของคุณ) การทำสิ่งนี้จะ\nไม่สามารถยกเลิกได้! คุณแน่ใจหรือไม่?",
|
"resetProgressConfirmText": "การทำสิ่งนี้จะรีเซ็ตความคืบหน้าในโหมด co-op,\nความสำเร็จและคะแนนดีที่สุดในอุปกรณ์นี้\n(แต่จะไม่รีเซ็ตตั๋วของคุณ) การทำสิ่งนี้จะ\nไม่สามารถยกเลิกได้! คุณแน่ใจหรือไม่?",
|
||||||
|
|
@ -496,6 +498,7 @@
|
||||||
"welcome2Text": "คุณสามารถได้ตั๋วจากการทำกิจกรรมเดิมๆ ได้\nตัวสามารถใช้ในการปลดล็อคตัวละครใหม่ แผนที่ใหม่\nและมินิเกมใหม่ การใช้เข้าทัวร์นาเมนท์ และอีกหลายอย่าง",
|
"welcome2Text": "คุณสามารถได้ตั๋วจากการทำกิจกรรมเดิมๆ ได้\nตัวสามารถใช้ในการปลดล็อคตัวละครใหม่ แผนที่ใหม่\nและมินิเกมใหม่ การใช้เข้าทัวร์นาเมนท์ และอีกหลายอย่าง",
|
||||||
"yourPowerRankingText": "อันดับของคุณ:"
|
"yourPowerRankingText": "อันดับของคุณ:"
|
||||||
},
|
},
|
||||||
|
"copyConfirmText": "คัดลอกไปที่คลิปบอร์ดแล้ว",
|
||||||
"copyOfText": "${NAME} ที่ถูกคัดลอก",
|
"copyOfText": "${NAME} ที่ถูกคัดลอก",
|
||||||
"copyText": "คัดลอก",
|
"copyText": "คัดลอก",
|
||||||
"createEditPlayerText": "<สร้าง/แก้ไข ผู้เล่น>",
|
"createEditPlayerText": "<สร้าง/แก้ไข ผู้เล่น>",
|
||||||
|
|
@ -542,7 +545,9 @@
|
||||||
"deleteText": "ลบ",
|
"deleteText": "ลบ",
|
||||||
"demoText": "ทดลอง",
|
"demoText": "ทดลอง",
|
||||||
"denyText": "ยกเลิก",
|
"denyText": "ยกเลิก",
|
||||||
|
"deprecatedText": "คัดค้าน",
|
||||||
"desktopResText": "เดสก์ท็อป Res",
|
"desktopResText": "เดสก์ท็อป Res",
|
||||||
|
"deviceAccountUpgradeText": "คำเตือน:\nคุณลงชื่อเข้าใช้ด้วยบัญชีอุปกรณ์ (${NAME})\nบัญชีอุปกรณ์จะถูกลบออกในการอัปเดตในอนาคต\nอัปเกรดเป็นบัญชี V2 หากคุณต้องการติดตามความคืบหน้า",
|
||||||
"difficultyEasyText": "ง่าย",
|
"difficultyEasyText": "ง่าย",
|
||||||
"difficultyHardOnlyText": "โหมดยากเท่านั้น",
|
"difficultyHardOnlyText": "โหมดยากเท่านั้น",
|
||||||
"difficultyHardText": "ยาก",
|
"difficultyHardText": "ยาก",
|
||||||
|
|
@ -623,7 +628,7 @@
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} ในการเคลื่อนไหวที่ช้ามากๆ",
|
"epicDescriptionFilterText": "${DESCRIPTION} ในการเคลื่อนไหวที่ช้ามากๆ",
|
||||||
"epicNameFilterText": "${NAME} แบบช้ามหากาฬ",
|
"epicNameFilterText": "${NAME} แบบช้ามหากาฬ",
|
||||||
"errorAccessDeniedText": "การเข้าถึงถูกปฏิเสธ",
|
"errorAccessDeniedText": "การเข้าถึงถูกปฏิเสธ",
|
||||||
"errorDeviceTimeIncorrectText": "เวลาของอุปกรณ์ของคุณปิดลง ${HOURS} ชั่วโมง\nมีแนวโน้มที่จะทำให้เกิดปัญหา\nโปรดตรวจสอบการตั้งค่าเวลาและเขตเวลาของคุณ",
|
"errorDeviceTimeIncorrectText": "เวลาของอุปกรณ์ไม่ถูกต้อง ${HOURS} ชั่วโมง\nมีแนวโน้มที่จะทำให้เกิดปัญหา\nโปรดตรวจสอบการตั้งค่าเวลาและเขตเวลาของคุณ",
|
||||||
"errorOutOfDiskSpaceText": "พื้นที่ว่างในเครื่องหมด",
|
"errorOutOfDiskSpaceText": "พื้นที่ว่างในเครื่องหมด",
|
||||||
"errorSecureConnectionFailText": "ไม่สามารถสร้างการเชื่อมต่อระบบคลาวด์ที่ปลอดภัยได้ การทำงานของเครือข่ายอาจล้มเหลว",
|
"errorSecureConnectionFailText": "ไม่สามารถสร้างการเชื่อมต่อระบบคลาวด์ที่ปลอดภัยได้ การทำงานของเครือข่ายอาจล้มเหลว",
|
||||||
"errorText": "ข้อผิดพลาด",
|
"errorText": "ข้อผิดพลาด",
|
||||||
|
|
@ -800,6 +805,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "ขออภัย บริการผู้เล่นหลายคนของ Google ไม่มีให้บริการอีกต่อไป\nฉันกำลังดำเนินการเปลี่ยนให้เร็วที่สุด\nในระหว่างนี้ โปรดลองวิธีการเชื่อมต่ออื่น\n-เอริค",
|
"googleMultiplayerDiscontinuedText": "ขออภัย บริการผู้เล่นหลายคนของ Google ไม่มีให้บริการอีกต่อไป\nฉันกำลังดำเนินการเปลี่ยนให้เร็วที่สุด\nในระหว่างนี้ โปรดลองวิธีการเชื่อมต่ออื่น\n-เอริค",
|
||||||
"googlePlayPurchasesNotAvailableText": "ไม่สามารถซื้อด้วย Google Play ได้\nคุณอาจต้องอัปเดตแอปร้านค้าของคุณ",
|
"googlePlayPurchasesNotAvailableText": "ไม่สามารถซื้อด้วย Google Play ได้\nคุณอาจต้องอัปเดตแอปร้านค้าของคุณ",
|
||||||
|
"googlePlayServicesNotAvailableText": "บริการ Google Play ไม่พร้อมใช้งาน\nฟังก์ชันบางอย่างของแอปอาจถูกปิดใช้งาน",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "ตลอด",
|
"alwaysText": "ตลอด",
|
||||||
|
|
@ -996,6 +1002,7 @@
|
||||||
"creditsText": "เครดิต",
|
"creditsText": "เครดิต",
|
||||||
"demoMenuText": "เมนูสาธิต",
|
"demoMenuText": "เมนูสาธิต",
|
||||||
"endGameText": "จบเกม",
|
"endGameText": "จบเกม",
|
||||||
|
"endTestText": "สิ้นสุดการทดสอบ",
|
||||||
"exitGameText": "ออกจากเกม",
|
"exitGameText": "ออกจากเกม",
|
||||||
"exitToMenuText": "จะออกไปหน้าเมนูหรือไม่?",
|
"exitToMenuText": "จะออกไปหน้าเมนูหรือไม่?",
|
||||||
"howToPlayText": "วิธีการเล่น",
|
"howToPlayText": "วิธีการเล่น",
|
||||||
|
|
@ -1054,6 +1061,7 @@
|
||||||
"notSignedInErrorText": "คุณต้องลงชื่อเข้าใช้เพื่อทำสิ่งนี้",
|
"notSignedInErrorText": "คุณต้องลงชื่อเข้าใช้เพื่อทำสิ่งนี้",
|
||||||
"notSignedInGooglePlayErrorText": "คุณต้องลงชื่อเข้าใช้ Google Play เพื่อดำเนินการนี้",
|
"notSignedInGooglePlayErrorText": "คุณต้องลงชื่อเข้าใช้ Google Play เพื่อดำเนินการนี้",
|
||||||
"notSignedInText": "ไม่ได้ลงชื่อเข้าใช้",
|
"notSignedInText": "ไม่ได้ลงชื่อเข้าใช้",
|
||||||
|
"notUsingAccountText": "หมายเหตุ: ละเว้นบัญชี ${SERVICE}\nไปที่ 'บัญชี -> ลงชื่อเข้าใช้ด้วย ${SERVICE}' หากคุณต้องการ",
|
||||||
"nothingIsSelectedErrorText": "ไม่มีอะไรถูกเลือก!",
|
"nothingIsSelectedErrorText": "ไม่มีอะไรถูกเลือก!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "ปิด",
|
"offText": "ปิด",
|
||||||
|
|
@ -1798,6 +1806,7 @@
|
||||||
"useDefaultText": "ใช้ค่าเริ่มต้น",
|
"useDefaultText": "ใช้ค่าเริ่มต้น",
|
||||||
"usesExternalControllerText": "เกมนี้ใช้คอนโทรลเลอร์ภายนอกสำหรับการป้อนข้อมูล",
|
"usesExternalControllerText": "เกมนี้ใช้คอนโทรลเลอร์ภายนอกสำหรับการป้อนข้อมูล",
|
||||||
"usingItunesText": "การใช้แอพ Music สำหรับซาวด์แทร็ก...",
|
"usingItunesText": "การใช้แอพ Music สำหรับซาวด์แทร็ก...",
|
||||||
|
"v2AccountLinkingInfoText": "หากต้องการเชื่อมโยงบัญชี V2 ให้ใช้ปุ่ม 'จัดการบัญชี'",
|
||||||
"validatingTestBuildText": "กำลังตรวจสอบการสร้างการทดสอบ...",
|
"validatingTestBuildText": "กำลังตรวจสอบการสร้างการทดสอบ...",
|
||||||
"victoryText": "ชัยชนะ!",
|
"victoryText": "ชัยชนะ!",
|
||||||
"voteDelayText": "คุณไม่สามารถเริ่มโหวตได้อีกเป็นเวลา ${NUMBER} วินาที",
|
"voteDelayText": "คุณไม่สามารถเริ่มโหวตได้อีกเป็นเวลา ${NUMBER} วินาที",
|
||||||
|
|
@ -1830,6 +1839,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "เวฟ",
|
"waveText": "เวฟ",
|
||||||
"wellSureText": "แน่นอน!",
|
"wellSureText": "แน่นอน!",
|
||||||
|
"whatIsThisText": "นี่คืออะไร?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "ลิขสิทธิ์ DarwiinRemote"
|
"titleText": "ลิขสิทธิ์ DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
44
dist/ba_data/data/languages/turkish.json
vendored
44
dist/ba_data/data/languages/turkish.json
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "Hesap isimleri emoji veya diğer özel karakterler içeremez",
|
"accountNameRules": "Hesap isimleri emoji veya başka özel karakterler içeremez",
|
||||||
"accountProfileText": "(hesap profili) ",
|
"accountProfileText": "(hesap profili) ",
|
||||||
"accountsText": "Hesaplar",
|
"accountsText": "Hesaplar",
|
||||||
"achievementProgressText": "Başarılar: ${COUNT} / ${TOTAL}",
|
"achievementProgressText": "Başarılar: ${COUNT} / ${TOTAL}",
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
"changeOncePerSeason": "Bunu sezon başına sadece bir kere değiştirebilirsin",
|
"changeOncePerSeason": "Bunu sezon başına sadece bir kere değiştirebilirsin",
|
||||||
"changeOncePerSeasonError": "Bunu tekrar değiştirmek için bir sonraki sezona kadar beklemelisin (${NUM}gün)",
|
"changeOncePerSeasonError": "Bunu tekrar değiştirmek için bir sonraki sezona kadar beklemelisin (${NUM}gün)",
|
||||||
"customName": "Özel isim",
|
"customName": "Özel isim",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Eğer farklı bir google hesabı kullanmak istiyorsanız,\nGoogle Play Oyunlar uygulamasını kullabilirsiniz.",
|
||||||
"linkAccountsEnterCodeText": "Kod Gir",
|
"linkAccountsEnterCodeText": "Kod Gir",
|
||||||
"linkAccountsGenerateCodeText": "Kod Oluştur",
|
"linkAccountsGenerateCodeText": "Kod Oluştur",
|
||||||
"linkAccountsInfoText": "(ilerlemeyi farklı platformlar ile paylaş)",
|
"linkAccountsInfoText": "(ilerlemeyi farklı platformlar ile paylaş)",
|
||||||
|
|
@ -39,6 +40,7 @@
|
||||||
"titleText": "Hesap",
|
"titleText": "Hesap",
|
||||||
"unlinkAccountsInstructionsText": "Ayırmak için bir hesap seç",
|
"unlinkAccountsInstructionsText": "Ayırmak için bir hesap seç",
|
||||||
"unlinkAccountsText": "Hesapları ayır",
|
"unlinkAccountsText": "Hesapları ayır",
|
||||||
|
"unlinkLegacyV1AccountsText": "Eski V1 Hesaplarını Kaldırın",
|
||||||
"v2LinkInstructionsText": "Bu bağlantıyı kullanarak bir hesap oluşturun yada giriş yapın.",
|
"v2LinkInstructionsText": "Bu bağlantıyı kullanarak bir hesap oluşturun yada giriş yapın.",
|
||||||
"viaAccount": "(${NAME}hesabı ile)",
|
"viaAccount": "(${NAME}hesabı ile)",
|
||||||
"youAreSignedInAsText": "Aşağıdaki ile giriş yapıldı"
|
"youAreSignedInAsText": "Aşağıdaki ile giriş yapıldı"
|
||||||
|
|
@ -546,7 +548,9 @@
|
||||||
"deleteText": "Sil",
|
"deleteText": "Sil",
|
||||||
"demoText": "Tanıtım",
|
"demoText": "Tanıtım",
|
||||||
"denyText": "Reddet",
|
"denyText": "Reddet",
|
||||||
|
"deprecatedText": "Kullanımdan kaldırıldı",
|
||||||
"desktopResText": "PC Çözünürlüğü",
|
"desktopResText": "PC Çözünürlüğü",
|
||||||
|
"deviceAccountUpgradeText": "Uyarı:\n(${NAME}) isimli bir cihaz hesabıyla giriş yaptın.\nCihaz hesapları gelecek güncellemelerde kaldırılacak.\nİlerlemeni tutmak istiyorsan V2 hesabına geçiş yap.",
|
||||||
"difficultyEasyText": "Kolay",
|
"difficultyEasyText": "Kolay",
|
||||||
"difficultyHardOnlyText": "Sadece Zor Mod",
|
"difficultyHardOnlyText": "Sadece Zor Mod",
|
||||||
"difficultyHardText": "Zor",
|
"difficultyHardText": "Zor",
|
||||||
|
|
@ -804,6 +808,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Üzgünüz, Google'ın çok oyunculu servisi şu anda çalışmıyor.\nBir yer değişimi için olabildiğince hızlı çalışıyorum.\nO zamana kadar, lütfen başka bir bağlantı yöntemi deneyin.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Üzgünüz, Google'ın çok oyunculu servisi şu anda çalışmıyor.\nBir yer değişimi için olabildiğince hızlı çalışıyorum.\nO zamana kadar, lütfen başka bir bağlantı yöntemi deneyin.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Google Play satın alma işlemleri mevcut değildir.\nMağaza uygulamanızı güncellemeniz gerekebilir.",
|
"googlePlayPurchasesNotAvailableText": "Google Play satın alma işlemleri mevcut değildir.\nMağaza uygulamanızı güncellemeniz gerekebilir.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play Hizmetleri kullanılamıyor.\nBazı uygulama işlevleri devre dışı bırakılabilir.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Her Zaman",
|
"alwaysText": "Her Zaman",
|
||||||
|
|
@ -914,7 +919,7 @@
|
||||||
"kickIdlePlayersWarning1Text": "${NAME} boşta durmaya devam ederse ${COUNT} saniye içinde atılacak.",
|
"kickIdlePlayersWarning1Text": "${NAME} boşta durmaya devam ederse ${COUNT} saniye içinde atılacak.",
|
||||||
"kickIdlePlayersWarning2Text": "(Ayarlar-> Gelişmiş den bunu kapatabilirsin)",
|
"kickIdlePlayersWarning2Text": "(Ayarlar-> Gelişmiş den bunu kapatabilirsin)",
|
||||||
"leftGameText": "'${NAME}' Terkedildi",
|
"leftGameText": "'${NAME}' Terkedildi",
|
||||||
"leftPartyText": "${NAME} partisini terk et.",
|
"leftPartyText": "${NAME}'in partisini terk ettin.",
|
||||||
"noMusicFilesInFolderText": "Klasör müzik dosyası içermiyor.",
|
"noMusicFilesInFolderText": "Klasör müzik dosyası içermiyor.",
|
||||||
"playerJoinedPartyText": "${NAME} partiye katıldı!",
|
"playerJoinedPartyText": "${NAME} partiye katıldı!",
|
||||||
"playerLeftPartyText": "${NAME} partiyi terk etti.",
|
"playerLeftPartyText": "${NAME} partiyi terk etti.",
|
||||||
|
|
@ -1020,6 +1025,7 @@
|
||||||
"maxConnectionsText": "Maksimum Bağlantı",
|
"maxConnectionsText": "Maksimum Bağlantı",
|
||||||
"maxPartySizeText": "Maksimum Parti Kapasitesi",
|
"maxPartySizeText": "Maksimum Parti Kapasitesi",
|
||||||
"maxPlayersText": "Maksimum Oyuncu",
|
"maxPlayersText": "Maksimum Oyuncu",
|
||||||
|
"merchText": "Merch!",
|
||||||
"modeArcadeText": "Arcade Modu",
|
"modeArcadeText": "Arcade Modu",
|
||||||
"modeClassicText": "Klasik Mod",
|
"modeClassicText": "Klasik Mod",
|
||||||
"modeDemoText": "Demo Modu",
|
"modeDemoText": "Demo Modu",
|
||||||
|
|
@ -1059,6 +1065,7 @@
|
||||||
"notSignedInErrorText": "Bunu yapmak için giriş yapmalısın.",
|
"notSignedInErrorText": "Bunu yapmak için giriş yapmalısın.",
|
||||||
"notSignedInGooglePlayErrorText": "Bunu yapmak için Google Play ile giriş yapmalısın.",
|
"notSignedInGooglePlayErrorText": "Bunu yapmak için Google Play ile giriş yapmalısın.",
|
||||||
"notSignedInText": "giriş yapılmadı",
|
"notSignedInText": "giriş yapılmadı",
|
||||||
|
"notUsingAccountText": "Not: ${SERVICE} hesabı kullanılmıyor\nEğer kullanmak istiyorsanız 'Hesabım -> ${SERVICE} ile Kayıt ol' a gidin.",
|
||||||
"nothingIsSelectedErrorText": "Hiçbir şey seçilmedi!",
|
"nothingIsSelectedErrorText": "Hiçbir şey seçilmedi!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Kapalı",
|
"offText": "Kapalı",
|
||||||
|
|
@ -1117,7 +1124,11 @@
|
||||||
"pleaseWaitText": "Lütfen bekle...",
|
"pleaseWaitText": "Lütfen bekle...",
|
||||||
"pluginClassLoadErrorText": "'${PLUGIN}' eklenti sınıfı yüklenirken hata oluştu: ${ERROR}",
|
"pluginClassLoadErrorText": "'${PLUGIN}' eklenti sınıfı yüklenirken hata oluştu: ${ERROR}",
|
||||||
"pluginInitErrorText": "'${PLUGIN}' eklentisi başlatılırken hata oluştu: ${ERROR}",
|
"pluginInitErrorText": "'${PLUGIN}' eklentisi başlatılırken hata oluştu: ${ERROR}",
|
||||||
|
"pluginSettingsText": "Eklenti Ayarları",
|
||||||
|
"pluginsAutoEnableNewText": "Yeni Eklentileri Otomatik Etkinleştir",
|
||||||
"pluginsDetectedText": "Yeni eklentiler tespit edildi. Onları etkinleştirmek veya ayarlarda yapılandırmak için oyunu yeniden başlatın.",
|
"pluginsDetectedText": "Yeni eklentiler tespit edildi. Onları etkinleştirmek veya ayarlarda yapılandırmak için oyunu yeniden başlatın.",
|
||||||
|
"pluginsDisableAllText": "Tüm Eklentileri Devre Dışı Bırak",
|
||||||
|
"pluginsEnableAllText": "Tüm Eklentileri Etkinleştir",
|
||||||
"pluginsRemovedText": "${NUM} eklenti(ler) artık bulunmuyor.",
|
"pluginsRemovedText": "${NUM} eklenti(ler) artık bulunmuyor.",
|
||||||
"pluginsText": "Eklentiler",
|
"pluginsText": "Eklentiler",
|
||||||
"practiceText": "Alıştırma",
|
"practiceText": "Alıştırma",
|
||||||
|
|
@ -1252,6 +1263,7 @@
|
||||||
"netTestingText": "Ağ Testi",
|
"netTestingText": "Ağ Testi",
|
||||||
"resetText": "Sıfırla",
|
"resetText": "Sıfırla",
|
||||||
"showBombTrajectoriesText": "Bomba Gidişatını Göster",
|
"showBombTrajectoriesText": "Bomba Gidişatını Göster",
|
||||||
|
"showInGamePingText": "Oyun İçinde Gecikmeyi Göster",
|
||||||
"showPlayerNamesText": "Oyuncu Adlarını Göster",
|
"showPlayerNamesText": "Oyuncu Adlarını Göster",
|
||||||
"showUserModsText": "Mod Klasörünü Göster",
|
"showUserModsText": "Mod Klasörünü Göster",
|
||||||
"titleText": "Gelişmiş",
|
"titleText": "Gelişmiş",
|
||||||
|
|
@ -1362,7 +1374,7 @@
|
||||||
"tipText": "İpucu",
|
"tipText": "İpucu",
|
||||||
"titleText": "BombSquad",
|
"titleText": "BombSquad",
|
||||||
"titleVRText": "BombSquad VR",
|
"titleVRText": "BombSquad VR",
|
||||||
"topFriendsText": "En-İyi Arkadaşlar",
|
"topFriendsText": "En İyi Arkadaşlar",
|
||||||
"tournamentCheckingStateText": "Turnuva durumu denetleniyor; lütfen bekleyin...",
|
"tournamentCheckingStateText": "Turnuva durumu denetleniyor; lütfen bekleyin...",
|
||||||
"tournamentEndedText": "Bu turnuva sonlandı. Yeni bir tanesi yakında başlayacak.",
|
"tournamentEndedText": "Bu turnuva sonlandı. Yeni bir tanesi yakında başlayacak.",
|
||||||
"tournamentEntryText": "Turnuva Katılımı",
|
"tournamentEntryText": "Turnuva Katılımı",
|
||||||
|
|
@ -1416,10 +1428,10 @@
|
||||||
"Rookie Football": "Acemi Futbol",
|
"Rookie Football": "Acemi Futbol",
|
||||||
"Rookie Onslaught": "Acemi Saldırı",
|
"Rookie Onslaught": "Acemi Saldırı",
|
||||||
"The Last Stand": "Son Çırpınış",
|
"The Last Stand": "Son Çırpınış",
|
||||||
"Uber ${GAME}": "Üst-Düzey ${GAME}",
|
"Uber ${GAME}": "Üst Düzey ${GAME}",
|
||||||
"Uber Football": "Üst-Düzey Futbol",
|
"Uber Football": "Üst Düzey Futbol",
|
||||||
"Uber Onslaught": "Üst-Düzey Saldırı",
|
"Uber Onslaught": "Üst Düzey Saldırı",
|
||||||
"Uber Runaround": "Üst-Düzey Dolambaç"
|
"Uber Runaround": "Üst Düzey Dolambaç"
|
||||||
},
|
},
|
||||||
"gameDescriptions": {
|
"gameDescriptions": {
|
||||||
"Be the chosen one for a length of time to win.\nKill the chosen one to become it.": "Kazanmak için uzun süre seçilmiş kişi ol.\nseçilmiş kişi olmak için seçilmiş kişiyi öldür.",
|
"Be the chosen one for a length of time to win.\nKill the chosen one to become it.": "Kazanmak için uzun süre seçilmiş kişi ol.\nseçilmiş kişi olmak için seçilmiş kişiyi öldür.",
|
||||||
|
|
@ -1444,10 +1456,10 @@
|
||||||
"Run ${ARG1} laps. Your entire team has to finish.": "${ARG1} tur koş. Tüm takım için geçerli.",
|
"Run ${ARG1} laps. Your entire team has to finish.": "${ARG1} tur koş. Tüm takım için geçerli.",
|
||||||
"Run 1 lap.": "1 Tur koş.",
|
"Run 1 lap.": "1 Tur koş.",
|
||||||
"Run 1 lap. Your entire team has to finish.": "1 Tur koş. Tüm takım için geçerli.",
|
"Run 1 lap. Your entire team has to finish.": "1 Tur koş. Tüm takım için geçerli.",
|
||||||
"Run real fast!": "Cidden Hızlı Koş!",
|
"Run real fast!": "Cidden hızlı koş!",
|
||||||
"Score ${ARG1} goals.": "${ARG1} Gol At.",
|
"Score ${ARG1} goals.": "${ARG1} Gol At.",
|
||||||
"Score ${ARG1} touchdowns.": "${ARG1} Sayı Yap.",
|
"Score ${ARG1} touchdowns.": "${ARG1} Sayı Yap.",
|
||||||
"Score a goal.": "Gol At.",
|
"Score a goal.": "Gol at.",
|
||||||
"Score a touchdown.": "Bir sayı yap.",
|
"Score a touchdown.": "Bir sayı yap.",
|
||||||
"Score some goals.": "Birkaç gol at.",
|
"Score some goals.": "Birkaç gol at.",
|
||||||
"Secure all ${ARG1} flags.": "${ARG1} bayrağın tümünü ele geçir.",
|
"Secure all ${ARG1} flags.": "${ARG1} bayrağın tümünü ele geçir.",
|
||||||
|
|
@ -1516,13 +1528,14 @@
|
||||||
"French": "Fransızca",
|
"French": "Fransızca",
|
||||||
"German": "Almanca",
|
"German": "Almanca",
|
||||||
"Gibberish": "Abuk Sabukça",
|
"Gibberish": "Abuk Sabukça",
|
||||||
"Greek": "Yunan",
|
"Greek": "Yunanca",
|
||||||
"Hindi": "Hintçe",
|
"Hindi": "Hintçe",
|
||||||
"Hungarian": "Macarca",
|
"Hungarian": "Macarca",
|
||||||
"Indonesian": "Endonezyaca",
|
"Indonesian": "Endonezyaca",
|
||||||
"Italian": "İtalyanca",
|
"Italian": "İtalyanca",
|
||||||
"Japanese": "Japonca",
|
"Japanese": "Japonca",
|
||||||
"Korean": "Korece",
|
"Korean": "Korece",
|
||||||
|
"Malay": "Malayca",
|
||||||
"Persian": "Farsça",
|
"Persian": "Farsça",
|
||||||
"Polish": "Polonya Dili",
|
"Polish": "Polonya Dili",
|
||||||
"Portuguese": "Portekizce",
|
"Portuguese": "Portekizce",
|
||||||
|
|
@ -1805,6 +1818,7 @@
|
||||||
"usesExternalControllerText": "Bu oyun girdi olarak harici kontrolcü kullanıyor.",
|
"usesExternalControllerText": "Bu oyun girdi olarak harici kontrolcü kullanıyor.",
|
||||||
"usingItunesText": "Müzikler için iTunes kullanılıyor...",
|
"usingItunesText": "Müzikler için iTunes kullanılıyor...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Lütfen iTunes da karıştırmanın KAPALI oldugundan ve Yinelemenin TÜM oldugundan emin olun. ",
|
"usingItunesTurnRepeatAndShuffleOnText": "Lütfen iTunes da karıştırmanın KAPALI oldugundan ve Yinelemenin TÜM oldugundan emin olun. ",
|
||||||
|
"v2AccountLinkingInfoText": "V2 hesapları bağlamak için, 'Hesabı yönet' butonuna tıklayın.",
|
||||||
"validatingTestBuildText": "Test Yapısı Onaylanıyor...",
|
"validatingTestBuildText": "Test Yapısı Onaylanıyor...",
|
||||||
"victoryText": "Galibiyet!",
|
"victoryText": "Galibiyet!",
|
||||||
"voteDelayText": "${NUMBER} saniye boyunca başka oylama başlatamazsın.",
|
"voteDelayText": "${NUMBER} saniye boyunca başka oylama başlatamazsın.",
|
||||||
|
|
@ -1837,6 +1851,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Dalga",
|
"waveText": "Dalga",
|
||||||
"wellSureText": "Elbette!",
|
"wellSureText": "Elbette!",
|
||||||
|
"whatIsThisText": "Bu da ne?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "DarwiinRemote Telif Hakkı"
|
"titleText": "DarwiinRemote Telif Hakkı"
|
||||||
},
|
},
|
||||||
|
|
@ -1858,16 +1873,17 @@
|
||||||
"workspaceSyncErrorText": "${WORKSPACE} eşitlemesinde hata oluştu. Detaylar için günlüğü inceleyin.",
|
"workspaceSyncErrorText": "${WORKSPACE} eşitlemesinde hata oluştu. Detaylar için günlüğü inceleyin.",
|
||||||
"workspaceSyncReuseText": "${WORKSPACE} eşitlenemiyor. Önceden eşitlenmiş sürüm kullanılıyor.",
|
"workspaceSyncReuseText": "${WORKSPACE} eşitlenemiyor. Önceden eşitlenmiş sürüm kullanılıyor.",
|
||||||
"worldScoresUnavailableText": "Global Skorlar Mevcut Değil.",
|
"worldScoresUnavailableText": "Global Skorlar Mevcut Değil.",
|
||||||
"worldsBestScoresText": "Global En-İyi Skorlar",
|
"worldsBestScoresText": "Global En İyi Skorlar",
|
||||||
"worldsBestTimesText": "Global En-İyi Süreler",
|
"worldsBestTimesText": "Global En İyi Süreler",
|
||||||
"xbox360ControllersWindow": {
|
"xbox360ControllersWindow": {
|
||||||
"getDriverText": "Sürücüyü İndir",
|
"getDriverText": "Sürücüyü İndir",
|
||||||
"macInstructions2Text": "Kablosuz olarak kullanmak için; ayrıca 'Xbox 360 Kontroller for Windows'\nile gelen bir alıcı kullanman lazım. \nBir alıcı sana 4 taneye kadar bağlantı sağlar.\n\nÖnemli: 3.şahıs alıcılar bu sürücü ile çalışmaz;\nAlıcının 'Microsoft' için olduğuna dikkat et 'XBOX 360' değil.\nMicrosoft bunu uzun süredir ayrı olarak satmıyor. Kontrolcüleri ile \nbirlikte alabilirsin ya da ebay de araştırabilirsin.\n\nEğer bunu kullanışlı bulduysan, lütfen değerlendirerek sürücü\ngeliştirilmesine bu siteden bağış yap.",
|
"macInstructions2Text": "Kablosuz olarak kullanmak için; ayrıca 'Xbox 360 Kontroller for Windows'\nile gelen bir alıcı kullanman lazım. \nBir alıcı sana 4 taneye kadar bağlantı sağlar.\n\nÖnemli: 3.şahıs alıcılar bu sürücü ile çalışmaz;\nAlıcının 'Microsoft' için olduğuna dikkat et 'XBOX 360' değil.\nMicrosoft bunu uzun süredir ayrı olarak satmıyor. Kontrolcüleri ile \nbirlikte alabilirsin ya da ebay de araştırabilirsin.\n\nEğer bunu kullanışlı bulduysan, lütfen değerlendirerek sürücü\ngeliştirilmesine bu siteden bağış yap.",
|
||||||
"macInstructionsText": "Xbox 360 kolunu kullanmak için aşağıdaki bağlantıdaki\nMac sürücüsü yüklemen gerekiyor.\nKablolu ve Kablosuz kontroller de çalışır.",
|
"macInstructionsText": "Xbox 360 kolunu kullanmak için aşağıdaki bağlantıdaki\nMac sürücüsü yüklemen gerekiyor.\nKablolu ve Kablosuz kontroller de çalışır.",
|
||||||
|
"macInstructionsTextScale": 0.8,
|
||||||
"ouyaInstructionsText": "BombSquad ile kablolu Xbox 360 kontrolcüsü kullanmak için basitçe\ncihazının USB girişine takın. Çoklu kontrolcü kullanmak için USB\nçoklayıcı kullanabilirsiniz.\n\nKablosuz kontrolcü için \"Xbox 360 Wireless Controller for Windows\"\nkablosuz alıcısına ihtiyacınız var. Her alıcıya\nUSB girişi ile bağlanır ve 4 kablosuz kontrolcüye\nkadar desteklenir.",
|
"ouyaInstructionsText": "BombSquad ile kablolu Xbox 360 kontrolcüsü kullanmak için basitçe\ncihazının USB girişine takın. Çoklu kontrolcü kullanmak için USB\nçoklayıcı kullanabilirsiniz.\n\nKablosuz kontrolcü için \"Xbox 360 Wireless Controller for Windows\"\nkablosuz alıcısına ihtiyacınız var. Her alıcıya\nUSB girişi ile bağlanır ve 4 kablosuz kontrolcüye\nkadar desteklenir.",
|
||||||
"titleText": "Xbox 360 Kontrolcüsü ${APP_NAME} ile kullanılıyor:"
|
"titleText": "Xbox 360 Kontrolcüsü ${APP_NAME} ile kullanılıyor:"
|
||||||
},
|
},
|
||||||
"yesAllowText": "Evet, Kabul!",
|
"yesAllowText": "Evet, Kabul!",
|
||||||
"yourBestScoresText": "En-İyi Skorların",
|
"yourBestScoresText": "En İyi Skorların",
|
||||||
"yourBestTimesText": "En-İyi Sürelerin"
|
"yourBestTimesText": "En İyi Sürelerin"
|
||||||
}
|
}
|
||||||
57
dist/ba_data/data/languages/ukrainian.json
vendored
57
dist/ba_data/data/languages/ukrainian.json
vendored
|
|
@ -1,13 +1,14 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "Імена акаунтів не можуть містити емоджі або інші спеціальні символи",
|
"accountNameRules": "Імена акаунтів не можуть містити емоджі або інші особливі символи",
|
||||||
"accountProfileText": "(профіль аккаунта)",
|
"accountProfileText": "(профіль аккаунта)",
|
||||||
"accountsText": "Акаунти",
|
"accountsText": "Акаунти",
|
||||||
"achievementProgressText": "Досягнення: ${COUNT} з ${TOTAL}",
|
"achievementProgressText": "Досягнення: ${COUNT} з ${TOTAL}",
|
||||||
"campaignProgressText": "Прогрес кампанії [Тяжко]: ${PROGRESS}",
|
"campaignProgressText": "Прогрес кампанії [Тяжко]: ${PROGRESS}",
|
||||||
"changeOncePerSeason": "Ви можете змінити це тільки раз в сезон.",
|
"changeOncePerSeason": "Ви можете змінити це лише раз в сезон.",
|
||||||
"changeOncePerSeasonError": "Ви повинні дочекатися наступного сезону, щоб змінити це знову (${NUM} днів)",
|
"changeOncePerSeasonError": "Ви повинні дочекатися наступного сезону, щоб змінити це знову (${NUM} днів)",
|
||||||
"customName": "Ім'я акаунта",
|
"customName": "Ім'я акаунта",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Якщо ви хочете використовувати інший акаунт Google,\nперейдіть у додаток Google Play Games, щоб змінити його.",
|
||||||
"linkAccountsEnterCodeText": "Ввести Код",
|
"linkAccountsEnterCodeText": "Ввести Код",
|
||||||
"linkAccountsGenerateCodeText": "Створити Код",
|
"linkAccountsGenerateCodeText": "Створити Код",
|
||||||
"linkAccountsInfoText": "(поділитися прогресом на різних платформах)",
|
"linkAccountsInfoText": "(поділитися прогресом на різних платформах)",
|
||||||
|
|
@ -15,17 +16,17 @@
|
||||||
"linkAccountsInstructionsText": "Щоб зв'язати дви обликови записи, створювати код на одному з них и ввести цей код на инший. Прогрес та инвентаризации будуць об'эднанни. Ви можете зв'язати ${COUNT} рахунки.",
|
"linkAccountsInstructionsText": "Щоб зв'язати дви обликови записи, створювати код на одному з них и ввести цей код на инший. Прогрес та инвентаризации будуць об'эднанни. Ви можете зв'язати ${COUNT} рахунки.",
|
||||||
"linkAccountsText": "Зв'язати акаунти",
|
"linkAccountsText": "Зв'язати акаунти",
|
||||||
"linkedAccountsText": "Зв'язані акаунти:",
|
"linkedAccountsText": "Зв'язані акаунти:",
|
||||||
"manageAccountText": "Контролювати аккаунтом",
|
"manageAccountText": "Керувати аккаунтом",
|
||||||
"nameChangeConfirm": "Ви впевнені що хочете змінити ім'я на ${NAME}?",
|
"nameChangeConfirm": "Ви впевнені що хочете змінити ім'я на ${NAME}?",
|
||||||
"resetProgressConfirmNoAchievementsText": "Це скине весь ваш кооперативний прогрес\nі локальні кращі результати (крім квитків).\nЦей процес є незворотнім. Ви впевнені?",
|
"resetProgressConfirmNoAchievementsText": "Це скине весь ваш прогрес кооперативу\nі локальні рекорди (але не ваші квитки).\nЦей процес є незворотнім. Ви впевнені?",
|
||||||
"resetProgressConfirmText": "Це скине весь ваш кооперативний\nпрогрес, досягнення і локальні результати\n(Крім квитків). Цей процес є незворотнім.\nВи впевнені?",
|
"resetProgressConfirmText": "Це скине весь ваш прогрес кооперативу,\nдосягнення та локальні рекорди (але не\nваші квитки). Цей процес незворотній.\nВи впевнені?",
|
||||||
"resetProgressText": "Скинути прогрес",
|
"resetProgressText": "Скинути прогрес",
|
||||||
"setAccountName": "Задайте ім'я акаунта",
|
"setAccountName": "Задати ім'я акаунта",
|
||||||
"setAccountNameDesc": "Виберіть ім'я для відображення свого акаунта.\nВи можете використовувати ім'я однієї з ваших пов'язаних\nакаунтів або створити унікальне ім'я акаунта.",
|
"setAccountNameDesc": "Виберіть ім'я для відображення свого акаунту.\nВи можете використовувати ім'я одного з ваших прив'язаних\nакаунтів або створити своє унікальне ім'я.",
|
||||||
"signInInfoText": "Увійдіть, щоб збирати квитки, змагатися онлайн,\nі синхронізувати прогрес на всіх пристроях.",
|
"signInInfoText": "Увійдіть, щоб збирати квитки, змагатися онлайн,\nі синхронізувати прогрес між пристроями.",
|
||||||
"signInText": "Увійти",
|
"signInText": "Увійти",
|
||||||
"signInWithDeviceInfoText": "(стандартний акаунт тільки для цього пристрою)",
|
"signInWithDeviceInfoText": "(для цього пристрою доступний тільки стандартний акаунт)",
|
||||||
"signInWithDeviceText": "Увійдіть, використовуючи акаунт пристрою",
|
"signInWithDeviceText": "Увійти використовуючи акаунт пристрою",
|
||||||
"signInWithGameCircleText": "Увійти через Game Circle",
|
"signInWithGameCircleText": "Увійти через Game Circle",
|
||||||
"signInWithGooglePlayText": "Увійти через Google Play",
|
"signInWithGooglePlayText": "Увійти через Google Play",
|
||||||
"signInWithTestAccountInfoText": "(тест-аккаунт; надалі використовуйте акаунт пристрою)",
|
"signInWithTestAccountInfoText": "(тест-аккаунт; надалі використовуйте акаунт пристрою)",
|
||||||
|
|
@ -38,9 +39,10 @@
|
||||||
"testAccountWarningOculusText": "Увага: ви входите під \"тестовим\" аккаунтом.\nВін буде замінений \"справжнім\" акаунтом пізніше в цьому\nроці, що дозволить здійснювати покупки квитків і багато іншого.\nНа даний момент Вам доведеться заробляти квитки в грі.",
|
"testAccountWarningOculusText": "Увага: ви входите під \"тестовим\" аккаунтом.\nВін буде замінений \"справжнім\" акаунтом пізніше в цьому\nроці, що дозволить здійснювати покупки квитків і багато іншого.\nНа даний момент Вам доведеться заробляти квитки в грі.",
|
||||||
"testAccountWarningText": "Увага: ви увійшли під \"тестовим\" аккаунтом.\nЦей аккаунт зв'язанний з певним девайсом та може\nчас від часу скидатися. (так що не марнуйте час для\nзбирання/розблокування добра для нього)\n\nДля використання \"реального\" аккаунту (Game-Center,\nGoogle Plus та інші) запустіть платну версію гри. Це\nнадасть вам можливість зберігати прогрес у хмарі та\nробити його доступним для різних девайсів.",
|
"testAccountWarningText": "Увага: ви увійшли під \"тестовим\" аккаунтом.\nЦей аккаунт зв'язанний з певним девайсом та може\nчас від часу скидатися. (так що не марнуйте час для\nзбирання/розблокування добра для нього)\n\nДля використання \"реального\" аккаунту (Game-Center,\nGoogle Plus та інші) запустіть платну версію гри. Це\nнадасть вам можливість зберігати прогрес у хмарі та\nробити його доступним для різних девайсів.",
|
||||||
"ticketsText": "Квитки: ${COUNT}",
|
"ticketsText": "Квитки: ${COUNT}",
|
||||||
"titleText": "Акаунт",
|
"titleText": "Акаунт пупсель",
|
||||||
"unlinkAccountsInstructionsText": "Виберіть акаунт, який хочете відв'язати",
|
"unlinkAccountsInstructionsText": "Виберіть акаунт, який хочете відв'язати",
|
||||||
"unlinkAccountsText": "Відв'язати акаунт",
|
"unlinkAccountsText": "Відв'язати акаунт",
|
||||||
|
"unlinkLegacyV1AccountsText": "від’єднати застарілі облікові записи (v1)",
|
||||||
"v2LinkInstructionsText": "Скористайтеся цим посиланням, щоб створити обліковий запис або увійти.",
|
"v2LinkInstructionsText": "Скористайтеся цим посиланням, щоб створити обліковий запис або увійти.",
|
||||||
"viaAccount": "(через акаунт ${NAME})",
|
"viaAccount": "(через акаунт ${NAME})",
|
||||||
"youAreSignedInAsText": "Ви увійшли як:"
|
"youAreSignedInAsText": "Ви увійшли як:"
|
||||||
|
|
@ -547,7 +549,9 @@
|
||||||
"deleteText": "Видалити",
|
"deleteText": "Видалити",
|
||||||
"demoText": "Демо",
|
"demoText": "Демо",
|
||||||
"denyText": "Відхилити",
|
"denyText": "Відхилити",
|
||||||
|
"deprecatedText": "Застаріла",
|
||||||
"desktopResText": "Розширення екрану",
|
"desktopResText": "Розширення екрану",
|
||||||
|
"deviceAccountUpgradeText": "Увага!\nТи ввійшов за допомогою акаунта пристрою (${NAME}).\nАкаунти пристроїв будуть видалені у майбутньому оновленні.\nОновись до V2-акаунта, якщо ти хочеш зберегти свій прогрес.",
|
||||||
"difficultyEasyText": "Легкий",
|
"difficultyEasyText": "Легкий",
|
||||||
"difficultyHardOnlyText": "Тільки в складному режимі",
|
"difficultyHardOnlyText": "Тільки в складному режимі",
|
||||||
"difficultyHardText": "Складний",
|
"difficultyHardText": "Складний",
|
||||||
|
|
@ -805,6 +809,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Пробачте, але сервіс мультіплеєра від Google тепер не доступний.\nЯ працюю над зміною сервіса як можно скоріше.\nДо цього, будь ласка, подивіться інакші способи гри в мультіплеєр. \n-Ерік",
|
"googleMultiplayerDiscontinuedText": "Пробачте, але сервіс мультіплеєра від Google тепер не доступний.\nЯ працюю над зміною сервіса як можно скоріше.\nДо цього, будь ласка, подивіться інакші способи гри в мультіплеєр. \n-Ерік",
|
||||||
"googlePlayPurchasesNotAvailableText": "Покупки в Google Play недоступні.\nМожливо, вам знадобиться оновити програму магазину.",
|
"googlePlayPurchasesNotAvailableText": "Покупки в Google Play недоступні.\nМожливо, вам знадобиться оновити програму магазину.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play сервіси недоступні.\nДеякі функції програми не роблять.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Завжди",
|
"alwaysText": "Завжди",
|
||||||
|
|
@ -1021,6 +1026,7 @@
|
||||||
"maxConnectionsText": "Максимум з'єднань",
|
"maxConnectionsText": "Максимум з'єднань",
|
||||||
"maxPartySizeText": "Розмір групи",
|
"maxPartySizeText": "Розмір групи",
|
||||||
"maxPlayersText": "Максимум гравців",
|
"maxPlayersText": "Максимум гравців",
|
||||||
|
"merchText": "Мерч!",
|
||||||
"modeArcadeText": "Аркадний режим",
|
"modeArcadeText": "Аркадний режим",
|
||||||
"modeClassicText": "Класичний режим",
|
"modeClassicText": "Класичний режим",
|
||||||
"modeDemoText": "Демо режим",
|
"modeDemoText": "Демо режим",
|
||||||
|
|
@ -1060,6 +1066,7 @@
|
||||||
"notSignedInErrorText": "Увійдіть щоб зробити це.",
|
"notSignedInErrorText": "Увійдіть щоб зробити це.",
|
||||||
"notSignedInGooglePlayErrorText": "Увійдіть спочатку в Google Play, а там подивимося.",
|
"notSignedInGooglePlayErrorText": "Увійдіть спочатку в Google Play, а там подивимося.",
|
||||||
"notSignedInText": "(ви не ввійшли)",
|
"notSignedInText": "(ви не ввійшли)",
|
||||||
|
"notUsingAccountText": "Примітка: ти не підключив акаунт ${SERVICE}.\nПерейди у 'Акаунт -> Увійти за допомогою ${SERVICE}', якщо ти хочеш його використовувати.",
|
||||||
"nothingIsSelectedErrorText": "Нічого не вибрано!",
|
"nothingIsSelectedErrorText": "Нічого не вибрано!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Викл",
|
"offText": "Викл",
|
||||||
|
|
@ -1118,7 +1125,11 @@
|
||||||
"pleaseWaitText": "Будь ласка зачекайте...",
|
"pleaseWaitText": "Будь ласка зачекайте...",
|
||||||
"pluginClassLoadErrorText": "Помилка завантаження класу плагіна \"${PLUGIN}\": ${ERROR}",
|
"pluginClassLoadErrorText": "Помилка завантаження класу плагіна \"${PLUGIN}\": ${ERROR}",
|
||||||
"pluginInitErrorText": "Помилка запуску плагіна \"${PLUGIN}\": ${ERROR}",
|
"pluginInitErrorText": "Помилка запуску плагіна \"${PLUGIN}\": ${ERROR}",
|
||||||
|
"pluginSettingsText": "Налаштування плагінів",
|
||||||
|
"pluginsAutoEnableNewText": "Автоматично вмикати нові плагіни",
|
||||||
"pluginsDetectedText": "Виявлено нові плагіни. Перезапустіть, щоб активувати їх, або налаштуйте їх у налаштуваннях",
|
"pluginsDetectedText": "Виявлено нові плагіни. Перезапустіть, щоб активувати їх, або налаштуйте їх у налаштуваннях",
|
||||||
|
"pluginsDisableAllText": "Вимкнути усі плагіни",
|
||||||
|
"pluginsEnableAllText": "Увімкнути усі плагіни",
|
||||||
"pluginsRemovedText": "${NUM} плагін(ів) більше не знайдено.",
|
"pluginsRemovedText": "${NUM} плагін(ів) більше не знайдено.",
|
||||||
"pluginsText": "Плагіни",
|
"pluginsText": "Плагіни",
|
||||||
"practiceText": "Тренування",
|
"practiceText": "Тренування",
|
||||||
|
|
@ -1245,7 +1256,7 @@
|
||||||
"enterPromoCodeText": "Ввести код",
|
"enterPromoCodeText": "Ввести код",
|
||||||
"forTestingText": "Примітка: ці значення використовуються тільки для тестування і будуть втрачені, коли додаток завершить роботу.",
|
"forTestingText": "Примітка: ці значення використовуються тільки для тестування і будуть втрачені, коли додаток завершить роботу.",
|
||||||
"helpTranslateText": "Переклади гри ${APP_NAME} з англійської зроблені спільнотою. \nЯкщо ви хочете запропонувати або виправити переклад, \nПерейдіть за посиланню нижче. Заздалегідь дякую!",
|
"helpTranslateText": "Переклади гри ${APP_NAME} з англійської зроблені спільнотою. \nЯкщо ви хочете запропонувати або виправити переклад, \nПерейдіть за посиланню нижче. Заздалегідь дякую!",
|
||||||
"kickIdlePlayersText": "Викидати не активних гравців",
|
"kickIdlePlayersText": "Викидати неактивних гравців",
|
||||||
"kidFriendlyModeText": "Сімейний режим (менше насильства, і т.д.)",
|
"kidFriendlyModeText": "Сімейний режим (менше насильства, і т.д.)",
|
||||||
"languageText": "Мова",
|
"languageText": "Мова",
|
||||||
"moddingGuideText": "Інструкція по модінгу",
|
"moddingGuideText": "Інструкція по модінгу",
|
||||||
|
|
@ -1253,6 +1264,7 @@
|
||||||
"netTestingText": "Тестування мережі",
|
"netTestingText": "Тестування мережі",
|
||||||
"resetText": "Скинути",
|
"resetText": "Скинути",
|
||||||
"showBombTrajectoriesText": "Показувати траєкторію бомби",
|
"showBombTrajectoriesText": "Показувати траєкторію бомби",
|
||||||
|
"showInGamePingText": "Показувати пінг у грі",
|
||||||
"showPlayerNamesText": "Показувати імена гравців",
|
"showPlayerNamesText": "Показувати імена гравців",
|
||||||
"showUserModsText": "Показати теку модів",
|
"showUserModsText": "Показати теку модів",
|
||||||
"titleText": "Додатково",
|
"titleText": "Додатково",
|
||||||
|
|
@ -1523,6 +1535,7 @@
|
||||||
"Italian": "Італійська",
|
"Italian": "Італійська",
|
||||||
"Japanese": "Японська",
|
"Japanese": "Японська",
|
||||||
"Korean": "Корейська",
|
"Korean": "Корейська",
|
||||||
|
"Malay": "Малайська",
|
||||||
"Persian": "Перська",
|
"Persian": "Перська",
|
||||||
"Polish": "Польська",
|
"Polish": "Польська",
|
||||||
"Portuguese": "Португальська",
|
"Portuguese": "Португальська",
|
||||||
|
|
@ -1751,9 +1764,9 @@
|
||||||
"tutorial": {
|
"tutorial": {
|
||||||
"cpuBenchmarkText": "Прогін туторіала на шаленій швидкості (перевіряє швидкість процесора)",
|
"cpuBenchmarkText": "Прогін туторіала на шаленій швидкості (перевіряє швидкість процесора)",
|
||||||
"phrase01Text": "Привіт!",
|
"phrase01Text": "Привіт!",
|
||||||
"phrase02Text": "Ласкаво просимо в ${APP_NAME}!",
|
"phrase02Text": "Ласкаво просимо до ${APP_NAME}!",
|
||||||
"phrase03Text": "Кілька порад з управління персонажем:",
|
"phrase03Text": "Кілька порад з управління персонажем:",
|
||||||
"phrase04Text": "Багато чого в ${APP_NAME} засноване на законах фізики.",
|
"phrase04Text": "Багато чого в ${APP_NAME} базується на законах фізики.",
|
||||||
"phrase05Text": "Наприклад, при ударі кулаком..",
|
"phrase05Text": "Наприклад, при ударі кулаком..",
|
||||||
"phrase06Text": "..пошкодження залежать від швидкості кулака.",
|
"phrase06Text": "..пошкодження залежать від швидкості кулака.",
|
||||||
"phrase07Text": "Бачите? Ми не рухалися, тому ${NAME} майже в повному порядку.",
|
"phrase07Text": "Бачите? Ми не рухалися, тому ${NAME} майже в повному порядку.",
|
||||||
|
|
@ -1763,7 +1776,7 @@
|
||||||
"phrase11Text": "Для бігу утримуйте будь-яку кнопку.",
|
"phrase11Text": "Для бігу утримуйте будь-яку кнопку.",
|
||||||
"phrase12Text": "Для супер-крутих ударів спробуйте бігти і крутитися.",
|
"phrase12Text": "Для супер-крутих ударів спробуйте бігти і крутитися.",
|
||||||
"phrase13Text": "Ой .. Вибач, ${NAME}.",
|
"phrase13Text": "Ой .. Вибач, ${NAME}.",
|
||||||
"phrase14Text": "Можна піднімати і кидати речі, наприклад прапори .. або ${NAME}.",
|
"phrase14Text": "Ви можете піднімати і кидати речі, наприклад прапори .. або ${NAME}.",
|
||||||
"phrase15Text": "І, зрештою, бомби.",
|
"phrase15Text": "І, зрештою, бомби.",
|
||||||
"phrase16Text": "Кидання бомб потребує тренування.",
|
"phrase16Text": "Кидання бомб потребує тренування.",
|
||||||
"phrase17Text": "Ай! Не дуже хороший кидок.",
|
"phrase17Text": "Ай! Не дуже хороший кидок.",
|
||||||
|
|
@ -1779,11 +1792,11 @@
|
||||||
"phrase27Text": "Не забувай ці поради, і ТОЧНО повернешся живим!",
|
"phrase27Text": "Не забувай ці поради, і ТОЧНО повернешся живим!",
|
||||||
"phrase28Text": "...може бути...",
|
"phrase28Text": "...може бути...",
|
||||||
"phrase29Text": "Успіхів!",
|
"phrase29Text": "Успіхів!",
|
||||||
"randomName1Text": "Петя",
|
"randomName1Text": "Петро",
|
||||||
"randomName2Text": "Вася",
|
"randomName2Text": "Вася",
|
||||||
"randomName3Text": "Коля",
|
"randomName3Text": "Микола",
|
||||||
"randomName4Text": "Ігор",
|
"randomName4Text": "Ігор",
|
||||||
"randomName5Text": "Сашка",
|
"randomName5Text": "Сашко",
|
||||||
"skipConfirmText": "Пропустити туторіал? Торкніться або натисніть кнопку для підтвердження.",
|
"skipConfirmText": "Пропустити туторіал? Торкніться або натисніть кнопку для підтвердження.",
|
||||||
"skipVoteCountText": "${COUNT}/${TOTAL} голосів за пропуск",
|
"skipVoteCountText": "${COUNT}/${TOTAL} голосів за пропуск",
|
||||||
"skippingText": "пропуск навчання ...",
|
"skippingText": "пропуск навчання ...",
|
||||||
|
|
@ -1805,9 +1818,10 @@
|
||||||
"usesExternalControllerText": "Ця гра може використовувати зовнішній контролер для управління.",
|
"usesExternalControllerText": "Ця гра може використовувати зовнішній контролер для управління.",
|
||||||
"usingItunesText": "Використання музикального додатку для саундтрека...",
|
"usingItunesText": "Використання музикального додатку для саундтрека...",
|
||||||
"usingItunesTurnRepeatAndShuffleOnText": "Будь ласка, переконайтеся, що випадковий порядок і повтор усіх пісень включений в Itunes.",
|
"usingItunesTurnRepeatAndShuffleOnText": "Будь ласка, переконайтеся, що випадковий порядок і повтор усіх пісень включений в Itunes.",
|
||||||
|
"v2AccountLinkingInfoText": "Щоб підключити V2-акаунти, використовуйте кнопку 'Керування акаунтом'.",
|
||||||
"validatingTestBuildText": "Перевірка тестової збірки...",
|
"validatingTestBuildText": "Перевірка тестової збірки...",
|
||||||
"victoryText": "Перемога!",
|
"victoryText": "Перемога!",
|
||||||
"voteDelayText": "Ви не можете виганяти ще ${NUMBER} секунд",
|
"voteDelayText": "Ви зможете почати голосування через ${NUMBER} секунд",
|
||||||
"voteInProgressText": "Голосування ще триває.",
|
"voteInProgressText": "Голосування ще триває.",
|
||||||
"votedAlreadyText": "Ви вже голосували",
|
"votedAlreadyText": "Ви вже голосували",
|
||||||
"votesNeededText": "Потрібно ${NUMBER} голосів",
|
"votesNeededText": "Потрібно ${NUMBER} голосів",
|
||||||
|
|
@ -1837,6 +1851,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Хвиля",
|
"waveText": "Хвиля",
|
||||||
"wellSureText": "Зійде!",
|
"wellSureText": "Зійде!",
|
||||||
|
"whatIsThisText": "Шо це?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Авторські права DarwiinRemote"
|
"titleText": "Авторські права DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
@ -1853,9 +1868,9 @@
|
||||||
"thanksText": "Це стало можливим завдяки\nкоманді DarwiinRemote.",
|
"thanksText": "Це стало можливим завдяки\nкоманді DarwiinRemote.",
|
||||||
"titleText": "Налаштування контролера Wii"
|
"titleText": "Налаштування контролера Wii"
|
||||||
},
|
},
|
||||||
"winsPlayerText": "Переміг ${NAME}!",
|
"winsPlayerText": "Перемагає ${NAME}!",
|
||||||
"winsTeamText": "Перемогли ${NAME}!",
|
"winsTeamText": "Перемогли ${NAME}!",
|
||||||
"winsText": "${NAME} виграв!",
|
"winsText": "${NAME} виграє!",
|
||||||
"workspaceSyncErrorText": "Помилка синхронізації ${WORKSPACE}. Подробиці дивіться в журналі.",
|
"workspaceSyncErrorText": "Помилка синхронізації ${WORKSPACE}. Подробиці дивіться в журналі.",
|
||||||
"workspaceSyncReuseText": "Не вдається синхронізувати ${WORKSPACE}. Повторне використання попередньої синхронізованої версії.",
|
"workspaceSyncReuseText": "Не вдається синхронізувати ${WORKSPACE}. Повторне використання попередньої синхронізованої версії.",
|
||||||
"worldScoresUnavailableText": "Світові результати недоступні.",
|
"worldScoresUnavailableText": "Світові результати недоступні.",
|
||||||
|
|
|
||||||
13
dist/ba_data/data/languages/venetian.json
vendored
13
dist/ba_data/data/languages/venetian.json
vendored
|
|
@ -7,6 +7,7 @@
|
||||||
"changeOncePerSeason": "Te połi canbiar ’sto dato soło na volta par stajon.",
|
"changeOncePerSeason": "Te połi canbiar ’sto dato soło na volta par stajon.",
|
||||||
"changeOncePerSeasonError": "Par canbiarlo te ghè da spetar ła pròsema stajon (${NUM} days).",
|
"changeOncePerSeasonError": "Par canbiarlo te ghè da spetar ła pròsema stajon (${NUM} days).",
|
||||||
"customName": "Nome parsonałizà",
|
"customName": "Nome parsonałizà",
|
||||||
|
"googlePlayGamesAccountSwitchText": "Se te vołi doparar un account Google defarente,\ndòpara l'apl Google Play Giochi par canbiarlo.",
|
||||||
"linkAccountsEnterCodeText": "Insarisi còdaze",
|
"linkAccountsEnterCodeText": "Insarisi còdaze",
|
||||||
"linkAccountsGenerateCodeText": "Jènara còdaze",
|
"linkAccountsGenerateCodeText": "Jènara còdaze",
|
||||||
"linkAccountsInfoText": "(sparpagna progresi infrà dispozidivi defarenti)",
|
"linkAccountsInfoText": "(sparpagna progresi infrà dispozidivi defarenti)",
|
||||||
|
|
@ -23,10 +24,10 @@
|
||||||
"signInInfoText": "Conétate par tirar sù biłieti, batajar online e\nsparpagnar i to progresi infrà dispozidivi defarenti.",
|
"signInInfoText": "Conétate par tirar sù biłieti, batajar online e\nsparpagnar i to progresi infrà dispozidivi defarenti.",
|
||||||
"signInText": "Conétate",
|
"signInText": "Conétate",
|
||||||
"signInWithDeviceInfoText": "(par 'sto dispozidivo ze disponìbiłe un soło account automàtego)",
|
"signInWithDeviceInfoText": "(par 'sto dispozidivo ze disponìbiłe un soło account automàtego)",
|
||||||
"signInWithDeviceText": "Conétate co l'account de’l dispozidivo",
|
"signInWithDeviceText": "Conétate co un account łogałe",
|
||||||
"signInWithGameCircleText": "Conétate co Game Circle",
|
"signInWithGameCircleText": "Conétate co Game Circle",
|
||||||
"signInWithGooglePlayText": "Conétate co Google Play",
|
"signInWithGooglePlayText": "Conétate co Google Play",
|
||||||
"signInWithTestAccountInfoText": "(account de proa vecio: in fuduro dòpara i account de’l dispozidivo)",
|
"signInWithTestAccountInfoText": "(account de proa vecio: in fuduro dòpara un account łogałe)",
|
||||||
"signInWithTestAccountText": "Conétate co un account de proa",
|
"signInWithTestAccountText": "Conétate co un account de proa",
|
||||||
"signInWithV2InfoText": "(un account che fusiona so tute łe piataforme)",
|
"signInWithV2InfoText": "(un account che fusiona so tute łe piataforme)",
|
||||||
"signInWithV2Text": "Acedi co un account BombSquad",
|
"signInWithV2Text": "Acedi co un account BombSquad",
|
||||||
|
|
@ -543,7 +544,9 @@
|
||||||
"deleteText": "Ełìmena",
|
"deleteText": "Ełìmena",
|
||||||
"demoText": "Demo",
|
"demoText": "Demo",
|
||||||
"denyText": "Refuda",
|
"denyText": "Refuda",
|
||||||
|
"deprecatedText": "Roba vecia",
|
||||||
"desktopResText": "Resołusion PC",
|
"desktopResText": "Resołusion PC",
|
||||||
|
"deviceAccountUpgradeText": "Ocio:\nte ghè fazesto l'aceso co l'account łogałe ${NAME}.\nCo un pròsemo ajornamento i account łogałi i vegnarà cavài via.\nSe te vołi tegnerte i to progresi ajorna el to account a ła varsion V2.",
|
||||||
"difficultyEasyText": "Fàsiłe",
|
"difficultyEasyText": "Fàsiłe",
|
||||||
"difficultyHardOnlyText": "Soło modałità defìsiłe",
|
"difficultyHardOnlyText": "Soło modałità defìsiłe",
|
||||||
"difficultyHardText": "Defìsiłe",
|
"difficultyHardText": "Defìsiłe",
|
||||||
|
|
@ -801,6 +804,7 @@
|
||||||
},
|
},
|
||||||
"googleMultiplayerDiscontinuedText": "Me despiaze, el sarviso multizugador de Google no'l ze miga pì disponìbiłe.\nA sò drio łaorar a un renpiaso pì in presa che se połe.\nIntanto proa n'antro mètodo de conesion.\n-Eric",
|
"googleMultiplayerDiscontinuedText": "Me despiaze, el sarviso multizugador de Google no'l ze miga pì disponìbiłe.\nA sò drio łaorar a un renpiaso pì in presa che se połe.\nIntanto proa n'antro mètodo de conesion.\n-Eric",
|
||||||
"googlePlayPurchasesNotAvailableText": "Łe cronpe vecie no łe ze miga disponìbiłi.\nPodarìa èsarghe bezogno de ajornar l'apl Google Play.",
|
"googlePlayPurchasesNotAvailableText": "Łe cronpe vecie no łe ze miga disponìbiłi.\nPodarìa èsarghe bezogno de ajornar l'apl Google Play.",
|
||||||
|
"googlePlayServicesNotAvailableText": "Google Play Services no'l ze miga disponìbiłe.\nSerte funsion de l'apl łe podarìa èsar dezativàe.",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"graphicsSettingsWindow": {
|
"graphicsSettingsWindow": {
|
||||||
"alwaysText": "Senpre",
|
"alwaysText": "Senpre",
|
||||||
|
|
@ -1056,6 +1060,7 @@
|
||||||
"notSignedInErrorText": "Par partesipar A te ghè da conétarte.",
|
"notSignedInErrorText": "Par partesipar A te ghè da conétarte.",
|
||||||
"notSignedInGooglePlayErrorText": "Far farlo A te ghè da conétarte co Google Play.",
|
"notSignedInGooglePlayErrorText": "Far farlo A te ghè da conétarte co Google Play.",
|
||||||
"notSignedInText": "gnancora cołegà",
|
"notSignedInText": "gnancora cołegà",
|
||||||
|
"notUsingAccountText": "Ocio: ze stà łasà in parte l'account ${SERVICE}.\nSe te vołi dopararlo và so 'Account > Acedi co ${SERVICE}'.",
|
||||||
"nothingIsSelectedErrorText": "A no ze sełesionà gnente!",
|
"nothingIsSelectedErrorText": "A no ze sełesionà gnente!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Dezativa",
|
"offText": "Dezativa",
|
||||||
|
|
@ -1625,7 +1630,7 @@
|
||||||
"Tournaments require ${VERSION} or newer": "Par i tornèi A serve ła varsion ${VERSION} o una pì resente",
|
"Tournaments require ${VERSION} or newer": "Par i tornèi A serve ła varsion ${VERSION} o una pì resente",
|
||||||
"Unlink ${ACCOUNT} from this account?\nAll data on ${ACCOUNT} will be reset.\n(except for achievements in some cases)": "Vutu descołegar l'account ${ACCOUNT} da 'sto account?\nTuti i dati de ${ACCOUNT} i vegnarà ełimenài.\n(obietivi a parte in calche cazo)",
|
"Unlink ${ACCOUNT} from this account?\nAll data on ${ACCOUNT} will be reset.\n(except for achievements in some cases)": "Vutu descołegar l'account ${ACCOUNT} da 'sto account?\nTuti i dati de ${ACCOUNT} i vegnarà ełimenài.\n(obietivi a parte in calche cazo)",
|
||||||
"WARNING: complaints of hacking have been issued against your account.\nAccounts found to be hacking will be banned. Please play fair.": "AVERTENSA: el to account el ze stà segnałà par el dòparo de truchi.\nI zugaduri catài a doparar truchi i vegnarà blocài. Zuga da gałantomo.",
|
"WARNING: complaints of hacking have been issued against your account.\nAccounts found to be hacking will be banned. Please play fair.": "AVERTENSA: el to account el ze stà segnałà par el dòparo de truchi.\nI zugaduri catài a doparar truchi i vegnarà blocài. Zuga da gałantomo.",
|
||||||
"Would you like to link your device account to this one?\n\nYour device account is ${ACCOUNT1}\nThis account is ${ACCOUNT2}\n\nThis will allow you to keep your existing progress.\nWarning: this cannot be undone!\n": "Ghetu caro cołegar l'account de'l to dispozidivo co 'sto cuà?\n\nL'account de'l to dispozidivo el ze ${ACCOUNT1}\n'Sto account el ze ${ACCOUNT2}\n\n'Sta oparasion ła te parmetarà de mantegner i to progresi ezistenti.\nAvertensa: 'sta asion no ła połe pì èsar anułada!",
|
"Would you like to link your device account to this one?\n\nYour device account is ${ACCOUNT1}\nThis account is ${ACCOUNT2}\n\nThis will allow you to keep your existing progress.\nWarning: this cannot be undone!\n": "Ghetu caro cołegar el to account łogałe co 'sto cuà?\n\nEl to account łogałe el ze ${ACCOUNT1}\n'Sto account el ze ${ACCOUNT2}\n\n'Sta oparasion ła te parmetarà de mantegner i to progresi ezistenti.\nOcio: 'sta asion no ła połe pì èsar anułada!",
|
||||||
"You already own this!": "Dezà cronpà!",
|
"You already own this!": "Dezà cronpà!",
|
||||||
"You can join in ${COUNT} seconds.": "A te połi zontarte tenpo ${COUNT} segondi.",
|
"You can join in ${COUNT} seconds.": "A te połi zontarte tenpo ${COUNT} segondi.",
|
||||||
"You don't have enough tickets for this!": "A no te ghè miga biłieti che basta par cronparlo!",
|
"You don't have enough tickets for this!": "A no te ghè miga biłieti che basta par cronparlo!",
|
||||||
|
|
@ -1800,6 +1805,7 @@
|
||||||
"useDefaultText": "Reinposta",
|
"useDefaultText": "Reinposta",
|
||||||
"usesExternalControllerText": "'Sto zugo el dòpara un controłador esterno cofà dispozidivo de entrada.",
|
"usesExternalControllerText": "'Sto zugo el dòpara un controłador esterno cofà dispozidivo de entrada.",
|
||||||
"usingItunesText": "Doparar l'apl de mùzega par el son de fondo...",
|
"usingItunesText": "Doparar l'apl de mùzega par el son de fondo...",
|
||||||
|
"v2AccountLinkingInfoText": "Par łigar un account V2 dòpara el boton 'Jestisi account'.",
|
||||||
"validatingTestBuildText": "Confermasion varsion de proa...",
|
"validatingTestBuildText": "Confermasion varsion de proa...",
|
||||||
"victoryText": "Vitoria!",
|
"victoryText": "Vitoria!",
|
||||||
"voteDelayText": "A no te połi tacar n'antra votasion par ${NUMBER} segondi",
|
"voteDelayText": "A no te połi tacar n'antra votasion par ${NUMBER} segondi",
|
||||||
|
|
@ -1832,6 +1838,7 @@
|
||||||
},
|
},
|
||||||
"waveText": "Ondada",
|
"waveText": "Ondada",
|
||||||
"wellSureText": "Ciaro!",
|
"wellSureText": "Ciaro!",
|
||||||
|
"whatIsThisText": "Cosa zeła 'sta roba?",
|
||||||
"wiimoteLicenseWindow": {
|
"wiimoteLicenseWindow": {
|
||||||
"titleText": "Deriti d'autor DarwiinRemote"
|
"titleText": "Deriti d'autor DarwiinRemote"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from .core import contents, where
|
from .core import contents, where
|
||||||
|
|
||||||
__all__ = ["contents", "where"]
|
__all__ = ["contents", "where"]
|
||||||
__version__ = "2022.09.14"
|
__version__ = "2022.12.07"
|
||||||
|
|
|
||||||
220
dist/ba_data/python-site-packages/certifi/cacert.pem
vendored
220
dist/ba_data/python-site-packages/certifi/cacert.pem
vendored
|
|
@ -636,37 +636,6 @@ BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
|
||||||
ZQ==
|
ZQ==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
|
|
||||||
# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
|
|
||||||
# Label: "Network Solutions Certificate Authority"
|
|
||||||
# Serial: 116697915152937497490437556386812487904
|
|
||||||
# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e
|
|
||||||
# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce
|
|
||||||
# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
|
|
||||||
MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
|
||||||
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
|
||||||
dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
|
|
||||||
UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
|
|
||||||
ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
|
||||||
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
|
|
||||||
c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
|
|
||||||
OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
|
|
||||||
mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
|
|
||||||
BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
|
|
||||||
qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
|
|
||||||
gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
|
|
||||||
BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
|
|
||||||
bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
|
|
||||||
dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
|
|
||||||
6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
|
|
||||||
h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
|
|
||||||
/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
|
||||||
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
|
|
||||||
pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
||||||
# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
||||||
# Label: "COMODO ECC Certification Authority"
|
# Label: "COMODO ECC Certification Authority"
|
||||||
|
|
@ -1323,45 +1292,6 @@ t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
|
||||||
SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes
|
|
||||||
# Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes
|
|
||||||
# Label: "EC-ACC"
|
|
||||||
# Serial: -23701579247955709139626555126524820479
|
|
||||||
# MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09
|
|
||||||
# SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8
|
|
||||||
# SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
|
|
||||||
8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
|
|
||||||
dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
|
|
||||||
YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
|
|
||||||
dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
|
|
||||||
IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
|
|
||||||
LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
|
|
||||||
EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
|
|
||||||
KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
|
|
||||||
ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
|
|
||||||
bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
|
|
||||||
ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
|
|
||||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
|
|
||||||
85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
|
|
||||||
4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
|
|
||||||
HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
|
|
||||||
QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
|
|
||||||
lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
|
|
||||||
o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
|
||||||
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
|
|
||||||
opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
|
|
||||||
dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
|
|
||||||
ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
|
|
||||||
AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
|
|
||||||
/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
|
|
||||||
SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
|
|
||||||
Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
|
|
||||||
Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
|
|
||||||
nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
|
# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
|
||||||
# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
|
# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
|
||||||
# Label: "Actalis Authentication Root CA"
|
# Label: "Actalis Authentication Root CA"
|
||||||
|
|
@ -2243,46 +2173,6 @@ KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg
|
||||||
xwy8p2Fp8fc74SrL+SvzZpA3
|
xwy8p2Fp8fc74SrL+SvzZpA3
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden
|
|
||||||
# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden
|
|
||||||
# Label: "Staat der Nederlanden EV Root CA"
|
|
||||||
# Serial: 10000013
|
|
||||||
# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba
|
|
||||||
# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb
|
|
||||||
# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO
|
|
||||||
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh
|
|
||||||
dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y
|
|
||||||
MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg
|
|
||||||
TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS
|
|
||||||
b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS
|
|
||||||
M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC
|
|
||||||
UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d
|
|
||||||
Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p
|
|
||||||
rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l
|
|
||||||
pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb
|
|
||||||
j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC
|
|
||||||
KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS
|
|
||||||
/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X
|
|
||||||
cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH
|
|
||||||
1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP
|
|
||||||
px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
|
|
||||||
/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7
|
|
||||||
MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
|
|
||||||
eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u
|
|
||||||
2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS
|
|
||||||
v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC
|
|
||||||
wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy
|
|
||||||
CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e
|
|
||||||
vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6
|
|
||||||
Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa
|
|
||||||
Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL
|
|
||||||
eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8
|
|
||||||
FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc
|
|
||||||
7uzXLg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust
|
# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust
|
||||||
# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust
|
# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust
|
||||||
# Label: "IdenTrust Commercial Root CA 1"
|
# Label: "IdenTrust Commercial Root CA 1"
|
||||||
|
|
@ -2890,116 +2780,6 @@ T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe
|
||||||
MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==
|
MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Label: "TrustCor RootCert CA-1"
|
|
||||||
# Serial: 15752444095811006489
|
|
||||||
# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45
|
|
||||||
# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a
|
|
||||||
# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD
|
|
||||||
VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk
|
|
||||||
MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
|
|
||||||
cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y
|
|
||||||
IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB
|
|
||||||
pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h
|
|
||||||
IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG
|
|
||||||
A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU
|
|
||||||
cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
|
||||||
CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid
|
|
||||||
RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V
|
|
||||||
seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme
|
|
||||||
9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV
|
|
||||||
EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW
|
|
||||||
hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/
|
|
||||||
DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw
|
|
||||||
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD
|
|
||||||
ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I
|
|
||||||
/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
|
|
||||||
ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ
|
|
||||||
yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts
|
|
||||||
L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN
|
|
||||||
zl/HHk484IkzlQsPpTLWPFp5LBk=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Label: "TrustCor RootCert CA-2"
|
|
||||||
# Serial: 2711694510199101698
|
|
||||||
# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64
|
|
||||||
# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0
|
|
||||||
# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV
|
|
||||||
BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw
|
|
||||||
IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy
|
|
||||||
dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig
|
|
||||||
Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk
|
|
||||||
MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg
|
|
||||||
Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD
|
|
||||||
VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy
|
|
||||||
dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
|
|
||||||
AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+
|
|
||||||
QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq
|
|
||||||
1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp
|
|
||||||
2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK
|
|
||||||
DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape
|
|
||||||
az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF
|
|
||||||
3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88
|
|
||||||
oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM
|
|
||||||
g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3
|
|
||||||
mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
|
|
||||||
8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd
|
|
||||||
BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U
|
|
||||||
nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw
|
|
||||||
DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX
|
|
||||||
dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+
|
|
||||||
MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL
|
|
||||||
/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX
|
|
||||||
CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa
|
|
||||||
ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW
|
|
||||||
2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7
|
|
||||||
N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3
|
|
||||||
Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB
|
|
||||||
As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp
|
|
||||||
5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu
|
|
||||||
1uwJ
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority
|
|
||||||
# Label: "TrustCor ECA-1"
|
|
||||||
# Serial: 9548242946988625984
|
|
||||||
# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c
|
|
||||||
# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd
|
|
||||||
# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD
|
|
||||||
VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk
|
|
||||||
MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
|
|
||||||
cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y
|
|
||||||
IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV
|
|
||||||
BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw
|
|
||||||
IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy
|
|
||||||
dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig
|
|
||||||
RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb
|
|
||||||
3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA
|
|
||||||
BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5
|
|
||||||
3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou
|
|
||||||
owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/
|
|
||||||
wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF
|
|
||||||
ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf
|
|
||||||
BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/
|
|
||||||
MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv
|
|
||||||
civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2
|
|
||||||
AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
|
|
||||||
hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50
|
|
||||||
soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI
|
|
||||||
WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi
|
|
||||||
tJ/X5g==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation
|
# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation
|
||||||
# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation
|
# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation
|
||||||
# Label: "SSL.com Root Certification Authority RSA"
|
# Label: "SSL.com Root Certification Authority RSA"
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@ import types as _types
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
|
|
||||||
# Please keep __all__ alphabetized within each category.
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
# Super-special typing primitives.
|
# Super-special typing primitives.
|
||||||
|
'Any',
|
||||||
'ClassVar',
|
'ClassVar',
|
||||||
'Concatenate',
|
'Concatenate',
|
||||||
'Final',
|
'Final',
|
||||||
|
|
@ -20,6 +20,7 @@ __all__ = [
|
||||||
'ParamSpecKwargs',
|
'ParamSpecKwargs',
|
||||||
'Self',
|
'Self',
|
||||||
'Type',
|
'Type',
|
||||||
|
'TypeVar',
|
||||||
'TypeVarTuple',
|
'TypeVarTuple',
|
||||||
'Unpack',
|
'Unpack',
|
||||||
|
|
||||||
|
|
@ -60,6 +61,7 @@ __all__ = [
|
||||||
'Literal',
|
'Literal',
|
||||||
'NewType',
|
'NewType',
|
||||||
'overload',
|
'overload',
|
||||||
|
'override',
|
||||||
'Protocol',
|
'Protocol',
|
||||||
'reveal_type',
|
'reveal_type',
|
||||||
'runtime',
|
'runtime',
|
||||||
|
|
@ -149,6 +151,37 @@ VT = typing.TypeVar('VT') # Value type.
|
||||||
T_co = typing.TypeVar('T_co', covariant=True) # Any type covariant containers.
|
T_co = typing.TypeVar('T_co', covariant=True) # Any type covariant containers.
|
||||||
T_contra = typing.TypeVar('T_contra', contravariant=True) # Ditto contravariant.
|
T_contra = typing.TypeVar('T_contra', contravariant=True) # Ditto contravariant.
|
||||||
|
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 11):
|
||||||
|
from typing import Any
|
||||||
|
else:
|
||||||
|
|
||||||
|
class _AnyMeta(type):
|
||||||
|
def __instancecheck__(self, obj):
|
||||||
|
if self is Any:
|
||||||
|
raise TypeError("typing_extensions.Any cannot be used with isinstance()")
|
||||||
|
return super().__instancecheck__(obj)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
if self is Any:
|
||||||
|
return "typing_extensions.Any"
|
||||||
|
return super().__repr__()
|
||||||
|
|
||||||
|
class Any(metaclass=_AnyMeta):
|
||||||
|
"""Special type indicating an unconstrained type.
|
||||||
|
- Any is compatible with every type.
|
||||||
|
- Any assumed to have all methods.
|
||||||
|
- All values assumed to be instances of Any.
|
||||||
|
Note that all the above statements are true from the point of view of
|
||||||
|
static type checkers. At runtime, Any should not be used with instance
|
||||||
|
checks.
|
||||||
|
"""
|
||||||
|
def __new__(cls, *args, **kwargs):
|
||||||
|
if cls is Any:
|
||||||
|
raise TypeError("Any cannot be instantiated")
|
||||||
|
return super().__new__(cls, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
ClassVar = typing.ClassVar
|
ClassVar = typing.ClassVar
|
||||||
|
|
||||||
# On older versions of typing there is an internal class named "Final".
|
# On older versions of typing there is an internal class named "Final".
|
||||||
|
|
@ -431,7 +464,7 @@ else:
|
||||||
if type(self)._is_protocol:
|
if type(self)._is_protocol:
|
||||||
raise TypeError('Protocols cannot be instantiated')
|
raise TypeError('Protocols cannot be instantiated')
|
||||||
|
|
||||||
class _ProtocolMeta(abc.ABCMeta):
|
class _ProtocolMeta(abc.ABCMeta): # noqa: B024
|
||||||
# This metaclass is a bit unfortunate and exists only because of the lack
|
# This metaclass is a bit unfortunate and exists only because of the lack
|
||||||
# of __instancehook__.
|
# of __instancehook__.
|
||||||
def __instancecheck__(cls, instance):
|
def __instancecheck__(cls, instance):
|
||||||
|
|
@ -1115,6 +1148,44 @@ else:
|
||||||
above.""")
|
above.""")
|
||||||
|
|
||||||
|
|
||||||
|
class _DefaultMixin:
|
||||||
|
"""Mixin for TypeVarLike defaults."""
|
||||||
|
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
def __init__(self, default):
|
||||||
|
if isinstance(default, (tuple, list)):
|
||||||
|
self.__default__ = tuple((typing._type_check(d, "Default must be a type")
|
||||||
|
for d in default))
|
||||||
|
elif default:
|
||||||
|
self.__default__ = typing._type_check(default, "Default must be a type")
|
||||||
|
else:
|
||||||
|
self.__default__ = None
|
||||||
|
|
||||||
|
|
||||||
|
# Add default and infer_variance parameters from PEP 696 and 695
|
||||||
|
class TypeVar(typing.TypeVar, _DefaultMixin, _root=True):
|
||||||
|
"""Type variable."""
|
||||||
|
|
||||||
|
__module__ = 'typing'
|
||||||
|
|
||||||
|
def __init__(self, name, *constraints, bound=None,
|
||||||
|
covariant=False, contravariant=False,
|
||||||
|
default=None, infer_variance=False):
|
||||||
|
super().__init__(name, *constraints, bound=bound, covariant=covariant,
|
||||||
|
contravariant=contravariant)
|
||||||
|
_DefaultMixin.__init__(self, default)
|
||||||
|
self.__infer_variance__ = infer_variance
|
||||||
|
|
||||||
|
# for pickling:
|
||||||
|
try:
|
||||||
|
def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
|
||||||
|
except (AttributeError, ValueError):
|
||||||
|
def_mod = None
|
||||||
|
if def_mod != 'typing_extensions':
|
||||||
|
self.__module__ = def_mod
|
||||||
|
|
||||||
|
|
||||||
# Python 3.10+ has PEP 612
|
# Python 3.10+ has PEP 612
|
||||||
if hasattr(typing, 'ParamSpecArgs'):
|
if hasattr(typing, 'ParamSpecArgs'):
|
||||||
ParamSpecArgs = typing.ParamSpecArgs
|
ParamSpecArgs = typing.ParamSpecArgs
|
||||||
|
|
@ -1179,12 +1250,32 @@ else:
|
||||||
|
|
||||||
# 3.10+
|
# 3.10+
|
||||||
if hasattr(typing, 'ParamSpec'):
|
if hasattr(typing, 'ParamSpec'):
|
||||||
ParamSpec = typing.ParamSpec
|
|
||||||
|
# Add default Parameter - PEP 696
|
||||||
|
class ParamSpec(typing.ParamSpec, _DefaultMixin, _root=True):
|
||||||
|
"""Parameter specification variable."""
|
||||||
|
|
||||||
|
__module__ = 'typing'
|
||||||
|
|
||||||
|
def __init__(self, name, *, bound=None, covariant=False, contravariant=False,
|
||||||
|
default=None):
|
||||||
|
super().__init__(name, bound=bound, covariant=covariant,
|
||||||
|
contravariant=contravariant)
|
||||||
|
_DefaultMixin.__init__(self, default)
|
||||||
|
|
||||||
|
# for pickling:
|
||||||
|
try:
|
||||||
|
def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
|
||||||
|
except (AttributeError, ValueError):
|
||||||
|
def_mod = None
|
||||||
|
if def_mod != 'typing_extensions':
|
||||||
|
self.__module__ = def_mod
|
||||||
|
|
||||||
# 3.7-3.9
|
# 3.7-3.9
|
||||||
else:
|
else:
|
||||||
|
|
||||||
# Inherits from list as a workaround for Callable checks in Python < 3.9.2.
|
# Inherits from list as a workaround for Callable checks in Python < 3.9.2.
|
||||||
class ParamSpec(list):
|
class ParamSpec(list, _DefaultMixin):
|
||||||
"""Parameter specification variable.
|
"""Parameter specification variable.
|
||||||
|
|
||||||
Usage::
|
Usage::
|
||||||
|
|
@ -1242,7 +1333,8 @@ else:
|
||||||
def kwargs(self):
|
def kwargs(self):
|
||||||
return ParamSpecKwargs(self)
|
return ParamSpecKwargs(self)
|
||||||
|
|
||||||
def __init__(self, name, *, bound=None, covariant=False, contravariant=False):
|
def __init__(self, name, *, bound=None, covariant=False, contravariant=False,
|
||||||
|
default=None):
|
||||||
super().__init__([self])
|
super().__init__([self])
|
||||||
self.__name__ = name
|
self.__name__ = name
|
||||||
self.__covariant__ = bool(covariant)
|
self.__covariant__ = bool(covariant)
|
||||||
|
|
@ -1251,6 +1343,7 @@ else:
|
||||||
self.__bound__ = typing._type_check(bound, 'Bound must be a type.')
|
self.__bound__ = typing._type_check(bound, 'Bound must be a type.')
|
||||||
else:
|
else:
|
||||||
self.__bound__ = None
|
self.__bound__ = None
|
||||||
|
_DefaultMixin.__init__(self, default)
|
||||||
|
|
||||||
# for pickling:
|
# for pickling:
|
||||||
try:
|
try:
|
||||||
|
|
@ -1752,9 +1845,25 @@ else:
|
||||||
|
|
||||||
|
|
||||||
if hasattr(typing, "TypeVarTuple"): # 3.11+
|
if hasattr(typing, "TypeVarTuple"): # 3.11+
|
||||||
TypeVarTuple = typing.TypeVarTuple
|
|
||||||
|
# Add default Parameter - PEP 696
|
||||||
|
class TypeVarTuple(typing.TypeVarTuple, _DefaultMixin, _root=True):
|
||||||
|
"""Type variable tuple."""
|
||||||
|
|
||||||
|
def __init__(self, name, *, default=None):
|
||||||
|
super().__init__(name)
|
||||||
|
_DefaultMixin.__init__(self, default)
|
||||||
|
|
||||||
|
# for pickling:
|
||||||
|
try:
|
||||||
|
def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
|
||||||
|
except (AttributeError, ValueError):
|
||||||
|
def_mod = None
|
||||||
|
if def_mod != 'typing_extensions':
|
||||||
|
self.__module__ = def_mod
|
||||||
|
|
||||||
else:
|
else:
|
||||||
class TypeVarTuple:
|
class TypeVarTuple(_DefaultMixin):
|
||||||
"""Type variable tuple.
|
"""Type variable tuple.
|
||||||
|
|
||||||
Usage::
|
Usage::
|
||||||
|
|
@ -1804,8 +1913,9 @@ else:
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
yield self.__unpacked__
|
yield self.__unpacked__
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name, *, default=None):
|
||||||
self.__name__ = name
|
self.__name__ = name
|
||||||
|
_DefaultMixin.__init__(self, default)
|
||||||
|
|
||||||
# for pickling:
|
# for pickling:
|
||||||
try:
|
try:
|
||||||
|
|
@ -1968,6 +2078,36 @@ else:
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
if hasattr(typing, "override"):
|
||||||
|
override = typing.override
|
||||||
|
else:
|
||||||
|
_F = typing.TypeVar("_F", bound=typing.Callable[..., typing.Any])
|
||||||
|
|
||||||
|
def override(__arg: _F) -> _F:
|
||||||
|
"""Indicate that a method is intended to override a method in a base class.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
class Base:
|
||||||
|
def method(self) -> None: ...
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Child(Base):
|
||||||
|
@override
|
||||||
|
def method(self) -> None:
|
||||||
|
super().method()
|
||||||
|
|
||||||
|
When this decorator is applied to a method, the type checker will
|
||||||
|
validate that it overrides a method with the same name on a base class.
|
||||||
|
This helps prevent bugs that may occur when a base class is changed
|
||||||
|
without an equivalent change to a child class.
|
||||||
|
|
||||||
|
See PEP 698 for details.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return __arg
|
||||||
|
|
||||||
|
|
||||||
# We have to do some monkey patching to deal with the dual nature of
|
# We have to do some monkey patching to deal with the dual nature of
|
||||||
# Unpack/TypeVarTuple:
|
# Unpack/TypeVarTuple:
|
||||||
# - We want Unpack to be a kind of TypeVar so it gets accepted in
|
# - We want Unpack to be a kind of TypeVar so it gets accepted in
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/__init__.py
vendored
2
dist/ba_data/python/ba/__init__.py
vendored
|
|
@ -102,6 +102,7 @@ from ba._error import (
|
||||||
WidgetNotFoundError,
|
WidgetNotFoundError,
|
||||||
ActivityNotFoundError,
|
ActivityNotFoundError,
|
||||||
TeamNotFoundError,
|
TeamNotFoundError,
|
||||||
|
MapNotFoundError,
|
||||||
SessionTeamNotFoundError,
|
SessionTeamNotFoundError,
|
||||||
SessionNotFoundError,
|
SessionNotFoundError,
|
||||||
DelegateNotFoundError,
|
DelegateNotFoundError,
|
||||||
|
|
@ -282,6 +283,7 @@ __all__ = [
|
||||||
'Lobby',
|
'Lobby',
|
||||||
'Lstr',
|
'Lstr',
|
||||||
'Map',
|
'Map',
|
||||||
|
'MapNotFoundError',
|
||||||
'Material',
|
'Material',
|
||||||
'MetadataSubsystem',
|
'MetadataSubsystem',
|
||||||
'Model',
|
'Model',
|
||||||
|
|
|
||||||
43
dist/ba_data/python/ba/_accountv2.py
vendored
43
dist/ba_data/python/ba/_accountv2.py
vendored
|
|
@ -36,7 +36,7 @@ class AccountV2Subsystem:
|
||||||
# (or lack thereof) has completed. This includes things like
|
# (or lack thereof) has completed. This includes things like
|
||||||
# workspace syncing. Completion of this is what flips the app
|
# workspace syncing. Completion of this is what flips the app
|
||||||
# into 'running' state.
|
# into 'running' state.
|
||||||
self._initial_login_completed = False
|
self._initial_sign_in_completed = False
|
||||||
|
|
||||||
self._kicked_off_workspace_load = False
|
self._kicked_off_workspace_load = False
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ class AccountV2Subsystem:
|
||||||
if account.workspaceid is not None:
|
if account.workspaceid is not None:
|
||||||
assert account.workspacename is not None
|
assert account.workspacename is not None
|
||||||
if (
|
if (
|
||||||
not self._initial_login_completed
|
not self._initial_sign_in_completed
|
||||||
and not self._kicked_off_workspace_load
|
and not self._kicked_off_workspace_load
|
||||||
):
|
):
|
||||||
self._kicked_off_workspace_load = True
|
self._kicked_off_workspace_load = True
|
||||||
|
|
@ -121,9 +121,9 @@ class AccountV2Subsystem:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Ok; no workspace to worry about; carry on.
|
# Ok; no workspace to worry about; carry on.
|
||||||
if not self._initial_login_completed:
|
if not self._initial_sign_in_completed:
|
||||||
self._initial_login_completed = True
|
self._initial_sign_in_completed = True
|
||||||
_ba.app.on_initial_login_completed()
|
_ba.app.on_initial_sign_in_completed()
|
||||||
|
|
||||||
def on_active_logins_changed(self, logins: dict[LoginType, str]) -> None:
|
def on_active_logins_changed(self, logins: dict[LoginType, str]) -> None:
|
||||||
"""Should be called when logins for the active account change."""
|
"""Should be called when logins for the active account change."""
|
||||||
|
|
@ -156,9 +156,9 @@ class AccountV2Subsystem:
|
||||||
within a few seconds of app launch; the app can move forward
|
within a few seconds of app launch; the app can move forward
|
||||||
with the startup sequence at that point.
|
with the startup sequence at that point.
|
||||||
"""
|
"""
|
||||||
if not self._initial_login_completed:
|
if not self._initial_sign_in_completed:
|
||||||
self._initial_login_completed = True
|
self._initial_sign_in_completed = True
|
||||||
_ba.app.on_initial_login_completed()
|
_ba.app.on_initial_sign_in_completed()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _hashstr(val: str) -> str:
|
def _hashstr(val: str) -> str:
|
||||||
|
|
@ -271,7 +271,7 @@ class AccountV2Subsystem:
|
||||||
self._implicit_state_changed = False
|
self._implicit_state_changed = False
|
||||||
|
|
||||||
# Once we've made a move here we don't want to
|
# Once we've made a move here we don't want to
|
||||||
# do any more automatic ones.
|
# do any more automatic stuff.
|
||||||
self._can_do_auto_sign_in = False
|
self._can_do_auto_sign_in = False
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
@ -290,22 +290,23 @@ class AccountV2Subsystem:
|
||||||
' of implicit state change...',
|
' of implicit state change...',
|
||||||
)
|
)
|
||||||
self._implicit_signed_in_adapter.sign_in(
|
self._implicit_signed_in_adapter.sign_in(
|
||||||
self._on_explicit_sign_in_completed
|
self._on_explicit_sign_in_completed,
|
||||||
|
description='implicit state change',
|
||||||
)
|
)
|
||||||
self._implicit_state_changed = False
|
self._implicit_state_changed = False
|
||||||
|
|
||||||
# Once we've made a move here we don't want to
|
# Once we've made a move here we don't want to
|
||||||
# do any more automatic ones.
|
# do any more automatic stuff.
|
||||||
self._can_do_auto_sign_in = False
|
self._can_do_auto_sign_in = False
|
||||||
|
|
||||||
if not self._can_do_auto_sign_in:
|
if not self._can_do_auto_sign_in:
|
||||||
return
|
return
|
||||||
|
|
||||||
# If we're not currently signed in, we have connectivity, and
|
# If we're not currently signed in, we have connectivity, and
|
||||||
# we have an available implicit login, auto-sign-in with it.
|
# we have an available implicit login, auto-sign-in with it once.
|
||||||
# The implicit-state-change logic above should keep things
|
# The implicit-state-change logic above should keep things
|
||||||
# mostly in-sync, but due to connectivity or other issues that
|
# mostly in-sync, but that might not always be the case due to
|
||||||
# might not always be the case. We prefer to keep people signed
|
# connectivity or other issues. We prefer to keep people signed
|
||||||
# in as a rule, even if there are corner cases where this might
|
# in as a rule, even if there are corner cases where this might
|
||||||
# not be what they want (A user signing out and then restarting
|
# not be what they want (A user signing out and then restarting
|
||||||
# may be auto-signed back in).
|
# may be auto-signed back in).
|
||||||
|
|
@ -324,7 +325,7 @@ class AccountV2Subsystem:
|
||||||
)
|
)
|
||||||
self._can_do_auto_sign_in = False # Only ATTEMPT once
|
self._can_do_auto_sign_in = False # Only ATTEMPT once
|
||||||
self._implicit_signed_in_adapter.sign_in(
|
self._implicit_signed_in_adapter.sign_in(
|
||||||
self._on_implicit_sign_in_completed
|
self._on_implicit_sign_in_completed, description='auto-sign-in'
|
||||||
)
|
)
|
||||||
|
|
||||||
def _on_explicit_sign_in_completed(
|
def _on_explicit_sign_in_completed(
|
||||||
|
|
@ -337,8 +338,8 @@ class AccountV2Subsystem:
|
||||||
|
|
||||||
del adapter # Unused.
|
del adapter # Unused.
|
||||||
|
|
||||||
# Make some noise on errors since the user knows
|
# Make some noise on errors since the user knows a
|
||||||
# a sign-in attempt is happening in this case.
|
# sign-in attempt is happening in this case (the 'explicit' part).
|
||||||
if isinstance(result, Exception):
|
if isinstance(result, Exception):
|
||||||
# We expect the occasional communication errors;
|
# We expect the occasional communication errors;
|
||||||
# Log a full exception for anything else though.
|
# Log a full exception for anything else though.
|
||||||
|
|
@ -347,6 +348,8 @@ class AccountV2Subsystem:
|
||||||
'Error on explicit accountv2 sign in attempt.',
|
'Error on explicit accountv2 sign in attempt.',
|
||||||
exc_info=result,
|
exc_info=result,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# For now just show 'error'. Should do better than this.
|
||||||
with _ba.Context('ui'):
|
with _ba.Context('ui'):
|
||||||
_ba.screenmessage(
|
_ba.screenmessage(
|
||||||
Lstr(resource='internal.signInErrorText'),
|
Lstr(resource='internal.signInErrorText'),
|
||||||
|
|
@ -395,9 +398,9 @@ class AccountV2Subsystem:
|
||||||
_ba.app.accounts_v2.set_primary_credentials(result.credentials)
|
_ba.app.accounts_v2.set_primary_credentials(result.credentials)
|
||||||
|
|
||||||
def _on_set_active_workspace_completed(self) -> None:
|
def _on_set_active_workspace_completed(self) -> None:
|
||||||
if not self._initial_login_completed:
|
if not self._initial_sign_in_completed:
|
||||||
self._initial_login_completed = True
|
self._initial_sign_in_completed = True
|
||||||
_ba.app.on_initial_login_completed()
|
_ba.app.on_initial_sign_in_completed()
|
||||||
|
|
||||||
|
|
||||||
class AccountV2Handle:
|
class AccountV2Handle:
|
||||||
|
|
|
||||||
71
dist/ba_data/python/ba/_app.py
vendored
71
dist/ba_data/python/ba/_app.py
vendored
|
|
@ -20,6 +20,7 @@ from ba._meta import MetadataSubsystem
|
||||||
from ba._ads import AdsSubsystem
|
from ba._ads import AdsSubsystem
|
||||||
from ba._net import NetworkSubsystem
|
from ba._net import NetworkSubsystem
|
||||||
from ba._workspace import WorkspaceSubsystem
|
from ba._workspace import WorkspaceSubsystem
|
||||||
|
from ba._appcomponent import AppComponentSubsystem
|
||||||
from ba import _internal
|
from ba import _internal
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
@ -58,20 +59,26 @@ class App:
|
||||||
class State(Enum):
|
class State(Enum):
|
||||||
"""High level state the app can be in."""
|
"""High level state the app can be in."""
|
||||||
|
|
||||||
# Python-level systems being inited but should not interact.
|
# The launch process has not yet begun.
|
||||||
LAUNCHING = 0
|
INITIAL = 0
|
||||||
|
|
||||||
# Initial account logins, workspace & asset downloads, etc.
|
# Our app subsystems are being inited but should not yet interact.
|
||||||
LOADING = 1
|
LAUNCHING = 1
|
||||||
|
|
||||||
# Normal running state.
|
# App subsystems are inited and interacting, but the app has not
|
||||||
RUNNING = 2
|
# yet embarked on a high level course of action. It is doing initial
|
||||||
|
# account logins, workspace & asset downloads, etc. in order to
|
||||||
|
# prepare for this.
|
||||||
|
LOADING = 2
|
||||||
|
|
||||||
# App is backgrounded or otherwise suspended.
|
# All pieces are in place and the app is now doing its thing.
|
||||||
PAUSED = 3
|
RUNNING = 3
|
||||||
|
|
||||||
# App is shutting down.
|
# The app is backgrounded or otherwise suspended.
|
||||||
SHUTTING_DOWN = 4
|
PAUSED = 4
|
||||||
|
|
||||||
|
# The app is shutting down.
|
||||||
|
SHUTTING_DOWN = 5
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def aioloop(self) -> asyncio.AbstractEventLoop:
|
def aioloop(self) -> asyncio.AbstractEventLoop:
|
||||||
|
|
@ -128,7 +135,7 @@ class App:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def debug_build(self) -> bool:
|
def debug_build(self) -> bool:
|
||||||
"""Whether the game was compiled in debug mode.
|
"""Whether the app was compiled in debug mode.
|
||||||
|
|
||||||
Debug builds generally run substantially slower than non-debug
|
Debug builds generally run substantially slower than non-debug
|
||||||
builds due to compiler optimizations being disabled and extra
|
builds due to compiler optimizations being disabled and extra
|
||||||
|
|
@ -232,11 +239,14 @@ class App:
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-statements
|
# pylint: disable=too-many-statements
|
||||||
|
|
||||||
self.state = self.State.LAUNCHING
|
self.state = self.State.INITIAL
|
||||||
|
|
||||||
|
self._bootstrapping_completed = False
|
||||||
|
self._called_on_app_launching = False
|
||||||
self._launch_completed = False
|
self._launch_completed = False
|
||||||
self._initial_login_completed = False
|
self._initial_sign_in_completed = False
|
||||||
self._meta_scan_completed = False
|
self._meta_scan_completed = False
|
||||||
|
self._called_on_app_loading = False
|
||||||
self._called_on_app_running = False
|
self._called_on_app_running = False
|
||||||
self._app_paused = False
|
self._app_paused = False
|
||||||
|
|
||||||
|
|
@ -294,6 +304,7 @@ class App:
|
||||||
# Server Mode.
|
# Server Mode.
|
||||||
self.server: ba.ServerController | None = None
|
self.server: ba.ServerController | None = None
|
||||||
|
|
||||||
|
self.components = AppComponentSubsystem()
|
||||||
self.meta = MetadataSubsystem()
|
self.meta = MetadataSubsystem()
|
||||||
self.accounts_v1 = AccountV1Subsystem()
|
self.accounts_v1 = AccountV1Subsystem()
|
||||||
self.plugins = PluginSubsystem()
|
self.plugins = PluginSubsystem()
|
||||||
|
|
@ -342,10 +353,8 @@ class App:
|
||||||
self.delegate: ba.AppDelegate | None = None
|
self.delegate: ba.AppDelegate | None = None
|
||||||
self._asyncio_timer: ba.Timer | None = None
|
self._asyncio_timer: ba.Timer | None = None
|
||||||
|
|
||||||
def on_app_launch(self) -> None:
|
def on_app_launching(self) -> None:
|
||||||
"""Runs after the app finishes low level bootstrapping.
|
"""Called when the app is first entering the launching state."""
|
||||||
|
|
||||||
(internal)"""
|
|
||||||
# pylint: disable=cyclic-import
|
# pylint: disable=cyclic-import
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
from ba import _asyncio
|
from ba import _asyncio
|
||||||
|
|
@ -473,6 +482,9 @@ class App:
|
||||||
self._launch_completed = True
|
self._launch_completed = True
|
||||||
self._update_state()
|
self._update_state()
|
||||||
|
|
||||||
|
def on_app_loading(self) -> None:
|
||||||
|
"""Called when initially entering the loading state."""
|
||||||
|
|
||||||
def on_app_running(self) -> None:
|
def on_app_running(self) -> None:
|
||||||
"""Called when initially entering the running state."""
|
"""Called when initially entering the running state."""
|
||||||
|
|
||||||
|
|
@ -481,6 +493,13 @@ class App:
|
||||||
# from ba._dependency import test_depset
|
# from ba._dependency import test_depset
|
||||||
# test_depset()
|
# test_depset()
|
||||||
|
|
||||||
|
def on_bootstrapping_completed(self) -> None:
|
||||||
|
"""Called by the C++ layer once its ready to rock."""
|
||||||
|
assert _ba.in_logic_thread()
|
||||||
|
assert not self._bootstrapping_completed
|
||||||
|
self._bootstrapping_completed = True
|
||||||
|
self._update_state()
|
||||||
|
|
||||||
def on_meta_scan_complete(self) -> None:
|
def on_meta_scan_complete(self) -> None:
|
||||||
"""Called by meta-scan when it is done doing its thing."""
|
"""Called by meta-scan when it is done doing its thing."""
|
||||||
assert _ba.in_logic_thread()
|
assert _ba.in_logic_thread()
|
||||||
|
|
@ -511,15 +530,25 @@ class App:
|
||||||
self.plugins.on_app_resume()
|
self.plugins.on_app_resume()
|
||||||
self.health_monitor.on_app_resume()
|
self.health_monitor.on_app_resume()
|
||||||
|
|
||||||
if self._initial_login_completed and self._meta_scan_completed:
|
# Handle initially entering or returning to other states.
|
||||||
|
if self._initial_sign_in_completed and self._meta_scan_completed:
|
||||||
self.state = self.State.RUNNING
|
self.state = self.State.RUNNING
|
||||||
if not self._called_on_app_running:
|
if not self._called_on_app_running:
|
||||||
self._called_on_app_running = True
|
self._called_on_app_running = True
|
||||||
self.on_app_running()
|
self.on_app_running()
|
||||||
elif self._launch_completed:
|
elif self._launch_completed:
|
||||||
self.state = self.State.LOADING
|
self.state = self.State.LOADING
|
||||||
|
if not self._called_on_app_loading:
|
||||||
|
self._called_on_app_loading = True
|
||||||
|
self.on_app_loading()
|
||||||
else:
|
else:
|
||||||
|
# Only thing left is launching. We shouldn't be getting
|
||||||
|
# called before at least that is complete.
|
||||||
|
assert self._bootstrapping_completed
|
||||||
self.state = self.State.LAUNCHING
|
self.state = self.State.LAUNCHING
|
||||||
|
if not self._called_on_app_launching:
|
||||||
|
self._called_on_app_launching = True
|
||||||
|
self.on_app_launching()
|
||||||
|
|
||||||
def on_app_pause(self) -> None:
|
def on_app_pause(self) -> None:
|
||||||
"""Called when the app goes to a suspended state."""
|
"""Called when the app goes to a suspended state."""
|
||||||
|
|
@ -724,8 +753,8 @@ class App:
|
||||||
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
|
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
|
||||||
_ba.playsound(_ba.getsound('error'))
|
_ba.playsound(_ba.getsound('error'))
|
||||||
|
|
||||||
def on_initial_login_completed(self) -> None:
|
def on_initial_sign_in_completed(self) -> None:
|
||||||
"""Callback to be run after initial login process (or lack thereof).
|
"""Callback to be run after initial sign-in (or lack thereof).
|
||||||
|
|
||||||
This period includes things such as syncing account workspaces
|
This period includes things such as syncing account workspaces
|
||||||
or other data so it may take a substantial amount of time.
|
or other data so it may take a substantial amount of time.
|
||||||
|
|
@ -736,5 +765,5 @@ class App:
|
||||||
# (account workspaces).
|
# (account workspaces).
|
||||||
self.meta.start_extra_scan()
|
self.meta.start_extra_scan()
|
||||||
|
|
||||||
self._initial_login_completed = True
|
self._initial_sign_in_completed = True
|
||||||
self._update_state()
|
self._update_state()
|
||||||
|
|
|
||||||
90
dist/ba_data/python/ba/_appcomponent.py
vendored
Normal file
90
dist/ba_data/python/ba/_appcomponent.py
vendored
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Provides the AppComponent class."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING, TypeVar, cast
|
||||||
|
|
||||||
|
import _ba
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from typing import Callable, Any
|
||||||
|
|
||||||
|
T = TypeVar('T', bound=type)
|
||||||
|
|
||||||
|
|
||||||
|
class AppComponentSubsystem:
|
||||||
|
"""Subsystem for wrangling AppComponents.
|
||||||
|
|
||||||
|
Category: **App Classes**
|
||||||
|
|
||||||
|
This subsystem acts as a registry for classes providing particular
|
||||||
|
functionality for the app, and allows plugins or other custom code to
|
||||||
|
easily override said functionality.
|
||||||
|
|
||||||
|
Use ba.app.components to get the single shared instance of this class.
|
||||||
|
|
||||||
|
The general idea with this setup is that a base-class is defined to
|
||||||
|
provide some functionality and then anyone wanting that functionality
|
||||||
|
uses the getclass() method with that base class to return the current
|
||||||
|
registered implementation. The user should not know or care whether
|
||||||
|
they are getting the base class itself or some other implementation.
|
||||||
|
|
||||||
|
Change-callbacks can also be requested for base classes which will
|
||||||
|
fire in a deferred manner when particular base-classes are overridden.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._implementations: dict[type, type] = {}
|
||||||
|
self._prev_implementations: dict[type, type] = {}
|
||||||
|
self._dirty_base_classes: set[type] = set()
|
||||||
|
self._change_callbacks: dict[type, list[Callable[[Any], None]]] = {}
|
||||||
|
|
||||||
|
def setclass(self, baseclass: type, implementation: type) -> None:
|
||||||
|
"""Set the class providing an implementation of some base-class.
|
||||||
|
|
||||||
|
The provided implementation class must be a subclass of baseclass.
|
||||||
|
"""
|
||||||
|
# Currently limiting this to logic-thread use; can revisit if needed
|
||||||
|
# (would need to guard access to our implementations dict).
|
||||||
|
assert _ba.in_logic_thread()
|
||||||
|
|
||||||
|
if not issubclass(implementation, baseclass):
|
||||||
|
raise TypeError(
|
||||||
|
f'Implementation {implementation}'
|
||||||
|
f' is not a subclass of baseclass {baseclass}.'
|
||||||
|
)
|
||||||
|
|
||||||
|
self._implementations[baseclass] = implementation
|
||||||
|
|
||||||
|
# If we're the first thing getting dirtied, set up a callback to
|
||||||
|
# clean everything. And add ourself to the dirty list regardless.
|
||||||
|
if not self._dirty_base_classes:
|
||||||
|
_ba.pushcall(self._run_change_callbacks)
|
||||||
|
self._dirty_base_classes.add(baseclass)
|
||||||
|
|
||||||
|
def getclass(self, baseclass: T) -> T:
|
||||||
|
"""Given a base-class, return the currently set implementation class.
|
||||||
|
|
||||||
|
If no custom implementation has been set, the provided base-class
|
||||||
|
is returned.
|
||||||
|
"""
|
||||||
|
assert _ba.in_logic_thread()
|
||||||
|
|
||||||
|
del baseclass # Unused.
|
||||||
|
return cast(T, None)
|
||||||
|
|
||||||
|
def register_change_callback(
|
||||||
|
self, baseclass: T, callback: Callable[[T], None]
|
||||||
|
) -> None:
|
||||||
|
"""Register a callback to fire when a class implementation changes.
|
||||||
|
|
||||||
|
The callback will be scheduled to run in the logic thread event
|
||||||
|
loop. Note that any further setclass calls before the callback
|
||||||
|
runs will not result in additional callbacks.
|
||||||
|
"""
|
||||||
|
assert _ba.in_logic_thread()
|
||||||
|
self._change_callbacks.setdefault(baseclass, []).append(callback)
|
||||||
|
|
||||||
|
def _run_change_callbacks(self) -> None:
|
||||||
|
pass
|
||||||
35
dist/ba_data/python/ba/_apputils.py
vendored
35
dist/ba_data/python/ba/_apputils.py
vendored
|
|
@ -476,35 +476,18 @@ def on_too_many_file_descriptors() -> None:
|
||||||
real_time = _ba.time(TimeType.REAL)
|
real_time = _ba.time(TimeType.REAL)
|
||||||
|
|
||||||
def _do_log() -> None:
|
def _do_log() -> None:
|
||||||
import subprocess
|
|
||||||
|
|
||||||
pid = os.getpid()
|
pid = os.getpid()
|
||||||
out = f'TOO MANY FDS at {real_time}.\nWe are pid {pid}\n'
|
try:
|
||||||
|
fdcount: int | str = len(os.listdir(f'/proc/{pid}/fd'))
|
||||||
out += (
|
except Exception as exc:
|
||||||
'FD Count: '
|
fdcount = f'? ({exc})'
|
||||||
+ subprocess.run(
|
logging.warning(
|
||||||
f'ls -l /proc/{pid}/fd | wc -l',
|
'TOO MANY FDS at %.2f. We are pid %d. FDCount is %s.',
|
||||||
shell=True,
|
real_time,
|
||||||
check=False,
|
pid,
|
||||||
capture_output=True,
|
fdcount,
|
||||||
).stdout.decode()
|
|
||||||
+ '\n'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
out += (
|
|
||||||
'lsof output:\n'
|
|
||||||
+ subprocess.run(
|
|
||||||
f'lsof -p {pid}',
|
|
||||||
shell=True,
|
|
||||||
check=False,
|
|
||||||
capture_output=True,
|
|
||||||
).stdout.decode()
|
|
||||||
+ '\n'
|
|
||||||
)
|
|
||||||
|
|
||||||
logging.warning(out)
|
|
||||||
|
|
||||||
Thread(target=_do_log, daemon=True).start()
|
Thread(target=_do_log, daemon=True).start()
|
||||||
|
|
||||||
# import io
|
# import io
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_bootstrap.py
vendored
2
dist/ba_data/python/ba/_bootstrap.py
vendored
|
|
@ -47,7 +47,7 @@ def bootstrap() -> None:
|
||||||
|
|
||||||
# Give a soft warning if we're being used with a different binary
|
# Give a soft warning if we're being used with a different binary
|
||||||
# version than we expect.
|
# version than we expect.
|
||||||
expected_build = 20982
|
expected_build = 21005
|
||||||
running_build: int = env['build_number']
|
running_build: int = env['build_number']
|
||||||
if running_build != expected_build:
|
if running_build != expected_build:
|
||||||
print(
|
print(
|
||||||
|
|
|
||||||
7
dist/ba_data/python/ba/_error.py
vendored
7
dist/ba_data/python/ba/_error.py
vendored
|
|
@ -69,6 +69,13 @@ class TeamNotFoundError(NotFoundError):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class MapNotFoundError(NotFoundError):
|
||||||
|
"""Exception raised when an expected ba.Map does not exist.
|
||||||
|
|
||||||
|
Category: **Exception Classes**
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class DelegateNotFoundError(NotFoundError):
|
class DelegateNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected delegate object does not exist.
|
"""Exception raised when an expected delegate object does not exist.
|
||||||
|
|
||||||
|
|
|
||||||
6
dist/ba_data/python/ba/_gameactivity.py
vendored
6
dist/ba_data/python/ba/_gameactivity.py
vendored
|
|
@ -14,7 +14,7 @@ from ba._activity import Activity
|
||||||
from ba._score import ScoreConfig
|
from ba._score import ScoreConfig
|
||||||
from ba._language import Lstr
|
from ba._language import Lstr
|
||||||
from ba._messages import PlayerDiedMessage, StandMessage
|
from ba._messages import PlayerDiedMessage, StandMessage
|
||||||
from ba._error import NotFoundError, print_error, print_exception
|
from ba._error import MapNotFoundError, print_error, print_exception
|
||||||
from ba._general import Call, WeakCall
|
from ba._general import Call, WeakCall
|
||||||
from ba._player import PlayerInfo
|
from ba._player import PlayerInfo
|
||||||
from ba import _map
|
from ba import _map
|
||||||
|
|
@ -274,10 +274,10 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
def map(self) -> ba.Map:
|
def map(self) -> ba.Map:
|
||||||
"""The map being used for this game.
|
"""The map being used for this game.
|
||||||
|
|
||||||
Raises a ba.NotFoundError if the map does not currently exist.
|
Raises a ba.MapNotFoundError if the map does not currently exist.
|
||||||
"""
|
"""
|
||||||
if self._map is None:
|
if self._map is None:
|
||||||
raise NotFoundError
|
raise MapNotFoundError
|
||||||
return self._map
|
return self._map
|
||||||
|
|
||||||
def get_instance_display_string(self) -> ba.Lstr:
|
def get_instance_display_string(self) -> ba.Lstr:
|
||||||
|
|
|
||||||
52
dist/ba_data/python/ba/_hooks.py
vendored
52
dist/ba_data/python/ba/_hooks.py
vendored
|
|
@ -1,13 +1,13 @@
|
||||||
# Released under the MIT License. See LICENSE for details.
|
# Released under the MIT License. See LICENSE for details.
|
||||||
#
|
#
|
||||||
"""Snippets of code for use by the internal C++ layer.
|
"""Snippets of code for use by the internal layer.
|
||||||
|
|
||||||
History: originally I would dynamically compile/eval bits of Python text
|
History: originally the engine would dynamically compile/eval various Python
|
||||||
from within C++ code, but the major downside there was that none of that was
|
code from within C++ code, but the major downside there was that none of it
|
||||||
type-checked so if names or arguments changed I would never catch code breakage
|
was type-checked so if names or arguments changed it would go unnoticed
|
||||||
until the code was next run. By defining all snippets I use here and then
|
until it broke at runtime. By instead defining such snippets here and then
|
||||||
capturing references to them all at launch I can immediately verify everything
|
capturing references to them all at launch it is possible to allow linting
|
||||||
I'm looking for exists and pylint/mypy can do their magic on this file.
|
and type-checking magic to happen and most issues will be caught immediately.
|
||||||
"""
|
"""
|
||||||
# (most of these are self-explanatory)
|
# (most of these are self-explanatory)
|
||||||
# pylint: disable=missing-function-docstring
|
# pylint: disable=missing-function-docstring
|
||||||
|
|
@ -27,12 +27,8 @@ def finish_bootstrapping() -> None:
|
||||||
"""Do final bootstrapping related bits."""
|
"""Do final bootstrapping related bits."""
|
||||||
assert _ba.in_logic_thread()
|
assert _ba.in_logic_thread()
|
||||||
|
|
||||||
# Kick off our asyncio event handling, allowing us to use coroutines
|
# Ok, low level bootstrapping is done; time to get Python stuff started.
|
||||||
# in our logic thread alongside our internal event handling.
|
_ba.app.on_bootstrapping_completed()
|
||||||
# setup_asyncio()
|
|
||||||
|
|
||||||
# Ok, bootstrapping is done; time to get the show started.
|
|
||||||
_ba.app.on_app_launch()
|
|
||||||
|
|
||||||
|
|
||||||
def reset_to_main_menu() -> None:
|
def reset_to_main_menu() -> None:
|
||||||
|
|
@ -495,3 +491,33 @@ def login_adapter_get_sign_in_token_response(
|
||||||
adapter = _ba.app.accounts_v2.login_adapters[login_type]
|
adapter = _ba.app.accounts_v2.login_adapters[login_type]
|
||||||
assert isinstance(adapter, LoginAdapterNative)
|
assert isinstance(adapter, LoginAdapterNative)
|
||||||
adapter.on_sign_in_complete(attempt_id=attempt_id, result=result)
|
adapter.on_sign_in_complete(attempt_id=attempt_id, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def show_client_too_old_error() -> None:
|
||||||
|
"""Called at launch if the server tells us we're too old to talk to it."""
|
||||||
|
from ba._language import Lstr
|
||||||
|
|
||||||
|
# If you are using an old build of the app and would like to stop
|
||||||
|
# seeing this error at launch, do:
|
||||||
|
# ba.app.config['SuppressClientTooOldErrorForBuild'] = ba.app.build_number
|
||||||
|
# ba.app.config.commit()
|
||||||
|
# Note that you will have to do that again later if you update to
|
||||||
|
# a newer build.
|
||||||
|
if (
|
||||||
|
_ba.app.config.get('SuppressClientTooOldErrorForBuild')
|
||||||
|
== _ba.app.build_number
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
_ba.playsound(_ba.getsound('error'))
|
||||||
|
_ba.screenmessage(
|
||||||
|
Lstr(
|
||||||
|
translate=(
|
||||||
|
'serverResponses',
|
||||||
|
'Server functionality is no longer supported'
|
||||||
|
' in this version of the game;\n'
|
||||||
|
'Please update to a newer version.',
|
||||||
|
)
|
||||||
|
),
|
||||||
|
color=(1, 0, 0),
|
||||||
|
)
|
||||||
|
|
|
||||||
44
dist/ba_data/python/ba/_login.py
vendored
44
dist/ba_data/python/ba/_login.py
vendored
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import time
|
||||||
import logging
|
import logging
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import TYPE_CHECKING, final
|
from typing import TYPE_CHECKING, final
|
||||||
|
|
@ -57,6 +58,9 @@ class LoginAdapter:
|
||||||
# current active primary account.
|
# current active primary account.
|
||||||
self._active_login_id: str | None = None
|
self._active_login_id: str | None = None
|
||||||
|
|
||||||
|
self._last_sign_in_time: float | None = None
|
||||||
|
self._last_sign_in_desc: str | None = None
|
||||||
|
|
||||||
def on_app_launch(self) -> None:
|
def on_app_launch(self) -> None:
|
||||||
"""Should be called for each adapter in on_app_launch."""
|
"""Should be called for each adapter in on_app_launch."""
|
||||||
|
|
||||||
|
|
@ -142,6 +146,7 @@ class LoginAdapter:
|
||||||
def sign_in(
|
def sign_in(
|
||||||
self,
|
self,
|
||||||
result_cb: Callable[[LoginAdapter, SignInResult | Exception], None],
|
result_cb: Callable[[LoginAdapter, SignInResult | Exception], None],
|
||||||
|
description: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Attempt an explicit sign in via this adapter.
|
"""Attempt an explicit sign in via this adapter.
|
||||||
|
|
||||||
|
|
@ -151,6 +156,38 @@ class LoginAdapter:
|
||||||
"""
|
"""
|
||||||
assert _ba.in_logic_thread()
|
assert _ba.in_logic_thread()
|
||||||
from ba._general import Call
|
from ba._general import Call
|
||||||
|
from ba._generated.enums import TimeType
|
||||||
|
|
||||||
|
# Have been seeing multiple sign-in attempts come through
|
||||||
|
# nearly simultaneously which can be problematic server-side.
|
||||||
|
# Let's error if a sign-in attempt is made within a few seconds
|
||||||
|
# of the last one to address this.
|
||||||
|
now = time.monotonic()
|
||||||
|
appnow = _ba.time(TimeType.REAL)
|
||||||
|
if self._last_sign_in_time is not None:
|
||||||
|
since_last = now - self._last_sign_in_time
|
||||||
|
if since_last < 1.0:
|
||||||
|
logging.warning(
|
||||||
|
'LoginAdapter: %s adapter sign_in() called too soon'
|
||||||
|
' (%.2fs) after last; this-desc="%s", last-desc="%s",'
|
||||||
|
' ba-real-time=%.2f.',
|
||||||
|
self.login_type.name,
|
||||||
|
since_last,
|
||||||
|
description,
|
||||||
|
self._last_sign_in_desc,
|
||||||
|
appnow,
|
||||||
|
)
|
||||||
|
_ba.pushcall(
|
||||||
|
Call(
|
||||||
|
result_cb,
|
||||||
|
self,
|
||||||
|
RuntimeError('sign_in called too soon after last.'),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
self._last_sign_in_desc = description
|
||||||
|
self._last_sign_in_time = now
|
||||||
|
|
||||||
if DEBUG_LOG:
|
if DEBUG_LOG:
|
||||||
logging.debug(
|
logging.debug(
|
||||||
|
|
@ -223,7 +260,12 @@ class LoginAdapter:
|
||||||
_ba.pushcall(Call(result_cb, self, result2))
|
_ba.pushcall(Call(result_cb, self, result2))
|
||||||
|
|
||||||
_ba.app.cloud.send_message_cb(
|
_ba.app.cloud.send_message_cb(
|
||||||
bacommon.cloud.SignInMessage(self.login_type, result),
|
bacommon.cloud.SignInMessage(
|
||||||
|
self.login_type,
|
||||||
|
result,
|
||||||
|
description=description,
|
||||||
|
apptime=appnow,
|
||||||
|
),
|
||||||
on_response=_got_sign_in_response,
|
on_response=_got_sign_in_response,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
16
dist/ba_data/python/ba/_playlist.py
vendored
16
dist/ba_data/python/ba/_playlist.py
vendored
|
|
@ -9,6 +9,8 @@ import copy
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, TYPE_CHECKING
|
from typing import Any, TYPE_CHECKING
|
||||||
|
|
||||||
|
import _ba
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from ba import _session
|
from ba import _session
|
||||||
|
|
@ -34,6 +36,7 @@ def filter_playlist(
|
||||||
# pylint: disable=too-many-branches
|
# pylint: disable=too-many-branches
|
||||||
# pylint: disable=too-many-statements
|
# pylint: disable=too-many-statements
|
||||||
from ba._map import get_filtered_map_name
|
from ba._map import get_filtered_map_name
|
||||||
|
from ba._error import MapNotFoundError
|
||||||
from ba._store import get_unowned_maps, get_unowned_game_types
|
from ba._store import get_unowned_maps, get_unowned_game_types
|
||||||
from ba._general import getclass
|
from ba._general import getclass
|
||||||
from ba._gameactivity import GameActivity
|
from ba._gameactivity import GameActivity
|
||||||
|
|
@ -160,7 +163,7 @@ def filter_playlist(
|
||||||
gameclass = getclass(entry['type'], GameActivity)
|
gameclass = getclass(entry['type'], GameActivity)
|
||||||
|
|
||||||
if entry['settings']['map'] not in available_maps:
|
if entry['settings']['map'] not in available_maps:
|
||||||
raise ImportError(f"Map not found: '{entry['settings']['map']}'")
|
raise MapNotFoundError()
|
||||||
|
|
||||||
if remove_unowned and gameclass in unowned_game_types:
|
if remove_unowned and gameclass in unowned_game_types:
|
||||||
continue
|
continue
|
||||||
|
|
@ -176,15 +179,22 @@ def filter_playlist(
|
||||||
for setting in neededsettings:
|
for setting in neededsettings:
|
||||||
if setting.name not in entry['settings']:
|
if setting.name not in entry['settings']:
|
||||||
entry['settings'][setting.name] = setting.default
|
entry['settings'][setting.name] = setting.default
|
||||||
|
|
||||||
goodlist.append(entry)
|
goodlist.append(entry)
|
||||||
|
|
||||||
|
except MapNotFoundError:
|
||||||
|
logging.warning(
|
||||||
|
'Map \'%s\' not found while scanning playlist \'%s\'.',
|
||||||
|
name,
|
||||||
|
entry['settings']['map'],
|
||||||
|
)
|
||||||
except ImportError as exc:
|
except ImportError as exc:
|
||||||
logging.warning(
|
logging.warning(
|
||||||
'Import failed while scanning playlist \'%s\': %s', name, exc
|
'Import failed while scanning playlist \'%s\': %s', name, exc
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
from ba import _error
|
logging.exception('Error in filter_playlist.')
|
||||||
|
|
||||||
_error.print_exception()
|
|
||||||
return goodlist
|
return goodlist
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
10
dist/ba_data/python/ba/_plugin.py
vendored
10
dist/ba_data/python/ba/_plugin.py
vendored
|
|
@ -22,6 +22,9 @@ class PluginSubsystem:
|
||||||
Access the single shared instance of this class at `ba.app.plugins`.
|
Access the single shared instance of this class at `ba.app.plugins`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY = 'Auto Enable New Plugins'
|
||||||
|
AUTO_ENABLE_NEW_PLUGINS_DEFAULT = True
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.potential_plugins: list[ba.PotentialPlugin] = []
|
self.potential_plugins: list[ba.PotentialPlugin] = []
|
||||||
self.active_plugins: dict[str, ba.Plugin] = {}
|
self.active_plugins: dict[str, ba.Plugin] = {}
|
||||||
|
|
@ -48,6 +51,13 @@ class PluginSubsystem:
|
||||||
available=True,
|
available=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
if (
|
||||||
|
_ba.app.config.get(
|
||||||
|
self.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY,
|
||||||
|
self.AUTO_ENABLE_NEW_PLUGINS_DEFAULT,
|
||||||
|
)
|
||||||
|
is True
|
||||||
|
):
|
||||||
if class_path not in plugstates:
|
if class_path not in plugstates:
|
||||||
# Go ahead and enable new plugins by default, but we'll
|
# Go ahead and enable new plugins by default, but we'll
|
||||||
# inform the user that they need to restart to pick them up.
|
# inform the user that they need to restart to pick them up.
|
||||||
|
|
|
||||||
5
dist/ba_data/python/ba/macmusicapp.py
vendored
5
dist/ba_data/python/ba/macmusicapp.py
vendored
|
|
@ -4,6 +4,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
from collections import deque
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import _ba
|
import _ba
|
||||||
|
|
@ -68,7 +69,7 @@ class _MacMusicAppThread(threading.Thread):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._commands_available = threading.Event()
|
self._commands_available = threading.Event()
|
||||||
self._commands: list[list] = []
|
self._commands = deque[list]()
|
||||||
self._volume = 1.0
|
self._volume = 1.0
|
||||||
self._current_playlist: str | None = None
|
self._current_playlist: str | None = None
|
||||||
self._orig_volume: int | None = None
|
self._orig_volume: int | None = None
|
||||||
|
|
@ -109,7 +110,7 @@ class _MacMusicAppThread(threading.Thread):
|
||||||
# We're not protecting this list with a mutex but we're
|
# We're not protecting this list with a mutex but we're
|
||||||
# just using it as a simple queue so it should be fine.
|
# just using it as a simple queue so it should be fine.
|
||||||
while self._commands:
|
while self._commands:
|
||||||
cmd = self._commands.pop(0)
|
cmd = self._commands.popleft()
|
||||||
if cmd[0] == 'DIE':
|
if cmd[0] == 'DIE':
|
||||||
self._handle_die_command()
|
self._handle_die_command()
|
||||||
done = True
|
done = True
|
||||||
|
|
|
||||||
4
dist/ba_data/python/bacommon/cloud.py
vendored
4
dist/ba_data/python/bacommon/cloud.py
vendored
|
|
@ -183,6 +183,10 @@ class SignInMessage(Message):
|
||||||
login_type: Annotated[LoginType, IOAttrs('l')]
|
login_type: Annotated[LoginType, IOAttrs('l')]
|
||||||
sign_in_token: Annotated[str, IOAttrs('t')]
|
sign_in_token: Annotated[str, IOAttrs('t')]
|
||||||
|
|
||||||
|
# For debugging. Can remove soft_default once build 20988+ is ubiquitous.
|
||||||
|
description: Annotated[str, IOAttrs('d', soft_default='-')]
|
||||||
|
apptime: Annotated[float, IOAttrs('at', soft_default=-1.0)]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_response_types(cls) -> list[type[Response] | None]:
|
def get_response_types(cls) -> list[type[Response] | None]:
|
||||||
return [SignInResponse]
|
return [SignInResponse]
|
||||||
|
|
|
||||||
11
dist/ba_data/python/bastd/actor/spaz.py
vendored
11
dist/ba_data/python/bastd/actor/spaz.py
vendored
|
|
@ -88,12 +88,12 @@ class Spaz(ba.Actor):
|
||||||
|
|
||||||
self.play_big_death_sound = False
|
self.play_big_death_sound = False
|
||||||
|
|
||||||
# scales how much impacts affect us (most damage calcs)
|
# Scales how much impacts affect us (most damage calcs).
|
||||||
self.impact_scale = 1.0
|
self.impact_scale = 1.0
|
||||||
|
|
||||||
self.source_player = source_player
|
self.source_player = source_player
|
||||||
self._dead = False
|
self._dead = False
|
||||||
if self._demo_mode: # preserve old behavior
|
if self._demo_mode: # Preserve old behavior.
|
||||||
self._punch_power_scale = 1.2
|
self._punch_power_scale = 1.2
|
||||||
else:
|
else:
|
||||||
self._punch_power_scale = factory.punch_power_scale
|
self._punch_power_scale = factory.punch_power_scale
|
||||||
|
|
@ -180,6 +180,7 @@ class Spaz(ba.Actor):
|
||||||
self._bomb_wear_off_flash_timer: ba.Timer | None = None
|
self._bomb_wear_off_flash_timer: ba.Timer | None = None
|
||||||
self._multi_bomb_wear_off_timer: ba.Timer | None = None
|
self._multi_bomb_wear_off_timer: ba.Timer | None = None
|
||||||
self._multi_bomb_wear_off_flash_timer: ba.Timer | None = None
|
self._multi_bomb_wear_off_flash_timer: ba.Timer | None = None
|
||||||
|
self._curse_timer: ba.Timer | None = None
|
||||||
self.bomb_count = self.default_bomb_count
|
self.bomb_count = self.default_bomb_count
|
||||||
self._max_bomb_count = self.default_bomb_count
|
self._max_bomb_count = self.default_bomb_count
|
||||||
self.bomb_type_default = self.default_bomb_type
|
self.bomb_type_default = self.default_bomb_type
|
||||||
|
|
@ -262,7 +263,7 @@ class Spaz(ba.Actor):
|
||||||
def _turbo_filter_add_press(self, source: str) -> None:
|
def _turbo_filter_add_press(self, source: str) -> None:
|
||||||
"""
|
"""
|
||||||
Can pass all button presses through here; if we see an obscene number
|
Can pass all button presses through here; if we see an obscene number
|
||||||
of them in a short time let's shame/pushish this guy for using turbo
|
of them in a short time let's shame/pushish this guy for using turbo.
|
||||||
"""
|
"""
|
||||||
t_ms = ba.time(
|
t_ms = ba.time(
|
||||||
timetype=ba.TimeType.BASE, timeformat=ba.TimeFormat.MILLISECONDS
|
timetype=ba.TimeType.BASE, timeformat=ba.TimeFormat.MILLISECONDS
|
||||||
|
|
@ -620,7 +621,9 @@ class Spaz(ba.Actor):
|
||||||
self.node.curse_death_time = int(
|
self.node.curse_death_time = int(
|
||||||
1000.0 * (tval + self.curse_time)
|
1000.0 * (tval + self.curse_time)
|
||||||
)
|
)
|
||||||
ba.timer(5.0, ba.WeakCall(self.curse_explode))
|
self._curse_timer = ba.Timer(
|
||||||
|
5.0, ba.WeakCall(self.curse_explode)
|
||||||
|
)
|
||||||
|
|
||||||
def equip_boxing_gloves(self) -> None:
|
def equip_boxing_gloves(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
2
dist/ba_data/python/bastd/mainmenu.py
vendored
2
dist/ba_data/python/bastd/mainmenu.py
vendored
|
|
@ -63,7 +63,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]):
|
||||||
'scale': scale,
|
'scale': scale,
|
||||||
'position': (0, 10),
|
'position': (0, 10),
|
||||||
'vr_depth': -10,
|
'vr_depth': -10,
|
||||||
'text': '\xa9 2011-2022 Eric Froemling',
|
'text': '\xa9 2011-2023 Eric Froemling',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
57
dist/ba_data/python/bastd/tutorial.py
vendored
57
dist/ba_data/python/bastd/tutorial.py
vendored
|
|
@ -16,6 +16,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import math
|
import math
|
||||||
|
from collections import deque
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import ba
|
import ba
|
||||||
|
|
@ -235,7 +236,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
self.control_ui_nodes: list[ba.Node] = []
|
self.control_ui_nodes: list[ba.Node] = []
|
||||||
self.spazzes: dict[int, basespaz.Spaz] = {}
|
self.spazzes: dict[int, basespaz.Spaz] = {}
|
||||||
self.jump_image_color = (1.0, 1.0, 1.0)
|
self.jump_image_color = (1.0, 1.0, 1.0)
|
||||||
self._entries: list[Any] = []
|
self._entries: deque[Any] = deque()
|
||||||
self._read_entries_timer: ba.Timer | None = None
|
self._read_entries_timer: ba.Timer | None = None
|
||||||
self._entry_timer: ba.Timer | None = None
|
self._entry_timer: ba.Timer | None = None
|
||||||
|
|
||||||
|
|
@ -856,18 +857,23 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
'invalid celebrate type ' + self._celebrate_type
|
'invalid celebrate type ' + self._celebrate_type
|
||||||
)
|
)
|
||||||
|
|
||||||
self._entries = [
|
self._entries = deque(
|
||||||
|
[
|
||||||
Reset(),
|
Reset(),
|
||||||
SpawnSpaz(0, (0, 5.5, -3.0), make_current=True),
|
SpawnSpaz(0, (0, 5.5, -3.0), make_current=True),
|
||||||
DelayOld(1000),
|
DelayOld(1000),
|
||||||
AnalyticsScreen('Tutorial Section 1'),
|
AnalyticsScreen('Tutorial Section 1'),
|
||||||
Text(ba.Lstr(resource=self._r + '.phrase01Text')), # hi there
|
Text(
|
||||||
|
ba.Lstr(resource=self._r + '.phrase01Text')
|
||||||
|
), # hi there
|
||||||
Celebrate('left'),
|
Celebrate('left'),
|
||||||
DelayOld(2000),
|
DelayOld(2000),
|
||||||
Text(
|
Text(
|
||||||
ba.Lstr(
|
ba.Lstr(
|
||||||
resource=self._r + '.phrase02Text',
|
resource=self._r + '.phrase02Text',
|
||||||
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
subs=[
|
||||||
|
('${APP_NAME}', ba.Lstr(resource='titleText'))
|
||||||
|
],
|
||||||
)
|
)
|
||||||
), # welcome to <appname>
|
), # welcome to <appname>
|
||||||
DelayOld(80),
|
DelayOld(80),
|
||||||
|
|
@ -907,7 +913,9 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
Text(
|
Text(
|
||||||
ba.Lstr(
|
ba.Lstr(
|
||||||
resource=self._r + '.phrase04Text',
|
resource=self._r + '.phrase04Text',
|
||||||
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
subs=[
|
||||||
|
('${APP_NAME}', ba.Lstr(resource='titleText'))
|
||||||
|
],
|
||||||
)
|
)
|
||||||
), # many things are based on physics
|
), # many things are based on physics
|
||||||
DelayOld(20),
|
DelayOld(20),
|
||||||
|
|
@ -1312,7 +1320,9 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
subs=[
|
subs=[
|
||||||
(
|
(
|
||||||
'${NAME}',
|
'${NAME}',
|
||||||
ba.Lstr(resource=self._r + '.randomName1Text'),
|
ba.Lstr(
|
||||||
|
resource=self._r + '.randomName1Text'
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
@ -1530,7 +1540,9 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
ba.Lstr(resource=self._r + '.phrase10Text')
|
ba.Lstr(resource=self._r + '.phrase10Text')
|
||||||
), # running also helps
|
), # running also helps
|
||||||
DelayOld(100),
|
DelayOld(100),
|
||||||
SpawnSpaz(0, (-3.2, 4.3, -4.4), make_current=True, flash=False),
|
SpawnSpaz(
|
||||||
|
0, (-3.2, 4.3, -4.4), make_current=True, flash=False
|
||||||
|
),
|
||||||
SpawnSpaz(
|
SpawnSpaz(
|
||||||
1,
|
1,
|
||||||
(3.3, 4.2, -5.8),
|
(3.3, 4.2, -5.8),
|
||||||
|
|
@ -1802,7 +1814,11 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
DelayOld(200),
|
DelayOld(200),
|
||||||
SpawnSpaz(
|
SpawnSpaz(
|
||||||
0,
|
0,
|
||||||
(2.368781805038452, 4.337533950805664, -4.360159873962402),
|
(
|
||||||
|
2.368781805038452,
|
||||||
|
4.337533950805664,
|
||||||
|
-4.360159873962402,
|
||||||
|
),
|
||||||
make_current=True,
|
make_current=True,
|
||||||
flash=False,
|
flash=False,
|
||||||
),
|
),
|
||||||
|
|
@ -2015,7 +2031,9 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
subs=[
|
subs=[
|
||||||
(
|
(
|
||||||
'${NAME}',
|
'${NAME}',
|
||||||
ba.Lstr(resource=self._r + '.randomName3Text'),
|
ba.Lstr(
|
||||||
|
resource=self._r + '.randomName3Text'
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
@ -2029,7 +2047,9 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
subs=[
|
subs=[
|
||||||
(
|
(
|
||||||
'${NAME}',
|
'${NAME}',
|
||||||
ba.Lstr(resource=self._r + '.randomName4Text'),
|
ba.Lstr(
|
||||||
|
resource=self._r + '.randomName4Text'
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
@ -2067,7 +2087,11 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
Move(0, 0),
|
Move(0, 0),
|
||||||
DelayOld(800),
|
DelayOld(800),
|
||||||
SpawnSpaz(
|
SpawnSpaz(
|
||||||
0, (1.5, 4.3, -4.0), make_current=True, flash=False, angle=0
|
0,
|
||||||
|
(1.5, 4.3, -4.0),
|
||||||
|
make_current=True,
|
||||||
|
flash=False,
|
||||||
|
angle=0,
|
||||||
),
|
),
|
||||||
AnalyticsScreen('Tutorial Section 6'),
|
AnalyticsScreen('Tutorial Section 6'),
|
||||||
Text(
|
Text(
|
||||||
|
|
@ -2375,14 +2399,19 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
ba.Lstr(resource=self._r + '.phrase27Text')
|
ba.Lstr(resource=self._r + '.phrase27Text')
|
||||||
), # remember you training
|
), # remember you training
|
||||||
DelayOld(3000),
|
DelayOld(3000),
|
||||||
Text(ba.Lstr(resource=self._r + '.phrase28Text')), # well maybe
|
Text(
|
||||||
|
ba.Lstr(resource=self._r + '.phrase28Text')
|
||||||
|
), # well maybe
|
||||||
DelayOld(1600),
|
DelayOld(1600),
|
||||||
Text(ba.Lstr(resource=self._r + '.phrase29Text')), # good luck
|
Text(
|
||||||
|
ba.Lstr(resource=self._r + '.phrase29Text')
|
||||||
|
), # good luck
|
||||||
Celebrate('right', duration=10000),
|
Celebrate('right', duration=10000),
|
||||||
DelayOld(1000),
|
DelayOld(1000),
|
||||||
AnalyticsScreen('Tutorial Complete'),
|
AnalyticsScreen('Tutorial Complete'),
|
||||||
End(),
|
End(),
|
||||||
]
|
]
|
||||||
|
)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
ba.print_exception()
|
ba.print_exception()
|
||||||
|
|
@ -2399,7 +2428,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
|
||||||
def _run_next_entry(self) -> None:
|
def _run_next_entry(self) -> None:
|
||||||
|
|
||||||
while self._entries:
|
while self._entries:
|
||||||
entry = self._entries.pop(0)
|
entry = self._entries.popleft()
|
||||||
try:
|
try:
|
||||||
result = entry.run(self)
|
result = entry.run(self)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
||||||
|
|
@ -1403,7 +1403,8 @@ class AccountSettingsWindow(ba.Window):
|
||||||
if adapter is not None:
|
if adapter is not None:
|
||||||
self._signing_in_adapter = adapter
|
self._signing_in_adapter = adapter
|
||||||
adapter.sign_in(
|
adapter.sign_in(
|
||||||
result_cb=ba.WeakCall(self._on_adapter_sign_in_result)
|
result_cb=ba.WeakCall(self._on_adapter_sign_in_result),
|
||||||
|
description='account settings button',
|
||||||
)
|
)
|
||||||
# Will get 'Signing in...' to show.
|
# Will get 'Signing in...' to show.
|
||||||
self._needs_refresh = True
|
self._needs_refresh = True
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,7 @@ class ManualGatherTab(GatherTab):
|
||||||
c_width = region_width
|
c_width = region_width
|
||||||
c_height = region_height - 20
|
c_height = region_height - 20
|
||||||
last_addr = ba.app.config.get('Last Manual Party Connect Address', '')
|
last_addr = ba.app.config.get('Last Manual Party Connect Address', '')
|
||||||
|
last_port = ba.app.config.get('Last Manual Party Connect Port', 43210)
|
||||||
v = c_height - 70
|
v = c_height - 70
|
||||||
v -= 70
|
v -= 70
|
||||||
ba.textwidget(
|
ba.textwidget(
|
||||||
|
|
@ -256,6 +257,7 @@ class ManualGatherTab(GatherTab):
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
v_align='center',
|
v_align='center',
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
|
maxwidth=380,
|
||||||
size=(420, 60),
|
size=(420, 60),
|
||||||
)
|
)
|
||||||
ba.widget(edit=self._join_by_address_text, down_widget=txt)
|
ba.widget(edit=self._join_by_address_text, down_widget=txt)
|
||||||
|
|
@ -275,7 +277,7 @@ class ManualGatherTab(GatherTab):
|
||||||
parent=self._container,
|
parent=self._container,
|
||||||
editable=True,
|
editable=True,
|
||||||
description=ba.Lstr(resource='gatherWindow.' 'portText'),
|
description=ba.Lstr(resource='gatherWindow.' 'portText'),
|
||||||
text='43210',
|
text=str(last_port),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
max_chars=5,
|
max_chars=5,
|
||||||
position=(c_width * 0.5 - 240 + 490, v - 30),
|
position=(c_width * 0.5 - 240 + 490, v - 30),
|
||||||
|
|
@ -811,6 +813,7 @@ class ManualGatherTab(GatherTab):
|
||||||
# Store for later.
|
# Store for later.
|
||||||
config = ba.app.config
|
config = ba.app.config
|
||||||
config['Last Manual Party Connect Address'] = resolved_address
|
config['Last Manual Party Connect Address'] = resolved_address
|
||||||
|
config['Last Manual Party Connect Port'] = port
|
||||||
config.commit()
|
config.commit()
|
||||||
ba.internal.connect_to_party(resolved_address, port=port)
|
ba.internal.connect_to_party(resolved_address, port=port)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -571,6 +571,7 @@ class PublicGatherTab(GatherTab):
|
||||||
h_align='left',
|
h_align='left',
|
||||||
v_align='center',
|
v_align='center',
|
||||||
editable=True,
|
editable=True,
|
||||||
|
maxwidth=310,
|
||||||
description=filter_txt,
|
description=filter_txt,
|
||||||
)
|
)
|
||||||
ba.widget(edit=self._filter_text, up_widget=self._join_text)
|
ba.widget(edit=self._filter_text, up_widget=self._join_text)
|
||||||
|
|
|
||||||
5
dist/ba_data/python/bastd/ui/party.py
vendored
5
dist/ba_data/python/bastd/ui/party.py
vendored
|
|
@ -211,9 +211,8 @@ class PartyWindow(ba.Window):
|
||||||
flatness=1.0,
|
flatness=1.0,
|
||||||
)
|
)
|
||||||
self._chat_texts.append(txt)
|
self._chat_texts.append(txt)
|
||||||
if len(self._chat_texts) > 40:
|
while len(self._chat_texts) > 40:
|
||||||
first = self._chat_texts.pop(0)
|
self._chat_texts.pop(0).delete()
|
||||||
first.delete()
|
|
||||||
ba.containerwidget(edit=self._columnwidget, visible_child=txt)
|
ba.containerwidget(edit=self._columnwidget, visible_child=txt)
|
||||||
|
|
||||||
def _on_menu_button_press(self) -> None:
|
def _on_menu_button_press(self) -> None:
|
||||||
|
|
|
||||||
|
|
@ -473,7 +473,6 @@ class PlaylistEditGameWindow(ba.Window):
|
||||||
|
|
||||||
# Ok now wire up the column.
|
# Ok now wire up the column.
|
||||||
try:
|
try:
|
||||||
# pylint: disable=unsubscriptable-object
|
|
||||||
prev_widgets: list[ba.Widget] | None = None
|
prev_widgets: list[ba.Widget] | None = None
|
||||||
for cwdg in widget_column:
|
for cwdg in widget_column:
|
||||||
if prev_widgets is not None:
|
if prev_widgets is not None:
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
parent=self._root_widget,
|
parent=self._root_widget,
|
||||||
position=(0, self._height - 52),
|
position=(0, self._height - 52),
|
||||||
size=(self._width, 25),
|
size=(self._width, 25),
|
||||||
text=ba.Lstr(resource=self._r + '.titleText'),
|
text=ba.Lstr(resource=f'{self._r}.titleText'),
|
||||||
color=app.ui.title_color,
|
color=app.ui.title_color,
|
||||||
h_align='center',
|
h_align='center',
|
||||||
v_align='top',
|
v_align='top',
|
||||||
|
|
@ -203,10 +203,10 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
text=''
|
text=''
|
||||||
if ba.app.lang.language == 'Test'
|
if ba.app.lang.language == 'Test'
|
||||||
else ba.Lstr(
|
else ba.Lstr(
|
||||||
resource=self._r + '.translationNoUpdateNeededText'
|
resource=f'{self._r}.translationNoUpdateNeededText'
|
||||||
)
|
)
|
||||||
if up_to_date
|
if up_to_date
|
||||||
else ba.Lstr(resource=self._r + '.translationUpdateNeededText'),
|
else ba.Lstr(resource=f'{self._r}.translationUpdateNeededText'),
|
||||||
color=(0.2, 1.0, 0.2, 0.8)
|
color=(0.2, 1.0, 0.2, 0.8)
|
||||||
if up_to_date
|
if up_to_date
|
||||||
else (1.0, 0.2, 0.2, 0.8),
|
else (1.0, 0.2, 0.2, 0.8),
|
||||||
|
|
@ -214,10 +214,10 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
else:
|
else:
|
||||||
ba.textwidget(
|
ba.textwidget(
|
||||||
edit=self._lang_status_text,
|
edit=self._lang_status_text,
|
||||||
text=ba.Lstr(resource=self._r + '.translationFetchErrorText')
|
text=ba.Lstr(resource=f'{self._r}.translationFetchErrorText')
|
||||||
if self._complete_langs_error
|
if self._complete_langs_error
|
||||||
else ba.Lstr(
|
else ba.Lstr(
|
||||||
resource=self._r + '.translationFetchingStatusText'
|
resource=f'{self._r}.translationFetchingStatusText'
|
||||||
),
|
),
|
||||||
color=(1.0, 0.5, 0.2)
|
color=(1.0, 0.5, 0.2)
|
||||||
if self._complete_langs_error
|
if self._complete_langs_error
|
||||||
|
|
@ -267,7 +267,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
)
|
)
|
||||||
|
|
||||||
ba.textwidget(
|
ba.textwidget(
|
||||||
edit=self._title_text, text=ba.Lstr(resource=self._r + '.titleText')
|
edit=self._title_text, text=ba.Lstr(resource=f'{self._r}.titleText')
|
||||||
)
|
)
|
||||||
|
|
||||||
this_button_width = 410
|
this_button_width = 410
|
||||||
|
|
@ -277,7 +277,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.enterPromoCodeText'),
|
label=ba.Lstr(resource=f'{self._r}.enterPromoCodeText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=self._on_promo_code_press,
|
on_activate_call=self._on_promo_code_press,
|
||||||
)
|
)
|
||||||
|
|
@ -293,7 +293,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
parent=self._subcontainer,
|
parent=self._subcontainer,
|
||||||
position=(200, v + 10),
|
position=(200, v + 10),
|
||||||
size=(0, 0),
|
size=(0, 0),
|
||||||
text=ba.Lstr(resource=self._r + '.languageText'),
|
text=ba.Lstr(resource=f'{self._r}.languageText'),
|
||||||
maxwidth=150,
|
maxwidth=150,
|
||||||
scale=0.95,
|
scale=0.95,
|
||||||
color=ba.app.ui.title_color,
|
color=ba.app.ui.title_color,
|
||||||
|
|
@ -371,7 +371,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width * 0.5, v + 10),
|
position=(self._sub_width * 0.5, v + 10),
|
||||||
size=(0, 0),
|
size=(0, 0),
|
||||||
text=ba.Lstr(
|
text=ba.Lstr(
|
||||||
resource=self._r + '.helpTranslateText',
|
resource=f'{self._r}.helpTranslateText',
|
||||||
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
||||||
),
|
),
|
||||||
maxwidth=self._sub_width * 0.9,
|
maxwidth=self._sub_width * 0.9,
|
||||||
|
|
@ -389,7 +389,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 24),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 24),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
label=ba.Lstr(
|
label=ba.Lstr(
|
||||||
resource=self._r + '.translationEditorButtonText',
|
resource=f'{self._r}.translationEditorButtonText',
|
||||||
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
|
||||||
),
|
),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
|
|
@ -422,7 +422,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
textcolor=(0.8, 0.8, 0.8),
|
textcolor=(0.8, 0.8, 0.8),
|
||||||
value=lang_inform,
|
value=lang_inform,
|
||||||
text=ba.Lstr(resource=self._r + '.translationInformMe'),
|
text=ba.Lstr(resource=f'{self._r}.translationInformMe'),
|
||||||
on_value_change_call=ba.WeakCall(self._on_lang_inform_value_change),
|
on_value_change_call=ba.WeakCall(self._on_lang_inform_value_change),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -439,7 +439,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(50, v),
|
position=(50, v),
|
||||||
size=(self._sub_width - 100, 30),
|
size=(self._sub_width - 100, 30),
|
||||||
configkey='Kick Idle Players',
|
configkey='Kick Idle Players',
|
||||||
displayname=ba.Lstr(resource=self._r + '.kickIdlePlayersText'),
|
displayname=ba.Lstr(resource=f'{self._r}.kickIdlePlayersText'),
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
)
|
)
|
||||||
|
|
@ -450,7 +450,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(50, v),
|
position=(50, v),
|
||||||
size=(self._sub_width - 100, 30),
|
size=(self._sub_width - 100, 30),
|
||||||
configkey='Show Ping',
|
configkey='Show Ping',
|
||||||
displayname=ba.Lstr(value='Show InGame Ping'),
|
displayname=ba.Lstr(resource=f'{self._r}.showInGamePingText'),
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
)
|
)
|
||||||
|
|
@ -461,7 +461,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(50, v),
|
position=(50, v),
|
||||||
size=(self._sub_width - 100, 30),
|
size=(self._sub_width - 100, 30),
|
||||||
configkey='Disable Camera Shake',
|
configkey='Disable Camera Shake',
|
||||||
displayname=ba.Lstr(resource=self._r + '.disableCameraShakeText'),
|
displayname=ba.Lstr(resource=f'{self._r}.disableCameraShakeText'),
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
)
|
)
|
||||||
|
|
@ -475,7 +475,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
size=(self._sub_width - 100, 30),
|
size=(self._sub_width - 100, 30),
|
||||||
configkey='Disable Camera Gyro',
|
configkey='Disable Camera Gyro',
|
||||||
displayname=ba.Lstr(
|
displayname=ba.Lstr(
|
||||||
resource=self._r + '.disableCameraGyroscopeMotionText'
|
resource=f'{self._r}.disableCameraGyroscopeMotionText'
|
||||||
),
|
),
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
|
|
@ -491,7 +491,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
configkey='Always Use Internal Keyboard',
|
configkey='Always Use Internal Keyboard',
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
displayname=ba.Lstr(
|
displayname=ba.Lstr(
|
||||||
resource=self._r + '.alwaysUseInternalKeyboardText'
|
resource=f'{self._r}.alwaysUseInternalKeyboardText'
|
||||||
),
|
),
|
||||||
scale=1.0,
|
scale=1.0,
|
||||||
maxwidth=430,
|
maxwidth=430,
|
||||||
|
|
@ -501,8 +501,9 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(90, v - 10),
|
position=(90, v - 10),
|
||||||
size=(0, 0),
|
size=(0, 0),
|
||||||
text=ba.Lstr(
|
text=ba.Lstr(
|
||||||
resource=self._r
|
resource=(
|
||||||
+ '.alwaysUseInternalKeyboardDescriptionText'
|
f'{self._r}.alwaysUseInternalKeyboardDescriptionText'
|
||||||
|
)
|
||||||
),
|
),
|
||||||
maxwidth=400,
|
maxwidth=400,
|
||||||
flatness=1.0,
|
flatness=1.0,
|
||||||
|
|
@ -523,7 +524,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 10),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 10),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.moddingGuideText'),
|
label=ba.Lstr(resource=f'{self._r}.moddingGuideText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=ba.Call(
|
on_activate_call=ba.Call(
|
||||||
ba.open_url, 'https://ballistica.net/wiki/modding-guide'
|
ba.open_url, 'https://ballistica.net/wiki/modding-guide'
|
||||||
|
|
@ -556,7 +557,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 10),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 10),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.showUserModsText'),
|
label=ba.Lstr(resource=f'{self._r}.showUserModsText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=show_user_scripts,
|
on_activate_call=show_user_scripts,
|
||||||
)
|
)
|
||||||
|
|
@ -583,7 +584,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.vrTestingText'),
|
label=ba.Lstr(resource=f'{self._r}.vrTestingText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=self._on_vr_test_press,
|
on_activate_call=self._on_vr_test_press,
|
||||||
)
|
)
|
||||||
|
|
@ -598,7 +599,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.netTestingText'),
|
label=ba.Lstr(resource=f'{self._r}.netTestingText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=self._on_net_test_press,
|
on_activate_call=self._on_net_test_press,
|
||||||
)
|
)
|
||||||
|
|
@ -611,7 +612,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
position=(self._sub_width / 2 - this_button_width / 2, v - 14),
|
||||||
size=(this_button_width, 60),
|
size=(this_button_width, 60),
|
||||||
autoselect=True,
|
autoselect=True,
|
||||||
label=ba.Lstr(resource=self._r + '.benchmarksText'),
|
label=ba.Lstr(resource=f'{self._r}.benchmarksText'),
|
||||||
text_scale=1.0,
|
text_scale=1.0,
|
||||||
on_activate_call=self._on_benchmark_press,
|
on_activate_call=self._on_benchmark_press,
|
||||||
)
|
)
|
||||||
|
|
@ -633,7 +634,7 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
def _show_restart_needed(self, value: Any) -> None:
|
def _show_restart_needed(self, value: Any) -> None:
|
||||||
del value # Unused.
|
del value # Unused.
|
||||||
ba.screenmessage(
|
ba.screenmessage(
|
||||||
ba.Lstr(resource=self._r + '.mustRestartText'), color=(1, 1, 0)
|
ba.Lstr(resource=f'{self._r}.mustRestartText'), color=(1, 1, 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _on_lang_inform_value_change(self, val: bool) -> None:
|
def _on_lang_inform_value_change(self, val: bool) -> None:
|
||||||
|
|
@ -678,14 +679,12 @@ class AdvancedSettingsWindow(ba.Window):
|
||||||
appinvite.handle_app_invites_press()
|
appinvite.handle_app_invites_press()
|
||||||
|
|
||||||
def _on_plugins_button_press(self) -> None:
|
def _on_plugins_button_press(self) -> None:
|
||||||
from bastd.ui.settings.plugins import PluginSettingsWindow
|
from bastd.ui.settings.plugins import PluginWindow
|
||||||
|
|
||||||
self._save_state()
|
self._save_state()
|
||||||
ba.containerwidget(edit=self._root_widget, transition='out_left')
|
ba.containerwidget(edit=self._root_widget, transition='out_left')
|
||||||
ba.app.ui.set_main_menu_window(
|
ba.app.ui.set_main_menu_window(
|
||||||
PluginSettingsWindow(
|
PluginWindow(origin_widget=self._plugins_button).get_root_widget()
|
||||||
origin_widget=self._plugins_button
|
|
||||||
).get_root_widget()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def _on_promo_code_press(self) -> None:
|
def _on_promo_code_press(self) -> None:
|
||||||
|
|
|
||||||
37
dist/ba_data/python/bastd/ui/settings/plugins.py
vendored
37
dist/ba_data/python/bastd/ui/settings/plugins.py
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
# Released under the MIT License. See LICENSE for details.
|
# Released under the MIT License. See LICENSE for details.
|
||||||
#
|
#
|
||||||
"""Plugin settings UI."""
|
"""Plugin Window UI."""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|
@ -12,7 +12,7 @@ if TYPE_CHECKING:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class PluginSettingsWindow(ba.Window):
|
class PluginWindow(ba.Window):
|
||||||
"""Window for configuring plugins."""
|
"""Window for configuring plugins."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -106,6 +106,27 @@ class PluginSettingsWindow(ba.Window):
|
||||||
size=(60, 60),
|
size=(60, 60),
|
||||||
label=ba.charstr(ba.SpecialChar.BACK),
|
label=ba.charstr(ba.SpecialChar.BACK),
|
||||||
)
|
)
|
||||||
|
settings_button_x = 670 if uiscale is ba.UIScale.SMALL else 570
|
||||||
|
self._settings_button = ba.buttonwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(settings_button_x, self._height - 60),
|
||||||
|
size=(40, 40),
|
||||||
|
label='',
|
||||||
|
on_activate_call=self._open_settings,
|
||||||
|
)
|
||||||
|
|
||||||
|
ba.imagewidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(settings_button_x + 3, self._height - 60),
|
||||||
|
size=(35, 35),
|
||||||
|
texture=ba.gettexture('settingsIcon'),
|
||||||
|
)
|
||||||
|
|
||||||
|
ba.widget(
|
||||||
|
edit=self._settings_button,
|
||||||
|
up_widget=self._settings_button,
|
||||||
|
right_widget=self._settings_button,
|
||||||
|
)
|
||||||
|
|
||||||
self._scrollwidget = ba.scrollwidget(
|
self._scrollwidget = ba.scrollwidget(
|
||||||
parent=self._root_widget,
|
parent=self._root_widget,
|
||||||
|
|
@ -185,6 +206,7 @@ class PluginSettingsWindow(ba.Window):
|
||||||
edit=check,
|
edit=check,
|
||||||
up_widget=self._back_button,
|
up_widget=self._back_button,
|
||||||
left_widget=self._back_button,
|
left_widget=self._back_button,
|
||||||
|
right_widget=self._settings_button,
|
||||||
)
|
)
|
||||||
if button is not None:
|
if button is not None:
|
||||||
ba.widget(edit=button, up_widget=self._back_button)
|
ba.widget(edit=button, up_widget=self._back_button)
|
||||||
|
|
@ -212,6 +234,17 @@ class PluginSettingsWindow(ba.Window):
|
||||||
plugstate['enabled'] = value
|
plugstate['enabled'] = value
|
||||||
ba.app.config.commit()
|
ba.app.config.commit()
|
||||||
|
|
||||||
|
def _open_settings(self) -> None:
|
||||||
|
# pylint: disable=cyclic-import
|
||||||
|
from bastd.ui.settings.pluginsettings import PluginSettingsWindow
|
||||||
|
|
||||||
|
ba.playsound(ba.getsound('swish'))
|
||||||
|
|
||||||
|
ba.containerwidget(edit=self._root_widget, transition='out_left')
|
||||||
|
ba.app.ui.set_main_menu_window(
|
||||||
|
PluginSettingsWindow(transition='in_right').get_root_widget()
|
||||||
|
)
|
||||||
|
|
||||||
def _save_state(self) -> None:
|
def _save_state(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
||||||
174
dist/ba_data/python/bastd/ui/settings/pluginsettings.py
vendored
Normal file
174
dist/ba_data/python/bastd/ui/settings/pluginsettings.py
vendored
Normal file
|
|
@ -0,0 +1,174 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Plugin Settings UI."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
import ba
|
||||||
|
from bastd.ui.confirm import ConfirmWindow
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class PluginSettingsWindow(ba.Window):
|
||||||
|
"""Plugin Settings Window"""
|
||||||
|
|
||||||
|
def __init__(self, transition: str = 'in_right'):
|
||||||
|
|
||||||
|
scale_origin: tuple[float, float] | None
|
||||||
|
self._transition_out = 'out_right'
|
||||||
|
scale_origin = None
|
||||||
|
|
||||||
|
uiscale = ba.app.ui.uiscale
|
||||||
|
width = 470.0 if uiscale is ba.UIScale.SMALL else 470.0
|
||||||
|
height = (
|
||||||
|
365.0
|
||||||
|
if uiscale is ba.UIScale.SMALL
|
||||||
|
else 300.0
|
||||||
|
if uiscale is ba.UIScale.MEDIUM
|
||||||
|
else 370.0
|
||||||
|
)
|
||||||
|
top_extra = 10 if uiscale is ba.UIScale.SMALL else 0
|
||||||
|
|
||||||
|
super().__init__(
|
||||||
|
root_widget=ba.containerwidget(
|
||||||
|
size=(width, height + top_extra),
|
||||||
|
transition=transition,
|
||||||
|
toolbar_visibility='menu_minimal',
|
||||||
|
scale_origin_stack_offset=scale_origin,
|
||||||
|
scale=(
|
||||||
|
2.06
|
||||||
|
if uiscale is ba.UIScale.SMALL
|
||||||
|
else 1.4
|
||||||
|
if uiscale is ba.UIScale.MEDIUM
|
||||||
|
else 1.0
|
||||||
|
),
|
||||||
|
stack_offset=(0, -25)
|
||||||
|
if uiscale is ba.UIScale.SMALL
|
||||||
|
else (0, 0),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self._back_button = ba.buttonwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(53, height - 60),
|
||||||
|
size=(60, 60),
|
||||||
|
scale=0.8,
|
||||||
|
autoselect=True,
|
||||||
|
label=ba.charstr(ba.SpecialChar.BACK),
|
||||||
|
button_type='backSmall',
|
||||||
|
on_activate_call=self._do_back,
|
||||||
|
)
|
||||||
|
ba.containerwidget(
|
||||||
|
edit=self._root_widget, cancel_button=self._back_button
|
||||||
|
)
|
||||||
|
|
||||||
|
self._title_text = ba.textwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(0, height - 52),
|
||||||
|
size=(width, 25),
|
||||||
|
text=ba.Lstr(resource='pluginSettingsText'),
|
||||||
|
color=ba.app.ui.title_color,
|
||||||
|
h_align='center',
|
||||||
|
v_align='top',
|
||||||
|
)
|
||||||
|
|
||||||
|
self._y_position = 170 if uiscale is ba.UIScale.MEDIUM else 205
|
||||||
|
self._enable_plugins_button = ba.buttonwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(65, self._y_position),
|
||||||
|
size=(350, 60),
|
||||||
|
autoselect=True,
|
||||||
|
label=ba.Lstr(resource='pluginsEnableAllText'),
|
||||||
|
text_scale=1.0,
|
||||||
|
on_activate_call=lambda: ConfirmWindow(
|
||||||
|
action=self._enable_all_plugins,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
self._y_position -= 70
|
||||||
|
self._disable_plugins_button = ba.buttonwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(65, self._y_position),
|
||||||
|
size=(350, 60),
|
||||||
|
autoselect=True,
|
||||||
|
label=ba.Lstr(resource='pluginsDisableAllText'),
|
||||||
|
text_scale=1.0,
|
||||||
|
on_activate_call=lambda: ConfirmWindow(
|
||||||
|
action=self._disable_all_plugins,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
self._y_position -= 70
|
||||||
|
self._enable_new_plugins_check_box = ba.checkboxwidget(
|
||||||
|
parent=self._root_widget,
|
||||||
|
position=(65, self._y_position),
|
||||||
|
size=(350, 60),
|
||||||
|
value=ba.app.config.get(
|
||||||
|
ba.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY,
|
||||||
|
ba.app.plugins.AUTO_ENABLE_NEW_PLUGINS_DEFAULT,
|
||||||
|
),
|
||||||
|
text=ba.Lstr(resource='pluginsAutoEnableNewText'),
|
||||||
|
scale=1.0,
|
||||||
|
maxwidth=308,
|
||||||
|
on_value_change_call=self._update_value,
|
||||||
|
)
|
||||||
|
|
||||||
|
ba.widget(
|
||||||
|
edit=self._back_button, down_widget=self._enable_plugins_button
|
||||||
|
)
|
||||||
|
|
||||||
|
ba.widget(
|
||||||
|
edit=self._disable_plugins_button,
|
||||||
|
left_widget=self._disable_plugins_button,
|
||||||
|
)
|
||||||
|
|
||||||
|
ba.widget(
|
||||||
|
edit=self._enable_new_plugins_check_box,
|
||||||
|
left_widget=self._enable_new_plugins_check_box,
|
||||||
|
right_widget=self._enable_new_plugins_check_box,
|
||||||
|
down_widget=self._enable_new_plugins_check_box,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _enable_all_plugins(self) -> None:
|
||||||
|
cfg = ba.app.config
|
||||||
|
plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
|
||||||
|
for plug in plugs.values():
|
||||||
|
plug['enabled'] = True
|
||||||
|
cfg.apply_and_commit()
|
||||||
|
|
||||||
|
ba.screenmessage(
|
||||||
|
ba.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
|
||||||
|
color=(1.0, 0.5, 0.0),
|
||||||
|
)
|
||||||
|
|
||||||
|
def _disable_all_plugins(self) -> None:
|
||||||
|
cfg = ba.app.config
|
||||||
|
plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
|
||||||
|
for plug in plugs.values():
|
||||||
|
plug['enabled'] = False
|
||||||
|
cfg.apply_and_commit()
|
||||||
|
|
||||||
|
ba.screenmessage(
|
||||||
|
ba.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
|
||||||
|
color=(1.0, 0.5, 0.0),
|
||||||
|
)
|
||||||
|
|
||||||
|
def _update_value(self, val: bool) -> None:
|
||||||
|
cfg = ba.app.config
|
||||||
|
cfg[ba.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY] = val
|
||||||
|
cfg.apply_and_commit()
|
||||||
|
|
||||||
|
def _do_back(self) -> None:
|
||||||
|
# pylint: disable=cyclic-import
|
||||||
|
from bastd.ui.settings.plugins import PluginWindow
|
||||||
|
|
||||||
|
ba.containerwidget(
|
||||||
|
edit=self._root_widget, transition=self._transition_out
|
||||||
|
)
|
||||||
|
ba.app.ui.set_main_menu_window(
|
||||||
|
PluginWindow(transition='in_left').get_root_widget()
|
||||||
|
)
|
||||||
|
|
@ -1155,7 +1155,6 @@ class StoreBrowserWindow(ba.Window):
|
||||||
# Wire this button to the equivalent in the
|
# Wire this button to the equivalent in the
|
||||||
# previous row.
|
# previous row.
|
||||||
if prev_row_buttons is not None:
|
if prev_row_buttons is not None:
|
||||||
# pylint: disable=unsubscriptable-object
|
|
||||||
if len(prev_row_buttons) > col:
|
if len(prev_row_buttons) > col:
|
||||||
ba.widget(
|
ba.widget(
|
||||||
edit=btn,
|
edit=btn,
|
||||||
|
|
|
||||||
49
dist/ba_data/python/efro/cloudshell.py
vendored
Normal file
49
dist/ba_data/python/efro/cloudshell.py
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""My nifty ssh/mosh/rsync mishmash."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from enum import Enum
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from efro.dataclassio import ioprepped
|
||||||
|
|
||||||
|
|
||||||
|
class LockType(Enum):
|
||||||
|
"""Types of locks that can be acquired on a host."""
|
||||||
|
|
||||||
|
HOST = 'host'
|
||||||
|
WORKSPACE = 'workspace'
|
||||||
|
PYCHARM = 'pycharm'
|
||||||
|
CLION = 'clion'
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class HostConfig:
|
||||||
|
"""Config for a cloud machine to run commands on.
|
||||||
|
|
||||||
|
precommand, if set, will be run before the passed commands.
|
||||||
|
Note that it is not run in interactive mode (when no command is given).
|
||||||
|
"""
|
||||||
|
|
||||||
|
address: str | None = None
|
||||||
|
user: str = 'ubuntu'
|
||||||
|
port: int = 22
|
||||||
|
mosh_port: int | None = None
|
||||||
|
mosh_server_path: str | None = None
|
||||||
|
mosh_shell: str = 'sh'
|
||||||
|
workspaces_root: str = '/home/${USER}/cloudshell_workspaces'
|
||||||
|
sync_perms: bool = True
|
||||||
|
precommand: str | None = None
|
||||||
|
managed: bool = False
|
||||||
|
idle_minutes: int = 5
|
||||||
|
can_sudo_reboot: bool = False
|
||||||
|
max_sessions: int = 3
|
||||||
|
reboot_wait_seconds: int = 20
|
||||||
|
reboot_attempts: int = 1
|
||||||
|
|
||||||
|
def resolved_workspaces_root(self) -> str:
|
||||||
|
"""Returns workspaces_root with standard substitutions."""
|
||||||
|
return self.workspaces_root.replace('${USER}', self.user)
|
||||||
158
dist/ba_data/python/efro/log.py
vendored
158
dist/ba_data/python/efro/log.py
vendored
|
|
@ -8,7 +8,9 @@ import time
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
import datetime
|
import datetime
|
||||||
|
import itertools
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from collections import deque
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import TYPE_CHECKING, Annotated
|
from typing import TYPE_CHECKING, Annotated
|
||||||
from threading import Thread, current_thread, Lock
|
from threading import Thread, current_thread, Lock
|
||||||
|
|
@ -143,12 +145,14 @@ class LogHandler(logging.Handler):
|
||||||
assert cache_size_limit >= 0
|
assert cache_size_limit >= 0
|
||||||
self._cache_size_limit = cache_size_limit
|
self._cache_size_limit = cache_size_limit
|
||||||
self._cache_time_limit = cache_time_limit
|
self._cache_time_limit = cache_time_limit
|
||||||
self._cache: list[tuple[int, LogEntry]] = []
|
self._cache = deque[tuple[int, LogEntry]]()
|
||||||
self._cache_index_offset = 0
|
self._cache_index_offset = 0
|
||||||
self._cache_lock = Lock()
|
self._cache_lock = Lock()
|
||||||
self._printed_callback_error = False
|
self._printed_callback_error = False
|
||||||
self._thread_bootstrapped = False
|
self._thread_bootstrapped = False
|
||||||
self._thread = Thread(target=self._log_thread_main, daemon=True)
|
self._thread = Thread(target=self._log_thread_main, daemon=True)
|
||||||
|
if __debug__:
|
||||||
|
self._last_slow_emit_warning_time: float | None = None
|
||||||
self._thread.start()
|
self._thread.start()
|
||||||
|
|
||||||
# Spin until our thread is up and running; otherwise we could
|
# Spin until our thread is up and running; otherwise we could
|
||||||
|
|
@ -167,6 +171,12 @@ class LogHandler(logging.Handler):
|
||||||
|
|
||||||
def _log_thread_main(self) -> None:
|
def _log_thread_main(self) -> None:
|
||||||
self._event_loop = asyncio.new_event_loop()
|
self._event_loop = asyncio.new_event_loop()
|
||||||
|
|
||||||
|
# In our background thread event loop we do a fair amount of
|
||||||
|
# slow synchronous stuff such as mucking with the log cache.
|
||||||
|
# Let's avoid getting tons of warnings about this in debug mode.
|
||||||
|
self._event_loop.slow_callback_duration = 2.0 # Default is 0.1
|
||||||
|
|
||||||
# NOTE: if we ever use default threadpool at all we should allow
|
# NOTE: if we ever use default threadpool at all we should allow
|
||||||
# setting it for our loop.
|
# setting it for our loop.
|
||||||
asyncio.set_event_loop(self._event_loop)
|
asyncio.set_event_loop(self._event_loop)
|
||||||
|
|
@ -192,20 +202,15 @@ class LogHandler(logging.Handler):
|
||||||
now = utc_now()
|
now = utc_now()
|
||||||
with self._cache_lock:
|
with self._cache_lock:
|
||||||
|
|
||||||
# Quick out: if oldest cache entry is still valid,
|
# Prune the oldest entry as long as there is a first one that
|
||||||
# don't touch anything.
|
# is too old.
|
||||||
if (
|
while (
|
||||||
self._cache
|
self._cache
|
||||||
and (now - self._cache[0][1].time) < self._cache_time_limit
|
and (now - self._cache[0][1].time) >= self._cache_time_limit
|
||||||
):
|
):
|
||||||
continue
|
popped = self._cache.popleft()
|
||||||
|
self._cache_size -= popped[0]
|
||||||
# Ok; full prune.
|
self._cache_index_offset += 1
|
||||||
self._cache = [
|
|
||||||
e
|
|
||||||
for e in self._cache
|
|
||||||
if (now - e[1].time) < self._cache_time_limit
|
|
||||||
]
|
|
||||||
|
|
||||||
def get_cached(
|
def get_cached(
|
||||||
self, start_index: int = 0, max_entries: int | None = None
|
self, start_index: int = 0, max_entries: int | None = None
|
||||||
|
|
@ -239,19 +244,40 @@ class LogHandler(logging.Handler):
|
||||||
return LogArchive(
|
return LogArchive(
|
||||||
log_size=self._cache_index_offset + len(self._cache),
|
log_size=self._cache_index_offset + len(self._cache),
|
||||||
start_index=start_index + self._cache_index_offset,
|
start_index=start_index + self._cache_index_offset,
|
||||||
entries=[e[1] for e in self._cache[start_index:end_index]],
|
entries=self._cache_slice(start_index, end_index),
|
||||||
)
|
)
|
||||||
|
|
||||||
def emit(self, record: logging.LogRecord) -> None:
|
def _cache_slice(
|
||||||
# Called by logging to send us records.
|
self, start: int, end: int, step: int = 1
|
||||||
# We simply package them up and ship them to our thread.
|
) -> list[LogEntry]:
|
||||||
# UPDATE: turns out we CAN get log messages from this thread
|
# Deque doesn't natively support slicing but we can do it manually.
|
||||||
# (the C++ layer can spit out some performance metrics when
|
# It sounds like rotating the deque and pulling from the beginning
|
||||||
# calls take too long/etc.)
|
# is the most efficient way to do this. The downside is the deque
|
||||||
# assert current_thread() is not self._thread
|
# gets temporarily modified in the process so we need to make sure
|
||||||
|
# we're holding the lock.
|
||||||
|
assert self._cache_lock.locked()
|
||||||
|
cache = self._cache
|
||||||
|
cache.rotate(-start)
|
||||||
|
slc = [e[1] for e in itertools.islice(cache, 0, end - start, step)]
|
||||||
|
cache.rotate(start)
|
||||||
|
return slc
|
||||||
|
|
||||||
# Special case - filter out this common extra-chatty category.
|
@classmethod
|
||||||
# TODO - should use a standard logging.Filter for this.
|
def _is_immutable_log_data(cls, data: Any) -> bool:
|
||||||
|
if isinstance(data, (str, bool, int, float, bytes)):
|
||||||
|
return True
|
||||||
|
if isinstance(data, tuple):
|
||||||
|
return all(cls._is_immutable_log_data(x) for x in data)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def emit(self, record: logging.LogRecord) -> None:
|
||||||
|
if __debug__:
|
||||||
|
starttime = time.monotonic()
|
||||||
|
|
||||||
|
# Called by logging to send us records.
|
||||||
|
|
||||||
|
# Special case: filter out this common extra-chatty category.
|
||||||
|
# TODO - perhaps should use a standard logging.Filter for this.
|
||||||
if (
|
if (
|
||||||
self._suppress_non_root_debug
|
self._suppress_non_root_debug
|
||||||
and record.name != 'root'
|
and record.name != 'root'
|
||||||
|
|
@ -259,13 +285,36 @@ class LogHandler(logging.Handler):
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
# We want to forward as much as we can along without processing it
|
# Optimization: if our log args are all simple immutable values,
|
||||||
# (better to do so in a bg thread).
|
# we can just kick the whole thing over to our background thread to
|
||||||
# However its probably best to flatten the message string here since
|
# be formatted there at our leisure. If anything is mutable and
|
||||||
# it could cause problems stringifying things in threads where they
|
# thus could possibly change between now and then or if we want
|
||||||
# didn't expect to be stringified.
|
# to do immediate file echoing then we need to bite the bullet
|
||||||
|
# and do that stuff here at the call site.
|
||||||
|
fast_path = self._echofile is None and self._is_immutable_log_data(
|
||||||
|
record.args
|
||||||
|
)
|
||||||
|
|
||||||
|
if fast_path:
|
||||||
|
if __debug__:
|
||||||
|
formattime = echotime = time.monotonic()
|
||||||
|
self._event_loop.call_soon_threadsafe(
|
||||||
|
tpartial(
|
||||||
|
self._emit_in_thread,
|
||||||
|
record.name,
|
||||||
|
record.levelno,
|
||||||
|
record.created,
|
||||||
|
record,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Slow case; do formatting and echoing here at the log call
|
||||||
|
# site.
|
||||||
msg = self.format(record)
|
msg = self.format(record)
|
||||||
|
|
||||||
|
if __debug__:
|
||||||
|
formattime = time.monotonic()
|
||||||
|
|
||||||
# Also immediately print pretty colored output to our echo file
|
# Also immediately print pretty colored output to our echo file
|
||||||
# (generally stderr). We do this part here instead of in our bg
|
# (generally stderr). We do this part here instead of in our bg
|
||||||
# thread because the delay can throw off command line prompts or
|
# thread because the delay can throw off command line prompts or
|
||||||
|
|
@ -277,6 +326,9 @@ class LogHandler(logging.Handler):
|
||||||
else:
|
else:
|
||||||
self._echofile.write(f'{msg}\n')
|
self._echofile.write(f'{msg}\n')
|
||||||
|
|
||||||
|
if __debug__:
|
||||||
|
echotime = time.monotonic()
|
||||||
|
|
||||||
self._event_loop.call_soon_threadsafe(
|
self._event_loop.call_soon_threadsafe(
|
||||||
tpartial(
|
tpartial(
|
||||||
self._emit_in_thread,
|
self._emit_in_thread,
|
||||||
|
|
@ -287,10 +339,52 @@ class LogHandler(logging.Handler):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if __debug__:
|
||||||
|
# Make noise if we're taking a significant amount of time here.
|
||||||
|
# Limit the noise to once every so often though; otherwise we
|
||||||
|
# could get a feedback loop where every log emit results in a
|
||||||
|
# warning log which results in another, etc.
|
||||||
|
now = time.monotonic()
|
||||||
|
# noinspection PyUnboundLocalVariable
|
||||||
|
duration = now - starttime
|
||||||
|
# noinspection PyUnboundLocalVariable
|
||||||
|
format_duration = formattime - starttime
|
||||||
|
# noinspection PyUnboundLocalVariable
|
||||||
|
echo_duration = echotime - formattime
|
||||||
|
if duration > 0.05 and (
|
||||||
|
self._last_slow_emit_warning_time is None
|
||||||
|
or now > self._last_slow_emit_warning_time + 10.0
|
||||||
|
):
|
||||||
|
# Logging calls from *within* a logging handler
|
||||||
|
# sounds sketchy, so let's just kick this over to
|
||||||
|
# the bg event loop thread we've already got.
|
||||||
|
self._last_slow_emit_warning_time = now
|
||||||
|
self._event_loop.call_soon_threadsafe(
|
||||||
|
tpartial(
|
||||||
|
logging.warning,
|
||||||
|
'efro.log.LogHandler emit took too long'
|
||||||
|
' (%.2fs total; %.2fs format, %.2fs echo,'
|
||||||
|
' fast_path=%s).',
|
||||||
|
duration,
|
||||||
|
format_duration,
|
||||||
|
echo_duration,
|
||||||
|
fast_path,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def _emit_in_thread(
|
def _emit_in_thread(
|
||||||
self, name: str, levelno: int, created: float, message: str
|
self,
|
||||||
|
name: str,
|
||||||
|
levelno: int,
|
||||||
|
created: float,
|
||||||
|
message: str | logging.LogRecord,
|
||||||
) -> None:
|
) -> None:
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
# If they passed a raw record here, bake it down to a string.
|
||||||
|
if isinstance(message, logging.LogRecord):
|
||||||
|
message = self.format(message)
|
||||||
|
|
||||||
self._emit_entry(
|
self._emit_entry(
|
||||||
LogEntry(
|
LogEntry(
|
||||||
name=name,
|
name=name,
|
||||||
|
|
@ -409,7 +503,7 @@ class LogHandler(logging.Handler):
|
||||||
|
|
||||||
# Prune old until we are back at or under our limit.
|
# Prune old until we are back at or under our limit.
|
||||||
while self._cache_size > self._cache_size_limit:
|
while self._cache_size > self._cache_size_limit:
|
||||||
popped = self._cache.pop(0)
|
popped = self._cache.popleft()
|
||||||
self._cache_size -= popped[0]
|
self._cache_size -= popped[0]
|
||||||
self._cache_index_offset += 1
|
self._cache_index_offset += 1
|
||||||
|
|
||||||
|
|
@ -469,6 +563,7 @@ def setup_logging(
|
||||||
level: LogLevel,
|
level: LogLevel,
|
||||||
suppress_non_root_debug: bool = False,
|
suppress_non_root_debug: bool = False,
|
||||||
log_stdout_stderr: bool = False,
|
log_stdout_stderr: bool = False,
|
||||||
|
echo_to_stderr: bool = True,
|
||||||
cache_size_limit: int = 0,
|
cache_size_limit: int = 0,
|
||||||
cache_time_limit: datetime.timedelta | None = None,
|
cache_time_limit: datetime.timedelta | None = None,
|
||||||
) -> LogHandler:
|
) -> LogHandler:
|
||||||
|
|
@ -499,8 +594,7 @@ def setup_logging(
|
||||||
# which would create an infinite loop.
|
# which would create an infinite loop.
|
||||||
loghandler = LogHandler(
|
loghandler = LogHandler(
|
||||||
log_path,
|
log_path,
|
||||||
# echofile=sys.stderr if sys.stderr.isatty() else None,
|
echofile=sys.stderr if echo_to_stderr else None,
|
||||||
echofile=sys.stderr,
|
|
||||||
suppress_non_root_debug=suppress_non_root_debug,
|
suppress_non_root_debug=suppress_non_root_debug,
|
||||||
cache_size_limit=cache_size_limit,
|
cache_size_limit=cache_size_limit,
|
||||||
cache_time_limit=cache_time_limit,
|
cache_time_limit=cache_time_limit,
|
||||||
|
|
|
||||||
58
dist/ba_data/python/efro/message/_protocol.py
vendored
58
dist/ba_data/python/efro/message/_protocol.py
vendored
|
|
@ -282,10 +282,13 @@ class MessageProtocol:
|
||||||
def _get_module_header(
|
def _get_module_header(
|
||||||
self,
|
self,
|
||||||
part: Literal['sender', 'receiver'],
|
part: Literal['sender', 'receiver'],
|
||||||
extra_import_code: str | None = None,
|
extra_import_code: str | None,
|
||||||
|
enable_async_sends: bool,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Return common parts of generated modules."""
|
"""Return common parts of generated modules."""
|
||||||
# pylint: disable=too-many-locals, too-many-branches
|
# pylint: disable=too-many-locals
|
||||||
|
# pylint: disable=too-many-branches
|
||||||
|
# pylint: disable=too-many-statements
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
tpimports: dict[str, list[str]] = {}
|
tpimports: dict[str, list[str]] = {}
|
||||||
|
|
@ -342,7 +345,7 @@ class MessageProtocol:
|
||||||
|
|
||||||
if part == 'sender':
|
if part == 'sender':
|
||||||
import_lines += (
|
import_lines += (
|
||||||
'from efro.message import MessageSender,' ' BoundMessageSender'
|
'from efro.message import MessageSender, BoundMessageSender'
|
||||||
)
|
)
|
||||||
tpimport_typing_extras = ''
|
tpimport_typing_extras = ''
|
||||||
else:
|
else:
|
||||||
|
|
@ -362,11 +365,18 @@ class MessageProtocol:
|
||||||
import_lines += f'\n{extra_import_code}\n'
|
import_lines += f'\n{extra_import_code}\n'
|
||||||
|
|
||||||
ovld = ', overload' if not single_message_type else ''
|
ovld = ', overload' if not single_message_type else ''
|
||||||
|
ovld2 = (
|
||||||
|
', cast, Awaitable'
|
||||||
|
if (single_message_type and part == 'sender' and enable_async_sends)
|
||||||
|
else ''
|
||||||
|
)
|
||||||
tpimport_lines = textwrap.indent(tpimport_lines, ' ')
|
tpimport_lines = textwrap.indent(tpimport_lines, ' ')
|
||||||
|
|
||||||
baseimps = ['Any']
|
baseimps = ['Any']
|
||||||
if part == 'receiver':
|
if part == 'receiver':
|
||||||
baseimps.append('Callable')
|
baseimps.append('Callable')
|
||||||
|
if part == 'sender' and enable_async_sends:
|
||||||
|
baseimps.append('Awaitable')
|
||||||
baseimps_s = ', '.join(baseimps)
|
baseimps_s = ', '.join(baseimps)
|
||||||
out = (
|
out = (
|
||||||
'# Released under the MIT License. See LICENSE for details.\n'
|
'# Released under the MIT License. See LICENSE for details.\n'
|
||||||
|
|
@ -375,7 +385,7 @@ class MessageProtocol:
|
||||||
f'\n'
|
f'\n'
|
||||||
f'from __future__ import annotations\n'
|
f'from __future__ import annotations\n'
|
||||||
f'\n'
|
f'\n'
|
||||||
f'from typing import TYPE_CHECKING{ovld}\n'
|
f'from typing import TYPE_CHECKING{ovld}{ovld2}\n'
|
||||||
f'\n'
|
f'\n'
|
||||||
f'{import_lines}\n'
|
f'{import_lines}\n'
|
||||||
f'\n'
|
f'\n'
|
||||||
|
|
@ -399,13 +409,16 @@ class MessageProtocol:
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Used by create_sender_module(); do not call directly."""
|
"""Used by create_sender_module(); do not call directly."""
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
|
# pylint: disable=too-many-branches
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
msgtypes = list(self.message_ids_by_type.keys())
|
msgtypes = list(self.message_ids_by_type.keys())
|
||||||
|
|
||||||
ppre = '_' if private else ''
|
ppre = '_' if private else ''
|
||||||
out = self._get_module_header(
|
out = self._get_module_header(
|
||||||
'sender', extra_import_code=protocol_module_level_import_code
|
'sender',
|
||||||
|
extra_import_code=protocol_module_level_import_code,
|
||||||
|
enable_async_sends=enable_async_sends,
|
||||||
)
|
)
|
||||||
ccind = textwrap.indent(protocol_create_code, ' ')
|
ccind = textwrap.indent(protocol_create_code, ' ')
|
||||||
out += (
|
out += (
|
||||||
|
|
@ -438,7 +451,8 @@ class MessageProtocol:
|
||||||
continue
|
continue
|
||||||
pfx = 'async ' if async_pass else ''
|
pfx = 'async ' if async_pass else ''
|
||||||
sfx = '_async' if async_pass else ''
|
sfx = '_async' if async_pass else ''
|
||||||
awt = 'await ' if async_pass else ''
|
# awt = 'await ' if async_pass else ''
|
||||||
|
awt = ''
|
||||||
how = 'asynchronously' if async_pass else 'synchronously'
|
how = 'asynchronously' if async_pass else 'synchronously'
|
||||||
|
|
||||||
if len(msgtypes) == 1:
|
if len(msgtypes) == 1:
|
||||||
|
|
@ -451,22 +465,29 @@ class MessageProtocol:
|
||||||
rtypevar = ' | '.join(_filt_tp_name(t) for t in rtypes)
|
rtypevar = ' | '.join(_filt_tp_name(t) for t in rtypes)
|
||||||
else:
|
else:
|
||||||
rtypevar = _filt_tp_name(rtypes[0])
|
rtypevar = _filt_tp_name(rtypes[0])
|
||||||
|
if async_pass:
|
||||||
|
rtypevar = f'Awaitable[{rtypevar}]'
|
||||||
out += (
|
out += (
|
||||||
f'\n'
|
f'\n'
|
||||||
f' {pfx}def send{sfx}(self,'
|
f' def send{sfx}(self,'
|
||||||
f' message: {msgtypevar})'
|
f' message: {msgtypevar})'
|
||||||
f' -> {rtypevar}:\n'
|
f' -> {rtypevar}:\n'
|
||||||
f' """Send a message {how}."""\n'
|
f' """Send a message {how}."""\n'
|
||||||
f' out = {awt}self._sender.'
|
f' out = {awt}self._sender.'
|
||||||
f'send{sfx}(self._obj, message)\n'
|
f'send{sfx}(self._obj, message)\n'
|
||||||
f' assert isinstance(out, {rtypevar})\n'
|
|
||||||
f' return out\n'
|
|
||||||
)
|
)
|
||||||
|
if not async_pass:
|
||||||
|
out += (
|
||||||
|
f' assert isinstance(out, {rtypevar})\n'
|
||||||
|
' return out\n'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
out += f' return cast({rtypevar}, out)\n'
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
for msgtype in msgtypes:
|
for msgtype in msgtypes:
|
||||||
msgtypevar = msgtype.__name__
|
msgtypevar = msgtype.__name__
|
||||||
# rtypes = msgtype.get_response_types()
|
|
||||||
rtypes = msgtype.get_response_types()
|
rtypes = msgtype.get_response_types()
|
||||||
if len(rtypes) > 1:
|
if len(rtypes) > 1:
|
||||||
rtypevar = ' | '.join(
|
rtypevar = ' | '.join(
|
||||||
|
|
@ -482,10 +503,13 @@ class MessageProtocol:
|
||||||
f' -> {rtypevar}:\n'
|
f' -> {rtypevar}:\n'
|
||||||
f' ...\n'
|
f' ...\n'
|
||||||
)
|
)
|
||||||
|
rtypevar = 'Response | None'
|
||||||
|
if async_pass:
|
||||||
|
rtypevar = f'Awaitable[{rtypevar}]'
|
||||||
out += (
|
out += (
|
||||||
f'\n'
|
f'\n'
|
||||||
f' {pfx}def send{sfx}(self, message: Message)'
|
f' def send{sfx}(self, message: Message)'
|
||||||
f' -> Response | None:\n'
|
f' -> {rtypevar}:\n'
|
||||||
f' """Send a message {how}."""\n'
|
f' """Send a message {how}."""\n'
|
||||||
f' return {awt}self._sender.'
|
f' return {awt}self._sender.'
|
||||||
f'send{sfx}(self._obj, message)\n'
|
f'send{sfx}(self._obj, message)\n'
|
||||||
|
|
@ -509,7 +533,9 @@ class MessageProtocol:
|
||||||
ppre = '_' if private else ''
|
ppre = '_' if private else ''
|
||||||
msgtypes = list(self.message_ids_by_type.keys())
|
msgtypes = list(self.message_ids_by_type.keys())
|
||||||
out = self._get_module_header(
|
out = self._get_module_header(
|
||||||
'receiver', extra_import_code=protocol_module_level_import_code
|
'receiver',
|
||||||
|
extra_import_code=protocol_module_level_import_code,
|
||||||
|
enable_async_sends=False,
|
||||||
)
|
)
|
||||||
ccind = textwrap.indent(protocol_create_code, ' ')
|
ccind = textwrap.indent(protocol_create_code, ' ')
|
||||||
out += (
|
out += (
|
||||||
|
|
@ -602,11 +628,11 @@ class MessageProtocol:
|
||||||
if is_async:
|
if is_async:
|
||||||
out += (
|
out += (
|
||||||
'\n'
|
'\n'
|
||||||
' async def handle_raw_message(\n'
|
' def handle_raw_message(\n'
|
||||||
' self, message: str, raise_unregistered: bool = False\n'
|
' self, message: str, raise_unregistered: bool = False\n'
|
||||||
' ) -> str:\n'
|
' ) -> Awaitable[str]:\n'
|
||||||
' """Asynchronously handle a raw incoming message."""\n'
|
' """Asynchronously handle a raw incoming message."""\n'
|
||||||
' return await self._receiver.'
|
' return self._receiver.'
|
||||||
'handle_raw_message_async(\n'
|
'handle_raw_message_async(\n'
|
||||||
' self._obj, message, raise_unregistered\n'
|
' self._obj, message, raise_unregistered\n'
|
||||||
' )\n'
|
' )\n'
|
||||||
|
|
|
||||||
129
dist/ba_data/python/efro/message/_receiver.py
vendored
129
dist/ba_data/python/efro/message/_receiver.py
vendored
|
|
@ -62,12 +62,6 @@ class MessageReceiver:
|
||||||
[Any, Message | None, Response | SysResponse, dict], None
|
[Any, Message | None, Response | SysResponse, dict], None
|
||||||
] | None = None
|
] | None = None
|
||||||
|
|
||||||
# TODO: don't currently have async encode equivalent
|
|
||||||
# or either for sender; can add as needed.
|
|
||||||
self._decode_filter_async_call: Callable[
|
|
||||||
[Any, dict, Message], Awaitable[None]
|
|
||||||
] | None = None
|
|
||||||
|
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
def register_handler(
|
def register_handler(
|
||||||
self, call: Callable[[Any, Message], Response | None]
|
self, call: Callable[[Any, Message], Response | None]
|
||||||
|
|
@ -96,14 +90,17 @@ class MessageReceiver:
|
||||||
|
|
||||||
# Make sure we are only given async methods if we are an async handler
|
# Make sure we are only given async methods if we are an async handler
|
||||||
# and sync ones otherwise.
|
# and sync ones otherwise.
|
||||||
is_async = inspect.iscoroutinefunction(call)
|
# UPDATE - can't do this anymore since we now sometimes use
|
||||||
if self.is_async != is_async:
|
# regular functions which return awaitables instead of having
|
||||||
msg = (
|
# the entire function be async.
|
||||||
'Expected a sync method; found an async one.'
|
# is_async = inspect.iscoroutinefunction(call)
|
||||||
if is_async
|
# if self.is_async != is_async:
|
||||||
else 'Expected an async method; found a sync one.'
|
# msg = (
|
||||||
)
|
# 'Expected a sync method; found an async one.'
|
||||||
raise ValueError(msg)
|
# if is_async
|
||||||
|
# else 'Expected an async method; found a sync one.'
|
||||||
|
# )
|
||||||
|
# raise ValueError(msg)
|
||||||
|
|
||||||
# Check annotation types to determine what message types we handle.
|
# Check annotation types to determine what message types we handle.
|
||||||
# Return-type annotation can be a Union, but we probably don't
|
# Return-type annotation can be a Union, but we probably don't
|
||||||
|
|
@ -189,19 +186,6 @@ class MessageReceiver:
|
||||||
self._decode_filter_call = call
|
self._decode_filter_call = call
|
||||||
return call
|
return call
|
||||||
|
|
||||||
def decode_filter_async_method(
|
|
||||||
self, call: Callable[[Any, dict, Message], Awaitable[None]]
|
|
||||||
) -> Callable[[Any, dict, Message], Awaitable[None]]:
|
|
||||||
"""Function decorator for defining a decode filter.
|
|
||||||
|
|
||||||
Decode filters can be used to extract extra data from incoming
|
|
||||||
message dicts. Note that this version will only work with
|
|
||||||
handle_raw_message_async().
|
|
||||||
"""
|
|
||||||
assert self._decode_filter_async_call is None
|
|
||||||
self._decode_filter_async_call = call
|
|
||||||
return call
|
|
||||||
|
|
||||||
def encode_filter_method(
|
def encode_filter_method(
|
||||||
self,
|
self,
|
||||||
call: Callable[
|
call: Callable[
|
||||||
|
|
@ -247,24 +231,6 @@ class MessageReceiver:
|
||||||
bound_obj, _msg_dict, msg_decoded = self._decode_incoming_message_base(
|
bound_obj, _msg_dict, msg_decoded = self._decode_incoming_message_base(
|
||||||
bound_obj=bound_obj, msg=msg
|
bound_obj=bound_obj, msg=msg
|
||||||
)
|
)
|
||||||
|
|
||||||
# If they've set an async filter but are calling sync
|
|
||||||
# handle_raw_message() its likely a bug.
|
|
||||||
assert self._decode_filter_async_call is None
|
|
||||||
|
|
||||||
return msg_decoded
|
|
||||||
|
|
||||||
async def _decode_incoming_message_async(
|
|
||||||
self, bound_obj: Any, msg: str
|
|
||||||
) -> Message:
|
|
||||||
bound_obj, msg_dict, msg_decoded = self._decode_incoming_message_base(
|
|
||||||
bound_obj=bound_obj, msg=msg
|
|
||||||
)
|
|
||||||
|
|
||||||
if self._decode_filter_async_call is not None:
|
|
||||||
await self._decode_filter_async_call(
|
|
||||||
bound_obj, msg_dict, msg_decoded
|
|
||||||
)
|
|
||||||
return msg_decoded
|
return msg_decoded
|
||||||
|
|
||||||
def encode_user_response(
|
def encode_user_response(
|
||||||
|
|
@ -316,6 +282,7 @@ class MessageReceiver:
|
||||||
"""
|
"""
|
||||||
assert not self.is_async, "can't call sync handler on async receiver"
|
assert not self.is_async, "can't call sync handler on async receiver"
|
||||||
msg_decoded: Message | None = None
|
msg_decoded: Message | None = None
|
||||||
|
msgtype: type[Message] | None = None
|
||||||
try:
|
try:
|
||||||
msg_decoded = self._decode_incoming_message(bound_obj, msg)
|
msg_decoded = self._decode_incoming_message(bound_obj, msg)
|
||||||
msgtype = type(msg_decoded)
|
msgtype = type(msg_decoded)
|
||||||
|
|
@ -335,42 +302,94 @@ class MessageReceiver:
|
||||||
bound_obj, msg_decoded, exc
|
bound_obj, msg_decoded, exc
|
||||||
)
|
)
|
||||||
if dolog:
|
if dolog:
|
||||||
|
if msgtype is not None:
|
||||||
|
logging.exception(
|
||||||
|
'Error handling %s.%s message.',
|
||||||
|
msgtype.__module__,
|
||||||
|
msgtype.__qualname__,
|
||||||
|
)
|
||||||
|
else:
|
||||||
logging.exception('Error in efro.message handling.')
|
logging.exception('Error in efro.message handling.')
|
||||||
return rstr
|
return rstr
|
||||||
|
|
||||||
async def handle_raw_message_async(
|
def handle_raw_message_async(
|
||||||
self, bound_obj: Any, msg: str, raise_unregistered: bool = False
|
self, bound_obj: Any, msg: str, raise_unregistered: bool = False
|
||||||
) -> str:
|
) -> Awaitable[str]:
|
||||||
"""Should be called when the receiver gets a message.
|
"""Should be called when the receiver gets a message.
|
||||||
|
|
||||||
The return value is the raw response to the message.
|
The return value is the raw response to the message.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Note: This call is synchronous so that the first part of it can
|
||||||
|
# happen synchronously. If the whole call were async we wouldn't be
|
||||||
|
# able to guarantee that messages handlers would be called in the
|
||||||
|
# order the messages were received.
|
||||||
|
|
||||||
assert self.is_async, "can't call async handler on sync receiver"
|
assert self.is_async, "can't call async handler on sync receiver"
|
||||||
msg_decoded: Message | None = None
|
msg_decoded: Message | None = None
|
||||||
|
msgtype: type[Message] | None = None
|
||||||
try:
|
try:
|
||||||
msg_decoded = await self._decode_incoming_message_async(
|
msg_decoded = self._decode_incoming_message(bound_obj, msg)
|
||||||
bound_obj, msg
|
|
||||||
)
|
|
||||||
msgtype = type(msg_decoded)
|
msgtype = type(msg_decoded)
|
||||||
handler = self._handlers.get(msgtype)
|
handler = self._handlers.get(msgtype)
|
||||||
if handler is None:
|
if handler is None:
|
||||||
raise RuntimeError(f'Got unhandled message type: {msgtype}.')
|
raise RuntimeError(f'Got unhandled message type: {msgtype}.')
|
||||||
response = await handler(bound_obj, msg_decoded)
|
handler_awaitable = handler(bound_obj, msg_decoded)
|
||||||
assert isinstance(response, Response | None)
|
|
||||||
return self.encode_user_response(bound_obj, msg_decoded, response)
|
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
if raise_unregistered and isinstance(
|
if raise_unregistered and isinstance(
|
||||||
exc, UnregisteredMessageIDError
|
exc, UnregisteredMessageIDError
|
||||||
):
|
):
|
||||||
raise
|
raise
|
||||||
rstr, dolog = self.encode_error_response(
|
return self._handle_raw_message_async_error(
|
||||||
bound_obj, msg_decoded, exc
|
bound_obj, msg_decoded, msgtype, exc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Return an awaitable to handle the rest asynchronously.
|
||||||
|
return self._handle_raw_message_async(
|
||||||
|
bound_obj, msg_decoded, msgtype, handler_awaitable
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _handle_raw_message_async_error(
|
||||||
|
self,
|
||||||
|
bound_obj: Any,
|
||||||
|
msg_decoded: Message | None,
|
||||||
|
msgtype: type[Message] | None,
|
||||||
|
exc: Exception,
|
||||||
|
) -> str:
|
||||||
|
rstr, dolog = self.encode_error_response(bound_obj, msg_decoded, exc)
|
||||||
if dolog:
|
if dolog:
|
||||||
|
if msgtype is not None:
|
||||||
|
logging.exception(
|
||||||
|
'Error handling %s.%s message.',
|
||||||
|
msgtype.__module__,
|
||||||
|
msgtype.__qualname__,
|
||||||
|
)
|
||||||
|
else:
|
||||||
logging.exception('Error in efro.message handling.')
|
logging.exception('Error in efro.message handling.')
|
||||||
return rstr
|
return rstr
|
||||||
|
|
||||||
|
async def _handle_raw_message_async(
|
||||||
|
self,
|
||||||
|
bound_obj: Any,
|
||||||
|
msg_decoded: Message,
|
||||||
|
msgtype: type[Message] | None,
|
||||||
|
handler_awaitable: Awaitable[Response | None],
|
||||||
|
) -> str:
|
||||||
|
"""Should be called when the receiver gets a message.
|
||||||
|
|
||||||
|
The return value is the raw response to the message.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
response = await handler_awaitable
|
||||||
|
assert isinstance(response, Response | None)
|
||||||
|
return self.encode_user_response(bound_obj, msg_decoded, response)
|
||||||
|
|
||||||
|
except Exception as exc:
|
||||||
|
return await self._handle_raw_message_async_error(
|
||||||
|
bound_obj, msg_decoded, msgtype, exc
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class BoundMessageReceiver:
|
class BoundMessageReceiver:
|
||||||
"""Base bound receiver class."""
|
"""Base bound receiver class."""
|
||||||
|
|
|
||||||
122
dist/ba_data/python/efro/message/_sender.py
vendored
122
dist/ba_data/python/efro/message/_sender.py
vendored
|
|
@ -44,6 +44,9 @@ class MessageSender:
|
||||||
self._send_async_raw_message_call: Callable[
|
self._send_async_raw_message_call: Callable[
|
||||||
[Any, str], Awaitable[str]
|
[Any, str], Awaitable[str]
|
||||||
] | None = None
|
] | None = None
|
||||||
|
self._send_async_raw_message_ex_call: Callable[
|
||||||
|
[Any, str, Message], Awaitable[str]
|
||||||
|
] | None = None
|
||||||
self._encode_filter_call: Callable[
|
self._encode_filter_call: Callable[
|
||||||
[Any, Message, dict], None
|
[Any, Message, dict], None
|
||||||
] | None = None
|
] | None = None
|
||||||
|
|
@ -75,11 +78,32 @@ class MessageSender:
|
||||||
CommunicationErrors raised here will be returned to the sender
|
CommunicationErrors raised here will be returned to the sender
|
||||||
as such; all other exceptions will result in a RuntimeError for
|
as such; all other exceptions will result in a RuntimeError for
|
||||||
the sender.
|
the sender.
|
||||||
|
|
||||||
|
IMPORTANT: Generally async send methods should not be implemented
|
||||||
|
as 'async' methods, but instead should be regular methods that
|
||||||
|
return awaitable objects. This way it can be guaranteed that
|
||||||
|
outgoing messages are synchronously enqueued in the correct
|
||||||
|
order, and then async calls can be returned which finish each
|
||||||
|
send. If the entire call is async, they may be enqueued out of
|
||||||
|
order in rare cases.
|
||||||
"""
|
"""
|
||||||
assert self._send_async_raw_message_call is None
|
assert self._send_async_raw_message_call is None
|
||||||
self._send_async_raw_message_call = call
|
self._send_async_raw_message_call = call
|
||||||
return call
|
return call
|
||||||
|
|
||||||
|
def send_async_ex_method(
|
||||||
|
self, call: Callable[[Any, str, Message], Awaitable[str]]
|
||||||
|
) -> Callable[[Any, str, Message], Awaitable[str]]:
|
||||||
|
"""Function decorator for extended send-async method.
|
||||||
|
|
||||||
|
Version of send_async_method which is also is passed the original
|
||||||
|
unencoded message; can be useful for cases where metadata is sent
|
||||||
|
along with messages referring to their payloads/etc.
|
||||||
|
"""
|
||||||
|
assert self._send_async_raw_message_ex_call is None
|
||||||
|
self._send_async_raw_message_ex_call = call
|
||||||
|
return call
|
||||||
|
|
||||||
def encode_filter_method(
|
def encode_filter_method(
|
||||||
self, call: Callable[[Any, Message, dict], None]
|
self, call: Callable[[Any, Message, dict], None]
|
||||||
) -> Callable[[Any, Message, dict], None]:
|
) -> Callable[[Any, Message, dict], None]:
|
||||||
|
|
@ -126,17 +150,34 @@ class MessageSender:
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def send_async(
|
def send_async(
|
||||||
self, bound_obj: Any, message: Message
|
self, bound_obj: Any, message: Message
|
||||||
) -> Response | None:
|
) -> Awaitable[Response | None]:
|
||||||
"""Send a message asynchronously."""
|
"""Send a message asynchronously."""
|
||||||
|
|
||||||
|
# Note: This call is synchronous so that the first part of it can
|
||||||
|
# happen synchronously. If the whole call were async we wouldn't be
|
||||||
|
# able to guarantee that messages sent in order would actually go
|
||||||
|
# out in order.
|
||||||
|
raw_response_awaitable = self.fetch_raw_response_async(
|
||||||
|
bound_obj=bound_obj,
|
||||||
|
message=message,
|
||||||
|
)
|
||||||
|
# Now return an awaitable that will finish the send.
|
||||||
|
return self._send_async_awaitable(
|
||||||
|
bound_obj, message, raw_response_awaitable
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _send_async_awaitable(
|
||||||
|
self,
|
||||||
|
bound_obj: Any,
|
||||||
|
message: Message,
|
||||||
|
raw_response_awaitable: Awaitable[Response | SysResponse],
|
||||||
|
) -> Response | None:
|
||||||
return self.unpack_raw_response(
|
return self.unpack_raw_response(
|
||||||
bound_obj=bound_obj,
|
bound_obj=bound_obj,
|
||||||
message=message,
|
message=message,
|
||||||
raw_response=await self.fetch_raw_response_async(
|
raw_response=await raw_response_awaitable,
|
||||||
bound_obj=bound_obj,
|
|
||||||
message=message,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def fetch_raw_response(
|
def fetch_raw_response(
|
||||||
|
|
@ -171,27 +212,68 @@ class MessageSender:
|
||||||
return response
|
return response
|
||||||
return self._decode_raw_response(bound_obj, message, response_encoded)
|
return self._decode_raw_response(bound_obj, message, response_encoded)
|
||||||
|
|
||||||
async def fetch_raw_response_async(
|
def fetch_raw_response_async(
|
||||||
self, bound_obj: Any, message: Message
|
self, bound_obj: Any, message: Message
|
||||||
) -> Response | SysResponse:
|
) -> Awaitable[Response | SysResponse]:
|
||||||
"""Fetch a raw message response.
|
"""Fetch a raw message response awaitable.
|
||||||
|
|
||||||
The result of this should be passed to unpack_raw_response() to
|
The result of this should be awaited and then passed to
|
||||||
produce the final message result.
|
unpack_raw_response() to produce the final message result.
|
||||||
|
|
||||||
Generally you can just call send(); calling fetch and unpack
|
Generally you can just call send(); calling fetch and unpack
|
||||||
manually is for when message sending and response handling need
|
manually is for when message sending and response handling need
|
||||||
to happen in different contexts/threads.
|
to happen in different contexts/threads.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if self._send_async_raw_message_call is None:
|
# Note: This call is synchronous so that the first part of it can
|
||||||
|
# happen synchronously. If the whole call were async we wouldn't be
|
||||||
|
# able to guarantee that messages sent in order would actually go
|
||||||
|
# out in order.
|
||||||
|
if (
|
||||||
|
self._send_async_raw_message_call is None
|
||||||
|
and self._send_async_raw_message_ex_call is None
|
||||||
|
):
|
||||||
raise RuntimeError('send_async() is unimplemented for this type.')
|
raise RuntimeError('send_async() is unimplemented for this type.')
|
||||||
|
|
||||||
msg_encoded = self._encode_message(bound_obj, message)
|
msg_encoded = self._encode_message(bound_obj, message)
|
||||||
try:
|
try:
|
||||||
response_encoded = await self._send_async_raw_message_call(
|
if self._send_async_raw_message_ex_call is not None:
|
||||||
|
send_awaitable = self._send_async_raw_message_ex_call(
|
||||||
|
bound_obj, msg_encoded, message
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
assert self._send_async_raw_message_call is not None
|
||||||
|
send_awaitable = self._send_async_raw_message_call(
|
||||||
bound_obj, msg_encoded
|
bound_obj, msg_encoded
|
||||||
)
|
)
|
||||||
|
except Exception as exc:
|
||||||
|
return self._error_awaitable(exc)
|
||||||
|
|
||||||
|
# Now return an awaitable to finish the job.
|
||||||
|
return self._fetch_raw_response_awaitable(
|
||||||
|
bound_obj, message, send_awaitable
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _error_awaitable(self, exc: Exception) -> SysResponse:
|
||||||
|
response = ErrorSysResponse(
|
||||||
|
error_message='Error in MessageSender @send_async_method.',
|
||||||
|
error_type=(
|
||||||
|
ErrorSysResponse.ErrorType.COMMUNICATION
|
||||||
|
if isinstance(exc, CommunicationError)
|
||||||
|
else ErrorSysResponse.ErrorType.LOCAL
|
||||||
|
),
|
||||||
|
)
|
||||||
|
# Can include the actual exception since we'll be looking at
|
||||||
|
# this locally; might be helpful.
|
||||||
|
response.set_local_exception(exc)
|
||||||
|
return response
|
||||||
|
|
||||||
|
async def _fetch_raw_response_awaitable(
|
||||||
|
self, bound_obj: Any, message: Message, send_awaitable: Awaitable[str]
|
||||||
|
) -> Response | SysResponse:
|
||||||
|
|
||||||
|
try:
|
||||||
|
response_encoded = await send_awaitable
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
response = ErrorSysResponse(
|
response = ErrorSysResponse(
|
||||||
error_message='Error in MessageSender @send_async_method.',
|
error_message='Error in MessageSender @send_async_method.',
|
||||||
|
|
@ -354,23 +436,23 @@ class BoundMessageSender:
|
||||||
assert self._obj is not None
|
assert self._obj is not None
|
||||||
return self._sender.send(bound_obj=self._obj, message=message)
|
return self._sender.send(bound_obj=self._obj, message=message)
|
||||||
|
|
||||||
async def send_async_untyped(self, message: Message) -> Response | None:
|
def send_async_untyped(
|
||||||
|
self, message: Message
|
||||||
|
) -> Awaitable[Response | None]:
|
||||||
"""Send a message asynchronously.
|
"""Send a message asynchronously.
|
||||||
|
|
||||||
Whenever possible, use the send_async() call provided by generated
|
Whenever possible, use the send_async() call provided by generated
|
||||||
subclasses instead of this; it will provide better type safety.
|
subclasses instead of this; it will provide better type safety.
|
||||||
"""
|
"""
|
||||||
assert self._obj is not None
|
assert self._obj is not None
|
||||||
return await self._sender.send_async(
|
return self._sender.send_async(bound_obj=self._obj, message=message)
|
||||||
bound_obj=self._obj, message=message
|
|
||||||
)
|
|
||||||
|
|
||||||
async def fetch_raw_response_async_untyped(
|
def fetch_raw_response_async_untyped(
|
||||||
self, message: Message
|
self, message: Message
|
||||||
) -> Response | SysResponse:
|
) -> Awaitable[Response | SysResponse]:
|
||||||
"""Split send (part 1 of 2)."""
|
"""Split send (part 1 of 2)."""
|
||||||
assert self._obj is not None
|
assert self._obj is not None
|
||||||
return await self._sender.fetch_raw_response_async(
|
return self._sender.fetch_raw_response_async(
|
||||||
bound_obj=self._obj, message=message
|
bound_obj=self._obj, message=message
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
55
dist/ba_data/python/efro/rpc.py
vendored
55
dist/ba_data/python/efro/rpc.py
vendored
|
|
@ -9,6 +9,7 @@ import asyncio
|
||||||
import logging
|
import logging
|
||||||
import weakref
|
import weakref
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from collections import deque
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from threading import current_thread
|
from threading import current_thread
|
||||||
from typing import TYPE_CHECKING, Annotated
|
from typing import TYPE_CHECKING, Annotated
|
||||||
|
|
@ -201,7 +202,7 @@ class RPCEndpoint:
|
||||||
self._closing = False
|
self._closing = False
|
||||||
self._did_wait_closed = False
|
self._did_wait_closed = False
|
||||||
self._event_loop = asyncio.get_running_loop()
|
self._event_loop = asyncio.get_running_loop()
|
||||||
self._out_packets: list[bytes] = []
|
self._out_packets = deque[bytes]()
|
||||||
self._have_out_packets = asyncio.Event()
|
self._have_out_packets = asyncio.Event()
|
||||||
self._run_called = False
|
self._run_called = False
|
||||||
self._peer_info: _PeerInfo | None = None
|
self._peer_info: _PeerInfo | None = None
|
||||||
|
|
@ -323,12 +324,12 @@ class RPCEndpoint:
|
||||||
if self.debug_print:
|
if self.debug_print:
|
||||||
self.debug_print_call(f'{self._label}: finished.')
|
self.debug_print_call(f'{self._label}: finished.')
|
||||||
|
|
||||||
async def send_message(
|
def send_message(
|
||||||
self,
|
self,
|
||||||
message: bytes,
|
message: bytes,
|
||||||
timeout: float | None = None,
|
timeout: float | None = None,
|
||||||
close_on_error: bool = True,
|
close_on_error: bool = True,
|
||||||
) -> bytes:
|
) -> Awaitable[bytes]:
|
||||||
"""Send a message to the peer and return a response.
|
"""Send a message to the peer and return a response.
|
||||||
|
|
||||||
If timeout is not provided, the default will be used.
|
If timeout is not provided, the default will be used.
|
||||||
|
|
@ -340,7 +341,10 @@ class RPCEndpoint:
|
||||||
respect to a given endpoint. Pass close_on_error=False to
|
respect to a given endpoint. Pass close_on_error=False to
|
||||||
override this for a particular message.
|
override this for a particular message.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-branches
|
# Note: This call is synchronous so that the first part of it
|
||||||
|
# (enqueueing outgoing messages) happens synchronously. If it were
|
||||||
|
# a pure async call it could be possible for send order to vary
|
||||||
|
# based on how the async tasks get processed.
|
||||||
|
|
||||||
if self.debug_print_io:
|
if self.debug_print_io:
|
||||||
self.debug_print_call(
|
self.debug_print_call(
|
||||||
|
|
@ -358,16 +362,6 @@ class RPCEndpoint:
|
||||||
f'{self._label}: have peerinfo? {self._peer_info is not None}.'
|
f'{self._label}: have peerinfo? {self._peer_info is not None}.'
|
||||||
)
|
)
|
||||||
|
|
||||||
# We need to know their protocol, so if we haven't gotten a handshake
|
|
||||||
# from them yet, just wait.
|
|
||||||
while self._peer_info is None:
|
|
||||||
await asyncio.sleep(0.01)
|
|
||||||
assert self._peer_info is not None
|
|
||||||
|
|
||||||
if self._peer_info.protocol == 1:
|
|
||||||
if len(message) > 65535:
|
|
||||||
raise RuntimeError('Message cannot be larger than 65535 bytes')
|
|
||||||
|
|
||||||
# message_id is a 16 bit looping value.
|
# message_id is a 16 bit looping value.
|
||||||
message_id = self._next_message_id
|
message_id = self._next_message_id
|
||||||
self._next_message_id = (self._next_message_id + 1) % 65536
|
self._next_message_id = (self._next_message_id + 1) % 65536
|
||||||
|
|
@ -420,8 +414,35 @@ class RPCEndpoint:
|
||||||
if timeout is None:
|
if timeout is None:
|
||||||
timeout = self.DEFAULT_MESSAGE_TIMEOUT
|
timeout = self.DEFAULT_MESSAGE_TIMEOUT
|
||||||
assert timeout is not None
|
assert timeout is not None
|
||||||
|
|
||||||
|
bytes_awaitable = msgobj.wait_task
|
||||||
|
|
||||||
|
# Now complete the send asynchronously.
|
||||||
|
return self._send_message(
|
||||||
|
message, timeout, close_on_error, bytes_awaitable, message_id
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _send_message(
|
||||||
|
self,
|
||||||
|
message: bytes,
|
||||||
|
timeout: float | None,
|
||||||
|
close_on_error: bool,
|
||||||
|
bytes_awaitable: asyncio.Task[bytes],
|
||||||
|
message_id: int,
|
||||||
|
) -> bytes:
|
||||||
|
|
||||||
|
# We need to know their protocol, so if we haven't gotten a handshake
|
||||||
|
# from them yet, just wait.
|
||||||
|
while self._peer_info is None:
|
||||||
|
await asyncio.sleep(0.01)
|
||||||
|
assert self._peer_info is not None
|
||||||
|
|
||||||
|
if self._peer_info.protocol == 1:
|
||||||
|
if len(message) > 65535:
|
||||||
|
raise RuntimeError('Message cannot be larger than 65535 bytes')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return await asyncio.wait_for(msgobj.wait_task, timeout=timeout)
|
return await asyncio.wait_for(bytes_awaitable, timeout=timeout)
|
||||||
except asyncio.CancelledError as exc:
|
except asyncio.CancelledError as exc:
|
||||||
# Question: we assume this means the above wait_for() was
|
# Question: we assume this means the above wait_for() was
|
||||||
# cancelled; how do we distinguish between this and *us* being
|
# cancelled; how do we distinguish between this and *us* being
|
||||||
|
|
@ -449,7 +470,7 @@ class RPCEndpoint:
|
||||||
)
|
)
|
||||||
|
|
||||||
# Stop waiting on the response.
|
# Stop waiting on the response.
|
||||||
msgobj.wait_task.cancel()
|
bytes_awaitable.cancel()
|
||||||
|
|
||||||
# Remove the record of this message.
|
# Remove the record of this message.
|
||||||
del self._in_flight_messages[message_id]
|
del self._in_flight_messages[message_id]
|
||||||
|
|
@ -738,7 +759,7 @@ class RPCEndpoint:
|
||||||
await self._have_out_packets.wait()
|
await self._have_out_packets.wait()
|
||||||
|
|
||||||
assert self._out_packets
|
assert self._out_packets
|
||||||
data = self._out_packets.pop(0)
|
data = self._out_packets.popleft()
|
||||||
|
|
||||||
# Important: only clear this once all packets are sent.
|
# Important: only clear this once all packets are sent.
|
||||||
if not self._out_packets:
|
if not self._out_packets:
|
||||||
|
|
|
||||||
BIN
dist/bombsquad_headless
vendored
BIN
dist/bombsquad_headless
vendored
Binary file not shown.
BIN
dist/bombsquad_headless_aarch64
vendored
BIN
dist/bombsquad_headless_aarch64
vendored
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue