Russian (ru) language file (Localization)Solved
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["Help"] = "Список доступных команд:",
                ["HelpLicence1"] = "<color=#4DFF4D>/{0}</color> -- Купить транспорт",
                ["HelpLicence2"] = "<color=#4DFF4D>/{0}</color> -- Вызвать транспорт",
                ["HelpLicence3"] = "<color=#4DFF4D>/{0}</color> -- Вызвать повторно транспорт",
                ["HelpLicence4"] = "<color=#4DFF4D>/{0}</color> -- Уничтожить транспорт",
                ["HelpLicence5"] = "<color=#4DFF4D>/{0}</color> -- Купить, вызвать, или вызвать повторно транспорт",

                ["HelpBuy"] = "<color=#4DFF4D>/{0} {1}</color> -- Купить {2}. Цена: <color=#FF1919>{3}</color>",
                ["HelpSpawn"] = "<color=#4DFF4D>/{0} {1}</color> -- Вызвать {2}",
                ["HelpRecall"] = "<color=#4DFF4D>/{0} {1}</color> -- Вызвать повторно {2}",
                ["HelpKill"] = "<color=#4DFF4D>/{0} {1}</color> -- Уничтожить {2}",

                ["NotAllowed"] = "У вас нет разрешения для использования данной команды.",
                ["NotEnoughCost"] = "У вас недостаточно ресурсов, чтобы купить {0}. Не хватает:{1}",
                ["RaidBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (рейд)</color>.",
                ["CombatBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (бой)</color>.",
                ["OptionNotFound"] = "Эта '{0}' опция не существует.",
                ["VehiclePurchased"] = "Вы приобрели {0}, напишите <color=#4DFF4D>/{1}</color> для получения дополнительной информации.",
                ["VehicleAlreadyPurchased"] = "Вы уже приобрели {0}.",
                ["VehicleCannotBeBought"] = "{0} приобрести не возможно",
                ["VehicleNotOut"] = "{0} отсутствует.",
                ["AlreadyVehicleOut"] = "У вас уже есть {0}, напишите <color=#4DFF4D>/{1}</color>  для получения дополнительной информации.",
                ["VehicleNotYetPurchased"] = "Вы ещё не приобрели {0}.",
                ["VehicleSpawned"] = "Вы вызвали ваш {0}.",
                ["VehicleRecalled"] = "Вы повторно вызвали ваш {0}.",
                ["VehicleKilled"] = "Вы уничтожили ваш {0}.",
                ["VehicleOnCooldown"] = "Вам необходимо подождать {0} секунд, прежде чем вызвать ваш {1}.",
                ["NotLookingAtWater"] = "Вы должны смотреть на воду, чтобы вызвать или вызвать повторно {0}.",
                ["BuildingBlocked"] = "Вы не можете вызвать {0} если отсутствует право строительства.",
                ["RefundedVehicleFuel"] = "{0} топлива было возвращено в ваш инвентарь.",
                ["PlayerMountedOnVehicle"] = "Нельзя вызвать повторно, когда игрок находится в вашем {0}.",

                ["MountedOrParented"] = "Вы не можете вызвать транспорт когда сидите или привязаны к объекту.",
                ["RecallTooFar"] = "Вы должны быть в пределах {0} метров от {1}, чтобы вызвать повторно.",
            }, this, "ru");
