mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 02:59:20 +01:00
189 lines
6.6 KiB
Lua
189 lines
6.6 KiB
Lua
|
|
local filesystem = require("Filesystem")
|
|
local json = require("JSON")
|
|
local internet = require("Internet")
|
|
local GUI = require("GUI")
|
|
local screen = require("Screen")
|
|
local image = require("Image")
|
|
local paths = require("Paths")
|
|
local system = require("System")
|
|
|
|
------------------------------------------------------------------------------------------------------------------
|
|
|
|
local resourcesPath = filesystem.path(system.getCurrentScript())
|
|
local configPath = paths.user.applicationData .. "Translate/Config.cfg"
|
|
local config = {
|
|
APIKey = "trnsl.1.1.20170831T153247Z.6ecf9d7198504994.8ce5a3aa9f9a2ecbe7b2377af37ffe5ad379f4ca",
|
|
fromLanguage = "Русский",
|
|
toLanguage = "Английский",
|
|
languages = {},
|
|
}
|
|
|
|
local function saveConfig()
|
|
filesystem.writeTable(configPath, config)
|
|
end
|
|
|
|
if filesystem.exists(configPath) then
|
|
config = filesystem.readTable(configPath)
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------
|
|
|
|
local workspace = GUI.workspace()
|
|
workspace:addChild(GUI.panel(1, 1, workspace.width, workspace.height, 0x1E1E1E))
|
|
local actionButtons = workspace:addChild(GUI.actionButtons(3, 2, true))
|
|
local layout = workspace:addChild(GUI.layout(1, 1, workspace.width, workspace.height, 1, 1))
|
|
|
|
local logo = layout:addChild(GUI.image(1, 1, image.load(resourcesPath .. "Logo.pic")))
|
|
local elementWidth = image.getWidth(logo.image)
|
|
layout:addChild(GUI.object(1, 1, 1, 1))
|
|
|
|
local fromLanguageContainer = layout:addChild(GUI.container(1, 1, elementWidth, 1))
|
|
local fromLanguageAutoDetectButton = fromLanguageContainer:addChild(GUI.adaptiveButton(1, 1, 2, 0, 0x2D2D2D, 0xBBBBBB, 0x666666, 0xBBBBBB, "Detect language"))
|
|
fromLanguageAutoDetectButton.localX = fromLanguageContainer.width - fromLanguageAutoDetectButton.width + 1
|
|
local fromComboBox = fromLanguageContainer:addChild(GUI.comboBox(1, 1, fromLanguageAutoDetectButton.localX - 3, 1, 0x2D2D2D, 0xAAAAAA, 0x444444, 0x888888))
|
|
local fromInputField = layout:addChild(GUI.input(1, 1, elementWidth, 5, 0x2D2D2D, 0x666666, 0x444444, 0x3C3C3C, 0xBBBBBB, nil, "Введите текст", true))
|
|
|
|
local switchButton = layout:addChild(GUI.adaptiveRoundedButton(1, 1, 3, 1, 0x2D2D2D, 0xBBBBBB, 0x666666, 0xBBBBBB, "←→"))
|
|
|
|
local toComboBox = layout:addChild(GUI.comboBox(1, 1, elementWidth, 1, 0x2D2D2D, 0xAAAAAA, 0x444444, 0x888888))
|
|
local toInputField = layout:addChild(GUI.input(1, 1, elementWidth, 5, 0x2D2D2D, 0x666666, 0x444444, 0x3C3C3C, 0xBBBBBB, nil, nil))
|
|
|
|
layout:addChild(GUI.label(1, 1, elementWidth, 1, 0xAAAAAA, "API Key:"):setAlignment(GUI.ALIGNMENT_HORIZONTAL_CENTER, GUI.ALIGNMENT_VERTICAL_TOP))
|
|
local APIKeyInputField = layout:addChild(GUI.input(1, 1, elementWidth, 1, 0x1E1E1E, 0x666666, 0x444444, 0x1E1E1E, 0xBBBBBB, config.APIKey, "Введите API Key", true))
|
|
|
|
local infoLabel = layout:addChild(GUI.label(1, 1, elementWidth, 1, 0xFF6D40, " "):setAlignment(GUI.ALIGNMENT_HORIZONTAL_CENTER, GUI.ALIGNMENT_VERTICAL_TOP))
|
|
|
|
------------------------------------------------------------------------------------------------------------------
|
|
|
|
local function status(text)
|
|
infoLabel.text = text
|
|
workspace:draw()
|
|
end
|
|
|
|
local function getLanguageIndex(text, short)
|
|
local type = short and 1 or 2
|
|
for i = 1, #config.languages do
|
|
if config.languages[i][type] == text then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
local function fillLanguages()
|
|
for i = 1, #config.languages do
|
|
fromComboBox:addItem(config.languages[i][2])
|
|
toComboBox:addItem(config.languages[i][2])
|
|
end
|
|
end
|
|
|
|
local function checkLanguages()
|
|
if #config.languages == 0 then
|
|
local result, reason = internet.request("https://translate.yandex.net/api/v1.5/tr.json/getLangs?key=" .. config.APIKey .. "&ui=ru")
|
|
if result then
|
|
fromComboBox:clear()
|
|
toComboBox:clear()
|
|
|
|
local yandexArray = json.decode(result)
|
|
for key, value in pairs(yandexArray.langs) do
|
|
table.insert(config.languages, {key, value})
|
|
end
|
|
table.sort(config.languages, function(a, b) return a[2] < b[2] end)
|
|
fillLanguages()
|
|
saveConfig()
|
|
else
|
|
error("Ошибка получения списка языков")
|
|
end
|
|
else
|
|
fillLanguages()
|
|
end
|
|
end
|
|
|
|
local function translate()
|
|
if unicode.len(fromInputField.text or "") > 0 then
|
|
status("Отправка запроса на перевод...")
|
|
|
|
local result, reason = internet.request(
|
|
"https://translate.yandex.net/api/v1.5/tr.json/translate?key=" .. config.APIKey ..
|
|
"&text=" .. internet.encode(fromInputField.text) ..
|
|
"&lang=" .. config.languages[getLanguageIndex(fromComboBox:getItem(fromComboBox.selectedItem).text, false)][1] .. "-" ..
|
|
config.languages[getLanguageIndex(toComboBox:getItem(toComboBox.selectedItem).text, false)][1]
|
|
)
|
|
|
|
if result then
|
|
toInputField.text = json.decode(result).text[1]
|
|
status(" ")
|
|
|
|
config.fromLanguage = fromComboBox:getItem(fromComboBox.selectedItem).text
|
|
config.toLanguage = toComboBox:getItem(toComboBox.selectedItem).text
|
|
saveConfig()
|
|
else
|
|
status("Ошибка во время запроса на перевод")
|
|
end
|
|
end
|
|
end
|
|
|
|
fromLanguageAutoDetectButton.onTouch = function()
|
|
if unicode.len(fromInputField.text or "") > 0 then
|
|
status("Отправка запроса на определение языка...")
|
|
|
|
local result, reason = internet.request(
|
|
"https://translate.yandex.net/api/v1.5/tr.json/detect?key=" .. config.APIKey ..
|
|
"&text=" .. internet.encode(fromInputField.text)
|
|
)
|
|
|
|
if result then
|
|
result = json.decode(result)
|
|
if result.lang then
|
|
fromComboBox.selectedItem = getLanguageIndex(result.lang, true)
|
|
translate()
|
|
else
|
|
status("Невозможно определить язык")
|
|
end
|
|
else
|
|
status("Ошибка во время запроса на определение языка")
|
|
end
|
|
end
|
|
end
|
|
|
|
actionButtons.close.onTouch = function()
|
|
workspace:stop()
|
|
end
|
|
|
|
switchButton.onTouch = function()
|
|
fromComboBox.selectedItem, toComboBox.selectedItem = toComboBox.selectedItem, fromComboBox.selectedItem
|
|
fromInputField.text, toInputField.text = toInputField.text, fromInputField.text
|
|
translate()
|
|
end
|
|
|
|
fromInputField.onInputFinished = function()
|
|
translate()
|
|
end
|
|
|
|
fromComboBox.onItemSelected = function()
|
|
translate()
|
|
end
|
|
|
|
toComboBox.onItemSelected = function()
|
|
translate()
|
|
end
|
|
|
|
APIKeyInputField.onInputFinished = function()
|
|
if APIKeyInputField.text then
|
|
config.APIKey = APIKeyInputField.text
|
|
translate()
|
|
saveConfig()
|
|
end
|
|
end
|
|
|
|
toInputField.eventHandler = nil
|
|
|
|
------------------------------------------------------------------------------------------------------------------
|
|
|
|
checkLanguages()
|
|
fromComboBox.selectedItem = getLanguageIndex(config.fromLanguage, false)
|
|
toComboBox.selectedItem = getLanguageIndex(config.toLanguage, false)
|
|
|
|
workspace:draw()
|
|
workspace:start()
|