diff --git a/chatnotifications.xml b/chatnotifications.xml
index f7b081e..ce9dd7c 100644
--- a/chatnotifications.xml
+++ b/chatnotifications.xml
@@ -83,7 +83,7 @@
~y~~h~Avertissement~h~~s~: Tu as perdu {0} armes, possiblement à cause d'un cheater, mais notre (C)GTA CnR Shield(/C) ~g~a restauré ~s~tes armes perdues.
~y~~h~Uwaga~h~~s~: Utraciłeś {0} broni, prawdopodobnie usunął je oszust, ale (C)GTA CnR Shield(/C) ~g~przywróciła ~s~je dla ciebie.
~y~~h~تحذير~h~~s~: لقد خسرت {0} أسلحة, ربما قام بغشاش أضافتهم الي حسابك ، و لكن (C)GTA CnR Shield(/C) ~g~رجعها ~s~لك.
- ~y~~h~警告~h~~s~:你丟失了{0} 個武器,可能是作弊者所為,但是(C)GTA CnR Shield(/C) ~g~為你恢復了~s ~它們.
+ ~y~~h~警告~h~~s~:你丟失了{0} 個武器,可能是作弊者所為,但是(C)GTA CnR Shield(/C) ~g~為你恢復了~s~它們.
@@ -93,7 +93,7 @@
~y~~h~Let op~h~~s~: Je had {0} ongeautoriseerde wapens, mogelijk ingespawnt door een hacker om je in problemen te krigen, maar (C)GTA CnR Shield(/C) heeft ze voor je ~r~weggehaald~s~.
~y~~h~Uyarı~h~~s~: Sende vardı {0} yetkisiz silahlar, muhtemelen başınızı belaya sokmak için bir dolandırıcı tarafından yaratılmıştır, ancak (C)GTA CnR Shield(/C) ~r~kaldırıldı ~s~senin için.
~y~~h~Achtung~h~~s~: Du hast {0} unerlaubte Waffe, möglicherweise durch einen Cheater, um dich in Schwierigkeiten zu bringen, aber das (C)GTA CnR Shield(/C) hat sie für dich ~r~entfernt~s~.
- ~y~~h~Advertencia~h~~s~: Tenías {0} armas no autorizadas, posiblemente creadas por un hacker para meterte en problemas, pero (C)GTA CnR Shield(/C) ~r~retiradas ~s ~ ellos para ti.
+ ~y~~h~Advertencia~h~~s~: Tenías {0} armas no autorizadas, posiblemente creadas por un hacker para meterte en problemas, pero (C)GTA CnR Shield(/C) ~r~retiradas ~s~ ellos para ti.
~y~~h~Avertissement~h~~s~: Tu avais {0} armes interdites, possiblement à cause d'un cheater pour te causer du tord, mais notre (C)GTA CnR Shield(/C) les a ~r~retirées ~s~pour toi.
~y~~h~Uwaga~h~~s~: Miałeś {0} nieautoryzowanych broni, prawdopodobnie dał ci je oszust, ale (C)GTA CnR Shield(/C) ~r~usunęła ~s~je dla ciebie.
~y~~h~تحذير~h~~s~: كان معك {0} أسلحة غير مصرح بها, ربما قام بغشاش أضافتهم الي حسابك ليوقعك في مشكلة, و لكن (C)GTA CnR Shield(/C) ~r~ازالهم ~s~من حسابك.
diff --git a/death.xml b/death.xml
index f94e901..e20ff04 100644
--- a/death.xml
+++ b/death.xml
@@ -169,7 +169,7 @@
{0} ~s~è morto di ~r~overdose~s~.
{0} ~s~zginął z ~r~przedawkowania narkotyków~s~.
{0} ~s~sonucu öldü ~r~aşırı doz~s~.
- {0} ~s~死於~r~使用藥物過量~s.
+ {0} ~s~死於~r~使用藥物過量~s~.
{0} ~s~ha muerto a causa de una ~r~sobredosis de drogas~s~.
@@ -523,7 +523,7 @@
for ~g~{0}~s~
für ~g~{0}~s~
- pour ~g~{0}~s
+ pour ~g~{0}~s~
voor ~g~{0}~s~
per ~g~{0}~s~
by zdobyć nagrodę ~g~{0}~s~
@@ -794,7 +794,7 @@
~b~Krankenversicherung ~s~aktiviert
~b~Mutuelle santé ~s~activée
~b~Zorgverzekering ~s~geactiveerd
- ~b~Assicurazione sanitaria ~g~attivata
+ ~b~Assicurazione sanitaria ~s~attivata
~b~Ubezpieczenie zdrowotne ~s~aktywowane
~b~Sağlık sigortası ~s~etkinleştirildi
~b~健康保險 ~s~已啟動
@@ -821,7 +821,7 @@
Pagato con assegno: ~g~{0}
Zapłacone przelewem: ~g~{0}
Banka havalesi ile ödenir: ~g~{0}
- 通過支票支付: ~b~{0}
+ 通過支票支付: ~g~{0}
Pagado con cheque: ~g~{0}
@@ -833,7 +833,7 @@
Pagato in contanti: ~g~{0}
Zapłacono gotówką: ~g~{0}
Nakit ödeme: ~g~{0}
- 通過現金支付: ~b~{0}
+ 通過現金支付: ~g~{0}
Pagado en efectivo: ~g~{0}
@@ -845,9 +845,9 @@
Insolvable: ~r~{0}
Openstaand: ~r~{0}
Insoluto: ~r~{0}
- Dług: ~g~{0}
+ Dług: ~r~{0}
Borç: ~r~{0}
- 傑出的: ~b~{0}
+ 傑出的: ~r~{0}
Pendiente: ~r~{0}
diff --git a/imenu.xml b/imenu.xml
index 5554118..826f82d 100644
--- a/imenu.xml
+++ b/imenu.xml
@@ -212,7 +212,7 @@
@@ -616,7 +616,7 @@
{0} kan niet ~r~{1} ~s~meer {2} van ~r~{3} ~s~dragen.
{0} taşıyamaz ~r~{1} ~s~daha fazlasını {2} of ~r~{3}~s~.
{0} kann nicht ~r~{1} ~s~weitere{2} von ~r~{3}~s~ halten.
- {0} non può contenere altri ~r~{1}{2} ~r~di {3}.
+ {0} non può contenere altri ~r~{1}{2} ~s~di {3}.
{0} ne peut pas porter plus de ~r~{1} {2} ~s~de ~r~{3}~s~.
{0} 無法攜帶 ~r~{1} ~s~個或以上的 ~r~{2}~s~.
{0} no puedes tener ~r~{1} ~s~más {2} de ~r~{3}~s~.
@@ -764,7 +764,7 @@
@@ -35,7 +35,7 @@
Devi ~r~aspettare ~s~prima di diventare un ~p~{0} ~s~nuovamente.
Du musst ~r~warten~s~, bevor du erneut ein ~p~{0} ~s~werden kannst.
Musisz ~r~poczekać ~s~zanim zostaniesz ~p~{0}em ~s~ponownie.
- 你需要 ~r~等待 ~s~ 才能 ~s~再次成為 ~p~{0}.
+ 你需要 ~r~等待 ~s~ 才能 ~s~再次成為 ~p~{0}~s~.
Debes ~r~esperar ~s~antes de convertirte en ~p~{0} ~s~nuevamente.
@@ -53,7 +53,7 @@
Je kan geen ~p~{0} ~s~worden wanneer je ~o~gezocht~s~ bent.
Non puoi diventare un ~p~{0} ~s~quando sei ~o~ricercato~s~.
No puedes convertirte en un ~p~{0} ~s~cuando estas ~o~en busqueda.~s~.
- ~s~當你被 ~o~通緝時 ~s~你不能成為一個 ~p~{0} .
+ ~s~當你被 ~o~通緝時 ~s~你不能成為一個 ~p~{0}~s~.
Nie możesz zostać ~p~{0} ~s~gdy jesteś ~o~poszukiwany~s~.
@@ -61,9 +61,9 @@
You are temporarily ~r~banned ~s~from the ~p~{0} ~s~job.
Je bent tijdelijk ~r~verbannen ~s~van de ~p~{0} ~s~baan.
- Sei temporaneamente ~r~bannato ~s~dal lavoro di ~p~{0}.
+ Sei temporaneamente ~r~bannato ~s~dal lavoro di ~p~{0}~s~.
Está ~r~baneado temporalmente ~s~del trabajo ~p~{0} ~s~.
- 你已被 ~p~{0} ~s~職業暫時 ~r~封禁.
+ 你已被 ~p~{0} ~s~職業暫時 ~r~封禁~s~.
Jesteś tymczasowo ~r~zbanowany ~s~z pracy ~p~{0}~s~.
@@ -248,7 +248,7 @@
Go to ~y~{0} ~s~and sell drugs to {1}.
Raggiungi ~y~{0} ~s~e vendi droghe a {1}.
Ga naar ~y~{0} ~s~en verkoop drugs aan {1}.
- Gehe zu ~y~ und verkaufe {1} Drogen.
+ Gehe zu ~y~{0} ~s~und verkaufe {1} Drogen.
Git ~y~{0} ~s~ve uyuşturucu sat {1}.
Ve a ~y~{0} ~s~y vende drogas a {1}.
Pójdź do ~y~{0} ~s~i sprzedaj narkotyki {1}.
@@ -270,14 +270,14 @@
- You purchased ~p~{0}g ~s~of ~p~{1} ~s~for ~r~{2}
- Hai comprato ~p~{0}g ~s~di ~p~{1} ~s~per ~r~{2}
- Je hebt ~p~{0}g ~s~van ~p~{1} ~s~ gekocht voor ~r~{2}
+ You purchased ~p~{0}g ~s~of ~p~{1} ~s~for ~r~{2}~s~
+ Hai comprato ~p~{0}g ~s~di ~p~{1} ~s~per ~r~{2}~s~
+ Je hebt ~p~{0}g ~s~van ~p~{1} ~s~ gekocht voor ~r~{2}~s~
Du hast ~p~{0}g ~p~{1} ~s~für ~r~{2}~s~ gekauft
- Satın aldın ~p~{0}g ~s~ile ilgili ~p~{1} ~s~için ~r~{2}
- Compraste ~p~{0}g ~s~de ~p~{1} ~s~por ~r~{2}
- Kupiłeś ~p~{0}g ~s~ ~p~{1} ~s~za ~r~{2}
- 你支付了 ~p~{2}g ~s~來購買 ~p~{0} ~s~個 ~r~{1}
+ Satın aldın ~p~{0}g ~s~ile ilgili ~p~{1} ~s~için ~r~{2}~s~
+ Compraste ~p~{0}g ~s~de ~p~{1} ~s~por ~r~{2}~s~
+ Kupiłeś ~p~{0}g ~s~ ~p~{1} ~s~za ~r~{2}~s~
+ 你支付了 ~p~{2}g ~s~來購買 ~p~{0} ~s~個 ~r~{1}~s~
@@ -455,7 +455,7 @@
You need to be ~b~level {0} ~s~to unlock this ~r~drug supplier~s~. Find another supplier!
Je moet ~b~level {0} ~s~ zijn om deze ~r~drug leverancier~s~ te ontgrendelen. Zoek een andere leverancier!
Devi essere ~b~livello {0} ~s~per sbloccare questo ~r~spacciatore~s~. Cerca un altro spacciatore!
- Du musst ~b~ Level {0}~s~ sein, um diesen ~r~Händler freizuschalten. Finde einen anderen Händler!
+ Du musst ~b~ Level {0}~s~ sein, um diesen ~r~Händler~s~ freizuschalten. Finde einen anderen Händler!
Musisz mieć co najmniej ~b~poziom {0} ~s~by odblokować tą ~r~dziuplę narkotykową~s~. Znajdź inną!
Debes tener ~b~nivel {0} ~s~para desbloquear este ~r~proveedor de drogas~s~. ¡Encuentra otro proveedor!
你必須達到 ~b~等級 {0} ~s~才能解鎖 ~r~毒品供應商~s~. 尋找其他供應商吧!
@@ -482,13 +482,13 @@
- {0} ~s~is looking for a mechanic in ~y~{1}.
- {0} ~s~zoekt een monteur in ~y~{1}.
- {0} ~s~sta cercando un meccanico in ~y~{1}.
- {0} ~s~is sucht nach einem Mechaniker in ~y~{1}.
- {0} ~s~está buscando un mecánico en ~y~{1}.
+ {0} ~s~is looking for a mechanic in ~y~{1}~s~.
+ {0} ~s~zoekt een monteur in ~y~{1}~s~.
+ {0} ~s~sta cercando un meccanico in ~y~{1}~s~.
+ {0} ~s~is sucht nach einem Mechaniker in ~y~{1}~s~.
+ {0} ~s~está buscando un mecánico en ~y~{1}~s~.
{0} 正在 ~y~{1} ~s~尋找技師.
- {0} ~s~szuka mechanika w ~y~{1}.
+ {0} ~s~szuka mechanika w ~y~{1}~s~.
@@ -497,7 +497,7 @@
You paid ~g~{0} ~s~to the impound office. Your ~b~{1} ~s~has been returned to your garage.
Je hebt ~g~{0} ~s~ betaald aan het in beslag name kantoor. Je ~b~{1} ~s~is terug in je garage gezet.
Hai pagato ~g~{0} ~s~all'ufficio deposito. Il tuo ~b~{1} ~s~è stato restituito al tuo garage.
- Du hast ~g~{0} ~s~ an die Verwahrstelle bezahlt. Dein ~b~{1} wurde in deine Garage zurückgebracht.
+ Du hast ~g~{0} ~s~ an die Verwahrstelle bezahlt. Dein ~b~{1} ~s~ wurde in deine Garage zurückgebracht.
Zapłaciłeś ~g~{0} ~s~do firmy holowniczej. Twój ~b~{1} ~s~został zwrócony do garażu.
Has pagado ~g~{0} ~s~a la oficina de incautación. Tu ~b~{1} ~s~ ha sido devuelto a tu garaje.
你支付了 ~g~{0} ~s~給扣押場的員工. 你的 ~b~{1} ~s~現在已經回到你的車庫.
@@ -579,7 +579,7 @@
Houd {0} ingedrukt om het ~r~voertuig ~s~weg te brengen.
Tieni premuto {0} per lasciare il ~r~veicolo~s~.
Halte {0} um das ~r~Fahrzeug ~s~abzukoppeln.
- Przytrzymaj {0} aby odstawić ~r~pojazd.
+ Przytrzymaj {0} aby odstawić ~r~pojazd~s~.
Mantén pulsado {0} para soltar el ~r~vehículo ~s~.
按住 {0} 將 ~r~車輛 ~s~放下
@@ -591,7 +591,7 @@
Schleppe widerrechtlich geparkte Fahrzeug, die mit einem gelben Kegel markiert sind, zu einem Abschleppplatz.
Holuj nieprawidłowo zaparkowane ~y~pojazdy ~s~zaznaczone żółtym pachołkiem do ~g~biura konfiskat~s~.
Remolcar ~y~vehículos aparcados ilegalmente ~señalados con un cono amarillo a un ~g~lote incautado~s~.
- 將有黃色標記的 ~y~非法停放車輛 拖至 ~g~扣押處.
+ 將有黃色標記的 ~y~非法停放車輛 拖至 ~g~扣押處~s~.
@@ -712,7 +712,7 @@
Dit voertuig is ~r~al ~s~vastgemaakt aan een ander voertuig.
Das Fahrzeug ist ~r~bereits~s~ an einem anderen Abschlepper angehangen.
"Araç ~r~zaten ~s~başka bir kamyona bağlanmıştır.
- El vehículo ~r~ya ~es~esta conectado a otro camión.
+ El vehículo ~r~ya ~s~esta conectado a otro camión.
Ten pojazd ~r~jest już ~s~podpięty do innej ciężarówki.
這輛車 ~r~已經 ~s~被連接到其他台卡車上.
@@ -736,7 +736,7 @@
Araç ~r~çok büyük ~s~bu kamyon için.
El vehículo es ~r~demasiado grande ~s~para este camión.
Ten pojazd jest ~r~za duży ~s~dla tej ciężarówki.
- 這輛載具 ~s~對這輛卡車 來說 ~r~太大了 .
+ 這輛載具 對這輛卡車 來說 ~r~太大了 ~s~.
@@ -755,7 +755,7 @@
Stay trainando il ~y~veicolo di un giocatore ~s~per ~g~soldi extra~s~, ma hai un tempo limitato. Quando il timer ~r~scade~s~ il proprietario sarà in grado di ~y~richiamarlo~s~.
Je bent een ~y~speler's voertuig ~s~ aan het slepen voor ~g~extra geld~s~, maar je hebt beperkt tijd. Wanneer de timer ~r~afloopt~s~, kan de eigenaar zijn voertuig ~y~terugroepen~s~.
Du schleppst das Fahrzeug eines ~y~Spielers ~s~für ~g~extra Geld~s~ ab, aber du hast nur begrenzte Zeit. Wenn die Zeit ~r~ausläuft~s~, wird der Besitzer in der Lage sein ~y~das Fahrzeug ~s~zurückzurufen.
- Çekiyorsunuz ~y~bir oyuncunun aracını ~g~ekstra para için~s~, ancak zamanınız kısıtlı. zamanlayıcı ~r~biterse~s~, sahibi onu ~y~geri çağırabilecek.
+ Çekiyorsunuz ~y~bir oyuncunun aracını ~g~ekstra para için~s~, ancak zamanınız kısıtlı. zamanlayıcı ~r~biterse~s~, sahibi onu ~y~geri çağırabilecek~s~.
Estás remolcando el vehículo de un ~y~jugador ~s~por ~g~dinero extra~s~, pero tienes un tiempo limitado. Cuando el temporizador ~r~se agote~s~, el propietario podrá ~y~llamarlo otravez ~s~.
Holujesz ~y~pojazd gracz ~s~dla ~g~dodatkowej forsy~s~, lecz masz limitowany czas. Gdy stoper wybije 0 sekund ~r~upłynie~s~, właściciel będzie mógł ~y~wezwzać ~s~pojazd do siebie.
你正在為了賺取 ~g~額外的錢~s~ 而拖吊 ~y~玩家的載具~s~, 但你必須在時間內完成. 當計時器 ~r~倒數結束~s~, 車輛的擁有者將會 ~y~調回 ~s~它.
@@ -985,13 +985,13 @@
- You obtained ~b~{0}.
- Hai ottenuto ~b~{0}.
+ You obtained ~b~{0}~s~.
+ Hai ottenuto ~b~{0}~s~.
Je hebt ~b~{0}~s~ gekregen.
Du hast ~b~{0}~s~ erhalten.
- Elde ettin ~b~{0}.
- Has obtenido ~b~{0}.
- Otrzymałeś ~b~{0}.
+ Elde ettin ~b~{0}~s~.
+ Has obtenido ~b~{0}~s~.
+ Otrzymałeś ~b~{0}~s~.
@@ -1157,14 +1157,14 @@
The ~b~police officers ~s~ordered you to get in the ~b~vehicle~s~.
De ~b~politieagenten ~s~bevelen jou om in het ~b~voertuig~s~ te stappen.
Gli ~b~agenti di polizia ~s~ti hanno ordinato di salire nel ~b~veicolo~s~.uncuffing
- Los ~b~policías ~s~te ordenaron que te subieras en el ~b~vehículos~.
+ Los ~b~policías ~s~te ordenaron que te subieras en el ~b~vehículo~s~.
~b~Gliniarze ~s~kazali ci wejść do ~b~pojazdu~s~.
~b~Officer {0} ~s~ordered you to get in the ~b~vehicle~s~!
~b~Agent {0} ~s~beveelt jou om in het ~b~voertuig~s~ te stappen!
- L'~b~agente {0} ~s~ti ha ordinato di salire nel ~b~veicolo~b~!
+ L'~b~agente {0} ~s~ti ha ordinato di salire nel ~b~veicolo~s~!
¡~b~El oficial {0} ~s~te ordenó que te subieras al ~b~vehículo~s~!
~b~Oficer {0} ~s~kazał ci wejść do ~b~pojazdu~s~!
@@ -1511,7 +1511,7 @@
You asked {0} to ~o~bribe ~s~you.
Je hebt {0} gevraagd om jou ~o~om te kopen~s~.
Hai chiesto a {0} di ~o~corromperti~s~.
- Le pediste a {0} que te ~o~sobornara.
+ Le pediste a {0} que te ~o~sobornara~s~.
Zasugerowałeś {0} ~o~łapówkę ~s~.
@@ -1519,7 +1519,7 @@
~b~Officer {0} asked you to ~o~bribe ~s~them.
~b~Agent {0} heeft jou gevraagd om hem ~o~om te kopen~s~.
L'~b~agente {0} ~s~ti ha chiesto di ~o~corromperlo~s~.
- ~b~El oficial {0} te pidió que ~o~lo sobornes.
+ ~b~El oficial {0} te pidió que ~o~lo sobornes~s~.
~b~Oficer {0} zasugerował ~o~łapówkę ~s~.
@@ -1693,7 +1693,7 @@
You've been stunned by the ~b~police~s~. You're going nowhere!
Je bent gestunned door de ~b~politie~s~. Je gaat nergens heen!
Sei stato stordito dalla ~b~polizia~s~. Non andrai da nessuna parte!
- Te han sorprendido los ~b~policías~. ¡No vas a ninguna parte!
+ Te han sorprendido los ~b~policías~s~. ¡No vas a ninguna parte!
Zostałeś sparaliżowany przez ~b~policję~s~. Trzeba było spieprzać szybciej!
@@ -1866,11 +1866,11 @@
~r~Major felony
- ~o~Groot misdrijf
+ ~r~Groot misdrijf
~r~Reato grave
~r~schwere Straftat
~r~Delito grave
- ~o~Wielkie przestępstwo
+ ~r~Wielkie przestępstwo
@@ -1984,7 +1984,7 @@
You ~r~cannot rob ~s~the same ~y~store ~s~twice in a row.
- Je ~r~kan niet~s~ dezelfde ~y~winkel~s~ twee keer achter elkaar ~r~overvallen~~.
+ Je ~r~kan niet~s~ dezelfde ~y~winkel~s~ twee keer achter elkaar ~r~overvallen~s~.
~r~Non puoi rapinare ~s~lo stesso ~y~negozio ~s~due volte di fila.
Du ~r~kannst nicht ~s~denselben Laden zwei Mal hintereinander ~r~ausrauben~s~.
~r~No puedes robar ~s~la misma ~y~tienda ~s~dos veces seguidas.
@@ -2014,7 +2014,7 @@
Dit bedrijf is ~r~recent ~s~al overvallen. Probeer later nog een keer.
Quest'attivita è stata rapinata ~r~recentemente~s~. Prova più tardi.
Dieses Geschäft wurde ~r~vor kurzem ~s~ausgeraubt. Versuche es später erneut.
- Este negocio ha sido ~r~recientemente ~robado. Vuelva a intentarlo más tarde.
+ Este negocio ha sido ~r~recientemente ~s~robado. Vuelva a intentarlo más tarde.
To miejsce zostało ~r~niedawno ~s~okradzione. Spróbuj ponownie później.
@@ -2051,7 +2051,7 @@
~r~Robbery failed! Killing the clerk was not in the plan!
~r~Overval mislukt! Het vermoorden van de medewerker was niet het plan!
- ~b~Rapina fallita! Uccidere l'impiegato non era nel piano!
+ ~r~Rapina fallita! Uccidere l'impiegato non era nel piano!
~r~Überfall fehlgeschlagen! Den Angestellten zu töten war nicht der Plan!
~r~¡El robo falló! ¡Matar al empleado no estaba en el plan!
~r~Napad nieudany! Zabicie sprzedawcy nie było częścią planu!
@@ -2060,7 +2060,7 @@
~r~Robbery failed! The clerk is no longer intimidated.
~r~Overval mislukt! De medewerker is niet meer geïntimideerd.
- ~b~Rapina fallita! L'impiegato non più intimidito.
+ ~r~Rapina fallita! L'impiegato non più intimidito.
~r~Überfall fehlgeschlagen! Der Angestellte ist nicht länger eingeschüchtert.
~r~¡El robo falló! El empleado ya no esta intimidado.
~r~Napad nieudany! Sprzedawca nie jest już wystraszony!
@@ -2198,7 +2198,7 @@
Je hebt de kluis ~g~succesvol ~s~gekraakt!
Hai scassinato la cassaforte con ~g~successo~s~!
Du hast den Safe ~g~erfolgreich~s~ geknackt!
- ¡Has roto ~g~ con éxito~g~ la caja fuerte!
+ ¡Has roto ~g~ con éxito~s~ la caja fuerte!
~s~Rozpracowałeś sejf!
@@ -2214,7 +2214,7 @@
You ~r~canceled ~s~the safe robbery!
Je hebt de kluis overval ~r~geannuleerd~s~!
- Hai ~r~smesso ~sdi rapinare la cassaforte!
+ Hai ~r~smesso ~s~di rapinare la cassaforte!
Du hast den Saferaub ~r~abgebrochen~s~!
¡Has ~r~cancelado ~s~el robo de la caja fuerte!
~r~Anulowałeś ~s~kradzież sejfu!
diff --git a/player.xml b/player.xml
index 2ff0c60..da0be8b 100644
--- a/player.xml
+++ b/player.xml
@@ -480,7 +480,7 @@
~r~You're too far from any road. Your vehicle delivery has been canceled.
~r~Je bent te ver weg van de wegen. Je voertuig levering is geannuleerd.
~r~Sei troppo lontano da qualsiasi strada. La consegna del tuo veicolo è stata annullata.
- Jesteś za daleko od jakiejkolwiek drogi. Dostawa pojazdu została ~r~anulowana~s~.
+ ~r~Jesteś za daleko od jakiejkolwiek drogi. Dostawa pojazdu została anulowana.
diff --git a/properties.xml b/properties.xml
index c200f06..67196eb 100644
--- a/properties.xml
+++ b/properties.xml
@@ -59,7 +59,7 @@
(C){0}(/C) ~g~è entrato ~s~nel magazzino.
(C){0}(/C) ~g~wszedł do magazynu~s~.
(C){0}(/C) ~g~entró en el almacén~s~.
- (C){0}(/C) ~g~hat das Lagerhaus betreten.
+ (C){0}(/C) ~g~hat das Lagerhaus betreten~s~.
@@ -77,7 +77,7 @@
(C){0}(/C) è ~r~entrato forzatamente ~s~nel magazzino.
(C){0}(/C) ~g~włamał się do magazynu~s~.
(C){0}(/C) ~r~entro a la fuerza ~s~al almacén~s~.
- (C){0}(/C) ~r~ist gewaltsam in ein Lagerhaus eingedrungen.
+ (C){0}(/C) ~r~ist gewaltsam in ein Lagerhaus eingedrungen~s~.
@@ -113,7 +113,7 @@
You ~b~entered {0}'s warehouse.
- Sei ~b~entrato ~s~nel magazzino di {0}.
+ Sei ~b~entrato nel magazzino di {0}.
diff --git a/specialitems.xml b/specialitems.xml
index 77ef755..bff6e5e 100644
--- a/specialitems.xml
+++ b/specialitems.xml
@@ -172,7 +172,7 @@
~b~on duty~s~.
- ~b~sei in servizio.
+ ~b~sei in servizio~s~.
~b~in dienst~s~.
~b~im Dienst~s~ bist.
~b~de servicio~s~.
@@ -192,7 +192,7 @@
being ~b~cuffed~s~.
- vieni ~b~ammanettato.
+ vieni ~b~ammanettato~s~.
wordt ~b~geboeid~s~.
~b~festgenommen~s~ wirst.
estando ~b~esposado~s~.
@@ -472,7 +472,7 @@
Devi ~r~aspettare ~s~{0} secondi prima di poter mangiare un'altra ~o~caramella di halloween~s~.
Musisz ~r~poczekać ~s~{0} sekund przed zjedzeniem kolejnego ~o~cukierka halloweenowego~s~.
Tu tienes que ~r~esperar ~s~{0} segundos antes de comer otro ~o~dulce de Halloween~s~.
- Du musst {0} Sekunden ~r~warten, bevor du eine weitere Halloween-Süßigkeit isst.
+ Du musst {0} Sekunden ~r~warten~s~, bevor du eine weitere ~o~Halloween-Süßigkeit~s~ isst.
diff --git a/validator.py b/validator.py
index 8032e10..cc857a0 100644
--- a/validator.py
+++ b/validator.py
@@ -3,6 +3,7 @@
import sys
import xml.dom.minidom
import xml.sax
+import re
USE_COLORAMA = True
@@ -11,6 +12,11 @@
except ModuleNotFoundError:
USE_COLORAMA = False
+
+def get_text_from_node(node: xml.dom.minidom.Node):
+ return "".join(t.nodeValue for t in node.childNodes if t.nodeType == t.TEXT_NODE)
+
+
class Validator:
"""XML Validation
@@ -175,16 +181,31 @@ def check_entries(entry: xml.dom.minidom.Element, path: list[str]):
path = [*path, Validator.entry_pretty_print(entry)]
found_langs: list[str] = []
lang_attrib = "xml:lang"
+ should_end_with_format = None
+ good_string_entries = []
for string_entry in entry.childNodes:
if isinstance(string_entry, xml.dom.minidom.Text):
continue
string_entry: xml.dom.minidom.Element
if Validator.check_unknown_tag(string_entry, ["String"], path):
+ good_string_entries.append(string_entry)
for key, value in string_entry.attributes.items():
if key == lang_attrib:
+ if value == "en-US":
+ found_formats = re.findall(r"~.~", get_text_from_node(string_entry))
+ if (len(found_formats)>0):
+ should_end_with_format = found_formats[-1]
found_langs.append(value)
else:
Validator.print_error(f"Unknown attribute: {repr(key)}", path, string_entry.parse_position)
+ for string_entry in good_string_entries:
+ text = get_text_from_node(string_entry)
+ found_formats = re.findall(r"~.~", text)
+ if len(found_formats)>0 and should_end_with_format is not None:
+ found_format = found_formats[-1]
+ if found_format != should_end_with_format:
+ Validator.print_error(f"String ends with a wrong format {repr(found_format)}, expected {repr(should_end_with_format)}", path, string_entry.parse_position)
+ print(text)
if (Validator.show_lang is not None) and (Validator.show_lang not in found_langs):
if Validator.found_missing_lang <= Validator.display_limit:
Validator.print_warning(f"Missing translation for {repr(Validator.show_lang)}!", path, element_location)