diff --git a/buildSrc/src/main/kotlin/net/earthcomputer/clientcommands/buildscript/CheckLanguageFilesTask.kt b/buildSrc/src/main/kotlin/net/earthcomputer/clientcommands/buildscript/CheckLanguageFilesTask.kt index c5830c5d..34a07d1a 100644 --- a/buildSrc/src/main/kotlin/net/earthcomputer/clientcommands/buildscript/CheckLanguageFilesTask.kt +++ b/buildSrc/src/main/kotlin/net/earthcomputer/clientcommands/buildscript/CheckLanguageFilesTask.kt @@ -265,11 +265,58 @@ abstract class CheckLanguageFilesTask : DefaultTask() { private fun validateValue(filename: String, lineNumber: Int, key: String, value: String, enUs: JsonObject?): Boolean { var errored = false + val englishValue = enUs?.get(key)?.takeIf { it is JsonPrimitive && it.isString }?.let(JsonElement::getAsString) + + if (!checkFormattingCodes(filename, lineNumber, key, value)) { + errored = true + } + + if (!checkZeroWidthSpace(filename, lineNumber, key, value)) { + errored = true + } + + if (!checkNotEndWithPeriod(filename, lineNumber, key, value)) { + errored = true + } + + if (!checkFormatSpecifiers(filename, lineNumber, key, value, englishValue)) { + errored = true + } + + return !errored + } + + private fun checkFormattingCodes(filename: String, lineNumber: Int, key: String, value: String): Boolean { if (value.contains('§')) { logger.error("$filename:$lineNumber: translation '$key' contains legacy formatting code ('§'). Use formatting in code instead") - errored = true + return false } + return true + } + + private fun checkZeroWidthSpace(filename: String, lineNumber: Int, key: String, value: String): Boolean { + if (value.contains('\u200b')) { + logger.error("$filename:$lineNumber: translation '$key' contains zero width space") + return false + } + + return true + } + + private fun checkNotEndWithPeriod(filename: String, lineNumber: Int, key: String, value: String): Boolean { + // only check English, it's a mess otherwise with other languages' weird rules + if (filename == "en_us.json" && value.endsWith('.') && !value.endsWith("...")) { + logger.error("$filename:$lineNumber: translation '$key' ends with a period") + return false + } + + return true + } + + private fun checkFormatSpecifiers(filename: String, lineNumber: Int, key: String, value: String, englishValue: String?): Boolean { + var errored = false + val formatSpecifiers = formatSpecifierRegex.findAll(value) val (legalFormatSpecifiers, illegalFormatSpecifiers) = formatSpecifiers.partition { allowedFormatSpecifierRegex.matches(it.value) } @@ -326,31 +373,29 @@ abstract class CheckLanguageFilesTask : DefaultTask() { } } - if (!mixedIndexed) { - enUs?.get(key)?.takeIf { it is JsonPrimitive && it.isString }?.let(JsonElement::getAsString)?.let { englishValue -> - val (englishLegalFormatSpecifiers, englishIllegalFormatSpecifiers) = formatSpecifierRegex.findAll(englishValue).partition { allowedFormatSpecifierRegex.matches(it.value) } - if (englishIllegalFormatSpecifiers.isEmpty() && englishLegalFormatSpecifiers.all { it.groups["argIndex"] == null }) { - val numSpecifiers = englishLegalFormatSpecifiers.count { it.value.endsWith('s') } - if (allowNonIndexed) { - if (usedIndexes.size < numSpecifiers) { - logger.error("$filename:$lineNumber: translation key '$key' does not have enough format specifiers. It only has ${usedIndexes.size} while the English has $numSpecifiers") - errored = true - } else if (usedIndexes.size > numSpecifiers) { - logger.error("$filename:$lineNumber: translation key '$key' has extra format specifiers. It has ${usedIndexes.size} while the English only ha $numSpecifiers") + if (!mixedIndexed && englishValue != null) { + val (englishLegalFormatSpecifiers, englishIllegalFormatSpecifiers) = formatSpecifierRegex.findAll(englishValue).partition { allowedFormatSpecifierRegex.matches(it.value) } + if (englishIllegalFormatSpecifiers.isEmpty() && englishLegalFormatSpecifiers.all { it.groups["argIndex"] == null }) { + val numSpecifiers = englishLegalFormatSpecifiers.count { it.value.endsWith('s') } + if (allowNonIndexed) { + if (usedIndexes.size < numSpecifiers) { + logger.error("$filename:$lineNumber: translation key '$key' does not have enough format specifiers. It only has ${usedIndexes.size} while the English has $numSpecifiers") + errored = true + } else if (usedIndexes.size > numSpecifiers) { + logger.error("$filename:$lineNumber: translation key '$key' has extra format specifiers. It has ${usedIndexes.size} while the English only ha $numSpecifiers") + errored = true + } + } else { + for (i in 0 until numSpecifiers) { + if (i !in usedIndexes) { + logger.error("$filename:$lineNumber: translation key '$key' does not specify '%${i + 1}\$s' which is required because the English has $numSpecifiers format specifiers") errored = true } - } else { - for (i in 0 until numSpecifiers) { - if (i !in usedIndexes) { - logger.error("$filename:$lineNumber: translation key '$key' does not specify '%${i + 1}\$s' which is required because the English has $numSpecifiers format specifiers") - errored = true - } - } - for (i in usedIndexes) { - if (i >= numSpecifiers) { - logger.error("$filename:$lineNumber: translation key '$key' specifies '%${i + 1}\$s' which is out of bounds for $numSpecifiers format specifiers existing in the English") - errored = true - } + } + for (i in usedIndexes) { + if (i >= numSpecifiers) { + logger.error("$filename:$lineNumber: translation key '$key' specifies '%${i + 1}\$s' which is out of bounds for $numSpecifiers format specifiers existing in the English") + errored = true } } } diff --git a/src/main/resources/assets/clientcommands/lang/de_de.json b/src/main/resources/assets/clientcommands/lang/de_de.json index 2f3fa5f1..0dc5e68d 100644 --- a/src/main/resources/assets/clientcommands/lang/de_de.json +++ b/src/main/resources/assets/clientcommands/lang/de_de.json @@ -5,13 +5,13 @@ "c2cpacket.messageC2CPacket.outgoing": "du -> %s: %s", "c2cpacket.messageTooLong": "Nachricht zu lange (max. 255 Zeichen) %s Zeichen gefunden", "c2cpacket.publicKeyNotFound": "Öffentlicher Schlüssel nicht gefunden", - "c2cpacket.receivedC2CPacket": "Du hast ein C2C-Paket erhalten, aber du akzeptierst keine eingehenden C2C-Pakete! Hover um das rohe Paket zu sehen.", + "c2cpacket.receivedC2CPacket": "Du hast ein C2C-Paket erhalten, aber du akzeptierst keine eingehenden C2C-Pakete! Hover um das rohe Paket zu sehen", "c2cpacket.sentC2CPacket": "Du hast ein C2C-Paket gesendet, aber du akzeptierst keine eingehenden C2C-Pakete!", "chorusManip.goalTooFar": "Ziel ist zu weit entfernt!", "chorusManip.landing.failed": "Landungsmanipulation nicht möglich", "chorusManip.landing.success": "Landung auf: %s, %s, %s", - "chorusManip.needChorusManipulation": "Chorusfruchtmanipulation muss aktiviert sein, um diesen Befehl auszuführen.", + "chorusManip.needChorusManipulation": "Chorusfruchtmanipulation muss aktiviert sein, um diesen Befehl auszuführen", "chorusManip.setGoal": "%s-Zielbereich von %s bis %s festgelegt", "commands.calias.addAlias.aliasAlreadyExists": "Alias \"%s\" existiert bereits", @@ -54,7 +54,7 @@ "commands.ccalcstack.success.exact": "%s %s sind genau %s Stapel", "commands.ccrackrng.failed": "Knacken des Spielerseeds gescheitert", - "commands.ccrackrng.failed.help": "Hilfe: RNG-Manipulation funktioniert nicht auf manchen modifizierten Servern, im Besonderen nicht auf Paper.", + "commands.ccrackrng.failed.help": "Hilfe: RNG-Manipulation funktioniert nicht auf manchen modifizierten Servern, im Besonderen nicht auf Paper", "commands.ccrackrng.retries": "Knacke Spielerseed, Versuch %s/%s", "commands.ccrackrng.starting": "Knacke Spielerseed", "commands.ccrackrng.success": "Spieler-RNG geknackt: %s", @@ -75,9 +75,9 @@ "commands.cenchant.failed": "Es ist unmöglich oder würde zu lange brauchen, diese Verzauberungen zu bekommen", "commands.cenchant.help.uncrackedPlayerSeed": "Hilfe: du hast den Spielerseed nicht vollständig geknackt", "commands.cenchant.incompatible": "Unvereinbare Verzauberungen", - "commands.cenchant.needEnchantingPrediction": "Verzauberungsprognose muss aktiviert sein, um diesen Befehl auszuführen.", + "commands.cenchant.needEnchantingPrediction": "Verzauberungsprognose muss aktiviert sein, um diesen Befehl auszuführen", "commands.cenchant.success": "Verzauberungsmanipulation beginnt", - "commands.cenchant.uncracked": "Seed muss geknackt sein.", + "commands.cenchant.uncracked": "Seed muss geknackt sein", "commands.cfind.found": "Fand %s an %s, %s Blöcke entfernt", "commands.cfind.keepSearching.success": "Finde Objekte", @@ -90,7 +90,7 @@ "commands.cfinditem.match": "%sx %s wurden an %s gefunden", "commands.cfinditem.starting": "Suche nach %s", - "commands.cfinditem.starting.keepSearching": "Suche unendlich lange nach %s.", + "commands.cfinditem.starting.keepSearching": "Suche unendlich lange nach %s", "commands.cfinditem.total": "Fand insgesamt %sx %s", "commands.cfish.addGoal.success": "Ziel %s erfolgreich hinzugefügt", @@ -323,7 +323,7 @@ "playerManip.state.waiting_dummy_enchant": "Warte auf eine Dummy-Verzauberung", "playerManip.throwError": "Bedingung nicht möglich oder würde mehr als %s Würfe von Gegenstände erfordern", "playerManip.toolBreakWarning": "Warnung: Werkzeug hat nur mehr %s Haltbarkeit übrig", - "playerManip.uncracked": "Spieler-Seed muss geknackt sein.", + "playerManip.uncracked": "Spieler-Seed muss geknackt sein", "snakeGame.score": "Punkte: %s", "snakeGame.title": "Snake" diff --git a/src/main/resources/assets/clientcommands/lang/en_us.json b/src/main/resources/assets/clientcommands/lang/en_us.json index e9bd7c5e..a0f6884b 100644 --- a/src/main/resources/assets/clientcommands/lang/en_us.json +++ b/src/main/resources/assets/clientcommands/lang/en_us.json @@ -2,10 +2,10 @@ "c2cpacket.encryptionFailed": "Something failed while encrypting your message", "c2cpacket.malformedPacket": "You have received a malformed C2C packet:", "c2cpacket.messageC2CPacket.incoming": "%s -> you: %s", - "c2cpacket.messageC2CPacket.outgoing": "you -> %s: %s", + "c2cpacket.messageC2CPacket.outgoing": "You -> %s: %s", "c2cpacket.messageTooLong": "Message too long (max. 255 characters) got %s characters", "c2cpacket.publicKeyNotFound": "Public key not found", - "c2cpacket.receivedC2CPacket": "You have received a C2C packet, but you aren't accepting incoming C2C packets! Hover to view the raw packet.", + "c2cpacket.receivedC2CPacket": "You have received a C2C packet, but you aren't accepting incoming C2C packets! Hover to view the raw packet", "c2cpacket.sentC2CPacket": "You have sent a C2C packet, but you aren't accepting incoming C2C packets!", "c2cpacket.startTwoPlayerGameC2CPacket.incoming": "%s invited you to a game of %s", "c2cpacket.startTwoPlayerGameC2CPacket.incoming.accept": "Accept", @@ -63,7 +63,7 @@ "commands.cconnectfour.name": "Connect Four", "commands.ccrackrng.failed": "Failed to crack player seed", - "commands.ccrackrng.failed.help": "Help: RNG manipulation doesn't work on some modded servers, in particular Paper.", + "commands.ccrackrng.failed.help": "Help: RNG manipulation doesn't work on some modded servers, in particular Paper", "commands.ccrackrng.retries": "Cracking player seed, attempt %s/%s", "commands.ccrackrng.starting": "Cracking player seed", "commands.ccrackrng.success": "Player RNG cracked: %s", @@ -85,7 +85,7 @@ "commands.cenchant.help.uncrackedPlayerSeed": "Help: you have not fully cracked the player seed", "commands.cenchant.incompatible": "Incompatible enchantments", "commands.cenchant.needEnchantingPrediction": "This command requires enchanting prediction to be enabled", - "commands.cenchant.success": "Starting enchantment manipulation.", + "commands.cenchant.success": "Starting enchantment manipulation...", "commands.cenchant.uncracked": "Seed needs to be cracked", "commands.cfind.found": "Found %s at %s, %s blocks away", diff --git a/src/main/resources/assets/clientcommands/lang/id_id.json b/src/main/resources/assets/clientcommands/lang/id_id.json index 2ba5d8a9..75935001 100644 --- a/src/main/resources/assets/clientcommands/lang/id_id.json +++ b/src/main/resources/assets/clientcommands/lang/id_id.json @@ -5,13 +5,13 @@ "c2cpacket.messageC2CPacket.outgoing": "Anda -> %s: %s", "c2cpacket.messageTooLong": "Pesan terlalu panjang (max. 255 karakter) saat ini %s karakter", "c2cpacket.publicKeyNotFound": "Kunci publik tidak ditemukan", - "c2cpacket.receivedC2CPacket": "Anda telah menerima paket C2C, tetapi Anda tidak menerima paket C2C yang masuk! Sorot untuk melihat paket mentah.", + "c2cpacket.receivedC2CPacket": "Anda telah menerima paket C2C, tetapi Anda tidak menerima paket C2C yang masuk! Sorot untuk melihat paket mentah", "c2cpacket.sentC2CPacket": "Anda telah mengirimkan paket C2C, tetapi Anda tidak menerima paket C2C yang masuk!", "chorusManip.goalTooFar": "Tujuan mendarat terlalu jauh!", "chorusManip.landing.failed": "Manipulasi mendarat tidak mungkin", "chorusManip.landing.success": "Mendarat di: %s, %s, %s", - "chorusManip.needChorusManipulation": "Manipulasi Buah Korus tidak di aktifkan.", + "chorusManip.needChorusManipulation": "Manipulasi Buah Korus tidak di aktifkan", "chorusManip.setGoal": "Set %s area tujuan dari %s menjadi %s", "commands.calias.addAlias.aliasAlreadyExists": "Alias \"%s\" sudah ada", @@ -54,7 +54,7 @@ "commands.ccalcstack.success.exact": "%s %s adalah %s tumpukan persis", "commands.ccrackrng.failed": "Gagal untuk memecahkan benih pemain", - "commands.ccrackrng.failed.help": "Banutan: Manipulasi RNG tidak bekerja di beberapa server yang dimodifikasi, terutapa Paper.", + "commands.ccrackrng.failed.help": "Banutan: Manipulasi RNG tidak bekerja di beberapa server yang dimodifikasi, terutapa Paper", "commands.ccrackrng.retries": "Memecahkan benih pemain, attempt %s/%s", "commands.ccrackrng.starting": "Memecahkan benih pemain", "commands.ccrackrng.success": "RNG Pemain telah di pecahkan: %s", @@ -74,12 +74,12 @@ "commands.cenchant.failed": "Tidak mungkin atau akan memakan waktu yang lama untuk mendapatkan pesona tersebut", "commands.cenchant.help.uncrackedPlayerSeed": "Bantuan: anda belum sepenuhnya memecahkan benih pemain", "commands.cenchant.incompatible": "Pesona tidak kompatibel", - "commands.cenchant.needEnchantingPrediction": "Perintah ini memerlukan prediksi pesona aktif.", + "commands.cenchant.needEnchantingPrediction": "Perintah ini memerlukan prediksi pesona aktif", "commands.cenchant.success": "Memulai memanipulasi pesona", - "commands.cenchant.uncracked": "Seed butuh diketahui.", + "commands.cenchant.uncracked": "Seed butuh diketahui", "commands.cfind.found": "Menemukan %s di %s, %s block jaraknya", - "commands.cfind.keepSearching.success": "Mencari entitas.", + "commands.cfind.keepSearching.success": "Mencari entitas", "commands.cfind.noMatch": "Tidak ada entitas yang cocok di kuery anda", "commands.cfind.success": "%s entitas yang cocok di kuery anda", @@ -89,7 +89,7 @@ "commands.cfinditem.match": "%sx %s ketemu di %s", "commands.cfinditem.starting": "Mencari benda %s", - "commands.cfinditem.starting.keepSearching": "Mencari benda %s selamanya.", + "commands.cfinditem.starting.keepSearching": "Mencari benda %s selamanya", "commands.cfinditem.total": "Menemukan %sx %s", "commands.cfish.addGoal.success": "Berhasil menambahkan tujuan %s", @@ -108,7 +108,7 @@ "commands.cfish.help.tooManyEnchants": "Bantuan: beberapa pesona sekaligus tidak mungkin dan mungkin butuh waktu lama untuk mendapatkannya", "commands.cfish.listGoals.noGoals": "Tidak ada tujuan memancing", "commands.cfish.listGoals.success": "Ada %s tujuan memancing:", - "commands.cfish.needFishingManipulation": "Manipulasi fishing tidak dinyalakan.", + "commands.cfish.needFishingManipulation": "Manipulasi fishing tidak dinyalakan", "commands.cfish.removeGoal.success": "Berhasil menghapus tujuan %s", "commands.cfish.wrongLoot": "Tidak dapat mendapatkan loot yang benar dengan koreksi %sms, seharusnya %s ticks didepan", @@ -132,7 +132,7 @@ "commands.cglow.area.success": "Berhasil membuat %s area menjadi bersinar", "commands.cglow.entity.failed": "Tidak ada entitas untuk menjadi bersinar", - "commands.cglow.entity.keepSearching.success": "Entitas bersinar.", + "commands.cglow.entity.keepSearching.success": "Entitas bersinar", "commands.cglow.entity.success": "Berhasil membuat %s entitas menjadi bersinar", "commands.chat.success": "Berhasil membuka c🎩", @@ -307,7 +307,7 @@ "playerManip.state.waiting_dummy_enchant": "Sedang menunggu pesona asal", "playerManip.throwError": "Kondisi tidak bisa atau akan membutuhkan lebih dari %s benda yang dilempar", "playerManip.toolBreakWarning": "Peringatan: Alat mempunyai sisa %s ketahanan", - "playerManip.uncracked": "Benih Pemain butuh dipecahkan.", + "playerManip.uncracked": "Benih Pemain butuh dipecahkan", "snakeGame.score": "Skor: %s", "snakeGame.title": "Game Ular" diff --git a/src/main/resources/assets/clientcommands/lang/ja_jp.json b/src/main/resources/assets/clientcommands/lang/ja_jp.json index 01cc1490..5b4ae2c9 100644 --- a/src/main/resources/assets/clientcommands/lang/ja_jp.json +++ b/src/main/resources/assets/clientcommands/lang/ja_jp.json @@ -19,7 +19,7 @@ "commands.calias.addAlias.success": "次のエイリアスの追加に成功しました: \"%s\"", "commands.calias.file.readError": "エイリアスファイルの読み込みに失敗しました", "commands.calias.file.writeError": "エイリアスファイルへの書き込みに失敗しました", - "commands.calias.illegalFormatException": "文字のフォーマットが不正であるか引数が多すぎる・もしくは少なすぎます。", + "commands.calias.illegalFormatException": "文字のフォーマットが不正であるか引数が多すぎる・もしくは少なすぎます", "commands.calias.listAliases.noAliasesRegistered": "エイリアスが登録されていません", "commands.calias.listAliases.success": "%s 個のエイリアスが登録されています: ", "commands.calias.notFound": "エイリアス \"%s\" が見つかりません", @@ -54,7 +54,7 @@ "commands.ccalcstack.success.exact": "%s %s はちょうど %s スタックです", "commands.ccrackrng.failed": "プレイヤーのシードをクラックするのに失敗しました", - "commands.ccrackrng.failed.help": "ヘルプ: RNG操作は一部のサーバーでは動作不可能です。特にPaperベースのサーバーでは動きません。", + "commands.ccrackrng.failed.help": "ヘルプ: RNG操作は一部のサーバーでは動作不可能です。特にPaperベースのサーバーでは動きません", "commands.ccrackrng.retries": "プレイヤーシードをクラックしています: 試行回数 %s/%s", "commands.ccrackrng.starting": "プレイヤーシードをクラックしています", "commands.ccrackrng.success": "プレイヤーシードのクラックに成功しました: %s", @@ -73,11 +73,11 @@ "commands.ccreativetab.setStack.success": "\"%s\"からのスタックを索引%sに%sを保存するのに成功しました", "commands.cenchant.failed": "それらのエンチャントを取得するのは不可能であるか、時間がかかりすぎます", - "commands.cenchant.help.uncrackedPlayerSeed": "ヘルプ: プレイヤーのシードは完全にクラックされていません。", + "commands.cenchant.help.uncrackedPlayerSeed": "ヘルプ: プレイヤーのシードは完全にクラックされていません", "commands.cenchant.incompatible": "競合するエンチャント", "commands.cenchant.needEnchantingPrediction": "このコマンドはenchant predictionが有効化されている必要があります", "commands.cenchant.success": "エンチャント操作を開始しています", - "commands.cenchant.uncracked": "シードがクラックされる必要があります。", + "commands.cenchant.uncracked": "シードがクラックされる必要があります", "commands.cfind.found": " %s を次の場所で発見しました: %s, %s ブロック分離れています", "commands.cfind.keepSearching.success": "エンティティを検索しています", diff --git a/src/main/resources/assets/clientcommands/lang/nl_nl.json b/src/main/resources/assets/clientcommands/lang/nl_nl.json index b7dd44ac..9f752241 100644 --- a/src/main/resources/assets/clientcommands/lang/nl_nl.json +++ b/src/main/resources/assets/clientcommands/lang/nl_nl.json @@ -2,7 +2,7 @@ "chorusManip.goalTooFar": "Doel is te ver weg!", "chorusManip.landing.failed": "Landingsmanipulatie niet mogelijk", "chorusManip.landing.success": "Landen op: %s, %s, %s", - "chorusManip.needChorusManipulation": "Chorusfruitmanipulatie is niet geactiveerd.", + "chorusManip.needChorusManipulation": "Chorusfruitmanipulatie is niet geactiveerd", "chorusManip.setGoal": "Doelgebied %s veranderd van %s naar %s", "commands.calias.notFound": "Alias \"%s\" niet gevonden", @@ -23,12 +23,12 @@ "commands.cenchant.failed": "Het is onmogelijk of het zou te lang duren om deze betoveringen te krijgen", "commands.cenchant.incompatible": "Onverenigbare betoveringen", - "commands.cenchant.needEnchantingPrediction": "Dit commando vereist betoveringspredictie om gebruikt te worden.", + "commands.cenchant.needEnchantingPrediction": "Dit commando vereist betoveringspredictie om gebruikt te worden", "commands.cenchant.success": "Betoveringsmanipulatie aan het starten", - "commands.cenchant.uncracked": "De seed moet gekraakt zijn.", + "commands.cenchant.uncracked": "De seed moet gekraakt zijn", "commands.cfind.found": "%s gevonden op %s, %s blokken verwijderd", - "commands.cfind.keepSearching.success": "Entiteiten aan het vinden.", + "commands.cfind.keepSearching.success": "Entiteiten aan het vinden", "commands.cfind.noMatch": "Geen enkele entiteit matchte jouw query", "commands.cfind.success": "%s entiteiten matchten jouw query", @@ -37,7 +37,7 @@ "commands.cfinditem.match": "%sx %s gevonden op %s", "commands.cfinditem.starting": "Aan het zoeken naar %s", - "commands.cfinditem.starting.keepSearching": "Oneindig zoekend naar %s.", + "commands.cfinditem.starting.keepSearching": "Oneindig zoekend naar %s", "commands.cfinditem.total": "In totaal %sx %s gevonden", "commands.cfish.addGoal.success": "doel %s succesvol toegevoegd", @@ -46,7 +46,7 @@ "commands.cfish.error.outOfWater": "Dobber uit het water, de manipulatie zal niet werken", "commands.cfish.listGoals.noGoals": "Er zijn geen visdoelen", "commands.cfish.listGoals.success": "Er zijn %s visdoelen:", - "commands.cfish.needFishingManipulation": "Vismanipulatie is niet geactiveerd.", + "commands.cfish.needFishingManipulation": "Vismanipulatie is niet geactiveerd", "commands.cfish.removeGoal.success": "doel %s succesvol verwijderd", "commands.cfish.wrongLoot": "Kreeg niet de correcte buit met een correctie van %sms, zou %s ticks verder kunnen zijn", @@ -60,7 +60,7 @@ "commands.cglow.area.success": "%s oppervlakte(s) aan het gloeien", "commands.cglow.entity.failed": "Geen entiteiten om te gloeien", - "commands.cglow.entity.keepSearching.success": "Entiteiten aan het gloeien.", + "commands.cglow.entity.keepSearching.success": "Entiteiten aan het gloeien", "commands.cglow.entity.success": "%s entiteiten aan het gloeien", "commands.client.blockpos": "(%s, %s, %s)", @@ -146,5 +146,5 @@ "playerManip.state.waiting_dummy_enchant": "Aan het wachten op dummy betovering", "playerManip.throwError": "Conditie niet mogelijk of zou meer dan %s itemworpen nodig hebben", "playerManip.toolBreakWarning": "Waarschuwing: gereedschap heeft %s levensduur over", - "playerManip.uncracked": "Spelersseed moet gekraakt zijn." + "playerManip.uncracked": "Spelersseed moet gekraakt zijn" } diff --git a/src/main/resources/assets/clientcommands/lang/pl_pl.json b/src/main/resources/assets/clientcommands/lang/pl_pl.json index 923c51da..2e0461c7 100644 --- a/src/main/resources/assets/clientcommands/lang/pl_pl.json +++ b/src/main/resources/assets/clientcommands/lang/pl_pl.json @@ -133,7 +133,7 @@ "commands.client.expectedRegex": "Nieprawidłowe wyrażenie regularne %s", "commands.client.glow": "[Podświetl]", "commands.client.invalidArgumentException": "Nieprawidłowy argument '%s'", - "commands.client.notClient": "To nie jest polecenie klienta.", + "commands.client.notClient": "To nie jest polecenie klienta", "commands.client.tooFewArguments": "Zbyt mało argumentów", "commands.cparticle.success": "Pokazuję cząsteczkę %s", @@ -154,7 +154,7 @@ "commands.cstopsound.success.sourceless.any": "Zatrzymano wszystkie dźwięki", "commands.cstopsound.success.sourceless.sound": "Zatrzymano dźwięk '%s'", - "commands.ctask.list.noTasks": "Nie ma w tej chwili działających zadań.", + "commands.ctask.list.noTasks": "Nie ma w tej chwili działających zadań", "commands.ctask.list.success": "Działające zadania: %s", "commands.ctask.stop.noMatch": "Żadnych pasujących zadań", "commands.ctask.stop.success": "Zatrzymano %s zadań", diff --git a/src/main/resources/assets/clientcommands/lang/ru_ru.json b/src/main/resources/assets/clientcommands/lang/ru_ru.json index fc77703d..0e531f9e 100644 --- a/src/main/resources/assets/clientcommands/lang/ru_ru.json +++ b/src/main/resources/assets/clientcommands/lang/ru_ru.json @@ -10,7 +10,7 @@ "commands.calias.addAlias.success": "Псевдоним успешно добавлен \"%s\"", "commands.calias.file.readError": "Не удалось прочитать файл псевдонима", "commands.calias.file.writeError": "Не удалось записать в файл псевдонима", - "commands.calias.illegalFormatException": "Строка формата была либо неправильно сформирована, либо было предоставлено слишком мало аргументов.", + "commands.calias.illegalFormatException": "Строка формата была либо неправильно сформирована, либо было предоставлено слишком мало аргументов", "commands.calias.listAliases.noAliasesRegistered": "Псевдонимы не зарегистрированы", "commands.calias.listAliases.success": "%s псевдонимы зарегистрированы:", "commands.calias.notFound": "Псевдоним \"%s\" не найден", @@ -45,14 +45,14 @@ "commands.ccalcstack.success.exact": "%s %s это ровно %s стаков", "commands.ccrackrng.failed": "Не удалось взломать сид игрока", - "commands.ccrackrng.failed.help": "Справка: Работа с Манипуляцией Рандомного Генератора Чисел не работает на некоторых модифицированных серверах, в частности на Paper.", + "commands.ccrackrng.failed.help": "Справка: Работа с Манипуляцией Рандомного Генератора Чисел не работает на некоторых модифицированных серверах, в частности на Paper", "commands.ccrackrng.retries": "Взлом сида игрока, попытка %s/%s", "commands.ccrackrng.starting": "Взлом сида игрока", "commands.ccrackrng.success": "Player RNG взломан: %s", "commands.ccreativetab.addStack.success": "Успешно добавлено %s в \"%s\"", "commands.ccreativetab.addTab.alreadyExists": "Группа элементов \"%s\" уже существует", - "commands.ccreativetab.addTab.illegalCharacter": "Группы элементов могут содержать только символы [a-z0-9/._-].", + "commands.ccreativetab.addTab.illegalCharacter": "Группы элементов могут содержать только символы [a-z0-9/._-]", "commands.ccreativetab.addTab.success": "Группа предметов успешно добавлена \"%s\"", "commands.ccreativetab.changeIcon.success": "Значок \"%s\" успешно изменен с %s на %s", "commands.ccreativetab.notFound": "Группа предметов \"%s\" не найдена", @@ -65,7 +65,7 @@ "commands.cenchant.failed": "Невозможно или это займет слишком много времени, чтобы получить эти чары", "commands.cenchant.incompatible": "Несовместимые чары", - "commands.cenchant.needEnchantingPrediction": "Эта команда требует, чтобы предсказание зачарования было включено.", + "commands.cenchant.needEnchantingPrediction": "Эта команда требует, чтобы предсказание зачарования было включено", "commands.cenchant.success": "Начало манипуляций с чарами", "commands.cenchant.uncracked": "Сид нужно взломать", @@ -88,9 +88,9 @@ "commands.cfish.error.collision": "Поплавок столкнулся с чем-то", "commands.cfish.error.crackFailed": "Не удалось взломать Рандомный Генератор Чисел поплавка, сервер модифицирован?", "commands.cfish.error.fire": "Рыболовный поплавок загорелся", - "commands.cfish.error.impossibleLoot": "Эту вещь нельзя получить с помощью рыбалки.", + "commands.cfish.error.impossibleLoot": "Эту вещь нельзя получить с помощью рыбалки", "commands.cfish.error.onGround": "Поплавок попал на землю", - "commands.cfish.error.openWater": "Рыболовный поплавок должен быть в открытой воде для добычи этих вещей.", + "commands.cfish.error.openWater": "Рыболовный поплавок должен быть в открытой воде для добычи этих вещей", "commands.cfish.error.openWater.lilyPad": "Справка: попробуйте закинуть поплавок под кувшинку", "commands.cfish.error.outOfWater": "Поплавок не в воде, манипуляции не сработают", "commands.cfish.help.tooManyEnchants": "Справка: несколько зачарований одновременно маловероятны, и их получение может занять много времени", @@ -115,7 +115,7 @@ "commands.cglow.entity.keepSearching.success": "Сущности подсвечены", "commands.cglow.entity.success": "Светящиеся объекты: %s", - "commands.chotbar.notCreative": "Игрок должен быть в творческом режиме, чтобы восстановить панели быстрого доступа к предметам.", + "commands.chotbar.notCreative": "Игрок должен быть в творческом режиме, чтобы восстановить панели быстрого доступа к предметам", "commands.chotbar.restoredHotbar": "Панели быстрого доступа восстановленно предметов %s", "commands.ckit.create.alreadyExists": "Набор \"%s\" уже существует", @@ -153,7 +153,7 @@ "commands.crelog.failed": "Не удалось повторно войти", - "commands.crender.entities.success": "Обновлены правила рендеринга сущностей.", + "commands.crender.entities.success": "Обновлены правила рендеринга сущностей", "commands.cstopsound.success.source.any": "Остановил все звуки '%s' ", "commands.cstopsound.success.source.sound": "Остановлен звук '%s' в источнике '%s' ", @@ -180,7 +180,7 @@ "commands.cuuid.success": "UUID %s равен %s", - "commands.cwiki.failed": "Не удалось получить содержимое вики.", + "commands.cwiki.failed": "Не удалось получить содержимое вики", "enchCrack.addInfo": "Добавить информацию", "enchCrack.clues": "Улики:", diff --git a/src/main/resources/assets/clientcommands/lang/sl_si.json b/src/main/resources/assets/clientcommands/lang/sl_si.json index 087c4a81..0778da08 100644 --- a/src/main/resources/assets/clientcommands/lang/sl_si.json +++ b/src/main/resources/assets/clientcommands/lang/sl_si.json @@ -11,9 +11,9 @@ "commands.cenchant.failed": "Nemogoče je ali bi trajalo pre dolgo, da bi dobile te čare", "commands.cenchant.incompatible": "Nezdružljivi čari", - "commands.cenchant.needEnchantingPrediction": "Ta ukaz zahteva, da je omogočeno predvidevanje čaranja.", + "commands.cenchant.needEnchantingPrediction": "Ta ukaz zahteva, da je omogočeno predvidevanje čaranja", "commands.cenchant.success": "Začatek manipulacije čaranja", - "commands.cenchant.uncracked": "Seme mora biti ugotovljeno.", + "commands.cenchant.uncracked": "Seme mora biti ugotovljeno", "commands.cfind.found": "Najdeno %s ob %s, %s blokov proč", "commands.cfind.noMatch": "Nič se ne ujema z vašo poizvedbo", @@ -24,7 +24,7 @@ "commands.cfinditem.match": "%sx %s najdeno ob %s", "commands.cfinditem.starting": "Iskati %s", - "commands.cfinditem.starting.keepSearching": "Neskončno iskanje za %s.", + "commands.cfinditem.starting.keepSearching": "Neskončno iskanje za %s", "commands.cfinditem.total": "Skupno najdeno %sx %s", "commands.client.blockpos": "(%s, %s, %s)", diff --git a/src/main/resources/assets/clientcommands/lang/zh_cn.json b/src/main/resources/assets/clientcommands/lang/zh_cn.json index 4e609c3d..1db65d26 100644 --- a/src/main/resources/assets/clientcommands/lang/zh_cn.json +++ b/src/main/resources/assets/clientcommands/lang/zh_cn.json @@ -4,7 +4,7 @@ "c2cpacket.messageC2CPacket.incoming": "%s -> 你:%s", "c2cpacket.messageC2CPacket.outgoing": "你 -> %s:%s", "c2cpacket.publicKeyNotFound": "未找到公共密匙", - "c2cpacket.receivedC2CPacket": "你收到了一个客户端到客户端数据包,但你不接受传入客户端到客户端的数据包!悬停以查看原始数据包。", + "c2cpacket.receivedC2CPacket": "你收到了一个客户端到客户端数据包,但你不接受传入客户端到客户端的数据包!悬停以查看原始数据包", "c2cpacket.sentC2CPacket": "你发送了一个客户端到客户端数据包,但你不接受传入客户端到客户端的数据包!", "chorusManip.goalTooFar": "目标过远!", @@ -54,7 +54,7 @@ "commands.ccalcstack.success.exact": "%s个%s是正好%s组", "commands.ccrackrng.failed": "破解玩家随机种子失败", - "commands.ccrackrng.failed.help": "提示:RNG控制并不在一些被修改过的服务器有效,特别是Paper端。", + "commands.ccrackrng.failed.help": "提示:RNG控制并不在一些被修改过的服务器有效,特别是Paper端", "commands.ccrackrng.retries": "正在破解玩家随机种子,尝试次数:%s/%s", "commands.ccrackrng.starting": "正在破解玩家随机种子", "commands.ccrackrng.success": "成功破解玩家随机种子:%s", diff --git a/src/main/resources/assets/clientcommands/lang/zh_tw.json b/src/main/resources/assets/clientcommands/lang/zh_tw.json index 3209dc4f..9a44ace2 100644 --- a/src/main/resources/assets/clientcommands/lang/zh_tw.json +++ b/src/main/resources/assets/clientcommands/lang/zh_tw.json @@ -5,7 +5,7 @@ "c2cpacket.messageC2CPacket.outgoing": "您 -> %s: %s", "c2cpacket.messageTooLong": "訊息過長(最多 255 個字元),已輸入 %s 個字元", "c2cpacket.publicKeyNotFound": "找不到公開金鑰", - "c2cpacket.receivedC2CPacket": "您收到了一個 C2C 封包,但您沒有接受接收 C2C 封包! 懸停以檢視原始封包。", + "c2cpacket.receivedC2CPacket": "您收到了一個 C2C 封包,但您沒有接受接收 C2C 封包! 懸停以檢視原始封包", "c2cpacket.sentC2CPacket": "您發送了一個 C2C 封包,但您沒有接受接收 C2C 封包!", "chorusManip.goalTooFar": "目標距離過遠!", @@ -55,7 +55,7 @@ "commands.ccalcstack.success.exact": "%s 個 %s 是正好 %s 組", "commands.ccrackrng.failed": "破譯玩家隨機種子失敗", - "commands.ccrackrng.failed.help": "說明: 隨機數操控在某些模組伺服器上無法運作,尤其是 Paper。", + "commands.ccrackrng.failed.help": "說明: 隨機數操控在某些模組伺服器上無法運作,尤其是 Paper", "commands.ccrackrng.retries": "正在破譯玩家隨機種子,嘗試 %s/%s", "commands.ccrackrng.starting": "正在破譯玩家隨機種子", "commands.ccrackrng.success": "玩家隨機種子已破譯: %s", @@ -76,12 +76,12 @@ "commands.cenchant.failed": "您請求的附魔無法獲得,或者需要太長時間", "commands.cenchant.help.uncrackedPlayerSeed": "說明: 您尚未完全破譯玩家隨機種子", "commands.cenchant.incompatible": "互斥的附魔", - "commands.cenchant.needEnchantingPrediction": "本指令需要啟用附魔預測。", + "commands.cenchant.needEnchantingPrediction": "本指令需要啟用附魔預測", "commands.cenchant.success": "正在開始操控附魔", - "commands.cenchant.uncracked": "您需要先破譯隨機種子。", + "commands.cenchant.uncracked": "您需要先破譯隨機種子", "commands.cfind.found": "在 %2$s 找到 %1$s,距離您 %3$s 格", - "commands.cfind.keepSearching.success": "找尋實體中。", + "commands.cfind.keepSearching.success": "找尋實體中", "commands.cfind.noMatch": "沒有實體符合您的搜尋條件", "commands.cfind.success": "%s 個實體符合您的搜尋條件", @@ -92,8 +92,8 @@ "commands.cfinditem.match": "在 %3$s 找到 %1$sx %2$s", "commands.cfinditem.match.entity": "在 %3$s 的 %4$s 找到 %1$sx %2$s", "commands.cfinditem.starting": "正在搜尋 %s", - "commands.cfinditem.starting.keepSearching": "正在持續搜尋 %s。", - "commands.cfinditem.total": "一共找到了 %s 個 %s 。", + "commands.cfinditem.starting.keepSearching": "正在持續搜尋 %s", + "commands.cfinditem.total": "一共找到了 %s 個 %s", "commands.cfish.addGoal.success": "成功新增目標 %s", "commands.cfish.correctLoot": "使用 %sms 校正得到目標戰利品", @@ -111,7 +111,7 @@ "commands.cfish.help.tooManyEnchants": "說明: 一次使用多個附魔的可能性很小,並且可能需要很長時間才能獲得", "commands.cfish.listGoals.noGoals": "沒有設定釣魚目標", "commands.cfish.listGoals.success": "已設定 %s 個釣魚目標:", - "commands.cfish.needFishingManipulation": "本指令需要啟用釣魚操控。", + "commands.cfish.needFishingManipulation": "本指令需要啟用釣魚操控", "commands.cfish.removeGoal.success": "成功移除目標 %s", "commands.cfish.wrongLoot": "使用 %sms 校正沒有得到目標戰利品,大約有 %s 個遊戲刻在前面", @@ -341,7 +341,7 @@ "playerManip.state.uncracked": "未破譯", "playerManip.state.waiting_dummy_enchant": "等待附魔其他物品", "playerManip.throwError": "條件不可行,或需要超過 %s 個物品拋出", - "playerManip.toolBreakWarning": "警告: 工具還有 %s 耐久度。", + "playerManip.toolBreakWarning": "警告: 工具還有 %s 耐久度", "playerManip.uncracked": "需要先破譯玩家隨機種子", "snakeGame.score": "分數: %s",