Translate ui-apps.md via GitLocalize

This commit is contained in:
TheHawk
2026-04-07 12:38:34 +00:00
committed by gitlocalize-app[bot]
parent 2b64ab8d4b
commit 8b4569664d
+29 -28
View File
@@ -39,14 +39,14 @@ ui\modules\apps\ExampleApp\app.html
<span style="display: block">Messages:</span> <span style="display: block">Messages:</span>
<!-- Scroll Area --> <!-- Область прокрутки -->
<ul bng-nav-scroll style="margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;"> <ul bng-nav-scroll style="margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;">
<!-- Iterate over the messages and display them --> <!-- Перебор сообщений и их отображение -->
<li ng-repeat="message in messages track by $index" style="display: flex; align-items: center; height: 35px;"> <li ng-repeat="message in messages track by $index" style="display: flex; align-items: center; height: 35px;">
<span style="padding: 0 0.2em; width: 100%;">{{ message }}</span> <span style="padding: 0 0.2em; width: 100%;">{{ message }}</span>
<!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` --> <!-- Кнопка для удаления сообщения, вызывает функцию `deleteMessage` в `app.js` -->
<md-button md-no-ink class="md-icon-button md-warn" ng-click="deleteMessage($index)"> <md-button md-no-ink class="md-icon-button md-warn" ng-click="deleteMessage($index)">
<md-icon class="material-icons">delete</md-icon> <md-icon class="material-icons">delete</md-icon>
</md-button> </md-button>
@@ -56,7 +56,7 @@ ui\modules\apps\ExampleApp\app.html
</div> </div>
``` ```
Здесь вы можете увидеть тег `<span>` , отображающий передачу вашего транспортного средства, входные данные, используемые для отправки сообщения функции `sendMessage()` в Javascript, и повторяющийся тег `<li>` использующий <b>ng-repeat</b> для переменной `messages` , расположенной в Javascript. Здесь вы можете увидеть тег `<span>`, отображающий передачу вашего транспортного средства, входные данные, используемые для отправки сообщения функции `sendMessage()` в Javascript, и повторяющийся тег `<li>` использующий <b>ng-repeat</b> для переменной `messages`, расположенной в Javascript.
ui\modules\apps\ExampleApp\app.js ui\modules\apps\ExampleApp\app.js
@@ -74,7 +74,8 @@ angular.module('beamng.apps')
$scope.message = '' $scope.message = ''
$scope.messages = [] $scope.messages = []
// Setup the streams we want. For now, we only want the engine information. You can add more, you'll just have to look around to find the different streams // Настраиваем потоки, которые нам нужны. Пока что нам нужна только информация о двигателе.
// Можно добавить больше, нужно будет просто поискать доступные потоки.
let steamList = ['engineInfo'] let steamList = ['engineInfo']
StreamsManager.add(steamList) StreamsManager.add(steamList)
@@ -82,16 +83,16 @@ angular.module('beamng.apps')
StreamsManager.remove(steamList) StreamsManager.remove(steamList)
}) })
// Do I even need to put this comment here explaining what this function does? // Нужно ли вообще писать этот комментарий, объясняя, что делает эта функция?
// Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be... // Ну, я писал комментарии для многих других вещей, даже когда это было не нужно. Пусть уж этот останется...
$scope.$on('streamsUpdate', function(event, streams) { $scope.$on('streamsUpdate', function(event, streams) {
if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though if (!streams.engineInfo) // Ранний выход... Наверное, ты и без этого бесполезного комментария понял
return; return;
// `lua/vehicle/controller/vehicleController.lua:538` (or use console.log) // `lua/vehicle/controller/vehicleController.lua:538` (или можно использовать console.log)
let gear = streams.engineInfo[5] let gear = streams.engineInfo[5]
// Update the gear name in HTML if needed // Обновляем название передачи в HTML при необходимости
if ($scope.gearName !== gear) if ($scope.gearName !== gear)
$scope.gearName = gear $scope.gearName = gear
}) })
@@ -103,7 +104,7 @@ angular.module('beamng.apps')
if ($scope.message == '') if ($scope.message == '')
return return
// Forward the message to the Lua extension to modify it // Передаём сообщение в Lua-расширение, чтобы оно его изменило
bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")') bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")')
$scope.message = '' $scope.message = ''
} }
@@ -112,7 +113,7 @@ angular.module('beamng.apps')
$scope.messages.splice(idx, 1) $scope.messages.splice(idx, 1)
} }
// The `modifyMessage` function will call this hook with the modified data // Функция `modifyMessage` вызовет этот хук с изменёнными данными
$scope.$on('MessageReady', function(_, modifiedMessage) { $scope.$on('MessageReady', function(_, modifiedMessage) {
$scope.messages.push(modifiedMessage) $scope.messages.push(modifiedMessage)
}); });
@@ -121,7 +122,7 @@ angular.module('beamng.apps')
}]) }])
``` ```
Обратите внимание на использование <b>$scope{/b0} . Это очень важно, поскольку вам нужно будет определить переменные и функции в {b1}$scope</b> , чтобы иметь возможность доступа к ним из <b>Html</b> внутри любого тега <b>ng-*</b> . Таким образом, в этом примере после выполнения функции `sendMessage()` из <b>Html</b> она отправит его в файл lua, расположенный в каталоге расширений мода, и выполнит функцию `modifyMessage()` внутри этого файла lua. Обратите внимание на использование <b>$scope{/b0}. Это очень важно, поскольку вам нужно будет определить переменные и функции в {b1}$scope</b>, чтобы иметь возможность доступа к ним из <b>Html</b> внутри любого тега <b>ng-*</b>. Таким образом, в этом примере после выполнения функции `sendMessage()` из <b>Html</b> она отправит его в файл lua, расположенный в каталоге расширений мода, и выполнит функцию `modifyMessage()` внутри этого файла lua.
Пример того, как может выглядеть сторона lua: Пример того, как может выглядеть сторона lua:
@@ -134,7 +135,7 @@ end
^ Это упрощенная версия lua, просто показывающая функцию. ^ Это упрощенная версия lua, просто показывающая функцию.
Основное внимание здесь уделяется использованию <b>guihooks.trigger</b> , который запускает событие AngularJS, определенное с помощью `$scope.$on()` . Как вы можете видеть в самом низу файла Javascript, событие называется MessageReady и будет выполнено функцией <b>guihooks.trigger</b> с полезной нагрузкой сообщения, а затем будет помещено в переменную `$scope.messages` для отображения тегом li с помощью <b>ng-repeat</b> в файле <b>Html.</b> Основное внимание здесь уделяется использованию <b>guihooks.trigger</b>, который запускает событие AngularJS, определенное с помощью `$scope.$on()`. Как вы можете видеть в самом низу файла Javascript, событие называется MessageReady и будет выполнено функцией <b>guihooks.trigger</b> с полезной нагрузкой сообщения, а затем будет помещено в переменную `$scope.messages` для отображения тегом li с помощью <b>ng-repeat</b> в файле <b>Html</b>.
Полный файл lua находится ниже Полный файл lua находится ниже
@@ -144,15 +145,15 @@ lua\ge\extensions\exampleMod.lua
local M = {} local M = {}
--[[ --[[
This is the entry point of our extension, this is what the game loads from our `modScript.lua`. Это точка входа нашего расширения — именно её загружает игра из файла `modScript.lua`.
In the modScript file, you can load more extensions and put them in the same directory as this file. В файле modScript можно загружать больше расширений и помещать их в ту же директорию, что и этот файл.
In this file, we will communicate with the following: В этом файле мы будем взаимодействовать со следующими компонентами:
1. Our vehicle extension. That extension tells this extension when to send it data, and we send it. Take a look at `vehicle/extensions/auto/exampleVehicleExtension.lua` 1. Наше расширение для автомобиля. Оно сообщает этому расширению, когда нужно отправить данные, и мы их отправляем. См. `vehicle/extensions/auto/exampleVehicleExtension.lua`
2. Input. Take a look at `core/input/actions/myActions.json`. When the bounded key is pressed, it will call `onActionKeyDown` (a function we export below) 2. Ввод. См. `core/input/actions/myActions.json`. Когда привязанная клавиша нажата, вызывается `onActionKeyDown` (функция, экспортируемая ниже)
]] ]]
-- Game Function Hooks -- Хуки игровых функций
-------------------------------------------- --------------------------------------------
local function onExtensionLoaded() local function onExtensionLoaded()
log('D', "onExtensionLoaded", "Called") log('D', "onExtensionLoaded", "Called")
@@ -162,7 +163,7 @@ local function onExtensionUnloaded()
log('D', "onExtensionUnloaded", "Called") log('D', "onExtensionUnloaded", "Called")
end end
-- Custom Functions -- Пользовательские функции
-------------------------------------------- --------------------------------------------
local function onActionKeyDown() local function onActionKeyDown()
log('D', "onActionKeyDown", "Pressed!") log('D', "onActionKeyDown", "Pressed!")
@@ -171,8 +172,8 @@ end
local function onVehicleExtensionLoaded(vehID) local function onVehicleExtensionLoaded(vehID)
log('D', "onVehicleExtensionLoaded", "Sending some data to the vehicle") log('D', "onVehicleExtensionLoaded", "Sending some data to the vehicle")
local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle. local veh = be:getObjectByID(vehID) -- Если у вас нет ID, можно также использовать `be:getPlayerVehicle(0)`, чтобы получить текущий автомобиль.
if not veh then return end -- The usual error checking if not veh then return end -- Обычная проверка на ошибки
local data = { local data = {
["name"] = "Daniel W" ["name"] = "Daniel W"
@@ -186,7 +187,7 @@ local function modifyMessage(message)
guihooks.trigger('MessageReady', message) guihooks.trigger('MessageReady', message)
end end
-- Export Interface -- Экспорт интерфейса
-------------------------------------------- --------------------------------------------
M.onExtensionLoaded = onExtensionLoaded M.onExtensionLoaded = onExtensionLoaded
M.onExtensionUnloaded = onExtensionUnloaded M.onExtensionUnloaded = onExtensionUnloaded
@@ -195,13 +196,13 @@ M.onActionKeyDown = onActionKeyDown
M.onVehicleExtensionLoaded = onVehicleExtensionLoaded M.onVehicleExtensionLoaded = onVehicleExtensionLoaded
M.modifyMessage = modifyMessage M.modifyMessage = modifyMessage
--[[ Other functions could include: --[[ Другие функции могут включать:
- onPreRender(dtReal, dtSim, dtRaw) - onPreRender(dtReal, dtSim, dtRaw)
- onUpdate(dtReal, dtSim, dtRaw) - onUpdate(dtReal, dtSim, dtRaw)
- onClientPreStartMission(levelPath) - onClientPreStartMission(levelPath)
- onClientPostStartMission(levelPath) - onClientPostStartMission(levelPath)
To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(` Чтобы найти все возможные функции, выполните поиск в `BeamNG.Drive/lua` по следующему выражению: `extensions.hook(`
--]] --]]
return M return M
@@ -252,7 +253,7 @@ ui\modules\apps\ExampleApp\app.json
} }
``` ```
Директива должна быть такой же, как в файле <b>Javascript.</b> Директива должна быть такой же, как в файле <b>Javascript</b>
# Функции Javascript, предоставляемые BeamNG для UI-приложений # Функции Javascript, предоставляемые BeamNG для UI-приложений
@@ -260,7 +261,7 @@ ui\modules\apps\ExampleApp\app.json
bngApi.engineLua("lua_path.function()") bngApi.engineLua("lua_path.function()")
``` ```
Полезно для запуска функции lua с аргументами или без них. Полезно для запуска функции lua с аргументами или без них
# Функции Lua, предоставляемые BeamNG для UI-приложений # Функции Lua, предоставляемые BeamNG для UI-приложений