While I was testing this plugin, I've noticed, that /recall instantly respawns vehicle, so I have changed the localisation file according to this, but as I can see it was a mistake. Shouldn't this command "despawn" the vehicle? Why it respawns vehicle?
However, here is correct variant:
lang.RegisterMessages(new Dictionary<string, string>
{
    ["Help"] = "Список доступных команд:",
    ["HelpLicence1"] = "<color=#4DFF4D>/{0}</color> -- Купить транспорт",
    ["HelpLicence2"] = "<color=#4DFF4D>/{0}</color> -- Вызвать транспорт",
    ["HelpLicence3"] = "<color=#4DFF4D>/{0}</color> -- Отозвать транспорт",
    ["HelpLicence4"] = "<color=#4DFF4D>/{0}</color> -- Уничтожить транспорт",
    ["HelpLicence5"] = "<color=#4DFF4D>/{0}</color> -- Купить, вызвать, или отозвать транспорт",

    ["HelpBuy"] = "<color=#4DFF4D>/{0} {1}</color> -- Купить {2}. Цена: <color=#FF1919>{3}</color>",
    ["HelpSpawn"] = "<color=#4DFF4D>/{0} {1}</color> -- Вызвать {2}",
    ["HelpRecall"] = "<color=#4DFF4D>/{0} {1}</color> -- Отозвать {2}",
    ["HelpKill"] = "<color=#4DFF4D>/{0} {1}</color> -- Уничтожить {2}",

    ["NotAllowed"] = "У вас нет разрешения для использования данной команды.",
    ["NotEnoughCost"] = "У вас недостаточно ресурсов, чтобы купить {0}. Не хватает:{1}",
    ["RaidBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (рейд)</color>.",
    ["CombatBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (бой)</color>.",
    ["OptionNotFound"] = "Эта '{0}' опция не существует.",
    ["VehiclePurchased"] = "Вы приобрели {0}, напишите <color=#4DFF4D>/{1}</color> для получения дополнительной информации.",
    ["VehicleAlreadyPurchased"] = "Вы уже приобрели {0}.",
    ["VehicleCannotBeBought"] = "{0} приобрести не возможно",
    ["VehicleNotOut"] = "{0} отсутствует.",
    ["AlreadyVehicleOut"] = "У вас уже есть {0}, напишите <color=#4DFF4D>/{1}</color>  для получения дополнительной информации.",
    ["VehicleNotYetPurchased"] = "Вы ещё не приобрели {0}.",
    ["VehicleSpawned"] = "Вы вызвали ваш {0}.",
    ["VehicleRecalled"] = "Вы отозвали ваш {0}.",
    ["VehicleKilled"] = "Вы уничтожили ваш {0}.",
    ["VehicleOnCooldown"] = "Вам необходимо подождать {0} секунд, прежде чем вызвать ваш {1}.",
    ["NotLookingAtWater"] = "Вы должны смотреть на воду, чтобы вызвать или отозвать {0}.",
    ["BuildingBlocked"] = "Вы не можете вызвать {0} если отсутствует право строительства.",
    ["RefundedVehicleFuel"] = "{0} топлива было возвращено в ваш инвентарь.",
    ["PlayerMountedOnVehicle"] = "Нельзя отозвать, когда игрок находится в вашем {0}.",

    ["MountedOrParented"] = "Вы не можете вызвать транспорт когда сидите или привязаны к объекту.",
    ["RecallTooFar"] = "Вы должны быть в пределах {0} метров от {1}, чтобы отозвать.",
}, this, "ru");​
The /recall command does not respawn vehicles, just moving the vehicle
So "/recall" is actually "/move" command?
In this case the correct variant is this:
lang.RegisterMessages(new Dictionary<string, string>
{
    ["Help"] = "Список доступных команд:",
    ["HelpLicence1"] = "<color=#4DFF4D>/{0}</color> -- Купить транспорт",
    ["HelpLicence2"] = "<color=#4DFF4D>/{0}</color> -- Вызвать транспорт",
    ["HelpLicence3"] = "<color=#4DFF4D>/{0}</color> -- Переместить транспорт",
    ["HelpLicence4"] = "<color=#4DFF4D>/{0}</color> -- Уничтожить транспорт",
    ["HelpLicence5"] = "<color=#4DFF4D>/{0}</color> -- Купить, вызвать, или переместить транспорт",

    ["HelpBuy"] = "<color=#4DFF4D>/{0} {1}</color> -- Купить {2}. Цена: <color=#FF1919>{3}</color>",
    ["HelpSpawn"] = "<color=#4DFF4D>/{0} {1}</color> -- Вызвать {2}",
    ["HelpRecall"] = "<color=#4DFF4D>/{0} {1}</color> -- Переместить {2}",
    ["HelpKill"] = "<color=#4DFF4D>/{0} {1}</color> -- Уничтожить {2}",

    ["NotAllowed"] = "У вас нет разрешения для использования данной команды.",
    ["NotEnoughCost"] = "У вас недостаточно ресурсов, чтобы купить {0}. Не хватает:{1}",
    ["RaidBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (рейд)</color>.",
    ["CombatBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (бой)</color>.",
    ["OptionNotFound"] = "Эта '{0}' опция не существует.",
    ["VehiclePurchased"] = "Вы приобрели {0}, напишите <color=#4DFF4D>/{1}</color> для получения дополнительной информации.",
    ["VehicleAlreadyPurchased"] = "Вы уже приобрели {0}.",
    ["VehicleCannotBeBought"] = "{0} приобрести не возможно",
    ["VehicleNotOut"] = "{0} отсутствует.",
    ["AlreadyVehicleOut"] = "У вас уже есть {0}, напишите <color=#4DFF4D>/{1}</color>  для получения дополнительной информации.",
    ["VehicleNotYetPurchased"] = "Вы ещё не приобрели {0}.",
    ["VehicleSpawned"] = "Вы вызвали ваш {0}.",
    ["VehicleRecalled"] = "Вы переместили ваш {0}.",
    ["VehicleKilled"] = "Вы уничтожили ваш {0}.",
    ["VehicleOnCooldown"] = "Вам необходимо подождать {0} секунд, прежде чем вызвать ваш {1}.",
    ["NotLookingAtWater"] = "Вы должны смотреть на воду, чтобы вызвать или переместить {0}.",
    ["BuildingBlocked"] = "Вы не можете вызвать {0} если отсутствует право строительства.",
    ["RefundedVehicleFuel"] = "{0} топлива было возвращено в ваш инвентарь.",
    ["PlayerMountedOnVehicle"] = "Нельзя переместить, когда игрок находится в вашем {0}.",

    ["MountedOrParented"] = "Вы не можете вызвать транспорт когда сидите или привязаны к объекту.",
    ["RecallTooFar"] = "Вы должны быть в пределах {0} метров от {1}, для перемещения.",
}, this, "ru");​


Merged post

 

lang.RegisterMessages(new Dictionary<string, string>
{
    ["Help"] = "Список доступных команд:",
    ["HelpLicence1"] = "<color=#4DFF4D>/{0}</color> -- Купить транспорт",
    ["HelpLicence2"] = "<color=#4DFF4D>/{0}</color> -- Вызвать транспорт",
    ["HelpLicence3"] = "<color=#4DFF4D>/{0}</color> -- Переместить транспорт",
    ["HelpLicence4"] = "<color=#4DFF4D>/{0}</color> -- Уничтожить транспорт",
    ["HelpLicence5"] = "<color=#4DFF4D>/{0}</color> -- Купить, вызвать, или переместить транспорт",

    ["HelpBuy"] = "<color=#4DFF4D>/{0} {1}</color> -- Купить {2}. Цена: <color=#FF1919>{3}</color>",
    ["HelpSpawn"] = "<color=#4DFF4D>/{0} {1}</color> -- Вызвать {2}",
    ["HelpRecall"] = "<color=#4DFF4D>/{0} {1}</color> -- Переместить {2}",
    ["HelpKill"] = "<color=#4DFF4D>/{0} {1}</color> -- Уничтожить {2}",

    ["NotAllowed"] = "У вас нет разрешения для использования данной команды.",
    ["NotEnoughCost"] = "У вас недостаточно ресурсов, чтобы купить {0}. Не хватает:{1}",
    ["RaidBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (рейд)</color>.",
    ["CombatBlocked"] = "<color=#FF1919>Вы не можете это сделать из-за блокировки (бой)</color>.",
    ["OptionNotFound"] = "Эта '{0}' опция не существует.",
    ["VehiclePurchased"] = "Вы приобрели {0}, напишите <color=#4DFF4D>/{1}</color> для получения дополнительной информации.",
    ["VehicleAlreadyPurchased"] = "Вы уже приобрели {0}.",
    ["VehicleCannotBeBought"] = "{0} приобрести не возможно",
    ["VehicleNotOut"] = "{0} отсутствует.",
    ["AlreadyVehicleOut"] = "У вас уже есть {0}, напишите <color=#4DFF4D>/{1}</color>  для получения дополнительной информации.",
    ["VehicleNotYetPurchased"] = "Вы ещё не приобрели {0}.",
    ["VehicleSpawned"] = "Вы вызвали ваш {0}.",
    ["VehicleRecalled"] = "Вы переместили ваш {0}.",
    ["VehicleKilled"] = "Вы уничтожили ваш {0}.",
    ["VehicleOnCooldown"] = "Вам необходимо подождать {0} секунд, прежде чем вызвать ваш {1}.",
    ["NotLookingAtWater"] = "Вы должны смотреть на воду, чтобы вызвать или переместить {0}.",
    ["BuildingBlocked"] = "Вы не можете вызвать {0} если отсутствует право строительства.",
    ["RefundedVehicleFuel"] = "Топливо из бака {0} было возвращено в ваш инвентарь.",
    ["PlayerMountedOnVehicle"] = "Нельзя переместить, когда игрок находится в вашем {0}.",

    ["MountedOrParented"] = "Вы не можете вызвать транспорт когда сидите или привязаны к объекту.",
    ["RecallTooFar"] = "Вы должны быть в пределах {0} метров от {1}, для перемещения.",
}, this, "ru");
Sorry, I modified the default language file. Could you please send me the new version of the Russian file? lol
lang.RegisterMessages(new Dictionary<string, string>
{
    ["AlreadyVehicleOut"] = "У вас уже есть <color=#FFA500>{0}</color>, напишите <color=#FFFF00>/{1}</color>  для получения дополнительной информации.",
    ["BuildingBlocked"] = "Вы не можете создать <color=#FFA500>{0}</color> если отсутствует право строительства.",
    ["CombatBlocked"] = "<color=#B22222>Вы не можете это сделать из-за блокировки (бой)</color>.",
    ["Help"] = "Список доступных команд:",
    ["HelpBuy"] = "<color=#FFFF00>/{0} {1}</color> -- Купить <color=#FFA500>{2}</color>.",
    ["HelpBuyPrice"] = "<color=#FFFF00>/{0} {1}</color> -- Купить <color=#009EFF>{2}</color>. Цена: <color=#FFA500>{3}</color>",
    ["HelpKill"] = "<color=#FFFF00>/{0} {1}</color> -- Уничтожить <color=#FFA500>{2}</color>",
    ["HelpLicence1"] = "<color=#FFFF00>/{0}</color> -- Купить транспорт",
    ["HelpLicence2"] = "<color=#FFFF00>/{0}</color> -- Создать транспорт",
    ["HelpLicence3"] = "<color=#FFFF00>/{0}</color> -- Вызвать транспорт",
    ["HelpLicence4"] = "<color=#FFFF00>/{0}</color> -- Уничтожить транспорт",
    ["HelpLicence5"] = "<color=#FFFF00>/{0}</color> -- Купить, создать, или вызвать <color=#FFA500>{1}</color>",
    ["HelpRecall"] = "<color=#FFFF00>/{0} {1}</color> -- Вызвать <color=#FFA500>{2}</color>",
    ["HelpRecallPrice"] = "<color=#FFFF00>/{0} {1}</color> -- Вызвать <color=#009EFF>{2}</color>. Цена: <color=#FFA500>{3}</color>",
    ["HelpSpawn"] = "<color=#FFFF00>/{0} {1}</color> -- Создать <color=#FFA500>{2}</color>",
    ["HelpSpawnPrice"] = "<color=#FFFF00>/{0} {1}</color> -- Вызывать <color=#FFA500>{2}</color>. Цена: <color=#FFA500>{3}</color>",
    ["MountedOrParented"] = "Вы не можете создать транспорт когда сидите или привязаны к объекту.",
    ["NoResourcesToPurchaseVehicle"] = "У вас недостаточно ресурсов для покупки <color=#FFA500>{0}</color>. Вам не хватает: <color=#FFA500>{1}</color>",
    ["NoResourcesToRecallVehicle"] = "У вас недостаточно ресурсов для покупки <color=#FFA500>{0}</color>. Вам не хватает: <color=#FFA500>{1}</color>",
    ["NoResourcesToSpawnVehicle"] = "У вас недостаточно ресурсов для покупки <color=#FFA500>{0}</color>. Вам не хватает: <color=#FFA500>{1}</color>",
    ["NotAllowed"] = "У вас нет разрешения для использования данной команды.",
    ["NotLookingAtWater"] = "Вы должны смотреть на воду, чтобы создать или вызвать <color=#FFA500>{0}</color>.",
    ["OptionNotFound"] = "Опция <color=#FFA500>{0}</color> не существует.",
    ["PlayerInSafeZone"] = "Вы не можете создать, или вызвать <color=#FFA500>{0}</color> в безопасной зоне.",
    ["PlayerMountedOnVehicle"] = "Нельзя вызвать, когда игрок находится в <color=#FFA500>{0}</color>.",
    ["RaidBlocked"] = "<color=#B22222>Вы не можете это сделать из-за блокировки (рейд)</color>.",
    ["RecallTooFar"] = "Вы должны быть в пределах <color=#FFA500>{0}</color> метров от <color=#FFA500>{1}</color>, чтобы вызывать.",
    ["RefundedVehicleItems"] = "Запчасти от <color=#FFA500>{0}</color> были возвращены в ваш инвентарь.",
    ["VehicleAlreadyPurchased"] = "Вы уже приобрели <color=#FFA500>{0}</color>.",
    ["VehicleCannotBeBought"] = "<color=#FFA500>{0}</color> приобрести невозможно",
    ["VehicleInventoryDropped"] = "Инвентарь из <color=#FFA500>{0}</color> не может быть вызван, он выброшен на землю.",
    ["VehicleKilled"] = "Вы уничтожили <color=#FFA500>{0}</color>.",
    ["VehicleNotOut"] = "<color=#FFA500>{0}</color> отсутствует. Напишите <color=#FFFF00>/{1}</color> для получения дополнительной информации.",
    ["VehicleNotYetPurchased"] = "Вы ещё не приобрели <color=#FFA500>{0}</color>. Напишите <color=#FFFF00>/{1}</color> для получения дополнительной информации.",
    ["VehicleOnRecallCooldown"] = "Вам необходимо подождать <color=#FFA500>{0}</color> секунд прежде, чем вызвать <color=#FFA500>{1}</color>.",
    ["VehicleOnSpawnCooldown"] = "Вам необходимо подождать <color=#FFA500>{0}</color> секунд прежде, чем создать <color=#FFA500>{1}</color>.",
    ["VehiclePurchased"] = "Вы приобрели <color=#FFA500>{0}</color>, напишите <color=#FFFF00>/{1}</color> для получения дополнительной информации.",
    ["VehicleRecalled"] = "Вы вызвали <color=#FFA500>{0}</color>.",
    ["VehicleSpawned"] = "Вы создали <color=#FFA500>{0}</color>.",
}, this, "ru");


I've translated "spawn" as "create" and "recall" as "call out" just to clarify the difference between those commands

Thank you for your great work.

P.S. i just want to mention something. It's not a big deal, but I will anyways xD
I think instead of having 2 different options
            [JsonProperty(PropertyName = "Chat Prefix")] public string prefix = "[VehicleLicense]: ";
            [JsonProperty(PropertyName = "Chat Prefix Color")] public string prefixColor = "#B366FF";


and printing this way

        private void Print(BasePlayer player, string message)
        {
            Player.Message(player, message,
                string.IsNullOrEmpty(configData.chatS.prefix)
                    ? string.Empty
                    : $"<color={configData.chatS.prefixColor}>{configData.chatS.prefix}</color>",
                configData.chatS.steamIDIcon);
        }


is great, but it's even better to change it to one option (with default color set)

            [JsonProperty(PropertyName = "Chat Prefix")] public string prefix = "<color=#B366FF>[VehicleLicense]:</color> ";


and use it this way

        private void Print(BasePlayer player, string message)
        {
            Player.Message(player, message,
                string.IsNullOrEmpty(configData.chatS.prefix)
                    ? string.Empty
                    : $"{configData.chatS.prefix}",
                configData.chatS.steamIDIcon);
        }

There are 2 main reasons this is better:
  1. You are able to have default colored prefix, if you like, without need to set "correct color"
                [JsonProperty(PropertyName = "Chat Prefix")] public string prefix = "[VehicleLicense]: ";​

    or you can have different colors in it (as many as you like)

                [JsonProperty(PropertyName = "Chat Prefix")] public string prefix = "<color=#9400D3>[</color><color=#B366FF>Vehicle</color> - License<color=#9400D3>]</color>: ";
  2. You can use any delimiter(s) you want and you can control will it(they) be painted, or not.
Of course it's up to you to decide. Like I said before, I appreciate your work and all your great plugins.
That's a good suggestion. Thank you
Locked automatically