diff --git a/ru/currency-ru-widget.lua b/ru/currency-ru-widget.lua
new file mode 100644
index 0000000..bada1f7
--- /dev/null
+++ b/ru/currency-ru-widget.lua
@@ -0,0 +1,400 @@
+-- name = "Курсы валют ЦБ"
+-- description = "Виджет отображает курсы валют Центрального Банка России"
+-- data_source = "https://www.cbr.ru/"
+-- type = "widget"
+-- lang = "ru"
+-- author = "Andrey Gavrilov"
+-- version = "1.0"
+
+local cur = "USD"
+local base_cur = "RUB"
+local nominal = 1
+local cur_id = "R01235"
+local idx = 0
+local history = ""
+
+function on_alarm()
+ get_rates()
+end
+
+function on_click()
+ http:get("https://www.cbr.ru/scripts/XML_daily.asp","today")
+end
+
+function on_long_click()
+ if history == "" then
+ return
+ end
+ ui:show_dialog("История курсов ЦБ\n"..nominal.." "..cur.." / "..base_cur,history)
+end
+
+function on_settings()
+ local xml = require "xml"
+ local t = xml:parse(currencies)
+ local names = {}
+ for i,v in ipairs(t.Valuta.Item) do
+ table.insert(names,v.Name:value())
+ if v["@ID"] == cur_id then
+ idx = i
+ end
+ end
+ ui:show_radio_dialog("Выберите валюту",names,idx)
+end
+
+function on_dialog_action(data)
+ if data == -1 then
+ return
+ end
+ local xml = require "xml"
+ local t = xml:parse(currencies)
+ cur = t.Valuta.Item[data].ISO_Char_Code:value()
+ cur_id = t.Valuta.Item[data]["@ID"]
+ idx = data
+ get_rates()
+end
+
+function on_network_result_today(result,error)
+ local xml = require "xml"
+ local t = xml:parse(result)
+ local today = ""
+ local date_today = t.ValCurs["@Date"]
+ for i,v in ipairs(t.ValCurs.Valute) do
+ if i>1 then
+ today = today.."
"
+ end
+ today = today..v.Nominal:value().." "..v.CharCode:value().." = "..v.Value:value():replace(",",".").." "..base_cur
+ end
+ ui:show_dialog("Курсы валют ЦБ\n"..date_today,today)
+end
+
+function on_network_result_history(result,error)
+ history = ""
+ local color = ui:get_colors()
+ local equals = " = "
+ local xml = require "xml"
+ local t = xml:parse(result)
+ if t.ValCurs.Record == nil then
+ ui:show_text("Для валюты "..cur.." не заданы курсы")
+ return
+ end
+ local points = {}
+ local k=#t.ValCurs.Record
+ local dd = t.ValCurs.Record[1]["@Date"]:split(".")
+ nominal = t.ValCurs.Record[k].Nominal:value()
+ local tp = os.time{day=dd[1],month=dd[2],year=dd[3]} - 24*60*60
+ for i,v in ipairs(t.ValCurs.Record) do
+ dd = v["@Date"]:split(".")
+ local tm = os.time{day=dd[1],month=dd[2],year=dd[3]}
+ for tt=tp+24*60*60, tm, 24*60*60 do
+ local point = {}
+ table.insert(point,tt*1000)
+ table.insert(point,v.Value:value():replace(",",".")/v.Nominal:value()*nominal)
+ table.insert(points,point)
+ end
+ tp = tm
+ history = v["@Date"]..": "..nominal.." "..cur.." = "..v.Value:value():replace(",",".")/v.Nominal:value()*nominal.." "..base_cur..history
+ if i<#t.ValCurs.Record then
+ history = "
"..history
+ end
+ end
+ local ch = round((t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal-t.ValCurs.Record[k-1].Value:value():replace(",",".")/t.ValCurs.Record[k-1].Nominal:value()*nominal)/t.ValCurs.Record[k-1].Value:value():replace(",",".")*t.ValCurs.Record[k-1].Nominal:value()/nominal*100,2)
+ ui:show_chart(points,"x:date y:number",t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal.." "..base_cur,true,nominal.." "..cur..equals..t.ValCurs.Record[k].Value:value():replace(",",".")/t.ValCurs.Record[k].Nominal:value()*nominal.." "..base_cur.." "..get_formatted_change_text(ch))
+end
+
+function get_rates()
+ local date2 = os.date("%d/%m/%Y")
+ local dd = date2:split("/")
+ local t = os.time{day=dd[1],month=dd[2],year=dd[3]}-30*24*60*60
+ local date1 = os.date("%d/%m/%Y",t)
+ local str = "https://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="..date1.."&date_req2="..date2.."&VAL_NM_RQ="..cur_id
+ http:get(str,"history")
+end
+
+function get_formatted_change_text(change)
+ local color = ui:get_colors()
+ if change > 0 then
+ return " +"..change.."%"
+ elseif change < 0 then
+ return " "..change.."%"
+ else
+ return " "..change.."%"
+ end
+end
+
+currencies = [[
+
+
+-
+Австралийский доллар
+Australian Dollar
+1
+R01010
+36
+AUD
+
+-
+Азербайджанский манат
+Azerbaijan Manat
+1
+R01020
+944
+AZN
+
+-
+Фунт стерлингов Соединенного королевства
+British Pound Sterling
+1
+R01035
+826
+GBP
+
+-
+Армянский драм
+Armenia Dram
+1000
+R01060
+51
+AMD
+
+-
+Белорусский рубль
+Belarussian Ruble
+1
+R01090
+933
+BYN
+
+-
+Болгарский лев
+Bulgarian lev
+1
+R01100
+975
+BGN
+
+-
+Бразильский реал
+Brazil Real
+1
+R01115
+986
+BRL
+
+-
+Венгерский форинт
+Hungarian Forint
+100
+R01135
+348
+HUF
+
+-
+Гонконгский доллар
+Hong Kong Dollar
+10
+R01200
+344
+HKD
+
+-
+Датская крона
+Danish Krone
+10
+R01215
+208
+DKK
+
+-
+Доллар США
+US Dollar
+1
+R01235
+840
+USD
+
+-
+Евро
+Euro
+1
+R01239
+978
+EUR
+
+-
+Индийская рупия
+Indian Rupee
+100
+R01270
+356
+INR
+
+-
+Казахстанский тенге
+Kazakhstan Tenge
+100
+R01335
+398
+KZT
+
+-
+Канадский доллар
+Canadian Dollar
+1
+R01350
+124
+CAD
+
+-
+Киргизский сом
+Kyrgyzstan Som
+100
+R01370
+417
+KGS
+
+-
+Китайский юань
+China Yuan
+10
+R01375
+156
+CNY
+
+-
+Молдавский лей
+Moldova Lei
+10
+R01500
+498
+MDL
+
+-
+Норвежская крона
+Norwegian Krone
+10
+R01535
+578
+NOK
+
+-
+Польский злотый
+Polish Zloty
+1
+R01565
+985
+PLN
+
+-
+Румынский лей
+Romanian Leu
+10
+R01585
+946
+RON
+
+-
+СДР (специальные права заимствования)
+SDR
+1
+R01589
+960
+XDR
+
+-
+Сингапурский доллар
+Singapore Dollar
+1
+R01625
+702
+SGD
+
+-
+Таджикский сомони
+Tajikistan Ruble
+10
+R01670
+972
+TJS
+
+-
+Турецкая лира
+Turkish Lira
+1
+R01700
+949
+TRY
+
+-
+Новый туркменский манат
+New Turkmenistan Manat
+1
+R01710
+934
+TMT
+
+-
+Узбекский сум
+Uzbekistan Sum
+1000
+R01717
+860
+UZS
+
+-
+Украинская гривна
+Ukrainian Hryvnia
+10
+R01720
+980
+UAH
+
+-
+Чешская крона
+Czech Koruna
+10
+R01760
+203
+CZK
+
+-
+Шведская крона
+Swedish Krona
+10
+R01770
+752
+SEK
+
+-
+Швейцарский франк
+Swiss Franc
+1
+R01775
+756
+CHF
+
+-
+Южноафриканский рэнд
+S.African Rand
+10
+R01810
+710
+ZAR
+
+-
+Вон Республики Корея
+South Korean Won
+1000
+R01815
+410
+KRW
+
+-
+Японская иена
+Japanese Yen
+100
+R01820
+392
+JPY
+
+
+]]
\ No newline at end of file